private void OnModelChanged(ModelChangedMessage msg)
        {
            var model = msg.Model as TagModel;

            if (model == null)
            {
                return;
            }

            if (msg.PropertyName == TagModel.PropertyName ||
                model.WorkspaceId == workspaceId)
            {
                Sort();
                OnUpdated();
            }
            else if (msg.PropertyName == TagModel.PropertyWorkspaceId ||
                     msg.PropertyName == TagModel.PropertyIsShared)
            {
                if (model.WorkspaceId == workspaceId)
                {
                    models.Add(model);
                    Sort();
                    OnUpdated();
                }
                else
                {
                    var idx = models.IndexOf(model);
                    if (idx >= 0)
                    {
                        models.RemoveAt(idx);
                        OnUpdated();
                    }
                }
            }
        }
 private void OnModelChanged(ModelChangedMessage msg)
 {
     if (msg.Model == currentEntry)
     {
         // Listen for changes regarding current running entry
         if (msg.PropertyName == TimeEntryModel.PropertyState ||
             msg.PropertyName == TimeEntryModel.PropertyStartTime ||
             msg.PropertyName == TimeEntryModel.PropertyStopTime ||
             msg.PropertyName == TimeEntryModel.PropertyDeletedAt)
         {
             if (currentEntry.State == TimeEntryState.Finished || currentEntry.DeletedAt.HasValue)
             {
                 currentEntry = TimeEntryModel.GetDraft();
             }
             Rebind();
         }
     }
     else if (msg.Model is TimeEntryModel)
     {
         // When some other time entry becomes Running we need to switch over to that
         if (msg.PropertyName == TimeEntryModel.PropertyState ||
             msg.PropertyName == TimeEntryModel.PropertyIsShared)
         {
             var entry = (TimeEntryModel)msg.Model;
             if (entry.State == TimeEntryState.Running && ForCurrentUser(entry))
             {
                 currentEntry = entry;
                 Rebind();
             }
         }
     }
 }
Exemple #3
0
        private void OnModelChanged(ModelChangedMessage msg)
        {
            if (currentTimeEntry == msg.Model)
            {
                if (msg.PropertyName == TimeEntryModel.PropertyState ||
                    msg.PropertyName == TimeEntryModel.PropertyDescription ||
                    msg.PropertyName == TimeEntryModel.PropertyStartTime ||
                    msg.PropertyName == TimeEntryModel.PropertyProjectId ||
                    msg.PropertyName == TimeEntryModel.PropertyTaskId ||
                    msg.PropertyName == TimeEntryModel.PropertyUserId)
                {
                    if (currentTimeEntry.State != TimeEntryState.Running || !ForCurrentUser(currentTimeEntry))
                    {
                        currentTimeEntry = null;
                    }

                    SyncNotification();
                }
            }
            else if (currentTimeEntry != null &&
                     msg.Model.Id == currentTimeEntry.ProjectId &&
                     msg.Model == currentTimeEntry.Project)
            {
                if (msg.PropertyName == ProjectModel.PropertyName ||
                    msg.PropertyName == ProjectModel.PropertyClientId)
                {
                    SyncNotification();
                }
            }
            else if (currentTimeEntry != null &&
                     currentTimeEntry.ProjectId != null &&
                     currentTimeEntry.Project != null &&
                     msg.Model.Id == currentTimeEntry.Project.ClientId &&
                     msg.Model == currentTimeEntry.Project.Client)
            {
                if (msg.PropertyName == ClientModel.PropertyName)
                {
                    SyncNotification();
                }
            }
            else if (msg.Model is TimeEntryModel)
            {
                var entry = (TimeEntryModel)msg.Model;
                if (msg.PropertyName == TimeEntryModel.PropertyState ||
                    msg.PropertyName == TimeEntryModel.PropertyIsShared ||
                    msg.PropertyName == TimeEntryModel.PropertyIsPersisted ||
                    msg.PropertyName == TimeEntryModel.PropertyUserId)
                {
                    if (entry.IsShared && entry.IsPersisted && entry.State == TimeEntryState.Running && ForCurrentUser(entry))
                    {
                        currentTimeEntry = entry;
                        SyncNotification();
                    }
                }
            }
        }
