2022-07-06 16:55:58 -04:00
< template >
< div class = "w-full h-full overflow-y-auto px-2 py-18 md:p-8" >
2022-09-03 15:23:58 -04:00
< div v-if = "this.listeningStats" class="flex flex-col md:flex-row" >
2022-07-06 16:55:58 -04:00
< div class = "w-200 my-6 mx-auto" >
< div class = "grid grid-cols-2 content-between" >
2022-11-17 21:31:01 -05:00
< h1 class = "text-2xl mb-4 font-book" > { { $strings . Social } } < / h1 >
2022-07-06 16:55:58 -04:00
< div class = "flex py-1 justify-end" >
2022-11-17 21:31:01 -05:00
< ui-tooltip :text = "$strings.ShareStatsHelp" >
2022-07-06 16:55:58 -04:00
< p class = "pl-4" >
2022-11-17 21:31:01 -05:00
{ { $strings . ShareStats } }
2022-07-06 16:55:58 -04:00
< span class = "material-icons icon-text text-sm" > info _outlined < / span >
< / p >
< / ui-tooltip >
2022-09-03 15:23:58 -04:00
< ui-toggle-switch v-model = "isUserSharing" @input="changeSharingSetting" / >
2022-07-06 16:55:58 -04:00
< / div >
< / div >
< p v-if = "!users.length" > No Other User Sessions < / p >
< template v-for = "(user, num) in users" >
2022-09-03 15:23:58 -04:00
< div :key = "user.username" class = "w-full" >
2022-07-06 16:55:58 -04:00
< div class = "flex items-center mb-1" >
2022-09-03 16:12:00 -04:00
< nuxt-link :to = "`/item/${user.latest.progress.libraryItemId}`" >
< ui-tooltip direction = "left" : text = "Math.round(user.latest.progress.progress * 100) + '%'" >
< covers-book-cover class = "absolute left-0 right-0" :library-item = "user.latest.item" :width = "bookCoverWidth" :book-cover-aspect-ratio = "bookCoverAspectRatio" / >
2022-07-06 16:55:58 -04:00
< / ui-tooltip >
< / nuxt-link >
2022-10-23 22:12:51 -04:00
< p class = "text-xs pl-2 text-white text-opacity-50" > { { "Last listened to " + user . latest . item . media . metadata . title + " " + $dateDistanceFromNow ( user . latest . progress . lastUpdate ) + " for " + $elapsedPrettyExtended ( user . latest . progress . duration ) } } < / p >
2022-07-06 16:55:58 -04:00
< div class = "flex-grow" / >
2022-10-23 22:12:51 -04:00
< p class = "text-lg pl-2 font-book text-white" > { { user . username } } < / p >
2022-07-06 16:55:58 -04:00
< widgets-online-indicator class = "mx-2" :value = "!!usersOnline[user.id]" / >
< / div >
< div v-if = "num+1 < users.length" class = "flex border-t border-white border-opacity-10 my-3" / >
< / div >
< / template >
< / div >
< / div >
2022-09-03 15:23:58 -04:00
< div v-else >
< p class = "text-xl text-center" > There is no listening activity to display < / p >
< / div >
2022-07-06 16:55:58 -04:00
< / div >
< / template >
< script >
import Cover from '../components/modals/item/tabs/Cover.vue'
export default {
components : { Cover } ,
data ( ) {
return {
2022-09-03 15:23:58 -04:00
listeningStats : null ,
isUserSharing : null
2022-07-06 16:55:58 -04:00
}
} ,
computed : {
bookCoverAspectRatio ( ) {
2022-09-03 14:23:20 -04:00
return this . $store . getters [ 'libraries/getBookCoverAspectRatio' ]
2022-07-06 16:55:58 -04:00
} ,
bookCoverWidth ( ) {
return 70
} ,
users ( ) {
if ( ! this . listeningStats ) return [ ]
2022-09-03 16:12:00 -04:00
return this . listeningStats . sort ( function ( a , b ) { return b . latest . progress . lastUpdate - a . latest . progress . lastUpdate } )
2022-07-06 16:55:58 -04:00
} ,
usersOnline ( ) {
var usermap = { }
this . $store . state . users . users . forEach ( ( u ) => ( usermap [ u . id ] = { online : true , session : u . session } ) )
return usermap
2022-10-23 22:12:51 -04:00
}
2022-07-06 16:55:58 -04:00
} ,
methods : {
2022-09-03 15:23:58 -04:00
init ( ) {
this . getUserSharing ( )
this . loadStats ( )
} ,
getUserSharing ( ) {
this . isUserSharing = this . $store . getters [ 'user/getUserSetting' ] ( 'shareListeningActivity' )
} ,
async loadStats ( ) {
2022-07-06 16:55:58 -04:00
let listeningStats = await this . $axios . $get ( ` /api/social ` ) . catch ( ( err ) => {
console . error ( 'Failed to load shared user listening sesions' , err )
return [ ]
} )
this . listeningStats = listeningStats
} ,
changeSharingSetting ( ) {
2022-09-03 15:23:58 -04:00
this . $store . dispatch ( 'user/updateUserSettings' , { shareListeningActivity : this . isUserSharing } )
this . loadStats ( )
2022-07-06 16:55:58 -04:00
}
} ,
mounted ( ) {
this . init ( )
}
}
< / script >