~sylvain-pineau/gtumbler/trunk

« back to all changes in this revision

Viewing changes to gtumbler_lib/preferences.py

  • Committer: Sylvain Pineau
  • Date: 2015-01-29 13:33:41 UTC
  • Revision ID: sylvain.pineau@canonical.com-20150129133341-m2zdxtiljg8x36fh
Release 12.07.8

To run properly on recent release, I had to remove preference saving and
unused dependecies not available after 12.04

Show diffs side-by-side

added added

removed removed

Lines of Context:
16
16
 
17
17
"""Provides a shared preferences dictionary"""
18
18
 
19
 
from desktopcouch.records.server import CouchDatabase
20
 
from desktopcouch.records.record import Record
21
 
import gtk
22
 
import gobject
23
 
 
24
 
class User_dict(dict):
25
 
    ''' a dictionary with extra methods:
26
 
 
27
 
    persistence: load, save and db_connect
28
 
    gobject signals: connect and emit.
29
 
    
30
 
    Don't use this directly. Please use the preferences instance.'''
31
 
    
32
 
    def __init__(self, *args, **kwds):
33
 
        dict.__init__(self, *args, **kwds)
34
 
        # Set up couchdb.
35
 
        self._db_name = "gtumbler"
36
 
        self._key = None
37
 
        self._database = None
38
 
        
39
 
        self._record_type = (
40
 
            "http://wiki.ubuntu.com/Quickly/RecordTypes/Gtumbler/"
41
 
            "Preferences")
42
 
        
43
 
        class Publisher(gtk.Invisible): # pylint: disable=R0904
44
 
            '''set up signals in a separate class
45
 
            
46
 
            gtk.Invisible has 230 public methods'''
47
 
            __gsignals__ = {'changed' : (gobject.SIGNAL_RUN_LAST,
48
 
                 gobject.TYPE_NONE, (gobject.TYPE_PYOBJECT,)),
49
 
                 'loaded' : (gobject.SIGNAL_RUN_LAST,
50
 
                 gobject.TYPE_NONE, (gobject.TYPE_PYOBJECT,))}
51
 
        
52
 
        publisher = Publisher()
53
 
        self.emit  = publisher.emit
54
 
        self.connect  = publisher.connect
55
 
 
56
 
    def db_connect(self):
57
 
        '''connect to couchdb
58
 
        
59
 
        create if necessary'''
60
 
        # logging.basicConfig will be called now
61
 
        self._database = CouchDatabase(self._db_name, create=True)
62
 
 
63
 
    def save(self):
64
 
        'save to couchdb'
65
 
        self._database.update_fields(self._key, self)
66
 
 
67
 
 
68
 
    def load(self):
69
 
        'load from couchdb'
70
 
        self.update({"record_type": self._record_type})
71
 
 
72
 
        results = self._database.get_records(
73
 
            record_type=self._record_type, create_view=True)
74
 
 
75
 
        if len(results.rows) == 0:
76
 
            # No preferences have ever been saved
77
 
            # save them before returning.
78
 
            self._key = self._database.put_record(Record(self))
79
 
        else:
80
 
            self.update(results.rows[0].value)
81
 
            del self['_rev']
82
 
            self._key = results.rows[0].value["_id"]
83
 
        self.emit('loaded', None)
84
 
 
85
 
    def update(self, *args, **kwds):
86
 
        ''' interface for dictionary
87
 
        
88
 
        send changed signal when appropriate '''
89
 
        
90
 
        # parse args
91
 
        new_data = {}
92
 
        new_data.update(*args, **kwds)
93
 
 
94
 
        changed_keys = []
95
 
        for key in new_data.keys():
96
 
            if new_data.get(key) != dict.get(self, key):
97
 
                changed_keys.append(key)
98
 
        dict.update(self, new_data)
99
 
        if changed_keys:
100
 
            self.emit('changed', tuple(changed_keys))
101
 
 
102
 
    def __setitem__(self, key, value):
103
 
        ''' interface for dictionary
104
 
        
105
 
        send changed signal when appropriate '''
106
 
        if value != dict.get(self, key):
107
 
            dict.__setitem__(self, key, value)
108
 
            self.emit('changed', (key,))
109
 
 
110
 
preferences = User_dict()
 
19
 
 
20
preferences = {
 
21
    'cb_box0'                                   : '#A020F0',
 
22
    'cb_box1'                                   : '#FF0000',
 
23
    'cb_box2'                                   : '#0000FF',
 
24
    'cb_box3'                                   : '#00FF00',
 
25
    'cb_box4'                                   : '#4D4D4D',
 
26
    
 
27
    'cbo_editor'                                : 0,
 
28
    'cbo_compatibility'                 : 2,
 
29
 
 
30
    'chk_convert'                               : True,
 
31
    'chk_create_copy'                   : True,
 
32
    'chk_crop_create_copy'              : True,
 
33
    'chk_display_path'                  : True,
 
34
    'chk_open_cat'                              : False,
 
35
    
 
36
    'rdo_viewer_default'                : True,
 
37
    'rdo_viewer_custom'                 : False,
 
38
    
 
39
    'txt_other_tool'                    : '',
 
40
    'txt_tool_args'                             : '',
 
41
    'txt_viewer_custom'                 : '',
 
42
    }
111
43