Exemple #4
0
        private void DispatchModelChanged(ModelChangedMessage msg)
        {
            // Protect against Java side being GCed
            if (Handle == IntPtr.Zero)
            {
                return;
            }

            OnModelChanged(msg);
        }
 protected virtual void OnModelChanged(ModelChangedMessage msg)
 {
     if (msg.Model == TimeEntry)
     {
         // Listen for changes regarding current running entry
         if (msg.PropertyName == TimeEntryModel.PropertyState ||
             msg.PropertyName == TimeEntryModel.PropertyStartTime ||
             msg.PropertyName == TimeEntryModel.PropertyStopTime ||
             msg.PropertyName == TimeEntryModel.PropertyDescription ||
             msg.PropertyName == TimeEntryModel.PropertyIsBillable ||
             msg.PropertyName == TimeEntryModel.PropertyProjectId ||
             msg.PropertyName == TimeEntryModel.PropertyTaskId ||
             msg.PropertyName == TimeEntryModel.PropertyDeletedAt)
         {
             Rebind();
         }
     }
     else if (TimeEntry != null && TimeEntry.ProjectId == msg.Model.Id && TimeEntry.Project == msg.Model)
     {
         if (msg.PropertyName == ProjectModel.PropertyName ||
             msg.PropertyName == ProjectModel.PropertyColor ||
             msg.PropertyName == ProjectModel.PropertyClientId)
         {
             Rebind();
         }
     }
     else if (TimeEntry != null && TimeEntry.TaskId == msg.Model.Id && TimeEntry.Task == msg.Model)
     {
         if (msg.PropertyName == TaskModel.PropertyName)
         {
             Rebind();
         }
     }
     else if (TimeEntry != null && TimeEntry.ProjectId != null && TimeEntry.Project != null &&
              model.Project.ClientId == msg.Model.Id && TimeEntry.Project.Client == msg.Model)
     {
         if (msg.PropertyName == ClientModel.PropertyName)
         {
             Rebind();
         }
     }
     else if (TimeEntry != null && msg.Model is TimeEntryTagModel)
     {
         var inter = (TimeEntryTagModel)msg.Model;
         if (inter.FromId == TimeEntry.Id)
         {
             // Schedule rebind, as if we do it right away the RelatedModelsCollection will not
             // have been updated yet
             Android.App.Application.SynchronizationContext.Post((state) => {
                 Rebind();
             }, null);
         }
     }
 }
        private void OnModelChanged(ModelChangedMessage msg)
        {
            if (Handle == IntPtr.Zero)
            {
                return;
            }

            if (msg.Model == model)
            {
                EnsureModel();
            }
        }
Exemple #7
0
            protected override void OnModelChanged(ModelChangedMessage msg)
            {
                if (msg.Model != DataSource)
                {
                    return;
                }

                if (msg.PropertyName == TaskModel.PropertyName)
                {
                    Rebind();
                }
            }
Exemple #8
0
        private void OnModelChanged(ModelChangedMessage msg)
        {
            if (!msg.Model.IsShared)
            {
                return;
            }
            var entry = msg.Model as TimeEntryModel;

            if (entry == null)
            {
                return;
            }

            if (entry.DeletedAt == null && entry.State != TimeEntryState.New)
            {
                var grp = FindGroupWith(entry);
                if (grp == null)
                {
                    grp = GetGroupFor(entry);
                    grp.Models.Add(entry);
                    Sort();
                    OnUpdated();
                }
                else if (msg.PropertyName == TimeEntryModel.PropertyStartTime)
                {
                    // Check that the entry is still in the correct group:
                    var date = entry.StartTime.ToLocalTime().Date;
                    if (grp.Date != date)
                    {
                        // Need to move entry:
                        grp.Models.Remove(entry);

                        grp = GetGroupFor(entry);
                        grp.Models.Add(entry);
                    }
                    Sort();
                    OnUpdated();
                }
            }
            else if (msg.PropertyName == TimeEntryModel.PropertyDeletedAt)
            {
                var grp = FindGroupWith(entry);
                if (grp != null)
                {
                    grp.Models.Remove(entry);
                    if (grp.Models.Count == 0)
                    {
                        dateGroups.Remove(grp);
                    }
                    OnUpdated();
                }
            }
        }
Exemple #9
0
 private void OnModelChanged(ModelChangedMessage msg)
 {
     if (msg.Model == model)
     {
         // Listen for changes regarding current running entry
         if (msg.PropertyName == TimeEntryModel.PropertyState ||
             msg.PropertyName == TimeEntryModel.PropertyStartTime ||
             msg.PropertyName == TimeEntryModel.PropertyStopTime ||
             msg.PropertyName == TimeEntryModel.PropertyDescription ||
             msg.PropertyName == TimeEntryModel.PropertyIsBillable ||
             msg.PropertyName == TimeEntryModel.PropertyProjectId ||
             msg.PropertyName == TimeEntryModel.PropertyTaskId)
         {
             Rebind();
         }
     }
     else if (model != null && model.ProjectId == msg.Model.Id && model.Project == msg.Model)
     {
         if (msg.PropertyName == ProjectModel.PropertyName ||
             msg.PropertyName == ProjectModel.PropertyColor ||
             msg.PropertyName == ProjectModel.PropertyClientId)
         {
             Rebind();
         }
     }
     else if (model != null && model.TaskId == msg.Model.Id && model.Task == msg.Model)
     {
         if (msg.PropertyName == TaskModel.PropertyName)
         {
             Rebind();
         }
     }
     else if (model != null && model.ProjectId != null && model.Project != null &&
              model.Project.ClientId == msg.Model.Id && model.Project.Client == msg.Model)
     {
         if (msg.PropertyName == ClientModel.PropertyName)
         {
             Rebind();
         }
     }
     else if (model != null && msg.Model is TimeEntryTagModel)
     {
         var inter = (TimeEntryTagModel)msg.Model;
         if (inter.FromId == model.Id)
         {
             // Schedule rebind, as if we do it right away the RelatedModelsCollection will not
             // have been updated yet
             DispatchQueue.MainQueue.DispatchAfter(TimeSpan.FromMilliseconds(1), Rebind);
         }
     }
 }
Exemple #10
0
        private void OnModelChangedMessage(ModelChangedMessage msg)
        {
            if (currentUser == null || msg.Model != currentUser)
            {
                return;
            }

            if (msg.PropertyName == UserModel.PropertyRemoteId ||
                msg.PropertyName == UserModel.PropertyEmail ||
                msg.PropertyName == UserModel.PropertyName)
            {
                OnUserChanged();
            }
        }
Exemple #11
0
            protected void OnModelChanged(ModelChangedMessage msg)
            {
                if (msg.Model != DataSource.Model)
                {
                    return;
                }

                if (msg.PropertyName == ProjectModel.PropertyName ||
                    msg.PropertyName == ProjectModel.PropertyColor ||
                    msg.PropertyName == ProjectModel.PropertyClientId)
                {
                    Rebind();
                }
            }
Exemple #12
0
            protected override void OnModelChanged(ModelChangedMessage msg)
            {
                if (Model == null)
                {
                    return;
                }

                if (Model == msg.Model)
                {
                    if (msg.PropertyName == TagModel.PropertyName)
                    {
                        Rebind();
                    }
                }
            }
Exemple #13
0
            protected override void OnModelChanged(ModelChangedMessage msg)
            {
                // Protect against Java side being GCed
                if (Handle == IntPtr.Zero)
                {
                    return;
                }

                if (Model == null)
                {
                    return;
                }

                if (Model == msg.Model)
                {
                    if (msg.PropertyName == TimeEntryModel.PropertyStartTime ||
                        msg.PropertyName == TimeEntryModel.PropertyDescription ||
                        msg.PropertyName == TimeEntryModel.PropertyProjectId ||
                        msg.PropertyName == TimeEntryModel.PropertyTaskId)
                    {
                        Rebind();
                    }
                }
                else if (Model.ProjectId.HasValue && Model.ProjectId == msg.Model.Id)
                {
                    if (msg.PropertyName == ProjectModel.PropertyName ||
                        msg.PropertyName == ProjectModel.PropertyColor)
                    {
                        Rebind();
                    }
                }
                else if (Model.ProjectId.HasValue && Model.Project != null &&
                         Model.Project.ClientId.HasValue &&
                         Model.Project.ClientId == msg.Model.Id)
                {
                    if (msg.PropertyName == ClientModel.PropertyName)
                    {
                        Rebind();
                    }
                }
                else if (Model.TaskId.HasValue && Model.TaskId == msg.Model.Id)
                {
                    if (msg.PropertyName == TaskModel.PropertyName)
                    {
                        Rebind();
                    }
                }
            }
Exemple #14
0
            protected override void OnModelChanged(ModelChangedMessage msg)
            {
                if (Model == null)
                {
                    return;
                }

                if (Model == msg.Model)
                {
                    if (msg.PropertyName == ProjectModel.PropertyName ||
                        msg.PropertyName == ProjectModel.PropertyColor ||
                        msg.PropertyName == ProjectModel.PropertyClientId)
                    {
                        Rebind();
                    }
                }
            }
Exemple #15
0
            protected override void OnModelChanged(ModelChangedMessage msg)
            {
                if (DataSource == null)
                {
                    return;
                }

                if (DataSource == msg.Model)
                {
                    if (msg.PropertyName == TimeEntryModel.PropertyStartTime ||
                        msg.PropertyName == TimeEntryModel.PropertyStopTime ||
                        msg.PropertyName == TimeEntryModel.PropertyIsBillable ||
                        msg.PropertyName == TimeEntryModel.PropertyState ||
                        msg.PropertyName == TimeEntryModel.PropertyDescription ||
                        msg.PropertyName == TimeEntryModel.PropertyProjectId ||
                        msg.PropertyName == TimeEntryModel.PropertyTaskId)
                    {
                        Rebind();
                    }
                }
                else if (DataSource.ProjectId.HasValue && DataSource.ProjectId == msg.Model.Id)
                {
                    if (msg.PropertyName == ProjectModel.PropertyName ||
                        msg.PropertyName == ProjectModel.PropertyColor)
                    {
                        Rebind();
                    }
                }
                else if (DataSource.ProjectId.HasValue && DataSource.Project != null &&
                         DataSource.Project.ClientId.HasValue &&
                         DataSource.Project.ClientId == msg.Model.Id)
                {
                    if (msg.PropertyName == ClientModel.PropertyName)
                    {
                        Rebind();
                    }
                }
                else if (DataSource.TaskId.HasValue && DataSource.TaskId == msg.Model.Id)
                {
                    if (msg.PropertyName == TaskModel.PropertyName)
                    {
                        Rebind();
                    }
                }
            }
        private void OnModelChanged(ModelChangedMessage msg)
        {
            // Protect against Java side being GCed
            if (Handle == IntPtr.Zero)
            {
                return;
            }

            if (msg.Model == model &&
                msg.PropertyName == TimeEntryModel.PropertyWorkspaceId)
            {
                modelsView.WorkspaceId = WorkspaceId;
            }
            else if (msg.Model is UserModel &&
                     msg.PropertyName == UserModel.PropertyDefaultWorkspaceId)
            {
                modelsView.WorkspaceId = WorkspaceId;
            }
        }
Exemple #17
0
        protected override void OnModelChanged(ModelChangedMessage msg)
        {
            base.OnModelChanged(msg);

            if (msg.Model != TimeEntry && msg.Model is TimeEntryModel)
            {
                // When some other time entry becomes IsRunning we need to switch over to that
                if (msg.PropertyName == TimeEntryModel.PropertyState ||
                    msg.PropertyName == TimeEntryModel.PropertyIsShared)
                {
                    var entry = (TimeEntryModel)msg.Model;
                    if (entry.State == TimeEntryState.Running && ForCurrentUser(entry))
                    {
                        TimeEntry = entry;
                        Rebind();
                    }
                }
            }
        }
            private void OnModelChanged(ModelChangedMessage msg)
            {
                // Protect against Java side being GCed
                if (Handle == IntPtr.Zero)
                {
                    return;
                }

                if (msg.Model == currentTimeEntry)
                {
                    // Listen for changes regarding current running entry
                    if (msg.PropertyName == TimeEntryModel.PropertyState ||
                        msg.PropertyName == TimeEntryModel.PropertyStopTime ||
                        msg.PropertyName == TimeEntryModel.PropertyDeletedAt)
                    {
                        if (currentTimeEntry.State == TimeEntryState.Finished || currentTimeEntry.DeletedAt.HasValue)
                        {
                            currentTimeEntry = TimeEntryModel.GetDraft();
                        }
                        NotifyDataSetChanged();
                    }
                }
                else if (msg.Model is TimeEntryModel)
                {
                    // When some other time entry becomes IsRunning we need to switch over to that
                    if (msg.PropertyName == TimeEntryModel.PropertyState ||
                        msg.PropertyName == TimeEntryModel.PropertyIsShared)
                    {
                        var entry = (TimeEntryModel)msg.Model;
                        if (entry.State == TimeEntryState.Running && ForCurrentUser(entry))
                        {
                            currentTimeEntry = entry;
                            NotifyDataSetChanged();
                        }
                    }
                }
            }
Exemple #19
0
 protected abstract void OnModelChanged(ModelChangedMessage msg);
        private void OnModelChanged(ModelChangedMessage msg)
        {
            if (!msg.Model.IsShared)
            {
                return;
            }
            var entry = msg.Model as TimeEntryModel;

            if (entry == null)
            {
                return;
            }

            var grp = data.FindGroup(entry);

            if (grp != null)
            {
                if (msg.PropertyName == TimeEntryModel.PropertyStartTime)
                {
                    if (entry.StartTime >= queryStartDate)
                    {
                        // Update group and resort data:
                        grp.Update(entry);
                        data.Sort();
                        OnUpdated();
                    }
                    else
                    {
                        // Out side of date range, remove from list
                        grp.Remove(entry);
                        if (grp.IsEmpty)
                        {
                            data.Remove(grp);
                        }
                        else
                        {
                            data.Sort();
                        }
                        OnUpdated();
                    }
                }
                else if (msg.PropertyName == TimeEntryModel.PropertyDescription ||
                         msg.PropertyName == TimeEntryModel.PropertyTaskId ||
                         msg.PropertyName == TimeEntryModel.PropertyProjectId)
                {
                    // Remove from old group:
                    grp.Remove(entry);
                    if (grp.IsEmpty)
                    {
                        data.Remove(grp);
                    }

                    // Add entry to correct group
                    data.Add(entry);
                    data.Sort();
                    OnUpdated();
                }
                else if (msg.PropertyName == TimeEntryModel.PropertyDeletedAt ||
                         msg.PropertyName == TimeEntryModel.PropertyIsPersisted)
                {
                    if (!entry.IsPersisted || entry.DeletedAt.HasValue)
                    {
                        grp.Remove(entry);
                        if (grp.IsEmpty)
                        {
                            data.Remove(grp);
                        }
                        else
                        {
                            data.Sort();
                        }
                        OnUpdated();
                    }
                }
                return;
            }

            // Prevent showing of non-persisted, deleted entries and entries outside of the date range:
            if (!entry.IsPersisted || entry.DeletedAt.HasValue || entry.State == TimeEntryState.New || entry.StartTime < queryStartDate)
            {
                return;
            }

            var authManager = ServiceContainer.Resolve <AuthManager> ();

            if (entry.UserId != authManager.UserId)
            {
                return;
            }

            data.Add(entry);
            data.Sort();
            OnUpdated();
        }
 private void OnModelChanged(ModelChangedMessage msg)
 {
     if (msg.Model is UserModel &&
         msg.PropertyName == UserModel.PropertyDefaultWorkspaceId)
     {
         SortWorkspaces(data);
         OnUpdated();
     }
     else if (msg.Model is WorkspaceModel)
     {
         if (msg.PropertyName == WorkspaceModel.PropertyIsShared ||
             msg.PropertyName == WorkspaceModel.PropertyDeletedAt)
         {
             var model = (WorkspaceModel)msg.Model;
             if (!model.IsShared || model.DeletedAt != null)
             {
                 // Make sure this workspace is removed:
                 if (data.RemoveAll(ws => ws.Model == model) > 0)
                 {
                     OnUpdated();
                 }
             }
         }
     }
     else if (msg.Model is ProjectModel)
     {
         if (msg.PropertyName == WorkspaceModel.PropertyIsShared ||
             msg.PropertyName == WorkspaceModel.PropertyDeletedAt)
         {
             var model = (ProjectModel)msg.Model;
             if (!model.IsShared || model.DeletedAt != null)
             {
                 // Make sure this project is removed:
                 var removals = 0;
                 foreach (var ws in data)
                 {
                     removals += ws.Projects.RemoveAll(p => p.Model == model);
                 }
                 if (removals > 0)
                 {
                     OnUpdated();
                 }
             }
         }
     }
     else if (msg.Model is TaskModel)
     {
         if (msg.PropertyName == WorkspaceModel.PropertyIsShared ||
             msg.PropertyName == WorkspaceModel.PropertyDeletedAt)
         {
             var model = (TaskModel)msg.Model;
             if (!model.IsShared || model.DeletedAt != null)
             {
                 // Make sure this task is removed:
                 var removals = 0;
                 foreach (var proj in data.SelectMany(ws => ws.Projects))
                 {
                     removals += proj.Tasks.RemoveAll(t => t == model);
                 }
                 if (removals > 0)
                 {
                     OnUpdated();
                 }
             }
         }
     }
 }