commit
34a77c3051
|
@ -3,6 +3,8 @@ import FtToastEvents from '../../components/ft-toast/ft-toast-events'
|
|||
const state = {
|
||||
isSideNavOpen: false,
|
||||
sessionSearchHistory: [],
|
||||
popularCache: null,
|
||||
trendingCache: null,
|
||||
searchSettings: {
|
||||
sortBy: 'relevance',
|
||||
time: '',
|
||||
|
@ -42,6 +44,14 @@ const getters = {
|
|||
return state.sessionSearchHistory
|
||||
},
|
||||
|
||||
getPopularCache () {
|
||||
return state.popularCache
|
||||
},
|
||||
|
||||
getTrendingCache () {
|
||||
return state.trendingCache
|
||||
},
|
||||
|
||||
getSearchSettings () {
|
||||
return state.searchSettings
|
||||
}
|
||||
|
@ -261,6 +271,14 @@ const mutations = {
|
|||
}
|
||||
},
|
||||
|
||||
setPopularCache (state, value) {
|
||||
state.popularCache = value
|
||||
},
|
||||
|
||||
setTrendingCache (state, value) {
|
||||
state.trendingCache = value
|
||||
},
|
||||
|
||||
setSearchSortBy (state, value) {
|
||||
state.searchSettings.sortBy = value
|
||||
},
|
||||
|
|
|
@ -4,6 +4,12 @@
|
|||
margin-bottom: 60px;
|
||||
}
|
||||
|
||||
.floatingTopButton {
|
||||
position: absolute;
|
||||
top: 70px;
|
||||
right: 10px;
|
||||
}
|
||||
|
||||
@media only screen and (max-width: 680px) {
|
||||
.card {
|
||||
width: 90%;
|
||||
|
|
|
@ -2,13 +2,15 @@ import Vue from 'vue'
|
|||
import FtLoader from '../../components/ft-loader/ft-loader.vue'
|
||||
import FtCard from '../../components/ft-card/ft-card.vue'
|
||||
import FtElementList from '../../components/ft-element-list/ft-element-list.vue'
|
||||
import FtIconButton from '../../components/ft-icon-button/ft-icon-button.vue'
|
||||
|
||||
export default Vue.extend({
|
||||
name: 'Popular',
|
||||
components: {
|
||||
'ft-loader': FtLoader,
|
||||
'ft-card': FtCard,
|
||||
'ft-element-list': FtElementList
|
||||
'ft-element-list': FtElementList,
|
||||
'ft-icon-button': FtIconButton
|
||||
},
|
||||
data: function () {
|
||||
return {
|
||||
|
@ -16,35 +18,42 @@ export default Vue.extend({
|
|||
shownResults: []
|
||||
}
|
||||
},
|
||||
computed: {
|
||||
popularCache: function () {
|
||||
return this.$store.getters.getPopularCache
|
||||
}
|
||||
},
|
||||
mounted: function () {
|
||||
this.getTrendingInfo()
|
||||
this.shownResults = this.popularCache
|
||||
if (!this.shownResults || this.shownResults.length < 1) {
|
||||
this.fetchPopularInfo()
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
getTrendingInfo: function () {
|
||||
this.isLoading = true
|
||||
|
||||
fetchPopularInfo: async function () {
|
||||
const searchPayload = {
|
||||
resource: 'popular',
|
||||
id: '',
|
||||
params: {}
|
||||
}
|
||||
|
||||
this.$store.dispatch('invidiousAPICall', searchPayload).then((result) => {
|
||||
if (!result) {
|
||||
return
|
||||
}
|
||||
|
||||
console.log(result)
|
||||
|
||||
const returnData = result.filter((item) => {
|
||||
return item.type === 'video' || item.type === 'shortVideo' || item.type === 'channel' || item.type === 'playlist'
|
||||
})
|
||||
|
||||
this.shownResults = this.shownResults.concat(returnData)
|
||||
this.isLoading = false
|
||||
}).catch((err) => {
|
||||
this.isLoading = true
|
||||
const result = await this.$store.dispatch('invidiousAPICall', searchPayload).catch((err) => {
|
||||
console.log(err)
|
||||
})
|
||||
|
||||
if (!result) {
|
||||
this.isLoading = false
|
||||
return
|
||||
}
|
||||
|
||||
console.log(result)
|
||||
|
||||
this.shownResults = result.filter((item) => {
|
||||
return item.type === 'video' || item.type === 'shortVideo' || item.type === 'channel' || item.type === 'playlist'
|
||||
})
|
||||
this.isLoading = false
|
||||
this.$store.commit('setPopularCache', this.shownResults)
|
||||
}
|
||||
}
|
||||
})
|
||||
|
|
|
@ -13,6 +13,13 @@
|
|||
:data="shownResults"
|
||||
/>
|
||||
</ft-card>
|
||||
<ft-icon-button
|
||||
icon="sync"
|
||||
class="floatingTopButton"
|
||||
:size="12"
|
||||
theme="primary"
|
||||
@click="fetchPopularInfo"
|
||||
/>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
|
|
|
@ -4,6 +4,12 @@
|
|||
margin-bottom: 60px;
|
||||
}
|
||||
|
||||
.floatingTopButton {
|
||||
position: absolute;
|
||||
top: 70px;
|
||||
right: 10px;
|
||||
}
|
||||
|
||||
@media only screen and (max-width: 680px) {
|
||||
.card {
|
||||
width: 90%;
|
||||
|
|
|
@ -2,6 +2,7 @@ import Vue from 'vue'
|
|||
import FtCard from '../../components/ft-card/ft-card.vue'
|
||||
import FtLoader from '../../components/ft-loader/ft-loader.vue'
|
||||
import FtElementList from '../../components/ft-element-list/ft-element-list.vue'
|
||||
import FtIconButton from '../../components/ft-icon-button/ft-icon-button.vue'
|
||||
|
||||
import ytrend from 'yt-trending-scraper'
|
||||
|
||||
|
@ -10,7 +11,8 @@ export default Vue.extend({
|
|||
components: {
|
||||
'ft-card': FtCard,
|
||||
'ft-loader': FtLoader,
|
||||
'ft-element-list': FtElementList
|
||||
'ft-element-list': FtElementList,
|
||||
'ft-icon-button': FtIconButton
|
||||
},
|
||||
data: function () {
|
||||
return {
|
||||
|
@ -30,23 +32,34 @@ export default Vue.extend({
|
|||
},
|
||||
invidiousInstance: function () {
|
||||
return this.$store.getters.getInvidiousInstance
|
||||
},
|
||||
trendingCache () {
|
||||
return this.$store.getters.getTrendingCache
|
||||
}
|
||||
},
|
||||
mounted: function () {
|
||||
if (!this.usingElectron) {
|
||||
this.getVideoInformationInvidious()
|
||||
if (this.trendingCache && this.trendingCache.length > 0) {
|
||||
this.shownResults = this.trendingCache
|
||||
} else {
|
||||
switch (this.backendPreference) {
|
||||
case 'local':
|
||||
this.getTrendingInfoLocal()
|
||||
break
|
||||
case 'invidious':
|
||||
this.getTrendingInfoInvidious()
|
||||
break
|
||||
}
|
||||
this.getTrendingInfo()
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
getTrendingInfo () {
|
||||
if (!this.usingElectron) {
|
||||
this.getVideoInformationInvidious()
|
||||
} else {
|
||||
switch (this.backendPreference) {
|
||||
case 'local':
|
||||
this.getTrendingInfoLocal()
|
||||
break
|
||||
case 'invidious':
|
||||
this.getTrendingInfoInvidious()
|
||||
break
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
getTrendingInfoLocal: function () {
|
||||
this.isLoading = true
|
||||
|
||||
|
@ -59,6 +72,7 @@ export default Vue.extend({
|
|||
|
||||
this.shownResults = this.shownResults.concat(returnData)
|
||||
this.isLoading = false
|
||||
this.$store.commit('setTrendingCache', this.shownResults)
|
||||
}).catch((err) => {
|
||||
console.log(err)
|
||||
const errorMessage = this.$t('Local API Error (Click to copy)')
|
||||
|
@ -102,6 +116,7 @@ export default Vue.extend({
|
|||
|
||||
this.shownResults = this.shownResults.concat(returnData)
|
||||
this.isLoading = false
|
||||
this.$store.commit('setTrendingCache', this.shownResults)
|
||||
}).catch((err) => {
|
||||
console.log(err)
|
||||
const errorMessage = this.$t('Invidious API Error (Click to copy)')
|
||||
|
|
|
@ -13,6 +13,13 @@
|
|||
:data="shownResults"
|
||||
/>
|
||||
</ft-card>
|
||||
<ft-icon-button
|
||||
icon="sync"
|
||||
class="floatingTopButton"
|
||||
:size="12"
|
||||
theme="primary"
|
||||
@click="getTrendingInfo"
|
||||
/>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
|
|
Loading…
Reference in New Issue