Add Channel.set_download_directory.
This commit is contained in:
parent
38299db102
commit
2ad85ad69a
5 changed files with 87 additions and 5 deletions
|
@ -2,6 +2,7 @@ import flask; from flask import request
|
|||
import itertools
|
||||
|
||||
from voussoirkit import flasktools
|
||||
from voussoirkit import pathclass
|
||||
|
||||
import ycdl
|
||||
|
||||
|
@ -157,6 +158,22 @@ def post_set_automark(channel_id):
|
|||
|
||||
return flasktools.make_json_response({})
|
||||
|
||||
@site.route('/channel/<channel_id>/set_download_directory', methods=['POST'])
|
||||
def post_set_download_directory(channel_id):
|
||||
download_directory = request.form['download_directory']
|
||||
channel = common.ycdldb.get_channel(channel_id)
|
||||
|
||||
try:
|
||||
channel.set_download_directory(download_directory)
|
||||
except pathclass.NotDirectory:
|
||||
exc = {
|
||||
'error_type': 'NOT_DIRECTORY',
|
||||
'error_message': f'"{download_directory}" is not a directory.',
|
||||
}
|
||||
return flasktools.make_json_response(exc, status=400)
|
||||
|
||||
return flasktools.make_json_response({})
|
||||
|
||||
@site.route('/channel/<channel_id>/set_queuefile_extension', methods=['POST'])
|
||||
def post_set_queuefile_extension(channel_id):
|
||||
extension = request.form['extension']
|
||||
|
|
|
@ -47,6 +47,15 @@ function set_automark(channel_id, state, callback)
|
|||
return common.post(url, data, callback);
|
||||
}
|
||||
|
||||
api.channels.set_download_directory =
|
||||
function set_download_directory(channel_id, download_directory, callback)
|
||||
{
|
||||
const url = `/channel/${channel_id}/set_download_directory`;
|
||||
const data = new FormData();
|
||||
data.append("download_directory", download_directory);
|
||||
return common.post(url, data, callback);
|
||||
}
|
||||
|
||||
api.channels.set_queuefile_extension =
|
||||
function set_queuefile_extension(channel_id, extension, callback)
|
||||
{
|
||||
|
|
|
@ -274,6 +274,11 @@ https://stackoverflow.com/a/35153397
|
|||
<button id="set_queuefile_extension_button" class="button_with_spinner" onclick="return set_queuefile_extension_form();">Set extension</button>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<input type="text" id="set_download_directory_input" placeholder="Queuefile directory" value="{{channel.download_directory or ''}}"/>
|
||||
<button id="set_download_directory_button" class="button_with_spinner" onclick="return set_download_directory_form();">Set directory</button>
|
||||
</div>
|
||||
|
||||
<div><a href="https://www.youtube.com/feeds/videos.xml?channel_id={{channel.id}}">Channel RSS</a></div>
|
||||
|
||||
<button class="red_button button_with_confirm"
|
||||
|
@ -610,6 +615,21 @@ function set_automark_callback(response)
|
|||
set_automark_spinner.hide();
|
||||
}
|
||||
|
||||
function set_download_directory_form(event)
|
||||
{
|
||||
const download_directory = set_download_directory_input.value.trim();
|
||||
api.channels.set_download_directory(CHANNEL_ID, download_directory, set_download_directory_callback);
|
||||
}
|
||||
|
||||
function set_download_directory_callback(response)
|
||||
{
|
||||
if (response.meta.status != 200)
|
||||
{
|
||||
alert(JSON.stringify(response));
|
||||
}
|
||||
window[set_download_directory_button.dataset.spinnerCloser]();
|
||||
}
|
||||
|
||||
function set_queuefile_extension_form(event)
|
||||
{
|
||||
const extension = set_queuefile_extension_input.value.trim();
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
import datetime
|
||||
import typing
|
||||
|
||||
from voussoirkit import pathclass
|
||||
|
||||
from . import constants
|
||||
from . import exceptions
|
||||
|
@ -35,13 +36,38 @@ class Channel(Base):
|
|||
self.id = db_row['id']
|
||||
self.name = db_row['name']
|
||||
self.uploads_playlist = db_row['uploads_playlist']
|
||||
self.download_directory = db_row['download_directory']
|
||||
self.download_directory = self.normalize_download_directory(
|
||||
db_row['download_directory'],
|
||||
do_assert=False,
|
||||
)
|
||||
self.queuefile_extension = self.normalize_queuefile_extension(db_row['queuefile_extension'])
|
||||
self.automark = db_row['automark'] or 'pending'
|
||||
|
||||
def __repr__(self):
|
||||
return f'Channel:{self.id}'
|
||||
|
||||
@staticmethod
|
||||
def normalize_download_directory(
|
||||
download_directory,
|
||||
do_assert=True,
|
||||
) -> typing.Optional[pathclass.Path]:
|
||||
if download_directory is None:
|
||||
return None
|
||||
|
||||
if not isinstance(download_directory, (str, pathclass.Path)):
|
||||
raise TypeError(f'download_directory should be {str} or {pathclass.Path}, not {type(download_directory)}.')
|
||||
|
||||
if isinstance(download_directory, str):
|
||||
download_directory = download_directory.strip()
|
||||
if not download_directory:
|
||||
return None
|
||||
|
||||
download_directory = pathclass.Path(download_directory)
|
||||
if do_assert:
|
||||
download_directory.assert_is_directory()
|
||||
|
||||
return download_directory
|
||||
|
||||
@staticmethod
|
||||
def normalize_queuefile_extension(queuefile_extension) -> typing.Optional[str]:
|
||||
if queuefile_extension is None:
|
||||
|
@ -178,6 +204,18 @@ class Channel(Base):
|
|||
if commit:
|
||||
self.ycdldb.commit()
|
||||
|
||||
def set_download_directory(self, download_directory, commit=True):
|
||||
download_directory = self.normalize_download_directory(download_directory)
|
||||
|
||||
pairs = {
|
||||
'id': self.id,
|
||||
'download_directory': download_directory.absolute_path if download_directory else None,
|
||||
}
|
||||
self.ycdldb.sql_update(table='channels', pairs=pairs, where_key='id')
|
||||
self.download_directory = download_directory
|
||||
|
||||
if commit:
|
||||
self.ycdldb.commit()
|
||||
|
||||
def set_queuefile_extension(self, queuefile_extension, commit=True):
|
||||
queuefile_extension = self.normalize_queuefile_extension(queuefile_extension)
|
||||
|
|
|
@ -135,9 +135,7 @@ class YCDLDBChannelMixin:
|
|||
if name is None:
|
||||
name = self.youtube.get_user_name(channel_id)
|
||||
|
||||
if download_directory is not None:
|
||||
download_directory = pathclass.Path(download_directory).absolute_path
|
||||
|
||||
download_directory = objects.Channel.normalize_download_directory(download_directory)
|
||||
queuefile_extension = objects.Channel.normalize_queuefile_extension(queuefile_extension)
|
||||
|
||||
self.log.info('Adding channel %s %s', channel_id, name)
|
||||
|
@ -146,7 +144,7 @@ class YCDLDBChannelMixin:
|
|||
'id': channel_id,
|
||||
'name': name,
|
||||
'uploads_playlist': self.youtube.get_user_uploads_playlist_id(channel_id),
|
||||
'download_directory': download_directory,
|
||||
'download_directory': download_directory.absolute_path if download_directory else None,
|
||||
'queuefile_extension': queuefile_extension,
|
||||
'automark': "pending",
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue