Add interface for setting automark state.

master
voussoir 2020-05-21 17:28:34 -07:00
parent 0c5823cbeb
commit 57d87560a4
4 changed files with 51 additions and 1 deletions

View File

@ -132,6 +132,18 @@ def post_refresh_channel():
channel.refresh(force=force) channel.refresh(force=force)
return jsonify.make_json_response({}) return jsonify.make_json_response({})
@site.route('/channel/<channel_id>/set_automark', methods=['POST'])
def post_set_automark(channel_id):
state = request.form['state']
channel = common.ycdldb.get_channel(channel_id)
try:
channel.set_automark(state)
except exceptions.InvalidVideoState:
flask.abort(400)
return jsonify.make_json_response({})
@site.route('/start_download', methods=['POST']) @site.route('/start_download', methods=['POST'])
def post_start_download(): def post_start_download():
if 'video_ids' not in request.form: if 'video_ids' not in request.form:

View File

@ -172,6 +172,19 @@ https://stackoverflow.com/a/35153397
<p><!-- spacer --></p> <p><!-- spacer --></p>
{% if channel is not none %}
<span>
New videos are:
<select onchange="set_automark_hook(event)">
<option value="pending" {{"selected" if channel.automark == "pending" else ""}} >pending</option>
<option value="downloaded" {{"selected" if channel.automark == "downloaded" else ""}} >downloaded</option>
<option value="ignored" {{"selected" if channel.automark == "ignored" else ""}} >ignored</option>
</select>
</span>
{% endif %}
<p><!-- spacer --></p>
<span>Sort by <span>Sort by
<a class="merge_params" href="?orderby=published">Date</a>, <a class="merge_params" href="?orderby=published">Date</a>,
<a class="merge_params" href="?orderby=duration">Duration</a>, <a class="merge_params" href="?orderby=duration">Duration</a>,
@ -477,6 +490,15 @@ function refresh_channel(channel_id, force, callback)
return common.post(url, data, callback); return common.post(url, data, callback);
} }
function set_automark_hook(event)
{
console.log("What");
var url = "/channel/{{channel.id}}/set_automark";
data = new FormData();
data.append("state", event.target.value);
return common.post(url, data);
}
function mark_video_state(video_ids, state, callback) function mark_video_state(video_ids, state, callback)
{ {
var url = "/mark_video_state"; var url = "/mark_video_state";

View File

@ -50,6 +50,8 @@ DEFAULT_DATADIR = '.'
DEFAULT_DBNAME = 'ycdl.db' DEFAULT_DBNAME = 'ycdl.db'
DEFAULT_CONFIGNAME = 'ycdl.json' DEFAULT_CONFIGNAME = 'ycdl.json'
VIDEO_STATES = ['ignored', 'pending', 'downloaded']
DEFAULT_CONFIGURATION = { DEFAULT_CONFIGURATION = {
'download_directory': '.', 'download_directory': '.',
} }

View File

@ -55,6 +55,20 @@ class Channel(Base):
if commit: if commit:
self.ycdldb.commit() self.ycdldb.commit()
def set_automark(self, state, commit=True):
if state not in constants.VIDEO_STATES:
raise exceptions.InvalidVideoState(state)
pairs = {
'id': self.id,
'automark': state,
}
self.ycdldb.sql_update(table='channels', pairs=pairs, where_key='id')
self.automark = state
if commit:
self.ycdldb.commit()
class Video(Base): class Video(Base):
table = 'videos' table = 'videos'
@ -83,7 +97,7 @@ class Video(Base):
''' '''
Mark the video as ignored, pending, or downloaded. Mark the video as ignored, pending, or downloaded.
''' '''
if state not in ['ignored', 'pending', 'downloaded']: if state not in constants.VIDEO_STATES:
raise exceptions.InvalidVideoState(state) raise exceptions.InvalidVideoState(state)
pairs = { pairs = {