Implement initial audiobook UX (some of which is a bit of a WIP).

- Renamed various components and moved them to src/components.
- Renamed KOTO_PREFERRED_MODEL* to KOTO_PREFERRED_PLAYLIST*
- Renamed koto string utility functions to always be prefixed with koto_utils_string_ for consistency.
- Added configuration options for show / hiding various album information, as well as preferred sort type.
- Changed db schema to reflect various metadata changes (sorry).
- Implemented genre, narrator, year aggregation from KotoTrack to KotoAlbum for use in KotoAlbumInfo and audiobooks.
- Rearchitected our playlist functionality for KotoAlbums to always have an inner KotoPlaylist that is used.
- Added various getters / setters for new koto_album functionality.
- Implement aggregation of KotoAlbum pointer aggregation in the KotoArtist as a GQueue and GListStore instead of GList so we can get all the albums associated with an artist and use the GListStore for the audiobook view.
- Implement some initial album sorting in Artists (more work to do on this front).
- Many improvements to file indexing logic for CD and position detection, various new koto_track_helpers.
- Add new logic for knowing when to hide playlists given we generate them for each Album now.
- Fix missing updates of KotoPlaylist in KotoNav.
- Added playback position to KotoPlayerbar, renamed bar refs to self.
- New Playlist state saving.
- Updated track ticking logic for track in KotoPlaybackEngine.
- Fixed playback position detection in our KotoPlaybackEngine by swapping from GST_FORMAT_DEFAULT to GST_FORMAT_TIME.
- Changed our get_progress to divide by GST_SECOND.
- Fixed missing type checks in various KotoPlaybackEngine functions.

Fixes #13. Fixes #14. Fixes #15.
This commit is contained in:
Joshua Strobl 2021-08-10 19:18:46 +03:00
parent 93f3f45adf
commit 77b4e900e6
86 changed files with 4926 additions and 824 deletions

View file

@ -10,21 +10,5 @@
color: $text-color-faded;
margin: 10px 0;
}
& .track-list {
& > row {
&:not(:active):not(:selected) { // Neither active nor selected, see gtk overrides
color: $text-color-bright;
&:nth-child(odd):not(:hover) {
background-color: $bg-primary;
}
&:nth-child(even), &:hover {
background-color: $bg-secondary;
}
}
}
}
}
}

View file

@ -1,6 +1,12 @@
@import 'components/album-info';
@import 'components/audiobook-view';
@import 'components/badge';
@import 'components/cover-art-button';
@import 'components/gtk-overrides';
@import 'components/track-list';
@import 'components/track-table';
@import 'components/writer-page';
@import 'pages/audiobook-library';
@import 'pages/artist-view';
@import 'pages/music-local';
@import 'pages/playlist-page';
@ -39,7 +45,8 @@ window {
// All the classes we want consistent padding applied to for its primary content
.artist-view-content, // Has the albums
.playlist-page { // Individual playlists
.playlist-page, // Individual playlists
.writer-page { // Writer page in Audiobook
padding: $itempadding;
}
}

View file

@ -46,4 +46,11 @@
}
}
}
.playerbar-secondary-controls { // Secondary controls
label { // Inner playback position label
font-size: large;
margin-right: $halvedpadding;
}
}
}

View file

@ -5,4 +5,5 @@ $palewhite: #cccccc;
$red : #FF4652;
$itempadding: 40px;
$halvedpadding: $itempadding / 2;
$halvedpadding: $itempadding / 2;
$quarterpadding: $itempadding / 4;

View file

@ -0,0 +1,30 @@
// This file contain the styling for the Album Info section
.album-info {
.album-description,
.album-narrator,
.album-title-year-combo,
.genres-tag-list {
margin-bottom: $quarterpadding
}
.album-title-year-combo {
padding-top: $halvedpadding;
}
.album-title { // Title of album
color: $text-color-faded;
font-size: 2.5em;
font-weight: bold;
}
.album-year {
margin-left: $halvedpadding;
}
.genres-tag-list { // Genres Tag List
& .label-badge:not(:last-child) {
margin-right: $halvedpadding;
}
}
}

View file

@ -0,0 +1,34 @@
// This is the styling for the Audiobook VIew
@import '../vars';
.audiobook-view {
.side-info { // Side Info
margin-right: $halvedpadding;
button,
image {
margin-bottom: $halvedpadding;
}
button { // Play / Continue Playback button
font-size: large;
font-weight: bold;
}
& > label {
font-size: large;
&:last-child {
margin-bottom: $halvedpadding;
}
}
}
.chapters-label { // Chapters label after album info
color: $text-color-faded;
font-size: x-large;
font-weight: bold;
padding: $halvedpadding 0; // Top / bottom padding
}
}

View file

@ -0,0 +1,12 @@
// This file contains the styling for our label badge
@import '../vars';
.label-badge {
color: $text-color-faded;
font-size: large;
font-weight: 900;
background-color: $bg-secondary;
border-radius: 10px;
padding: 5px 20px;
}

View file

@ -0,0 +1,19 @@
// Track List styling
@import '../vars';
.track-list {
& > row {
&:not(:active):not(:selected) { // Neither active nor selected, see gtk overrides
color: $text-color-bright;
&:nth-child(odd):not(:hover) {
background-color: $bg-primary;
}
&:nth-child(even), &:hover {
background-color: $bg-secondary;
}
}
}
}

View file

@ -0,0 +1,12 @@
// This is the styling for the writer page
@import '../vars';
.writer-page {
.writer-header { // Our writer / artist header label
color: $text-color-faded;
font-size: 4em;
font-weight: bold;
padding-bottom: $itempadding;
}
}

View file

@ -0,0 +1,36 @@
// This file contains the styling for our Audiobook Library
@import '../vars';
.audiobook-library { // Library page
.genres-banner { // Banner for genres list
.large-banner { // Large banner with art for each genre
padding: $itempadding;
.audiobook-genre-button { // Genre buttons
.koto-button {
font-size: 2em;
margin: 0.5em;
}
}
}
}
.writers-button-flow { // Flowbox of buttons for writers
padding: 0 $itempadding; // Horizontal padding of our standard item padding
flowboxchild {
padding: 0;
&:nth-child(even) {
margin: 0 0.5em;
}
.writer-button { // Writer button
color: $text-color-bright;
font-size: 1.4em;
background-color: $bg-secondary;
}
}
}
}

View file

@ -21,14 +21,6 @@
& > overlay {
margin-right: $itempadding;
}
& > box {
& > label {
font-size: xx-large;
font-weight: 900;
padding: $halvedpadding 0;
}
}
}
}
}