Browse Source

1.1.20 - self describing code (jk read telegram changelog)

master
exttex 2 months ago
parent
commit
9974c1ea63
53 changed files with 6344 additions and 5343 deletions
  1. +3
    -2
      app/background.js
  2. +4522
    -4068
      app/client/package-lock.json
  3. +3
    -3
      app/client/package.json
  4. +39
    -8
      app/client/src/App.vue
  5. +5
    -2
      app/client/src/locales/ar.json
  6. +6
    -3
      app/client/src/locales/ast.json
  7. +5
    -2
      app/client/src/locales/cs.json
  8. +6
    -3
      app/client/src/locales/de.json
  9. +6
    -3
      app/client/src/locales/el.json
  10. +4
    -1
      app/client/src/locales/en.json
  11. +6
    -3
      app/client/src/locales/es.json
  12. +5
    -2
      app/client/src/locales/fa.json
  13. +5
    -2
      app/client/src/locales/fil.json
  14. +7
    -4
      app/client/src/locales/fr.json
  15. +6
    -3
      app/client/src/locales/he.json
  16. +5
    -2
      app/client/src/locales/hi.json
  17. +6
    -3
      app/client/src/locales/hr.json
  18. +11
    -8
      app/client/src/locales/hu.json
  19. +5
    -2
      app/client/src/locales/id.json
  20. +6
    -3
      app/client/src/locales/it.json
  21. +5
    -2
      app/client/src/locales/ko.json
  22. +5
    -2
      app/client/src/locales/nl.json
  23. +5
    -2
      app/client/src/locales/pl.json
  24. +6
    -3
      app/client/src/locales/pt.json
  25. +6
    -3
      app/client/src/locales/ro.json
  26. +5
    -2
      app/client/src/locales/ru.json
  27. +6
    -3
      app/client/src/locales/sk.json
  28. +5
    -2
      app/client/src/locales/sl.json
  29. +6
    -3
      app/client/src/locales/tr.json
  30. +7
    -4
      app/client/src/locales/uk.json
  31. +5
    -2
      app/client/src/locales/ur.json
  32. +5
    -2
      app/client/src/locales/uwu.json
  33. +6
    -3
      app/client/src/locales/vi.json
  34. +5
    -2
      app/client/src/locales/zh.json
  35. +48
    -14
      app/client/src/main.js
  36. +2
    -2
      app/client/src/views/FullscreenPlayer.vue
  37. +1
    -1
      app/client/src/views/Library.vue
  38. +24
    -12
      app/client/src/views/Settings.vue
  39. +1429
    -1094
      app/package-lock.json
  40. +7
    -7
      app/package.json
  41. +5
    -0
      app/src/downloads.js
  42. +35
    -30
      app/src/integrations.js
  43. +8
    -2
      app/src/server.js
  44. +2
    -0
      app/src/settings.js
  45. BIN
      build/iconset/128x128.png
  46. BIN
      build/iconset/16x16.png
  47. BIN
      build/iconset/22x22.png
  48. BIN
      build/iconset/24x24.png
  49. BIN
      build/iconset/256x256.png
  50. BIN
      build/iconset/32x32.png
  51. BIN
      build/iconset/48x48.png
  52. BIN
      build/iconset/64x64.png
  53. +45
    -19
      package.json

+ 3
- 2
app/background.js View File

@ -117,13 +117,14 @@ async function createWindow() {
minHeight: 600,
resizable: true,
autoHideMenuBar: true,
frame: false,
frame: settings.nativeTopBar,
icon: assetPath("icon.png"),
title: 'Freezer',
webPreferences: {
enableRemoteModule: true,
nodeIntegration: true,
devTools: true
devTools: true,
contextIsolation: false
}
});


+ 4522
- 4068
app/client/package-lock.json
File diff suppressed because it is too large
View File


+ 3
- 3
app/client/package.json View File

@ -13,13 +13,13 @@
"@mdi/font": "^5.9.55",
"axios": "^0.21.1",
"roboto-fontface": "*",
"socket.io-client": "^4.1.2",
"vue": "^2.6.12",
"vue-esc": "^3.0.1",
"vue-i18n": "^8.22.4",
"vue-router": "^3.4.9",
"vue-socket.io": "^3.0.10",
"vuedraggable": "^2.24.3",
"vuetify": "^2.4.2"
"vuetify": "^2.5.1"
},
"devDependencies": {
"@intlify/vue-i18n-loader": "^1.0.0",
@ -33,7 +33,7 @@
"vue-cli-plugin-i18n": "~1.0.1",
"vue-cli-plugin-vuetify": "^2.0.9",
"vue-template-compiler": "^2.6.12",
"vuetify-loader": "^1.3.0"
"vuetify-loader": "^1.7.2"
},
"eslintConfig": {
"root": true,


+ 39
- 8
app/client/src/App.vue View File

@ -3,10 +3,11 @@
<v-app v-esc='closePlayer'>
<v-system-bar
:color='$root.settings.lightTheme ? "#f5f5f5" : "#121212"'
:color='$root.settings.lgbtMode ? null : $root.settings.lightTheme ? "#f5f5f5" : "#121212"'
app
class='topbar'
v-if='$root.settings.electron'
:class='{"lgbt-header": $root.settings.lgbtMode}'
v-if='$root.settings.electron && !$root.settings.nativeTopBar'
height='28'>
<v-spacer></v-spacer>
@ -192,11 +193,11 @@
<v-main>
<img :src='backgroundSrc' class='wallpaper' v-if='$root.settings.backgroundImage'>
<v-container
class='overflow-y-auto'
fluid
style='height: calc(100vh - 140px);'>
class='overflow-y-auto'
:class='{"main-container": $root.topBar, "main-container-notop": !$root.topBar}'
:fluid='fluidContainer'>
<keep-alive include='Search,PlaylistPage,HomeScreen,DeezerPage'>
<router-view class='router-wiev'></router-view>
<router-view></router-view>
</keep-alive>
</v-container>
</v-main>
@ -340,6 +341,30 @@
position: absolute;
object-fit: fill;
}
.main-container {
height: calc(100vh - 140px);
}
.main-container-notop {
height: calc(100vh - 118px);
}
.lgbt-header {
background-image: linear-gradient(135deg,
#FE0000FF 16.66%,
#FD8C00FF 16.66%, 33.32%,
#FFE500FF 33.32%, 49.98%,
#119F0BFF 49.98%, 66.64%,
#0644B3FF 66.64%, 83.3%,
#C22EDCFF 83.3%);
color: #000 !important;
}
.lgbt-header button {
color: #000 !important;
}
</style>
<script>
@ -363,7 +388,8 @@ export default {
cancelSuggestions: false,
globalSnackbar: false,
version: null,
updateAvailable: false
updateAvailable: false,
fluidContainer: window.innerWidth < 1300
}
},
methods: {
@ -485,7 +511,7 @@ export default {
if (this.$root.settings.backgroundImage && this.$root.settings.backgroundImage.startsWith("http"))
return this.$root.settings.backgroundImage;
return process.env.NODE_ENV === 'development' ? "http://localhost:10069/background" : "/background";
}
},
},
async mounted() {
//Scroll on volume
@ -523,6 +549,11 @@ export default {
if (this.$root.loadingPromise) await this.$root.loadingPromise;
this.volume = this.$root.volume;
//Limit content width on large displays
window.addEventListener('resize', () => {
this.fluidContainer = window.innerWidth < 1300;
});
//Check for update
this.checkUpdate();
},


+ 5
- 2
app/client/src/locales/ar.json View File

@ -164,5 +164,8 @@
"Download Filename": "تنزيل اسم الملف",
"Language": "اللغة",
"Background Image": "Background Image",
"Enter URL or absolute path. WARNING: Requires reload!": "Enter URL or absolute path. WARNING: Requires reload!"
}
"Enter URL or absolute path. WARNING: Requires reload!": "Enter URL or absolute path. WARNING: Requires reload!",
"LGBT Mode": "LGBT Mode",
"Native top bar": "Native top bar",
"Requires restart of Freezer!": "Requires restart of Freezer!"
}

