Exemplo n.º 1
0
        /// <returns>
        /// true: notify new active task
        /// false: nothing to notify
        /// </returns>
        public static bool AddAllUnfinishedTaskOf(Task task)
        {
            TimeSpan       timeOfDay             = DateTime.Now.TimeOfDay;
            bool           isCurrentIndexChanged = false;
            int            index          = 0;
            int            timeInfoIndex  = 0;
            UnfinishedTask unfinishedTask = null;

            while (timeInfoIndex < task.Time.Count && index < UnfinishedTasks.Count)
            {
                if (unfinishedTask == null)
                {
                    unfinishedTask = new UnfinishedTask(task, task.Time[timeInfoIndex]);
                }
                if (unfinishedTask < UnfinishedTasks[index])
                {
                    UnfinishedTasks.Insert(index, unfinishedTask);
                    isCurrentIndexChanged = isCurrentIndexChanged || RenewCurrentActiveTaskIndexAfterAdding(index, timeOfDay);
                    timeInfoIndex++;
                    unfinishedTask = null;
                }
                index++;
            }
            while (timeInfoIndex < task.Time.Count)
            {
                if (task.Time[timeInfoIndex].ActiveTimeOfDay.Value <= timeOfDay)
                {
                    CurrentIndex          = UnfinishedTasks.Count;
                    isCurrentIndexChanged = true;
                }
                UnfinishedTasks.Insert(UnfinishedTasks.Count, new UnfinishedTask(task, task.Time[timeInfoIndex]));
            }
            return(isCurrentIndexChanged);
        }
Exemplo n.º 2
0
 public static void DoLater(UnfinishedTask task)
 {
     if (UnfinishedTasks.Remove(task))
     {
         if (UnfinishedAndDoneLaterTasks.Contains(task))
         {
             throw new Exception("UnfinishedAndDoneLaterTasks is containing it now");
         }
         ;
         UnfinishedAndDoneLaterTasks.Add(task);
         int index = 0;
         while (index < SnoozedTasks.Count)
         {
             if (SnoozedTasks[index].UnfinishedTask == task)
             {
                 break;
             }
             index++;
         }
         if (index != SnoozedTasks.Count)
         {
             SnoozedTasks.RemoveAt(index);
         }
     }
     throw new Exception("UnfinishedTasks doesn't contain it to do later");
 }
Exemplo n.º 3
0
        public static void Snooze(UnfinishedTask unfinishedTask, TimeSpan duration)
        {
            if (duration <= TimeSpan.Zero)
            {
                throw new Exception("duration must be more than zero");
            }
            if (!SnoozedTasks.Any(x => x.UnfinishedTask == unfinishedTask))
            {
                SnoozedTasks.Add(new SnoozedTask()
                {
                    UnfinishedTask = unfinishedTask, OriginalNotifiedTime = unfinishedTask.NotifiedTime
                });
            }
            unfinishedTask.NotifiedTime += duration;
            int index = UnfinishedTasks.IndexOf(unfinishedTask);

            if (index == -1)
            {
                throw new Exception("UnfinishedTasks doesn't contain it to snooze");
            }
            var oldIndex = index;

            index++;
            while (index < UnfinishedTasks.Count && unfinishedTask > UnfinishedTasks[index])
            {
                index++;
            }
            index--;
            UnfinishedTasks.Move(oldIndex, index);
        }
Exemplo n.º 4
0
 public static void Done(UnfinishedTask task)
 {
     DataManager.Current.FinishTodayTasksAsync(task);
     if (!UnfinishedTasks.Remove(task))
     {
         UnfinishedAndDoneLaterTasks.Remove(task);
     }
     else
     {
         int index = 0;
         while (index < SnoozedTasks.Count)
         {
             if (SnoozedTasks[index].UnfinishedTask == task)
             {
                 break;
             }
             index++;
         }
         if (index != SnoozedTasks.Count)
         {
             SnoozedTasks.RemoveAt(index);
         }
     }
     CurrentIndex = -CurrentIndex - 1;
 }
Exemplo n.º 5
0
 static void Notify(UnfinishedTask task)
 {
     if (IsFocusing)
     {
         return;
     }
     Notifying?.Invoke(task);
 }
Exemplo n.º 6
0
        internal static void CheckChangedTask(SQLCollectionChangedArgs e)
        {
            Task changedTask = e.Item as Task;

            if (e.Property == "Time")
            {
                DateTime now = DateTime.Now;
                if (changedTask.Type == TaskType.Schedule && changedTask.GetStatusOn(now) == TaskStatus.Available)
                {
                    int index = 0;
                    while (index < SnoozedTasks.Count)
                    {
                        if (SnoozedTasks[index].UnfinishedTask.Task == changedTask)
                        {
                            SnoozedTasks.RemoveAt(index);
                        }
                        else
                        {
                            index++;
                        }
                    }
                    bool           isfree        = CurrentIndex < 0;
                    UnfinishedTask oldActiveTask = null;
                    if (CurrentIndex != -1)
                    {
                        oldActiveTask = UnfinishedTasks[GetLastestActiveTaskIndex()];
                        oldActiveTask.NotifiedTime = oldActiveTask.TimeInfo.ActiveTimeOfDay.Value;
                    }
                    RemoveAllUnfinishedTaskOf(changedTask);
                    AddAllUnfinishedTaskOf(changedTask);
                    if (CurrentIndex > -1)
                    {
                        if (oldActiveTask != UnfinishedTasks[CurrentIndex])
                        {
                            Notify(UnfinishedTasks[CurrentIndex]);
                        }
                        else if (isfree)
                        {
                            CurrentIndex = -CurrentIndex - 2;
                        }
                    }
                    else if (CurrentIndex == -1 && oldActiveTask != null)
                    {
                        Notify(null);
                    }
                }
            }
            else if (e.Property == "Repeat")
            {
                DateTime now = DateTime.Now;
                if (changedTask.Type == TaskType.Schedule && changedTask.GetStatusOn(now) == TaskStatus.Available)
                {
                    if (!UnfinishedTasks.Any(x => x.Task == changedTask))
                    {
                        if (AddAllUnfinishedTaskOf(changedTask))
                        {
                            Notify(UnfinishedTasks[CurrentIndex]);
                        }
                    }
                }
                else
                {
                    if (UnfinishedTasks.Any(x => x.Task == changedTask))
                    {
                        if (RemoveAllUnfinishedTaskOf(changedTask))
                        {
                            Notify(UnfinishedTasks[CurrentIndex]);
                        }
                    }
                }
            }
        }
Exemplo n.º 7
0
 /// <summary>
 /// use to set IsFinished true in TodayTasks table
 /// </summary>
 /// <param name="id">ID of finished task</param>
 /// <returns></returns>
 public void FinishTodayTasksAsync(UnfinishedTask task)
 {
     _sQL.AddFinishedTodayTaskAsync(task.Task.ID, task.TimeInfo.ActiveTimeOfDay.Value.TotalMinutes.ToString()).ConfigureAwait(false);
 }