// should be called with alternative login methods only (auto guest login) private void Login(SlideSessionModel slideSessionModel) { var userName = slideSessionModel.ArsnovaEuConfig.GuestUserName; var loginMethod = slideSessionModel.ArsnovaEuConfig.LoginMethod; var apiPath = "auth/login?type=guest&user="******"&_dc=" + this.ConvertToUnixTimestampString(DateTime.Now); try { var request = this.CreateWebRequest(slideSessionModel, apiPath, HttpMethod.Get); var response = (HttpWebResponse)request.GetResponse(); if (response.StatusCode == HttpStatusCode.OK) { slideSessionModel.ArsnovaEuConfig.Cookies = new List <Cookie>(); // login success foreach (Cookie cookie in response.Cookies) { slideSessionModel.ArsnovaEuConfig.Cookies.Add(cookie); } slideSessionModel.ArsnovaEuConfig.IsAuthenticated = true; } } catch (WebException webException) { throw new CommunicationException("Authentification Error", webException); } }
private void HandleTimerEvent(object source, ElapsedEventArgs e) { this.countdown--; if (this.countdown >= 0) { this.slideManipulator.SetTimerOnSlide(this.currentQuestionModel, this.questionTimerSlide, this.countdown); } if (this.countdown == 0) { this.timer.Stop(); var responses = this.arsnovaClickService.GetResultsForHashtag(this.currentSlideSessionModel.Hashtag, this.currentQuestionModel.RecalculatedOnlineIndex); if (responses != null) { this.slideManipulator.SetClickResults(this.currentQuestionModel, this.resultsSlide, responses); } // move to next slide (results) this.ShowNextSlideEventHandler?.Invoke(this, EventArgs.Empty); // clean up this.timer = null; this.currentQuestionModel = null; this.currentSlideSessionModel = null; this.questionTimerSlide = null; this.resultsSlide = null; } }
public void SetSessionAsActive(SlideSessionModel slideSessionModel) { // clean up: delete everything and set it up again to avoid changing ids... var allExistingQuestions = this.GetAllQuestionsFromSession(slideSessionModel); if (allExistingQuestions != null) { foreach (var question in allExistingQuestions) { this.DeleteAnswersToQuestion(slideSessionModel, question._id); } } this.CheckAuthentification(slideSessionModel); // can't get /lecturerquestion/_questionId_, when they are disabled! /*var apiPath = "lecturerquestion/disablevote?sessionkey=" + slideSessionModel.Hashtag + "&disable=false&lecturequestionsonly=false&preparationquestionsonly=false&_dc=" + this.ConvertToUnixTimestampString(DateTime.Now); * * try * { * var request = this.CreateWebRequest(slideSessionModel, apiPath, HttpMethod.Post); * * this.SendRequest(request); * } * catch (JsonReaderException exception) * { * throw new CommunicationException("Activate session failed", exception); * }*/ }
private void SetFeatures(SlideSessionModel slideSessionModel) { var sessionId = slideSessionModel.Hashtag; // already authentificated // activate questions-feature only var urlSuffix = "session/" + sessionId + "/features?_dc=" + this.ConvertToUnixTimestampString(DateTime.Now); var requestBody = "{" + "\"feedback\": null," + "\"flashcardFeature\": null," + "\"interposed\": null," + "\"jitt\": true," + "\"liveFeedback\": null," + "\"learningProgress\": null," + "\"lecture\": null," + "\"pi\": null," + "\"slides\": null" + "}"; try { var request = this.CreateWebRequest(slideSessionModel, urlSuffix, HttpMethod.Put); request = this.AddContentToRequest(request, requestBody); this.SendRequest(request); } catch (JsonReaderException exception) { throw new CommunicationException("Error while setting custom features", exception); } }
private HttpWebRequest CreateWebRequest(SlideSessionModel slideSessionModel, string apiUrlSuffix, HttpMethod httpMethod, bool withContentType = true) { var webRequest = (HttpWebRequest)WebRequest.Create(this.apiUrl + apiUrlSuffix); webRequest.Accept = "*/*"; switch (httpMethod) { case HttpMethod.Get: webRequest.Method = "GET"; break; case HttpMethod.Post: webRequest.Method = "POST"; break; case HttpMethod.Put: webRequest.Method = "PUT"; break; case HttpMethod.Delete: webRequest.Method = "DELETE"; break; case HttpMethod.Patch: webRequest.Method = "PATCH"; break; } webRequest.Host = "arsnova.eu"; webRequest.KeepAlive = true; if (withContentType) { webRequest.ContentType = "application/json"; } webRequest.Accept = "*/*"; webRequest.Referer = "https://arsnova.eu/mobile/"; webRequest.CookieContainer = new CookieContainer(); foreach (var arsnovaEuHeader in this.arsnovaEuHeaders) { webRequest.Headers.Set(arsnovaEuHeader.Item1, arsnovaEuHeader.Item2); } if (slideSessionModel.ArsnovaEuConfig.Cookies != null) { foreach (var cookie in slideSessionModel.ArsnovaEuConfig.Cookies) { webRequest.CookieContainer.Add(new Uri("https://arsnova.eu"), new Cookie("JSESSIONID", cookie.Value)); //webRequest.CookieContainer.Add(cookie); } } return(webRequest); }
public void AddIntroSlide(SlideSessionModel slideSessionModel, Slide introSlide) { var isClickSession = slideSessionModel.SessionType == SessionType.ArsnovaClick; // Note: Interops reads RGB colors in the order: BGR! var backgroundRgbColor = isClickSession ? Color.FromArgb(136, 150, 0).ToArgb() : Color.FromArgb(230, 229, 223).ToArgb(); var filePath = isClickSession ? this.GetFilePath(Images.click_header, "click_header.png") : this.GetFilePath(Images.arsnova_header, "arsnova_header.png"); var sessionTypeName = isClickSession ? "arsnova.click" : "ARSnova.voting"; introSlide.Layout = PpSlideLayout.ppLayoutBlank; introSlide.FollowMasterBackground = MsoTriState.msoFalse; introSlide.DisplayMasterShapes = MsoTriState.msoFalse; introSlide.Background.Fill.ForeColor.RGB = backgroundRgbColor; introSlide.Shapes.AddPicture( filePath, MsoTriState.msoTrue, MsoTriState.msoTrue, 100, isClickSession ? 145 : 95, 750, isClickSession ? 75 : 150); var subTitleTextBox = introSlide.Shapes.AddTextbox(MsoTextOrientation.msoTextOrientationHorizontal, 100, 320, 750, 50); var subTitleTextRange = subTitleTextBox.TextFrame.TextRange; subTitleTextRange.Text = $"{this.localizationService.Translate("This presentation uses")} {sessionTypeName}, {this.localizationService.Translate("join the hashtag")}:"; subTitleTextRange.Font.Name = this.font; subTitleTextRange.Font.Size = 22; subTitleTextBox.TextEffect.Alignment = MsoTextEffectAlignment.msoTextEffectAlignmentCentered; var subTitleTextBox2 = introSlide.Shapes.AddTextbox(MsoTextOrientation.msoTextOrientationHorizontal, 100, 370, 750, 75); var subTitleTextRange2 = subTitleTextBox2.TextFrame.TextRange; subTitleTextRange2.Text = $"{slideSessionModel.Hashtag}"; subTitleTextRange2.Font.Name = this.font; subTitleTextRange2.Font.Size = 24; subTitleTextBox2.TextEffect.Alignment = MsoTextEffectAlignment.msoTextEffectAlignmentCentered; subTitleTextBox2.TextEffect.FontBold = MsoTriState.msoCTrue; var subTitleTextBox3 = introSlide.Shapes.AddTextbox(MsoTextOrientation.msoTextOrientationHorizontal, 100, 420, 750, 50); var subTitleTextRange3 = subTitleTextBox3.TextFrame.TextRange; subTitleTextRange3.Text = isClickSession ? "https://arsnova.click/" + slideSessionModel.Hashtag : "https://arsnova.eu/mobile/#id/" + slideSessionModel.Hashtag; subTitleTextRange3.Font.Name = this.font; subTitleTextRange3.Font.Size = 22; subTitleTextBox3.TextEffect.Alignment = MsoTextEffectAlignment.msoTextEffectAlignmentCentered; if (isClickSession) { subTitleTextRange.Font.Color.RGB = Color.White.ToArgb(); subTitleTextRange2.Font.Color.RGB = Color.White.ToArgb(); subTitleTextRange3.Font.Color.RGB = Color.White.ToArgb(); } // TODO create QR-Code / get it from click server }
public void KeepAlive(SlideSessionModel slideSessionModel) { var validationResult = this.arsnovaClickService.KeepAlive(slideSessionModel.Hashtag, slideSessionModel.PrivateKey); if (!validationResult.Success) { throw new CommunicationException(validationResult.FailureMessage); } }
private Tuple <string, string> UpdateQuestion(SlideSessionModel slideSessionModel, SlideQuestionModel questionModel, string arsnovaVotingQuestionId) { var oldQuestion = this.GetLectureQuestion(slideSessionModel, arsnovaVotingQuestionId); // update entries oldQuestion.questionType = this.QuestionTypeToVotingQuestionType(questionModel.QuestionType); oldQuestion.text = questionModel.QuestionText; if (questionModel.QuestionType == QuestionTypeEnum.FreeTextVoting) { var answerOption = questionModel.AnswerOptions.First(); oldQuestion.strictMode = true; oldQuestion.textAnswerEnabled = true; oldQuestion.correctAnswer = answerOption.Text; oldQuestion.fixedAnswer = true; oldQuestion.ignoreCaseSensitive = answerOption.ConfigCaseSensitive; oldQuestion.ignorePunctuation = answerOption.ConfigUsePunctuation; oldQuestion.ignoreWhitespaces = answerOption.ConfigTrimWhitespaces; } else { var answerOptionList = new List <PossibleAnswerObject>(); foreach (var answerOption in questionModel.AnswerOptions) { answerOptionList.Add(new PossibleAnswerObject { correct = answerOption.IsTrue, text = answerOption.Text, value = answerOption.IsTrue ? 10 : -10 }); } oldQuestion.possibleAnswers = answerOptionList; } var apiPath = "lecturerquestion/" + arsnovaVotingQuestionId; var requestBody = JsonConvert.SerializeObject(oldQuestion); try { var request = this.CreateWebRequest(slideSessionModel, apiPath, HttpMethod.Put); request = this.AddContentToRequest(request, requestBody); var responseString = this.GetResponseString(slideSessionModel, request); var newQuestionModel = JsonConvert.DeserializeObject <LectureQuestionModelWithId>(responseString); return(new Tuple <string, string>(newQuestionModel._id, newQuestionModel._rev)); } catch (JsonReaderException exception) { throw new CommunicationException("Update question failed", exception); } }
public void ArsnovaEuCreateSession() { var slideSessionModel = new SlideSessionModel(); slideSessionModel.ArsnovaEuConfig = new ArsnovaEuConfig(); this.arsnovaVotingService.CreateNewSession(slideSessionModel); Assert.IsFalse(string.IsNullOrEmpty(slideSessionModel.Hashtag)); Assert.IsTrue(slideSessionModel.Hashtag.Length == 8); }
private ViewModelRequirements CreateViewModelRequirements(SlideSessionModel slideSessionModel) { return(new ViewModelRequirements( this.viewPresenter, this.questionTypeTranslator, this.localizationService, this.sessionManager, this.sessionInformationProvider, this.slideManipulator, slideSessionModel)); }
public ValidationResult ShowNextReadingConfirmation(SlideSessionModel slideSessionModel) { var validationResult = this.CheckForHashtagAndPrivateKey(slideSessionModel.Hashtag, slideSessionModel.PrivateKey); if (!validationResult.Success) { return(validationResult); } return(this.arsnovaClickApi.ShowNextReadingConfirmation(slideSessionModel.Hashtag, slideSessionModel.PrivateKey)); }
public ValidationResult StartNextQuestion(SlideSessionModel slideSessionModel, int questionIndex) { var validationResult = this.CheckForHashtagAndPrivateKey(slideSessionModel.Hashtag, slideSessionModel.PrivateKey); if (!validationResult.Success) { return(validationResult); } return(this.arsnovaClickApi.StartNextQuestion(slideSessionModel.Hashtag, slideSessionModel.PrivateKey, questionIndex)); }
public void RemoveClickQuizDataFromServer(SlideSessionModel slideSessionModel) { if (slideSessionModel.SessionType == SessionType.ArsnovaClick) { var validationResult = this.arsnovaClickService.RemoveQuizData(slideSessionModel.Hashtag, slideSessionModel.PrivateKey); if (!validationResult.Success) { throw new CommunicationException(validationResult.FailureMessage); } } }
protected BaseViewModel(ViewModelRequirements requirements) { this.ViewPresenter = requirements.ViewPresenter; this.QuestionTypeTranslator = requirements.QuestionTypeTranslator; this.LocalizationService = requirements.LocalizationService; this.SessionManager = requirements.SessionManager; this.SessionInformationProvider = requirements.SessionInformationProvider; this.SlideManipulator = requirements.SlideManipulator; this.RibbonHelper = new RibbonHelper(this.ViewPresenter, this.LocalizationService); this.SlideSessionModel = requirements.SlideSessionModel; }
public void CreateSession(SlideSessionModel slideSessionModel) { if (slideSessionModel.SessionType == SessionType.ArsnovaClick) { var privateKey = this.arsnovaClickService.CreateHashtag(slideSessionModel.Hashtag); slideSessionModel.PrivateKey = privateKey; } else { // create new arsnova config slideSessionModel.ArsnovaEuConfig = new ArsnovaEuConfig(); this.arsnovaVotingService.CreateNewSession(slideSessionModel); } }
public ValidationResult UpdateQuestionGroup(SlideSessionModel slideSessionModel) { var validationResult = this.CheckForHashtagAndPrivateKey(slideSessionModel.Hashtag, slideSessionModel.PrivateKey); if (!validationResult.Success) { return(validationResult); } if (!validationResult.Success) { return(validationResult); } return(this.arsnovaClickApi.UpdateQuestionGroup(this.SlideSessionModelToQuestionGroupModel(slideSessionModel), slideSessionModel.PrivateKey)); }
public ViewModelRequirements( ViewPresenter viewPresenter, IQuestionTypeTranslator questionTypeTranslator, ILocalizationService localizationService, ISessionManager sessionManager, ISessionInformationProvider sessionInformationProvider, ISlideManipulator slideManipulator, SlideSessionModel slideSessionModel) { this.ViewPresenter = viewPresenter; this.QuestionTypeTranslator = questionTypeTranslator; this.LocalizationService = localizationService; this.SessionManager = sessionManager; this.SessionInformationProvider = sessionInformationProvider; this.SlideSessionModel = slideSessionModel; this.SlideManipulator = slideManipulator; }
public void ActivateSession(SlideSessionModel slideSessionModel) { if (slideSessionModel.SessionType == SessionType.ArsnovaClick) { // push data to server this.SetArsnovaClickOnlineSession(slideSessionModel); // set question as active this.arsnovaClickService.MakeSessionAvailable(slideSessionModel.Hashtag, slideSessionModel.PrivateKey); } else { // set session as active this.arsnovaVotingService.SetSessionAsActive(slideSessionModel); } }
private void DeleteAnswersToQuestion(SlideSessionModel slideSessionModel, string questionId) { this.CheckAuthentification(slideSessionModel); var apiPath = "lecturerquestion/" + questionId + "/answer/?_dc=" + this.ConvertToUnixTimestampString(DateTime.Now); try { var request = this.CreateWebRequest(slideSessionModel, apiPath, HttpMethod.Delete); this.SendRequest(request); } catch (JsonReaderException exception) { throw new CommunicationException("Delete question failed", exception); } }
private void CheckAuthentification(SlideSessionModel slideSessionModel) { if (!slideSessionModel.ArsnovaEuConfig.IsAuthenticated) { if (string.IsNullOrEmpty(slideSessionModel.ArsnovaEuConfig.GuestUserName) && slideSessionModel.ArsnovaEuConfig.LoginMethod == LoginMethod.Guest) { slideSessionModel.ArsnovaEuConfig.GuestUserName = this.GenerateGuestName(); } // TODO implement other authentification methods switch (slideSessionModel.ArsnovaEuConfig.LoginMethod) { case LoginMethod.Guest: this.Login(slideSessionModel); break; } } }
public void CreateNewSession(SlideSessionModel slideSessionModel) { this.CheckAuthentification(slideSessionModel); var urlSuffix = "session/?_dc=" + this.ConvertToUnixTimestampString(DateTime.Now); var requestBody = "{" + "\"courseId\": null," + "\"courseType\": null," + "\"creationTime\": \"" + this.ConvertToUnixTimestampString(DateTime.Now) + "\"," + "\"name\": \"" + slideSessionModel.ArsnovaVotingSessionName + "\"," + "\"ppAuthorMail\": null," + "\"ppAuthorName\": null," + "\"ppDescription\": null," + "\"ppFaculty\": null," + "\"ppLevel\": null," + "\"ppLicense\": null," + "\"ppLogo\": null," + "\"ppSubject\": null," + "\"ppUniversity\": null," + "\"sessionType\": null," + "\"shortName\": \"" + slideSessionModel.ArsnovaVotingSessionShortName + "\"" + "}"; try { var request = this.CreateWebRequest(slideSessionModel, urlSuffix, HttpMethod.Post); request = this.AddContentToRequest(request, requestBody); var responseString = this.GetResponseString(slideSessionModel, request, HttpStatusCode.Created); var sessionModel = JsonConvert.DeserializeObject <SessionModel>(responseString); slideSessionModel.Hashtag = sessionModel.keyword; slideSessionModel.ArsnovaEuConfig.SessionId = sessionModel._id; this.SetFeatures(slideSessionModel); } catch (JsonReaderException exception) { throw new CommunicationException("Json-Object not mappable", exception); } }
public List <ArsnovaVotingResultReturnElement> GetResults(SlideSessionModel slideSessionModel, SlideQuestionModel slideQuestionModel) { this.SetQuestionState(slideSessionModel, slideQuestionModel, false); var apiPath = "lecturerquestion/" + slideQuestionModel.ArsnovaVotingId + "/answer/?piround=1&_dc=" + this.ConvertToUnixTimestampString(DateTime.Now); try { var request = this.CreateWebRequest(slideSessionModel, apiPath, HttpMethod.Get, false); request.Headers.Add(HttpRequestHeader.AcceptEncoding, " sdch"); var responseString = this.GetResponseString(slideSessionModel, request); return(JsonConvert.DeserializeObject <List <ArsnovaVotingResultReturnElement> >(responseString)); } catch (JsonReaderException exception) { throw new CommunicationException("Get results or json deserialization failed", exception); } }
private ValidationResult SetArsnovaClickOnlineSession(SlideSessionModel slideSessionModel) { var validationResult = new ValidationResult(); var allHashtagInfos = this.arsnovaClickService.GetAllHashtagInfos(); if (string.IsNullOrEmpty(slideSessionModel.Hashtag)) { validationResult.FailureTitel = this.localizationService.Translate("Error during session setup"); validationResult.FailureMessage = this.localizationService.Translate("Hashtag is needed."); return(validationResult); } var alreadyCreatedHashtag = false; if (allHashtagInfos.Any(hi => hi.hashtag.ToLower() == slideSessionModel.Hashtag.ToLower())) { if (!this.arsnovaClickService.IsThisMineHashtag(slideSessionModel.Hashtag, slideSessionModel.PrivateKey)) { validationResult.FailureTitel = this.localizationService.Translate("Error during session setup"); validationResult.FailureMessage = this.localizationService.Translate("Can't create session, hashtag is already taken."); return(validationResult); } else { alreadyCreatedHashtag = true; } } if (!alreadyCreatedHashtag) { this.CreateSession(slideSessionModel); } validationResult = this.arsnovaClickService.UpdateQuestionGroup(slideSessionModel); return(validationResult); }
private QuestionGroupModel SlideSessionModelToQuestionGroupModel(SlideSessionModel slideSessionModel) { var questionModelList = slideSessionModel.Questions.Where(q => !q.Hidden).Select(q => this.SlideQuestionModelToQuestionModel(q, slideSessionModel.Hashtag)).ToList(); // a valid questionGroupModel requires a hashtag only, the rest can be null or missing (not defined) -> change values to null if not needed (from pre-config) return(new QuestionGroupModel { hashtag = Uri.EscapeDataString(slideSessionModel.Hashtag), questionList = questionModelList, configuration = new ConfigurationModel { hashtag = Uri.EscapeDataString(slideSessionModel.Hashtag), music = new MusicModel { hashtag = Uri.EscapeDataString(slideSessionModel.Hashtag), isUsingGlobalVolume = true, lobbyEnabled = true, lobbyTitle = "Song3", lobbyVolume = 90, countdownRunningEnabled = true, countdownRunningTitle = "Song1", countdownRunningVolume = 90, countdownEndEnabled = true, countdownEndTitle = "LobbySong1", countdownEndVolume = 90 }, nicks = new NicksModel { hashtag = Uri.EscapeDataString(slideSessionModel.Hashtag), selectedValues = new List <string>(), blockIllegal = true, restrictToCASLogin = false }, theme = "material", readingConfirmationEnabled = false, showResponseProgress = false }, type = "DefaultQuestionGroup" }); }
private List <LectureQuestionModelWithId> GetAllQuestionsFromSession(SlideSessionModel slideSessionModel) { this.CheckAuthentification(slideSessionModel); var apiPath = "lecturerquestion/?sessionkey=" + slideSessionModel.Hashtag + "&preparationquestionsonly=true&requestImageData=false&_dc=" + this.ConvertToUnixTimestampString(DateTime.Now); try { var request = this.CreateWebRequest(slideSessionModel, apiPath, HttpMethod.Get); var responseString = this.GetResponseString(slideSessionModel, request); return(JsonConvert.DeserializeObject <List <LectureQuestionModelWithId> >(responseString)); } catch (Exception e) { // throw new CommunicationException("Delete question failed", exception); // no content where returned, session is empty: return(null); } }
private Tuple <string, string> CreateQuestion(SlideSessionModel slideSessionModel, LectureQuestionModel question, string sessionId) { var apiPath = "session/" + sessionId + "/question?_dc=" + this.ConvertToUnixTimestampString(DateTime.Now); var requestBody = JsonConvert.SerializeObject(question); try { var request = this.CreateWebRequest(slideSessionModel, apiPath, HttpMethod.Post); request = this.AddContentToRequest(request, requestBody); var responseString = this.GetResponseString(slideSessionModel, request, HttpStatusCode.Created); var questionModel = JsonConvert.DeserializeObject <LectureQuestionModelWithId>(responseString); return(new Tuple <string, string>(questionModel._id, questionModel._rev)); } catch (JsonReaderException exception) { throw new CommunicationException("Create question failed (maybe Json-Object not mappable)", exception); } }
public void StartClickQuestion(SlideSessionModel slideSessionModel, int questionIndex, Slide questionTimerSlideParam, Slide resultsSlideParam) { var validationResult = new ValidationResult(); this.currentQuestionModel = slideSessionModel.Questions.First(q => q.Index == questionIndex); this.questionTimerSlide = questionTimerSlideParam; this.resultsSlide = resultsSlideParam; this.currentSlideSessionModel = slideSessionModel; validationResult = this.arsnovaClickService.StartNextQuestion(slideSessionModel, this.currentQuestionModel.RecalculatedOnlineIndex); this.countdown = this.currentQuestionModel.Countdown; this.timer = new Timer(1000); this.timer.Elapsed += this.HandleTimerEvent; this.timer.Start(); if (!validationResult.Success) { throw new CommunicationException(validationResult.FailureMessage); } }
private LectureQuestionModel GetLectureQuestion(SlideSessionModel slideSessionModel, string questionId) { /*var allQuestions = this.GetAllQuestionsOfSession(slideSessionModel); * * return allQuestions.FirstOrDefault(q => q._id == questionId);*/ this.CheckAuthentification(slideSessionModel); var apiPath = "lecturerquestion/" + questionId; try { var request = this.CreateWebRequest(slideSessionModel, apiPath, HttpMethod.Get); var responseString = this.GetResponseString(slideSessionModel, request); return(JsonConvert.DeserializeObject <LectureQuestionModelWithId>(responseString)); } catch (JsonReaderException exception) { throw new CommunicationException("Json-Object not mappable", exception); } }
private string GetResponseString(SlideSessionModel slideSessionModel, HttpWebRequest httpWebRequest, HttpStatusCode expectedHttpStatusCode = HttpStatusCode.OK, bool afterAuthCheck = false) { try { var response = (HttpWebResponse)httpWebRequest.GetResponse(); var responseStream = response.GetResponseStream(); if (responseStream == null) { throw new CommunicationException("Expected response stream is null", response.StatusCode); } var responseString = new StreamReader(responseStream).ReadToEnd(); if (response.StatusCode != expectedHttpStatusCode) { if (response.StatusCode == HttpStatusCode.Unauthorized && !afterAuthCheck) { this.Login(slideSessionModel); this.GetResponseString(slideSessionModel, httpWebRequest, expectedHttpStatusCode, true); } throw new CommunicationException("Unexpected response from server", response.StatusCode, responseString); } return(responseString); } catch (WebException webException) { throw new CommunicationException("Web Exception while requesting response", webException); } catch (Exception exception) { throw new CommunicationException("General Exception while requesting response", exception); } }
public void CreateOrUpdateQuestion(SlideSessionModel slideSessionModel, int questionIndex) { var question = slideSessionModel.Questions.FirstOrDefault(q => q.Index == questionIndex); if (question != null) { this.CheckAuthentification(slideSessionModel); var arsnovaQuestion = this.SlideQuestionModelToLectureQuestionModel(question, slideSessionModel.Hashtag); if (string.IsNullOrEmpty(question.ArsnovaVotingId)) { var questionIds = this.CreateQuestion(slideSessionModel, arsnovaQuestion, slideSessionModel.Hashtag); question.ArsnovaVotingId = questionIds.Item1; question.RevisionsId = questionIds.Item2; } else { var questionIds = this.UpdateQuestion(slideSessionModel, question, question.ArsnovaVotingId); question.ArsnovaVotingId = questionIds.Item1; question.RevisionsId = questionIds.Item2; } } }