OneDriveシンプルクライアント-簡単ではありません

誰もが長い間、MicrosoftのOneDriveサービスを知っています。これは、優れたWeb UIを備えたクラウドベースのデータウェアハウスです。



同様のサービス、特にDropboxについては、MacDropAnyなどの膨大な数のアドオンと拡張機能がリリースされています。 OneDriveには多くの拡張機能がないため、OneDriveのプラットフォームになりました。また、OneDriveの代替クライアントsyncDriverをリリースしました。







Microsoftの標準クライアントのすべての機能に加えて、使用するのが理にかなっている多くの機能を備えています。 ここからインストールできます 。 インストール後すぐに、OneDriveサービスに接続するように求められます。



カスタマイズ



接続後、同期およびモード用にフォルダーを構成できます。

最初の起動モードは個別に強調表示されます。たとえば、フォルダー構造のみをダウンロードするか、まったくダウンロードせず、初期化後に変更がダウンロードされます。

さらに、選択的な同期フィルターと同期方向を構成できます。 もちろん、認証などのプロキシ設定もサポートされています。



すべて、うまくいきます...



セットアップ後、OneDriveメタデータをダウンロードしてローカルファイルシステムを分析するのに時間がかかります。

アカウントに大量のデータが含まれている場合、すべてのダウンロードに時間がかかります。 このプロセスを最適化するために、選択的な同期を構成できます。

同期が完了すると、フォルダーへの変更がOneDriveアカウントに反映されます。



何ができる



コンピューターからOneDriveに任意のフォルダーを追加する必要がある場合、syncDriverではシンボリックリンクを使用できます。これは、フォルダーのリンクコマンド(またはメインフォームの[追加]ボタン)によって実装されます。



syncDriverでは、選択的な同期が可能です。

設定ウィンドウの[選択的な同期...]コマンドを使用すると、フォルダーを同期から追加/除外できます。その後に行われたすべての変更はOneDriveに送信されません。



同期方向のオプションを使用すると、1方向と2方向の両方で同期できますが、OneDriveクラウドにアップロードせずにOneDriveの変更をファイルシステムに表示することのみを選択できます。



OneDriveにアクセスする簡単な方法は、デバイスレターを同期フォルダーに割り当てることです。



ネットワーク設定で、プロキシサーバーは、標準クライアントが方法を知らないユーザー名とパスワードを指定できます。 インターネットがプロキシを介してのみ配布される組織でsyncDriverを使用する場合、これは非常に便利です。



XPから8.1までの既知のすべてのバージョンのWindowsで動作しますが、Windows 10で引き続きテストします。



どうやって



さまざまなOSでクライアントをサポートするために、.NETを使用することが決定されました。 さまざまなシステムに固有のフラグメント(主にUIおよびサービス/デーモンの操作)は、個別のアセンブリに割り当てられます。 現在のバージョンには、WindowsフォームのUIが含まれています。他のプラットフォーム用のバージョンではGtk#が使用されていますが、このバージョンはまだ実稼働ではリリースされていません

システムにログインするために、NLogを選択しました。NLogはすぐに動作し、設定が非常に簡単です。

モジュール型SOAの場合、Framework Context.NETを実装しました。これはgithubで入手できます。



仕組み



syncDriverは、サービスとクライアント(UI)の2つの部分で構成されています。 ネットワーク接続を介して送信されるJSONパケットを介して通信します。

さらに、すべてのサービス設定は、クライアントUIから設定される.configファイルに記述されています。

クライアント同期は、クラウド内のファイルシステムからローカルファイルシステムを分離するように設計されています。 各ファイルシステムは、監視、インデックス作成、変更の適用の問題を個別に解決する抽象化として実装されます。 つまり、OneDriveレベルはローカルファイルシステムについて何も認識せず、その逆も同様です。



同期プロセス全体は次のように進行します。

-各ファイルシステムはリソースの完全なインデックス作成を実行し、ローカルデータベースに保存します

-ファイルシステムは、変更を検出し、メッセージをキューに転送する責任があります。

-キュー内のメッセージは、特別な場合を除き、厳密な順序で処理されます。これについては後で検討します

-エラーが発生した場合、すべての並列操作の完了を待って、再度実行します。 エラーが再び発生した場合、エラーは記録され、UIに発行されます。



ローカルファイルシステムは、FileSystemWatcherを使用して変更を監視します。 さらに、特定の間隔での完全なツリートラバーサルがあります。これにより、クライアントが開始されていないときに行われた変更のキャッチが保証されます。



OneDriveファイルシステムツリーの取得は、ローカルデータベースと比較したときに何が変更されたかに関する情報を提供するいくつかのAPIを通じて実装されます。



同期の重要な側面は、同期プロセス中に2つのファイルシステムが比較されず、ファイルシステムがデータベースの以前のバージョンと比較されるという事実です。これにより、一方向で同期できます。



別の方法では、名前変更と移動は同期キューで処理されます。 たとえば、多数のファイルを含むフォルダーを作成してから名前を変更すると、最初に名前変更が行われ、キュー内のすべてのメッセージの名前がそれに応じて変更されます。つまり、名前が変更または移動されたフォルダーに既にファイルをロードします。

両側でファイルの変更が競合する場合、ファイルの追加コピーがサフィックス(1)、(2)などで形成されます。自動競合解決は将来のバージョンのオプションになる可能性があります。



問題



ほとんどの問題は、ファイルシステムからのイベントの処理に関連していました。

-大きなファイルをコピーすると、多数のイベントが発生します。それぞれのイベントは、コピープロセスが終了したかどうかを再確認する必要があります。

-ファイルを保存するときに、多くのアプリケーションが一時ファイルを作成し、それを宛先ファイルに名前変更します。

-Windowsエクスプローラーで画像を直接回転させようとすると、一連のイベントが発生します:新しい一時ファイルの作成、前のファイルの置き換え、一時ファイルの削除(一時ファイルの名前は変更されず、コピーされるという点で前の段落とは異なります)



現在、ほとんどの問題は解決されており、SkyDriveでOneDriveに切り替えて以来、バージョンはかなり安定しています。



なぜ



私たちの目標は、MSの有名なサービス向けに、簡単で安定したバージョンのクライアントを提供することでした。 さらに、当社製品のポータブル版をリリースする予定です。

並行して、Linux用のバージョンを開発しています。

しかし、なぜですか?

現在、ユーザーは次の問題を解決するために私たちのところに来ています(優先度順):

-Windows 8.1でローカルアカウントを使用して作業する

-Windows XPで動作する

-シンボリックリンクの使用

-ネットワークドライブの使用

-承認されたプロキシを介して作業する

その他の多くの機能。



そして何よりも、どの機能があなたにとって最も興味深いかをコメントで聞きたいと思います。



All Articles