page parametres

This commit is contained in:
Grizouille
2025-11-08 17:43:18 +01:00
parent 933105b521
commit 45b442efcd
5 changed files with 77 additions and 35 deletions

View File

@@ -1,16 +1,17 @@
# 🎵 Deezer Downloader for Nextcloud # 🎵 Deezer Downloader for Nextcloud WebDav
## 🧩 Description ## 🧩 Description
Ce projet a pour objectif dévoluer en une **application Nextcloud**. Ce projet a pour objectif dévoluer en une **application Nextcloud**.
Pour linstant, il sagit dune **application externe**. Pour linstant, il sagit dune **application externe utilasant WEBDAV **.
Le projet est basé sur le dépôt GitHub de [deezer-downloader](https://github.com/kmille/deezer-downloader). Le projet est basé sur le dépôt GitHub de [deezer-downloader](https://github.com/kmille/deezer-downloader).
Un grand merci aux auteurs pour leur excellent travail ! Un grand merci aux auteurs pour leur excellent travail !
## ❓ Pourquoi ## ❓ Pourquoi
Je souhaitais intégrer à **Nextcloud** un **raccourci** permettant aux utilisateurs de **télécharger leur musique, playlists, albums**, etc., directement depuis **Deezer**. Je souhaitais intégrer à **Nextcloud** un **raccourci** permettant aux utilisateurs de **télécharger leur musique, playlists, albums**, etc., directement depuis **Nextcloud**.
Les téléchargement sont directement accessible des **Fichiers** de Nextcloud. Vous pouvez aussi choisir un répertoire situé dans le dossier de syncronisation de l'application interne **Musique** pour profiter directement du téléchargement sur une appli de streaming style subsonic...
## 🔧 Modifications apportées par rapport au dépôt original ## 🔧 Modifications apportées par rapport au dépôt original
@@ -19,14 +20,6 @@ Je souhaitais intégrer à **Nextcloud** un **raccourci** permettant aux utilisa
* 🍪 Utilisation dun **cookie** pour sauvegarder le répertoire de destination choisi par lutilisateur. * 🍪 Utilisation dun **cookie** pour sauvegarder le répertoire de destination choisi par lutilisateur.
* 🚫 Vérification de la **connexion à Nextcloud** : si non connecté → retour **403 Forbidden**. * 🚫 Vérification de la **connexion à Nextcloud** : si non connecté → retour **403 Forbidden**.
## ⚠️ Limites actuelles
* 💡 Fonctionne uniquement avec le plugin **AppExterne**.
* 👥 Pas de gestion de **sessions utilisateurs séparées** :
il est possible que le répertoire de destination ne soit pas correct si deux utilisateurs téléchargent simultanément.
Cependant, chaque utilisateur ayant son propre cookie, cela **devrait fonctionner correctement** dans la plupart des cas.
## Dev sous windows (vsCode): ## Dev sous windows (vsCode):
Pour que powershell accepte d'exécuter des scripts: Pour que powershell accepte d'exécuter des scripts:

View File

@@ -6,7 +6,6 @@ import requests
import atexit import atexit
from flask import Flask, render_template, request, jsonify, session from flask import Flask, render_template, request, jsonify, session
from markupsafe import escape from markupsafe import escape
from flask_autoindex import AutoIndex
import warnings import warnings
import giphypop import giphypop
@@ -17,8 +16,6 @@ from deezer_downloader.nextcloud import addJwtInUserSession
app = Flask(__name__) app = Flask(__name__)
app.secret_key = "vilvhmqerjgùqrgojpùqjgvnùzevoijrpùvqpzejgijzepgùg" app.secret_key = "vilvhmqerjgùqrgojpùqjgvnùzevoijrpùvqpzejgijzepgùg"
auto_index = AutoIndex(app, config["download_dirs"]["base"], add_url_rules=False)
auto_index.add_icon_rule('music.png', ext='m3u8')
warnings.filterwarnings("ignore", message="You are using the giphy public api key") warnings.filterwarnings("ignore", message="You are using the giphy public api key")
giphy = giphypop.Giphy() giphy = giphypop.Giphy()
@@ -95,6 +92,14 @@ def index():
static_root=config["http"]["static_root"], static_root=config["http"]["static_root"],
use_mpd=str(config['mpd'].getboolean('use_mpd')).lower()) use_mpd=str(config['mpd'].getboolean('use_mpd')).lower())
@app.route("/save_config", methods=['POST'])
@validate_schema("login", "password", "dirPath")
def parameters():
user_input = request.get_json(force=True)
dir = user_input['dirPath']
#return jsonify({'error': 'Champs requis manquants'}), 400
return jsonify()
@app.route("/debug") @app.route("/debug")
def show_debug(): def show_debug():
@@ -110,21 +115,6 @@ def show_debug():
return jsonify({'debug_msg': stdout.decode()}) return jsonify({'debug_msg': stdout.decode()})
@app.route("/downloads/")
@app.route("/downloads/<path:path>")
def autoindex(path="."):
# directory index - flask version (let the user download mp3/zip in the browser)
try:
gif = giphy.random_gif(tag="cat")
media_url = gif.media_url
except requests.exceptions.HTTPError:
# the api is rate-limited. Fallback:
media_url = "https://cataas.com/cat"
template_context = {'gif_url': media_url}
return auto_index.render_autoindex(path=session['user_base_dir'], template_context=template_context)
@app.route('/queue', methods=['GET']) @app.route('/queue', methods=['GET'])
def show_queue(): def show_queue():
""" """

