Комментарии (0)
Нет комментариев. Ваш будет первым!
{ cache_prefix = QStandardPaths::writableLocation(QStandardPaths::AppDataLocation)+"/cache"; //ОБРАТИТЕ ТУТ ВНИМАНИЕ - Используем класс QStandardPaths - не надо писать прямые пути! m_cacheSize = 200*1024*2024; //Размер кеша в байтах. Тут 200 по моему m_liveTime = 7*24*60*60; //Время жизни кеша в днях. Тут их 7 ext << "jpg" << "jpeg" << "png"; //определяем что будем кешировать, мне нужны были только картинки this->setAllowedExt(ext); //Тут стандартные проверки на первый запуск. if(!cache_dir.exists()) { cache_dir.mkpath(cache_prefix); } else { this->cleanCache(); //Об этом мы поговорим чуть попозжее. } }
{ //Определяем разшерение файла - опять таки сделано кривовато. Но для понимания работы сойдёт. //if file extension not allow return url if(!m_allowedExt.contains(fileExt)) { emit ready(url); } //имя кешированного файла сделаем на основе md5 его урла //всё склеиваем вместе m_cacheFileFullPath = cache_prefix+"/"+fileName+"."+fileExt; //Вот тут первая часть магии: Если файл такой уже есть, то мы подаём сигнал мол всё ок - заберай. if(cacheFile.exists()) { emit ready(m_cacheFileFullPath); } //А если его нет, то скачиваем, причём посмотите, качаем красиво! else { //При готовности отправляемся в слот сохранения //В процессе говорим сколько процентов осталось QObject::connect(reply,SIGNAL(downloadProgress(qint64, qint64)),this, SLOT(updateDownloadProgress(qint64, qint64))); } }
{ { cacheFile.write(reply->readAll()); cacheFile.flush(); cacheFile.close(); emit ready(cacheFile.fileName()); } //тут бы добавить про else и обработчик ошибок, но ты же умный программист и справишься сам? ;) }
void CacheAdapter::updateDownloadProgress(qint64 read, qint64 total) { emit readyProgress(read*100/total); }
qmlRegisterType<CacheAdapter>("cacheArapter",1,0,"CacheAdapter");
Component.onCompleted: { cacheAdaprer.getFile(image_url); } CacheAdapter{ id: cacheAdaprer }
target: cacheAdaprer onReady:{ mainImage.source = "file://"+url loadingBar.visible = false } onReadyProgress:{ loadingBar.value = progress; } }
void CacheAdapter::cleanCache() { // Если нам пофиг на пользователей то сразу возвращаемся if(m_cacheSize == 0 || m_liveTime == 0) { return; } // получаем список файлов в нашей директории. Мы срём без подкатологов так что тут просто int filesSize = 0; // Пробегаемся по всем файлам и удаляем те которые уже протухли //Check livetime int liveTime = time-fileInfo.created().toMSecsSinceEpoch(); if(liveTime > m_liveTime) { file.remove(cache_prefix+"/"+file.fileName()); } else { filesSize = filesSize+fileInfo.size(); } } //Проверяем размер директории if(filesSize > m_cacheSize) { //А как ты напишешь функцию проверки кеша на размер? Пиши в комментариях :))) } }
Нет комментариев. Ваш будет первым!
Ну и где доказательства про 18 запусков у маска в 2018 году? Или ты предпочтешь и тут...