예제 #1
0
 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;
     }
 }
예제 #2
0
 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;
     }
 }