public ActivityData( string id, string html = null, string text = null, StyleElement parsedText = null, bool? isEditable = null, Uri postUrl = null, int? commentLength = null, CommentData[] comments = null, DateTime? postDate = null, DateTime? editDate = null, ServiceType serviceType = null, PostStatusType? status = null, IAttachable attachedContent = null, ProfileData owner = null, DateTime? getActivityDate = null, ActivityUpdateApiFlag updaterTypes = ActivityUpdateApiFlag.Unloaded) { LoadedApiTypes = updaterTypes; Id = id; IsEditable = isEditable; Html = html; Text = text; ParsedText = parsedText; CommentLength = commentLength; Comments = comments; PostUrl = postUrl; PostDate = postDate; EditDate = editDate; GetActivityDate = getActivityDate; PostStatus = status; Owner = owner; AttachedContent = attachedContent; ServiceType = serviceType; }
public Task UpdateGetActivityAsync(bool isForced, ActivityUpdateApiFlag updaterTypes) { var cache = Client.Activity.InternalGetActivityCache(_data.Id); return cache.SyncerUpdateActivity.LockAsync( isForced, () => _data.PostStatus != PostStatusType.Removed && (LoadedApiTypes & updaterTypes) != updaterTypes, async () => { try { var nwData = Client.Activity.InternalUpdateActivity(await Client.ServiceApi.GetActivityAsync(Id, Client)); if (_data.Comments != null) { var nwComments = from newComments in nwData.Comments join oldComments in _data.Comments on newComments.CommentId equals oldComments.CommentId into c from d in c.DefaultIfEmpty() where d == null select newComments; var rmComments = from oldComments in _data.Comments join newComments in nwData.Comments on oldComments.CommentId equals newComments.CommentId into c from d in c.DefaultIfEmpty() where d == null select new CommentData( oldComments.CommentId, oldComments.ActivityId, oldComments.Html, oldComments.PostDate, oldComments.EditDate, oldComments.Owner, PostStatusType.Removed); foreach (var item in nwComments.Concat(rmComments)) Client.Activity.InternalSendObjectToStream(item); } else foreach (var item in nwData.Comments) Client.Activity.InternalSendObjectToStream(item); _data = nwData; _postUser = Client.People.InternalGetAndUpdateProfile(_data.Owner); _attachedContent = _data.AttachedContent != null ? AttachedContentDecorator(_data.AttachedContent, Client) : null; _comments = _data.Comments.Select(dt => new CommentInfo(Client, dt, _data, this)).ToArray(); } catch (ApiErrorException e) { if (e.InnerException is System.Net.WebException && ((System.Net.WebException)e.InnerException).Status == System.Net.WebExceptionStatus.UnknownError) Client.Activity.InternalUpdateActivity(new ActivityData(Id, status: PostStatusType.Removed, updaterTypes: ActivityUpdateApiFlag.GetActivity)); else throw new FailToOperationException<ActivityInfo>("UpdateGetActivityAsync()に失敗しました。", this, e); } }, () => { _data = cache.Value; _postUser = Client.People.InternalGetAndUpdateProfile(_data.Owner); _attachedContent = _data.AttachedContent != null ? AttachedContentDecorator(_data.AttachedContent, Client) : null; if (_data.Comments != null) _comments = _data.Comments.Select(dt => new CommentInfo(Client, dt, _data, this)).ToArray(); }); }
ActivityData GenerateActivityData(int id, ActivityUpdateApiFlag flagMode, int[] commentIds, string marking) { return StubGenerator.GenerateData<ActivityData>(marking, new { GenerateData_Id = id, LoadedApiTypes = StubGenerator.GenerateSetter(flagMode), Comments = commentIds.Select(cid => new { GenerateData_Id = cid, ActivityId = StubGenerator.GenerateSetter(string.Format("Id{0:00}", id)), }), }); }