転送ファイル結合/圧縮のリファクタ
目的
既存のファイル結合圧縮ロジックがgoyoClientと密結合しており、サーバー側で圧縮ファイルが扱えないため、圧縮部分を分離する。
概要
goyoClientCompress.ts 内で実装されていた結合圧縮ロジックを util/compress.ts に切り出し、
goyoClientCompress.ts から util/compress.ts を呼び出す構成とした
また、test/util/serverSideCompress.test.ts にサーバーサイドで使用する場合のコードを表現した
使用する型
-
FileInfo: ファイルの基本情報 {filesize; pathname} -
PackedFileInfo: 圧縮/結合ファイル情報 FileInfo に加えて圧縮/結合元の情報を持つ -
PlainFileInfo: 展開/分解ファイル情報 FileInfo に加えて圧縮/結合先の情報を持つ
圧縮 -> 展開 の流れ
PackedFileListBuilderでファイルを結合/圧縮しPackedFileInfoを返却
PlainFileListBuilder.toPlainFileInfosでPackedFileInfoをPlainFileInfoに変換
PlainFileListBuilderでPackedFileInfoの一覧を受け取り、ファイルを取得して展開
主な変更点
goyoClientCompress.ts
この中にあった既存の圧縮ロジックを丸ごとutil/compress.tsに移動した
goyoClientCompressは既存の使用方法とcompress.tsの圧縮との変更を吸収レイヤーとして使用している
- compressionStrategy を使用して差分ファイルのグループ化
- 既存の型と上記の型に変換
-
compress.tsを呼び出して圧縮展開を実行
buildUploadSetの引数に``ProgressReporterが必要となったことに伴い、呼び出し元のgoyoClient.tsでprogressをdevideしている
!19 (diffs)
サーバーサイドでの使用
test/util/serverSideCompress.test.tsに
compress.tsを使用したSyncableContainer.copyFromSnapshotListToLocalFileの代替実装を記した