Merge branch 'develop' of https://github.com/Apple-Music-Electron/Cider into develop

This commit is contained in:
cryptofyre 2022-02-13 10:10:38 -06:00
commit 3526d5326e
14 changed files with 190 additions and 57 deletions

View file

@ -29,7 +29,7 @@ jobs:
runs-on: macos-11 runs-on: macos-11
permissions: permissions:
actions: read actions: read
contents: read contents: write
security-events: write security-events: write
strategy: strategy:
@ -100,6 +100,25 @@ jobs:
- name: Add license to dmg - name: Add license to dmg
run: | run: |
npx dmg-license resources/license.json dist/*.dmg npx dmg-license resources/license.json dist/*.dmg
- name: Import
uses: apple-actions/import-codesign-certs@v1
with:
p12-file-base64: ${{ secrets.CSC_LINK }}
p12-password: ${{ secrets.CSC_KEY_PASSWORD }}
- name: Create PKG manually
env:
CSC_LINK: ${{ secrets.CSC_LINK }}
CSC_KEY_PASSWORD: ${{ secrets.CSC_KEY_PASSWORD }}
APPLEID: ${{ secrets.APPLEID }}
APPLEIDPASS: ${{ secrets.APPLEIDPASS }}
run: |
pkgbuild --component dist/mac-universal/Cider.app --install-location /Applications dist/Cider.pkg --sign ${{ secrets.PSC_NAME }}
xcrun altool --notarize-app --primary-bundle-id com.ciderapp.cider -f dist/Cider.pkg --username ${{ secrets.APPLEID }} --password ${{ secrets.APPLEIDPASS }}
sleep 5m
xcrun stapler staple dist/Cider.pkg || true
mv dist/*.dmg dist/Cider.dmg
- name: Upload a Build Artifact - name: Upload a Build Artifact
uses: actions/upload-artifact@v2.2.3 uses: actions/upload-artifact@v2.2.3
@ -107,5 +126,20 @@ jobs:
# Artifact name # Artifact name
name: macOS name: macOS
# A file, directory or wildcard pattern that describes what to upload # A file, directory or wildcard pattern that describes what to upload
path: dist/*.dmg path: |
dist/*.dmg
dist/*.pkg
# The desired behavior if no files are found using the provided path. # The desired behavior if no files are found using the provided path.
- name: Release
uses: softprops/action-gh-release@v1
with:
files: |
dist/Cider.dmg
dist/Cider.pkg
body: signed Develop MacOS Builds
name: macOS builds
tag_name: macos-beta
prerelease : true
generate_release_notes: true
append_body : false
fail_on_unmatched_files: false

View file

@ -4,7 +4,7 @@
"i18n.languageName": "Deutsch", // name of language in native language "i18n.languageName": "Deutsch", // name of language in native language
"i18n.languageNameEnglish": "German", // name of language in English "i18n.languageNameEnglish": "German", // name of language in English
"i18n.category": "main", // main = real language, fun = fun community languages "i18n.category": "main", // main = real language, fun = fun community languages
"i18n.authors": "@motz0815", // Authors, if you contribute to this file feel free to add your name seperated with a space "i18n.authors": "@motz0815 @n0chteil", // Authors, if you contribute to this file feel free to add your name seperated with a space
// App info // App info
"app.name": "Cider", "app.name": "Cider",
@ -46,7 +46,12 @@
"term.podcasts": "Podcasts", "term.podcasts": "Podcasts",
"term.playlists": "Playlists", "term.playlists": "Playlists",
"term.playlist": "Playlist", "term.playlist": "Playlist",
"term.play": "Play", "term.newPlaylist": "Neue Playlist",
"term.newPlaylistFolder": "Neuer Playlist-Ordner",
"term.createNewPlaylist": "Neue Playlist erstellen",
"term.createNewPlaylistFolder": "Neuen Playlist-Ordner erstellen",
"term.deletePlaylist": "Bist du sicher, dass du diese Playlist löschen willst?",
"term.play": "Wiedergabe",
"term.pause": "Pause", "term.pause": "Pause",
"term.previous": "Zurück", "term.previous": "Zurück",
"term.next": "Weiter", "term.next": "Weiter",
@ -56,6 +61,7 @@
"term.mute": "Stummschalten", "term.mute": "Stummschalten",
"term.unmute": "Stummschaltung aufheben", "term.unmute": "Stummschaltung aufheben",
"term.share": "Teilen", "term.share": "Teilen",
"term.share.success": "In die Zwischenablage kopiert",
"term.settings": "Einstellungen", "term.settings": "Einstellungen",
"term.seeAll": "Alle Sehen", "term.seeAll": "Alle Sehen",
"term.sortBy": "Sortieren nach", "term.sortBy": "Sortieren nach",
@ -65,6 +71,7 @@
"term.sortBy.genre": "Genre", "term.sortBy.genre": "Genre",
"term.sortBy.releaseDate": "Veröffentlichungsdatum", "term.sortBy.releaseDate": "Veröffentlichungsdatum",
"term.sortBy.duration": "Länge", "term.sortBy.duration": "Länge",
"term.sortBy.dateAdded": "Hinzugefügt am",
"term.sortOrder": "A-Z", "term.sortOrder": "A-Z",
"term.sortOrder.ascending": "Aufsteigend", "term.sortOrder.ascending": "Aufsteigend",
"term.sortOrder.descending": "Absteigend", "term.sortOrder.descending": "Absteigend",
@ -82,12 +89,12 @@
"term.connecting": "Verbindet", "term.connecting": "Verbindet",
"term.disconnect": "Trennen", "term.disconnect": "Trennen",
"term.authed": "Autorisiert", "term.authed": "Autorisiert",
"term.confirm": "Bestätigen ?", "term.confirm": "Bestätigen?",
"term.more": "Mehr", "term.more": "Mehr",
"term.less": "Weniger", "term.less": "Weniger",
"term.showMore": "Zeige mehr", "term.showMore": "Mehr anzeigen",
"term.showLess": "Zeige weniger", "term.showLess": "Weniger anzeigen",
"term.topSongs" : "Top Songs", "term.topSongs": "Top Songs",
"term.latestReleases": "Letzte Veröffentlichungen", "term.latestReleases": "Letzte Veröffentlichungen",
"term.time.added": "Hinzugefügt", "term.time.added": "Hinzugefügt",
"term.time.released": "Veröffentlicht", "term.time.released": "Veröffentlicht",
@ -100,24 +107,48 @@
"term.time.second": "Sekunde", "term.time.second": "Sekunde",
"term.fullscreenView": "Vollbildansicht", "term.fullscreenView": "Vollbildansicht",
"term.defaultView": "Normale Ansicht", "term.defaultView": "Normale Ansicht",
"term.audioSettings": "Audio-Einstellungen",
"term.spacializedAudioSetting": "Räumliches Audio", "term.spacializedAudioSetting": "Räumliches Audio",
"term.clearAll": "Alle löschen", "term.clearAll": "Alle löschen",
"term.recentStations": "Letzte Stationen", "term.recentStations": "Letzte Sender",
"term.language": "Sprache", "term.language": "Sprache",
"term.funLanguages": "Spaß", "term.funLanguages": "Spaß",
"term.noLyrics": "Lädt... / Liedtext nicht gefunden./ Instrumental.", "term.noLyrics": "Lädt... / Lyrik nicht gefunden./ Instrumental.",
"term.copyright": "Copyright", "term.copyright": "Copyright",
"term.rightsReserved": "All Rights Reserved.", "term.rightsReserved": "Alle Rechte vorbehalten.",
"term.sponsor": "Unterstütze dieses Projekt", "term.sponsor": "Unterstütze dieses Projekt",
"term.ciderTeam": "Cider Team", "term.ciderTeam": "Cider Team",
"term.developer": "Entwickler", "term.developer": "Entwickler",
"term.socialTeam": "Social Team", "term.socialTeam": "Social Team",
"term.socials": "Soziale Medien",
"term.contributors": "Mithelfer", "term.contributors": "Mithelfer",
"term.equalizer": "Equalizer", "term.equalizer": "Equalizer",
"term.reset": "Zurücksetzen", "term.reset": "Zurücksetzen",
"term.tracks": "Lieder", // Assume x amount of tracks. e.g. 50 tracks "term.tracks": "Lieder", // Assume x amount of tracks. e.g. 50 tracks
"term.videos": "Videos", "term.videos": "Videos",
"term.menu": "Menü", "term.menu": "Menü",
"term.check": "Nach Updates suchen",
"term.aboutArtist": "Über {{artistName}}", // e.g. 'About Doja Cat'
"term.topResult": "Bestes Ergebnis", // Search Results
"term.sharedPlaylists": "Geteilte Playlists", // Search Results
"term.people": "Personen", // Search Results
"term.newpreset.name": "Neuer EQ-Preset Name", // Equalizer Preset
"term.addedpreset": "Preset erstellt",
"term.deletepreset.warn": "Bist du sicher, dass du dieses Preset löschen willst?",
"term.deletedpreset": "Preset gelöscht",
"term.defaultPresets": "Standard-Presets",
"term.userPresets": "Nutzer-Presets",
"term.requestError": "Es gab ein Problem bei der Anfrage.",
"term.song.link.generate": "song.link URL wird gesucht...",
"term.musicVideos": "Musikvideos", // Search page friendlyTypes
"term.stations": "Radiosender",
"term.curators": "Kuratoren",
"term.appleCurators": "Apple-Kuratoren",
"term.radioShows": "Radiosendungen",
"term.recordLabels": "Plattenfirma",
"term.videoExtras": "Video-Extras",
"term.top": "Beste",
"term.version": "Version",
// Home // Home
"home.title": "Home", "home.title": "Home",
@ -131,7 +162,7 @@
// Errors // Errors
"error.appleMusicSubRequired": "Apple Music benötigt ein Abonnement.", "error.appleMusicSubRequired": "Apple Music benötigt ein Abonnement.",
"error.connectionError": "Es ist ein Fehler aufgetreten, während sich mit Apple Music verbunden wurde.", "error.connectionError": "Es gab ein Problem beim Verbinden mit Apple Music.",
"error.noResults": "Keine Ergebnisse.", "error.noResults": "Keine Ergebnisse.",
"error.noResults.description": "Versuche einen anderen Suchbegriff.", "error.noResults.description": "Versuche einen anderen Suchbegriff.",
@ -157,6 +188,7 @@
"action.removeFromQueue": "Aus Warteschlange entfernen", "action.removeFromQueue": "Aus Warteschlange entfernen",
"action.removeFromQueue.success": "Aus Warteschlange entfernt", "action.removeFromQueue.success": "Aus Warteschlange entfernt",
"action.removeFromQueue.error": "Fehler beim Entfernen aus der Warteschlange", "action.removeFromQueue.error": "Fehler beim Entfernen aus der Warteschlange",
"action.createPlaylist": "Neue Playlist erstellen",
"action.addToPlaylist": "Zur Playlist hinzufügen", "action.addToPlaylist": "Zur Playlist hinzufügen",
"action.removeFromPlaylist": "Aus Playlist entfernen", "action.removeFromPlaylist": "Aus Playlist entfernen",
"action.addToFavorites": "Zu Favoriten hinzufügen", "action.addToFavorites": "Zu Favoriten hinzufügen",
@ -184,7 +216,14 @@
"action.removeTracks": "Entferne ${self.selectedItems.length} Lieder aus der Warteschlange", "action.removeTracks": "Entferne ${self.selectedItems.length} Lieder aus der Warteschlange",
"action.import": "Importieren", "action.import": "Importieren",
"action.export": "Exportieren", "action.export": "Exportieren",
"action.showAlbum": "Zeige ganzes Album", "action.showAlbum": "Ganzes Album anzeigen",
"action.tray.minimize": "Zu Tray minimieren",
"action.tray.quit": "Beenden",
"action.tray.show": "{appName} anzeigen",
"action.update": "Update",
"action.copy": "Kopieren",
"action.newpreset": "Neues Preset", // Equalizer Preset
"action.deletepreset": "Preset löschen",
// Settings - General // Settings - General
"settings.header.general": "Allgemein", "settings.header.general": "Allgemein",
@ -197,21 +236,37 @@
"settings.option.general.language.unsorted": "Unsortiert", "settings.option.general.language.unsorted": "Unsortiert",
// Update Cider // Update Cider
"settings.option.general.updateCider": "Cider updaten", // Button. Refer to term.check for the check button
"settings.option.general.updateCider.branch": "Update-Branch", // Dropdown
"settings.option.general.updateCider.branch.description": "Der Branch, von welchem Cider geupdatet werden soll",
"settings.option.general.updateCider.branch.main": "Stabil",
"settings.option.general.updateCider.branch.develop": "Entwicklung",
// Settings - Audio // Settings - Audio
"settings.header.audio": "Audio", "settings.header.audio": "Audio",
"settings.header.audio.description": "Passe die Audio-Einstellungen für Cider an.", "settings.header.audio.description": "Passe die Audio-Einstellungen für Cider an.",
"settings.option.audio.quality": "Audioqualität", // Dropdown "settings.option.audio.quality": "Audioqualität", // Dropdown
"settings.header.audio.quality.hireslossless": "Hi-Res Lossless",
"settings.header.audio.quality.hireslossless.description": "bis zu 24-bit/192 kHz",
"settings.header.audio.quality.lossless": "Lossless",
"settings.header.audio.quality.lossless.description": "bis zu 24-bit/48 kHz",
"settings.header.audio.quality.high": "Hoch", "settings.header.audio.quality.high": "Hoch",
"settings.header.audio.quality.low": "Niedrig", "settings.header.audio.quality.standard": "Standard",
"settings.header.audio.quality.auto": "Auto",
"settings.option.audio.seamlessTransition": "Nahtloser Audioübergang", // Toggle "settings.option.audio.seamlessTransition": "Nahtloser Audioübergang", // Toggle
"settings.option.audio.enableAdvancedFunctionality": "Akiviere erweiterte Funktionalität", // Toggle "settings.option.audio.enableAdvancedFunctionality": "Akiviere erweiterte Funktionalität", // Toggle
"settings.option.audio.enableAdvancedFunctionality.description": "Das Aktivieren der erweiterten Funktionalität ermöglicht spezielle Features wie Audio-Normalisierung, Equalizer und Visualizer, jedoch könnte dies auf einigen Systemen zu Aussetzern in der Musik führen.", "settings.option.audio.enableAdvancedFunctionality.description": "Das Aktivieren der erweiterten Funktionalität ermöglicht spezielle Features wie Audio-Normalisierung, Equalizer und Visualizer, jedoch könnte dies auf einigen Systemen zu Aussetzern in der Musik führen.",
"settings.option.audio.enableAdvancedFunctionality.ciderPPE": "Cider Adrenaline Processor™", // Toggle
"settings.option.audio.enableAdvancedFunctionality.ciderPPE.description": "Psychoakustische Verbesserungen die die Musik lebensechter erscheinen lassen | Designed by Maikiwi.",
"settings.warn.audio.enableAdvancedFunctionality.ciderPPE.compatibility": "CAP ist nicht mit räumlichem Audio kompatibel. Bitte deaktiviere räumliches Audio zuerst.",
"settings.option.audio.enableAdvancedFunctionality.ciderPPEStrength": "CAP-Stärke", // Toggle
"settings.option.audio.enableAdvancedFunctionality.ciderPPEStrength.description": "Ändert die Stärke der Nachbearbeitung. (Aggressiv könnte zu ungewünschten Änderungen führen)",
"settings.option.audio.enableAdvancedFunctionality.ciderPPEStrength.standard": "Standard",
"settings.option.audio.enableAdvancedFunctionality.ciderPPEStrength.aggressive": "Aggressiv",
"settings.option.audio.enableAdvancedFunctionality.audioNormalization": "Audio-Normalisierung", // Toggle "settings.option.audio.enableAdvancedFunctionality.audioNormalization": "Audio-Normalisierung", // Toggle
"settings.option.audio.enableAdvancedFunctionality.audioNormalization.description": "Normalisiert die Lautstärke aller Lieder, um die Hörerfahrung einheitlicher zu machen.", "settings.option.audio.enableAdvancedFunctionality.audioNormalization.description": "Normalisiert die Lautstärke aller Lieder, um die Hörerfahrung einheitlicher zu machen.",
"settings.option.audio.enableAdvancedFunctionality.audioSpatialization": "Räumliches Audio", // Toggle "settings.option.audio.enableAdvancedFunctionality.audioSpatialization": "Räumliches Audio", // Toggle
"settings.option.audio.enableAdvancedFunctionality.audioSpatialization.description": "Macht die Musik räumlicher (3D-Effekt) (Beachte: Dies ist kein Dolby Atmos)", "settings.option.audio.enableAdvancedFunctionality.audioSpatialization.description": "Macht die Musik räumlicher (3D-Effekt) (Beachte: Dies ist kein Dolby Atmos)",
"settings.warn.audio.enableAdvancedFunctionality.audioSpatialization.compatibility": "Räumliches Audio ist nicht mit CAP kompatibel. Bitte deaktiviere CAP zuerst.",
// Settings - Visual // Settings - Visual
"settings.header.visual": "Visuell", "settings.header.visual": "Visuell",
@ -235,8 +290,15 @@
"settings.option.visual.hardwareAcceleration.description": "Erfordert Neustart der Anwendung", "settings.option.visual.hardwareAcceleration.description": "Erfordert Neustart der Anwendung",
"settings.header.visual.hardwareAcceleration.default": "Normal", "settings.header.visual.hardwareAcceleration.default": "Normal",
"settings.header.visual.hardwareAcceleration.webGPU": "WebGPU", "settings.header.visual.hardwareAcceleration.webGPU": "WebGPU",
"settings.header.visual.theme": "Theme",
"settings.option.visual.theme.github.download": "Von GitHub URL installieren",
"settings.prompt.visual.theme.github.URL": "Gib die URL des Themes ein, welches du installieren möchtest",
"settings.notyf.visual.theme.install.success": "Theme erfolgreich installiert",
"settings.notyf.visual.theme.install.error": "Theme-Installation fehlgeschlagen",
// Settings - Visual - Theme name // Settings - Visual - Theme name
"settings.option.visual.theme.default": "Cider",
"settings.option.visual.theme.dark": "Dunkel",
// Refer to term.disabled for the disabled option // Refer to term.disabled for the disabled option
"settings.option.visual.showPersonalInfo": "Persönliche Daten anzeigen", // Toggle "settings.option.visual.showPersonalInfo": "Persönliche Daten anzeigen", // Toggle
@ -255,8 +317,8 @@
"settings.option.connectivity.discordRPC": "Discord Rich Presence", // Dropdown "settings.option.connectivity.discordRPC": "Discord Rich Presence", // Dropdown
"settings.option.connectivity.playbackNotifications": "Wiedergabe-Benachrichtigungen", // Toggle "settings.option.connectivity.playbackNotifications": "Wiedergabe-Benachrichtigungen", // Toggle
// Refer to term.disabled for the disabled option // Refer to term.disabled for the disabled option
"settings.header.connectivity.discordRPC.cider": "Zeige als 'Cider'", "settings.header.connectivity.discordRPC.cider": "'Cider' anzeigen",
"settings.header.connectivity.discordRPC.appleMusic": "Zeige als 'Apple Music'", "settings.header.connectivity.discordRPC.appleMusic": "'Apple Music' anzeigen",
"settings.option.connectivity.discordRPC.clearOnPause": "Leere Discord Rich Presence wenn pausiert", // Toggle "settings.option.connectivity.discordRPC.clearOnPause": "Leere Discord Rich Presence wenn pausiert", // Toggle
"settings.option.connectivity.lastfmScrobble": "LastFM Scrobbling", // Option to Connect "settings.option.connectivity.lastfmScrobble": "LastFM Scrobbling", // Option to Connect
"settings.option.connectivity.lastfmScrobble.delay": "LastFM Scrobble Delay (%)", "settings.option.connectivity.lastfmScrobble.delay": "LastFM Scrobble Delay (%)",
@ -269,34 +331,34 @@
"settings.header.experimental": "Experimentell", "settings.header.experimental": "Experimentell",
"settings.header.experimental.description": "Passe die experimentellen Einstellungen für Cider an.", "settings.header.experimental.description": "Passe die experimentellen Einstellungen für Cider an.",
"settings.option.experimental.compactUI": "Kompaktes UI", // Toggle "settings.option.experimental.compactUI": "Kompaktes UI", // Toggle
"settings.option.experimental.closeButtonBehaviour": "Verhalten der Schließtaste", "settings.option.experimental.close_button_hide": "Schließtaste soll die App verbergen",
"settings.option.experimental.closeButtonBehaviour.quit": "Cider Schließen", "settings.option.experimental.copy_log": "Kopiere Logs in die Zwischenablage",
"settings.option.experimental.closeButtonBehaviour.minimizeTaskbar": "In Taskleiste minimieren", "settings.option.experimental.inline_playlists": "Inline Playlists und Alben",
"settings.option.experimental.closeButtonBehaviour.minimizeTray": "In den Tray minimieren",
// Refer to term.disabled & term.enabled // Refer to term.disabled & term.enabled
// Spatialization Menu // Spatialization Menu
"spatial.spatialProperties" : "Räumliche Einstellungen", "spatial.notTurnedOn": "Die Audio-Spatialisierung ist deaktiviert. Um sie zu verwenden, musst du diese zuerst aktivieren.",
"spatial.width" : "Breite", "spatial.spatialProperties": "Räumliche Einstellungen",
"spatial.height" : "Höhe", "spatial.width": "Breite",
"spatial.depth" : "Tiefe", "spatial.height": "Höhe",
"spatial.gain" : "Gain", "spatial.depth": "Tiefe",
"spatial.roomMaterials" : "Raummaterialien", "spatial.gain": "Gain",
"spatial.roomDimensions" : "Raumabmessungen", "spatial.roomMaterials": "Raummaterialien",
"spatial.roomPositions" : "Raumpositionen", "spatial.roomDimensions": "Raumabmessungen",
"spatial.setDimensions" : "Setze Abmessungen", "spatial.roomPositions": "Raumpositionen",
"spatial.setPositions" : "Setze Positionen", "spatial.setDimensions": "Setze Abmessungen",
"spatial.up" : "Oben", "spatial.setPositions": "Setze Positionen",
"spatial.front" : "Vorne", "spatial.up": "Oben",
"spatial.left" : "Links", "spatial.front": "Vorne",
"spatial.right" : "Rechts", "spatial.left": "Links",
"spatial.back" : "Hinten", "spatial.right": "Rechts",
"spatial.down" : "Unten", "spatial.back": "Hinten",
"spatial.listener" : "Hörer*in", "spatial.down": "Unten",
"spatial.audioSource" : "Audioquelle", "spatial.listener": "Hörer*in",
"spatial.audioSource": "Audioquelle",
// Settings - Unfinished // Settings - Unfinished
"settings.header.unfinished": "Unfertig", "settings.header.unfinished": "Unvollendet",
// Web Remote // Web Remote
"remote.web.title": "Cider Remote", "remote.web.title": "Cider Remote",

View file

@ -124,7 +124,12 @@
"term.contributors": "more pisseneers", "term.contributors": "more pisseneers",
"term.equalizer": "advanced piss configuration", "term.equalizer": "advanced piss configuration",
"term.reset": "repiss", "term.reset": "repiss",
"term.tracks": "pisses", // Assume x amount of tracks. e.g. 50 tracks // Example for multiple plural forms : look up the key for your language in https://github.com/prantlf/fast-plural-rules/blob/master/docs/languages.md#supported-languages
"term.track": {
"one" : "piss",
"other" : "pisses"
},
// "term.tracks": "pisses", // Assume x amount of tracks. e.g. 50 tracks
"term.videos": "piss videos", "term.videos": "piss videos",
"term.menu": "piss menu", "term.menu": "piss menu",
"term.check": "piss!", "term.check": "piss!",
@ -136,6 +141,8 @@
"term.addedpreset": "obtained prepiss", "term.addedpreset": "obtained prepiss",
"term.deletepreset.warn": "are you sure you want to obliterate this prepiss?", "term.deletepreset.warn": "are you sure you want to obliterate this prepiss?",
"term.deletedpreset": "obliterated prepiss", "term.deletedpreset": "obliterated prepiss",
"term.defaultPresets": "default prepisses",
"term.userPresets": "your prepisses",
"term.requestError": "the request got pissed on", "term.requestError": "the request got pissed on",
"term.song.link.generate": "pissing on piss.link…", "term.song.link.generate": "pissing on piss.link…",
"term.musicVideos": "piss videos", // Search page friendlyTypes "term.musicVideos": "piss videos", // Search page friendlyTypes
@ -146,6 +153,7 @@
"term.recordLabels": "piss labels", "term.recordLabels": "piss labels",
"term.videoExtras": "extra piss videos", "term.videoExtras": "extra piss videos",
"term.top": "topiss", "term.top": "topiss",
"term.version": "pission",
// Home // Home
"home.title": "piss central", "home.title": "piss central",
@ -290,6 +298,10 @@
"settings.header.visual.hardwareAcceleration.default": "default piss", "settings.header.visual.hardwareAcceleration.default": "default piss",
"settings.header.visual.hardwareAcceleration.webGPU": "WebPISS", "settings.header.visual.hardwareAcceleration.webGPU": "WebPISS",
"settings.header.visual.theme": "colored piss", "settings.header.visual.theme": "colored piss",
"settings.option.visual.theme.github.download": "piss from PissHub URL",
"settings.prompt.visual.theme.github.URL": "piss on the URL for your colorful piss",
"settings.notyf.visual.theme.install.success": "colored piss obtained",
"settings.notyf.visual.theme.install.error": "colored piss got pissed on…",
// Settings - Visual - Theme name // Settings - Visual - Theme name
"settings.option.visual.theme.default": "same old piss", "settings.option.visual.theme.default": "same old piss",

View file

@ -127,10 +127,13 @@
"one" : "首歌曲", "one" : "首歌曲",
"other" : "首歌曲" "other" : "首歌曲"
}, },
"term.tracks": "首歌曲",
"term.videos": "影片", "term.videos": "影片",
"term.menu": "選單", "term.menu": "選單",
"term.check": "檢查", "term.check": "檢查",
"term.aboutArtist": "關於{{artistName}}", // e.g. 'About Doja Cat' "term.aboutArtist": "關於{{artistName}}", // e.g. 'About Doja Cat'
"term.requestError": "請求發生錯誤。",
"term.song.link.generate": "正在取得 song.link 的分享網址...",
"term.version": "版本", "term.version": "版本",
// Home // Home
@ -272,6 +275,10 @@
"settings.header.visual.hardwareAcceleration.default": "預設", "settings.header.visual.hardwareAcceleration.default": "預設",
"settings.header.visual.hardwareAcceleration.webGPU": "WebGPU", "settings.header.visual.hardwareAcceleration.webGPU": "WebGPU",
"settings.header.visual.theme": "主題", "settings.header.visual.theme": "主題",
"settings.option.visual.theme.github.download" : "從 GitHub 連結安裝" ,
"settings.prompt.visual.theme.github.URL" : "輸入你要安裝的主題連結" ,
"settings.notyf.visual.theme.install.success" : "主題成功安裝" ,
"settings.notyf.visual.theme.install.error" : "主題安裝失敗" ,
// Settings - Visual - Theme name // Settings - Visual - Theme name
"settings.option.visual.theme.default": "Cider", "settings.option.visual.theme.default": "Cider",

View file

@ -217,11 +217,11 @@ export class BrowserWindow {
res.send("Stopped") res.send("Stopped")
break; break;
case "next": case "next":
BrowserWindow.win.webContents.executeJavaScript("MusicKit.getInstance().skipToNextItem()") BrowserWindow.win.webContents.executeJavaScript("if (MusicKit.getInstance().queue.nextPlayableItemIndex != -1 && MusicKit.getInstance().queue.nextPlayableItemIndex != null) {MusicKit.getInstance().changeToMediaAtIndex(MusicKit.getInstance().queue.nextPlayableItemIndex);}")
res.send("Next") res.send("Next")
break; break;
case "previous": case "previous":
BrowserWindow.win.webContents.executeJavaScript("MusicKit.getInstance().skipToPreviousItem()") BrowserWindow.win.webContents.executeJavaScript("if (MusicKit.getInstance().queue.previousPlayableItemIndex != -1 && MusicKit.getInstance().queue.previousPlayableItemIndex != null) {MusicKit.getInstance().changeToMediaAtIndex(MusicKit.getInstance().queue.previousPlayableItemIndex);}")
res.send("Previous") res.send("Previous")
break; break;
default: { default: {

View file

@ -182,11 +182,12 @@ export class wsapi {
response.message = "Unmuted"; response.message = "Unmuted";
break; break;
case "next": case "next":
this._win.webContents.executeJavaScript(`MusicKit.getInstance().skipToNextItem()`); this._win.webContents.executeJavaScript(`if (MusicKit.getInstance().queue.nextPlayableItemIndex != -1 && MusicKit.getInstance().queue.nextPlayableItemIndex != null) {
MusicKit.getInstance().changeToMediaAtIndex(MusicKit.getInstance().queue.nextPlayableItemIndex);}`);
response.message = "Next"; response.message = "Next";
break; break;
case "previous": case "previous":
this._win.webContents.executeJavaScript(`MusicKit.getInstance().skipToPreviousItem()`); this._win.webContents.executeJavaScript(`if (MusicKit.getInstance().queue.previousPlayableItemIndex != -1 && MusicKit.getInstance().queue.previousPlayableItemIndex != null) {MusicKit.getInstance().changeToMediaAtIndex(MusicKit.getInstance().queue.previousPlayableItemIndex)}`);
response.message = "Previous"; response.message = "Previous";
break; break;
case "musickit-api": case "musickit-api":

View file

@ -9,6 +9,7 @@ export default class DiscordRichPresence {
*/ */
private static _store: any; private static _store: any;
private _app : any; private _app : any;
private _attributes : any;
private static _connection: boolean = false; private static _connection: boolean = false;
/** /**
@ -148,7 +149,7 @@ export default class DiscordRichPresence {
state: `${attributes.artistName ? `by ${attributes.artistName}` : ''}`, state: `${attributes.artistName ? `by ${attributes.artistName}` : ''}`,
startTimestamp: attributes.startTime, startTimestamp: attributes.startTime,
endTimestamp: attributes.endTime, endTimestamp: attributes.endTime,
largeImageKey: attributes.artwork.url.replace('{w}', '1024').replace('{h}', '1024'), largeImageKey: attributes?.artwork?.url?.replace('{w}', '1024').replace('{h}', '1024'),
largeImageText: attributes.albumName, largeImageText: attributes.albumName,
instance: false, // Whether the activity is in a game session instance: false, // Whether the activity is in a game session
buttons: [ buttons: [
@ -217,9 +218,8 @@ export default class DiscordRichPresence {
}) })
.then(res => res.json()) .then(res => res.json())
.then(function(json){ .then(function(json){
self._activity['largeImageKey'] = json.url self._attributes["artwork"]["url"] = json.url
console.log(json.url) self.updateActivity(self._attributes)
self._client.setActivity(self._activity);
}) })
}) })
@ -237,6 +237,7 @@ export default class DiscordRichPresence {
* @param attributes Music Attributes (attributes.status = current state) * @param attributes Music Attributes (attributes.status = current state)
*/ */
onPlaybackStateDidChange(attributes: object): void { onPlaybackStateDidChange(attributes: object): void {
this._attributes = attributes
this.updateActivity(attributes) this.updateActivity(attributes)
} }
@ -245,6 +246,7 @@ export default class DiscordRichPresence {
* @param attributes Music Attributes * @param attributes Music Attributes
*/ */
onNowPlayingItemDidChange(attributes: object): void { onNowPlayingItemDidChange(attributes: object): void {
this._attributes = attributes
this.updateActivity(attributes) this.updateActivity(attributes)
} }
} }

