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;
 }