Пример #1
0
        public async static Task UploadAsync(this IMobileServiceClient client, MobileServiceFile file, IMobileServiceFileDataSource dataSource)
        {
            MobileServiceFileMetadata metadata = MobileServiceFileMetadata.FromFile(file);

            IMobileServiceFilesClient filesClient = GetFilesClient(client);
            await filesClient.UploadFileAsync(metadata, dataSource);
        }
Пример #2
0
        public async static Task DeleteFileAsync <T>(this IMobileServiceTable <T> table, MobileServiceFile file)
        {
            MobileServiceFileMetadata metadata = MobileServiceFileMetadata.FromFile(file);

            IMobileServiceFilesClient client = GetFilesClient(table.MobileServiceClient);
            await client.DeleteFileAsync(metadata);
        }
Пример #3
0
        private void initializeInput()
        {
            this.testFiles = new List <MobileServiceFile>
            {
                new MobileServiceFile
                {
                    Id           = "new-123",
                    Name         = "newfile",
                    ContentMD5   = "0",
                    LastModified = DateTimeOffset.Now,
                    ParentId     = this.testRecordId,
                    TableName    = this.testTableName
                },
                new MobileServiceFile
                {
                    Id           = "existing-123",
                    Name         = "existing-file",
                    ContentMD5   = "0",
                    LastModified = DateTimeOffset.Now,
                    ParentId     = this.testRecordId,
                    TableName    = this.testTableName
                },
                new MobileServiceFile
                {
                    Id           = "updated-123",
                    Name         = "updated-file",
                    ContentMD5   = "1",
                    LastModified = DateTimeOffset.Now,
                    ParentId     = this.testRecordId,
                    TableName    = this.testTableName
                },
                new MobileServiceFile
                {
                    Id           = "deleted-123",
                    Name         = "deleted-file",
                    ContentMD5   = "2",
                    LastModified = DateTimeOffset.Now,
                    ParentId     = this.testRecordId,
                    TableName    = this.testTableName
                },
            };

            this.testMetadata = new List <MobileServiceFileMetadata>(testFiles.Skip(1).Select(f =>
            {
                var metadata = MobileServiceFileMetadata.FromFile(f);

                if (string.Compare(metadata.ContentMD5, "1") == 0)
                {
                    metadata.ContentMD5   = "0";
                    metadata.LastModified = DateTimeOffset.Now.AddMinutes(-5);
                }

                return(metadata);
            }));

            this.testFiles = new List <MobileServiceFile>(testFiles.Where(f => string.Compare(f.ContentMD5, "2") != 0));
        }
        public async static Task UploadFileAsync <T>(this IMobileServiceSyncTable <T> table, MobileServiceFile file, string filePath)
        {
            IMobileServiceFileDataSource dataSource = new PathMobileServiceFileDataSource(filePath);

            MobileServiceFileMetadata metadata = MobileServiceFileMetadata.FromFile(file);

            IFileSyncContext context = table.MobileServiceClient.GetFileSyncContext();

            await context.MobileServiceFilesClient.UploadFileAsync(metadata, dataSource);
        }
Пример #5
0
        public async Task PullFilesAsync(string tableName, string itemId)
        {
            IEnumerable <MobileServiceFile> files = await this.mobileServiceFilesClient.GetFilesAsync(tableName, itemId);

            foreach (var file in files)
            {
                FileSynchronizationAction syncAction = FileSynchronizationAction.Update;

                MobileServiceFileMetadata metadata = await this.metadataStore.GetFileMetadataAsync(file.Id);

                if (metadata == null)
                {
                    syncAction = FileSynchronizationAction.Create;

                    metadata = MobileServiceFileMetadata.FromFile(file);

                    metadata.ContentMD5   = null;
                    metadata.LastModified = null;
                }

                if (string.Compare(metadata.ContentMD5, file.ContentMD5, StringComparison.Ordinal) != 0 ||
                    (metadata.LastModified == null || metadata.LastModified.Value.ToUniversalTime() != file.LastModified.Value.ToUniversalTime()))
                {
                    metadata.LastModified = file.LastModified;
                    metadata.ContentMD5   = file.ContentMD5;

                    await this.metadataStore.CreateOrUpdateAsync(metadata);

                    await this.syncHandler.ProcessFileSynchronizationAction(file, syncAction);

                    NotifyFileOperationCompletion(file, syncAction.ToFileOperationKind(), FileOperationSource.ServerPull);
                }
            }

            var fileMetadata = await this.metadataStore.GetMetadataAsync(tableName, itemId);

            var deletedItemsMetadata = fileMetadata.Where(m => !files.Any(f => string.Compare(f.Id, m.FileId) == 0));

            foreach (var metadata in deletedItemsMetadata)
            {
                IMobileServiceFileOperation pendingOperation = await this.operationsQueue.GetOperationByFileIdAsync(metadata.FileId);

                // TODO: Need to call into the sync handler for conflict resolution here...
                if (pendingOperation == null || pendingOperation is DeleteMobileServiceFileOperation)
                {
                    await metadataStore.DeleteAsync(metadata);

                    await this.syncHandler.ProcessFileSynchronizationAction(MobileServiceFile.FromMetadata(metadata), FileSynchronizationAction.Delete);

                    NotifyFileOperationCompletion(MobileServiceFile.FromMetadata(metadata), FileOperationKind.Delete, FileOperationSource.ServerPull);
                }
            }
        }
Пример #6
0
        public async static Task AddFileAsync <T>(this IMobileServiceTable <T> table, MobileServiceFile file, Stream fileStream)
        {
            if (file == null)
            {
                throw new ArgumentNullException("file");
            }

            if (fileStream == null)
            {
                throw new ArgumentNullException("fileStream");
            }

            IMobileServiceFileDataSource dataSource = new StreamMobileServiceFileDataSource(fileStream);

            IMobileServiceFilesClient client = GetFilesClient(table.MobileServiceClient);
            await client.UploadFileAsync(MobileServiceFileMetadata.FromFile(file), dataSource);
        }