@ -1,7 +1,9 @@
from flask import Blueprint , render_template , request , send_file
from flask import Blueprint , render_template , request , send_file , jsonify
import math , time
from helpers . db import db_get_videos , db_get_video , db_get_recent
from helpers . db import db_get_videos , db_get_video , db_get_recent
from helpers . favorites import mark_favorites , db_get_favorites , db_get_fav_set
from helpers . favorites import mark_favorites , db_get_favorites , db_get_fav_set
from helpers . cache import build_cache
from helpers . cache import build_cache
from config import VIDEOS_PER_PAGE , DASHBOARD_PER_PAGE
web = Blueprint ( " web " , __name__ )
web = Blueprint ( " web " , __name__ )
@ -9,23 +11,20 @@ web = Blueprint("web", __name__)
def dashboard ( ) :
def dashboard ( ) :
cache = build_cache ( )
cache = build_cache ( )
query = request . args . get ( " q " , " " ) . lower ( ) . strip ( )
query = request . args . get ( " q " , " " ) . lower ( ) . strip ( )
sort = request . args . get ( " sort " , " total_size " ) # user | platform | total_size | video_count | avg_size
sort = request . args . get ( " sort " , " total_size " )
dir_ = request . args . get ( " dir " , " desc " ) # asc | desc
dir_ = request . args . get ( " dir " , " desc " )
reverse = ( dir_ == " desc " )
reverse = ( dir_ == " desc " )
# Start with list of (key, stats)
items = list ( cache [ " storage_usage " ] . items ( ) )
items = list ( cache [ " storage_usage " ] . items ( ) )
# Search (by user)
if query :
if query :
items = [ e for e in items if query in e [ 0 ] . split ( " :: " ) [ 0 ] . lower ( ) ]
items = [ e for e in items if query in e [ 0 ] . split ( " :: " ) [ 0 ] . lower ( ) ]
# Sorting
def k_user ( x ) : return x [ 0 ] . split ( " :: " ) [ 0 ] . lower ( )
def k_user ( x ) : return x [ 0 ] . split ( " :: " ) [ 0 ] . lower ( )
def k_platform ( x ) : return x [ 0 ] . split ( " :: " ) [ 1 ] . lower ( )
def k_platform ( x ) : return x [ 0 ] . split ( " :: " ) [ 1 ] . lower ( )
def k_total ( x ) : return x [ 1 ] [ " total_size " ]
def k_total ( x ) : return x [ 1 ] [ " total_size " ]
def k_count ( x ) : return x [ 1 ] [ " video_count " ]
def k_count ( x ) : return x [ 1 ] [ " video_count " ]
def k_avg ( x ) : return cache [ " avg_sizes " ] [ x [ 0 ] ]
def k_avg ( x ) : return cache [ " avg_sizes " ] [ x [ 0 ] ]
key_map = {
key_map = {
" user " : k_user ,
" user " : k_user ,
@ -36,7 +35,6 @@ def dashboard():
}
}
items . sort ( key = key_map . get ( sort , k_total ) , reverse = reverse )
items . sort ( key = key_map . get ( sort , k_total ) , reverse = reverse )
# Pagination
page = max ( 1 , int ( request . args . get ( " page " , 1 ) ) )
page = max ( 1 , int ( request . args . get ( " page " , 1 ) ) )
total_pages = max ( 1 , math . ceil ( len ( items ) / DASHBOARD_PER_PAGE ) )
total_pages = max ( 1 , math . ceil ( len ( items ) / DASHBOARD_PER_PAGE ) )
start = ( page - 1 ) * DASHBOARD_PER_PAGE
start = ( page - 1 ) * DASHBOARD_PER_PAGE
@ -52,9 +50,7 @@ def dashboard():
sort = sort ,
sort = sort ,
dir = dir_
dir = dir_
)
)
@web.route ( " /refresh " )
@web.route ( " /refresh " )
def refresh ( ) :
def refresh ( ) :
cache = build_cache ( )
cache = build_cache ( )
@ -67,7 +63,6 @@ def refresh():
@web.route ( " /user/<username> " )
@web.route ( " /user/<username> " )
def user_page ( username ) :
def user_page ( username ) :
videos = db_get_videos ( username = username )
videos = db_get_videos ( username = username )
page = max ( 1 , int ( request . args . get ( " page " , 1 ) ) )
page = max ( 1 , int ( request . args . get ( " page " , 1 ) ) )
total_pages = max ( 1 , math . ceil ( len ( videos ) / VIDEOS_PER_PAGE ) )
total_pages = max ( 1 , math . ceil ( len ( videos ) / VIDEOS_PER_PAGE ) )
start = ( page - 1 ) * VIDEOS_PER_PAGE
start = ( page - 1 ) * VIDEOS_PER_PAGE
@ -101,10 +96,8 @@ def view_video(video_id):
def recent ( ) :
def recent ( ) :
page = max ( 1 , int ( request . args . get ( " page " , 1 ) ) )
page = max ( 1 , int ( request . args . get ( " page " , 1 ) ) )
per_page = VIDEOS_PER_PAGE
per_page = VIDEOS_PER_PAGE
videos , total = db_get_recent ( page , per_page )
videos , total = db_get_recent ( page , per_page )
total_pages = max ( 1 , math . ceil ( total / per_page ) )
total_pages = max ( 1 , math . ceil ( total / per_page ) )
mark_favorites ( videos )
mark_favorites ( videos )
return render_template (
return render_template (
@ -118,11 +111,8 @@ def recent():
def favorites_page ( ) :
def favorites_page ( ) :
page = max ( 1 , int ( request . args . get ( " page " , 1 ) ) )
page = max ( 1 , int ( request . args . get ( " page " , 1 ) ) )
per_page = VIDEOS_PER_PAGE
per_page = VIDEOS_PER_PAGE
videos , total = db_get_favorites ( page , per_page )
videos , total = db_get_favorites ( page , per_page )
total_pages = max ( 1 , math . ceil ( total / per_page ) )
total_pages = max ( 1 , math . ceil ( total / per_page ) )
# tag stars (not strictly necessary since everything here is fav, but keeps UI consistent)
mark_favorites ( videos )
mark_favorites ( videos )
return render_template (
return render_template (
@ -130,5 +120,4 @@ def favorites_page():
videos = videos ,
videos = videos ,
page = page ,
page = page ,
total_pages = total_pages
total_pages = total_pages
)
)