From 4f3c621d4454c5336253ad5837f6b699c8c85840 Mon Sep 17 00:00:00 2001 From: RKrom Date: Thu, 11 Oct 2012 14:00:58 +0000 Subject: [PATCH] Added Imm.io plugin, somehow I still get Internal Server errors...? git-svn-id: http://svn.code.sf.net/p/greenshot/code/trunk@2138 7dccd23d-a4a3-4e1f-8c07-b4c1b4018ab4 --- GreenshotImmioPlugin/Forms/ImmioForm.cs | 34 +++++ .../Forms/SettingsForm.Designer.cs | 119 +++++++++++++++ GreenshotImmioPlugin/Forms/SettingsForm.cs | 47 ++++++ .../GreenshotImmioPlugin.csproj | 98 +++++++++++++ GreenshotImmioPlugin/ImmioConfiguration.cs | 63 ++++++++ GreenshotImmioPlugin/ImmioDestination.cs | 76 ++++++++++ GreenshotImmioPlugin/ImmioPlugin.cs | 138 ++++++++++++++++++ GreenshotImmioPlugin/ImmioPlugin.resx | 131 +++++++++++++++++ GreenshotImmioPlugin/ImmioUtils.cs | 71 +++++++++ GreenshotImmioPlugin/LanguageKeys.cs | 36 +++++ .../Languages/language_immioplugin-en-US.xml | 32 ++++ .../Properties/AssemblyInfo.cs.template | 54 +++++++ 12 files changed, 899 insertions(+) create mode 100644 GreenshotImmioPlugin/Forms/ImmioForm.cs create mode 100644 GreenshotImmioPlugin/Forms/SettingsForm.Designer.cs create mode 100644 GreenshotImmioPlugin/Forms/SettingsForm.cs create mode 100644 GreenshotImmioPlugin/GreenshotImmioPlugin.csproj create mode 100644 GreenshotImmioPlugin/ImmioConfiguration.cs create mode 100644 GreenshotImmioPlugin/ImmioDestination.cs create mode 100644 GreenshotImmioPlugin/ImmioPlugin.cs create mode 100644 GreenshotImmioPlugin/ImmioPlugin.resx create mode 100644 GreenshotImmioPlugin/ImmioUtils.cs create mode 100644 GreenshotImmioPlugin/LanguageKeys.cs create mode 100644 GreenshotImmioPlugin/Languages/language_immioplugin-en-US.xml create mode 100644 GreenshotImmioPlugin/Properties/AssemblyInfo.cs.template diff --git a/GreenshotImmioPlugin/Forms/ImmioForm.cs b/GreenshotImmioPlugin/Forms/ImmioForm.cs new file mode 100644 index 000000000..ed117daf5 --- /dev/null +++ b/GreenshotImmioPlugin/Forms/ImmioForm.cs @@ -0,0 +1,34 @@ +/* + * Greenshot - a free and open source screenshot tool + * Copyright (C) 2007-2012 Thomas Braun, Jens Klingen, Robin Krom + * + * For more information see: http://getgreenshot.org/ + * The Greenshot project is hosted on Sourceforge: http://sourceforge.net/projects/greenshot/ + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 1 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +using System; +using System.Windows.Forms; +using GreenshotPlugin.Core; +using GreenshotPlugin.Controls; + +namespace GreenshotImmioPlugin { + /// + /// Description of ImmioForm. + /// + public class ImmioForm : GreenshotForm { + public ImmioForm() : base() { + } + } +} diff --git a/GreenshotImmioPlugin/Forms/SettingsForm.Designer.cs b/GreenshotImmioPlugin/Forms/SettingsForm.Designer.cs new file mode 100644 index 000000000..18595162b --- /dev/null +++ b/GreenshotImmioPlugin/Forms/SettingsForm.Designer.cs @@ -0,0 +1,119 @@ +/* + * Greenshot - a free and open source screenshot tool + * Copyright (C) 2007-2012 Thomas Braun, Jens Klingen, Robin Krom + * + * For more information see: http://getgreenshot.org/ + * The Greenshot project is hosted on Sourceforge: http://sourceforge.net/projects/greenshot/ + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 1 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +namespace GreenshotImmioPlugin { + partial class SettingsForm { + /// + /// Designer variable used to keep track of non-visual components. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Disposes resources used by the form. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing) { + if (components != null) { + components.Dispose(); + } + } + base.Dispose(disposing); + } + + /// + /// This method is required for Windows Forms designer support. + /// Do not change the method contents inside the source code editor. The Forms designer might + /// not be able to load this method if it was changed manually. + /// + private void InitializeComponent() + { + this.buttonOK = new GreenshotPlugin.Controls.GreenshotButton(); + this.buttonCancel = new GreenshotPlugin.Controls.GreenshotButton(); + this.combobox_uploadimageformat = new GreenshotPlugin.Controls.GreenshotComboBox(); + this.label_upload_format = new GreenshotPlugin.Controls.GreenshotLabel(); + this.SuspendLayout(); + // + // buttonOK + // + this.buttonOK.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.buttonOK.LanguageKey = "immio.OK"; + this.buttonOK.Location = new System.Drawing.Point(222, 88); + this.buttonOK.Name = "buttonOK"; + this.buttonOK.Size = new System.Drawing.Size(75, 23); + this.buttonOK.TabIndex = 2; + this.buttonOK.UseVisualStyleBackColor = true; + this.buttonOK.Click += new System.EventHandler(this.ButtonOKClick); + // + // buttonCancel + // + this.buttonCancel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.buttonCancel.LanguageKey = "immio.CANCEL"; + this.buttonCancel.Location = new System.Drawing.Point(303, 88); + this.buttonCancel.Name = "buttonCancel"; + this.buttonCancel.Size = new System.Drawing.Size(75, 23); + this.buttonCancel.TabIndex = 3; + this.buttonCancel.UseVisualStyleBackColor = true; + this.buttonCancel.Click += new System.EventHandler(this.ButtonCancelClick); + // + // combobox_uploadimageformat + // + this.combobox_uploadimageformat.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.combobox_uploadimageformat.FormattingEnabled = true; + this.combobox_uploadimageformat.Location = new System.Drawing.Point(102, 7); + this.combobox_uploadimageformat.Name = "combobox_uploadimageformat"; + this.combobox_uploadimageformat.PropertyName = "UploadFormat"; + this.combobox_uploadimageformat.SectionName = "Immio"; + this.combobox_uploadimageformat.Size = new System.Drawing.Size(276, 21); + this.combobox_uploadimageformat.TabIndex = 8; + // + // label_upload_format + // + this.label_upload_format.LanguageKey = "immio.label_upload_format"; + this.label_upload_format.Location = new System.Drawing.Point(12, 10); + this.label_upload_format.Name = "label_upload_format"; + this.label_upload_format.Size = new System.Drawing.Size(84, 20); + this.label_upload_format.TabIndex = 9; + // + // SettingsForm + // + this.AutoScaleDimensions = new System.Drawing.SizeF(96F, 96F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi; + this.ClientSize = new System.Drawing.Size(387, 123); + this.Controls.Add(this.label_upload_format); + this.Controls.Add(this.combobox_uploadimageformat); + this.Controls.Add(this.buttonCancel); + this.Controls.Add(this.buttonOK); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; + this.LanguageKey = "immio.settings_title"; + this.MaximizeBox = false; + this.MinimizeBox = false; + this.Name = "SettingsForm"; + this.ResumeLayout(false); + this.PerformLayout(); + + } + private GreenshotPlugin.Controls.GreenshotComboBox combobox_uploadimageformat; + private GreenshotPlugin.Controls.GreenshotLabel label_upload_format; + private GreenshotPlugin.Controls.GreenshotButton buttonCancel; + private GreenshotPlugin.Controls.GreenshotButton buttonOK; + } +} diff --git a/GreenshotImmioPlugin/Forms/SettingsForm.cs b/GreenshotImmioPlugin/Forms/SettingsForm.cs new file mode 100644 index 000000000..b8d3e3236 --- /dev/null +++ b/GreenshotImmioPlugin/Forms/SettingsForm.cs @@ -0,0 +1,47 @@ +/* + * Greenshot - a free and open source screenshot tool + * Copyright (C) 2007-2012 Thomas Braun, Jens Klingen, Robin Krom + * + * For more information see: http://getgreenshot.org/ + * The Greenshot project is hosted on Sourceforge: http://sourceforge.net/projects/greenshot/ + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 1 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +using System; +using System.Windows.Forms; +using GreenshotPlugin.Core; +using GreenshotPlugin.Controls; + +namespace GreenshotImmioPlugin { + /// + /// Description of PasswordRequestForm. + /// + public partial class SettingsForm : ImmioForm { + public SettingsForm(ImmioConfiguration config) : base() { + // + // The InitializeComponent() call is required for Windows Forms designer support. + // + InitializeComponent(); + this.Icon = GreenshotPlugin.Core.GreenshotResources.getGreenshotIcon(); + } + + void ButtonOKClick(object sender, EventArgs e) { + this.DialogResult = DialogResult.OK; + } + + void ButtonCancelClick(object sender, System.EventArgs e) { + this.DialogResult = DialogResult.Cancel; + } + } +} diff --git a/GreenshotImmioPlugin/GreenshotImmioPlugin.csproj b/GreenshotImmioPlugin/GreenshotImmioPlugin.csproj new file mode 100644 index 000000000..4c4a8c046 --- /dev/null +++ b/GreenshotImmioPlugin/GreenshotImmioPlugin.csproj @@ -0,0 +1,98 @@ + + + + + {B7B30064-1034-4C53-AB7C-17A007360C19} + Library + GreenshotImmioPlugin + GreenshotImmioPlugin + v2.0 + Properties + False + False + 4 + false + Always + + + + 3.5 + + + + + + ..\Greenshot\Lib\log4net.dll + + + + + + + + + + Form + + + SettingsForm.cs + + + + + + + + + Never + + + + ImmioPlugin.cs + + + + + {5B924697-4DCD-4F98-85F1-105CB84B7341} + GreenshotPlugin + + + + "$(SolutionDir)\tools\TortoiseSVN\SubWCRev.exe" "$(ProjectDir)\" "$(ProjectDir)\Properties\AssemblyInfo.cs.template" "$(ProjectDir)\Properties\AssemblyInfo.cs" + + mkdir "$(SolutionDir)bin\$(Configuration)\Plugins\$(ProjectName)" +copy "$(ProjectDir)bin\$(Configuration)\$(TargetFileName)" "$(SolutionDir)bin\$(Configuration)\Plugins\$(ProjectName)\*.gsp" +copy "$(ProjectDir)bin\$(Configuration)\$(ProjectName).pdb" "$(SolutionDir)bin\$(Configuration)\Plugins\$(ProjectName)\" +mkdir "$(SolutionDir)bin\$(Configuration)\Languages\Plugins\$(ProjectName)" +copy "$(ProjectDir)\Languages\*.xml" "$(SolutionDir)bin\$(Configuration)\Languages\Plugins\$(ProjectName)\" + + + + True + False + Full + true + TRACE + + + False + Off + 4194304 + AnyCPU + 4096 + + + False + Off + 4194304 + x86 + 4096 + + + False + True + Full + true + DEBUG;TRACE + + \ No newline at end of file diff --git a/GreenshotImmioPlugin/ImmioConfiguration.cs b/GreenshotImmioPlugin/ImmioConfiguration.cs new file mode 100644 index 000000000..210e094bd --- /dev/null +++ b/GreenshotImmioPlugin/ImmioConfiguration.cs @@ -0,0 +1,63 @@ +/* + * Greenshot - a free and open source screenshot tool + * Copyright (C) 2007-2012 Thomas Braun, Jens Klingen, Robin Krom + * + * For more information see: http://getgreenshot.org/ + * The Greenshot project is hosted on Sourceforge: http://sourceforge.net/projects/greenshot/ + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 1 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +using System; +using System.Collections.Generic; +using System.Windows.Forms; + +using GreenshotPlugin.Controls; +using GreenshotPlugin.Core; +using Greenshot.IniFile; + +namespace GreenshotImmioPlugin { + /// + /// Description of ImmioConfiguration. + /// + [IniSection("Immio", Description="Greenshot Immio Plugin configuration")] + public class ImmioConfiguration : IniSection { + [IniProperty("UploadFormat", Description="What file type to use for uploading", DefaultValue="png")] + public OutputFormat UploadFormat; + [IniProperty("UploadJpegQuality", Description="JPEG file save quality in %.", DefaultValue="80")] + public int UploadJpegQuality; + [IniProperty("UploadReduceColors", Description="Reduce color amount of the uploaded image to 256", DefaultValue="False")] + public bool UploadReduceColors; + [IniProperty("UsePageLink", Description = "Use pagelink instead of direct link on the clipboard", DefaultValue = "False")] + public bool UsePageLink; + + /// + /// A form for username/password + /// + /// bool true if OK was pressed, false if cancel + public bool ShowConfigDialog() { + SettingsForm settingsForm = null; + + new PleaseWaitForm().ShowAndWait(ImmioPlugin.Attributes.Name, Language.GetString("immio", LangKey.communication_wait), + delegate() { + settingsForm = new SettingsForm(this); + } + ); + DialogResult result = settingsForm.ShowDialog(); + if (result == DialogResult.OK) { + return true; + } + return false; + } + } +} diff --git a/GreenshotImmioPlugin/ImmioDestination.cs b/GreenshotImmioPlugin/ImmioDestination.cs new file mode 100644 index 000000000..548f703bc --- /dev/null +++ b/GreenshotImmioPlugin/ImmioDestination.cs @@ -0,0 +1,76 @@ +/* + * Greenshot - a free and open source screenshot tool + * Copyright (C) 2007-2012 Thomas Braun, Jens Klingen, Robin Krom + * + * For more information see: http://getgreenshot.org/ + * The Greenshot project is hosted on Sourceforge: http://sourceforge.net/projects/greenshot/ + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 1 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Diagnostics; +using System.Drawing; +using System.IO; +using System.Windows; + +using Greenshot.Plugin; +using GreenshotPlugin.Core; +using Greenshot.IniFile; + +namespace GreenshotImmioPlugin { + /// + /// Description of ImmioDestination. + /// + public class ImmioDestination : AbstractDestination { + private static log4net.ILog LOG = log4net.LogManager.GetLogger(typeof(ImmioDestination)); + private static ImmioConfiguration config = IniConfig.GetIniSection(); + private ImmioPlugin plugin = null; + + public ImmioDestination(ImmioPlugin plugin) { + this.plugin = plugin; + } + + public override string Designation { + get { + return "Immio"; + } + } + + public override string Description { + get { + return Language.GetString("immio", LangKey.upload_menu_item); + } + } + + public override Image DisplayIcon { + get { + ComponentResourceManager resources = new ComponentResourceManager(typeof(ImmioPlugin)); + return (Image)resources.GetObject("Immio"); + } + } + + public override ExportInformation ExportCapture(bool manuallyInitiated, ISurface surface, ICaptureDetails captureDetails) { + ExportInformation exportInformation = new ExportInformation(this.Designation, this.Description); + using (Image image = surface.GetImageForExport()) { + string uploadURL = null; + exportInformation.ExportMade = plugin.Upload(captureDetails, image, out uploadURL); + exportInformation.Uri = uploadURL; + } + ProcessExport(exportInformation, surface); + return exportInformation; + } + } +} diff --git a/GreenshotImmioPlugin/ImmioPlugin.cs b/GreenshotImmioPlugin/ImmioPlugin.cs new file mode 100644 index 000000000..adb17005b --- /dev/null +++ b/GreenshotImmioPlugin/ImmioPlugin.cs @@ -0,0 +1,138 @@ +/* + * Greenshot - a free and open source screenshot tool + * Copyright (C) 2007-2012 Thomas Braun, Jens Klingen, Robin Krom + * + * For more information see: http://getgreenshot.org/ + * The Greenshot project is hosted on Sourceforge: http://sourceforge.net/projects/greenshot/ + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 1 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Drawing; +using System.IO; +using System.Windows.Forms; +using System.Threading; + +using Greenshot.Plugin; +using GreenshotPlugin.Controls; +using GreenshotPlugin.Core; +using Greenshot.IniFile; + +namespace GreenshotImmioPlugin { + /// + /// This is the ImmioPlugin code + /// + public class ImmioPlugin : IGreenshotPlugin { + private static readonly log4net.ILog LOG = log4net.LogManager.GetLogger(typeof(ImmioPlugin)); + private static ImmioConfiguration config; + public static PluginAttribute Attributes; + private IGreenshotHost host; + private ComponentResourceManager resources; + + public ImmioPlugin() { + } + + public IEnumerable Destinations() { + yield return new ImmioDestination(this); + } + + public IEnumerable Processors() { + yield break; + } + + /// + /// Implementation of the IGreenshotPlugin.Initialize + /// + /// Use the IGreenshotPluginHost interface to register events + /// Use the ICaptureHost interface to register in the MainContextMenu + /// My own attributes + /// true if plugin is initialized, false if not (doesn't show) + public virtual bool Initialize(IGreenshotHost pluginHost, PluginAttribute myAttributes) { + this.host = (IGreenshotHost)pluginHost; + Attributes = myAttributes; + + // Get configuration + config = IniConfig.GetIniSection(); + resources = new ComponentResourceManager(typeof(ImmioPlugin)); + + ToolStripMenuItem itemPlugInRoot = new ToolStripMenuItem(Language.GetString("immio", LangKey.configure)); + itemPlugInRoot.Image = (Image)resources.GetObject("Immio"); + itemPlugInRoot.Click += delegate { + config.ShowConfigDialog(); + }; + + PluginUtils.AddToContextMenu(host, itemPlugInRoot); + return true; + } + + public virtual void Shutdown() { + LOG.Debug("Immio Plugin shutdown."); + } + + /// + /// Implementation of the IPlugin.Configure + /// + public virtual void Configure() { + config.ShowConfigDialog(); + } + + /// + /// This will be called when Greenshot is shutting down + /// + /// + /// + public void Closing(object sender, FormClosingEventArgs e) { + LOG.Debug("Application closing, de-registering Immio Plugin!"); + Shutdown(); + } + + /// + /// Upload the capture to Immio + /// + /// + /// + /// out string for the url + /// true if the upload succeeded + public bool Upload(ICaptureDetails captureDetails, Image image, out string uploadURL) { + OutputSettings outputSettings = new OutputSettings(config.UploadFormat, config.UploadJpegQuality, config.UploadReduceColors); + uploadURL = null; + try { + string filename = Path.GetFileName(FilenameHelper.GetFilename(config.UploadFormat, captureDetails)); + string url = null; + + // Run upload in the background + new PleaseWaitForm().ShowAndWait(Attributes.Name, Language.GetString("immio", LangKey.communication_wait), + delegate() { + url = ImmioUtils.UploadToImmio(image, outputSettings, captureDetails.Title, filename); + } + ); + uploadURL = url; + + IniConfig.Save(); + try { + Clipboard.SetText(url); + } catch (Exception ex) { + LOG.Error("Can't write to clipboard: ", ex); + } + return true; + } catch (Exception e) { + LOG.Error(e); + MessageBox.Show(Language.GetString("immio", LangKey.upload_failure) + " " + e.Message); + } + return false; + } + } +} diff --git a/GreenshotImmioPlugin/ImmioPlugin.resx b/GreenshotImmioPlugin/ImmioPlugin.resx new file mode 100644 index 000000000..00ce7ed3d --- /dev/null +++ b/GreenshotImmioPlugin/ImmioPlugin.resx @@ -0,0 +1,131 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAIAAACQkWg2AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAMVJREFUOE9jDA0J + ZSAJADW8ffeOSAQyHaJhzvHXaGjR6TdoCKgMi4Zzj79+/vH3Pxg8ePfz2cdfQBGgTqBx2DVAlKKB9Zfe + 49QAlIOofvP1N9BsINp69QPEtdhtAEoAHbDi3FtMX+HUgKkUiw29m6e0rshsWORfO88WSLatyp+4fRqa + ThQbgKqBStuWO6ChpcdTFx+vXnh8IbofkFUvPOKDhhYciVlwtATFBojBmEqRRdA14FcNlEXRQFA1ugbS + Eh8wSRGPAL2C6QdnoO9oAAAAAElFTkSuQmCC + + + \ No newline at end of file diff --git a/GreenshotImmioPlugin/ImmioUtils.cs b/GreenshotImmioPlugin/ImmioUtils.cs new file mode 100644 index 000000000..e24b25d61 --- /dev/null +++ b/GreenshotImmioPlugin/ImmioUtils.cs @@ -0,0 +1,71 @@ +/* + * Greenshot - a free and open source screenshot tool + * Copyright (C) 2007-2012 Thomas Braun, Jens Klingen, Robin Krom + * + * For more information see: http://getgreenshot.org/ + * The Greenshot project is hosted on Sourceforge: http://sourceforge.net/projects/greenshot/ + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 1 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +using System; +using System.Collections.Generic; +using System.Drawing; +using System.Drawing.Drawing2D; +using System.IO; +using System.Net; +using System.Text; +using System.Web; + +using GreenshotPlugin.Core; +using Greenshot.IniFile; +using Greenshot.Plugin; + +namespace GreenshotImmioPlugin { + /// + /// Description of ImmioUtils. + /// + public class ImmioUtils { + private static readonly log4net.ILog LOG = log4net.LogManager.GetLogger(typeof(ImmioUtils)); + private static ImmioConfiguration config = IniConfig.GetIniSection(); + + private ImmioUtils() { + } + + /// + /// Do the actual upload to Immio + /// + /// Image to upload + /// OutputSettings for the image file format + /// Title + /// Filename + /// ImmioInfo with details + public static string UploadToImmio(Image image, OutputSettings outputSettings, string title, string filename) { + + string responseString = null; + HttpWebRequest webRequest = (HttpWebRequest)NetworkHelper.CreateWebRequest("http://imm.io/store/"); + webRequest.Method = "POST"; + webRequest.ServicePoint.Expect100Continue = false; + + IDictionary uploadParameters = new Dictionary(); + uploadParameters.Add("name", filename); + uploadParameters.Add("image", new ImageContainer(image, outputSettings, null)); + NetworkHelper.WriteMultipartFormData(webRequest, uploadParameters); + + responseString = NetworkHelper.GetResponse(webRequest); + + IDictionary parsedResponse = JSONHelper.JsonDecode(responseString); + return (string)parsedResponse["uri"]; + } + } +} diff --git a/GreenshotImmioPlugin/LanguageKeys.cs b/GreenshotImmioPlugin/LanguageKeys.cs new file mode 100644 index 000000000..3b7c486ff --- /dev/null +++ b/GreenshotImmioPlugin/LanguageKeys.cs @@ -0,0 +1,36 @@ +/* + * Greenshot - a free and open source screenshot tool + * Copyright (C) 2007-2012 Thomas Braun, Jens Klingen, Robin Krom + * + * For more information see: http://getgreenshot.org/ + * The Greenshot project is hosted on Sourceforge: http://sourceforge.net/projects/greenshot/ + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 1 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +using System; + +namespace GreenshotImmioPlugin { + public enum LangKey { + upload_menu_item, + settings_title, + label_url, + label_upload_format, + OK, + CANCEL, + upload_success, + upload_failure, + communication_wait, + configure + } +} diff --git a/GreenshotImmioPlugin/Languages/language_immioplugin-en-US.xml b/GreenshotImmioPlugin/Languages/language_immioplugin-en-US.xml new file mode 100644 index 000000000..7fff7c924 --- /dev/null +++ b/GreenshotImmioPlugin/Languages/language_immioplugin-en-US.xml @@ -0,0 +1,32 @@ + + + + + Upload to Immio + + + Immio settings + + + OK + + + Cancel + + + Successfully uploaded image to Immio! + + + An error occured while uploading to Immio: + + + Image format + + + Communicating with Immio. Please wait... + + + Configure Immio + + + \ No newline at end of file diff --git a/GreenshotImmioPlugin/Properties/AssemblyInfo.cs.template b/GreenshotImmioPlugin/Properties/AssemblyInfo.cs.template new file mode 100644 index 000000000..bedcf9309 --- /dev/null +++ b/GreenshotImmioPlugin/Properties/AssemblyInfo.cs.template @@ -0,0 +1,54 @@ +/* + * Greenshot - a free and open source screenshot tool + * Copyright (C) 2007-2012 Thomas Braun, Jens Klingen, Robin Krom + * + * For more information see: http://getgreenshot.org/ + * The Greenshot project is hosted on Sourceforge: http://sourceforge.net/projects/greenshot/ + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 1 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +#region Using directives + +using System; +using System.Reflection; +using System.Runtime.InteropServices; +using Greenshot.Plugin; + +#endregion + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("GreenshotImmioPlugin")] +[assembly: AssemblyDescription("A plugin to upload images to Imm.io")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("Greenshot")] +[assembly: AssemblyProduct("Immio Plugin")] +[assembly: AssemblyCopyright("Copyright (C) 2007-2012")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] +// The PluginAttribute describes the "entryType" and if the plugin is configurable +[assembly: PluginAttribute("GreenshotImmioPlugin.ImmioPlugin", true)] + +// This sets the default COM visibility of types in the assembly to invisible. +// If you need to expose a type to COM, use [ComVisible(true)] on that type. +[assembly: ComVisible(false)] + +// The assembly version has following format : +// +// Major.Minor.Build.Revision +// +// You can specify all the values or you can use the default the Revision and +// Build Numbers by using the '*' as shown below: +[assembly: AssemblyVersion("1.0.3.$WCREV$")]