|
|
|
@ -52,8 +52,9 @@ void AvatarManager::initialize() { |
|
|
|
const QString file = m_db->getUiState("avatar_default_file"); |
|
|
|
const QString file = m_db->getUiState("avatar_default_file"); |
|
|
|
if (mf_avatar_file_valid(file.toLatin1().constData())) m_defaultHash = file.left(64); |
|
|
|
if (mf_avatar_file_valid(file.toLatin1().constData())) m_defaultHash = file.left(64); |
|
|
|
const QString directory = m_directory; |
|
|
|
const QString directory = m_directory; |
|
|
|
m_pool.start(QRunnable::create([this, directory] { |
|
|
|
const QStringList pinned = m_defaultHash.isEmpty() ? QStringList() : QStringList{m_defaultHash}; |
|
|
|
bool ready = AvatarCache::initialize(directory); |
|
|
|
m_pool.start(QRunnable::create([this, directory, pinned] { |
|
|
|
|
|
|
|
bool ready = AvatarCache::initialize(directory, pinned); |
|
|
|
QMetaObject::invokeMethod(this, [this, ready] { |
|
|
|
QMetaObject::invokeMethod(this, [this, ready] { |
|
|
|
m_ready = ready; |
|
|
|
m_ready = ready; |
|
|
|
if (!ready) { emit statusChanged(text("Cannot open avatar cache")); return; } |
|
|
|
if (!ready) { emit statusChanged(text("Cannot open avatar cache")); return; } |
|
|
|
@ -207,7 +208,8 @@ void AvatarManager::clearDefault() { |
|
|
|
|
|
|
|
|
|
|
|
void AvatarManager::scheduleOwn(quint64 group) { |
|
|
|
void AvatarManager::scheduleOwn(quint64 group) { |
|
|
|
if (!m_ready || m_preparing || !m_defaultServer || m_defaultHash.isEmpty() || !m_servers.value(group).contains(m_defaultServer) || |
|
|
|
if (!m_ready || m_preparing || !m_defaultServer || m_defaultHash.isEmpty() || !m_servers.value(group).contains(m_defaultServer) || |
|
|
|
!m_images.contains(m_defaultHash)) return; |
|
|
|
m_missing.contains(m_defaultHash)) return; |
|
|
|
|
|
|
|
if (!m_images.contains(m_defaultHash)) { loadCache(m_defaultHash); return; } |
|
|
|
const QString context = key(group, m_db->myNodeId()); |
|
|
|
const QString context = key(group, m_db->myNodeId()); |
|
|
|
if (!m_refs.contains(context) || m_retry.value(context) > QDateTime::currentMSecsSinceEpoch()) return; |
|
|
|
if (!m_refs.contains(context) || m_retry.value(context) > QDateTime::currentMSecsSinceEpoch()) return; |
|
|
|
const Ref old = m_refs.value(context); |
|
|
|
const Ref old = m_refs.value(context); |
|
|
|
@ -297,7 +299,7 @@ void AvatarManager::onTransfer(const uint8_t* data, int length) { |
|
|
|
if (job.upload) { publish(job); return; } |
|
|
|
if (job.upload) { publish(job); return; } |
|
|
|
const Job snapshot = job; const QString directory = m_directory; job.stage = 101; |
|
|
|
const Job snapshot = job; const QString directory = m_directory; job.stage = 101; |
|
|
|
QStringList pinned; if (!m_defaultHash.isEmpty()) pinned << m_defaultHash; |
|
|
|
QStringList pinned; if (!m_defaultHash.isEmpty()) pinned << m_defaultHash; |
|
|
|
for (const auto& ref : m_refs) if (m_wanted.contains(key(ref.group, ref.owner))) pinned << ref.hash; |
|
|
|
for (const auto& active : m_jobs) if (active.upload) pinned << active.ref.hash; |
|
|
|
m_pool.start(QRunnable::create([this, snapshot, directory, pinned] { |
|
|
|
m_pool.start(QRunnable::create([this, snapshot, directory, pinned] { |
|
|
|
const auto result = AvatarCache::publish(snapshot.local, directory, snapshot.ref.hash); AvatarCache::prune(directory, pinned); |
|
|
|
const auto result = AvatarCache::publish(snapshot.local, directory, snapshot.ref.hash); AvatarCache::prune(directory, pinned); |
|
|
|
QMetaObject::invokeMethod(this, [this, snapshot, result] { |
|
|
|
QMetaObject::invokeMethod(this, [this, snapshot, result] { |
|
|
|
|