Merge branch 'master' into development

This commit is contained in:
Florian Zevedei
2024-03-10 15:50:42 +01:00
committed by GitHub
16 changed files with 676 additions and 111 deletions
+17 -5
View File
@@ -398,30 +398,42 @@ public class BotBaseBuilder : IAPIKeySelectionStage, IMessageLoopSelectionStage,
#region "Step 7 (Language)"
public IThreadingStage DefaultLanguage()
/// <inheritdoc cref="ILanguageSelectionStage.DefaultLanguage"/>
public IBuildingStage DefaultLanguage()
{
return this;
}
public IThreadingStage UseEnglish()
/// <inheritdoc cref="ILanguageSelectionStage.UseEnglish"/>
public IBuildingStage UseEnglish()
{
Default.Language = new English();
return this;
}
public IThreadingStage UseGerman()
/// <inheritdoc cref="ILanguageSelectionStage.UseGerman"/>
public IBuildingStage UseGerman()
{
Default.Language = new German();
return this;
}
public IThreadingStage UsePersian()
/// <inheritdoc cref="ILanguageSelectionStage.UsePersian"/>
public IBuildingStage UsePersian()
{
Default.Language = new Persian();
return this;
}
public IThreadingStage Custom(Localization language)
/// <inheritdoc cref="ILanguageSelectionStage.UseRussian"/>
public IBuildingStage UseRussian()
{
Default.Language = new Russian();
return this;
}
/// <inheritdoc cref="ILanguageSelectionStage.Custom"/>
public IBuildingStage Custom(Localization language)
{
Default.Language = language;
return this;
@@ -2,35 +2,44 @@
namespace TelegramBotBase.Builder.Interfaces;
/// <summary>
/// Represents the language selection stage in the localization process.
/// </summary>
public interface ILanguageSelectionStage
{
/// <summary>
/// Selects the default language for control usage. (English)
/// </summary>
/// <returns></returns>
IThreadingStage DefaultLanguage();
/// <returns>The next stage in the building process.</returns>
IBuildingStage DefaultLanguage();
/// <summary>
/// Selects english as the default language for control labels.
/// </summary>
/// <returns></returns>
IThreadingStage UseEnglish();
/// <returns>The next stage in the building process.</returns>
IBuildingStage UseEnglish();
/// <summary>
/// Selects german as the default language for control labels.
/// </summary>
/// <returns></returns>
IThreadingStage UseGerman();
/// <returns>The next stage in the building process.</returns>
IBuildingStage UseGerman();
/// <summary>
/// Selects persian as the default language for control labels.
/// </summary>
/// <returns></returns>
IThreadingStage UsePersian();
/// <returns>The next stage in the building process.</returns>
IBuildingStage UsePersian();
/// <summary>
/// Selects russian as the default language for control labels.
/// </summary>
/// <returns>The next stage in the building process.</returns>
IBuildingStage UseRussian();
/// <summary>
/// Selects a custom language as the default language for control labels.
/// </summary>
/// <returns></returns>
IThreadingStage Custom(Localization language);
/// <returns>The next stage in the building process.</returns>
IBuildingStage Custom(Localization language);
}
@@ -426,8 +426,6 @@ public class ButtonGrid : ControlBase
return;
}
await result.ConfirmAction(ConfirmationText ?? "");
ButtonRow match = null;
var index = -1;
@@ -462,6 +460,8 @@ public class ButtonGrid : ControlBase
check:
if (match != null)
{
await result.ConfirmAction(ConfirmationText ?? "");
await OnButtonClicked(new ButtonClickedEventArgs(match.GetButtonMatch(result.RawData, false), index,
match));
@@ -29,8 +29,6 @@ public class TaggedButtonGrid : MultiView
public string BackLabel = Default.Language["ButtonGrid_Back"];
public string CheckAllLabel = Default.Language["ButtonGrid_CheckAll"];
public string NextPageLabel = Default.Language["ButtonGrid_NextPage"];
public string NoItemsLabel = Default.Language["ButtonGrid_NoItems"];
@@ -39,11 +37,17 @@ public class TaggedButtonGrid : MultiView
public string SearchLabel = Default.Language["ButtonGrid_SearchFeature"];
public string UncheckAllLabel = Default.Language["ButtonGrid_UncheckAll"];
public string TotalTagsLabel = Default.Language["TaggedButtonGrid_TotalTags"];
public string CheckedTagsLabel = Default.Language["TaggedButtonGrid_CheckedTags"];
public string CheckAllLabel = Default.Language["TaggedButtonGrid_CheckAll"];
public string UncheckAllLabel = Default.Language["TaggedButtonGrid_UncheckAll"];
public string SearchIcon = Default.Language["ButtonGrid_SearchIcon"];
public string TagIcon = Default.Language["ButtonGrid_TagIcon"];
public string TagIcon = Default.Language["TaggedButtonGrid_TagIcon"];
public TaggedButtonGrid()
{
@@ -379,14 +383,6 @@ public class TaggedButtonGrid : MultiView
index = br.Item2;
}
//var button = HeadLayoutButtonRow?. .FirstOrDefault(a => a.Text.Trim() == result.MessageText)
// ?? SubHeadLayoutButtonRow?.FirstOrDefault(a => a.Text.Trim() == result.MessageText);
// bf.ToList().FirstOrDefault(a => a.Text.Trim() == result.MessageText)
//var index = bf.FindRowByButton(button);
check:
@@ -490,10 +486,16 @@ public class TaggedButtonGrid : MultiView
if (result.MessageText == CheckAllLabel)
{
CheckAllTags();
Updated();
result.Handled = true;
return;
}
else if (result.MessageText == UncheckAllLabel)
{
UncheckAllTags();
Updated();
result.Handled = true;
return;
}
var i = result.MessageText.LastIndexOf(" ");
@@ -569,15 +571,6 @@ public class TaggedButtonGrid : MultiView
index = br.Item2;
}
//var bf = DataSource.ButtonForm;
//var button = HeadLayoutButtonRow?.FirstOrDefault(a => a.Value == result.RawData)
// ?? SubHeadLayoutButtonRow?.FirstOrDefault(a => a.Value == result.RawData)
// ?? bf.ToList().FirstOrDefault(a => a.Value == result.RawData);
//var index = bf.FindRowByButton(button);
check:
if (match != null)
{
@@ -619,22 +612,47 @@ public class TaggedButtonGrid : MultiView
break;
case "$back$":
SelectedViewIndex = 0;
default:
if (SelectedViewIndex != 1)
return;
switch (result.RawData)
{
case "$back$":
SelectedViewIndex = 0;
Updated();
return;
case "$checkall$":
CheckAllTags();
return;
case "$uncheckall$":
UncheckAllTags();
return;
}
if (SelectedTags.Contains(result.RawData))
{
SelectedTags.Remove(result.RawData);
}
else
{
SelectedTags.Add(result.RawData);
}
Updated();
break;
case "$checkall$":
CheckAllTags();
break;
case "$uncheckall$":
UncheckAllTags();
break;
}
@@ -723,8 +741,10 @@ public class TaggedButtonGrid : MultiView
if (EnableCheckAllTools)
{
TagsSubHeadLayoutButtonRow = new ButtonRow(new ButtonBase(CheckAllLabel, "$checkall$"),
new ButtonBase(UncheckAllLabel, "$uncheckall$"));
TagsSubHeadLayoutButtonRow = new ButtonRow(new ButtonBase(string.Format(TotalTagsLabel, Tags.Count), "$total$"),
new ButtonBase(CheckAllLabel, "$checkall$"),
new ButtonBase(UncheckAllLabel, "$uncheckall$"),
new ButtonBase(string.Format(CheckedTagsLabel, SelectedTags.Count), "checked$"));
bf.AddButtonRow(TagsSubHeadLayoutButtonRow);
}
@@ -756,10 +776,6 @@ public class TaggedButtonGrid : MultiView
return;
}
//if (bf.Count == 0)
// return;
var rkm = (ReplyKeyboardMarkup)bf;
rkm.ResizeKeyboard = ResizeKeyboard;
rkm.OneTimeKeyboard = OneTimeKeyboard;
@@ -881,21 +897,20 @@ public class TaggedButtonGrid : MultiView
{
Message m = null;
var form = DataSource.PickItems(CurrentPageIndex * ItemRowsPerPage, ItemRowsPerPage,
EnableSearch ? SearchQuery : null);
//if (this.EnableSearch && this.SearchQuery != null && this.SearchQuery != "")
//{
// form = form.FilterDuplicate(this.SearchQuery, true);
//}
//else
//{
// form = form.Duplicate();
//}
ButtonForm form = null;
if (Tags != null && SelectedTags != null)
{
form = DataSource.PickAllItems(EnableSearch ? SearchQuery : null); //CurrentPageIndex * ItemRowsPerPage, ItemRowsPerPage,
form = form.TagDuplicate(SelectedTags);
form = new ButtonForm(form.ToRowList().Skip(CurrentPageIndex * ItemRowsPerPage).Take(ItemRowsPerPage));
}
else
{
form = DataSource.PickItems(CurrentPageIndex * ItemRowsPerPage, ItemRowsPerPage,
EnableSearch ? SearchQuery : null);
}
if (EnablePaging)
+10
View File
@@ -23,6 +23,11 @@ public class ButtonForm
DependencyControl = control;
}
public ButtonForm(IEnumerable<ButtonRow> rows)
{
_buttons = rows.ToList();
}
public IReplyMarkup Markup { get; set; }
@@ -149,6 +154,11 @@ public class ButtonForm
.Aggregate((a, b) => a.Union(b).ToList());
}
public List<ButtonRow> ToRowList()
{
return _buttons;
}
public InlineKeyboardButton[][] ToInlineButtonArray()
{
var ikb = _buttons.Select(a => a.ToArray().Select(b => b.ToInlineButton(this)).ToArray()).ToArray();
+5 -3
View File
@@ -12,8 +12,10 @@ public sealed class English : Localization
Values["ButtonGrid_CurrentPage"] = "Page {0} of {1}";
Values["ButtonGrid_SearchFeature"] = "💡 Send a message to filter the list. Click the 🔍 to reset the filter.";
Values["ButtonGrid_Back"] = "Back";
Values["ButtonGrid_CheckAll"] = "Check all";
Values["ButtonGrid_UncheckAll"] = "Uncheck all";
Values["TaggedButtonGrid_TotalTags"] = "Total: {0}";
Values["TaggedButtonGrid_CheckedTags"] = "Checked: {0}";
Values["TaggedButtonGrid_CheckAll"] = "Check all";
Values["TaggedButtonGrid_UncheckAll"] = "Uncheck all";
Values["CalendarPicker_Title"] = "Pick date";
Values["CalendarPicker_PreviousPage"] = "◀️";
Values["CalendarPicker_NextPage"] = "▶️";
@@ -31,6 +33,6 @@ public sealed class English : Localization
Values["PromptDialog_Back"] = "Back";
Values["ToggleButton_Changed"] = "Setting changed";
Values["ButtonGrid_SearchIcon"] = "🔍";
Values["ButtonGrid_TagIcon"] = "📁";
Values["TaggedButtonGrid_TagIcon"] = "📁";
}
}
+7 -4
View File
@@ -10,11 +10,12 @@ public sealed class German : Localization
Values["ButtonGrid_PreviousPage"] = "◀️";
Values["ButtonGrid_NextPage"] = "▶️";
Values["ButtonGrid_CurrentPage"] = "Seite {0} von {1}";
Values["ButtonGrid_SearchFeature"] =
"💡 Sende eine Nachricht um die Liste zu filtern. Klicke die 🔍 um den Filter zurückzusetzen.";
Values["ButtonGrid_SearchFeature"] = "💡 Sende eine Nachricht um die Liste zu filtern. Klicke die 🔍 um den Filter zurückzusetzen.";
Values["ButtonGrid_Back"] = "Zurück";
Values["ButtonGrid_CheckAll"] = "Alle auswählen";
Values["ButtonGrid_UncheckAll"] = "Keine auswählen";
Values["TaggedButtonGrid_TotalTags"] = "Gesamt: {0}";
Values["TaggedButtonGrid_CheckedTags"] = "Ausgewählt: {0}";
Values["TaggedButtonGrid_CheckAll"] = "Alle auswählen";
Values["TaggedButtonGrid_UncheckAll"] = "Keine auswählen";
Values["CalendarPicker_Title"] = "Datum auswählen";
Values["CalendarPicker_PreviousPage"] = "◀️";
Values["CalendarPicker_NextPage"] = "▶️";
@@ -31,5 +32,7 @@ public sealed class German : Localization
Values["MultiToggleButton_Changed"] = "Ausgewählt";
Values["PromptDialog_Back"] = "Zurück";
Values["ToggleButton_Changed"] = "Einstellung geändert";
Values["ButtonGrid_SearchIcon"] = "🔍";
Values["TaggedButtonGrid_TagIcon"] = "📁";
}
}
+35 -33
View File
@@ -1,37 +1,39 @@
namespace TelegramBotBase.Localizations
namespace TelegramBotBase.Localizations;
public sealed class Persian : Localization
{
public sealed class Persian : Localization
public Persian()
{
public Persian()
{
Values["Language"] = "فارسی";
Values["ButtonGrid_Title"] = "منو";
Values["ButtonGrid_NoItems"] = "هیچ آیتمی وجود ندارد.";
Values["ButtonGrid_PreviousPage"] = "◀️";
Values["ButtonGrid_NextPage"] = "▶️";
Values["ButtonGrid_CurrentPage"] = "صفحه ی {0} از {1}";
Values["ButtonGrid_SearchFeature"] = "💡 برای فیلتر کردن لیست پیام ارسال کنید. برای بازنشانی فیلتر روی 🔍 کلیک کنید.";
Values["ButtonGrid_Back"] = "بازگشت";
Values["ButtonGrid_CheckAll"] = "بررسی کردن همه";
Values["ButtonGrid_UncheckAll"] = "بررسی نکردن همه";
Values["CalendarPicker_Title"] = "تاریخ را انتخاب کنید";
Values["CalendarPicker_PreviousPage"] = "◀️";
Values["CalendarPicker_NextPage"] = "▶️";
Values["TreeView_Title"] = "گره را انتخاب کنید";
Values["TreeView_LevelUp"] = "🔼 سطح بالا";
Values["ToggleButton_On"] = "روشن";
Values["ToggleButton_Off"] = "خاموش";
Values["ToggleButton_OnIcon"] = "⚫";
Values["ToggleButton_OffIcon"] = "⚪";
Values["ToggleButton_Title"] = "تغییر وضعیت";
Values["ToggleButton_Changed"] = "انتخاب شده";
Values["MultiToggleButton_SelectedIcon"] = "✅";
Values["MultiToggleButton_Title"] = "چند تعویض";
Values["MultiToggleButton_Changed"] = "انتخاب شده";
Values["PromptDialog_Back"] = "بازگشت";
Values["ToggleButton_Changed"] = "تنظیمات تغییر کرد";
Values["ButtonGrid_SearchIcon"] = "🔍";
Values["ButtonGrid_TagIcon"] = "📁";
}
Values["Language"] = "فارسی";
Values["ButtonGrid_Title"] = "منو";
Values["ButtonGrid_NoItems"] = "هیچ آیتمی وجود ندارد.";
Values["ButtonGrid_PreviousPage"] = "◀️";
Values["ButtonGrid_NextPage"] = "▶️";
Values["ButtonGrid_CurrentPage"] = "صفحه ی {0} از {1}";
Values["ButtonGrid_SearchFeature"] = "💡 برای فیلتر کردن لیست پیام ارسال کنید. برای بازنشانی فیلتر روی 🔍 کلیک کنید.";
Values["ButtonGrid_Back"] = "بازگشت";
Values["TaggedButtonGrid_TotalTags"] = "Total: {0}";
Values["TaggedButtonGrid_CheckedTags"] = "Checked: {0}";
Values["TaggedButtonGrid_CheckAll"] = "بررسی کردن همه";
Values["TaggedButtonGrid_UncheckAll"] = "بررسی نکردن همه";
Values["CalendarPicker_Title"] = "تاریخ را انتخاب کنید";
Values["CalendarPicker_PreviousPage"] = "◀️";
Values["CalendarPicker_NextPage"] = "▶️";
Values["TreeView_Title"] = "گره را انتخاب کنید";
Values["TreeView_LevelUp"] = "🔼 سطح بالا";
Values["ToggleButton_On"] = "روشن";
Values["ToggleButton_Off"] = "خاموش";
Values["ToggleButton_OnIcon"] = "⚫";
Values["ToggleButton_OffIcon"] = "⚪";
Values["ToggleButton_Title"] = "تغییر وضعیت";
Values["ToggleButton_Changed"] = "انتخاب شده";
Values["MultiToggleButton_SelectedIcon"] = "✅";
Values["MultiToggleButton_Title"] = "چند تعویض";
Values["MultiToggleButton_Changed"] = "انتخاب شده";
Values["PromptDialog_Back"] = "بازگشت";
Values["ToggleButton_Changed"] = "تنظیمات تغییر کرد";
Values["ButtonGrid_SearchIcon"] = "🔍";
Values["TaggedButtonGrid_TagIcon"] = "📁";
}
}
+38
View File
@@ -0,0 +1,38 @@
namespace TelegramBotBase.Localizations;
public sealed class Russian : Localization
{
public Russian()
{
Values["Language"] = "Русский (Russian)";
Values["ButtonGrid_Title"] = "Меню";
Values["ButtonGrid_NoItems"] = "Нет доступных элементов.";
Values["ButtonGrid_PreviousPage"] = "◀️";
Values["ButtonGrid_NextPage"] = "▶️";
Values["ButtonGrid_CurrentPage"] = "Страница {0} из {1}";
Values["ButtonGrid_SearchFeature"] = "💡 Отправьте сообщение, чтобы отфильтровать список. Нажмите на 🔍, чтобы сбросить фильтр.";
Values["ButtonGrid_Back"] = "Назад";
Values["TaggedButtonGrid_TotalTags"] = "Всего: {0}";
Values["TaggedButtonGrid_CheckedTags"] = "Отмечено: {0}";
Values["TaggedButtonGrid_CheckAll"] = "Выделить все";
Values["TaggedButtonGrid_UncheckAll"] = "Отменить выбор";
Values["CalendarPicker_Title"] = "Календарь / Выберите дату";
Values["CalendarPicker_PreviousPage"] = "◀️";
Values["CalendarPicker_NextPage"] = "▶️";
Values["TreeView_Title"] = "Выберите пункт";
Values["TreeView_LevelUp"] = "🔼 Обратно";
Values["ToggleButton_On"] = "Вкл";
Values["ToggleButton_Off"] = "Выкл";
Values["ToggleButton_OnIcon"] = "⚫";
Values["ToggleButton_OffIcon"] = "⚪";
Values["ToggleButton_Title"] = "Переключить";
Values["ToggleButton_Changed"] = "Выбрано";
Values["MultiToggleButton_SelectedIcon"] = "✅";
Values["MultiToggleButton_Title"] = "Множественный выбор";
Values["MultiToggleButton_Changed"] = "Выбрано";
Values["PromptDialog_Back"] = "Назад";
Values["ToggleButton_Changed"] = "Настройки изменены";
Values["ButtonGrid_SearchIcon"] = "🔍";
Values["TaggedButtonGrid_TagIcon"] = "📁";
}
}