Example #1
0
        public string UpdateUserSleepSegmentsStats(UserSleepSegmentsStatsRecord record)
        {
            var userIdParameter = new Parameter(UserIdKey, record.userId);

            var json          = JsonConvert.SerializeObject(record);
            var dataParameter = new Parameter("data", json);

            return(CallAzureDatabase("UpdateUserSleepSegmentsStats", userIdParameter, dataParameter));
        }
Example #2
0
        public static void updateSegmentSummaryTableFromDB(UserSleepSegmentsStatsRecord record)
        {
            SegmentSummaryTable.userID      = record.userId;
            SegmentSummaryTable.lastUpdated = record.lastUpdated;

            SegmentSummaryTable.Awake.countTimes                   = record.awakeCountTimes;
            SegmentSummaryTable.Awake.totalDuration                = record.awakeTotalDuration;
            SegmentSummaryTable.Awake.timesToAwake                 = record.awakeToAwakeCount;
            SegmentSummaryTable.Awake.timesToSnooze                = record.awakeToSnoozeCount;
            SegmentSummaryTable.Awake.timesToDoze                  = record.awakeToDozeCount;
            SegmentSummaryTable.Awake.timesToRestlessSleep         = record.awakeToRestlessSleepCount;
            SegmentSummaryTable.Awake.timesToRestfulSleep          = record.awakeToRestfulSleepCount;
            SegmentSummaryTable.Awake.timesToREM                   = record.awakeToREMCount;
            SegmentSummaryTable.Snooze.countTimes                  = record.snoozeCountTimes;
            SegmentSummaryTable.Snooze.totalDuration               = record.snoozeTotalDuration;
            SegmentSummaryTable.Snooze.timesToAwake                = record.snoozeToAwakeCount;
            SegmentSummaryTable.Snooze.timesToSnooze               = record.snoozeToSnoozeCount;
            SegmentSummaryTable.Snooze.timesToDoze                 = record.snoozeToDozeCount;
            SegmentSummaryTable.Snooze.timesToRestlessSleep        = record.snoozeToRestlessSleepCount;
            SegmentSummaryTable.Snooze.timesToRestfulSleep         = record.snoozeToRestfulSleepCount;
            SegmentSummaryTable.Snooze.timesToREM                  = record.snoozeToREMCount;
            SegmentSummaryTable.Doze.countTimes                    = record.dozeCountTimes;
            SegmentSummaryTable.Doze.totalDuration                 = record.dozeTotalDuration;
            SegmentSummaryTable.Doze.timesToAwake                  = record.dozeToAwakeCount;
            SegmentSummaryTable.Doze.timesToSnooze                 = record.dozeToSnoozeCount;
            SegmentSummaryTable.Doze.timesToDoze                   = record.dozeToDozeCount;
            SegmentSummaryTable.Doze.timesToRestlessSleep          = record.dozeToRestlessSleepCount;
            SegmentSummaryTable.Doze.timesToRestfulSleep           = record.dozeToRestfulSleepCount;
            SegmentSummaryTable.Doze.timesToREM                    = record.dozeToREMCount;
            SegmentSummaryTable.RestlessSleep.countTimes           = record.restlessSleepCountTimes;
            SegmentSummaryTable.RestlessSleep.totalDuration        = record.restlessSleepTotalDuration;
            SegmentSummaryTable.RestlessSleep.timesToAwake         = record.restlessSleepToAwakeCount;
            SegmentSummaryTable.RestlessSleep.timesToSnooze        = record.restlessSleepToSnoozeCount;
            SegmentSummaryTable.RestlessSleep.timesToDoze          = record.restlessSleepToDozeCount;
            SegmentSummaryTable.RestlessSleep.timesToRestlessSleep = record.restlessSleepToRestlessSleepCount;
            SegmentSummaryTable.RestlessSleep.timesToRestfulSleep  = record.restlessSleepToRestfulSleepCount;
            SegmentSummaryTable.RestlessSleep.timesToREM           = record.restlessSleepToREMCount;
            SegmentSummaryTable.RestfulSleep.countTimes            = record.restfulSleepCountTimes;
            SegmentSummaryTable.RestfulSleep.totalDuration         = record.restfulSleepTotalDuration;
            SegmentSummaryTable.RestfulSleep.timesToAwake          = record.restfulSleepToAwakeCount;
            SegmentSummaryTable.RestfulSleep.timesToSnooze         = record.restfulSleepToSnoozeCount;
            SegmentSummaryTable.RestfulSleep.timesToDoze           = record.restfulSleepToDozeCount;
            SegmentSummaryTable.RestfulSleep.timesToRestlessSleep  = record.restfulSleepToRestlessSleepCount;
            SegmentSummaryTable.RestfulSleep.timesToRestfulSleep   = record.restfulSleepToRestfulSleepCount;
            SegmentSummaryTable.RestfulSleep.timesToREM            = record.restfulSleepToREMCount;
            SegmentSummaryTable.REMSleep.countTimes                = record.REMSleepCountTimes;
            SegmentSummaryTable.REMSleep.totalDuration             = record.REMSleepTotalDuration;
            SegmentSummaryTable.REMSleep.timesToAwake              = record.REMSleepToAwakeCount;
            SegmentSummaryTable.REMSleep.timesToSnooze             = record.REMSleepToSnoozeCount;
            SegmentSummaryTable.REMSleep.timesToDoze               = record.REMSleepToDozeCount;
            SegmentSummaryTable.REMSleep.timesToRestlessSleep      = record.REMSleepToRestlessSleepCount;
            SegmentSummaryTable.REMSleep.timesToRestfulSleep       = record.REMSleepToRestfulSleepCount;
            SegmentSummaryTable.REMSleep.timesToREM                = record.REMSleepToREMCount;
        }
