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
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
10
class SharedDirsController(BaseController):
11
'''Provides access to ``shared_files`` config section'''
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
14
self._shared_directories.extend(self._get_shared_dirs_from_config())
16
self._client_shared_directories = self.application.singletons[
17
DHTClientController].client.shared_files_table.shared_directories
18
self._shared_directories = set()
20
config = self.application.singletons[ConfigController]
21
config.observer.register(self._config_changed_cb)
23
for d in self._get_shared_dirs_from_config():
24
self._shared_directories.add(d)
26
self._populate_client_table()
28
def _config_changed_cb(self, section, option, value):
29
if section == 'sharing' and option == 'default_share_dir':
30
self._populate_client_table()
16
32
def _get_shared_dirs_from_config(self):
17
33
config_parser = self.application.singletons['ConfigController'
31
47
config_parser['shared_files'] = {}
33
for i in range(len(self._shared_directories)):
34
directory = self._shared_directories[i]
36
config_parser['shared_files']['path{}'.format(i)] = directory
51
for directory in self._shared_directories:
52
config_parser['shared_files']['path{}'.format(i + 1)] = directory
38
56
self.application.singletons['ConfigController'].save()
59
def _default_share_dir(self):
60
config_parser = self.application.singletons['ConfigController'
63
return config_parser['sharing']['default_share_dir']
65
def add_directory(self, *directory):
67
self._shared_directories.add(d)
69
self._save_shared_files_config()
70
self._populate_client_table()
72
def remove_directory(self, *directory):
74
self._shared_directories.remove(d)
76
self._save_shared_files_config()
77
self._populate_client_table()
79
def _populate_client_table(self):
80
del self._client_shared_directories[:]
82
self._client_shared_directories.append(self._default_share_dir)
83
self._client_shared_directories.extend(tuple(self._shared_directories))
86
def shared_directories(self):
87
return self._shared_directories