public static void CreateOrUpdateTileForProject(Project project, int count)
        {
            StandardTileData NewTileData = new StandardTileData
            {
                Title = project.name,
                BackgroundImage = null,
                Count = count,
                BackTitle = project.name,
                BackBackgroundImage = null,
                BackContent = "You have uncompleted tasks for today"
            };

            if (!Tiles.Keys.Select(key => key == project).FirstOrDefault())
            {
                ShellTile.Create(new Uri("/SecondaryTile.xaml?Project=", UriKind.Relative), NewTileData);
                string IdentifyFromString = String.Format("ProjectName={0}&ProjectId={1}", project.name, project.id);
                ShellTile TileOfProjectCreated =
                    ShellTile.ActiveTiles.FirstOrDefault(x => x.NavigationUri.ToString().Contains(IdentifyFromString));
                Tiles.Add(project, TileOfProjectCreated);
            }
            else
            {
                Tiles[project].Update(NewTileData);
            }
        }
 internal static Uri TaskDetailPage(Project project, Item task)
 {
     TaskDetail.Project = project;
     TaskDetail.Task = task;
     return new Uri("/Pages/TaskDetail.xaml", UriKind.Relative);
 }
 internal static Uri EditProjectPage(Project project)
 {
     EditProject.projSelected = project;
     return new Uri("/Pages/EditProject.xaml", UriKind.Relative);
 }
 internal static Uri ProjectDetailPage(Project selected)
 {
     ProjectDetail.projectSelected = selected;
     return new Uri("/Pages/ProjectDetail.xaml", UriKind.Relative);
 }
 internal static Uri AddTaskPage(Project selected)
 {
     AddTask.projectSelected = selected;
     return new Uri("/Pages/AddTask.xaml", UriKind.Relative);
 }
 internal static Uri AddNotePage(Project project, Item taskSelected)
 {
     Pages.AddNotePage.Project = project;
     Pages.AddNotePage.Task = taskSelected;
     return new Uri("/Pages/AddNotePage.xaml", UriKind.Relative);
 }
        void doneIconButton_Click(object sender, EventArgs e)
        {
            TodoistService todoistService = new TodoistService();

            var cmdTimeGenerated = DateTime.Now;
            var tempID = Utils.DateTimeToUnixTimestamp(cmdTimeGenerated).ToString();

            Project Project = new Project
            {
                name = projectNameTextBox.Text,
                color = ((int)ColorPickerListBox.SelectedItem),
            };

            doneIconButton.IsEnabled = false;

            todoistService.AddProject(cmdTimeGenerated, Project,
            (data) =>
            {
                app.projects.Insert(0, Project);

                Utils.DateTimeToUnixTimestamp(cmdTimeGenerated).ToString();
                Project.id = data.TempIdMapping[tempID];

                //MainTodoistPage.updateProjectList(data.Projects);

                MainTodoistPage.showMessage = (progress) =>
                {
                    Utils.ProgressIndicatorStatus(String.Format("\"{0}\" added.", Project.name), progress);
                };
            },
            (errorMsg) =>
            {
                MessageBox.Show(Utils.Message(errorMsg), "Metroist", MessageBoxButton.OK);
            },
            () =>
            {
                doneIconButton.IsEnabled = true;

                var currentPage = app.RootFrame.Content as PhoneApplicationPage;

                if(currentPage == this)
                    NavigationService.GoBack();
            });
        }
        private void UpdateDeletingToServer(Project project, int indexOf)
        {
            TodoistService todoistService = new TodoistService();

            var commandTimeGenerated = DateTime.Now;

            deleteIconButton.IsEnabled = false;

            todoistService.RemoveTask(commandTimeGenerated, Task,
            (data) =>
            {
                app.items.RemoveAt(indexOf);
                project.cache_count--;
                taskDeleted = true;

                MainTodoistPage.updateProjectList(data.Projects);
            },
            (errorMsg) =>
            {
                //@TODO: Error dynamic
            },
            () =>
            {
                deleteIconButton.IsEnabled = true;

                var currentPage = app.RootFrame.Content as PhoneApplicationPage;

                if (currentPage == this)
                    NavigationService.GoBack();
            });
        }
        private void UpdateBasedOnTemporaryDessychronized(Data data)
        {
            if (app.TemporaryDesynchronized.Count > 0)
            {
                var addProjects = app.TemporaryDesynchronized.Where(x => (x["type"] as string).Contains("project_add")).ToList();
                var removeProjects = app.TemporaryDesynchronized.Where(x => (x["type"] as string).Contains("project_delete")).ToList();

                if (addProjects.Count > 0)
                {
                    foreach (var addProject in addProjects)
                    {
                        Project Project = new Project
                        {
                            name = (string)(addProject["args"] as Dictionary<string, object>)["name"],
                            color = (int)(addProject["args"] as Dictionary<string, object>)["color"],
                        };

                        string tempKey = (addProject["temp_id"]).ToString();

                        if (data.TempIdMapping.ContainsKey(tempKey))
                            Project.id = data.TempIdMapping[tempKey];

                        data.Projects.Add(Project);
                    }
                }

                if (removeProjects.Count > 0)
                {
                    foreach (var removeProject in removeProjects)
                    {
                        var dicTempArgs = removeProject["args"] as Dictionary<string, object>;

                        var tempStringIdProjects = (dicTempArgs["ids"] as string).Replace("[", string.Empty).Replace("]", string.Empty).Split(',');

                        List<int> idProjects = new List<int>();

                        foreach (var itemStringID in tempStringIdProjects)
                        {
                            idProjects.Add(Int32.Parse(itemStringID));
                        }

                        if (idProjects.Count > 1)
                        {
                            throw new Exception("Multiple deletions is not implemented yet.");
                        }

                        var realProjectToRemove = data.Projects.Where(x => x.id == idProjects.First()).FirstOrDefault();

                        if (realProjectToRemove != null)
                        {
                            data.Projects.Remove(realProjectToRemove);
                        }
                        else
                        {
                            //Project was already remove at server, another words, do nothing :)
                        }
                    }
                }
            }
        }