コード例 #1
0
 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;
 }
コード例 #2
0
        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);
        }
コード例 #3
0
        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);
        }
コード例 #4
0
        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
            {
            }
        }
コード例 #5
0
        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);
        }
コード例 #6
0
        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);
        }
コード例 #7
0
        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);
        }
コード例 #8
0
        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;
            }
        }