mirror of
https://github.com/AyuGram/AyuGramDesktop.git
synced 2026-07-25 06:54:43 +00:00
Fixed update of local state after reorder stories in albums.
This commit is contained in:
@@ -2006,6 +2006,58 @@ void Stories::albumDelete(not_null<PeerData*> peer, int id) {
|
||||
}
|
||||
}
|
||||
|
||||
void Stories::albumReorderStories(
|
||||
not_null<PeerData*> peer,
|
||||
int albumId,
|
||||
int oldPosition,
|
||||
int newPosition,
|
||||
Fn<void()> done,
|
||||
Fn<void()> fail) {
|
||||
const auto ids = albumIds(peer->id, albumId);
|
||||
const auto list = RespectingPinned(ids);
|
||||
|
||||
if (oldPosition < 0 || newPosition < 0
|
||||
|| oldPosition >= list.size() || newPosition >= list.size()) {
|
||||
fail();
|
||||
return;
|
||||
}
|
||||
|
||||
if (_reorderStoriesRequestId) {
|
||||
_owner->session().api().request(
|
||||
base::take(_reorderStoriesRequestId)).cancel();
|
||||
}
|
||||
|
||||
auto reorderedList = list;
|
||||
base::reorder(reorderedList, oldPosition, newPosition);
|
||||
|
||||
auto order = QVector<MTPint>();
|
||||
order.reserve(reorderedList.size());
|
||||
for (const auto id : reorderedList) {
|
||||
order.push_back(MTP_int(id));
|
||||
}
|
||||
|
||||
_reorderStoriesRequestId = _owner->session().api().request(
|
||||
MTPstories_UpdateAlbum(
|
||||
MTP_flags(MTPstories_UpdateAlbum::Flag::f_order),
|
||||
peer->input,
|
||||
MTP_int(albumId),
|
||||
MTPstring(),
|
||||
MTPVector<MTPint>(),
|
||||
MTPVector<MTPint>(),
|
||||
MTP_vector<MTPint>(order)
|
||||
)).done([=](const MTPStoryAlbum &result) {
|
||||
_reorderStoriesRequestId = 0;
|
||||
if (const auto set = albumIdsSet(peer->id, albumId)) {
|
||||
set->ids.list = reorderedList;
|
||||
_albumIdsChanged.fire({ peer->id, albumId });
|
||||
}
|
||||
done();
|
||||
}).fail([=] {
|
||||
_reorderStoriesRequestId = 0;
|
||||
fail();
|
||||
}).send();
|
||||
}
|
||||
|
||||
void Stories::notifyAlbumUpdate(StoryAlbumUpdate &&update) {
|
||||
const auto peerId = update.peer->id;
|
||||
const auto i = _albums.find(peerId);
|
||||
|
||||
@@ -242,6 +242,13 @@ public:
|
||||
Fn<void(StoryAlbum)> done,
|
||||
Fn<void(QString)> fail);
|
||||
void albumDelete(not_null<PeerData*> peer, int id);
|
||||
void albumReorderStories(
|
||||
not_null<PeerData*> peer,
|
||||
int albumId,
|
||||
int oldPosition,
|
||||
int newPosition,
|
||||
Fn<void()> done,
|
||||
Fn<void()> fail);
|
||||
void notifyAlbumUpdate(StoryAlbumUpdate &&update);
|
||||
[[nodiscard]] rpl::producer<StoryAlbumUpdate> albumUpdates() const;
|
||||
|
||||
@@ -477,6 +484,8 @@ private:
|
||||
base::Timer _pollingTimer;
|
||||
base::Timer _pollingViewsTimer;
|
||||
|
||||
mtpRequestId _reorderStoriesRequestId = 0;
|
||||
|
||||
rpl::variable<StealthMode> _stealthMode;
|
||||
|
||||
rpl::lifetime _lifetime;
|
||||
|
||||
@@ -609,7 +609,8 @@ void InnerWidget::setupList() {
|
||||
int newPosition,
|
||||
Fn<void()> done,
|
||||
Fn<void()> fail) {
|
||||
reorderAlbumStories(
|
||||
_peer->owner().stories().albumReorderStories(
|
||||
_peer,
|
||||
albumId,
|
||||
oldPosition,
|
||||
newPosition,
|
||||
@@ -1122,52 +1123,4 @@ void InnerWidget::flushAlbumReorder() {
|
||||
_pendingAlbumReorder = false;
|
||||
}
|
||||
|
||||
void InnerWidget::reorderAlbumStories(
|
||||
int albumId,
|
||||
int oldPosition,
|
||||
int newPosition,
|
||||
Fn<void()> done,
|
||||
Fn<void()> fail) {
|
||||
const auto &stories = _controller->session().data().stories();
|
||||
const auto ids = stories.albumIds(_peer->id, albumId);
|
||||
const auto list = Data::RespectingPinned(ids);
|
||||
|
||||
if (oldPosition < 0 || newPosition < 0
|
||||
|| oldPosition >= list.size() || newPosition >= list.size()) {
|
||||
fail();
|
||||
return;
|
||||
}
|
||||
|
||||
if (_reorderStoriesRequestId) {
|
||||
_controller->session().api().request(
|
||||
base::take(_reorderStoriesRequestId)).cancel();
|
||||
}
|
||||
|
||||
auto reorderedList = list;
|
||||
base::reorder(reorderedList, oldPosition, newPosition);
|
||||
|
||||
auto order = QVector<MTPint>();
|
||||
order.reserve(reorderedList.size());
|
||||
for (const auto id : reorderedList) {
|
||||
order.push_back(MTP_int(id));
|
||||
}
|
||||
|
||||
_reorderStoriesRequestId = _controller->session().api().request(
|
||||
MTPstories_UpdateAlbum(
|
||||
MTP_flags(MTPstories_UpdateAlbum::Flag::f_order),
|
||||
_peer->input,
|
||||
MTP_int(albumId),
|
||||
MTPstring(),
|
||||
MTPVector<MTPint>(),
|
||||
MTPVector<MTPint>(),
|
||||
MTP_vector<MTPint>(order)
|
||||
)).done([=](const MTPStoryAlbum &result) {
|
||||
_reorderStoriesRequestId = 0;
|
||||
done();
|
||||
}).fail([=] {
|
||||
_reorderStoriesRequestId = 0;
|
||||
fail();
|
||||
}).send();
|
||||
}
|
||||
|
||||
} // namespace Info::Stories
|
||||
|
||||
@@ -132,13 +132,6 @@ private:
|
||||
void reorderAlbumsLocally(const Ui::SubTabsReorderUpdate &update);
|
||||
void flushAlbumReorder();
|
||||
|
||||
void reorderAlbumStories(
|
||||
int albumId,
|
||||
int oldPosition,
|
||||
int newPosition,
|
||||
Fn<void()> done,
|
||||
Fn<void()> fail);
|
||||
|
||||
const not_null<Controller*> _controller;
|
||||
const not_null<PeerData*> _peer;
|
||||
const int _addingToAlbumId = 0;
|
||||
@@ -154,7 +147,6 @@ private:
|
||||
base::unique_qptr<Ui::PopupMenu> _menu;
|
||||
std::unique_ptr<MTP::Sender> _api;
|
||||
mtpRequestId _reorderRequestId = 0;
|
||||
mtpRequestId _reorderStoriesRequestId = 0;
|
||||
|
||||
object_ptr<Ui::VerticalLayout> _top = { nullptr };
|
||||
object_ptr<Media::ListWidget> _list = { nullptr };
|
||||
|
||||
Reference in New Issue
Block a user