Пример #1
0
        private async void BtnLogin_OnClick(object sender, EventArgs e)
        {
            var model = DataContext as LoginViewModel;

            if (string.IsNullOrEmpty(model.ApiKey))
            {
                MessageBox.Show("Set your Asana API key", "Error", MessageBoxButton.OK);
                return;
            }

            btnLogin.IsEnabled = false;
            AsanaStateService.SetAuthToken(model.ApiKey);
            model.IsBusy = true;
            var response = await new AsanaRespository().GetWorkspaces();

            btnLogin.IsEnabled = true;


            if (AsanaClient.ProcessResponse(response, true))
            {
                AsanaStateService.SetAuthToken(model.ApiKey);
                ExNavigationService.Navigate <MainPage>();
            }
            else
            {
                AsanaStateService.SetAuthToken("");
                OnError(response);
            }
            model.IsBusy = false;
        }
Пример #2
0
        async void browser_Navigating(object sender, NavigatingEventArgs e)
        {
            Model.IsBusy = true;
            try
            {
                if (e.Uri.Host.Contains(_website))
                {
                    string[] data = e.Uri.Fragment.Split(new string[] { "&" }, StringSplitOptions.RemoveEmptyEntries);

                    var token = data[0].Replace("#access_token=", "");

                    token = HttpUtility.UrlDecode(token);

                    AsanaStateService.SetAuthToken(token);

                    var response = await new AsanaRespository().GetUser("me");

                    if (AsanaClient.ProcessResponse(response))
                    {
                        if (response.Data.id != SettingsService.LoggedUserId)
                        {
                            await Bootstrapper.Current.Container.Resolve <DbService>().ClearDb();
                        }

                        SettingsService.LoggedUserId  = response.Data.id;
                        SettingsService.CurrentUserId = response.Data.id;
                        ExNavigationService.Navigate <MainPage>();
                    }
                }
            }
            catch (Exception exc)
            {
                Debug.WriteLine(exc.Message);
            }
        }
Пример #3
0
        async void SendSomment()
        {
            if (String.IsNullOrEmpty(CommentText))
            {
                return;
            }

            if (IsBusy)
            {
                return;
            }

            IsBusy       = true;
            ProgressText = "Processing";


            var response = await new AsanaRespository().CreateTaskStory(Id, new AsanaStory()
            {
                text = CommentText
            });

            if (AsanaClient.ProcessResponse(response))
            {
                response.Data.userId   = response.Data.created_by.id;
                response.Data.targetId = Id;
                await GetStorageService().Insert(response.Data);

                Comments.Insert(0, response.Data);

                Container.Resolve <IMessagePublisher>().Publish(new FocusListMessage(this));
                CommentText = "";
            }
            IsBusy = false;
            SetDefaultProgressText();
        }
        protected override async void OnNavigatedTo()
        {
            //if(AsanaStateService.IsSetApiKey)
            //{
            //    ExNavigationService.Navigate<MainPage>();
            //    return;
            //}

            if (AsanaStateService.IsSetAuthToken)
            {
                if (await NetworkHelper.IsNetworkAvailableViaRequest(3000))
                {
                    var response = await new AsanaApiRepository().GetUser("me");

                    if (AsanaClient.ProcessResponse(response, true))
                    {
                        NavigationService.Navigate <MainPage>();
                    }
                    else
                    {
                        NavigationService.Navigate <LoginPage>();
                    }
                }
                else
                {
                    NavigationService.Navigate <MainPage>();
                }
            }
            else
            {
                NavigationService.Navigate <LoginPage>();
            }
        }
        async Task AddTag(string name)
        {
            if (String.IsNullOrEmpty(name))
            {
                return;
            }

            var tag = new AsanaTag()
            {
                name = name
            };

            IsBusy = true;
            var response = await new AsanaRespository().CreateTag(WorkspaceId, tag);

            if (AsanaClient.ProcessResponse(response))
            {
                response.Data.workspaceid = WorkspaceId;
                await new StorageService().Insert(response.Data);

                Tags.Add(response.Data);

                var selectedTags = SelectedTags;
                selectedTags.Add(response.Data);

                SelectedTags = selectedTags;
            }
            IsBusy = false;
        }
