[X2Go-Commits] python-x2go.git - release/0.4.0.x (branch) updated: 0.2.0.10-83-g2e69094
X2Go dev team
git-admin at x2go.org
Tue Jan 7 16:18:22 CET 2014
The branch, release/0.4.0.x has been updated
via 2e69094ec995acd4f217f0af6e9f2b24e673f555 (commit)
from 8d835dcdec07d7f620a25cbcd4aafd88a1a044c7 (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
-----------------------------------------------------------------------
Summary of changes:
x2go/session.py | 123 ++++++++++++++++++++++++++++---------------------------
1 file changed, 62 insertions(+), 61 deletions(-)
The diff of changes is:
diff --git a/x2go/session.py b/x2go/session.py
index 31d7aea..5027a64 100644
--- a/x2go/session.py
+++ b/x2go/session.py
@@ -568,6 +568,10 @@ class X2goSession(object):
self.logger('Using session %s as master session for profile %s.' % (self.get_session_name(), self.get_profile_name()), loglevel=log.loglevel_NOTICE)
self.master_session = True
+ # retrieve an up-to-date list of sharable local folders from the client instance
+ if self.client_instance:
+ self.share_local_folders = self.client_instance.get_profile_config(self.profile_name, 'export').keys()
+
i = 0
while i < max_wait:
i += 1
@@ -2116,10 +2120,6 @@ class X2goSession(object):
@raise X2goSessionException: if the session could not be suspended
"""
- _store_shared_folders = {}
- for folder in self.shared_folders:
- _store_shared_folders.update({ folder: True })
-
self._lock.acquire()
try:
_retval = self._suspend()
@@ -2452,14 +2452,11 @@ class X2goSession(object):
if self.has_terminal_session():
if self.is_folder_sharing_available() and self.is_master_session():
- # append local_path to list of shared folders before mounting
- self.shared_folders.append(local_path)
if self.terminal_session.share_local_folder(local_path=local_path):
+ self.shared_folders.append(local_path)
if update_exported_folders:
self._update_restore_exported_folders()
return True
- # if we failed remove the local_path element again...
- self.shared_folders.remove(local_path)
return False
else:
raise x2go_exceptions.X2goSessionException('this X2goSession object does not have any associated terminal')
@@ -2477,23 +2474,23 @@ class X2goSession(object):
@rtype: C{bool}
"""
- _retval = False
+ retval = False
if self.is_running() and not self.faulty and self._SUPPORTED_FOLDERSHARING and self.share_local_folders and self.allow_share_local_folders and self.has_terminal_session():
if self.is_master_session():
if self.is_folder_sharing_available():
- if self.control_session.get_transport().reverse_tunnels[self.terminal_session.get_session_name()]['sshfs'][1] is not None:
- _retval = True
- for _folder in self.share_local_folders:
- try:
- _retval = self.share_local_folder(_folder, update_exported_folders=False) and _retval
- except x2go_exceptions.X2goUserException, e:
- self.logger('%s' % str(e), loglevel=log.loglevel_WARN)
- if update_exported_folders:
- self._update_restore_exported_folders()
+ retval = True
+ for _folder in self.share_local_folders:
+ try:
+ retval = self.share_local_folder(_folder, update_exported_folders=False) and retval
+ except x2go_exceptions.X2goUserException, e:
+ retval = False
+ self.logger('%s' % str(e), loglevel=log.loglevel_WARN)
+ if update_exported_folders:
+ self._update_restore_exported_folders()
else:
self.HOOK_foldersharing_not_available()
- return _retval
+ return retval
__share_all_local_folders = share_all_local_folders
def unshare_all_local_folders(self, force_all=False, update_exported_folders=True):
@@ -2516,15 +2513,17 @@ class X2goSession(object):
if self.has_terminal_session():
if self.is_folder_sharing_available() and self.is_master_session():
if force_all:
- self.shared_folders = []
retval = self.terminal_session.unshare_all_local_folders()
+ if retval:
+ self.shared_folders = []
return retval
else:
- _shared_folders = copy.deepcopy(self.shared_folders)
- self.shared_folders = []
- retval = 0
- for _shared_folder in _shared_folders:
- retval = retval | self.terminal_session.unshare_local_folder(_shared_folder)
+ retval = True
+ for _shared_folder in self.shared_folders:
+ if self.terminal_session.unshare_local_folder(_shared_folder):
+ self.shared_folders.remove(_shared_folder)
+ else:
+ retval = False
if update_exported_folders:
self._update_restore_exported_folders()
return retval
@@ -2551,20 +2550,18 @@ class X2goSession(object):
@raise X2goSessionException: if this L{X2goSession} does not have an associated terminal session
"""
+ retval = False
if self.has_terminal_session():
if self.is_folder_sharing_available() and self.is_master_session() and local_path in self.shared_folders:
- # update shared_folders before(!) unmounting...
- self.shared_folders.remove(local_path)
- _retval = self.terminal_session.unshare_local_folder(local_path=local_path)
- # unmounting failed? Re-add local_patch to shared_folders for now...
- if not _retval:
- self.shared_folders.append(local_path)
- if _retval and update_exported_folders:
+ if self.terminal_session.unshare_local_folder(local_path=local_path):
+ self.shared_folders.remove(local_path)
+ retval = True
+ if retval and update_exported_folders:
self._update_restore_exported_folders()
else:
raise x2go_exceptions.X2goSessionException('this X2goSession object does not have any associated terminal')
- return _retval
+ return retval
__unshare_local_folder = unshare_local_folder
def get_shared_folders(self, check_list_mounts=False, mounts=None):
@@ -2586,39 +2583,43 @@ class X2goSession(object):
unshared_folders = []
if mounts is None:
mounts = self.list_mounts()
+ _defacto_mounts = [ unicode(m.split('|')[1].split('/')[-1]) for m in mounts ]
+ _expected_mounts = {}
for shared_folder in self.shared_folders:
- _found = False
-
- for mount in mounts:
- if _found: continue
- mount = mount.split('|')[1]
- if _X2GOCLIENT_OS == 'Windows':
-
- _driveletter, _path = os.path.splitdrive(shared_folder)
- _mount_point = '_windrive_%s%s' % (_driveletter[0], _path.replace('\\', '_'))
- _mount_point = _mount_point.replace(' ', '_')
-
- if mount.lower().endswith(_mount_point.lower()):
- _found = True
-
- else:
- _mount_point = shared_folder.replace('/', '_')
- _mount_point = _mount_point.replace(' ', '_')
- if mount.endswith(_mount_point):
- _found = True
+ if _X2GOCLIENT_OS == 'Windows':
- if not _found:
- unshared_folders.append(shared_folder)
+ _driveletter, _path = os.path.splitdrive(shared_folder)
+ _mount_point = '_windrive_%s%s' % (_driveletter[0], _path.replace('\\', '_'))
+ _mount_point = _mount_point.replace(' ', '_')
- for unshared_folder in unshared_folders:
- try:
- self.shared_folders.remove(unshared_folder)
- self._update_restore_exported_folders()
- self.logger('Detected server-side unsharing of client-side folder for profile %s: %s:' % (self.get_profile_name(), shared_folder), loglevel=log.loglevel_INFO)
- except IndexError:
- pass
+ else:
+ _mount_point = shared_folder.replace('/', '_')
+ _mount_point = _mount_point.replace(' ', '_')
+
+ _expected_mounts[unicode(_mount_point)] = shared_folder
+
+ ### such a feature as below would be nice but the mapping between a mountpoint and the related
+ ### local folder path is not bijective
+ #
+ # add any new found mount reported by the server
+ #for m in _defacto_mounts:
+ # if m not in _expected_mounts.keys():
+ # self.shared_folders.append(_expected_mounts[m])
+
+ unshared_folders = False
+ for m in _expected_mounts.keys():
+ if m not in _defacto_mounts:
+ try:
+ self.shared_folders.remove(_expected_mounts[m])
+ unshared_folders = True
+ self.logger('Detected server-side unsharing of client-side folder for profile %s: %s:' % (self.get_profile_name(), _expected_mounts[m]), loglevel=log.loglevel_INFO)
+ except IndexError:
+ pass
+
+ if unshared_folders:
+ self._update_restore_exported_folders()
return [ unicode(s) for s in self.shared_folders ]
__get_shared_folders = get_shared_folders
hooks/post-receive
--
python-x2go.git (Python X2Go Client API)
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "python-x2go.git" (Python X2Go Client API).
More information about the x2go-commits
mailing list