-
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
41 changed files
with
1,368 additions
and
31 deletions.
There are no files selected for viewing
24 changes: 24 additions & 0 deletions
24
common/compose/src/commonMain/kotlin/app/campfire/common/compose/extensions/Duration.kt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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')) | ||
} | ||
} |
89 changes: 89 additions & 0 deletions
89
common/compose/src/commonMain/kotlin/app/campfire/common/compose/icons/outline/Autoplay.kt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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
29
core/src/commonMain/kotlin/app.campfire.core/model/AudioFile.kt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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
12
core/src/commonMain/kotlin/app.campfire.core/model/AudioTrack.kt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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
8
core/src/commonMain/kotlin/app.campfire.core/model/Chapter.kt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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
12
core/src/commonMain/kotlin/app.campfire.core/model/FileMetadata.kt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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
10
core/src/commonMain/kotlin/app.campfire.core/model/LibraryFile.kt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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, | ||
) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
20 changes: 20 additions & 0 deletions
20
core/src/commonMain/kotlin/app.campfire.core/model/MediaProgress.kt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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, | ||
) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
31 changes: 31 additions & 0 deletions
31
data/db/src/commonMain/sqldelight/app/campfire/data/mediaProgress.sq
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 = ?; |
Oops, something went wrong.