page parametres
This commit is contained in:
15
README.md
15
README.md
@@ -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 l’instant, il s’agit d’une **application externe**.
|
Pour l’instant, il s’agit d’une **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 d’un **cookie** pour sauvegarder le répertoire de destination choisi par l’utilisateur.
|
* 🍪 Utilisation d’un **cookie** pour sauvegarder le répertoire de destination choisi par l’utilisateur.
|
||||||
* 🚫 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:
|
||||||
|
|||||||
@@ -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():
|
||||||
"""
|
"""
|
||||||
|
|||||||
@@ -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;
|
||||||
|
}
|
||||||
@@ -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
|
||||||
|
|||||||
@@ -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, ... " />
|
||||||
|
|
||||||
</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">
|
||||||
|
|||||||
Reference in New Issue
Block a user