Merge branch 'ciderapp:main' into main

This commit is contained in:
Bill Zhang 2022-06-14 21:05:14 +08:00 committed by GitHub
commit a174cb9d32
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
19 changed files with 338 additions and 184 deletions

View file

@ -3,7 +3,7 @@ version: 2.1
executors: executors:
cider-ci: cider-ci:
docker: docker:
- image: circleci/node:16 - image: cimg/node:lts-browsers
working_directory: ~/Cider working_directory: ~/Cider
orbs: # Add orbs to your configuration orbs: # Add orbs to your configuration
@ -15,15 +15,9 @@ jobs:
executor: cider-ci executor: cider-ci
steps: steps:
- checkout - checkout
# - run:
# name: Rename Repository
# command: sed -i 's/github:ciderapp\/Cider/github:ciderapp\/cider-releases/' package.json
- run: - run:
name: Update Version Number of App name: Update Version Number of App
command: sudo chmod +x resources/version.sh && ./resources/version.sh || true 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: - restore_cache:
name: Restore Yarn Package Cache name: Restore Yarn Package Cache
keys: keys:
@ -60,9 +54,6 @@ jobs:
steps: steps:
- attach_workspace: - attach_workspace:
at: ~/Cider at: ~/Cider
# - run:
# name: Fix Versioning and Add Channel
# command: yarn circle:script
- run: - run:
name: Generate Builds (Linux) name: Generate Builds (Linux)
command: yarn electron-builder -l -p never command: yarn electron-builder -l -p never
@ -89,9 +80,6 @@ jobs:
sudo dpkg --add-architecture i386 sudo dpkg --add-architecture i386
sudo apt-get update -y sudo apt-get update -y
sudo apt-get install -y wine32 sudo apt-get install -y wine32
# - run:
# name: Fix Versioning and Add Channel
# command: yarn circle:script
- run: - run:
name: Generate Builds (Windows) name: Generate Builds (Windows)
command: yarn electron-builder -w --x64 -p never command: yarn electron-builder -w --x64 -p never
@ -117,9 +105,6 @@ jobs:
sudo dpkg --add-architecture i386 sudo dpkg --add-architecture i386
sudo apt-get update -y sudo apt-get update -y
sudo apt-get install -y wine32 sudo apt-get install -y wine32
# - run:
# name: Fix Versioning and Add Channel
# command: yarn circle:script
- run: - run:
name: Generate Builds (Winget) name: Generate Builds (Winget)
command: yarn electron-builder --win -c winget.json -p never command: yarn electron-builder --win -c winget.json -p never
@ -156,9 +141,6 @@ jobs:
mv ~/Cider/dist/*.blockmap ~/Cider/dist/artifacts mv ~/Cider/dist/*.blockmap ~/Cider/dist/artifacts
- store_artifacts: - store_artifacts:
path: ~/Cider/dist/artifacts path: ~/Cider/dist/artifacts
# - run:
# name: Fix Versioning and Add Channel
# command: yarn circle:script
- run: - run:
name: Update Version Number of App name: Update Version Number of App
command: sudo chmod +x resources/version.sh && ./resources/version.sh || true command: sudo chmod +x resources/version.sh && ./resources/version.sh || true

View file

@ -2,7 +2,7 @@
"i18n.languageName": "English (UK)", "i18n.languageName": "English (UK)",
"i18n.languageNameEnglish": "English (UK)", "i18n.languageNameEnglish": "English (UK)",
"i18n.category": "main", "i18n.category": "main",
"i18n.authors": "Core, inalone, nosh118", "i18n.authors": "Core, inalone, nosh118, booploops",
"date.format": "${d} ${m}, ${y}", "date.format": "${d} ${m}, ${y}",
"term.equalizer": "Equaliser", "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.", "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": { "term.track": {
"one" : "song", "one" : "song",
"other" : "songs" "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"
} }

View file

@ -53,6 +53,7 @@ export class BrowserWindow {
dev: app.isPackaged, dev: app.isPackaged,
osRelease: os.release(), osRelease: os.release(),
updatable: !process.windowsStore || !process.mas, updatable: !process.windowsStore || !process.mas,
useV3: utils.getStoreValue('advanced.experiments').includes("ampv3"),
components: [ components: [
"pages/podcasts", "pages/podcasts",
"pages/apple-account-settings", "pages/apple-account-settings",
@ -849,6 +850,7 @@ export class BrowserWindow {
}) })
ipcMain.handle("get-github-plugin", async (event, url) => { ipcMain.handle("get-github-plugin", async (event, url) => {
await this.StopWatcher()
const returnVal = { const returnVal = {
success: true, success: true,
theme: null, theme: null,
@ -893,9 +895,11 @@ export class BrowserWindow {
returnVal.success = false; returnVal.success = false;
} }
BrowserWindow.win.webContents.send("plugin-installed", returnVal); BrowserWindow.win.webContents.send("plugin-installed", returnVal);
this.StartWatcher(utils.getPath('themes'));
}); });
ipcMain.handle("get-github-theme", async (event, url) => { ipcMain.handle("get-github-theme", async (event, url) => {
await this.StopWatcher()
const returnVal = { const returnVal = {
success: true, success: true,
theme: null, theme: null,
@ -940,6 +944,8 @@ export class BrowserWindow {
returnVal.success = false; returnVal.success = false;
} }
BrowserWindow.win.webContents.send("theme-installed", returnVal); BrowserWindow.win.webContents.send("theme-installed", returnVal);
this.StartWatcher(utils.getPath('themes'));
BrowserWindow.win.webContents.send("theme-update", "")
}); });
ipcMain.on("get-themes", (event, _key) => { ipcMain.on("get-themes", (event, _key) => {

View file

@ -400,15 +400,15 @@
.listitem-content { .listitem-content {
width: 100%; width: 100%;
height: 60px; height: 60px;
display: flex; display: flex;
flex: 0 0 auto; flex: 0 0 auto;
flex-direction: row; flex-direction: row;
font-size: 14px; font-size: 14px;
justify-content: center-between; justify-content: center-between;
align-items: center; align-items: center;
border-radius: var(--mediaItemRadius); border-radius: var(--mediaItemRadius);
position: relative; position: relative;
} }
&:hover { &:hover {
@ -444,6 +444,7 @@
.mediaitem-artwork { .mediaitem-artwork {
border-radius: var(--mediaItemRadiusSmall); border-radius: var(--mediaItemRadiusSmall);
} }
.overlay-play { .overlay-play {
background: rgba(0, 0, 0, 0.5); background: rgba(0, 0, 0, 0.5);
opacity: 0; opacity: 0;
@ -957,6 +958,7 @@
/* mediaitem-square */ /* mediaitem-square */
.cd-mediaitem-square { .cd-mediaitem-square {
--transitionDuration: .25s;
--scaleRate: 1.25; --scaleRate: 1.25;
--scaleRateArtwork: 1; --scaleRateArtwork: 1;
width: 200px; width: 200px;
@ -968,6 +970,7 @@
justify-content: center; justify-content: center;
align-items: center; align-items: center;
border-radius: 6px; border-radius: 6px;
transition: width var(--transitionDuration) linear, height var(--transitionDuration) linear;
.artwork-container { .artwork-container {
position: relative; position: relative;
@ -982,6 +985,7 @@
flex: 0 0 auto; flex: 0 0 auto;
margin: 6px; margin: 6px;
cursor: pointer; cursor: pointer;
transition: width var(--transitionDuration) linear, height var(--transitionDuration) linear;
.mediaitem-artwork { .mediaitem-artwork {
box-shadow: unset; box-shadow: unset;
@ -1055,16 +1059,33 @@
} }
} }
@media (min-width: 1600px) { &:not(.mediaitem-card):not(.mediaitem-brick):not(.mediaitem-video):not(.noscale) {
width: calc(200px * var(--scaleRate)); @media (min-width: 1460px) {
height: calc(200px * var(--scaleRate)); --scaleRate: 1.1;
--scaleRateArtwork: 0.9;
width: calc(200px * var(--scaleRate));
height: calc(200px * var(--scaleRate));
.artwork-container > .artwork { .artwork-container > .artwork {
width: calc(190px * var(--scaleRateArtwork)); width: calc(190px * var(--scaleRateArtwork));
height: 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 { .info-rect {
width: 90%; width: 90%;
height: 100%; height: 100%;
@ -1112,8 +1133,6 @@
} }
&.mediaitem-video { &.mediaitem-video {
--scaleRate: 1.25;
--scaleRateArtwork: 1.25;
height: 200px; height: 200px;
width: 240px; width: 240px;
@ -1122,13 +1141,29 @@
width: 212px; width: 212px;
} }
@media (min-width: 1600px) { &:not(.noscale) {
width: calc(240px * var(--scaleRate)); @media (min-width: 1460px) {
height: calc(200px * var(--scaleRate)); --scaleRate: 1.1;
--scaleRateArtwork: 1.1;
.artwork-container > .artwork { width: calc(240px * var(--scaleRate));
width: calc(212px * var(--scaleRateArtwork)); height: calc(200px * var(--scaleRate));
height: calc(120px * var(--scaleRateArtwork));
.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; height: 123px;
width: 220px; 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 { &.mediaitem-small {
@ -1169,7 +1230,7 @@
overflow: hidden; overflow: hidden;
border-radius: 0px; border-radius: 0px;
margin: 0; margin: 0;
transition: width var(--transitionDuration) linear, height var(--transitionDuration) linear, filter 0.2s ease-in-out;
.mediaitem-artwork { .mediaitem-artwork {
border-radius: 0px; border-radius: 0px;
@ -1183,6 +1244,8 @@
padding: 10px 10px 14px; padding: 10px 10px 14px;
position: relative; position: relative;
width: 100%; width: 100%;
display: grid;
align-content: center;
&::before { &::before {
background: var(--bgartwork); background: var(--bgartwork);
@ -1197,6 +1260,7 @@
z-index: 0; z-index: 0;
opacity: 1; opacity: 1;
filter: brightness(0.5) blur(50px) saturate(180%); filter: brightness(0.5) blur(50px) saturate(180%);
transition: filter 0.2s ease-in-out;
} }
} }
@ -1211,7 +1275,7 @@
& + .subtitle { & + .subtitle {
max-height: none !important; max-height: none !important;
margin-top: -0.5em; // margin-top: -0.5em;
} }
} }
@ -1241,14 +1305,34 @@
border-radius: inherit; border-radius: inherit;
} }
//@media (min-width: 1600px) { &:hover {
// width: calc(230px * 1.25); .artwork{
// height: calc(298px * 1.25); filter: brightness(0.8);
// .artwork-container>.artwork { }
// width: calc(230px * 1.25); .info-rect-card::before {
// height: calc(230px * 1.25); 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);
}
}
}
} }
} }

View file

@ -153,22 +153,8 @@
} }
.close-btn { .close-btn {
width : 50px; .menu-panel.menu-header-text.close-btn
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)
}
} }
} }
} }
@ -191,22 +177,7 @@
} }
.close-btn { .close-btn {
width : 50px; .menu-panel.menu-header-text.close-btn
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)
}
} }
} }
@ -371,23 +342,31 @@
} }
} }
.menu-header-text { .menu-header-text {
margin: 18px 6px; margin: 18px 6px;
.close-btn { .close-btn {
width : 50px; width: 36px;
height : 42px; height: 36px;
background-image : var(--gfx-closeBtn);
background-position: center; background-position: center;
background-repeat : no-repeat; background-repeat: no-repeat;
-webkit-app-region : no-drag; -webkit-app-region: no-drag;
appearance : none; appearance: none;
border : 0; border: 0;
background-color : transparent; background-color: transparent;
position : absolute; position: absolute;
top : 0; top: 10px;
right : 0; right: 10px;
border-radius: 50px;
display: grid;
align-content: center;
&:before {
content: "";
font-family: "codicon";
color: var(--textColor);
font-size: 20px;
}
&:hover { &:hover {
background-color: rgb(196, 43, 28) background-color: rgb(196, 43, 28)
@ -505,7 +484,8 @@
.popover-artwork { .popover-artwork {
width: 200px; width: 200px;
height: 200px; height: 200px;
margin: 0 0 20px 0; margin: 0 auto;
margin-bottom: 20px;
} }
.song-name { .song-name {

View file

@ -3,4 +3,57 @@ body[platform="linux"] {
#window-controls-container { #window-controls-container {
//display: none; //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 : "";
}
}
}
} }

View file

@ -634,7 +634,7 @@
opacity : .7; opacity : .7;
animation : playlistArtworkFadeIn 1s var(--appleEase); animation : playlistArtworkFadeIn 1s var(--appleEase);
.artworkMaterial>img { .artworkMaterial img {
filter : brightness(100%) blur(80px) saturate(100%) contrast(1); filter : brightness(100%) blur(80px) saturate(100%) contrast(1);
object-position: center; object-position: center;
object-fit : cover; object-fit : cover;
@ -990,7 +990,7 @@
opacity : .7; opacity : .7;
animation : playlistArtworkFadeIn 1s var(--appleEase); animation : playlistArtworkFadeIn 1s var(--appleEase);
.artworkMaterial>img { .artworkMaterial img {
filter : brightness(100%) blur(80px) saturate(100%) contrast(1); filter : brightness(100%) blur(80px) saturate(100%) contrast(1);
object-position: center; object-position: center;
object-fit : cover; object-fit : cover;

View file

@ -311,19 +311,19 @@ a.dropdown-item {
overflow: hidden; overflow: hidden;
pointer-events: none; pointer-events: none;
> img { img {
position: absolute; position: absolute;
width: 200%; width: 200%;
opacity: 0.5; opacity: 0.5;
filter: brightness(200%) blur(180px) saturate(280%) contrast(2); filter: brightness(200%) blur(180px) saturate(280%) contrast(2);
} }
> img:first-child { img:first-child {
top: 0; top: 0;
left: 0; left: 0;
} }
> img:last-child { img:last-child {
bottom: 0; bottom: 0;
right: 0; right: 0;
transform: rotate(180deg); transform: rotate(180deg);
@ -1163,52 +1163,47 @@ input[type=range].web-slider::-webkit-slider-runnable-track {
&-macos { &-macos {
width: 100px; width: 100px;
} }
}
.app-chrome .app-chrome-item > .window-controls > div { > div {
height: 100%; height: 100%;
width: 32px; width: 32px;
} &:hover {
background: rgb(200 200 200 / 10%);
.app-chrome .app-chrome-item > .window-controls > div:hover { }
background: rgb(200 200 200 / 10%); &.close {
} width: 100%;
height: 100%;
.app-chrome .app-chrome-item > .window-controls > div.close { background-image: var(--gfx-closeBtn);
width: 100%; background-position: center;
height: 100%; background-repeat: no-repeat;
background-image: var(--gfx-closeBtn); -webkit-app-region: no-drag;
background-position: center;
background-repeat: no-repeat; &:hover {
-webkit-app-region: no-drag; background-color: rgb(196, 43, 28)
}
&: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 { body[platform="darwin"] .app-chrome .app-chrome-item > .window-controls > div.minimize {
display: none; display: none;
} }
@ -1452,10 +1447,13 @@ div[data-type="musicVideo"] .info-rect .title::before {
background-position: center; background-position: center;
background-size: contain; background-size: contain;
background-repeat: no-repeat; background-repeat: no-repeat;
border-radius: 4px; border-radius: var(--mediaItemRadiusSmall);
flex: 0 0 auto; flex: 0 0 auto;
margin: 6px; margin: 6px;
image-rendering: -webkit-optimize-contrast; image-rendering: -webkit-optimize-contrast;
.mediaitem-artwork {
border-radius: var(--mediaItemRadiusSmall);
}
} }
.app-chrome .app-chrome-item > .app-playback-controls .actions { .app-chrome .app-chrome-item > .app-playback-controls .actions {
@ -3475,22 +3473,7 @@ body.no-gpu {
} }
.close-btn { .close-btn {
width: 50px; .menu-panel.menu-header-text.close-btn
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)
}
} }
} }

View file

@ -57,10 +57,6 @@
.cd-mediaitem-square:not(.mediaitem-card) { .cd-mediaitem-square:not(.mediaitem-card) {
transition : transform .2s var(--appleEase); transition : transform .2s var(--appleEase);
transition-delay: .1s; transition-delay: .1s;
padding : 12px;
// background-color: red;
height: 220px;
.artwork-container {} .artwork-container {}
@ -73,9 +69,16 @@
transition-delay: .05s; transition-delay: .05s;
} }
.artwork-container {
transform : scale(0.962) translateZ(0);
transition : transform .1s var(--appleEase);
transition-delay: 0s;
transform-origin: center;
}
&:hover { &:hover {
.artwork-container { .artwork-container {
transform : scale(1.1); transform : scale(1.0);
transition : transform .1s var(--appleEase); transition : transform .1s var(--appleEase);
transition-delay: 0s; transition-delay: 0s;
transform-origin: center; transform-origin: center;

View file

@ -10,10 +10,10 @@
<b-popover custom-class="mediainfo-popover" target="artworkLCD" triggers="hover" placement="right"> <b-popover custom-class="mediainfo-popover" target="artworkLCD" triggers="hover" placement="right">
<div class="content"> <div class="content">
<div class="shadow-artwork"> <div class="shadow-artwork">
<mediaitem-artwork :url="currentArtUrl" :url="currentArtUrlRaw"></mediaitem-artwork> <mediaitem-artwork :url="currentArtUrl"></mediaitem-artwork>
</div> </div>
<div class="popover-artwork"> <div class="popover-artwork">
<mediaitem-artwork :size="210" :url="currentArtUrlRaw"></mediaitem-artwork> <mediaitem-artwork :url="currentArtUrl"></mediaitem-artwork>
</div> </div>
<div class="song-name">{{ mk.nowPlayingItem["attributes"]["name"] }}</div> <div class="song-name">{{ mk.nowPlayingItem["attributes"]["name"] }}</div>
<div class="song-artist" @click="getNowPlayingItemDetailed(`artist`)">{{ mk.nowPlayingItem["attributes"]["artistName"] }}</div> <div class="song-artist" @click="getNowPlayingItemDetailed(`artist`)">{{ mk.nowPlayingItem["attributes"]["artistName"] }}</div>
@ -60,6 +60,19 @@
</div> </div>
</template> </template>
<template v-else>
<div class="app-playback-controls">
<div class="artwork" id="artworkLCD" style="pointer-events: none;">
<mediaitem-artwork :url="currentArtUrl"></mediaitem-artwork>
</div>
<div class="playback-info">
<div class="song-name">
</div>
</div>
</div>
</template>
</div> </div>
</div> </div>

View file

@ -89,10 +89,10 @@
<b-popover custom-class="mediainfo-popover" target="artworkLCD" triggers="hover" placement="bottom"> <b-popover custom-class="mediainfo-popover" target="artworkLCD" triggers="hover" placement="bottom">
<div class="content"> <div class="content">
<div class="shadow-artwork"> <div class="shadow-artwork">
<mediaitem-artwork :url="currentArtUrl" :url="currentArtUrlRaw"></mediaitem-artwork> <mediaitem-artwork :url="currentArtUrl"></mediaitem-artwork>
</div> </div>
<div class="popover-artwork"> <div class="popover-artwork">
<mediaitem-artwork :size="210" :url="currentArtUrlRaw"></mediaitem-artwork> <mediaitem-artwork :size="210" :url="currentArtUrl"></mediaitem-artwork>
</div> </div>
<div class="song-name"> <div class="song-name">
{{ mk.nowPlayingItem["attributes"]["name"] }} {{ mk.nowPlayingItem["attributes"]["name"] }}
@ -183,6 +183,18 @@
</template> </template>
</div> </div>
</template> </template>
<template v-else>
<div class="app-playback-controls">
<div class="artwork" id="artworkLCD" style="pointer-events: none;">
<mediaitem-artwork :url="currentArtUrl"></mediaitem-artwork>
</div>
<div class="playback-info">
<div class="info-rect">
</div>
</div>
</div>
</template>
</div> </div>
<div class="app-chrome-item" v-else> <div class="app-chrome-item" v-else>
<div class="top-nav-group"> <div class="top-nav-group">

View file

@ -1,7 +1,9 @@
<script type="text/x-template" id="artist-chip"> <script type="text/x-template" id="artist-chip">
<div class="artist-chip" @click.self="route" tabindex="0"> <div class="artist-chip" @click.self="route" tabindex="0">
<div class="artist-chip__image"> <div class="artist-chip__image" v-if="image" :style="{backgroundColor: '#' + (artist.attributes.artwork?.bgColor ?? '000')}">
<mediaitem-artwork v-if="artist.id != null" :url="artist.attributes.artwork.url" :size="32"></mediaitem-artwork> <mediaitem-artwork v-if="artist.id != null" :url="artist.attributes.artwork.url" :size="80"></mediaitem-artwork>
</div>
<div class="artist-chip__image" v-else>
</div> </div>
<div class="artist-chip__name"> <div class="artist-chip__name">
<span>{{ item.attributes.name }}</span> <span>{{ item.attributes.name }}</span>
@ -21,6 +23,7 @@
}, },
data: function() { data: function() {
return { return {
image: false,
artist: { artist: {
id: null id: null
} }
@ -34,6 +37,7 @@
} }
app.mk.api.v3.music(`/v1/catalog/${app.mk.storefrontId}/artists/${artistId}`).then(response => { app.mk.api.v3.music(`/v1/catalog/${app.mk.storefrontId}/artists/${artistId}`).then(response => {
this.artist = response.data.data[0]; this.artist = response.data.data[0];
this.image = true;
}); });
}, },
methods: { methods: {

View file

@ -1,6 +1,6 @@
<script type="text/x-template" id="artwork-material"> <script type="text/x-template" id="artwork-material">
<div class="artworkMaterial"> <div class="artworkMaterial">
<img :src="src" v-for="image in images"/> <mediaitem-artwork :url="src" :size="500" v-for="image in images"/>
</div> </div>
</script> </script>

View file

@ -87,6 +87,11 @@
default: false, default: false,
required: false required: false
}, },
noScale: {
type: Boolean,
default: false,
required: false
},
'contextExt': { type: Object, required: false }, 'contextExt': { type: Object, required: false },
}, },
data: function () { data: function () {
@ -251,6 +256,10 @@
}, },
getClasses() { getClasses() {
let type = [] let type = []
let classes = []
if(this.noScale) {
classes.push("noscale")
}
try { try {
type = this.item.type type = this.item.type
@ -263,25 +272,26 @@
} }
switch (type) { switch (type) {
default: default:
return []
break; break;
case "editorial-elements": case "editorial-elements":
case "card": case "card":
return ["mediaitem-card"] classes.push("mediaitem-card")
break; break;
case "385": // editorial case "385": // editorial
return ["mediaitem-brick"] classes.push("mediaitem-brick")
break; break;
case "small": case "small":
return ["mediaitem-small"] classes.push("mediaitem-small")
break; break;
case "music-videos": case "music-videos":
case "uploadedVideo": case "uploadedVideo":
case "uploaded-videos": case "uploaded-videos":
case "library-music-videos": case "library-music-videos":
return "mediaitem-video"; classes.push("mediaitem-video")
break; break;
} }
return classes
}, },
visibilityChanged: function (isVisible, entry) { visibilityChanged: function (isVisible, entry) {
this.isVisible = isVisible this.isVisible = isVisible

View file

@ -105,7 +105,8 @@
<% } %> <% } %>
<script async src="https://js-cdn.music.apple.com/musickit/v3/amp/musickit.js" data-web-components></script> <script async src="<%- (env.useV3 ? "https://js-cdn.music.apple.com/musickit/v3/amp/musickit.js" : "https://js-cdn.music.apple.com/musickit/v2/amp/musickit.js" ) %>" data-web-components>
</script>
<script src="index.js?v=1"></script> <script src="index.js?v=1"></script>
<script type="text/x-template" id="am-musiccovershelf"> <script type="text/x-template" id="am-musiccovershelf">

View file

@ -69,7 +69,7 @@
<div class="latestRelease" v-if="data.views['latest-release'].data.length != 0"> <div class="latestRelease" v-if="data.views['latest-release'].data.length != 0">
<h3>{{app.getLz('term.latestReleases')}}</h3> <h3>{{app.getLz('term.latestReleases')}}</h3>
<div style="width: auto;margin: 0 auto;"> <div style="width: auto;margin: 0 auto;">
<mediaitem-square kind="card" v-for="song in data.views['latest-release'].data" <mediaitem-square kind="card" :no-scale="true" v-for="song in data.views['latest-release'].data"
:item="song"> :item="song">
</mediaitem-square> </mediaitem-square>
</div> </div>

View file

@ -121,7 +121,7 @@
</div> </div>
</div> </div>
<div class="artworkContainer" v-if="data.attributes.artwork != null"> <div class="artworkContainer" v-if="data.attributes.artwork != null">
<artwork-material :url="data.attributes.artwork.url" size="260" images="1"></artwork-material> <artwork-material :url="data.attributes.artwork.url" size="500" images="1"></artwork-material>
</div> </div>
<button class="md-btn md-btn-small editTracksBtn" v-if="(data.attributes.canEdit && data.type == 'library-playlists')" @click="editing = !editing"> <button class="md-btn md-btn-small editTracksBtn" v-if="(data.attributes.canEdit && data.type == 'library-playlists')" @click="editing = !editing">
<span v-if="!editing"> <span v-if="!editing">

View file

@ -28,7 +28,7 @@
<h4>{{ loaded.attributes.uniqueSongCount }} {{$root.getLz('term.uniqueSongs')}}</h4> <h4>{{ loaded.attributes.uniqueSongCount }} {{$root.getLz('term.uniqueSongs')}}</h4>
</div> </div>
<div class="col-auto replay-playlist-container"> <div class="col-auto replay-playlist-container">
<mediaitem-square kind="card" :force-video="true" :item="loaded.playlist"></mediaitem-square> <mediaitem-square kind="card" :no-scale="true" :force-video="true" :item="loaded.playlist"></mediaitem-square>
</div> </div>
</div> </div>
<!-- Top Artists--> <!-- Top Artists-->

View file

@ -1185,6 +1185,20 @@
</div> </div>
</div> </div>
<div class="md-option-line">
<div class="md-option-segment">
Use MusicKit V3
<small>Requires relaunch</small>
</div>
<div class="md-option-segment md-option-segment_auto">
<label>
<input type="checkbox" v-model="app.cfg.advanced.experiments.includes('ampv3')"
@click="app.cfg.advanced.experiments.includes('ampv3') ? removeExperiment('ampv3') : addExperiment('ampv3')"
switch/>
</label>
</div>
</div>
<div class="md-option-line"> <div class="md-option-line">
<div class="md-option-segment"> <div class="md-option-segment">
{{$root.getLz('settings.option.advanced.playlistTrackMapping')}} {{$root.getLz('settings.option.advanced.playlistTrackMapping')}}