Welcome to mirror list, hosted at ThFree Co, Russian Federation.

check_paths.py « common « src - dev.gajim.org/gajim/gajim.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
blob: 160fe4f70b68d87a55b9dd9d8aebfec6cd924d84 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
## src/common/check_paths.py
##
## Copyright (C) 2005-2006 Travis Shirk <travis AT pobox.com>
##                         Nikos Kouremenos <kourem AT gmail.com>
## Copyright (C) 2005-2008 Yann Leboulanger <asterix AT lagaule.org>
## Copyright (C) 2006 Dimitur Kirov <dkirov AT gmail.com>
## Copyright (C) 2007 Tomasz Melcer <liori AT exroot.org>
## Copyright (C) 2008 Jean-Marie Traissard <jim AT lapin.org>
##                    Jonathan Schleifer <js-gajim AT webkeks.org>
##
## 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.
	# 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(
			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);

		CREATE TABLE caps_cache (
			hash_method TEXT,
			hash TEXT,
			data BLOB);

		CREATE TABLE IF NOT EXISTS rooms_last_message_time(
			jid_id INTEGER PRIMARY KEY UNIQUE,
			time INTEGER
		);
		'''
		)

	con.commit()
	con.close()

def check_and_possibly_create_paths():
	LOG_DB_PATH = logger.LOG_DB_PATH
	VCARD_PATH = gajim.VCARD_PATH
	AVATAR_PATH = gajim.AVATAR_PATH
	dot_gajim = os.path.dirname(VCARD_PATH)
	if os.path.isfile(dot_gajim):
		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------

		if not os.path.exists(VCARD_PATH):
			create_path(VCARD_PATH)
		elif os.path.isfile(VCARD_PATH):
			print _('%s is a file but it should be a directory') % VCARD_PATH
			print _('Gajim will now exit')
			sys.exit()

		if not os.path.exists(AVATAR_PATH):
			create_path(AVATAR_PATH)
		elif os.path.isfile(AVATAR_PATH):
			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()
			gajim.logger.init_vars()
		elif os.path.isdir(LOG_DB_PATH):
			print _('%s is a directory but should be a file') % LOG_DB_PATH
			print _('Gajim will now exit')
			sys.exit()
		
	else: # dot_gajim doesn't exist
		if dot_gajim: # is '' on win9x so avoid that
			create_path(dot_gajim)
		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()

def create_path(directory):
	print _('creating %s directory') % directory
	os.mkdir(directory, 0700)

# vim: se ts=3: