gajim-plural/src/common/check_paths.py

149 lines
4.1 KiB
Python
Raw Normal View History

##
2007-10-22 13:33:50 +02:00
## Copyright (C) 2005-2006 Yann Leboulanger <asterix@lagaule.org>
## Copyright (C) 2005-2006 Nikos Kouremenos <kourem@gmail.com>
## Copyright (C) 2005-2006 Travis Shirk <travis@pobox.com>
##
## This file is part of Gajim.
##
## Gajim is free software; you can redistribute it and/or modify
## it under the terms of the GNU General Public License as published
## by the Free Software Foundation; version 3 only.
##
## Gajim is distributed in the hope that it will be useful,
## but WITHOUT ANY WARRANTY; without even the implied warranty of
## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
## GNU General Public License for more details.
##
## You should have received a copy of the GNU General Public License
## along with Gajim. If not, see <http://www.gnu.org/licenses/>.
##
import os
import sys
import stat
from common import gajim
import logger
# DO NOT MOVE ABOVE OF import gajim
try:
import sqlite3 as sqlite # python 2.5
except ImportError:
try:
from pysqlite2 import dbapi2 as sqlite
except ImportError:
raise exceptions.PysqliteNotAvailable
def create_log_db():
print _('creating logs database')
con = sqlite.connect(logger.LOG_DB_PATH)
os.chmod(logger.LOG_DB_PATH, 0600) # rw only for us
cur = con.cursor()
# create the tables
# kind can be
# status, gcstatus, gc_msg, (we only recv for those 3),
# single_msg_recv, chat_msg_recv, chat_msg_sent, single_msg_sent
# to meet all our needs
# logs.jid_id --> jids.jid_id but Sqlite doesn't do FK etc so it's done in python code
# jids.jid text column will be JID if TC-related, room_jid if GC-related,
# ROOM_JID/nick if pm-related.
2007-07-09 23:24:47 +02:00
# also check optparser.py, which updates databases on gajim updates
cur.executescript(
'''
CREATE TABLE jids(
jid_id INTEGER PRIMARY KEY AUTOINCREMENT UNIQUE,
jid TEXT UNIQUE,
type INTEGER
);
CREATE TABLE unread_messages(
2006-04-19 10:53:27 +02:00
message_id INTEGER PRIMARY KEY AUTOINCREMENT UNIQUE,
jid_id INTEGER
);
CREATE INDEX idx_unread_messages_jid_id ON unread_messages (jid_id);
CREATE TABLE transports_cache (
transport TEXT UNIQUE,
type INTEGER
);
CREATE TABLE logs(
log_line_id INTEGER PRIMARY KEY AUTOINCREMENT UNIQUE,
jid_id INTEGER,
contact_name TEXT,
time INTEGER,
kind INTEGER,
show INTEGER,
message TEXT,
subject TEXT
);
CREATE INDEX idx_logs_jid_id_kind ON logs (jid_id, kind);
2007-07-09 23:24:47 +02:00
CREATE TABLE caps_cache (
hash_method TEXT,
hash TEXT,
2007-07-09 23:24:47 +02:00
data BLOB);
CREATE TABLE IF NOT EXISTS rooms_last_message_time(
jid_id INTEGER PRIMARY KEY UNIQUE,
time INTEGER
);
'''
)
con.commit()
2006-04-19 10:53:27 +02:00
con.close()
2005-11-23 20:21:46 +01:00
def check_and_possibly_create_paths():
LOG_DB_PATH = logger.LOG_DB_PATH
2006-02-15 11:44:41 +01:00
VCARD_PATH = gajim.VCARD_PATH
2006-01-17 15:36:17 +01:00
AVATAR_PATH = gajim.AVATAR_PATH
2006-02-15 11:44:41 +01:00
dot_gajim = os.path.dirname(VCARD_PATH)
if os.path.isfile(dot_gajim):
2007-01-02 14:36:54 +01:00
print _('%s is a file but it should be a directory') % dot_gajim
print _('Gajim will now exit')
sys.exit()
elif os.path.isdir(dot_gajim):
s = os.stat(dot_gajim)
if s.st_mode & stat.S_IROTH: # others have read permission!
os.chmod(dot_gajim, 0700) # rwx------
2006-02-15 11:44:41 +01:00
if not os.path.exists(VCARD_PATH):
create_path(VCARD_PATH)
2006-02-15 11:44:41 +01:00
elif os.path.isfile(VCARD_PATH):
2007-01-02 14:36:54 +01:00
print _('%s is a file but it should be a directory') % VCARD_PATH
print _('Gajim will now exit')
sys.exit()
2006-01-17 12:20:55 +01:00
if not os.path.exists(AVATAR_PATH):
create_path(AVATAR_PATH)
2006-01-17 12:20:55 +01:00
elif os.path.isfile(AVATAR_PATH):
2007-01-02 14:36:54 +01:00
print _('%s is a file but it should be a directory') % AVATAR_PATH
print _('Gajim will now exit')
sys.exit()
if not os.path.exists(LOG_DB_PATH):
create_log_db()
2006-04-19 10:53:27 +02:00
gajim.logger.init_vars()
elif os.path.isdir(LOG_DB_PATH):
2007-01-02 14:36:54 +01:00
print _('%s is a directory but should be a file') % LOG_DB_PATH
print _('Gajim will now exit')
sys.exit()
2007-07-14 00:52:23 +02:00
else: # dot_gajim doesn't exist
if dot_gajim: # is '' on win9x so avoid that
create_path(dot_gajim)
2006-02-15 11:44:41 +01:00
if not os.path.isdir(VCARD_PATH):
create_path(VCARD_PATH)
if not os.path.exists(AVATAR_PATH):
create_path(AVATAR_PATH)
if not os.path.isfile(LOG_DB_PATH):
create_log_db()
gajim.logger.init_vars()
2006-02-15 11:42:40 +01:00
def create_path(directory):
print _('creating %s directory') % directory
2006-02-16 09:59:28 +01:00
os.mkdir(directory, 0700)