+ 6
- 3
app/client/src/locales/ast.json View File

@ -163,6 +163,9 @@
"No": "Non",
"Download Filename": "Nome de les descargues",
"Language": "Llingua",
"Background Image": "Background Image",
"Enter URL or absolute path. WARNING: Requires reload!": "Enter URL or absolute path. WARNING: Requires reload!"
}
"Background Image": "Imaxe del fondu",
"Enter URL or absolute path. WARNING: Requires reload!": "Introduz una URL o un camín absolutu. ALVERTENCIA: ¡Ha reaniciase l'aplicación!",
"LGBT Mode": "LGBT Mode",
"Native top bar": "Native top bar",
"Requires restart of Freezer!": "Requires restart of Freezer!"
}

+ 5
- 2
app/client/src/locales/cs.json View File

@ -164,5 +164,8 @@
"Download Filename": "Download Filename",
"Language": "Language",
"Background Image": "Background Image",
"Enter URL or absolute path. WARNING: Requires reload!": "Enter URL or absolute path. WARNING: Requires reload!"
}
"Enter URL or absolute path. WARNING: Requires reload!": "Enter URL or absolute path. WARNING: Requires reload!",
"LGBT Mode": "LGBT Mode",
"Native top bar": "Native top bar",
"Requires restart of Freezer!": "Requires restart of Freezer!"
}

+ 6
- 3
app/client/src/locales/de.json View File

@ -163,6 +163,9 @@
"No": "Nein",
"Download Filename": "Dateiname herunterladen",
"Language": "Sprache",
"Background Image": "Background Image",
"Enter URL or absolute path. WARNING: Requires reload!": "Enter URL or absolute path. WARNING: Requires reload!"
}
"Background Image": "Hintergrundbild",
"Enter URL or absolute path. WARNING: Requires reload!": "URL oder absoluten Pfad eingeben. WARNUNG: Neuladen erforderlich!",
"LGBT Mode": "LGBT Mode",
"Native top bar": "Native top bar",
"Requires restart of Freezer!": "Requires restart of Freezer!"
}

+ 6
- 3
app/client/src/locales/el.json View File

@ -163,6 +163,9 @@
"No": "Όχι",
"Download Filename": "Όνομα Αρχείου Λήψης",
"Language": "Γλώσσα",
"Background Image": "Background Image",
"Enter URL or absolute path. WARNING: Requires reload!": "Enter URL or absolute path. WARNING: Requires reload!"
}
"Background Image": "Εικόνα Φόντου",
"Enter URL or absolute path. WARNING: Requires reload!": "Εισάγετε URL ή απόλυτη διαδρομή. ΠΡΟΕΙΔΟΠΟΙΗΣΗ: Απαιτείται επαναφόρτωση!",
"LGBT Mode": "LGBT Mode",
"Native top bar": "Native top bar",
"Requires restart of Freezer!": "Requires restart of Freezer!"
}

+ 4
- 1
app/client/src/locales/en.json View File

@ -164,5 +164,8 @@
"Download Filename": "Download Filename",
"Language": "Language",
"Background Image": "Background Image",
"Enter URL or absolute path. WARNING: Requires reload!": "Enter URL or absolute path. WARNING: Requires reload!"
"Enter URL or absolute path. WARNING: Requires reload!": "Enter URL or absolute path. WARNING: Requires reload!",
"LGBT Mode": "LGBT Mode",
"Native top bar": "Native top bar",
"Requires restart of Freezer!": "Requires restart of Freezer!"
}

+ 6
- 3
app/client/src/locales/es.json View File

@ -163,6 +163,9 @@
"No": "No",
"Download Filename": "Nombre del archivo de descarga",
"Language": "Idioma",
"Background Image": "Background Image",
"Enter URL or absolute path. WARNING: Requires reload!": "Enter URL or absolute path. WARNING: Requires reload!"
}
"Background Image": "Imagen de fondo",
"Enter URL or absolute path. WARNING: Requires reload!": "Introducir la URL o ruta absoluta. ADVERTENCIA: ¡Necesita reiniciar!",
"LGBT Mode": "LGBT Mode",
"Native top bar": "Native top bar",
"Requires restart of Freezer!": "Requires restart of Freezer!"
}

