Merge branch 'master' into try-folder-banner

~ Merge component spacing edits to the try-folder-banner branch
This commit is contained in:
geoffrey45
2022-08-02 03:18:21 +03:00
24 changed files with 195 additions and 126 deletions
+5 -4
View File
@@ -37,7 +37,6 @@ class RipAlbumImage:
class ValidateAlbumThumbs: class ValidateAlbumThumbs:
@staticmethod @staticmethod
def remove_obsolete(): def remove_obsolete():
""" """
@@ -54,6 +53,10 @@ class ValidateAlbumThumbs:
if e is None: if e is None:
os.remove(entry.path) os.remove(entry.path)
break
if os.path.getsize(entry.path) == 0:
os.remove(entry.path)
@staticmethod @staticmethod
def find_lost_thumbnails(): def find_lost_thumbnails():
@@ -61,9 +64,7 @@ class ValidateAlbumThumbs:
Re-rip lost album thumbnails Re-rip lost album thumbnails
""" """
entries = os.scandir(THUMBS_PATH) entries = os.scandir(THUMBS_PATH)
entries = [ entries = [Thumbnail(entry.name) for entry in entries if entry.is_file()]
Thumbnail(entry.name) for entry in entries if entry.is_file()
]
albums = helpers.Get.get_all_albums() albums = helpers.Get.get_all_albums()
thumbs = [(album.hash + ".webp") for album in albums] thumbs = [(album.hash + ".webp") for album in albums]
+6 -3
View File
@@ -9,7 +9,7 @@ from mutagen.id3 import ID3
from PIL import Image from PIL import Image
def return_album_art(filepath: str): def parse_album_art(filepath: str):
""" """
Returns the album art for a given audio file. Returns the album art for a given audio file.
""" """
@@ -36,9 +36,12 @@ def extract_thumb(filepath: str, webp_path: str) -> bool:
tsize = settings.THUMB_SIZE tsize = settings.THUMB_SIZE
if os.path.exists(img_path): if os.path.exists(img_path):
return True img_size = os.path.getsize(filepath)
album_art = return_album_art(filepath) if img_size > 0:
return True
album_art = parse_album_art(filepath)
if album_art is not None: if album_art is not None:
img = Image.open(BytesIO(album_art)) img = Image.open(BytesIO(album_art))
-7
View File
@@ -96,11 +96,4 @@ onStartTyping(() => {
display: none; display: none;
} }
} }
.content {
padding: 0 $small;
margin-top: $small;
overflow: auto;
padding-right: $small !important;
}
</style> </style>
-1
View File
@@ -4,7 +4,6 @@
.grid { .grid {
background-color: $primary; background-color: $primary;
display: grid;
height: 100%; height: 100%;
padding-right: $small; padding-right: $small;
+32 -24
View File
@@ -1,5 +1,6 @@
@import "../css/ProgressBar.scss"; @import "../css/ProgressBar.scss";
@import "mixins.scss"; @import "mixins.scss";
// @import "./moz.scss";
:root { :root {
--separator: #ffffff46; --separator: #ffffff46;
@@ -86,26 +87,47 @@ a {
display: none; display: none;
} }
input[type="search"] {
height: 2.25rem !important;
}
.l-container { .l-container {
display: grid; display: grid;
grid-template-columns: min-content 1fr min-content; grid-template-columns: min-content 1fr min-content;
grid-template-rows: 3.5rem 1fr 1fr; grid-template-rows: max-content 1fr max-content;
grid-auto-flow: row;
grid-template-areas: grid-template-areas:
"l-sidebar nav search-input" "l-sidebar nav search-input"
"l-sidebar content r-sidebar" "l-sidebar content r-sidebar"
"l-sidebar content r-sidebar" "l-sidebar content r-sidebar"
"l-sidebar content tabs"; "l-sidebar content tabs";
width: 100%;
align-content: center; align-content: center;
max-width: 2720px; max-width: 2720px;
height: 100vh; height: calc(100vh - 1rem);
margin: 0 auto; margin: 0 auto;
gap: 1rem;
margin: $small;
}
#tabs {
grid-area: tabs;
height: 3.5rem;
margin-top: -$small;
}
#acontent {
grid-area: content;
max-width: 1955px;
overflow: hidden auto;
margin-top: -$small;
.nav {
margin: $small;
width: calc(100% - 1rem);
}
} }
.tabs { .tabs {
grid-area: tabs; grid-area: tabs;
border-left: solid 1px $gray3;
@include tablet-landscape { @include tablet-landscape {
display: none; display: none;
@@ -124,7 +146,6 @@ a {
width: 17rem; width: 17rem;
grid-area: l-sidebar; grid-area: l-sidebar;
background-color: $black; background-color: $black;
margin: $small;
padding: 1rem; padding: 1rem;
} }
@@ -153,24 +174,10 @@ a {
display: flex; display: flex;
} }
#acontent {
grid-area: content;
width: 100%;
max-width: 1955px;
padding: $small;
padding-left: 0;
overflow: auto;
margin: 0 auto;
.nav {
margin: $small;
width: calc(100% - 1rem);
}
}
.r-sidebar { .r-sidebar {
grid-area: r-sidebar; grid-area: r-sidebar;
border-left: solid 1px $gray3; margin-top: -$small;
width: 29rem;
} }
.image { .image {
@@ -203,13 +210,13 @@ a {
/* width */ /* width */
::-webkit-scrollbar { ::-webkit-scrollbar {
width: 0.5rem; width: 3px;
} }
/* Track */ /* Track */
::-webkit-scrollbar-track { ::-webkit-scrollbar-track {
background: rgba(51, 51, 51, 0.459); background: transparent;
border-radius: 1rem; border-radius: 1rem;
} }
@@ -259,6 +266,7 @@ a {
background-position: 0 38%; background-position: 0 38%;
} }
} }
@keyframes similarAlbums { @keyframes similarAlbums {
0% { 0% {
background-position: 0 38%; background-position: 0 38%;
+16
View File
@@ -0,0 +1,16 @@
// Styles that only apply on our dear Firefox
@-moz-document url-prefix() {
#acontent {
padding-right: 1rem !important;
}
#ap-page {
width: 100% !important;
padding-right: 1rem !important;
}
.ap-page-bottom-container {
width: calc(100% - 1rem) !important;
}
}
+78
View File
@@ -0,0 +1,78 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="1600"
height="900"
viewBox="0 0 1600 900"
version="1.1"
id="svg13"
sodipodi:docname="noise-texture.svg"
inkscape:version="0.92.4 (5da689c313, 2019-01-14)">
<metadata
id="metadata17">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
</cc:Work>
</rdf:RDF>
</metadata>
<sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="1366"
inkscape:window-height="714"
id="namedview15"
showgrid="false"
inkscape:zoom="0.26222222"
inkscape:cx="28.104465"
inkscape:cy="117.7106"
inkscape:window-x="0"
inkscape:window-y="28"
inkscape:window-maximized="1"
inkscape:current-layer="svg13" />
<defs
id="defs9">
<radialGradient
id="a"
gradientTransform="matrix(1 1 -1 1 0.5 -0.5)">
<stop
stop-color="#455A64"
stop-opacity="0"
offset="0.25"
id="stop2"
style="stop-color:#222222;stop-opacity:0" />
<stop
stop-color="#455A64"
stop-opacity="0.5"
offset="0.75"
id="stop4"
style="stop-color:#222222;stop-opacity:0.50196081" />
<stop
stop-color="#455A64"
stop-opacity="1"
offset="1"
id="stop6"
style="stop-color:#222222;stop-opacity:1" />
</radialGradient>
</defs>
<rect
width="1600"
height="900"
fill="url(#a)"
id="rect11" />
</svg>

After

Width:  |  Height:  |  Size: 2.1 KiB

+7
View File
@@ -15,6 +15,7 @@
v-motion-slide-from-left v-motion-slide-from-left
class="rounded shadow-lg" class="rounded shadow-lg"
/> />
<img class="filter rounded" src="../../assets/images/noise-texture.svg" alt="" />
</div> </div>
<div class="info" :class="{ nocontrast: isLight() }"> <div class="info" :class="{ nocontrast: isLight() }">
<div class="top" v-motion-slide-from-top> <div class="top" v-motion-slide-from-top>
@@ -187,6 +188,7 @@ function theyContrast(color1: string, color2: string) {
.art { .art {
display: flex; display: flex;
align-items: flex-end; align-items: flex-end;
position: relative;
img { img {
height: 16rem; height: 16rem;
@@ -194,6 +196,11 @@ function theyContrast(color1: string, color2: string) {
object-fit: cover; object-fit: cover;
transition: all 0.2s ease-in-out; transition: all 0.2s ease-in-out;
} }
.filter {
position: absolute;
// display: none;
}
} }
.nocontrast { .nocontrast {
+1 -1
View File
@@ -31,7 +31,7 @@ defineProps<{
grid-template-columns: max-content 1fr; grid-template-columns: max-content 1fr;
padding-right: 1rem; padding-right: 1rem;
align-items: center; align-items: center;
background-color: $gray4; background-color: $gray3;
transition: all 0.2s ease; transition: all 0.2s ease;
border-radius: 0.75rem; border-radius: 0.75rem;
+12 -18
View File
@@ -1,37 +1,31 @@
<template> <template>
<div class="f-container rounded" :class="{ no_f: !props.folders.length }"> <div class="f-container rounded">
<div id="f-items" v-if="props.folders.length"> <div id="f-items" class="rounded">
<FolderItem <FolderItem
v-for="folder in props.folders" v-for="folder in folders"
:key="folder" :key="JSON.stringify(folder)"
:folder="folder" :folder="folder"
/> />
</div> </div>
</div> </div>
</template> </template>
<script setup> <script setup lang="ts">
import { Folder } from "@/interfaces";
import FolderItem from "./FolderItem.vue"; import FolderItem from "./FolderItem.vue";
const props = defineProps({ defineProps<{
folders: { folders: Folder[];
type: Array, }>();
required: true,
},
});
</script> </script>
<style lang="scss"> <style lang="scss">
.no_f {
display: none;
}
#f-items { #f-items {
display: grid; display: grid;
grid-template-columns: repeat(auto-fill, minmax(13rem, 1fr)); grid-template-columns: repeat(auto-fill, minmax(13rem, 1fr));
gap: $medium; gap: $medium;
border-bottom: 1px solid $gray3; padding: $small;
padding-bottom: .55rem; margin-bottom: 1rem;
background-color: $gray5;
} }
</style> </style>
+2 -1
View File
@@ -130,9 +130,10 @@ function getTracks() {
} }
.table { .table {
width: 100%;
height: 100%; height: 100%;
overflow-y: hidden; overflow-y: hidden;
background-color: $gray5;
padding: $small 0;
.current { .current {
a { a {
@@ -8,8 +8,6 @@
<style lang="scss"> <style lang="scss">
.r-home { .r-home {
height: calc(100% - 1rem); height: calc(100% - 1rem);
padding: 0 $small $small 0;
margin-top: $small;
} }
</style> </style>
+1 -15
View File
@@ -27,9 +27,7 @@ const tabs = useTabStore();
<style lang="scss"> <style lang="scss">
.r-sidebar { .r-sidebar {
width: 29em;
background-color: rgba(4, 12, 34, 0.103);
padding: 0 $small;
@include phone-only { @include phone-only {
display: none; display: none;
@@ -64,18 +62,6 @@ const tabs = useTabStore();
height: 100%; height: 100%;
} }
} }
.tab-keys {
display: none;
width: 3rem;
right: 0;
height: 100%;
position: absolute;
grid-area: tabs;
border-radius: 0;
overflow: hidden;
border-left: solid 1px $gray;
}
} }
} }
</style> </style>
@@ -36,7 +36,6 @@ function loadMore() {
} }
.grid { .grid {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(8rem, 1fr)); grid-template-columns: repeat(auto-fill, minmax(8rem, 1fr));
flex-wrap: wrap; flex-wrap: wrap;
gap: 0.75rem; gap: 0.75rem;
@@ -35,7 +35,6 @@ function loadMore() {
} }
.grid { .grid {
display: grid;
grid-template-columns: repeat(3, 1fr); grid-template-columns: repeat(3, 1fr);
gap: 0.75rem; gap: 0.75rem;
} }
@@ -36,7 +36,6 @@ function loadMore() {
} }
.grid { .grid {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(8rem, 1fr)); grid-template-columns: repeat(auto-fill, minmax(8rem, 1fr));
flex-wrap: wrap; flex-wrap: wrap;
gap: 0.75rem; gap: 0.75rem;
+6 -5
View File
@@ -7,7 +7,7 @@
class="rounded" class="rounded"
v-model="search.query" v-model="search.query"
placeholder="Search your library" placeholder="Search your library"
type="text" type="search"
@focus="focusThis()" @focus="focusThis()"
@blur="unfocusThis()" @blur="unfocusThis()"
/> />
@@ -32,8 +32,9 @@ function unfocusThis() {
<style lang="scss"> <style lang="scss">
#gsearch-input { #gsearch-input {
padding: $small;
display: flex; display: flex;
height: max-content;
// margin-bottom: $smaller;
@include tablet-landscape { @include tablet-landscape {
display: none; display: none;
@@ -44,12 +45,12 @@ function unfocusThis() {
border-radius: 0.4rem; border-radius: 0.4rem;
position: relative; position: relative;
display: flex; display: flex;
gap: $small; background-color: $red;
background-color: $gray4; background-color: $gray4;
height: 2.25rem;
.icon { .icon {
width: 2rem; width: 2.25rem;
aspect-ratio: 1;
background-image: url("../../assets/icons/search.svg"); background-image: url("../../assets/icons/search.svg");
background-size: 1.5rem; background-size: 1.5rem;
margin-left: $smaller; margin-left: $smaller;
+3 -4
View File
@@ -1,5 +1,5 @@
<template> <template>
<div class="tabs"> <div class="tabs" id="tabs">
<div class="cont rounded"> <div class="cont rounded">
<div <div
v-for="tab in tabs.tabs" v-for="tab in tabs.tabs"
@@ -22,8 +22,8 @@ const tabs = useTabStore();
<style lang="scss"> <style lang="scss">
.tabs { .tabs {
padding: $small; grid-area: tabs;
height: 4.25rem; height: 100%;
.cont { .cont {
background-color: $black; background-color: $black;
@@ -58,7 +58,6 @@ const tabs = useTabStore();
.t-item { .t-item {
background-color: transparent; background-color: transparent;
} }
} }
.search { .search {
+2 -17
View File
@@ -16,7 +16,6 @@
<Loader /> <Loader />
</div> </div>
<div class="right"> <div class="right">
<div class="more image"></div>
<Search /> <Search />
</div> </div>
</div> </div>
@@ -78,16 +77,12 @@ watch(
); );
</script> </script>
<!-- !!use nav store to sync the title component!! -->
<style lang="scss"> <style lang="scss">
.topnav { .topnav {
display: grid; display: grid;
grid-template-columns: 1fr min-content max-content; grid-template-columns: 1fr min-content max-content;
padding-bottom: 1rem; // border-bottom: 1px solid $gray3;
margin: $small $small 0 0; // padding-bottom: $small;
border-bottom: 1px solid $gray3;
height: 3rem;
.left { .left {
display: grid; display: grid;
@@ -115,16 +110,6 @@ watch(
width: 100%; width: 100%;
display: flex; display: flex;
gap: $small; gap: $small;
.more {
width: 2.25rem;
aspect-ratio: 1;
height: 100%;
background-color: $gray5;
background-image: url("../../assets/icons/more.svg");
transform: rotate(90deg);
border-radius: $small;
}
} }
} }
</style> </style>
+4
View File
@@ -14,9 +14,13 @@
<style lang="scss"> <style lang="scss">
#nav-search { #nav-search {
// border: solid 1px $gray2;
form { form {
display: flex; display: flex;
gap: $small; gap: $small;
padding: 0;
margin: 0;
input[type="search"] { input[type="search"] {
background-color: $gray5; background-color: $gray5;
+1 -1
View File
@@ -1,6 +1,6 @@
<template> <template>
<div <div
class="songlist-item rounded" class="songlist-item"
:class="[ :class="[
{ current: isCurrent }, { current: isCurrent },
{ contexton: context_on }, { contexton: context_on },
+19 -18
View File
@@ -1,5 +1,5 @@
<template> <template>
<div class="ap-container noscroll"> <div class="ap-container noscroll rounded">
<div id="ap-page"> <div id="ap-page">
<header class="ap-page-header" ref="apheader"> <header class="ap-page-header" ref="apheader">
<slot name="header"></slot> <slot name="header"></slot>
@@ -101,13 +101,28 @@ function toggleBottom() {
.ap-container { .ap-container {
height: 100%; height: 100%;
position: relative; position: relative;
margin-right: -$small; width: calc(100% + 1rem);
#ap-page {
overflow: auto;
height: 100%;
position: relative;
display: grid;
grid-template-rows: 18rem 1fr;
gap: 1rem;
padding-right: $small;
width: calc(100% - $small);
.ap-page-content {
padding-bottom: 16rem;
}
}
.ap-page-bottom-container { .ap-page-bottom-container {
position: absolute; position: absolute;
bottom: 0; bottom: 0;
height: 15rem; height: 15rem;
width: calc(100% - $small); width: calc(100% - 1.25rem);
background-color: $gray; background-color: $gray;
transition: all 0.5s ease !important; transition: all 0.5s ease !important;
overscroll-behavior: contain; overscroll-behavior: contain;
@@ -164,21 +179,7 @@ function toggleBottom() {
} }
.addbottompadding { .addbottompadding {
padding-bottom: 17rem; padding-bottom: 16rem;
}
}
#ap-page {
padding-right: $small;
height: 100%;
position: relative;
overflow: auto;
display: grid;
grid-template-rows: $banner-height 1fr;
gap: 1rem;
.ap-page-content {
padding-bottom: calc($banner-height - 1rem);
} }
} }
</style> </style>
-1
View File
@@ -63,7 +63,6 @@ onBeforeRouteUpdate((to, from) => {
#scrollable { #scrollable {
overflow-y: auto; overflow-y: auto;
height: calc(100% - $small);
scrollbar-color: grey transparent; scrollbar-color: grey transparent;
.banner { .banner {
-1
View File
@@ -25,7 +25,6 @@ const pStore = usePStore();
scrollbar-color: $gray2 transparent; scrollbar-color: $gray2 transparent;
.grid { .grid {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(10rem, 1fr)); grid-template-columns: repeat(auto-fill, minmax(10rem, 1fr));
gap: 1rem; gap: 1rem;
} }