1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
|
namespace hyprwatch.Report
{
using System;
using System.IO;
using System.Linq;
using System.Globalization;
using System.Collections.Generic;
using hyprwatch.Time;
public class Analysis
{
public static Dictionary<string, string> FinalReport(string date)
{
string path = Environment.GetEnvironmentVariable("HOME") + "/.cache/hyprwatch/daily_data/";
string filename = Path.Combine(path, date + ".csv");
var report = new Dictionary<string, string>();
if (File.Exists(filename))
{
var rawData = File.ReadAllLines(filename);
foreach (var line in rawData)
{
var splitData = line.Split('\t');
if (splitData.Length >= 2)
{
report[splitData[1].Trim()] = splitData[0];
}
}
}
report.Remove("Unknown");
return report;
}
public static Dictionary<string, string> SortData(Dictionary<string, string> report)
{
var sortedValues = report.Select(kvp => TimeOperations.ConvertIntoSec(kvp.Value)).OrderByDescending(sec => sec).ToList();
var sortedReport = new Dictionary<string, string>();
foreach (var seconds in sortedValues)
{
foreach (var kvp in report)
{
if (TimeOperations.ConvertIntoSec(kvp.Value) == seconds && !sortedReport.ContainsKey(kvp.Key))
{
sortedReport[kvp.Key] = kvp.Value;
break;
}
}
}
return sortedReport;
}
public static DateTime GetSundayOfWeek(string week)
{
int year = int.Parse(week.Substring(4));
int weekNumber = int.Parse(week.Substring(1, 2));
var firstDayOfYear = new DateTime(year, 1, 1);
var baseDay = firstDayOfYear.DayOfWeek == DayOfWeek.Monday ? firstDayOfYear : firstDayOfYear.AddDays(8 - (int)firstDayOfYear.DayOfWeek);
return baseDay.AddDays((weekNumber - 1) * 7 + 6);
}
public static List<string> WeekDates(DateTime theDay)
{
int weekday = (int)theDay.DayOfWeek - 1;
var start = theDay.AddDays(-weekday);
return Enumerable.Range(0, weekday + 1).Select(offset => start.AddDays(offset).ToString("yyyy-MM-dd")).ToList();
}
public static string WeekdayFromDate(string date)
{
if (DateTime.TryParseExact(date, "dd-MM-yyyy", CultureInfo.InvariantCulture, DateTimeStyles.None, out var parsedDate))
{
return parsedDate.ToString("ddd");
}
return string.Empty;
}
public static void WeeklyLogs(string week)
{
string user = Environment.GetEnvironmentVariable("HOME");
string filename = Path.Combine(user, ".cache/Watcher/Analysis/", week + ".csv");
using (var writer = new StreamWriter(filename))
{
List<string> dates;
if (GetCurrentWeek() == week)
{
dates = WeekDates(DateTime.Today);
}
else
{
dates = WeekDates(GetSundayOfWeek(week));
}
foreach (var date in dates)
{
string totalScreenTime = "00:00:00";
foreach (var kvp in FinalReport(date))
{
totalScreenTime = TimeOperations.TimeAddition(totalScreenTime, kvp.Value);
}
writer.WriteLine($"{WeekdayFromDate(date)}\t{totalScreenTime}");
}
var allData = new Dictionary<string, string>();
foreach (var date in dates)
{
foreach (var kvp in FinalReport(date))
{
if (!allData.ContainsKey(kvp.Key))
{
allData[kvp.Key] = "00:00:00";
}
allData[kvp.Key] = TimeOperations.TimeAddition(allData[kvp.Key], kvp.Value);
}
}
allData = SortData(allData);
foreach (var kvp in allData)
{
writer.WriteLine($"{kvp.Value}\t{kvp.Key}");
}
}
}
public static string GetCurrentWeek()
{
var currentWeek = DateTime.Now.ToString("\'W\'\'\'W" + CultureInfo.CurrentCulture.Calendar.GetWeekOfYear(DateTime.Now, CalendarWeekRule.FirstDay, DayOfWeek.Monday));
return currentWeek;
}
}
}
|