private void ProcessScreenshot(string filename, string sysname, JournalScreenshot ss, int cmdrid, ImageConverter cp) { System.Threading.Timer timer = null; // Don't run if OnScreenshot has already run for this image if ((ScreenshotTimers.TryGetValue(filename, out timer) && timer == null) || (!ScreenshotTimers.TryAdd(filename, null) && !ScreenshotTimers.TryUpdate(filename, null, timer))) { return; } if (timer != null) { timer.Dispose(); } if (sysname == null) { if (LastJournalLoc != null) { sysname = LastJournalLoc.StarSystem; } else if (cmdrid >= 0) { LastJournalLoc = JournalEntry.GetLast <JournalLocOrJump>(cmdrid, DateTime.UtcNow); if (LastJournalLoc != null) { sysname = LastJournalLoc.StarSystem; } } } if (sysname == null) { HistoryEntry he = _discoveryForm.history.GetLastFSD; sysname = (he != null) ? he.System.name : "Unknown System"; } try { cp.InputFilename = filename; cp.SystemName = sysname; cp.JournalScreenShot = ss; cp.CommanderID = cmdrid; bool converted = cp.Convert(); if (converted && cp.RemoveInputFile) // if remove, delete original picture { ScreenshotTimers.TryRemove(filename, out timer); try { File.Delete(filename); } catch { System.Diagnostics.Trace.WriteLine($"Unable to remove file {filename}"); } } this.OnScreenshot?.Invoke(cp); } catch (Exception ex) { System.Diagnostics.Trace.WriteLine("Exception watcher: " + ex.Message); System.Diagnostics.Trace.WriteLine("Trace: " + ex.StackTrace); _discoveryForm.LogLineHighlight("Error in executing image conversion, try another screenshot, check output path settings. (Exception " + ex.Message + ")"); } }
public void InitControl(EDDiscoveryForm discoveryForm) { _discoveryForm = discoveryForm; this.Watcher = new ScreenshotDirectoryWatcher(_discoveryForm, CallWithConverter); this.Watcher.OnScreenshot += ConvertCompleted; ScreenshotsDirdefault = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.MyPictures), "Frontier Developments", "Elite Dangerous"); OutputDirdefault = Path.Combine(ScreenshotsDirdefault, "Converted"); try { comboBoxFormat.SelectedIndex = SQLiteDBClass.GetSettingInt("ImageHandlerFormatNr", 0); } catch { } try { comboBoxFileNameFormat.SelectedIndex = SQLiteDBClass.GetSettingInt("comboBoxFileNameFormat", 0); } catch { } try { comboBoxSubFolder.SelectedIndex = SQLiteDBClass.GetSettingInt("comboBoxSubFolder", 0); } catch { } try { comboBoxScanFor.Enabled = false; // to prevent the select change from actually doing any work here comboBoxScanFor.SelectedIndex = SQLiteDBClass.GetSettingInt("comboBoxScanFor", 0); comboBoxScanFor.Enabled = true; } catch { } checkBoxAutoConvert.Checked = SQLiteDBClass.GetSettingBool("ImageHandlerAutoconvert", false); checkBoxRemove.Checked = SQLiteDBClass.GetSettingBool("checkBoxRemove", false); checkBoxHires.Checked = SQLiteDBClass.GetSettingBool("checkBoxHires", false); textBoxOutputDir.Text = EDDConfig.UserPaths.ImageHandlerOutputDir ?? OutputDirdefault; if (!Directory.Exists(textBoxOutputDir.Text)) { textBoxOutputDir.Text = OutputDirdefault; } textBoxScreenshotsDir.Text = EDDConfig.UserPaths.ImageHandlerScreenshotsDir ?? ScreenshotsDirdefault; if (!Directory.Exists(textBoxScreenshotsDir.Text)) { textBoxScreenshotsDir.Text = ScreenshotsDirdefault; } checkBoxCopyClipboard.Checked = SQLiteDBClass.GetSettingBool("ImageHandlerClipboard", false); checkBoxPreview.Checked = SQLiteDBClass.GetSettingBool("ImageHandlerPreview", false); checkBoxCropImage.Checked = SQLiteDBClass.GetSettingBool("ImageHandlerCropImage", false); // fires the checked handler which sets the readonly mode of the controls numericUpDownTop.Value = SQLiteDBClass.GetSettingInt("ImageHandlerCropTop", 0); numericUpDownLeft.Value = SQLiteDBClass.GetSettingInt("ImageHandlerCropLeft", 0); numericUpDownWidth.Value = SQLiteDBClass.GetSettingInt("ImageHandlerCropWidth", 0); numericUpDownHeight.Value = SQLiteDBClass.GetSettingInt("ImageHandlerCropHeight", 0); textBoxFileNameExample.Text = ImageConverter.CreateFileName("Sol", "HighResScreenshot_0000.bmp", comboBoxFileNameFormat.SelectedIndex, checkBoxHires.Checked, DateTime.Now); numericUpDownTop.Enabled = numericUpDownWidth.Enabled = numericUpDownLeft.Enabled = numericUpDownHeight.Enabled = checkBoxCropImage.Checked; this.initialized = true; }
private void ProcessFilesystemEvent(object sender, System.IO.FileSystemEventArgs e, ImageConverter cp) { int cmdrid = LastJournalCmdr; if (e.FullPath.ToLowerInvariant().EndsWith(".bmp")) { if (!ScreenshotTimers.ContainsKey(e.FullPath)) { System.Threading.Timer timer = new System.Threading.Timer(s => ProcessScreenshot(e.FullPath, null, null, cmdrid, cp), null, 5000, System.Threading.Timeout.Infinite); // Destroy the timer if OnScreenshot was run between the above check and adding the timer to the dictionary if (!ScreenshotTimers.TryAdd(e.FullPath, timer)) { timer.Dispose(); } } } else { ProcessScreenshot(e.FullPath, null, null, cmdrid, cp); } }