mirror of
https://github.com/advplyr/audiobookshelf-app.git
synced 2026-08-29 14:47:21 +02:00
Network connection no longer requires internet connection. Socket connection status is used instead for checking if server is reachable. If there is no socket connection available eq. before connecting to server then connection type is used to for netrork connection check.
196 lines
6.0 KiB
JavaScript
196 lines
6.0 KiB
JavaScript
import { Network } from '@capacitor/network'
|
|
import { AbsAudioPlayer } from '@/plugins/capacitor'
|
|
import { PlayMethod } from '@/plugins/constants'
|
|
|
|
export const state = () => ({
|
|
deviceData: null,
|
|
currentPlaybackSession: null,
|
|
playerIsPlaying: false,
|
|
playerIsFullscreen: false,
|
|
playerIsStartingPlayback: false, // When pressing play before native play response
|
|
playerStartingPlaybackMediaId: null,
|
|
isCasting: false,
|
|
isCastAvailable: false,
|
|
attemptingConnection: false,
|
|
socketConnected: false,
|
|
networkConnected: false,
|
|
networkConnectionType: null,
|
|
isNetworkUnmetered: true,
|
|
isFirstLoad: true,
|
|
isFirstAudioLoad: true,
|
|
hasStoragePermission: false,
|
|
selectedLibraryItem: null,
|
|
showReader: false,
|
|
ereaderKeepProgress: false,
|
|
ereaderFileId: null,
|
|
showSideDrawer: false,
|
|
isNetworkListenerInit: false,
|
|
serverSettings: null,
|
|
lastBookshelfScrollData: {},
|
|
lastItemScrollData: {}
|
|
})
|
|
|
|
export const getters = {
|
|
getCurrentPlaybackSessionId: (state) => {
|
|
return state.currentPlaybackSession?.id || null
|
|
},
|
|
getIsPlayerOpen: (state) => {
|
|
return !!state.currentPlaybackSession
|
|
},
|
|
getIsCurrentSessionLocal: (state) => {
|
|
return state.currentPlaybackSession?.playMethod == PlayMethod.LOCAL
|
|
},
|
|
getIsMediaStreaming: (state) => (libraryItemId, episodeId) => {
|
|
if (!state.currentPlaybackSession || !libraryItemId) return false
|
|
|
|
// Check using local library item id and local episode id
|
|
const isLocalLibraryItemId = libraryItemId.startsWith('local_')
|
|
if (isLocalLibraryItemId) {
|
|
if (state.currentPlaybackSession.localLibraryItem?.id !== libraryItemId) {
|
|
return false
|
|
}
|
|
if (!episodeId) return true
|
|
return state.currentPlaybackSession.localEpisodeId === episodeId
|
|
}
|
|
|
|
if (state.currentPlaybackSession.libraryItemId !== libraryItemId) {
|
|
return false
|
|
}
|
|
if (!episodeId) return true
|
|
return state.currentPlaybackSession.episodeId === episodeId
|
|
},
|
|
getServerSetting: (state) => (key) => {
|
|
if (!state.serverSettings) return null
|
|
return state.serverSettings[key]
|
|
},
|
|
getJumpForwardTime: (state) => {
|
|
if (!state.deviceData?.deviceSettings) return 10
|
|
return state.deviceData.deviceSettings.jumpForwardTime || 10
|
|
},
|
|
getJumpBackwardsTime: (state) => {
|
|
if (!state.deviceData?.deviceSettings) return 10
|
|
return state.deviceData.deviceSettings.jumpBackwardsTime || 10
|
|
},
|
|
getAltViewEnabled: (state) => {
|
|
if (!state.deviceData?.deviceSettings) return true
|
|
return state.deviceData.deviceSettings.enableAltView
|
|
},
|
|
getOrientationLockSetting: (state) => {
|
|
return state.deviceData?.deviceSettings?.lockOrientation
|
|
},
|
|
getCanDownloadUsingCellular: (state) => {
|
|
if (!state.deviceData?.deviceSettings?.downloadUsingCellular) return 'ALWAYS'
|
|
return state.deviceData.deviceSettings.downloadUsingCellular || 'ALWAYS'
|
|
},
|
|
getCanStreamingUsingCellular: (state) => {
|
|
if (!state.deviceData?.deviceSettings?.streamingUsingCellular) return 'ALWAYS'
|
|
return state.deviceData.deviceSettings.streamingUsingCellular || 'ALWAYS'
|
|
}
|
|
}
|
|
|
|
export const actions = {
|
|
// Listen for network connection
|
|
async setupNetworkListener({ state, commit }) {
|
|
if (state.isNetworkListenerInit) return
|
|
commit('setNetworkListenerInit', true)
|
|
|
|
const status = await Network.getStatus()
|
|
console.log('Network status', status)
|
|
commit('setNetworkStatus', status)
|
|
|
|
Network.addListener('networkStatusChange', (status) => {
|
|
console.log('Network status changed', status.connected, status.connectionType)
|
|
commit('setNetworkStatus', status)
|
|
})
|
|
|
|
AbsAudioPlayer.addListener('onNetworkMeteredChanged', (payload) => {
|
|
const isUnmetered = payload.value
|
|
console.log('On network metered changed', isUnmetered)
|
|
commit('setIsNetworkUnmetered', isUnmetered)
|
|
})
|
|
}
|
|
}
|
|
|
|
export const mutations = {
|
|
setDeviceData(state, deviceData) {
|
|
state.deviceData = deviceData
|
|
},
|
|
setLastBookshelfScrollData(state, { scrollTop, path, name }) {
|
|
state.lastBookshelfScrollData[name] = { scrollTop, path }
|
|
},
|
|
setLastItemScrollData(state, data) {
|
|
state.lastItemScrollData = data
|
|
},
|
|
setPlaybackSession(state, playbackSession) {
|
|
state.currentPlaybackSession = playbackSession
|
|
|
|
state.isCasting = playbackSession?.mediaPlayer === 'cast-player'
|
|
},
|
|
setMediaPlayer(state, mediaPlayer) {
|
|
state.isCasting = mediaPlayer === 'cast-player'
|
|
},
|
|
setCastAvailable(state, available) {
|
|
state.isCastAvailable = available
|
|
},
|
|
setAttemptingConnection(state, val) {
|
|
state.attemptingConnection = val
|
|
},
|
|
setPlayerPlaying(state, val) {
|
|
state.playerIsPlaying = val
|
|
},
|
|
setPlayerFullscreen(state, val) {
|
|
state.playerIsFullscreen = val
|
|
},
|
|
setPlayerIsStartingPlayback(state, mediaId) {
|
|
state.playerStartingPlaybackMediaId = mediaId
|
|
state.playerIsStartingPlayback = true
|
|
},
|
|
setPlayerDoneStartingPlayback(state) {
|
|
state.playerStartingPlaybackMediaId = null
|
|
state.playerIsStartingPlayback = false
|
|
},
|
|
setHasStoragePermission(state, val) {
|
|
state.hasStoragePermission = val
|
|
},
|
|
setIsFirstLoad(state, val) {
|
|
state.isFirstLoad = val
|
|
},
|
|
setIsFirstAudioLoad(state, val) {
|
|
state.isFirstAudioLoad = val
|
|
},
|
|
setSocketConnected(state, val) {
|
|
state.socketConnected = val
|
|
},
|
|
setNetworkListenerInit(state, val) {
|
|
state.isNetworkListenerInit = val
|
|
},
|
|
setNetworkStatus(state, val) {
|
|
if (val.connectionType !== 'none') {
|
|
state.networkConnected = true
|
|
} else {
|
|
state.networkConnected = false
|
|
}
|
|
state.networkConnectionType = val.connectionType
|
|
},
|
|
setIsNetworkUnmetered(state, val) {
|
|
state.isNetworkUnmetered = val
|
|
},
|
|
showReader(state, { libraryItem, keepProgress, fileId }) {
|
|
state.selectedLibraryItem = libraryItem
|
|
state.ereaderKeepProgress = keepProgress
|
|
state.ereaderFileId = fileId
|
|
|
|
state.showReader = true
|
|
},
|
|
setShowReader(state, val) {
|
|
state.showReader = val
|
|
},
|
|
setShowSideDrawer(state, val) {
|
|
state.showSideDrawer = val
|
|
},
|
|
setServerSettings(state, val) {
|
|
state.serverSettings = val
|
|
this.$localStore.setServerSettings(state.serverSettings)
|
|
}
|
|
}
|