View file

@ -127,11 +127,14 @@ const MusicKitInterop = {
}, },
next: () => { next: () => {
MusicKit.getInstance().skipToNextItem().then(r => console.log(`[MusicKitInterop.next] Skipping to Next ${r}`)); if (MusicKit.getInstance().queue.nextPlayableItemIndex != -1 && MusicKit.getInstance().queue.nextPlayableItemIndex != null)
MusicKit.getInstance().changeToMediaAtIndex(MusicKit.getInstance().queue.nextPlayableItemIndex);
// MusicKit.getInstance().skipToNextItem().then(r => console.log(`[MusicKitInterop.next] Skipping to Next ${r}`));
}, },
previous: () => { previous: () => {
MusicKit.getInstance().skipToPreviousItem().then(r => console.log(`[MusicKitInterop.previous] Skipping to Previous ${r}`)); if (MusicKit.getInstance().queue.previousPlayableItemIndex != -1 && MusicKit.getInstance().queue.previousPlayableItemIndex != null)
MusicKit.getInstance().changeToMediaAtIndex(MusicKit.getInstance().queue.previousPlayableItemIndex);
} }
} }

View file

@ -597,6 +597,8 @@ const app = new Vue({
} catch (err) { } catch (err) {
} }
this.mk._bag.features['seamless-audio-transitions'] = this.cfg.audio.seamless_audio
// API Fallback // API Fallback
if (!this.chrome.userinfo) { if (!this.chrome.userinfo) {
this.chrome.userinfo = { this.chrome.userinfo = {
@ -1348,7 +1350,7 @@ const app = new Vue({
app.mk.seekToTime(0); app.mk.seekToTime(0);
} else { } else {
app.prevButtonBackIndicator = false; app.prevButtonBackIndicator = false;
app.mk.skipToPreviousItem() app.skipToPreviousItem()
} }
}, },
async getNowPlayingItemDetailed(target) { async getNowPlayingItemDetailed(target) {
@ -3730,6 +3732,16 @@ const app = new Vue({
if (sellang.startsWith("en") && this.mk.storefrontId != "us") sellang = "en-gb" if (sellang.startsWith("en") && this.mk.storefrontId != "us") sellang = "en-gb"
return await sellang return await sellang
} }
},
skipToNextItem(){
// app.mk.skipToNextItem() is buggy somehow so use this
if (this.mk.queue.nextPlayableItemIndex != -1 && this.mk.queue.nextPlayableItemIndex != null)
this.mk.changeToMediaAtIndex(this.mk.queue.nextPlayableItemIndex);
},
skipToPreviousItem(){
// app.mk.skipToPreviousItem() is buggy somehow so use this
if (this.mk.queue.previousPlayableItemIndex != -1 && this.mk.queue.previousPlayableItemIndex != null)
this.mk.changeToMediaAtIndex(this.mk.queue.previousPlayableItemIndex);
} }
} }
}) })