Пример #6
0
        async Task LoadTaskTags(bool isUserAction = false)
        {
            if (CheckInternetConnection(false))
            {
                var response = await new AsanaRespository().GetTask(Id);

                if (AsanaClient.ProcessResponse(response, !isUserAction, async r =>
                {
                    return(await ProcessNotFoundTask(r));
                }))
                {
                    var dbTags = await new StorageService().GetTaskTagsByTask(Id);



                    if (response.Data.tags != null)
                    {
                        foreach (var tag in response.Data.tags)
                        {
                            var dbTag = dbTags.FirstOrDefault(x => x.TagId == tag.id);

                            if (dbTag != null)
                            {
                                dbTag.IsFoundInDb = true;
                            }
                            else
                            {
                                await GetStorageService().Insert(new AsanaTagTask()
                                {
                                    TagId = tag.id, TaskId = Id, id = Guid.NewGuid().GetHashCode()
                                });
                            }
                        }
                    }


                    foreach (var asanaTagTask in dbTags.Where(x => !x.IsFoundInDb))
                    {
                        await GetStorageService().Delete(asanaTagTask);
                    }



                    DispatcherHelper.OnUi(async() =>
                    {
                        await SetTags();
                    });
                }
            }
        }
Пример #7
0
        async Task LoadUserId()
        {
            if (SettingsService.LoggedUserId > 0)
            {
                return;
            }

            var response = await new AsanaApiRepository().GetUser("me");

            if (AsanaClient.ProcessResponse(response, true))
            {
                SettingsService.LoggedUserId  = response.Data.id;
                SettingsService.CurrentUserId = response.Data.id;
            }
        }
Пример #8
0
        protected override async void OnNavigatedTo(NavigationEventArgs e)
        {
            base.OnNavigatedTo(e);

            SmallProfiler.PrintLine("StartPage - OnNavigatedTo");


#if DEBUG
            Bootstrapper.Current.Container.Resolve <IApplicationSettingsService>().SetSetting("ApiKey", "2IPsBtr.EBOluTYUi2mwwz86RkWKNHr6");
            AsanaStateService.Initialize();
#endif


            if (AsanaStateService.IsSetApiKey)
            {
                ExNavigationService.Navigate <MainPage>();
                return;
            }

            if (AsanaStateService.IsSetAuthToken)
            {
                if (NetworkHelper.IsNetworkAvailableNew())
                {
                    var response = await new AsanaRespository().GetUser("me");

                    if (AsanaClient.ProcessResponse(response, true))
                    {
                        ExNavigationService.Navigate <MainPage>();
                    }
                    else
                    {
                        ExNavigationService.Navigate <LoginNewPage>();
                    }
                }
                else
                {
                    ExNavigationService.Navigate <MainPage>();
                }
            }
            else
            {
                ExNavigationService.Navigate <LoginNewPage>();
            }
        }
Пример #9
0
        async Task RefreshData()
        {
            if (IsBusy)
            {
                return;
            }

            if (!CheckInternetConnection(true))
            {
                return;
            }

            IsBusy = true;
            var response = await new AsanaRespository().GetTask(Id);

            if (AsanaClient.ProcessResponse(response, false, async r =>
            {
                return(await ProcessNotFoundTask(r));
            }))
            {
                var task = await new StorageService().Find <AsanaTask>(Id);
                MapperService.Map(response.Data, task.workspaceid);

                await GetStorageService().Save(response.Data);


                DispatcherHelper.OnUi(async() =>
                {
                    await SetTaskInfo(response.Data);
                });


                await LoadStories(false);
                await LoadSubtasks(false);
                await LoadTaskTags(false);
            }

            DispatcherHelper.OnUi(() =>
            {
                IsBusy = false;
            });
        }
