mirror of
https://github.com/jeffvli/feishin.git
synced 2026-08-08 05:12:57 +02:00
Expanded date fields (#2276)
* added missing date/year fields for other song references * added year table column & sorting * added navidrome track date view for grid, detail & table. * update table column config * Displays date & release date using formatPartialIsoDateUTC, and displays respective year field if no date present added releaseYear player filter Made fullscreen player show formatted date fixed minor year/release year value mismatches added subsonic date/year field to enable the fields in folder view for navidrome using subsonic year field --------- Co-authored-by: Jeff <42182408+jeffvli@users.noreply.github.com>
This commit is contained in:
@@ -95,10 +95,12 @@ const PlayerItemSchema = z.enum([
|
||||
'sample_rate',
|
||||
'track_number',
|
||||
'codec',
|
||||
'date',
|
||||
'release_year',
|
||||
'release_type',
|
||||
'release_date',
|
||||
'genres',
|
||||
'year',
|
||||
]);
|
||||
|
||||
const ArtistItemSchema = z.enum([
|
||||
@@ -650,6 +652,7 @@ const PlayerFilterFieldSchema = z.enum([
|
||||
'duration',
|
||||
'genre',
|
||||
'year',
|
||||
'releaseYear',
|
||||
'note',
|
||||
'path',
|
||||
'playCount',
|
||||
@@ -967,6 +970,7 @@ export enum PlayerItem {
|
||||
BIT_RATE = 'bit_rate',
|
||||
BPM = 'bpm',
|
||||
CODEC = 'codec',
|
||||
DATE = 'date',
|
||||
DISC_NUMBER = 'disc_number',
|
||||
GENRES = 'genres',
|
||||
RELEASE_DATE = 'release_date',
|
||||
@@ -974,6 +978,7 @@ export enum PlayerItem {
|
||||
RELEASE_YEAR = 'release_year',
|
||||
SAMPLE_RATE = 'sample_rate',
|
||||
TRACK_NUMBER = 'track_number',
|
||||
YEAR = 'year',
|
||||
}
|
||||
|
||||
export enum PlaylistTarget {
|
||||
@@ -1080,6 +1085,10 @@ export const playerItems: SortableItem<PlayerItem>[] = [
|
||||
disabled: false,
|
||||
id: PlayerItem.CODEC,
|
||||
},
|
||||
{
|
||||
disabled: true,
|
||||
id: PlayerItem.DATE,
|
||||
},
|
||||
{
|
||||
disabled: true,
|
||||
id: PlayerItem.DISC_NUMBER,
|
||||
@@ -1108,6 +1117,10 @@ export const playerItems: SortableItem<PlayerItem>[] = [
|
||||
disabled: true,
|
||||
id: PlayerItem.TRACK_NUMBER,
|
||||
},
|
||||
{
|
||||
disabled: false,
|
||||
id: PlayerItem.YEAR,
|
||||
},
|
||||
];
|
||||
|
||||
export const sidebarItems: SidebarItemType[] = [
|
||||
@@ -1522,10 +1535,14 @@ const initialState: SettingsState = {
|
||||
alignLeftColumns: [
|
||||
TableColumn.TITLE,
|
||||
TableColumn.ALBUM_ARTIST,
|
||||
TableColumn.YEAR,
|
||||
TableColumn.RELEASE_YEAR,
|
||||
],
|
||||
columns: ALBUM_TABLE_COLUMNS,
|
||||
enabledColumns: [TableColumn.TITLE, TableColumn.ALBUM_ARTIST, TableColumn.YEAR],
|
||||
enabledColumns: [
|
||||
TableColumn.TITLE,
|
||||
TableColumn.ALBUM_ARTIST,
|
||||
TableColumn.RELEASE_YEAR,
|
||||
],
|
||||
pickColumns: [
|
||||
TableColumn.TITLE,
|
||||
TableColumn.DURATION,
|
||||
@@ -1537,8 +1554,8 @@ const initialState: SettingsState = {
|
||||
TableColumn.PLAY_COUNT,
|
||||
TableColumn.SONG_COUNT,
|
||||
TableColumn.RELEASE_DATE,
|
||||
TableColumn.RELEASE_YEAR,
|
||||
TableColumn.LAST_PLAYED,
|
||||
TableColumn.YEAR,
|
||||
],
|
||||
}),
|
||||
size: 'default',
|
||||
@@ -1599,10 +1616,14 @@ const initialState: SettingsState = {
|
||||
alignLeftColumns: [
|
||||
TableColumn.TITLE,
|
||||
TableColumn.ALBUM_ARTIST,
|
||||
TableColumn.YEAR,
|
||||
TableColumn.RELEASE_YEAR,
|
||||
],
|
||||
columns: ALBUM_TABLE_COLUMNS,
|
||||
enabledColumns: [TableColumn.TITLE, TableColumn.ALBUM_ARTIST, TableColumn.YEAR],
|
||||
enabledColumns: [
|
||||
TableColumn.TITLE,
|
||||
TableColumn.ALBUM_ARTIST,
|
||||
TableColumn.RELEASE_YEAR,
|
||||
],
|
||||
pickColumns: [
|
||||
TableColumn.TITLE,
|
||||
TableColumn.DURATION,
|
||||
@@ -1614,8 +1635,8 @@ const initialState: SettingsState = {
|
||||
TableColumn.PLAY_COUNT,
|
||||
TableColumn.SONG_COUNT,
|
||||
TableColumn.RELEASE_DATE,
|
||||
TableColumn.RELEASE_YEAR,
|
||||
TableColumn.LAST_PLAYED,
|
||||
TableColumn.YEAR,
|
||||
],
|
||||
}),
|
||||
size: 'default',
|
||||
@@ -1823,15 +1844,17 @@ const initialState: SettingsState = {
|
||||
TableColumn.TITLE,
|
||||
TableColumn.ARTIST,
|
||||
TableColumn.DURATION,
|
||||
TableColumn.YEAR,
|
||||
TableColumn.BIT_RATE,
|
||||
TableColumn.BPM,
|
||||
TableColumn.CODEC,
|
||||
TableColumn.DATE,
|
||||
TableColumn.DATE_ADDED,
|
||||
TableColumn.GENRE,
|
||||
TableColumn.LAST_PLAYED,
|
||||
TableColumn.RELEASE_DATE,
|
||||
TableColumn.RELEASE_YEAR,
|
||||
TableColumn.TRACK_NUMBER,
|
||||
TableColumn.YEAR,
|
||||
],
|
||||
}),
|
||||
size: 'default',
|
||||
@@ -1899,15 +1922,17 @@ const initialState: SettingsState = {
|
||||
TableColumn.TITLE,
|
||||
TableColumn.ARTIST,
|
||||
TableColumn.DURATION,
|
||||
TableColumn.YEAR,
|
||||
TableColumn.BIT_RATE,
|
||||
TableColumn.BPM,
|
||||
TableColumn.CODEC,
|
||||
TableColumn.DATE,
|
||||
TableColumn.DATE_ADDED,
|
||||
TableColumn.GENRE,
|
||||
TableColumn.LAST_PLAYED,
|
||||
TableColumn.RELEASE_DATE,
|
||||
TableColumn.RELEASE_YEAR,
|
||||
TableColumn.TRACK_NUMBER,
|
||||
TableColumn.YEAR,
|
||||
],
|
||||
}),
|
||||
size: 'default',
|
||||
@@ -2714,6 +2739,92 @@ export const useSettingsStore = createWithEqualityFn<SettingsSlice>()(
|
||||
);
|
||||
}
|
||||
|
||||
if (version < 29) {
|
||||
const dateColumn: ItemTableListColumnConfig = {
|
||||
align: 'center',
|
||||
autoSize: false,
|
||||
id: TableColumn.DATE,
|
||||
isEnabled: false,
|
||||
pinned: null,
|
||||
width: 240,
|
||||
};
|
||||
const yearColumn: ItemTableListColumnConfig = {
|
||||
align: 'center',
|
||||
autoSize: false,
|
||||
id: TableColumn.YEAR,
|
||||
isEnabled: false,
|
||||
pinned: null,
|
||||
width: 200,
|
||||
};
|
||||
|
||||
const listKeysToUpdate: ItemListKey[] = [
|
||||
ItemListKey.SONG,
|
||||
ItemListKey.ALBUM_DETAIL,
|
||||
ItemListKey.FOLDER,
|
||||
ItemListKey.PLAYLIST_SONG,
|
||||
ItemListKey.ALBUM_ARTIST_SONG,
|
||||
ItemListKey.GENRE_SONG,
|
||||
ItemListKey.QUEUE_SONG,
|
||||
ItemListKey.FULL_SCREEN,
|
||||
ItemListKey.SIDE_QUEUE,
|
||||
];
|
||||
|
||||
listKeysToUpdate.forEach((listKey) => {
|
||||
const listConfig = state.lists[listKey];
|
||||
if (listConfig?.table?.columns) {
|
||||
const columns = listConfig.table.columns;
|
||||
const hasYear = columns.some((col) => col.id === TableColumn.YEAR);
|
||||
if (!hasYear) {
|
||||
const releaseYearIndex = columns.findIndex(
|
||||
(col) => col.id === TableColumn.RELEASE_YEAR,
|
||||
);
|
||||
if (releaseYearIndex >= 0) {
|
||||
columns.splice(releaseYearIndex, 0, yearColumn);
|
||||
} else {
|
||||
columns.push(yearColumn);
|
||||
}
|
||||
}
|
||||
const hasDate = columns.some((col) => col.id === TableColumn.DATE);
|
||||
if (!hasDate) {
|
||||
const releaseDateIndex = columns.findIndex(
|
||||
(col) => col.id === TableColumn.RELEASE_DATE,
|
||||
);
|
||||
if (releaseDateIndex >= 0) {
|
||||
columns.splice(releaseDateIndex, 0, dateColumn);
|
||||
} else {
|
||||
columns.push(dateColumn);
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
const listConfig = state.lists[ItemListKey.ALBUM];
|
||||
if (listConfig?.detail?.columns) {
|
||||
const columns = listConfig.detail.columns;
|
||||
const hasYear = columns.some((col) => col.id === TableColumn.YEAR);
|
||||
if (!hasYear) {
|
||||
const releaseYearIndex = columns.findIndex(
|
||||
(col) => col.id === TableColumn.RELEASE_YEAR,
|
||||
);
|
||||
if (releaseYearIndex >= 0) {
|
||||
columns.splice(releaseYearIndex, 0, yearColumn);
|
||||
} else {
|
||||
columns.push(yearColumn);
|
||||
}
|
||||
}
|
||||
const hasDate = columns.some((col) => col.id === TableColumn.DATE);
|
||||
if (!hasDate) {
|
||||
const releaseDateIndex = columns.findIndex(
|
||||
(col) => col.id === TableColumn.RELEASE_DATE,
|
||||
);
|
||||
if (releaseDateIndex >= 0) {
|
||||
columns.splice(releaseDateIndex, 0, dateColumn);
|
||||
} else {
|
||||
columns.push(dateColumn);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (version < 30) {
|
||||
for (const [key, displaySettings] of Object.entries(state.lyricsDisplay)) {
|
||||
const legacySettings = displaySettings as typeof displaySettings & {
|
||||
|
||||
Reference in New Issue
Block a user