Skip to content

Commit

Permalink
Added progress. Updated menu, collect info
Browse files Browse the repository at this point in the history
  • Loading branch information
DamianMorozov committed Dec 13, 2022
1 parent f50aab4 commit 9562aa8
Show file tree
Hide file tree
Showing 21 changed files with 461 additions and 476 deletions.
Binary file modified Assets/Main_menu.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
10 changes: 10 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,16 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0

## [Unreleased]

## [0.1.180] - 2022-12-13
### Added
- Info menu
- Download progress
### Changed
- Connect menu
- Settings menu
- Collect info after set user name
- Try catch exceptions

## [0.1.150] - 2022-12-10
### Added
- MenuHelper into TgDownloaderConsole
Expand Down
6 changes: 6 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,12 @@ Download all the files from the channel you are a member of from Telegram.
- Fill out the form to register a new Telegram app
- Copy the values of the "App api_id" and "App api_hash" fields

## Quick start
- Connect TG client, enter requred fields
- Get info about your dialogs (optional)
- Fill the settings
- Download files

## Screenshots
![](Assets/Main_menu.png?raw=true)

Expand Down
1 change: 0 additions & 1 deletion TgDownloaderConsole/GlobalUsings.cs
Original file line number Diff line number Diff line change
Expand Up @@ -8,5 +8,4 @@
global using TgDownloaderConsole.Helpers;
global using TgDownloaderCore.Enums;
global using TgDownloaderCore.Helpers;
global using TgDownloaderCore.Locales;
global using TL;
151 changes: 62 additions & 89 deletions TgDownloaderConsole/Helpers/MenuHelper.cs
Original file line number Diff line number Diff line change
Expand Up @@ -18,19 +18,6 @@ internal class MenuHelper
internal static TgClientHelper TgClient => TgClientHelper.Instance;
internal static Style StyleMain => new(Color.White, null, Decoration.Bold | Decoration.Conceal | Decoration.Italic);

internal long SourceFileSize { get; set; }
internal long SourceFileRead { get; set; }
internal double SourceFileProgress
{
get
{
if (SourceFileSize == 0)
return 0;
return (double)(SourceFileRead * 100) / SourceFileSize;
}
}
internal TgMenu MenuItem { get; set; } = TgMenu.Exit;

#endregion

#region Public and internal methods
Expand All @@ -46,7 +33,7 @@ internal static string GetAppVersion()
internal void ShowTable(string title)
{
AnsiConsole.Clear();
AnsiConsole.Write(new FigletText(Locale.Info.AppTitle).Alignment(Justify.Center).Color(Color.Yellow));
AnsiConsole.Write(new FigletText(Locale.AppTitle).Alignment(Justify.Center).Color(Color.Yellow));
Table table = new()
{
ShowHeaders = true,
Expand All @@ -66,130 +53,116 @@ internal void FillTableColumns(Table table)
if (table.Columns.Count > 0) return;

table.AddColumn(new TableColumn(
new Markup(Locale.Info.AppName, StyleMain)) { Width = 20 }.LeftAligned());
new Markup(Locale.AppName, StyleMain)) { Width = 20 }.LeftAligned());
table.AddColumn(new TableColumn(
new Markup(Locale.Info.AppValue, StyleMain)) { Width = 80 }.LeftAligned());
new Markup(Locale.AppValue, StyleMain)) { Width = 80 }.LeftAligned());
}

