diff --git a/.circleci/config.yml b/.circleci/config.yml index f1370fb9..e02b98b2 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -3,7 +3,7 @@ version: 2.1 executors: cider-ci: docker: - - image: circleci/node:16 + - image: cimg/node:lts-browsers working_directory: ~/Cider orbs: # Add orbs to your configuration @@ -15,15 +15,9 @@ jobs: executor: cider-ci steps: - checkout - # - run: - # name: Rename Repository - # command: sed -i 's/github:ciderapp\/Cider/github:ciderapp\/cider-releases/' package.json - run: name: Update Version Number of App command: sudo chmod +x resources/version.sh && ./resources/version.sh || true - - run: - name: Update Package Managers - command: sudo npm update -g npm yarn - restore_cache: name: Restore Yarn Package Cache keys: @@ -60,9 +54,6 @@ jobs: steps: - attach_workspace: at: ~/Cider -# - run: -# name: Fix Versioning and Add Channel -# command: yarn circle:script - run: name: Generate Builds (Linux) command: yarn electron-builder -l -p never @@ -89,9 +80,6 @@ jobs: sudo dpkg --add-architecture i386 sudo apt-get update -y sudo apt-get install -y wine32 -# - run: -# name: Fix Versioning and Add Channel -# command: yarn circle:script - run: name: Generate Builds (Windows) command: yarn electron-builder -w --x64 -p never @@ -117,9 +105,6 @@ jobs: sudo dpkg --add-architecture i386 sudo apt-get update -y sudo apt-get install -y wine32 -# - run: -# name: Fix Versioning and Add Channel -# command: yarn circle:script - run: name: Generate Builds (Winget) command: yarn electron-builder --win -c winget.json -p never @@ -156,9 +141,6 @@ jobs: mv ~/Cider/dist/*.blockmap ~/Cider/dist/artifacts - store_artifacts: path: ~/Cider/dist/artifacts -# - run: -# name: Fix Versioning and Add Channel -# command: yarn circle:script - run: name: Update Version Number of App command: sudo chmod +x resources/version.sh && ./resources/version.sh || true diff --git a/Assets/Release.svg b/Assets/Release.svg index f27dc45d..3c9999cd 100644 --- a/Assets/Release.svg +++ b/Assets/Release.svg @@ -1,6 +1,9 @@ - - - + + + + + + diff --git a/src/i18n/README.md b/src/i18n/README.md index 265a6214..92138b1a 100644 --- a/src/i18n/README.md +++ b/src/i18n/README.md @@ -448,6 +448,11 @@ Update 10/06/2022 20:00 UTC * `settings.option.visual.purplePodcastPlaybackBar`: Added to `en_US` +Update 14/06/2022 14:10 UTC + +* `term.themeManaged`: Added to `en_US` + + Update 15/06/2022 20:00 UTC * `settings.notyf.connectivity.lastfmScrobble.connectError`: Added to `en_US` diff --git a/src/i18n/en_GB.json b/src/i18n/en_GB.json index bd4f7203..3be188ea 100644 --- a/src/i18n/en_GB.json +++ b/src/i18n/en_GB.json @@ -2,7 +2,7 @@ "i18n.languageName": "English (UK)", "i18n.languageNameEnglish": "English (UK)", "i18n.category": "main", - "i18n.authors": "Core, inalone, nosh118", + "i18n.authors": "Core, inalone, nosh118, booploops", "date.format": "${d} ${m}, ${y}", "term.equalizer": "Equaliser", "settings.option.audio.enableAdvancedFunctionality.description": "Enabling AudioContext functionality will allow for extended audio features like Audio Normalisation, Equalisers and Visualisers - however on some systems this may cause stuttering in audio tracks.", @@ -14,5 +14,14 @@ "term.track": { "one" : "song", "other" : "songs" - } + }, + "home.syncFavorites": "Sync Favourites", + "home.syncFavorites.gettingArtists": "Getting Favourited Artists...", + "action.addToFavorites": "Add to Favourites", + "action.favorite": "Favourite", + "action.removeFavorite": "Remove Favourite", + "settings.option.visual.customAccentColor": "Custom Accent Colour", + "settings.option.visual.accentColor": "Accent Colour", + "settings.option.visual.windowColor": "Window Tint Colour", + "settings.header.visual.windowBackgroundStyle.color": "Colour Tint" } diff --git a/src/i18n/en_US.json b/src/i18n/en_US.json index e094d697..d43ef9ec 100644 --- a/src/i18n/en_US.json +++ b/src/i18n/en_US.json @@ -154,6 +154,7 @@ }, "term.videos": "Videos", "term.menu": "Menu", + "term.themeManaged": "Managed by a theme", "term.check": "Check", "term.aboutArtist": "About {{artistName}}", "term.topResult": "Top Result", diff --git a/src/i18n/hu_HU.json b/src/i18n/hu_HU.json index c38d44ab..5c131b8c 100644 --- a/src/i18n/hu_HU.json +++ b/src/i18n/hu_HU.json @@ -154,6 +154,7 @@ }, "term.videos": "Videók", "term.menu": "Menü", + "term.themeManaged": "Egy téma kezeli a beállítást", "term.check": "Ellenőrzés", "term.aboutArtist": "{{artistName}}-ról/ről", "term.topResult": "Legjobb találatok", diff --git a/src/i18n/source/en_US.json b/src/i18n/source/en_US.json index 8316123c..857a76b2 100644 --- a/src/i18n/source/en_US.json +++ b/src/i18n/source/en_US.json @@ -153,6 +153,7 @@ }, "term.videos": "Videos", "term.menu": "Menu", + "term.themeManaged": "Managed by a theme", "term.check": "Check", "term.aboutArtist": "About {{artistName}}", "term.topResult": "Top Result", diff --git a/src/i18n/zh_CN.json b/src/i18n/zh_CN.json index 493a6395..ec32497a 100644 --- a/src/i18n/zh_CN.json +++ b/src/i18n/zh_CN.json @@ -10,6 +10,7 @@ "notification.updatingLibrarySongs": "正在更新歌曲资料库...", "notification.updatingLibraryAlbums": "正在更新专辑资料库...", "notification.updatingLibraryArtists": "正在更新艺人资料库...", + "term.variables": "Variables", "term.appleInc": "Apple Inc.", "term.appleMusic": "Apple Music", "term.applePodcasts": "Apple Podcasts", @@ -20,8 +21,12 @@ "term.accountSettings": "账户设置", "term.logout": "退出登录", "term.login": "登录", + "term.quickNav":"快速导航", + "term.cast":"投射", "term.about": "关于", - "term.privateSession": "私人聆听", + "term.privateSession": "隐身聆听", + "term.disablePrivateSession":"停止隐身聆听", + "term.autoplay":"自动播放", "term.lyrics": "歌词", "term.queue": "待播清单", "term.history": "历史记录", @@ -37,18 +42,27 @@ "term.artists": "艺人", "term.podcasts": "播客", "term.playlists": "播放列表", + "term.charts":"排行榜", "term.playlist": "播放列表", "term.newPlaylist": "新播放列表", "term.newPlaylistFolder": "新播放列表文件夹", "term.createNewPlaylist": "新建播放列表", "term.createNewPlaylistFolder": "新建播放列表文件夹", "term.deletePlaylist": "您确定要删除该播放列表吗?", + "term.navigateBack":"上一页", + "term.navigateForward":"下一页", "term.play": "播放", "term.pause": "暂停", + "term.stop": "停止", "term.previous": "上一首", "term.next": "下一首", "term.shuffle": "随机播放", - "term.repeat": "重复播放", + "term.enableShuffle":"开启随机播放", + "term.disableShuffle":"关闭随机播放", + "term.repeat": "循环播放", + "term.enableRepeatOne": "开启单曲循环", + "term.disableRepeatOne": "关闭单曲循环", + "term.disableRepeat": "关闭循环播放", "term.volume": "音量", "term.mute": "静音", "term.unmute": "解除静音", @@ -63,12 +77,14 @@ "term.sortBy.genre": "类型", "term.sortBy.releaseDate": "发行日期", "term.sortBy.duration": "时长", + "term.sortBy.dateAdded":"加入日期", "term.sortOrder": "字母排序", "term.sortOrder.ascending": "升序", "term.sortOrder.descending": "倒序", "term.viewAs": "显示模式", "term.viewAs.coverArt": "专辑封面", "term.viewAs.list": "列表", + "term.dynamic":"动态", "term.size": "大小", "term.size.normal": "正常", "term.size.compact": "紧凑", @@ -101,7 +117,9 @@ "term.audioControls": "音频控制", "term.audioSettings": "音频设置", "term.clearAll": "清空", - "term.recentStations": "最近播放的频道", + "term.recentStations": "最近播放的广播", + "term.personalStations":"最近播放的个人广播", + "term.amLive":"amLive", "term.language": "语言", "term.funLanguages": "恶搞", "term.noLyrics": "加载中... / 无搜索结果 / 纯音乐", @@ -140,10 +158,25 @@ "term.radioShows": "广播单集", "term.recordLabels": "唱片公司", "term.videoExtras": "视频特辑", + "term.top":"顶部", "term.version": "版本", + "term.noVideos":"无视频", "term.plugin": "插件", "term.pluginMenu": "插件菜单", "term.pluginMenu.none": "沒有交互式插件", + "term.replay":"重新播放", + "term.uniqueAlbums":"Unique Albums", + "term.uniqueArtists":"Unique Artists", + "term.uniqueSongs":"Unique Songs", + "term.topArtists":"热门艺人", + "term.listenedTo":"听过", + "term.times":"次", + "term.topAlbums":"热门专辑", + "term.plays":"次", + "term.topGenres":"热门类型", + "term.confirmLogout":"你确定要退出登录吗?", + "term.creditDesignedBy":"由 ${authorUsername} 设计", + "term.discNumber":"碟 ${discNumber}", "home.title": "主页", "home.recentlyPlayed": "最近播放", "home.recentlyAdded": "最近添加", @@ -164,6 +197,12 @@ "podcast.episodes": "单集", "podcast.playEpisode": "播放单集", "podcast.website": "Podcast 网站", + "action.hideLibrary":"隐藏资料库", + "action.showLibrary":"显示资料可查", + "action.cut":"剪切", + "action.paste":"粘贴", + "action.selectAll":"全选", + "action.delete":"删除", "action.edit": "编辑", "action.done": "完成", "action.editTracklist": "编辑歌曲清单", @@ -193,7 +232,8 @@ "action.startRadio": "开始电台", "action.goToArtist": "前往艺人", "action.goToAlbum": "前往专辑", - "action.showInAppleMusic": "显示于 Apple Music", + "action.showInPlaylist":"在播放列表中显示", + "action.showInAppleMusic": "在 Apple Music 中显示", "action.moveToTop": "移到顶部", "action.share": "分享歌曲", "action.rename": "重命名", @@ -210,19 +250,68 @@ "action.showAlbum": "显示专辑", "action.tray.minimize": "最小化", "action.tray.quit": "退出", + "action.tray.show": "显示 Cider", + "action.tray.playpause": "播放/暂停", + "action.tray.next": "下一首", + "action.tray.previous": "上一首", + "action.tray.listento": "Listen To:", "action.update": "更新", + "action.install": "安装", "action.copy": "复制", "action.newpreset": "新建默认...", "action.deletepreset": "删除默认", "action.open": "打开", + "action.close": "关闭", + "action.relaunch.confirm":"你想重新启动 Cider 吗?", "action.cast.chromecast": "Chromecast", "action.cast.todevices": "投射到设备", "action.cast.stop": "停止投射到所有设备", - "action.cast.airplay": "AirPlay", - "action.cast.airplay.underdevelopment": "AirPlay 仍处于开发阶段中,敬请期待。", + "action.cast.airplay": "隔空播放", + "action.cast.airplay.underdevelopment": "隔空播放仍处于开发阶段中,敬请期待。", "action.cast.scan": "搜索", "action.cast.scanning": "搜索中...", "action.createNew": "添加...", + "action.openArtworkInBrowser": "在浏览器中打开专辑封面", + "action.scrollToTop": "回到顶部", + "menubar.options.about": "关于", + "menubar.options.settings": "设置", + "menubar.options.quit": "退出 Cider", + "menubar.options.view": "查看 ", + "menubar.options.reload": "重新载入", + "menubar.options.forcereload": "强制重新载入", + "menubar.options.toggledevtools": "切换开发人员工具", + "menubar.options.window": "窗口", + "menubar.options.minimize": "最小化", + "menubar.options.toggleprivate": "切换隐身聆听", + "menubar.options.webremote": "远程控制", + "menubar.options.audio": "音频设定", + "menubar.options.plugins": "插件目录", + "menubar.options.controls": "控制", + "menubar.options.next": "下一首", + "menubar.options.playpause": "播放/暂停", + "menubar.options.previous": "上一首", + "menubar.options.volumeup": "增大音量", + "menubar.options.volumedown": "减小音量", + "menubar.options.browse": "浏览", + "menubar.options.artists": "艺人", + "menubar.options.search": "搜索", + "menubar.options.albums": "专辑", + "menubar.options.cast": "投射至设备", + "menubar.options.account": "账户", + "menubar.options.accountsettings": "账户设置", + "menubar.options.signout": "注销", + "menubar.options.support": "支持", + "menubar.options.discord": "Discord", + "menubar.options.github": "GitHub Wiki", + "menubar.options.report": "报告...", + "menubar.options.bug": "Bug", + "menubar.options.feature": "功能请求", + "menubar.options.trans": "翻译报告/请求", + "menubar.options.license": "查看授权", + "menubar.options.conf": "在编辑器打开配置文件", + "menubar.options.listennow": "现在就听", + "menubar.options.recentlyAdded": "最近添加", + "menubar.options.songs": "歌曲", "settings.header.general": "通用", "settings.header.general.description": "调整 Cider 的通用设置", "settings.option.audio.volumeStep": "音量改变量", @@ -244,25 +333,54 @@ "settings.option.general.customizeSidebar": "自定义侧边栏的功能", "settings.option.general.customizeSidebar.customize": "自定义", "settings.option.general.keybindings": "快捷操作键", + "settings.option.general.keybindings.pressCombination":"按下两个键组合来更新操作设定。", + "settings.option.general.keybindings.pressEscape": "按下 Esc 键返回。", + "settings.notyf.general.keybindings.update.success":"快捷键更新成功。", + "settings.prompt.general.keybindings.update.success":"快捷键更新成功,按下 OK 重新启动 Cider.", "settings.option.general.keybindings.open": "打开", + "settings.option.general.themeUpdateNotification":"自动检查主题更新", + "settings.option.general.showLovedTracksInline":"行内显示喜爱曲目", + "settings.description.search":"搜索", + "settings.description.albums":"资料库专辑", + "settings.description.artists":"资料库艺人", + "settings.description.browse":"浏览", + "settings.description.private":"隐身聆听", + "settings.description.remote":"远程控制", + "settings.description.audio":"音频设定", + "settings.description.plugins":"插件目录", + "settings.description.cast":"投射到装置", + "settings.description.settings":"设置", + "settings.description.developer":"开发者", + "settings.description.listnow":"现在就听", + "settings.description.recentAdd":"最近加入", + "settings.description.songs":"歌曲", "settings.notyf.updateCider.update-not-available": "没有可用的更新", "settings.notyf.updateCider.update-downloaded": "更新已成功下载,重启后进行更新", "settings.notyf.updateCider.update-timeout": "更新超时", "settings.header.audio": "音频", "settings.header.audio.description": "调整 Cider 的音频设置", + "settings.option.audio.advanced":"高级功能", + "settings.option.audio.changePlaybackRate":"修改播放速度", + "settings.option.audio.playbackRate":"播放速度", + "settings.option.audio.playbackRate.change":"播放速度已修改", "settings.option.audio.quality": "音质", "settings.header.audio.quality.hireslossless": "高解析度无损", "settings.header.audio.quality.hireslossless.description": "(最高 24 位/192 kHz)", "settings.header.audio.quality.lossless": "无损", "settings.header.audio.quality.lossless.description": "(最高 24 位/48 kHz)", "settings.header.audio.quality.high": "高音质", + "settings.header.audio.quality.high.description":"256 kbps", "settings.header.audio.quality.standard": "高效率", + "settings.header.audio.quality.standard.description":"64 kbps", "settings.option.audio.seamlessTransition": "无缝播放", "settings.option.audio.enableAdvancedFunctionality": "高级音频功能", "settings.option.audio.enableAdvancedFunctionality.description": "打开 AudioContext 将启用类似音量平衡和等化器的高级设置。但这并不一定适合每部电脑,可能会发生音乐卡顿。", + "settings.warn.audio.enableAdvancedFunctionality.lowcores":"您的电脑可能无法处理这些功能, 您确定要继续?", "settings.option.audio.audioLab": "Cider 音频实验室", "settings.option.audio.audioLab.description": "包含由 Cider 开发团队进行的各种音频优化功能。", + "settings.option.audio.audioLab.subheader":"Designed by Cider Acoustic Technologies in California", "settings.warn.audioLab.withoutAF": "使用 Cider 音频实验室需要打开进阶音频功能才可使用。", + "settings.warn.enableAdvancedFunctionality":"此功能需要开启高级音频功能才可使用。", "settings.option.audio.enableAdvancedFunctionality.analogWarmth": "模拟温暖", "settings.option.audio.enableAdvancedFunctionality.analogWarmth.description": "以 Korg Nutube 6P1 为蓝本的模拟温暖。", "settings.option.audio.enableAdvancedFunctionality.analogWarmthIntensity": "模拟温暖强度", @@ -279,13 +397,18 @@ "settings.option.audio.enableAdvancedFunctionality.atmosphereRealizerMode.E68_2": "宇治抹茶奶茶", "settings.option.audio.enableAdvancedFunctionality.atmosphereRealizerMode.E168_1": "春毫茉莉玛琪雅朵", "settings.option.audio.enableAdvancedFunctionality.atmosphereRealizerMode.Z3600": "北海道奶茶", - "settings.option.audio.enableAdvancedFunctionality.atmosphereRealizerMode.Z8500A": "月光软饼干", + "settings.option.audio.enableAdvancedFunctionality.atmosphereRealizerMode.Z8500": "月光软饼干", + "settings.option.audio.enableAdvancedFunctionality.atmosphereRealizerMode.BSCBM":"布蕾黑糖鲜奶", + "settings.option.audio.enableAdvancedFunctionality.atmosphereRealizerMode.CUDDLE":"温暖抱抱", "settings.option.audio.enableAdvancedFunctionality.ciderPPE": "Cider 数码增强音频处理™️", "settings.option.audio.enableAdvancedFunctionality.ciderPPE.description": "通过人类的听力心理学模型和 AAC 编码特色的即时算法,强化 AAC 音频的感知音频质量。", "settings.option.audio.enableAdvancedFunctionality.ciderPPEStrength": "数码增强音频处理设置", "settings.option.audio.enableAdvancedFunctionality.ciderPPEStrength.description": "将更改音频处理的激进/振奋程度(增强选项有可能会引起杂讯)。", "settings.option.audio.enableAdvancedFunctionality.ciderPPEStrength.standard": "标准", + "settings.option.audio.enableAdvancedFunctionality.ciderPPEStrength.adaptive":"自适应", + "settings.option.audio.enableAdvancedFunctionality.ciderPPEStrength.legacy":"传统", "settings.option.audio.enableAdvancedFunctionality.ciderPPEStrength.aggressive": "增强", + "settings.warn.audio.enableAdvancedFunctionality.ciderPPE.compatibility":"数码增强音频处理与空间音频不兼容,请先停用空间音频。", "settings.option.audio.enableAdvancedFunctionality.audioNormalization": "音量平衡", "settings.option.audio.enableAdvancedFunctionality.audioNormalization.description": "自动将歌曲播放音量调整到相同水平,享受更舒适的聆听体验。", "settings.option.audio.enableAdvancedFunctionality.audioNormalization.disabled": "此功能由音频实验室管理", @@ -294,11 +417,19 @@ "settings.option.audio.enableAdvancedFunctionality.tunedAudioSpatialization.profile": "Cider 音频空间配置档", "settings.option.audio.enableAdvancedFunctionality.tunedAudioSpatialization.profile.description": "变更音频空间的配置档,需重新启动应用程序。", "settings.option.audio.enableAdvancedFunctionality.tunedAudioSpatialization.profile.standard": "标准", + "settings.option.audio.enableAdvancedFunctionality.tunedAudioSpatialization.profile.soundstage":"声场", + "settings.option.audio.enableAdvancedFunctionality.tunedAudioSpatialization.profile.separation":"分离感", + "settings.option.audio.enableAdvancedFunctionality.tunedAudioSpatialization.profile.minimal":"微调", "settings.option.audio.enableAdvancedFunctionality.tunedAudioSpatialization.profile.audiophile": "发烧友", "settings.warn.audio.enableAdvancedFunctionality.audioSpatialization.compatibility": "音频空间无法与 CAP 相容,请关闭 CAP 在进行操作。", + "settings.option.audio.dbspl.display":"显示 dB SPL(声压)", + "settings.option.audio.dbspl.description":"(专业用户选项) 音量滑动条显示 dB SPL 而非 dBFS.", + "settings.option.audio.dbfs.calibration":"0 dBFS 校正", + "settings.option.audio.dbfs.description":"Enter the peak Z-weighted dB SPL when Cider is at 0 dBFS.", "settings.option.visual.uiscale": "UI界面大小", "settings.header.visual": "外观", "settings.header.visual.description": "调整 Cider 的外观", + "settings.option.visual.windowStyle":"窗口风格", "settings.option.visual.windowBackgroundStyle": "窗口背景样式", "settings.header.visual.windowBackgroundStyle.none": "无", "settings.header.visual.windowBackgroundStyle.artwork": "专辑插图", @@ -320,8 +451,18 @@ "settings.header.visual.hardwareAcceleration.webGPU": "WebGPU", "settings.header.visual.theme": "主题", "settings.option.visual.theme.github.download": "从 GitHub 链接安装", + "settings.option.visual.theme.github.openfolder":"开启主题文件夹", "settings.option.visual.theme.github.explore": "浏览 GitHub 上的主题", + "settings.header.visual.theme.github.page":"GitHub 上的主题", + "settings.option.visual.theme.github.install.confirm":"你确定要安装 {{ repo }}", "settings.prompt.visual.theme.github.URL": "输入您要安装的窗口主题链接", + "settings.prompt.visual.theme.uninstallTheme":"你确定要删除 {{ theme }}", + "settings.option.visual.theme.checkForUpdates":"检查更新", + "settings.option.visual.theme.manageStyles":"管理风格", + "settings.option.visual.theme.uninstall":"卸载", + "settings.option.visual.theme.viewInfo":"查看信息", + "settings.option.visual.theme.github.available":"可使用的主题", + "settings.option.visual.theme.github.applied":"已应用", "settings.notyf.visual.theme.install.success": "主题成功安装", "settings.notyf.visual.theme.install.error": "主题安装失败", "settings.header.visual.plugin": "插件", @@ -358,8 +499,11 @@ "settings.option.connectivity.discordRPC.clientName": "应用程序名称", "settings.option.connectivity.discordRPC.clearOnPause": "暂停时清除 Discord 动态", "settings.option.connectivity.discordRPC.hideButtons": "隐藏 Discord 动态上的按钮", + "settings.option.connectivity.discordRPC.hideTimestamp":"隐藏 Discord 动态上的时间戳", "settings.option.connectivity.discordRPC.detailsFormat": "详细信息格式", "settings.option.connectivity.discordRPC.stateFormat": "动态格式", + "settings.option.connectivity.discordRPC.reload":"重新加载 DiscordRPC", + "settings.option.connectivity.discordRPC.reconnectedToUser":"DiscordRPC 重新连接至用户: {{user}} ({{userid}})", "settings.option.connectivity.lastfmScrobble": "Last.FM 音乐记录", "settings.option.connectivity.lastfmScrobble.delay": "Last.FM 歌曲追踪延迟 (%)", "settings.option.connectivity.lastfmScrobble.nowPlaying": "打开 Last.FM 正在聆听", @@ -382,6 +526,9 @@ "settings.option.visual.transparent": "透明窗口框架", "settings.option.visual.transparent.description": "需主题有支持透明框架,且须重新启动才会生效。", "settings.header.advanced": "高级", + "settings.header.connect":"同步", + "settings.option.connect.link_account":"开启 Cider Connect 同步", + "settings.option.connect.link_account.description":"将您的 Discord 帐户与 Cider Connect 关联后,您可以储存用户资料,包括设定、均衡器,并在后续版本中加入更多可同步选项。(正在更新中)", "spatial.notTurnedOn": "请在设置中开启空间音频。", "spatial.spatialProperties": "空间属性", "spatial.width": "宽度", @@ -404,5 +551,54 @@ "settings.header.unfinished": "未完成", "remote.web.title": "Cider 远程控制", "remote.web.description": "扫描以下的二维码以控制 Cider", - "about.thanks": "郑重感谢 Cider Collective 以及为这个项目提供支持的贡献者。" + "about.thanks": "郑重感谢 Cider Collective 以及为这个项目提供支持的贡献者。", + "share.platform.twitter.tweet":"在 Apple Music 上聆听 {{song}}。 \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":"电子邮件", + "share.platform.songLink":"复制 song.link 链接", + "share.platform.clipboard":"复制到剪贴板", + "oobe.yes":"好的", + "oobe.no":"不", + "oobe.next":"下一步", + "oobe.previous":"上一步", + "oobe.done":"完成", + "oobe.amupsell.title":"在我们开始之前", + "oobe.amupsell.text":"使用 Cider 需要付费的 Apple Music 订阅。\nCider 不能在 Apple Music Voice 计划或某些促销试用订阅状态下使用。 如果您已经订阅 Apple Music,请点击下一步继续。", + "oobe.amupsell.subscribeBtn":"订阅 Apple Music", + "oobe.amupsell.explainBtn":"这是什么?", + "oobe.amupsell.subscribeUrl":"https://apple.co/3MdqJVQ", + "oobe.amupsell.amWebUrl":"https://beta.music.apple.com/", + "oobe.amupsell.promoExplained":"Cider 无法获取部分促销活动与非美区 Apple Muisc 试用状态下的网络播放器API. 要验证您的试用订阅是否能够在Cider内使用, 点击{{ amWebUrl }}, 登陆后尝试播放音乐。如果能够播放,您就可以使用 Cider 了!否则请考虑订阅 Apple Music 服务: {{ subscribeUrl }}。", + "oobe.intro.title":"欢迎使用 Cider", + "oobe.intro.subtitle":"", + "oobe.intro.text":"为了按您喜欢的方式使用 Cider ,请先完成一些设置。您之后可以随时改变这些设置。", + "oobe.general.title":"通用设置", + "oobe.general.subtitle":"", + "oobe.general.text":"", + "oobe.audio.title":"音频设置", + "oobe.audio.subtitle":"", + "oobe.audio.text":"Cider 能够自定义调整和设置的音频属性,提供丰富的高品质音频体验,包括Cider Adrenaline Processor,气氛实现器和空间音频。要启用这些功能,必须启用 \"高级音频功能\"。", + "oobe.audio.advancedFunctionality":"", + "oobe.visual.title":"外观设置", + "oobe.visual.subtitle":"", + "oobe.visual.text":"", + "oobe.visual.layout.text":"Cider 拥有两种不同的窗口布局。Maverick 是一个类似 iTunes 的布局,播放器在窗口的顶部。Mojave 是由 Cider 团队设计的一种新的布局。您可以在设置中随时改变布局。", + "oobe.visual.suggestingThemes":"主题能够个性化您的播放器。以下是推荐的几个主题:", + "oobe.visual.suggestingThemes.subtext":"(主题会从 GitHub 上下载)", + "oobe.visual.suggestingThemes.default":"Cider", + "oobe.visual.suggestingThemes.default.text":"传统的 Cider 主题。", + "oobe.visual.suggestingThemes.dark":"Dark", + "oobe.visual.suggestingThemes.dark.text":"暗黑模式。", + "oobe.visual.suggestingThemes.community1":"Groovy", + "oobe.visual.suggestingThemes.community1.text":"类 WinUI 主题。", + "oobe.visual.suggestingThemes.community2":"iTheme", + "oobe.visual.suggestingThemes.community2.text":"基于 MacOS Monterey 的 Apple Music bata 主题。", + "oobe.visual.suggestingThemes.community3":"Dracula", + "oobe.visual.suggestingThemes.community3.text":"著名的德古拉吸血鬼主题。", + "oobe.amsignin.title": "" } diff --git a/src/main/base/browserwindow.ts b/src/main/base/browserwindow.ts index ac84bef7..c2c7f595 100644 --- a/src/main/base/browserwindow.ts +++ b/src/main/base/browserwindow.ts @@ -53,6 +53,7 @@ export class BrowserWindow { dev: app.isPackaged, osRelease: os.release(), updatable: !process.windowsStore || !process.mas, + useV3: utils.getStoreValue('advanced.experiments').includes("ampv3"), components: [ "pages/podcasts", "pages/apple-account-settings", @@ -848,6 +849,7 @@ export class BrowserWindow { }) ipcMain.handle("get-github-plugin", async (event, url) => { + await this.StopWatcher() const returnVal = { success: true, theme: null, @@ -892,9 +894,11 @@ export class BrowserWindow { returnVal.success = false; } BrowserWindow.win.webContents.send("plugin-installed", returnVal); + this.StartWatcher(utils.getPath('themes')); }); ipcMain.handle("get-github-theme", async (event, url) => { + await this.StopWatcher() const returnVal = { success: true, theme: null, @@ -939,6 +943,8 @@ export class BrowserWindow { returnVal.success = false; } BrowserWindow.win.webContents.send("theme-installed", returnVal); + this.StartWatcher(utils.getPath('themes')); + BrowserWindow.win.webContents.send("theme-update", "") }); ipcMain.on("get-themes", (event, _key) => { diff --git a/src/renderer/less/elements.less b/src/renderer/less/elements.less index 1604effa..e43e8a6c 100644 --- a/src/renderer/less/elements.less +++ b/src/renderer/less/elements.less @@ -400,15 +400,15 @@ .listitem-content { width: 100%; - height: 60px; - display: flex; - flex: 0 0 auto; - flex-direction: row; - font-size: 14px; - justify-content: center-between; - align-items: center; - border-radius: var(--mediaItemRadius); - position: relative; + height: 60px; + display: flex; + flex: 0 0 auto; + flex-direction: row; + font-size: 14px; + justify-content: center-between; + align-items: center; + border-radius: var(--mediaItemRadius); + position: relative; } &:hover { @@ -444,6 +444,7 @@ .mediaitem-artwork { border-radius: var(--mediaItemRadiusSmall); } + .overlay-play { background: rgba(0, 0, 0, 0.5); opacity: 0; @@ -957,6 +958,7 @@ /* mediaitem-square */ .cd-mediaitem-square { + --transitionDuration: .25s; --scaleRate: 1.25; --scaleRateArtwork: 1; width: 200px; @@ -968,6 +970,7 @@ justify-content: center; align-items: center; border-radius: 6px; + transition: width var(--transitionDuration) linear, height var(--transitionDuration) linear; .artwork-container { position: relative; @@ -982,6 +985,7 @@ flex: 0 0 auto; margin: 6px; cursor: pointer; + transition: width var(--transitionDuration) linear, height var(--transitionDuration) linear; .mediaitem-artwork { box-shadow: unset; @@ -1055,16 +1059,33 @@ } } - @media (min-width: 1600px) { - width: calc(200px * var(--scaleRate)); - height: calc(200px * var(--scaleRate)); + &:not(.mediaitem-card):not(.mediaitem-brick):not(.mediaitem-video):not(.noscale) { + @media (min-width: 1460px) { + --scaleRate: 1.1; + --scaleRateArtwork: 0.9; + width: calc(200px * var(--scaleRate)); + height: calc(200px * var(--scaleRate)); - .artwork-container > .artwork { - width: calc(190px * var(--scaleRateArtwork)); - height: calc(190px * var(--scaleRateArtwork)); + .artwork-container > .artwork { + width: calc(190px * var(--scaleRateArtwork)); + height: calc(190px * var(--scaleRateArtwork)); + } + } + + @media (min-width: 1550px) { + --scaleRate: 1.25; + --scaleRateArtwork: 1; + width: calc(200px * var(--scaleRate)); + height: calc(200px * var(--scaleRate)); + + .artwork-container > .artwork { + width: calc(190px * var(--scaleRateArtwork)); + height: calc(190px * var(--scaleRateArtwork)); + } } } + .info-rect { width: 90%; height: 100%; @@ -1112,8 +1133,6 @@ } &.mediaitem-video { - --scaleRate: 1.25; - --scaleRateArtwork: 1.25; height: 200px; width: 240px; @@ -1122,13 +1141,29 @@ width: 212px; } - @media (min-width: 1600px) { - width: calc(240px * var(--scaleRate)); - height: calc(200px * var(--scaleRate)); - - .artwork-container > .artwork { - width: calc(212px * var(--scaleRateArtwork)); - height: calc(120px * var(--scaleRateArtwork)); + &:not(.noscale) { + @media (min-width: 1460px) { + --scaleRate: 1.1; + --scaleRateArtwork: 1.1; + width: calc(240px * var(--scaleRate)); + height: calc(200px * var(--scaleRate)); + + .artwork-container > .artwork { + width: calc(220px * var(--scaleRateArtwork)); + height: calc(123px * var(--scaleRateArtwork)); + } + } + + @media (min-width: 1550px) { + --scaleRate: 1.25; + --scaleRateArtwork: 1.25; + width: calc(240px * var(--scaleRate)); + height: calc(200px * var(--scaleRate)); + + .artwork-container > .artwork { + width: calc(220px * var(--scaleRateArtwork)); + height: calc(123px * var(--scaleRateArtwork)); + } } } } @@ -1141,6 +1176,32 @@ height: 123px; width: 220px; } + + &:not(.noscale) { + @media (min-width: 1460px) { + --scaleRate: 1.1; + --scaleRateArtwork: 1.1; + width: calc(240px * var(--scaleRate)); + height: calc(200px * var(--scaleRate)); + + .artwork-container > .artwork { + width: calc(220px * var(--scaleRateArtwork)); + height: calc(123px * var(--scaleRateArtwork)); + } + } + + @media (min-width: 1550px) { + --scaleRate: 1.25; + --scaleRateArtwork: 1.25; + width: calc(240px * var(--scaleRate)); + height: calc(200px * var(--scaleRate)); + + .artwork-container > .artwork { + width: calc(220px * var(--scaleRateArtwork)); + height: calc(123px * var(--scaleRateArtwork)); + } + } + } } &.mediaitem-small { @@ -1169,7 +1230,7 @@ overflow: hidden; border-radius: 0px; margin: 0; - + transition: width var(--transitionDuration) linear, height var(--transitionDuration) linear, filter 0.2s ease-in-out; .mediaitem-artwork { border-radius: 0px; @@ -1183,6 +1244,8 @@ padding: 10px 10px 14px; position: relative; width: 100%; + display: grid; + align-content: center; &::before { background: var(--bgartwork); @@ -1197,6 +1260,7 @@ z-index: 0; opacity: 1; filter: brightness(0.5) blur(50px) saturate(180%); + transition: filter 0.2s ease-in-out; } } @@ -1211,7 +1275,7 @@ & + .subtitle { max-height: none !important; - margin-top: -0.5em; + // margin-top: -0.5em; } } @@ -1241,14 +1305,34 @@ border-radius: inherit; } - //@media (min-width: 1600px) { - // width: calc(230px * 1.25); - // height: calc(298px * 1.25); - // .artwork-container>.artwork { - // width: calc(230px * 1.25); - // height: calc(230px * 1.25); - // } - //} + &:hover { + .artwork{ + filter: brightness(0.8); + } + .info-rect-card::before { + filter: brightness(0.3) blur(50px) saturate(180%); + } + } + + &:not(.noscale) { + @media (min-width: 1460px) { + width: calc(230px * 1.1); + height: calc(298px * 1.1); + .artwork-container > .artwork { + width: calc(230px * 1.1); + height: calc(230px * 1.1); + } + } + + @media (min-width: 1550px) { + width: calc(230px * 1.25); + height: calc(298px * 1.25); + .artwork-container > .artwork { + width: calc(230px * 1.25); + height: calc(230px * 1.25); + } + } + } } } diff --git a/src/renderer/less/helpers.less b/src/renderer/less/helpers.less index 73ee3d45..1350f7f0 100644 --- a/src/renderer/less/helpers.less +++ b/src/renderer/less/helpers.less @@ -153,22 +153,8 @@ } .close-btn { - width : 50px; - height : 100%; - background-image : var(--gfx-closeBtn); - background-position: center; - background-repeat : no-repeat; - -webkit-app-region : no-drag; - appearance : none; - border : 0; - background-color : transparent; - position : absolute; - top : 0; - right : 0; + .menu-panel.menu-header-text.close-btn - &:hover { - background-color: rgb(196, 43, 28) - } } } } @@ -191,22 +177,7 @@ } .close-btn { - width : 50px; - height : 100%; - background-image : var(--gfx-closeBtn); - background-position: center; - background-repeat : no-repeat; - -webkit-app-region : no-drag; - appearance : none; - border : 0; - background-color : transparent; - position : absolute; - top : 0; - right : 0; - - &:hover { - background-color: rgb(196, 43, 28) - } + .menu-panel.menu-header-text.close-btn } } @@ -371,23 +342,31 @@ } } - .menu-header-text { margin: 18px 6px; .close-btn { - width : 50px; - height : 42px; - background-image : var(--gfx-closeBtn); + width: 36px; + height: 36px; background-position: center; - background-repeat : no-repeat; - -webkit-app-region : no-drag; - appearance : none; - border : 0; - background-color : transparent; - position : absolute; - top : 0; - right : 0; + background-repeat: no-repeat; + -webkit-app-region: no-drag; + appearance: none; + border: 0; + background-color: transparent; + position: absolute; + top: 10px; + right: 10px; + border-radius: 50px; + display: grid; + align-content: center; + + &:before { + content: ""; + font-family: "codicon"; + color: var(--textColor); + font-size: 20px; + } &:hover { background-color: rgb(196, 43, 28) @@ -505,7 +484,8 @@ .popover-artwork { width: 200px; height: 200px; - margin: 0 0 20px 0; + margin: 0 auto; + margin-bottom: 20px; } .song-name { diff --git a/src/renderer/less/linux.less b/src/renderer/less/linux.less index dc0be238..777e9cd0 100644 --- a/src/renderer/less/linux.less +++ b/src/renderer/less/linux.less @@ -3,4 +3,57 @@ body[platform="linux"] { #window-controls-container { //display: none; } + + .window-controls { + justify-content: flex-end; + align-items : center; + padding-right : 6px; + + >div { + --iconSize: 16px; + + &.close, + &.minmax, + &.minimize, + &.minmax.restore { + background-image: unset!important; + position : relative; + display : grid; + align-content : center; + text-align : center; + height : 36px!important; + width : 36px!important; + border-radius : 50px; + transition: background-color .1s ease-in-out; + + &:hover { + background: rgb(200 200 200 / 10%)!important; + } + } + + &.close::before { + font-family: "codicon"; + font-size : var(--iconSize); + content : ""; + } + + &.minmax::before { + font-family: "codicon"; + font-size : var(--iconSize); + content : ""; + } + + &.minimize::before { + font-family: "codicon"; + font-size : var(--iconSize); + content : ""; + } + + &.restore::before { + font-family: "codicon"; + font-size : var(--iconSize); + content : ""; + } + } + } } \ No newline at end of file diff --git a/src/renderer/less/pages.less b/src/renderer/less/pages.less index 3abcb2c9..2cfc0612 100644 --- a/src/renderer/less/pages.less +++ b/src/renderer/less/pages.less @@ -634,7 +634,7 @@ opacity : .7; animation : playlistArtworkFadeIn 1s var(--appleEase); - .artworkMaterial>img { + .artworkMaterial img { filter : brightness(100%) blur(80px) saturate(100%) contrast(1); object-position: center; object-fit : cover; @@ -962,6 +962,10 @@ right : 28px; } + &.animated .artist-header { + min-height: 500px; + } + .artist-header { //background: linear-gradient(45deg, var(--keyColor), #0e0e0e); color : white; @@ -977,6 +981,19 @@ // margin-top: -16px; } + .artist-hero { + height:100%; + position: absolute; + top:0; + left:0; + right:0; + bottom:0; + + .mediaitem-artwork { + border-radius: 0px; + } + } + .artworkContainer { position : absolute; @@ -990,7 +1007,7 @@ opacity : .7; animation : playlistArtworkFadeIn 1s var(--appleEase); - .artworkMaterial>img { + .artworkMaterial img { filter : brightness(100%) blur(80px) saturate(100%) contrast(1); object-position: center; object-fit : cover; @@ -1013,6 +1030,7 @@ position : absolute; overflow : hidden; box-shadow: rgb(0 0 0 / 50%) 0 0 0 1000000px inset; + z-index: 1; video { overflow : hidden; diff --git a/src/renderer/main/vueapp.js b/src/renderer/main/vueapp.js index 526bb3b5..bb4cba59 100644 --- a/src/renderer/main/vueapp.js +++ b/src/renderer/main/vueapp.js @@ -926,6 +926,15 @@ const app = new Vue({ } }) + this.mk.addEventListener(MusicKit.Events.timedMetadataDidChange, (e) => { + app.mk.nowPlayingItem.attributes.name = e.title + app.mk.nowPlayingItem.attributes.artistName = e.performer + app.mk.nowPlayingItem.attributes.albumName = e.album + app.currentArtUrl = e.links[0].url + app.mk.nowPlayingItem._songId = e._adamId ? e._adamId : -1 + app.mk.nowPlayingItem.id = e._adamId ? e._adamId : -1 + }) + this.mk.addEventListener(MusicKit.Events.nowPlayingItemDidChange, (a) => { if (self.$refs.queue) { self.$refs.queue.updateQueue(); @@ -1176,9 +1185,20 @@ const app = new Vue({ }, getAppClasses() { let classes = {} - if (this.cfg.advanced.experiments.includes('compactui')) { - classes.compact = true + switch (this.getThemeDirective('forceUI') ?? "none") { + case "compact": + classes.compact = true; + break; + case "standard": + classes.compact = false; + break; + default: + if (this.cfg.advanced.experiments.includes('compactui')) { + classes.compact = true; + } + break; } + if (this.cfg.visual.window_background_style == "none") { classes.simplebg = true } @@ -1986,14 +2006,21 @@ const app = new Vue({ }, async getNowPlayingItemDetailed(target) { + let nowPlayingItem = JSON.parse(JSON.stringify(this.mk.nowPlayingItem)) + if(nowPlayingItem.type === "radioStation" && app.mk.nowPlayingItem.id !== -1) { + nowPlayingItem.playParams = {kind: "songs"} + nowPlayingItem.attributes.playParams.catalogId = app.mk.nowPlayingItem.id + nowPlayingItem.attributes.playParams.id = app.mk.nowPlayingItem.id + nowPlayingItem.id = app.mk.nowPlayingItem.id + } try { - let u = await app.mkapi(app.mk.nowPlayingItem.playParams.kind, - (app.mk.nowPlayingItem.songId == -1), - (app.mk.nowPlayingItem.songId != -1) ? app.mk.nowPlayingItem.songId : app.mk.nowPlayingItem["id"], + let u = await app.mkapi(nowPlayingItem.playParams.kind, + (nowPlayingItem.songId == -1), + (nowPlayingItem.songId != -1) ? nowPlayingItem.songId : nowPlayingItem["id"], { "include[songs]": "albums,artists", l: app.mklang }); app.searchAndNavigate(u.data.data[0], target) } catch (e) { - app.searchAndNavigate(app.mk.nowPlayingItem, target) + app.searchAndNavigate(nowPlayingItem, target) } }, async searchAndNavigate(item, target) { @@ -4316,7 +4343,15 @@ const app = new Vue({ this.showMenuPanel(menus[useMenu], event) try { - let result = await this.inLibrary([this.mk.nowPlayingItem]) + // if its a radio station, then change the attributes to match a song + const nowPlayingItem = JSON.parse(JSON.stringify(this.mk.nowPlayingItem)) + if(nowPlayingItem.type == "radioStation" && app.mk.nowPlayingItem.id != -1) { + nowPlayingItem.type = "song" + nowPlayingItem.attributes.playParams.catalogId = app.mk.nowPlayingItem.id + nowPlayingItem.attributes.playParams.id = app.mk.nowPlayingItem.id + nowPlayingItem.id = app.mk.nowPlayingItem.id + } + let result = await this.inLibrary([nowPlayingItem]) if (result[0].attributes.inLibrary) { menus.normal.items.find(x => x.id == 'addToLibrary').hidden = true menus.normal.items.find(x => x.id == 'removeFromLibrary').hidden = false diff --git a/src/renderer/style.less b/src/renderer/style.less index fb15e61b..443837a2 100644 --- a/src/renderer/style.less +++ b/src/renderer/style.less @@ -1,9 +1,8 @@ @import url("assets/fonts/Pretendard/pretendardvariable.css"); -@import url('https://fonts.googleapis.com/css2?family=Noto+Sans+JP:wght@100;300;400;500;700;900&display=swap'); -@import url("https://fonts.googleapis.com/css2?family=Noto+Sans+SC:wght@100;300;400;500;700;900&display=swap"); -@import url("https://fonts.googleapis.com/css2?family=Noto+Sans+HK:wght@100;300;400;500;700;900&display=swap"); -@import url("https://fonts.googleapis.com/css2?family=Noto+Sans+TC:wght@100;300;400;500;700;900&display=swap"); +@import url("https://fonts.googleapis.com/css2?family=Noto+Sans+JP:wght@100;300;400;500;700;900&display=swap"); @import url("https://fonts.googleapis.com/css2?family=Noto+Sans+KR:wght@100;300;400;500;700;900&display=swap"); +@import url("https://fonts.googleapis.com/css2?family=Noto+Sans+TC:wght@100;300;400;500;700;900&display=swap"); +@import url("https://fonts.googleapis.com/css2?family=Noto+Sans+SC:wght@100;300;400;500;700;900&display=swap"); @import url("less/appvars.less"); @import url("less/bootstrap-vue.min.less"); @import url("less/ameframework.less"); @@ -69,7 +68,7 @@ body { background-size: cover; background-position: center; background: #0000; - font-family: "Pretendard Variable", -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif; + font-family: "Pretendard Variable", "Noto Sans JP", "Noto Sans KR", "Noto Sans TC", "Noto Sans SC", -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif; transition: opacity .10s var(--appleEase); } @@ -311,19 +310,19 @@ a.dropdown-item { overflow: hidden; pointer-events: none; - > img { + img { position: absolute; width: 200%; opacity: 0.5; filter: brightness(200%) blur(180px) saturate(280%) contrast(2); } - > img:first-child { + img:first-child { top: 0; left: 0; } - > img:last-child { + img:last-child { bottom: 0; right: 0; transform: rotate(180deg); @@ -1163,52 +1162,47 @@ input[type=range].web-slider::-webkit-slider-runnable-track { &-macos { width: 100px; } -} -.app-chrome .app-chrome-item > .window-controls > div { - height: 100%; - width: 32px; -} - -.app-chrome .app-chrome-item > .window-controls > div:hover { - background: rgb(200 200 200 / 10%); -} - -.app-chrome .app-chrome-item > .window-controls > div.close { - width: 100%; - height: 100%; - background-image: var(--gfx-closeBtn); - background-position: center; - background-repeat: no-repeat; - -webkit-app-region: no-drag; - - &:hover { - background-color: rgb(196, 43, 28) + > div { + height: 100%; + width: 32px; + &:hover { + background: rgb(200 200 200 / 10%); + } + &.close { + width: 100%; + height: 100%; + background-image: var(--gfx-closeBtn); + background-position: center; + background-repeat: no-repeat; + -webkit-app-region: no-drag; + + &:hover { + background-color: rgb(196, 43, 28) + } + } + &.minmax { + background-image: var(--gfx-maxBtn); + background-position: center; + background-repeat: no-repeat; + -webkit-app-region: no-drag; + width: 100%; + height: 100%; + } + &.minmax.restore { + background-image: var(--gfx-restoreBtn); + } + &.minimize { + background-image: var(--gfx-minBtn); + background-position: center; + background-repeat: no-repeat; + -webkit-app-region: no-drag; + width: 100%; + height: 100%; + } } } -.app-chrome .app-chrome-item > .window-controls > div.minmax { - background-image: var(--gfx-maxBtn); - background-position: center; - background-repeat: no-repeat; - -webkit-app-region: no-drag; - width: 100%; - height: 100%; -} - -.app-chrome .app-chrome-item > .window-controls > div.minmax.restore { - background-image: var(--gfx-restoreBtn); -} - -.app-chrome .app-chrome-item > .window-controls > div.minimize { - background-image: var(--gfx-minBtn); - background-position: center; - background-repeat: no-repeat; - -webkit-app-region: no-drag; - width: 100%; - height: 100%; -} - body[platform="darwin"] .app-chrome .app-chrome-item > .window-controls > div.minimize { display: none; } @@ -1452,10 +1446,13 @@ div[data-type="musicVideo"] .info-rect .title::before { background-position: center; background-size: contain; background-repeat: no-repeat; - border-radius: 4px; + border-radius: var(--mediaItemRadiusSmall); flex: 0 0 auto; margin: 6px; image-rendering: -webkit-optimize-contrast; + .mediaitem-artwork { + border-radius: var(--mediaItemRadiusSmall); + } } .app-chrome .app-chrome-item > .app-playback-controls .actions { @@ -1656,7 +1653,7 @@ input[type="range"].web-slider.display--small::-webkit-slider-thumb { overflow-x: hidden; display: flex; flex-flow: column; - font-family: "Pretendard Variable", -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif; + font-family: "Pretendard Variable", "Noto Sans JP", "Noto Sans KR", "Noto Sans TC", "Noto Sans SC", -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif; } .lyric-body .no-lyrics { @@ -1761,7 +1758,7 @@ input[type="range"].web-slider.display--small::-webkit-slider-thumb { .lyrics-translation { font-size: 1.6rem; font-weight: 450; - font-family: "Pretendard Variable", -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif; + font-family: "Pretendard Variable", "Noto Sans JP", "Noto Sans KR", "Noto Sans TC", "Noto Sans SC", -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif; filter: contrast(0.5); } @@ -3475,22 +3472,7 @@ body.no-gpu { } .close-btn { - width: 50px; - height: 100%; - background-image: var(--gfx-closeBtn); - background-position: center; - background-repeat: no-repeat; - -webkit-app-region: no-drag; - appearance: none; - border: 0; - background-color: transparent; - position: absolute; - top: 0; - right: 0; - - &:hover { - background-color: rgb(196, 43, 28) - } + .menu-panel.menu-header-text.close-btn } } diff --git a/src/renderer/themes/sweetener.less b/src/renderer/themes/sweetener.less index 18e029f4..1d40e315 100644 --- a/src/renderer/themes/sweetener.less +++ b/src/renderer/themes/sweetener.less @@ -57,10 +57,6 @@ .cd-mediaitem-square:not(.mediaitem-card) { transition : transform .2s var(--appleEase); transition-delay: .1s; - padding : 12px; - - // background-color: red; - height: 220px; .artwork-container {} @@ -73,9 +69,16 @@ transition-delay: .05s; } + .artwork-container { + transform : scale(0.962) translateZ(0); + transition : transform .1s var(--appleEase); + transition-delay: 0s; + transform-origin: center; + } + &:hover { .artwork-container { - transform : scale(1.1); + transform : scale(1.0); transition : transform .1s var(--appleEase); transition-delay: 0s; transform-origin: center; diff --git a/src/renderer/views/app/chrome-bottom.ejs b/src/renderer/views/app/chrome-bottom.ejs index 2a3ede26..f54a4254 100644 --- a/src/renderer/views/app/chrome-bottom.ejs +++ b/src/renderer/views/app/chrome-bottom.ejs @@ -10,10 +10,10 @@
- +
- +
{{ mk.nowPlayingItem["attributes"]["name"] }}
{{ mk.nowPlayingItem["attributes"]["artistName"] }}
@@ -60,6 +60,19 @@
+ diff --git a/src/renderer/views/app/chrome-top.ejs b/src/renderer/views/app/chrome-top.ejs index b1f461a8..42522d5e 100644 --- a/src/renderer/views/app/chrome-top.ejs +++ b/src/renderer/views/app/chrome-top.ejs @@ -89,10 +89,10 @@
- +
- +
{{ mk.nowPlayingItem["attributes"]["name"] }} @@ -183,6 +183,18 @@
+
diff --git a/src/renderer/views/components/artist-chip.ejs b/src/renderer/views/components/artist-chip.ejs index 098f773a..eed505fc 100644 --- a/src/renderer/views/components/artist-chip.ejs +++ b/src/renderer/views/components/artist-chip.ejs @@ -1,7 +1,9 @@ diff --git a/src/renderer/views/components/fullscreen.ejs b/src/renderer/views/components/fullscreen.ejs index 658fdc2b..038d2b80 100644 --- a/src/renderer/views/components/fullscreen.ejs +++ b/src/renderer/views/components/fullscreen.ejs @@ -14,7 +14,9 @@
@@ -149,6 +151,37 @@ return { app: this.$root, tabMode: "lyrics", + video: null + } + }, + async mounted() { + if (app.mk.nowPlayingItem._container.type == "albums") { + try { + const result = (await app.mk.api.v3.music(`/v1/catalog/${app.mk.storefrontId}/${app.mk.nowPlayingItem._container.type}/${app.mk.nowPlayingItem._container.id}`, { + "fields": "editorialArtwork,editorialVideo", + })).data.data[0].attributes?.editorialVideo?.motionDetailSquare?.video + if (result) { + this.video = result + } else { + this.video = null + } + } catch (e) { + this.video = null + e = null + } + } else if (app.mk.nowPlayingItem._container.type == "library-albums") { + try { + const result = (await app.mk.api.v3.music(`/v1/me/library/albums/${app.mk.nowPlayingItem._container.id}/catalog` + , { "fields": "editorialArtwork,editorialVideo" })).data.data[0].attributes?.editorialVideo?.motionDetailSquare?.video + if (result) { + this.video = result + } else { + this.video = null + } + } catch (e) { + e = null + this.video = null + } } }, beforeMount() { diff --git a/src/renderer/views/components/mediaitem-square.ejs b/src/renderer/views/components/mediaitem-square.ejs index 385a463e..3ace5791 100644 --- a/src/renderer/views/components/mediaitem-square.ejs +++ b/src/renderer/views/components/mediaitem-square.ejs @@ -87,6 +87,11 @@ default: false, required: false }, + noScale: { + type: Boolean, + default: false, + required: false + }, 'contextExt': { type: Object, required: false }, }, data: function () { @@ -251,6 +256,10 @@ }, getClasses() { let type = [] + let classes = [] + if(this.noScale) { + classes.push("noscale") + } try { type = this.item.type @@ -263,25 +272,26 @@ } switch (type) { default: - return [] + break; case "editorial-elements": case "card": - return ["mediaitem-card"] + classes.push("mediaitem-card") break; case "385": // editorial - return ["mediaitem-brick"] + classes.push("mediaitem-brick") break; case "small": - return ["mediaitem-small"] + classes.push("mediaitem-small") break; case "music-videos": case "uploadedVideo": case "uploaded-videos": case "library-music-videos": - return "mediaitem-video"; + classes.push("mediaitem-video") break; } + return classes }, visibilityChanged: function (isVisible, entry) { this.isVisible = isVisible diff --git a/src/renderer/views/main.ejs b/src/renderer/views/main.ejs index dff0e197..2b04567d 100644 --- a/src/renderer/views/main.ejs +++ b/src/renderer/views/main.ejs @@ -71,7 +71,7 @@
<%- include("../assets/cider-round.svg") %>
-
+
<%- include('app/chrome-top'); %> @@ -105,7 +105,8 @@ <% } %> - +