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('/watch')
|
||||
@site.route('/videos/<download_filter>')
|
||||
@site.route('/videos/<state>')
|
||||
@site.route('/channel/<channel_id>')
|
||||
@site.route('/channel/<channel_id>/<download_filter>')
|
||||
def get_channel(channel_id=None, download_filter=None):
|
||||
@site.route('/channel/<channel_id>/<state>')
|
||||
def get_channel(channel_id=None, state=None):
|
||||
if channel_id is not None:
|
||||
try:
|
||||
common.ycdldb.add_channel(channel_id)
|
||||
|
@ -42,7 +42,7 @@ def get_channel(channel_id=None, download_filter=None):
|
|||
else:
|
||||
videos = common.ycdldb.get_videos(
|
||||
channel_id=channel_id,
|
||||
download_filter=download_filter,
|
||||
state=state,
|
||||
orderby=orderby,
|
||||
)
|
||||
|
||||
|
@ -72,7 +72,7 @@ def get_channel(channel_id=None, download_filter=None):
|
|||
'channel.html',
|
||||
all_states=all_states,
|
||||
channel=channel,
|
||||
download_filter=download_filter,
|
||||
state=state,
|
||||
query_string='?' + request.query_string.decode('utf-8'),
|
||||
videos=videos,
|
||||
)
|
||||
|
|
|
@ -208,7 +208,7 @@ https://stackoverflow.com/a/35153397
|
|||
<div id="video_card_{{video.id}}"
|
||||
data-ytid="{{video.id}}"
|
||||
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">
|
||||
<div class="video_details">
|
||||
|
@ -222,7 +222,7 @@ https://stackoverflow.com/a/35153397
|
|||
|
||||
<div class="action_toolbox">
|
||||
<button
|
||||
{% if video.download == "pending" %}
|
||||
{% if video.state == "pending" %}
|
||||
class="video_action_pending hidden"
|
||||
{% else %}
|
||||
class="video_action_pending"
|
||||
|
@ -231,7 +231,7 @@ https://stackoverflow.com/a/35153397
|
|||
>Revert to Pending</button>
|
||||
|
||||
<button
|
||||
{% if video.download == "pending" %}
|
||||
{% if video.state == "pending" %}
|
||||
class="video_action_download"
|
||||
{% else %}
|
||||
class="video_action_download hidden"
|
||||
|
@ -240,7 +240,7 @@ https://stackoverflow.com/a/35153397
|
|||
>Download</button>
|
||||
|
||||
<button
|
||||
{% if video.download == "pending" %}
|
||||
{% if video.state == "pending" %}
|
||||
class="video_action_ignore"
|
||||
{% else %}
|
||||
class="video_action_ignore hidden"
|
||||
|
@ -288,7 +288,7 @@ https://stackoverflow.com/a/35153397
|
|||
var CHANNEL_ID = "{{channel.id}}";
|
||||
{% 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_selections = [];
|
||||
|
||||
|
@ -337,11 +337,11 @@ function filter_video_cards(search_term)
|
|||
video_cards = document.getElementById("video_cards");
|
||||
video_cards.classList.add("hidden");
|
||||
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)
|
||||
{
|
||||
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);
|
||||
}
|
||||
|
|
|
@ -144,6 +144,20 @@ def upgrade_5_to_6(ycdldb):
|
|||
''')
|
||||
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):
|
||||
'''
|
||||
Given the directory containing a ycdl database, apply all of the
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
from voussoirkit import sqlhelpers
|
||||
|
||||
DATABASE_VERSION = 6
|
||||
DATABASE_VERSION = 7
|
||||
DB_VERSION_PRAGMA = f'''
|
||||
PRAGMA user_version = {DATABASE_VERSION};
|
||||
'''
|
||||
|
@ -32,16 +32,16 @@ CREATE TABLE IF NOT EXISTS videos(
|
|||
duration INT,
|
||||
views INT,
|
||||
thumbnail TEXT,
|
||||
download TEXT
|
||||
state TEXT
|
||||
);
|
||||
|
||||
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_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_published on videos(published);
|
||||
CREATE INDEX IF NOT EXISTS index_video_download on videos(download);
|
||||
CREATE INDEX IF NOT EXISTS index_video_download_published on videos(download, published);
|
||||
CREATE INDEX IF NOT EXISTS index_video_state on videos(state);
|
||||
CREATE INDEX IF NOT EXISTS index_video_state_published on videos(state, published);
|
||||
----------------------------------------------------------------------------------------------------
|
||||
COMMIT;
|
||||
'''
|
||||
|
|
|
@ -24,6 +24,6 @@ def video(v):
|
|||
'duration': v.duration,
|
||||
'views': v.views,
|
||||
'thumbnail': v.thumbnail,
|
||||
'download': v.download,
|
||||
'state': v.state,
|
||||
}
|
||||
return j
|
||||
|
|
|
@ -33,7 +33,7 @@ class Channel(Base):
|
|||
self.ycdldb.commit()
|
||||
|
||||
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]
|
||||
return self.ycdldb.sql_select_one(query, bindings) is not None
|
||||
|
||||
|
@ -109,7 +109,7 @@ class Video(Base):
|
|||
self.duration = db_row['duration']
|
||||
self.views = db_row['views']
|
||||
self.thumbnail = db_row['thumbnail']
|
||||
self.download = db_row['download']
|
||||
self.state = db_row['state']
|
||||
|
||||
@property
|
||||
def author(self):
|
||||
|
@ -133,9 +133,9 @@ class Video(Base):
|
|||
|
||||
pairs = {
|
||||
'id': self.id,
|
||||
'download': state,
|
||||
'state': state,
|
||||
}
|
||||
self.download = state
|
||||
self.state = state
|
||||
self.ycdldb.sql_update(table='videos', pairs=pairs, where_key='id')
|
||||
|
||||
if commit:
|
||||
|
|
|
@ -313,7 +313,7 @@ class YCDLDBVideoMixin:
|
|||
video_id = video
|
||||
|
||||
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.')
|
||||
return
|
||||
|
||||
|
@ -339,7 +339,7 @@ class YCDLDBVideoMixin:
|
|||
def get_video(self, 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 = []
|
||||
orderbys = []
|
||||
|
||||
|
@ -348,9 +348,9 @@ class YCDLDBVideoMixin:
|
|||
wheres.append('author_id')
|
||||
bindings.append(channel_id)
|
||||
|
||||
if download_filter is not None:
|
||||
wheres.append('download')
|
||||
bindings.append(download_filter)
|
||||
if state is not None:
|
||||
wheres.append('state')
|
||||
bindings.append(state)
|
||||
|
||||
if wheres:
|
||||
wheres = [x + ' == ?' for x in wheres]
|
||||
|
@ -428,7 +428,7 @@ class YCDLDBVideoMixin:
|
|||
|
||||
try:
|
||||
existing = self.get_video(video.id)
|
||||
download_status = existing.download
|
||||
download_status = existing.state
|
||||
except exceptions.NoSuchVideo:
|
||||
existing = None
|
||||
download_status = 'pending'
|
||||
|
@ -442,7 +442,7 @@ class YCDLDBVideoMixin:
|
|||
'duration': video.duration,
|
||||
'views': video.views,
|
||||
'thumbnail': video.thumbnail['url'],
|
||||
'download': download_status,
|
||||
'state': download_status,
|
||||
}
|
||||
|
||||
if existing:
|
||||
|
@ -527,13 +527,13 @@ class YCDLDB(
|
|||
|
||||
def get_all_states(self):
|
||||
'''
|
||||
Get a list of all the different `download` states that are currently in
|
||||
use in the database.
|
||||
Get a list of all the different states that are currently in use in
|
||||
the database.
|
||||
'''
|
||||
# Note: This function was added while I was considering the addition of
|
||||
# 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.
|
||||
query = 'SELECT DISTINCT download FROM videos'
|
||||
query = 'SELECT DISTINCT state FROM videos'
|
||||
states = self.sql_select(query)
|
||||
states = [row[0] for row in states]
|
||||
return sorted(states)
|
||||
|
|
Loading…
Reference in a new issue