X-Git-Url: https://git.phdru.name/?a=blobdiff_plain;f=reload_db.py;h=64e84f4cdafbc8b21ec6e8c0b370df9c7d812f5a;hb=a3637a99967383effca24fb7c3d501e6d2dc3e41;hp=af037104762dbeab193a5ff54d4c7d3b4a1ab92c;hpb=9f11c26113add5270ade4da28c7a2adb84194b1b;p=xsetbg.git diff --git a/reload_db.py b/reload_db.py index af03710..64e84f4 100755 --- a/reload_db.py +++ b/reload_db.py @@ -6,20 +6,55 @@ This file is a part of XSetBg. """ __author__ = "Oleg Broytman " -__copyright__ = "Copyright (C) 2007-2012 PhiloSoft Design" +__copyright__ = "Copyright (C) 2007-2015 PhiloSoft Design" __license__ = "GNU GPL" -import sys, os, shelve +import sys +from sqlobject import sqlhub, SQLObjectNotFound +from sqlobject.sqlbuilder import Insert +from xsetbg_conf import xsetbg_conf +from xsetbg_db import recreate_db -xsetbg_dir = os.path.join(os.environ["HOME"], "lib", "xsetbg") -os.chdir(xsetbg_dir) - -global_db_name = "xsetbg.db" +fs_encoding = xsetbg_conf.get("images", "fs_encoding") dump_file = open(sys.argv[1], 'rU') +xsetbg_db = recreate_db() + + +def convert_str(s): + if s == "None": + return None + else: + return int(float(s)) + +connection = xsetbg_db._connection + +connection.query("PRAGMA synchronous=OFF") +connection.query("PRAGMA count_changes=OFF") +connection.query("PRAGMA journal_mode=MEMORY") +connection.query("PRAGMA temp_store=MEMORY") + +txn = connection.transaction() +sqlhub.processConnection = txn -global_db = shelve.open(global_db_name, flag='n') for line in dump_file: - timestamp, filename = line.strip().split(None, 1) - global_db[filename] = float(timestamp) -global_db.close() + id, timestamp, filename = line.strip().split(None, 2) + id = convert_str(id) + timestamp = convert_str(timestamp) + if fs_encoding != 'utf-8': + filename = filename.decode(fs_encoding).encode('utf-8') + try: + row = xsetbg_db.byFull_name(filename) + except SQLObjectNotFound: + values = {'last_shown': timestamp, 'full_name': filename} + if id: + values['id'] = id + query = txn.sqlrepr(Insert(xsetbg_db.sqlmeta.table, values=values)) + txn.query(query) + else: + assert id is None or row.id == id + assert row.last_shown == timestamp + +txn.commit() +sqlhub.processConnection = connection + dump_file.close()