using Newtonsoft.Json; using System.Linq; namespace ttrss_co_client { class Program { static async Task Main(string[] args) { var conf = Configure(); var ttrssClient = new ttrss.ApiClient(conf.BaseURI); await ttrssClient.Login(conf.Username, conf.Password); var loggedin = await ttrssClient.IsLoggedIn(); Console.WriteLine($"logged in: {loggedin}"); var apiLevel = await ttrssClient.GetApiLevel(); Console.WriteLine($"api level: {apiLevel}"); var feeds = await ttrssClient.GetFeeds(cat_id: -3); Console.WriteLine($"{feeds.Count()} feed{(feeds.Count() == 1 ? "" : "s")} found"); var firstUnread = feeds.FirstOrDefault(f => f.unread > 0); if(firstUnread != null) { Console.WriteLine($"first unread: {firstUnread.title} (id {firstUnread.id})"); } else { Console.WriteLine("no feeds unread."); } var loggedout = await ttrssClient.Logout(); Console.WriteLine($"logged out: {loggedout}"); loggedin = await ttrssClient.IsLoggedIn(); Console.WriteLine($"logged in: {loggedin}"); } static Configuration Configure(string configurationPath = "appsettings.json") { if (!File.Exists(configurationPath)) { Console.Error.WriteLine($"could not find configuration at {configurationPath}! copying sample to that spot."); File.Copy("sample-appsettings.json", configurationPath); //and you know what, if that explodes at the OS level, the OS should give you an error return null; } var fileContents = File.ReadAllText(configurationPath); if (string.IsNullOrWhiteSpace(fileContents)) { Console.Error.WriteLine($"configuration file at {configurationPath} was empty! overwriting with sample settings."); File.Copy("sample-appsettings.json", configurationPath, true); return null; } var conf = JsonConvert.DeserializeObject(fileContents); if (conf == null) { Console.Error.WriteLine($"configuration file at {configurationPath} was empty! overwriting with sample settings."); File.Copy("sample-appsettings.json", configurationPath, true); return null; } return conf; } } }