diff --git a/src/components/SubscriptionListItem.vue b/src/components/SubscriptionListItem.vue
new file mode 100644
index 0000000..3be7459
--- /dev/null
+++ b/src/components/SubscriptionListItem.vue
@@ -0,0 +1,54 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/src/modules/subscriptions.js b/src/modules/subscriptions.js
index 0fcaced..aea5e1d 100644
--- a/src/modules/subscriptions.js
+++ b/src/modules/subscriptions.js
@@ -6,45 +6,15 @@ export const subscriptions = {
state: {
subscriptions: [],
},
- getters: {
- sortedSubscriptions: (state) => state.subscriptions.concat().sort((a, b) => {
- if (a.title && b.title) return a.title.localeCompare(b.title)
- return a.id - b.id
- }),
- },
mutations: {
- reset: (state) => {
- state.subscriptions = []
- },
- add: (state, subscription) => {
- const subscriptionId = state.subscriptions.findIndex(sub => sub.url === subscription.url)
-
- if (subscriptionId === -1) {
- state.subscriptions.push(subscription)
- } else {
- state.subscriptions[subscriptionId] = subscription
- }
+ set: (state, subscriptions) => {
+ state.subscriptions = subscriptions
},
},
actions: {
fetch: async (context) => {
- context.commit('reset')
const metrics = await axios.get(generateUrl('/apps/gpoddersync/personal_settings/metrics'))
- for (const subscriptionId in metrics.data.subscriptions) {
- context.commit('add', {
- id: subscriptionId,
- url: metrics.data.subscriptions[subscriptionId].url,
- loading: true,
- })
- }
- for (const subscription of context.state.subscriptions) {
- try {
- const podcasts = await axios.get(generateUrl('/apps/gpoddersync/personal_settings/podcast_data?url={url}', { url: subscription.url }))
- context.commit('add', { ...podcasts.data.data, ...subscription, ...{ loading: false } })
- } catch (e) {
- console.error(e)
- }
- }
+ context.commit('set', metrics.data.subscriptions.map(sub => sub.url))
},
},
}
diff --git a/src/views/Index.vue b/src/views/Index.vue
index 08af296..f3228d7 100644
--- a/src/views/Index.vue
+++ b/src/views/Index.vue
@@ -11,17 +11,9 @@
-
-
-
-
-
+
@@ -36,11 +28,11 @@ import {
NcAppContent,
NcAppContentList,
NcAppNavigation,
- NcAppNavigationItem,
NcAppNavigationNew,
NcLoadingIcon,
} from '@nextcloud/vue'
import Plus from 'vue-material-design-icons/Plus.vue'
+import SubscriptionListItem from '../components/SubscriptionListItem.vue'
import { showError } from '@nextcloud/dialogs'
export default {
@@ -49,10 +41,10 @@ export default {
NcAppContent,
NcAppContentList,
NcAppNavigation,
- NcAppNavigationItem,
NcAppNavigationNew,
NcLoadingIcon,
Plus,
+ SubscriptionListItem,
},
data() {
return {
@@ -61,7 +53,7 @@ export default {
},
computed: {
subscriptions() {
- return this.$store.getters['subscriptions/sortedSubscriptions']
+ return this.$store.state.subscriptions.subscriptions
},
},
async mounted() {
@@ -70,8 +62,9 @@ export default {
} catch (e) {
console.error(e)
showError(t('Could not fetch subscriptions'))
+ } finally {
+ this.loading = false
}
- this.loading = false
},
}