internal void FillTableRows(Table table)
{
if (table.Rows.Count > 0) table.Rows.Clear();

table.AddRow(new Markup(Locale.InfoMessage(Locale.Info.AppVersion)), new Markup($@"v{GetAppVersion()}"));
table.AddRow(new Markup(Locale.InfoMessage(Locale.AppVersion)), new Markup($@"v{GetAppVersion()}"));

// TG client info.
if (!TgClient.IsConnected)
{
table.AddRow(new Markup(Locale.WarningMessage(Locale.Info.TgClientUserName)),
new Markup(Locale.Warning.TgSettingsNotSet));
table.AddRow(new Markup(Locale.WarningMessage(Locale.Info.TgClientUserId)),
new Markup(Locale.Warning.TgSettingsNotSet));
table.AddRow(new Markup(Locale.WarningMessage(Locale.Info.TgClientUserIsActive)),
new Markup(Locale.Warning.TgSettingsNotSet));
table.AddRow(new Markup(Locale.WarningMessage(Locale.Info.TgClientUserStatus)),
new Markup(Locale.Warning.TgSettingsNotSet));
table.AddRow(new Markup(Locale.WarningMessage(Locale.TgClientUserName)),
new Markup(Locale.TgSettingsNotSet));
table.AddRow(new Markup(Locale.WarningMessage(Locale.TgClientUserId)),
new Markup(Locale.TgSettingsNotSet));
table.AddRow(new Markup(Locale.WarningMessage(Locale.TgClientUserIsActive)),
new Markup(Locale.TgSettingsNotSet));
table.AddRow(new Markup(Locale.WarningMessage(Locale.TgClientUserStatus)),
new Markup(Locale.TgSettingsNotSet));
}
else
{
User user = TgClient.MySelfUser;
table.AddRow(new Markup(Locale.InfoMessage(Locale.Info.TgClientUserName)),
table.AddRow(new Markup(Locale.InfoMessage(Locale.TgClientUserName)),
new Markup(user.username));
table.AddRow(new Markup(Locale.InfoMessage(Locale.Info.TgClientUserId)),
table.AddRow(new Markup(Locale.InfoMessage(Locale.TgClientUserId)),
new Markup(user.id.ToString()));
table.AddRow(new Markup(Locale.InfoMessage(Locale.Info.TgClientUserIsActive)),
table.AddRow(new Markup(Locale.InfoMessage(Locale.TgClientUserIsActive)),
new Markup(user.IsActive.ToString()));
table.AddRow(new Markup(Locale.InfoMessage(Locale.Info.TgClientUserStatus)),
table.AddRow(new Markup(Locale.InfoMessage(Locale.TgClientUserStatus)),
new Markup(user.status.ToString() ?? ""));
}

// TG source user name.
if (string.IsNullOrEmpty(TgClient.TgSettings.SourceUserName))
table.AddRow(new Markup(Locale.WarningMessage(Locale.Info.TgSettingsSourceUserName)),
new Markup(Locale.Warning.TgSettingsNotSet));
table.AddRow(new Markup(Locale.WarningMessage(Locale.TgSettingsSourceUserName)),
new Markup(Locale.TgSettingsNotSet));
else
table.AddRow(new Markup(Locale.InfoMessage(Locale.Info.TgSettingsSourceUserName)),
table.AddRow(new Markup(Locale.InfoMessage(Locale.TgSettingsSourceUserName)),
new Markup(TgClient.TgSettings.SourceUserName));

// TG messages count.
if (TgClient.TgSettings.MessageCount < 0)
table.AddRow(new Markup(Locale.WarningMessage(Locale.TgSettingsMessageCount)),
new Markup(Locale.TgSettingsNotSet));
else
table.AddRow(new Markup(Locale.InfoMessage(Locale.TgSettingsMessageCount)),
new Markup(TgClient.TgSettings.MessageCount.ToString()));

// Dest dir.
if (string.IsNullOrEmpty(TgClient.TgSettings.DestDirectory))
table.AddRow(new Markup(Locale.WarningMessage(Locale.Info.TgSettingsDestDirectory)),
new Markup(Locale.Warning.TgSettingsNotSet));
table.AddRow(new Markup(Locale.WarningMessage(Locale.TgSettingsDestDirectory)),
new Markup(Locale.TgSettingsNotSet));
else
{
if (!Directory.Exists(TgClient.TgSettings.DestDirectory))
table.AddRow(new Markup(Locale.WarningMessage(Locale.Info.TgSettingsDestDirectory)),
new Markup(Locale.Warning.DirIsNotExists));
table.AddRow(new Markup(Locale.WarningMessage(Locale.TgSettingsDestDirectory)),
new Markup(Locale.DirIsNotExists));
else
table.AddRow(new Markup(Locale.InfoMessage(Locale.Info.TgSettingsDestDirectory)),
table.AddRow(new Markup(Locale.InfoMessage(Locale.TgSettingsDestDirectory)),
new Markup(TgClient.TgSettings.DestDirectory));
}

// TG start ID.
if (TgClient.TgSettings.MessageStartId < 0)
table.AddRow(new Markup(Locale.WarningMessage(Locale.Info.TgSettingsMessageStartId)),
new Markup(Locale.Warning.TgSettingsNotSet));
if (TgClient.TgSettings.MessageCurrentId < 0)
table.AddRow(new Markup(Locale.WarningMessage(Locale.TgSettingsMessageStartId)),
new Markup(Locale.TgSettingsNotSet));
else
table.AddRow(new Markup(Locale.InfoMessage(Locale.Info.TgSettingsMessageStartId)),
new Markup(TgClient.TgSettings.MessageStartId.ToString()));

// TG messages count.
if (TgClient.TgSettings.MessageCount < 0)
table.AddRow(new Markup(Locale.WarningMessage(Locale.Info.TgSettingsMessageCount)),
new Markup(Locale.Warning.TgSettingsNotSet));
else
table.AddRow(new Markup(Locale.InfoMessage(Locale.Info.TgSettingsMessageCount)),
new Markup(TgClient.TgSettings.MessageCount.ToString()));

// TG messages max count.
if (TgClient.TgSettings.MessageMaxCount < 0)
table.AddRow(new Markup(Locale.WarningMessage(Locale.Info.TgSettingsMessageMaxCount)),
new Markup(Locale.Warning.TgSettingsNotSet));
else
table.AddRow(new Markup(Locale.InfoMessage(Locale.Info.TgSettingsMessageMaxCount)),
new Markup(TgClient.TgSettings.MessageMaxCount.ToString()));
}

internal string GetTableRowsSize(long value)
{
if (value > 0)
{
if (value < 1024)
return $"{value:##0.000} B";
if (value < 1024 * 1024)
return $"{(double)value / 1024:##0.000} KB";
return value < 1024 * 1024 * 1024
? $"{(double)value / 1024L / 1024:##0.000} MB"
: $"{(double)value / 1024L / 1024L / 1024:##0.000} GB";
}
return "0 B";
table.AddRow(new Markup(Locale.InfoMessage(Locale.TgSettingsMessageStartId)),
new Markup(TgClient.TgSettings.MessageCurrentId.ToString()));
}

internal void SetOptionsSetupTg()
internal TgMenuSettings SetOptionsSetupTg()
{
string subMenu = AnsiConsole.Prompt(
string menu = AnsiConsole.Prompt(
new SelectionPrompt<string>()
.Title(Locale.Info.MenuSwitchNumber)
.PageSize(6)
.MoreChoicesText(Locale.Info.MoveUpDown)
.Title(Locale.MenuSwitchNumber)
.PageSize(4)
.MoreChoicesText(Locale.MoveUpDown)
.AddChoices(
"Return",
"Setup user name",
"Setup download folder",
"Setup message start ID",
"Setup messages count"));
MenuItem = subMenu switch
"Setup message current ID"));
return menu switch
{
"Return" => TgMenu.Return,
"Setup user name" => TgMenu.SetTgSourceUsername,
"Setup download folder" => TgMenu.SetTgDestDirectory,
"Setup message start ID" => TgMenu.SetTgMessageStartId,
"Setup messages count" => TgMenu.SetTgMessageCount,
_ => MenuItem
"Setup user name" => TgMenuSettings.SourceUsername,
"Setup download folder" => TgMenuSettings.DestDirectory,
"Setup message current ID" => TgMenuSettings.MessageCurrentId,
_ => TgMenuSettings.Return
};
}

internal string GetStatusInfo(Stopwatch sw) =>
$"{sw.Elapsed} | {SourceFileProgress:##0.000} % | {GetTableRowsSize(SourceFileRead)} |";
internal double CalcSourceProgress(long count, long current) =>
count == 0 ? 0 : (double)(current * 100) / count;

private string GetLongString(long current) => current > 999 ? $"{current:### ###}" : $"{current:###}";

public string GetStatus(Stopwatch sw, long count, long current) =>
count == 0 && current == 0
? $"{sw.Elapsed} | "
: $"{sw.Elapsed} | {CalcSourceProgress(count, current):#00.00} % | {GetLongString(current)}/{GetLongString(count)}";

public string GetStatus(long count, long current) =>
count == 0 && current == 0
? string.Empty
: $"{CalcSourceProgress(count, current):#00.00} % | {GetLongString(current)}/{GetLongString(count)}";

public bool CheckTgSettings() =>
TgClient.IsConnected &&
Expand Down
Loading

0 comments on commit 9562aa8

Please sign in to comment.