diff --git a/apps/electron-backend/src/app/services/store.service.ts b/apps/electron-backend/src/app/services/store.service.ts index 62aa66079..56ea5418f 100644 --- a/apps/electron-backend/src/app/services/store.service.ts +++ b/apps/electron-backend/src/app/services/store.service.ts @@ -3,11 +3,13 @@ import Store from 'electron-store'; export const WINDOW_BOUNDS = 'WINDOW_BOUNDS'; export const MPV_PLAYER_PATH = 'MPV_PLAYER_PATH'; export const VLC_PLAYER_PATH = 'VLC_PLAYER_PATH'; +export const MPV_REUSE_INSTANCE = 'MPV_REUSE_INSTANCE'; export type StoreType = { [WINDOW_BOUNDS]: Electron.Rectangle; [MPV_PLAYER_PATH]: string; [VLC_PLAYER_PATH]: string; + [MPV_REUSE_INSTANCE]: boolean; }; // Initialize renderer support diff --git a/apps/web/src/app/services/settings-store.service.ts b/apps/web/src/app/services/settings-store.service.ts index 7b82cc439..e9735cb01 100644 --- a/apps/web/src/app/services/settings-store.service.ts +++ b/apps/web/src/app/services/settings-store.service.ts @@ -24,6 +24,7 @@ const DEFAULT_SETTINGS: Settings = { showCaptions: false, theme: Theme.LightTheme, mpvPlayerPath: '', + mpvReuseInstance: false, vlcPlayerPath: '', remoteControl: false, remoteControlPort: 3000, @@ -48,7 +49,11 @@ export const SettingsStore = signalStore( async updateSettings(settings: Partial) { patchState(store, settings); - await firstValueFrom(storage.set(STORE_KEY.Settings, settings)); + // Save the complete settings object, not just the partial update + const completeSettings = this.getSettings(); + await firstValueFrom( + storage.set(STORE_KEY.Settings, completeSettings) + ); }, getSettings() { @@ -59,6 +64,7 @@ export const SettingsStore = signalStore( showCaptions: store.showCaptions(), theme: store.theme(), mpvPlayerPath: store.mpvPlayerPath(), + mpvReuseInstance: store.mpvReuseInstance(), vlcPlayerPath: store.vlcPlayerPath(), remoteControl: store.remoteControl(), remoteControlPort: store.remoteControlPort(), diff --git a/apps/web/src/app/settings/settings.component.html b/apps/web/src/app/settings/settings.component.html index a8a2ec31e..e483a4468 100644 --- a/apps/web/src/app/settings/settings.component.html +++ b/apps/web/src/app/settings/settings.component.html @@ -128,6 +128,23 @@ +
+
+ {{ 'SETTINGS.MPV_REUSE_INSTANCE_LABEL' | translate }} +

+ {{ + 'SETTINGS.MPV_REUSE_INSTANCE_DESCRIPTION' + | translate + }} +

