using System; using System.Collections.Generic; using System.Linq; using System.Reflection; using System.Text; using System.Threading.Tasks; using BirdsiteLive.Common.Settings; using BirdsiteLive.DAL.Contracts; using Microsoft.Extensions.Configuration; using NStack; using Terminal.Gui; namespace BSLManager { class Program { static async Task Main(string[] args) { Console.OutputEncoding = Encoding.Default; var settings = GetSettings(); var bootstrapper = new Bootstrapper(settings); var container = bootstrapper.Init(); var followersDal = container.GetInstance(); await LaunchAppAsync(followersDal); } private static DbSettings GetSettings() { var builder = new ConfigurationBuilder() .AddEnvironmentVariables(); var configuration = builder.Build(); var dbSettings = configuration.GetSection("Db").Get(); return dbSettings; } private static async Task LaunchAppAsync(IFollowersDal followersDal) { var followers = await followersDal.GetAllFollowersAsync(); var orderedFollowers = followers.OrderByDescending(x => x.Followings.Count).ToList(); Application.Init(); var top = Application.Top; // Creates the top-level window to show var win = new Window("BSL Manager") { X = 0, Y = 1, // Leave one row for the toplevel menu // By using Dim.Fill(), it will automatically resize without manual intervention Width = Dim.Fill(), Height = Dim.Fill() }; top.Add(win); // Creates a menubar, the item "New" has a help menu. var menu = new MenuBar(new MenuBarItem[] { new MenuBarItem("_File", new MenuItem[] { new MenuItem("_Quit", "", () => { if (Quit()) top.Running = false; }) }), //new MenuBarItem ("_Edit", new MenuItem [] { // new MenuItem ("_Copy", "", null), // new MenuItem ("C_ut", "", null), // new MenuItem ("_Paste", "", null) //}) }); top.Add(menu); static bool Quit() { var n = MessageBox.Query(50, 7, "Quit BSL Manager", "Are you sure you want to quit?", "Yes", "No"); return n == 0; } var listData = new List(); foreach (var follower in orderedFollowers) { listData.Add($"@{follower.Acct}@{follower.Host} {follower.Followings.Count}"); } var list = new ListView(listData) { X = 1, Y = 2, Width = Dim.Fill(), Height = Dim.Fill() }; list.KeyDown += _ => { if (_.KeyEvent.Key == Key.Enter) { var el = list.SelectedItem; bool okpressed = false; var ok = new Button(10, 14, "Yes"); ok.Clicked += () => { Application.RequestStop(); okpressed = true; }; var cancel = new Button(3, 14, "No"); cancel.Clicked += () => Application.RequestStop(); var dialog = new Dialog("Delete", 60, 18, cancel, ok); var name = new Label($"User: {listData[el]}") { X = 1, Y = 1, Width = Dim.Fill(), Height = 1 }; var entry = new Label("Delete user and remove all their followings?") { X = 1, Y = 3, Width = Dim.Fill(), Height = 1 }; dialog.Add(name); dialog.Add(entry); Application.Run(dialog); if (okpressed) { listData.RemoveAt(el); typeof(Application).GetMethod("TerminalResized", BindingFlags.Static | BindingFlags.NonPublic) .Invoke(null, null); } } }; // Add some controls, win.Add( new Label(1, 0, "Listing followers"), list ); Application.Run(); } } }