public static void AddParentTasks(Data.TaskList datalist, List <Data.Task> allTasks)
 {
     foreach (var datatask in allTasks.Where(datatask => !string.IsNullOrEmpty(datatask.GoogleTaskParentTmp)))
     {
         datatask.ParentTask = GetTaskFromTaskId(allTasks, datatask.GoogleTaskParentTmp);
     }
 }
 public static void AddTopTasks(Data.TaskList datalist, List <Data.Task> allTasks)
 {
     foreach (var datatask in allTasks.Where(datatask => datatask.ParentTask == null))
     {
         datalist.TopTask.ChildTasks.Add(datatask);
     }
 }
        public static void TransferXmlAttributesAndElements(Data.TaskList toTaskList, Data.TaskList fromTaskList)
        {
            foreach (var taskTo in toTaskList.AllTasks)
            {
                foreach (var taskFrom in fromTaskList.AllTasks.Where(taskFrom => taskTo.Id == taskFrom.Id))
                {
                    taskTo.AbstractSpoonAttributes = taskFrom.AbstractSpoonAttributes;

                    taskTo.AbstractSpoonElements = taskFrom.AbstractSpoonElements;
                }
            }
        }
        public static Data.TaskList LoadTaskListFromXmlFile(string folderpath, string extension, string title)
        {
            var taskList = new Data.TaskList {
                Title = title, Id = ""
            };

            if (System.IO.File.Exists(folderpath + title + "." + extension))
            {
                ProcessReadElement(XDocument.Load(folderpath + title + "." + extension).Root, taskList.TopTask);
            }

            return(taskList);
        }
        public static Data.TaskChanges CreateListOfLocalTaskChanges(Data.TaskList oldlist, Data.TaskList newlist)
        {
            var taskChanges = new Data.TaskChanges();

            Data.TaskChange taskChange;
            bool            found;

            foreach (var oldtask in oldlist.AllTasks)
            {
                found = false;

                foreach (var newtask in newlist.AllTasks.Where(newtask => newtask.Id == oldtask.Id))
                {
                    found = true;

                    taskChange = new Data.TaskChange();

                    if (oldtask.ParentId != newtask.ParentId || oldtask.PreviousId != newtask.PreviousId)
                    {
                        taskChange.TaskChangeType = TaskChangeType.ChangeAndMove;
                    }

                    else if (oldtask.Title != newtask.Title || oldtask.Done != newtask.Done || oldtask.DueDate != newtask.DueDate || oldtask.Notes != newtask.Notes)
                    {
                        taskChange.TaskChangeType = TaskChangeType.Change;
                    }

                    if (taskChange.TaskChangeType != TaskChangeType.None)
                    {
                        taskChange.NewTask = newtask;
                        taskChange.Id      = newtask.Id;
                        taskChanges.AddChangeOverwriteExisting(taskChange);
                    }
                }
                if (!found)
                {
                    taskChange = new TaskChange();
                    taskChange.TaskChangeType = TaskChangeType.Delete;
                    taskChange.Id             = oldtask.Id;
                    taskChanges.AddChangeOverwriteExisting(taskChange);
                }
            }

            foreach (var newtask in newlist.AllTasks)
            {
                found = false;

                foreach (var oldtask in oldlist.AllTasks.Where(oldtask => oldtask.Id == newtask.Id))
                {
                    found = true;
                }

                if (!found)
                {
                    taskChange = new TaskChange
                    {
                        TaskChangeType = TaskChangeType.Create,
                        NewTask        = newtask,
                        Id             = newtask.Id
                    };
                    taskChanges.AddChangeOverwriteExisting(taskChange);
                }
            }

            return(taskChanges);
        }
