Rename database column download
to state
.
This commit is contained in:
parent
0ae041f001
commit
e5910c55f2
7 changed files with 46 additions and 32 deletions
|
@ -17,10 +17,10 @@ def get_channels():
|
||||||
|
|
||||||
@site.route('/videos')
|
@site.route('/videos')
|
||||||
@site.route('/watch')
|
@site.route('/watch')
|
||||||
@site.route('/videos/<download_filter>')
|
@site.route('/videos/<state>')
|
||||||
@site.route('/channel/<channel_id>')
|
@site.route('/channel/<channel_id>')
|
||||||
@site.route('/channel/<channel_id>/<download_filter>')
|
@site.route('/channel/<channel_id>/<state>')
|
||||||
def get_channel(channel_id=None, download_filter=None):
|
def get_channel(channel_id=None, state=None):
|
||||||
if channel_id is not None:
|
if channel_id is not None:
|
||||||
try:
|
try:
|
||||||
common.ycdldb.add_channel(channel_id)
|
common.ycdldb.add_channel(channel_id)
|
||||||
|
@ -42,7 +42,7 @@ def get_channel(channel_id=None, download_filter=None):
|
||||||
else:
|
else:
|
||||||
videos = common.ycdldb.get_videos(
|
videos = common.ycdldb.get_videos(
|
||||||
channel_id=channel_id,
|
channel_id=channel_id,
|
||||||
download_filter=download_filter,
|
state=state,
|
||||||
orderby=orderby,
|
orderby=orderby,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -72,7 +72,7 @@ def get_channel(channel_id=None, download_filter=None):
|
||||||
'channel.html',
|
'channel.html',
|
||||||
all_states=all_states,
|
all_states=all_states,
|
||||||
channel=channel,
|
channel=channel,
|
||||||
download_filter=download_filter,
|
state=state,
|
||||||
query_string='?' + request.query_string.decode('utf-8'),
|
query_string='?' + request.query_string.decode('utf-8'),
|
||||||
videos=videos,
|
videos=videos,
|
||||||
)
|
)
|
||||||
|
|
|
@ -208,7 +208,7 @@ https://stackoverflow.com/a/35153397
|
||||||
<div id="video_card_{{video.id}}"
|
<div id="video_card_{{video.id}}"
|
||||||
data-ytid="{{video.id}}"
|
data-ytid="{{video.id}}"
|
||||||
onclick="return onclick_select(event);"
|
onclick="return onclick_select(event);"
|
||||||
class="video_card video_card_{{video.download}}"
|
class="video_card video_card_{{video.state}}"
|
||||||
>
|
>
|
||||||
<img class="video_thumbnail" loading="lazy" src="http://i3.ytimg.com/vi/{{video.id}}/default.jpg" height="100px">
|
<img class="video_thumbnail" loading="lazy" src="http://i3.ytimg.com/vi/{{video.id}}/default.jpg" height="100px">
|
||||||
<div class="video_details">
|
<div class="video_details">
|
||||||
|
@ -222,7 +222,7 @@ https://stackoverflow.com/a/35153397
|
||||||
|
|
||||||
<div class="action_toolbox">
|
<div class="action_toolbox">
|
||||||
<button
|
<button
|
||||||
{% if video.download == "pending" %}
|
{% if video.state == "pending" %}
|
||||||
class="video_action_pending hidden"
|
class="video_action_pending hidden"
|
||||||
{% else %}
|
{% else %}
|
||||||
class="video_action_pending"
|
class="video_action_pending"
|
||||||
|
@ -231,7 +231,7 @@ https://stackoverflow.com/a/35153397
|
||||||
>Revert to Pending</button>
|
>Revert to Pending</button>
|
||||||
|
|
||||||
<button
|
<button
|
||||||
{% if video.download == "pending" %}
|
{% if video.state == "pending" %}
|
||||||
class="video_action_download"
|
class="video_action_download"
|
||||||
{% else %}
|
{% else %}
|
||||||
class="video_action_download hidden"
|
class="video_action_download hidden"
|
||||||
|
@ -240,7 +240,7 @@ https://stackoverflow.com/a/35153397
|
||||||
>Download</button>
|
>Download</button>
|
||||||
|
|
||||||
<button
|
<button
|
||||||
{% if video.download == "pending" %}
|
{% if video.state == "pending" %}
|
||||||
class="video_action_ignore"
|
class="video_action_ignore"
|
||||||
{% else %}
|
{% else %}
|
||||||
class="video_action_ignore hidden"
|
class="video_action_ignore hidden"
|
||||||
|
@ -288,7 +288,7 @@ https://stackoverflow.com/a/35153397
|
||||||
var CHANNEL_ID = "{{channel.id}}";
|
var CHANNEL_ID = "{{channel.id}}";
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
var DOWNLOAD_FILTER = "{{download_filter if download_filter else ""}}";
|
var STATE = "{{state if state else ""}}";
|
||||||
var video_card_first_selected = null;
|
var video_card_first_selected = null;
|
||||||
var video_card_selections = [];
|
var video_card_selections = [];
|
||||||
|
|
||||||
|
@ -337,11 +337,11 @@ function filter_video_cards(search_term)
|
||||||
video_cards = document.getElementById("video_cards");
|
video_cards = document.getElementById("video_cards");
|
||||||
video_cards.classList.add("hidden");
|
video_cards.classList.add("hidden");
|
||||||
search_term = search_term.toLocaleLowerCase();
|
search_term = search_term.toLocaleLowerCase();
|
||||||
let download_filter_class = "video_card_" + DOWNLOAD_FILTER;
|
let state_class = "video_card_" + STATE;
|
||||||
Array.from(video_cards.getElementsByClassName("video_card")).forEach(function(video_card)
|
Array.from(video_cards.getElementsByClassName("video_card")).forEach(function(video_card)
|
||||||
{
|
{
|
||||||
let title = video_card.getElementsByClassName("video_title")[0].innerText.toLocaleLowerCase();
|
let title = video_card.getElementsByClassName("video_title")[0].innerText.toLocaleLowerCase();
|
||||||
if (DOWNLOAD_FILTER && !video_card.classList.contains(download_filter_class))
|
if (STATE && !video_card.classList.contains(state_class))
|
||||||
{
|
{
|
||||||
video_cards.removeChild(video_card);
|
video_cards.removeChild(video_card);
|
||||||
}
|
}
|
||||||
|
|
|
@ -144,6 +144,20 @@ def upgrade_5_to_6(ycdldb):
|
||||||
''')
|
''')
|
||||||
ycdldb.sql.execute('DROP TABLE channels_old')
|
ycdldb.sql.execute('DROP TABLE channels_old')
|
||||||
|
|
||||||
|
def upgrade_6_to_7(ycdldb):
|
||||||
|
'''
|
||||||
|
In this version, the `download` column of the videos table was renamed to
|
||||||
|
`state`. The vocabulary throughout the rest of the program had already
|
||||||
|
evolved and the database column was behind the times.
|
||||||
|
'''
|
||||||
|
ycdldb.sql.execute('ALTER TABLE videos RENAME COLUMN download TO state')
|
||||||
|
ycdldb.sql.execute('DROP INDEX IF EXISTS index_video_author_download')
|
||||||
|
ycdldb.sql.execute('DROP INDEX IF EXISTS index_video_download')
|
||||||
|
ycdldb.sql.execute('DROP INDEX IF EXISTS index_video_download_published')
|
||||||
|
ycdldb.sql.execute('CREATE INDEX index_video_author_state on videos(author_id, state)')
|
||||||
|
ycdldb.sql.execute('CREATE INDEX index_video_state on videos(state)')
|
||||||
|
ycdldb.sql.execute('CREATE INDEX index_video_state_published on videos(state, published)')
|
||||||
|
|
||||||
def upgrade_all(data_directory):
|
def upgrade_all(data_directory):
|
||||||
'''
|
'''
|
||||||
Given the directory containing a ycdl database, apply all of the
|
Given the directory containing a ycdl database, apply all of the
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
from voussoirkit import sqlhelpers
|
from voussoirkit import sqlhelpers
|
||||||
|
|
||||||
DATABASE_VERSION = 6
|
DATABASE_VERSION = 7
|
||||||
DB_VERSION_PRAGMA = f'''
|
DB_VERSION_PRAGMA = f'''
|
||||||
PRAGMA user_version = {DATABASE_VERSION};
|
PRAGMA user_version = {DATABASE_VERSION};
|
||||||
'''
|
'''
|
||||||
|
@ -32,16 +32,16 @@ CREATE TABLE IF NOT EXISTS videos(
|
||||||
duration INT,
|
duration INT,
|
||||||
views INT,
|
views INT,
|
||||||
thumbnail TEXT,
|
thumbnail TEXT,
|
||||||
download TEXT
|
state TEXT
|
||||||
);
|
);
|
||||||
|
|
||||||
CREATE INDEX IF NOT EXISTS index_channel_id on channels(id);
|
CREATE INDEX IF NOT EXISTS index_channel_id on channels(id);
|
||||||
CREATE INDEX IF NOT EXISTS index_video_author on videos(author_id);
|
CREATE INDEX IF NOT EXISTS index_video_author on videos(author_id);
|
||||||
CREATE INDEX IF NOT EXISTS index_video_author_download on videos(author_id, download);
|
CREATE INDEX IF NOT EXISTS index_video_author_state on videos(author_id, state);
|
||||||
CREATE INDEX IF NOT EXISTS index_video_id on videos(id);
|
CREATE INDEX IF NOT EXISTS index_video_id on videos(id);
|
||||||
CREATE INDEX IF NOT EXISTS index_video_published on videos(published);
|
CREATE INDEX IF NOT EXISTS index_video_published on videos(published);
|
||||||
CREATE INDEX IF NOT EXISTS index_video_download on videos(download);
|
CREATE INDEX IF NOT EXISTS index_video_state on videos(state);
|
||||||
CREATE INDEX IF NOT EXISTS index_video_download_published on videos(download, published);
|
CREATE INDEX IF NOT EXISTS index_video_state_published on videos(state, published);
|
||||||
----------------------------------------------------------------------------------------------------
|
----------------------------------------------------------------------------------------------------
|
||||||
COMMIT;
|
COMMIT;
|
||||||
'''
|
'''
|
||||||
|
|
|
@ -24,6 +24,6 @@ def video(v):
|
||||||
'duration': v.duration,
|
'duration': v.duration,
|
||||||
'views': v.views,
|
'views': v.views,
|
||||||
'thumbnail': v.thumbnail,
|
'thumbnail': v.thumbnail,
|
||||||
'download': v.download,
|
'state': v.state,
|
||||||
}
|
}
|
||||||
return j
|
return j
|
||||||
|
|
|
@ -33,7 +33,7 @@ class Channel(Base):
|
||||||
self.ycdldb.commit()
|
self.ycdldb.commit()
|
||||||
|
|
||||||
def has_pending(self):
|
def has_pending(self):
|
||||||
query = 'SELECT 1 FROM videos WHERE author_id == ? AND download == "pending" LIMIT 1'
|
query = 'SELECT 1 FROM videos WHERE author_id == ? AND state == "pending" LIMIT 1'
|
||||||
bindings = [self.id]
|
bindings = [self.id]
|
||||||
return self.ycdldb.sql_select_one(query, bindings) is not None
|
return self.ycdldb.sql_select_one(query, bindings) is not None
|
||||||
|
|
||||||
|
@ -109,7 +109,7 @@ class Video(Base):
|
||||||
self.duration = db_row['duration']
|
self.duration = db_row['duration']
|
||||||
self.views = db_row['views']
|
self.views = db_row['views']
|
||||||
self.thumbnail = db_row['thumbnail']
|
self.thumbnail = db_row['thumbnail']
|
||||||
self.download = db_row['download']
|
self.state = db_row['state']
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def author(self):
|
def author(self):
|
||||||
|
@ -133,9 +133,9 @@ class Video(Base):
|
||||||
|
|
||||||
pairs = {
|
pairs = {
|
||||||
'id': self.id,
|
'id': self.id,
|
||||||
'download': state,
|
'state': state,
|
||||||
}
|
}
|
||||||
self.download = state
|
self.state = state
|
||||||
self.ycdldb.sql_update(table='videos', pairs=pairs, where_key='id')
|
self.ycdldb.sql_update(table='videos', pairs=pairs, where_key='id')
|
||||||
|
|
||||||
if commit:
|
if commit:
|
||||||
|
|
|
@ -313,7 +313,7 @@ class YCDLDBVideoMixin:
|
||||||
video_id = video
|
video_id = video
|
||||||
|
|
||||||
video = self.get_video(video_id)
|
video = self.get_video(video_id)
|
||||||
if video.download != 'pending' and not force:
|
if video.state != 'pending' and not force:
|
||||||
print(f'{video.id} does not need to be downloaded.')
|
print(f'{video.id} does not need to be downloaded.')
|
||||||
return
|
return
|
||||||
|
|
||||||
|
@ -339,7 +339,7 @@ class YCDLDBVideoMixin:
|
||||||
def get_video(self, video_id):
|
def get_video(self, video_id):
|
||||||
return self.get_thing_by_id('video', video_id)
|
return self.get_thing_by_id('video', video_id)
|
||||||
|
|
||||||
def get_videos(self, channel_id=None, *, download_filter=None, orderby=None):
|
def get_videos(self, channel_id=None, *, state=None, orderby=None):
|
||||||
wheres = []
|
wheres = []
|
||||||
orderbys = []
|
orderbys = []
|
||||||
|
|
||||||
|
@ -348,9 +348,9 @@ class YCDLDBVideoMixin:
|
||||||
wheres.append('author_id')
|
wheres.append('author_id')
|
||||||
bindings.append(channel_id)
|
bindings.append(channel_id)
|
||||||
|
|
||||||
if download_filter is not None:
|
if state is not None:
|
||||||
wheres.append('download')
|
wheres.append('state')
|
||||||
bindings.append(download_filter)
|
bindings.append(state)
|
||||||
|
|
||||||
if wheres:
|
if wheres:
|
||||||
wheres = [x + ' == ?' for x in wheres]
|
wheres = [x + ' == ?' for x in wheres]
|
||||||
|
@ -428,7 +428,7 @@ class YCDLDBVideoMixin:
|
||||||
|
|
||||||
try:
|
try:
|
||||||
existing = self.get_video(video.id)
|
existing = self.get_video(video.id)
|
||||||
download_status = existing.download
|
download_status = existing.state
|
||||||
except exceptions.NoSuchVideo:
|
except exceptions.NoSuchVideo:
|
||||||
existing = None
|
existing = None
|
||||||
download_status = 'pending'
|
download_status = 'pending'
|
||||||
|
@ -442,7 +442,7 @@ class YCDLDBVideoMixin:
|
||||||
'duration': video.duration,
|
'duration': video.duration,
|
||||||
'views': video.views,
|
'views': video.views,
|
||||||
'thumbnail': video.thumbnail['url'],
|
'thumbnail': video.thumbnail['url'],
|
||||||
'download': download_status,
|
'state': download_status,
|
||||||
}
|
}
|
||||||
|
|
||||||
if existing:
|
if existing:
|
||||||
|
@ -527,13 +527,13 @@ class YCDLDB(
|
||||||
|
|
||||||
def get_all_states(self):
|
def get_all_states(self):
|
||||||
'''
|
'''
|
||||||
Get a list of all the different `download` states that are currently in
|
Get a list of all the different states that are currently in use in
|
||||||
use in the database.
|
the database.
|
||||||
'''
|
'''
|
||||||
# Note: This function was added while I was considering the addition of
|
# Note: This function was added while I was considering the addition of
|
||||||
# arbitrarily many states for user-defined purposes, but I kind of went
|
# arbitrarily many states for user-defined purposes, but I kind of went
|
||||||
# back on that so I'm not sure if it will be useful.
|
# back on that so I'm not sure if it will be useful.
|
||||||
query = 'SELECT DISTINCT download FROM videos'
|
query = 'SELECT DISTINCT state FROM videos'
|
||||||
states = self.sql_select(query)
|
states = self.sql_select(query)
|
||||||
states = [row[0] for row in states]
|
states = [row[0] for row in states]
|
||||||
return sorted(states)
|
return sorted(states)
|
||||||
|
|
Loading…
Reference in a new issue