]> git.phdru.name Git - xsetbg.git/blobdiff - reload_db.py
Fix a bug: id can be None
[xsetbg.git] / reload_db.py
index 187bfb353f04ac8b374042d4724ce3fc5fe2e494..64e84f4cdafbc8b21ec6e8c0b370df9c7d812f5a 100755 (executable)
@@ -10,24 +10,15 @@ __copyright__ = "Copyright (C) 2007-2015 PhiloSoft Design"
 __license__ = "GNU GPL"
 
 import sys
-from sqlobject import SQLObjectNotFound, sqlhub
+from sqlobject import sqlhub, SQLObjectNotFound
 from sqlobject.sqlbuilder import Insert
-from m_lib.defenc import default_encoding
-from xsetbg_db import SqliteSequence, XSetBg, xsetbg_db
+from xsetbg_conf import xsetbg_conf
+from xsetbg_db import recreate_db
 
+fs_encoding = xsetbg_conf.get("images", "fs_encoding")
 dump_file = open(sys.argv[1], 'rU')
+xsetbg_db = recreate_db()
 
-if xsetbg_db:
-    try:
-        seq = SqliteSequence.byName(XSetBg.sqlmeta.table)
-    except SQLObjectNotFound:
-        SqliteSequence(name=XSetBg.sqlmeta.table, seq=0)
-    else:
-        seq.seq = 0  # Reset autoincrement counter
-    xsetbg_db.clearTable()
-else:
-    xsetbg_db = XSetBg
-    xsetbg_db.createTable()
 
 def convert_str(s):
     if s == "None":
@@ -49,13 +40,19 @@ for line in dump_file:
     id, timestamp, filename = line.strip().split(None, 2)
     id = convert_str(id)
     timestamp = convert_str(timestamp)
-    if default_encoding != 'utf-8':
-        filename = filename.decode(default_encoding).encode('utf-8')
-    values = {'last_shown': timestamp, 'full_name': filename}
-    if id:
-        values['id'] = id
-    query = txn.sqlrepr(Insert(XSetBg.sqlmeta.table, values=values))
-    txn.query(query)
+    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