This repository has been archived on 2022-11-03. You can view files and clone it, but cannot push or open issues or pull requests.
DevOpsOpenHack/MobileApps/MyDriving/MyDriving.DataStore.Azure/StoreManager.cs
2022-11-03 16:41:13 -04:00

105 lines
3.6 KiB
C#

// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT license. See LICENSE file in the project root for details.
using MyDriving.DataStore.Abstractions;
using Microsoft.WindowsAzure.MobileServices;
using System.Threading.Tasks;
using Microsoft.WindowsAzure.MobileServices.SQLiteStore;
using Microsoft.WindowsAzure.MobileServices.Sync;
using MyDriving.Utils;
using MyDriving.DataObjects;
using System.Collections.Generic;
using System.Linq;
using MyDriving.AzureClient;
using Newtonsoft.Json.Linq;
using System;
using System.Threading;
namespace MyDriving.DataStore.Azure
{
public class StoreManager : IStoreManager
{
#region IStoreManager implementation
MobileServiceSQLiteStore store;
public async Task InitializeAsync()
{
if (IsInitialized)
return;
//Get our current client, only ever need one
var client = ServiceLocator.Instance.Resolve<IAzureClient>()?.Client;
if (!string.IsNullOrWhiteSpace(Settings.Current.AuthToken) &&
!string.IsNullOrWhiteSpace(Settings.Current.AzureMobileUserId))
{
client.CurrentUser = new MobileServiceUser(Settings.Current.AzureMobileUserId)
{
MobileServiceAuthenticationToken = Settings.Current.AuthToken
};
}
var path = $"syncstore{Settings.Current.DatabaseId}.db";
//setup our local sqlite store and intialize our table
store = new MobileServiceSQLiteStore(path);
store.DefineTable<UserProfile>();
store.DefineTable<TripPoint>();
store.DefineTable<Photo>();
store.DefineTable<Trip>();
store.DefineTable<POI>();
store.DefineTable<IOTHubData>();
await client.SyncContext.InitializeAsync(store, new MobileServiceSyncHandler());
IsInitialized = true;
}
public async Task<bool> SyncAllAsync(bool syncUserSpecific)
{
if (!IsInitialized)
await InitializeAsync();
var taskList = new List<Task<bool>> {TripStore.SyncAsync()};
var successes = await Task.WhenAll(taskList);
return successes.Any(x => !x); //if any were a failure.
}
public async Task DropEverythingAsync()
{
Settings.Current.UpdateDatabaseId();
await TripStore.DropTable();
await PhotoStore.DropTable();
await UserStore.DropTable();
await IOTHubStore.DropTable();
IsInitialized = false;
await InitializeAsync();
}
public bool IsInitialized { get; private set; }
ITripStore tripStore;
public ITripStore TripStore => tripStore ?? (tripStore = ServiceLocator.Instance.Resolve<ITripStore>());
IPhotoStore photoStore;
public IPhotoStore PhotoStore => photoStore ?? (photoStore = ServiceLocator.Instance.Resolve<IPhotoStore>());
IUserStore userStore;
public IUserStore UserStore => userStore ?? (userStore = ServiceLocator.Instance.Resolve<IUserStore>());
ITripPointStore tripPointStore;
public ITripPointStore TripPointStore => tripPointStore ?? (tripPointStore = ServiceLocator.Instance.Resolve<ITripPointStore>());
IHubIOTStore iotHubStore;
public IHubIOTStore IOTHubStore
=> iotHubStore ?? (iotHubStore = ServiceLocator.Instance.Resolve<IHubIOTStore>());
IPOIStore poiStore;
public IPOIStore POIStore => poiStore ?? (poiStore = ServiceLocator.Instance.Resolve<IPOIStore>());
#endregion
}
}