+
+
+ +
+
} @if (settingsForm.value.player === 'vlc') {
diff --git a/apps/web/src/app/settings/settings.component.ts b/apps/web/src/app/settings/settings.component.ts index 3d8fa24ac..2f69ea6ed 100644 --- a/apps/web/src/app/settings/settings.component.ts +++ b/apps/web/src/app/settings/settings.component.ts @@ -43,7 +43,6 @@ import { Playlist, SET_MPV_PLAYER_PATH, SET_VLC_PLAYER_PATH, - SETTINGS_UPDATE, StreamFormat, Theme, VideoPlayer, @@ -145,6 +144,7 @@ export class SettingsComponent implements OnInit { showCaptions: false, theme: Theme.LightTheme, mpvPlayerPath: '', + mpvReuseInstance: false, vlcPlayerPath: '', remoteControl: false, remoteControlPort: 3000, @@ -252,10 +252,11 @@ export class SettingsComponent implements OnInit { onSubmit(): void { this.settingsStore.updateSettings(this.settingsForm.value).then(() => { this.applyChangedSettings(); - this.dataService.sendIpcEvent( + /* this.dataService.sendIpcEvent( SETTINGS_UPDATE, this.settingsForm.value - ); + ); */ + window.electron?.updateSettings(this.settingsForm.value); this.dataService.sendIpcEvent( SET_MPV_PLAYER_PATH, diff --git a/apps/web/src/assets/i18n/en.json b/apps/web/src/assets/i18n/en.json index c471df76e..f140a02cc 100644 --- a/apps/web/src/assets/i18n/en.json +++ b/apps/web/src/assets/i18n/en.json @@ -1,339 +1,341 @@ { - "CLOSE": "Close", - "PLAYLISTS": "Playlists", - "HOME": { - "TITLE": "IPTVnator", - "SUBTITLE": "Please select a playlist from the list or add a new playlist", - "TABS": { - "RECENTLY_ADDED": "Recently added playlists", - "FILE_UPLOAD": "Add via file upload", - "URL_UPLOAD": "Add via URL", - "TEXT_IMPORT": "Import from text", - "XTREME_IMPORT": "Add Xtreme Code", - "STALKER_PORTAL_IMPORT": "Add Stalker Portal" + "CLOSE": "Close", + "PLAYLISTS": "Playlists", + "HOME": { + "TITLE": "IPTVnator", + "SUBTITLE": "Please select a playlist from the list or add a new playlist", + "TABS": { + "RECENTLY_ADDED": "Recently added playlists", + "FILE_UPLOAD": "Add via file upload", + "URL_UPLOAD": "Add via URL", + "TEXT_IMPORT": "Import from text", + "XTREME_IMPORT": "Add Xtreme Code", + "STALKER_PORTAL_IMPORT": "Add Stalker Portal" + }, + "PLAYLISTS": { + "NO_PLAYLISTS": "No playlists were added", + "ADD_FIRST": "Please add your first playlist", + "ADDED_VIA_URL": "Added via URL upload. URL:", + "ADDED_VIA_FILE": "Added via file upload", + "XTREAM_PLAYLIST": "Xtream playlist", + "STALKER_PORTAL": "Stalker portal", + "CHANNELS": "Channels", + "ADDED": "Added", + "SHOW_DETAILS": "Show playlist details", + "REMOVE": "Remove playlist", + "SEARCH_PLAYLISTS": "Search playlists by title", + "INFO_DIALOG": { + "PLAYLIST_DETAILS": "Playlist details", + "TITLE": "Title", + "FROM_URL": "Added from the URL", + "IMPORT_DATE": "Import date", + "CHANNELS": "Number of channels", + "CLOSE": "Close", + "SAVE": "Save", + "USER_AGENT": "User agent", + "ORIGINAL_FILENAME": "Original filename", + "FILE_PATH": "File path", + "UPDATE_FAILED": "Last playlist update failed", + "AUTO_UPDATE": "Auto-update", + "AUTO_UPDATE_DESCRIPTION": "If the auto-refresh function is activated, the playlist will be updated automatically each time the app is started.", + "CUSTOM_USER_AGENT": "Some IPTV providers need a specific user-agent in order to play their playlist.", + "EXPORT_PLAYLIST": "Export playlist as m3u", + "SERVER_URL": "Server URL", + "USERNAME": "Username", + "PASSWORD": "Password", + "MAC_ADDRESS": "Mac Address", + "PLAYLIST_EXPORT_SUCCESS": "Playlist was exported successfully.", + "PLAYLIST_EXPORT_ERROR": "Error: Playlist export failed." + }, + "REMOVE_DIALOG": { + "TITLE": "Remove playlist", + "MESSAGE": "Are you sure you want to delete this playlist completely?", + "SUCCESS": "Playlist was removed successfully" + }, + "UPDATED": "Updated", + "REFRESH": "Refresh playlist", + "GLOBAL_FAVORITES": "Global favorites", + "GLOBAL_FAVORITES_DESCRIPTION": "Auto-generated playlist with aggregated favorites from all playlists", + "MY_PLAYLISTS": "My playlists", + "MY_PLAYLISTS_SUBTITLE": "all available playlists", + "PLAYLIST_UPDATE_SUCCESS": "Success! The playlist was successfully updated.", + "PLAYLIST_UPDATE_ERROR": "Error updating playlist details." + }, + "FILE_UPLOAD": { + "DRAG_DROP": "Drag & drop files here", + "OR": "or", + "CHOOSE_PLAYLIST": "choose a playlist", + "REJECTED": "File was rejected, unsupported file format {{filename}}." + }, + "URL_UPLOAD": { + "PLAYLIST_URL": "Playlist URL (m3u, m3u8)", + "ADD_PLAYLIST": "Add playlist", + "CORS_NOTE": "Note: In order to avoid CORS issues at this point the application uses a public CORS Proxy service. If you want to upload a playlist with sensitive data, it's more secure to import it from a file." + }, + "TEXT_IMPORT": { + "LABEL": "Insert m3u(8) playlist as text", + "BUTTON_LABEL": "Import" + }, + "XTREAM_PLAYLIST": { + "TITLE": "Playlist title", + "SERVER_URL": "Server URL", + "USERNAME": "Username", + "PASSWORD": "Password", + "ADD": "Add", + "TEST_CREDENTIALS": "Test credentials", + "URL_VALIDATION_ERROR": "Should be a valid url with protocol (e.g. http://example.com or https://example.com:4324)" + }, + "STALKER_PORTAL": { + "TITLE": "Title", + "MAC_ADDRESS": "Mac Address", + "SERVER_URL": "Server URL", + "URL_VALIDATION_ERROR": "Should be a valid url with protocol (e.g. http://example.com/c or https://example.com/stalker_portal/c)", + "ADD": "Add" + }, + "FILTER_BY_NAME": "Filter by name", + "FILTER_BY_TYPE": "Filter by type", + "SORT_PLAYLISTS": "Sort playlists", + "SORT_BY": "Sort by", + "SORT_OPTIONS": { + "NAME_ASC": "Name (A-Z)", + "NAME_DESC": "Name (Z-A)", + "NEWEST": "Date added (Newest first)", + "OLDEST": "Date added (Oldest first)" + }, + "IMPORTED_AS_TEXT": "Imported as text", + "PARSING_ERROR": "Error: Parsing failed, not a valid playlist:" }, - "PLAYLISTS": { - "NO_PLAYLISTS": "No playlists were added", - "ADD_FIRST": "Please add your first playlist", - "ADDED_VIA_URL": "Added via URL upload. URL:", - "ADDED_VIA_FILE": "Added via file upload", - "XTREAM_PLAYLIST": "Xtream playlist", - "STALKER_PORTAL": "Stalker portal", - "CHANNELS": "Channels", - "ADDED": "Added", - "SHOW_DETAILS": "Show playlist details", - "REMOVE": "Remove playlist", - "SEARCH_PLAYLISTS": "Search playlists by title", - "INFO_DIALOG": { - "PLAYLIST_DETAILS": "Playlist details", - "TITLE": "Title", - "FROM_URL": "Added from the URL", - "IMPORT_DATE": "Import date", - "CHANNELS": "Number of channels", - "CLOSE": "Close", - "SAVE": "Save", - "USER_AGENT": "User agent", - "ORIGINAL_FILENAME": "Original filename", - "FILE_PATH": "File path", - "UPDATE_FAILED": "Last playlist update failed", - "AUTO_UPDATE": "Auto-update", - "AUTO_UPDATE_DESCRIPTION": "If the auto-refresh function is activated, the playlist will be updated automatically each time the app is started.", - "CUSTOM_USER_AGENT": "Some IPTV providers need a specific user-agent in order to play their playlist.", - "EXPORT_PLAYLIST": "Export playlist as m3u", - "SERVER_URL": "Server URL", - "USERNAME": "Username", - "PASSWORD": "Password", - "MAC_ADDRESS": "Mac Address", - "PLAYLIST_EXPORT_SUCCESS": "Playlist was exported successfully.", - "PLAYLIST_EXPORT_ERROR": "Error: Playlist export failed." - }, - "REMOVE_DIALOG": { - "TITLE": "Remove playlist", - "MESSAGE": "Are you sure you want to delete this playlist completely?", - "SUCCESS": "Playlist was removed successfully" - }, - "UPDATED": "Updated", - "REFRESH": "Refresh playlist", - "GLOBAL_FAVORITES": "Global favorites", - "GLOBAL_FAVORITES_DESCRIPTION": "Auto-generated playlist with aggregated favorites from all playlists", - "MY_PLAYLISTS": "My playlists", - "MY_PLAYLISTS_SUBTITLE": "all available playlists", - "PLAYLIST_UPDATE_SUCCESS": "Success! The playlist was successfully updated.", - "PLAYLIST_UPDATE_ERROR": "Error updating playlist details." + "SETTINGS": { + "TITLE": "Settings / IPTVnator", + "SUBTITLE": "Change the configuration of the application", + "DESCRIPTION": "Please adapt the options from the list below and confirm with the save changes button", + "EPG_URL_LABEL": "EPG Url (*.xml or *.xml.gz)", + "EPG_URL_PLACEHOLDER": "Enter an URL", + "REFRESH_EPG": "Refresh EPG", + "VIDEO_PLAYER_LABEL": "Video player", + "VIDEO_PLAYER_PLACEHOLDER": "Select an option", + "VERSION": "Version", + "SAVE_CHANGES": "Save changes", + "BACK_TO_HOME": "Back", + "NEW_VERSION_AVAILABLE": "There is a new version available", + "LATEST_VERSION": "You are using the latest version", + "STREAM_FORMAT": "Stream Format", + "LANGUAGE": "Language", + "SETTINGS_SAVED": "Success! Configuration was saved.", + "THEME": "Visual theme", + "SHOW_CAPTIONS": "Show subtitles", + "ADD_EPG_SOURCE": "Add EPG source", + "EPG_URL_ERROR": "The value is not a valid URL", + "VIDEO_PLAYER_DESCRIPTION": "Select default video player", + "STREAM_FORMAT_DESCRIPTION": "Select default stream format (xtream)", + "LANGUAGE_DESCRIPTION": "Select language of the application", + "THEME_DESCRIPTION": "Select visual theme of the application", + "SHOW_CAPTIONS_DESCRIPTION": "Show or hide subtitles by default", + "VERSION_DESCRIPTION": "Current version of the application", + "EPG_NOTE": "Currently EPG is available only in the electron-based version of IPTVnator.", + "EPG_NOTE_URL_TEXT": "Check it here", + "IMPORT_EXPORT_DATA": "Import/export playlists", + "IMPORT_EXPORT_DATA_DESCRIPTION": "Export or import playlists in the JSON format used within the application.", + "IMPORT_DATA": "Import", + "EXPORT_DATA": "Export", + "REMOVE_ALL": "Remove playlists", + "REMOVE_ALL_BUTTON": "Remove", + "REMOVE_ALL_DESCRIPTION": "It will remove all existing playlists from the application.", + "REMOVE_DIALOG": { + "TITLE": "Remove all playlists", + "MESSAGE": "Are you sure you want to delete all playlist from the application?" + }, + "IMPORT_ERROR": "Import error, please try with another file.", + "PLAYLISTS_REMOVED": "All playlists were removed.", + "MPV_PLAYER_PATH_LABEL": "mpv path", + "MPV_PLAYER_PATH_DESCRIPTION": "Set path to mpv player in your system. It will use the provided path to a mpv binary instead of using the one found in $PATH.", + "MPV_PLAYER_PATH": "mpv player path", + "MPV_REUSE_INSTANCE_LABEL": "Reuse MPV instance", + "MPV_REUSE_INSTANCE_DESCRIPTION": "When enabled, the same MPV window will be reused for playing different streams. When disabled, each stream opens in a new MPV window.", + "VLC_PLAYER_PATH_LABEL": "VLC path", + "VLC_PLAYER_PATH_DESCRIPTION": "Set path to VLC player in your system. It will use the provided path to a VLC binary instead of the default path for our system.", + "VLC_PLAYER_PATH": "VLC player path", + "REMOTE_CONTROL": "Remote control", + "REMOTE_CONTROL_DESCRIPTION": "Enable remote control of the application.", + "REMOTE_CONTROL_PORT": "Remote control port", + "REMOTE_CONTROL_PORT_DESCRIPTION": "Port used for remote control of the application. Port 3000 is used by default." }, - "FILE_UPLOAD": { - "DRAG_DROP": "Drag & drop files here", - "OR": "or", - "CHOOSE_PLAYLIST": "choose a playlist", - "REJECTED": "File was rejected, unsupported file format {{filename}}." + "THEMES": { + "DARK_THEME": "Dark theme", + "LIGHT_THEME": "Light theme" }, - "URL_UPLOAD": { - "PLAYLIST_URL": "Playlist URL (m3u, m3u8)", - "ADD_PLAYLIST": "Add playlist", - "CORS_NOTE": "Note: In order to avoid CORS issues at this point the application uses a public CORS Proxy service. If you want to upload a playlist with sensitive data, it's more secure to import it from a file." + "CHANNELS": { + "SEARCH_CHANNEL": "Search channel", + "UPLOAD_OR_SELECT_OTHER_PLAYLIST": "Upload or select other playlist", + "ALL_CHANNELS": "All channels", + "GROUPS": "Groups", + "UNGROUPED": "Ungrouped", + "UNNAMED_CHANNEL": "Unnamed Channel", + "FAVORITES": "Favorites", + "NO_FAVORITES": "No favorites yet", + "USE_STAR_TO_FAVORITE": "Please use 'star' icon to add channels to your favorites.", + "REMOVE_FAVORITE": "Remove from favorites", + "FAVORITES_UPDATED": "Favorites were updated!", + "SORT_BY": "Sort by", + "SORT_BY_DATE": "Sort by Date Added (Newest First)", + "SORT_BY_RATING": "Sort by Rating", + "SORT_BY_NAME": "Sort by Name (A-Z)" }, - "TEXT_IMPORT": { - "LABEL": "Insert m3u(8) playlist as text", - "BUTTON_LABEL": "Import" + "TOP_MENU": { + "OPEN_CHANNELS_LIST": "Open channel list", + "TOGGLE_FAVORITE_FLAG": "Toggle favorite flag", + "OPEN_EPG_LIST": "Open EPG list", + "OPEN_MULTI_EPG": "Open Multi-EPG view" }, - "XTREAM_PLAYLIST": { - "TITLE": "Playlist title", - "SERVER_URL": "Server URL", - "USERNAME": "Username", - "PASSWORD": "Password", - "ADD": "Add", - "TEST_CREDENTIALS": "Test credentials", - "URL_VALIDATION_ERROR": "Should be a valid url with protocol (e.g. http://example.com or https://example.com:4324)" + "EPG": { + "TITLE": "Electronic Program Guide", + "NEXT_DAY": "Next day", + "PREVIOUS_DAY": "Previous day", + "LIVE_NOW": "Live now", + "LIVE_STREAM": "Live stream", + "TIMESHIFT_AVAILABLE": "Timeshift is available, click to play", + "EPG_NOT_AVAILABLE_DATE": "Ooops, EPG is not available for the selected date", + "EPG_NOT_AVAILABLE_CHANNEL_TITLE": "Ooops, EPG is not available for this channel.", + "EPG_NOT_AVAILABLE_CHANNEL_DESCRIPTION": "Please add/change the URL of the EPG list in the settings of the app.", + "FETCH_EPG": "Fetching EPG data...", + "ERROR": "Ooops, EPG could not be loaded.", + "DOWNLOAD_SUCCESS": "EPG was successfully downloaded.", + "PROGRAM_DIALOG": { + "PROGRAM_DETAILS": "Details about the TV program", + "TITLE": "Title", + "CATEGORY": "Category", + "PARENTAL_RATING_SYSTEM": "Television content rating system", + "DESCRIPTION": "Description", + "LANGUAGE": "Language", + "SHOW_PROGRAM_DETAILS": "Show details about this program" + }, + "FETCH_SUCCESS": "EPG was fetched successfully" }, - "STALKER_PORTAL": { - "TITLE": "Title", - "MAC_ADDRESS": "Mac Address", - "SERVER_URL": "Server URL", - "URL_VALIDATION_ERROR": "Should be a valid url with protocol (e.g. http://example.com/c or https://example.com/stalker_portal/c)", - "ADD": "Add" + "LANGUAGES": { + "ARABIC": "العربية", + "MOROCCAN_ARABIC": "العربية (اللهجة المغربية)", + "ENGLISH": "English", + "KOREAN": "한국어", + "RUSSIAN": "Русский", + "GERMAN": "Deutsch", + "SPANISH": "Español", + "CHINESE": "简体中文", + "TRADITIONAL_CHINESE": "繁體中文", + "FRENCH": "Français", + "ITALIAN": "Italiano", + "TURKISH": "Türkçe", + "JAPANESE": "日本語", + "DUTCH": "Nederlands", + "BELARUSIAN": "Беларуская", + "POLISH": "Polski", + "PORTUGUESE": "Português" }, - "FILTER_BY_NAME": "Filter by name", - "FILTER_BY_TYPE": "Filter by type", - "SORT_PLAYLISTS": "Sort playlists", - "SORT_BY": "Sort by", - "SORT_OPTIONS": { - "NAME_ASC": "Name (A-Z)", - "NAME_DESC": "Name (Z-A)", - "NEWEST": "Date added (Newest first)", - "OLDEST": "Date added (Oldest first)" + "YES": "Yes", + "NO": "No", + "MENU": { + "OPEN": "Open menu", + "SUPPORT_ARIA": "Support IPTVnator on GitHub", + "SETTINGS": "Settings", + "SETTINGS_ARIA": "Open settings", + "BUG_REPORT": "Report a bug", + "WHAT_IS_NEW": "What is new", + "ABOUT": "About", + "ABOUT_ARIA": "About the application", + "SUPPORT_PROJECT": "Support project" }, - "IMPORTED_AS_TEXT": "Imported as text", - "PARSING_ERROR": "Error: Parsing failed, not a valid playlist:" - }, - "SETTINGS": { - "TITLE": "Settings / IPTVnator", - "SUBTITLE": "Change the configuration of the application", - "DESCRIPTION": "Please adapt the options from the list below and confirm with the save changes button", - "EPG_URL_LABEL": "EPG Url (*.xml or *.xml.gz)", - "EPG_URL_PLACEHOLDER": "Enter an URL", - "REFRESH_EPG": "Refresh EPG", - "VIDEO_PLAYER_LABEL": "Video player", - "VIDEO_PLAYER_PLACEHOLDER": "Select an option", - "VERSION": "Version", - "SAVE_CHANGES": "Save changes", - "BACK_TO_HOME": "Back", - "NEW_VERSION_AVAILABLE": "There is a new version available", - "LATEST_VERSION": "You are using the latest version", - "STREAM_FORMAT": "Stream Format", - "LANGUAGE": "Language", - "SETTINGS_SAVED": "Success! Configuration was saved.", - "THEME": "Visual theme", - "SHOW_CAPTIONS": "Show subtitles", - "ADD_EPG_SOURCE": "Add EPG source", - "EPG_URL_ERROR": "The value is not a valid URL", - "VIDEO_PLAYER_DESCRIPTION": "Select default video player", - "STREAM_FORMAT_DESCRIPTION": "Select default stream format (xtream)", - "LANGUAGE_DESCRIPTION": "Select language of the application", - "THEME_DESCRIPTION": "Select visual theme of the application", - "SHOW_CAPTIONS_DESCRIPTION": "Show or hide subtitles by default", - "VERSION_DESCRIPTION": "Current version of the application", - "EPG_NOTE": "Currently EPG is available only in the electron-based version of IPTVnator.", - "EPG_NOTE_URL_TEXT": "Check it here", - "IMPORT_EXPORT_DATA": "Import/export playlists", - "IMPORT_EXPORT_DATA_DESCRIPTION": "Export or import playlists in the JSON format used within the application.", - "IMPORT_DATA": "Import", - "EXPORT_DATA": "Export", - "REMOVE_ALL": "Remove playlists", - "REMOVE_ALL_BUTTON": "Remove", - "REMOVE_ALL_DESCRIPTION": "It will remove all existing playlists from the application.", - "REMOVE_DIALOG": { - "TITLE": "Remove all playlists", - "MESSAGE": "Are you sure you want to delete all playlist from the application?" + "ABOUT": { + "TITLE": "About IPTVnator", + "DESCRIPTION": "Cross-platform IPTV player application with multiple features, such as support of m3u and m3u8 playlists, favorites, TV guide, TV archive/catchup and more.", + "VERSION": "Version", + "GITHUB_TOOLTIP": "ITPVnator repository on GitHub", + "BUY_ME_A_COFFEE_TOOLTIP": "Buy me a coffee", + "TWITTER_TOOLTIP": "Share on Twitter" }, - "IMPORT_ERROR": "Import error, please try with another file.", - "PLAYLISTS_REMOVED": "All playlists were removed.", - "MPV_PLAYER_PATH_LABEL": "mpv path", - "MPV_PLAYER_PATH_DESCRIPTION": "Set path to mpv player in your system. It will use the provided path to a mpv binary instead of using the one found in $PATH.", - "MPV_PLAYER_PATH": "mpv player path", - "VLC_PLAYER_PATH_LABEL": "VLC path", - "VLC_PLAYER_PATH_DESCRIPTION": "Set path to VLC player in your system. It will use the provided path to a VLC binary instead of the default path for our system.", - "VLC_PLAYER_PATH": "VLC player path", - "REMOTE_CONTROL": "Remote control", - "REMOTE_CONTROL_DESCRIPTION": "Enable remote control of the application.", - "REMOTE_CONTROL_PORT": "Remote control port", - "REMOTE_CONTROL_PORT_DESCRIPTION": "Port used for remote control of the application. Port 3000 is used by default." - }, - "THEMES": { - "DARK_THEME": "Dark theme", - "LIGHT_THEME": "Light theme" - }, - "CHANNELS": { - "SEARCH_CHANNEL": "Search channel", - "UPLOAD_OR_SELECT_OTHER_PLAYLIST": "Upload or select other playlist", - "ALL_CHANNELS": "All channels", - "GROUPS": "Groups", - "UNGROUPED": "Ungrouped", - "UNNAMED_CHANNEL": "Unnamed Channel", - "FAVORITES": "Favorites", - "NO_FAVORITES": "No favorites yet", - "USE_STAR_TO_FAVORITE": "Please use 'star' icon to add channels to your favorites.", - "REMOVE_FAVORITE": "Remove from favorites", - "FAVORITES_UPDATED": "Favorites were updated!", - "SORT_BY": "Sort by", - "SORT_BY_DATE": "Sort by Date Added (Newest First)", - "SORT_BY_RATING": "Sort by Rating", - "SORT_BY_NAME": "Sort by Name (A-Z)" - }, - "TOP_MENU": { - "OPEN_CHANNELS_LIST": "Open channel list", - "TOGGLE_FAVORITE_FLAG": "Toggle favorite flag", - "OPEN_EPG_LIST": "Open EPG list", - "OPEN_MULTI_EPG": "Open Multi-EPG view" - }, - "EPG": { - "TITLE": "Electronic Program Guide", - "NEXT_DAY": "Next day", - "PREVIOUS_DAY": "Previous day", - "LIVE_NOW": "Live now", - "LIVE_STREAM": "Live stream", - "TIMESHIFT_AVAILABLE": "Timeshift is available, click to play", - "EPG_NOT_AVAILABLE_DATE": "Ooops, EPG is not available for the selected date", - "EPG_NOT_AVAILABLE_CHANNEL_TITLE": "Ooops, EPG is not available for this channel.", - "EPG_NOT_AVAILABLE_CHANNEL_DESCRIPTION": "Please add/change the URL of the EPG list in the settings of the app.", - "FETCH_EPG": "Fetching EPG data...", - "ERROR": "Ooops, EPG could not be loaded.", - "DOWNLOAD_SUCCESS": "EPG was successfully downloaded.", - "PROGRAM_DIALOG": { - "PROGRAM_DETAILS": "Details about the TV program", - "TITLE": "Title", - "CATEGORY": "Category", - "PARENTAL_RATING_SYSTEM": "Television content rating system", - "DESCRIPTION": "Description", - "LANGUAGE": "Language", - "SHOW_PROGRAM_DETAILS": "Show details about this program" + "UPDATE_AVAILABLE": "Update available", + "REFRESH": "Refresh", + "XTREAM": { + "PLAY": "Play", + "NAME": "Name", + "RELEASE_DATE": "Release date", + "GENRE": "Genre", + "COUNTRY": "Country", + "ACTORS": "Actors", + "DIRECTOR": "Director", + "DURATION": "Duration", + "CAST": "Cast", + "EPISODE_RUN_TIME": "Episode run time", + "RATING": "Rating", + "IMDB_RATING": " Rating IMDB", + "KINOPOISK_RATING": "Rating Kinopoisk", + "DESCRIPTION": "Description", + "YEAR": "Year", + "AGE": "Age", + "YOUTUBE_TRAILER": "YouTube Trailer", + "EPISODE": "Episode" }, - "FETCH_SUCCESS": "EPG was fetched successfully" - }, - "LANGUAGES": { - "ARABIC": "العربية", - "MOROCCAN_ARABIC": "العربية (اللهجة المغربية)", - "ENGLISH": "English", - "KOREAN": "한국어", - "RUSSIAN": "Русский", - "GERMAN": "Deutsch", - "SPANISH": "Español", - "CHINESE": "简体中文", - "TRADITIONAL_CHINESE": "繁體中文", - "FRENCH": "Français", - "ITALIAN": "Italiano", - "TURKISH": "Türkçe", - "JAPANESE": "日本語", - "DUTCH": "Nederlands", - "BELARUSIAN": "Беларуская", - "POLISH": "Polski", - "PORTUGUESE": "Português" - }, - "YES": "Yes", - "NO": "No", - "MENU": { - "OPEN": "Open menu", - "SUPPORT_ARIA": "Support IPTVnator on GitHub", - "SETTINGS": "Settings", - "SETTINGS_ARIA": "Open settings", - "BUG_REPORT": "Report a bug", - "WHAT_IS_NEW": "What is new", - "ABOUT": "About", - "ABOUT_ARIA": "About the application", - "SUPPORT_PROJECT": "Support project" - }, - "ABOUT": { - "TITLE": "About IPTVnator", - "DESCRIPTION": "Cross-platform IPTV player application with multiple features, such as support of m3u and m3u8 playlists, favorites, TV guide, TV archive/catchup and more.", - "VERSION": "Version", - "GITHUB_TOOLTIP": "ITPVnator repository on GitHub", - "BUY_ME_A_COFFEE_TOOLTIP": "Buy me a coffee", - "TWITTER_TOOLTIP": "Share on Twitter" - }, - "UPDATE_AVAILABLE": "Update available", - "REFRESH": "Refresh", - "XTREAM": { - "PLAY": "Play", - "NAME": "Name", - "RELEASE_DATE": "Release date", - "GENRE": "Genre", - "COUNTRY": "Country", - "ACTORS": "Actors", - "DIRECTOR": "Director", - "DURATION": "Duration", - "CAST": "Cast", - "EPISODE_RUN_TIME": "Episode run time", - "RATING": "Rating", - "IMDB_RATING": " Rating IMDB", - "KINOPOISK_RATING": "Rating Kinopoisk", - "DESCRIPTION": "Description", - "YEAR": "Year", - "AGE": "Age", - "YOUTUBE_TRAILER": "YouTube Trailer", - "EPISODE": "Episode" - }, - "PORTALS": { - "ALL_CATEGORIES": "All categories", - "MY_FAVORITES": "My favorites", - "ADD_TO_FAVORITES": "Add to favorites", - "REMOVE_FROM_FAVORITES": "Remove from favorites", - "REMOVED_FROM_FAVORITES": "Removed from favorites", - "ADDED_TO_FAVORITES": "Added to favorites", - "SIDEBAR": { - "MAIN": "Main", - "MOVIES": "Movies", - "LIVE_TV": "Live TV", - "SERIES": "Series", - "LIBRARY": "Library", - "SEARCH": "Search", - "RECENT": "Recent", - "FAVORITES": "Favorites", - "HOME": "Home", - "PLAYLIST_INFO": "Playlist info", - "ACCOUNT_INFO": "Account info" + "PORTALS": { + "ALL_CATEGORIES": "All categories", + "MY_FAVORITES": "My favorites", + "ADD_TO_FAVORITES": "Add to favorites", + "REMOVE_FROM_FAVORITES": "Remove from favorites", + "REMOVED_FROM_FAVORITES": "Removed from favorites", + "ADDED_TO_FAVORITES": "Added to favorites", + "SIDEBAR": { + "MAIN": "Main", + "MOVIES": "Movies", + "LIVE_TV": "Live TV", + "SERIES": "Series", + "LIBRARY": "Library", + "SEARCH": "Search", + "RECENT": "Recent", + "FAVORITES": "Favorites", + "HOME": "Home", + "PLAYLIST_INFO": "Playlist info", + "ACCOUNT_INFO": "Account info" + }, + "ERROR_VIEW": { + "ACCOUNT_EXPIRED": { + "TITLE": "Account expired", + "DESCRIPTION": "This account has been expired. Please check the credentials in playlist settings or remove it." + }, + "UNAUTHORIZED": { + "TITLE": "Unauthorized", + "DESCRIPTION": "Please check the credentials in playlist settings or remove it." + }, + "NOT_FOUND": { + "TITLE": "Portal not found", + "DESCRIPTION": "Please check the credentials and portal url in playlist settings or remove it." + }, + "EMPTY_CATEGORY": { + "TITLE": "Empty category", + "DESCRIPTION": "This category has no content, please select another category or change the content type" + }, + "UNKNOWN_ERROR": { + "TITLE": "Something went wrong", + "DESCRIPTION": "Unknown error, please try again later" + }, + "NO_CATEGORY_SELECTED": { + "TITLE": "No category selected", + "DESCRIPTION": "Please select a category to see the content" + }, + "PLAYLIST_SETTINGS": "Playlist Settings", + "HOME": "Home", + "DELETE": "Delete" + }, + "EMPTY_LIST_VIEW": { + "TITLE": "No results found", + "NO_SEARCH_RESULTS": "Nothing found, try to change you search request" + }, + "STREAM_URL_COPIED": "Stream URL copied to clipboard", + "COPY_STREAM_URL": "Copy Stream URL", + "SELECT_CATEGORY": "Select a category" }, - "ERROR_VIEW": { - "ACCOUNT_EXPIRED": { - "TITLE": "Account expired", - "DESCRIPTION": "This account has been expired. Please check the credentials in playlist settings or remove it." - }, - "UNAUTHORIZED": { - "TITLE": "Unauthorized", - "DESCRIPTION": "Please check the credentials in playlist settings or remove it." - }, - "NOT_FOUND": { - "TITLE": "Portal not found", - "DESCRIPTION": "Please check the credentials and portal url in playlist settings or remove it." - }, - "EMPTY_CATEGORY": { - "TITLE": "Empty category", - "DESCRIPTION": "This category has no content, please select another category or change the content type" - }, - "UNKNOWN_ERROR": { - "TITLE": "Something went wrong", - "DESCRIPTION": "Unknown error, please try again later" - }, - "NO_CATEGORY_SELECTED": { - "TITLE": "No category selected", - "DESCRIPTION": "Please select a category to see the content" - }, - "PLAYLIST_SETTINGS": "Playlist Settings", - "HOME": "Home", - "DELETE": "Delete" - }, - "EMPTY_LIST_VIEW": { - "TITLE": "No results found", - "NO_SEARCH_RESULTS": "Nothing found, try to change you search request" - }, - "STREAM_URL_COPIED": "Stream URL copied to clipboard", - "COPY_STREAM_URL": "Copy Stream URL", - "SELECT_CATEGORY": "Select a category" - }, - "INFORMATION": "Information", - "REMOTE_CONTROL": { - "TITLE": "Remote control", - "UP_CHANNEL": "Up channel", - "DOWN_CHANNEL": "Down channel", - "HEADER": "IPTVNator Remote Control", - "FOOTER": "IPTVNator Remote Control" - } -} \ No newline at end of file + "INFORMATION": "Information", + "REMOTE_CONTROL": { + "TITLE": "Remote control", + "UP_CHANNEL": "Up channel", + "DOWN_CHANNEL": "Down channel", + "HEADER": "IPTVNator Remote Control", + "FOOTER": "IPTVNator Remote Control" + } +} diff --git a/libs/shared/interfaces/src/lib/settings.interface.ts b/libs/shared/interfaces/src/lib/settings.interface.ts index 4f0114cc9..2425db3a5 100644 --- a/libs/shared/interfaces/src/lib/settings.interface.ts +++ b/libs/shared/interfaces/src/lib/settings.interface.ts @@ -24,6 +24,7 @@ export interface Settings { showCaptions: boolean; theme: Theme; mpvPlayerPath: string; + mpvReuseInstance: boolean; vlcPlayerPath: string; remoteControl: boolean; remoteControlPort: number;