public void Clone(TimeData td) { this.timestamp = td.timestamp; this.timestamp_local = td.timestamp_local; this.editor_seconds = td.editor_seconds; this.session_seconds = td.session_seconds; this.file_seconds = td.file_seconds; this.day = td.day; this.project = td.project; }
public async Task UpdateEditorSeconds(long editor_seconds) { PluginDataProject project = await PluginData.GetPluginProject(); TimeData td = await GetTodayTimeDataSummary(project); td.editor_seconds += editor_seconds; td.editor_seconds = Math.Max(td.editor_seconds, td.session_seconds); SaveTimeDataSummaryToDisk(td); }
public async Task <TimeData> GetNewTimeDataSummary(PluginDataProject project) { NowTime nowTime = SoftwareCoUtil.GetNowTime(); TimeData td = new TimeData(); td.day = nowTime.local_day; td.timestamp = nowTime.utc_end_of_day; td.timestamp_local = nowTime.local_end_of_day; td.project = project; return(td); }
public void SaveTimeDataSummaryToDisk(TimeData timeData) { // don't save it to disk if it's null or the project info is null or empty if (timeData == null || timeData.project == null || timeData.project.directory == null || timeData.project.directory.Equals("")) { return; } string MethodName = "saveTimeDataSummaryToDisk"; NowTime nowTime = SoftwareCoUtil.GetNowTime(); List <TimeData> list = GetTimeDataList(); string projDir = timeData.project.directory; if (list != null && list.Count > 0) { for (int i = list.Count - 1; i >= 0; i--) { TimeData td = list[i]; if (td.project.directory.Equals(timeData.project.directory) && td.day.Equals(timeData.day)) { list.RemoveAt(i); break; } } } list.Add(timeData); JsonArray jsonToSave = BuildJsonObjectFromList(list); string file = GetTimeDataFile(); File.SetAttributes(file, FileAttributes.Normal); try { string content = jsonToSave.ToString(); content = content.Replace("\r\n", string.Empty).Replace("\n", string.Empty).Replace("\r", string.Empty); File.WriteAllText(file, content, System.Text.Encoding.UTF8); } catch (Exception e) { // } finally { } }
public TimeData GeTimeSummaryFromDictionary(IDictionary <string, object> dict) { TimeData summary = new TimeData(); summary.timestamp = SoftwareCoUtil.ConvertObjectToLong(dict, "timestamp"); summary.timestamp_local = SoftwareCoUtil.ConvertObjectToLong(dict, "timestamp_local"); summary.editor_seconds = SoftwareCoUtil.ConvertObjectToLong(dict, "editor_seconds"); summary.session_seconds = SoftwareCoUtil.ConvertObjectToLong(dict, "session_seconds"); summary.file_seconds = SoftwareCoUtil.ConvertObjectToLong(dict, "file_seconds"); summary.day = SoftwareCoUtil.ConvertObjectToString(dict, "day"); summary.project = PluginDataProject.GetPluginDataFromDictionary(dict); return(summary); }
public async Task <TimeData> UpdateSessionAndFileSecondsAsync(PluginDataProject project, long session_seconds) { TimeData td = await GetTodayTimeDataSummary(project); if (td != null) { td.file_seconds += 60; td.session_seconds += session_seconds; td.editor_seconds = Math.Max(td.editor_seconds, td.session_seconds); td.file_seconds = Math.Min(td.file_seconds, td.session_seconds); SaveTimeDataSummaryToDisk(td); } return(td); }
public async Task UpdateSessionFromSummaryApiAsync(long currentDayMinutes) { NowTime nowTime = SoftwareCoUtil.GetNowTime(); CodeTimeSummary ctSummary = this.GetCodeTimeSummary(); long diff = ctSummary.activeCodeTimeMinutes < currentDayMinutes ? currentDayMinutes - ctSummary.activeCodeTimeMinutes : 0; PluginDataProject project = await PluginData.GetPluginProject(); TimeData td = null; if (project != null) { td = await GetTodayTimeDataSummary(project); } else { List <TimeData> list = GetTimeDataList(); if (list != null && list.Count > 0) { foreach (TimeData timeData in list) { if (timeData.day.Equals(nowTime.local_day)) { td = timeData; break; } } } } if (td == null) { project = new PluginDataProject("Unnamed", "Untitled"); td = new TimeData(); td.day = nowTime.local_day; td.timestamp_local = nowTime.local_now; td.timestamp = nowTime.now; td.project = project; } long secondsToAdd = diff * 60; td.session_seconds += secondsToAdd; td.editor_seconds += secondsToAdd; SaveTimeDataSummaryToDisk(td); }
private async Task ValidateAndUpdateCumulativeDataAsync(long session_seconds) { TimeData td = await TimeDataManager.Instance.UpdateSessionAndFileSecondsAsync(this.project, session_seconds); // get the current payloads so we can compare our last cumulative seconds PluginData lastKpm = FileManager.GetLastSavedKeystrokeStats(); if (SoftwareCoUtil.IsNewDay()) { // the days don't match. don't use the editor or session seconds for a different day lastKpm = null; // clear out data from the previous day await WallclockManager.Instance.GetNewDayCheckerAsync(); if (td != null) { td = null; this.project_null_error = "TimeData should be null as its a new day"; } } this.workspace_name = SoftwareCoUtil.workspace_name; this.hostname = SoftwareCoUtil.getHostname(); this.cumulative_session_seconds = 60; this.cumulative_editor_seconds = 60; if (td != null) { this.cumulative_editor_seconds = td.editor_seconds; this.cumulative_session_seconds = td.session_seconds; } else if (lastKpm != null) { // no time data found, project null error this.project_null_error = "TimeData not found using " + this.project.directory + " for editor and session seconds"; this.cumulative_editor_seconds = lastKpm.cumulative_editor_seconds + 60; this.cumulative_session_seconds = lastKpm.cumulative_session_seconds + 60; } if (this.cumulative_editor_seconds < this.cumulative_session_seconds) { this.cumulative_editor_seconds = cumulative_session_seconds; } }