2003-10-22 20:45:13 +02:00
|
|
|
##
|
|
|
|
## Gajim Team:
|
2005-04-27 01:45:25 +02:00
|
|
|
## - Yann Le Boulanger <asterix@lagaule.org>
|
|
|
|
## - Vincent Hanquez <tab@snarc.org>
|
2005-08-23 11:17:48 +02:00
|
|
|
## - Nikos Kouremenos <kourem@gmail.com>
|
2003-10-22 20:45:13 +02:00
|
|
|
##
|
2005-01-07 22:52:38 +01:00
|
|
|
## Copyright (C) 2003-2005 Gajim Team
|
2003-10-22 20:45:13 +02:00
|
|
|
##
|
|
|
|
## This program 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 2 only.
|
|
|
|
##
|
|
|
|
## This program 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.
|
|
|
|
##
|
|
|
|
|
2005-04-16 19:03:21 +02:00
|
|
|
import os
|
|
|
|
from common import gajim
|
2005-08-01 11:37:41 +02:00
|
|
|
from common import i18n
|
|
|
|
_ = i18n._
|
2003-10-22 20:45:13 +02:00
|
|
|
|
2005-01-22 21:26:43 +01:00
|
|
|
class OptionsParser:
|
2005-04-27 01:45:25 +02:00
|
|
|
def __init__(self, filename):
|
2005-05-20 20:08:24 +02:00
|
|
|
self.__filename = filename
|
2003-10-22 20:45:13 +02:00
|
|
|
|
2005-04-27 01:45:25 +02:00
|
|
|
def read_line(self, line):
|
2005-05-06 10:33:23 +02:00
|
|
|
index = line.find(' = ')
|
2005-04-27 01:45:25 +02:00
|
|
|
var_str = line[0:index]
|
|
|
|
value_str = line[index + 3:-1]
|
|
|
|
|
|
|
|
i_start = var_str.find('.')
|
|
|
|
i_end = var_str.rfind('.')
|
|
|
|
|
|
|
|
if i_start == -1:
|
|
|
|
gajim.config.set(var_str, value_str)
|
|
|
|
else:
|
|
|
|
optname = var_str[0:i_start]
|
|
|
|
key = var_str[i_start + 1:i_end]
|
|
|
|
subname = var_str[i_end + 1:]
|
|
|
|
gajim.config.add_per(optname, key)
|
|
|
|
gajim.config.set_per(optname, key, subname, value_str)
|
|
|
|
|
|
|
|
def read(self):
|
2003-10-22 20:45:13 +02:00
|
|
|
try:
|
2005-04-27 01:45:25 +02:00
|
|
|
fd = open(self.__filename)
|
2003-10-22 20:45:13 +02:00
|
|
|
except:
|
2005-05-06 10:33:23 +02:00
|
|
|
if os.path.exists(self.__filename):
|
2005-08-24 14:38:41 +02:00
|
|
|
#we talk about a file
|
2005-08-23 11:17:48 +02:00
|
|
|
print _('error: cannot open %s for reading') % self.__filename
|
2003-10-22 20:45:13 +02:00
|
|
|
return
|
|
|
|
|
2005-04-27 01:45:25 +02:00
|
|
|
for line in fd.readlines():
|
|
|
|
self.read_line(line)
|
2005-04-16 19:03:21 +02:00
|
|
|
|
2005-04-27 01:45:25 +02:00
|
|
|
fd.close()
|
2005-04-16 19:03:21 +02:00
|
|
|
|
2005-04-27 01:45:25 +02:00
|
|
|
def write_line(self, fd, opt, parents, value):
|
2005-05-06 10:33:23 +02:00
|
|
|
s = ''
|
2005-04-27 01:45:25 +02:00
|
|
|
if parents:
|
|
|
|
if len(parents) == 1:
|
|
|
|
return
|
|
|
|
for p in parents:
|
2005-05-06 10:33:23 +02:00
|
|
|
s += p + '.'
|
2005-04-27 01:45:25 +02:00
|
|
|
if value == None:
|
2005-04-17 21:43:28 +02:00
|
|
|
return
|
2005-04-27 01:45:25 +02:00
|
|
|
s += opt
|
2005-08-13 13:17:49 +02:00
|
|
|
fd.write(s + ' = ' + str(value[1]) + '\n')
|
2005-04-27 01:45:25 +02:00
|
|
|
|
|
|
|
def write(self):
|
2005-08-01 11:37:41 +02:00
|
|
|
(base_dir, filename) = os.path.split(self.__filename)
|
2005-08-13 13:17:49 +02:00
|
|
|
self.__tempfile = os.path.join(base_dir, '.' + filename)
|
2003-10-22 20:45:13 +02:00
|
|
|
try:
|
2005-08-01 11:37:41 +02:00
|
|
|
fd = open(self.__tempfile, 'w')
|
2003-10-22 20:45:13 +02:00
|
|
|
except:
|
2005-08-23 11:17:48 +02:00
|
|
|
#chances are we cannot write file in a directory
|
|
|
|
err_str = _('Unable to write file in %s') % base_dir
|
2005-08-01 11:37:41 +02:00
|
|
|
print err_str
|
|
|
|
return err_str
|
|
|
|
try:
|
|
|
|
gajim.config.foreach(self.write_line, fd)
|
|
|
|
except IOError, e:
|
|
|
|
fd.close()
|
2005-08-09 13:17:32 +02:00
|
|
|
return e.errno
|
2005-04-27 01:45:25 +02:00
|
|
|
fd.close()
|
2005-08-02 22:33:44 +02:00
|
|
|
if os.path.exists(self.__filename):
|
2005-08-03 00:29:25 +02:00
|
|
|
# win32 needs this
|
2005-08-02 22:33:44 +02:00
|
|
|
try:
|
|
|
|
os.remove(self.__filename)
|
|
|
|
except:
|
|
|
|
pass
|
2005-08-01 11:37:41 +02:00
|
|
|
try:
|
|
|
|
os.rename(self.__tempfile, self.__filename)
|
2005-08-09 13:17:32 +02:00
|
|
|
except IOError, e:
|
|
|
|
return e.errno
|
2005-08-23 11:30:54 +02:00
|
|
|
os.chmod(self.__filename, 0600)
|