diff --git a/Telegram/SourceFiles/api/api_ringtones.cpp b/Telegram/SourceFiles/api/api_ringtones.cpp index 49e4b0bc9..69cccacf8 100644 --- a/Telegram/SourceFiles/api/api_ringtones.cpp +++ b/Telegram/SourceFiles/api/api_ringtones.cpp @@ -7,11 +7,13 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL */ #include "api/api_ringtones.h" +#include "api/api_toggling_media.h" #include "apiwrap.h" #include "base/random.h" #include "base/unixtime.h" #include "data/data_document.h" #include "data/data_document_media.h" +#include "data/data_file_origin.h" #include "data/data_session.h" #include "data/notify/data_notify_settings.h" #include "main/main_session.h" @@ -175,15 +177,16 @@ void Ringtones::applyUpdate() { void Ringtones::remove(DocumentId id) { if (const auto document = _session->data().document(id)) { - _api.request(MTPaccount_SaveRingtone( - document->mtpInput(), - MTP_bool(true) - )).done([=] { - const auto it = ranges::find(_list.documents, id); - if (it != end(_list.documents)) { - _list.documents.erase(it); - } - }).send(); + ToggleSavedRingtone( + document, + Data::FileOriginRingtones(), + crl::guard(&document->session(), [=] { + const auto it = ranges::find(_list.documents, id); + if (it != end(_list.documents)) { + _list.documents.erase(it); + } + }), + false); } } diff --git a/Telegram/SourceFiles/api/api_toggling_media.cpp b/Telegram/SourceFiles/api/api_toggling_media.cpp index 37869c29d..91c14b259 100644 --- a/Telegram/SourceFiles/api/api_toggling_media.cpp +++ b/Telegram/SourceFiles/api/api_toggling_media.cpp @@ -29,11 +29,7 @@ void ToggleExistingMedia( const auto usedFileReference = document->fileReference(); api->request(std::move( toggleRequest - )).done([=](const MTPBool &result) { - if (mtpIsTrue(result)) { - done(); - } - }).fail([=](const MTP::Error &error) { + )).done(done).fail([=](const MTP::Error &error) { if (error.code() == 400 && error.type().startsWith(u"FILE_REFERENCE_"_q)) { auto refreshed = [=](const Data::UpdatedFileReferences &d) { @@ -114,4 +110,16 @@ void ToggleSavedGif( std::move(done)); } +void ToggleSavedRingtone( + not_null document, + Data::FileOrigin origin, + Fn &&done, + bool saved) { + ToggleExistingMedia( + document, + std::move(origin), + MTPaccount_SaveRingtone(document->mtpInput(), MTP_bool(!saved)), + std::move(done)); +} + } // namespace Api diff --git a/Telegram/SourceFiles/api/api_toggling_media.h b/Telegram/SourceFiles/api/api_toggling_media.h index 97740247f..fc1c84e17 100644 --- a/Telegram/SourceFiles/api/api_toggling_media.h +++ b/Telegram/SourceFiles/api/api_toggling_media.h @@ -28,4 +28,10 @@ void ToggleSavedGif( Data::FileOrigin origin, bool saved); +void ToggleSavedRingtone( + not_null document, + Data::FileOrigin origin, + Fn &&done, + bool saved); + } // namespace Api diff --git a/Telegram/SourceFiles/history/history_inner_widget.cpp b/Telegram/SourceFiles/history/history_inner_widget.cpp index a8065e779..2d0267798 100644 --- a/Telegram/SourceFiles/history/history_inner_widget.cpp +++ b/Telegram/SourceFiles/history/history_inner_widget.cpp @@ -2050,9 +2050,10 @@ void HistoryInner::showContextMenu(QContextMenuEvent *e, bool showFromTouch) { showContextInFolder(document); }, &st::menuIconShowInFolder); } - if (!hasCopyRestriction(item)) { + if (item && !hasCopyRestriction(item)) { HistoryView::AddSaveSoundForNotifications( _menu, + item, document, controller); _menu->addAction(lnkIsVideo ? tr::lng_context_save_video(tr::now) : (lnkIsVoice ? tr::lng_context_save_audio(tr::now) : (lnkIsAudio ? tr::lng_context_save_audio_file(tr::now) : tr::lng_context_save_file(tr::now))), App::LambdaDelayed(st::defaultDropdownMenu.menu.ripple.hideDuration, this, [=] { diff --git a/Telegram/SourceFiles/history/view/history_view_context_menu.cpp b/Telegram/SourceFiles/history/view/history_view_context_menu.cpp index 2f46f5967..ffa9ef507 100644 --- a/Telegram/SourceFiles/history/view/history_view_context_menu.cpp +++ b/Telegram/SourceFiles/history/view/history_view_context_menu.cpp @@ -296,8 +296,9 @@ void AddDocumentActions( std::move(callback), &st::menuIconStickers); } - if (!list->hasCopyRestriction(item)) { - AddSaveSoundForNotifications(menu, document, list->controller()); + if (item && !list->hasCopyRestriction(item)) { + const auto controller = list->controller(); + AddSaveSoundForNotifications(menu, item, document, controller); } AddSaveDocumentAction(menu, item, document, list); } @@ -1078,6 +1079,7 @@ void AddPollActions( void AddSaveSoundForNotifications( not_null menu, + not_null item, not_null document, not_null controller) { const auto &ringtones = document->session().api().ringtones(); @@ -1098,17 +1100,15 @@ void AddSaveSoundForNotifications( } const auto toastParent = Window::Show(controller).toastParent(); menu->addAction(tr::lng_context_save_custom_sound(tr::now), [=] { - document->session().api().request(MTPaccount_SaveRingtone( - document->mtpInput(), - MTP_bool(false) - )).done([=] { - Ui::Toast::Show( - toastParent, - tr::lng_ringtones_toast_added(tr::now)); - }).fail([](const MTP::Error &error) { - LOG(("API Error: Saving ringtone failed with %1 message." - ).arg(error.type())); - }).send(); + Api::ToggleSavedRingtone( + document, + item->fullId(), + [=] { + Ui::Toast::Show( + toastParent, + tr::lng_ringtones_toast_added(tr::now)); + }, + true); }, &st::menuIconSoundAdd); } diff --git a/Telegram/SourceFiles/history/view/history_view_context_menu.h b/Telegram/SourceFiles/history/view/history_view_context_menu.h index 814eb60e3..03d7b3c45 100644 --- a/Telegram/SourceFiles/history/view/history_view_context_menu.h +++ b/Telegram/SourceFiles/history/view/history_view_context_menu.h @@ -62,6 +62,7 @@ void AddPollActions( Context context); void AddSaveSoundForNotifications( not_null menu, + not_null item, not_null document, not_null controller); void AddWhoReactedAction(