public async Task <ActionResult> Submit(int postId, int groupId, string content, string postTitle, bool isDraft, bool isNSFW, bool postQuietly, string language) { var userId = User.Identity.GetUserId(); if (userId == null) { Response.StatusCode = (int)HttpStatusCode.InternalServerError; return(Json(new { success = false, message = "Error finding user account." })); } using (var db = new ZapContext()) { var user = await db.Users.Where(u => u.AppId == userId) .FirstOrDefaultAsync().ConfigureAwait(true); // Note ConfigureAwait must be true since we need to preserve context for the mailer // Cleanup post HTML string contentStr = CleanContent(content); var postGroup = await db.Groups .Include(g => g.Banished) .FirstOrDefaultAsync(g => g.GroupId == groupId).ConfigureAwait(true); if (postGroup.Banished.Where(b => b.User.AppId == userId).Any()) { Response.StatusCode = (int)HttpStatusCode.Unauthorized; return(Json(new { success = false, message = "You are banished from this group and can not post to it." })); } string postLanguage = LanguageHelpers.NameToISO(language); Post post = null; if (postId > 0) { // Updated post post = await db.Posts .Include(pst => pst.UserId) .Where(pst => pst.PostId == postId) .FirstOrDefaultAsync().ConfigureAwait(true); // Ensure user owns this post (or is site admin) if (post.UserId.Id != user.Id && !User.IsInRole("Administrator")) { // Editing another user's post. Response.StatusCode = (int)HttpStatusCode.Unauthorized; return(Json(new { result = "failure", success = false, message = "User mismatch" })); } post.PostTitle = postTitle == null ? "Post" : postTitle.CleanUnicode().SanitizeXSS() .Replace("&", "&"); post.Group = postGroup; post.Content = contentStr; post.Language = postLanguage ?? post.Language; post.IsNSFW = isNSFW; if (post.IsDraft) // Post was or is draft - set timestamp. { post.TimeStamp = DateTime.UtcNow; } else // Post has been published, don't update timestamp, update edit timestamp. { post.TimeStampEdited = DateTime.UtcNow; } if (post.IsDraft && !isDraft) // Post was a draft, now published { post.IsDraft = isDraft; await db.SaveChangesAsync().ConfigureAwait(true); if (!isDraft && !postQuietly && !post.TimeStampEdited.HasValue) { await eventService.OnNewPostAsync(post.PostId).ConfigureAwait(true); // Old version: //// Send alerts to users subscribed to users //try //{ // var mailer = DependencyResolver.Current.GetService<MailerController>(); // mailer.ControllerContext = new ControllerContext(this.Request.RequestContext, mailer); // string emailBody = await mailer.GenerateNewPostEmailBody(post.PostId).ConfigureAwait(true); // BackgroundJob.Enqueue<MailingService>( // methodCall: x => x.MailNewPostToFollowers(post.PostId, emailBody)); //} //catch (Exception) //{ // // noted. //} } } else if (!post.IsDraft && isDraft) // Editing a previously published post { // Just save final version await db.SaveChangesAsync().ConfigureAwait(true); } else { //post.IsDraft = isDraft; // Don't set draft again after published await db.SaveChangesAsync().ConfigureAwait(true); return(Json(new { result = "success", success = true, postId = post.PostId, HTMLContent = contentStr })); } } else { // New post post = new Post() { Content = contentStr, UserId = user, TotalEarned = 0, IsDeleted = false, Score = 1, Group = postGroup, TimeStamp = DateTime.UtcNow, VotesUp = new List <User>() { user }, PostTitle = postTitle == null ? "" : postTitle.CleanUnicode().SanitizeXSS().Replace("&", "&"), IsDraft = isDraft, Language = postLanguage, IsNSFW = isNSFW, }; db.Posts.Add(post); await db.SaveChangesAsync().ConfigureAwait(true); if (!isDraft && !postQuietly) { try { await eventService.OnNewPostAsync(post.PostId).ConfigureAwait(true); // Old version: //var mailer = DependencyResolver.Current.GetService<MailerController>(); //mailer.ControllerContext = new ControllerContext(this.Request.RequestContext, mailer); //string emailBody = await mailer.GenerateNewPostEmailBody(post.PostId).ConfigureAwait(true); //BackgroundJob.Enqueue<MailingService>( // methodCall: x => x.MailNewPostToFollowers(post.PostId, emailBody)); } catch (Exception) { // noted. } } } return(Json(new { success = true, postId = post.PostId })); } }
public override bool FindAllComponents() { #region Canvas var canvasGameObject = gameObject.GetComponentInChildren <Canvas>()?.gameObject; if (canvasGameObject == null) { QuickLogger.Error("Canvas not found."); return(false); } #endregion // == Canvas Elements == // #region Navigation Dock var navigationDock = canvasGameObject.transform.Find("Navigation_Dock")?.gameObject; if (navigationDock == null) { QuickLogger.Error("Dock: Navigation_Dock not found."); return(false); } #endregion // == Navigation Button Elements == // #region Screen Holder GameObject screenHolder = canvasGameObject.transform.Find("Screens")?.gameObject; if (screenHolder == null) { QuickLogger.Error("Screen Holder GameObject not found."); return(false); } #endregion // == Screen Holder Elements == // #region Welcome Screen var welcomeScreen = screenHolder.FindChild("WelcomePage")?.gameObject; if (welcomeScreen == null) { QuickLogger.Error("Screen: WelcomeScreen not found."); return(false); } #endregion #region Version Label var versionLbl = welcomeScreen.FindChild("Logo_Intro").FindChild("Version_Text")?.gameObject; if (versionLbl == null) { QuickLogger.Error("Cannot find Version_Text Game Object"); } string assemblyVersion = Assembly.GetExecutingAssembly().GetName().Version.ToString(); versionLbl.GetComponent <Text>().text = $"V{assemblyVersion}"; #endregion #region Settings Screen var settingsScreen = screenHolder.FindChild("SettingsPage")?.gameObject; if (settingsScreen == null) { QuickLogger.Error("Screen: SettingsPage not found."); return(false); } #endregion #region Battery Monitor Page var batteryMonitorPage = screenHolder.FindChild("BatteryMonitorPage")?.gameObject; if (batteryMonitorPage == null) { QuickLogger.Error("Screen: BatteryMonitorPage not found."); return(false); } QuickLogger.Info("Finding Meters"); #endregion #region Battery Grid _batteryGrid = batteryMonitorPage.FindChild("Grid")?.gameObject; if (_batteryGrid == null) { QuickLogger.Error("Screen: BatteryMonitorPage not found."); return(false); } QuickLogger.Debug($"Meter Count {_batteryGrid.transform.childCount}"); for (int i = 0; i < _mono.BatteryCount; i++) { QuickLogger.Info($"Meter {i}"); var powercell = _mono.PowerManager.GetPowerCell(i); QuickLogger.Debug($"Battery {powercell.GetName()}"); powercell.SetMeter(_batteryGrid.transform.GetChild(i).gameObject); } #endregion #region Power Off Page var powerOffPage = screenHolder.FindChild("PowerOffPage")?.gameObject; if (powerOffPage == null) { QuickLogger.Error("Screen: PowerOffPage not found."); return(false); } #endregion #region Boot Page var bootingPage = screenHolder.FindChild("BootingPage")?.gameObject; if (bootingPage == null) { QuickLogger.Error("Screen: BootingPage not found."); return(false); } #endregion // == Powered off Elements #region PoweredOff LBL var poweredOffLbl = powerOffPage.FindChild("Powered_Off_LBL").GetComponent <Text>(); if (poweredOffLbl == null) { QuickLogger.Error("Screen: Powered_Off_LBL not found."); return(false); } poweredOffLbl.text = LanguageHelpers.GetLanguage(FCSPowerStorageBuildable.PoweredOffKey); #endregion // == Battery MonitorPage Elements #region Battery Monitor Power Amount Label _batteryMonitorAmountLbl = batteryMonitorPage.FindChild("Battery_Monitor_Amount_LBL").GetComponent <Text>(); if (_batteryMonitorAmountLbl == null) { QuickLogger.Error("Screen: Battery_Monitor_Amount_LBL not found."); return(false); } #endregion #region Battery Monitor Label var batteryMonitorLbl = batteryMonitorPage.FindChild("Battery_Monitor_LBL").GetComponent <Text>(); if (batteryMonitorLbl == null) { QuickLogger.Error("Screen: Battery_Monitor_LBL not found."); return(false); } batteryMonitorLbl.text = LanguageHelpers.GetLanguage(FCSPowerStorageBuildable.BatteryMetersKey); #endregion #region Trickle Mode BTN var trickleModeBtn = batteryMonitorPage.FindChild("Trickle_Mode")?.gameObject; if (trickleModeBtn == null) { QuickLogger.Error("Screen: Trickle_Mode not found."); return(false); } InterfaceButton trickleBTN = trickleModeBtn.AddComponent <InterfaceButton>(); trickleBTN.OnButtonClick += OnButtonClick; trickleBTN.ButtonMode = InterfaceButtonMode.None; trickleBTN.BtnName = "TrickleModeBTN"; #endregion #region Charge Mode BTN var chargeModeBtn = batteryMonitorPage.FindChild("Charge_Mode")?.gameObject; if (chargeModeBtn == null) { QuickLogger.Error("Screen: Charge_Mode not found."); return(false); } InterfaceButton chargeBTN = chargeModeBtn.AddComponent <InterfaceButton>(); chargeBTN.ButtonMode = InterfaceButtonMode.None; chargeBTN.OnButtonClick += OnButtonClick; chargeBTN.BtnName = "ChargeModeBTN"; #endregion // == Boot Page Elements == // #region Booting LBL var bootingLbl = bootingPage.FindChild("Booting_TXT").GetComponent <Text>(); if (bootingLbl == null) { QuickLogger.Error("Screen: _bootingLBL not found."); return(false); } bootingLbl.text = LanguageHelpers.GetLanguage(FCSPowerStorageBuildable.BootingKey); #endregion // == Settings Page Elements == // #region Color Picker var colorPicker = settingsScreen.FindChild("Color_Picker")?.gameObject; if (colorPicker == null) { QuickLogger.Error("Screen: _color_Picker not found."); return(false); } InterfaceButton colorPickerBTN = colorPicker.AddComponent <InterfaceButton>(); colorPickerBTN.OnButtonClick += OnButtonClick; colorPickerBTN.ButtonMode = InterfaceButtonMode.None; colorPickerBTN.BtnName = "ColorPickerBTN"; #endregion #region Color Picker LBL var colorPickerLbl = colorPicker.FindChild("Label").GetComponent <Text>(); if (colorPickerLbl == null) { QuickLogger.Error("Screen: Color Picker Label not found."); return(false); } colorPickerLbl.text = LanguageHelpers.GetLanguage(FCSPowerStorageBuildable.ColorPickerKey); #endregion #region Settings LBL var settingsLbl = settingsScreen.FindChild("Setting_LBL").GetComponent <Text>(); if (settingsLbl == null) { QuickLogger.Error("Screen: Settings Page Label not found."); return(false); } settingsLbl.text = LanguageHelpers.GetLanguage(FCSPowerStorageBuildable.SettingsKey); #endregion #region System Settings LBL var storageModeLbl = settingsScreen.FindChild("System_Settings_LBL").GetComponent <Text>(); if (storageModeLbl == null) { QuickLogger.Error("Screen: Storage Mode Label not found."); return(false); } storageModeLbl.text = LanguageHelpers.GetLanguage(FCSPowerStorageBuildable.SystemSettingsLblKey); #endregion #region Grid var grid = settingsScreen.FindChild("Grid")?.gameObject; if (grid == null) { QuickLogger.Error("Screen: Grid not found."); return(false); } #endregion #region Auto Activate BTN var autoActivateBtn = grid.FindChild("Auto_Activate")?.gameObject; if (autoActivateBtn == null) { QuickLogger.Error("Screen: Auto_Activate not found."); return(false); } var autoActivateTxt = autoActivateBtn.FindChild("Label").GetComponent <Text>(); if (autoActivateTxt == null) { QuickLogger.Error("Screen: Auto_Activate text not found."); return(false); } autoActivateTxt.text = LanguageHelpers.GetLanguage(FCSPowerStorageBuildable.AutoActivateKey); InterfaceButton autoABTN = autoActivateBtn.AddComponent <InterfaceButton>(); autoABTN.ButtonMode = InterfaceButtonMode.None; autoABTN.OnButtonClick += OnButtonClick; autoABTN.BtnName = "AutoActivateBTN"; #endregion #region Sync BTN var syncBtn = grid.FindChild("Sync")?.gameObject; if (syncBtn == null) { QuickLogger.Error("Screen: Sync not found."); return(false); } var syncAllBtnTxt = syncBtn.FindChild("Label").GetComponent <Text>(); if (syncAllBtnTxt == null) { QuickLogger.Error("Screen: Sync All text not found."); return(false); } syncAllBtnTxt.text = LanguageHelpers.GetLanguage(FCSPowerStorageBuildable.SyncAllKey); InterfaceButton syncBTN = syncBtn.AddComponent <InterfaceButton>(); syncBTN.ButtonMode = InterfaceButtonMode.None; syncBTN.OnButtonClick += OnButtonClick; syncBTN.BtnName = "SyncBTN"; #endregion #region Auto Activate Limit var autoActivateLimitBtn = grid.FindChild("Auto_Activate_Limit")?.gameObject; if (autoActivateLimitBtn == null) { QuickLogger.Error("Screen: Auto_Activate_Limit not found."); return(false); } var autoActivateLimitTxt = autoActivateLimitBtn.FindChild("Label").GetComponent <Text>(); if (autoActivateLimitTxt == null) { QuickLogger.Error("Screen: Auto_Activate_limit text not found."); return(false); } autoActivateLimitTxt.text = LanguageHelpers.GetLanguage(FCSPowerStorageBuildable.AutoActivateAtKey); var autoActivateLimitTextBox = autoActivateLimitBtn.FindChild("Background").FindChild("Text")?.gameObject; if (autoActivateLimitTextBox == null) { QuickLogger.Error("Screen:btnName Text not found."); return(false); } _autoActivateTextB = autoActivateLimitTextBox.GetComponent <Text>(); _autoActivateTextB.text = _mono.GetAutoActivateAt().ToString(); var autoActivateResult = CreateSystemButton(autoActivateLimitTextBox, LanguageHelpers.GetLanguage(FCSPowerStorageBuildable.AutoActivateDescKey), LanguageHelpers.GetLanguage(FCSPowerStorageBuildable.AutoActivateOnHoverKey), _mono.GetAutoActivateAt, _mono.ValidateAutoConfigUnits); if (!autoActivateResult) { return(false); } #endregion #region Base Drain Protection BTN var baseDrainProtectionBtn = grid.FindChild("Base_Drain_Protection")?.gameObject; if (baseDrainProtectionBtn == null) { QuickLogger.Error("Screen: Base_Drain_Protection not found."); return(false); } var baseDrianProtectionTxt = baseDrainProtectionBtn.FindChild("Label").GetComponent <Text>(); if (baseDrianProtectionTxt == null) { QuickLogger.Error("Screen: Base_Drain_protection text not found."); return(false); } baseDrianProtectionTxt.text = LanguageHelpers.GetLanguage(FCSPowerStorageBuildable.BaseDrainProtectionKey); InterfaceButton bDPBTN = baseDrainProtectionBtn.AddComponent <InterfaceButton>(); bDPBTN.ButtonMode = InterfaceButtonMode.None; bDPBTN.OnButtonClick += OnButtonClick; bDPBTN.BtnName = "BaseDrainBTN"; #endregion #region Base Drain Limit var baseDrainlimitBtn = grid.FindChild("Base_Drain_Limit")?.gameObject; if (baseDrainlimitBtn == null) { QuickLogger.Error("Screen: Base_Drain_Limit not found."); return(false); } var baseDrianLimitTxt = baseDrainlimitBtn.FindChild("Label").GetComponent <Text>(); if (baseDrianLimitTxt == null) { QuickLogger.Error("Screen: Base_Drain_Limit text not found."); return(false); } baseDrianLimitTxt.text = LanguageHelpers.GetLanguage(FCSPowerStorageBuildable.BaseDrainLimitKey); var baseDrainlimitTextBox = baseDrainlimitBtn.FindChild("Background").FindChild("Text")?.gameObject; if (baseDrainlimitTextBox == null) { QuickLogger.Error("Screen:baseDrainlimitTextBox Text not found."); return(false); } _baseDrainLimitTextB = baseDrainlimitTextBox.GetComponent <Text>(); _baseDrainLimitTextB.text = _mono.GetBasePowerProtectionGoal().ToString(); var baseDrainResult = CreateSystemButton(baseDrainlimitTextBox, LanguageHelpers.GetLanguage(FCSPowerStorageBuildable.BaseDrainLimitDescKey), LanguageHelpers.GetLanguage(FCSPowerStorageBuildable.BaseDrainLimitOnHoverKey), _mono.GetBasePowerProtectionGoal, _mono.ValidateBaseProtectionUnits); if (!baseDrainResult) { return(false); } #endregion //TODO Add langugae for btns #region Discharge Mode LBL var trickleModeLbl = trickleModeBtn.FindChild("Label").GetComponent <Text>(); if (trickleModeLbl == null) { QuickLogger.Error("Screen: TrickleModeLabel not found."); return(false); } trickleModeLbl.text = LanguageHelpers.GetLanguage(FCSPowerStorageBuildable.DischargeKey); #endregion #region Charge Mode LBL var chargeModeLbl = chargeModeBtn.FindChild("Label").GetComponent <Text>(); if (chargeModeLbl == null) { QuickLogger.Error("Screen: Charge Mode LBL not found."); return(false); } chargeModeLbl.text = LanguageHelpers.GetLanguage(FCSPowerStorageBuildable.ChargeKey); #endregion // == Color Picker Elements == // #region Color Picker Page var colorPickerPage = screenHolder.FindChild("ColorPickerPage")?.gameObject; if (colorPickerPage == null) { QuickLogger.Error("Screen: ColorPicker not found."); return(false); } #endregion _colorPicker = colorPickerPage.FindChild("ColorPicker")?.gameObject; if (_colorPicker == null) { QuickLogger.Error("GameObject: ColorPicker not found."); return(false); } #region Color Picker Previous Page BTN _previousPageGameObject = colorPickerPage.FindChild("Back_Arrow_BTN")?.gameObject; if (_previousPageGameObject == null) { QuickLogger.Error("Screen: Back_Arrow_BTN not found."); return(false); } var prevPageBTN = _previousPageGameObject.AddComponent <PaginatorButton>(); prevPageBTN.AmountToChangePageBy = -1; prevPageBTN.ChangePageBy = ChangePageBy; #endregion #region Color Picker Next Page BTN _nextPageGameObject = colorPickerPage.FindChild("Forward_Arrow_BTN")?.gameObject; if (_nextPageGameObject == null) { QuickLogger.Error("Screen: Forward_Arrow_BTN not found."); return(false); } var nextPageBTN = _nextPageGameObject.AddComponent <PaginatorButton>(); nextPageBTN.ChangePageBy = ChangePageBy; nextPageBTN.AmountToChangePageBy = 1; #endregion #region Color Picker Page Counter _pageCounter = colorPickerPage.FindChild("Page_Number")?.gameObject; if (_pageCounter == null) { QuickLogger.Error("Screen: Page_Number not found."); return(false); } _pageCounterText = _pageCounter.GetComponent <Text>(); if (_pageCounterText == null) { QuickLogger.Error("Screen: _pageCounterText not found."); return(false); } #endregion // == Navigation Dock Elements == // #region Settings Button var settingButton = navigationDock.transform.Find("Settings_BTN")?.gameObject; if (settingButton == null) { QuickLogger.Error("Dock: Settings_BTN not found."); return(false); } InterfaceButton settingsBTN = settingButton.AddComponent <InterfaceButton>(); settingsBTN.OnButtonClick = OnButtonClick; settingsBTN.BtnName = "SettingsBTN"; settingsBTN.ButtonMode = InterfaceButtonMode.Background; #endregion #region Home Button var homeButton = navigationDock.transform.Find("Home_BTN")?.gameObject; if (homeButton == null) { QuickLogger.Error("Dock: Home_BTN not found."); return(false); } InterfaceButton home = homeButton.AddComponent <InterfaceButton>(); home.OnButtonClick = OnButtonClick; home.BtnName = "HomeBTN"; home.ButtonMode = InterfaceButtonMode.Background; #endregion #region Power Button var powerButton = navigationDock.transform.Find("Power_BTN")?.gameObject; if (powerButton == null) { QuickLogger.Error("Dock: Power_BTN not found."); return(false); } InterfaceButton power = powerButton.AddComponent <InterfaceButton>(); power.OnButtonClick = OnButtonClick; power.BtnName = "PowerBTN"; power.ButtonMode = InterfaceButtonMode.Background; #endregion return(true); }
private void UpdateLanguage() { _healthSlider.FindChild("Heath_LBL").GetComponent <Text>().text = LanguageHelpers.GetLanguage(DisplayLanguagePatching.HealthKey); _powerSlider.FindChild("Power_LBL").GetComponent <Text>().text = LanguageHelpers.GetLanguage(DisplayLanguagePatching.PowerKey); }