Esempio n. 6
0
        private static void Sync(bool doReset = false, string taskListTitle = "")
        {
            if (!FolderPath.ValidateTodoFilePath())
            {
                Console.WriteLine("The setting TodoFilePath in app.config failed to load");
                return;
            }

            FilesHelper.EnsureFoldersExists();

            Console.WriteLine("Logging into Google Task Service ...");
            GoogleTasksManager.LogonToService();

            //Submit local task list changes to remote server
            if (!doReset && taskListTitle == "")
            {
                var listChanges = ChangeListManager.CreateListOfLocalListChangesToSubmitRemotely();
                if (listChanges.Count > 0)
                {
                    Console.WriteLine("Submit local task list changes... ");

                    GoogleTasksManager.SubmitLocalTaskListChanges(listChanges);

                    FilesHelper.DeleteLocalTaskLists(listChanges);
                }
            }

            //Load remote task lists.
            var remoteTaskLists = GoogleTasksManager.LoadLists(taskListTitle);

            if (remoteTaskLists.Count == 0)
            {
                Console.WriteLine("\nNo remoteTaskList found.");
                return;
            }

            //Reset all local tasklists when this option is selected
            if (doReset && taskListTitle == "")
            {
                FilesHelper.DeleteAllTaskLists();
            }

            //For each remote task list, downloading task list or sync with local task list.
            foreach (var remoteTaskList in remoteTaskLists)
            {
                Console.WriteLine("Syncing TaskList " + remoteTaskList.Title + "...");

                Data.TaskList localTaskList = null;

                if (!doReset)
                {
                    localTaskList = AbstractSpoonXmlManager.LoadTaskListFromXmlFile(FolderPath.TodoFilePath, "tdl", remoteTaskList.Title);
                    var localTaskListSync    = AbstractSpoonXmlManager.LoadTaskListFromXmlFile(FolderPath.LocalChangesCompareFilePath, "xml", remoteTaskList.Title);
                    var localTaskListChanges = ChangeListManager.CreateListOfLocalTaskChanges(localTaskListSync, localTaskList);
                    // Send all changes in local file to remote server (Google Task Cloud).
                    Console.WriteLine("Local change count:" + localTaskListChanges.Count);
                    GoogleTasksManager.SubmitLocalTaskChanges(remoteTaskList, localTaskListChanges);
                }

                GoogleTasksManager.LoadTasks(remoteTaskList);

                TasksReferenceManager.ConvertTaskIdToAbstractSpoon(remoteTaskList);

                if (!doReset)
                {
                    AbstractSpoonXmlManager.TransferXmlAttributesAndElements(remoteTaskList, localTaskList);
                }

                AbstractSpoonXmlManager.SaveAbstractSpoonTaskListToXmlFile(FolderPath.TodoFilePath, "tdl", remoteTaskList);
                AbstractSpoonXmlManager.SaveAbstractSpoonTaskListToXmlFile(FolderPath.LocalChangesCompareFilePath, "xml", remoteTaskList);

                Console.WriteLine("Done");
            }
            // Delete local tasklists where not existing on remote server.
            if (taskListTitle == "")
            {
                string[] localTodoFiles = FilesHelper.GetTodoFiles();

                foreach (var remotelyDeleted in ChangeListManager.GetChangeListOfRemotelyDeletedLists(localTodoFiles, remoteTaskLists))
                {
                    Console.WriteLine("Delete local verison of \"" + remotelyDeleted.Title + "\"");
                    FilesHelper.DeleteLocalTaskListByTitle(remotelyDeleted.Title);
                }
            }
        }
        public static void SaveAbstractSpoonTaskListToXmlFile(string folderpath, string extension, Data.TaskList taskList)
        {
            var settings = new XmlWriterSettings {
                Indent = true, Encoding = System.Text.Encoding.Unicode
            };

            var writer = XmlWriter.Create(folderpath + taskList.Title + "." + extension, settings);

            writer.WriteStartDocument();

            writer.WriteStartElement("TODOLIST");
            writer.WriteAttributeString("NEXTUNIQUEID", TasksReferenceManager.GetNextUniqueAbstractSpoonId(taskList));
            WriteTasksToXml(writer, taskList.TopTask.ChildTasks);
            writer.WriteEndDocument();

            writer.Flush();
            writer.Close();
        }