"""
-__author__ = "Oleg Broytman <phd@phdru.name>"
-__copyright__ = "Copyright (C) 2007-2015 PhiloSoft Design"
-__license__ = "GNU GPL"
-
import sys
-from sqlobject import SQLObjectNotFound, sqlhub
+from sqlobject import SQLObjectNotFound
from sqlobject.sqlbuilder import Insert
-from m_lib.defenc import default_encoding
-from xsetbg_db import SqliteSequence, XSetBg, xsetbg_db
-
-dump_file = open(sys.argv[1], 'rU')
+from xsetbg_conf import xsetbg_conf
+from xsetbg_db import recreate_db, SQLiteMassInsert
-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":
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
-
-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)
-
-txn.commit()
-sqlhub.processConnection = connection
+dump_file = open(sys.argv[1], 'r')
+xsetbg_db = recreate_db()
+count_new = count_old = count_updated = 0
+fs_encoding = xsetbg_conf.get("images", "fs_encoding")
+
+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:
+ if id:
+ row = xsetbg_db.get(id)
+ else:
+ 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
+ if row.full_name == filename:
+ count_old += 1
+ else:
+ row.full_name = filename
+ count_updated += 1
dump_file.close()
+
+print "New images:", count_new
+print "Existing images:", count_old
+print "Updated images:", count_updated