diff --git a/package.json b/package.json
index 469cf6a0..bba056ad 100644
--- a/package.json
+++ b/package.json
@@ -2,7 +2,7 @@
"name": "cider",
"applicationId": "Cider",
"productName": "Cider",
- "version": "1.5.4",
+ "version": "1.5.5",
"description": "A new cross-platform Apple Music experience based on Electron and Vue.js written from scratch with performance in mind.",
"license": "AGPL-3.0",
"main": "./build/index.js",
diff --git a/src/i18n/en_US.json b/src/i18n/en_US.json
index 95a2e860..f5f9ace8 100644
--- a/src/i18n/en_US.json
+++ b/src/i18n/en_US.json
@@ -632,17 +632,5 @@
"oobe.visual.subtitle": "",
"oobe.visual.text": "",
"oobe.visual.layout.text": "Cider features two window different layouts.\nMaverick is an iTunes like layout with the player at the top of the window.\nMojave is a new spin created by the Cider Collective.\n\nYou can change the layout any time in the settings.",
- "oobe.visual.suggestingThemes": "Theming is a great way to personalize your experience. Here are a few we suggest: ",
- "oobe.visual.suggestingThemes.subtext": "(These themes will be downloaded from GitHub)",
- "oobe.visual.suggestingThemes.default": "Cider",
- "oobe.visual.suggestingThemes.default.text": "The classic Cider theme.",
- "oobe.visual.suggestingThemes.dark": "Dark",
- "oobe.visual.suggestingThemes.dark.text": "Darkness.",
- "oobe.visual.suggestingThemes.community1": "Groovy",
- "oobe.visual.suggestingThemes.community1.text": "A WinUI influenced theme",
- "oobe.visual.suggestingThemes.community2": "iTheme",
- "oobe.visual.suggestingThemes.community2.text": "The classic big fruit layout.",
- "oobe.visual.suggestingThemes.community3": "Dracula",
- "oobe.visual.suggestingThemes.community3.text": "The iconic Dracula color scheme.",
"oobe.amsignin.title": ""
}
diff --git a/src/i18n/source/en_US.json b/src/i18n/source/en_US.json
index d25642e0..f5f9ace8 100644
--- a/src/i18n/source/en_US.json
+++ b/src/i18n/source/en_US.json
@@ -317,7 +317,7 @@
"menubar.options.toggledevtools": "Toggle Developer Tools",
"menubar.options.window": "Window",
"menubar.options.minimize": "Minimize",
- "menubar.options.plugins": "Plu-gins Menu",
+ "menubar.options.plugins": "Plugins Menu",
"menubar.options.controls": "Controls",
"menubar.options.volumeup": "Volume Up",
"menubar.options.volumedown": "Volume Down",
@@ -361,6 +361,8 @@
"settings.prompt.general.keybindings.update.success": "Keybind updated successfully. Press OK to relaunch Cider",
"settings.option.general.themeUpdateNotification": "Automatically check for theme updates",
"settings.option.general.showLovedTracksInline": "Show loved tracks inline",
+ "settings.option.general.pagination": "Items to show per page",
+ "settings.options.general.pagination.description": "This determines how many songs/albums to show initially for infinite scrolling, or how many songs/albums to show for a single page",
"settings.description.search": "Search",
"settings.description.albums": "Library Albums",
"settings.description.artists": "Library Artists",
@@ -630,17 +632,5 @@
"oobe.visual.subtitle": "",
"oobe.visual.text": "",
"oobe.visual.layout.text": "Cider features two window different layouts.\nMaverick is an iTunes like layout with the player at the top of the window.\nMojave is a new spin created by the Cider Collective.\n\nYou can change the layout any time in the settings.",
- "oobe.visual.suggestingThemes": "Theming is a great way to personalize your experience. Here are a few we suggest: ",
- "oobe.visual.suggestingThemes.subtext": "(These themes will be downloaded from GitHub)",
- "oobe.visual.suggestingThemes.default": "Cider",
- "oobe.visual.suggestingThemes.default.text": "The classic Cider theme.",
- "oobe.visual.suggestingThemes.dark": "Dark",
- "oobe.visual.suggestingThemes.dark.text": "Darkness.",
- "oobe.visual.suggestingThemes.community1": "Groovy",
- "oobe.visual.suggestingThemes.community1.text": "A WinUI influenced theme",
- "oobe.visual.suggestingThemes.community2": "iTheme",
- "oobe.visual.suggestingThemes.community2.text": "The classic big fruit layout.",
- "oobe.visual.suggestingThemes.community3": "Dracula",
- "oobe.visual.suggestingThemes.community3.text": "The iconic Dracula color scheme.",
"oobe.amsignin.title": ""
}
diff --git a/src/main/base/browserwindow.ts b/src/main/base/browserwindow.ts
index 42f48b1e..4bd5f5dd 100644
--- a/src/main/base/browserwindow.ts
+++ b/src/main/base/browserwindow.ts
@@ -120,6 +120,11 @@ export class BrowserWindow {
"components/settings-plugins-github",
],
appRoutes: [
+ {
+ page: "lzedit",
+ component: ``,
+ condition: "$root.page == 'lzedit'",
+ },
{
page: "library-recentlyadded",
component: ``,
diff --git a/src/main/base/store.ts b/src/main/base/store.ts
index 424a22eb..ea0a1b31 100644
--- a/src/main/base/store.ts
+++ b/src/main/base/store.ts
@@ -189,7 +189,7 @@ export class Store {
transparent: false,
miniplayer_top_toggle: true,
directives: {
- windowLayout: "default",
+ windowLayout: "twopanel",
},
windowControlPosition: 0, // 0 default right
nativeTitleBar: false,
diff --git a/src/renderer/audio/audio.js b/src/renderer/audio/audio.js
index c276fd1d..62df318d 100644
--- a/src/renderer/audio/audio.js
+++ b/src/renderer/audio/audio.js
@@ -367,7 +367,7 @@ const CiderAudio = {
if (!CiderAudio.ccON) {
CiderAudio.ccON = true;
let searchInt = setInterval(async function () {
- if (CiderAudio.context != null && CiderAudio.audioNodes.gainNode != null) {
+ if (CiderAudio.context != null && CiderAudio.audioNodes.intelliGainComp != null) {
// var options = {
// mimeType: 'audio/webm; codecs=opus'
// };
diff --git a/src/renderer/index.js b/src/renderer/index.js
index a66bf2bb..e10700c2 100644
--- a/src/renderer/index.js
+++ b/src/renderer/index.js
@@ -228,7 +228,6 @@ function isJson(item) {
webGPU().then();
function showOobe() {
- return false;
if (localStorage.getItem("music.ampwebplay.media-user-token") && localStorage.getItem("seenOOBE")) {
return false;
} else {
diff --git a/src/renderer/less/elements.less b/src/renderer/less/elements.less
index 16cf0daf..19f960e7 100644
--- a/src/renderer/less/elements.less
+++ b/src/renderer/less/elements.less
@@ -908,7 +908,7 @@
}
.cd-mediaitem-mvview .artwork {
- height: 172px;
+ height: auto;
width: 300px;
background: blue;
border-top-left-radius: 6px;
@@ -918,6 +918,7 @@
flex: 0 0 auto;
margin: 6px;
margin-top: 0px;
+ aspect-ratio: 1.7435897435897436;
}
.cd-mediaitem-mvview-overlay {
diff --git a/src/renderer/less/pages.less b/src/renderer/less/pages.less
index f3287bce..ca38276f 100644
--- a/src/renderer/less/pages.less
+++ b/src/renderer/less/pages.less
@@ -1480,6 +1480,22 @@
}
}
+.i18n-page {
+ textarea {
+ background: black;
+ color: #eee;
+ font-weight: bold;
+ font-size: 1em;
+ font-family: system-ui, "Pretendard Variable";
+ padding: 0.5em;
+ }
+
+ .selectCol {
+ display: flex;
+ align-items: center;
+ }
+}
+
// AudioLabs page
.audiolabs-page {
padding: 0px;
diff --git a/src/renderer/main/app.js b/src/renderer/main/app.js
index 1db74112..71d3b012 100644
--- a/src/renderer/main/app.js
+++ b/src/renderer/main/app.js
@@ -10,6 +10,7 @@ import { MusicKitTools } from "./musickittools.js";
import { spawnMica } from "./mica.js";
import { svgIcon } from "./components/svg-icon.js";
import { sidebarLibraryItem } from "./components/sidebar-library-item.js";
+import { i18nEditor } from "./components/i18n-editor.js";
// Define window objects
window.app = app;
diff --git a/src/renderer/main/components/i18n-editor.js b/src/renderer/main/components/i18n-editor.js
new file mode 100644
index 00000000..0482fac6
--- /dev/null
+++ b/src/renderer/main/components/i18n-editor.js
@@ -0,0 +1,78 @@
+import { html } from "../html.js";
+
+export const i18nEditor = Vue.component("i18n-editor", {
+ // language=HTML
+ template: html`
+
+
+
+
i18n Editor
+
+
+
+
+
+
+
+
+
+
+
{{ key }}
+
+
+
+ {{variant}}
+
+
+
+
+
+
+
+
+
+
+ `,
+ data() {
+ return {
+ listing: ipcRenderer.sendSync("get-i18n-listing"),
+ baseLz: ipcRenderer.sendSync("get-i18n", "en_US"),
+ };
+ },
+ methods: {
+ exportLz() {
+ bootbox.alert(``);
+ notyf.success("Copied to clipboard");
+ navigator.clipboard.writeText(JSON.stringify(app.lz, true, " ")).then((r) => console.debug("Copied to clipboard."));
+ },
+ getLanguages: function () {
+ let langs = this.$root.lzListing;
+ let categories = {
+ main: [],
+ fun: [],
+ unsorted: [],
+ };
+ // sort by category if category is undefined or empty put it in "unsorted"
+ for (let i = 0; i < langs.length; i++) {
+ if (langs[i].category === undefined || langs[i].category === "") {
+ categories.unsorted.push(langs[i]);
+ } else {
+ categories[langs[i].category].push(langs[i]);
+ }
+ }
+ // return
+ return categories;
+ },
+ },
+});
diff --git a/src/renderer/main/events.js b/src/renderer/main/events.js
index 6da6906c..08df18ae 100644
--- a/src/renderer/main/events.js
+++ b/src/renderer/main/events.js
@@ -50,6 +50,7 @@ const Events = {
});
app.showCollection(hist.data, app.getLz("term.history"));
}
+ // CTRL+F10
if (event.ctrlKey && event.keyCode == 121) {
try {
app.mk._services.mediaItemPlayback._currentPlayer.stop();
@@ -57,7 +58,19 @@ const Events = {
try {
app.mk._services.mediaItemPlayback._currentPlayer.destroy();
} catch (e) {}
+ try {
+ let searchInt = setInterval(function () {
+ if (document.getElementById("apple-music-player")) {
+ //AudioOutputs.eqReady = true;
+ document.getElementById("apple-music-player").crossOrigin = "anonymous";
+ CiderAudio.source = CiderAudio.context.createMediaElementSource(document.getElementById("apple-music-player"));
+ CiderAudio.source.connect(CiderAudio.audioNodes.intelliGainComp);
+ clearInterval(searchInt);
+ }
+ }, 1000);
+ } catch (e) {}
}
+ // CTRL+F11
if (event.ctrlKey && event.keyCode == 122) {
try {
ipcRenderer.send("detachDT", "");
diff --git a/src/renderer/main/vueapp.js b/src/renderer/main/vueapp.js
index 50224de5..d61faf3c 100644
--- a/src/renderer/main/vueapp.js
+++ b/src/renderer/main/vueapp.js
@@ -22,6 +22,7 @@ const app = new Vue({
lzListing: ipcRenderer.sendSync("get-i18n-listing"),
search: {
term: "",
+ cursor: -1,
hints: [],
showHints: false,
results: {},
@@ -3875,6 +3876,17 @@ const app = new Vue({
break;
}
},
+ searchCursor(e) {
+ if (e.keyCode == "40") {
+ if (this.search.hints.length - 1 < this.search.cursor + 1) return;
+ this.search.cursor++;
+ this.search.term = this.search.hints[this.search.cursor];
+ } else if (e.keyCode == "38") {
+ if (this.search.cursor == 0) return;
+ this.search.cursor--;
+ this.search.term = this.search.hints[this.search.cursor];
+ }
+ },
async searchQuery(term = this.search.term) {
let self = this;
if (term == "") {
diff --git a/src/renderer/style.less b/src/renderer/style.less
index 3f8c9e5d..5efe0799 100644
--- a/src/renderer/style.less
+++ b/src/renderer/style.less
@@ -724,6 +724,7 @@ input[type="range"].web-slider::-webkit-slider-runnable-track {
.search-hints-container {
top: 44px;
+ background: rgb(30 30 30);
#cmenu.container();
.search-hints {
@@ -731,6 +732,10 @@ input[type="range"].web-slider::-webkit-slider-runnable-track {
.search-hint {
#cmenu.item();
+
+ &.active {
+ background: var(--keyColor);
+ }
}
}
}
diff --git a/src/renderer/views/app/chrome-top.ejs b/src/renderer/views/app/chrome-top.ejs
index 69f5ee1b..a65f0a7e 100644
--- a/src/renderer/views/app/chrome-top.ejs
+++ b/src/renderer/views/app/chrome-top.ejs
@@ -280,15 +280,16 @@
{search.showHints = false}, 300)"
- v-on:keyup.enter="searchQuery();search.showHints = false" @change="$root.appRoute('search');"
+ v-on:keyup.enter="searchQuery();search.showHints = false;search.cursor = -1" @change="$root.appRoute('search');"
+ v-on:keyup="searchCursor"
@input="getSearchHints()"
:placeholder="$root.getLz('term.search') + '...'" v-model="search.term" ref="searchInput"
class="search-input" />
-
diff --git a/src/renderer/views/components/mediaitem-mvview-sp.ejs b/src/renderer/views/components/mediaitem-mvview-sp.ejs
index 677d8d95..ea0bc5aa 100644
--- a/src/renderer/views/components/mediaitem-mvview-sp.ejs
+++ b/src/renderer/views/components/mediaitem-mvview-sp.ejs
@@ -15,7 +15,7 @@
diff --git a/src/renderer/views/components/sidebar.ejs b/src/renderer/views/components/sidebar.ejs
index a8aa371b..e11944eb 100644
--- a/src/renderer/views/components/sidebar.ejs
+++ b/src/renderer/views/components/sidebar.ejs
@@ -10,7 +10,8 @@
@click="$root.appRoute('search');"
@focus="$root.search.showHints = true"
@blur="$root.setTimeout(()=>{$root.search.showHints = false}, 300)"
- v-on:keyup.enter="$root.searchQuery();$root.search.showHints = false"
+ v-on:keyup.enter="$root.searchQuery();$root.search.showHints = false;$root.search.cursor = -1"
+ v-on:keyup="$root.searchCursor"
@change="$root.appRoute('search');"
@input="$root.getSearchHints()"
:placeholder="$root.getLz('term.search') + '...'"
@@ -27,7 +28,7 @@
{{ hint }}
diff --git a/src/renderer/views/pages/oobe.ejs b/src/renderer/views/pages/oobe.ejs
index ea0c1a24..e4486f35 100644
--- a/src/renderer/views/pages/oobe.ejs
+++ b/src/renderer/views/pages/oobe.ejs
@@ -6,10 +6,32 @@
-
{{ getLz("oobe.amupsell.text") }}
+
{{ getLz("oobe.amupsell.text") }}
+
+
+
+ {{$root.getLz('term.language')}}
+
+
+
+
+
+
+
@@ -25,7 +47,7 @@
@@ -37,11 +59,11 @@
- {{ getLz("oobe.general.text") }}
+
@@ -84,8 +106,8 @@
@@ -118,7 +140,7 @@
@@ -164,6 +186,24 @@
},
getLz() {
return this.$root.getLz.apply(this.$root, arguments);
+ },
+ getLanguages: function() {
+ let langs = this.$root.lzListing
+ let categories = {
+ "main": [],
+ "fun": [],
+ "unsorted": []
+ }
+ // sort by category if category is undefined or empty put it in "unsorted"
+ for (let i = 0; i < langs.length; i++) {
+ if (langs[i].category === undefined || langs[i].category === "") {
+ categories.unsorted.push(langs[i])
+ } else {
+ categories[langs[i].category].push(langs[i])
+ }
+ }
+ // return
+ return categories
}
}
});