+ 5
- 2
app/client/src/locales/fa.json View File

@ -164,5 +164,8 @@
"Download Filename": "بارگیری اسم فایل",
"Language": "زبان",
"Background Image": "Background Image",
"Enter URL or absolute path. WARNING: Requires reload!": "Enter URL or absolute path. WARNING: Requires reload!"
}
"Enter URL or absolute path. WARNING: Requires reload!": "Enter URL or absolute path. WARNING: Requires reload!",
"LGBT Mode": "LGBT Mode",
"Native top bar": "Native top bar",
"Requires restart of Freezer!": "Requires restart of Freezer!"
}

+ 5
- 2
app/client/src/locales/fil.json View File

@ -164,5 +164,8 @@
"Download Filename": "Download Filename",
"Language": "Wika",
"Background Image": "Background Image",
"Enter URL or absolute path. WARNING: Requires reload!": "Enter URL or absolute path. WARNING: Requires reload!"
}
"Enter URL or absolute path. WARNING: Requires reload!": "Enter URL or absolute path. WARNING: Requires reload!",
"LGBT Mode": "LGBT Mode",
"Native top bar": "Native top bar",
"Requires restart of Freezer!": "Requires restart of Freezer!"
}

+ 7
- 4
app/client/src/locales/fr.json View File

@ -152,7 +152,7 @@
"Currently only Spotify is supported and limited to 100 tracks.": "Actuellement, seul Spotify est pris en charge et limité à 100 titres.",
"Import into playlist": "Importer dans la playlist",
"Keep sidebar open": "Garder le panneau latéral ouvert",
"WARNING: Might require reload to work properly!": "AVERTISSEMENT : Il peut être nécessaire de recharger pour fonctionner correctement !",
"WARNING: Might require reload to work properly!": "AVERTISSEMENT : Il peut être nécessaire de redémarrer pour fonctionner correctement !",
"An error occured, URL might be invalid or unsupported.": "Une erreur est survenue, l'URL est peut-être invalide ou non prise en charge.",
"Top tracks": "Titres populaires",
"Show all top tracks": "Afficher tous les titres populaires",
@ -163,6 +163,9 @@
"No": "Non",
"Download Filename": "Nom du fichier à télécharger",
"Language": "Langue",
"Background Image": "Background Image",
"Enter URL or absolute path. WARNING: Requires reload!": "Enter URL or absolute path. WARNING: Requires reload!"
}
"Background Image": "Image d'arrière-plan",
"Enter URL or absolute path. WARNING: Requires reload!": "Entrez l'URL ou le chemin absolu. ATTENTION : Nécessite un redémarrage !",
"LGBT Mode": "LGBT Mode",
"Native top bar": "Native top bar",
"Requires restart of Freezer!": "Requires restart of Freezer!"
}

+ 6
- 3
app/client/src/locales/he.json View File

@ -163,6 +163,9 @@
"No": "לא",
"Download Filename": "הורד/י את שם הקובץ",
"Language": "שפה",
"Background Image": "Background Image",
"Enter URL or absolute path. WARNING: Requires reload!": "Enter URL or absolute path. WARNING: Requires reload!"
}
"Background Image": "תמונת רקע",
"Enter URL or absolute path. WARNING: Requires reload!": "הזן כתובת אתר או נתיב מוחלט. אזהרה: מחייב טעינה מחדש!",
"LGBT Mode": "LGBT Mode",
"Native top bar": "Native top bar",
"Requires restart of Freezer!": "Requires restart of Freezer!"
}

+ 5
- 2
app/client/src/locales/hi.json View File

@ -164,5 +164,8 @@
"Download Filename": "Download Filename",
"Language": "Language",
"Background Image": "Background Image",
"Enter URL or absolute path. WARNING: Requires reload!": "Enter URL or absolute path. WARNING: Requires reload!"
}
"Enter URL or absolute path. WARNING: Requires reload!": "Enter URL or absolute path. WARNING: Requires reload!",
"LGBT Mode": "LGBT Mode",
"Native top bar": "Native top bar",
"Requires restart of Freezer!": "Requires restart of Freezer!"
}

+ 6
- 3
app/client/src/locales/hr.json View File

@ -163,6 +163,9 @@
"No": "Ne",
"Download Filename": "Naziv datoteke preuzimanja",
"Language": "Jezik",
"Background Image": "Background Image",
"Enter URL or absolute path. WARNING: Requires reload!": "Enter URL or absolute path. WARNING: Requires reload!"
}
"Background Image": "Pozadinska slika",
"Enter URL or absolute path. WARNING: Requires reload!": "Unesire URL ili apsolutnu putanju. UPOZORENJE: Zahtijeva ponovno pokretanje!",
"LGBT Mode": "LGBT Mode",
"Native top bar": "Native top bar",
"Requires restart of Freezer!": "Requires restart of Freezer!"
}

+ 11
- 8
app/client/src/locales/hu.json View File

