Exemplo n.º 1
0
        private static Menu NewMainMenu(Menu searchMenu, IContactsStorage storage)
        {
            var mainMenu = new Menu("Menu:");

            mainMenu.AddItem(new MenuItem("View all contacts", () => {
                IO.PrintContactList("All contacts", storage.GetAllContacts());
            }));

            mainMenu.AddItem(new MenuItem("Search", searchMenu.Invoke));

            mainMenu.AddItem(new MenuItem("New contact", () => {
                var newContact = IO.ReadContact();
                storage.AddContact(newContact, out string message);
                Console.WriteLine(message);
            }));

            mainMenu.AddItem(new MenuItem("Load contacts from VCard", () => {
                IO.LoadContactsFromVCard(IO.ReadString("Filename: "), storage);
            }));

            mainMenu.AddItem(new MenuItem("Save contacts to VCard", () => {
                string filename = IO.ReadString("Filename: ");
                if (File.Exists(filename))
                {
                    Console.WriteLine($"File \"{filename}\" already exists. Rewrite?");
                    if (!IO.ReadBoolean(yesByDefault: false))
                    {
                        return;
                    }
                }
                IO.SaveContactsToVCard(filename, storage);
            }));

            return(mainMenu);
        }
Exemplo n.º 2
0
        public static void LoadContactsFromVCard(string filename, IContactsStorage storage)
        {
            if (!File.Exists(filename))
            {
                Console.WriteLine($"File \"{filename}\" doesn't exist!");
                return;
            }

            // github.com/mixerp/MixERP.Net.VCards is licensed under the Apache License 2.0 - private use is allowed
            List <Contact> newContacts = Contact.ParseMany(File.ReadAllText(filename), out int addedCounter, out int totalCounter);

            foreach (var contact in newContacts)
            {
                try {
                    storage.AddContact(contact, out string message);
                    Console.WriteLine(message);
                }
                catch (AggregateException notFlattenedAe) {
                    AggregateException ae = notFlattenedAe.Flatten();
                    Console.WriteLine($"Couldn't add {contact.FullName} to contacts: {ae.InnerExceptions[ae.InnerExceptions.Count - 1].Message}");
                    addedCounter--;
                }
                catch (HttpRequestException e) {
                    Console.WriteLine($"Couldn't add {contact.FullName} to contacts: {e.Message}");
                    addedCounter--;
                }
            }

            Console.WriteLine(ComposeSummaryString("loaded", addedCounter, totalCounter));
        }