/// <summary>
        /// get all information for a remote directory from the Dropbox metadata
        /// </summary>
        private async Task <SyncedDirectory> SniffRemoteDirectory(Metadata remoteDirectory)
        {
            var result = new SyncedDirectory
            {
                Name          = remoteDirectory.Name,
                RemoteDeleted = remoteDirectory.IsDirectory
            };

            foreach (var child in remoteDirectory.Contents)
            {
                if (child.IsDirectory)
                {
                    //contents are not downloaded recursively for subdirs, do it now
                    var childFromDropbox = await _dropboxClient.GetMetaDataWithDeleted(child.Path);

                    result.AddDir(await SniffRemoteDirectory(childFromDropbox));
                }
                else
                {
                    result.AddFile(SniffRemoteFile(child));
                }
            }

            return(result);
        }
        /// <summary>
        /// get all information for a remote directory from the Dropbox metadata
        /// </summary>
        private async Task<SyncedDirectory> SniffRemoteDirectory(Metadata remoteDirectory)
        {
            var result = new SyncedDirectory
            {
                Name = remoteDirectory.Name,
                RemoteDeleted = remoteDirectory.IsDirectory
            };

            foreach (var child in remoteDirectory.Contents)
            {
                if (child.IsDirectory)
                {
                    //contents are not downloaded recursively for subdirs, do it now
                    var childFromDropbox = await _dropboxClient.GetMetaDataWithDeleted(child.Path);

                    result.AddDir(await SniffRemoteDirectory(childFromDropbox));
                }
                else
                {
                    result.AddFile(SniffRemoteFile(child));
                }
            }

            return result;
        }
        private SyncedDirectory GetLocalSyncState(DirectoryInfo dir)
        {
            var result = new SyncedDirectory {
                Name = dir.Name
            };

            foreach (var subDir in dir.GetDirectories())
            {
                result.AddDir(GetLocalSyncState(subDir));
            }

            foreach (var file in dir.GetFiles())
            {
                result.AddFile(new SyncedFile
                {
                    Name                 = file.Name,
                    LocalDirectory       = file.DirectoryName,
                    CurrentSyncTimestamp = { Local = file.LastWriteTimeUtc }
                });
            }

            return(result);
        }