]> git.phdru.name Git - xsetbg.git/blobdiff - reload_db.py
Remove outdated __copyright__
[xsetbg.git] / reload_db.py
index 1bee46e92dde9517f826152043dced4f5ff87469..3c9c56e64ef3d26ca6fcc0f3cd9f9589309fff4d 100755 (executable)
@@ -5,18 +5,48 @@ This file is a part of XSetBg.
 
 """
 
-__author__ = "Oleg Broytman <phd@phdru.name>"
-__copyright__ = "Copyright (C) 2007-2014 PhiloSoft Design"
-__license__ = "GNU GPL"
+import sys
+from sqlobject import SQLObjectNotFound
+from sqlobject.sqlbuilder import Insert
+from xsetbg_conf import xsetbg_conf
+from xsetbg_db import recreate_db, SQLiteMassInsert
 
-import sys, shelve
-from xsetbg_db import xsetbg_db_path
 
+def convert_str(s):
+    if s == "None":
+        return None
+    else:
+        return int(float(s))
+
+
+fs_encoding = xsetbg_conf.get("images", "fs_encoding")
 dump_file = open(sys.argv[1], 'rU')
+xsetbg_db = recreate_db()
+count_new = count_old = 0
+
+with SQLiteMassInsert() as txn:
+    for line in dump_file:
+        id, timestamp, filename = line.strip().split(None, 2)
+        id = convert_str(id)
+        timestamp = convert_str(timestamp)
+        filename = filename.decode(fs_encoding)
+        try:
+            row = xsetbg_db.byFull_name(filename)
+        except SQLObjectNotFound:
+            values = {'last_shown': timestamp,
+                      'full_name': filename.encode('utf-8')}
+            if id:
+                values['id'] = id
+            query = txn.sqlrepr(Insert(xsetbg_db.sqlmeta.table, values=values))
+            txn.query(query)
+            count_new += 1
+        else:
+            assert id is None or row.id == id
+            if row.last_shown is not None:
+                assert row.last_shown == timestamp
+            count_old += 1
 
-xsetbg_db = shelve.open(xsetbg_db_path, flag='n')
-for line in dump_file:
-   timestamp, filename = line.strip().split(None, 1)
-   xsetbg_db[filename] = float(timestamp)
-xsetbg_db.close()
 dump_file.close()
+
+print "New images:", count_new
+print "Existing images:", count_old