| 730 | } |
| 731 | |
| 732 | void Stories::loadMore(StorySourcesList list) { |
| 733 | const auto index = static_cast<int>(list); |
| 734 | if (_loadMoreRequestId[index] || _sourcesLoaded[index]) { |
| 735 | return; |
| 736 | } |
| 737 | const auto hidden = (list == StorySourcesList::Hidden); |
| 738 | const auto api = &_owner->session().api(); |
| 739 | using Flag = MTPstories_GetAllStories::Flag; |
| 740 | _loadMoreRequestId[index] = api->request(MTPstories_GetAllStories( |
| 741 | MTP_flags((hidden ? Flag::f_hidden : Flag()) |
| 742 | | (_sourcesStates[index].isEmpty() |
| 743 | ? Flag(0) |
| 744 | : (Flag::f_next | Flag::f_state))), |
| 745 | MTP_string(_sourcesStates[index]) |
| 746 | )).done([=](const MTPstories_AllStories &result) { |
| 747 | _loadMoreRequestId[index] = 0; |
| 748 | |
| 749 | result.match([&](const MTPDstories_allStories &data) { |
| 750 | _owner->processUsers(data.vusers()); |
| 751 | _owner->processChats(data.vchats()); |
| 752 | _sourcesStates[index] = qs(data.vstate()); |
| 753 | _sourcesLoaded[index] = !data.is_has_more(); |
| 754 | for (const auto &single : data.vpeer_stories().v) { |
| 755 | parseAndApply(single, ParseSource::MyStrip); |
| 756 | } |
| 757 | }, [](const MTPDstories_allStoriesNotModified &) { |
| 758 | }); |
| 759 | |
| 760 | result.match([&](const auto &data) { |
| 761 | apply(data.vstealth_mode()); |
| 762 | }); |
| 763 | |
| 764 | preloadListsMore(); |
| 765 | }).fail([=] { |
| 766 | _loadMoreRequestId[index] = 0; |
| 767 | }).send(); |
| 768 | } |
| 769 | |
| 770 | void Stories::preloadListsMore() { |
| 771 | if (_loadMoreRequestId[static_cast<int>(StorySourcesList::NotHidden)] |
no test coverage detected