mirror of
https://github.com/AyuGram/AyuGramDesktop.git
synced 2025-06-05 06:33:57 +02:00
Leave only one list of items for custom sounds.
This commit is contained in:
parent
071f599d48
commit
622474e83b
4 changed files with 66 additions and 63 deletions
|
@ -3117,11 +3117,10 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
|
||||||
"lng_telegram_features_url" = "https://t.me/TelegramTips";
|
"lng_telegram_features_url" = "https://t.me/TelegramTips";
|
||||||
|
|
||||||
"lng_ringtones_box_title" = "Notification Sound";
|
"lng_ringtones_box_title" = "Notification Sound";
|
||||||
"lng_ringtones_box_cloud_subtitle" = "Telegram tones";
|
"lng_ringtones_box_cloud_subtitle" = "Choose your tone";
|
||||||
"lng_ringtones_box_local_subtitle" = "System notes";
|
|
||||||
"lng_ringtones_box_upload" = "Upload Sound";
|
|
||||||
"lng_ringtones_box_upload_choose" = "Choose ringtone";
|
"lng_ringtones_box_upload_choose" = "Choose ringtone";
|
||||||
"lng_ringtones_box_upload_button" = "Upload Sound";
|
"lng_ringtones_box_upload_button" = "Upload Sound";
|
||||||
|
"lng_ringtones_box_about" = "Click on any short voice note or mp3 file in chat and select \"Save for Notifications\". It will appear here.";
|
||||||
"lng_ringtones_box_default" = "Default";
|
"lng_ringtones_box_default" = "Default";
|
||||||
"lng_ringtones_box_no_sound" = "No sound";
|
"lng_ringtones_box_no_sound" = "No sound";
|
||||||
"lng_ringtones_box_error" = "Sorry, but your file is too big.";
|
"lng_ringtones_box_error" = "Sorry, but your file is too big.";
|
||||||
|
|
|
@ -125,8 +125,8 @@ void Ringtones::requestList() {
|
||||||
_list.requestId = _api.request(
|
_list.requestId = _api.request(
|
||||||
MTPaccount_GetSavedRingtones(MTP_long(_list.hash))
|
MTPaccount_GetSavedRingtones(MTP_long(_list.hash))
|
||||||
).done([=](const MTPaccount_SavedRingtones &result) {
|
).done([=](const MTPaccount_SavedRingtones &result) {
|
||||||
|
_list.requestId = 0;
|
||||||
result.match([&](const MTPDaccount_savedRingtones &data) {
|
result.match([&](const MTPDaccount_savedRingtones &data) {
|
||||||
_list.requestId = 0;
|
|
||||||
_list.hash = data.vhash().v;
|
_list.hash = data.vhash().v;
|
||||||
_list.documents.reserve(_list.documents.size()
|
_list.documents.reserve(_list.documents.size()
|
||||||
+ data.vringtones().v.size());
|
+ data.vringtones().v.size());
|
||||||
|
@ -135,10 +135,11 @@ void Ringtones::requestList() {
|
||||||
_list.documents.emplace(document->id);
|
_list.documents.emplace(document->id);
|
||||||
}
|
}
|
||||||
requestList();
|
requestList();
|
||||||
}, [&](const MTPDaccount_savedRingtonesNotModified &) {
|
|
||||||
_list.requestId = 0;
|
|
||||||
_list.updates.fire({});
|
_list.updates.fire({});
|
||||||
|
}, [&](const MTPDaccount_savedRingtonesNotModified &) {
|
||||||
});
|
});
|
||||||
|
}).fail([=] {
|
||||||
|
_list.requestId = 0;
|
||||||
}).send();
|
}).send();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1056,7 +1056,6 @@ requestsRejectButton: RoundButton(defaultLightButton) {
|
||||||
requestAcceptPosition: point(71px, 58px);
|
requestAcceptPosition: point(71px, 58px);
|
||||||
requestButtonsSkip: 9px;
|
requestButtonsSkip: 9px;
|
||||||
|
|
||||||
ringtonesBoxListHeight: 192;
|
|
||||||
ringtonesBoxButton: SettingsButton(defaultSettingsButton) {
|
ringtonesBoxButton: SettingsButton(defaultSettingsButton) {
|
||||||
textFg: lightButtonFg;
|
textFg: lightButtonFg;
|
||||||
textFgOver: lightButtonFgOver;
|
textFgOver: lightButtonFgOver;
|
||||||
|
|
|
@ -55,18 +55,22 @@ void RingtonesBox(
|
||||||
std::shared_ptr<Ui::RadiobuttonGroup> group;
|
std::shared_ptr<Ui::RadiobuttonGroup> group;
|
||||||
std::vector<DocumentId> documentIds;
|
std::vector<DocumentId> documentIds;
|
||||||
base::unique_qptr<Ui::PopupMenu> menu;
|
base::unique_qptr<Ui::PopupMenu> menu;
|
||||||
|
QPointer<Ui::Radiobutton> defaultButton;
|
||||||
|
QPointer<Ui::Radiobutton> chosenButton;
|
||||||
|
std::vector<QPointer<Ui::Radiobutton>> buttons;
|
||||||
};
|
};
|
||||||
const auto state = container->lifetime().make_state<State>(State{
|
const auto state = container->lifetime().make_state<State>(State{
|
||||||
std::make_shared<Ui::RadiobuttonGroup>(
|
std::make_shared<Ui::RadiobuttonGroup>(),
|
||||||
peer->owner().notifySettings().sound(peer).none
|
|
||||||
? kNoSoundValue
|
|
||||||
: kDefaultValue),
|
|
||||||
});
|
});
|
||||||
|
|
||||||
const auto addToGroup = [=](
|
const auto addToGroup = [=](
|
||||||
not_null<Ui::VerticalLayout*> verticalLayout,
|
not_null<Ui::VerticalLayout*> verticalLayout,
|
||||||
int value,
|
int value,
|
||||||
const QString &text) {
|
const QString &text,
|
||||||
|
bool chosen) {
|
||||||
|
if (chosen) {
|
||||||
|
state->group->setValue(value);
|
||||||
|
}
|
||||||
const auto button = verticalLayout->add(
|
const auto button = verticalLayout->add(
|
||||||
object_ptr<Ui::Radiobutton>(
|
object_ptr<Ui::Radiobutton>(
|
||||||
verticalLayout,
|
verticalLayout,
|
||||||
|
@ -75,11 +79,20 @@ void RingtonesBox(
|
||||||
text,
|
text,
|
||||||
st::defaultCheckbox),
|
st::defaultCheckbox),
|
||||||
padding);
|
padding);
|
||||||
|
if (chosen) {
|
||||||
|
state->chosenButton = button;
|
||||||
|
}
|
||||||
|
if (value == kDefaultValue) {
|
||||||
|
state->defaultButton = button;
|
||||||
|
}
|
||||||
if (value < 0) {
|
if (value < 0) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
while (state->buttons.size() <= value) {
|
||||||
|
state->buttons.push_back(nullptr);
|
||||||
|
}
|
||||||
base::install_event_filter(button, [=](not_null<QEvent*> e) {
|
base::install_event_filter(button, [=](not_null<QEvent*> e) {
|
||||||
if (state->menu || e->type() != QEvent::ContextMenu) {
|
if (e->type() != QEvent::ContextMenu || state->menu) {
|
||||||
return base::EventFilterResult::Continue;
|
return base::EventFilterResult::Continue;
|
||||||
}
|
}
|
||||||
state->menu = base::make_unique_q<Ui::PopupMenu>(
|
state->menu = base::make_unique_q<Ui::PopupMenu>(
|
||||||
|
@ -114,48 +127,48 @@ void RingtonesBox(
|
||||||
container,
|
container,
|
||||||
tr::lng_ringtones_box_cloud_subtitle());
|
tr::lng_ringtones_box_cloud_subtitle());
|
||||||
|
|
||||||
const auto emptyContent = box->addRow(
|
const auto noSound = peer->owner().notifySettings().sound(peer).none;
|
||||||
object_ptr<Ui::FixedHeightWidget>(container),
|
addToGroup(
|
||||||
style::margins());
|
container,
|
||||||
const auto scroll = Ui::CreateChild<Ui::ScrollArea>(
|
kDefaultValue,
|
||||||
emptyContent,
|
tr::lng_ringtones_box_default({}),
|
||||||
st::boxScroll);
|
false);
|
||||||
emptyContent->widthValue(
|
addToGroup(
|
||||||
) | rpl::start_with_next([=](int width) {
|
container,
|
||||||
scroll->resize(width, scroll->height());
|
kNoSoundValue,
|
||||||
}, emptyContent->lifetime());
|
tr::lng_ringtones_box_no_sound({}),
|
||||||
scroll->heightValue(
|
noSound);
|
||||||
) | rpl::start_with_next([=](int height) {
|
|
||||||
emptyContent->resize(emptyContent->width(), height);
|
|
||||||
}, scroll->lifetime());
|
|
||||||
|
|
||||||
{
|
const auto custom = container->add(
|
||||||
peer->session().api().ringtones().listUpdates(
|
object_ptr<Ui::VerticalLayout>(container));
|
||||||
) | rpl::start_with_next([=] {
|
|
||||||
state->documentIds.clear();
|
|
||||||
const auto list = scroll->setOwnedWidget(
|
|
||||||
object_ptr<Ui::VerticalLayout>(scroll));
|
|
||||||
list->sizeValue(
|
|
||||||
) | rpl::start_with_next([=](const QSize &s) {
|
|
||||||
scroll->resize(
|
|
||||||
scroll->width(),
|
|
||||||
std::min(s.height(), st::ringtonesBoxListHeight));
|
|
||||||
}, list->lifetime());
|
|
||||||
list->resize(scroll->size());
|
|
||||||
auto value = 0;
|
|
||||||
const auto checkedId = peer->owner().notifySettings().sound(peer);
|
|
||||||
for (const auto &id : peer->session().api().ringtones().list()) {
|
|
||||||
const auto document = peer->session().data().document(id);
|
|
||||||
addToGroup(list, value++, document->filename());
|
|
||||||
state->documentIds.push_back(id);
|
|
||||||
if (checkedId.id && checkedId.id == id) {
|
|
||||||
state->group->setValue(value - 1);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}, scroll->lifetime());
|
|
||||||
|
|
||||||
peer->session().api().ringtones().requestList();
|
const auto rebuild = [=] {
|
||||||
}
|
state->documentIds.clear();
|
||||||
|
auto value = 0;
|
||||||
|
while (custom->count()) {
|
||||||
|
delete custom->widgetAt(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
const auto checkedId = peer->owner().notifySettings().sound(peer);
|
||||||
|
for (const auto &id : peer->session().api().ringtones().list()) {
|
||||||
|
const auto chosen = (checkedId.id && checkedId.id == id);
|
||||||
|
const auto document = peer->session().data().document(id);
|
||||||
|
addToGroup(custom, value++, document->filename(), chosen);
|
||||||
|
state->documentIds.push_back(id);
|
||||||
|
}
|
||||||
|
|
||||||
|
custom->resizeToWidth(container->width());
|
||||||
|
if (!state->chosenButton) {
|
||||||
|
state->group->setValue(kDefaultValue);
|
||||||
|
state->defaultButton->finishAnimating();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
peer->session().api().ringtones().listUpdates(
|
||||||
|
) | rpl::start_with_next(rebuild, container->lifetime());
|
||||||
|
|
||||||
|
peer->session().api().ringtones().requestList();
|
||||||
|
rebuild();
|
||||||
|
|
||||||
const auto upload = box->addRow(
|
const auto upload = box->addRow(
|
||||||
Settings::CreateButton(
|
Settings::CreateButton(
|
||||||
|
@ -201,16 +214,7 @@ void RingtonesBox(
|
||||||
});
|
});
|
||||||
|
|
||||||
box->addSkip(st::ringtonesBoxSkip);
|
box->addSkip(st::ringtonesBoxSkip);
|
||||||
Settings::AddDivider(container);
|
Settings::AddDividerText(container, tr::lng_ringtones_box_about());
|
||||||
|
|
||||||
box->addSkip(st::ringtonesBoxSkip);
|
|
||||||
|
|
||||||
Settings::AddSubsectionTitle(
|
|
||||||
container,
|
|
||||||
tr::lng_ringtones_box_local_subtitle());
|
|
||||||
|
|
||||||
addToGroup(container, kDefaultValue, tr::lng_ringtones_box_default({}));
|
|
||||||
addToGroup(container, kNoSoundValue, tr::lng_ringtones_box_no_sound({}));
|
|
||||||
|
|
||||||
box->addSkip(st::ringtonesBoxSkip);
|
box->addSkip(st::ringtonesBoxSkip);
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue