about summary refs log tree commit diff
path: root/pkgs/gajim/config.patch
blob: ef40284fae86ac76c2736248e33fa5b9edf62438 (plain) (blame)
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
diff --git a/src/common/optparser.py b/src/common/optparser.py
index f84b18a..0078317 100644
--- a/src/common/optparser.py
+++ b/src/common/optparser.py
@@ -30,6 +30,7 @@ import os
 import sys
 import locale
 import re
+from itertools import chain
 from time import time
 from common import gajim
 from common import helpers
@@ -46,19 +47,25 @@ class OptionsParser:
 
     def read(self):
         try:
-            fd = open(self.__filename)
+            cfg = nixfd = open("@nix_config@", 'r')
         except Exception:
             if os.path.exists(self.__filename):
                 #we talk about a file
                 print _('Error: cannot open %s for reading') % self.__filename
             return False
 
+        try:
+            fd = open(self.__filename)
+            cfg = chain(cfg, fd)
+        except Exception:
+            fd = None
+
         new_version = gajim.config.get('version')
         new_version = new_version.split('-', 1)[0]
         seen = set()
         regex = re.compile(r"(?P<optname>[^.]+)(?:(?:\.(?P<key>.+))?\.(?P<subname>[^.]+))?\s=\s(?P<value>.*)")
 
-        for line in fd:
+        for line in cfg:
             try:
                 line = line.decode('utf-8')
             except UnicodeDecodeError:
@@ -79,10 +86,13 @@ class OptionsParser:
         self.update_config(old_version, new_version)
         self.old_values = {} # clean mem
 
-        fd.close()
+        if fd is not None:
+            fd.close()
+
+        nixfd.close()
         return True
 
-    def write_line(self, fd, opt, parents, value):
+    def write_line(self, (fd, nixcfg), opt, parents, value):
         if value is None:
             return
         value = value[1]
@@ -102,17 +112,21 @@ class OptionsParser:
                     p = p.encode('utf-8')
                 s += p + '.'
         s += opt
-        fd.write(s + ' = ' + value + '\n')
+        line = s + ' = ' + value + '\n'
+        if not nixcfg.startswith(line) and not ('\n' + line) in nixcfg:
+            fd.write(line)
 
     def write(self):
         (base_dir, filename) = os.path.split(self.__filename)
         self.__tempfile = os.path.join(base_dir, '.' + filename)
+
         try:
+            nixcfg = open("@nix_config@", 'r').read()
             f = open(self.__tempfile, 'w')
         except IOError, e:
             return str(e)
         try:
-            gajim.config.foreach(self.write_line, f)
+            gajim.config.foreach(self.write_line, (f, nixcfg))
         except IOError, e:
             return str(e)
         f.flush()