From 67a5191433f34249cf0a6652a2cdb5f98738ca21 Mon Sep 17 00:00:00 2001 From: mere Date: Thu, 8 May 2025 20:58:17 +0200 Subject: [PATCH 01/10] Translated using Weblate (Romanian) Currently translated at 74.6% (124 of 166 strings) Translation: ytify/web Translate-URL: https://hosted.weblate.org/projects/ytify/web/ro/ --- src/locales/ro.json | 75 ++++++++++++++++++++++++--------------------- 1 file changed, 40 insertions(+), 35 deletions(-) diff --git a/src/locales/ro.json b/src/locales/ro.json index b43dddb42..11d951de5 100644 --- a/src/locales/ro.json +++ b/src/locales/ro.json @@ -18,7 +18,7 @@ "player_seek_backward": "Derulare înapoi", "player_seek_forward": "Derulare înainte", "player_play_next": "Redă următorul", - "upcoming_clear": "Golește", + "upcoming_clear": "Golește Coada", "upcoming_shuffle": "Amestecă", "upcoming_remove": "Elimină", "upcoming_filter": "Filtru < 10:00", @@ -55,13 +55,13 @@ "library_for_you": "Pentru Tine", "library_import": "Importă", "library_export": "Exportă", - "library_clean": "Golire", + "library_clean": "Golire Biblotecă", "library_clean_prompt": "Ești sigur că vrei să golești $ articole din bibliotecă?", - "library_import_prompt": "", + "library_import_prompt": "Asta va combina bibloteca ta curentă cu bibloteca importată, continuă?", "list_play": "Redă", "list_enqueue": "Adaugă la coadă", "list_import": "Importă", - "list_imported": "", + "list_imported": "$ a fost importat la colecțiile tale.", "list_set_title": "Setează Titlu", "list_clear_all": "Golește tot", "list_remove": "Elimină", @@ -82,20 +82,20 @@ "actions_menu_debug_info": "Informații debug", "collection_selector_add_to": "Adaugă la", "collection_selector_create_new": "Creează o nouă Colecție", - "collection_selector_favorites": "", - "collection_selector_listen_later": "", - "settings_custom_instance": "", - "settings_enter_piped_api": "", - "settings_enter_invidious_api": "", - "settings_language": "", + "collection_selector_favorites": "Favorite", + "collection_selector_listen_later": "Ascultă mai târziu", + "settings_custom_instance": "Folosește instanța custom", + "settings_enter_piped_api": "Introdu Piped API URL :", + "settings_enter_invidious_api": "Introdu Invidious API URL :", + "settings_language": "Limbă", "settings_links_host": "", - "settings_download_format": "", - "settings_pwa_share_action": "", - "settings_pwa_play": "", - "settings_pwa_download": "", - "settings_pwa_always_ask": "", + "settings_download_format": "Descarcă Format-ul", + "settings_pwa_share_action": "PWA Acțiunea Partajare", + "settings_pwa_play": "Redă", + "settings_pwa_download": "Descarcă", + "settings_pwa_always_ask": "Intreabă intotdeauna", "settings_search": "Căutare", - "settings_set_songs_as_default_filter": "", + "settings_set_songs_as_default_filter": "Setează Melodii ca Filtru Implicit", "settings_display_suggestions": "Afișare sugestii", "settings_playback": "Redare", "settings_hq_audio": "Audio de cea mai înaltă calitate", @@ -108,20 +108,20 @@ "settings_store_discoveries": "Storează Descoperirele", "settings_clear_discoveries": "Asta va goli $ discoperirile tale existente, continuă?", "settings_store_history": "Storează Istoric", - "settings_clear_history": "", - "settings_import_from_piped": "", - "settings_interface": "", - "settings_load_images": "", - "settings_roundness": "", - "settings_roundness_none": "", + "settings_clear_history": "Asta va goli $ articole din istoricul tău, continuă?", + "settings_import_from_piped": "Importă Playlist-uri din Piped", + "settings_interface": "Interfață", + "settings_load_images": "Încarcă Imagini", + "settings_roundness": "Rotunjire", + "settings_roundness_none": "Niciunul", "settings_roundness_lighter": "", - "settings_roundness_light": "", + "settings_roundness_light": "Luminat", "settings_roundness_heavy": "", "settings_roundness_heavier": "", "settings_use_custom_color": "", "settings_custom_color_prompt": "", "settings_theming_scheme": "", - "settings_theming_scheme_dynamic": "", + "settings_theming_scheme_dynamic": "Dinamic", "settings_theming_scheme_system": "Sistem", "settings_theming_scheme_light": "Luminos", "settings_theming_scheme_dark": "Întunecat", @@ -133,18 +133,18 @@ "settings_parental_controls": "", "settings_pin_toggle": "", "settings_pin_message": "", - "settings_pin_prompt": "", - "settings_pin_incorrect": "", + "settings_pin_prompt": "Întrodu PIN", + "settings_pin_incorrect": "Încorrect PIN!", "settings_feedback_placeholder": "", - "settings_feedback_submit": "", - "settings_changelog": "", - "settings_clear_cache": "", - "settings_restore": "", - "settings_export": "", - "settings_import": "", + "settings_feedback_submit": "Trimite Feedback", + "settings_changelog": "Changelog", + "settings_clear_cache": "Golește Cache", + "settings_restore": "Restaurează setările", + "settings_export": "Exportă Setări", + "settings_import": "Importă Setări", "piped_enter_auth": "", "piped_enter_username": "", - "piped_enter_password": "", + "piped_enter_password": "Parolă", "piped_success_auth": "", "piped_failed_auth": "", "piped_success_imported": "", @@ -155,9 +155,14 @@ "piped_failed_token": "", "piped_success_logged": "", "updater_changelog_full": "", - "updater_update": "", + "updater_update": "Actualizare", "updater_later": "", "pwa_share_prompt": "", "settings_watchmode": "Modul video", - "settings_library_sync": "Sincronizare Cloud" + "settings_library_sync": "Sincronizare Cloud", + "upcoming_change": "Schimbări va lua loc la următorul flux", + "list_prompt_clear": "Ești sigur că vrei să golești $ ?", + "upcoming_filter_lt10": "Filtru < 10:00", + "list_prompt_rename": "Introdu un titlu nou", + "list_prompt_delete": "Ești sigur că vrei să ștergi colecția $ ?" } From e27975b20aa11fe3a1d55621ebd039517f64f7d8 Mon Sep 17 00:00:00 2001 From: mere Date: Mon, 12 May 2025 16:18:00 +0200 Subject: [PATCH 02/10] Translated using Weblate (Romanian) Currently translated at 77.1% (128 of 166 strings) Translation: ytify/web Translate-URL: https://hosted.weblate.org/projects/ytify/web/ro/ --- src/locales/ro.json | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/locales/ro.json b/src/locales/ro.json index 11d951de5..2f613d243 100644 --- a/src/locales/ro.json +++ b/src/locales/ro.json @@ -5,8 +5,8 @@ "nav_upcoming": "Urmează", "player_audiostreams_setup": "Setarea acum AudioStreams…", "player_audiostreams_insert": "Inserarea sursei de audio în player…", - "player_livestreams_hls": "", - "player_audiostreams_null": "", + "player_livestreams_hls": "Activează HLS pentru a asculta fluxuri live!", + "player_audiostreams_null": "Nu s-au găsit fluxuri audio", "player_now_playing": "Redarea Acum", "player_channel": "Canal", "player_volume": "Volum", @@ -22,7 +22,7 @@ "upcoming_shuffle": "Amestecă", "upcoming_remove": "Elimină", "upcoming_filter": "Filtru < 10:00", - "upcoming_enqueue_related": "Adaugă în coadă fluxuri relevante", + "upcoming_enqueue_related": "Adaugă la coadă fluxuri relevante", "upcoming_allow_duplicates": "Permite Duplicări", "upcoming_info": "Fluxuri viitoare arată aici", "fetchlist_url_null": "", @@ -160,7 +160,7 @@ "pwa_share_prompt": "", "settings_watchmode": "Modul video", "settings_library_sync": "Sincronizare Cloud", - "upcoming_change": "Schimbări va lua loc la următorul flux", + "upcoming_change": "Schimbările se vor aplica începând cu următorul flux", "list_prompt_clear": "Ești sigur că vrei să golești $ ?", "upcoming_filter_lt10": "Filtru < 10:00", "list_prompt_rename": "Introdu un titlu nou", From d8663340b108fe3a0f4bd9e05c29a501fae0a305 Mon Sep 17 00:00:00 2001 From: n-ce Date: Tue, 13 May 2025 22:35:56 +0530 Subject: [PATCH 03/10] remove collections view and merge into supercollections --- index.html | 25 +--------------------- package.json | 29 +++++++++++++------------- src/components/ActionsMenu.css | 2 +- src/components/ItemsLoader.tsx | 19 +++++++++++++++-- src/components/SuperCollectionList.tsx | 4 ++-- src/lib/utils.ts | 13 +++++++++++- src/scripts/library.ts | 9 +------- src/stylesheets/library.css | 29 -------------------------- 8 files changed, 48 insertions(+), 82 deletions(-) diff --git a/index.html b/index.html index a35206aac..bf76c4319 100644 --- a/index.html +++ b/index.html @@ -209,29 +209,6 @@

