FreeTube/src/renderer/store/modules/ytdl.js

158 lines
4.4 KiB
JavaScript
Raw Normal View History

2020-02-16 19:30:00 +01:00
import ytdl from 'ytdl-core'
import ytsr from 'ytsr'
import ytpl from 'ytpl'
import IsEqual from 'lodash.isequal'
2020-02-16 19:30:00 +01:00
const state = {
main: 0,
isYtSearchRunning: false
}
const getters = {
getMain ({ state }) {
return state.main
}
}
const actions = {
ytSearch ({ commit, dispatch, rootState }, payload) {
2020-02-16 19:30:00 +01:00
console.log('Performing search please wait...')
return new Promise((resolve, reject) => {
if (state.isYtSearchRunning) {
console.log('search is running. please try again')
resolve(false)
}
const defaultFilters = {
sortBy: 'relevance',
time: '',
type: 'all',
duration: ''
}
2020-02-16 19:30:00 +01:00
commit('toggleIsYtSearchRunning')
if (!IsEqual(defaultFilters, rootState.utils.searchSettings)) {
dispatch('ytSearchGetFilters', payload).then((filter) => {
if (typeof (payload.options.nextpageRef) === 'undefined' && filter !== payload.query) {
payload.options.nextpageRef = filter
}
2020-02-16 19:30:00 +01:00
2020-09-13 02:36:02 +02:00
ytsr(payload.query, payload.options).then((result) => {
console.log(result)
console.log('done')
resolve(result)
}).catch((err) => {
console.log(err)
reject(err)
}).finally(() => {
commit('toggleIsYtSearchRunning')
})
2020-10-21 17:23:40 +02:00
}).catch((err) => {
console.log(err)
reject(err)
})
} else {
2020-09-13 02:36:02 +02:00
ytsr(payload.query, payload.options).then((result) => {
console.log(result)
console.log('done')
resolve(result)
}).catch((err) => {
console.log(err)
reject(err)
}).finally(() => {
2020-02-16 19:30:00 +01:00
commit('toggleIsYtSearchRunning')
})
}
2020-02-16 19:30:00 +01:00
})
},
ytSearchGetFilters ({ rootState }, payload) {
2020-10-21 17:23:40 +02:00
return new Promise((resolve, reject) => {
2020-02-16 19:30:00 +01:00
let filter = payload.query
let searchSettings = payload.searchSettings
if (typeof (searchSettings) === 'undefined') {
searchSettings = rootState.utils.searchSettings
}
console.log(searchSettings)
// This is extremely ugly, though this is the recommended way to accomplish this
// in the GitHub documentation
console.log(`Current ref: ${filter}`)
ytsr.getFilters(filter).then((filters) => {
if (searchSettings.type !== 'all') {
filter = filters.get('Type').find(o => o.name.toLowerCase().includes(rootState.utils.searchSettings.type)).ref
}
console.log(`Current ref: ${filter}`)
ytsr.getFilters(filter).then((filters) => {
if (searchSettings.time !== '') {
filter = filters.get('Upload date').find(o => o.name.toLowerCase().includes(rootState.utils.searchSettings.time)).ref
}
console.log(`Current ref: ${filter}`)
ytsr.getFilters(filter).then((filters) => {
if (searchSettings.duration !== '') {
filter = filters.get('Duration').find(o => o.name.toLowerCase().includes(rootState.utils.searchSettings.duration)).ref
}
console.log(`Current ref: ${filter}`)
ytsr.getFilters(filter).then((filters) => {
if (searchSettings.sortBy !== 'relevance') {
const sortBy = rootState.utils.searchSettings.sortBy.replace('_', ' ')
filter = filters.get('Sort by').find(o => o.name.toLowerCase().includes(sortBy)).ref
}
console.log(`Final ref: ${filter}`)
resolve(filter)
})
})
})
2020-10-21 17:23:40 +02:00
}).catch((err) => {
reject(err)
2020-02-16 19:30:00 +01:00
})
})
},
ytGetPlaylistInfo (_, playlistId) {
2020-02-16 19:30:00 +01:00
return new Promise((resolve, reject) => {
console.log(playlistId)
console.log('Getting playlist info please wait...')
2020-10-06 23:38:38 +02:00
ytpl(playlistId, { limit: 'Infinity' }).then((result) => {
2020-09-13 02:36:02 +02:00
resolve(result)
}).catch((err) => {
reject(err)
2020-02-16 19:30:00 +01:00
})
})
},
2020-09-13 02:36:02 +02:00
ytGetVideoInformation (_, videoId) {
2020-02-16 19:30:00 +01:00
return new Promise((resolve, reject) => {
console.log('Getting video info please wait...')
ytdl.getInfo(videoId, {
lang: localStorage.getItem('locale')
}).then((result) => {
resolve(result)
}).catch((err) => {
reject(err)
2020-02-16 19:30:00 +01:00
})
})
}
}
const mutations = {
toggleIsYtSearchRunning (state) {
state.isYtSearchRunning = !state.isYtSearchRunning
}
}
export default {
state,
getters,
actions,
mutations
}