View file

@ -30,7 +30,7 @@
<button class="playback-button play" @click="mk.play()" v-else></button> <button class="playback-button play" @click="mk.play()" v-else></button>
</div> </div>
<div class="app-chrome-item display--large"> <div class="app-chrome-item display--large">
<button class="playback-button next" @click="mk.skipToNextItem()"></button> <button class="playback-button next" @click="skipToNextItem()"></button>
</div> </div>
<div class="app-chrome-item display--large"> <div class="app-chrome-item display--large">
<button class="playback-button--small repeat" v-if="mk.repeatMode == 0" <button class="playback-button--small repeat" v-if="mk.repeatMode == 0"

View file

@ -137,7 +137,7 @@
<button class="playback-button play" @click="mk.play()" v-else></button> <button class="playback-button play" @click="mk.play()" v-else></button>
</div> </div>
<div class="app-chrome-item"> <div class="app-chrome-item">
<button class="playback-button next" @click="mk.skipToNextItem()"></button> <button class="playback-button next" @click="skipToNextItem()"></button>
</div> </div>
<div class="app-chrome-item"> <div class="app-chrome-item">
<button class="playback-button--small repeat" v-if="mk.repeatMode == 0" <button class="playback-button--small repeat" v-if="mk.repeatMode == 0"

