]> git.phdru.name Git - xsetbg.git/blobdiff - reload_db.py
Build: For Python 3.13 SQLObject requires unreleased FormEncode
[xsetbg.git] / reload_db.py
index d60e3ec314207c0213e745bd35c8757352afa6f7..c6e9b198ba8ce8e1a94a3be43119b4727f2256f2 100755 (executable)
@@ -1,4 +1,4 @@
-#! /usr/bin/env python
+#! /usr/bin/env python3
 """Reload a dump into DB
 
 This file is a part of XSetBg.
@@ -12,24 +12,25 @@ from xsetbg_conf import xsetbg_conf
 from xsetbg_db import recreate_db, SQLiteMassInsert
 
 
-def convert_str(s):
+def convert_str(s, convert=int):
     if s == "None":
         return None
     else:
-        return int(float(s))
+        return convert(float(s))
 
 
-fs_encoding = xsetbg_conf.get("images", "fs_encoding")
-dump_file = open(sys.argv[1], 'r')
+dump_file = open(sys.argv[1], 'r',
+                 encoding=xsetbg_conf.get("images", "fs_encoding"))
 xsetbg_db = recreate_db()
-count_new = count_old = 0
+count_new = count_old = count_updated = 0
 
 with SQLiteMassInsert() as txn:
     for line in dump_file:
-        id, timestamp, filename = line.strip().split(None, 2)
+        id, timestamp, is_image, show, filename = line.strip().split(None, 4)
         id = convert_str(id)
         timestamp = convert_str(timestamp)
-        filename = filename.decode(fs_encoding)
+        is_image = convert_str(is_image, bool)
+        show = convert_str(show, bool)
         try:
             if id:
                 row = xsetbg_db.get(id)
@@ -37,7 +38,10 @@ with SQLiteMassInsert() as txn:
                 row = xsetbg_db.byFull_name(filename)
         except SQLObjectNotFound:
             values = {'last_shown': timestamp,
-                      'full_name': filename.encode('utf-8')}
+                      'full_name': filename.encode('utf-8'),
+                      'is_image': is_image,
+                      'show': show,
+                     }
             if id:
                 values['id'] = id
             query = txn.sqlrepr(Insert(xsetbg_db.sqlmeta.table, values=values))
@@ -47,9 +51,18 @@ with SQLiteMassInsert() as txn:
             assert id is None or row.id == id
             if row.last_shown is not None:
                 assert row.last_shown == timestamp
-            count_old += 1
+            if row.full_name == filename:
+                count_old += 1
+            else:
+                row.full_name = filename
+                count_updated += 1
+            if row.is_image != is_image:
+                row.is_image = is_image
+            if row.show != show:
+                row.show = show
 
 dump_file.close()
 
-print "New images:", count_new
-print "Existing images:", count_old
+print("New images:", count_new)
+print("Existing images:", count_old)
+print("Updated images:", count_updated)