Пример #10
0
        async System.Threading.Tasks.Task LoadStories(bool isUserAction = false)
        {
            if (CheckInternetConnection(false))
            {
                AddOperation();
                var stories =
                    await
                    new AsanaRespository().GetStoriesByTask(Id);

                if (AsanaClient.ProcessResponse(stories, !isUserAction))
                {
                    var dbStories = await GetStorageService().GetStories(Id);

                    foreach (var story in stories.Data)
                    {
                        var dbStory =
                            dbStories.FirstOrDefault(
                                x => x.id == story.id);
                        if (dbStory != null)
                        {
                            dbStory.IsFoundInDb = true;
                        }


                        story.userId   = story.created_by.id;
                        story.targetId = Id;
                        await GetStorageService().Save(story);
                    }

                    foreach (var story in dbStories.Where(x => !x.IsFoundInDb))
                    {
                        await GetStorageService().Delete(story);
                    }
                }


                await LoadStoriesFromDb();
            }

            RemoveOperation();
        }
Пример #11
0
        /// <summary>
        /// Agent that runs a scheduled task
        /// </summary>
        /// <param name="task">
        /// The invoked task
        /// </param>
        /// <remarks>
        /// This method is called when a periodic or resource intensive task is invoked
        /// </remarks>
        protected override async void OnInvoke(ScheduledTask task)
        {
            Debug.WriteLine("OnInvoke");

            if (!AsanaStateService.IsSetAuthToken && !AsanaStateService.IsSetApiKey)
            {
                Debug.WriteLine("Complete - no auth");
                NotifyComplete();
                return;
            }


            var response = await new AsanaRespository().GetWorkspaces();

            if (!AsanaClient.ProcessResponse(response, true))
            {
                Debug.WriteLine("Complete - no connection");
                NotifyComplete();
                return;
            }


            var service = new LoadDataService(false);

            service.IsBackgroundAgent = true;

            var projects = await new StorageService().GetProjectsForRefresh();

            foreach (var project in projects)
            {
                await service.LoadProjectTasks(project.workspaceid, project.id, false);
            }


            TileService.UpdateMainTile();

            Debug.WriteLine("Complete - OK");
            NotifyComplete();
        }
Пример #12
0
        public async void AddNewSubTask()
        {
            if (String.IsNullOrEmpty(NewSubTaskText))
            {
                return;
            }

            if (!CheckInternetConnection(true))
            {
                return;
            }

            IsBusy = true;
            var task = await new StorageService().Find <AsanaTask>(Id);



            var dto = MapperService.CreateTaskDTO(0, NewSubTaskText, "", 0, "later", 0, false, null, null);

            var response = await new AsanaRespository().CreateTask(task.workspaceid, dto, Id);

            if (AsanaClient.ProcessResponse(response))
            {
                MapperService.Map(response.Data, task.projectid, task.workspaceid);
                await new StorageService().Insert(response.Data);


                Subtasks.Add(response.Data);
                NewSubTaskText = "";

                Container.Resolve <IMessagePublisher>().Publish(new FocusListMessage(this)
                {
                    IsSubtasks = true
                });
            }

            IsBusy = false;
        }