@ -9,7 +9,7 @@
"More": "Továbbiak",
"Settings": "Beállítások",
"Downloads": "Letöltések",
"Search or paste Deezer URL. Use / to quickly focus.": "Keressen, vagy illesszen be Deezer URL linket. Használja a \"/\" karaktert, hogy gyorsan ősszpontosítson.",
"Search or paste Deezer URL. Use / to quickly focus.": "Keressen, vagy illesszen be Deezer URL linket. Használja a \"/\" karaktert, hogy megfelelően rámutasson.",
"Play": "Lejátszás",
"Add to library": "Hozzáadás a könyvtárhoz",
"Download": "Letöltés",
@ -19,7 +19,7 @@
"Estimated size:": "Becsült fájl méret:",
"Start downloading": "Letöltés indítása",
"Cancel": "Mégse",
"Stream logging is disabled!": "Stream naplózás le van tiltva!",
"Stream logging is disabled!": "A stream naplózás le van tiltva!",
"Enable it in settings for history to work properly.": "Engedélyezze a beállításokban, hogy az előzmények megfelelően működjenek.",
"History": "Előzmények",
"Create new playlist": "Új lejátszási lista létrehozása",
@ -36,14 +36,14 @@
"Create new": "Új létrehozása",
"Remove": "Eltávolítás",
"Play next": "Következő lejátszása",
"Add to queue": "Hozzáadás a várólistához",
"Add to queue": "Hozzáadás a listához",
"Remove from library": "Eltávolítás a könyvtárból",
"Remove from playlist": "Eltávolítás a lejátszási listáról",
"Play track mix": "Dal Mix lejátszása",
"Go to": "Menjen",
"Go to": "Ugrás",
"Track Mix": "Dal Mix",
"Duration": "Időtartam",
"Released": "Kiadva",
"Released": "Megjelent",
"Disk": "Lemez",
"albums": "albumok",
"Play top": "Legfelső lejátszása",
@ -163,6 +163,9 @@
"No": "Nem",
"Download Filename": "Letöltött fájlnév",
"Language": "Nyelv",
"Background Image": "Background Image",
"Enter URL or absolute path. WARNING: Requires reload!": "Enter URL or absolute path. WARNING: Requires reload!"
}
"Background Image": "Háttérkép",
"Enter URL or absolute path. WARNING: Requires reload!": "Adjon meg URL címet vagy teljes elérési utat. FIGYELEM: Újraindítás szükséges!",
"LGBT Mode": "LGBT Mode",
"Native top bar": "Native top bar",
"Requires restart of Freezer!": "Requires restart of Freezer!"
}

+ 5
- 2
app/client/src/locales/id.json View File

@ -164,5 +164,8 @@
"Download Filename": "Unduh Nama File",
"Language": "Bahasa",
"Background Image": "Background Image",
"Enter URL or absolute path. WARNING: Requires reload!": "Enter URL or absolute path. WARNING: Requires reload!"
}
"Enter URL or absolute path. WARNING: Requires reload!": "Enter URL or absolute path. WARNING: Requires reload!",
"LGBT Mode": "LGBT Mode",
"Native top bar": "Native top bar",
"Requires restart of Freezer!": "Requires restart of Freezer!"
}

+ 6
- 3
app/client/src/locales/it.json View File

@ -163,6 +163,9 @@
"No": "No",
"Download Filename": "Nome del file scaricato",
"Language": "Lingua",
"Background Image": "Background Image",
"Enter URL or absolute path. WARNING: Requires reload!": "Enter URL or absolute path. WARNING: Requires reload!"
}
"Background Image": "Immagine di sfondo",
"Enter URL or absolute path. WARNING: Requires reload!": "Inserisci l'URL o il percorso assoluto. ATTENZIONE: Richiede il ricaricamento!",
"LGBT Mode": "LGBT Mode",
"Native top bar": "Native top bar",
"Requires restart of Freezer!": "Requires restart of Freezer!"
}

+ 5
- 2
app/client/src/locales/ko.json View File

@ -164,5 +164,8 @@
"Download Filename": "Download Filename",
"Language": "Language",
"Background Image": "Background Image",
"Enter URL or absolute path. WARNING: Requires reload!": "Enter URL or absolute path. WARNING: Requires reload!"
}
"Enter URL or absolute path. WARNING: Requires reload!": "Enter URL or absolute path. WARNING: Requires reload!",
"LGBT Mode": "LGBT Mode",
"Native top bar": "Native top bar",
"Requires restart of Freezer!": "Requires restart of Freezer!"
}

+ 5
- 2
app/client/src/locales/nl.json View File

@ -164,5 +164,8 @@
"Download Filename": "Bestandsnaam Downloaden",
"Language": "Taal",
"Background Image": "Background Image",
"Enter URL or absolute path. WARNING: Requires reload!": "Enter URL or absolute path. WARNING: Requires reload!"
}
"Enter URL or absolute path. WARNING: Requires reload!": "Enter URL or absolute path. WARNING: Requires reload!",
"LGBT Mode": "LGBT Mode",
"Native top bar": "Native top bar",
"Requires restart of Freezer!": "Requires restart of Freezer!"
}

+ 5
- 2
app/client/src/locales/pl.json View File

@ -164,5 +164,8 @@
"Download Filename": "Nazwa pobieranego pliku",
"Language": "Język",
"Background Image": "Background Image",
"Enter URL or absolute path. WARNING: Requires reload!": "Enter URL or absolute path. WARNING: Requires reload!"
}
"Enter URL or absolute path. WARNING: Requires reload!": "Enter URL or absolute path. WARNING: Requires reload!",
"LGBT Mode": "LGBT Mode",
"Native top bar": "Native top bar",
"Requires restart of Freezer!": "Requires restart of Freezer!"
}

+ 6
- 3
app/client/src/locales/pt.json View File

@ -163,6 +163,9 @@
"No": "Não",
"Download Filename": "Nomenclatura de download",
"Language": "Idioma",
"Background Image": "Background Image",
"Enter URL or absolute path. WARNING: Requires reload!": "Enter URL or absolute path. WARNING: Requires reload!"
}
"Background Image": "Imagem de Fundo",
"Enter URL or absolute path. WARNING: Requires reload!": "Digite URL ou caminho absoluto. ATENÇÃO: Requer recarregar!",
"LGBT Mode": "LGBT Mode",
"Native top bar": "Native top bar",
"Requires restart of Freezer!": "Requires restart of Freezer!"
}

+ 6
- 3
app/client/src/locales/ro.json View File

@ -163,6 +163,9 @@
"No": "Nu",
"Download Filename": "Denumirea Descărcării",
"Language": "Limba",
"Background Image": "Background Image",
"Enter URL or absolute path. WARNING: Requires reload!": "Enter URL or absolute path. WARNING: Requires reload!"
}
"Background Image": "Imagine de fundal",
"Enter URL or absolute path. WARNING: Requires reload!": "Introduceţi URL-ul sau calea completă. ATENŢIE: Necesită reîncărcare!",
"LGBT Mode": "LGBT Mode",
"Native top bar": "Native top bar",
"Requires restart of Freezer!": "Requires restart of Freezer!"
}