Example #3
0
        public List <int> GetUserSleepSegmentsStatsList(string userId)
        {
            var userIdParameter = new Parameter(UserIdKey, userId);

            var result = CallAzureDatabase("GetUserSleepSegmentsStats", userIdParameter);

            if (result == null)
            {
                return(null);
            }

            UserSleepSegmentsStatsRecord record = JsonConvert.DeserializeObject <UserSleepSegmentsStatsRecord>(result);
            List <int> averages = new List <int>();

            averages.Add(record.awakeCountTimes); averages.Add(record.awakeTotalDuration); averages.Add(record.awakeToAwakeCount);
            averages.Add(record.awakeToSnoozeCount); averages.Add(record.awakeToDozeCount); averages.Add(record.awakeToRestlessSleepCount);
            averages.Add(record.awakeToRestfulSleepCount); averages.Add(record.awakeToREMCount);

            averages.Add(record.snoozeCountTimes); averages.Add(record.snoozeTotalDuration); averages.Add(record.snoozeToAwakeCount);
            averages.Add(record.snoozeToSnoozeCount); averages.Add(record.snoozeToDozeCount); averages.Add(record.snoozeToRestlessSleepCount);
            averages.Add(record.snoozeToRestfulSleepCount); averages.Add(record.snoozeToREMCount);

            averages.Add(record.dozeCountTimes); averages.Add(record.dozeTotalDuration); averages.Add(record.dozeToAwakeCount);
            averages.Add(record.dozeToSnoozeCount); averages.Add(record.dozeToDozeCount); averages.Add(record.dozeToRestlessSleepCount);
            averages.Add(record.dozeToRestfulSleepCount); averages.Add(record.dozeToREMCount);

            averages.Add(record.restlessSleepCountTimes); averages.Add(record.restlessSleepTotalDuration); averages.Add(record.restlessSleepToAwakeCount);
            averages.Add(record.restlessSleepToSnoozeCount); averages.Add(record.restlessSleepToDozeCount); averages.Add(record.restlessSleepToRestlessSleepCount);
            averages.Add(record.restlessSleepToRestfulSleepCount); averages.Add(record.restlessSleepToREMCount);

            averages.Add(record.restfulSleepCountTimes); averages.Add(record.restfulSleepTotalDuration); averages.Add(record.restfulSleepToAwakeCount);
            averages.Add(record.restfulSleepToSnoozeCount); averages.Add(record.restfulSleepToDozeCount); averages.Add(record.restfulSleepToRestlessSleepCount);
            averages.Add(record.restfulSleepToRestfulSleepCount); averages.Add(record.restfulSleepToREMCount);

            averages.Add(record.REMSleepCountTimes); averages.Add(record.REMSleepTotalDuration); averages.Add(record.REMSleepToAwakeCount);
            averages.Add(record.REMSleepToSnoozeCount); averages.Add(record.REMSleepToDozeCount); averages.Add(record.REMSleepToRestlessSleepCount);
            averages.Add(record.REMSleepToRestfulSleepCount); averages.Add(record.REMSleepToREMCount);

            return(averages);
        }
        private async Task GettingTokken(object sender, EventArgs e)
        {
            await Navigation.PushAsync(new ConnectingPage()); //todo - show connecting gif

            //create URL to send
            UriBuilder uri   = new UriBuilder("https://login.live.com/oauth20_token.srf");
            var        query = new StringBuilder();

            uri.Query = query.ToString();

            //creating POST URL+body in application/x-www-form-urlencoded format
            var httpClient = new HttpClient();

            httpClient.BaseAddress = uri.Uri;
            String        urlParameters = "client_id=" + client_id + "&redirect_uri=" + redirect_uri + "&code=" + response_code + "&grant_type=authorization_code";
            StringContent bodyParam     = new StringContent(urlParameters, Encoding.UTF8, "application/x-www-form-urlencoded");

            //waiting to response
            var response = await httpClient.PostAsync(uri.Uri, bodyParam);

            //converting the response to JSON format
            var stringResponse = response.Content.ReadAsStringAsync().Result;
            var jsonResponse   = JObject.Parse(stringResponse);

            //reading JSON response and updating credentials
            LiveIdCredentials.AccessToken  = (string)jsonResponse["access_token"];
            LiveIdCredentials.ExpiresIn    = (long)jsonResponse["expires_in"];
            LiveIdCredentials.RefreshToken = (string)jsonResponse["refresh_token"];
            Console.WriteLine(LiveIdCredentials.RefreshToken);
            string error = (string)jsonResponse["error"];

            await Utils.GetUserProfile(sender, e);

            await Utils.GetUserId(sender, e);

            await Utils.getSleepStatsOfUser(sender, e);

            /* checking if the userId is already in the ManageUsers table in the database.
             * If not (in case it's a new user), add the user to 2 tables:
             *      1. ManageUsers
             *      2. UserDetails                                                      */
            UserDetailsRecord userDetails = new UserDetailsRecord(LiveIdCredentials.userId, LiveIdCredentials.firstName,
                                                                  LiveIdCredentials.lastName, LiveIdCredentials.gender,
                                                                  Utils.calculateUserAge(), LiveIdCredentials.height, LiveIdCredentials.weight);

            bool userInDB = dbUtils.assertUserInDB(LiveIdCredentials.userId);

            if (!userInDB)
            {
                UserRecord user = new UserRecord(LiveIdCredentials.userId, DateTime.Now);
                dbUtils.addUserToDB(user, userDetails);
            }
            else
            {
                dbUtils.addUserToUserDetailsTable(userDetails);
            }

            /* after each sign in, update the SleepQuality table in the database */
            UserSleepQualityRecord userSleepQuality = new UserSleepQualityRecord(LiveIdCredentials.userId,
                                                                                 LiveIdCredentials.mean_num_of_wakeups,
                                                                                 LiveIdCredentials.mean_sleep_efficience);

            dbUtils.updateUserSleepQualityDetails(userSleepQuality);

            /* after each sign in, update the SleepSegmentsStats table in the database */
            SegmentSummaryTable.Awake         = new SegmentSummary();
            SegmentSummaryTable.Doze          = new SegmentSummary();
            SegmentSummaryTable.Snooze        = new SegmentSummary();
            SegmentSummaryTable.RestlessSleep = new SegmentSummary();
            SegmentSummaryTable.RestfulSleep  = new SegmentSummary();
            SegmentSummaryTable.REMSleep      = new SegmentSummary();

            SleepSegmentsStatsRepository repo = new SleepSegmentsStatsRepository();
            string   UserId = LiveIdCredentials.userId;
            DateTime last_updated_time_of_segments_stats = new DateTime(1990, 1, 1);

            UserSleepSegmentsStatsRecord SleepSegmentsStatsRecord = repo.GetUserSleepSegmentsStats(UserId);

            if (SleepSegmentsStatsRecord == null) //there is no data exists on the user in SleepSegmentsStats table
            {
                await Utils.getSleepSegmentsStats(sender, e, last_updated_time_of_segments_stats);

                //bool saveSuccess = handleUserSleepSegmentsData(repo, UserId, 0); //insert user row to table
                bool saveSuccess = Utils.handleUserSleepSegmentsData(repo, UserId, 0); //insert user row to table
                if (!saveSuccess)
                {
                }                     //error
            }
            else
            {
                last_updated_time_of_segments_stats = SleepSegmentsStatsRecord.lastUpdated;
                //updateSegmentSummaryTableFromDB(SleepSegmentsStatsRecord); // update SegmentSummaryTable object from DB data
                Utils.updateSegmentSummaryTableFromDB(SleepSegmentsStatsRecord); // update SegmentSummaryTable object from DB data
                await Utils.getSleepSegmentsStats(sender, e, last_updated_time_of_segments_stats);

                //bool updateSuccess = handleUserSleepSegmentsData(repo, UserId, 1); //update user row in table
                bool updateSuccess = Utils.handleUserSleepSegmentsData(repo, UserId, 1); //update user row in table
                if (!updateSuccess)
                {
                }                       //error
            }

            /* update segment summary table by user seniority in eSleeping and avg of other same users */
            float    seniority = SegmentSummaryTable.getUserSeniority();
            TimeSpan ageTime   = DateTime.Now.Subtract(LiveIdCredentials.birthdate);
            int      age       = ageTime.Days / 365;

            List <int> weightedSleepSegmentsStats = dbUtils.defineUserSegmentsTransitionsProbabilitiesCombined(LiveIdCredentials.userId, age, LiveIdCredentials.height, LiveIdCredentials.weight, LiveIdCredentials.gender, seniority);

            SegmentSummaryTable.updateTableByList(weightedSleepSegmentsStats);

            /* updating needed values for the Statistics Pages */
            var sleepQualityRepo = new SleepQualityRepository();
            var quality          = sleepQualityRepo.checkUserSleepQualityForHisAge(LiveIdCredentials.userId, Utils.calculateUserAge());

            StatisticsPage.sleepEffAge = (int)quality.Item1;
            StatisticsPage.wakeUpAge   = (int)quality.Item2;
            StatisticsPage.userSleepQualityForHisAgeGraphValue = sleepQualityRepo.calculateQualityLevel((int)quality.Item1, (int)quality.Item2);
            quality = sleepQualityRepo.checkUserSleepQualityForHisGender(LiveIdCredentials.userId, LiveIdCredentials.gender);
            StatisticsPage.sleepEffGender = (int)quality.Item1;
            StatisticsPage.wakeUpGender   = (int)quality.Item2;
            StatisticsPage.userSleepQualityForHisGenderGraphValue = sleepQualityRepo.calculateQualityLevel((int)quality.Item1, (int)quality.Item2);
            quality = sleepQualityRepo.checkUserSleepQualityForHisGenderAndAge(LiveIdCredentials.userId, Utils.calculateUserAge(), LiveIdCredentials.gender);
            StatisticsPage.userStressLevelGraphValue = (int)quality.Item1;
            /* done updating needed values for the Statistics Pages */

            await Navigation.PushAsync(new MainPage()); //back to main

            startRefreshing(sender, e);                 //refreshing tokken
        }