public Hashtable GetAnyFanart(Utils.Category category)
        {
            var filenames = GetAnyHashtable(category);
            try
            {
                if (filenames != null)
                    return filenames;
                filenames = new Hashtable();
                var SQLCategory = string.Empty;

                if (category == Utils.Category.MusicFanartScraped)
                {
                    if (Utils.UseAlbum && !Utils.DisableMPTumbsForRandom)
                    {
                       SQLCategory = (SQLCategory.Length > 0 ? SQLCategory + "," : string.Empty) + "'" + ((object) Utils.Category.MusicAlbumThumbScraped).ToString() + "'";
                    }
                    if (Utils.UseArtist && !Utils.DisableMPTumbsForRandom)
                    {
                       SQLCategory = (SQLCategory.Length > 0 ? SQLCategory + "," : string.Empty) + "'" + ((object) Utils.Category.MusicArtistThumbScraped).ToString() + "'";
                    }
                    if (Utils.UseFanart)
                    {
                       SQLCategory = (SQLCategory.Length > 0 ? SQLCategory + "," : string.Empty) + "'" + ((object) Utils.Category.MusicFanartScraped).ToString() + "',"+
                                                                                                   "'" + ((object) Utils.Category.MusicFanartManual).ToString() + "'";
                    }
                }
                else
                    SQLCategory = "'" + ((object) category).ToString() + "'";

                if (!string.IsNullOrEmpty(SQLCategory))
                {
                    var SQL = "SELECT Id, Key1, FullPath, SourcePath, Category, Provider "+
                               "FROM Image "+
                               "WHERE Enabled = 'True' AND "+
                                     "DummyItem = 'False' AND "+
                                     "AvailableRandom = 'True' AND "+
                                     "Category IN (" + SQLCategory + ");";
                    SQLiteResultSet sqLiteResultSet;
                    lock (lockObject)
                        sqLiteResultSet = dbClient.Execute(SQL);
                    var index = 0;
                    while (index < sqLiteResultSet.Rows.Count)
                    {
                        var fanartImage = new FanartImage(sqLiteResultSet.GetField(index, 0),
                                                          sqLiteResultSet.GetField(index, 1),
                                                          sqLiteResultSet.GetField(index, 2),
                                                          sqLiteResultSet.GetField(index, 3),
                                                          sqLiteResultSet.GetField(index, 4),
                                                          sqLiteResultSet.GetField(index, 5));
                        filenames.Add(index, fanartImage);
                        checked { ++index; }
                    }
                    Utils.Shuffle(ref filenames);
                    AddToAnyHashtable(category, filenames);
                }
                return filenames;
            }
            catch (Exception ex)
            {
                logger.Error("getAnyFanart: " + ex);
                return filenames;
            }
        }
        public Hashtable GetFanart(string artist, string album, Utils.Category category, bool highDef)
        {
            var filenames = new Hashtable();
            var flag = false;
            // logger.Debug("*** Key1: "+artist+" Key2: "+album);
            // logger.Debug("*** For DB Query ["+Utils.HandleMultipleArtistNamesForDBQuery(Utils.PatchSql(artist))+"]");
            try
            {
                string SQL;
                SQLiteResultSet sqLiteResultSet;

                SQL = "SELECT Id, Key1, FullPath, SourcePath, Category, Provider "+
                      "FROM Image "+
                      "WHERE Key1 IN (" + Utils.HandleMultipleArtistNamesForDBQuery(Utils.PatchSql(artist)) + ") AND "+
                            (album == null ? string.Empty : "Key2 = '"+Utils.PatchSql(album)+"' AND ")+
                            "Enabled = 'True' AND "+
                            "DummyItem = 'False'"+
                            (category == Utils.Category.MusicFanartScraped ? " AND Category in (" + Utils.GetMusicFanartCategoriesInStatement(highDef) + ");" : ";") ;

                lock (lockObject)
                    sqLiteResultSet = dbClient.Execute(SQL);

                if (!string.IsNullOrEmpty(album) && (sqLiteResultSet.Rows.Count <= 0))
                {
                  flag = true ;
                  SQL = "SELECT Id, Key1, FullPath, SourcePath, Category, Provider "+
                        "FROM Image "+
                        "WHERE Key1 IN (" + Utils.HandleMultipleArtistNamesForDBQuery(Utils.PatchSql(artist)) + ") AND "+
                              "Enabled = 'True' AND "+
                              "DummyItem = 'False'"+
                              (category == Utils.Category.MusicFanartScraped ? " AND Category in (" + Utils.GetMusicFanartCategoriesInStatement(highDef) + ");" : ";") ;

                  lock (lockObject)
                      sqLiteResultSet = dbClient.Execute(SQL);
                }
                // logger.Debug("*** "+SQL) ;

                var index = 0;
                while (index < sqLiteResultSet.Rows.Count)
                {
                    var fanartImage = new FanartImage(sqLiteResultSet.GetField(index, 0).Trim(),
                                                      sqLiteResultSet.GetField(index, 1).Trim(),
                                                      sqLiteResultSet.GetField(index, 2).Trim(),
                                                      sqLiteResultSet.GetField(index, 3).Trim(),
                                                      sqLiteResultSet.GetField(index, 4).Trim(),
                                                      sqLiteResultSet.GetField(index, 5).Trim());
                    filenames.Add(index, fanartImage);
                    // logger.Debug("*** Fanart: "+sqLiteResultSet.GetField(index, 2));
                    checked { ++index; }
                }

                Utils.Shuffle(ref filenames);

                // TODO: ... Then create procedure for Delete Old Music Fanart files from Disk (Artist not in MP DB and Last_Access < NOW-100)
                if (sqLiteResultSet.Rows.Count > 0)
                {
                  try
                  {
                    if (category == Utils.Category.MusicFanartScraped)
                      SQL = "UPDATE Image SET Last_Access = '"+DateTime.Today.ToString("yyyyMMdd", CultureInfo.CurrentCulture)+"' "+
                              "WHERE Key1 IN (" + Utils.HandleMultipleArtistNamesForDBQuery(Utils.PatchSql(artist)) + ") AND "+
                                    (album == null || flag ? string.Empty : "Key2 = '"+Utils.PatchSql(album)+"' AND ")+
                                    "Enabled = 'True' AND "+
                                    "DummyItem = 'False' AND "+
                                    "Category in (" + Utils.GetMusicFanartCategoriesInStatement(highDef) + ");";
                    else
                      SQL = "UPDATE Image SET Last_Access = '"+DateTime.Today.ToString("yyyyMMdd", CultureInfo.CurrentCulture)+"' "+
                              "WHERE Key1 IN ('" + Utils.PatchSql(artist) + "') AND "+
                                    (album == null || flag ? string.Empty : "Key2 = '"+Utils.PatchSql(album)+"' AND ")+
                                    "DummyItem = 'False' AND "+
                                    "Enabled = 'True';";
                    lock (lockObject)
                        dbClient.Execute(SQL);
                  }
                  catch (Exception ex)
                  {
                    logger.Debug("getFanart: Last Access update:");
                    logger.Debug(ex);
                  }
                }
            }
            catch (Exception ex)
            {
                logger.Error("getFanart: " + ex);
            }
            return filenames;
        }
        private void AddScapedFanartToAnyHash()
        {
            if (HtAnyFanart == null)
                HtAnyFanart = new Hashtable();

            var hashtable = !HtAnyFanart.ContainsKey(Utils.Category.MusicFanartScraped)
                            ? new Hashtable()
                            : (Hashtable) HtAnyFanart[Utils.Category.MusicFanartScraped];

            if (hashtable != null && hashtable.Count >= 1)
                return;

            var filenames = new Hashtable();
            var str = "SELECT Id, Key1, FullPath, SourcePath, Category, Provider "+
                       "FROM Image "+
                       "WHERE Enabled = 'True' AND "+
                             "DummyItem = 'False' AND "+
                             "Category = '" + ((object) Utils.Category.MusicFanartScraped).ToString() + "';";
            SQLiteResultSet sqLiteResultSet;
            lock (lockObject)
                sqLiteResultSet = dbClient.Execute(str);

            var num = 0;
            while (num < sqLiteResultSet.Rows.Count)
            {
                var fanartImage = new FanartImage(sqLiteResultSet.GetField(num, 0),
                                                  sqLiteResultSet.GetField(num, 1),
                                                  sqLiteResultSet.GetField(num, 2),
                                                  sqLiteResultSet.GetField(num, 3),
                                                  sqLiteResultSet.GetField(num, 4),
                                                  sqLiteResultSet.GetField(num, 5));
                filenames.Add(num, fanartImage);
                checked { ++num; }
            }
            Utils.Shuffle(ref filenames);

            HtAnyFanart.Remove(Utils.Category.MusicFanartScraped);
            HtAnyFanart.Add(Utils.Category.MusicFanartScraped, filenames);
        }
        public Hashtable GetAnyFanartFromDB(Utils.Category category, int iLimit = 0, int iOffset = 0)
        {
            var filenames = new Hashtable();
              try
              {
            var SQLCategory = string.Empty;
            if (category == Utils.Category.MusicFanartScraped)
            {
              if (Utils.UseAlbum && !Utils.DisableMPTumbsForRandom)
              {
                SQLCategory = (SQLCategory.Length > 0 ? SQLCategory + "," : string.Empty) + "'" + ((object) Utils.Category.MusicAlbumThumbScraped).ToString() + "'";
              }
              if (Utils.UseArtist && !Utils.DisableMPTumbsForRandom)
              {
                SQLCategory = (SQLCategory.Length > 0 ? SQLCategory + "," : string.Empty) + "'" + ((object) Utils.Category.MusicArtistThumbScraped).ToString() + "'";
              }
              if (Utils.UseFanart)
              {
                SQLCategory = (SQLCategory.Length > 0 ? SQLCategory + "," : string.Empty) + "'" + ((object) Utils.Category.MusicFanartScraped).ToString() + "',"+
                                                                                            "'" + ((object) Utils.Category.MusicFanartManual).ToString() + "'";
              }
            }
            else
            {
              SQLCategory = "'" + ((object) category).ToString() + "'";
            }

            if (!string.IsNullOrEmpty(SQLCategory))
            {
              var SQL = "SELECT Id, Key1, FullPath, SourcePath, Category, Provider "+
                         "FROM Image "+
                         "WHERE Enabled = 'True' AND "+
                               "DummyItem = 'False' AND "+
                               "AvailableRandom = 'True' AND "+
                               // 3.5 " AND ((iWidth > " + Utils.MinWResolution + " AND iHeight > " + Utils.MinHResolution + (Utils.UseAspectRatio ? " AND Ratio >= 1.3 " : "") + ") OR (iWidth = null AND iHeight = null))"
                               "Category IN (" + SQLCategory + ") "+
                         (iLimit > 0 ? "LIMIT " + iLimit.ToString() + " OFFSET " + iOffset.ToString() : "") +
                         ";";
              SQLiteResultSet sqLiteResultSet;
              lock (lockObject)
                  sqLiteResultSet = dbClient.Execute(SQL);
              var index = 0;
              while (index < sqLiteResultSet.Rows.Count)
              {
                var fanartImage = new FanartImage(sqLiteResultSet.GetField(index, 0),
                                                  sqLiteResultSet.GetField(index, 1),
                                                  sqLiteResultSet.GetField(index, 2),
                                                  sqLiteResultSet.GetField(index, 3),
                                                  sqLiteResultSet.GetField(index, 4),
                                                  sqLiteResultSet.GetField(index, 5));
                filenames.Add(index, fanartImage);
                checked { ++index; }
              }
            }
              }
              catch (Exception ex)
              {
            logger.Error("GetAnyFanartFromDB: " + ex);
              }
              return filenames;
        }