Пример #13
0
        public async Task UpdateTask(long id, bool isCompleted, DateTime?dueOn, Action <AsanaTask> action)
        {
            if (IsBusy)
            {
                return;
            }

            ProgressText = "Syncing";
            IsBusy       = true;

            var task = await new StorageService().Find <AsanaTask>(id);

            if (!dueOn.HasValue)
            {
                dueOn = task.due_on;
            }

            var dto = MapperService.CreateTaskDTO(id, task.name, task.notes, task.projectid, task.assignee_status,
                                                  task.assigneeid, isCompleted, dueOn, null);

            var response = await new AsanaApiRepository().UpdateTask(dto);

            if (AsanaClient.ProcessResponse(response))
            {
                task.due_on    = dueOn;
                task.completed = isCompleted;

                await new StorageService().Save(task);

                if (action != null)
                {
                    action(task);
                }
            }

            IsBusy = false;
            SetDefaultProgressText();
        }
 public AsanaOAuthBaseActivity(ICrateManager crateManager, IAsanaParameters parameters, IRestfulServiceClient client) : base(crateManager)
 {
     // :( i want dependancy injection here ↓
     AClient = new AsanaClient(parameters, client);
 }
        async System.Threading.Tasks.Task ProcessFollowers(AsanaTask task)
        {
            var currentFollowers = SelectedFollowers.Select(x => x.id).ToList();

            var followersToAdd    = new List <long>();
            var followersToRemove = new List <long>();

            foreach (var currentFollower in currentFollowers)
            {
                if (!OldFollowersIds.Contains(currentFollower))
                {
                    followersToAdd.Add(currentFollower);
                }
            }

            foreach (var oldFollowersId in OldFollowersIds)
            {
                if (!currentFollowers.Contains(oldFollowersId))
                {
                    followersToRemove.Add(oldFollowersId);
                }
            }

            var success = false;

            if (followersToAdd.Any())
            {
                var response = await new AsanaRespository().AddFollowers(task.id,
                                                                         followersToAdd);

                if (AsanaClient.ProcessResponse(response, true))
                {
                    success = true;
                }
                else
                {
                    return;
                }
            }


            if (followersToRemove.Any())
            {
                var response = await new AsanaRespository().RemoveFollowers(task.id,
                                                                            followersToRemove);

                if (AsanaClient.ProcessResponse(response, true))
                {
                    success = true;
                }
                else
                {
                    return;
                }
            }

            if (success)
            {
                task.SetFollowers(currentFollowers);
            }

            task.followers = null;
            if (followersToAdd.Any() || followersToRemove.Any())
            {
                await PrepareAndSaveTaskToDb(task);
            }
        }
        async System.Threading.Tasks.Task ProcessTags(AsanaTask task)
        {
            var currentTags = SelectedTags.Select(x => x.id).ToList();

            var tagsToAdd    = new List <long>();
            var tagsToRemove = new List <long>();

            foreach (var tag in currentTags)
            {
                if (!OldTagsIds.Contains(tag))
                {
                    tagsToAdd.Add(tag);
                }
            }

            foreach (var tag in OldTagsIds)
            {
                if (!currentTags.Contains(tag))
                {
                    tagsToRemove.Add(tag);
                }
            }

            var taskTags = await new StorageService().GetTaskTagsByTask(task.id);


            var forInsert = new List <AsanaTagTask>();
            var forDelete = new List <AsanaTagTask>();

            foreach (var l in tagsToAdd)
            {
                var response = await new AsanaRespository().AddTag(task.id, l);

                if (AsanaClient.ProcessResponse(response, true))
                {
                    var link = new AsanaTagTask()
                    {
                        TagId = l, TaskId = task.id, id = Guid.NewGuid().GetHashCode()
                    };
                    forInsert.Add(link);
                }
            }


            foreach (var l in tagsToRemove)
            {
                var response = await new AsanaRespository().RemoveTag(task.id, l);

                if (AsanaClient.ProcessResponse(response, true))
                {
                    var link = taskTags.FirstOrDefault(x => x.TagId == l);
                    if (link != null)
                    {
                        forDelete.Add(link);
                    }
                }
            }

            foreach (var asanaTagTask in forInsert)
            {
                await new StorageService().Insert(asanaTagTask);
            }
            foreach (var asanaTagTask in forDelete)
            {
                await new StorageService().Delete(asanaTagTask);
            }
        }
        async void SaveTask()
        {
            if (IsBusy || IsBlockingProgress)
            {
                return;
            }

            if (string.IsNullOrEmpty(Name))
            {
                MessageBox.Show("Specify name");
                return;
            }



            if (Project == null)
            {
                MessageBox.Show("Specify project");
                return;
            }

            IsBlockingProgress = true;

            DateTime?dueDate = null;

            if (IsUseDueDate)
            {
                dueDate = DueDate;
            }

            var dto = MapperService.CreateTaskDTO(Id.GetValueOrDefault(0), Name,
                                                  Notes,
                                                  !IsEditMode ? Project.id : 0,
                                                  Status.name,
                                                  User != null && User.id > 0 ? User.id : -1,
                                                  IsCompleted, dueDate, SelectedFollowers.Select(x => x.id).ToList());


            //var task = new AsanaTaskDTO() {
            //    name = model.Name,
            //    notes = model.Notes,
            //    completed = model.IsCompleted,
            //    id = model.Id.GetValueOrDefault(0),
            //    assignee = -1,
            //    assignee_status = model.Status.name };


            //if (model.IsUseDueDate)
            //{
            //    task.due_on = model.DueDate.ToString("yyyy-MM-dd");
            //}
            //else
            //{
            //    task.due_on = "null";
            //}

            //if (!model.IsEditMode)
            //{
            //    task.projects = model.Project.id;
            //}
            //if (model.User != null && model.User.id > 0)
            //{
            //    task.assignee = model.User.id;
            //}

            //save task for syncing later
            if (!CheckInternetConnection(false))
            {
                if (IsForSync || !IsEditMode)
                {
                    AsanaTask dbTask;
                    if (IsEditMode)
                    {
                        dbTask = Task;
                    }
                    else
                    {
                        dbTask = new AsanaTask()
                        {
                            id          = await new StorageService().GetLocalTaskId(),
                            workspaceid = Project.workspaceid,
                            modified_at = DateTime.Now,
                            created_at  = DateTime.Now,
                            IsForSync   = true
                        };
                    }

                    dbTask.name            = dto.name;
                    dbTask.notes           = dto.notes;
                    dbTask.completed       = dto.completed;
                    dbTask.assignee_status = dto.assignee_status;
                    dbTask.assigneeid      = dto.assignee == AsanaConstants.Utils.NULL_VALUE ? -1 : long.Parse(dto.assignee);
                    dbTask.projectid       = Project.id;
                    dbTask.parentId        = ParentId;
                    dbTask.SetFollowers(dto.followers.Select(X => X.id).ToList());

                    if (IsUseDueDate)
                    {
                        dbTask.due_on = DueDate;
                    }
                    else
                    {
                        dbTask.due_on = null;
                    }


                    await new StorageService().Save(dbTask);


                    if (!IsEditMode)
                    {
                        MessageBox.Show("Task saved for syncing when network will be available");
                    }

                    IsBlockingProgress = false;

                    NavigationManager.GoBack();

                    return;
                }
            }

            if (IsForSync && IsEditMode)
            {
                var task = await new StorageService().Find <AsanaTask>(Id.Value);

                await CheckSyncStatus(task);

                IsForSync          = false;
                IsBlockingProgress = false;
                return;
            }

            //normal save
            var response = !IsEditMode ? await new AsanaRespository().CreateTask(WorkspaceId, dto, ParentId) : await new AsanaRespository().UpdateTask(dto);

            if (AsanaClient.ProcessResponse(response))
            {
                if (IsEditMode && OldProjectId != Project.id)
                {
                    var newResponse = await new AsanaRespository().ChangeTaskProject(Id.Value, OldProjectId, Project.id);


                    if (AsanaClient.ProcessResponse(newResponse))
                    {
                        await PrepareAndSaveTaskToDb(response.Data);
                        await ProcessFollowers(response.Data);
                        await ProcessTags(response.Data);
                    }
                }
                else
                {
                    await PrepareAndSaveTaskToDb(response.Data);

                    if (IsEditMode)
                    {
                        await ProcessFollowers(response.Data);
                    }
                    await ProcessTags(response.Data);
                }



                NavigationManager.GoBack();
                return;
            }

            IsBlockingProgress = false;
        }