示例#1
0
        public static bool ListTimeSlots(string[] com)
        {
            if (com.Length < 2)
            {
                return(false);
            }
            if (com[0] != "list")
            {
                return(false);
            }
            if (com[1] != "timeslots")
            {
                return(false);
            }
            TimeSlotFile cf = Schedule.timeslots;

            if (com.Length >= 3 && com[2] == "archive")
            {
                cf = Schedule.timeslotsArchive;
            }
            Conzole.PrintLine("Found " + cf.Size() + " timeslots.", ConsoleColor.Magenta);
            for (int i = 0; i < cf.Size(); i++)
            {
                TimeSlot ts = cf.Get(i);
                Conzole.Print(Conzole.PadBefore(ts.startSec + ":" + ts.startMin + ":" + ts.startHou + " >> ", 12), ConsoleColor.Yellow);
                Conzole.Print(Conzole.PadBefore(ts.endSec + ":" + ts.endMin + ":" + ts.endHou, 8), ConsoleColor.Yellow);
                Conzole.Print(" - " + Conzole.PadAfter(ts.name, 50));
                Conzole.Print("\n");
            }
            return(true);
        }
示例#2
0
 private void PrintCommand(string[] command)
 {
     for (int i = 0; i < command.Length; i++)
     {
         Conzole.Print("\"" + command[i] + "\" ");
     }
     Conzole.PrintLine("");
 }
示例#3
0
        private void AskCommand()
        {
            Conzole.Print("[CONSOLE]:: ", ConsoleColor.Cyan);
            byte[] inputBuffer = new byte[2048];
            Stream inputStream = Console.OpenStandardInput(inputBuffer.Length);

            Console.SetIn(new StreamReader(inputStream, Console.InputEncoding, false, inputBuffer.Length));
            string raw = Console.ReadLine();

            raw = raw.ToLower();
            if (raw == "exit")
            {
                return;
            }
            if (raw == "clear")
            {
                Console.Clear();
                Introduce();
                AskCommand();
                return;
            }
            if (raw == "")
            {
                AskCommand();
                return;
            }
            string[] command = ExtractCommand(raw);
            for (int i = 0; i < executes.Count; i++)
            {
                if (executes[i](command))
                {
                    break;
                }
            }
            AskCommand();
        }
示例#4
0
        public static bool Run(string[] com)
        {
            if (com[0] != "run")
            {
                return(false);
            }
            if (com[1] != "sequentialplanner")
            {
                return(false);
            }
            Conzole.PrintLine("Welcome to the Sequential Planner Wizard.", ConsoleColor.Magenta);
            Conzole.PrintLine("Type \"exit\" to quit this wizard.", ConsoleColor.Magenta);
            string   s;
            DateTime dt;
            bool     ok = false;

            while (true)
            {
                Conzole.PrintLine("Enter the first day: ", ConsoleColor.Magenta);
                Conzole.Print("[SequentialPlanner]:: ", ConsoleColor.Cyan);
                s = Console.ReadLine();
                if (s == "exit")
                {
                    return(true);
                }
                ok = Schedule.DateFromString(s, out dt);
                if (ok)
                {
                    break;
                }
                Conzole.PrintLine("Could not convert to correct datetime!", ConsoleColor.Red);
            }
            Conzole.PrintLine("You can use the commands: ", ConsoleColor.Magenta);
            Conzole.PrintLine("exit // exit this wizard.", ConsoleColor.Magenta);
            Conzole.PrintLine("add <s:timeslotname> <s:name> <s:category> // add a event on current day at timeslot.", ConsoleColor.Magenta);
            Conzole.PrintLine("next // increment day.", ConsoleColor.Magenta);
            Conzole.PrintLine("skip <n:x> // increment x days.", ConsoleColor.Magenta);
            Conzole.PrintLine("save // save the planned events and exit.");
            while (true)
            {
                Conzole.PrintLine("Current date: " + Schedule.StrDateTime(dt), ConsoleColor.Yellow);
                Conzole.Print("[SequentialPlanner]:: ", ConsoleColor.Cyan);
                s = Console.ReadLine();
                if (s == "exit")
                {
                    return(true);
                }
                if (s == "save")
                {
                    break;
                }
                if (s == "next")
                {
                    dt = dt.AddDays(1);
                }
                else
                {
                    string[] lcoms = Interperter.ExtractCommand(s);
                    if (lcoms.Length == 0)
                    {
                        continue;
                    }
                    if (lcoms[0] == "skip" && lcoms.Length == 2)
                    {
                        int i = 0;
                        int.TryParse(lcoms[1], out i);
                        if (i <= 1)
                        {
                            continue;
                        }
                        dt = dt.AddDays(i);
                    }
                    else if (lcoms[0] == "add" && lcoms.Length == 4)
                    {
                        TimeSlot ts;
                        ok = Schedule.timeslots.Get(lcoms[1], out ts);
                        if (!ok)
                        {
                            Conzole.PrintLine("Could not find timeslot: " + lcoms[1], ConsoleColor.Red);
                            continue;
                        }
                        DateTime start = ts.StartToDateTime(dt);
                        DateTime end   = ts.EndToDateTime(dt);
                        Card     card  = new Card();
                        card.start    = start;
                        card.end      = end;
                        card.title    = lcoms[2];
                        card.category = lcoms[3];
                        card.content  = "";
                        Schedule.cards.Add(card);
                        Conzole.PrintLine("Card added.", ConsoleColor.Magenta);
                    }
                }
            }
            Schedule.cards.Write();
            Conzole.PrintLine("All cards saved!", ConsoleColor.Yellow);
            return(true);
        }
示例#5
0
        public static bool InspectCard(string[] com)
        {
            if (com.Length < 3)
            {
                return(false);
            }
            if (com[0] != "inspect")
            {
                return(false);
            }
            if (com[1] != "card")
            {
                return(false);
            }
            DateTime dt;
            string   firstPart;

            if (com[2] == "null")
            {
                firstPart = "0:0:0";
            }
            else
            {
                firstPart = com[2];
            }
            bool ok = Schedule.DateTimeFromString(firstPart + "-" + com[3], out dt);

            if (!ok)
            {
                Conzole.PrintLine("Your date/time is incorrect!", ConsoleColor.Red);
                return(false);
            }
            Card card;
            int  index = 0;
            bool found = Schedule.cards.Get(dt, com[2] == "null", out card, out index);

            if (!found)
            {
                Conzole.PrintLine("Card not found", ConsoleColor.Red);
                return(false);
            }
            Conzole.Print("Title: ", ConsoleColor.Magenta);
            Conzole.PrintLine(Conzole.PadAfter(card.title, 100));
            Conzole.Print("Category: ", ConsoleColor.Magenta);
            Conzole.PrintLine(Conzole.PadAfter(card.category, 97));
            Conzole.Print("Start: ", ConsoleColor.Magenta);
            Conzole.PrintLine(Schedule.StrDateTime(card.start), ConsoleColor.Yellow);
            Conzole.Print("End: ", ConsoleColor.Magenta);
            Conzole.PrintLine(Schedule.StrDateTime(card.end), ConsoleColor.Yellow);
            Conzole.Print("Day: ", ConsoleColor.Magenta);
            Conzole.PrintLine(card.start.DayOfWeek.ToString());
            Conzole.Print("Relativeness: ", ConsoleColor.Magenta);
            string       msg;
            bool         notPast = Logic.GetDayMessage(card.start, out msg);
            ConsoleColor col     = notPast ? ConsoleColor.White : ConsoleColor.Red;

            Conzole.PrintLine(msg, col);
            TimeSpan res = card.end - card.start;

            Conzole.Print("Duration: ", ConsoleColor.Magenta);
            Conzole.PrintLine(res.Hours + " hours, " + res.Minutes + " minutes and " + res.Seconds + " seconds.", ConsoleColor.Yellow);
            Conzole.PrintLine("Content: ", ConsoleColor.Magenta);
            Conzole.PrintLine(card.content);
            return(true);
        }
