]> git.phdru.name Git - xsetbg.git/blobdiff - reload_db.py
Fix a bug: id can be None
[xsetbg.git] / reload_db.py
index af037104762dbeab193a5ff54d4c7d3b4a1ab92c..64e84f4cdafbc8b21ec6e8c0b370df9c7d812f5a 100755 (executable)
@@ -6,20 +6,55 @@ This file is a part of XSetBg.
 """
 
 __author__ = "Oleg Broytman <phd@phdru.name>"
-__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()