diff --git a/android/app/src/main/java/com/audiobookshelf/app/data/DeviceClasses.kt b/android/app/src/main/java/com/audiobookshelf/app/data/DeviceClasses.kt index 40763a67..83bde3df 100644 --- a/android/app/src/main/java/com/audiobookshelf/app/data/DeviceClasses.kt +++ b/android/app/src/main/java/com/audiobookshelf/app/data/DeviceClasses.kt @@ -9,63 +9,77 @@ import com.fasterxml.jackson.annotation.JsonSubTypes import com.fasterxml.jackson.annotation.JsonTypeInfo enum class LockOrientationSetting { - NONE, PORTRAIT, LANDSCAPE + NONE, + PORTRAIT, + LANDSCAPE } enum class HapticFeedbackSetting { - OFF, LIGHT, MEDIUM, HEAVY + OFF, + LIGHT, + MEDIUM, + HEAVY } enum class ShakeSensitivitySetting { - VERY_LOW, LOW, MEDIUM, HIGH, VERY_HIGH + VERY_LOW, + LOW, + MEDIUM, + HIGH, + VERY_HIGH } enum class DownloadUsingCellularSetting { - ASK, ALWAYS, NEVER + ASK, + ALWAYS, + NEVER } enum class StreamingUsingCellularSetting { - ASK, ALWAYS, NEVER + ASK, + ALWAYS, + NEVER } enum class AndroidAutoBrowseSeriesSequenceOrderSetting { - ASC, DESC + ASC, + DESC } data class ServerConnectionConfig( - var id:String, - var index:Int, - var name:String, - var address:String, - var userId:String, - var username:String, - var token:String, - var customHeaders:Map? + var id: String, + var index: Int, + var name: String, + var address: String, + var userId: String, + var username: String, + var token: String, + var customHeaders: Map? ) @JsonIgnoreProperties(ignoreUnknown = true) data class LocalFile( - var id:String, - var filename:String?, - var contentUrl:String, - var basePath:String, - var absolutePath:String, - var simplePath:String, - var mimeType:String?, - var size:Long + var id: String, + var filename: String?, + var contentUrl: String, + var basePath: String, + var absolutePath: String, + var simplePath: String, + var mimeType: String?, + var size: Long ) { @JsonIgnore - fun isAudioFile():Boolean { + fun isAudioFile(): Boolean { if (mimeType == "application/octet-stream") return true if (mimeType == "video/mp4") return true return mimeType?.startsWith("audio") == true } @JsonIgnore - fun isEBookFile():Boolean { + fun isEBookFile(): Boolean { return getEBookFormat() != null } @JsonIgnore - fun getEBookFormat():String? { + fun getEBookFormat(): String? { if (mimeType == "application/epub+zip") return "epub" if (mimeType == "application/pdf") return "pdf" if (mimeType == "application/x-mobipocket-ebook") return "mobi" @@ -78,116 +92,123 @@ data class LocalFile( @JsonIgnoreProperties(ignoreUnknown = true) data class LocalFolder( - var id:String, - var name:String, - var contentUrl:String, - var basePath:String, - var absolutePath:String, - var simplePath:String, - var storageType:String, - var mediaType:String + var id: String, + var name: String, + var contentUrl: String, + var basePath: String, + var absolutePath: String, + var simplePath: String, + var storageType: String, + var mediaType: String ) -@JsonTypeInfo(use= JsonTypeInfo.Id.DEDUCTION) -@JsonSubTypes( - JsonSubTypes.Type(LibraryItem::class), - JsonSubTypes.Type(LocalLibraryItem::class) -) -open class LibraryItemWrapper(var id:String) { +@JsonTypeInfo(use = JsonTypeInfo.Id.DEDUCTION) +@JsonSubTypes(JsonSubTypes.Type(LibraryItem::class), JsonSubTypes.Type(LocalLibraryItem::class)) +open class LibraryItemWrapper(var id: String) { @JsonIgnore - open fun getMediaDescription(progress:MediaProgressWrapper?, ctx: Context): MediaDescriptionCompat { return MediaDescriptionCompat.Builder().build() } + open fun getMediaDescription( + progress: MediaProgressWrapper?, + ctx: Context + ): MediaDescriptionCompat { + return MediaDescriptionCompat.Builder().build() + } } @JsonIgnoreProperties(ignoreUnknown = true) data class DeviceInfo( - var deviceId:String, - var manufacturer:String, - var model:String, - var sdkVersion:Int, - var clientVersion: String + var deviceId: String, + var manufacturer: String, + var model: String, + var sdkVersion: Int, + var clientVersion: String ) @JsonIgnoreProperties(ignoreUnknown = true) data class PlayItemRequestPayload( - var mediaPlayer:String, - var forceDirectPlay:Boolean, - var forceTranscode:Boolean, - var deviceInfo:DeviceInfo + var mediaPlayer: String, + var forceDirectPlay: Boolean, + var forceTranscode: Boolean, + var deviceInfo: DeviceInfo ) @JsonIgnoreProperties(ignoreUnknown = true) data class DeviceSettings( - var disableAutoRewind:Boolean, - var enableAltView:Boolean, - var allowSeekingOnMediaControls:Boolean, - var jumpBackwardsTime:Int, - var jumpForwardTime:Int, - var enableMp3IndexSeeking:Boolean, - var disableShakeToResetSleepTimer:Boolean, - var shakeSensitivity: ShakeSensitivitySetting, - var lockOrientation: LockOrientationSetting, - var hapticFeedback: HapticFeedbackSetting, - var autoSleepTimer: Boolean, - var autoSleepTimerStartTime: String, - var autoSleepTimerEndTime: String, - var autoSleepTimerAutoRewind: Boolean, - var autoSleepTimerAutoRewindTime: Long, //Time in milliseconds - var sleepTimerLength: Long, // Time in milliseconds - var disableSleepTimerFadeOut: Boolean, - var disableSleepTimerResetFeedback: Boolean, - var languageCode: String, - var downloadUsingCellular: DownloadUsingCellularSetting, - var streamingUsingCellular: StreamingUsingCellularSetting, - var androidAutoBrowseLimitForGrouping: Int, - var androidAutoBrowseSeriesSequenceOrder: AndroidAutoBrowseSeriesSequenceOrderSetting + var disableAutoRewind: Boolean, + var enableAltView: Boolean, + var allowSeekingOnMediaControls: Boolean, + var jumpBackwardsTime: Int, + var jumpForwardTime: Int, + var enableMp3IndexSeeking: Boolean, + var disableShakeToResetSleepTimer: Boolean, + var shakeSensitivity: ShakeSensitivitySetting, + var lockOrientation: LockOrientationSetting, + var hapticFeedback: HapticFeedbackSetting, + var autoSleepTimer: Boolean, + var autoSleepTimerStartTime: String, + var autoSleepTimerEndTime: String, + var autoSleepTimerAutoRewind: Boolean, + var autoSleepTimerAutoRewindTime: Long, // Time in milliseconds + var sleepTimerLength: Long, // Time in milliseconds + var disableSleepTimerFadeOut: Boolean, + var disableSleepTimerResetFeedback: Boolean, + var languageCode: String, + var downloadUsingCellular: DownloadUsingCellularSetting, + var streamingUsingCellular: StreamingUsingCellularSetting, + var androidAutoBrowseLimitForGrouping: Int, + var androidAutoBrowseSeriesSequenceOrder: AndroidAutoBrowseSeriesSequenceOrderSetting ) { companion object { // Static method to get default device settings - fun default():DeviceSettings { + fun default(): DeviceSettings { return DeviceSettings( - disableAutoRewind = false, - enableAltView = true, - allowSeekingOnMediaControls = false, - jumpBackwardsTime = 10, - jumpForwardTime = 10, - enableMp3IndexSeeking = false, - disableShakeToResetSleepTimer = false, - shakeSensitivity = ShakeSensitivitySetting.MEDIUM, - lockOrientation = LockOrientationSetting.NONE, - hapticFeedback = HapticFeedbackSetting.LIGHT, - autoSleepTimer = false, - autoSleepTimerStartTime = "22:00", - autoSleepTimerEndTime = "06:00", - sleepTimerLength = 900000L, // 15 minutes - autoSleepTimerAutoRewind = false, - autoSleepTimerAutoRewindTime = 300000L, // 5 minutes - disableSleepTimerFadeOut = false, - disableSleepTimerResetFeedback = false, - languageCode = "en-us", - downloadUsingCellular = DownloadUsingCellularSetting.ALWAYS, - streamingUsingCellular = StreamingUsingCellularSetting.ALWAYS, - androidAutoBrowseLimitForGrouping = 100, - androidAutoBrowseSeriesSequenceOrder = AndroidAutoBrowseSeriesSequenceOrderSetting.ASC + disableAutoRewind = false, + enableAltView = true, + allowSeekingOnMediaControls = false, + jumpBackwardsTime = 10, + jumpForwardTime = 10, + enableMp3IndexSeeking = false, + disableShakeToResetSleepTimer = false, + shakeSensitivity = ShakeSensitivitySetting.MEDIUM, + lockOrientation = LockOrientationSetting.NONE, + hapticFeedback = HapticFeedbackSetting.LIGHT, + autoSleepTimer = false, + autoSleepTimerStartTime = "22:00", + autoSleepTimerEndTime = "06:00", + sleepTimerLength = 900000L, // 15 minutes + autoSleepTimerAutoRewind = false, + autoSleepTimerAutoRewindTime = 300000L, // 5 minutes + disableSleepTimerFadeOut = false, + disableSleepTimerResetFeedback = false, + languageCode = "en-us", + downloadUsingCellular = DownloadUsingCellularSetting.ALWAYS, + streamingUsingCellular = StreamingUsingCellularSetting.ALWAYS, + androidAutoBrowseLimitForGrouping = 100, + androidAutoBrowseSeriesSequenceOrder = AndroidAutoBrowseSeriesSequenceOrderSetting.ASC ) } } @get:JsonIgnore - val jumpBackwardsTimeMs get() = jumpBackwardsTime * 1000L + val jumpBackwardsTimeMs + get() = jumpBackwardsTime * 1000L @get:JsonIgnore - val jumpForwardTimeMs get() = jumpForwardTime * 1000L + val jumpForwardTimeMs + get() = jumpForwardTime * 1000L @get:JsonIgnore - val autoSleepTimerStartHour get() = autoSleepTimerStartTime.split(":")[0].toInt() + val autoSleepTimerStartHour + get() = autoSleepTimerStartTime.split(":")[0].toInt() @get:JsonIgnore - val autoSleepTimerStartMinute get() = autoSleepTimerStartTime.split(":")[1].toInt() + val autoSleepTimerStartMinute + get() = autoSleepTimerStartTime.split(":")[1].toInt() @get:JsonIgnore - val autoSleepTimerEndHour get() = autoSleepTimerEndTime.split(":")[0].toInt() + val autoSleepTimerEndHour + get() = autoSleepTimerEndTime.split(":")[0].toInt() @get:JsonIgnore - val autoSleepTimerEndMinute get() = autoSleepTimerEndTime.split(":")[1].toInt() - + val autoSleepTimerEndMinute + get() = autoSleepTimerEndTime.split(":")[1].toInt() @JsonIgnore - fun getShakeThresholdGravity() : Float { // Used in ShakeDetector + fun getShakeThresholdGravity(): Float { // Used in ShakeDetector return if (shakeSensitivity == ShakeSensitivitySetting.VERY_HIGH) 1.2f else if (shakeSensitivity == ShakeSensitivitySetting.HIGH) 1.4f else if (shakeSensitivity == ShakeSensitivitySetting.MEDIUM) 1.6f @@ -201,10 +222,10 @@ data class DeviceSettings( } data class DeviceData( - var serverConnectionConfigs:MutableList, - var lastServerConnectionConfigId:String?, - var deviceSettings: DeviceSettings?, - var lastPlaybackSession: PlaybackSession? + var serverConnectionConfigs: MutableList, + var lastServerConnectionConfigId: String?, + var deviceSettings: DeviceSettings?, + var lastPlaybackSession: PlaybackSession? ) { @JsonIgnore fun getLastServerConnectionConfig(): ServerConnectionConfig? { @@ -213,4 +234,3 @@ data class DeviceData( } } } - diff --git a/android/app/src/main/java/com/audiobookshelf/app/device/FolderScanner.kt b/android/app/src/main/java/com/audiobookshelf/app/device/FolderScanner.kt index d8e78851..a1028712 100644 --- a/android/app/src/main/java/com/audiobookshelf/app/device/FolderScanner.kt +++ b/android/app/src/main/java/com/audiobookshelf/app/device/FolderScanner.kt @@ -78,7 +78,7 @@ class FolderScanner(var ctx: Context) { Uri.fromFile(file).toString(), file.getBasePath(ctx), file.absolutePath, - file.getSimplePath(ctx), + // file.getSimplePath(ctx), file.mimeType, file.length() ) @@ -329,6 +329,15 @@ class FolderScanner(var ctx: Context) { val itemPart = downloadItem.downloadItemParts.find { itemPart -> itemPart.filename == docFile.name } + // val fileUri = docFile.uri.toString() + // val fileBasePath = docFile.getBasePath(ctx) + // val fileAbsolutePath = docFile.getAbsolutePath(ctx) + // val fileSimplePath = docFile.getSimplePath(ctx) + // val fileMimeType = docFile.mimeType + // val fileLength = docFile.length() + // val fileName = docFile.name + // val fileExtension = docFile.extension + // Build local file object val localFileId = DeviceManager.getBase64Id(docFile.id) val localFile = @@ -338,7 +347,7 @@ class FolderScanner(var ctx: Context) { docFile.uri.toString(), docFile.getBasePath(ctx), docFile.getAbsolutePath(ctx), - docFile.getSimplePath(ctx), + // docFile.getSimplePath(ctx), docFile.mimeType, docFile.length() )