2021-08-18 00:01:11 +02:00
< template >
2021-10-23 03:08:02 +02:00
< div >
<!-- < div class = "h-0.5 bg-primary bg-opacity-50 w-full" / > -- >
2021-10-05 05:11:42 +02:00
2021-10-23 03:08:02 +02:00
< div class = "bg-bg rounded-md shadow-lg border border-white border-opacity-5 p-4 mb-8" >
< div class = "flex items-center mb-2" >
< h1 class = "text-xl" > Settings < / h1 >
2021-10-05 05:11:42 +02:00
< / div >
2021-10-23 03:08:02 +02:00
< div class = "flex items-center py-2" >
2022-01-09 00:03:33 +01:00
< ui -toggle -switch v -model = " storeCoversInAudiobookDir " :disabled ="updatingServerSettings" @input ="updateCoverStorageDestination" / >
< ui -tooltip :text ="coverDestinationTooltip" >
2022-02-13 22:00:59 +01:00
< p class = "pl-4 text-lg" >
Store covers with audiobook
< span class = "material-icons icon-text" > info _outlined < / span >
< / p >
2021-10-23 03:08:02 +02:00
< / u i - t o o l t i p >
2021-10-09 00:30:20 +02:00
< / div >
2021-10-23 03:08:02 +02:00
< div class = "flex items-center py-2" >
2022-01-09 00:03:33 +01:00
< ui -toggle -switch v -model = " useSquareBookCovers " :disabled ="updatingServerSettings" @input ="updateBookCoverAspectRatio" / >
< ui -tooltip :text ="coverAspectRatioTooltip" >
2022-02-13 22:00:59 +01:00
< p class = "pl-4 text-lg" >
Use square book covers
< span class = "material-icons icon-text" > info _outlined < / span >
< / p >
2021-10-23 03:08:02 +02:00
< / u i - t o o l t i p >
2021-08-21 23:23:35 +02:00
< / div >
2021-11-26 01:39:02 +01:00
< div class = "flex items-center py-2" >
2022-01-09 00:03:33 +01:00
< ui -toggle -switch v -model = " useAlternativeBookshelfView " :disabled ="updatingServerSettings" @input ="updateAlternativeBookshelfView" / >
< ui -tooltip :text ="bookshelfViewTooltip" >
2022-02-13 22:00:59 +01:00
< p class = "pl-4 text-lg" >
Use alternative library bookshelf view
< span class = "material-icons icon-text" > info _outlined < / span >
< / p >
2021-11-26 01:39:02 +01:00
< / u i - t o o l t i p >
< / div >
2022-02-13 22:00:59 +01:00
< div class = "flex items-center py-2" >
< ui -toggle -switch v -model = " newServerSettings.sortingIgnorePrefix " :disabled ="updatingServerSettings" @input ="updateSortIgnorePrefix" / >
< p class = "pl-4 text-lg" > Ignore prefix "The" when sorting title and series < / p >
< / div >
2022-01-09 00:03:33 +01:00
< div class = "flex items-center mb-2 mt-8" >
< h1 class = "text-xl" > Scanner Settings < / h1 >
< / div >
2021-11-26 01:39:02 +01:00
< div class = "flex items-center py-2" >
2022-01-09 00:03:33 +01:00
< ui -toggle -switch v -model = " newServerSettings.scannerParseSubtitle " small :disabled ="updatingServerSettings" @input ="updateScannerParseSubtitle" / >
< ui -tooltip :text ="parseSubtitleTooltip" >
2022-02-13 22:00:59 +01:00
< p class = "pl-4 text-lg" >
Scanner parse subtitles
< span class = "material-icons icon-text" > info _outlined < / span >
< / p >
2021-11-26 01:39:02 +01:00
< / u i - t o o l t i p >
< / div >
2021-10-23 03:08:02 +02:00
< div class = "flex items-center py-2" >
2022-01-09 00:03:33 +01:00
< ui -toggle -switch v -model = " newServerSettings.scannerFindCovers " :disabled ="updatingServerSettings" @input ="updateScannerFindCovers" / >
< ui -tooltip :text ="scannerFindCoversTooltip" >
2022-02-13 22:00:59 +01:00
< p class = "pl-4 text-lg" >
Scanner find covers
< span class = "material-icons icon-text" > info _outlined < / span >
< / p >
2021-10-23 03:08:02 +02:00
< / u i - t o o l t i p >
2022-01-09 00:03:33 +01:00
< div class = "flex-grow" / >
< / div >
< div v-if ="newServerSettings.scannerFindCovers" class="w-44 ml-14 mb-2" >
< ui -dropdown v -model = " newServerSettings.scannerCoverProvider " small :items ="providers" label = "Cover Provider" @input ="updateScannerCoverProvider" :disabled ="updatingServerSettings" / >
2021-08-18 13:50:24 +02:00
< / div >
2021-12-02 22:49:03 +01:00
< div class = "flex items-center py-2" >
2022-01-09 00:03:33 +01:00
< ui -toggle -switch v -model = " newServerSettings.scannerPreferAudioMetadata " :disabled ="updatingServerSettings" @input ="updateScannerPreferAudioMeta" / >
< ui -tooltip :text ="scannerPreferAudioMetaTooltip" >
2022-02-13 22:00:59 +01:00
< p class = "pl-4 text-lg" >
Scanner prefer audio metadata
< span class = "material-icons icon-text" > info _outlined < / span >
< / p >
2021-12-02 22:49:03 +01:00
< / u i - t o o l t i p >
< / div >
2021-12-28 22:50:17 +01:00
< div class = "flex items-center py-2" >
2022-01-09 00:03:33 +01:00
< ui -toggle -switch v -model = " newServerSettings.scannerPreferOpfMetadata " :disabled ="updatingServerSettings" @input ="updateScannerPreferOpfMeta" / >
< ui -tooltip :text ="scannerPreferOpfMetaTooltip" >
2022-02-13 22:00:59 +01:00
< p class = "pl-4 text-lg" >
Scanner prefer OPF metadata
< span class = "material-icons icon-text" > info _outlined < / span >
< / p >
2021-12-28 22:50:17 +01:00
< / u i - t o o l t i p >
< / div >
2021-10-23 03:08:02 +02:00
< / div >
2021-10-02 20:50:39 +02:00
2021-10-23 03:08:02 +02:00
< div class = "h-0.5 bg-primary bg-opacity-30 w-full" / >
< div class = "flex items-center py-4" >
2021-12-13 00:15:37 +01:00
< ui -btn color = "bg" small :padding-x ="4" class = "hidden lg:block mr-2" :loading ="isPurgingCache" @click ="purgeCache" > Purge Cache < / ui -btn >
< ui -btn color = "bg" small :padding-x ="4" class = "hidden lg:block" :loading ="isResettingAudiobooks" @click ="resetAudiobooks" > Remove All Audiobooks < / ui -btn >
2021-10-23 03:08:02 +02:00
< div class = "flex-grow" / >
2022-02-13 22:00:59 +01:00
< p class = "pr-2 text-sm font-book text-yellow-400" >
Report bugs , request features , provide feedback , and contribute on
< a class = "underline" href = "https://github.com/advplyr/audiobookshelf" target = "_blank" > github < / a > .
< / p >
2021-10-23 03:08:02 +02:00
< a href = "https://github.com/advplyr/audiobookshelf" target = "_blank" class = "text-white hover:text-gray-200 hover:scale-150 hover:rotate-6 transform duration-500" >
< svg xmlns = "http://www.w3.org/2000/svg" fill = "currentColor" width = "24" height = "24" viewBox = "0 0 24 24" >
< path
d = "M12 0c-6.626 0-12 5.373-12 12 0 5.302 3.438 9.8 8.207 11.387.599.111.793-.261.793-.577v-2.234c-3.338.726-4.033-1.416-4.033-1.416-.546-1.387-1.333-1.756-1.333-1.756-1.089-.745.083-.729.083-.729 1.205.084 1.839 1.237 1.839 1.237 1.07 1.834 2.807 1.304 3.492.997.107-.775.418-1.305.762-1.604-2.665-.305-5.467-1.334-5.467-5.931 0-1.311.469-2.381 1.236-3.221-.124-.303-.535-1.524.117-3.176 0 0 1.008-.322 3.301 1.23.957-.266 1.983-.399 3.003-.404 1.02.005 2.047.138 3.006.404 2.291-1.552 3.297-1.23 3.297-1.23.653 1.653.242 2.874.118 3.176.77.84 1.235 1.911 1.235 3.221 0 4.609-2.807 5.624-5.479 5.921.43.372.823 1.102.823 2.222v3.293c0 .319.192.694.801.576 4.765-1.589 8.199-6.086 8.199-11.386 0-6.627-5.373-12-12-12z"
/ >
< / svg >
< / a >
< / div >
2021-10-02 20:50:39 +02:00
2021-10-23 03:08:02 +02:00
< div class = "h-0.5 bg-primary bg-opacity-30 w-full" / >
< div class = "py-12 mb-4 opacity-60 hover:opacity-100" >
< div class = "flex items-center" >
< div >
< div class = "flex items-center" >
< ui -toggle -switch v -model = " showExperimentalFeatures " / >
< ui -tooltip :text ="experimentalFeaturesTooltip" >
2022-02-13 22:00:59 +01:00
< p class = "pl-4 text-lg" >
Experimental Features
< span class = "material-icons icon-text" > info _outlined < / span >
< / p >
2021-10-23 03:08:02 +02:00
< / u i - t o o l t i p >
2021-10-02 20:50:39 +02:00
< / div >
< / div >
2022-01-09 00:03:33 +01:00
<!-- < div class = "hidden md:block" >
2021-10-23 03:08:02 +02:00
< a href = "https://github.com/advplyr/audiobookshelf/discussions/75#discussion-3604812" target = "_blank" class = "text-blue-500 hover:text-blue-300 underline" > Join the discussion < / a >
2022-02-13 22:00:59 +01:00
< / div > -- >
2021-10-02 20:50:39 +02:00
< / div >
2021-08-18 00:01:11 +02:00
< / div >
< / div >
< / template >
< script >
export default {
data ( ) {
2021-08-21 23:23:35 +02:00
return {
2021-08-22 17:46:04 +02:00
isResettingAudiobooks : false ,
2021-10-23 03:08:02 +02:00
storeCoversInAudiobookDir : false ,
2021-10-09 00:30:20 +02:00
updatingServerSettings : false ,
2021-12-02 22:49:03 +01:00
useSquareBookCovers : false ,
2021-12-28 22:50:17 +01:00
useAlternativeBookshelfView : false ,
2021-12-13 00:15:37 +01:00
isPurgingCache : false ,
2021-10-23 03:08:02 +02:00
newServerSettings : { }
2021-09-05 02:58:39 +02:00
}
} ,
watch : {
serverSettings ( newVal , oldVal ) {
if ( newVal && ! oldVal ) {
this . newServerSettings = { ... this . serverSettings }
2021-10-09 00:30:20 +02:00
this . initServerSettings ( )
2021-09-05 02:58:39 +02:00
}
2021-08-21 23:23:35 +02:00
}
2021-08-18 00:01:11 +02:00
} ,
2021-08-18 13:50:24 +02:00
computed : {
2021-11-26 01:39:02 +01:00
scannerPreferAudioMetaTooltip ( ) {
2021-11-26 22:46:07 +01:00
return 'Audio file ID3 meta tags will be used for book details over folder names'
2021-11-26 01:39:02 +01:00
} ,
scannerPreferOpfMetaTooltip ( ) {
2021-11-26 22:46:07 +01:00
return 'OPF file metadata will be used for book details over folder names'
2021-11-26 01:39:02 +01:00
} ,
2021-10-02 03:29:00 +02:00
saveMetadataTooltip ( ) {
return 'This will write a "metadata.nfo" file in all of your audiobook directories.'
} ,
2021-10-02 20:50:39 +02:00
experimentalFeaturesTooltip ( ) {
return 'Features in development that could use your feedback and help testing.'
} ,
2021-09-05 02:58:39 +02:00
serverSettings ( ) {
return this . $store . state . serverSettings
} ,
2021-10-23 03:08:02 +02:00
parseSubtitleTooltip ( ) {
return 'Extract subtitles from audiobook directory names.<br>Subtitle must be seperated by " - "<br>i.e. "Book Title - A Subtitle Here" has the subtitle "A Subtitle Here"'
2021-08-25 03:24:40 +02:00
} ,
2021-10-23 03:08:02 +02:00
coverDestinationTooltip ( ) {
return 'By default covers are stored in /metadata/books, enabling this setting will store covers inside your audiobooks directory. Only one file named "cover" will be kept.'
2021-08-25 03:24:40 +02:00
} ,
2021-10-23 03:08:02 +02:00
scannerFindCoversTooltip ( ) {
return 'If your audiobook does not have an embedded cover or a cover image inside the folder, the scanner will attempt to find a cover.<br>Note: This will extend scan time'
2021-10-02 20:50:39 +02:00
} ,
2021-12-02 22:49:03 +01:00
coverAspectRatioTooltip ( ) {
return 'Prefer to use square covers over standard 1.6:1 book covers'
} ,
2021-12-28 22:50:17 +01:00
bookshelfViewTooltip ( ) {
return 'Alternative bookshelf view that shows title & author under book covers'
} ,
2022-01-09 00:03:33 +01:00
providers ( ) {
return this . $store . state . scanners . providers
} ,
2021-10-07 04:08:52 +02:00
showExperimentalFeatures : {
get ( ) {
return this . $store . state . showExperimentalFeatures
} ,
set ( val ) {
this . $store . commit ( 'setExperimentalFeatures' , val )
}
2021-08-18 13:50:24 +02:00
}
} ,
2021-08-18 00:01:11 +02:00
methods : {
2022-02-13 22:00:59 +01:00
updateSortIgnorePrefix ( val ) {
this . updateServerSettings ( {
sortingIgnorePrefix : val
} )
} ,
2021-10-06 04:10:49 +02:00
updateScannerFindCovers ( val ) {
this . updateServerSettings ( {
scannerFindCovers : ! ! val
} )
} ,
2022-01-09 00:03:33 +01:00
updateScannerCoverProvider ( val ) {
this . updateServerSettings ( {
scannerCoverProvider : val
} )
} ,
2021-10-02 03:29:00 +02:00
updateCoverStorageDestination ( val ) {
this . newServerSettings . coverDestination = val ? this . $constants . CoverDestination . AUDIOBOOK : this . $constants . CoverDestination . METADATA
this . updateServerSettings ( {
coverDestination : this . newServerSettings . coverDestination
} )
} ,
2021-09-05 02:58:39 +02:00
updateScannerParseSubtitle ( val ) {
2021-10-06 04:10:49 +02:00
this . updateServerSettings ( {
scannerParseSubtitle : ! ! val
} )
2021-10-01 01:52:32 +02:00
} ,
2021-11-26 01:39:02 +01:00
updateScannerPreferAudioMeta ( val ) {
this . updateServerSettings ( {
scannerPreferAudioMetadata : ! ! val
} )
} ,
updateScannerPreferOpfMeta ( val ) {
this . updateServerSettings ( {
scannerPreferOpfMetadata : ! ! val
} )
} ,
2021-12-02 22:49:03 +01:00
updateBookCoverAspectRatio ( val ) {
this . updateServerSettings ( {
coverAspectRatio : val ? this . $constants . BookCoverAspectRatio . SQUARE : this . $constants . BookCoverAspectRatio . STANDARD
} )
} ,
2021-12-28 22:50:17 +01:00
updateAlternativeBookshelfView ( val ) {
this . updateServerSettings ( {
bookshelfView : val ? this . $constants . BookshelfView . TITLES : this . $constants . BookshelfView . STANDARD
} )
} ,
2021-10-01 01:52:32 +02:00
updateServerSettings ( payload ) {
2021-10-02 03:29:00 +02:00
this . updatingServerSettings = true
2021-09-05 02:58:39 +02:00
this . $store
. dispatch ( 'updateServerSettings' , payload )
. then ( ( success ) => {
console . log ( 'Updated Server Settings' , success )
2021-10-02 03:29:00 +02:00
this . updatingServerSettings = false
2021-09-05 02:58:39 +02:00
} )
. catch ( ( error ) => {
console . error ( 'Failed to update server settings' , error )
2021-10-02 03:29:00 +02:00
this . updatingServerSettings = false
2021-09-05 02:58:39 +02:00
} )
} ,
2021-10-23 03:08:02 +02:00
initServerSettings ( ) {
this . newServerSettings = this . serverSettings ? { ... this . serverSettings } : { }
this . storeCoversInAudiobookDir = this . newServerSettings . coverDestination === this . $constants . CoverDestination . AUDIOBOOK
2021-12-02 22:49:03 +01:00
this . useSquareBookCovers = this . newServerSettings . coverAspectRatio === this . $constants . BookCoverAspectRatio . SQUARE
2021-12-28 22:50:17 +01:00
this . useAlternativeBookshelfView = this . newServerSettings . bookshelfView === this . $constants . BookshelfView . TITLES
2021-09-29 17:16:38 +02:00
} ,
2021-08-21 23:23:35 +02:00
resetAudiobooks ( ) {
if ( confirm ( 'WARNING! This action will remove all audiobooks from the database including any updates or matches you have made. This does not do anything to your actual files. Shall we continue?' ) ) {
this . isResettingAudiobooks = true
this . $axios
2021-11-22 03:00:40 +01:00
. $delete ( '/api/books/all' )
2021-08-21 23:23:35 +02:00
. then ( ( ) => {
this . isResettingAudiobooks = false
this . $toast . success ( 'Successfully reset audiobooks' )
2021-10-01 01:52:32 +02:00
location . reload ( )
2021-08-21 23:23:35 +02:00
} )
. catch ( ( error ) => {
console . error ( 'failed to reset audiobooks' , error )
this . isResettingAudiobooks = false
2021-09-30 03:43:36 +02:00
this . $toast . error ( 'Failed to reset audiobooks - manually remove the /config/audiobooks folder' )
2021-08-21 23:23:35 +02:00
} )
}
2021-12-13 00:15:37 +01:00
} ,
async purgeCache ( ) {
this . isPurgingCache = true
await this . $axios
. $post ( '/api/purgecache' )
. then ( ( ) => {
this . $toast . success ( 'Cache Purged!' )
} )
. catch ( ( error ) => {
console . error ( 'Failed to purge cache' , error )
this . $toast . error ( 'Failed to purge cache' )
} )
this . isPurgingCache = false
2021-08-18 00:01:11 +02:00
}
} ,
2021-08-22 17:46:04 +02:00
mounted ( ) {
2021-10-23 03:08:02 +02:00
this . initServerSettings ( )
2021-08-22 17:46:04 +02:00
}
}
2021-10-23 03:08:02 +02:00
< / script >