diff --git a/apps/electron-backend/src/app/api/main.preload.ts b/apps/electron-backend/src/app/api/main.preload.ts index d99aed546..1d20e000b 100644 --- a/apps/electron-backend/src/app/api/main.preload.ts +++ b/apps/electron-backend/src/app/api/main.preload.ts @@ -3,6 +3,7 @@ import type { ExternalPlayerSession, PlaylistRefreshEvent, PlaylistRefreshPayload, + XtreamCategory, } from 'shared-interfaces'; const PORTAL_DEBUG_EVENT = 'PORTAL_DEBUG_EVENT'; @@ -298,7 +299,7 @@ contextBridge.exposeInMainWorld('electron', { ipcRenderer.invoke('DB_GET_CATEGORIES', playlistId, type), dbSaveCategories: ( playlistId: string, - categories: any[], + categories: XtreamCategory[], type: string, hiddenCategoryXtreamIds?: number[] ) => diff --git a/apps/web/src/assets/i18n/de.json b/apps/web/src/assets/i18n/de.json index c75b50f05..f1cda9069 100644 --- a/apps/web/src/assets/i18n/de.json +++ b/apps/web/src/assets/i18n/de.json @@ -491,6 +491,9 @@ "REMOVE": "Entfernen", "PLAY": "Abspielen", "REVEAL": "Im Ordner anzeigen", + "COPY_URL": "Download-URL kopieren", + "URL_COPIED": "Download-URL in die Zwischenablage kopiert", + "URL_COPY_FAILED": "URL konnte nicht kopiert werden", "STATUS": { "QUEUED": "In Warteschlange", "DOWNLOADING": "Wird heruntergeladen", @@ -674,7 +677,27 @@ "OPEN_DOWNLOADS_LABEL": "Downloads öffnen", "OPEN_DOWNLOADS_DESCRIPTION": "Zur Download-Ansicht wechseln", "OPEN_GLOBAL_RECENT_LABEL": "Zuletzt angesehen öffnen", - "OPEN_GLOBAL_RECENT_DESCRIPTION": "Globale Zuletzt-angesehen-Seite öffnen" + "OPEN_GLOBAL_RECENT_DESCRIPTION": "Globale Zuletzt-angesehen-Seite öffnen", + "OPEN_SETTINGS_LABEL": "Einstellungen öffnen", + "OPEN_SETTINGS_DESCRIPTION": "Zu den Anwendungseinstellungen", + "OPEN_SOURCES_LABEL": "Quellen verwalten", + "OPEN_SOURCES_DESCRIPTION": "Zur Quellenverwaltung", + "OPEN_DASHBOARD_LABEL": "Dashboard öffnen", + "OPEN_DASHBOARD_DESCRIPTION": "Zum Dashboard navigieren", + "ADD_PLAYLIST_LABEL": "Neue Quelle hinzufügen", + "ADD_PLAYLIST_DESCRIPTION": "Dialog zum Hinzufügen öffnen", + "REFRESH_PLAYLIST_LABEL": "Playlist aktualisieren", + "REFRESH_PLAYLIST_DESCRIPTION": "Daten von der Quelle neu laden", + "PLAYLIST_INFO_LABEL": "Playlist-Details", + "PLAYLIST_INFO_DESCRIPTION": "Aktuelle Playlist-Informationen anzeigen", + "ACCOUNT_INFO_LABEL": "Kontoinformationen", + "ACCOUNT_INFO_DESCRIPTION": "Xtream-Server-Kontodaten anzeigen", + "GO_TO_VOD_LABEL": "Filme", + "GO_TO_VOD_DESCRIPTION": "Zum Filmbereich wechseln", + "GO_TO_LIVE_LABEL": "Live-TV", + "GO_TO_LIVE_DESCRIPTION": "Zum Live-TV-Bereich wechseln", + "GO_TO_SERIES_LABEL": "Serien", + "GO_TO_SERIES_DESCRIPTION": "Zum Serienbereich wechseln" } }, "SOURCES": { @@ -694,6 +717,9 @@ "MOVIE_CATEGORIES": "Filmkategorien", "SERIES_CATEGORIES": "Serienkategorien", "LIVE_CATEGORIES": "Live-Kategorien", + "XTREAM_SYNCING_MOVIES": "Filmkategorien werden synchronisiert...", + "XTREAM_SYNCING_SERIES": "Serienkategorien werden synchronisiert...", + "XTREAM_SYNCING_LIVE": "Live-Kategorien werden synchronisiert...", "XTREAM_SOURCE": "Xtream-Quelle", "STALKER_PORTAL": "Stalker-Portal", "MANAGE_CATEGORIES": "Kategorien verwalten", @@ -701,7 +727,9 @@ "LOAD_CATEGORIES_ERROR_HINT": "Bitte erneut versuchen oder die Portal-Einstellungen prüfen.", "FILTER_BY_TYPE": "Nach Typ filtern", "ITEM_COUNT_ONE": "1 Element", - "ITEM_COUNT_OTHER": "{{count}} Elemente" + "ITEM_COUNT_OTHER": "{{count}} Elemente", + "SEARCH": "Suchen", + "SEARCH_CATEGORIES": "Kategorien suchen" }, "COMMAND_PALETTE": { "TITLE": "Befehlspalette", diff --git a/apps/web/src/assets/i18n/en.json b/apps/web/src/assets/i18n/en.json index a15972c1e..81f628aae 100644 --- a/apps/web/src/assets/i18n/en.json +++ b/apps/web/src/assets/i18n/en.json @@ -561,6 +561,9 @@ "REMOVE": "Remove", "PLAY": "Play", "REVEAL": "Show in Folder", + "COPY_URL": "Copy download URL", + "URL_COPIED": "Download URL copied to clipboard", + "URL_COPY_FAILED": "Failed to copy URL to clipboard", "STATUS": { "QUEUED": "Queued", "DOWNLOADING": "Downloading", @@ -745,7 +748,27 @@ "OPEN_DOWNLOADS_LABEL": "Open downloads", "OPEN_DOWNLOADS_DESCRIPTION": "Navigate to downloads view", "OPEN_GLOBAL_RECENT_LABEL": "Open recently viewed", - "OPEN_GLOBAL_RECENT_DESCRIPTION": "Open global recently viewed page" + "OPEN_GLOBAL_RECENT_DESCRIPTION": "Open global recently viewed page", + "OPEN_SETTINGS_LABEL": "Open settings", + "OPEN_SETTINGS_DESCRIPTION": "Navigate to application settings", + "OPEN_SOURCES_LABEL": "Manage sources", + "OPEN_SOURCES_DESCRIPTION": "Navigate to source management", + "OPEN_DASHBOARD_LABEL": "Open dashboard", + "OPEN_DASHBOARD_DESCRIPTION": "Navigate to the dashboard", + "ADD_PLAYLIST_LABEL": "Add new source", + "ADD_PLAYLIST_DESCRIPTION": "Open add playlist dialog", + "REFRESH_PLAYLIST_LABEL": "Refresh playlist", + "REFRESH_PLAYLIST_DESCRIPTION": "Re-sync data from remote source", + "PLAYLIST_INFO_LABEL": "Playlist details", + "PLAYLIST_INFO_DESCRIPTION": "Show current playlist information", + "ACCOUNT_INFO_LABEL": "Account info", + "ACCOUNT_INFO_DESCRIPTION": "Show Xtream server account details", + "GO_TO_VOD_LABEL": "Movies", + "GO_TO_VOD_DESCRIPTION": "Jump to movies section", + "GO_TO_LIVE_LABEL": "Live TV", + "GO_TO_LIVE_DESCRIPTION": "Jump to live TV section", + "GO_TO_SERIES_LABEL": "Series", + "GO_TO_SERIES_DESCRIPTION": "Jump to series section" } }, "SOURCES": { @@ -765,6 +788,9 @@ "MOVIE_CATEGORIES": "Movie Categories", "SERIES_CATEGORIES": "Series Categories", "LIVE_CATEGORIES": "Live Categories", + "XTREAM_SYNCING_MOVIES": "Syncing movie categories...", + "XTREAM_SYNCING_SERIES": "Syncing series categories...", + "XTREAM_SYNCING_LIVE": "Syncing live categories...", "XTREAM_SOURCE": "Xtream source", "STALKER_PORTAL": "Stalker portal", "MANAGE_CATEGORIES": "Manage categories", @@ -772,7 +798,9 @@ "LOAD_CATEGORIES_ERROR_HINT": "Please retry or verify portal settings.", "FILTER_BY_TYPE": "Filter by type", "ITEM_COUNT_ONE": "1 item", - "ITEM_COUNT_OTHER": "{{count}} items" + "ITEM_COUNT_OTHER": "{{count}} items", + "SEARCH": "Search", + "SEARCH_CATEGORIES": "Search categories" }, "COMMAND_PALETTE": { "TITLE": "Command palette", diff --git a/apps/web/src/assets/i18n/ru.json b/apps/web/src/assets/i18n/ru.json index 158ecc0a6..505f422ff 100644 --- a/apps/web/src/assets/i18n/ru.json +++ b/apps/web/src/assets/i18n/ru.json @@ -474,7 +474,10 @@ }, "SOURCE_PLAYLIST_MISSING": "Эту загрузку больше нельзя открыть в библиотеке, потому что исходный плейлист был удален.", "FILE_NOT_FOUND": "Этот загруженный файл больше недоступен на диске.", - "FILE_ACTION_ERROR": "Не удалось выполнить действие с файлом." + "FILE_ACTION_ERROR": "Не удалось выполнить действие с файлом.", + "COPY_URL": "Копировать URL загрузки", + "URL_COPIED": "URL загрузки скопирован в буфер обмена", + "URL_COPY_FAILED": "Не удалось скопировать URL" }, "REMOTE_CONTROL": { "TITLE": "Дистанционное управление", @@ -651,7 +654,27 @@ "OPEN_DOWNLOADS_LABEL": "Открыть загрузки", "OPEN_DOWNLOADS_DESCRIPTION": "Перейти к представлению загрузок", "OPEN_GLOBAL_RECENT_LABEL": "Открыть недавно просмотренные", - "OPEN_GLOBAL_RECENT_DESCRIPTION": "Открыть глобальную страницу недавно просмотренного" + "OPEN_GLOBAL_RECENT_DESCRIPTION": "Открыть глобальную страницу недавно просмотренного", + "OPEN_SETTINGS_LABEL": "Открыть настройки", + "OPEN_SETTINGS_DESCRIPTION": "Перейти к настройкам приложения", + "OPEN_SOURCES_LABEL": "Управление источниками", + "OPEN_SOURCES_DESCRIPTION": "Перейти к управлению источниками", + "OPEN_DASHBOARD_LABEL": "Открыть панель", + "OPEN_DASHBOARD_DESCRIPTION": "Перейти к панели управления", + "ADD_PLAYLIST_LABEL": "Добавить источник", + "ADD_PLAYLIST_DESCRIPTION": "Открыть диалог добавления плейлиста", + "REFRESH_PLAYLIST_LABEL": "Обновить плейлист", + "REFRESH_PLAYLIST_DESCRIPTION": "Синхронизировать данные с источника", + "PLAYLIST_INFO_LABEL": "Сведения о плейлисте", + "PLAYLIST_INFO_DESCRIPTION": "Показать информацию о текущем плейлисте", + "ACCOUNT_INFO_LABEL": "Информация об аккаунте", + "ACCOUNT_INFO_DESCRIPTION": "Показать данные аккаунта Xtream", + "GO_TO_VOD_LABEL": "Фильмы", + "GO_TO_VOD_DESCRIPTION": "Перейти к разделу фильмов", + "GO_TO_LIVE_LABEL": "Прямой эфир", + "GO_TO_LIVE_DESCRIPTION": "Перейти к разделу ТВ", + "GO_TO_SERIES_LABEL": "Сериалы", + "GO_TO_SERIES_DESCRIPTION": "Перейти к разделу сериалов" } }, "SOURCES": { @@ -671,6 +694,9 @@ "MOVIE_CATEGORIES": "Категории фильмов", "SERIES_CATEGORIES": "Категории сериалов", "LIVE_CATEGORIES": "Категории ТВ", + "XTREAM_SYNCING_MOVIES": "Синхронизация категорий фильмов...", + "XTREAM_SYNCING_SERIES": "Синхронизация категорий сериалов...", + "XTREAM_SYNCING_LIVE": "Синхронизация категорий ТВ...", "XTREAM_SOURCE": "Xtream источник", "STALKER_PORTAL": "Портал Stalker", "MANAGE_CATEGORIES": "Управлять категориями", @@ -678,7 +704,9 @@ "LOAD_CATEGORIES_ERROR_HINT": "Повторите попытку или проверьте настройки портала.", "FILTER_BY_TYPE": "Фильтр по типу", "ITEM_COUNT_ONE": "1 элемент", - "ITEM_COUNT_OTHER": "{{count}} элементов" + "ITEM_COUNT_OTHER": "{{count}} элементов", + "SEARCH": "Поиск", + "SEARCH_CATEGORIES": "Поиск категорий" }, "COMMAND_PALETTE": { "TITLE": "Палитра команд", diff --git a/apps/web/src/typings.d.ts b/apps/web/src/typings.d.ts index 5bca10657..a17d42fab 100644 --- a/apps/web/src/typings.d.ts +++ b/apps/web/src/typings.d.ts @@ -13,6 +13,7 @@ import { PlaylistRefreshEvent, PlaylistRefreshPayload, PortalDebugEvent, + XtreamCategory, } from 'shared-interfaces'; import { DbOperationEvent, @@ -191,7 +192,7 @@ declare global { ) => Promise; dbSaveCategories: ( playlistId: string, - categories: XCategoryFromDb[], + categories: XtreamCategory[], type: string, hiddenCategoryXtreamIds?: number[] ) => Promise<{ success: boolean }>;