2018-12-18 03:17:53 +00:00
|
|
|
import argparse
|
|
|
|
import os
|
|
|
|
import sqlite3
|
|
|
|
import sys
|
|
|
|
|
|
|
|
import ycdl
|
|
|
|
|
2020-01-07 06:07:25 +00:00
|
|
|
def upgrade_3_to_4(sql):
|
|
|
|
'''
|
|
|
|
In this version, the views column was added.
|
|
|
|
'''
|
|
|
|
cur = sql.cursor()
|
|
|
|
cur.executescript('''
|
|
|
|
ALTER TABLE videos RENAME TO videos_old;
|
|
|
|
CREATE TABLE videos(
|
|
|
|
id TEXT,
|
|
|
|
published INT,
|
|
|
|
author_id TEXT,
|
|
|
|
title TEXT,
|
|
|
|
description TEXT,
|
|
|
|
duration INT,
|
|
|
|
views INT,
|
|
|
|
thumbnail TEXT,
|
|
|
|
download TEXT
|
|
|
|
);
|
|
|
|
INSERT INTO videos SELECT
|
|
|
|
id,
|
|
|
|
published,
|
|
|
|
author_id,
|
|
|
|
title,
|
|
|
|
description,
|
|
|
|
duration,
|
|
|
|
NULL,
|
|
|
|
thumbnail,
|
|
|
|
download
|
|
|
|
FROM videos_old;
|
|
|
|
DROP TABLE videos_old;
|
|
|
|
''')
|
|
|
|
|
|
|
|
def upgrade_2_to_3(sql):
|
|
|
|
'''
|
|
|
|
In this version, a column `automark` was added to the channels table, where
|
|
|
|
you can set channels to automatically mark videos as ignored or downloaded.
|
|
|
|
'''
|
|
|
|
cur = sql.cursor()
|
|
|
|
cur.execute('ALTER TABLE channels ADD COLUMN automark TEXT')
|
|
|
|
|
2018-12-18 03:17:53 +00:00
|
|
|
def upgrade_1_to_2(sql):
|
|
|
|
'''
|
2020-01-07 06:07:25 +00:00
|
|
|
In this version, the duration column was added.
|
2018-12-18 03:17:53 +00:00
|
|
|
'''
|
|
|
|
cur = sql.cursor()
|
|
|
|
cur.executescript('''
|
|
|
|
ALTER TABLE videos RENAME TO videos_old;
|
|
|
|
CREATE TABLE videos(
|
|
|
|
id TEXT,
|
|
|
|
published INT,
|
|
|
|
author_id TEXT,
|
|
|
|
title TEXT,
|
|
|
|
description TEXT,
|
|
|
|
duration INT,
|
|
|
|
thumbnail TEXT,
|
|
|
|
download TEXT
|
|
|
|
);
|
|
|
|
INSERT INTO videos SELECT
|
|
|
|
id,
|
|
|
|
published,
|
|
|
|
author_id,
|
|
|
|
title,
|
|
|
|
description,
|
|
|
|
NULL,
|
|
|
|
thumbnail,
|
|
|
|
download
|
|
|
|
FROM videos_old;
|
|
|
|
DROP TABLE videos_old;
|
|
|
|
''')
|
|
|
|
|
|
|
|
def upgrade_all(database_filepath):
|
|
|
|
'''
|
|
|
|
Given the directory containing a phototagger database, apply all of the
|
|
|
|
needed upgrade_x_to_y functions in order.
|
|
|
|
'''
|
|
|
|
sql = sqlite3.connect(database_filepath)
|
|
|
|
|
|
|
|
cur = sql.cursor()
|
|
|
|
|
|
|
|
cur.execute('PRAGMA user_version')
|
|
|
|
current_version = cur.fetchone()[0]
|
|
|
|
needed_version = ycdl.ycdl.DATABASE_VERSION
|
|
|
|
|
|
|
|
if current_version == needed_version:
|
|
|
|
print('Already up to date with version %d.' % needed_version)
|
|
|
|
return
|
|
|
|
|
|
|
|
for version_number in range(current_version + 1, needed_version + 1):
|
|
|
|
print('Upgrading from %d to %d.' % (current_version, version_number))
|
|
|
|
upgrade_function = 'upgrade_%d_to_%d' % (current_version, version_number)
|
|
|
|
upgrade_function = eval(upgrade_function)
|
|
|
|
upgrade_function(sql)
|
|
|
|
sql.cursor().execute('PRAGMA user_version = %d' % version_number)
|
|
|
|
sql.commit()
|
|
|
|
current_version = version_number
|
|
|
|
print('Upgrades finished.')
|
|
|
|
|
|
|
|
|
|
|
|
def upgrade_all_argparse(args):
|
|
|
|
return upgrade_all(database_filepath=args.database_filepath)
|
|
|
|
|
|
|
|
def main(argv):
|
|
|
|
parser = argparse.ArgumentParser()
|
|
|
|
|
|
|
|
parser.add_argument('database_filepath')
|
|
|
|
parser.set_defaults(func=upgrade_all_argparse)
|
|
|
|
|
|
|
|
args = parser.parse_args(argv)
|
2020-02-09 01:20:27 +00:00
|
|
|
return args.func(args)
|
2018-12-18 03:17:53 +00:00
|
|
|
|
|
|
|
if __name__ == '__main__':
|
|
|
|
raise SystemExit(main(sys.argv[1:]))
|