init repository
README文書のタイトルとライセンス項目を修正
添付コンテンツを読み取れない事があったので修正
クラス配置で役割の層分けが徹底されていない部分があったため、変更

1.ActivityData用クラスがActivityInfoで定義されていたため、修正
コメント読み込みが出来ていなかったので修正

1.ActivityInfo.GetComment()でミスをしてたので修正
_commentsがnullでCommentInfo[]を作れないバグがあった。これをUpdateGetActivityAsync()の実行を保証する事で解決。代わりにUpdateGetActivityAsync()のアップデートレベルをいじれるようにした。

2.GroupContainerで_membersHashSetでミスしていたので修正
ProtectedMembersがnullになりえるのを失念していた。
インタラクティブ投稿の読み取りに対応させた

1.AttachedInteractiveLink.csを作成
AttachedLinkをベースに作成した

2.AttachedBase.GetContentBody()を作成
添付コンテンツ情報が格納された要素への参照をしやすくした。
DefaultAccessorのテストコードを修正

テストデータが間違っていた。ついでにDefaultAccessorの書式を修正。
ActivityInfo.ParentActivity, PostStatusの参照がActivity削除状態で出来ないバグを修正
CircleInfo内にProfileDataを保持するように変更した

1.CircleInfo.ProtectedMembersをstring[]からCircleInfo[]へ変更
キャッシュのProfileDataを当てにしてるとキャッシュアウトのタイミングが面倒なので変更。これに伴い、CircleInfo.GetMembers()の結果が最新とは限らなくなる。

2.CircleInfo内の_dataへのアクセスをシンプルにした。
読みづらいのでGroupContainerのコードを活かすよう修正。これに伴い、内部の_dataの更新は放置するようになった。
SnkLib.PS.winの方針を変更

1.名前をSnkLib.Platformに変更
ビルド時の設定で対象プラットフォームを変更する事にした。これに伴い、プロジェクト名にもプラットフォーム固有要素を排除した名前を付けた。
ActivityContainer.GetStream()の参照カウンタが正しく動いてなかったので修正
RelationContainerをPeopleContainerへ改名した

1.コードの役割を考え、RelationContainerをPeopleContainerへ改名した
Google+の公式ライブラリ上ではPeopleとしてこの手のデータが扱われているため、それに合わせた。
RelationContainerは人との関係性を保持すると考え命名していた。これをPeopleContainerとし、Google+のデータをActivity, People, Notificationと捉えることにした。将来的にはPhoto, Pageなどが加わる可能性がある。

2.画像URLへの置換マーカー埋め込み処理が正しく動いてなかったのを修正
サイズ指定セグメントの判別処理が正しく実装できてなかった。ついでにシルエット画像用の処理も追加。

3.README.mdを最新のソースの内容に合わせた
例外処理の流れを見直し、ApiErrorException, FailToOperationExceptionのメンバを拡充した

1.ApiErrorException, FailToOperationExceptionにメンバを追加
エラー発生時に関係する通信が分かりやすいようにする事を意図し、ApiErrorExceptionから通信先に関する情報を分かるようにした。
FailToOperationExceptionにも発生元のオブジェクトを入れるようにした。

2.ストリーミングAPIが絡む処理の例外を調整
ちゃんとPlatformClient層ではFailToOperationExceptionを投げるようにした
G+APIの仕様変更へ対応した

1.DefaultAccessor.GetInitDataAsync()が壊れていたので修正
G+のページのjsonが値から関数に変わっていたのでこれを読み込めるようにテキスト処理を書き加えた。
ActivityContainer.GetStream()で通信切断が起きた際の後処理が実装できてなかったので修正

1.通信切断時は全ての購読をなかったコトにする処理を追加した
ActivityContainer.GetStream()で通信切断された時は全購読を切断し、参照カウンタは初期化される。
SnkLib.Platform側で実装していた、cookiesから利用可能なアカウントの一覧取得する処理などをMainLibraryへ移した

1.PlatformClientBuilder類の基本的な処理をMainLibrary側へ移した
Platform固有な要素はChromeのcookiesへのアクセスのみとし、その他のアカウント一覧取得の通信やBuilderクラス本体はプラットフォーム固有要素扱いはしない事にした。
ActivityData, ProfileDataのマージ処理のバグを修正

1.ActivityData, ProfileDataの加算処理にバグがあったので修正
UnloadedなActivityDataにGetStream()などでRemovedのActivityDataをマージしてしまった場合、マージ処理で例外が発生していた。原因はProfileData型のA,Bが共にnullであった場合にA+Bの処理を行うと、加算時の新たなProfileDataの生成時に必須引数であるProfileData.Idを確保出来ずに例外が生じていた事が要因であった。
ApiWrapperで使わないメソッドをApiWrapperから新設したApiAccessorUtilityへ移動した

1.StreamHttpClientのタイムアウト値を6分に設定した
大体4分以内に通信がワンサイクルする。そのため、それに2分追加した値をタイムアウト値にした。

2.ApiWrapperで使われていないメソッドを移動
IApiAccessorの実装クラスで使われるメソッドがApiWrapperにあるのはおかしい。そのため、これを新設したApiAccessorUtilityへ移動させた。DefaultAccessorへ移動させない理由としてはこれがIApiAccessorの1実装でしかないため、IApiAccessor用の汎用的なメソッド類を置く場所として相応しく無いと考えたため。IApiAccessorの拡張メソッド化する事も考えたが、メソッド以外の扱いに困る。そのため、Utilityクラスでお茶を濁した。

3.ついでにApiWrapperのストリーム受信がasync徹底してないのを修正
GetContentElement()がnullになるバグを修正

1.GetContentElement()を廃止し、ActivityInfo, CommentInfoにParsedTextを追加
再共有アクティビティはhtmlがnullになるため、ContentElement.ParseHtml()が機能しなかった。そのため、これの取得に失敗した場合はapiResponse[137]のデータでContentElementを生成するようにした。
キャッシュ機構をちゃんと実装しなおした

1.CacheDictionaryをちゃんと実装した
自前実装するのも良かったがgithubにあったので拝借した。実装し直すついでにCacheDictionaryのメソッドを整理した。
https://github.com/upashkevich/LRU-Cache

2.ライブラリのファイル名を変更
なんとなく気に食わない。