View File

@@ -84,3 +84,15 @@ h3, th, td {
.btn { .btn {
color: white !important; color: white !important;
} }
form {
background-color: #292929;
border-radius: 8px;
padding: 30px;
max-width: 500px;
margin: 60px auto;
box-shadow: 0 0 15px rgba(0,0,0,0.5);
}
form label {
color: white;
}

View File

@@ -293,6 +293,25 @@ $(document).ready(function() {
}); });
// END DEEZER FAVORITE SONGS // END DEEZER FAVORITE SONGS
$('#paramters').on('submit', function(e) {
e.preventDefault();
$.ajax({
url: deezer_downloader_api_root + '/save_config',
type: 'POST',
contentType: 'application/json', // essentiel pour Flask.get_json()
data: JSON.stringify({ dirPath: $('#param-directry-path').val(),
login: $('#param-login').val(),
password: $('#param-password').val()}),
success: function(response) {
$.jGrowl("Sauvegarder avec succès", { life: 4000 });
},
error: function(xhr) {
const err = xhr.responseJSON?.error || 'Erreur inconnue';
$('#result').css('color', 'red').text(err);
}
});
});
function show_tab(id_nav, id_content) { function show_tab(id_nav, id_content) {
// nav // nav

View File

@@ -57,6 +57,9 @@
<li class="nav-item"> <li class="nav-item">
<a class="nav-link" id="nav-task-queue" data-toggle="tab" href="#queue">Queue (5)</a> <a class="nav-link" id="nav-task-queue" data-toggle="tab" href="#queue">Queue (5)</a>
</li> </li>
<li class="nav-item">
<a class="nav-link" id="nav-task-param" data-toggle="tab" href="#param">Parameter (6)</a>
</li>
</ul> </ul>
</div> <!-- end row --> </div> <!-- end row -->
@@ -105,15 +108,15 @@
<br> <br>
<h3>Download stuff via youtube-dl</h3> <h3>Download stuff via youtube-dl</h3>
<div class="input-group"> <div class="input-group">
<input type="text" class="form-control" id="youtubedl-query" placeholder="Download audio from YouTube, Invidious, Vimeo, Soundcloud, YouPorn, ... " /> <input type="text" class="form-control" id="youtubedl-query" placeholder="Download audio from YouTube, Invidious, Vimeo, Soundcloud, ... " />
&nbsp; &nbsp;
</div> </div>
<br> <br>
<span class="input-group-btn"> <span class="input-group-btn">
<button type="button" class="btn btn-info" id="yt_download_play">Download & Play</button> <button type="button" class="btn btn-info" id="yt_download_play">Download & Play</button>
<button type="button" class="btn btn-info" id="yt_download">Download</button> <button type="button" class="btn btn-info" id="yt_download">Download</button>
<button type="button" class="btn btn-info" onclick="$('#youtubedl-query').val('')" >Clear</button> <button type="button" class="btn btn-info" onclick="$('#youtubedl-query').val('')" >Clear</button>
</span> </span>
</div> <!-- end div tab youtube-dl --> </div> <!-- end div tab youtube-dl -->
<div id="spotify-playlists" class="container tab-pane fade"> <div id="spotify-playlists" class="container tab-pane fade">
@@ -188,6 +191,31 @@
</table> </table>
</div> <!-- end div tab queue --> </div> <!-- end div tab queue -->
<div id="param" class="container tab-pane fade">
<br>
<h3 class="mb-4 text-center">Configuration</h3>
<form class="p-4 rounded" id="paramters" >
<div class="form-group">
<label for="directory-path">Directory Path</label>
<input type="text" class="form-control" id="param-directry-path" name="directory_path" placeholder="/path/to/folder" required>
</div>
<div class="form-group">
<label for="login">Login</label>
<input type="text" class="form-control" id="param-login" name="login" placeholder="Username" required>
</div>
<div class="form-group">
<label for="password">Password</label>
<input type="password" class="form-control" id="param-password" name="password" placeholder="••••••" required>
</div>
<button type="submit" class="btn btn-info btn-block font-weight-bold">Save</button>
</div>
<!-- end div tab parameters -->
<footer class="footer"> <footer class="footer">
<div class="container"> <div class="container">
<span class="text-muted"> <span class="text-muted">