internal MobeelizerOperationError ProcessInputFile(Others.File inputFile, bool isAllSynchronization) { MobeelizerInputData inputData = null; try { inputData = new MobeelizerInputData(inputFile); application.GetFileService().AddFilesFromSync(inputData.GetFiles(), inputData); MobeelizerOperationError updateError = ((MobeelizerDatabase)application.GetDatabase()).UpdateEntitiesFromSync(inputData.GetInputData(), isAllSynchronization); if (updateError != null) { return(updateError); } application.GetFileService().DeleteFilesFromSync(inputData.GetDeletedFiles()); return(null); } catch (IOException e) { throw new InvalidOperationException(e.Message, e); } finally { if (inputData != null) { inputData.Close(); } } }
public MobeelizerSyncResponse SendSyncDiffRequest(Others.File outputFile) { CheckNetworkAwailable(); try { return(connectionService.SendSyncDiffRequest(outputFile)); } catch (IOException e) { throw new InvalidOperationException(e.Message, e); } }
internal MobeelizerOperationError PrepareOutputFile(Others.File outputFile) { MobeelizerOutputData outputData = null; MobeelizerSyncEnumerable enumerable = null; MobeelizerSyncFileEnumerable filesToSync = null; try { outputData = new MobeelizerOutputData(outputFile, GetTmpOutputFile()); enumerable = application.GetDatabase().GetEntitiesToSync(); foreach (MobeelizerJsonEntity entity in enumerable) { Log.i(TAG, "Add entity to sync: " + entity.ToString()); outputData.WriteEntity(entity); } filesToSync = application.GetDatabase().GetFilesToSync(); foreach (var file in filesToSync) { String guid = file.Guid; using (Stream stream = file.GetStream()) { if (stream == null) { continue; } outputData.WriteFile(guid, stream); Log.i(TAG, "Add file to sync: " + guid); } } return(null); } catch (IOException e) { throw new InvalidOperationException(e.Message, e); } finally { if (outputData != null) { outputData.Close(); } } }
private Others.File GetOuptutFile() { String filePath = System.IO.Path.Combine("sync", "syncOutFile.tmp"); using (IsolatedStorageFile iso = IsolatedStorageFile.GetUserStoreForApplication()) { if (!iso.DirectoryExists("sync")) { iso.CreateDirectory("sync"); } if (iso.FileExists(filePath)) { iso.DeleteFile(filePath); } } Others.File file = new Others.File(filePath); return(file); }
internal MobeelizerOperationError Sync() { if (application.CheckSyncStatus() != MobeelizerSyncStatus.STARTED) { Log.i(TAG, "Send is already running - skipping."); return(null); } MobeelizerDatabase database = (MobeelizerDatabase)application.GetDatabase(); IMobeelizerConnectionManager connectionManager = application.GetConnectionManager(); String ticket = String.Empty; bool success = false; Others.File outputFile = null; Others.File inputFile = null; try { database.LockModifiedFlag(); if (isAllSynchronization) { Log.i(TAG, "Send sync all request."); MobeelizerSyncResponse response = connectionManager.SendSyncAllRequest(); if (response.Error == null) { ticket = response.Ticket; } else { return(response.Error); } } else { outputFile = GetOuptutFile(); outputFile.Create(); MobeelizerOperationError prepareFileError = dataFileService.PrepareOutputFile(outputFile); if (prepareFileError != null) { Log.i(TAG, "Send file haven't been created."); return(prepareFileError); } else { ChangeStatus(MobeelizerSyncStatus.FILE_CREATED, ticket); Log.i(TAG, "Send sync request."); MobeelizerSyncResponse response = connectionManager.SendSyncDiffRequest(outputFile); if (response.Error == null) { ticket = response.Ticket; } else { return(response.Error); } } } Log.i(TAG, "Sync request completed: " + ticket + "."); ChangeStatus(MobeelizerSyncStatus.TASK_CREATED, ticket); MobeelizerOperationError waitError = connectionManager.WaitUntilSyncRequestComplete(ticket); if (waitError != null) { return(waitError); } else { Log.i(TAG, "Sync process complete with success."); ChangeStatus(MobeelizerSyncStatus.TASK_PERFORMED, ticket); MobeelizerGetSyncDataOperationResult getDataResult = connectionManager.GetSyncData(ticket); if (getDataResult.Error == null) { inputFile = getDataResult.InputFile; } else { return(getDataResult.Error); } ChangeStatus(MobeelizerSyncStatus.FILE_RECEIVED, ticket); MobeelizerOperationError processError = dataFileService.ProcessInputFile(inputFile, isAllSynchronization); if (processError != null) { return(processError); } else { success = true; } connectionManager.ConfirmTask(ticket); database.ClearModifiedFlag(); application.InternalDatabase.SetInitialSyncAsNotRequired(application.Instance, application.User); } } catch (IOException e) { Log.i(TAG, e.Message); return(MobeelizerOperationError.Exception(e)); } catch (InvalidOperationException e) { Log.i(TAG, e.Message); return(MobeelizerOperationError.Exception(e)); } finally { if (inputFile != null) { inputFile.Delete(); } if (outputFile != null) { outputFile.Delete(); } database.UnlockModifiedFlag(); if (success) { ChangeStatus(MobeelizerSyncStatus.FINISHED_WITH_SUCCESS, ticket); } else { Log.i(TAG, "Sync process complete with failure."); ChangeStatus(MobeelizerSyncStatus.FINISHED_WITH_FAILURE, ticket); } } return(success ? null : MobeelizerOperationError.Other("Sync process complete with failure.")); }
private Others.File GetOuptutFile() { String filePath = System.IO.Path.Combine("sync", "syncOutFile.tmp"); using (IsolatedStorageFile iso = IsolatedStorageFile.GetUserStoreForApplication()) { if (!iso.DirectoryExists("sync")) { iso.CreateDirectory("sync"); } if (iso.FileExists(filePath)) { iso.DeleteFile(filePath); } } Others.File file = new Others.File(filePath); return file; }
public MobeelizerSyncResponse SendSyncDiffRequest(Others.File outputFile) { throw new NotSupportedException(SYNC_IS_NOT_SUPPORTED_IN_DEVELOPMENT_MODE); }
internal MobeelizerGetSyncDataOperationResult(Others.File inputFile) { this.InputFile = inputFile; }