Upcoming streams show here

-
- - - - - - - - - - - - - - - - -
-
@@ -364,4 +341,4 @@

Playlist, channel or your collection items show - + \ No newline at end of file diff --git a/package.json b/package.json index bb37cb3f3..1007f9931 100644 --- a/package.json +++ b/package.json @@ -1,31 +1,30 @@ { "name": "ytify", "type": "module", - "version": "7.8", "scripts": { "dev": "vite", "build": "tsc && vite build", - "preview": "vite preview", - "update": "npx npm-check-updates -u" + "preview": "vite preview" }, "dependencies": { - "hls.js": "^1.5.20", - "solid-js": "^1.9.4", - "sortablejs": "^1.15.6" + "hls.js": "^1.6.2", + "solid-js": "^1.9.6", + "sortablejs": "^1.15.6", + "uhtml": "^4.7.1" }, "devDependencies": { - "@netlify/blobs": "^8.1.0", - "@netlify/edge-functions": "^2.11.1", - "@types/node": "^22.13.1", + "@netlify/blobs": "^9.1.1", + "@netlify/edge-functions": "^2.12.0", + "@types/node": "^22.15.17", "@types/sortablejs": "^1.15.8", - "autoprefixer": "^10.4.20", + "autoprefixer": "^10.4.21", "eruda": "^3.4.1", - "typescript": "^5.7.3", - "vite": "^6.1.0", - "vite-plugin-pwa": "^0.21.1", - "vite-plugin-solid": "^2.11.1" + "typescript": "^5.8.3", + "vite": "^6.3.5", + "vite-plugin-pwa": "^1.0.0", + "vite-plugin-solid": "^2.11.6" }, "browserslist": [ "defaults" ] -} +} \ No newline at end of file diff --git a/src/components/ActionsMenu.css b/src/components/ActionsMenu.css index e06e9a797..e1f819d6e 100644 --- a/src/components/ActionsMenu.css +++ b/src/components/ActionsMenu.css @@ -56,4 +56,4 @@ font-size: inherit; margin-left: -3px; width: 9ch; -} \ No newline at end of file +} diff --git a/src/components/ItemsLoader.tsx b/src/components/ItemsLoader.tsx index bedbb2e18..e3d73960d 100644 --- a/src/components/ItemsLoader.tsx +++ b/src/components/ItemsLoader.tsx @@ -1,11 +1,17 @@ import { createEffect, createSignal, For, Show } from "solid-js"; import { generateImageUrl, getThumbIdFromLink } from "../lib/imageUtils"; -import { convertSStoHHMMSS, hostResolver } from "../lib/utils"; +import { convertSStoHHMMSS, hostResolver, i18n } from "../lib/utils"; import ListItem from "./ListItem"; import StreamItem from "./StreamItem"; const numFormatter = (num: number): string => Intl.NumberFormat('en', { notation: 'compact' }).format(num); +const reservedCollections = { + discover: ['ri-compass-3-line', 'library_discover'], + history: ['ri-memories-line', 'library_history'], + favorites: ['ri-heart-fill', 'library_favorites'], + listenLater: ['ri-calendar-schedule-line', 'library_listen_later'] +} export default function ItemsLoader(data: { itemsArray: StreamItem[] }) { const [items, setItems] = createSignal(data.itemsArray); @@ -23,7 +29,16 @@ export default function ItemsLoader(data: { itemsArray: StreamItem[] }) { item.type === 'collection' ? - {item.name} + + + {item.name} + + }> + + {i18n(reservedCollections[item.name as 'history'][1] as 'library_history')} + : (item.type === 'stream' || item.type === 'video') ? diff --git a/src/components/SuperCollectionList.tsx b/src/components/SuperCollectionList.tsx index 055cf1b3d..a4cd312ad 100644 --- a/src/components/SuperCollectionList.tsx +++ b/src/components/SuperCollectionList.tsx @@ -1,5 +1,5 @@ import { createSignal, onMount } from 'solid-js'; -import { getDB, reservedCollections } from '../lib/libraryUtils'; +import { getDB } from '../lib/libraryUtils'; import { superCollectionSelector, superCollectionList } from '../lib/dom'; import { removeSaved, save, superClick } from '../lib/utils'; import ItemsLoader from './ItemsLoader'; @@ -77,7 +77,7 @@ function loadCollections(db: Library) { const keys = Object.keys(db); return keys.length ? keys - .filter(v => !reservedCollections.includes(v)) + .filter(v => v !== 'channels' && v !== 'playlists') .map(v => ({ type: 'collection', name: v })) : 'No Collections in Library'; } diff --git a/src/lib/utils.ts b/src/lib/utils.ts index 9040ab201..80ff0804f 100644 --- a/src/lib/utils.ts +++ b/src/lib/utils.ts @@ -179,6 +179,12 @@ export async function superClick(e: Event) { const eld = elem.dataset; const elc = elem.classList.contains.bind(elem.classList); + const rcn = { + Discover: 'discover', + History: 'history', + Favorites: 'favorites', + 'Listen Later': 'listenLater' + } if (elc('streamItem')) return elc('delete') ? @@ -186,7 +192,12 @@ export async function superClick(e: Event) { : player(eld.id); else if (elc('clxn_item')) - fetchCollection(elem.textContent as string); + fetchCollection( + (elem.textContent! in rcn) ? + rcn[elem.textContent as 'History'] : + elem.textContent as string + ); + else if (elc('ri-more-2-fill')) { actionsMenu.showModal(); diff --git a/src/scripts/library.ts b/src/scripts/library.ts index 57f819bfb..ec0204265 100644 --- a/src/scripts/library.ts +++ b/src/scripts/library.ts @@ -1,12 +1,11 @@ import { favButton, favIcon } from "../lib/dom"; -import { addToCollection, fetchCollection, getDB, removeFromCollection, saveDB, toCollection } from "../lib/libraryUtils"; +import { addToCollection, getDB, removeFromCollection, saveDB, toCollection } from "../lib/libraryUtils"; import { $, i18n, notify, removeSaved } from "../lib/utils"; import { getSaved, store } from "../lib/store"; const importBtn = document.getElementById('upload') as HTMLInputElement; const exportBtn = document.getElementById('exportBtn') as HTMLButtonElement; const cleanBtn = document.getElementById('cleanLibraryBtn') as HTMLButtonElement; -const collectionContainer = document.getElementById('collections') as HTMLDivElement; importBtn.addEventListener('change', async () => { const newDB = JSON.parse(await (importBtn.files)[0].text()); @@ -47,12 +46,6 @@ favButton.addEventListener('click', () => { }); -collectionContainer.addEventListener('click', e => { - e.preventDefault(); - const elm = e.target as HTMLAnchorElement; - if (elm.classList.contains('collectionItem')) - fetchCollection(elm.id); -}); const dbhash = getSaved('dbsync'); const hashpoint = location.origin + '/dbs/' + dbhash; diff --git a/src/stylesheets/library.css b/src/stylesheets/library.css index 53a0f4875..4cd6c6cd2 100644 --- a/src/stylesheets/library.css +++ b/src/stylesheets/library.css @@ -1,35 +1,6 @@ #library { width: 100%; - #collections { - margin: 0 4vmin; - padding: 0; - - - a { - border: var(--border); - background: var(--onBg); - border-radius: var(--roundness); - padding: 2vmin 3vmin; - margin: 0 2vmin; - margin-top: 6vmin; - padding-right: calc(3vmin + 0.4rem); - display: inline-flex; - align-items: center; - - &::after { - content: attr(aria-label); - } - - i { - font-weight: initial; - pointer-events: none; - margin-right: 0.4rem; - } - } - - } - select { margin: 1rem 0 1%; background: var(--onBg); From 4438f770b20063e5661ced5ed52d267c829297a4 Mon Sep 17 00:00:00 2001 From: n-ce Date: Wed, 14 May 2025 16:57:30 +0530 Subject: [PATCH 04/10] port UpdatePrompt to uhtml --- public/logo512.png | Bin 14036 -> 72739 bytes public/logo512old.png | Bin 0 -> 14036 bytes src/components/UpdatePrompt.ts | 39 +++++++++++++++++++++++++++++++++ src/main.ts | 6 ++--- 4 files changed, 42 insertions(+), 3 deletions(-) mode change 100644 => 100755 public/logo512.png create mode 100644 public/logo512old.png create mode 100644 src/components/UpdatePrompt.ts diff --git a/public/logo512.png b/public/logo512.png old mode 100644 new mode 100755 index 3a2548748c3a811ae1257524913a52d7b8930792..41fce3bc782f3b169f83e1026005edc2836e8065 GIT binary patch literal 72739 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 F{|9*x>~{bF literal 14036 zcmdUW`9D-&{QtRkW-#`htV4xT(PpWbQG_<$6-s2&K<`Cwo>A1;s5|C zdpqlc0Kmde7>E&suMe+RH40zEb5{GU0C*cK!9PI~mLcDRwmU&?tHvk*1mL*uunix_ z@tu+Q?i}3iExt1xw|R}zZU}$!aSXQ##VrGHD+H$n@s7kAgcd;coX zt`Xn;{Bdm_zBjc!n~`#`#<;a=Ss+MtVJ+DeJg>vtu)c0rdEZa(_b{EtaJYybW z7Zo!~i__{0QVXN@vz zxsiL)rmpAN(}L3lWtVa~Qx`eE}+l3{uxvf{yaw=by`Q~I?DX)yn>7W($#@u^# zrm8wJD+ehl$a-7ooB!d)n_s&MvroUDba`{GzI1HYyIjAL!j!!C*>5L(BYJPgy$gO@ z5fsuD+D{>2CV0SH$w-GK-n}`(eT`64&_PP2<({8y||(O9}^W-z|HdyRfuW zw?KU6bsc2=g;4?fB23~FwOsPAHwzE3GDwXNz(u_*YT zg>miRfkWe?uKrsA*nGy`+Ujt?_wi@t7gqKt-%h7}J3KlK@42^PZ4%!a-t|gkuXq}p z;^RqHy!O+Zeooo>r1X&oqb`nIw>t(0qQ6qCd>^hH2@bm*)9QNB<3i%V=w_84sqPs5 z<(2D72PS?DcP&4>0iWGG`*`lF15Z-8OaVp60uTeV|5?DY0R8{-7XY_J{+|V4bF%HS z%%AKV&^lT@b(KKTa~R4RJZmvNcjMIh@0z&b?6v`7P_WJk$+Jx64q*Mc|Ezk$)-M~tiIF7_ zCmE+32ReJM{=U^O8&5zp-n*t>;jaSan9Ek;pN$$-SHwO6nqp38f>|;6rta5(?S$<{ zU7i_pZ+15+dlzfQ1Jv`m(@9aF%ls#T_9J$fi=V(n;)7M`?;TYiDU({LfvZ>lo;ng* zj&5XC%Q@z=GAoRh+KhZ;_x;v@s|d1NO_c_bmMIS?&J$c~kF>4ua8f+%WGE}yEHN8X z(tr+wE&4}o-lzgS==5;ZL_9$!+0F0T;a^`re>OW-xmtuTLV21K7KESC^Gn7^)338E^P+rk#lV;+-8L-;R6F@Jvp!FM^l*2iJgU0`$lJN2WF& zi>D}5IE;l3j!PMHH-pc*#+V_z5B3D|K@|29%al0qFRR3SZ-ZluOgvTOmI(cwAC#dA z`ubkbE_pdkOmtT4c++vx%9ea6PBL*dLo7&yvKedGMz}CnK?<)63o(}t{5kx@d)Ovu zoLN13C0>?jfA#o3)k#$}@DCA%nEybW;+`_Ot1nc(2W1F`ud6(GArfbRk1kps+p-e) z#6jF^=$;c|>s*bn3r*@56djFz6ovA`wKP6t2DFjm!WV28Y(EAeM?3vqut0M$6=uFr zUwqJg;ZDZ1)^gr&-PW$TWpy>BxdZ-;KMcOZzoV)9&AW)d;r4;m>Kw@!fhL!2g;O##1u~KyFjwsq%vyY3q>s`uv`5dGIJTV_>I&Pe_g04ldpfd zkZEEmvG1HlWrb8n%Vf|+lWu#^;MJ2gmR?rmVMEK{=*_NrG3BA^2>BdPOOS!Qp#aIk z<`a};;CF6?XY|i+<@NUQ2qPD4&GeP zuA*Bm{Pde&eEL0xS=~m&crxUzK#{n+nf>oN^y0!?V6xGTy#0Chl9RqU|2e4LqCDZt zJbJcNvS>8_D0fd7T0+j>kP9yWPcvtgSIv3JA=N4NnNd-vEZedXv*9bcV?AD%|`{pKX|x)zNfb{T(&3cn(t+Rs+xovk^3 zRAX$X%Wz!%m0;aF74d0>EB_sW?@cu50ddUZ0j?I(H2P`5l4}YQEI=*p+A_t^?sIkX z{qsvzd#qE(NH4+qz*0>-_SHZv=E2xA0E)&;^s|x z7khLl{g+O=M)w1sJmOg0z8xI=KVNfu8;Id{L=x5VIQmYXY}_YptcWlF1RIcY>|?NU z1nMw+Z!sBs&J0kcQ1#Y<$rb9;p5Vr}=rhH~@Ycq!U#znGx`B}2p~)tKC)9_0?P-34Jf2?Yt^jp;VSX>L zgdO5gEVA_;OWG&P(xZpOz#5INUXgEJBen`I?w=~|`f*|5W*HWFvPui@#v;qt^dLb& zL07K4oxrbT&D5#DLi7GyB;wS~kmKE?ChCn!)8|S<(O%_0pbSAY9*+k-0y1AmXD{#h z{Rmf?=y1+w+5EUNmaMPCoym(d?fOTCNH~6Y?;XA9d%rjrmT#T~l;um9gE=VW_uyj- z55d4v&P618D{q7Z9rw^Zn?T@Zj}=hMrTY{5yxu#{FT@M7tMpK3a7Y@&Aok!b<6nb{ z9_%U&1viHtC$zg!A@;n{GltxhQ+nk4Wz)`JJ^CJqHirn9%Pb15gK-^o-uufn=Rj8f zhjk;SAX*=$FRD;|JH)+2M`m8Dvk!|gNk9~|;F%a_qL%fR)iEk5jVRCZH(j~d6}%W6 zuq^3vmFY~|NauIWFQg0J*wx_?ckmy_w7~axcP+` z8Fh!p7v~XAv3ATu0zAZ3R7zAn1?!-)#>8v)@MppbRUU=`3KAYx&WF>ilO$(<=z$4u|{2PJpOHtA;+EeJ|uXwoE|an&DWN!5^RQn zk%`Ez}(2O)vFH+~~ITllkZ7 zBe{&_u(QOo>I&e{7z^e)2O`Z=$l7_vHtf;dPWDIc0KF@0HSf{J8JV-h5&y6`iCe8} zNz+TLVgmcpa`E~v*i2{7N96OzkHdu3Oi5(Rh0lNQE*m`rx1pU(W86JzxuHII{<*j2 zU98NW%CMuNf%`HP!4?(wtd8j5 zdIswl{=+#v{fl6G`nmrhJ^CASxC&!eu3kl>Lk9oHy(YW}o>7Oxg9ASJh}C8>wQmCdGBxbc_w-#P65H8Cx`3KY-|ISKe zpI=(^7!bN3?K0fb5ab|K<>(N|^asmS%BQ8Pp-XE=<3qsm=g-w$j|s~Ea*qEFKh=%D zy%~^3`0uv1=7+LBYY1*D*+2gf4pNexCLdUQX9f$-jS=&+k&SE9VtKm&^{$9@YA98; zeXl9;r!JdIe>NFL+Pc~(uXwgj67=A;nB^?8jyM7#QHo-6f}0lS(VN6}k3%@MvFgz5 zoaJ}FW>xU+9huXX>UywCt9roc^LB@b1BMH-Sdr0Mf_&9yhU4bIZ55Q%yUmdx5nL zc5I${Imnr!b;o1$IcT*7F1rRzD=&P{ii=>az)e-q#-!EYMlHBbW;Tg6Iy*@p(I9*Q z?}2q4(av=$ncvT*YO&fapp;lZm4b>Gzp|!OjVGI+xK+?YAKg>4aV@dpv*FMN1^Rhi zLq*RF!N_rUr@M{?ip>8EHC8N)m7*JB5%-%9DOu3 zsGBC-yJ!A!xD+vF6+$KJ-<@4SeP_G0a%f5aqTchhH(;~#G|i{l(q>%m42+1lmzzw0 z)%O9a2Ju!lb28bImgP5hHTuCLSy2p)#;VWpqU~8SinuJK2x_&<5U+3zCa^m~po?fF zmg%Em?nhGp4QH-3rBN~2I=(0&9PY+bfRFrx@H238l<(_6*v#b&)fQNWZU3X-IVzsc zQmSIg@LpX0l73^1%%u~z@XzKv?ofBExVu{l%LaBdwN<YDzF7{5JZ#jaD1dRtX*o*^h*T!O)5+v2^ zAH+tJ4v#aV&V=?5;`4yeV%k$chqlKli=;(A2M0P1w%2F}duKA>6li{t!IY)*bfMGu zDZkOns5&XX892X?SYe#;On*Jk))Uj0|GBh#`54LW`tW7ckd*P17lv`mnfQK}*Jvef zjww8}oN-82I=~PLv5IEy*_X}<-9ML1Q3G=d^Q7uFT}(HI4z6(o-1KI?gF_9O_>Cid^%W>3Mv>WDL)z|iotc}EG1Ic| zo}mtY_!nvGIw=!*1{Z}NO(aZ&{8OaopUqF?S)q42G&>ldU!C`Uf@y{$qEiI`MN~&* znglYEVzm9wg(6(jQPmLpu9!rFoX0+G-^a3ZoYB9vPg~oVkRga%1K403F>{1EZZh{O z(7aC&nS>R!j2EkcRK}V%Ah^356tc$gEmP@0Rci>KQm9np|BOokF^L>UK5*I$&`_tj z#IU+HYY!q&iW7ynwn_aAc?wF7OFpatT~=b=9ueJ?f;TfrM+8oDYcne6dZq}tqDJXnuKaeBSw$Rn&b3(1U=DxR>B__1QY~;e9`+YXt z!`XN(a^yCiU%}rz<-K$8ngb9edVV6uZL~#Cu(j5~YpGT{shgLzd({O-MtB6EX-o3b z0^vgZsmn(GqK-URORXat7Zp1@U1Y!d$XH2PCyL&o+VV_IIX7W5N54PFx>Im=qmV>I zq~bpwX~Watb;LLYbeZv;N>>NTO-)VdPxWa(j20iV8BZvLxZvlb3c(qi>xb2RPShFA zP-*JuTg)D^6b^2FV2K%S1Iyz4`28UtIM*T=22VC^z%I>js(?H`xc`>|Q;=Ap1Jg;d zBY4GX&?(&|jkpv`T=;%;Pam#_`xav^+X+9DK~XbJuK*S$9dWP5+8la_=(eT(9k$V9 zb!~_l?)#`2dBQW=U=%z}^u(3&{sSn~j>iE5v=LFjdq2;*IO#AMN0+ER$8dGN3jUYe z9_&P>7E*Vh!N0XY3M-Oc!pVX8G->)UtNI(DoG{ZdfSE4o6v(RolI zNjxr(0TJ5el_mM_1AXX!k%YbIO_HjY&yoZIAa_J*5d^yHJpTD}w2D!&r9W0r$quOi zQH#_V{##tdMCP#tq``ppzXirY&3NS+NwnzhXRMh)>|UEP_RN{9xX2pjX=|4(;N#QV zULf~k8=`F-(BiE3(=G-0%&Rx@L-=pkS62gep(?A`%FQ7M@?geil&xT%=7>iF_93$gZcFc>82m~Ia?00g7Vj$?$I1`K zT0q}9@5glUy@9n35LzSydwqZ~TYWa(SfiaaIahWni~aVBKt_7N8vnY~kmE2u8UPo1 zY;VLx6`8g0;rR@F;RQaN9td~CXqKY^+obzFQ56Xlcn{&@~y=m;W?6jWq^+ZkhnuBjc7-{dfWg^I94Y>}-0+?P^A z?!%3IPQ;;J&@F=f$cLKS7;#V|{=gg(e`yD$Uxx(o3)Fu&q0gIJ(mCQjv0GNxEz@L^ znAXQb)kZ-d59)m9&xhufF{I{d+?Rj$tP4kz_!oOj70fCHFwUr{Om< z;wcB=0TUCGC~7OB0r0}F+M1Q+*e{Ow?K>Wq&Wcre1uxl;M2K4%!& zK*q{fv4bOsNy8Y!7CNBy0JIfrSr)7YQ?{gBO@VDr!IexYF~CN^4C3CWy?QeBWz{l^ z96AA+xi5ad%)B8ndRJcjNM@AN~VeXAxXEE7R!*h8u`Yat9%b4<&gX`~T@g^Av z+`iio)|MxDc!D@+=ErRz1g?%(XQ<(!GDSL4VQFptpEq%W{-rt z*G;Vmb>_MRQ<^mCU5!L6vc7C%%ZdWU&xqM_<4fsDyD1fU_BL!Hu>oC_UZe(AW1?6a zgu9Y3kGBLjQ%F_fSkbrTKoAGV^*W503*Jx!<$NZ(frY2zmA zH9&UGv$MVpPGUUb4-Y*~lwlc*NQ$HS4vKhsnIJj2H-gHGoVuVy^M7VbZ6I=uS#6gw z_Zn;Db4w?~?1kY#>7OfDgEn}e-`n2z9omjq>t17gR28K>pBscZS0^XJN+SY3AM&WZY(vpKt2^2pm|6{iopYCMF&4|%v9T7}F~yS0@i0MDU< z#P^Q$5ktweRlpzYC3AcDJ8IfK0`}7<=D%+Wo~U&P>o4N_cpE|djHX}K9&hQon}OHx zy-@dNmJoS>5tsXtD2?KHwer%@7JTK(YP#%7`ZdLEY~nh$wF`<t~Hro57x4-gN(|LAx#}G14ZD1Y0 z-^hBq*qFT=O4_?xomGmZl7L*-S4It|Yit)k10c*1dGtL+5X&zjCIM(4T_#DFOJcI$O-EE6-oV~FLB&!S^H<61oMH*shONi{zHRPPWus# z`D@mVoT)K>U8hGH!c_XS8l1W_wGv_DcNdLfbc56&M~FPYuxr*^cNf&kKt3}4c+Zag z==(vp%jTKW+Eb^tN||om`b;bMlQsRG_C5*x2frHMcI%`}$4{PhN3B-F*(7? zj=Q`);<1dM5xt1zNq1%NRo9|79jP{!4c>oeuTrR z&o{|`4Ou2~jf#&z+oMrvZMGeFDZ`he62WeoB9UgnegMQ-(|A&b)C*9DeE*2-Uu4~*cC*B_ z)y^bc#=APV4^yuL-rsp``mzFc^7CAZPk+kD^=J_x$b1ISU`2p`Q=B=6hY8jX;LQin z9baM(5}U2hZQ6ma{)}gb9D0Ir5&fWpzz=yZxW34e#J}G;njjO?oICcF)#?#Ea;*RL z#G{+k6G*+sy0h+|ww>ei9F%E}EoeO0m=SKE1}L~WY(R*k?q+W~PwQ(#VM{Hb-YQKQ zqN?CULqkLFhLDqLzjs)CKL)ARUkLO68#&cwMsy4uJC{zqhljHoiX^f(2ls;!WvJbr z*ME{|z=Y-RBw0Wd+~f}H{^GDX^m6m(eP?e^U4+{ksF(3m8bEzpa2;MX&HBMV_v7~Y z8{zC@!UgR91$V!-*ro|K@coz5XBQ0lb6{#G9sXB!XpGL}R(Avs$3pTgl}QW-?#q>m4LS#rL^ zTXyFk%H5AnMRR2^Z?ecS8hEA(u5e}c62W=ONgKAn@hKdI#7D9vMcBsEZL40aT}F0| z15@dFfB%w_hK7dyt$tIiGo33YCyGlPT3cgcT3ZhsC~mOWjYtvmb1ktB2f=w>iL;@` z$CeE_iP!Lj*;z%8*Bji@p?g7nG7!28X7IBxV7MbHRyhD!v zRy=KJNr^#G32~(|{roKN3!0>*6w!;r|H*I=&UX$7QTqUWuRXA<>L2+&{cm zevUa4>8D2tbiiS2W7}i|@yn0~S3DtEpzsO*YfNI|S9FlWAO=0bWb7sl=)gNSL1~~7PqdJqN1%8zS85Ka z0?c7n-q{&>2mj{hE3xS6>UVP7#LMNRs1;z+fiB`h1ejQ2y|$8UYvcoJpUi*2llLeJ zA8KDX0B#@clLDOOENy;w#kZEEo}hf3OSmqY(S&8jf_NYc%@f;W#G`1iC;tS|k#~o> zhqfPt;=TJ{PP_ol=HS9$5OohYmZ4LIj5jRoR>sz8MN?7f`Q*-$+jFr$OoAD z-RtF7WD~fOQDiik-Kwl3bg7ElXz<2|s3VPPfbxEj$7)6Y05k zr2x{e-oG&SI5)TDDGn{=mlB8xFa>Peb}|i!qdyKpCqBdf=n}#p@Gf)ocK?C_WHMN! zohBpk1DQ}V0jkiyokfK|{YXHZ*{(Bk2>uz9A=G_NFF$cT<-KX}hpC$@(TEM-;dwat zAZVYE;{D=GOs?kN=e&UcJ~1fUNJcw;>#XwGezja%Wexhvh(ue@^_i~kU$6!NvKd;v zA8Mxi#fiC_fF3KI$Ob%U3YVSWZ^Twk#zq4=CKnIBY3@U*-R4Mp@w+W|U7Buo*zLR@ zpr)*{6F#;!)UkK>hBTesZ(Q_V5jRMlr4bB6+tnn-6+;zs4>hKql;{W{*LTB8KlbUY zf0QAwu5>~SioTP;HQx1(!?-zd^PNSx!t(y#hpw^G?=FX3gpMzVe(?$R}$ZoaZ8fkEI;{i8OWKxsF-n9ba?BF-F zJwD+H@y#_S&GYd+YV0m9*2F}$-FJAqL7t)pKM7F06*LZ1!99jJ%49{fJ>CS8B7Bfo zB3;vvcWY^iZ-o51`T(!i?DHtyC4%zSK;cmK)~?QCytugXu5|v|O>~K29ZO?GbDemw z5s_~BXf}~_i=VV$bXkopYsf8$*scMc23&lzbbeX!+EGL7SSa4q5dDD@Eyg2v;}MTM z3@DW;SV=jVro^OaIc|6a8HfUsmjb@^H*}YyRB{B8Spy$8YM)xrgRzf12n#ytK<&TD z9b!4Y7DxF_1K`X#5>w1)8|`y1knrbM%A#|J&*E2?EO&$>JuO7zNi|uLBa>*5cs&Yl z{iWFh*f0^-O~Lz=ExjNPzv2kbLKa;#LRq2?Pmv!Vv}blf9q$f2} z7+)D9U-{gVBr}xQ7%gs~l%FceeBb%ASOL8)K;-^%6d;YXCzYp6=6|}u$0@-kXy`t0 z9#Bv{5*h`z;j2RMBher6842#1=gZ4C50JgQO7+1F{Uj+SMU57CE`nD8c|C&9N-=pp zI{h4VNF&|o877tF;g*92z5$Qfck@9m*uM=cSTT7bKc7!62hFF3d(ZJNi?cNb&yZ?G z;t2dz=!R+UlcdA2L9Vzcuie89W4MFPw=KupIo;iU>)~eS4Gz*2B_NWotBVrZ(#EHN zM8I}o?U7HQ+iU}pCbR?K8u~KHC06AL%Tzl5MT})H=U32}a#$F7 zvQ1?grHVQP+88jS#hEh>;u+l{`CNXb4-gHWnv-^^>KhwUl3hfS^$Cp+AV;B{yk6c4 zGP0Eo8}Y%=nFTiFg@sz~ka3eo=Z-zsV73FS2KX32UZNS<&f!o+p>hgK^cWf?aIe!I z?p{x5d;|?_gnUSjNba)Mx)fyB`G7*E$BvZ3Wp-mIQXfLf4%pW z2CB=f5pU;LmXZ&j!$bOz7SmflJ(r~9ffE=(DbN=`D{t}UD%8|v^h0SJ zB)D~FQAJJa0XQIAm6Fi>5raC{jL) z^UIb%gB%HH;Ca`l73VbBOMW7_0#}Ad)e5fYXdBSnw`Uv}2(do%AHpN2Z1AVq!vh4Y z1vB>_VG8Dvk&lk?-kGmWI1RR(CLKB2LtI*Rmqbmt!{UygCC~;ofAoAs42IIKo!Zh_nnsK}hb6z?&vj5@-ajM^ z6G@U=kv!7m*y;)WrAU2!{YUDz3$~udRH19wM_>{GH$o`YUg-L6|0@E!?^Xsa1=gEp zLPL~eFF&3ukct5{4y3s4loi009og{o{V?q5K4dh>NO>M}nF+G|j<2;RZK1(e@=>1N z3Q){8S<5^=EX|Za7hvONkH6gOUn0r3mXz-IJdJ<3j}@<^Op}i5UybSlAtW>gb44Ll zBk4SIzS*19Z|Q5<7xusWZxncf)6kTLKkYai4l&_t&}1ZV)y_+gRp1vY8sDKBQld4% zV#5^)REO^dMImorg)Hv`ok!+_)$ujGvDN#iHc;4%=j-?rq(-r*R1y<7n+XGM((!G8 zuZxD%OrWv6?Qak0Uzy^`>|uusj1&^2TXXRE;QAPQm z@A-flMjg!LH36qn7>XD0`g3O zHkqy3x|_A1S__LAk%#F!&#!__LYQ@i`~Ij zK|Tn_w*Iq`JBwj9T$6zw(S2NImVCh0?CVsI`8ye6JJ8i{m5!@b zrpclFk06r^EUHKuV$x&g1!=@jhKNi10kOBCRBEF;vA(~nyXuc1SrRneXRSehni{JAsln@6IS|ni6lqdnYLzBB*+P!4y!x-YCpZ)s`5Z*eF!^ZC=p-^hwk5Q6rz;q~E&L*j|_r zVa~?BWP)2}6(v*->@#pqKuzm_(FIe*m@u$usTb3r|g)QZ0Ll zu09486CBC4T6XJ=<<0&x4Ot7B!57}aad2iC;JJbN$-B^`jjTJNSItgYc0k@v1yY3r zlm_fTEn}4^1v*^UzSyNrm@5Ic9SWaXl67wC(wdO6Pb$4O_cF&_~aiwyDIhg zcPnY9X%E+>@_=OMe0rke~gb?%tO~<3CB-&HXwp+F0&e?~X;D@@v z4k%ROZ3*C>)y^XJp&`Wb-$lL$3ff7(SC5O89)NWTlUjEE z?3pV~-}o$9NcAl8^r0Mc8*^!2T)&?2Cuzs+>K2`|EDEIRIC%S@Iy4R%fdxDtIWnTZ*`|D~}HD?E!O=+3(OWw=6m(fY!a3@6B!`FQ5lIO)~!n+_4 z1rSl;Wf1s(DF8G`cwyv!r~AKb?*EMp(6xnu#s9+h(sl6tx{Qji$I45FB~3v1*xMYi J&fQ55{XgCh*#!Uq diff --git a/public/logo512old.png b/public/logo512old.png new file mode 100644 index 0000000000000000000000000000000000000000..3a2548748c3a811ae1257524913a52d7b8930792 GIT binary patch literal 14036 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 J&fQ55{XgCh*#!Uq literal 0 HcmV?d00001 diff --git a/src/components/UpdatePrompt.ts b/src/components/UpdatePrompt.ts new file mode 100644 index 000000000..1494cce72 --- /dev/null +++ b/src/components/UpdatePrompt.ts @@ -0,0 +1,39 @@ +import './UpdatePrompt.css'; +import { i18n } from "../lib/utils"; +import { html } from 'uhtml'; + +export default async function UpdatePrompt(handleUpdate: () => void) { + + let dialog!: HTMLDialogElement; + const commitsSrc = 'https://api.github.com/repos/n-ce/ytify/commits/main'; + const commitsLink = 'https://github.com/n-ce/ytify/commits'; + + const list = await fetch(commitsSrc) + .then(res => res.json()) + .then(data => data.commit.message.split('-')) + .then(data => data.map((text: string) => (html`
  • ${text}
  • `))); + + + const template = html` + +
      + ${list} +
      +
    • open(${commitsLink})}>{i18n('updater_changelog_full')}
    • +
    + + + + +
    `; + + return template; + +} diff --git a/src/main.ts b/src/main.ts index 81266a218..a1b8f2a9a 100644 --- a/src/main.ts +++ b/src/main.ts @@ -6,6 +6,7 @@ import './scripts/list'; import './scripts/search'; import './scripts/library'; import { render } from 'solid-js/web'; +import { render as uhtml } from 'uhtml'; import { actionsMenu, superCollectionList } from './lib/dom'; addEventListener('DOMContentLoaded', async () => { @@ -28,9 +29,8 @@ addEventListener('DOMContentLoaded', async () => { await import('virtual:pwa-register').then(pwa => { const handleUpdate = pwa.registerSW({ onNeedRefresh() { - import('./components/UpdatePrompt').then(mod => - render(() => mod.default(handleUpdate), - document.body + import('./components/UpdatePrompt').then(async mod => + uhtml(document.body, await mod.default(handleUpdate) )); } }); From 675be1f4cd7b656270e8e371e9ddecbb078a98c7 Mon Sep 17 00:00:00 2001 From: n-ce Date: Wed, 14 May 2025 17:31:18 +0530 Subject: [PATCH 05/10] fix collections list regression --- src/components/SuperCollectionList.tsx | 13 +++---- src/components/UpdatePrompt.ts | 4 +-- src/components/UpdatePrompt.tsx | 50 -------------------------- 3 files changed, 9 insertions(+), 58 deletions(-) delete mode 100644 src/components/UpdatePrompt.tsx diff --git a/src/components/SuperCollectionList.tsx b/src/components/SuperCollectionList.tsx index a4cd312ad..7d603d73b 100644 --- a/src/components/SuperCollectionList.tsx +++ b/src/components/SuperCollectionList.tsx @@ -1,5 +1,5 @@ import { createSignal, onMount } from 'solid-js'; -import { getDB } from '../lib/libraryUtils'; +import { getDB, reservedCollections } from '../lib/libraryUtils'; import { superCollectionSelector, superCollectionList } from '../lib/dom'; import { removeSaved, save, superClick } from '../lib/utils'; import ItemsLoader from './ItemsLoader'; @@ -75,11 +75,12 @@ function loadForYou(db: Library) { function loadCollections(db: Library) { const keys = Object.keys(db); - return keys.length ? - keys - .filter(v => v !== 'channels' && v !== 'playlists') - .map(v => ({ type: 'collection', name: v })) : - 'No Collections in Library'; + return (keys.length ? + keys : reservedCollections) + .filter(v => v !== 'channels' && v !== 'playlists') + .map(v => ({ type: 'collection', name: v })); + + } // APAC : artists | playlists | albums | channels diff --git a/src/components/UpdatePrompt.ts b/src/components/UpdatePrompt.ts index 1494cce72..3e69d6245 100644 --- a/src/components/UpdatePrompt.ts +++ b/src/components/UpdatePrompt.ts @@ -17,13 +17,13 @@ export default async function UpdatePrompt(handleUpdate: () => void) { const template = html` { dialog = el }} open >
      ${list}
      -
    • open(${commitsLink})}>{i18n('updater_changelog_full')}
    • +
    • open(commitsLink)}>${i18n('updater_changelog_full')}
    diff --git a/src/components/UpdatePrompt.tsx b/src/components/UpdatePrompt.tsx deleted file mode 100644 index da096eb92..000000000 --- a/src/components/UpdatePrompt.tsx +++ /dev/null @@ -1,50 +0,0 @@ -import { createSignal, onMount } from "solid-js"; -import './UpdatePrompt.css'; -import { i18n } from "../lib/utils"; - -export default function UpdatePrompt(handleUpdate: () => void) { - - const [list, setList] = createSignal([
  • Loading Update
  • ]); - const [fullList, setFullList] = createSignal(['']); - let dialog!: HTMLDialogElement; - - onMount(async () => { - const data = await fetch('https://api.github.com/repos/n-ce/ytify/commits/main').then(res => res.json()); - const list = data.commit.message.split('-'); - const e = list.map((text: string) => (
  • {text}
  • )) - setList(e); - }); - - const handleFullList = () => - fetch('https://raw.githubusercontent.com/wiki/n-ce/ytify/Changelog.md') - .then(res => res.text()) - .then(text => text.split('\n')) - .then(e => setFullList(e)); - - - return ( - -
      - {list()} -
      - {fullList().length > 2 ? - fullList().map((text: string) => (
    • {text}
    • )) - : -
    • {i18n('updater_changelog_full')}
    • - } -
    - - - - -
    - ); - -} From 6cc5ee08f5b92c823c902faaf9be02a106fb0c82 Mon Sep 17 00:00:00 2001 From: n-ce Date: Wed, 14 May 2025 17:52:49 +0530 Subject: [PATCH 06/10] add error handling to update prompt --- src/components/UpdatePrompt.ts | 38 +++++++++++++++++++--------------- 1 file changed, 21 insertions(+), 17 deletions(-) diff --git a/src/components/UpdatePrompt.ts b/src/components/UpdatePrompt.ts index 3e69d6245..7df56a01b 100644 --- a/src/components/UpdatePrompt.ts +++ b/src/components/UpdatePrompt.ts @@ -11,29 +11,33 @@ export default async function UpdatePrompt(handleUpdate: () => void) { const list = await fetch(commitsSrc) .then(res => res.json()) .then(data => data.commit.message.split('-')) - .then(data => data.map((text: string) => (html`
  • ${text}
  • `))); + .then(data => data.map((text: string) => (html`
  • ${text}
  • `))) + .catch(() => html`
  • Failed to load update data from Github.
  • `); - const template = html` - { dialog = el }} - open + return html` + { dialog = el }} + open > -
      - ${list} -
      -
    • open(commitsLink)}>${i18n('updater_changelog_full')}
    • -
    - - - + - -
    `; +
    +
    `; - return template; } From 3a904fbb9a4c9ee9c88392707da70d0e2f316a15 Mon Sep 17 00:00:00 2001 From: n-ce Date: Wed, 14 May 2025 18:02:43 +0530 Subject: [PATCH 07/10] added pwa share action watch --- src/components/Settings.tsx | 1 + src/locales/en.json | 1 + src/modules/start.ts | 8 +++++++- 3 files changed, 9 insertions(+), 1 deletion(-) diff --git a/src/components/Settings.tsx b/src/components/Settings.tsx index 269b8b6a8..d513022d1 100644 --- a/src/components/Settings.tsx +++ b/src/components/Settings.tsx @@ -182,6 +182,7 @@ export default function() { }} > + diff --git a/src/locales/en.json b/src/locales/en.json index 8df4abcea..03f5ca2b2 100644 --- a/src/locales/en.json +++ b/src/locales/en.json @@ -97,6 +97,7 @@ "settings_download_format": "Download Format", "settings_pwa_share_action": "PWA Share Action", "settings_pwa_play": "Play", + "settings_pwa_watch": "Watch", "settings_pwa_download": "Download", "settings_pwa_always_ask": "Always ask", "settings_search": "Search", diff --git a/src/modules/start.ts b/src/modules/start.ts index 740bdf6b9..279f76744 100644 --- a/src/modules/start.ts +++ b/src/modules/start.ts @@ -4,6 +4,7 @@ import { $, getDownloadLink, i18n, idFromURL, proxyHandler } from '../lib/utils' import { bitrateSelector, searchFilters, superInput, audio, loadingScreen, ytifyIcon, searchlist } from '../lib/dom'; import fetchList from '../modules/fetchList'; import { fetchCollection } from "../lib/libraryUtils"; +import { render } from 'solid-js/web'; export default async function() { @@ -58,7 +59,12 @@ export default async function() { if (id) { loadingScreen.showModal(); - if (isPWA && shareAction) { + if (isPWA && shareAction === 'watch') { + store.actionsMenu.id = id; + import('../components/WatchVideo') + .then(mod => render(mod.default, document.body)); + } + else if (isPWA && shareAction) { const a = $('a'); const l = await getDownloadLink(store.actionsMenu.id); if (l) { From fb082de71eb4eb31635a40e4d4ad8204de77e766 Mon Sep 17 00:00:00 2001 From: n-ce Date: Wed, 14 May 2025 18:24:34 +0530 Subject: [PATCH 08/10] fix update dialog rendering conflict --- src/components/UpdatePrompt.ts | 19 ++++--------------- src/main.ts | 19 ++++++++++++++++--- 2 files changed, 20 insertions(+), 18 deletions(-) diff --git a/src/components/UpdatePrompt.ts b/src/components/UpdatePrompt.ts index 7df56a01b..55f9ad124 100644 --- a/src/components/UpdatePrompt.ts +++ b/src/components/UpdatePrompt.ts @@ -2,9 +2,8 @@ import './UpdatePrompt.css'; import { i18n } from "../lib/utils"; import { html } from 'uhtml'; -export default async function UpdatePrompt(handleUpdate: () => void) { +export default async function UpdatePrompt() { - let dialog!: HTMLDialogElement; const commitsSrc = 'https://api.github.com/repos/n-ce/ytify/commits/main'; const commitsLink = 'https://github.com/n-ce/ytify/commits'; @@ -16,11 +15,6 @@ export default async function UpdatePrompt(handleUpdate: () => void) { return html` - { dialog = el }} - open - >
      ${list}
      @@ -29,15 +23,10 @@ export default async function UpdatePrompt(handleUpdate: () => void) {
    - - - -
    `; - + + `; } diff --git a/src/main.ts b/src/main.ts index a1b8f2a9a..ba2574295 100644 --- a/src/main.ts +++ b/src/main.ts @@ -29,9 +29,22 @@ addEventListener('DOMContentLoaded', async () => { await import('virtual:pwa-register').then(pwa => { const handleUpdate = pwa.registerSW({ onNeedRefresh() { - import('./components/UpdatePrompt').then(async mod => - uhtml(document.body, await mod.default(handleUpdate) - )); + const dialog = document.createElement('dialog') as HTMLDialogElement; + dialog.id = 'changelog'; + dialog.open = true; + dialog.addEventListener('click', (e) => { + const elm = e.target as HTMLButtonElement; + if (elm.matches('#updateBtn')) + handleUpdate(); + if (elm.matches('#laterBtn')) { + dialog.close(); + dialog.remove(); + } + }) + + import('./components/UpdatePrompt') + .then(async mod => + uhtml(dialog, await mod.default())); } }); }); From ac9df8399ce6ee2c9759819e775efacb6ccccd07 Mon Sep 17 00:00:00 2001 From: n-ce Date: Wed, 14 May 2025 18:50:21 +0530 Subject: [PATCH 09/10] fix update dialog appending --- src/main.ts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/main.ts b/src/main.ts index ba2574295..e3c11f85c 100644 --- a/src/main.ts +++ b/src/main.ts @@ -34,17 +34,17 @@ addEventListener('DOMContentLoaded', async () => { dialog.open = true; dialog.addEventListener('click', (e) => { const elm = e.target as HTMLButtonElement; - if (elm.matches('#updateBtn')) + if (elm.id === 'updateBtn' || elm.closest('#updateBtn')) handleUpdate(); - if (elm.matches('#laterBtn')) { + if (elm.id === 'laterBtn' || elm.closest('#laterBtn')) { dialog.close(); dialog.remove(); } }) import('./components/UpdatePrompt') - .then(async mod => - uhtml(dialog, await mod.default())); + .then(async mod => uhtml(dialog, await mod.default())) + .then(() => document.body.appendChild(dialog)); } }); }); From d6d57f4c9e9afbe9f7054a109ad343c2b98b2fbc Mon Sep 17 00:00:00 2001 From: n-ce Date: Thu, 15 May 2025 11:06:51 +0530 Subject: [PATCH 10/10] fix discovery loading --- public/logo192.png | Bin 3939 -> 12982 bytes public/logo192old.png | Bin 0 -> 3939 bytes src/lib/libraryUtils.ts | 5 +---- src/modules/setDiscoveries.ts | 10 ++-------- src/scripts/audioEvents.ts | 25 +++++++------------------ 5 files changed, 10 insertions(+), 30 deletions(-) mode change 100644 => 100755 public/logo192.png create mode 100644 public/logo192old.png diff --git a/public/logo192.png b/public/logo192.png old mode 100644 new mode 100755 index 1b244ba6d6442b2bcb6cd79afe292415dc5b743c..5e8c42dda653a750f3c587bae4284e4062853751 GIT binary patch literal 12982 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 (document.getElementById(name)).lastElementChild; - - export function removeFromCollection( collection: string, id: string @@ -156,7 +153,7 @@ function getLocalCollection( if (collection === 'discover') { for (const i in data) - if ((data[i] as CollectionItem & { frequency: number }).frequency < 2) + if (usePagination && (data[i] as CollectionItem & { frequency: number }).frequency < 2) delete db.discover?.[i]; saveDB(db); } diff --git a/src/modules/setDiscoveries.ts b/src/modules/setDiscoveries.ts index 65aa79463..d4cc15e72 100644 --- a/src/modules/setDiscoveries.ts +++ b/src/modules/setDiscoveries.ts @@ -1,7 +1,6 @@ -import { listAnchor } from "../lib/dom"; import { addListToCollection, getDB } from "../lib/libraryUtils"; -import { params, store } from "../lib/store"; -import { convertSStoHHMMSS, goTo } from "../lib/utils"; +import { store } from "../lib/store"; +import { convertSStoHHMMSS } from "../lib/utils"; export default function( id: string, @@ -62,9 +61,4 @@ export default function( // insert the upgraded collection to discover; addListToCollection('discover', Object.fromEntries(array), db); - // just in case we are already in the discover collection - if (listAnchor.classList.contains('view') && params.get('collection') === 'discover') - goTo('discover'); - - } diff --git a/src/scripts/audioEvents.ts b/src/scripts/audioEvents.ts index 22f25bb25..fa9af3660 100644 --- a/src/scripts/audioEvents.ts +++ b/src/scripts/audioEvents.ts @@ -1,9 +1,9 @@ -import { audio, listAnchor, playButton, progress, queuelist, title } from "../lib/dom"; +import { audio, playButton, progress, queuelist, title } from "../lib/dom"; import player from "../lib/player"; -import { convertSStoHHMMSS, goTo, removeSaved, save } from "../lib/utils"; +import { convertSStoHHMMSS, removeSaved, save } from "../lib/utils"; import { getSaved, params, store } from "../lib/store"; import { appendToQueuelist, firstItemInQueue } from "./queue"; -import { addToCollection, getCollection } from "../lib/libraryUtils"; +import { addToCollection } from "../lib/libraryUtils"; import audioErrorHandler from "../modules/audioErrorHandler"; import getStreamData from "../modules/getStreamData"; @@ -58,21 +58,10 @@ audio.onplaying = function() { if (getSaved('history') === 'off') return; - const firstElementInHistory = getCollection('history').firstElementChild; - - if (firstElementInHistory?.dataset.id !== id) - historyTimeoutId = window.setTimeout(() => { - if (historyID === id) { - addToCollection('history', store.stream); - // just in case we are already in the history collection - if ( - listAnchor.classList.contains('view') && - params.get('collection') === 'history' - ) - goTo('history'); - - } - }, 1e4); + historyTimeoutId = window.setTimeout(() => { + if (historyID === id) + addToCollection('history', store.stream, 'addNew'); + }, 1e4); } audio.onpause = function() {