move files from ~/.gajim to XDG folders

This commit is contained in:
Yann Leboulanger 2010-02-05 20:13:49 +01:00
parent 3e777ea8f1
commit 8455e779cb
2 changed files with 128 additions and 29 deletions

View File

@ -35,7 +35,6 @@ import sqlite3 as sqlite
def create_log_db():
print _('creating logs database')
print logger.LOG_DB_PATH
con = sqlite.connect(logger.LOG_DB_PATH)
os.chmod(logger.LOG_DB_PATH, 0600) # rw only for us
cur = con.cursor()
@ -126,11 +125,139 @@ def create_cache_db():
con.commit()
con.close()
def split_db():
print 'spliting database'
if os.name == 'nt':
try:
OLD_LOG_DB_FOLDER = os.path.join(fse(os.environ[u'appdata']), u'Gajim')
except KeyError:
OLD_LOG_DB_FOLDER = u'.'
else:
OLD_LOG_DB_FOLDER = os.path.expanduser(u'~/.gajim')
tmp = logger.CACHE_DB_PATH
logger.CACHE_DB_PATH = os.path.join(OLD_LOG_DB_FOLDER, 'cache.db')
create_cache_db()
back = os.getcwd()
os.chdir(OLD_LOG_DB_FOLDER)
con = sqlite.connect('logs.db')
os.chdir(back)
cur = con.cursor()
cur.execute('''SELECT name FROM sqlite_master WHERE type = 'table';''')
tables = cur.fetchall() # we get [(u'jids',), (u'unread_messages',), ...
tables = [t[0] for t in tables]
cur.execute("ATTACH DATABASE '%s' AS cache" % logger.CACHE_DB_PATH)
for table in ('caps_cache', 'rooms_last_message_time', 'roster_entry',
'roster_group', 'transports_cache'):
if table not in tables:
continue
try:
cur.executescript(
'INSERT INTO cache.%s SELECT * FROM %s;' % (table, table))
con.commit()
cur.executescript('DROP TABLE %s;' % table)
con.commit()
except sqlite.OperationalError, e:
print >> sys.stderr, 'error moving table %s to cache.db: %s' % \
(table, str(e))
con.close()
logger.CACHE_DB_PATH = tmp
def check_and_possibly_move_config():
LOG_DB_PATH = logger.LOG_DB_PATH
CACHE_DB_PATH = logger.CACHE_DB_PATH
vars = {}
vars['VCARD_PATH'] = gajim.VCARD_PATH
vars['AVATAR_PATH'] = gajim.AVATAR_PATH
vars['MY_EMOTS_PATH'] = gajim.MY_EMOTS_PATH
vars['MY_ICONSETS_PATH'] = gajim.MY_ICONSETS_PATH
vars['MY_MOOD_ICONSETS_PATH'] = gajim.MY_MOOD_ICONSETS_PATH
vars['MY_ACTIVITY_ICONSETS_PATH'] = gajim.MY_ACTIVITY_ICONSETS_PATH
import configpaths
MY_DATA = configpaths.gajimpaths['MY_DATA']
MY_CONFIG = configpaths.gajimpaths['MY_CONFIG']
MY_CACHE = configpaths.gajimpaths['MY_CACHE']
if os.path.exists(LOG_DB_PATH):
# File already exists
return
if os.name == 'nt':
try:
OLD_LOG_DB_FOLDER = os.path.join(fse(os.environ[u'appdata']), u'Gajim')
except KeyError:
OLD_LOG_DB_FOLDER = u'.'
else:
OLD_LOG_DB_FOLDER = os.path.expanduser(u'~/.gajim')
if not os.path.exists(OLD_LOG_DB_FOLDER):
return
OLD_LOG_DB_PATH = os.path.join(OLD_LOG_DB_FOLDER, u'logs.db')
OLD_CACHE_DB_PATH = os.path.join(OLD_LOG_DB_FOLDER, u'cache.db')
vars['OLD_VCARD_PATH'] = os.path.join(OLD_LOG_DB_FOLDER, u'vcards')
vars['OLD_AVATAR_PATH'] = os.path.join(OLD_LOG_DB_FOLDER, u'avatars')
vars['OLD_MY_EMOTS_PATH'] = os.path.join(OLD_LOG_DB_FOLDER, u'emoticons')
vars['OLD_MY_ICONSETS_PATH'] = os.path.join(OLD_LOG_DB_FOLDER, u'iconsets')
vars['OLD_MY_MOOD_ICONSETS_PATH'] = os.path.join(OLD_LOG_DB_FOLDER, u'moods')
vars['OLD_MY_ACTIVITY_ICONSETS_PATH'] = os.path.join(OLD_LOG_DB_FOLDER,
u'activities')
OLD_CONFIG_FILES = []
OLD_DATA_FILES = []
for f in os.listdir(OLD_LOG_DB_FOLDER):
if f == 'config' or f.startswith('config.'):
OLD_CONFIG_FILES.append(f)
if f == 'secrets' or f.startswith('secrets.'):
OLD_DATA_FILES.append(f)
if f == 'cacerts.pem':
OLD_DATA_FILES.append(f)
if not os.path.exists(OLD_LOG_DB_PATH):
return
if not os.path.exists(OLD_CACHE_DB_PATH):
# split database
split_db()
to_move = {}
to_move[OLD_LOG_DB_PATH] = LOG_DB_PATH
to_move[OLD_CACHE_DB_PATH] = CACHE_DB_PATH
for folder in ('VCARD_PATH', 'AVATAR_PATH', 'MY_EMOTS_PATH',
'MY_ICONSETS_PATH', 'MY_MOOD_ICONSETS_PATH', 'MY_ACTIVITY_ICONSETS_PATH'):
src = vars['OLD_' + folder]
dst = vars[folder]
to_move[src] = dst
# move config files
for f in OLD_CONFIG_FILES:
src = os.path.join(OLD_LOG_DB_FOLDER, f)
dst = os.path.join(MY_CONFIG, f)
to_move[src] = dst
# Move data files (secrets, cacert.pem)
for f in OLD_DATA_FILES:
src = os.path.join(OLD_LOG_DB_FOLDER, f)
dst = os.path.join(MY_DATA, f)
to_move[src] = dst
for src, dst in to_move.items():
if os.path.exists(dst):
continue
if not os.path.exists(src):
continue
print 'moving %s to %s' % (src, dst)
os.renames(src, dst)
gajim.logger.init_vars()
gajim.logger.attach_cache_database()
def check_and_possibly_create_paths():
check_and_possibly_move_config()
LOG_DB_PATH = logger.LOG_DB_PATH
LOG_DB_FOLDER, LOG_DB_FILE = os.path.split(LOG_DB_PATH)
CACHE_DB_PATH = logger.CACHE_DB_PATH
CACHE_DB_FOLDER, CACHE_DB_FILE = os.path.split(CACHE_DB_PATH)
VCARD_PATH = gajim.VCARD_PATH
AVATAR_PATH = gajim.AVATAR_PATH
import configpaths

