using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using remote = Tango.DAL.Remote.DB; using local = Tango.DAL.Local.DB; using Tango.Settings; using Tango.Synchronization.Local; using Tango.Core; namespace Tango.Synchronization.Remote { /// /// Represents a remote database to SQLite file synchronizer. /// public class RemoteDBSynchronizer { /// /// Synchronizes the specified SQLite file by a machine serial number. /// /// The SQLite database file. /// The machine serial number. /// if set to true will erase the SQLite file before performing the synchronization. /// public static List Synchronize(String sqliteDbFile, String serialNumber, bool overrideLocal = false) { if (overrideLocal) { SQLiteDataBase sqlite = new SQLiteDataBase(sqliteDbFile); sqlite.LoadTables(); sqlite.ClearDataBase(); } using (var remoteDB = new remote.RemoteDB(SettingsManager.Default.GetOrCreate().DataSource)) { using (var localDB = new local.LocalDB(sqliteDbFile)) { RemoteDBComparer comparer = new RemoteDBComparer(remoteDB, localDB, serialNumber); var diffs = comparer.Compare(); foreach (var diff in diffs) { diff.Commit(); } remoteDB.SaveChanges(); localDB.SaveChanges(); return diffs; } } } /// /// Synchronizes the specified SQLite file by a machine serial number. /// /// The SQLite database file. /// The machine serial number. /// if set to true will erase the SQLite file before performing the synchronization. /// public static Task> SynchronizeAsync(String sqliteDBFile, String serialNumber, bool overrideLocal = false) { return Task.Factory.StartNew>(() => { return Synchronize(sqliteDBFile, serialNumber, overrideLocal); }); } } }