Skip to content

Commit

Permalink
V1 of library item detail screen
Browse files Browse the repository at this point in the history
  • Loading branch information
r0adkll committed Sep 7, 2024
1 parent a3af19f commit 9f65c1c
Show file tree
Hide file tree
Showing 41 changed files with 1,368 additions and 31 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
package app.campfire.common.compose.extensions

import kotlin.time.Duration

fun Duration.readoutFormat(): String {
val hours = inWholeHours
val minutes = inWholeMinutes % 60
val seconds = inWholeSeconds % 60

return "${hours}h ${minutes}min ${seconds}s"
}

fun Duration.clockFormat(): String {
val hours = inWholeHours
val minutes = inWholeMinutes % 60
val seconds = inWholeSeconds % 60

return buildString {
if (hours > 0) append("$hours").append(":")
append("$minutes".padStart(2, '0'))
.append(":")
.append("$seconds".padStart(2, '0'))
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,89 @@
package app.campfire.common.compose.icons.outline

import androidx.compose.material.icons.Icons
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.graphics.PathFillType
import androidx.compose.ui.graphics.SolidColor
import androidx.compose.ui.graphics.StrokeCap
import androidx.compose.ui.graphics.StrokeJoin
import androidx.compose.ui.graphics.vector.ImageVector
import androidx.compose.ui.graphics.vector.path
import androidx.compose.ui.unit.dp

val Icons.Outlined.Autoplay: ImageVector
get() {
if (_Autoplay != null) {
return _Autoplay!!
}
_Autoplay = ImageVector.Builder(
name = "Autoplay",
defaultWidth = 24.dp,
defaultHeight = 24.dp,
viewportWidth = 960f,
viewportHeight = 960f,
).apply {
path(
fill = SolidColor(Color.Black),
fillAlpha = 1.0f,
stroke = null,
strokeAlpha = 1.0f,
strokeLineWidth = 1.0f,
strokeLineCap = StrokeCap.Butt,
strokeLineJoin = StrokeJoin.Miter,
strokeLineMiter = 1.0f,
pathFillType = PathFillType.NonZero,
) {
moveTo(380f, 660f)
verticalLineToRelative(-360f)
lineToRelative(280f, 180f)
close()
moveTo(480f, 920f)
quadToRelative(-108f, 0f, -202.5f, -49.5f)
reflectiveQuadTo(120f, 732f)
verticalLineToRelative(108f)
horizontalLineTo(40f)
verticalLineToRelative(-240f)
horizontalLineToRelative(240f)
verticalLineToRelative(80f)
horizontalLineToRelative(-98f)
quadToRelative(51f, 75f, 129.5f, 117.5f)
reflectiveQuadTo(480f, 840f)
quadToRelative(115f, 0f, 208.5f, -66f)
reflectiveQuadTo(820f, 599f)
lineToRelative(78f, 18f)
quadToRelative(-45f, 136f, -160f, 219.5f)
reflectiveQuadTo(480f, 920f)
moveTo(42f, 440f)
quadToRelative(7f, -67f, 32f, -128.5f)
reflectiveQuadTo(143f, 198f)
lineToRelative(57f, 57f)
quadToRelative(-32f, 41f, -52f, 87.5f)
reflectiveQuadTo(123f, 440f)
close()
moveToRelative(214f, -241f)
lineToRelative(-57f, -57f)
quadToRelative(53f, -44f, 114f, -69.5f)
reflectiveQuadTo(440f, 42f)
verticalLineToRelative(80f)
quadToRelative(-51f, 5f, -97f, 25f)
reflectiveQuadToRelative(-87f, 52f)
moveToRelative(449f, 0f)
quadToRelative(-41f, -32f, -87.5f, -52f)
reflectiveQuadTo(520f, 122f)
verticalLineToRelative(-80f)
quadToRelative(67f, 6f, 128.5f, 31f)
reflectiveQuadTo(762f, 142f)
close()
moveToRelative(133f, 241f)
quadToRelative(-5f, -51f, -25f, -97.5f)
reflectiveQuadTo(761f, 255f)
lineToRelative(57f, -57f)
quadToRelative(44f, 52f, 69f, 113.5f)
reflectiveQuadTo(918f, 440f)
close()
}
}.build()
return _Autoplay!!
}

private var _Autoplay: ImageVector? = null
29 changes: 29 additions & 0 deletions core/src/commonMain/kotlin/app.campfire.core/model/AudioFile.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
package app.campfire.core.model

data class AudioFile(
val index: Int,
val ino: String,
// val metadata: FileMetadata,
val addedAt: Long,
val updatedAt: Long,
val trackNumFromMeta: Int? = null,
val discNumFromMeta: Int? = null,
val trackNumFromFilename: Int? = null,
val discNumFromFilename: Int? = null,
val manuallyVerified: Boolean,
val invalid: Boolean? = null,
val exclude: Boolean,
val error: String? = null,
val format: String,
val duration: Float,
val bitRate: Int,
val language: String? = null,
val codec: String,
val timeBase: String,
val channels: Int,
val channelLayout: String,
// val chapters: List<Chapter>,
val embeddedCoverArt: String? = null,
// val metaTags: AudioMetaTags,
val mimeType: String,
)
12 changes: 12 additions & 0 deletions core/src/commonMain/kotlin/app.campfire.core/model/AudioTrack.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
package app.campfire.core.model

data class AudioTrack(
val index: Int,
val startOffset: Float,
val duration: Float,
val title: String,
val contentUrl: String,
val mimeType: String,
val codec: String,
val metadata: FileMetadata,
)
8 changes: 8 additions & 0 deletions core/src/commonMain/kotlin/app.campfire.core/model/Chapter.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
package app.campfire.core.model

data class Chapter(
val id: Int,
val start: Float,
val end: Float,
val title: String,
)
12 changes: 12 additions & 0 deletions core/src/commonMain/kotlin/app.campfire.core/model/FileMetadata.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
package app.campfire.core.model

data class FileMetadata(
val filename: String,
val ext: String,
val path: String,
val relPath: String,
val size: Int,
val mtimeMs: Long,
val ctimeMs: Long,
val birthtimeMs: Long,
)
10 changes: 10 additions & 0 deletions core/src/commonMain/kotlin/app.campfire.core/model/LibraryFile.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package app.campfire.core.model

data class LibraryFile(
val ino: String,
val metadata: FileMetadata,
val isSupplementary: Boolean? = null,
val addedAt: Long,
val updatedAt: Long,
val fileType: String,
)
Original file line number Diff line number Diff line change
Expand Up @@ -12,5 +12,8 @@ data class LibraryItem(
val sizeInBytes: Long,
val addedAtMillis: Long,
val updatedAtMillis: Long,
val media: MediaMinified,
val media: Media,

val libraryFiles: List<LibraryFile> = emptyList(),
val userMediaProgress: MediaProgress? = null,
)
5 changes: 4 additions & 1 deletion core/src/commonMain/kotlin/app.campfire.core/model/Media.kt
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ package app.campfire.core.model

typealias MediaId = String

data class MediaMinified(
data class Media(
val id: MediaId,
val metadata: Metadata,
val coverImageUrl: String,
Expand All @@ -15,6 +15,9 @@ data class MediaMinified(
val durationInMillis: Long,
val sizeInBytes: Long,
val ebookFormat: String? = null,
val audioFiles: List<AudioFile> = emptyList(),
val chapters: List<Chapter> = emptyList(),
val tracks: List<AudioTrack> = emptyList(),
) {
data class Metadata(
val title: String?,
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
package app.campfire.core.model

data class MediaProgress(
val id: String,
val userId: String,
val libraryItemId: String,
val episodeId: String? = null,
val mediaItemId: String,
val mediaItemType: MediaType,
val duration: Float,
val progress: Float,
val currentTime: Float,
val isFinished: Boolean,
val hideFromContinueListening: Boolean,
val ebookLocation: String? = null,
val ebookProgress: Float? = null,
val lastUpdate: Long,
val startedAt: Long,
val finishedAt: Long? = null,
)
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ import app.campfire.data.Media
import app.campfire.data.MediaAudioFiles
import app.campfire.data.MediaAudioTracks
import app.campfire.data.MediaChapters
import app.campfire.data.MediaProgress
import app.campfire.data.Server
import app.campfire.data.User
import app.cash.sqldelight.EnumColumnAdapter
Expand Down Expand Up @@ -75,5 +76,8 @@ class DatabaseFactory(
mediaIndexAdapter = IntColumnAdapter,
metadata_sizeAdapter = IntColumnAdapter,
),
mediaProgressAdapter = MediaProgress.Adapter(
mediaItemTypeAdapter = EnumColumnAdapter(),
)
)
}
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,11 @@ insert:
INSERT OR REPLACE INTO libraryItem
VALUES ?;

selectForId:
SELECT * FROM libraryItem
INNER JOIN media ON media.libraryItemId = libraryItem.id
WHERE libraryItem.id = ?;

selectForLibrary:
SELECT * FROM libraryItem
INNER JOIN media ON media.libraryItemId = libraryItem.id
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ CREATE TABLE mediaAudioFiles (
channels INTEGER AS Int NOT NULL,
channelLayout TEXT NOT NULL,
embeddedCoverArt TEXT,
mimeType TEXT,
mimeType TEXT NOT NULL,

PRIMARY KEY (mediaId, mediaIndex),
FOREIGN KEY (mediaId) REFERENCES media(mediaId) ON DELETE CASCADE
Expand All @@ -34,3 +34,7 @@ CREATE TABLE mediaAudioFiles (
insert:
INSERT OR REPLACE INTO mediaAudioFiles
VALUES ?;

selectForMediaId:
SELECT * FROM mediaAudioFiles
WHERE mediaId = ?;
Original file line number Diff line number Diff line change
Expand Up @@ -27,3 +27,7 @@ CREATE TABLE mediaAudioTracks (
insert:
INSERT OR REPLACE INTO mediaAudioTracks
VALUES ?;

selectForMediaId:
SELECT * FROM mediaAudioTracks
WHERE mediaId = ?;
Original file line number Diff line number Diff line change
Expand Up @@ -15,3 +15,7 @@ CREATE TABLE mediaChapters (
insert:
INSERT OR REPLACE INTO mediaChapters
VALUES ?;

selectForMediaId:
SELECT * FROM mediaChapters
WHERE mediaId = ?;
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
import app.campfire.core.model.MediaType;
import kotlin.Boolean;

CREATE TABLE mediaProgress (
id TEXT NOT NULL PRIMARY KEY ,
userId TEXT NOT NULL,
libraryItemId TEXT NOT NULL,
episodeId TEXT,
mediaItemId TEXT NOT NULL,
mediaItemType TEXT AS MediaType NOT NULL,
duration REAL NOT NULL,
progress REAL NOT NULL,
currentTime REAL NOT NULL,
isFinished INTEGER AS Boolean NOT NULL,
hideFromContinueListening INTEGER AS Boolean NOT NULL,
ebookLocation TEXT,
ebookProgress REAL,
lastUpdate INTEGER NOT NULL,
startedAt INTEGER NOT NULL,
finishedAt INTEGER,

FOREIGN KEY (libraryItemId) REFERENCES libraryItem(id) ON DELETE CASCADE
);

insert:
INSERT OR REPLACE INTO mediaProgress
VALUES ?;

selectForLibraryItem:
SELECT * FROM mediaProgress
WHERE libraryItemId = ?;
Loading

0 comments on commit 9f65c1c

Please sign in to comment.