Compare commits

..

8 Commits

Author SHA1 Message Date
Hosted Weblate c7214fc7ce Update translation files
Updated by "Remove blank strings" hook in Weblate.

Translated using Weblate (Chinese (Simplified Han script))

Currently translated at 99.8% (652 of 653 strings)

Co-authored-by: ENDzZ <godzmichael@outlook.com>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/zh_Hans/
Translation: feishin/Translation
2024-09-29 06:44:18 +02:00
Hosted Weblate 84bcfb6eb9 Translated using Weblate (Spanish)
Currently translated at 99.8% (652 of 653 strings)

Co-authored-by: Hosted Weblate <hosted@weblate.org>
Co-authored-by: gallegonovato <fran-carro@hotmail.es>
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/es/
Translation: feishin/Translation
2024-09-29 06:44:17 +02:00
Hosted Weblate 0ca7a0efc9 Translated using Weblate (Czech)
Currently translated at 100.0% (653 of 653 strings)

Co-authored-by: Fjuro <fjuro@alius.cz>
Co-authored-by: Hosted Weblate <hosted@weblate.org>
Translate-URL: https://hosted.weblate.org/projects/feishin/translation/cs/
Translation: feishin/Translation
2024-09-29 06:44:17 +02:00
Torsten Curdt cb76436a2a point help menu items to feishin instead of just electron (#767) 2024-09-28 21:44:13 -07:00
jeffvli 88a951e2e7 Update to v0.10.1 2024-09-28 21:39:30 -07:00
jeffvli 6f1b78c2d6 Fix Subsonic servertype lock from docker configuration 2024-09-28 21:37:09 -07:00
jeffvli 107074b240 Fix subsonic album list sort options 2024-09-28 21:35:32 -07:00
Kendall Garner 6e8ca7e035 fix navidrome getPlaylistSOngList end 2024-09-28 21:22:14 -07:00
11 changed files with 83 additions and 31 deletions
+2 -2
View File
@@ -1,12 +1,12 @@
{ {
"name": "feishin", "name": "feishin",
"version": "0.10.0", "version": "0.10.1",
"lockfileVersion": 2, "lockfileVersion": 2,
"requires": true, "requires": true,
"packages": { "packages": {
"": { "": {
"name": "feishin", "name": "feishin",
"version": "0.10.0", "version": "0.10.1",
"hasInstallScript": true, "hasInstallScript": true,
"license": "GPL-3.0", "license": "GPL-3.0",
"dependencies": { "dependencies": {
+1 -1
View File
@@ -2,7 +2,7 @@
"name": "feishin", "name": "feishin",
"productName": "Feishin", "productName": "Feishin",
"description": "Feishin music server", "description": "Feishin music server",
"version": "0.10.0", "version": "0.10.1",
"scripts": { "scripts": {
"build": "concurrently \"npm run build:main\" \"npm run build:renderer\" \"npm run build:remote\"", "build": "concurrently \"npm run build:main\" \"npm run build:renderer\" \"npm run build:remote\"",
"build:main": "cross-env NODE_ENV=production TS_NODE_TRANSPILE_ONLY=true webpack --config ./.erb/configs/webpack.config.main.prod.ts", "build:main": "cross-env NODE_ENV=production TS_NODE_TRANSPILE_ONLY=true webpack --config ./.erb/configs/webpack.config.main.prod.ts",
+2 -2
View File
@@ -1,12 +1,12 @@
{ {
"name": "feishin", "name": "feishin",
"version": "0.10.0", "version": "0.10.1",
"lockfileVersion": 2, "lockfileVersion": 2,
"requires": true, "requires": true,
"packages": { "packages": {
"": { "": {
"name": "feishin", "name": "feishin",
"version": "0.10.0", "version": "0.10.1",
"hasInstallScript": true, "hasInstallScript": true,
"license": "GPL-3.0", "license": "GPL-3.0",
"dependencies": { "dependencies": {
+1 -1
View File
@@ -1,6 +1,6 @@
{ {
"name": "feishin", "name": "feishin",
"version": "0.10.0", "version": "0.10.1",
"description": "", "description": "",
"main": "./dist/main/main.js", "main": "./dist/main/main.js",
"author": { "author": {
+20 -5
View File
@@ -29,7 +29,8 @@
"addLast": "přidat poslední", "addLast": "přidat poslední",
"mute": "ztlumit", "mute": "ztlumit",
"skip_forward": "přeskočit dopředu", "skip_forward": "přeskočit dopředu",
"playSimilarSongs": "přehrát podobné skladby" "playSimilarSongs": "přehrát podobné skladby",
"viewQueue": "zobrazit frontu"
}, },
"setting": { "setting": {
"crossfadeStyle_description": "vyberte způsob prolnutí u přehrávače zvuku", "crossfadeStyle_description": "vyberte způsob prolnutí u přehrávače zvuku",
@@ -387,7 +388,8 @@
"autoFitColumns": "automaticky přizpůsobit sloupce", "autoFitColumns": "automaticky přizpůsobit sloupce",
"size": "$t(common.size)", "size": "$t(common.size)",
"itemGap": "mezera mezi položkami (px)", "itemGap": "mezera mezi položkami (px)",
"itemSize": "velikost položek (px)" "itemSize": "velikost položek (px)",
"followCurrentSong": "následovat aktuální skladbu"
}, },
"label": { "label": {
"releaseDate": "datum vydání", "releaseDate": "datum vydání",
@@ -544,12 +546,14 @@
"useImageAspectRatio": "použít poměr stran obrázku", "useImageAspectRatio": "použít poměr stran obrázku",
"lyricGap": "mezera textů", "lyricGap": "mezera textů",
"dynamicImageBlur": "velikost rozostření obrázku", "dynamicImageBlur": "velikost rozostření obrázku",
"dynamicIsImage": "povolit obrázek na pozadí" "dynamicIsImage": "povolit obrázek na pozadí",
"lyricOffset": "posunutí textů (ms)"
}, },
"upNext": "další", "upNext": "další",
"lyrics": "texty", "lyrics": "texty",
"related": "související", "related": "související",
"visualizer": "vizualizér" "visualizer": "vizualizér",
"noLyrics": "nenalezeny žádné texty"
}, },
"appMenu": { "appMenu": {
"selectServer": "vybrat server", "selectServer": "vybrat server",
@@ -652,6 +656,14 @@
}, },
"playlist": { "playlist": {
"reorder": "změna pořadí povolena pouze při řazení podle id" "reorder": "změna pořadí povolena pouze při řazení podle id"
},
"manageServers": {
"url": "URL",
"username": "uživatelské jméno",
"editServerDetailsTooltip": "upravit podrobnosti o serveru",
"removeServer": "odstranit server",
"serverDetails": "podrobnosti o serveru",
"title": "správa serverů"
} }
}, },
"form": { "form": {
@@ -763,6 +775,9 @@
"trackWithCount_other": "{{count}} skladeb", "trackWithCount_other": "{{count}} skladeb",
"play_one": "{{count}} přehrání", "play_one": "{{count}} přehrání",
"play_few": "{{count}} přehrání", "play_few": "{{count}} přehrání",
"play_other": "{{count}} přehrání" "play_other": "{{count}} přehrání",
"song_one": " ",
"song_few": " ",
"song_other": " "
} }
} }
+16 -4
View File
@@ -29,7 +29,8 @@
"mute": "silencio", "mute": "silencio",
"skip_forward": "saltar hacia delante", "skip_forward": "saltar hacia delante",
"pause": "pausa", "pause": "pausa",
"playSimilarSongs": "Reproducir canciones similares" "playSimilarSongs": "Reproducir canciones similares",
"viewQueue": "ver cola"
}, },
"setting": { "setting": {
"crossfadeStyle_description": "selecciona el estilo de crossfade a usar por el reproductor de audio", "crossfadeStyle_description": "selecciona el estilo de crossfade a usar por el reproductor de audio",
@@ -513,11 +514,13 @@
"showLyricMatch": "mostrar coincidencia de letras", "showLyricMatch": "mostrar coincidencia de letras",
"lyricGap": "desfase de letra", "lyricGap": "desfase de letra",
"dynamicImageBlur": "tamaño de desenfoque de imagen", "dynamicImageBlur": "tamaño de desenfoque de imagen",
"dynamicIsImage": "habilitar imagen de fondo" "dynamicIsImage": "habilitar imagen de fondo",
"lyricOffset": "compensación de letras (ms)"
}, },
"lyrics": "letras", "lyrics": "letras",
"related": "relacionado", "related": "relacionado",
"visualizer": "visualizador" "visualizer": "visualizador",
"noLyrics": "sin letras"
}, },
"albumDetail": { "albumDetail": {
"moreFromArtist": "más de este $t(entity.artist_one)", "moreFromArtist": "más de este $t(entity.artist_one)",
@@ -578,6 +581,14 @@
}, },
"playlist": { "playlist": {
"reorder": "la reordenación solo se activa al ordenar por id" "reorder": "la reordenación solo se activa al ordenar por id"
},
"manageServers": {
"removeServer": "eliminar servidor",
"title": "administrar servidores",
"serverDetails": "detalles del servidor",
"username": "nombre de usuario",
"editServerDetailsTooltip": "editar detalles del servidor",
"url": "URL"
} }
}, },
"form": { "form": {
@@ -705,7 +716,8 @@
"size": "$t(common.size)", "size": "$t(common.size)",
"displayType": "tipo de visualización", "displayType": "tipo de visualización",
"itemGap": "espacio entre elementos (px)", "itemGap": "espacio entre elementos (px)",
"itemSize": "tamaño del elemento (px)" "itemSize": "tamaño del elemento (px)",
"followCurrentSong": "seguir la canción actual"
}, },
"view": { "view": {
"card": "tarjeta", "card": "tarjeta",
+16 -4
View File
@@ -159,7 +159,8 @@
"skip_forward": "向前跳过", "skip_forward": "向前跳过",
"playbackSpeed": "播放速度", "playbackSpeed": "播放速度",
"pause": "暂停", "pause": "暂停",
"playSimilarSongs": "播放类似的曲目" "playSimilarSongs": "播放类似的曲目",
"viewQueue": "查看播放队列"
}, },
"setting": { "setting": {
"crossfadeStyle_description": "选择用于音频播放器的淡入淡出风格", "crossfadeStyle_description": "选择用于音频播放器的淡入淡出风格",
@@ -483,12 +484,14 @@
"lyricGap": "歌词间距", "lyricGap": "歌词间距",
"followCurrentLyric": "跟随当前歌词", "followCurrentLyric": "跟随当前歌词",
"dynamicImageBlur": "图像模糊大小", "dynamicImageBlur": "图像模糊大小",
"dynamicIsImage": "启用背景图像" "dynamicIsImage": "启用背景图像",
"lyricOffset": "歌词延迟补偿(毫秒)"
}, },
"lyrics": "歌词", "lyrics": "歌词",
"related": "相关", "related": "相关",
"upNext": "即将播放", "upNext": "即将播放",
"visualizer": "可视化" "visualizer": "可视化",
"noLyrics": "未找到歌词"
}, },
"appMenu": { "appMenu": {
"selectServer": "选择服务器", "selectServer": "选择服务器",
@@ -591,6 +594,14 @@
}, },
"playlist": { "playlist": {
"reorder": "仅在按 ID 排序时启用重排序" "reorder": "仅在按 ID 排序时启用重排序"
},
"manageServers": {
"url": "URL",
"title": "管理服务器",
"serverDetails": "服务器详细信息",
"username": "用户名",
"editServerDetailsTooltip": "编辑服务器详细信息",
"removeServer": "移除服务器"
} }
}, },
"form": { "form": {
@@ -662,7 +673,8 @@
"autoFitColumns": "列宽自适应", "autoFitColumns": "列宽自适应",
"size": "$t(common.size)", "size": "$t(common.size)",
"itemGap": "项目间隙(px", "itemGap": "项目间隙(px",
"itemSize": "项目大小 (px)" "itemSize": "项目大小 (px)",
"followCurrentSong": "关注当前播放的歌曲"
}, },
"view": { "view": {
"table": "表格", "table": "表格",
+8 -8
View File
@@ -147,27 +147,27 @@ export default class MenuBuilder {
submenu: [ submenu: [
{ {
click() { click() {
shell.openExternal('https://electronjs.org'); shell.openExternal('https://github.com/jeffvli/feishin');
}, },
label: 'Learn More', label: 'Learn More',
}, },
{ {
click() { click() {
shell.openExternal( shell.openExternal(
'https://github.com/electron/electron/tree/main/docs#readme', 'https://github.com/jeffvli/feishin?tab=readme-ov-file#getting-started',
); );
}, },
label: 'Documentation', label: 'Documentation',
}, },
{ {
click() { click() {
shell.openExternal('https://www.electronjs.org/community'); shell.openExternal('https://github.com/jeffvli/feishin/discussions');
}, },
label: 'Community Discussions', label: 'Community Discussions',
}, },
{ {
click() { click() {
shell.openExternal('https://github.com/electron/electron/issues'); shell.openExternal('https://github.com/jeffvli/feishin/issues');
}, },
label: 'Search Issues', label: 'Search Issues',
}, },
@@ -246,27 +246,27 @@ export default class MenuBuilder {
submenu: [ submenu: [
{ {
click() { click() {
shell.openExternal('https://electronjs.org'); shell.openExternal('https://github.com/jeffvli/feishin');
}, },
label: 'Learn More', label: 'Learn More',
}, },
{ {
click() { click() {
shell.openExternal( shell.openExternal(
'https://github.com/electron/electron/tree/main/docs#readme', 'https://github.com/jeffvli/feishin?tab=readme-ov-file#getting-started',
); );
}, },
label: 'Documentation', label: 'Documentation',
}, },
{ {
click() { click() {
shell.openExternal('https://www.electronjs.org/community'); shell.openExternal('https://github.com/jeffvli/feishin/discussions');
}, },
label: 'Community Discussions', label: 'Community Discussions',
}, },
{ {
click() { click() {
shell.openExternal('https://github.com/electron/electron/issues'); shell.openExternal('https://github.com/jeffvli/feishin/issues');
}, },
label: 'Search Issues', label: 'Search Issues',
}, },
@@ -337,7 +337,7 @@ export const NavidromeController: ControllerEndpoint = {
id: query.id, id: query.id,
}, },
query: { query: {
_end: query.limit, _end: query.startIndex + (query.limit || -1),
_order: query.sortOrder ? sortOrderMap.navidrome[query.sortOrder] : 'ASC', _order: query.sortOrder ? sortOrderMap.navidrome[query.sortOrder] : 'ASC',
_sort: query.sortBy _sort: query.sortBy
? songListSortMap.navidrome[query.sortBy] ? songListSortMap.navidrome[query.sortBy]
@@ -15,6 +15,7 @@ import {
GenreListSort, GenreListSort,
AlbumListSort, AlbumListSort,
sortAlbumList, sortAlbumList,
SortOrder,
} from '/@/renderer/api/types'; } from '/@/renderer/api/types';
import { randomString } from '/@/renderer/utils'; import { randomString } from '/@/renderer/utils';
import { ServerFeatures } from '/@/renderer/api/features-types'; import { ServerFeatures } from '/@/renderer/api/features-types';
@@ -25,14 +26,14 @@ const ALBUM_LIST_SORT_MAPPING: Record<AlbumListSort, AlbumListSortType | undefin
[AlbumListSort.PLAY_COUNT]: AlbumListSortType.FREQUENT, [AlbumListSort.PLAY_COUNT]: AlbumListSortType.FREQUENT,
[AlbumListSort.RECENTLY_ADDED]: AlbumListSortType.NEWEST, [AlbumListSort.RECENTLY_ADDED]: AlbumListSortType.NEWEST,
[AlbumListSort.FAVORITED]: AlbumListSortType.STARRED, [AlbumListSort.FAVORITED]: AlbumListSortType.STARRED,
[AlbumListSort.YEAR]: AlbumListSortType.RECENT, [AlbumListSort.YEAR]: AlbumListSortType.BY_YEAR,
[AlbumListSort.NAME]: AlbumListSortType.ALPHABETICAL_BY_NAME, [AlbumListSort.NAME]: AlbumListSortType.ALPHABETICAL_BY_NAME,
[AlbumListSort.COMMUNITY_RATING]: undefined, [AlbumListSort.COMMUNITY_RATING]: undefined,
[AlbumListSort.DURATION]: undefined, [AlbumListSort.DURATION]: undefined,
[AlbumListSort.CRITIC_RATING]: undefined, [AlbumListSort.CRITIC_RATING]: undefined,
[AlbumListSort.RATING]: undefined, [AlbumListSort.RATING]: undefined,
[AlbumListSort.ARTIST]: undefined, [AlbumListSort.ARTIST]: undefined,
[AlbumListSort.RECENTLY_PLAYED]: undefined, [AlbumListSort.RECENTLY_PLAYED]: AlbumListSortType.RECENT,
[AlbumListSort.RELEASE_DATE]: undefined, [AlbumListSort.RELEASE_DATE]: undefined,
[AlbumListSort.SONG_COUNT]: undefined, [AlbumListSort.SONG_COUNT]: undefined,
}; };
@@ -360,6 +361,16 @@ export const SubsonicController: ControllerEndpoint = {
} }
} }
if (type === AlbumListSortType.BY_YEAR && !fromYear && !toYear) {
if (query.sortOrder === SortOrder.ASC) {
fromYear = 0;
toYear = dayjs().year();
} else {
fromYear = dayjs().year();
toYear = 0;
}
}
const res = await ssApiClient(apiClientProps).getAlbumList2({ const res = await ssApiClient(apiClientProps).getAlbumList2({
query: { query: {
fromYear, fromYear,
@@ -436,7 +447,7 @@ export const SubsonicController: ControllerEndpoint = {
return (res.body.starred?.album || []).length || 0; return (res.body.starred?.album || []).length || 0;
} }
let type = ALBUM_LIST_SORT_MAPPING[query.sortBy] ?? AlbumListSortType.ALPHABETICAL_BY_NAME; let type = AlbumListSortType.ALPHABETICAL_BY_NAME;
let fetchNextPage = true; let fetchNextPage = true;
let startIndex = 0; let startIndex = 0;
+2
View File
@@ -69,6 +69,8 @@ export const toServerType = (value?: string): ServerType | null => {
return ServerType.JELLYFIN; return ServerType.JELLYFIN;
case ServerType.NAVIDROME: case ServerType.NAVIDROME:
return ServerType.NAVIDROME; return ServerType.NAVIDROME;
case ServerType.SUBSONIC:
return ServerType.SUBSONIC;
default: default:
return null; return null;
} }