Add ?orderby url parameter.
This commit is contained in:
parent
672abf9d86
commit
b5f892d595
2 changed files with 29 additions and 9 deletions
|
@ -156,16 +156,22 @@ def get_channel(channel_id=None, download_filter=None):
|
||||||
else:
|
else:
|
||||||
channel = None
|
channel = None
|
||||||
|
|
||||||
videos = ycdldb.get_videos(channel_id=channel_id, download_filter=download_filter)
|
orderby = request.args.get('orderby', None)
|
||||||
|
|
||||||
search_terms = request.args.get('q', '').lower().strip().replace('+', ' ').split()
|
|
||||||
if search_terms:
|
|
||||||
videos = [v for v in videos if all(term in v['title'].lower() for term in search_terms)]
|
|
||||||
|
|
||||||
video_id = request.args.get('v', '')
|
video_id = request.args.get('v', '')
|
||||||
if video_id:
|
if video_id:
|
||||||
ycdldb.insert_video(video_id)
|
ycdldb.insert_video(video_id)
|
||||||
videos = [ycdldb.get_video(video_id)]
|
videos = [ycdldb.get_video(video_id)]
|
||||||
|
else:
|
||||||
|
videos = ycdldb.get_videos(
|
||||||
|
channel_id=channel_id,
|
||||||
|
download_filter=download_filter,
|
||||||
|
orderby=orderby,
|
||||||
|
)
|
||||||
|
|
||||||
|
search_terms = request.args.get('q', '').lower().strip().replace('+', ' ').split()
|
||||||
|
if search_terms:
|
||||||
|
videos = [v for v in videos if all(term in v['title'].lower() for term in search_terms)]
|
||||||
|
|
||||||
limit = request.args.get('limit', None)
|
limit = request.args.get('limit', None)
|
||||||
if limit is not None:
|
if limit is not None:
|
||||||
|
|
|
@ -222,8 +222,10 @@ class YCDLDB:
|
||||||
video = {key: video[SQL_VIDEO[key]] for key in SQL_VIDEO}
|
video = {key: video[SQL_VIDEO[key]] for key in SQL_VIDEO}
|
||||||
return video
|
return video
|
||||||
|
|
||||||
def get_videos(self, channel_id=None, download_filter=None):
|
def get_videos(self, channel_id=None, *, download_filter=None, orderby=None):
|
||||||
wheres = []
|
wheres = []
|
||||||
|
orderbys = []
|
||||||
|
|
||||||
bindings = []
|
bindings = []
|
||||||
if channel_id is not None:
|
if channel_id is not None:
|
||||||
wheres.append('author_id')
|
wheres.append('author_id')
|
||||||
|
@ -235,18 +237,30 @@ class YCDLDB:
|
||||||
|
|
||||||
if wheres:
|
if wheres:
|
||||||
wheres = [x + ' == ?' for x in wheres]
|
wheres = [x + ' == ?' for x in wheres]
|
||||||
wheres = ' WHERE ' + ' AND '.join(wheres)
|
wheres = ' AND '.join(wheres)
|
||||||
|
wheres = ' WHERE ' + wheres
|
||||||
else:
|
else:
|
||||||
wheres = ''
|
wheres = ''
|
||||||
|
|
||||||
query = 'SELECT * FROM videos' + wheres
|
if orderby is not None:
|
||||||
|
orderby = orderby.lower()
|
||||||
|
if orderby == 'random':
|
||||||
|
orderby = 'random()'
|
||||||
|
if orderby in ['views', 'duration', 'random()']:
|
||||||
|
orderbys.append(f'{orderby} DESC')
|
||||||
|
orderbys.append('published DESC')
|
||||||
|
|
||||||
|
if orderbys:
|
||||||
|
orderbys = ', '.join(orderbys)
|
||||||
|
orderbys = ' ORDER BY ' + orderbys
|
||||||
|
|
||||||
|
query = 'SELECT * FROM videos' + wheres + orderbys
|
||||||
self.cur.execute(query, bindings)
|
self.cur.execute(query, bindings)
|
||||||
videos = self.cur.fetchall()
|
videos = self.cur.fetchall()
|
||||||
if not videos:
|
if not videos:
|
||||||
return []
|
return []
|
||||||
|
|
||||||
videos = [{key: video[SQL_VIDEO[key]] for key in SQL_VIDEO} for video in videos]
|
videos = [{key: video[SQL_VIDEO[key]] for key in SQL_VIDEO} for video in videos]
|
||||||
videos.sort(key=lambda x: x['published'], reverse=True)
|
|
||||||
return videos
|
return videos
|
||||||
|
|
||||||
def insert_video(self, video, *, add_channel=True, commit=True):
|
def insert_video(self, video, *, add_channel=True, commit=True):
|
||||||
|
|
Loading…
Reference in a new issue