private static void StoreActivity(MonthActivities activities) { var key = (activities.Year * 100) + activities.Month; var filename = Path.Combine(Program.SettingsDirectory, "Acts" + key + ".bin"); switch (ActivityFileFormatVersion) { case 1: activities.WriteToFile(filename); break; case 2: activities.WriteToFileV2(filename); break; default: throw new ConfigurationErrorsException($"Unknown file format version '{ActivityFileFormatVersion}'"); } ActivityCache[key] = activities; var sharedFolder = SharedPath; if (string.IsNullOrWhiteSpace(sharedFolder) || !Directory.Exists(sharedFolder)) { return; } try { var sharedFilename = $"{Environment.MachineName}_Acts{key}.bin"; File.Copy(filename, Path.Combine(sharedFolder, sharedFilename), true); } catch (Exception e) { // Non-critical exception Trace.TraceWarning($"Could not copy activities file to shared directory: {e}"); } }
/// <summary> /// Get activities for given month for the specified <paramref name="computers"/> /// </summary> /// <param name="year"></param> /// <param name="month"></param> /// <param name="computers"> Name of computers to get. '*' means all computers </param> /// <returns></returns> public static Dictionary <string, MonthActivities> GetSharedMonthActivities(short year, byte month, string computers) { if (computers.Equals(Environment.MachineName, StringComparison.OrdinalIgnoreCase)) { return new Dictionary <string, MonthActivities> { [ThisComputer] = GetLocalComputerMonthActivity(year, month) } } ; var key = $"{computers ?? "*"}_Acts{year * 100 + month}.bin"; if (SharedActivityCache.ContainsKey(key)) { return(SharedActivityCache[key]); } var sharedPath = SharedPath; foreach (var file in Directory.EnumerateFiles(sharedPath, key, SearchOption.TopDirectoryOnly)) { var monthActivities = new MonthActivities(file); var computerInFile = Path.GetFileName(file).Split('_')[0]; if (!SharedActivityCache.ContainsKey(key)) { SharedActivityCache.Add(key, new Dictionary <string, MonthActivities>(StringComparer.OrdinalIgnoreCase)); } SharedActivityCache[key].Add(computerInFile, monthActivities); } if (SharedActivityCache.ContainsKey(key)) { return(SharedActivityCache[key]); } return(new Dictionary <string, MonthActivities>()); }
/// <summary> /// Copy constructor /// </summary> /// <param name="toCopy"></param> public MonthActivities(MonthActivities toCopy) { Year = toCopy.Year; Month = toCopy.Month; ComputerName = toCopy.ComputerName; ApplicationNames = new List <string>(toCopy.ApplicationNames); WindowTitles = new List <string>(toCopy.WindowTitles); foreach (var day in toCopy.Days) { var activityList = new DayActivityList(this, day.Value.DayNumber); foreach (var act in day.Value) { var copy = new ActivitySpan(activityList, act.StartSecond, act.EndSecond, act.WasActive, act.ApplicationName(), act.WindowTitle()); copy.Classify(act.Classification, act.ClassificationFrom); activityList.Add(copy); } this.Days[day.Key] = activityList; } }
private static MonthActivities GetLocalComputerMonthActivity(short year, byte month) { var key = (year * 100) + month; if (ActivityCache.ContainsKey(key)) { return(ActivityCache[key]); } var filepath = Path.Combine(Program.SettingsDirectory, "Acts" + key + ".bin"); if (File.Exists(filepath)) { var monthActivities = new MonthActivities(filepath); ActivityCache.Add(key, monthActivities); return(monthActivities); } var newMonth = new MonthActivities(year, month); ActivityCache.Add(key, newMonth); return(newMonth); }
public ActivitySpan(MonthActivities owner, byte day) { Owner = owner; Day = owner.Days[day]; }
public ActivitySpan(MonthActivities owner, DayActivityList day) { Owner = owner; Day = day; }
public DayActivityList(MonthActivities owner, int dayNumber) { Owner = owner; DayNumber = dayNumber; }