private void LoadAmpache()
 {
     if (!IsConnected)
     {
         try {
             IsLoading = true;
             var tmp = new Authenticate(AmpacheSource.AmpacheRootAddress.Get(), AmpacheSource.UserName.Get(), AmpacheSource.UserPassword.Get());
             factory     = new AmpacheSelectionFactory(tmp);
             pingTimer   = new System.Threading.Timer((o) => tmp.Ping(), null, TimeSpan.FromMinutes(5), TimeSpan.FromMinutes(5));
             Artists     = factory.GetInstanceSelectorFor <AmpacheArtist>().SelectAll().ToList();
             Albums      = factory.GetInstanceSelectorFor <AmpacheAlbum>().SelectAll().ToList();
             Playlists   = factory.GetInstanceSelectorFor <AmpachePlaylist>().SelectAll().ToList();
             IsConnected = true;
             // hydrate albums
             var artists = Artists.ToDictionary(k => k.Id, v => v);
             foreach (var alb in Albums)
             {
                 if (artists.ContainsKey(alb.ArtistId))
                 {
                     alb.Hydrate(artists[alb.ArtistId]);
                 }
             }
         }
         catch (Exception e) {
             Hyena.Log.ErrorFormat("{0}: message {1}\n{2}", e.GetType().Name, e.Message, e.StackTrace);
             IsConnected = false;
         }
         IsLoading = false;
     }
 }
 public void Dispose()
 {
     if (pingTimer != null)
     {
         pingTimer.Change(Timeout.Infinite, Timeout.Infinite);
         pingTimer.Dispose();
         pingTimer = null;
     }
     factory     = null;
     IsConnected = false;
 }