View File

@ -217,8 +217,6 @@ class OptionsParser:
self.update_config_to_013100()
if old < [0, 13, 10, 1] and new >= [0, 13, 10, 1]:
self.update_config_to_013101()
if old < [0, 13, 10, 2] and new >= [0, 13, 10, 2]:
self.update_config_to_013102()
gajim.logger.init_vars()
gajim.logger.attach_cache_database()
@ -884,30 +882,4 @@ class OptionsParser:
con.close()
gajim.config.set('version', '0.13.10.1')
def update_config_to_013102(self):
back = os.getcwd()
os.chdir(logger.LOG_DB_FOLDER)
con = sqlite.connect(logger.LOG_DB_FILE)
os.chdir(back)
cur = con.cursor()
cur.execute('''SELECT name FROM sqlite_master WHERE type = 'table';''')
tables = cur.fetchall() # we get [(u'jids',), (u'unread_messages',), ...
tables = [t[0] for t in tables]
cur.execute("ATTACH DATABASE '%s' AS cache" % logger.CACHE_DB_PATH)
for table in ('caps_cache', 'rooms_last_message_time', 'roster_entry',
'roster_group', 'transports_cache'):
if table not in tables:
continue
try:
cur.executescript(
'INSERT INTO cache.%s SELECT * FROM %s;' % (table, table))
con.commit()
cur.executescript('DROP TABLE %s;' % table)
con.commit()
except sqlite.OperationalError, e:
print >> sys.stderr, 'error moving table %s to cache.db: %s' % \
(table, str(e))
con.close()
gajim.config.set('version', '0.13.10.2')
# vim: se ts=3: