示例#1
0
        private static void LogTimeStamp(string direction)
        {
            Direction dir = Direction.In;
            if (direction.Trim().ToLowerInvariant() == "lock")
                dir = Direction.Out;

            TimeStamp stamp = new TimeStamp()
            {
                Direction = dir,
                Stamp = DateTime.Now,
                User = Environment.UserName
            };

            //EventHandling for EnergySave
            var s = new System.Diagnostics.Eventing.Reader.EventLogReader("Microsoft-Windows-TaskScheduler/Operational"); //EventLog.GetEventLogs(".").ToArray();// Single(x => x.Log == "Application").Entries.OfType<EventLogEntry>().ToArray().Where(x=>x.EventID==1532);
            EventRecord record;
            List<EventRecord> records = new List<EventRecord>();
            while ((record = s.ReadEvent()) != null)
            {
                if (record.Id == 108 && (string)record.Properties[0].Value == "\\__percip.io__energysave_pc")
                {
                    records.Add(record);
                }

            }
            string set = (string)Settings.Default["lastenergysave"];
            while (set != "" && records.First().ActivityId.ToString() != set)
            {
                records.RemoveAt(0);
            }

            int lastid = records.FindIndex(i => i.ActivityId.ToString() == set);
            TimeStampCollection col = null;
            if (File.Exists(dbFile))
            {
                try
                {
                    col = Saver.Load<TimeStampCollection>(dbFile);
                }
                catch (CryptographicException ex)
                {
                    Console.Error.WriteLine(ex.Message);
                    Environment.Exit(2);
                }
            }
            else
                col = new TimeStampCollection();

            foreach (var rec in records)
            {
                if (rec.ActivityId.ToString() != set)
                {
                    TimeStamp repair = new TimeStamp()
                    {
                        Direction = Direction.Out,
                        Stamp = rec.TimeCreated.GetValueOrDefault(),
                        User = Environment.UserName
                    };
                    col.TimeStamps.Add(repair);
                }
            }
            Settings.Default.lastenergysave = records.Last().ActivityId.ToString();
            Settings.Default.Save();
            col.TimeStamps.Sort();
            col.TimeStamps.Add(stamp);
            Saver.Save(dbFile, col);
            Console.WriteLine("Saved: {0}|{1}|{2}", stamp.Stamp, stamp.User, stamp.Direction);
        }
示例#2
0
 private static TimeStampCollection insert(TimeStampCollection col, int i)
 {
     Console.Write("Please enter the TimeStamp to add:");
     string answer = Console.ReadLine();
     try
     {
         TimeStamp toadd = new TimeStamp();
         toadd.Stamp = DateTime.Parse(answer);
         toadd.Direction = Direction.In;
         toadd.User = "******";
         col.TimeStamps.Insert(i - 1, toadd);
     }
     catch (FormatException)
     {
         Console.WriteLine("The TimeStamp could not be read. Please try again");
         col = insert(col, i);
     }
     return col;
 }
示例#3
0
        private static TimeStampCollection Repair(TimeStampCollection col, DateTime currentDay, int i)
        {
            string answer;
            Console.Write("Please enter the time you stopped working on {0:yyyy-MM-dd ddd}. [{1}]", currentDay, col.TimeStamps[i].Stamp.AddSeconds(1));
            answer = Console.ReadLine();
            if (answer == "")
            {
                answer = col.TimeStamps[i].Stamp.AddSeconds(1).ToString();
            }
            try
            {
                TimeStamp toadd = new TimeStamp();
                toadd.Stamp = DateTime.Parse(answer);
                if (toadd.Stamp.Date != currentDay) throw new Exception();
                toadd.Direction = Direction.Out;
                toadd.User = "******";
                col.TimeStamps.Insert(i + 1, toadd);
            }
            catch (FormatException)
            {
                Console.WriteLine("The Timestamp could not be read, please try again or simply press Enter to enter the shown Timestamp.");
                col = Repair(col, currentDay, i);
            }

            return col;
        }
示例#4
0
        static void Main(string[] args)
        {
            string direction = string.Empty;
            bool query = false;
            bool raw = false;
            bool init = false;
            bool deInit = false;
            bool help = false;
            bool htmlReport = false;
            string inject = string.Empty;
            string tags = string.Empty;
            string timeSpan = string.Empty;
            bool pause = false;

            var configuration = CommandLineParserConfigurator
                .Create()
                .WithSwitch("q", () => query = true).HavingLongAlias("query").DescribedBy("Call the db and get your working times.")
                .WithSwitch("r", () => raw = true).HavingLongAlias("raw").DescribedBy("Get all logged events")
                .WithSwitch("i", () => init = true).HavingLongAlias("init").DescribedBy("Create windows tasks (you need elevated permissions for this one!")
                .WithSwitch("d", () => deInit = true).HavingLongAlias("deinit").DescribedBy("Remove windows tasks (you need elevated permissions for this one!")
                .WithSwitch("b", () => pause = true).HavingLongAlias("pause").DescribedBy("Manage your breaks")
                .WithSwitch("h", () => help = true).HavingLongAlias("help").DescribedBy("Show this usage screen.")
                .WithSwitch("o", () => htmlReport = true).HavingLongAlias("out").DescribedBy("Show html report.")
                .WithNamed("j", I => inject = I).HavingLongAlias("inject").DescribedBy("Time|Direction\"", "Use this for debugging only! You can inject timestamps. 1 for lock, 0 for unlock")
                .WithNamed("t", t => tags = t).HavingLongAlias("tags").DescribedBy("timestamp|Tag1,Tag2,...\"", "Tag a timestamp; use ticks for the timestamp (-r shows them)")
                .WithPositional(d => direction = d).DescribedBy("lock", "tell me to \"lock\" for \"out\" and keep empty for \"in\"")
                .BuildConfiguration();
            var parser = new CommandLineParser(configuration);

            var parseResult = parser.Parse(args);

            if (!parseResult.Succeeded)
            {
                ShowUsage(configuration, parseResult.Message);
                Environment.Exit((int)ExitCode.ArgumentError);
            }
            else
            {
                if (help)
                {
                    ShowUsage(configuration);
                    Environment.Exit((int)ExitCode.OK);
                }
                if (init)
                {
                    using (TaskService ts = new TaskService())
                    {
                        try
                        {
                            DefineTask(ts, "myLock lock screen", "lock_pc", TriggerType.Lock);
                            DefineTask(ts, "myLock unlock screen", "unlock_pc", TriggerType.Unlock);
                            DefineTask(ts, "myLock login to pc", "login_pc", TriggerType.Logon);
                            DefineTask(ts, "myLock logout from pc", "logout_pc", TriggerType.Logoff);
                            DefineTask(ts, "myLock energysaver from pc", "energysave_pc", TriggerType.Energysave);
                            Console.WriteLine("Initialization complete.");
                            Environment.Exit((int)ExitCode.OK);
                        }
                        catch (UnauthorizedAccessException)
                        {
                            Console.Error.WriteLine("Access denied, please use an elevated prompt.");
                            Environment.Exit((int)ExitCode.Exception);
                        }
                    }
                }
                if (deInit)
                {
                    using (TaskService ts = new TaskService())
                    {
                        try
                        {
                            //Remove tasks
                            foreach (var t in ts.RootFolder.AllTasks)
                                if (t.Name.StartsWith(taskPrefix))
                                    ts.RootFolder.DeleteTask(t.Name);

                            Console.WriteLine("Deinitialization complete.");
                            Environment.Exit((int)ExitCode.OK);
                        }
                        catch (UnauthorizedAccessException)
                        {
                            Console.Error.WriteLine("Access denied, please use an elevated prompt.");
                            Environment.Exit((int)ExitCode.Exception);
                        }
                    }
                }
                if (!string.IsNullOrEmpty(inject))
                {
                    TimeStampCollection col;
                    try
                    {
                        col = Saver.Load<TimeStampCollection>(dbFile);
                    }
                    catch (FileNotFoundException)
                    {
                        col = new TimeStampCollection();
                    }
                    TimeStamp stamp = new TimeStamp();
                    string[] injection = inject.Split('|');
                    stamp.Stamp = DateTime.Parse(injection[0]);
                    if (injection.Length > 1)
                        stamp.Direction = (Direction)(Convert.ToInt32(injection[1]));
                    if (injection.Length > 2)
                        stamp.User = injection[2];

                    col.TimeStamps.Add(stamp);
                    col.TimeStamps.Sort();
                    Saver.Save<TimeStampCollection>(dbFile, col);

                    Console.WriteLine("Injection successfull.");
                    Console.WriteLine("Values were: {0}", inject);

                    Environment.Exit((int)ExitCode.OK);
                }

                if (raw)
                {
                    TimeStampCollection col = Saver.Load<TimeStampCollection>(dbFile);
                    foreach (var t in col.TimeStamps)
                        Console.WriteLine("{0,-10} {1} {2} {3} {4}", UnixTimestampFromDateTime(t.Stamp), t.Stamp, t.User, t.Direction, (t.Tags.Count > 0) ? "Tags: " + String.Join(", ", t.Tags) : string.Empty);

                    Console.WriteLine("EOF");

                    Environment.Exit((int)ExitCode.OK);
                }
                if (pause)
                {
                    interactivebreaktime(0);
                }
                if (!string.IsNullOrEmpty(tags))
                {
                    TimeStampCollection col;
                    try
                    {
                        col = Saver.Load<TimeStampCollection>(dbFile);
                    }
                    catch (FileNotFoundException)
                    {
                        col = new TimeStampCollection();
                    }
                    int iPipe = tags.IndexOf("|");
                    if (iPipe == -1)
                    {
                        Console.Error.WriteLine("Wrong input format, use \"Ticks|foo,bar,zwusch\"!");
                        Environment.Exit(-3);
                    }
                    long lTicks = long.Parse(tags.Substring(0, iPipe));
                    List<string> tagList = tags.Substring(iPipe + 1).Split(',').ToList<string>();

                    try
                    {
                        var q = (from c in col.TimeStamps where UnixTimestampFromDateTime(c.Stamp) == lTicks select c).Single();
                        q.Tags.AddRange(tagList);

                        Saver.Save<TimeStampCollection>(dbFile, col);
                    }
                    catch (InvalidOperationException)
                    {
                        Console.Error.WriteLine("Timestamp {0} could not be found. Check with \"-r\".", lTicks);
                        Environment.Exit((int)ExitCode.Exception);
                    }
                }

                if (!query)
                    LogTimeStamp(direction);
                else
                {
                    if (!htmlReport)
                        QueryWorkingTimes(timeSpan);
                    else
                    { }
                }
            }
        }