+ 5
- 2
app/client/src/locales/ru.json View File

@ -164,5 +164,8 @@
"Download Filename": "Скачать шаблон для названия",
"Language": "Язык",
"Background Image": "Background Image",
"Enter URL or absolute path. WARNING: Requires reload!": "Enter URL or absolute path. WARNING: Requires reload!"
}
"Enter URL or absolute path. WARNING: Requires reload!": "Enter URL or absolute path. WARNING: Requires reload!",
"LGBT Mode": "LGBT Mode",
"Native top bar": "Native top bar",
"Requires restart of Freezer!": "Requires restart of Freezer!"
}

+ 6
- 3
app/client/src/locales/sk.json View File

@ -163,6 +163,9 @@
"No": "Nie",
"Download Filename": "Stiahnuť názov súboru",
"Language": "Jazyk",
"Background Image": "Background Image",
"Enter URL or absolute path. WARNING: Requires reload!": "Enter URL or absolute path. WARNING: Requires reload!"
}
"Background Image": "Obrázok pozadia",
"Enter URL or absolute path. WARNING: Requires reload!": "Vložte URL alebo cestu. VAROVANIE: Vyžaduje obnovenie!",
"LGBT Mode": "LGBT Mode",
"Native top bar": "Native top bar",
"Requires restart of Freezer!": "Requires restart of Freezer!"
}

+ 5
- 2
app/client/src/locales/sl.json View File

@ -164,5 +164,8 @@
"Download Filename": "Imena prenosa",
"Language": "Jezik",
"Background Image": "Background Image",
"Enter URL or absolute path. WARNING: Requires reload!": "Enter URL or absolute path. WARNING: Requires reload!"
}
"Enter URL or absolute path. WARNING: Requires reload!": "Enter URL or absolute path. WARNING: Requires reload!",
"LGBT Mode": "LGBT Mode",
"Native top bar": "Native top bar",
"Requires restart of Freezer!": "Requires restart of Freezer!"
}

+ 6
- 3
app/client/src/locales/tr.json View File

@ -163,6 +163,9 @@
"No": "Hayır",
"Download Filename": "Adlandırma taslağı indir",
"Language": "Dil",
"Background Image": "Background Image",
"Enter URL or absolute path. WARNING: Requires reload!": "Enter URL or absolute path. WARNING: Requires reload!"
}
"Background Image": "Arka plan resmi",
"Enter URL or absolute path. WARNING: Requires reload!": "URL'yi veya mutlak yolu girin. UYARI: yeniden yükleme gerektirir!",
"LGBT Mode": "LGBT Mode",
"Native top bar": "Native top bar",
"Requires restart of Freezer!": "Requires restart of Freezer!"
}

+ 7
- 4
app/client/src/locales/uk.json View File

@ -161,8 +161,11 @@
"Artists:": "Виконавці:",
"Yes": "Так",
"No": "Ні",
"Download Filename": "Download Filename",
"Download Filename": "Ім'я файлу завантаження",
"Language": "Мова",
"Background Image": "Background Image",
"Enter URL or absolute path. WARNING: Requires reload!": "Enter URL or absolute path. WARNING: Requires reload!"
}
"Background Image": "Фонове зображення",
"Enter URL or absolute path. WARNING: Requires reload!": "Введіть URL або абсолютний шлях. УВАГА: необхідне перезавантаження!",
"LGBT Mode": "LGBT Mode",
"Native top bar": "Native top bar",
"Requires restart of Freezer!": "Requires restart of Freezer!"
}

+ 5
- 2
app/client/src/locales/ur.json View File

@ -164,5 +164,8 @@
"Download Filename": "Download Filename",
"Language": "Language",
"Background Image": "Background Image",
"Enter URL or absolute path. WARNING: Requires reload!": "Enter URL or absolute path. WARNING: Requires reload!"
}
"Enter URL or absolute path. WARNING: Requires reload!": "Enter URL or absolute path. WARNING: Requires reload!",
"LGBT Mode": "LGBT Mode",
"Native top bar": "Native top bar",
"Requires restart of Freezer!": "Requires restart of Freezer!"
}

+ 5
- 2
app/client/src/locales/uwu.json View File

@ -164,5 +164,8 @@
"Download Filename": "Downwoad Filename",
"Language": "Wanguage (Don't change me >w<)",
"Background Image": "Background Image",
"Enter URL or absolute path. WARNING: Requires reload!": "Enter URL or absolute path. WARNING: Requires reload!"
}
"Enter URL or absolute path. WARNING: Requires reload!": "Enter URL or absolute path. WARNING: Requires reload!",
"LGBT Mode": "LGBT Mode",
"Native top bar": "Native top bar",
"Requires restart of Freezer!": "Requires restart of Freezer!"
}

+ 6
- 3
app/client/src/locales/vi.json View File

@ -163,6 +163,9 @@
"No": "Không",
"Download Filename": "Tải xuống tên tệp",
"Language": "Ngôn ngữ",
"Background Image": "Background Image",
"Enter URL or absolute path. WARNING: Requires reload!": "Enter URL or absolute path. WARNING: Requires reload!"
}
"Background Image": "Ảnh nền",
"Enter URL or absolute path. WARNING: Requires reload!": "Nhập URL hoặc đường dẫn hợp lệ. CẢNH BÁO: Yêu cầu tải lại!",
"LGBT Mode": "LGBT Mode",
"Native top bar": "Native top bar",
"Requires restart of Freezer!": "Requires restart of Freezer!"
}

+ 5
- 2
app/client/src/locales/zh.json View File

@ -164,5 +164,8 @@
"Download Filename": "下载文件名",
"Language": "语言",
"Background Image": "Background Image",
"Enter URL or absolute path. WARNING: Requires reload!": "Enter URL or absolute path. WARNING: Requires reload!"
}
"Enter URL or absolute path. WARNING: Requires reload!": "Enter URL or absolute path. WARNING: Requires reload!",
"LGBT Mode": "LGBT Mode",
"Native top bar": "Native top bar",
"Requires restart of Freezer!": "Requires restart of Freezer!"
}

