mirror of
https://github.com/Xevion/v1.xevion.dev.git
synced 2025-12-12 16:13:30 -06:00
first portion of update towards using database based queries for duration and file streaming paths
so close
This commit is contained in:
37
app/sound.py
37
app/sound.py
@@ -1,5 +1,6 @@
|
|||||||
from app import app
|
from app import app
|
||||||
from flask import send_file, redirect, url_for, render_template
|
from app.sound_models import YouTubeAudio, SoundcloudAudio
|
||||||
|
from flask import Response, send_file, redirect, url_for, render_template
|
||||||
from multiprocessing import Value
|
from multiprocessing import Value
|
||||||
from mutagen.mp3 import MP3
|
from mutagen.mp3 import MP3
|
||||||
import os
|
import os
|
||||||
@@ -7,15 +8,31 @@ import re
|
|||||||
import json
|
import json
|
||||||
import subprocess
|
import subprocess
|
||||||
|
|
||||||
|
def get_youtube(mediaid):
|
||||||
|
audio = YouTubeAudio.query.filter_by(id=mediaid).first()
|
||||||
|
if audio is not None:
|
||||||
|
return audio
|
||||||
|
|
||||||
@app.route('/stream/<service>/<mediaid>')
|
@app.route('/stream/<service>/<mediaid>')
|
||||||
def stream(service, mediaid):
|
def stream(service, mediaid):
|
||||||
prepare(service, mediaid)
|
if service == 'youtube':
|
||||||
config = service_functions[service].getConfig(mediaid)
|
audio = get_youtube(mediaid)
|
||||||
return send_file(os.path.join(os.path.dirname(__file__), '..', config['path']), attachment_filename=config['filename'])
|
return send_file(audio.getPath(), attachment_filename=audio.filename)
|
||||||
|
elif service == 'soundcloud':
|
||||||
|
return Response('Not implemented', status=501, mimetype='application/json')
|
||||||
|
elif service == 'spotify':
|
||||||
|
return Response('Not implemented', status=501, mimetype='application/json')
|
||||||
|
else:
|
||||||
|
return Response('Bad request', status=400, mimetype='application/json')
|
||||||
# Prepares a URL for download, returning the duration it should play for if streamed
|
# Prepares a URL for download, returning the duration it should play for if streamed
|
||||||
@app.route('/prepare/<service>/<mediaid>')
|
@app.route('/duration/<service>/<mediaid>')
|
||||||
def prepare(service, mediaid):
|
def duration(service, mediaid):
|
||||||
filepath = service_functions[service].path(mediaid)
|
if service == 'youtube':
|
||||||
service_functions[service].download(mediaid)
|
duration = get_youtube(mediaid).durationn
|
||||||
return str(MP3(filepath).info.length)
|
return Response(duration, status=200, mimetype='application/json')
|
||||||
|
elif service == 'soundcloud':
|
||||||
|
return Response('Not implemented', status=501, mimetype='application/json')
|
||||||
|
elif service == 'spotify':
|
||||||
|
return Response('Not implemented', status=501, mimetype='application/json')
|
||||||
|
else:
|
||||||
|
return Response('Bad request', status=400, mimetype='application/json')
|
||||||
Reference in New Issue
Block a user