Newer
Older
import axios from 'axios'
import moment from 'moment'
export default {
namespaced: true,
state: {
currentLanguage: 'en_US',
selectedLanguage: false,
queueFocused: null,
momentLocale: 'en',
lastDate: new Date(),
maxMessages: 100,
messageDisplayDuration: 10000,
pendingReviewReports: 0,
},
websocketEventsHandlers: {
'inbox.item_added': {},
'import.status_updated': {},
'mutation.created': {},
'mutation.updated': {},
'report.created': {},
pageTitle: null,
routePreferences: {
"library.albums.browse": {
paginateBy: 25,
orderingDirection: "-",
ordering: "creation_date",
},
"library.artists.browse": {
paginateBy: 30,
orderingDirection: "-",
ordering: "creation_date",
},
"library.radios.browse": {
paginateBy: 12,
orderingDirection: "-",
ordering: "creation_date",
},
"library.playlists.browse": {
paginateBy: 25,
orderingDirection: "-",
ordering: "creation_date",
},
"library.albums.me": {
paginateBy: 25,
orderingDirection: "-",
ordering: "creation_date",
},
"library.artists.me": {
paginateBy: 30,
orderingDirection: "-",
ordering: "creation_date",
},
"library.radios.me": {
paginateBy: 12,
orderingDirection: "-",
ordering: "creation_date",
},
"library.playlists.me": {
paginateBy: 25,
orderingDirection: "-",
ordering: "creation_date",
},
"content.libraries.files": {
paginateBy: 50,
orderingDirection: "-",
ordering: "creation_date",
},
"content.libraries.detail": {
paginateBy: 50,
orderingDirection: "-",
ordering: "creation_date",
},
serviceWorker: {
refreshing: false,
registration: null,
updateAvailable: false,
}
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
getters: {
showInstanceSupportMessage: (state, getters, rootState) => {
if (!rootState.auth.profile) {
return false
}
if (!rootState.instance.settings.instance.support_message.value) {
return false
}
let displayDate = rootState.auth.profile.instance_support_message_display_date
if (!displayDate) {
return false
}
return moment(displayDate) < moment(state.lastDate)
},
showFunkwhaleSupportMessage: (state, getters, rootState) => {
if (!rootState.auth.profile) {
return false
}
if (!rootState.instance.settings.instance.funkwhale_support_message_enabled.value) {
return false
}
let displayDate = rootState.auth.profile.funkwhale_support_message_display_date
if (!displayDate) {
return false
}
return moment(displayDate) < moment(state.lastDate)
},
additionalNotifications: (state, getters) => {
let count = 0
if (getters.showInstanceSupportMessage) {
count += 1
}
if (getters.showFunkwhaleSupportMessage) {
count += 1
}
return count
}
},
addWebsocketEventHandler: (state, {eventName, id, handler}) => {
state.websocketEventsHandlers[eventName][id] = handler
},
removeWebsocketEventHandler: (state, {eventName, id}) => {
delete state.websocketEventsHandlers[eventName][id]
},
currentLanguage: (state, value) => {
state.currentLanguage = value
state.selectedLanguage = true
momentLocale: (state, value) => {
state.momentLocale = value
moment.locale(value)
},
computeLastDate: (state) => {
state.lastDate = new Date()
queueFocused: (state, value) => {
state.queueFocused = value
},
theme: (state, value) => {
state.theme = value
},
addMessage (state, message) {
state.messages.push(message)
if (state.messages.length > state.maxMessages) {
state.messages.shift()
}
},
notifications (state, {type, count}) {
state.notifications[type] = count
incrementNotifications (state, {type, count, value}) {
if (value != undefined) {
state.notifications[type] = Math.max(0, value)
} else {
state.notifications[type] = Math.max(0, state.notifications[type] + count)
}
},
pageTitle: (state, value) => {
state.pageTitle = value
},
paginateBy: (state, {route, value}) => {
state.routePreferences[route].paginateBy = value
},
ordering: (state, {route, value}) => {
state.routePreferences[route].ordering = value
},
orderingDirection: (state, {route, value}) => {
state.routePreferences[route].orderingDirection = value
},
serviceWorker: (state, value) => {
state.serviceWorker = {...state.serviceWorker, ...value}
}
},
actions: {
fetchUnreadNotifications ({commit}, payload) {
axios.get('federation/inbox/', {params: {is_read: false, page_size: 1}}).then((response) => {
commit('notifications', {type: 'inbox', count: response.data.count})
fetchPendingReviewEdits ({commit, rootState}, payload) {
axios.get('mutations/', {params: {is_approved: 'null', page_size: 1}}).then((response) => {
commit('notifications', {type: 'pendingReviewEdits', count: response.data.count})
})
},
fetchPendingReviewReports ({commit, rootState}, payload) {
axios.get('manage/moderation/reports/', {params: {is_handled: 'false', page_size: 1}}).then((response) => {
commit('notifications', {type: 'pendingReviewReports', count: response.data.count})
})
},
websocketEvent ({state}, event) {
let handlers = state.websocketEventsHandlers[event.type]
console.log('Dispatching websocket event', event, handlers)
let names = Object.keys(handlers)
names.forEach((k) => {
let handler = handlers[k]
handler(event)