+ 48
- 14
app/client/src/main.js View File

@ -4,8 +4,8 @@ import router from './js/router';
import vuetify from './js/vuetify';
import axios from 'axios';
import VueEsc from 'vue-esc';
import VueSocketIO from 'vue-socket.io';
import i18n from './js/i18n';
import { io } from "socket.io-client";
//Globals
let ipcRenderer;
@ -52,10 +52,9 @@ Vue.prototype.$filesize = (bytes) => {
}
//Sockets
Vue.use(new VueSocketIO({
connection: process.env.NODE_ENV === 'development' ? "http://localhost:10069" : window.location.toString(),
options: {path: '/socket'}
}));
Vue.prototype.$io = io("http://localhost:10069", {
path: '/socket'
});
Vue.config.productionTip = false;
Vue.use(VueEsc);
@ -503,7 +502,7 @@ new Vue({
}, 500);
return;
}
this.$socket.emit('stateChange', {
this.$io.emit('stateChange', {
position: this.position,
duration: this.duration(),
state: this.state,
@ -517,6 +516,29 @@ new Vue({
},
updateLanguage(l) {
i18n.locale = l;
},
//For LGBT/Gayming mode
primaryColorRainbow() {
const colors = ['#F44336', '#E91E63', '#9C27B0', '#673AB7', '#3F51B5', '#2196F3', '#03A9F4',
'#00BCD4', '#009688', '#4CAF50', '#8BC34A', '#CDDC39', '#FFEB3B', '#FFC107', '#FF9800', '#FF5722',
'#795548', '#607D8B', '#9E9E9E'];
let index = 0;
setInterval(() => {
this.$vuetify.theme.themes.dark.primary = colors[index];
this.$vuetify.theme.themes.light.primary = colors[index];
this.$root.settings.primaryColor = colors[index];
index++;
if (index == colors.length)
index = 0;
}, 400);
}
},
computed: {
//Show or no topbar
topBar() {
if (!this.settings.electron) return false;
return !this.settings.nativeTopBar;
}
},
@ -530,6 +552,18 @@ new Vue({
this.$vuetify.theme.themes.light.primary = this.settings.primaryColor;
if (this.settings.lightTheme)
this.$vuetify.theme.dark = false;
//LGBT mode
const lgbt = 'https://upload.wikimedia.org/wikipedia/commons/thumb/4/48/Gay_Pride_Flag.svg/1280px-Gay_Pride_Flag.svg.png';
if (this.settings.lgbtMode) {
this.settings.backgroundImage = lgbt;
this.primaryColorRainbow();
} else {
//Remove bg image
if (this.settings.backgroundImage == lgbt)
this.settings.backgroundImage = null;
}
i18n.locale = this.settings.language;
this.volume = this.settings.volume;
@ -584,15 +618,15 @@ new Vue({
//Sockets
//Queue change
this.sockets.subscribe('downloads', (data) => {
this.$io.on('downloads', (data) => {
this.downloads = data;
});
//Current download change
this.sockets.subscribe('currentlyDownloading', (data) => {
this.$io.on('currentlyDownloading', (data) => {
this.downloads.threads = data;
});
//Play at offset (for integrations)
this.sockets.subscribe('playOffset', async (data) => {
this.$io.on('playOffset', async (data) => {
this.queue.data.splice(this.queue.index + 1, 0, data.track);
await this.skip(1);
this.seek(data.position);
@ -601,25 +635,25 @@ new Vue({
//Importer
//Start
this.sockets.subscribe('importerInit', (data) => {
this.$io.on('importerInit', (data) => {
this.importer = data;
});
//New track imported
this.sockets.subscribe('importerTrack', (data) => {
this.$io.on('importerTrack', (data) => {
this.importer.tracks.push(data);
});
//Mark as done
this.sockets.subscribe('importerDone', () => {
this.$io.on('importerDone', () => {
this.importer.active = false;
this.importer.done = true;
});
this.sockets.subscribe('importerError', () => {
this.$io.on('importerError', () => {
this.importer.error = true;
this.importer.active = false;
this.importer.done = false;
});
//Album
this.sockets.subscribe('importerAlbum', a => {
this.$io.on('importerAlbum', a => {
//Not downloading, got albumn
if (a) {
this.$router.push({


+ 2
- 2
app/client/src/views/FullscreenPlayer.vue View File

@ -1,5 +1,5 @@
<template>
<div class='pa-0' :class='{electron: $root.settings.electron, notop: !$root.settings.electron}'>
<div class='pa-0' :class='{electron: $root.topBar, notop: !$root.topBar}'>
<v-app-bar dense>
<v-btn icon @click='close'>
@ -144,7 +144,7 @@
<!-- Queue tab -->
<v-tab-item key='queue' v-if='showQueue'>
<v-list two-line avatar class='overflow-y-auto' style='max-height: calc(100vh - 160px)'>
<v-virtual-scroll :items='$root.queue.data' item-height='72' benched='5'>
<v-virtual-scroll :items='$root.queue.data' item-height='72' benched='5' style='overflow-y: hidden !important'>
<template v-slot:default="{ index, item }">
<draggable v-model='$root.queue.data' @move='queueMove'>
<v-lazy min-height="1" transition="fade-transition" :key='"qq" + index'>


+ 1
- 1
app/client/src/views/Library.vue View File

@ -27,7 +27,7 @@
<v-tabs-items v-model='tab'>
<!-- Tracks -->
<v-tab-item key='tracks'>
<LibraryTracks height='calc(100vh - 310px)'></LibraryTracks>
<LibraryTracks :height='"calc(100vh - " + ($root.topBar ? 310 : 290) + "px)"'></LibraryTracks>
</v-tab-item>
<!-- Albums -->


+ 24
- 12
app/client/src/views/Settings.vue View File

@ -176,6 +176,25 @@
<v-list-item-subtitle>{{$t("WARNING: Might require reload to work properly!")}}</v-list-item-subtitle>
</v-list-item-content>
</v-list-item>
<!-- LGBT Mode -->
<v-list-item>
<v-list-item-action>
<v-checkbox v-model='$root.settings.lgbtMode' class='pl-2' @click='applyLGBT'></v-checkbox>
</v-list-item-action>
<v-list-item-content>
<v-list-item-title>{{$t("LGBT Mode")}}</v-list-item-title>
</v-list-item-content>
</v-list-item>
<!-- Native top bar -->
<v-list-item>
<v-list-item-action>
<v-checkbox v-model='$root.settings.nativeTopBar' class='pl-2'></v-checkbox>
</v-list-item-action>
<v-list-item-content>
<v-list-item-title>{{$t("Native top bar")}}</v-list-item-title>
<v-list-item-subtitle>{{$t("Requires restart of Freezer!")}}</v-list-item-subtitle>
</v-list-item-content>
</v-list-item>
<!-- Background image -->
<v-text-field
class='px-4 my-2'
@ -372,10 +391,6 @@ export default {
],
artResolutions: [256, 512, 600, 800, 1000, 1200, 1400, 1600, 1800],
colorPicker: false,
primaryColorIndex: 0,
primaries: ['#F44336', '#E91E63', '#9C27B0', '#673AB7', '#3F51B5', '#2196F3', '#03A9F4',
'#00BCD4', '#009688', '#4CAF50', '#8BC34A', '#CDDC39', '#FFEB3B', '#FFC107', '#FF9800', '#FF5722',
'#795548', '#607D8B', '#9E9E9E'],
//Lists from Deezer website
languageList: ["me", "da", "de", "en", "us", "es", "mx", "fr", "hr", "id", "it", "hu", "ms", "nl", "no", "pl", "br", "pt", "ru", "ro", "sq", "sk", "sl", "sr", "fi", "sv", "tr", "cs", "bg", "uk", "he", "ar", "th", "cn", "ja", "ko"],
@ -464,6 +479,10 @@ export default {
this.$vuetify.theme.dark = true;
this.$vuetify.theme.light = false;
}
},
async applyLGBT() {
await this.save();
window.location.reload();
}
},
computed: {
@ -492,14 +511,7 @@ export default {
//RGB
if (event.code == 'KeyG' && event.ctrlKey && event.altKey) {
setInterval(() => {
this.$vuetify.theme.themes.dark.primary = this.primaries[this.primaryColorIndex];
this.$vuetify.theme.themes.light.primary = this.primaries[this.primaryColorIndex];
this.$root.settings.primaryColor = this.primaries[this.primaryColorIndex];
this.primaryColorIndex++;
if (this.primaryColorIndex == this.primaries.length)
this.primaryColorIndex = 0;
}, 400);
this.$root.primaryColorRainbow();
}
});
}


+ 1429
- 1094
app/package-lock.json
File diff suppressed because it is too large
View File


+ 7
- 7
app/package.json View File

@ -1,7 +1,7 @@
{
"name": "freezer",
"private": true,
"version": "1.1.19",
"version": "1.1.20",
"description": "",
"main": "background.js",
"scripts": {
@ -10,24 +10,24 @@
"author": "",
"license": "ISC",
"dependencies": {
"arg": "^4.1.3",
"arg": "^5.0.0",
"axios": "^0.21.1",
"browser-id3-writer": "^4.4.0",
"chalk": "^4.1.0",
"cheerio": "^1.0.0-rc.5",
"chalk": "^4.1.1",
"cheerio": "^1.0.0-rc.9",
"compare-versions": "^3.6.0",
"cors": "^2.8.5",
"discord-rpc": "^3.1.4",
"discord-rpc": "^3.2.0",
"express": "^4.17.1",
"lastfmapi": "^0.1.1",
"metaflac-js2": "^1.0.7",
"nedb": "^1.8.0",
"nodeezcryptor": "git+https://git.freezer.life/exttex/nodeezcryptor.git",
"sanitize-filename": "^1.6.3",
"socket.io": "^2.3.0",
"socket.io": "^4.1.2",
"winston": "^3.3.3"
},
"devDependencies": {
"eslint": "^7.10.0"
"eslint": "^7.27.0"
}
}

+ 5
- 0
app/src/downloads.js View File

@ -527,6 +527,11 @@ class DownloadThread {
}
}
//Cut path to fit into windows limits
if (fn.length >= 249) {
fn = fn.substring(0, 249);
}
//Extension
if (quality.toString() == '9') {
fn += '.flac';


+ 35
- 30
app/src/integrations.js View File

@ -54,11 +54,12 @@ class Integrations extends EventEmitter {
}
//LastFM Scrobble
async scrobbleLastFM(title, artist) {
async scrobbleLastFM(title, album, artist) {
if (this.settings.lastFM)
this.lastfm.track.scrobble({
artist: artist,
artist,
track: title,
album,
timestamp: Math.floor((new Date()).getTime() / 1000)
});
}
@ -103,35 +104,39 @@ class Integrations extends EventEmitter {
//Called when playback state changed
async updateState(data) {
if (this.discordReady) {
let richPresence = {
state: data.track.artistString,
details: data.track.title,
largeImageKey: 'icon',
instance: true,
}
//Show timestamp only if playing
if (data.state == 2) {
Object.assign(richPresence, {
startTimestamp: Date.now() - data.position,
endTimestamp: (Date.now() - data.position) + data.duration,
});
}
//Enabled discord join
if (this.settings.discordJoin) {
Object.assign(richPresence, {
partySize: 1,
partyMax: 10,
matchSecret: 'match_secret_' + data.track.id,
joinSecret: JSON.stringify({
pos: Math.floor(data.position),
ts: Date.now(),
id: data.track.id
}),
partyId: 'party_id_' + data.track.id
});
if (data.state == 2){
let richPresence = {
state: data.track.artistString,
details: data.track.title,
largeImageKey: 'icon',
instance: true,
}
//Show timestamp only if playing
if (data.state == 2) {
Object.assign(richPresence, {
startTimestamp: Date.now() - data.position,
endTimestamp: (Date.now() - data.position) + data.duration,
});
}
//Enabled discord join
if (this.settings.discordJoin) {
Object.assign(richPresence, {
partySize: 1,
partyMax: 10,
matchSecret: 'match_secret_' + data.track.id,
joinSecret: JSON.stringify({
pos: Math.floor(data.position),
ts: Date.now(),
id: data.track.id
}),
partyId: 'party_id_' + data.track.id
});
}
//Set
this.discordRPC.setActivity(richPresence);
} else {
this.discordRPC.clearActivity();
}
//Set
this.discordRPC.setActivity(richPresence);
}
}


+ 8
- 2
app/src/server.js View File

@ -27,8 +27,14 @@ app.use(express.static(path.join(__dirname, '../client', 'dist')));
app.use(cors({origin: 'http://localhost:8080'}));
//Server
const server = require('http').createServer(app);
const io = require('socket.io').listen(server, {
const { Server } = require('socket.io');
const io = new Server(server, {
path: '/socket',
//CORS for webpack debug
cors: {
origin: 'http://localhost:8080',
methods: ["GET", "POST"],
}
});
//Get playback info
@ -463,7 +469,7 @@ app.delete('/downloads/:index', async (req, res) => {
//Log listen to deezer & lastfm
app.post('/log', async (req, res) => {
//LastFM
integrations.scrobbleLastFM(req.body.title, req.body.artists[0].name);
integrations.scrobbleLastFM(req.body.title, req.body.album.title, req.body.artists[0].name);
//Deezer
if (settings.logListen)


+ 2
- 0
app/src/settings.js View File

@ -44,6 +44,8 @@ class Settings {
this.contentLanguage = 'en';
this.contentCountry = 'US';
this.sidebarOpen = false;
this.lgbtMode = false;
this.nativeTopBar = false;
//Has to be local path
this.backgroundImage = null;


BIN
build/iconset/128x128.png View File

Before After
Width: 128  |  Height: 128  |  Size: 9.8 KiB Width: 128  |  Height: 128  |  Size: 2.0 KiB

BIN
build/iconset/16x16.png View File

Before After
Width: 16  |  Height: 16  |  Size: 307 B

BIN
build/iconset/22x22.png View File

Before After
Width: 22  |  Height: 22  |  Size: 425 B

BIN
build/iconset/24x24.png View File

Before After
Width: 24  |  Height: 24  |  Size: 518 B

BIN
build/iconset/256x256.png View File

Before After
Width: 256  |  Height: 256  |  Size: 10 KiB Width: 256  |  Height: 256  |  Size: 5.2 KiB

BIN
build/iconset/32x32.png View File

Before After
Width: 32  |  Height: 32  |  Size: 765 B

BIN
build/iconset/48x48.png View File

Before After
Width: 48  |  Height: 48  |  Size: 902 B

BIN
build/iconset/64x64.png View File

Before After
Width: 64  |  Height: 64  |  Size: 1.1 KiB

+ 45
- 19
package.json View File

@ -1,7 +1,7 @@
{
"name": "freezer",
"private": true,
"version": "1.1.19",
"version": "1.1.20",
"description": "Freezer PC",
"scripts": {
"pack": "electron-builder --dir",
@ -9,11 +9,11 @@
"postinstall": "electron-builder install-app-deps",
"build": "cd app && npm i && cd client && npm i && npm run build && cd .. && cd .. && npm run dist"
},
"license": "GNU",
"license": "GPL-3.0-or-later",
"homepage": "https://freezer.life",
"devDependencies": {
"electron": "^9.2.1",
"electron-builder": "^22.8.0"
"electron": "^13.0.1",
"electron-builder": "^22.10.5"
},
"build": {
"appId": "com.exttex.freezer",
@ -46,32 +46,58 @@
"allowToChangeInstallationDirectory": false
},
"linux": {
"appId": "f.f.freezer",
"category": "AudioVideo;Network;Audio;FileTransfer;Player",
"description": "Free music streaming client for Deezer",
"desktop": {
"Version": "1.1",
"Type": "Application",
"Name": "Freezer",
"Name[pt_PT]": "Congelador",
"GenericName": "Electron-based Deezer client",
"GenericName[pt_PT]": "Aplicação Electron no ambiente de trabalho para Deezer",
"Comment": "Desktop application for the Deezer audio streaming service",
"Comment[pt_PT]": "Cliente não-oficial do serviço de transmissão de áudio Deezer",
"Icon": "freezer",
"Categories": "AudioVideo;Network;Audio;FileTransfer;Player;",
"MimeType": "application/http;",
"Keywords": "audio;download;flac;lyrics;mp3;music;spotify;stream;",
"Keywords[pt_PT]": "áudio;descarregar;flac;letras;mp3;música;spotify;transmissão;",
"Keywords[ru]": "Фризер;Музыка;Плеер;Дизер;",
"StartupNotify": "true",
"StartupWMClass": "freezer",
"DBusActivatable": "false",
"Terminal": "false",
"NoDisplay": "false",
"Hidden": "false"
},
"executableName": "freezer",
"icon": "build/iconset",
"maintainer": "exttex",
"mimeTypes": [
"application/http"
],
"synopsis": "Free audio streaming client for Deezer",
"target": [
"AppImage",
"deb",
"tar.gz"
],
"category": "audio",
"icon": "build/iconset",
"maintainer": "exttex"
"tar.xz"
]
},
"appImage": {
"desktop": {
"X-AppImage-Name": "Freezer",
"Name": "Freezer",
"Type": "Application",
"Categories": "AudioVideo"
"X-AppImage-Name": "Freezer"
}
},
"deb": {
"packageCategory": "sound",
"priority": "optional",
"depends": [
"libssl-dev",
"gconf2",
"gconf-service",
"libflac8",
"libnotify4",
"libappindicator1",
"libxtst6",
"libnss3"
"libnss3",
"libssl1.1 | libssl1.0.0",
"libxtst6"
]
}
}


Loading…
Cancel
Save