~chris.foo/bytestag/trunk

« back to all changes in this revision

Viewing changes to src/py3/bytestagui/controllers/shareddirs.py

  • Committer: Christopher Foo
  • Date: 2012-09-09 15:38:30 UTC
  • mfrom: (24.1.28 trunk)
  • Revision ID: chris.foo@gmail.com-20120909153830-575fqdbsju8dmg0k
Merges from trunk.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
'''Shared files screen'''
 
1
'''Shared directories'''
2
2
# This file is part of Bytestag.
3
3
# Copyright © 2012 Christopher Foo <chris.foo@gmail.com>.
4
4
# Licensed under GNU GPLv3. See COPYING.txt for details.
5
 
from bytestagui.abstract.controllers.base import BaseController
6
 
 
7
 
 
8
 
class SharedFilesController(BaseController):
 
5
from bytestagui.controllers.base import BaseController
 
6
from bytestagui.controllers.config import ConfigController
 
7
from bytestagui.controllers.dht import DHTClientController
 
8
 
 
9
 
 
10
class SharedDirsController(BaseController):
 
11
    '''Provides access to ``shared_files`` config section'''
 
12
 
9
13
    def __init__(self, application):
10
14
        BaseController.__init__(self, application)
11
 
        self._shared_directories = self.application.singletons[
12
 
            'DHTClientController'].client.shared_files_table.shared_directories
13
 
 
14
 
        self._shared_directories.extend(self._get_shared_dirs_from_config())
 
15
 
 
16
        self._client_shared_directories = self.application.singletons[
 
17
            DHTClientController].client.shared_files_table.shared_directories
 
18
        self._shared_directories = set()
 
19
 
 
20
        config = self.application.singletons[ConfigController]
 
21
        config.observer.register(self._config_changed_cb)
 
22
 
 
23
        for d in self._get_shared_dirs_from_config():
 
24
            self._shared_directories.add(d)
 
25
 
 
26
        self._populate_client_table()
 
27
 
 
28
    def _config_changed_cb(self, section, option, value):
 
29
        if section == 'sharing' and option == 'default_share_dir':
 
30
            self._populate_client_table()
15
31
 
16
32
    def _get_shared_dirs_from_config(self):
17
33
        config_parser = self.application.singletons['ConfigController'
30
46
 
31
47
        config_parser['shared_files'] = {}
32
48
 
33
 
        for i in range(len(self._shared_directories)):
34
 
            directory = self._shared_directories[i]
35
 
 
36
 
            config_parser['shared_files']['path{}'.format(i)] = directory
 
49
        i = 0
 
50
 
 
51
        for directory in self._shared_directories:
 
52
            config_parser['shared_files']['path{}'.format(i + 1)] = directory
 
53
 
 
54
            i += 1
37
55
 
38
56
        self.application.singletons['ConfigController'].save()
39
57
 
 
58
    @property
 
59
    def _default_share_dir(self):
 
60
        config_parser = self.application.singletons['ConfigController'
 
61
            ].config_parser
 
62
 
 
63
        return config_parser['sharing']['default_share_dir']
 
64
 
 
65
    def add_directory(self, *directory):
 
66
        for d in directory:
 
67
            self._shared_directories.add(d)
 
68
 
 
69
        self._save_shared_files_config()
 
70
        self._populate_client_table()
 
71
 
 
72
    def remove_directory(self, *directory):
 
73
        for d in directory:
 
74
            self._shared_directories.remove(d)
 
75
 
 
76
        self._save_shared_files_config()
 
77
        self._populate_client_table()
 
78
 
 
79
    def _populate_client_table(self):
 
80
        del self._client_shared_directories[:]
 
81
 
 
82
        self._client_shared_directories.append(self._default_share_dir)
 
83
        self._client_shared_directories.extend(tuple(self._shared_directories))
 
84
 
 
85
    @property
 
86
    def shared_directories(self):
 
87
        return self._shared_directories