示例#1
0
        public async Task DeleteAllTrackedTimezones()
        {
            try
            {
                await JSR.StorageUtils.LocalStorageDeleteItem(TrackedTimezonesKey);
            }
            catch (Exception)
            {
                Logger.LogError("Failed to delete from local storage.");
            }

            // Save to firestore
            var user = await AuthService.GetCurrentUser();

            if (user != null)
            {
                // Collection
                string       collection = "users";
                string       docId      = user.uid;
                UserDocument doc        = new UserDocument();

                FirestoreOperationResult <UserDocument> result =
                    await FirestoreService.UpdateDocument <UserDocument, UserDocument>(collection, docId, doc);

                Logger.LogInformation($"Doc save result: {result.Success}");
            }
        }
示例#2
0
        public StorageService(
            ILogger <StorageService> logger, IJsInteropService jsInteropService,
            IFirebaseGoogleAuthService authService, IFirestoreService firestoreService)
        {
            Logger           = logger;
            JSR              = jsInteropService;
            AuthService      = authService;
            FirestoreService = firestoreService;

            AuthService.AuthStateChangedCallback += async(GoogleAuthUser user) =>
            {
                if (user != null)
                {
                    // signed in
                    if (!_subscribedForDocUpdates)
                    {
                        FirestoreOperationResult <UserDocument> res =
                            await FirestoreService.SubscribeForDocumentUpdates <UserDocument>(
                                "users", user.uid, async document =>
                        {
                            // Update local storage with firestore content
                            UserDocument userDoc = document as UserDocument;
                            if (userDoc.TrackedTimezoneIds == null || userDoc.TrackedTimezoneIds.Count == 0)
                            {
                                await DeleteAllTrackedTimezones();
                            }
                            else
                            {
                                await SaveTrackedTimezones(userDoc.TrackedTimezoneIds);
                            }

                            TrackedTimezoneListUpdateCallback.Invoke();
                        });

                        if (res.Success)
                        {
                            Logger.LogInformation("Subscribed for timezone list updates.");
                            _subscribedForDocUpdates = true;
                        }
                        else
                        {
                            Logger.LogError("Failed to subscribe for timezone list updates.");
                        }
                    }
                }
            };
        }
示例#3
0
        public async Task SaveTrackedTimezones(ISet <string> timezoneIds)
        {
            if (timezoneIds == null || timezoneIds.Count == 0)
            {
                Logger.LogError("No timezones to save.");
                return;
            }

            // Save to firestore
            var user = await AuthService.GetCurrentUser();

            if (user != null)
            {
                // Collection
                string       collection = "users";
                string       docId      = user.uid;
                UserDocument doc        = new UserDocument()
                {
                    TrackedTimezoneIds = timezoneIds
                };

                FirestoreOperationResult <UserDocument> result =
                    await FirestoreService.UpdateDocument <UserDocument, UserDocument>(collection, docId, doc);

                Logger.LogInformation($"Doc save result: {result.Success}");
            }

            // Let's save to local storage as well
            // We will retrieve this if user is not signed in
            try
            {
                await JSR.StorageUtils.LocalStorageSetItem(
                    TrackedTimezonesKey, JsonSerializer.Serialize(timezoneIds));
            }
            catch (Exception)
            {
                Logger.LogError("Failed to save to local storage.");
            }
        }
示例#4
0
        public async Task <ISet <string> > GetTrackedTimezones()
        {
            // Get from firestore
            var user = await AuthService.GetCurrentUser();

            if (user != null)
            {
                // Collection
                string collection = "users";
                string docId      = user.uid;

                FirestoreOperationResult <UserDocument> result =
                    await FirestoreService.GetDocument <UserDocument>(collection, docId);

                Logger.LogInformation($"Doc get result: {result.Success}");

                if (result.Success && result.Document != null)
                {
                    return(result.Document.TrackedTimezoneIds);
                }
            }
            else
            {
                try
                {
                    string trackedTimezonesJson =
                        await JSR.StorageUtils.LocalStorageGetItem(TrackedTimezonesKey);

                    return(JsonSerializer.Deserialize <ISet <string> >(trackedTimezonesJson));
                }
                catch (Exception)
                {
                    Logger.LogError("Failed to get from local storage.");
                }
            }

            return(null);
        }