mirror of
https://github.com/AyuGram/AyuGramDesktop.git
synced 2025-06-05 06:33:57 +02:00
Added ability to pass Api::SendOptions from TabbedSelector.
This commit is contained in:
parent
b71062561a
commit
759e802eba
12 changed files with 35 additions and 22 deletions
|
@ -165,7 +165,7 @@ GifsListWidget::GifsListWidget(
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
rpl::producer<not_null<DocumentData*>> GifsListWidget::fileChosen() const {
|
rpl::producer<TabbedSelector::FileChosen> GifsListWidget::fileChosen() const {
|
||||||
return _fileChosen.events();
|
return _fileChosen.events();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -391,7 +391,7 @@ void GifsListWidget::selectInlineResult(int row, int column) {
|
||||||
const auto media = document->activeMediaView();
|
const auto media = document->activeMediaView();
|
||||||
const auto preview = Data::VideoPreviewState(media.get());
|
const auto preview = Data::VideoPreviewState(media.get());
|
||||||
if (ctrl || (media && preview.loaded())) {
|
if (ctrl || (media && preview.loaded())) {
|
||||||
_fileChosen.fire_copy(document);
|
_fileChosen.fire_copy({ .document = document });
|
||||||
} else if (!preview.usingThumbnail()) {
|
} else if (!preview.usingThumbnail()) {
|
||||||
if (preview.loading()) {
|
if (preview.loading()) {
|
||||||
document->cancel();
|
document->cancel();
|
||||||
|
|
|
@ -40,7 +40,7 @@ public:
|
||||||
|
|
||||||
GifsListWidget(QWidget *parent, not_null<Window::SessionController*> controller);
|
GifsListWidget(QWidget *parent, not_null<Window::SessionController*> controller);
|
||||||
|
|
||||||
rpl::producer<not_null<DocumentData*>> fileChosen() const;
|
rpl::producer<TabbedSelector::FileChosen> fileChosen() const;
|
||||||
rpl::producer<not_null<PhotoData*>> photoChosen() const;
|
rpl::producer<not_null<PhotoData*>> photoChosen() const;
|
||||||
rpl::producer<InlineChosen> inlineResultChosen() const;
|
rpl::producer<InlineChosen> inlineResultChosen() const;
|
||||||
|
|
||||||
|
@ -177,7 +177,7 @@ private:
|
||||||
QString _inlineQuery, _inlineNextQuery, _inlineNextOffset;
|
QString _inlineQuery, _inlineNextQuery, _inlineNextOffset;
|
||||||
mtpRequestId _inlineRequestId = 0;
|
mtpRequestId _inlineRequestId = 0;
|
||||||
|
|
||||||
rpl::event_stream<not_null<DocumentData*>> _fileChosen;
|
rpl::event_stream<TabbedSelector::FileChosen> _fileChosen;
|
||||||
rpl::event_stream<not_null<PhotoData*>> _photoChosen;
|
rpl::event_stream<not_null<PhotoData*>> _photoChosen;
|
||||||
rpl::event_stream<InlineChosen> _inlineResultChosen;
|
rpl::event_stream<InlineChosen> _inlineResultChosen;
|
||||||
rpl::event_stream<> _cancelled;
|
rpl::event_stream<> _cancelled;
|
||||||
|
|
|
@ -913,7 +913,7 @@ Main::Session &StickersListWidget::session() const {
|
||||||
return controller()->session();
|
return controller()->session();
|
||||||
}
|
}
|
||||||
|
|
||||||
rpl::producer<not_null<DocumentData*>> StickersListWidget::chosen() const {
|
rpl::producer<TabbedSelector::FileChosen> StickersListWidget::chosen() const {
|
||||||
return _chosen.events();
|
return _chosen.events();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2087,7 +2087,7 @@ void StickersListWidget::mouseReleaseEvent(QMouseEvent *e) {
|
||||||
document));
|
document));
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
_chosen.fire_copy(document);
|
_chosen.fire_copy({ .document = document });
|
||||||
}
|
}
|
||||||
} else if (auto set = base::get_if<OverSet>(&pressed)) {
|
} else if (auto set = base::get_if<OverSet>(&pressed)) {
|
||||||
Assert(set->section >= 0 && set->section < sets.size());
|
Assert(set->section >= 0 && set->section < sets.size());
|
||||||
|
|
|
@ -51,7 +51,7 @@ public:
|
||||||
|
|
||||||
Main::Session &session() const;
|
Main::Session &session() const;
|
||||||
|
|
||||||
rpl::producer<not_null<DocumentData*>> chosen() const;
|
rpl::producer<TabbedSelector::FileChosen> chosen() const;
|
||||||
rpl::producer<> scrollUpdated() const;
|
rpl::producer<> scrollUpdated() const;
|
||||||
rpl::producer<> checkForHide() const;
|
rpl::producer<> checkForHide() const;
|
||||||
|
|
||||||
|
@ -358,7 +358,7 @@ private:
|
||||||
QString _searchQuery, _searchNextQuery;
|
QString _searchQuery, _searchNextQuery;
|
||||||
mtpRequestId _searchRequestId = 0;
|
mtpRequestId _searchRequestId = 0;
|
||||||
|
|
||||||
rpl::event_stream<not_null<DocumentData*>> _chosen;
|
rpl::event_stream<TabbedSelector::FileChosen> _chosen;
|
||||||
rpl::event_stream<> _scrollUpdated;
|
rpl::event_stream<> _scrollUpdated;
|
||||||
rpl::event_stream<> _checkForHide;
|
rpl::event_stream<> _checkForHide;
|
||||||
|
|
||||||
|
|
|
@ -409,10 +409,10 @@ rpl::producer<EmojiPtr> TabbedSelector::emojiChosen() const {
|
||||||
return emoji()->chosen();
|
return emoji()->chosen();
|
||||||
}
|
}
|
||||||
|
|
||||||
rpl::producer<not_null<DocumentData*>> TabbedSelector::fileChosen() const {
|
rpl::producer<TabbedSelector::FileChosen> TabbedSelector::fileChosen() const {
|
||||||
return full()
|
return full()
|
||||||
? rpl::merge(stickers()->chosen(), gifs()->fileChosen())
|
? rpl::merge(stickers()->chosen(), gifs()->fileChosen())
|
||||||
: rpl::never<not_null<DocumentData*>>() | rpl::type_erased();
|
: rpl::never<TabbedSelector::FileChosen>() | rpl::type_erased();
|
||||||
}
|
}
|
||||||
|
|
||||||
rpl::producer<not_null<PhotoData*>> TabbedSelector::photoChosen() const {
|
rpl::producer<not_null<PhotoData*>> TabbedSelector::photoChosen() const {
|
||||||
|
|
|
@ -7,6 +7,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
|
||||||
*/
|
*/
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
#include "api/api_common.h"
|
||||||
#include "ui/rp_widget.h"
|
#include "ui/rp_widget.h"
|
||||||
#include "ui/effects/animations.h"
|
#include "ui/effects/animations.h"
|
||||||
#include "ui/effects/panel_animation.h"
|
#include "ui/effects/panel_animation.h"
|
||||||
|
@ -46,6 +47,10 @@ class GifsListWidget;
|
||||||
|
|
||||||
class TabbedSelector : public Ui::RpWidget, private base::Subscriber {
|
class TabbedSelector : public Ui::RpWidget, private base::Subscriber {
|
||||||
public:
|
public:
|
||||||
|
struct FileChosen {
|
||||||
|
not_null<DocumentData*> document;
|
||||||
|
Api::SendOptions options;
|
||||||
|
};
|
||||||
struct InlineChosen {
|
struct InlineChosen {
|
||||||
not_null<InlineBots::Result*> result;
|
not_null<InlineBots::Result*> result;
|
||||||
not_null<UserData*> bot;
|
not_null<UserData*> bot;
|
||||||
|
@ -64,7 +69,7 @@ public:
|
||||||
Main::Session &session() const;
|
Main::Session &session() const;
|
||||||
|
|
||||||
rpl::producer<EmojiPtr> emojiChosen() const;
|
rpl::producer<EmojiPtr> emojiChosen() const;
|
||||||
rpl::producer<not_null<DocumentData*>> fileChosen() const;
|
rpl::producer<FileChosen> fileChosen() const;
|
||||||
rpl::producer<not_null<PhotoData*>> photoChosen() const;
|
rpl::producer<not_null<PhotoData*>> photoChosen() const;
|
||||||
rpl::producer<InlineChosen> inlineResultChosen() const;
|
rpl::producer<InlineChosen> inlineResultChosen() const;
|
||||||
|
|
||||||
|
|
|
@ -387,7 +387,7 @@ HistoryWidget::HistoryWidget(
|
||||||
connect(_fieldAutocomplete, SIGNAL(hashtagChosen(QString,FieldAutocomplete::ChooseMethod)), this, SLOT(onHashtagOrBotCommandInsert(QString,FieldAutocomplete::ChooseMethod)));
|
connect(_fieldAutocomplete, SIGNAL(hashtagChosen(QString,FieldAutocomplete::ChooseMethod)), this, SLOT(onHashtagOrBotCommandInsert(QString,FieldAutocomplete::ChooseMethod)));
|
||||||
connect(_fieldAutocomplete, SIGNAL(botCommandChosen(QString,FieldAutocomplete::ChooseMethod)), this, SLOT(onHashtagOrBotCommandInsert(QString,FieldAutocomplete::ChooseMethod)));
|
connect(_fieldAutocomplete, SIGNAL(botCommandChosen(QString,FieldAutocomplete::ChooseMethod)), this, SLOT(onHashtagOrBotCommandInsert(QString,FieldAutocomplete::ChooseMethod)));
|
||||||
connect(_fieldAutocomplete, &FieldAutocomplete::stickerChosen, this, [=](not_null<DocumentData*> document) {
|
connect(_fieldAutocomplete, &FieldAutocomplete::stickerChosen, this, [=](not_null<DocumentData*> document) {
|
||||||
sendExistingDocument(document);
|
sendExistingDocument(document, Api::SendOptions());
|
||||||
});
|
});
|
||||||
connect(_fieldAutocomplete, SIGNAL(moderateKeyActivate(int,bool*)), this, SLOT(onModerateKeyActivate(int,bool*)));
|
connect(_fieldAutocomplete, SIGNAL(moderateKeyActivate(int,bool*)), this, SLOT(onModerateKeyActivate(int,bool*)));
|
||||||
if (_supportAutocomplete) {
|
if (_supportAutocomplete) {
|
||||||
|
@ -818,8 +818,8 @@ void HistoryWidget::initTabbedSelector() {
|
||||||
selector->fileChosen(
|
selector->fileChosen(
|
||||||
) | rpl::filter([=] {
|
) | rpl::filter([=] {
|
||||||
return !isHidden();
|
return !isHidden();
|
||||||
}) | rpl::start_with_next([=](not_null<DocumentData*> document) {
|
}) | rpl::start_with_next([=](TabbedSelector::FileChosen data) {
|
||||||
sendExistingDocument(document);
|
sendExistingDocument(data.document, data.options);
|
||||||
}, lifetime());
|
}, lifetime());
|
||||||
|
|
||||||
selector->photoChosen(
|
selector->photoChosen(
|
||||||
|
@ -5368,7 +5368,9 @@ void HistoryWidget::destroyPinnedBar() {
|
||||||
_inPinnedMsg = false;
|
_inPinnedMsg = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool HistoryWidget::sendExistingDocument(not_null<DocumentData*> document) {
|
bool HistoryWidget::sendExistingDocument(
|
||||||
|
not_null<DocumentData*> document,
|
||||||
|
Api::SendOptions options) {
|
||||||
const auto error = _peer
|
const auto error = _peer
|
||||||
? Data::RestrictionError(_peer, ChatRestriction::f_send_stickers)
|
? Data::RestrictionError(_peer, ChatRestriction::f_send_stickers)
|
||||||
: std::nullopt;
|
: std::nullopt;
|
||||||
|
@ -5382,6 +5384,7 @@ bool HistoryWidget::sendExistingDocument(not_null<DocumentData*> document) {
|
||||||
}
|
}
|
||||||
|
|
||||||
auto message = Api::MessageToSend(_history);
|
auto message = Api::MessageToSend(_history);
|
||||||
|
message.action.options = std::move(options);
|
||||||
message.action.replyTo = replyToId();
|
message.action.replyTo = replyToId();
|
||||||
Api::SendExistingDocument(std::move(message), document);
|
Api::SendExistingDocument(std::move(message), document);
|
||||||
|
|
||||||
|
|
|
@ -248,7 +248,9 @@ public:
|
||||||
void confirmDeleteSelected();
|
void confirmDeleteSelected();
|
||||||
void clearSelected();
|
void clearSelected();
|
||||||
|
|
||||||
bool sendExistingDocument(not_null<DocumentData*> document);
|
bool sendExistingDocument(
|
||||||
|
not_null<DocumentData*> document,
|
||||||
|
Api::SendOptions options);
|
||||||
bool sendExistingPhoto(not_null<PhotoData*> photo);
|
bool sendExistingPhoto(not_null<PhotoData*> photo);
|
||||||
|
|
||||||
void showInfoTooltip(
|
void showInfoTooltip(
|
||||||
|
|
|
@ -39,6 +39,7 @@ namespace HistoryView {
|
||||||
|
|
||||||
namespace {
|
namespace {
|
||||||
|
|
||||||
|
using FileChosen = ComposeControls::FileChosen;
|
||||||
using MessageToEdit = ComposeControls::MessageToEdit;
|
using MessageToEdit = ComposeControls::MessageToEdit;
|
||||||
|
|
||||||
constexpr auto kMouseEvent = {
|
constexpr auto kMouseEvent = {
|
||||||
|
@ -502,7 +503,7 @@ void ComposeControls::setMimeDataHook(MimeDataHook hook) {
|
||||||
_field->setMimeDataHook(std::move(hook));
|
_field->setMimeDataHook(std::move(hook));
|
||||||
}
|
}
|
||||||
|
|
||||||
rpl::producer<not_null<DocumentData*>> ComposeControls::fileChosen() const {
|
rpl::producer<FileChosen> ComposeControls::fileChosen() const {
|
||||||
return _fileChosen.events();
|
return _fileChosen.events();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -54,6 +54,7 @@ class FieldHeader;
|
||||||
|
|
||||||
class ComposeControls final {
|
class ComposeControls final {
|
||||||
public:
|
public:
|
||||||
|
using FileChosen = ChatHelpers::TabbedSelector::FileChosen;
|
||||||
enum class Mode {
|
enum class Mode {
|
||||||
Normal,
|
Normal,
|
||||||
Scheduled,
|
Scheduled,
|
||||||
|
@ -85,7 +86,7 @@ public:
|
||||||
[[nodiscard]] rpl::producer<> sendRequests() const;
|
[[nodiscard]] rpl::producer<> sendRequests() const;
|
||||||
[[nodiscard]] rpl::producer<MessageToEdit> editRequests() const;
|
[[nodiscard]] rpl::producer<MessageToEdit> editRequests() const;
|
||||||
[[nodiscard]] rpl::producer<> attachRequests() const;
|
[[nodiscard]] rpl::producer<> attachRequests() const;
|
||||||
[[nodiscard]] rpl::producer<not_null<DocumentData*>> fileChosen() const;
|
[[nodiscard]] rpl::producer<FileChosen> fileChosen() const;
|
||||||
[[nodiscard]] rpl::producer<not_null<PhotoData*>> photoChosen() const;
|
[[nodiscard]] rpl::producer<not_null<PhotoData*>> photoChosen() const;
|
||||||
[[nodiscard]] rpl::producer<Data::MessagePosition> scrollRequests() const;
|
[[nodiscard]] rpl::producer<Data::MessagePosition> scrollRequests() const;
|
||||||
[[nodiscard]] rpl::producer<not_null<QKeyEvent*>> keyEvents() const;
|
[[nodiscard]] rpl::producer<not_null<QKeyEvent*>> keyEvents() const;
|
||||||
|
@ -154,7 +155,7 @@ private:
|
||||||
const std::unique_ptr<FieldHeader> _header;
|
const std::unique_ptr<FieldHeader> _header;
|
||||||
|
|
||||||
rpl::event_stream<> _cancelRequests;
|
rpl::event_stream<> _cancelRequests;
|
||||||
rpl::event_stream<not_null<DocumentData*>> _fileChosen;
|
rpl::event_stream<FileChosen> _fileChosen;
|
||||||
rpl::event_stream<not_null<PhotoData*>> _photoChosen;
|
rpl::event_stream<not_null<PhotoData*>> _photoChosen;
|
||||||
rpl::event_stream<ChatHelpers::TabbedSelector::InlineChosen> _inlineResultChosen;
|
rpl::event_stream<ChatHelpers::TabbedSelector::InlineChosen> _inlineResultChosen;
|
||||||
|
|
||||||
|
|
|
@ -199,8 +199,9 @@ void ScheduledWidget::setupComposeControls() {
|
||||||
}, lifetime());
|
}, lifetime());
|
||||||
|
|
||||||
_composeControls->fileChosen(
|
_composeControls->fileChosen(
|
||||||
) | rpl::start_with_next([=](not_null<DocumentData*> document) {
|
) | rpl::start_with_next([=](
|
||||||
sendExistingDocument(document);
|
ChatHelpers::TabbedSelector::FileChosen chosen) {
|
||||||
|
sendExistingDocument(chosen.document);
|
||||||
}, lifetime());
|
}, lifetime());
|
||||||
|
|
||||||
_composeControls->photoChosen(
|
_composeControls->photoChosen(
|
||||||
|
|
|
@ -1081,7 +1081,7 @@ void MainWidget::inlineResultLoadFailed(FileLoader *loader, bool started) {
|
||||||
}
|
}
|
||||||
|
|
||||||
bool MainWidget::sendExistingDocument(not_null<DocumentData*> document) {
|
bool MainWidget::sendExistingDocument(not_null<DocumentData*> document) {
|
||||||
return _history->sendExistingDocument(document);
|
return _history->sendExistingDocument(document, Api::SendOptions());
|
||||||
}
|
}
|
||||||
|
|
||||||
void MainWidget::dialogsCancelled() {
|
void MainWidget::dialogsCancelled() {
|
||||||
|
|
Loading…
Add table
Reference in a new issue