예제 #1
0
        protected virtual void Process(SyncStatusServerObject syncStatusObject, IRealmiusObjectServer obj)
        {
            var typeName = GetEfTypeName(obj);
            var tags     = GetTagsForObject(this, obj);

            if (tags.Count > 0)
            {
                syncStatusObject.Tag0 = tags[0];
            }
            if (tags.Count > 1)
            {
                syncStatusObject.Tag1 = tags[1];
            }
            if (tags.Count > 2)
            {
                syncStatusObject.Tag2 = tags[2];
            }
            if (tags.Count > 3)
            {
                syncStatusObject.Tag3 = tags[3];
            }

            syncStatusObject.FullObjectAsJson = SerializeObject(obj);
            syncStatusObject.LastChange       = DateTime.UtcNow;
            syncStatusObject.Type             = typeName;
            syncStatusObject.UpdateColumnChangeDatesSerialized();
        }
예제 #2
0
        private void ProcessAndAddChanges(SyncStatusServerObject syncStatusObject, IRealmiusObjectServer obj, UpdatedDataBatch updatedResult, string changes)
        {
            Process(syncStatusObject, obj);
            var updatedResultItem = CreateDownloadResponseItemInfo(syncStatusObject, changes);

            updatedResult.Items.Add(updatedResultItem);
        }
예제 #3
0
        public override IList <string> GetTagsForObject(ChangeTrackingDbContext db, IRealmiusObjectServer obj)
        {
            if (obj is NoteRealm)
            {
                var currentNote = obj as NoteRealm;
                var tagsList    = GetAllRolesAsInt().Where(v => v >= currentNote.UserRole).Select(x => x.ToString()).ToList();
                return(tagsList);
            }

            if (obj is PhotoRealm)
            {
                //all photos are available to everyone
                return(new List <string>()
                {
                    ((int)UserRole.Anonymous).ToString()
                });
            }

            if (obj is ChatMessageRealm)
            {
                //all chat messages are available to everyone
                return(new List <string>()
                {
                    ((int)UserRole.Anonymous).ToString()
                });
            }

            return(null);
        }
예제 #4
0
        private void AttachObject(IRealmiusObjectServer obj, SyncStatusDbContext syncStatusContext, UpdatedDataBatch updatedResult)
        {
            var typeName = GetEfTypeName(obj);
            var syncObj  = AddOrCreateNewSyncObject(syncStatusContext, typeName, obj.MobilePrimaryKey);

            var current = JObject.FromObject(obj);
            var diff    = JsonHelper.GetJsonDiff(JObject.Parse(syncObj.FullObjectAsJson ?? "{}"), current);

            var dateTimeNow = GetDate();

            foreach (JProperty jProperty in diff.Properties())
            {
                syncObj.ColumnChangeDates[jProperty.Name] = dateTimeNow;
            }

            ProcessAndAddChanges(syncObj, obj, updatedResult, diff.ToString());
        }
예제 #5
0
 public override IList <string> GetTagsForObject(ChangeTrackingDbContext db, IRealmiusObjectServer obj)
 {
     return(new[] { "all" });
 }
예제 #6
0
 public void AttachObject(IRealmiusObjectServer obj)
 {
     AttachObjects(new[] { obj });
 }
예제 #7
0
 internal virtual string SerializeObject(IRealmiusObjectServer obj)
 {
     return(JsonConvert.SerializeObject(obj, JsonSerializerSettings));
 }
예제 #8
0
 protected virtual IList <string> GetTagsForObject(ChangeTrackingDbContext db, IRealmiusObjectServer obj)
 {
     return(_syncConfiguration.GetTagsForObject(db, obj));
 }
예제 #9
0
            public override IList <string> GetTagsForObject(ChangeTrackingDbContext db, IRealmiusObjectServer obj)
            {
                var dbObj = obj as DbSyncObject;

                if (dbObj == null)
                {
                    return new[] { "none" }
                }
                ;

                return((dbObj.Tags ?? "").Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries));
            }