void MainWindow::loadAvailableThemes(){ ui->combo_themes->clear(); QDir themedir("/usr/local/share/PCDM/themes"); QStringList dirs = themedir.entryList(QDir::Dirs | QDir::NoDotAndDotDot, QDir::Name); QStringList themefiles; for(int i=0; i<dirs.length(); i++){ themedir.cd(dirs[i]); QStringList files = themedir.entryList(QStringList() << "*.theme", QDir::Files, QDir::Name); for(int j=0; j<files.length(); j++){ themefiles << themedir.absoluteFilePath(files[j]); } themedir.cdUp(); } //Now add the theme files to the combo box for(int i=0; i<themefiles.length(); i++){ ui->combo_themes->addItem( themefiles[i].section("/",-1).section(".theme",0,-2), themefiles[i]); } }
MythImage *MythUIHelper::CacheImage(const QString &url, MythImage *im, bool nodisk) { if (!im) return NULL; if (!nodisk) { QString dstfile = GetMythUI()->GetThemeCacheDir() + '/' + url; LOG(VB_GUI | VB_FILE, LOG_INFO, LOC + QString("Saved to Cache (%1)").arg(dstfile)); // This would probably be better off somewhere else before any // Load() calls at all. QDir themedir(GetMythUI()->GetThemeCacheDir()); if (!themedir.exists()) themedir.mkdir(GetMythUI()->GetThemeCacheDir()); // Save to disk cache im->save(dstfile, "PNG"); } // delete the oldest cached images until we fall below threshold. QMutexLocker locker(d->m_cacheLock); while (d->m_cacheSize.fetchAndAddOrdered(0) + im->byteCount() >= d->m_maxCacheSize.fetchAndAddOrdered(0) && d->imageCache.size()) { QMap<QString, MythImage *>::iterator it = d->imageCache.begin(); uint oldestTime = MythDate::current().toTime_t(); QString oldestKey = it.key(); int count = 0; for (; it != d->imageCache.end(); ++it) { if (d->CacheTrack[it.key()] < oldestTime) { if ((2 == it.value()->IncrRef()) && (it.value() != im)) { oldestTime = d->CacheTrack[it.key()]; oldestKey = it.key(); count++; } it.value()->DecrRef(); } } LOG(VB_GUI | VB_FILE, LOG_INFO, LOC + QString("%1 images are eligible for expiry").arg(count)); if (count > 0) { LOG(VB_GUI | VB_FILE, LOG_INFO, LOC + QString("Cache too big (%1), removing :%2:") .arg(d->m_cacheSize.fetchAndAddOrdered(0) + im->byteCount()) .arg(oldestKey)); d->imageCache[oldestKey]->SetIsInCache(false); d->imageCache[oldestKey]->DecrRef(); d->imageCache.remove(oldestKey); d->CacheTrack.remove(oldestKey); } else { break; } } QMap<QString, MythImage *>::iterator it = d->imageCache.find(url); if (it == d->imageCache.end()) { im->IncrRef(); d->imageCache[url] = im; d->CacheTrack[url] = MythDate::current().toTime_t(); im->SetIsInCache(true); LOG(VB_GUI | VB_FILE, LOG_INFO, LOC + QString("NOT IN RAM CACHE, Adding, and adding to size :%1: :%2:") .arg(url).arg(im->byteCount())); } LOG(VB_GUI | VB_FILE, LOG_INFO, LOC + QString("MythUIHelper::CacheImage : Cache Count = :%1: size :%2:") .arg(d->imageCache.count()) .arg(d->m_cacheSize.fetchAndAddRelaxed(0))); return d->imageCache[url]; }