diff --git a/src/i18n/README.md b/src/i18n/README.md index aff5d57a..cc0dcea9 100644 --- a/src/i18n/README.md +++ b/src/i18n/README.md @@ -238,3 +238,6 @@ Update 10/04/2022 07:30 UTC * `settings.option.visual.uiscale`: Added for `en_US` +Update 11/04/2022 13:45 UTC + +* `action.openArtworkInBrowser`: Added for `en_US` \ No newline at end of file diff --git a/src/i18n/en_US.json b/src/i18n/en_US.json index 1b71dabe..89c8e219 100644 --- a/src/i18n/en_US.json +++ b/src/i18n/en_US.json @@ -258,6 +258,7 @@ "action.cast.scan": "Scan", "action.cast.scanning": "Scanning...", "action.createNew": "Create New...", + "action.openArtworkInBrowser": "Open artwork in browser", "settings.header.general": "General", "settings.header.general.description": "Adjust the general settings for Cider.", "settings.option.general.language": "Language", diff --git a/src/i18n/hu_HU.json b/src/i18n/hu_HU.json index 49604a75..d38ab4af 100644 --- a/src/i18n/hu_HU.json +++ b/src/i18n/hu_HU.json @@ -258,6 +258,7 @@ "action.cast.scan": "Keresés", "action.cast.scanning": "Keresés folyamatban...", "action.createNew": "Új létrehozása...", + "action.openArtworkInBrowser": "Borító megnyitása a böngészőben", "settings.header.general": "Általános", "settings.header.general.description": "A Cider általános beállításainak módosítása.", "settings.option.general.language": "Nyelv", diff --git a/src/i18n/ru_RU.json b/src/i18n/ru_RU.json index b665bb77..2bc4e717 100644 --- a/src/i18n/ru_RU.json +++ b/src/i18n/ru_RU.json @@ -20,9 +20,13 @@ "term.accountSettings": "Настройки аккаунта", "term.logout": "Выйти", "term.login": "Войти", + "term.cast": "Транслировать", "term.about": "О Cider", "term.privateSession": "Частная сессия", + "term.disablePrivateSession": "Выключить частную сессию", "term.queue": "Очередь", + "term.lyrics": "Текст", + "term.miniplayer": "Мини-проигрыватель", "term.history": "История", "term.search": "Поиск", "term.library": "Медиатека", @@ -40,7 +44,7 @@ "term.newPlaylistFolder": "Новая Папка Плейлиста", "term.createNewPlaylist": "Создать новый плейлист", "term.createNewPlaylistFolder": "Создать новую папку", - "term.deletePlaylist": "Вы уверены, что хотите удалить плейлист?", + "term.deletePlaylist": "Вы уверены, что хотите удалить этот плейлист?", "term.play": "Воспроизвести", "term.pause": "Пауза", "term.previous": "Предыдущий", @@ -89,21 +93,30 @@ "term.time.added": "Добавлено", "term.time.released": "Релиз: ", "term.time.updated": "Обновлено", + "term.time.day": { + "one": "день", + "few": "дня", + "other": "дней" + }, "term.time.hour": { "one": "час", "few": "часа", "other": "часов" }, "term.time.minute": { - "one": "минута", - "few": "минуты", - "other": "минут" + "one" : "минута", + "few" : "минуты", + "other" : "минут" }, "term.time.second": { - "one": "секунд", - "few": "секунды", - "other": "секунд" + "one" : "секунд", + "few" : "секунды", + "other" : "секунд" }, + + + + "term.fullscreenView": "Полноэкранное отображение", "term.defaultView": "Стандартное отображение", "term.audioSettings": "Настройки звука", @@ -123,10 +136,10 @@ "term.contributors": "Внесли вклад", "term.equalizer": "Эквалайзер", "term.reset": "Сбросить", - "term.tracks": { - "one": "песня", - "few": "песни", - "other": "песен" + "term.track": { + "one" : "песня", + "few" : "песни", + "other" : "песен" }, "term.videos": "Видео", "term.menu": "Меню", @@ -135,7 +148,7 @@ "term.topResult": "Топ результатов", "term.sharedPlaylists": "Общие плейлисты", "term.people": "Люди", - "term.newpreset.name": "Название нового пресета эквалайзера", + "term.newpreset.name": "Название нового пресета", "term.addedpreset": "Пресет добавлен", "term.deletepreset.warn": "Вы уверены, что хотите удалить пресет?", "term.deletedpreset": "Пресет удален", @@ -153,6 +166,30 @@ "term.top": "Top", "term.version": "Версия", "term.noVideos": "Видео не найдено.", + "term.plugin": "Плагины", + "term.pluginMenu": "Меню плагинов", + "term.pluginMenu.none": "Нет плагинов", + "term.replay": "Мой год", + "term.uniqueAlbums": "Уникальных альбомов", + "term.uniqueArtists": "Уникальных артистов", + "term.uniqueSongs": "Уникальных песен", + "term.topArtists": "Топ артистов", + "term.listenedTo": "Прослушано:", + "term.times": { + "one": "раз", + "few": "раза", + "other": "раз" + }, + "term.topAlbums": "Топ альбомов", + "term.plays": { + "one": "прослушивание", + "few": "прослушивания", + "other": "прослушиваний" + }, + "term.topGenres": "Топ жанров", + "term.confirmLogout": "Вы уверены, что хотите выйти?", + "term.creditDesignedBy": "Разработано ${authorUsername}", + "term.discNumber": "Диск ${discNumber}", "home.title": "Главная", "home.recentlyPlayed": "Недавно прослушанные", "home.recentlyAdded": "Недавно добавленные", @@ -199,6 +236,8 @@ "action.startRadio": "Создать станцию", "action.goToArtist": "Перейти к артисту", "action.goToAlbum": "Перейти к альбому", + "action.showInPlaylist": "Показать в плейлисте", + "action.showInAppleMusic": "Показать в Apple Music", "action.moveToTop": "Переместить наверх", "action.share": "Поделиться", "action.rename": "Переименовать", @@ -217,13 +256,30 @@ "action.tray.quit": "Выйти", "action.tray.show": "Показать", "action.update": "Обновить", + "action.install": "Установить", "action.copy": "Скопировать", "action.newpreset": "Новый пресет...", "action.deletepreset": "Удалить пресет", "action.open": "Открыть", + "action.relaunch.confirm": "Вы хотите перезапустить Cider?", + "action.cast.chromecast": "Chromecast", + "action.cast.todevices": "Транслировать на устройства", + "action.cast.stop": "Остановить трансляцию на все устройства", + "action.cast.airplay": "AirPlay", + "action.cast.airplay.underdevelopment": "AirPlay находится в разработке", + "action.cast.scan": "Поиск устройств", + "action.cast.scanning": "Поиск...", + "action.createNew": "Создать новый...", + "action.openArtworkInBrowser": "Открыть обложку в браузере", "settings.header.general": "Общие", "settings.header.general.description": "Настройка общих параметров Cider.", "settings.option.general.language": "Язык", + "settings.option.general.resumebehavior": "Поведение возобновления", + "settings.option.general.resumebehavior.description": "Поведение возобновления влияет на то, как Cider возобновит сеанс, когда вы вернетесь в приложение.", + "settings.option.general.resumebehavior.locally": "Локально", + "settings.option.general.resumebehavior.locally.description": "Cider возобновит ваш последний сеанс на этом компьютере.", + "settings.option.general.resumebehavior.history": "История", + "settings.option.general.resumebehavior.history.description": "Cider поставит в очередь последнюю песню из вашей общей истории Apple Music на разных устройствах.", "settings.option.general.language.main": "Языки", "settings.option.general.language.fun": "Забавные языки", "settings.option.general.language.unsorted": "Неотсортированные", @@ -232,6 +288,12 @@ "settings.option.general.updateCider.branch.description": "Выберите ветку обновления Cider", "settings.option.general.updateCider.branch.main": "Стабильная", "settings.option.general.updateCider.branch.develop": "Нестабильная", + "settings.option.general.customizeSidebar": "Настроить элементы боковой панели", + "settings.option.general.customizeSidebar.customize": "Настроить", + "settings.notyf.updateCider.update-not-available": "Нет доступных обновлений", + "settings.notyf.updateCider.update-downloaded": "Обновление загружено, перезапустите, чтобы обновить", + "settings.notyf.updateCider.update-error": "Ошибка при обновлении Cider", + "settings.notyf.updateCider.update-timeout": "Время ожидания обновления истекло", "settings.header.audio": "Звук", "settings.header.audio.description": "Настройка звука Cider.", "settings.option.audio.volumeStep": "Шаг громкости", @@ -247,9 +309,19 @@ "settings.header.audio.quality.standard.description": "НЕ-ААС для экономии трафика(64 кб/с)", "settings.option.audio.seamlessTransition": "Плавный переход между песнями", "settings.option.audio.enableAdvancedFunctionality": "Включить расширенный функционал", - "settings.option.audio.enableAdvancedFunctionality.description": "Включение функции AudioContext позволит использовать расширенные функции звука, такие как нормализация звука, эквалайзеры и визуализаторы, однако в некоторых системах это может вызвать заикание звуковых дорожек.", + "settings.option.audio.enableAdvancedFunctionality.description": "Включение функции AudioContext позволит использовать расширенные функции звука, такие как нормализация звука, эквалайзеры и визуализаторы, однако в некоторых системах это может вызвать заикание звука.", + "settings.warn.audio.enableAdvancedFunctionality.lowcores": "Cider считает, что ваш компьютер не справится с этими функциями. Вы уверены что хотите продолжить?", + "settings.option.audio.audioLab": "Cider Audio Lab", + "settings.option.audio.audioLab.description": "Ассортимент звуковых обработок собственной разработки для Cider.", + "settings.warn.audioLab.withoutAF": "AudioContext (Расширенный функционал) требуется для включения Cider Audio Laboratory.", + "settings.option.audio.enableAdvancedFunctionality.analogWarmth": "Аналоговое звучание", + "settings.option.audio.enableAdvancedFunctionality.analogWarmth.description": "Имитирует аналоговое звучание по образцу Korg Nutube 6P1", + "settings.option.audio.enableAdvancedFunctionality.analogWarmthIntensity": "Интенсивность аналогового звучания", + "settings.option.audio.enableAdvancedFunctionality.analogWarmthIntensity.description": "Изменяет интенсивность Аналогового звучания.", + "settings.option.audio.enableAdvancedFunctionality.analogWarmthIntensity.smooth": "Обычная", + "settings.option.audio.enableAdvancedFunctionality.analogWarmthIntensity.warm": "Сильнее", "settings.option.audio.enableAdvancedFunctionality.ciderPPE": "Cider Adrenaline Processor™️", - + "settings.option.audio.enableAdvancedFunctionality.ciderPPE.description": "Улучшает воспринимаемое качество звука AAC 256 кбит/с за счет использования алгоритма реального времени, использующего как психоакустические модели человеческого слуха, так и характеристики кодирования AAC.", "settings.warn.audio.enableAdvancedFunctionality.ciderPPE.compatibility": "CAP не совместим с пространственным звучанием. Пожалуйста, отключите пространственное звучание, чтобы продолжить.", "settings.option.audio.enableAdvancedFunctionality.ciderPPEStrength": "Режим CAP", "settings.option.audio.enableAdvancedFunctionality.ciderPPEStrength.description": "Изменяет режим обработки звука. (Режим агрессии может привести к нежелаемым результатам)", @@ -257,19 +329,27 @@ "settings.option.audio.enableAdvancedFunctionality.ciderPPEStrength.aggressive": "Агрессивный", "settings.option.audio.enableAdvancedFunctionality.audioNormalization": "Нормализация звука", "settings.option.audio.enableAdvancedFunctionality.audioNormalization.description": "Нормализует пиковую громкость для отдельных треков, чтобы создать более однородное впечатление от прослушивания.", + "settings.option.audio.enableAdvancedFunctionality.audioNormalization.disabled": "Управляется Audio Lab", "settings.option.audio.enableAdvancedFunctionality.audioSpatialization": "Пространственное звучание", - "settings.option.audio.enableAdvancedFunctionality.audioSpatialization.description": "Пространственное аудио; сделать звук более трехмерным (примечание: это не Dolby Atmos)", + "settings.option.audio.enableAdvancedFunctionality.audioSpatialization.description": "Пространственное аудио; делает звук более трехмерным (примечание: это не Dolby Atmos)", + "settings.option.audio.enableAdvancedFunctionality.tunedAudioSpatialization": "Пространственное звучание, настроенное Cider", + "settings.option.audio.enableAdvancedFunctionality.tunedAudioSpatialization.description": "Предварительно настроенная пространственная обработка; отключает параметр Пространственного звучания. Пространственное звучание должно быть включено.", + "settings.option.audio.enableAdvancedFunctionality.tunedAudioSpatialization.profile": "Профиль пространственного звучания Cider", + "settings.option.audio.enableAdvancedFunctionality.tunedAudioSpatialization.profile.description": "Изменяет профиль пространственного звучания.", + "settings.option.audio.enableAdvancedFunctionality.tunedAudioSpatialization.profile.standard": "Стандарт", + "settings.option.audio.enableAdvancedFunctionality.tunedAudioSpatialization.profile.audiophile": "Аудиофил", "settings.warn.audio.enableAdvancedFunctionality.audioSpatialization.compatibility": "Пространственная обработка несовместима с CAP. Пожалуйста, отключите CAP, чтобы продолжить.", "settings.header.visual": "Внешний вид", "settings.header.visual.description": "Настройка внешнего вида Cider.", - "settings.option.visual.windowBackgroundStyle": "Стиль фона Cider", + "settings.option.visual.windowStyle": "Стиль окна", + "settings.option.visual.windowBackgroundStyle": "Фон приложения", "settings.header.visual.windowBackgroundStyle.none": "Отсутствует", "settings.header.visual.windowBackgroundStyle.artwork": "Обложка", "settings.header.visual.windowBackgroundStyle.image": "Изображение", "settings.option.visual.animatedArtwork": "Анимированная обложка", "settings.header.visual.animatedArtwork.always": "Всегда", "settings.header.visual.animatedArtwork.limited": "Ограничено специальными страницами", - "settings.header.visual.animatedArtwork.disable": "Выключено везде", + "settings.header.visual.animatedArtwork.disable": "Выключить везде", "settings.option.visual.animatedArtworkQuality": "Качество анимированной обложки", "settings.header.visual.animatedArtworkQuality.low": "Низкое", "settings.header.visual.animatedArtworkQuality.medium": "Среднее", @@ -281,18 +361,37 @@ "settings.option.visual.hardwareAcceleration.description": "Требует перезагрузки приложения", "settings.header.visual.hardwareAcceleration.default": "По умолчанию", "settings.header.visual.hardwareAcceleration.webGPU": "WebGPU", + "settings.option.visual.uiscale": "Размер интерфейса", "settings.header.visual.theme": "Тема", "settings.option.visual.theme.github.download": "Установить с GitHub", "settings.option.visual.theme.github.explore": "Исследовать темы с GitHub", + "settings.header.visual.theme.github.page": "Темы с GitHub", "settings.option.visual.theme.github.install.confirm": "Вы уверены, что хотите установить {{ repo }}?", "settings.prompt.visual.theme.github.URL": "Введите URL темы, которую хотите установить", "settings.notyf.visual.theme.install.success": "Тема успешно установлена", "settings.notyf.visual.theme.install.error": "Не удалось установить тему", + "settings.header.visual.plugin": "Плагин", + "settings.option.visual.plugin.github.download": "Установить с URL-адреса GitHub", + "settings.option.visual.plugin.github.explore": "Исследовать плагины с GitHub", + "settings.header.visual.plugin.github.page": "Плагины с GitHub", + "settings.option.visual.plugin.github.install.confirm": "Вы уверены, что хотите установить {{ repo }}?", + "settings.prompt.visual.plugin.github.URL": "Введите URL плагина, который вы хотите установить", + "settings.prompt.visual.plugin.github.success": "Плагин успешно установлен. Нажмите OK, чтобы перезапустить Cider.", + "settings.notyf.visual.plugin.install.success": "Плагин успешно установлен", + "settings.notyf.visual.plugin.install.error": "Установка плагина не удалась", "settings.option.visual.theme.default": "Cider", "settings.option.visual.theme.dark": "Тёмная", "settings.option.visual.showPersonalInfo": "Показать личную информацию", - "settings.header.lyrics": "Текст песни", - "settings.header.lyrics.description": "Настройка текста песен.", + "settings.header.window": "Окно", + "settings.header.window.description": "Настройки окна Cider.", + "settings.option.window.openOnStartup": "Открывать Cider при входе в систему", + "settings.option.window.openOnStartup.hidden": "Открывать свёрнутым", + "settings.option.window.useNativeTitleBar": "Использовать нативный Title Bar", + "settings.option.window.windowControlStyle": "Клавиши управления окном", + "settings.option.window.windowControlStyle.right": "Справа", + "settings.option.window.windowControlStyle.left": "Слева", + "settings.header.lyrics": "Текст песен", + "settings.header.lyrics.description": "Настройка текста песен Cider.", "settings.option.lyrics.enableMusixmatch": "Получать текст песен из Musixmatch", "settings.option.lyrics.enableMusixmatchKaraoke": "Включить режим караоке (только с Musixmatch)", "settings.option.lyrics.musixmatchPreferredLanguage": "Предпочтительный язык перевода Musixmatch", @@ -304,6 +403,7 @@ "settings.header.connectivity.discordRPC.cider": "Отображать как 'Cider'", "settings.header.connectivity.discordRPC.appleMusic": "Отображать как 'Apple Music'", "settings.option.connectivity.discordRPC.clearOnPause": "Отключать Discord Rich Presence на паузе", + "settings.option.connectivity.discordRPC.hideButtons": "Скрыть кнопки в Discord Rich Presence", "settings.option.connectivity.lastfmScrobble": "Last.fm cкробблинг", "settings.option.connectivity.lastfmScrobble.delay": "Частота скробблинга Last.fm (%)", "settings.option.connectivity.lastfmScrobble.nowPlaying": "Включить Last.fm Сейчас играет", @@ -314,9 +414,18 @@ "settings.option.debug.openAppData": "Открыть папку Cider", "settings.header.experimental": "Экспериментальные", "settings.header.experimental.description": "Настройка экспериментальных функций Cider.", + "settings.option.experimental.reinstallwidevine": "Переустановить WidevineCDM", + "settings.option.experimental.reinstallwidevine.confirm": "Вы уверены, что хотите переустановить Widevine?", + "settings.option.experimental.unknownPlugin": "Неизвестные источники", + "settings.option.experimental.unknownPlugin.description": "Разрешить установку плагинов из репозиториев, отличных от репозитория плагинов Cider", "settings.option.experimental.compactUI": "Компактный интерфейс", "settings.option.window.close_button_hide": "Кнопка «Закрыть» скрывает приложение", "settings.option.experimental.inline_playlists": "Встроенные плейлисты и альбомы", + "settings.option.advanced.playlistTrackMapping": "Сканирование песен в плейлистах", + "settings.option.advanced.playlistTrackMapping.description": "Включает глубокое сканирование плейлистов, чтобы определить, какие треки находятся в каких плейлистах. Время сборки кеша плейлиста может значительно увеличиться.", + "settings.option.visual.transparent": "Прозрачность", + "settings.option.visual.transparent.description": "Прозрачность окна (требуется поддержка Тем, требуется перезапуск)", + "settings.header.advanced": "Расширенные", "spatial.notTurnedOn": "Пространственное аудио отключено. Чтобы использовать, сначала включите его.", "spatial.spatialProperties": "Настройка пространственного аудио", "spatial.width": "Ширина", @@ -339,5 +448,15 @@ "settings.header.unfinished": "Не завершено", "remote.web.title": "Веб-интерфейс", "remote.web.description": "Отсканируйте QR-код, чтобы подключить телефон к Cider Remote", - "about.thanks": "Большое спасибо команде Cider Collective и всем нашим вкладчикам." + "share.platform.twitter.tweet": "Слушайте {{song}} в Apple Music.\n\n{{url}}\n\n#AppleMusic #Cider", + "share.platform.twitter": "Twitter", + "share.platform.facebook": "Facebook", + "share.platform.reddit": "Reddit", + "share.platform.telegram": "Telegram", + "share.platform.whatsapp": "WhatsApp", + "share.platform.messenger": "Messenger", + "share.platform.email": "Email", + "share.platform.songLink": "Скопировать с song.link", + "share.platform.clipboard": "Скопировать ссылку", + "about.thanks": "Большое спасибо команде Cider Collective и всем нашим вкладчикам." } diff --git a/src/i18n/source/en_US.json b/src/i18n/source/en_US.json index 1b71dabe..89c8e219 100644 --- a/src/i18n/source/en_US.json +++ b/src/i18n/source/en_US.json @@ -258,6 +258,7 @@ "action.cast.scan": "Scan", "action.cast.scanning": "Scanning...", "action.createNew": "Create New...", + "action.openArtworkInBrowser": "Open artwork in browser", "settings.header.general": "General", "settings.header.general.description": "Adjust the general settings for Cider.", "settings.option.general.language": "Language", diff --git a/src/main/base/browserwindow.ts b/src/main/base/browserwindow.ts index f3308f78..158cf251 100644 --- a/src/main/base/browserwindow.ts +++ b/src/main/base/browserwindow.ts @@ -167,12 +167,12 @@ export class BrowserWindow { page: "browsepage", component: ``, condition: `page == 'browse'`, - onEnter: `getBrowsePage();` + onEnter: `` }, { page: "listen_now", component: ``, condition: `page == 'listen_now'`, - onEnter: `getListenNow()` + onEnter: `` }, { page: "settings", component: ``, @@ -185,17 +185,17 @@ export class BrowserWindow { page: "library-songs", component: ``, condition: `page == 'library-songs'`, - onEnter: `getLibrarySongsFull()` + onEnter: `` }, { page: "library-albums", component: ``, condition: `page == 'library-albums'`, - onEnter: `getLibraryAlbumsFull(null, 1); getAlbumSort(); searchLibraryAlbums(1); getLibrarySongsFull() ;searchLibraryAlbums(1);` + onEnter: `` }, { page: "library-artists", component: ``, condition: `page == 'library-artists'`, - onEnter: `getLibraryArtistsFull(null, 0);` + onEnter: `` }, { page: "appleCurator", component: ``, diff --git a/src/main/base/store.ts b/src/main/base/store.ts index 6d59627f..6f1ea21e 100644 --- a/src/main/base/store.ts +++ b/src/main/base/store.ts @@ -115,6 +115,7 @@ export class Store { }, "visual": { "theme": "", + "styles": [], "scrollbars": 0, // 0 = show on hover, 2 = always hide, 3 = always show "refresh_rate": 0, "window_background_style": "artwork", // "none", "artwork", "color" diff --git a/src/renderer/less/bootstrap.less b/src/renderer/less/bootstrap.less index a32d04bc..ace079f4 100644 --- a/src/renderer/less/bootstrap.less +++ b/src/renderer/less/bootstrap.less @@ -35,10 +35,12 @@ color: #212529; text-align: left; list-style: none; - background-color: #fff; + background-color: var(--color1); background-clip: padding-box; border: 1px solid rgba(0, 0, 0, 0.15); border-radius: 0.25rem; + box-shadow: var(--mediaItemShadow), var(--mediaItemShadow-ShadowSubtle); + backdrop-filter: var(--glassFilter); } .dropdown-menu[data-bs-popper] { top: 100%; @@ -1388,23 +1390,24 @@ fieldset:disabled .btn { .btn-secondary { color : #fff; - background-color: #6c757d; - border-color : #6c757d; + border-color : 1px solid rgba(100, 100, 100, 0.35); + background-color: rgba(100, 100, 100, 0.25); + border-top-color: 1px solid rgba(100, 100, 100, 0.5); } .btn-secondary:hover { color : #fff; - background-color: #5c636a; - border-color : #565e64; + // background-color: #5c636a; + // border-color : #565e64; } -.btn-check:focus+.btn-secondary, -.btn-secondary:focus { - color : #fff; - background-color: #5c636a; - border-color : #565e64; - box-shadow : 0 0 0 0.25rem rgba(130, 138, 145, 0.5); -} +// .btn-check:focus+.btn-secondary, +// .btn-secondary:focus { +// color : #fff; +// background-color: #5c636a; +// border-color : #565e64; +// box-shadow : 0 0 0 0.25rem rgba(130, 138, 145, 0.5); +// } .btn-check:checked+.btn-secondary, .btn-check:active+.btn-secondary, diff --git a/src/renderer/less/elements.less b/src/renderer/less/elements.less index 13b65d5f..768b2a8f 100644 --- a/src/renderer/less/elements.less +++ b/src/renderer/less/elements.less @@ -1738,7 +1738,7 @@ input[type=checkbox][switch]:checked:active::before { display: inline-flex; align-items: center; justify-content: center; - margin: 12px 0px; + margin: 12px 12px 12px 0px; border-radius: 4px; color: white; font-size: 1em; diff --git a/src/renderer/less/pages.less b/src/renderer/less/pages.less index 59d84968..71173f40 100644 --- a/src/renderer/less/pages.less +++ b/src/renderer/less/pages.less @@ -281,13 +281,14 @@ // Podcast Page .content-inner.library-artists-page { // top: 0; - height: calc(100% - 60px - var(--navigationBarHeight)); + height : calc(100% - 60px - var(--navigationBarHeight)); padding: 0px; + .inner-container { display: flex; height : calc(100% - var(--navigationBarHeight)); padding: 0px; - height: 100%; + height : 100%; .list-flat { border-radius: 0px; @@ -331,7 +332,7 @@ } .episodes-list { - height: calc(100% + 60px); + height : calc(100% + 60px); width : 100%; background: rgb(200 200 200 / 6%); overflow-y: overlay; @@ -568,7 +569,7 @@ font-size : 1.6rem; //margin-bottom: 6px; margin-right : 6px; - margin-bottom: 6px; + margin-bottom : 6px; flex-shrink : unset; } @@ -972,9 +973,11 @@ display : flex; overflow: hidden; padding : 16px 32px; + >.latestRelease { width: 250px; } + >.topSongs { width: calc(100% - 250px); } @@ -1016,18 +1019,49 @@ .settings-page { padding: 0px; + .stylestack-editor { + width: 100%; + + .btn, + .btn-group { + width: 100%; + } + + .themeLabel { + display:flex; + align-items: center; + } + + .removeItem { + border: 0px; + background: transparent; + height: 32px; + font-weight: bold; + color: var(--textColor); + cursor: pointer; + } + + .stylesDropdown { + >.dropdown-menu { + height : 300px; + overflow-y: overlay; + } + } + } + + .nav { - width: 90%; + width : 90%; margin: 16px auto 0px; } .md-option-header { - padding: 0px 26px; + padding : 0px 26px; border-bottom: unset; - border-top: unset; - font-weight: 600; - background: rgb(255 255 255 / 0%); - font-size: 2em; + border-top : unset; + font-weight : 600; + background : rgb(255 255 255 / 0%); + font-size : 2em; } .settings-option-body { @@ -1050,36 +1084,38 @@ .carousel-item>img { object-fit: cover; - width:100%; + width : 100%; } .spprofile-line { - height: 300px; - width: 100%; + height : 300px; + width : 100%; max-width: 1024px; - padding: 16px; - margin: 0 auto; + padding : 16px; + margin : 0 auto; .spprofile-viewport { - height: 100%; - position: relative; + height : 100%; + position : relative; border-radius: var(--mediaItemRadius); - overflow: hidden; - box-shadow: var(--mediaItemShadow-Shadow); - background: black; + overflow : hidden; + box-shadow : var(--mediaItemShadow-Shadow); + background : black; - .spprev, .nextprev { - position: absolute; - height: 100%; - width: 64px; - top: 0; + .spprev, + .nextprev { + position : absolute; + height : 100%; + width : 64px; + top : 0; background: rgb(0 0 0 / 20%); - z-index: 1; - border: 0px; + z-index : 1; + border : 0px; transition: background 0.2s var(--appleEase), transform 0.2s var(--appleEase); + &:hover { background: var(--selected); - transform: scale(1.1); + transform : scale(1.1); } &:active { @@ -1088,22 +1124,23 @@ } &:before { - content: ''; - position: absolute; - top: 0; - left: 0; - width: 100%; - height: 100%; - background: #eee; - opacity: 1; + content : ''; + position : absolute; + top : 0; + left : 0; + width : 100%; + height : 100%; + background : #eee; + opacity : 1; -webkit-mask-position: center; - -webkit-mask-repeat: no-repeat; - -webkit-mask-size: 1em; + -webkit-mask-repeat : no-repeat; + -webkit-mask-size : 1em; } } .spprev { left: 0; + &:before { -webkit-mask-image: url("./views/svg/chevron-left.svg"); } @@ -1112,6 +1149,7 @@ .nextprev { right: 0; + &:before { -webkit-mask-image: url("./views/svg/chevron-right.svg"); } @@ -1119,25 +1157,25 @@ } .spslide { - position: absolute; - width: 100%; - height: 100%; - overflow: hidden; + position : absolute; + width : 100%; + height : 100%; + overflow : hidden; background: black; >img { - WIDTH: 100%; - height: 100%; + WIDTH : 100%; + height : 100%; object-fit: cover; } .sptitle { - position: absolute; - bottom: 0px; - left: 0; - width: 100%; - text-align: center; - font-size: 18px; + position : absolute; + bottom : 0px; + left : 0; + width : 100%; + text-align : center; + font-size : 18px; text-shadow: 0px 2px 4px #00000033; } } @@ -1145,18 +1183,19 @@ .spfade-enter-active, .spfade-leave-active { --transitionTime: 0.2s; - transition: opacity var(--transitionTime) var(--appleEase), transform var(--transitionTime) var(--appleEase); - will-change: opacity, transform; + transition : opacity var(--transitionTime) var(--appleEase), transform var(--transitionTime) var(--appleEase); + will-change : opacity, transform; } .spfade-enter { - opacity: 0; - transform: scale(1.2) translate3d(0,0,0); + opacity : 0; + transform : scale(1.2) translate3d(0, 0, 0); will-change: opacity, transform; } + .spfade-leave-to { - opacity: 1; - transform: scale(1) translate3d(0,0,0); + opacity : 1; + transform : scale(1) translate3d(0, 0, 0); will-change: opacity, transform; } } @@ -1171,9 +1210,11 @@ 0% { background-position: 0% 0%; } + 50% { background-position: 100% 0%; } + 100% { background-position: 0% 0%; } @@ -1181,31 +1222,31 @@ //Home .home-page { - top : 0; + top : 0; //padding-top: var(--navbarHeight); .md-btn-replay { background-image: linear-gradient(-45deg, #2e2173, #925042); - animation: gradient-animation 5s ease-in-out infinite; - background-size: 400% 400%; - border : 0px; - box-shadow : inset 0px 0px 0px 1px rgba(200, 200, 200, 0.2); - text-transform: uppercase; - font-weight : bold; + animation : gradient-animation 5s ease-in-out infinite; + background-size : 400% 400%; + border : 0px; + box-shadow : inset 0px 0px 0px 1px rgba(200, 200, 200, 0.2); + text-transform : uppercase; + font-weight : bold; } .md-btn-replay--hero { - font-size : 1em; - padding : 16px; + font-size : 1em; + padding : 16px; background-image: linear-gradient(-45deg, #2e2173, #925042); - animation: gradient-animation 5s ease-in-out infinite; - background-size: 400% 400%; - border : 0px; - box-shadow : inset 0px 0px 0px 1px rgb(200 200 200 / 20%); - margin-top : 1em; - font-size : 0.9em; - text-transform: uppercase; - font-weight : bold; + animation : gradient-animation 5s ease-in-out infinite; + background-size : 400% 400%; + border : 0px; + box-shadow : inset 0px 0px 0px 1px rgb(200 200 200 / 20%); + margin-top : 1em; + font-size : 0.9em; + text-transform : uppercase; + font-weight : bold; } .artist-feed-card { @@ -1375,12 +1416,12 @@ .replay-viewport { background-image: linear-gradient(-45deg, #2e2173, #925042); - animation: gradient-animation 5s ease-in-out infinite; - background-size: 400% 400%; - padding : 16px 40px; - border-radius: 10px; - box-shadow : var(--mediaItemShadow), var(--mediaItemShadow-Shadow); - color : rgb(238 238 238 / 86%); + animation : gradient-animation 5s ease-in-out infinite; + background-size : 400% 400%; + padding : 16px 40px; + border-radius : 10px; + box-shadow : var(--mediaItemShadow), var(--mediaItemShadow-Shadow); + color : rgb(238 238 238 / 86%); .replay-header { text-align : center; diff --git a/src/renderer/main/vueapp.js b/src/renderer/main/vueapp.js index 1cb68db9..e1abc256 100644 --- a/src/renderer/main/vueapp.js +++ b/src/renderer/main/vueapp.js @@ -465,9 +465,9 @@ const app = new Vue({ history.forward() }, getHTMLStyle() { - if(app.cfg.visual.uiScale != 1) { + if (app.cfg.visual.uiScale != 1) { document.querySelector("#app").style.zoom = app.cfg.visual.uiScale - }else{ + } else { document.querySelector("#app").style.zoom = "" } }, @@ -581,6 +581,9 @@ const app = new Vue({ if (this.cfg.visual.theme != "default.less" && this.cfg.visual.theme != "") { this.setTheme(this.cfg.visual.theme) } + if (this.cfg.visual.styles.length != 0) { + await this.reloadStyles() + } if (this.platform == "darwin") { this.chrome.windowControlPosition = "left" @@ -762,6 +765,9 @@ const app = new Vue({ ipcRenderer.on('theme-update', (event, arg) => { less.refresh(true, true, true) self.setTheme(self.cfg.visual.theme, true) + if (app.cfg.visual.styles.length != 0) { + app.reloadStyles() + } }) ipcRenderer.on('SoundCheckTag', (event, tag) => { @@ -956,6 +962,35 @@ const app = new Vue({ less.refresh() } }, + async reloadStyles() { + const styles = this.cfg.visual.styles + document.querySelectorAll(`[id*='less']`).forEach(el => { + if(el.id != "less:style") { + el.remove() + } + }); + + this.chrome.appliedTheme.info = {} + await asyncForEach(styles, async (style) => { + let styleEl = document.createElement("link") + styleEl.id = `less-${style.replace(".less", "")}` + styleEl.rel = "stylesheet/less" + styleEl.href = `themes/${style}` + styleEl.type = "text/css" + document.head.appendChild(styleEl) + try { + let infoResponse = await fetch("themes/" + style.replace("index.less", "theme.json")) + this.chrome.appliedTheme.info = Object.assign(this.chrome.appliedTheme.info, await infoResponse.json()) + } catch (e) { + e = null + console.warn("failed to get theme.json") + } + }) + less.registerStylesheetsImmediately() + less.refresh(true, true, true) + this.$forceUpdate() + return + }, macOSEmu() { this.chrome.forceDirectives["macosemu"] = { value: true @@ -3811,7 +3846,7 @@ const app = new Vue({ ] } } - if(this.cfg.advanced.AudioContext) { + if (this.cfg.advanced.AudioContext) { menus.normal.items.find(i => i.id === 'audioLab').hidden = false menus.normal.items.find(i => i.id === 'equalizer').hidden = false } diff --git a/src/renderer/style.less b/src/renderer/style.less index 7d50fab8..84875bca 100644 --- a/src/renderer/style.less +++ b/src/renderer/style.less @@ -44,6 +44,7 @@ --songProgressBackground: #333; --textColor: #eee; --replayGradient: linear-gradient(45deg, hsl(248deg 58% 29%), hsl(13deg 41% 42%)); + --glassFilter: blur(16px) saturate(180%); } *:focus-visible { @@ -238,6 +239,17 @@ input[type="text"], input[type="number"] { opacity: 0.70; } +a.dropdown-item { + color: var(--textColor); + + &:hover { + background-color: var(--selected); + color: var(--textColor); + } + &:active { + background-color: var(--selected-click); + } +} .bg-artwork { position: absolute; @@ -1554,7 +1566,7 @@ input[type="range"].web-slider.display--small::-webkit-slider-thumb { font-size: 26px; transform: scale(0.8); transform-origin: left center; - transition: transform 0.2s var(--appleEase); + transition: transform 0.5s var(--appleEase); opacity: 0.75; width: auto; display: inline-block; @@ -1614,7 +1626,7 @@ input[type="range"].web-slider.display--small::-webkit-slider-thumb { filter: none !important; } .lyric-body > .lyric-line:not(.active) { - transition: filter var(--appleEase) 0.5s ease; + // transition: filter var(--appleEase) 0.5s ease; } .lyricWaiting { diff --git a/src/renderer/themes/compactui.less b/src/renderer/themes/compactui.less new file mode 100644 index 00000000..e69de29b diff --git a/src/renderer/themes/groovy/index.less b/src/renderer/themes/groovy/index.less deleted file mode 100644 index ab0c0141..00000000 --- a/src/renderer/themes/groovy/index.less +++ /dev/null @@ -1 +0,0 @@ -// \ No newline at end of file diff --git a/src/renderer/themes/groovy/theme.json b/src/renderer/themes/groovy/theme.json deleted file mode 100644 index db9f5469..00000000 --- a/src/renderer/themes/groovy/theme.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "Groovy", - "description": "Inspired by Groove Music and Media Player found on Windows", - "version": "1.0.0", - "author": "ciderapp", - "github_repo": "ciderapp/Groovy", - "directives": { - "windowLayout": { - "value": "twopanel" - }, - "lcdArtworkSize": { - "value": 70 - } - } -} \ No newline at end of file diff --git a/src/renderer/themes/inline_drawer.less b/src/renderer/themes/inline_drawer.less new file mode 100644 index 00000000..a87f6a61 --- /dev/null +++ b/src/renderer/themes/inline_drawer.less @@ -0,0 +1,41 @@ +&:not(.modular-fs) { + .app-drawer { + border-radius: 0px; + top : 0; + right : 0; + height : 100%; + box-shadow : unset; + border-left : 1px solid var(--color2); + background : var(--color1); + margin-right : 0px; + position : relative; + } + + .drawertransition-enter-active, + .drawertransition-leave-active { + transition: margin .25s var(--appleEase), opacity .25s var(--appleEase); + } + + .drawertransition-enter, + .drawertransition-leave-to { + margin-right: -300px; + } + + @media screen and (max-width: 1120px) { + .app-drawer { + margin-right: 0px; + position : absolute; + } + + .drawertransition-enter-active, + .drawertransition-leave-active { + transition: right .25s var(--appleEase), opacity .25s var(--appleEase); + } + + .drawertransition-enter, + .drawertransition-leave-to { + right: -300px; + } + } + +} \ No newline at end of file diff --git a/src/renderer/themes/reduce_visuals.less b/src/renderer/themes/reduce_visuals.less new file mode 100644 index 00000000..9b23fb0a --- /dev/null +++ b/src/renderer/themes/reduce_visuals.less @@ -0,0 +1,115 @@ +body { + --ciderShadow-Generic : var(--mediaItemShadow); + --mediaItemShadow-Shadow : var(--mediaItemShadow); + --mediaItemShadow-ShadowSubtle: var(--mediaItemShadow); +} + +.bg-artwork-container { + display : none; + animation: none !important; + + .bg-artwork { + animation: none !important; + } +} + +.replaycard-enter-active, +.replaycard-leave-active { + transition: unset; +} + +.replaycard-enter, +.replaycard-leave-to { + opacity : 0; + transform: translateY(20px); +} + +.modal-enter-active, +.modal-leave-active { + transition: unset; +} + +.modal-enter, +.modal-leave-to { + opacity : 0; + transform: scale(1.10); +} + +.wpfade-enter-active, +.wpfade-leave-active { + transition: opacity .1s var(--appleEase); +} + +.wpfade-enter, +.wpfade-leave-to { + opacity: 0; +} + +.wpfade_transform-enter-active, +.wpfade_transform-leave-active { + transition : unset; + will-change: unset; +} + +.wpfade_transform-enter { + opacity : 0; + transform : unset; + will-change: unset; +} + +.wpfade_transform-leave-to { + opacity : 0; + transform : unset; + will-change: unset; +} + + +.wpfade_transform_backwards-enter-active, +.wpfade_transform_backwards-leave-active { + transition: unset; +} + +.wpfade_transform_backwards-enter { + opacity : 0; + transform : unset; + will-change: unset; +} + +.wpfade_transform_backwards-leave-to { + opacity : 0; + transform : unset; + will-change: unset; +} + +.fabfade-enter-active, +.fabfade-leave-active { + transition: unset; +} + +.fabfade-enter, +.fabfade-leave-to { + opacity : 0; + transform: scale(0.5); +} + +.fsModeSwitch-enter-active, +.fsModeSwitch-leave-active { + transition: unset; +} + +.fsModeSwitch-enter, +.fsModeSwitch-leave-to { + transform: scale(1.10); + opacity : 0; +} + + +.drawertransition-enter-active, +.drawertransition-leave-active { + transition: unset; +} + +.drawertransition-enter, +.drawertransition-leave-to { + right: -300px; +} \ No newline at end of file diff --git a/src/renderer/views/components/mediaitem-artwork.ejs b/src/renderer/views/components/mediaitem-artwork.ejs index 16a79210..f282629b 100644 --- a/src/renderer/views/components/mediaitem-artwork.ejs +++ b/src/renderer/views/components/mediaitem-artwork.ejs @@ -2,6 +2,7 @@
@@ -66,7 +67,7 @@ app.showMenuPanel({ items: { "save": { - name: "Open artwork in browser", + name: app.getLz('action.openArtworkInBrowser'), action: () => { window.open(app.getMediaItemArtwork(self.url, 1024, 1024)) } diff --git a/src/renderer/views/components/mediaitem-square.ejs b/src/renderer/views/components/mediaitem-square.ejs index 90d45943..fa44a94e 100644 --- a/src/renderer/views/components/mediaitem-square.ejs +++ b/src/renderer/views/components/mediaitem-square.ejs @@ -5,7 +5,7 @@ @contextmenu.self="contextMenu" v-observe-visibility="{callback: visibilityChanged}" > -
{{item?.meta?.reason?.stringForDisplay ?? ' '}}
+
{{item?.meta?.reason?.stringForDisplay ?? ''}}