View file

@ -66,7 +66,7 @@
<button class="playback-button play" @click="app.mk.play()" v-else></button> <button class="playback-button play" @click="app.mk.play()" v-else></button>
</div> </div>
<div class="app-chrome-item"> <div class="app-chrome-item">
<button class="playback-button next" @click="app.mk.skipToNextItem()"></button> <button class="playback-button next" @click="app.skipToNextItem()"></button>
</div> </div>
<div class="app-chrome-item"> <div class="app-chrome-item">
<button class="playback-button--small repeat" v-if="app.mk.repeatMode == 0" <button class="playback-button--small repeat" v-if="app.mk.repeatMode == 0"

View file

@ -73,7 +73,7 @@
<button class="playback-button play" @click="app.mk.play()" v-else></button> <button class="playback-button play" @click="app.mk.play()" v-else></button>
</div> </div>
<div class="app-chrome-item"> <div class="app-chrome-item">
<button class="playback-button next" @click="app.mk.skipToNextItem()"></button> <button class="playback-button next" @click="app.skipToNextItem()"></button>
</div> </div>
<div class="app-chrome-item"> <div class="app-chrome-item">
<button class="playback-button--small repeat" v-if="app.mk.repeatMode == 0" <button class="playback-button--small repeat" v-if="app.mk.repeatMode == 0"

View file

@ -47,7 +47,7 @@
{{$root.getLz('settings.option.audio.seamlessTransition')}} {{$root.getLz('settings.option.audio.seamlessTransition')}}
</div> </div>
<div class="md-option-segment md-option-segment_auto"> <div class="md-option-segment md-option-segment_auto">
<input type="checkbox" v-model="app.cfg.audio.seamless_audio" switch/> <input type="checkbox" v-model="app.cfg.audio.seamless_audio" v-on:change="app.mk._bag.features['seamless-audio-transitions'] = app.cfg.audio.seamless_audio" switch/>
</div> </div>
</div> </div>
<div class="md-option-line"> <div class="md-option-line">