Better image overlay handling when downloading

- hides the overlay when prompting for download location
 - cancel re-shows the dialog
 - success closes the overlay
 - would be nice to have a return code from the download fn in
 mtxclient.

Closes #140
image-modal-download
Adasauce 5 years ago
parent b41e2e6f18
commit 47d884c996
Signed by: adasauce
GPG Key ID: B4FD3151235211CB
  1. 7
      src/timeline/TimelineModel.cpp
  2. 2
      src/timeline/TimelineModel.h
  3. 12
      src/timeline/TimelineViewManager.cpp

@ -1271,7 +1271,7 @@ TimelineModel::addPendingMessage(mtx::events::collections::TimelineEvents event)
emit nextPendingMessage(); emit nextPendingMessage();
} }
void bool
TimelineModel::saveMedia(QString eventId) const TimelineModel::saveMedia(QString eventId) const
{ {
mtx::events::collections::TimelineEvents event = events.value(eventId); mtx::events::collections::TimelineEvents event = events.value(eventId);
@ -1309,7 +1309,7 @@ TimelineModel::saveMedia(QString eventId) const
manager_->getWidget(), dialogTitle, openLocation, filterString); manager_->getWidget(), dialogTitle, openLocation, filterString);
if (filename.isEmpty()) if (filename.isEmpty())
return; return false;
const auto url = mxcUrl.toStdString(); const auto url = mxcUrl.toStdString();
@ -1340,10 +1340,13 @@ TimelineModel::saveMedia(QString eventId) const
file.write(QByteArray(temp.data(), (int)temp.size())); file.write(QByteArray(temp.data(), (int)temp.size()));
file.close(); file.close();
return;
} catch (const std::exception &e) { } catch (const std::exception &e) {
nhlog::ui()->warn("Error while saving file to: {}", e.what()); nhlog::ui()->warn("Error while saving file to: {}", e.what());
} }
}); });
return true;
} }
void void

@ -186,7 +186,7 @@ public:
Q_INVOKABLE int idToIndex(QString id) const; Q_INVOKABLE int idToIndex(QString id) const;
Q_INVOKABLE QString indexToId(int index) const; Q_INVOKABLE QString indexToId(int index) const;
Q_INVOKABLE void cacheMedia(QString eventId); Q_INVOKABLE void cacheMedia(QString eventId);
Q_INVOKABLE void saveMedia(QString eventId) const; Q_INVOKABLE bool saveMedia(QString eventId) const;
void addEvents(const mtx::responses::Timeline &events); void addEvents(const mtx::responses::Timeline &events);
template<class T> template<class T>

@ -175,8 +175,16 @@ TimelineViewManager::openImageOverlay(QString mxcUrl, QString eventId) const
auto imgDialog = new dialogs::ImageOverlay(pixmap); auto imgDialog = new dialogs::ImageOverlay(pixmap);
imgDialog->showFullScreen(); imgDialog->showFullScreen();
connect(imgDialog, &dialogs::ImageOverlay::saving, timeline_, [this, eventId]() { connect(imgDialog, &dialogs::ImageOverlay::saving, timeline_, [this, eventId, imgDialog]() {
timeline_->saveMedia(eventId);
// hide the overlay while presenting the save dialog for better cross platform support.
imgDialog->hide();
if (!timeline_->saveMedia(eventId)) {
imgDialog->show();
} else {
imgDialog->close();
}
}); });
}); });
} }

Loading…
Cancel
Save