diff --git a/.circleci/config.yml b/.circleci/config.yml index 2f3ae690..ad5b7f54 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -76,4 +76,4 @@ jobs: - run: name: Publish Release command: | - gh release create "v${APP_VERSION}" --target ${CIRCLE_SHA1} --title "Cider Version ${APP_VERSION} - Build ${CIRCLE_BUILD_NUM} (${CIRCLE_BRANCH})" --generate-notes -R ciderapp/cider-releases ~/Cider/dist/artifacts/*.deb ~/Cider/dist/artifacts/*.AppImage ~/Cider/dist/artifacts/*.snap ~/Cider/dist/artifacts/*.exe ~/Cider/dist/artifacts/*.yml ~/Cider/dist/artifacts/*.blockmap + gh release create "v${APP_VERSION}.${CIRCLE_BUILD_NUM}" --title "Cider Version ${APP_VERSION} - Build ${CIRCLE_BUILD_NUM} (${CIRCLE_BRANCH})" --generate-notes -R ciderapp/cider-releases ~/Cider/dist/artifacts/*.deb ~/Cider/dist/artifacts/*.AppImage ~/Cider/dist/artifacts/*.snap ~/Cider/dist/artifacts/*.exe ~/Cider/dist/artifacts/*.yml ~/Cider/dist/artifacts/*.blockmap diff --git a/.github/ISSUE_TEMPLATE/feature_request.yaml b/.github/ISSUE_TEMPLATE/feature_request.yaml index d4624c96..b64f200e 100644 --- a/.github/ISSUE_TEMPLATE/feature_request.yaml +++ b/.github/ISSUE_TEMPLATE/feature_request.yaml @@ -1,6 +1,6 @@ name: Feature Request description: Suggest an idea to improve Cider. -title: "[Enhancement]: " +title: "[Feature Request]: " labels: ["enhancement", "triage"] assignees: [] body: diff --git a/resources/circle.js b/resources/circle.js index d374fde4..dcf1d0ef 100644 --- a/resources/circle.js +++ b/resources/circle.js @@ -29,7 +29,7 @@ if (process.env['CIRCLE_BRANCH'] === 'lts') { // https://circleci.com/docs/2.0/env-vars/#built-in-environment-variables var pvers = package.version.split('.') package.version = `${pvers[0]}.${pvers[1]}.${pvers[2]}-${channel}.${process.env['CIRCLE_BUILD_NUM']}` -package.build.channel = channel +// package.build.channel = channel package.publish = { "provider": "github", "repo": "cider-releases", diff --git a/src/i18n/en_OWO.json b/src/i18n/en_OWO.json index 442023e5..82c7ea5c 100644 --- a/src/i18n/en_OWO.json +++ b/src/i18n/en_OWO.json @@ -174,6 +174,7 @@ "term.plays": "Pways", "term.topGenres": "Top Genwes", "term.confirmLogout": "Awe you suwe you want to wogout?", + "term.creditDesignedBy": "Designyed by ${authorUsername}", "home.title": "Home", "home.recentlyPlayed": "Wecentwy Pwayed", "home.recentlyAdded": "Wecentwy Added", @@ -283,6 +284,7 @@ "settings.option.audio.seamlessTransition": "Seamwess Audio Twansition", "settings.option.audio.enableAdvancedFunctionality": "Enyabwe Advanced Functionyawity", "settings.option.audio.enableAdvancedFunctionality.description": "Enyabwing AudioContext functionyawity wiww awwow fow extended audio featuwes wike Audio Nyowmawization, Equawizews and Visuawizews - howevew on some systems this may cause stuttewing in audio twacks.", + "settings.warn.audio.enableAdvancedFunctionality.lowcores": "Cidew thinks youw PC cant handwe these featuwes. Awe you suwe you want to continyue?", "settings.option.audio.audioLab": "Cidew Audio Wab", "settings.option.audio.audioLab.description": "An assowtment of in-house devewoped audio effects fow Cidew.", "settings.warn.audioLab.withoutAF": "AudioContext (Advanced Functionyawity) is wequiwed to enyabwe Cidew Audio Wabowatowy.", @@ -301,6 +303,7 @@ "settings.option.audio.enableAdvancedFunctionality.ciderPPEStrength.aggressive": "Aggwessive", "settings.option.audio.enableAdvancedFunctionality.audioNormalization": "Audio Nyowmawization", "settings.option.audio.enableAdvancedFunctionality.audioNormalization.description": "Nyowmawizes peak vowume fow individuaw twacks to cweate a mowe unyifowm wistenying expewience.", + "settings.option.audio.enableAdvancedFunctionality.audioNormalization.disabled": "Manyaged by Audio Wab", "settings.option.audio.enableAdvancedFunctionality.audioSpatialization": "Audio Spatiawization", "settings.option.audio.enableAdvancedFunctionality.audioSpatialization.description": "Spatiawize audio and make audio mowe 3-dimensionyaw (nyote: This is nyot Dowby Atmos)", "settings.option.audio.enableAdvancedFunctionality.tunedAudioSpatialization": "Cidew Tunyed Spatiawization", @@ -378,6 +381,8 @@ "settings.option.debug.openAppData": "Open Cidew Fowdew", "settings.header.experimental": "Expewimentaw", "settings.header.experimental.description": "Adjust the expewimentaw settings fow Cidew.", + "settings.option.experimental.reinstallwidevine": "Weinstaww WidevinyeCDM", + "settings.option.experimental.reinstallwidevine.confirm": "Awe you suwe you want to weinstaww Widevinye?", "settings.option.experimental.unknownPlugin": "Unknyown Souwces", "settings.option.experimental.unknownPlugin.description": "Awwow instawwation of pwugins fwom wepos othew than the Cidew Pwugin Wepositowy", "settings.option.experimental.compactUI": "Compact UI", @@ -409,5 +414,15 @@ "settings.header.unfinished": "Unfinyished", "remote.web.title": "Cidew Wemote", "remote.web.description": "Scan the QW code to paiw youw phonye up with this Cidew instance", + "share.platform.twitter.tweet": "Wisten to {{song}} on Appwe Music.\n\n{{song}}\n\n#AppweMusic #Cidew", + "share.platform.twitter": "Twittew", + "share.platform.facebook": "Facebook", + "share.platform.reddit": "Weddit", + "share.platform.telegram": "Tewegwam", + "share.platform.whatsapp": "WhatsApp", + "share.platform.messenger": "Messengew", + "share.platform.email": "Emaiw", + "share.platform.songLink": "Copy with song.wink", + "share.platform.clipboard": "Copy Wink", "about.thanks": "Majow thanks to the Cidew Cowwective Team and aww of ouw contwibutows." } \ No newline at end of file diff --git a/src/i18n/en_US.json b/src/i18n/en_US.json index f1a2457c..e4cd7f03 100644 --- a/src/i18n/en_US.json +++ b/src/i18n/en_US.json @@ -132,8 +132,8 @@ "term.reset": "Reset", "term.tracks": "tracks", "term.track": { - "one" : "track", - "other" : "tracks" + "one": "track", + "other": "tracks" }, "term.videos": "Videos", "term.menu": "Menu", @@ -284,6 +284,7 @@ "settings.option.audio.seamlessTransition": "Seamless Audio Transition", "settings.option.audio.enableAdvancedFunctionality": "Enable Advanced Functionality", "settings.option.audio.enableAdvancedFunctionality.description": "Enabling AudioContext functionality will allow for extended audio features like Audio Normalization, Equalizers and Visualizers - however on some systems this may cause stuttering in audio tracks.", + "settings.warn.audio.enableAdvancedFunctionality.lowcores": "Cider thinks your PC cant handle these features. Are you sure you want to continue?", "settings.option.audio.audioLab": "Cider Audio Lab", "settings.option.audio.audioLab.description": "An assortment of in-house developed audio effects for Cider.", "settings.warn.audioLab.withoutAF": "AudioContext (Advanced Functionality) is required to enable Cider Audio Laboratory.", @@ -302,6 +303,7 @@ "settings.option.audio.enableAdvancedFunctionality.ciderPPEStrength.aggressive": "Aggressive", "settings.option.audio.enableAdvancedFunctionality.audioNormalization": "Audio Normalization", "settings.option.audio.enableAdvancedFunctionality.audioNormalization.description": "Normalizes peak volume for individual tracks to create a more uniform listening experience.", + "settings.option.audio.enableAdvancedFunctionality.audioNormalization.disabled": "Managed by Audio Lab", "settings.option.audio.enableAdvancedFunctionality.audioSpatialization": "Audio Spatialization", "settings.option.audio.enableAdvancedFunctionality.audioSpatialization.description": "Spatialize audio and make audio more 3-dimensional (note: This is not Dolby Atmos)", "settings.option.audio.enableAdvancedFunctionality.tunedAudioSpatialization": "Cider Tuned Spatialization", @@ -379,6 +381,8 @@ "settings.option.debug.openAppData": "Open Cider Folder", "settings.header.experimental": "Experimental", "settings.header.experimental.description": "Adjust the experimental settings for Cider.", + "settings.option.experimental.reinstallwidevine": "Reinstall WidevineCDM", + "settings.option.experimental.reinstallwidevine.confirm": "Are you sure you want to reinstall Widevine?", "settings.option.experimental.unknownPlugin": "Unknown Sources", "settings.option.experimental.unknownPlugin.description": "Allow installation of plugins from repos other than the Cider Plugin Repository", "settings.option.experimental.compactUI": "Compact UI", @@ -388,6 +392,7 @@ "settings.option.advanced.playlistTrackMapping.description": "Enables deep scanning of playlists to determine which tracks are in which playlists. Playlist cache build times can increase significantly.", "settings.option.visual.transparent": "Transparent frame", "settings.option.visual.transparent.description": "Transparent frame (needs Theme Support , requires relaunch)", + "settings.header.advanced": "Advanced", "spatial.notTurnedOn": "Audio Spatialization is disabled. To use, please enable it first.", "spatial.spatialProperties": "Spatial Properties", "spatial.width": "Width", @@ -410,5 +415,15 @@ "settings.header.unfinished": "Unfinished", "remote.web.title": "Cider Remote", "remote.web.description": "Scan the QR code to pair your phone up with this Cider instance", + "share.platform.twitter.tweet": "Listen to {{song}} on 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": "Copy with song.link", + "share.platform.clipboard": "Copy Link", "about.thanks": "Major thanks to the Cider Collective Team and all of our contributors." } diff --git a/src/i18n/hu_HU.json b/src/i18n/hu_HU.json index 7a791f07..02ce0d43 100644 --- a/src/i18n/hu_HU.json +++ b/src/i18n/hu_HU.json @@ -2,9 +2,9 @@ "i18n.languageName": "Magyar", "i18n.languageNameEnglish": "Hungarian", "i18n.category": "main", - "i18n.authors": "@Greenoliv @Amaru @BenjaminStonawski", + "i18n.authors": "@Amaru", "app.name": "Cider", - "date.format": "${m} ${d}, ${y}", + "date.format": "${y} ${m} ${d}", "dialog.cancel": "Mégsem", "dialog.ok": "OK", "notification.updatingLibrarySongs": "Zenekönyvtár frissítése...", @@ -12,7 +12,7 @@ "notification.updatingLibraryArtists": "Előadók frissítése...", "term.appleInc": "Apple Inc.", "term.appleMusic": "Apple Music", - "term.applePodcasts": "Apple Podcastok", + "term.applePodcasts": "Apple Podcasts", "term.itunes": "iTunes", "term.github": "GitHub", "term.discord": "Discord", @@ -23,6 +23,8 @@ "term.about": "Névjegy", "term.privateSession": "Privát hallgatás", "term.queue": "Várólista", + "term.lyrics": "Dalszöveg", + "term.miniplayer": "Kis lejátszó", "term.history": "Előzmények", "term.search": "Keresés", "term.library": "Könyvtár", @@ -76,10 +78,10 @@ "term.enabled": "Be", "term.disabled": "Ki", "term.connect": "Csatlakoztatás", - "term.connecting": "Csatlakozás", - "term.disconnect": "Lecsatlakozatás", + "term.connecting": "Jóváhagyás ?", + "term.disconnect": "Több", "term.authed": "Hitelesítve", - "term.confirm": "Jóváhagyja?", + "term.confirm": "Jóváhagyás ?", "term.more": "Több", "term.less": "Kevesebb", "term.showMore": "Mutass többet", @@ -89,12 +91,26 @@ "term.time.added": "Hozzáadva", "term.time.released": "Kiadva", "term.time.updated": "Frissítve", + "term.time.days": "nap", + "term.time.day": { + "one": "nap", + "other": "nap" + }, "term.time.hours": "óra", - "term.time.hour": "óra", + "term.time.hour": { + "one": "óra", + "other": "óra" + }, "term.time.minutes": "perc", - "term.time.minute": "perc", + "term.time.minute": { + "one": "perc", + "other": "perc" + }, "term.time.seconds": "másodperc", - "term.time.second": "másodperc", + "term.time.second": { + "one": "másodperc", + "other": "másodperc" + }, "term.fullscreenView": "Teljes képernyős mód", "term.defaultView": "Alapértelmezett nézet", "term.audioSettings": "Hangbeállítások", @@ -103,7 +119,7 @@ "term.recentStations": "Nemrég játszott", "term.language": "Nyelv", "term.funLanguages": "Fantázianyelvek", - "term.noLyrics": "Betöltés... / Dalszöveg nem található. / Instrumentális.", + "term.noLyrics": "Betöltés... / Dalszöveg nem található / Instrumentális", "term.copyright": "Szerzői jog", "term.rightsReserved": "Minden jog fenntartva.", "term.sponsor": "Támogasd a projektet", @@ -112,13 +128,17 @@ "term.socialTeam": "Közösségi csapat", "term.socials": "Szociális", "term.contributors": "Hozzájárulók", - "term.equalizer": "Hangszínszabályozó", + "term.equalizer": "Hangszínszabályzó", "term.reset": "Visszaállítás", "term.tracks": "zeneszám", + "term.track": { + "one" : "zeneszám", + "other" : "zeneszám" + }, "term.videos": "Videók", "term.menu": "Menü", "term.check": "Ellenőrzés", - "term.aboutArtist": "About {{artistName}}", + "term.aboutArtist": "{{artistName}}-ról/ről", "term.topResult": "Legjobb találatok", "term.sharedPlaylists": "Megosztott lejátszási listák", "term.people": "Profilok", @@ -135,24 +155,26 @@ "term.curators": "Kurátorok", "term.appleCurators": "Apple Kurátorok", "term.radioShows": "Rádióadások", - "term.recordLabels": "Record Labels", + "term.recordLabels": "Lemezkiadók", "term.videoExtras": "Videóextrák", "term.top": "Top", "term.version": "Verzió", - "term.noVideos": "Nincs találat.", + "term.noVideos": "Nincs találat", "term.plugin": "Plug-in", "term.pluginMenu": "Plug-in Menü", + "term.pluginMenu.none": "Nem találhatóak interaktív pluginok", "term.replay": "Replay", - "term.uniqueAlbums": "Unique Albums", - "term.uniqueArtists": "Unique Artists", - "term.uniqueSongs": "Unique Songs", - "term.topArtists": "Top Artists", - "term.listenedTo": "Listened to:", - "term.times": "alkalom", - "term.topAlbums": "Top Albums", - "term.plays": "Plays", - "term.topGenres": "Top Genres", + "term.uniqueAlbums": "album", + "term.uniqueArtists": "előadó", + "term.uniqueSongs": "zeneszám", + "term.topArtists": "Leghallgatottabb előadói", + "term.listenedTo": "Meghallgatta:", + "term.times": "alkalommal", + "term.topAlbums": "Leghallgatottabb albumok", + "term.plays": "lejátszás", + "term.topGenres": "Leghallgatottabb műfajok", "term.confirmLogout": "Biztosan ki szeretnél jelentkezni?", + "term.creditDesignedBy": "Készítette ${authorUsername}", "home.title": "Kezdőlap", "home.recentlyPlayed": "Nemrég játszott", "home.recentlyAdded": "Nemrég hozzáadott", @@ -176,7 +198,7 @@ "action.addToLibrary": "Hozzáadás a Könyvtárhoz", "action.addToLibrary.success": "Hozzáadva a Könyvtárhoz", "action.addToLibrary.error": "Hiba a hozzáadáskor.", - "action.removeFromLibrary": "Törlés a Könytárból", + "action.removeFromLibrary": "Törlés a Könyvtárból", "action.removeFromLibrary.success": "Törölve a Könyvtárból", "action.addToQueue": "Hozzáadás a várólistához", "action.addToQueue.success": "Hozzáadva a várólistához", @@ -199,6 +221,8 @@ "action.startRadio": "Állomás létrehozása", "action.goToArtist": "Előadó megjelenítése", "action.goToAlbum": "Album megjelenítése", + "action.showInPlaylist": "Lejátszási lista megjelenítése", + "action.showInAppleMusic": "Megjelenítés az Apple Musicban", "action.moveToTop": "Mozgatás legfelülre", "action.share": "Megosztás", "action.rename": "Átnevezés", @@ -207,38 +231,43 @@ "action.dislike": "Kevesebb ilyen javasolása", "action.undoDislike": "A Kevesebb ilyen javasolása visszavonása", "action.showWebRemoteQR": "Távirányító", - "action.playTracksNext": "${app.selectedMediaItems.length} zenék lejátszása következőnek", - "action.playTracksLater": "${app.selectedMediaItems.length} zenék lejátszása később", - "action.removeTracks": "${self.selectedItems.length} zenék eltávolítása a várólistáról", + "action.playTracksNext": "${app.selectedMediaItems.length} zene lejátszása következőnek", + "action.playTracksLater": "${app.selectedMediaItems.length} zene lejátszása később", + "action.removeTracks": "${self.selectedItems.length} zene eltávolítása a várólistáról", "action.import": "Importálás", "action.export": "Exportálás", "action.showAlbum": "Teljes album megjelenítése", - "action.tray.minimize": "Kicsinyítés a tálcára", - "action.tray.quit": "Kilépés", + "action.tray.minimize": "Kicsinyítés a Tálcára", + "action.tray.quit": "Bezárás", "action.tray.show": "Megjelenítés", "action.update": "Frissítés", "action.install": "Telepítés", "action.copy": "Másolás", - "action.newpreset": "Új Preset...", - "action.deletepreset": "Preset törlése", + "action.newpreset": "Új előbeállítás...", + "action.deletepreset": "Előbeállítás törlése", "action.open": "Megnyitás", + "action.relaunch.confirm": "Biztosan szeretnéd újraindítani a Cidert?", "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", - "settings.option.general.resumebehavior": "Resume behavior", - "settings.option.general.resumebehavior.description": "Resume behavior affects how Cider will resume your session when you return to the app.", - "settings.option.general.resumebehavior.locally": "Locally", - "settings.option.general.resumebehavior.locally.description": "Cider will resume your last session on this machine.", - "settings.option.general.resumebehavior.history": "History", - "settings.option.general.resumebehavior.history.description": "Cider will queue the last song from your overall Apple Music history, across devices.", + "settings.option.general.resumebehavior": "Folytatási viselkedés", + "settings.option.general.resumebehavior.description": "A folytatási viselkedés a Ciderbe való visszatérésnél történő zene lejátszását változtatja.", + "settings.option.general.resumebehavior.locally": "Lokális", + "settings.option.general.resumebehavior.locally.description": "A Cider az ezen az eszközön utoljára játszott zenét fogja folytatni.", + "settings.option.general.resumebehavior.history": "Előzmények", + "settings.option.general.resumebehavior.history.description": "A Cider az utolsó zeneszámot fogja lekérni az Apple Music előzményeidből, eszközökön keresztül.", "settings.option.general.language.main": "Nyelvek", "settings.option.general.language.fun": "Fantázianyelvek", - "settings.option.general.language.unsorted": "Azonosítatlan", + "settings.option.general.language.unsorted": "Kategorizálatlan", "settings.option.general.updateCider": "Cider frissítése", "settings.option.general.updateCider.branch": "Verzió kiválasztása", "settings.option.general.updateCider.branch.description": "Válaszd ki a Cider melyik verziójára szeretnél frissíteni", "settings.option.general.updateCider.branch.main": "Normál", "settings.option.general.updateCider.branch.develop": "Fejlesztői", + "settings.notyf.updateCider.update-not-available": "Nem található frissítés", + "settings.notyf.updateCider.update-downloaded": "A frissítés le lett töltve, a telepítéshez indítsa újra az alkalmazást", + "settings.notyf.updateCider.update-error": "Hiba történt a frissítés közben", + "settings.notyf.updateCider.update-timeout": "Időtúllépés történt a frissítés alatt", "settings.header.audio": "Hang", "settings.header.audio.description": "A Cider hangbeállításainak módosítása.", "settings.option.audio.volumeStep": "Hangerő lépték", @@ -248,24 +277,24 @@ "settings.header.audio.quality.hireslossless.description": "max. 24-bit/192 kHz sebességen", "settings.header.audio.quality.lossless": "Veszteségmentes", "settings.header.audio.quality.lossless.description": "max. up to 24-bit/48 kHz sebességen", - "settings.header.audio.quality.high": "High", + "settings.header.audio.quality.high": "Magas", "settings.header.audio.quality.high.description": "256 kbps", - "settings.header.audio.quality.standard": "Standard", + "settings.header.audio.quality.standard": "Normál", "settings.header.audio.quality.standard.description": "64 kbps", "settings.option.audio.seamlessTransition": "Szünetmentes lejátszás", "settings.option.audio.enableAdvancedFunctionality": "Haladó funkcionalitás engedélyezése", - "settings.option.audio.enableAdvancedFunctionality.description": "Az AudioContext funkció engedélyezése lehetővé teszi a fejlettebb hangfunkciókat, például a Normalizásást, az Equalizereket és a Visualizer funkciókat, azonban egyes számítógépeken ez akadozást okozhat a hangsávokban.", - "settings.option.audio.audioLab": "Cider Audio Lab", - "settings.option.audio.audioLab.description": "An assortment of in-house developed audio effects for Cider.", - "settings.warn.audioLab.withoutAF": "AudioContext (Advanced Functionality) is required to enable Cider Audio Laboratory.", - "settings.option.audio.enableAdvancedFunctionality.analogWarmth": "Analog Warmth", - "settings.option.audio.enableAdvancedFunctionality.analogWarmth.description": "Simulates the analog warmth modelled after the Korg Nutube 6P1", - "settings.option.audio.enableAdvancedFunctionality.analogWarmthIntensity": "Analog Warmth intensity", - "settings.option.audio.enableAdvancedFunctionality.analogWarmthIntensity.description": "Changes the intensity of the Analog Warmth Module processing.", - "settings.option.audio.enableAdvancedFunctionality.analogWarmthIntensity.smooth": "Smooth", - "settings.option.audio.enableAdvancedFunctionality.analogWarmthIntensity.warm": "Warm", + "settings.option.audio.enableAdvancedFunctionality.description": "Az AudioContext funkció engedélyezése lehetővé teszi a fejlettebb hangfunkciókat, például a Normalizásást, az Equalizereket és a Visualizer funkciókat, azonban egyes eszközökön ez akadozást okozhat a hangsávokban.", + "settings.option.audio.audioLab": "Cider Hangstúdió", + "settings.option.audio.audioLab.description": "A Ciderhez fejlesztett hangeffektek gyűjteménye.", + "settings.warn.audioLab.withoutAF": "Az AudioContext (Haladó funkcionalitás) szükséges a Cider Hangstúdió engedélyezéséhez.", + "settings.option.audio.enableAdvancedFunctionality.analogWarmth": "Analóg Érzet", + "settings.option.audio.enableAdvancedFunctionality.analogWarmth.description": "A Korg Nutube 6P1 analóg érzetét szimulálja.", + "settings.option.audio.enableAdvancedFunctionality.analogWarmthIntensity": "Analóg Érzet erősség", + "settings.option.audio.enableAdvancedFunctionality.analogWarmthIntensity.description": "Az Analóg Érzet modul hangfeldolgozási erősségét változtatja.", + "settings.option.audio.enableAdvancedFunctionality.analogWarmthIntensity.smooth": "Szokásos", + "settings.option.audio.enableAdvancedFunctionality.analogWarmthIntensity.warm": "Nagyobb", "settings.option.audio.enableAdvancedFunctionality.ciderPPE": "Cider Adrenaline Processor™️", - "settings.option.audio.enableAdvancedFunctionality.ciderPPE.description": "Pszichoakusztikus Módosítások amik minden hangot felerősítenek és ütősebbé tesznek", + "settings.option.audio.enableAdvancedFunctionality.ciderPPE.description": "Pszichoakusztikus Módosítások amik a veszteségmentes hallgatáshoz közeli élményt imitálnak.", "settings.warn.audio.enableAdvancedFunctionality.ciderPPE.compatibility": "A CAP nem kompatibilis a Térbeli Hanggal. Kapcsold ki a Térbeli Hangot a folytatáshoz.", "settings.option.audio.enableAdvancedFunctionality.ciderPPEStrength": "CAP Erősség", "settings.option.audio.enableAdvancedFunctionality.ciderPPEStrength.description": "Megváltoztatja a hangra végzett feldolgozás erősségét. (Az Agresszív mód nemkívánatos eredményeket hozhat!)", @@ -274,13 +303,13 @@ "settings.option.audio.enableAdvancedFunctionality.audioNormalization": "Normalizálás", "settings.option.audio.enableAdvancedFunctionality.audioNormalization.description": "Normalizálja az egyes zeneszámok hangosabb részeit, hogy egységesebb hallgatási élményt hozzon létre.", "settings.option.audio.enableAdvancedFunctionality.audioSpatialization": "Térbeli hang", - "settings.option.audio.enableAdvancedFunctionality.audioSpatialization.description": "Térbeli hang és a hang háromdimenziósabbá tétele (Ez nem összekeverendő a Dolby Atmos-szal!)", - "settings.option.audio.enableAdvancedFunctionality.tunedAudioSpatialization": "Cider Tuned Spatialization", - "settings.option.audio.enableAdvancedFunctionality.tunedAudioSpatialization.description": "Pre-tuned Spatializing Effect, disables the customizable settings of Audio Spatialization. Spatialization must be enabled as a prerequisite.", - "settings.option.audio.enableAdvancedFunctionality.tunedAudioSpatialization.profile": "Cider Spatialization Profile", - "settings.option.audio.enableAdvancedFunctionality.tunedAudioSpatialization.profile.description": "Changes the Tuning Profile of the Spatialization. (Requires App Restart)", - "settings.option.audio.enableAdvancedFunctionality.tunedAudioSpatialization.profile.standard": "Standard", - "settings.option.audio.enableAdvancedFunctionality.tunedAudioSpatialization.profile.audiophile": "Audiophile", + "settings.option.audio.enableAdvancedFunctionality.audioSpatialization.description": "A hangzás háromdimenziósabbá tétele (Ez nem összekeverendő a Dolby Atmos-szal!)", + "settings.option.audio.enableAdvancedFunctionality.tunedAudioSpatialization": "Cider Előhangosított Térbeli Hang", + "settings.option.audio.enableAdvancedFunctionality.tunedAudioSpatialization.description": "Előre beállított Térbeli hangzás, ami letiltja a testreszabható Térbeli hang beállításokat. A Térbeli hangot be kell kapcsolni az engedélyezéshez.", + "settings.option.audio.enableAdvancedFunctionality.tunedAudioSpatialization.profile": "Cider Térbeli Hangprofil", + "settings.option.audio.enableAdvancedFunctionality.tunedAudioSpatialization.profile.description": "Megváltoztatja a Térbeli hang előbeállítás profilját. (Újraindítás szükséges)", + "settings.option.audio.enableAdvancedFunctionality.tunedAudioSpatialization.profile.standard": "Normál", + "settings.option.audio.enableAdvancedFunctionality.tunedAudioSpatialization.profile.audiophile": "Professzionális", "settings.warn.audio.enableAdvancedFunctionality.audioSpatialization.compatibility": "A Térbeli Hang nem kompatibilis a CAP-pal. Kapcsold ki a CAP-ot a folytatáshoz.", "settings.header.visual": "Vizuális", "settings.header.visual.description": "A Cider vizuális beállításainak módosítása.", @@ -290,7 +319,7 @@ "settings.header.visual.windowBackgroundStyle.image": "Kép", "settings.option.visual.animatedArtwork": "Animált borító", "settings.header.visual.animatedArtwork.always": "Mindig", - "settings.header.visual.animatedArtwork.limited": "Oldalakra és speciális bejegyzésekre korlátozva.", + "settings.header.visual.animatedArtwork.limited": "Oldalakra és speciális bejegyzésekre korlátozva", "settings.header.visual.animatedArtwork.disable": "Kikapcsolás mindenhol", "settings.option.visual.animatedArtworkQuality": "Animált borító minősége", "settings.header.visual.animatedArtworkQuality.low": "Alacsony", @@ -307,13 +336,26 @@ "settings.option.visual.theme.github.download": "Telepítés GitHub URL-ről", "settings.option.visual.theme.github.explore": "Témaáruház", "settings.header.visual.theme.github.page": "Témák a GitHub-ról", - "settings.option.visual.theme.github.install.confirm": "Biztos, hogy szeretnéd telepíteni a(z) {{ repo }} témát?", + "settings.option.visual.theme.github.install.confirm": "Biztosan szeretnéd telepíteni a(z) {{ repo }} témát?", "settings.prompt.visual.theme.github.URL": "Add meg a telepítendő téma URL-jét", "settings.notyf.visual.theme.install.success": "Téma sikeresen telepítve", "settings.notyf.visual.theme.install.error": "Sikertelen volt a téma telepítése", + "settings.header.visual.plugin": "Plugin", + "settings.option.visual.plugin.github.download": "Telepítés GitHub URL-ről", + "settings.option.visual.plugin.github.explore": "Témaáruház", + "settings.header.visual.plugin.github.page": "Témák a GitHub-ról", + "settings.option.visual.plugin.github.install.confirm": "Biztosan szeretnéd telepíteni a(z) {{ repo }} témát?", + "settings.prompt.visual.plugin.github.URL": "Add meg a telepítendő téma URL-jét", + "settings.prompt.visual.plugin.github.success": "Plugin sikeresen telepítve, kattints az OK-ra a Cider újraindításához", + "settings.notyf.visual.plugin.install.success": "Plugin sikeresen telepítve", + "settings.notyf.visual.plugin.install.error": "Sikertelen volt a plugin telepítése", "settings.option.visual.theme.default": "Cider", "settings.option.visual.theme.dark": "Sötét", "settings.option.visual.showPersonalInfo": "Személyes adatok mutatása", + "settings.header.window": "Ablak", + "settings.header.window.description": "A Cider ablakbeállításainak módosítása.", + "settings.option.window.openOnStartup": "Cider megnyitása bejelentkezésnél", + "settings.option.window.openOnStartup.hidden": "Megnyitás kis méretben", "settings.header.lyrics": "Dalszöveg", "settings.header.lyrics.description": "A Cider dalszöveg beállításainak módosítása.", "settings.option.lyrics.enableMusixmatch": "MusixMatch dalszövegek engedélyezése", @@ -323,31 +365,35 @@ "settings.header.connectivity": "Csatlakozások", "settings.header.connectivity.description": "A Cider csatlakozás beállításainak módosítása.", "settings.option.connectivity.discordRPC": "Discord Rich Presence", - "settings.option.connectivity.playbackNotifications": "Lejátszás értesítések", + "settings.option.connectivity.playbackNotifications": "Lejátszási értesítések", "settings.header.connectivity.discordRPC.cider": "Megjelenítés 'Cider'-ként", "settings.header.connectivity.discordRPC.appleMusic": "Megjelenítés 'Apple Music'-ként", "settings.option.connectivity.discordRPC.clearOnPause": "Discord Rich Presence törlése megállításnál", - "settings.option.connectivity.lastfmScrobble": "LastFM Scrobbling", - "settings.option.connectivity.lastfmScrobble.delay": "LastFM Scrobble Késleltetés (%)", - "settings.option.connectivity.lastfmScrobble.nowPlaying": "LastFM Now Playing engedélyezése", - "settings.option.connectivity.lastfmScrobble.removeFeatured": "Remove featuring artists from song title (LastFM)", - "settings.option.connectivity.lastfmScrobble.filterLoop": "Loopolt zeneszám szűrése (LastFM)", - "settings.header.debug": "Hibakeresés", + "settings.option.connectivity.lastfmScrobble": "Last.fm Scrobbling", + "settings.option.connectivity.lastfmScrobble.delay": "Last.fm Scrobble késleltetés (%)", + "settings.option.connectivity.lastfmScrobble.nowPlaying": "Last.fm Now Playing engedélyezése", + "settings.option.connectivity.lastfmScrobble.removeFeatured": "Közreműködő zenészek eltávolítása a címből (Last.fm)", + "settings.option.connectivity.lastfmScrobble.filterLoop": "Ismételt zeneszám szűrése (Last.fm)", + "settings.header.debug": "Hibaelhárítás", "settings.option.debug.copy_log": "Napló másolása a vágólapra", "settings.option.debug.openAppData": "Cider mappa megnyitása", "settings.header.experimental": "Kísérleti", "settings.header.experimental.description": "A Cider kísérleti beállításainak módosítása.", - "settings.option.experimental.unknownPlugin": "Unknown Sources", - "settings.option.experimental.unknownPlugin.description": "Allow installion of plugins from repos other than the Cider Plugin Repository", + "settings.option.experimental.unknownPlugin": "Ismeretlen források", + "settings.option.experimental.unknownPlugin.description": "Engedélyezi azon pluginok telepítését is, amik nem tartoznak a Cider Plugin Gyűjteménybe, ezáltal lehetséges biztonsági kockázatot jelentenek", "settings.option.experimental.compactUI": "Kompakt felület", "settings.option.window.close_button_hide": "A bezárás gomb rejtse el az alkalmazást", - "settings.option.experimental.inline_playlists": "Inline Playlists and Albums", - "spatial.notTurnedOn": "A térbeli hangzás ki van kapcsolva, használatához kapcsolja be.", + "settings.option.experimental.inline_playlists": "Ablakon belüli lejátszási listák és albumok", + "settings.option.advanced.playlistTrackMapping": "Lejátszási lista feltérképezés", + "settings.option.advanced.playlistTrackMapping.description": "Engedélyezi a lejátszási listák mély beolvasását, ami meg tudja határozni, hogy egy zeneszám melyik lejátszási listákba található. A lejátszási lista gyorsítótár felépítésének időtartalma nagy mértékben megnőhet.", + "settings.option.visual.transparent": "Átlátszó keret", + "settings.option.visual.transparent.description": "Átlátszó ablakkeret (a Témák támogatása és újraindítás szükséges)", + "spatial.notTurnedOn": "A térbeli hang ki van kapcsolva, használatához kapcsolja be.", "spatial.spatialProperties": "Térbeli hang", "spatial.width": "Szélesség", "spatial.height": "Magasság", "spatial.depth": "Hosszúság", - "spatial.gain": "Gain", + "spatial.gain": "Növelés", "spatial.roomMaterials": "Szoba felépítése", "spatial.roomDimensions": "Szoba méretei", "spatial.roomPositions": "Szoba pozíciói", @@ -362,7 +408,17 @@ "spatial.listener": "Hallgató", "spatial.audioSource": "Hangforrás", "settings.header.unfinished": "Befejezetlen", - "remote.web.title": "Cider Remote", - "remote.web.description": "Olvasd be ezt a QR-kódot a telefonoddal, hogy tudd vezérelni a lejátszót.", + "remote.web.title": "Távirányító", + "remote.web.description": "Olvasd be ezt a QR-kódot a telefonoddal, hogy vezérelni tudd a lejátszót.", + "share.platform.twitter.tweet": "Hallgasd meg a(z) {{song}} zenét az Apple Musicon.\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 URL másolása", + "share.platform.clipboard": "Link másolása", "about.thanks": "Köszönet a Cider Collective csapatának és minden hozzájárulónak." } diff --git a/src/i18n/in_ID.json b/src/i18n/in_ID.json index 8f257626..aec39c39 100644 --- a/src/i18n/in_ID.json +++ b/src/i18n/in_ID.json @@ -23,6 +23,8 @@ "term.about": "Tentang", "term.privateSession": "Sesi Pribadi", "term.queue": "Antrian", + "term.lyrics": "Lirik", + "term.miniplayer": "Pemutar Kecil", "term.history": "Riwayat", "term.search": "Cari", "term.library": "Pustaka", @@ -61,6 +63,7 @@ "term.sortBy.genre": "Genre", "term.sortBy.releaseDate": "Tanggal Rilis", "term.sortBy.duration": "Durasi", + "term.sortBy.dateAdded": "Tanggal Ditambahkan", "term.sortOrder": "A-Z", "term.sortOrder.ascending": "Terkecil", "term.sortOrder.descending": "Terbesar", @@ -84,19 +87,34 @@ "term.showMore": "Tampilkan lebih banyak", "term.showLess": "Tampilkan lebih sedikit", "term.topSongs": "Lagu Teratas", - "term.latestReleases": "Rilis Terbaru", + "term.latestReleases": "Rilisan Terbaru", "term.time.added": "Ditambahkan", "term.time.released": "Dirilis", "term.time.updated": "Diperbarui", + "term.time.days": "hari", + "term.time.day": { + "one": "hari", + "other": "hari" + }, "term.time.hours": "jam", - "term.time.hour": "jam", + "term.time.hour": { + "one": "jam", + "other": "jam" + }, "term.time.minutes": "menit", - "term.time.minute": "menit", + "term.time.minute": { + "one": "menit", + "other": "menit" + }, "term.time.seconds": "detik", - "term.time.second": "detik", + "term.time.second": { + "one": "detik", + "other": "detik" + }, "term.fullscreenView": "Mode Layar Penuh", "term.defaultView": "Mode Default", "term.audioSettings": "Pengaturan Audio", + "term.audioControls": "Kontrol Volume", "term.clearAll": "Bersihkan Semua", "term.recentStations": "Stasiun Terbaru", "term.language": "Bahasa", @@ -113,6 +131,10 @@ "term.equalizer": "Equalizer", "term.reset": "Atur Ulang", "term.tracks": "lagu", + "term.track": { + "one" : "lagu", + "other" : "lagu" + }, "term.videos": "Video", "term.menu": "Menu", "term.check": "Cek", @@ -124,6 +146,10 @@ "term.addedpreset": "Preset Ditambahkan", "term.deletepreset.warn": "Yakin ingin menghapus preset ini?", "term.deletedpreset": "Preset dihapus", + "term.defaultPresets": "Preset Default", + "term.userPresets": "Presets Pengguna", + "term.requestError": "Ada masalah dengan permintaan.", + "term.song.link.generate": "Mendapatkan link bagi song.link...", "term.musicVideos": "Video Musik", "term.stations": "Stasiun", "term.curators": "Kurator", @@ -132,6 +158,23 @@ "term.recordLabels": "Label Rekaman", "term.videoExtras": "Bonus Video", "term.top": "Atas", + "term.version": "Versi", + "term.noVideos": "Video tidak ditemukan.", + "term.plugin": "Plug-in", + "term.pluginMenu": "Menu Plug-in", + "term.pluginMenu.none": "Tidak ada plugin interaktif", + "term.replay": "Ulangi", + "term.uniqueAlbums": "Album Spesial", + "term.uniqueArtists": "Artis Spesial", + "term.uniqueSongs": "Lagu Spesial", + "term.topArtists": "Artis Teratas", + "term.listenedTo": "Mendengarkan:", + "term.times": "kali", + "term.topAlbums": "Album Teratas", + "term.plays": "Dimainkan", + "term.topGenres": "Genre Teratas", + "term.confirmLogout": "Apakah Anda yakin ingin keluar??", + "term.creditDesignedBy": "Dirancang oleh ${authorUsername}", "home.title": "Beranda", "home.recentlyPlayed": "Baru Dimainkan", "home.recentlyAdded": "Baru Ditambahkan", @@ -178,7 +221,9 @@ "action.startRadio": "Mulai Radio", "action.goToArtist": "Lihat Halaman Artis", "action.goToAlbum": "Lihat Halaman Album", - "action.moveToTop": "Pindah ke Atas", + "action.showInPlaylist": "Tampilkan di Playlist", + "action.showInAppleMusic": "Tampilkan di Apple Music", + "action.moveToTop": "Keluar dari Folder", "action.share": "Bagikan", "action.rename": "Ubah Nama", "action.love": "Suka", @@ -196,12 +241,21 @@ "action.tray.quit": "Keluar", "action.tray.show": "Tampilkan", "action.update": "Perbarui", + "action.install": "Pasang", "action.copy": "Salin", "action.newpreset": "Preset Baru...", "action.deletepreset": "Hapus Preset", + "action.open": "Buka", + "action.relaunch.confirm": "Apakah Anda ingin memulai ulang Cider?", "settings.header.general": "Umum", "settings.header.general.description": "Sesuaikan pengaturan umum untuk Cider.", "settings.option.general.language": "Bahasa", + "settings.option.general.resumebehavior": "Aturan Resume", + "settings.option.general.resumebehavior.description": "Aturan resume akan mempengaruhi bagaimana Cider akan melanjutkan sesi Anda ketika memulai Cider.", + "settings.option.general.resumebehavior.locally": "Lokal", + "settings.option.general.resumebehavior.locally.description": "Cider akan melanjutkan sesi terakhir Anda di perangkat ini.", + "settings.option.general.resumebehavior.history": "Riwayat", + "settings.option.general.resumebehavior.history.description": "Cider akan menambahkan lagu terakhir dari keseluruhan riwayat Apple Music Anda ke dalam antrian di seluruh perangkat.", "settings.option.general.language.main": "Bahasa", "settings.option.general.language.fun": "Bahasa Candaan", "settings.option.general.language.unsorted": "Tidak disortir", @@ -210,8 +264,14 @@ "settings.option.general.updateCider.branch.description": "Pilih branch untuk memperbarui Cider", "settings.option.general.updateCider.branch.main": "Stable", "settings.option.general.updateCider.branch.develop": "Development", + "settings.notyf.updateCider.update-not-available": "Tidak ada pembaruan tersedia", + "settings.notyf.updateCider.update-downloaded": "Pembaruan sudah didownload, mulai ulang untuk menginstall pembaruan", + "settings.notyf.updateCider.update-error": "Terjadi kesalahan saat memperbarui Cider", + "settings.notyf.updateCider.update-timeout": "Waktu pembaruan habis", "settings.header.audio": "Audio", "settings.header.audio.description": "Sesuaikan pengaturan audio untuk Cider.", + "settings.option.audio.volumeStep": "Jangkah Volume", + "settings.option.audio.maxVolume": "Volume Maksimal", "settings.option.audio.quality": "Kualitas Audio", "settings.header.audio.quality.hireslossless": "Hi-Res Lossless", "settings.header.audio.quality.hireslossless.description": "sampai dari 24-bit/192 kHz", @@ -224,16 +284,34 @@ "settings.option.audio.seamlessTransition": "Transisi Audio Mulus", "settings.option.audio.enableAdvancedFunctionality": "Aktifkan Fungsi Lanjutan", "settings.option.audio.enableAdvancedFunctionality.description": "Mengaktifkan fungsionalitas AudioContext memungkinkan fitur audio lanjutan seperti Normalisasi Audio, Equalizer dan Visualizer. Namun pada beberapa perangkat dapat menyebabkan tersendatnya audio.", + "settings.option.audio.audioLab": "Lab Audio Cider", + "settings.option.audio.audioLab.description": "Macam-macam efek audio yang dikembangkan sendiri untuk Cider.", + "settings.warn.audioLab.withoutAF": "AudioContext (Fungsi Lanjutan) perlu diaktifkan untuk menggunakan Lab Audio Cider.", + "settings.option.audio.enableAdvancedFunctionality.analogWarmth": "Analog Warmth", + "settings.option.audio.enableAdvancedFunctionality.analogWarmth.description": "Mensimulasikan kehangatan analog yang dimodelkan setelah Korg Nutube 6P1", + "settings.option.audio.enableAdvancedFunctionality.analogWarmthIntensity": "Analog Warmth intensity", + "settings.option.audio.enableAdvancedFunctionality.analogWarmthIntensity.description": "Mengubah intensitas pemrosesan modul Analog Warmth.", + "settings.option.audio.enableAdvancedFunctionality.analogWarmthIntensity.smooth": "Halus", + "settings.option.audio.enableAdvancedFunctionality.analogWarmthIntensity.warm": "Hangat", "settings.option.audio.enableAdvancedFunctionality.ciderPPE": "Cider Adrenaline Processor™️", "settings.option.audio.enableAdvancedFunctionality.ciderPPE.description": "Peningkatan Psikoakustik yang membuat semuanya terdengar lebih jelas dan lebih hidup.", + "settings.warn.audio.enableAdvancedFunctionality.ciderPPE.compatibility": "CAP tidak cocok dengan Spatialisasi. Matikan Spasialisasi untuk menggunakan.", "settings.option.audio.enableAdvancedFunctionality.ciderPPEStrength": "Kekuatan CAP", "settings.option.audio.enableAdvancedFunctionality.ciderPPEStrength.description": "Mengubah kekuatan pemrosesan yang dilakukan pada audio. (Agresif dapat menghasilkan hasil yang tidak diinginkan)", "settings.option.audio.enableAdvancedFunctionality.ciderPPEStrength.standard": "Standar", "settings.option.audio.enableAdvancedFunctionality.ciderPPEStrength.aggressive": "Agresif", "settings.option.audio.enableAdvancedFunctionality.audioNormalization": "Normalisasi Audio", "settings.option.audio.enableAdvancedFunctionality.audioNormalization.description": "Menormalkan puncak volume untuk masing-masing lagu demi menciptakan pengalaman mendengarkan yang lebih seragam.", + "settings.option.audio.enableAdvancedFunctionality.audioNormalization.disabled": "Diatar oleh Lab Audio", "settings.option.audio.enableAdvancedFunctionality.audioSpatialization": "Spasialisasi Audio", "settings.option.audio.enableAdvancedFunctionality.audioSpatialization.description": "Atur ruang audio dan buat audio lebih 3 dimensi (NB: Bukan Dolby Atmos)", + "settings.option.audio.enableAdvancedFunctionality.tunedAudioSpatialization": "Spasialisasi oleh Cider", + "settings.option.audio.enableAdvancedFunctionality.tunedAudioSpatialization.description": "Efek Spasialisasi yang sudah diatur. Untuk menggunakannya, matikan pengaturan custom Spasialisasi Audio dan pastikan Spasialisasi Audio sudah aktif.", + "settings.option.audio.enableAdvancedFunctionality.tunedAudioSpatialization.profile": "Profil Spasialisasi Cider", + "settings.option.audio.enableAdvancedFunctionality.tunedAudioSpatialization.profile.description": "Mengubah Profil Tuning Spasialisasi. (Memerlukan Restart Aplikasi)", + "settings.option.audio.enableAdvancedFunctionality.tunedAudioSpatialization.profile.standard": "Standar", + "settings.option.audio.enableAdvancedFunctionality.tunedAudioSpatialization.profile.audiophile": "Audiophile", + "settings.warn.audio.enableAdvancedFunctionality.audioSpatialization.compatibility": "Spatialization tidak cocok dengan CAP. Matikan CAP untuk menggunakan.", "settings.header.visual": "Visual", "settings.header.visual.description": "Sesuaikan pengaturan visual untuk Cider.", "settings.option.visual.windowBackgroundStyle": "Gaya Latar Belakang Jendela", @@ -256,10 +334,30 @@ "settings.header.visual.hardwareAcceleration.default": "Default", "settings.header.visual.hardwareAcceleration.webGPU": "WebGPU", "settings.header.visual.theme": "Tema", + "settings.option.visual.theme.github.download": "Pasang dari URL GitHub", + "settings.option.visual.theme.github.explore": "Jelajahi Tema di GitHub", + "settings.header.visual.theme.github.page": "Tema dari GitHub", + "settings.option.visual.theme.github.install.confirm": "Apakah anda yakin untuk memasang {{ repo }}?", + "settings.prompt.visual.theme.github.URL": "Masukan URL tema yang ingin Anda pasang", + "settings.notyf.visual.theme.install.success": "Tema berhasil dipasang", + "settings.notyf.visual.theme.install.error": "Pemasangan tema gagal", + "settings.header.visual.plugin": "Plugin", + "settings.option.visual.plugin.github.download": "Pasang dari URL GitHub", + "settings.option.visual.plugin.github.explore": "Jelajahi Plugin di GitHub", + "settings.header.visual.plugin.github.page": "Plugins from GitHub", + "settings.option.visual.plugin.github.install.confirm": "Apakah anda yakin untuk memasang {{ repo }}?", + "settings.prompt.visual.plugin.github.URL": "Masukan URL plugin yang ingin Anda pasang", + "settings.prompt.visual.plugin.github.success": "Plugin berhasil dipasang, Tekan OK untuk memulai ulang Cider", + "settings.notyf.visual.plugin.install.success": "Plugin berhasil dipasang", + "settings.notyf.visual.plugin.install.error": "Plugin gagal dipasang", "settings.option.visual.theme.default": "Cider", "settings.option.visual.theme.dark": "Gelap", "settings.option.visual.showPersonalInfo": "Tampilkan Info Pribadi", - "settings.header.lyrics": "Lyrics", + "settings.header.window": "Jendela", + "settings.header.window.description": "Atur pengaturan jendela pada Cider.", + "settings.option.window.openOnStartup": "Buka Cider Ketika Perangkat Dinyalakan", + "settings.option.window.openOnStartup.hidden": "Buka dalam mode tersembunyi", + "settings.header.lyrics": "Lirik", "settings.header.lyrics.description": "Sesuaikan pengaturan lirik untuk Cider.", "settings.option.lyrics.enableMusixmatch": "Aktifkan Lirik Musixmatch", "settings.option.lyrics.enableMusixmatchKaraoke": "Aktifkan Mode Karaoke (khusus Musixmatch)", @@ -271,18 +369,26 @@ "settings.option.connectivity.playbackNotifications": "Pemberitahuan Pemutaran", "settings.header.connectivity.discordRPC.cider": "Tampilkan sebagai 'Cider'", "settings.header.connectivity.discordRPC.appleMusic": "Tampilkan sebagai 'Apple Music'", - "settings.option.connectivity.discordRPC.clearOnPause": "Sembunyikan Discord Rich Presence saat dijeda", + "settings.option.connectivity.discordRPC.clearOnPause": "Sembunyikan Discord Rich Presence Saat Dijeda", "settings.option.connectivity.lastfmScrobble": "Last.fm Scrobbling", "settings.option.connectivity.lastfmScrobble.delay": "Delay Last.fm Scrobble (%)", "settings.option.connectivity.lastfmScrobble.nowPlaying": "Aktifkan Last.fm Now Playing", "settings.option.connectivity.lastfmScrobble.removeFeatured": "Hapus featuring artist dari judul lagu (Last.fm)", "settings.option.connectivity.lastfmScrobble.filterLoop": "Filter lagu yang diulang (Last.fm)", + "settings.header.debug": "Debug", + "settings.option.debug.copy_log": "Salin logs ke clipboard", + "settings.option.debug.openAppData": "Buka Folder Cider", "settings.header.experimental": "Eksperimental", "settings.header.experimental.description": "Sesuaikan pengaturan eksperimental untuk Cider.", + "settings.option.experimental.unknownPlugin": "Sumber Tidak Diketahui", + "settings.option.experimental.unknownPlugin.description": "Izinkan pemasangan plugin dari repo selain Cider Plugin Repository", "settings.option.experimental.compactUI": "UI Kompak", "settings.option.window.close_button_hide": "Tombol Tutup Menyembunyikan Aplikasi", - "settings.option.experimental.copy_log": "Salin log ke clipboard", "settings.option.experimental.inline_playlists": "Playlist dan Album Sebaris", + "settings.option.advanced.playlistTrackMapping": "Pemetaan Lagu Playlist", + "settings.option.advanced.playlistTrackMapping.description": "Mengaktifkan pemindaian daftar putar yang mendalam untuk menentukan trek mana yang ada di daftar putar. Waktu pembuatan cache daftar putar dapat meningkat secara signifikan.", + "settings.option.visual.transparent": "Frame transparan", + "settings.option.visual.transparent.description": "Frame transparan (membutuhkan tema yang mendukung, membutuhkan dibuka ulang)", "spatial.notTurnedOn": "Spasialisasi Audio dinonaktifkan. Untuk menggunakan, aktifkan terlebih dahulu.", "spatial.spatialProperties": "Spatial Properties", "spatial.width": "Lebar", @@ -306,4 +412,4 @@ "remote.web.title": "Remote Cider", "remote.web.description": "Pindai kode QR untuk memasangkan ponsel Anda dengan Cider.", "about.thanks": "Terima kasih yang sebesar-besarnya kepada Cider Collective Team dan semua kontributor kami." -} \ No newline at end of file +} diff --git a/src/i18n/source/en_US.json b/src/i18n/source/en_US.json index 9d6f82e5..e4cd7f03 100644 --- a/src/i18n/source/en_US.json +++ b/src/i18n/source/en_US.json @@ -132,8 +132,8 @@ "term.reset": "Reset", "term.tracks": "tracks", "term.track": { - "one" : "track", - "other" : "tracks" + "one": "track", + "other": "tracks" }, "term.videos": "Videos", "term.menu": "Menu", @@ -284,6 +284,7 @@ "settings.option.audio.seamlessTransition": "Seamless Audio Transition", "settings.option.audio.enableAdvancedFunctionality": "Enable Advanced Functionality", "settings.option.audio.enableAdvancedFunctionality.description": "Enabling AudioContext functionality will allow for extended audio features like Audio Normalization, Equalizers and Visualizers - however on some systems this may cause stuttering in audio tracks.", + "settings.warn.audio.enableAdvancedFunctionality.lowcores": "Cider thinks your PC cant handle these features. Are you sure you want to continue?", "settings.option.audio.audioLab": "Cider Audio Lab", "settings.option.audio.audioLab.description": "An assortment of in-house developed audio effects for Cider.", "settings.warn.audioLab.withoutAF": "AudioContext (Advanced Functionality) is required to enable Cider Audio Laboratory.", @@ -302,6 +303,7 @@ "settings.option.audio.enableAdvancedFunctionality.ciderPPEStrength.aggressive": "Aggressive", "settings.option.audio.enableAdvancedFunctionality.audioNormalization": "Audio Normalization", "settings.option.audio.enableAdvancedFunctionality.audioNormalization.description": "Normalizes peak volume for individual tracks to create a more uniform listening experience.", + "settings.option.audio.enableAdvancedFunctionality.audioNormalization.disabled": "Managed by Audio Lab", "settings.option.audio.enableAdvancedFunctionality.audioSpatialization": "Audio Spatialization", "settings.option.audio.enableAdvancedFunctionality.audioSpatialization.description": "Spatialize audio and make audio more 3-dimensional (note: This is not Dolby Atmos)", "settings.option.audio.enableAdvancedFunctionality.tunedAudioSpatialization": "Cider Tuned Spatialization", @@ -379,6 +381,8 @@ "settings.option.debug.openAppData": "Open Cider Folder", "settings.header.experimental": "Experimental", "settings.header.experimental.description": "Adjust the experimental settings for Cider.", + "settings.option.experimental.reinstallwidevine": "Reinstall WidevineCDM", + "settings.option.experimental.reinstallwidevine.confirm": "Are you sure you want to reinstall Widevine?", "settings.option.experimental.unknownPlugin": "Unknown Sources", "settings.option.experimental.unknownPlugin.description": "Allow installation of plugins from repos other than the Cider Plugin Repository", "settings.option.experimental.compactUI": "Compact UI", @@ -388,6 +392,7 @@ "settings.option.advanced.playlistTrackMapping.description": "Enables deep scanning of playlists to determine which tracks are in which playlists. Playlist cache build times can increase significantly.", "settings.option.visual.transparent": "Transparent frame", "settings.option.visual.transparent.description": "Transparent frame (needs Theme Support , requires relaunch)", + "settings.header.advanced": "Advanced", "spatial.notTurnedOn": "Audio Spatialization is disabled. To use, please enable it first.", "spatial.spatialProperties": "Spatial Properties", "spatial.width": "Width", diff --git a/src/i18n/zh_TW.json b/src/i18n/zh_TW.json index 00380ef4..74b2f42a 100644 --- a/src/i18n/zh_TW.json +++ b/src/i18n/zh_TW.json @@ -22,6 +22,8 @@ "term.about": "關於", "term.privateSession": "私人時段", "term.queue": "待播清單", + "term.lyrics": "歌詞", + "term.miniplayer": "迷你播放模式", "term.history": "播放歷史", "term.search": "搜尋", "term.library": "資料庫", @@ -125,6 +127,7 @@ "term.requestError": "請求發生錯誤。", "term.song.link.generate": "正在取得 song.link 的分享網址...", "term.version": "版本", + "term.creditDesignedBy": "由 ${authorUsername} 設計", "home.title": "首頁", "home.recentlyPlayed": "最近播放", "home.recentlyAdded": "最近加入", @@ -170,6 +173,7 @@ "action.startRadio": "建立電台", "action.goToArtist": "前往藝人", "action.goToAlbum": "前往專輯", + "action.showInAppleMusic": "在 Apple Music 中顯示", "action.moveToTop": "移至頂端", "action.share": "分享歌曲", "action.rename": "重新命名", @@ -299,9 +303,9 @@ "settings.header.lyrics": "歌詞", "settings.header.lyrics.description": "調整 Cider 的歌詞設定", "settings.option.lyrics.enableMusixmatch": "開啟 Musixmatch 歌詞", - "settings.option.lyrics.enableMusixmatchKaraoke": "開啟K歌模式(僅限Musixmatch)", + "settings.option.lyrics.enableMusixmatchKaraoke": "開啟K歌模式(僅限 Musixmatch)", "settings.option.lyrics.musixmatchPreferredLanguage": "Musixmatch 歌詞語言偏好", - "settings.option.lyrics.enableYoutubeLyrics": "播放 MV 時使用 YouTube 歌詞", + "settings.option.lyrics.enableYoutubeLyrics": "播放 MV 時,使用 YouTube 歌詞", "settings.header.connectivity": "外部連接", "settings.header.connectivity.description": "調整 Cider 與外部的連接", "settings.option.connectivity.discordRPC": "Discord 動態", diff --git a/src/main/base/browserwindow.ts b/src/main/base/browserwindow.ts index c55e7533..b102b464 100644 --- a/src/main/base/browserwindow.ts +++ b/src/main/base/browserwindow.ts @@ -1005,10 +1005,27 @@ export class BrowserWindow { return Math.max(-32768, Math.min(32768, v)); // clamp } + function bitratechange(e: any){ + var t = e.length; + let sampleRate = 96.0; + let outputSampleRate = 48.0; + var s = 0, + o = sampleRate / outputSampleRate, + u = Math.ceil(t * outputSampleRate / sampleRate), + a = new Int16Array(u); + for (let i = 0; i < u; i++) { + a[i] = e[Math.floor(s)]; + s += o; + } + + return a; + } + let newaudio = quantization(leftpcm, rightpcm); //let newaudio = [leftpcm, rightpcm]; // console.log(newaudio.length); - let pcmData = Buffer.from(new Int8Array(interleave16(Int16Array.from(newaudio[0], x => convert(x)), Int16Array.from(newaudio[1], x => convert(x))).buffer)); + + let pcmData = Buffer.from(new Int8Array(interleave16(bitratechange(Int16Array.from(newaudio[0], x => convert(x))), bitratechange(Int16Array.from(newaudio[1], x => convert(x)))).buffer)); if (!this.headerSent) { console.log('new header') diff --git a/src/main/plugins/menubar.ts b/src/main/plugins/menubar.ts index ff915800..857d9461 100644 --- a/src/main/plugins/menubar.ts +++ b/src/main/plugins/menubar.ts @@ -149,6 +149,12 @@ export default class Thumbar { label: 'Volume Down', accelerator: 'CommandOrControl+Down', click: () => this._win.webContents.executeJavaScript(`app.volumeDown()`) + }, + {type: 'separator'}, + { + label: 'Cast To Devices', + accelerator: 'CommandOrControl+Shift+C', + click: () => this._win.webContents.executeJavaScript(`app.modals.castMenu = true`) } ] }, diff --git a/src/renderer/audio/audio.js b/src/renderer/audio/audio.js index cf4d3578..07e6b89b 100644 --- a/src/renderer/audio/audio.js +++ b/src/renderer/audio/audio.js @@ -45,7 +45,7 @@ const CiderAudio = { }, connectContext: function (mediaElem) { if (!CiderAudio.context) { - CiderAudio.context = new (window.AudioContext || window.webkitAudioContext); + CiderAudio.context = new window.AudioContext({sampleRate: 96000}); // Don't ever remove the sample rate arg. Ask Maikiwi. } if (!CiderAudio.source) { CiderAudio.source = CiderAudio.context.createMediaElementSource(mediaElem); @@ -311,7 +311,7 @@ const CiderAudio = { for (let i = 0; i < WARMTH_FREQUENCIES.length; i++) { CiderAudio.audioNodes.analogWarmth[i] = CiderAudio.context.createBiquadFilter(); CiderAudio.audioNodes.analogWarmth[i].type = 'peaking'; // 'peaking'; - CiderAudio.audioNodes.analogWarmth[i].frequency.value = WARMTH_FREQUENCIES[i]; + CiderAudio.audioNodes.analogWarmth[i].frequency.value = WARMTH_FREQUENCIES[i] ; CiderAudio.audioNodes.analogWarmth[i].Q.value = WARMTH_Q[i]; CiderAudio.audioNodes.analogWarmth[i].gain.value = WARMTH_GAIN[i] * 1.25; } @@ -321,7 +321,7 @@ const CiderAudio = { for (let i = 0; i < WARMTH_FREQUENCIES.length; i++) { CiderAudio.audioNodes.analogWarmth[i] = CiderAudio.context.createBiquadFilter(); CiderAudio.audioNodes.analogWarmth[i].type = 'peaking'; // 'peaking'; - CiderAudio.audioNodes.analogWarmth[i].frequency.value = WARMTH_FREQUENCIES[i]; + CiderAudio.audioNodes.analogWarmth[i].frequency.value = WARMTH_FREQUENCIES[i] ; CiderAudio.audioNodes.analogWarmth[i].Q.value = WARMTH_Q[i]; CiderAudio.audioNodes.analogWarmth[i].gain.value = WARMTH_GAIN[i] * 1.75; } @@ -331,7 +331,7 @@ const CiderAudio = { for (let i = 0; i < WARMTH_FREQUENCIES.length; i++) { CiderAudio.audioNodes.analogWarmth[i] = CiderAudio.context.createBiquadFilter(); CiderAudio.audioNodes.analogWarmth[i].type = 'peaking'; // 'peaking'; - CiderAudio.audioNodes.analogWarmth[i].frequency.value = WARMTH_FREQUENCIES[i]; + CiderAudio.audioNodes.analogWarmth[i].frequency.value = WARMTH_FREQUENCIES[i] ; CiderAudio.audioNodes.analogWarmth[i].Q.value = WARMTH_Q[i]; CiderAudio.audioNodes.analogWarmth[i].gain.value = WARMTH_GAIN[i] * 1.25; } @@ -407,7 +407,7 @@ const CiderAudio = { for (let i = 0; i < LLPW_FREQUENCIES.length; i++) { CiderAudio.audioNodes.llpw[i] = CiderAudio.context.createBiquadFilter(); CiderAudio.audioNodes.llpw[i].type = 'peaking'; // 'peaking'; - CiderAudio.audioNodes.llpw[i].frequency.value = LLPW_FREQUENCIES[i]; + CiderAudio.audioNodes.llpw[i].frequency.value = LLPW_FREQUENCIES[i] ; CiderAudio.audioNodes.llpw[i].Q.value = LLPW_Q[i]; CiderAudio.audioNodes.llpw[i].gain.value = LLPW_GAIN[i]; } @@ -435,7 +435,7 @@ const CiderAudio = { for (let i = 0; i < c_LLPW_FREQUENCIES.length; i++) { CiderAudio.audioNodes.llpw[i] = CiderAudio.context.createBiquadFilter(); CiderAudio.audioNodes.llpw[i].type = 'peaking'; // 'peaking'; - CiderAudio.audioNodes.llpw[i].frequency.value = c_LLPW_FREQUENCIES[i]; + CiderAudio.audioNodes.llpw[i].frequency.value = c_LLPW_FREQUENCIES[i] ; CiderAudio.audioNodes.llpw[i].Q.value = c_LLPW_Q[i]; CiderAudio.audioNodes.llpw[i].gain.value = c_LLPW_GAIN[i]; } @@ -496,7 +496,7 @@ const CiderAudio = { for (let i = 0; i < VIBRANTBASSBANDS.length; i++) { CiderAudio.audioNodes.vibrantbassNode[i] = CiderAudio.context.createBiquadFilter(); CiderAudio.audioNodes.vibrantbassNode[i].type = 'peaking'; // 'peaking'; - CiderAudio.audioNodes.vibrantbassNode[i].frequency.value = VIBRANTBASSBANDS[i]; + CiderAudio.audioNodes.vibrantbassNode[i].frequency.value = VIBRANTBASSBANDS[i] ; CiderAudio.audioNodes.vibrantbassNode[i].Q.value = VIBRANTBASSQ[i]; CiderAudio.audioNodes.vibrantbassNode[i].gain.value = VIBRANTBASSGAIN[i] * (app.cfg.audio.equalizer.vibrantBass / 10); } diff --git a/src/renderer/audio/impulses/CAP_Natural.wav b/src/renderer/audio/impulses/CAP_Natural.wav index 945069e8..349fbaac 100644 Binary files a/src/renderer/audio/impulses/CAP_Natural.wav and b/src/renderer/audio/impulses/CAP_Natural.wav differ diff --git a/src/renderer/less/bootstrap.less b/src/renderer/less/bootstrap.less index e2ec3b64..79bae596 100644 --- a/src/renderer/less/bootstrap.less +++ b/src/renderer/less/bootstrap.less @@ -2350,6 +2350,33 @@ fieldset:disabled .btn { // Tabs +.nav { + display: -ms-flexbox; + display: flex; + -ms-flex-wrap: wrap; + flex-wrap: wrap; + padding-left: 0; + margin-bottom: 0; + list-style: none; +} + +.nav-link { + display: block; + padding: 0.5rem 1rem; + text-decoration: none; +} + +.nav-link:hover, .nav-link:focus { + text-decoration: none; +} + +.nav-link.disabled { + color: #6c757d; + pointer-events: none; + cursor: default; +} + + .nav-tabs { border-bottom: 1px solid #dee2e6; } @@ -2382,14 +2409,23 @@ fieldset:disabled .btn { } .nav-pills .nav-link { - background: none; + background-color: transparent; border: 0; - border-radius: 0.25rem; + border-radius: 50px; + color: #eee; + -webkit-user-drag: none; + // transition: transform .35s var(--appleEase), background-color .35s var(--appleEase); + font-weight: 500; + &:hover { + // transition: transform .35s var(--appleEase), background-color 0s var(--appleEase); + background-color: var(--hover); + } } .nav-pills .nav-link.active, .nav-pills .show > .nav-link { color: #fff; - background-color: #0d6efd; + background-color: var(--selected); + outline:2px solid var(--keyColor); } .nav-fill > .nav-link, diff --git a/src/renderer/less/directives.less b/src/renderer/less/directives.less index e86ca211..b2b9305a 100644 --- a/src/renderer/less/directives.less +++ b/src/renderer/less/directives.less @@ -173,6 +173,7 @@ .app-chrome--right { width: 30%; flex: 0 0 auto; + padding-right: 8px; } } .collection-page { diff --git a/src/renderer/less/pages.less b/src/renderer/less/pages.less index b2ff7c4e..bf79c2b6 100644 --- a/src/renderer/less/pages.less +++ b/src/renderer/less/pages.less @@ -827,13 +827,18 @@ .settings-page { padding: 0px; + .nav { + width: 90%; + margin: 16px auto 0px; + } + .md-option-header { - padding : 1.25em 1.25em; + padding: 0px 26px; border-bottom: unset; - border-top : unset; - font-weight : 600; - font-size : 1.0em; - background : rgb(255 255 255 / 3%); + border-top: unset; + font-weight: 600; + background: rgb(255 255 255 / 0%); + font-size: 2em; } .settings-option-body { diff --git a/src/renderer/main/vueapp.js b/src/renderer/main/vueapp.js index 18b3d606..e3449711 100644 --- a/src/renderer/main/vueapp.js +++ b/src/renderer/main/vueapp.js @@ -297,10 +297,10 @@ const app = new Vue({ } this.lz = ipcRenderer.sendSync("get-i18n", lang) this.mklang = await this.MKJSLang() - try{ + try { this.listennow.timestamp = 0; this.browsepage.timestamp = 0; - }catch(e){} + } catch (e) { } }, /** * Grabs translation for localization. @@ -604,6 +604,11 @@ const app = new Vue({ try { // Set profile name this.chrome.userinfo = (await app.mk.api.v3.music(`/v1/me/social-profile`)).data.data[0] + // check if this.chrome.userinfo.attributes.artwork exists + if (this.chrome.userinfo.attributes.artwork && !this.chrome.hideUserInfo) { + document.documentElement.style + .setProperty('--cvar-userprofileimg', `url("${this.getMediaItemArtwork(this.chrome.userinfo.attributes.artwork.url)}")`); + } } catch (err) { } @@ -1421,15 +1426,15 @@ const app = new Vue({ const datetime = new Date(seconds * 1000) if (format === "long") { - const d = Math.floor(seconds / (3600*24)); - const h = Math.floor(seconds % (3600*24) / 3600); + const d = Math.floor(seconds / (3600 * 24)); + const h = Math.floor(seconds % (3600 * 24) / 3600); const m = Math.floor(seconds % 3600 / 60); const s = Math.floor(seconds % 60); - const dDisplay = d > 0 ? `${d} ${app.getLz("term.time.day", {"count": d})}, ` : ""; - const hDisplay = h > 0 ? `${h} ${app.getLz("term.time.hour", {"count": h})}, ` : ""; - const mDisplay = m > 0 ? `${m} ${app.getLz("term.time.minute", {"count": m})}, ` : ""; - const sDisplay = s > 0 ? `${s} ${app.getLz("term.time.second", {"count": s})}` : ""; + const dDisplay = d > 0 ? `${d} ${app.getLz("term.time.day", { "count": d })}, ` : ""; + const hDisplay = h > 0 ? `${h} ${app.getLz("term.time.hour", { "count": h })}, ` : ""; + const mDisplay = m > 0 ? `${m} ${app.getLz("term.time.minute", { "count": m })}, ` : ""; + const sDisplay = s > 0 ? `${s} ${app.getLz("term.time.second", { "count": s })}` : ""; return dDisplay + hDisplay + mDisplay + sDisplay; } @@ -1486,7 +1491,7 @@ const app = new Vue({ let page = hash[0] let id = hash[1] let isLibrary = hash[2] ?? false - if(page == "plugin") { + if (page == "plugin") { this.pluginPages.page = "plugin." + id this.page = "plugin-renderer" return @@ -1555,7 +1560,8 @@ const app = new Vue({ if (kind.includes("album")) { params["include[albums]"] = "artists" params["fields[artists]"] = "name,url" - params["fields[albums]"] = "artistName,artistUrl,artwork,contentRating,editorialArtwork,editorialVideo,name,playParams,releaseDate,url,copyright" + params["omit[resource]"] = "autos" + params["fields[albums]"] = "artistName,artistUrl,artwork,contentRating,editorialArtwork,editorialNotes,editorialVideo,name,playParams,releaseDate,url,copyright" } if (this.cfg.advanced.experiments.includes('inline-playlists')) { @@ -2323,8 +2329,8 @@ const app = new Vue({ getTotalTime() { try { if (app.showingPlaylist.relationships.tracks.data.length === 0) return "" - const timeInSeconds = Math.round([].concat(...app.showingPlaylist.relationships.tracks.data).reduce((a, {attributes: {durationInMillis}}) => a + durationInMillis, 0) / 1000); - return `${app.showingPlaylist.relationships.tracks.data.length} ${app.getLz("term.track", {"count": app.showingPlaylist.relationships.tracks.data.length})}, ${app.convertTime(timeInSeconds, 'long')}` + const timeInSeconds = Math.round([].concat(...app.showingPlaylist.relationships.tracks.data).reduce((a, { attributes: { durationInMillis } }) => a + durationInMillis, 0) / 1000); + return `${app.showingPlaylist.relationships.tracks.data.length} ${app.getLz("term.track", { "count": app.showingPlaylist.relationships.tracks.data.length })}, ${app.convertTime(timeInSeconds, 'long')}` } catch (err) { return "" } @@ -2598,33 +2604,33 @@ const app = new Vue({ req.open('GET', url, true); req.setRequestHeader("authority", "apic-desktop.musixmatch.com"); req.onload = function () { - try{ - let jsonResponse = JSON.parse(this.responseText); - let status2 = jsonResponse["message"]["header"]["status_code"]; - if (status2 == 200) { - let token = jsonResponse["message"]["body"]["user_token"] ?? ''; - if (token != "" && token != "UpgradeOnlyUpgradeOnlyUpgradeOnlyUpgradeOnly") { - console.log('200 token', mode); - // token good - app.mxmtoken = token; + try { + let jsonResponse = JSON.parse(this.responseText); + let status2 = jsonResponse["message"]["header"]["status_code"]; + if (status2 == 200) { + let token = jsonResponse["message"]["body"]["user_token"] ?? ''; + if (token != "" && token != "UpgradeOnlyUpgradeOnlyUpgradeOnlyUpgradeOnly") { + console.log('200 token', mode); + // token good + app.mxmtoken = token; - if (mode == 1) { - getMXMSubs(track, artist, app.mxmtoken, lang, time, id); + if (mode == 1) { + getMXMSubs(track, artist, app.mxmtoken, lang, time, id); + } else { + getMXMTrans(songid, lang, app.mxmtoken); + } } else { - getMXMTrans(songid, lang, app.mxmtoken); + console.log('fake 200 token'); + getToken(mode, track, artist, songid, lang, time) } } else { - console.log('fake 200 token'); + // console.log('token 4xx'); getToken(mode, track, artist, songid, lang, time) } - } else { - // console.log('token 4xx'); - getToken(mode, track, artist, songid, lang, time) + } catch (e) { + console.log('error'); + app.loadAMLyrics(); } - }catch(e){ - console.log('error'); - app.loadAMLyrics(); - } }; req.onerror = function () { console.log('error'); @@ -2645,85 +2651,86 @@ const app = new Vue({ req.open('GET', url, true); req.setRequestHeader("authority", "apic-desktop.musixmatch.com"); req.onload = function () { - try{ - let jsonResponse = JSON.parse(this.responseText); - console.log(jsonResponse); - let status1 = jsonResponse["message"]["header"]["status_code"]; + try { + let jsonResponse = JSON.parse(this.responseText); + console.log(jsonResponse); + let status1 = jsonResponse["message"]["header"]["status_code"]; - if (status1 == 200) { - let id = ''; - try { - if (jsonResponse["message"]["body"]["macro_calls"]["matcher.track.get"]["message"]["header"]["status_code"] == 200 && jsonResponse["message"]["body"]["macro_calls"]["track.subtitles.get"]["message"]["header"]["status_code"] == 200) { - id = jsonResponse["message"]["body"]["macro_calls"]["matcher.track.get"]["message"]["body"]["track"]["track_id"] ?? ''; - lrcfile = jsonResponse["message"]["body"]["macro_calls"]["track.subtitles.get"]["message"]["body"]["subtitle_list"][0]["subtitle"]["subtitle_body"]; + if (status1 == 200) { + let id = ''; + try { + if (jsonResponse["message"]["body"]["macro_calls"]["matcher.track.get"]["message"]["header"]["status_code"] == 200 && jsonResponse["message"]["body"]["macro_calls"]["track.subtitles.get"]["message"]["header"]["status_code"] == 200) { + id = jsonResponse["message"]["body"]["macro_calls"]["matcher.track.get"]["message"]["body"]["track"]["track_id"] ?? ''; + lrcfile = jsonResponse["message"]["body"]["macro_calls"]["track.subtitles.get"]["message"]["body"]["subtitle_list"][0]["subtitle"]["subtitle_body"]; - try { - let lrcrich = jsonResponse["message"]["body"]["macro_calls"]["track.richsync.get"]["message"]["body"]["richsync"]["richsync_body"]; - richsync = JSON.parse(lrcrich); - app.richlyrics = richsync; - } catch (_) { - } - } - - if (lrcfile == "") { - app.loadAMLyrics() - } else { - if (richsync == [] || richsync.length == 0) { - console.log("ok"); - // process lrcfile to json here - app.lyricsMediaItem = lrcfile - let u = app.lyricsMediaItem.split(/[\r\n]/); - let preLrc = [] - for (var i = u.length - 1; i >= 0; i--) { - let xline = (/(\[[0-9.:\[\]]*\])+(.*)/).exec(u[i]) - let end = (preLrc.length > 0) ? ((preLrc[preLrc.length - 1].startTime) ?? 99999) : 99999 - preLrc.push({ - startTime: app.toMS(xline[1].substring(1, xline[1].length - 2)) ?? 0, - endTime: end, - line: xline[2], - translation: '' - }) + try { + let lrcrich = jsonResponse["message"]["body"]["macro_calls"]["track.richsync.get"]["message"]["body"]["richsync"]["richsync_body"]; + richsync = JSON.parse(lrcrich); + app.richlyrics = richsync; + } catch (_) { } - if (preLrc.length > 0) - preLrc.push({ - startTime: 0, - endTime: preLrc[preLrc.length - 1].startTime, - line: "lrcInstrumental", - translation: '' - }); - app.lyrics = preLrc.reverse(); - } else { - let preLrc = richsync.map(function (item) { - return { - startTime: item.ts, - endTime: item.te, - line: item.x, - translation: '' - } - }) - if (preLrc.length > 0) - preLrc.unshift({ - startTime: 0, - endTime: preLrc[0].startTime, - line: "lrcInstrumental", - translation: '' - }); - app.lyrics = preLrc; } - if (lrcfile != null && lrcfile != '' && lang != "disabled") { - // load translation - getMXMTrans(id, lang, token); - } else { + + if (lrcfile == "") { app.loadAMLyrics() + } else { + if (richsync == [] || richsync.length == 0) { + console.log("ok"); + // process lrcfile to json here + app.lyricsMediaItem = lrcfile + let u = app.lyricsMediaItem.split(/[\r\n]/); + let preLrc = [] + for (var i = u.length - 1; i >= 0; i--) { + let xline = (/(\[[0-9.:\[\]]*\])+(.*)/).exec(u[i]) + let end = (preLrc.length > 0) ? ((preLrc[preLrc.length - 1].startTime) ?? 99999) : 99999 + preLrc.push({ + startTime: app.toMS(xline[1].substring(1, xline[1].length - 2)) ?? 0, + endTime: end, + line: xline[2], + translation: '' + }) + } + if (preLrc.length > 0) + preLrc.push({ + startTime: 0, + endTime: preLrc[preLrc.length - 1].startTime, + line: "lrcInstrumental", + translation: '' + }); + app.lyrics = preLrc.reverse(); + } else { + let preLrc = richsync.map(function (item) { + return { + startTime: item.ts, + endTime: item.te, + line: item.x, + translation: '' + } + }) + if (preLrc.length > 0) + preLrc.unshift({ + startTime: 0, + endTime: preLrc[0].startTime, + line: "lrcInstrumental", + translation: '' + }); + app.lyrics = preLrc; + } + if (lrcfile != null && lrcfile != '' && lang != "disabled") { + // load translation + getMXMTrans(id, lang, token); + } else { + app.loadAMLyrics() + } } + } catch (e) { + console.log(e); + app.loadAMLyrics() } - } catch (e) { - console.log(e); - app.loadAMLyrics() + } else { //4xx rejected + getToken(1, track, artist, '', lang, time); } - } else { //4xx rejected - getToken(1, track, artist, '', lang, time); - }}catch(e){ + } catch (e) { console.log(e); app.loadAMLyrics() } @@ -2744,33 +2751,34 @@ const app = new Vue({ req2.open('GET', url2, true); req2.setRequestHeader("authority", "apic-desktop.musixmatch.com"); req2.onload = function () { - try{ - let jsonResponse2 = JSON.parse(this.responseText); - console.log(jsonResponse2); - let status2 = jsonResponse2["message"]["header"]["status_code"]; - if (status2 == 200) { - try { - let preTrans = [] - let u = app.lyrics; - let translation_list = jsonResponse2["message"]["body"]["translations_list"]; - if (translation_list.length > 0) { - for (var i = 0; i < u.length - 1; i++) { - preTrans[i] = "" - for (var trans_line of translation_list) { - if (u[i].line == " " + trans_line["translation"]["matched_line"] || u[i].line == trans_line["translation"]["matched_line"]) { - u[i].translation = trans_line["translation"]["description"]; - break; + try { + let jsonResponse2 = JSON.parse(this.responseText); + console.log(jsonResponse2); + let status2 = jsonResponse2["message"]["header"]["status_code"]; + if (status2 == 200) { + try { + let preTrans = [] + let u = app.lyrics; + let translation_list = jsonResponse2["message"]["body"]["translations_list"]; + if (translation_list.length > 0) { + for (var i = 0; i < u.length - 1; i++) { + preTrans[i] = "" + for (var trans_line of translation_list) { + if (u[i].line == " " + trans_line["translation"]["matched_line"] || u[i].line == trans_line["translation"]["matched_line"]) { + u[i].translation = trans_line["translation"]["description"]; + break; + } } } + app.lyrics = u; } - app.lyrics = u; + } catch (e) { + /// not found trans -> ignore } - } catch (e) { - /// not found trans -> ignore + } else { //4xx rejected + getToken(2, '', '', id, lang, ''); } - } else { //4xx rejected - getToken(2, '', '', id, lang, ''); - }}catch(e){} + } catch (e) { } } req2.send(); } @@ -3282,6 +3290,10 @@ const app = new Vue({ if (typeof url == "undefined" || url == "") { return "https://beta.music.apple.com/assets/product/MissingArtworkMusic.svg" } + height = parseInt(height * window.devicePixelRatio) + if(width) { + width = parseInt(width * window.devicePixelRatio) + } let newurl = `${url.replace('{w}', width ?? height).replace('{h}', height).replace('{f}', "webp").replace('{c}', ((width === 900) ? "sr" : "cc"))}`; if (newurl.includes("900x516")) { @@ -3731,7 +3743,7 @@ const app = new Vue({ } } - if(app.mk.nowPlayingItem._container["attributes"] && app.mk.nowPlayingItem._container.name != "station") { + if (app.mk.nowPlayingItem._container["attributes"] && app.mk.nowPlayingItem._container.name != "station") { menus.normal.items.find(x => x.id == "showInMusic").hidden = false } diff --git a/src/renderer/style.less b/src/renderer/style.less index 41da142e..8df6b526 100644 --- a/src/renderer/style.less +++ b/src/renderer/style.less @@ -142,8 +142,8 @@ body.notransparency::before { } #app { - --color1: rgba(30, 30, 30, 30%); - --color2: rgba(15, 15, 15, 30%); + --color1: rgba(15, 15, 15, 30%); + --color2: rgba(30, 30, 30, 50%); --bgColor: transparent; --bgWidth: 0px; --bgHeight: 0px; @@ -799,25 +799,28 @@ input[type=range].web-slider::-webkit-slider-runnable-track { opacity: 0.6; } } + } .app-sidebar-item:hover { - border: 1px solid rgb(200 200 200 / 5%); - background: rgb(200 200 200 / 15%); + border: 1px solid rgb(200 200 200 / 0%); + background: rgb(180 180 180 / 15%); + // cursor: pointer; } .app-sidebar-item:active { - border: 1px solid rgb(200 200 200 / 5%); - background: rgb(200 200 200 / 15%); - transform: scale(0.98); + border: 1px solid rgb(200 200 200 / 0%); + background: rgb(150 150 150 / 15%); + // transform: scale(0.98); transition: transform 0s; } .app-sidebar-item.active { - border: 1px solid rgb(200 200 200 / 5%); + border: 1px solid rgb(200 200 200 / 0%); background: rgb(200 200 200 / 15%); transform: scale(1); transition: transform 0s; + cursor: default; } .app-sidebar-item.active::after { @@ -830,6 +833,17 @@ input[type=range].web-slider::-webkit-slider-runnable-track { border-radius: 10px; left: 0px; background: var(--keyColor); + animation: expandIndicator .2s cubic-bezier(0.25, 1, 0.5, 1); + + @keyframes expandIndicator { + 0% { + transform: scaleY(0); + } + + 100% { + transform: scaleY(1); + } + } } .app-chrome { @@ -867,7 +881,7 @@ input[type=range].web-slider::-webkit-slider-runnable-track { } .app-chrome .app-chrome--center { - width: 40%; + //width: 40%; } .app-chrome .app-chrome--right { diff --git a/src/renderer/views/components/artist-chip.ejs b/src/renderer/views/components/artist-chip.ejs index d0be7f95..12453996 100644 --- a/src/renderer/views/components/artist-chip.ejs +++ b/src/renderer/views/components/artist-chip.ejs @@ -29,7 +29,7 @@ template: '#artist-chip', async mounted() { let artistId = this.item.id - if(typeof this.item.relationships.catalog == "object") { + if(typeof this.item.relationships == "object") { artistId = this.item.relationships.catalog.data[0].id } app.mk.api.v3.music(`/v1/catalog/${app.mk.storefrontId}/artists/${artistId}`).then(response => { diff --git a/src/renderer/views/components/castmenu.ejs b/src/renderer/views/components/castmenu.ejs index ce3c554d..8fa0a61e 100644 --- a/src/renderer/views/components/castmenu.ejs +++ b/src/renderer/views/components/castmenu.ejs @@ -1,5 +1,5 @@ @@ -888,7 +861,7 @@ } }, reinstallWidevineCDM () { - bootbox.confirm("Are you sure you want to reinstall Widevine?", (ok)=>{ + bootbox.confirm(app.getLz("settings.option.experimental.reinstallwidevine.confirm"), (ok)=>{ if(ok) { ipcRenderer.invoke("reinstall-widevine-cdm"); } @@ -930,14 +903,29 @@ }, toggleAudioContext: function () { if (app.cfg.advanced.AudioContext === true) { - CiderAudio.init(); - if (app.cfg.audio.normalization === true) { - CiderAudio.normalizerOn() - } - if (app.cfg.audio.spatial === true) { - CiderAudio.spatialOn() - CiderAudio.hierarchical_loading(); + if (navigator.hardwareConcurrency < 6) { + bootbox.confirm(app.getLz("settings.warn.audio.enableAdvancedFunctionality.lowcores"), function (result) { + if (result) { + CiderAudio.init(); + if (app.cfg.audio.normalization === true) { + CiderAudio.normalizerOn() + } + if (app.cfg.audio.spatial === true) { + CiderAudio.spatialOn() + CiderAudio.hierarchical_loading(); + } + }}) } + else { + CiderAudio.init(); + if (app.cfg.audio.normalization === true) { + CiderAudio.normalizerOn() + } + if (app.cfg.audio.spatial === true) { + CiderAudio.spatialOn() + CiderAudio.hierarchical_loading(); + } + } } else { CiderAudio.off(); } diff --git a/src/web-remote/views/components/mediaitem-artwork.ejs b/src/web-remote/views/components/mediaitem-artwork.ejs index 55617ebb..faf19dd4 100644 --- a/src/web-remote/views/components/mediaitem-artwork.ejs +++ b/src/web-remote/views/components/mediaitem-artwork.ejs @@ -89,6 +89,10 @@ if (typeof url == "undefined" || url == "") { return "https://beta.music.apple.com/assets/product/MissingArtworkMusic.svg" } + height = parseInt(height * window.devicePixelRatio) + if(width) { + width = parseInt(width * window.devicePixelRatio) + } let newurl = `${url.replace('{w}', width ?? height).replace('{h}', height).replace('{f}', "webp").replace('{c}', ((width === 900) ? "sr" : "cc"))}`; if (newurl.includes("900x516")) {