protected internal async Task UpdateSharesLists_NoLock(bool create) { lock (_syncObj) { if (_updatingProperties) { return; } _updatingProperties = true; if (create) { _localSharesList = new ItemsList(); } if (create) { _serverSharesList = new ItemsList(); } } try { List <Share> localShareDescriptors = new List <Share>(LocalShares.GetShares()); List <Share> serverShareDescriptors = IsHomeServerConnected ? new List <Share>(await ServerShares.GetSharesAsync()) : new List <Share>(0); int numShares = localShareDescriptors.Count + serverShareDescriptors.Count; UpdateSharesList_NoLock(_localSharesList, localShareDescriptors, ShareOrigin.Local, numShares == 1); try { UpdateSharesList_NoLock(_serverSharesList, serverShareDescriptors, ShareOrigin.Server, numShares == 1); } catch (NotConnectedException) { _serverSharesList.Clear(); _serverSharesList.FireChange(); numShares = localShareDescriptors.Count; } ShowLocalShares = !IsLocalHomeServer || _localSharesList.Count > 0; IsSharesSelected = numShares == 1; bool anySharesAvailable; lock (_syncObj) anySharesAvailable = _serverSharesList.Count > 0 || _localSharesList.Count > 0; AnyShareAvailable = anySharesAvailable; } catch (Exception ex) { ServiceRegistration.Get <ILogger>().Warn("Error updating shares list", ex); } finally { lock (_syncObj) _updatingProperties = false; } }
protected internal void UpdateSharesLists_NoLock(bool create) { lock (_syncObj) { if (_updatingProperties) { return; } _updatingProperties = true; if (create) { _localSharesList = new ItemsList(); } if (create) { _serverSharesList = new ItemsList(); } } try { List <Share> localShareDescriptors = new List <Share>(LocalShares.GetShares()); List <Share> serverShareDescriptors = IsHomeServerConnected ? new List <Share>(ServerShares.GetShares()) : new List <Share>(0); int numShares = localShareDescriptors.Count + serverShareDescriptors.Count; UpdateSharesList_NoLock(_localSharesList, localShareDescriptors, ShareOrigin.Local, numShares == 1); if (IsHomeServerConnected) { // If our home server is not connected, don't try to update its list of shares try { UpdateSharesList_NoLock(_serverSharesList, serverShareDescriptors, ShareOrigin.Server, numShares == 1); } catch (NotConnectedException) { _serverSharesList.Clear(); _serverSharesList.FireChange(); numShares = localShareDescriptors.Count; } } ShowLocalShares = !IsLocalHomeServer || _localSharesList.Count > 0; IsSharesSelected = numShares == 1; bool anySharesAvailable; lock (_syncObj) anySharesAvailable = _serverSharesList.Count > 0 || _localSharesList.Count > 0; AnyShareAvailable = anySharesAvailable; } finally { lock (_syncObj) _updatingProperties = false; } }