diff --git a/materialious/android/.idea/AndroidProjectSystem.xml b/materialious/android/.idea/AndroidProjectSystem.xml
new file mode 100644
index 00000000..4a53bee8
--- /dev/null
+++ b/materialious/android/.idea/AndroidProjectSystem.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/materialious/android/.idea/compiler.xml b/materialious/android/.idea/compiler.xml
index b589d56e..b86273d9 100644
--- a/materialious/android/.idea/compiler.xml
+++ b/materialious/android/.idea/compiler.xml
@@ -1,6 +1,6 @@
-
+
\ No newline at end of file
diff --git a/materialious/android/.idea/misc.xml b/materialious/android/.idea/misc.xml
index 8978d23d..dddfeda8 100644
--- a/materialious/android/.idea/misc.xml
+++ b/materialious/android/.idea/misc.xml
@@ -1,6 +1,7 @@
+
-
+
diff --git a/materialious/android/.idea/other.xml b/materialious/android/.idea/other.xml
deleted file mode 100644
index 22069ff9..00000000
--- a/materialious/android/.idea/other.xml
+++ /dev/null
@@ -1,549 +0,0 @@
-
-
-
-
-
-
\ No newline at end of file
diff --git a/materialious/android/.idea/runConfigurations.xml b/materialious/android/.idea/runConfigurations.xml
new file mode 100644
index 00000000..16660f1d
--- /dev/null
+++ b/materialious/android/.idea/runConfigurations.xml
@@ -0,0 +1,17 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/materialious/electron/package-lock.json b/materialious/electron/package-lock.json
index 6fb6456f..29b0bd5a 100644
--- a/materialious/electron/package-lock.json
+++ b/materialious/electron/package-lock.json
@@ -1,12 +1,12 @@
{
"name": "Materialious",
- "version": "1.7.20",
+ "version": "1.7.21",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "Materialious",
- "version": "1.7.20",
+ "version": "1.7.21",
"license": "MIT",
"dependencies": {
"@capacitor-community/electron": "^5.0.0",
@@ -22,7 +22,7 @@
"jsonfile": "^6.1.0"
},
"devDependencies": {
- "electron": "^35.1.5",
+ "electron": "^35.2.1",
"electron-builder": "^26.0.12",
"electron-rebuild": "^3.2.9",
"typescript": "^5.7.3"
@@ -2492,9 +2492,9 @@
}
},
"node_modules/electron": {
- "version": "35.1.5",
- "resolved": "https://registry.npmjs.org/electron/-/electron-35.1.5.tgz",
- "integrity": "sha512-LolvbKKQUSCGvEwbEQNt1cxD1t+YYClDNwBIjn4d28KM8FSqUn9zJuf6AbqNA7tVs9OFl/EQpmg/m4lZV1hH8g==",
+ "version": "35.2.1",
+ "resolved": "https://registry.npmjs.org/electron/-/electron-35.2.1.tgz",
+ "integrity": "sha512-LO4xXLpzkPPUVLvAbdHMlW7N9Z+Qqz+7QsmSWXluTIQMeJk+v7o36nUTZghyA2I1s//tlMvuaCtle6Qo2W0Ktg==",
"dev": true,
"hasInstallScript": true,
"license": "MIT",
diff --git a/materialious/electron/package.json b/materialious/electron/package.json
index 30d6c988..ba6732cc 100644
--- a/materialious/electron/package.json
+++ b/materialious/electron/package.json
@@ -35,7 +35,7 @@
"jsonfile": "^6.1.0"
},
"devDependencies": {
- "electron": "^35.1.5",
+ "electron": "^35.2.1",
"electron-builder": "^26.0.12",
"electron-rebuild": "^3.2.9",
"typescript": "^5.7.3"
@@ -44,4 +44,4 @@
"capacitor",
"electron"
]
-}
\ No newline at end of file
+}
diff --git a/materialious/package-lock.json b/materialious/package-lock.json
index 1a19123e..48ecbc9c 100644
--- a/materialious/package-lock.json
+++ b/materialious/package-lock.json
@@ -1,12 +1,12 @@
{
"name": "materialious",
- "version": "1.7.20",
+ "version": "1.7.21",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "materialious",
- "version": "1.7.20",
+ "version": "1.7.21",
"hasInstallScript": true,
"dependencies": {
"@capacitor-community/electron": "^5.0.1",
@@ -38,7 +38,7 @@
"svelte-infinite-loading": "^1.4.0",
"svelte-persisted-store": "^0.12.0",
"terser": "^5.34.1",
- "youtubei.js": "^13.3.0"
+ "youtubei.js": "^13.4.0"
},
"devDependencies": {
"@capacitor/assets": "^3.0.5",
@@ -8344,9 +8344,9 @@
}
},
"node_modules/jintr": {
- "version": "3.3.0",
- "resolved": "https://registry.npmjs.org/jintr/-/jintr-3.3.0.tgz",
- "integrity": "sha512-ZsaajJ4Hr5XR0tSPhOZOTjFhxA0qscKNSOs41NRjx7ZOGwpfdp8NKIBEUtvUPbA37JXyv1sJlgeOOZHjr3h76Q==",
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/jintr/-/jintr-3.3.1.tgz",
+ "integrity": "sha512-nnOzyhf0SLpbWuZ270Omwbj5LcXUkTcZkVnK8/veJXtSZOiATM5gMZMdmzN75FmTyj+NVgrGaPdH12zIJ24oIA==",
"funding": [
"https://github.com/sponsors/LuanRT"
],
@@ -14399,16 +14399,16 @@
}
},
"node_modules/youtubei.js": {
- "version": "13.3.0",
- "resolved": "https://registry.npmjs.org/youtubei.js/-/youtubei.js-13.3.0.tgz",
- "integrity": "sha512-tbl7rxltpgKoSsmfGUe9JqWUAzv6HFLqrOn0N85EbTn5DLt24EXrjClnXdxyr3PBARMJ3LC4vbll100a0ABsYw==",
+ "version": "13.4.0",
+ "resolved": "https://registry.npmjs.org/youtubei.js/-/youtubei.js-13.4.0.tgz",
+ "integrity": "sha512-+fmIZU/dWAjsROONrASy1REwVpy6umAPVuoNLr/4iNmZXl84LyBef0n3hrd1Vn9035EuINToGyQcBmifwUEemA==",
"funding": [
"https://github.com/sponsors/LuanRT"
],
"license": "MIT",
"dependencies": {
"@bufbuild/protobuf": "^2.0.0",
- "jintr": "^3.3.0",
+ "jintr": "^3.3.1",
"tslib": "^2.5.0",
"undici": "^5.19.1"
}
diff --git a/materialious/package.json b/materialious/package.json
index 98a2776e..fb5a4533 100644
--- a/materialious/package.json
+++ b/materialious/package.json
@@ -70,6 +70,6 @@
"svelte-infinite-loading": "^1.4.0",
"svelte-persisted-store": "^0.12.0",
"terser": "^5.34.1",
- "youtubei.js": "^13.3.0"
+ "youtubei.js": "^13.4.0"
}
-}
\ No newline at end of file
+}
diff --git a/materialious/src/lib/components/Player.svelte b/materialious/src/lib/components/Player.svelte
index 0c98a23b..3db43052 100644
--- a/materialious/src/lib/components/Player.svelte
+++ b/materialious/src/lib/components/Player.svelte
@@ -36,7 +36,7 @@
synciousInstanceStore,
synciousStore
} from '../store';
- import { setStatusBarColor } from '../theme';
+ import { getDynamicTheme, setStatusBarColor } from '../theme';
interface Props {
data: { video: VideoPlay; content: PhasedDescription; playlistId: string | null };
@@ -157,10 +157,12 @@
'playback_rate',
'loop',
'language',
- Capacitor.getPlatform() === 'android' ? '' : 'save_video_frame',
'statistics'
],
- enableTooltips: true
+ enableTooltips: true,
+ seekBarColors: {
+ played: (await getDynamicTheme())['--primary']
+ }
});
player.configure({
diff --git a/materialious/src/lib/css/shaka-player-theme.css b/materialious/src/lib/css/shaka-player-theme.css
index e54e5113..4188a110 100644
--- a/materialious/src/lib/css/shaka-player-theme.css
+++ b/materialious/src/lib/css/shaka-player-theme.css
@@ -1,309 +1,272 @@
.youtube-theme {
- font-family: 'Roboto', sans-serif;
+ font-family: var(--font);
+ color: var(--on-surface);
+}
+
+.youtube-theme .shaka-video-container * {
+ font-family: var(--font);
+ color: var(--on-surface);
}
.youtube-theme .shaka-bottom-controls {
- width: 100%;
- padding: 0;
- padding-bottom: 0;
- z-index: 1;
-}
-
-.youtube-theme .shaka-bottom-controls {
- display: -webkit-box;
- display: -ms-flexbox;
- display: flex;
- -webkit-box-orient: vertical;
- -webkit-box-direction: normal;
- -ms-flex-direction: column;
- flex-direction: column;
+ width: 100%;
+ padding: 0;
+ padding-bottom: 0;
+ z-index: 1;
+ display: flex;
+ flex-direction: column;
}
.youtube-theme .shaka-ad-controls {
- -webkit-box-ordinal-group: 2;
- -ms-flex-order: 1;
- order: 1;
+ order: 1;
}
.youtube-theme .shaka-controls-button-panel {
- -webkit-box-ordinal-group: 3;
- -ms-flex-order: 2;
- order: 2;
- height: 40px;
- padding: 0 10px;
+ order: 2;
+ height: 2.5rem; /* 40px */
+ padding: 0 0.625rem; /* 10px */
}
.youtube-theme .shaka-range-container {
- margin: 4px 10px 4px 10px;
- top: 0;
+ margin: 0.25rem 0.625rem; /* 4px 10px */
+ top: 0;
}
.youtube-theme .shaka-small-play-button {
- -webkit-box-ordinal-group: -2;
- -ms-flex-order: -3;
- order: -3;
+ order: -3;
}
.youtube-theme .shaka-mute-button {
- -webkit-box-ordinal-group: -1;
- -ms-flex-order: -2;
- order: -2;
+ order: -2;
}
-.youtube-theme .shaka-controls-button-panel>* {
- margin: 0;
- padding: 3px 8px;
- color: #fff;
- height: 40px;
- font-size: 2em;
+.youtube-theme .shaka-controls-button-panel > * {
+ margin: 0;
+ padding: 0.1875rem 0.5rem; /* 3px 8px */
+ color: #fff;
+ height: 2.5rem; /* 40px */
+ font-size: 2rem; /* 32px */
}
-.youtube-theme .shaka-controls-button-panel>*:hover {
- color: var(--primary);
+.youtube-theme .shaka-controls-button-panel > *:hover {
+ color: var(--primary);
}
-.youtube-theme .shaka-controls-button-panel>*:focus {
- outline: none;
- -webkit-box-shadow: inset 0 0 0 2px var(--primary);
- box-shadow: inset 0 0 0 2px var(--primary);
- color: var(--primary);
+.youtube-theme .shaka-controls-button-panel > *:focus {
+ outline: none;
+ box-shadow: inset 0 0 0 2px var(--primary);
+ color: var(--primary);
}
-
.youtube-theme .shaka-controls-button-panel .shaka-volume-bar-container {
- -webkit-transition: width 0.2s cubic-bezier(0.4, 0, 1, 1);
- transition: width 0.2s cubic-bezier(0.4, 0, 1, 1);
- height: 3px;
- padding: 0;
+ height: 0.1875rem; /* 3px */
+ padding: 0;
}
.youtube-theme .shaka-controls-button-panel .shaka-volume-bar-container:hover,
.youtube-theme .shaka-controls-button-panel .shaka-volume-bar-container:focus {
- display: block;
- opacity: 1;
- padding: 0 6px;
+ display: block;
+ opacity: 1;
+ padding: 0 0.375rem; /* 6px */
}
-.youtube-theme .shaka-mute-button:hover+div {
- opacity: 1;
- width: 50px;
- padding: 0 6px;
+.youtube-theme .shaka-mute-button:hover + div {
+ opacity: 1;
+ width: 3.125rem; /* 50px */
+ padding: 0 0.375rem; /* 6px */
}
.youtube-theme .shaka-current-time {
- padding: 0 10px;
- font-size: 1em;
- color: var(--white-text) !important;
+ padding: 0 0.625rem; /* 10px */
+ font-size: 1rem; /* 16px */
+ color: #fff !important;
}
.youtube-theme .shaka-seek-bar-container {
- height: 3px;
- position: relative;
- top: -1px;
- border-radius: 0;
- margin-bottom: 0;
+ height: 0.1875rem; /* 3px */
+ position: relative;
+ top: -0.0625rem; /* -1px */
+ margin-bottom: 0;
+ border-radius: 0;
}
.youtube-theme .shaka-seek-bar-container .shaka-range-element {
- opacity: 0;
+ opacity: 0;
}
.youtube-theme .shaka-seek-bar-container:hover {
- height: 5px;
- top: 0;
- cursor: pointer;
+ height: 0.3125rem; /* 5px */
+ top: 0;
+ cursor: pointer;
}
.youtube-theme .shaka-seek-bar-container:hover .shaka-range-element {
- opacity: 1;
- cursor: pointer;
+ opacity: 1;
+ cursor: pointer;
}
-.youtube-theme .shaka-seek-bar-container input[type=range]::-webkit-slider-thumb {
- background: var(--primary);
- cursor: pointer;
-}
-
-.youtube-theme .shaka-seek-bar-container input[type=range]::-moz-range-thumb {
- background: var(--primary);
- cursor: pointer;
-}
-
-.youtube-theme .shaka-seek-bar-container input[type=range]::-ms-thumb {
- background: var(--primary);
- cursor: pointer;
-}
-
-.youtube-theme .shaka-video-container * {
- font-family: 'Roboto', sans-serif;
+.youtube-theme .shaka-seek-bar-container input[type='range']::-webkit-slider-thumb,
+.youtube-theme .shaka-seek-bar-container input[type='range']::-moz-range-thumb,
+.youtube-theme .shaka-seek-bar-container input[type='range']::-ms-thumb {
+ background: var(--primary);
+ cursor: pointer;
}
.youtube-theme .shaka-overflow-menu,
.youtube-theme .shaka-settings-menu {
- border-radius: 0.25em;
- background: var(--surface-dim);
- transition: opacity 0.1s cubic-bezier(0, 0, 0.2, 1);
- right: 10px;
- bottom: 50px;
- padding: 8px 0;
- min-width: 200px;
+ border-radius: 0.25rem;
+ background-color: var(--surface-container-low);
+ right: 0.625rem; /* 10px */
+ bottom: 3.125rem; /* 50px */
+ min-width: 12.5rem; /* 200px */
+ transition:
+ transform var(--speed3),
+ border-radius var(--speed3),
+ padding var(--speed3);
}
.youtube-theme .shaka-settings-menu {
- padding: 0 0 8px 0;
+ padding-bottom: 0.5rem; /* 8px */
}
.youtube-theme .shaka-settings-menu button {
- font-size: 1em;
- border: none;
- margin: 0;
+ font-size: 1rem; /* 16px */
+ border: none;
+ margin: 0;
}
.youtube-theme .shaka-settings-menu button span {
- margin-left: 33px;
- font-size: 1em;
+ margin-left: 2.0625rem; /* 33px */
+ font-size: 1rem; /* 16px */
}
-.youtube-theme .shaka-settings-menu button[aria-selected="true"] {
- display: -webkit-box;
- display: -ms-flexbox;
- display: flex;
+.youtube-theme .shaka-settings-menu button[aria-selected='true'] {
+ display: flex;
}
-.youtube-theme .shaka-settings-menu button[aria-selected="true"] span {
- -webkit-box-ordinal-group: 3;
- -ms-flex-order: 2;
- order: 2;
- margin-left: 0;
+.youtube-theme .shaka-settings-menu button[aria-selected='true'] span {
+ order: 2;
+ margin-left: 0;
}
-.youtube-theme .shaka-settings-menu button[aria-selected="true"] i {
- -webkit-box-ordinal-group: 2;
- -ms-flex-order: 1;
- order: 1;
- font-size: 1em;
- padding-left: 5px;
+.youtube-theme .shaka-settings-menu button[aria-selected='true'] i {
+ order: 1;
+ font-size: 1rem; /* 16px */
+ padding-left: 0.3125rem; /* 5px */
}
-.youtube-theme .shaka-overflow-menu button {
- padding: 0;
+.youtube-theme .shaka-overflow-menu button,
+.youtube-theme .shaka-settings-menu button {
+ padding: 0;
+ margin-bottom: 0.5em;
}
.youtube-theme .shaka-overflow-menu button i {
- display: none;
+ display: none;
}
.youtube-theme .shaka-overflow-menu button .shaka-overflow-button-label {
- display: -webkit-box;
- display: -ms-flexbox;
- display: flex;
- -webkit-box-pack: justify;
- -ms-flex-pack: justify;
- justify-content: space-between;
- -webkit-box-orient: horizontal;
- -webkit-box-direction: normal;
- -ms-flex-direction: row;
- flex-direction: row;
- -webkit-box-align: center;
- -ms-flex-align: center;
- align-items: center;
- cursor: default;
- outline: none;
- height: 40px;
- -webkit-box-flex: 0;
- -ms-flex: 0 0 100%;
- flex: 0 0 100%;
+ display: flex;
+ align-items: start;
+ cursor: default;
+ outline: none;
+ height: 2.5rem; /* 40px */
+ flex: 0 0 100%;
+}
+
+.shaka-settings-menu {
+ padding: 0.5em;
+}
+
+.shaka-settings-menu button {
+ gap: 0;
+ justify-content: start;
}
.youtube-theme .shaka-overflow-menu button .shaka-overflow-button-label span {
- -ms-flex-negative: initial;
- flex-shrink: initial;
- padding-left: 15px;
- font-size: 1em;
- font-weight: 500;
- display: -webkit-box;
- display: -ms-flexbox;
- display: flex;
- -webkit-box-align: center;
- -ms-flex-align: center;
- align-items: center;
+ flex-shrink: 0;
+ padding-left: 0.9375rem; /* 15px */
+ font-size: 1rem; /* 16px */
+ display: flex;
+ align-items: center;
}
-.youtube-theme .shaka-overflow-menu span+span {
- color: var(--primary-text);
- font-weight: 400 !important;
- font-size: 1em !important;
- padding-right: 8px;
- padding-left: 0 !important;
+.shaka-overflow-button-label span:not(.shaka-current-selection-span) {
+ font-weight: bold !important;
}
-
-.youtube-theme .shaka-overflow-menu .shaka-pip-button span+span {
- padding-right: 15px !important;
+.youtube-theme .shaka-overflow-menu span + span {
+ color: var(--primary-text);
+ font-weight: 400 !important;
+ font-size: 1rem !important;
+ padding-right: 0.5rem; /* 8px */
}
-.youtube-theme .shaka-overflow-menu .shaka-pip-button span+span:after {
- content: "";
+.youtube-theme .shaka-overflow-menu .shaka-pip-button span + span {
+ padding-right: 0.9375rem !important; /* 15px */
+}
+
+.youtube-theme .shaka-overflow-menu .shaka-pip-button span + span:after {
+ content: '';
}
.youtube-theme .shaka-back-to-overflow-button {
- padding: 8px 0;
- border-bottom: 1px solid rgba(255, 255, 255, 0.2);
- font-size: 1em;
- color: var(--primary-text);
- height: 40px;
+ padding: 0.5rem 0;
+ border-bottom: 1px solid rgba(255, 255, 255, 0.2);
+ font-size: 1rem; /* 16px */
+ color: var(--primary-text);
+ height: 2.5rem; /* 40px */
}
.youtube-theme .shaka-back-to-overflow-button .material-icons-round {
- font-size: 1em;
- padding-right: 10px;
+ font-size: 1rem; /* 16px */
+ padding-right: 0.625rem; /* 10px */
}
.youtube-theme .shaka-back-to-overflow-button span {
- margin-left: 3px !important;
+ margin-left: 0.1875rem !important; /* 3px */
}
.youtube-theme .shaka-overflow-menu button:hover,
.youtube-theme .shaka-settings-menu button:hover {
- background-color: var(--surface-bright);
- cursor: pointer;
+ background-color: var(--surface-bright);
+ cursor: pointer;
}
.youtube-theme .shaka-overflow-menu button:hover label,
.youtube-theme .shaka-settings-menu button:hover label {
- cursor: pointer;
+ cursor: pointer;
}
.youtube-theme .shaka-overflow-menu button:focus,
.youtube-theme .shaka-settings-menu button:focus {
- background-color: var(--surface-bright);
- border: none;
- outline: none;
+ background-color: var(--surface-bright);
+ border: none;
+ outline: none;
}
+
.youtube-theme .shaka-overflow-menu button,
.youtube-theme .shaka-settings-menu button {
- color: var(--primary-text);
+ color: var(--primary-text);
}
.youtube-theme .shaka-captions-off {
- color: var(--surface-bright);
+ color: var(--surface-bright);
}
.youtube-theme .shaka-overflow-menu-button {
- font-size: 1em;
- margin-right: 5px;
-}
-
-.youtube-theme .shaka-fullscreen-button:hover {
- font-size: 1em;
- -webkit-transition: font-size 0.1s cubic-bezier(0, 0, 0.2, 1);
- transition: font-size 0.1s cubic-bezier(0, 0, 0.2, 1);
+ font-size: 1rem; /* 16px */
+ margin-right: 0.3125rem; /* 5px */
}
@media screen and (max-width: 650px) {
- .youtube-theme .shaka-overflow-menu,
- .youtube-theme .shaka-settings-menu {
- top: 10px;
- position: absolute;
- }
-}
\ No newline at end of file
+ .youtube-theme .shaka-overflow-menu,
+ .youtube-theme .shaka-settings-menu {
+ min-width: 100%;
+ position: fixed;
+ top: 75%;
+ left: 50%;
+ height: 50vh;
+ transform: translate(-50%, -50%);
+ }
+}
diff --git a/update_versions.py b/update_versions.py
index a60b34ab..33ecba7e 100644
--- a/update_versions.py
+++ b/update_versions.py
@@ -3,15 +3,19 @@ import os
import re
from datetime import datetime
-LATEST_VERSION = "1.7.21"
+LATEST_VERSION = "1.7.22"
RELEASE_DATE = datetime.now().strftime("%Y-%-m-%d") # Format: YYYY-M-D
-WORKING_DIR = os.path.join(os.path.dirname(os.path.realpath(__file__)), "materialious")
+WORKING_DIR = os.path.join(
+ os.path.dirname(os.path.realpath(__file__)), "materialious"
+)
ROOT_PACKAGE = os.path.join(WORKING_DIR, "package.json")
ELECTRON_PACKAGE = os.path.join(WORKING_DIR, "electron", "package.json")
ANDROID_PACKAGE = os.path.join(WORKING_DIR, "android", "app", "build.gradle")
-METAINFO_FILE = os.path.join(WORKING_DIR, "electron", "materialious.metainfo.xml")
+METAINFO_FILE = os.path.join(
+ WORKING_DIR, "electron", "materialious.metainfo.xml"
+)
def package_json_update_ver(location: str) -> None:
@@ -34,9 +38,13 @@ def update_android_version() -> None:
if version_code_match and version_name_match:
version_code = int(version_code_match.group(1)) + 1
- contents = re.sub(r"versionCode\s+\d+", f"versionCode {version_code}", contents)
contents = re.sub(
- r'versionName\s+"[^"]+"', f'versionName "{LATEST_VERSION}"', contents
+ r"versionCode\s+\d+", f"versionCode {version_code}", contents
+ )
+ contents = re.sub(
+ r'versionName\s+"[^"]+"',
+ f'versionName "{LATEST_VERSION}"',
+ contents,
)
with open(ANDROID_PACKAGE, "w") as f_:
@@ -58,7 +66,9 @@ def update_metainfo_release() -> None:
"""
# Insert the new release after the opening tag
- updated_contents = re.sub(r"(\s*)", rf"\1{new_release}\n", contents)
+ updated_contents = re.sub(
+ r"(\s*)", rf"\1{new_release}\n", contents
+ )
with open(METAINFO_FILE, "w") as f_:
f_.write(updated_contents)