示例#6
0
        public static bool ListDeadlines(string[] com)
        {
            if (com.Length < 2)
            {
                return(false);
            }
            if (com[0] != "list")
            {
                return(false);
            }
            if (com[1] != "deadlines")
            {
                return(false);
            }
            DeadlineFile df    = Schedule.deadlines;
            DateTime     limit = DateTime.MaxValue;

            if (com.Length >= 3 && com[2] == "archive")
            {
                df = Schedule.deadlinesArchive;
            }
            else if (com.Length >= 3 && com[2] == "past")
            {
                limit = DateTime.Now.AddSeconds(-1);
            }
            else if (com.Length >= 3)
            {
                limit = Logic.Limit(com[2]);
            }
            if (df.Size() == 0)
            {
                Conzole.PrintLine("No deadlines to show!", ConsoleColor.Magenta);
                return(false);
            }
            Conzole.PrintLine("Deadlines: ", ConsoleColor.Magenta);
            List <Deadline> dls = new List <Deadline>();

            for (int i = 0; i < df.Size(); i++)
            {
                Deadline d = df.Get(i);
                if (d.deadline <= limit)
                {
                    dls.Add(d);
                }
            }
            dls.Sort((p, q) => p.SecondsLeft().CompareTo(q.SecondsLeft()));
            for (int i = 0; i < dls.Count; i++)
            {
                Deadline l = dls[i];
                Conzole.Print(Schedule.StrDateTime(l.deadline) + " - ", ConsoleColor.Yellow);
                string msg  = "";
                int    left = l.SecondsLeft();
                int    abs  = Math.Abs(left);
                int    min  = 60;
                int    hour = min * 60;
                int    day  = hour * 24;
                if (abs < min * 5)
                {
                    msg = Conzole.PadBefore(abs + "", 4) + " seconds - ";
                }
                else if (abs < hour)
                {
                    msg = Conzole.PadBefore("" + (abs / min), 4) + " minutes - ";
                }
                else if (abs < day * 2)
                {
                    msg = Conzole.PadBefore("" + (abs / hour), 4) + " hours   - ";
                }
                else
                {
                    msg = Conzole.PadBefore("" + (abs / day), 4) + " days    - ";
                }
                if (left > 0)
                {
                    msg = "Left: " + msg;
                }
                else
                {
                    msg = "Past: " + msg;
                }
                ConsoleColor colour;
                if (left > 0)
                {
                    colour = ConsoleColor.White;
                }
                else
                {
                    colour = ConsoleColor.Red;
                }
                Conzole.Print(msg, colour);
                Conzole.Print(Conzole.PadAfter(l.title, 50) + " - ", ConsoleColor.Green);
                Conzole.Print(Conzole.PadAfter(l.category, 20) + "\n", ConsoleColor.Green);
            }
            return(true);
        }
示例#7
0
        public static bool ListCards(string[] com)
        {
            if (com.Length < 2)
            {
                return(false);
            }
            if (com[0] != "list")
            {
                return(false);
            }
            if (com[1] != "cards")
            {
                return(false);
            }
            CardFile cf       = Schedule.cards;
            DateTime limit    = DateTime.MaxValue;
            int      argIndex = 2;

            if (com.Length >= 3)
            {
                if (com[2] == "archive")
                {
                    cf       = Schedule.cardsArchive;
                    argIndex = 3;
                }
                else if (com[2] == "past")
                {
                    limit    = DateTime.Now.AddSeconds(-1);
                    argIndex = 3;
                }
                else
                {
                    limit = Logic.Limit(com[2]);
                }
            }
            uint count;

            if (com.Length == argIndex + 1 && limit == DateTime.MaxValue)
            {
                bool ok = uint.TryParse(com[argIndex], out count);
                if (!ok)
                {
                    Conzole.PrintLine("Could not convert \"" + com[argIndex] + "\" to a uint.", ConsoleColor.Red);
                    return(false);
                }
            }
            else
            {
                count = 0;
            }
            List <Card> cards = new List <Card>();

            for (int i = 0; i < cf.Size(); i++)
            {
                Card c = cf.Get(i);
                if (c.start <= limit)
                {
                    cards.Add(c);
                }
            }
            cards.Sort((p, q) => p.start.CompareTo(q.end));
            int max = cards.Count;

            if (count == 0)
            {
                count = (uint)max;
            }
            if (count > max)
            {
                count = (uint)max;
            }
            Conzole.PrintLine("Found " + count + " cards.", ConsoleColor.Magenta);
            for (int i = 0; i < count; i++)
            {
                Card c = cards[i];
                Conzole.Print(Schedule.StrDateTime(c.start) + " >> ", ConsoleColor.Yellow);
                Conzole.Print(Schedule.StrDateTime(c.end) + " - ", ConsoleColor.Yellow);
                string       msg;
                bool         notPast = Logic.GetDayMessage(c.start, out msg);
                ConsoleColor col     = notPast ? ConsoleColor.White : ConsoleColor.Red;
                Conzole.Print(msg + " - ", col);
                Conzole.Print(Conzole.PadAfter(c.title, 30) + " - ");
                Conzole.Print(Conzole.PadAfter(c.category, 20));
                Conzole.Print("\n");
            }
            return(true);
        }