fix: some build & linter warnings

This commit is contained in:
ZavaruKitsu
2022-10-08 19:15:51 +03:00
parent 3f0d109fe2
commit a731e2a8d0
159 changed files with 2738 additions and 3742 deletions
@@ -2,18 +2,17 @@
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using TelegramBotBase.Base;
using TelegramBotBase.Enums;
using TelegramBotBase.Form;
using TelegramBotBase.Tools;
using TelegramBotBase.Localizations;
using static TelegramBotBase.Tools.Arrays;
using static TelegramBotBase.Tools.Time;
namespace TelegramBotBase.Controls.Inline
{
public class CalendarPicker : Base.ControlBase
public class CalendarPicker : ControlBase
{
public DateTime SelectedDate { get; set; }
@@ -27,31 +26,31 @@ namespace TelegramBotBase.Controls.Inline
private int? MessageId { get; set; }
public String Title { get; set; } = Localizations.Default.Language["CalendarPicker_Title"];
public string Title { get; set; } = Default.Language["CalendarPicker_Title"];
public eMonthPickerMode PickerMode { get; set; }
public EMonthPickerMode PickerMode { get; set; }
public bool EnableDayView { get; set; } = true;
public bool EnableMonthView { get; set; } = true;
public bool EnableYearView { get; set; } = true;
public CalendarPicker(CultureInfo culture)
{
this.SelectedDate = DateTime.Today;
this.VisibleMonth = DateTime.Today;
this.FirstDayOfWeek = DayOfWeek.Monday;
this.Culture = culture;
this.PickerMode = eMonthPickerMode.day;
SelectedDate = DateTime.Today;
VisibleMonth = DateTime.Today;
FirstDayOfWeek = DayOfWeek.Monday;
Culture = culture;
PickerMode = EMonthPickerMode.day;
}
public CalendarPicker() : this(new CultureInfo("en-en")) { }
public override async Task Action(MessageResult result, String value = null)
public override async Task Action(MessageResult result, string value = null)
{
await result.ConfirmAction();
@@ -59,99 +58,84 @@ namespace TelegramBotBase.Controls.Inline
{
case "$next$":
switch (this.PickerMode)
VisibleMonth = PickerMode switch
{
case eMonthPickerMode.day:
this.VisibleMonth = this.VisibleMonth.AddMonths(1);
break;
case eMonthPickerMode.month:
this.VisibleMonth = this.VisibleMonth.AddYears(1);
break;
case eMonthPickerMode.year:
this.VisibleMonth = this.VisibleMonth.AddYears(10);
break;
}
EMonthPickerMode.day => VisibleMonth.AddMonths(1),
EMonthPickerMode.month => VisibleMonth.AddYears(1),
EMonthPickerMode.year => VisibleMonth.AddYears(10),
_ => VisibleMonth
};
break;
case "$prev$":
switch (this.PickerMode)
VisibleMonth = PickerMode switch
{
case eMonthPickerMode.day:
this.VisibleMonth = this.VisibleMonth.AddMonths(-1);
break;
case eMonthPickerMode.month:
this.VisibleMonth = this.VisibleMonth.AddYears(-1);
break;
case eMonthPickerMode.year:
this.VisibleMonth = this.VisibleMonth.AddYears(-10);
break;
}
EMonthPickerMode.day => VisibleMonth.AddMonths(-1),
EMonthPickerMode.month => VisibleMonth.AddYears(-1),
EMonthPickerMode.year => VisibleMonth.AddYears(-10),
_ => VisibleMonth
};
break;
case "$monthtitle$":
if (this.EnableMonthView)
if (EnableMonthView)
{
this.PickerMode = eMonthPickerMode.month;
PickerMode = EMonthPickerMode.month;
}
break;
case "$yeartitle$":
if (this.EnableYearView)
if (EnableYearView)
{
this.PickerMode = eMonthPickerMode.year;
PickerMode = EMonthPickerMode.year;
}
break;
case "$yearstitle$":
if (this.EnableMonthView)
if (EnableMonthView)
{
this.PickerMode = eMonthPickerMode.month;
PickerMode = EMonthPickerMode.month;
}
this.VisibleMonth = this.SelectedDate;
VisibleMonth = SelectedDate;
break;
default:
int day = 0;
if (result.RawData.StartsWith("d-") && TryParseDay(result.RawData.Split('-')[1], this.SelectedDate, out day))
var day = 0;
if (result.RawData.StartsWith("d-") && TryParseDay(result.RawData.Split('-')[1], SelectedDate, out day))
{
this.SelectedDate = new DateTime(this.VisibleMonth.Year, this.VisibleMonth.Month, day);
SelectedDate = new DateTime(VisibleMonth.Year, VisibleMonth.Month, day);
}
int month = 0;
var month = 0;
if (result.RawData.StartsWith("m-") && TryParseMonth(result.RawData.Split('-')[1], out month))
{
this.SelectedDate = new DateTime(this.VisibleMonth.Year, month, 1);
this.VisibleMonth = this.SelectedDate;
SelectedDate = new DateTime(VisibleMonth.Year, month, 1);
VisibleMonth = SelectedDate;
if (this.EnableDayView)
if (EnableDayView)
{
this.PickerMode = eMonthPickerMode.day;
PickerMode = EMonthPickerMode.day;
}
}
int year = 0;
var year = 0;
if (result.RawData.StartsWith("y-") && TryParseYear(result.RawData.Split('-')[1], out year))
{
this.SelectedDate = new DateTime(year, SelectedDate.Month, SelectedDate.Day);
this.VisibleMonth = this.SelectedDate;
SelectedDate = new DateTime(year, SelectedDate.Month, SelectedDate.Day);
VisibleMonth = SelectedDate;
if (this.EnableMonthView)
if (EnableMonthView)
{
this.PickerMode = eMonthPickerMode.month;
PickerMode = EMonthPickerMode.month;
}
}
@@ -170,18 +154,18 @@ namespace TelegramBotBase.Controls.Inline
ButtonForm bf = new ButtonForm();
var bf = new ButtonForm();
switch (this.PickerMode)
switch (PickerMode)
{
case eMonthPickerMode.day:
case EMonthPickerMode.day:
var month = this.VisibleMonth;
var month = VisibleMonth;
string[] dayNamesNormal = this.Culture.DateTimeFormat.ShortestDayNames;
string[] dayNamesShifted = Shift(dayNamesNormal, (int)this.FirstDayOfWeek);
var dayNamesNormal = Culture.DateTimeFormat.ShortestDayNames;
var dayNamesShifted = Shift(dayNamesNormal, (int)FirstDayOfWeek);
bf.AddButtonRow(new ButtonBase(Localizations.Default.Language["CalendarPicker_PreviousPage"], "$prev$"), new ButtonBase(this.Culture.DateTimeFormat.MonthNames[month.Month - 1] + " " + month.Year.ToString(), "$monthtitle$"), new ButtonBase(Localizations.Default.Language["CalendarPicker_NextPage"], "$next$"));
bf.AddButtonRow(new ButtonBase(Default.Language["CalendarPicker_PreviousPage"], "$prev$"), new ButtonBase(Culture.DateTimeFormat.MonthNames[month.Month - 1] + " " + month.Year, "$monthtitle$"), new ButtonBase(Default.Language["CalendarPicker_NextPage"], "$next$"));
bf.AddButtonRow(dayNamesShifted.Select(a => new ButtonBase(a, a)).ToList());
@@ -192,20 +176,20 @@ namespace TelegramBotBase.Controls.Inline
var lastDay = firstDay.LastDayOfMonth();
//Start of Week where first day of month is (left border)
var start = firstDay.StartOfWeek(this.FirstDayOfWeek);
var start = firstDay.StartOfWeek(FirstDayOfWeek);
//End of week where last day of month is (right border)
var end = lastDay.EndOfWeek(this.FirstDayOfWeek);
var end = lastDay.EndOfWeek(FirstDayOfWeek);
for (int i = 0; i <= ((end - start).Days / 7); i++)
for (var i = 0; i <= ((end - start).Days / 7); i++)
{
var lst = new List<ButtonBase>();
for (int id = 0; id < 7; id++)
for (var id = 0; id < 7; id++)
{
var d = start.AddDays((i * 7) + id);
if (d < firstDay | d > lastDay)
{
lst.Add(new ButtonBase("-", "m-" + d.Day.ToString()));
lst.Add(new ButtonBase("-", "m-" + d.Day));
continue;
}
@@ -216,35 +200,35 @@ namespace TelegramBotBase.Controls.Inline
day = "(" + day + ")";
}
lst.Add(new ButtonBase((this.SelectedDate == d ? "[" + day + "]" : day), "d-" + d.Day.ToString()));
lst.Add(new ButtonBase((SelectedDate == d ? "[" + day + "]" : day), "d-" + d.Day));
}
bf.AddButtonRow(lst);
}
break;
case eMonthPickerMode.month:
case EMonthPickerMode.month:
bf.AddButtonRow(new ButtonBase(Localizations.Default.Language["CalendarPicker_PreviousPage"], "$prev$"), new ButtonBase(this.VisibleMonth.Year.ToString("0000"), "$yeartitle$"), new ButtonBase(Localizations.Default.Language["CalendarPicker_NextPage"], "$next$"));
bf.AddButtonRow(new ButtonBase(Default.Language["CalendarPicker_PreviousPage"], "$prev$"), new ButtonBase(VisibleMonth.Year.ToString("0000"), "$yeartitle$"), new ButtonBase(Default.Language["CalendarPicker_NextPage"], "$next$"));
var months = this.Culture.DateTimeFormat.MonthNames;
var months = Culture.DateTimeFormat.MonthNames;
var buttons = months.Select((a, b) => new ButtonBase((b == this.SelectedDate.Month - 1 && this.SelectedDate.Year == this.VisibleMonth.Year ? "[ " + a + " ]" : a), "m-" + (b + 1).ToString()));
var buttons = months.Select((a, b) => new ButtonBase((b == SelectedDate.Month - 1 && SelectedDate.Year == VisibleMonth.Year ? "[ " + a + " ]" : a), "m-" + (b + 1)));
bf.AddSplitted(buttons, 2);
bf.AddSplitted(buttons);
break;
case eMonthPickerMode.year:
case EMonthPickerMode.year:
bf.AddButtonRow(new ButtonBase(Localizations.Default.Language["CalendarPicker_PreviousPage"], "$prev$"), new ButtonBase("Year", "$yearstitle$"), new ButtonBase(Localizations.Default.Language["CalendarPicker_NextPage"], "$next$"));
bf.AddButtonRow(new ButtonBase(Default.Language["CalendarPicker_PreviousPage"], "$prev$"), new ButtonBase("Year", "$yearstitle$"), new ButtonBase(Default.Language["CalendarPicker_NextPage"], "$next$"));
var starti = Math.Floor(this.VisibleMonth.Year / 10f) * 10;
var starti = Math.Floor(VisibleMonth.Year / 10f) * 10;
for (int i = 0; i < 10; i++)
for (var i = 0; i < 10; i++)
{
var m = starti + (i * 2);
bf.AddButtonRow(new ButtonBase((this.SelectedDate.Year == m ? "[ " + m.ToString() + " ]" : m.ToString()), "y-" + m.ToString()), new ButtonBase((this.SelectedDate.Year == (m + 1) ? "[ " + (m + 1).ToString() + " ]" : (m + 1).ToString()), "y-" + (m + 1).ToString()));
bf.AddButtonRow(new ButtonBase((SelectedDate.Year == m ? "[ " + m + " ]" : m.ToString()), "y-" + m), new ButtonBase((SelectedDate.Year == (m + 1) ? "[ " + (m + 1) + " ]" : (m + 1).ToString()), "y-" + (m + 1)));
}
break;
@@ -252,14 +236,14 @@ namespace TelegramBotBase.Controls.Inline
}
if (this.MessageId != null)
if (MessageId != null)
{
var m = await this.Device.Edit(this.MessageId.Value, this.Title, bf);
var m = await Device.Edit(MessageId.Value, Title, bf);
}
else
{
var m = await this.Device.Send(this.Title, bf);
this.MessageId = m.MessageId;
var m = await Device.Send(Title, bf);
MessageId = m.MessageId;
}
}
@@ -268,9 +252,9 @@ namespace TelegramBotBase.Controls.Inline
public override async Task Cleanup()
{
if (this.MessageId != null)
if (MessageId != null)
{
await this.Device.DeleteMessage(this.MessageId.Value);
await Device.DeleteMessage(MessageId.Value);
}
}
+3 -11
View File
@@ -1,12 +1,4 @@
using System;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using TelegramBotBase.Base;
using TelegramBotBase.Enums;
using TelegramBotBase.Form;
using TelegramBotBase.Enums;
namespace TelegramBotBase.Controls.Inline
{
@@ -17,8 +9,8 @@ namespace TelegramBotBase.Controls.Inline
public MonthPicker()
{
this.PickerMode = eMonthPickerMode.month;
this.EnableDayView = false;
PickerMode = EMonthPickerMode.month;
EnableDayView = false;
}
@@ -1,11 +1,10 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using TelegramBotBase.Base;
using TelegramBotBase.Form;
using TelegramBotBase.Localizations;
namespace TelegramBotBase.Controls.Inline
{
@@ -14,25 +13,25 @@ namespace TelegramBotBase.Controls.Inline
/// <summary>
/// This contains the selected icon.
/// </summary>
public String SelectedIcon { get; set; } = Localizations.Default.Language["MultiToggleButton_SelectedIcon"];
public string SelectedIcon { get; set; } = Default.Language["MultiToggleButton_SelectedIcon"];
/// <summary>
/// This will appear on the ConfirmAction message (if not empty)
/// </summary>
public String ChangedString { get; set; } = Localizations.Default.Language["MultiToggleButton_Changed"];
public string ChangedString { get; set; } = Default.Language["MultiToggleButton_Changed"];
/// <summary>
/// This holds the title of the control.
/// </summary>
public String Title { get; set; } = Localizations.Default.Language["MultiToggleButton_Title"];
public string Title { get; set; } = Default.Language["MultiToggleButton_Title"];
public int? MessageId { get; set; }
private bool RenderNecessary = true;
private bool _renderNecessary = true;
private static readonly object __evToggled = new object();
private static readonly object EvToggled = new object();
private readonly EventHandlerList Events = new EventHandlerList();
private readonly EventHandlerList _events = new EventHandlerList();
/// <summary>
/// This will hold all options available.
@@ -52,27 +51,21 @@ namespace TelegramBotBase.Controls.Inline
public event EventHandler Toggled
{
add
{
this.Events.AddHandler(__evToggled, value);
}
remove
{
this.Events.RemoveHandler(__evToggled, value);
}
add => _events.AddHandler(EvToggled, value);
remove => _events.RemoveHandler(EvToggled, value);
}
public void OnToggled(EventArgs e)
{
(this.Events[__evToggled] as EventHandler)?.Invoke(this, e);
(_events[EvToggled] as EventHandler)?.Invoke(this, e);
}
public override async Task Action(MessageResult result, String value = null)
public override async Task Action(MessageResult result, string value = null)
{
if (result.Handled)
return;
await result.ConfirmAction(this.ChangedString);
await result.ConfirmAction(ChangedString);
switch (value ?? "unknown")
{
@@ -82,30 +75,30 @@ namespace TelegramBotBase.Controls.Inline
if (s[0] == "check" && s.Length > 1)
{
int index = 0;
var index = 0;
if (!int.TryParse(s[1], out index))
{
return;
}
if(SelectedOption== null || SelectedOption != this.Options[index])
if(SelectedOption== null || SelectedOption != Options[index])
{
this.SelectedOption = this.Options[index];
OnToggled(new EventArgs());
SelectedOption = Options[index];
OnToggled(EventArgs.Empty);
}
else if(this.AllowEmptySelection)
else if(AllowEmptySelection)
{
this.SelectedOption = null;
OnToggled(new EventArgs());
SelectedOption = null;
OnToggled(EventArgs.Empty);
}
RenderNecessary = true;
_renderNecessary = true;
return;
}
RenderNecessary = false;
_renderNecessary = false;
break;
@@ -117,16 +110,16 @@ namespace TelegramBotBase.Controls.Inline
public override async Task Render(MessageResult result)
{
if (!RenderNecessary)
if (!_renderNecessary)
return;
var bf = new ButtonForm(this);
var lst = new List<ButtonBase>();
foreach (var o in this.Options)
foreach (var o in Options)
{
var index = this.Options.IndexOf(o);
if (o == this.SelectedOption)
var index = Options.IndexOf(o);
if (o == SelectedOption)
{
lst.Add(new ButtonBase(SelectedIcon + " " + o.Text, "check$" + index));
continue;
@@ -137,20 +130,20 @@ namespace TelegramBotBase.Controls.Inline
bf.AddButtonRow(lst);
if (this.MessageId != null)
if (MessageId != null)
{
var m = await this.Device.Edit(this.MessageId.Value, this.Title, bf);
var m = await Device.Edit(MessageId.Value, Title, bf);
}
else
{
var m = await this.Device.Send(this.Title, bf, disableNotification: true);
var m = await Device.Send(Title, bf, disableNotification: true);
if (m != null)
{
this.MessageId = m.MessageId;
MessageId = m.MessageId;
}
}
this.RenderNecessary = false;
_renderNecessary = false;
}
+90 -119
View File
@@ -1,7 +1,4 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using TelegramBotBase.Base;
@@ -10,9 +7,9 @@ namespace TelegramBotBase.Controls.Inline
/// <summary>
/// A simple control for show and managing progress.
/// </summary>
public class ProgressBar : Base.ControlBase
public class ProgressBar : ControlBase
{
public enum eProgressStyle
public enum EProgressStyle
{
standard = 0,
squares = 1,
@@ -22,104 +19,78 @@ namespace TelegramBotBase.Controls.Inline
custom = 10
}
public eProgressStyle ProgressStyle
public EProgressStyle ProgressStyle
{
get
{
return m_eStyle;
}
get => _mEStyle;
set
{
m_eStyle = value;
_mEStyle = value;
LoadStyle();
}
}
private eProgressStyle m_eStyle = eProgressStyle.standard;
private EProgressStyle _mEStyle = EProgressStyle.standard;
public int Value
{
get
{
return this.m_iValue;
}
get => _mIValue;
set
{
if (value > this.Max)
if (value > Max)
{
return;
}
if (this.m_iValue != value)
if (_mIValue != value)
{
this.RenderNecessary = true;
RenderNecessary = true;
}
this.m_iValue = value;
_mIValue = value;
}
}
private int m_iValue = 0;
private int _mIValue;
public int Max
{
get
{
return this.m_iMax;
}
get => _mIMax;
set
{
if (this.m_iMax != value)
if (_mIMax != value)
{
this.RenderNecessary = true;
RenderNecessary = true;
}
this.m_iMax = value;
_mIMax = value;
}
}
private int m_iMax = 100;
private int _mIMax = 100;
public int? MessageId { get; set; }
private bool RenderNecessary { get; set; } = false;
private bool RenderNecessary { get; set; }
public int Steps
{
get
{
switch (this.ProgressStyle)
return ProgressStyle switch
{
case eProgressStyle.standard:
return 1;
case eProgressStyle.squares:
return 10;
case eProgressStyle.circles:
return 10;
case eProgressStyle.lines:
return 5;
case eProgressStyle.squaredLines:
return 5;
default:
return 1;
}
EProgressStyle.standard => 1,
EProgressStyle.squares => 10,
EProgressStyle.circles => 10,
EProgressStyle.lines => 5,
EProgressStyle.squaredLines => 5,
_ => 1
};
}
}
/// <summary>
/// Filled block (reached percentage)
/// </summary>
public String BlockChar
public string BlockChar
{
get; set;
}
@@ -127,7 +98,7 @@ namespace TelegramBotBase.Controls.Inline
/// <summary>
/// Unfilled block (not reached yet)
/// </summary>
public String EmptyBlockChar
public string EmptyBlockChar
{
get; set;
}
@@ -135,7 +106,7 @@ namespace TelegramBotBase.Controls.Inline
/// <summary>
/// String at the beginning of the progress bar
/// </summary>
public String StartChar
public string StartChar
{
get; set;
}
@@ -143,133 +114,133 @@ namespace TelegramBotBase.Controls.Inline
/// <summary>
/// String at the end of the progress bar
/// </summary>
public String EndChar
public string EndChar
{
get; set;
}
public ProgressBar()
{
this.ProgressStyle = eProgressStyle.standard;
ProgressStyle = EProgressStyle.standard;
this.Value = 0;
this.Max = 100;
Value = 0;
Max = 100;
this.RenderNecessary = true;
RenderNecessary = true;
}
public ProgressBar(int Value, int Max, eProgressStyle Style)
public ProgressBar(int value, int max, EProgressStyle style)
{
this.Value = Value;
this.Max = Max;
this.ProgressStyle = Style;
this.Value = value;
this.Max = max;
ProgressStyle = style;
this.RenderNecessary = true;
RenderNecessary = true;
}
public override async Task Cleanup()
{
if (this.MessageId == null || this.MessageId == -1)
if (MessageId == null || MessageId == -1)
return;
await this.Device.DeleteMessage(this.MessageId.Value);
await Device.DeleteMessage(MessageId.Value);
}
public void LoadStyle()
{
this.StartChar = "";
this.EndChar = "";
StartChar = "";
EndChar = "";
switch (this.ProgressStyle)
switch (ProgressStyle)
{
case eProgressStyle.circles:
case EProgressStyle.circles:
this.BlockChar = "⚫️ ";
this.EmptyBlockChar = "⚪️ ";
BlockChar = "⚫️ ";
EmptyBlockChar = "⚪️ ";
break;
case eProgressStyle.squares:
case EProgressStyle.squares:
this.BlockChar = "⬛️ ";
this.EmptyBlockChar = "⬜️ ";
BlockChar = "⬛️ ";
EmptyBlockChar = "⬜️ ";
break;
case eProgressStyle.lines:
case EProgressStyle.lines:
this.BlockChar = "█";
this.EmptyBlockChar = "▁";
BlockChar = "█";
EmptyBlockChar = "▁";
break;
case eProgressStyle.squaredLines:
case EProgressStyle.squaredLines:
this.BlockChar = "▇";
this.EmptyBlockChar = "—";
BlockChar = "▇";
EmptyBlockChar = "—";
this.StartChar = "[";
this.EndChar = "]";
StartChar = "[";
EndChar = "]";
break;
case eProgressStyle.standard:
case eProgressStyle.custom:
case EProgressStyle.standard:
case EProgressStyle.custom:
this.BlockChar = "";
this.EmptyBlockChar = "";
BlockChar = "";
EmptyBlockChar = "";
break;
}
}
public async override Task Render(MessageResult result)
public override async Task Render(MessageResult result)
{
if (!this.RenderNecessary)
if (!RenderNecessary)
{
return;
}
if (this.Device == null)
if (Device == null)
{
return;
}
String message = "";
int blocks = 0;
int maxBlocks = 0;
var message = "";
var blocks = 0;
var maxBlocks = 0;
switch (this.ProgressStyle)
switch (ProgressStyle)
{
case eProgressStyle.standard:
case EProgressStyle.standard:
message = this.Value.ToString("0") + "%";
message = Value.ToString("0") + "%";
break;
case eProgressStyle.squares:
case eProgressStyle.circles:
case eProgressStyle.lines:
case eProgressStyle.squaredLines:
case eProgressStyle.custom:
case EProgressStyle.squares:
case EProgressStyle.circles:
case EProgressStyle.lines:
case EProgressStyle.squaredLines:
case EProgressStyle.custom:
blocks = (int)Math.Floor((decimal)this.Value / this.Steps);
blocks = (int)Math.Floor((decimal)Value / Steps);
maxBlocks = (this.Max / this.Steps);
maxBlocks = (Max / Steps);
message += this.StartChar;
message += StartChar;
for (int i = 0; i < blocks; i++)
for (var i = 0; i < blocks; i++)
{
message += this.BlockChar;
message += BlockChar;
}
for (int i = 0; i < (maxBlocks - blocks); i++)
for (var i = 0; i < (maxBlocks - blocks); i++)
{
message += this.EmptyBlockChar;
message += EmptyBlockChar;
}
message += this.EndChar;
message += EndChar;
message += " " + this.Value.ToString("0") + "%";
message += " " + Value.ToString("0") + "%";
break;
@@ -278,18 +249,18 @@ namespace TelegramBotBase.Controls.Inline
return;
}
if (this.MessageId == null)
if (MessageId == null)
{
var m = await this.Device.Send(message);
var m = await Device.Send(message);
this.MessageId = m.MessageId;
MessageId = m.MessageId;
}
else
{
await this.Device.Edit(this.MessageId.Value, message);
await Device.Edit(MessageId.Value, message);
}
this.RenderNecessary = false;
RenderNecessary = false;
}
}
+35 -43
View File
@@ -1,38 +1,36 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using TelegramBotBase.Base;
using TelegramBotBase.Form;
using TelegramBotBase.Localizations;
namespace TelegramBotBase.Controls.Inline
{
public class ToggleButton : ControlBase
{
public String UncheckedIcon { get; set; } = Localizations.Default.Language["ToggleButton_OffIcon"];
public string UncheckedIcon { get; set; } = Default.Language["ToggleButton_OffIcon"];
public String CheckedIcon { get; set; } = Localizations.Default.Language["ToggleButton_OnIcon"];
public string CheckedIcon { get; set; } = Default.Language["ToggleButton_OnIcon"];
public String CheckedString { get; set; } = Localizations.Default.Language["ToggleButton_On"];
public string CheckedString { get; set; } = Default.Language["ToggleButton_On"];
public String UncheckedString { get; set; } = Localizations.Default.Language["ToggleButton_Off"];
public string UncheckedString { get; set; } = Default.Language["ToggleButton_Off"];
public String ChangedString { get; set; } = Localizations.Default.Language["ToggleButton_Changed"];
public string ChangedString { get; set; } = Default.Language["ToggleButton_Changed"];
public String Title { get; set; } = Localizations.Default.Language["ToggleButton_Title"];
public string Title { get; set; } = Default.Language["ToggleButton_Title"];
public int? MessageId { get; set; }
public bool Checked { get; set; }
private bool RenderNecessary = true;
private bool _renderNecessary = true;
private static readonly object __evToggled = new object();
private static readonly object EvToggled = new object();
private readonly EventHandlerList Events = new EventHandlerList();
private readonly EventHandlerList _events = new EventHandlerList();
public ToggleButton()
@@ -41,68 +39,62 @@ namespace TelegramBotBase.Controls.Inline
}
public ToggleButton(String CheckedString, String UncheckedString)
public ToggleButton(string checkedString, string uncheckedString)
{
this.CheckedString = CheckedString;
this.UncheckedString = UncheckedString;
this.CheckedString = checkedString;
this.UncheckedString = uncheckedString;
}
public event EventHandler Toggled
{
add
{
this.Events.AddHandler(__evToggled, value);
}
remove
{
this.Events.RemoveHandler(__evToggled, value);
}
add => _events.AddHandler(EvToggled, value);
remove => _events.RemoveHandler(EvToggled, value);
}
public void OnToggled(EventArgs e)
{
(this.Events[__evToggled] as EventHandler)?.Invoke(this, e);
(_events[EvToggled] as EventHandler)?.Invoke(this, e);
}
public override async Task Action(MessageResult result, String value = null)
public override async Task Action(MessageResult result, string value = null)
{
if (result.Handled)
return;
await result.ConfirmAction(this.ChangedString);
await result.ConfirmAction(ChangedString);
switch (value ?? "unknown")
{
case "on":
if (this.Checked)
if (Checked)
return;
RenderNecessary = true;
_renderNecessary = true;
this.Checked = true;
Checked = true;
OnToggled(new EventArgs());
OnToggled(EventArgs.Empty);
break;
case "off":
if (!this.Checked)
if (!Checked)
return;
RenderNecessary = true;
_renderNecessary = true;
this.Checked = false;
Checked = false;
OnToggled(new EventArgs());
OnToggled(EventArgs.Empty);
break;
default:
RenderNecessary = false;
_renderNecessary = false;
break;
@@ -114,31 +106,31 @@ namespace TelegramBotBase.Controls.Inline
public override async Task Render(MessageResult result)
{
if (!RenderNecessary)
if (!_renderNecessary)
return;
var bf = new ButtonForm(this);
ButtonBase bOn = new ButtonBase((this.Checked ? CheckedIcon : UncheckedIcon) + " " + CheckedString, "on");
var bOn = new ButtonBase((Checked ? CheckedIcon : UncheckedIcon) + " " + CheckedString, "on");
ButtonBase bOff = new ButtonBase((!this.Checked ? CheckedIcon : UncheckedIcon) + " " + UncheckedString, "off");
var bOff = new ButtonBase((!Checked ? CheckedIcon : UncheckedIcon) + " " + UncheckedString, "off");
bf.AddButtonRow(bOn, bOff);
if (this.MessageId != null)
if (MessageId != null)
{
var m = await this.Device.Edit(this.MessageId.Value, this.Title, bf);
var m = await Device.Edit(MessageId.Value, Title, bf);
}
else
{
var m = await this.Device.Send(this.Title, bf, disableNotification: true);
var m = await Device.Send(Title, bf, disableNotification: true);
if (m != null)
{
this.MessageId = m.MessageId;
MessageId = m.MessageId;
}
}
this.RenderNecessary = false;
_renderNecessary = false;
}
+22 -23
View File
@@ -1,10 +1,9 @@
using System;
using System.Collections.Generic;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using TelegramBotBase.Base;
using TelegramBotBase.Form;
using TelegramBotBase.Localizations;
namespace TelegramBotBase.Controls.Inline
{
@@ -16,20 +15,20 @@ namespace TelegramBotBase.Controls.Inline
public TreeViewNode VisibleNode { get; set; }
public String Title { get; set; }
public string Title { get; set; }
private int? MessageId { get; set; }
public String MoveUpIcon { get; set; } = Localizations.Default.Language["TreeView_LevelUp"];
public string MoveUpIcon { get; set; } = Default.Language["TreeView_LevelUp"];
public TreeView()
{
this.Nodes = new List<TreeViewNode>();
this.Title = Localizations.Default.Language["TreeView_Title"];
Nodes = new List<TreeViewNode>();
Title = Default.Language["TreeView_Title"];
}
public override async Task Action(MessageResult result, String value = null)
public override async Task Action(MessageResult result, string value = null)
{
await result.ConfirmAction();
@@ -43,14 +42,14 @@ namespace TelegramBotBase.Controls.Inline
case "up":
case "parent":
this.VisibleNode = (this.VisibleNode?.ParentNode);
VisibleNode = (VisibleNode?.ParentNode);
result.Handled = true;
break;
default:
var n = (this.VisibleNode != null ? this.VisibleNode.FindNodeByValue(val) : this.Nodes.FirstOrDefault(a => a.Value == val));
var n = (VisibleNode != null ? VisibleNode.FindNodeByValue(val) : Nodes.FirstOrDefault(a => a.Value == val));
if (n == null)
return;
@@ -58,11 +57,11 @@ namespace TelegramBotBase.Controls.Inline
if (n.ChildNodes.Count > 0)
{
this.VisibleNode = n;
VisibleNode = n;
}
else
{
this.SelectedNode = (this.SelectedNode != n ? n : null);
SelectedNode = (SelectedNode != n ? n : null);
}
result.Handled = true;
@@ -77,21 +76,21 @@ namespace TelegramBotBase.Controls.Inline
public override async Task Render(MessageResult result)
{
var startnode = this.VisibleNode;
var startnode = VisibleNode;
var nodes = (startnode?.ChildNodes ?? this.Nodes);
var nodes = (startnode?.ChildNodes ?? Nodes);
ButtonForm bf = new ButtonForm();
var bf = new ButtonForm();
if (startnode != null)
{
bf.AddButtonRow(new ButtonBase(this.MoveUpIcon, "up"), new ButtonBase(startnode.Text, "parent"));
bf.AddButtonRow(new ButtonBase(MoveUpIcon, "up"), new ButtonBase(startnode.Text, "parent"));
}
foreach (var n in nodes)
{
var s = n.Text;
if (this.SelectedNode == n)
if (SelectedNode == n)
{
s = "[ " + s + " ]";
}
@@ -101,20 +100,20 @@ namespace TelegramBotBase.Controls.Inline
if (this.MessageId != null)
if (MessageId != null)
{
var m = await this.Device.Edit(this.MessageId.Value, this.Title, bf);
var m = await Device.Edit(MessageId.Value, Title, bf);
}
else
{
var m = await this.Device.Send(this.Title, bf);
this.MessageId = m.MessageId;
var m = await Device.Send(Title, bf);
MessageId = m.MessageId;
}
}
public String GetPath()
public string GetPath()
{
return (this.VisibleNode?.GetPath() ?? "\\");
return (VisibleNode?.GetPath() ?? "\\");
}
+14 -17
View File
@@ -1,35 +1,32 @@
using System;
using System.Collections.Generic;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace TelegramBotBase.Controls.Inline
{
public class TreeViewNode
{
public String Text { get; set; }
public string Text { get; set; }
public String Value { get; set; }
public string Value { get; set; }
public String Url { get; set; }
public string Url { get; set; }
public List<TreeViewNode> ChildNodes { get; set; } = new List<TreeViewNode>();
public TreeViewNode ParentNode { get; set; }
public TreeViewNode(String Text, String Value)
public TreeViewNode(string text, string value)
{
this.Text = Text;
this.Value = Value;
this.Text = text;
this.Value = value;
}
public TreeViewNode(String Text, String Value, String Url) : this(Text, Value)
public TreeViewNode(string text, string value, string url) : this(text, value)
{
this.Url = Url;
this.Url = url;
}
public TreeViewNode(String Text, String Value, params TreeViewNode[] childnodes) : this(Text, Value)
public TreeViewNode(string text, string value, params TreeViewNode[] childnodes) : this(text, value)
{
foreach(var c in childnodes)
{
@@ -44,14 +41,14 @@ namespace TelegramBotBase.Controls.Inline
ChildNodes.Add(node);
}
public TreeViewNode FindNodeByValue(String Value)
public TreeViewNode FindNodeByValue(string value)
{
return this.ChildNodes.FirstOrDefault(a => a.Value == Value);
return ChildNodes.FirstOrDefault(a => a.Value == value);
}
public String GetPath()
public string GetPath()
{
String s = "\\" + this.Value;
var s = "\\" + Value;
var p = this;
while (p.ParentNode != null)
{