mirror of
https://github.com/AyuGram/AyuGramDesktop.git
synced 2025-06-07 15:43:55 +02:00
parent
db23485fa2
commit
8a9317f9e1
3 changed files with 85 additions and 7 deletions
|
@ -627,6 +627,34 @@ void OverlayWidget::refreshNavVisibility() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool OverlayWidget::contentCanBeSaved() const {
|
||||||
|
if (_photo) {
|
||||||
|
return _photo->hasVideo() || _photoMedia->loaded();
|
||||||
|
} else if (_document) {
|
||||||
|
return _document->filepath(true).isEmpty() && !_document->loading();
|
||||||
|
} else {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void OverlayWidget::checkForSaveLoaded() {
|
||||||
|
if (_savePhotoVideoWhenLoaded == SavePhotoVideo::None) {
|
||||||
|
return;
|
||||||
|
} else if (!_photo
|
||||||
|
|| !_photo->hasVideo()
|
||||||
|
|| _photoMedia->videoContent().isEmpty()) {
|
||||||
|
return;
|
||||||
|
} else if (_savePhotoVideoWhenLoaded == SavePhotoVideo::QuickSave) {
|
||||||
|
_savePhotoVideoWhenLoaded = SavePhotoVideo::None;
|
||||||
|
onDownload();
|
||||||
|
} else if (_savePhotoVideoWhenLoaded == SavePhotoVideo::SaveAs) {
|
||||||
|
_savePhotoVideoWhenLoaded = SavePhotoVideo::None;
|
||||||
|
onSaveAs();
|
||||||
|
} else {
|
||||||
|
Unexpected("SavePhotoVideo in OverlayWidget::checkForSaveLoaded.");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void OverlayWidget::updateControls() {
|
void OverlayWidget::updateControls() {
|
||||||
if (_document && documentBubbleShown()) {
|
if (_document && documentBubbleShown()) {
|
||||||
if (_document->loading()) {
|
if (_document->loading()) {
|
||||||
|
@ -658,10 +686,7 @@ void OverlayWidget::updateControls() {
|
||||||
|
|
||||||
updateThemePreviewGeometry();
|
updateThemePreviewGeometry();
|
||||||
|
|
||||||
_saveVisible = (_photo && _photoMedia->loaded())
|
_saveVisible = contentCanBeSaved();
|
||||||
|| (_document
|
|
||||||
&& _document->filepath(true).isEmpty()
|
|
||||||
&& !_document->loading());
|
|
||||||
_rotateVisible = !_themePreviewShown;
|
_rotateVisible = !_themePreviewShown;
|
||||||
const auto navRect = [&](int i) {
|
const auto navRect = [&](int i) {
|
||||||
return myrtlrect(width() - st::mediaviewIconSize.width() * i,
|
return myrtlrect(width() - st::mediaviewIconSize.width() * i,
|
||||||
|
@ -1153,6 +1178,7 @@ OverlayWidget::~OverlayWidget() {
|
||||||
}
|
}
|
||||||
|
|
||||||
void OverlayWidget::assignMediaPointer(DocumentData *document) {
|
void OverlayWidget::assignMediaPointer(DocumentData *document) {
|
||||||
|
_savePhotoVideoWhenLoaded = SavePhotoVideo::None;
|
||||||
_photo = nullptr;
|
_photo = nullptr;
|
||||||
_photoMedia = nullptr;
|
_photoMedia = nullptr;
|
||||||
if (_document != document) {
|
if (_document != document) {
|
||||||
|
@ -1167,6 +1193,7 @@ void OverlayWidget::assignMediaPointer(DocumentData *document) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void OverlayWidget::assignMediaPointer(not_null<PhotoData*> photo) {
|
void OverlayWidget::assignMediaPointer(not_null<PhotoData*> photo) {
|
||||||
|
_savePhotoVideoWhenLoaded = SavePhotoVideo::None;
|
||||||
_document = nullptr;
|
_document = nullptr;
|
||||||
_documentMedia = nullptr;
|
_documentMedia = nullptr;
|
||||||
if (_photo != photo) {
|
if (_photo != photo) {
|
||||||
|
@ -1348,6 +1375,31 @@ void OverlayWidget::onSaveAs() {
|
||||||
updateControls();
|
updateControls();
|
||||||
updateOver(_lastMouseMovePos);
|
updateOver(_lastMouseMovePos);
|
||||||
}
|
}
|
||||||
|
} else if (_photo && _photo->hasVideo()) {
|
||||||
|
if (const auto bytes = _photoMedia->videoContent(); !bytes.isEmpty()) {
|
||||||
|
auto filter = qsl("Video Files (*.mp4);;") + FileDialog::AllFilesFilter();
|
||||||
|
FileDialog::GetWritePath(
|
||||||
|
this,
|
||||||
|
tr::lng_save_video(tr::now),
|
||||||
|
filter,
|
||||||
|
filedialogDefaultName(
|
||||||
|
qsl("photo"),
|
||||||
|
qsl(".mp4"),
|
||||||
|
QString(),
|
||||||
|
false,
|
||||||
|
_photo->date),
|
||||||
|
crl::guard(this, [=, photo = _photo](const QString &result) {
|
||||||
|
QFile f(result);
|
||||||
|
if (!result.isEmpty()
|
||||||
|
&& _photo == photo
|
||||||
|
&& f.open(QIODevice::WriteOnly)) {
|
||||||
|
f.write(bytes);
|
||||||
|
}
|
||||||
|
}));
|
||||||
|
} else {
|
||||||
|
_photo->loadVideo(fileOrigin());
|
||||||
|
_savePhotoVideoWhenLoaded = SavePhotoVideo::SaveAs;
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
if (!_photo || !_photoMedia->loaded()) {
|
if (!_photo || !_photoMedia->loaded()) {
|
||||||
return;
|
return;
|
||||||
|
@ -1436,14 +1488,29 @@ void OverlayWidget::onDownload() {
|
||||||
DocumentSaveClickHandler::Mode::ToFile);
|
DocumentSaveClickHandler::Mode::ToFile);
|
||||||
updateControls();
|
updateControls();
|
||||||
} else {
|
} else {
|
||||||
_saveVisible = false;
|
_saveVisible = contentCanBeSaved();
|
||||||
update(_saveNav);
|
update(_saveNav);
|
||||||
}
|
}
|
||||||
updateOver(_lastMouseMovePos);
|
updateOver(_lastMouseMovePos);
|
||||||
}
|
}
|
||||||
|
} else if (_photo && _photo->hasVideo()) {
|
||||||
|
if (const auto bytes = _photoMedia->videoContent(); !bytes.isEmpty()) {
|
||||||
|
if (!QDir().exists(path)) {
|
||||||
|
QDir().mkpath(path);
|
||||||
|
}
|
||||||
|
toName = filedialogDefaultName(qsl("photo"), qsl(".mp4"), path);
|
||||||
|
QFile f(toName);
|
||||||
|
if (!f.open(QIODevice::WriteOnly)
|
||||||
|
|| f.write(bytes) != bytes.size()) {
|
||||||
|
toName = QString();
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
_photo->loadVideo(fileOrigin());
|
||||||
|
_savePhotoVideoWhenLoaded = SavePhotoVideo::QuickSave;
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
if (!_photo || !_photoMedia->loaded()) {
|
if (!_photo || !_photoMedia->loaded()) {
|
||||||
_saveVisible = false;
|
_saveVisible = contentCanBeSaved();
|
||||||
update(_saveNav);
|
update(_saveNav);
|
||||||
} else {
|
} else {
|
||||||
const auto image = _photoMedia->image(
|
const auto image = _photoMedia->image(
|
||||||
|
@ -3685,6 +3752,7 @@ void OverlayWidget::setSession(not_null<Main::Session*> session) {
|
||||||
) | rpl::start_with_next([=] {
|
) | rpl::start_with_next([=] {
|
||||||
if (!isHidden()) {
|
if (!isHidden()) {
|
||||||
updateControls();
|
updateControls();
|
||||||
|
checkForSaveLoaded();
|
||||||
}
|
}
|
||||||
}, _sessionLifetime);
|
}, _sessionLifetime);
|
||||||
|
|
||||||
|
|
|
@ -159,6 +159,11 @@ private:
|
||||||
not_null<DocumentData*>> data;
|
not_null<DocumentData*>> data;
|
||||||
HistoryItem *item;
|
HistoryItem *item;
|
||||||
};
|
};
|
||||||
|
enum class SavePhotoVideo {
|
||||||
|
None,
|
||||||
|
QuickSave,
|
||||||
|
SaveAs,
|
||||||
|
};
|
||||||
|
|
||||||
void paintEvent(QPaintEvent *e) override;
|
void paintEvent(QPaintEvent *e) override;
|
||||||
|
|
||||||
|
@ -207,6 +212,9 @@ private:
|
||||||
bool moveToNext(int delta);
|
bool moveToNext(int delta);
|
||||||
void preloadData(int delta);
|
void preloadData(int delta);
|
||||||
|
|
||||||
|
bool contentCanBeSaved() const;
|
||||||
|
void checkForSaveLoaded();
|
||||||
|
|
||||||
Entity entityForUserPhotos(int index) const;
|
Entity entityForUserPhotos(int index) const;
|
||||||
Entity entityForSharedMedia(int index) const;
|
Entity entityForSharedMedia(int index) const;
|
||||||
Entity entityForCollage(int index) const;
|
Entity entityForCollage(int index) const;
|
||||||
|
@ -502,6 +510,7 @@ private:
|
||||||
QRect _saveMsg;
|
QRect _saveMsg;
|
||||||
QTimer _saveMsgUpdater;
|
QTimer _saveMsgUpdater;
|
||||||
Ui::Text::String _saveMsgText;
|
Ui::Text::String _saveMsgText;
|
||||||
|
SavePhotoVideo _savePhotoVideoWhenLoaded = SavePhotoVideo::None;
|
||||||
|
|
||||||
base::flat_map<OverState, crl::time> _animations;
|
base::flat_map<OverState, crl::time> _animations;
|
||||||
base::flat_map<OverState, anim::value> _animationOpacities;
|
base::flat_map<OverState, anim::value> _animationOpacities;
|
||||||
|
|
|
@ -471,8 +471,9 @@ bool FileLoader::finalizeResult() {
|
||||||
_cacheTag));
|
_cacheTag));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
_session->notifyDownloaderTaskFinished();
|
const auto session = _session;
|
||||||
_updates.fire_done();
|
_updates.fire_done();
|
||||||
|
session->notifyDownloaderTaskFinished();
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue