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(); } } } }
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(); } } } }
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(); } }
protected override void OnModelChanged(ModelChangedMessage msg) { if (msg.Model != DataSource) { return; } if (msg.PropertyName == TaskModel.PropertyName) { Rebind(); } }
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(); } } }
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); } } }
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(); } }
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(); } }
protected override void OnModelChanged(ModelChangedMessage msg) { if (Model == null) { return; } if (Model == msg.Model) { if (msg.PropertyName == TagModel.PropertyName) { Rebind(); } } }
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(); } } }
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(); } } }
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; } }
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(); } } } }
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(); } } } } }