import sqlite3 import os import binascii def do_migration(conf): db_path = os.path.join(conf.data_dir, "lbrynet.sqlite") connection = sqlite3.connect(db_path) cursor = connection.cursor() current_columns = [] for col_info in cursor.execute("pragma table_info('file');").fetchall(): current_columns.append(col_info[1]) if 'content_fee' in current_columns or 'saved_file' in current_columns: connection.close() print("already migrated") return cursor.execute( "pragma foreign_keys=off;" ) cursor.execute(""" create table if not exists new_file ( stream_hash text primary key not null references stream, file_name text, download_directory text, blob_data_rate real not null, status text not null, saved_file integer not null, content_fee text ); """) for (stream_hash, file_name, download_dir, data_rate, status) in cursor.execute("select * from file").fetchall(): saved_file = 0 if download_dir != '{stream}' and file_name != '{stream}': try: if os.path.isfile(os.path.join(binascii.unhexlify(download_dir).decode(), binascii.unhexlify(file_name).decode())): saved_file = 1 else: download_dir, file_name = None, None except Exception: download_dir, file_name = None, None else: download_dir, file_name = None, None cursor.execute( "insert into new_file values (?, ?, ?, ?, ?, ?, NULL)", (stream_hash, file_name, download_dir, data_rate, status, saved_file) ) cursor.execute("drop table file") cursor.execute("alter table new_file rename to file") connection.commit() connection.close()