//todo - didnt implemented the button public static async Task SignoutButton_ClickAsync(object sender, EventArgs e) { UriBuilder uri = new UriBuilder("https://login.live.com/oauth20_logout.srf"); var query = new StringBuilder(); query.AppendFormat("redirect_uri={0}", Uri.EscapeDataString(redirect_uri)); query.AppendFormat("&client_id={0}", Uri.EscapeDataString(client_id)); uri.Query = query.ToString(); var httpClient = new HttpClient(); var httpRequestMessage = new HttpRequestMessage(HttpMethod.Get, uri.Uri); var httpResponse = await httpClient.SendAsync(httpRequestMessage).ConfigureAwait(false); DependencyService.Get <IClearCookies>().ClearAllCookies(); //clear cookies - sign out from microsoft user LiveIdCredentials.ClearCreds(); //clear LiveIdCredentials SegmentSummaryTable.ClearSegmentTable(); //clearSleepStats }
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 }