Fixed update of local state after reorder stories in albums.

This commit is contained in:
23rd
2025-11-19 17:11:58 +03:00
committed by John Preston
parent 0bf50de77a
commit bc2449c3f9
4 changed files with 63 additions and 57 deletions
@@ -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);
+9
View File
@@ -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 };