From 24c6c840fd5a394ea1aa43418718dc52a1c42690 Mon Sep 17 00:00:00 2001 From: harlan Date: Tue, 30 May 2017 23:07:03 +0800 Subject: [PATCH] qiniu cloud plugin implementation --- GreenshotQiniuPlugin/Forms/QiniuForm.cs | 28 ++ .../Forms/SettingsForm.Designer.cs | 196 +++++++++ GreenshotQiniuPlugin/Forms/SettingsForm.cs | 33 ++ GreenshotQiniuPlugin/Forms/SettingsForm.resx | 379 ++++++++++++++++++ .../GreenshotQiniuPlugin.csproj | 119 ++++++ GreenshotQiniuPlugin/LanguageKeys.cs | 41 ++ .../Languages/language_qiniuplugin-en-US.xml | 53 +++ .../Languages/language_qiniuplugin-zh-CN.xml | 21 + .../Properties/AssemblyInfo.cs | 60 +++ GreenshotQiniuPlugin/QiniuConfiguration.cs | 68 ++++ GreenshotQiniuPlugin/QiniuCredentials.cs | 31 ++ GreenshotQiniuPlugin/QiniuDestination.cs | 62 +++ GreenshotQiniuPlugin/QiniuInfo.cs | 215 ++++++++++ GreenshotQiniuPlugin/QiniuPlugin.cs | 190 +++++++++ GreenshotQiniuPlugin/QiniuPlugin.resx | 124 ++++++ GreenshotQiniuPlugin/QiniuUtils.cs | 100 +++++ GreenshotQiniuPlugin/Resources/Qiniu.bmp | Bin 0 -> 175262 bytes 17 files changed, 1720 insertions(+) create mode 100644 GreenshotQiniuPlugin/Forms/QiniuForm.cs create mode 100644 GreenshotQiniuPlugin/Forms/SettingsForm.Designer.cs create mode 100644 GreenshotQiniuPlugin/Forms/SettingsForm.cs create mode 100644 GreenshotQiniuPlugin/Forms/SettingsForm.resx create mode 100644 GreenshotQiniuPlugin/GreenshotQiniuPlugin.csproj create mode 100644 GreenshotQiniuPlugin/LanguageKeys.cs create mode 100644 GreenshotQiniuPlugin/Languages/language_qiniuplugin-en-US.xml create mode 100644 GreenshotQiniuPlugin/Languages/language_qiniuplugin-zh-CN.xml create mode 100644 GreenshotQiniuPlugin/Properties/AssemblyInfo.cs create mode 100644 GreenshotQiniuPlugin/QiniuConfiguration.cs create mode 100644 GreenshotQiniuPlugin/QiniuCredentials.cs create mode 100644 GreenshotQiniuPlugin/QiniuDestination.cs create mode 100644 GreenshotQiniuPlugin/QiniuInfo.cs create mode 100644 GreenshotQiniuPlugin/QiniuPlugin.cs create mode 100644 GreenshotQiniuPlugin/QiniuPlugin.resx create mode 100644 GreenshotQiniuPlugin/QiniuUtils.cs create mode 100644 GreenshotQiniuPlugin/Resources/Qiniu.bmp diff --git a/GreenshotQiniuPlugin/Forms/QiniuForm.cs b/GreenshotQiniuPlugin/Forms/QiniuForm.cs new file mode 100644 index 000000000..f29a37731 --- /dev/null +++ b/GreenshotQiniuPlugin/Forms/QiniuForm.cs @@ -0,0 +1,28 @@ +/* + * Greenshot - a free and open source screenshot tool + * Copyright (C) 2007-2016 Thomas Braun, Jens Klingen, Robin Krom + * + * For more information see: http://getgreenshot.org/ + * The Greenshot project is hosted on GitHub https://github.com/greenshot/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 GreenshotQiniuPlugin { + /// + /// This class is needed for design-time resolving of the language files + /// + public class QiniuForm : GreenshotPlugin.Controls.GreenshotForm { + } +} diff --git a/GreenshotQiniuPlugin/Forms/SettingsForm.Designer.cs b/GreenshotQiniuPlugin/Forms/SettingsForm.Designer.cs new file mode 100644 index 000000000..0249502d0 --- /dev/null +++ b/GreenshotQiniuPlugin/Forms/SettingsForm.Designer.cs @@ -0,0 +1,196 @@ +namespace GreenshotQiniuPlugin +{ + partial class SettingsForm + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(SettingsForm)); + this.gslblAccessKey = new GreenshotPlugin.Controls.GreenshotLabel(); + this.gstbAccessKey = new GreenshotPlugin.Controls.GreenshotTextBox(); + this.gstbSecretKey = new GreenshotPlugin.Controls.GreenshotTextBox(); + this.gslblSecretKey = new GreenshotPlugin.Controls.GreenshotLabel(); + this.gstbScope = new GreenshotPlugin.Controls.GreenshotTextBox(); + this.gslblScope = new GreenshotPlugin.Controls.GreenshotLabel(); + this.buttonCancel = new GreenshotPlugin.Controls.GreenshotButton(); + this.buttonOK = new GreenshotPlugin.Controls.GreenshotButton(); + this.checkbox_usepagelink = new GreenshotPlugin.Controls.GreenshotCheckBox(); + this.label_upload_format = new GreenshotPlugin.Controls.GreenshotLabel(); + this.combobox_uploadimageformat = new GreenshotPlugin.Controls.GreenshotComboBox(); + this.SuspendLayout(); + // + // gslblAccessKey + // + this.gslblAccessKey.AutoSize = true; + this.gslblAccessKey.Location = new System.Drawing.Point(18, 85); + this.gslblAccessKey.Name = "gslblAccessKey"; + this.gslblAccessKey.Size = new System.Drawing.Size(65, 12); + this.gslblAccessKey.TabIndex = 0; + this.gslblAccessKey.Text = "Access Key"; + // + // gstbAccessKey + // + this.gstbAccessKey.Location = new System.Drawing.Point(107, 85); + this.gstbAccessKey.Name = "gstbAccessKey"; + this.gstbAccessKey.PropertyName = "AccessKey"; + this.gstbAccessKey.SectionName = "Qiniu"; + this.gstbAccessKey.Size = new System.Drawing.Size(261, 21); + this.gstbAccessKey.TabIndex = 1; + // + // gstbSecretKey + // + this.gstbSecretKey.Location = new System.Drawing.Point(107, 116); + this.gstbSecretKey.Name = "gstbSecretKey"; + this.gstbSecretKey.PropertyName = "SecretKey"; + this.gstbSecretKey.SectionName = "Qiniu"; + this.gstbSecretKey.Size = new System.Drawing.Size(261, 21); + this.gstbSecretKey.TabIndex = 3; + // + // gslblSecretKey + // + this.gslblSecretKey.AutoSize = true; + this.gslblSecretKey.Location = new System.Drawing.Point(18, 119); + this.gslblSecretKey.Name = "gslblSecretKey"; + this.gslblSecretKey.Size = new System.Drawing.Size(65, 12); + this.gslblSecretKey.TabIndex = 2; + this.gslblSecretKey.Text = "Secret Key"; + // + // gstbScope + // + this.gstbScope.Location = new System.Drawing.Point(107, 148); + this.gstbScope.Name = "gstbScope"; + this.gstbScope.PropertyName = "Scope"; + this.gstbScope.SectionName = "Qiniu"; + this.gstbScope.Size = new System.Drawing.Size(261, 21); + this.gstbScope.TabIndex = 5; + // + // gslblScope + // + this.gslblScope.AutoSize = true; + this.gslblScope.Location = new System.Drawing.Point(18, 151); + this.gslblScope.Name = "gslblScope"; + this.gslblScope.Size = new System.Drawing.Size(35, 12); + this.gslblScope.TabIndex = 4; + this.gslblScope.Text = "Scope"; + // + // buttonCancel + // + this.buttonCancel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.buttonCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel; + this.buttonCancel.LanguageKey = "CANCEL"; + this.buttonCancel.Location = new System.Drawing.Point(294, 208); + this.buttonCancel.Name = "buttonCancel"; + this.buttonCancel.Size = new System.Drawing.Size(75, 23); + this.buttonCancel.TabIndex = 7; + this.buttonCancel.Text = "Cancel"; + this.buttonCancel.UseVisualStyleBackColor = true; + // + // buttonOK + // + this.buttonOK.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.buttonOK.DialogResult = System.Windows.Forms.DialogResult.OK; + this.buttonOK.LanguageKey = "OK"; + this.buttonOK.Location = new System.Drawing.Point(213, 208); + this.buttonOK.Name = "buttonOK"; + this.buttonOK.Size = new System.Drawing.Size(75, 23); + this.buttonOK.TabIndex = 6; + this.buttonOK.Text = "Ok"; + this.buttonOK.UseVisualStyleBackColor = true; + // + // checkbox_usepagelink + // + this.checkbox_usepagelink.AutoSize = true; + this.checkbox_usepagelink.LanguageKey = "Qiniu.use_page_link"; + this.checkbox_usepagelink.Location = new System.Drawing.Point(20, 48); + this.checkbox_usepagelink.Name = "checkbox_usepagelink"; + this.checkbox_usepagelink.PropertyName = "UsePageLink"; + this.checkbox_usepagelink.SectionName = "Qiniu"; + this.checkbox_usepagelink.Size = new System.Drawing.Size(312, 16); + this.checkbox_usepagelink.TabIndex = 14; + this.checkbox_usepagelink.Text = "Use page link instead of image link on clipboard"; + this.checkbox_usepagelink.UseVisualStyleBackColor = true; + // + // label_upload_format + // + this.label_upload_format.LanguageKey = "Qiniu.label_upload_format"; + this.label_upload_format.Location = new System.Drawing.Point(18, 15); + this.label_upload_format.Name = "label_upload_format"; + this.label_upload_format.Size = new System.Drawing.Size(83, 20); + this.label_upload_format.TabIndex = 15; + this.label_upload_format.Text = "Image format"; + // + // combobox_uploadimageformat + // + this.combobox_uploadimageformat.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.combobox_uploadimageformat.FormattingEnabled = true; + this.combobox_uploadimageformat.Location = new System.Drawing.Point(107, 12); + this.combobox_uploadimageformat.Name = "combobox_uploadimageformat"; + this.combobox_uploadimageformat.PropertyName = "UploadFormat"; + this.combobox_uploadimageformat.SectionName = "Qiniu"; + this.combobox_uploadimageformat.Size = new System.Drawing.Size(261, 20); + this.combobox_uploadimageformat.TabIndex = 13; + // + // SettingsForm + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(396, 243); + this.Controls.Add(this.checkbox_usepagelink); + this.Controls.Add(this.label_upload_format); + this.Controls.Add(this.combobox_uploadimageformat); + this.Controls.Add(this.buttonCancel); + this.Controls.Add(this.buttonOK); + this.Controls.Add(this.gstbScope); + this.Controls.Add(this.gslblScope); + this.Controls.Add(this.gstbSecretKey); + this.Controls.Add(this.gslblSecretKey); + this.Controls.Add(this.gstbAccessKey); + this.Controls.Add(this.gslblAccessKey); + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.MaximizeBox = false; + this.MinimizeBox = false; + this.Name = "SettingsForm"; + this.Text = "Qiniu image upload settings"; + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private GreenshotPlugin.Controls.GreenshotLabel gslblAccessKey; + private GreenshotPlugin.Controls.GreenshotTextBox gstbAccessKey; + private GreenshotPlugin.Controls.GreenshotTextBox gstbSecretKey; + private GreenshotPlugin.Controls.GreenshotLabel gslblSecretKey; + private GreenshotPlugin.Controls.GreenshotTextBox gstbScope; + private GreenshotPlugin.Controls.GreenshotLabel gslblScope; + private GreenshotPlugin.Controls.GreenshotButton buttonCancel; + private GreenshotPlugin.Controls.GreenshotButton buttonOK; + private GreenshotPlugin.Controls.GreenshotCheckBox checkbox_usepagelink; + private GreenshotPlugin.Controls.GreenshotLabel label_upload_format; + private GreenshotPlugin.Controls.GreenshotComboBox combobox_uploadimageformat; + } +} \ No newline at end of file diff --git a/GreenshotQiniuPlugin/Forms/SettingsForm.cs b/GreenshotQiniuPlugin/Forms/SettingsForm.cs new file mode 100644 index 000000000..de0b6600a --- /dev/null +++ b/GreenshotQiniuPlugin/Forms/SettingsForm.cs @@ -0,0 +1,33 @@ +/* + * Greenshot - a free and open source screenshot tool + * Copyright (C) 2007-2016 Thomas Braun, Jens Klingen, Robin Krom + * + * For more information see: http://getgreenshot.org/ + * The Greenshot project is hosted on GitHub https://github.com/greenshot/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 GreenshotQiniuPlugin +{ + public partial class SettingsForm : QiniuForm + { + public SettingsForm() + { + InitializeComponent(); + AcceptButton = buttonOK; + CancelButton = buttonCancel; + } + } +} diff --git a/GreenshotQiniuPlugin/Forms/SettingsForm.resx b/GreenshotQiniuPlugin/Forms/SettingsForm.resx new file mode 100644 index 000000000..ddcfe10b1 --- /dev/null +++ b/GreenshotQiniuPlugin/Forms/SettingsForm.resx @@ -0,0 +1,379 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + + 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 + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPSkpKSisCAAAAAAAAAQAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFTg9JgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAgAAAgABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQABAAEAAQABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAApEIAAAAAAACkQgAAAAAAAKRCAAAAAAAApEIA + AAAAAACkQgAAAAAAAKRCAAAAAAAApEIAAAAAAACkQgAAAAAAAKRCAAAAAAAApEIAAAAAAACkQgAAAAAA + AKRCAAAAAAAApEIAAAAAAACkQgAAAAAAAKRCAAAAAAAApEIAAAAAAACkQgAAAAAAAKRCAAAAAAAApEIA + AAAAAACkQgAAAAAAAKRCAAAAAAAApEIAAAAAAACkQgAAAAAAAKRCAAAAAAAApEIAAAAAAACkQgAAAAAA + AKRCAAAAAAAApEIAAAAAAACkQgAAAAAAAKRCAAAAAAAApEIAAAAAAACkQgAAAAAAAKRCAAAAAAAApEIA + AAAAAACkQgAAAAAAAKRCAAAAAAAApEIAAAAAAACkQgAAAAAAAKRCAAAAAAAApEIAAAAAAACkQgAAAAAA + AKRCAAAAAAAApEIAAAAAAACkQgAAAAAAAKRCAAAAAAAApEIAAAAAAACkQgAAAAAAAKRCKAAAACAAAABA + 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 + + + \ No newline at end of file diff --git a/GreenshotQiniuPlugin/GreenshotQiniuPlugin.csproj b/GreenshotQiniuPlugin/GreenshotQiniuPlugin.csproj new file mode 100644 index 000000000..2c4b04e99 --- /dev/null +++ b/GreenshotQiniuPlugin/GreenshotQiniuPlugin.csproj @@ -0,0 +1,119 @@ + + + + + Debug + AnyCPU + {635759B5-9673-490F-B373-BAAB65C07B77} + Library + Properties + GreenshotQiniuPlugin + GreenshotQiniuPlugin + v4.5.2 + 512 + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + + ..\packages\LinqBridge.1.3.0\lib\net20\LinqBridge.dll + + + ..\Greenshot\Lib\log4net.dll + + + False + ..\..\csharp-sdk\src\packages\Newtonsoft.Json.10.0.2\lib\net20\Newtonsoft.Json.dll + + + ..\..\csharp-sdk\bin\Qiniu.dll + + + + + + + + + + + + + + + + + + + + + Form + + + Form + + + SettingsForm.cs + + + + + + + {5B924697-4DCD-4F98-85F1-105CB84B7341} + GreenshotPlugin + + + + + SettingsForm.cs + + + QiniuPlugin.cs + Designer + + + + + + + + + + +if exist "$(ProjectDir)QiniuCredentials.private.cs" ( + rename "$(ProjectDir)QiniuCredentials.cs" "QiniuCredentials.orig.cs" + rename "$(ProjectDir)QiniuCredentials.private.cs" "QiniuCredentials.cs" +) + + + + +if exist "$(ProjectDir)QiniuCredentials.orig.cs" ( + rename "$(ProjectDir)QiniuCredentials.cs" "QiniuCredentials.private.cs" + rename "$(ProjectDir)QiniuCredentials.orig.cs" "QiniuCredentials.cs" +) +mkdir "$(SolutionDir)Greenshot\bin\$(Configuration)\Plugins\$(ProjectName)" +copy "$(ProjectDir)bin\$(Configuration)\$(TargetFileName)" "$(SolutionDir)Greenshot\bin\$(Configuration)\Plugins\$(ProjectName)\*.gsp" +copy "$(ProjectDir)bin\$(Configuration)\$(ProjectName).pdb" "$(SolutionDir)Greenshot\bin\$(Configuration)\Plugins\$(ProjectName)\" +mkdir "$(SolutionDir)Greenshot\bin\$(Configuration)\Languages\Plugins\$(ProjectName)" +copy "$(ProjectDir)\Languages\*.xml" "$(SolutionDir)Greenshot\bin\$(Configuration)\Languages\Plugins\$(ProjectName)\" + + + \ No newline at end of file diff --git a/GreenshotQiniuPlugin/LanguageKeys.cs b/GreenshotQiniuPlugin/LanguageKeys.cs new file mode 100644 index 000000000..d8cc9d2b1 --- /dev/null +++ b/GreenshotQiniuPlugin/LanguageKeys.cs @@ -0,0 +1,41 @@ +/* + * Greenshot - a free and open source screenshot tool + * Copyright (C) 2007-2016 Thomas Braun, Jens Klingen, Robin Krom + * + * For more information see: http://getgreenshot.org/ + * The Greenshot project is hosted on GitHub https://github.com/greenshot/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 GreenshotQiniuPlugin { + public enum LangKey { + upload_menu_item, + settings_title, + label_url, + label_upload_format, + label_clear, + OK, + CANCEL, + upload_success, + upload_failure, + communication_wait, + delete_question, + clear_question, + delete_title, + use_page_link, + history, + configure + } +} diff --git a/GreenshotQiniuPlugin/Languages/language_qiniuplugin-en-US.xml b/GreenshotQiniuPlugin/Languages/language_qiniuplugin-en-US.xml new file mode 100644 index 000000000..28a0458a1 --- /dev/null +++ b/GreenshotQiniuPlugin/Languages/language_qiniuplugin-en-US.xml @@ -0,0 +1,53 @@ + + + + + Upload to Qiniu + + + Imgur settings + + + Url + + + OK + + + Cancel + + + Successfully uploaded image to Imgur! + + + An error occured while uploading to Imgur: + + + Image format + + + Communicating with Imgur. Please wait... + + + Are you sure you want to delete the image {0} from Imgur? + + + Are you sure you want to delete the local Imgur history? + + + Delete Imgur {0} + + + Use anonymous access + + + Use page link instead of image link on clipboard + + + History + + + Configure Qiniu + + + \ No newline at end of file diff --git a/GreenshotQiniuPlugin/Languages/language_qiniuplugin-zh-CN.xml b/GreenshotQiniuPlugin/Languages/language_qiniuplugin-zh-CN.xml new file mode 100644 index 000000000..ac382ba7e --- /dev/null +++ b/GreenshotQiniuPlugin/Languages/language_qiniuplugin-zh-CN.xml @@ -0,0 +1,21 @@ + + + + 使用匿名连接 + 取消 + 是否真的要删除本地的Imgur历史记录? + 正在连接到Imgur。请稍后... + 配置七牛云 + 是否真的要从Imgur上删除图片{0}? + 删除 Imgur {0} + 历史记录 + 图片格式 + 网址 + 确认 + Imgur设置 + 上传图片到Imgur时发生错误: + 上传图片到七牛云 + 图片已成功上传到了Imgur! + 当复制链接到剪贴板时,使用页面的网址而不是图片的网址 + + \ No newline at end of file diff --git a/GreenshotQiniuPlugin/Properties/AssemblyInfo.cs b/GreenshotQiniuPlugin/Properties/AssemblyInfo.cs new file mode 100644 index 000000000..c27dd5ef3 --- /dev/null +++ b/GreenshotQiniuPlugin/Properties/AssemblyInfo.cs @@ -0,0 +1,60 @@ +/* + * Greenshot - a free and open source screenshot tool + * Copyright (C) 2007-2016 Thomas Braun, Jens Klingen, Robin Krom, Francis Noel + * + * For more information see: http://getgreenshot.org/ + * The Greenshot project is hosted on GitHub https://github.com/greenshot/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 Greenshot.Plugin; +using System.Reflection; +using System.Runtime.InteropServices; +// 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("Greenshot-Qiniu-Plugin")] +[assembly: AssemblyDescription("A plugin to upload images to qiniu cloud.")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("Greenshot")] +[assembly: AssemblyProduct("Qiniu Plugin")] +[assembly: AssemblyCopyright("Copyright (C) 2007-2016")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + + +// The PluginAttribute describes the "entryType" and if the plugin is configurable +[assembly: PluginAttribute("GreenshotQiniuPlugin.QiniuPlugin", true)] +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("635759b5-9673-490f-b373-baab65c07b77")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.2.0.0")] +[assembly: AssemblyInformationalVersion("1.2.0.0")] +[assembly: AssemblyFileVersion("1.2.0.0")] diff --git a/GreenshotQiniuPlugin/QiniuConfiguration.cs b/GreenshotQiniuPlugin/QiniuConfiguration.cs new file mode 100644 index 000000000..b8a04cdae --- /dev/null +++ b/GreenshotQiniuPlugin/QiniuConfiguration.cs @@ -0,0 +1,68 @@ +/* + * A Picasa Plugin for Greenshot + * Copyright (C) 2011 Francis Noel + * + * For more information see: http://getgreenshot.org/ + * + * 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.Windows.Forms; +using Greenshot.IniFile; +using GreenshotPlugin.Core; +using System; + +namespace GreenshotQiniuPlugin +{ + /// + /// Description of QiniuConfiguration. + /// + [IniSection("Qiniu", Description = "Greenshot Qiniu Plugin configuration")] + class QiniuConfiguration : IniSection + { + [IniProperty("UploadFormat", Description = "What file type to use for uploading", DefaultValue = "png")] + public OutputFormat UploadFormat { get; set; } + [IniProperty("UploadJpegQuality", Description = "JPEG file save quality in %.", DefaultValue = "80")] + public int UploadJpegQuality { get; set; } + [IniProperty("UploadReduceColors", Description = "Reduce color amount of the uploaded image to 256", DefaultValue = "False")] + public bool UploadReduceColors { get; set; } + [IniProperty("UsePageLink", Description = "Use pagelink instead of direct link on the clipboard", DefaultValue = "False")] + public bool UsePageLink { get; set; } + + + [IniProperty("ImgQiniuUrl", Description = "Url to Qiniu cloud.", DefaultValue = "")] + public string ImgQiniuUrl { get; set; } + + [IniProperty("AccessKey", Description = "access key used for uploading", DefaultValue = "")] + public string AccessKey { get; set; } + + [IniProperty("SecretKey", Description = "secret key used for uploading", DefaultValue = "")] + public string SecretKey { get; set; } + + [IniProperty("Scope", Description = "scope key used for uploading", DefaultValue = "")] + public string Scope { get; set; } + + + /// + /// A form for username/password + /// + /// bool true if OK was pressed, false if cancel + public bool ShowConfigDialog() + { + SettingsForm settingsForm = new SettingsForm(); + DialogResult result = settingsForm.ShowDialog(); + return result == DialogResult.OK; + } + + } +} diff --git a/GreenshotQiniuPlugin/QiniuCredentials.cs b/GreenshotQiniuPlugin/QiniuCredentials.cs new file mode 100644 index 000000000..c84ba657f --- /dev/null +++ b/GreenshotQiniuPlugin/QiniuCredentials.cs @@ -0,0 +1,31 @@ +/* + * Greenshot - a free and open source screenshot tool + * Copyright (C) 2007-2016 Thomas Braun, Jens Klingen, Robin Krom + * + * For more information see: http://getgreenshot.org/ + * The Greenshot project is hosted on GitHub https://github.com/greenshot/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 GreenshotQiniuPlugin { + /// + /// This class is merely a placeholder for the file keeping the API key and secret for imgur integration. + /// You can set your own values here + /// + public static class QiniuCredentials { + public static string CONSUMER_KEY = "@credentials_Qiniu_consumer_key@"; + public static string CONSUMER_SECRET = "@credentials_Qiniu_consumer_secret@"; + } +} diff --git a/GreenshotQiniuPlugin/QiniuDestination.cs b/GreenshotQiniuPlugin/QiniuDestination.cs new file mode 100644 index 000000000..72c0810ac --- /dev/null +++ b/GreenshotQiniuPlugin/QiniuDestination.cs @@ -0,0 +1,62 @@ +/* + * A Picasa Plugin for Greenshot + * Copyright (C) 2011 Francis Noel + * + * For more information see: http://getgreenshot.org/ + * + * 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.ComponentModel; +using System.Drawing; +using Greenshot.Plugin; +using GreenshotPlugin.Core; + +namespace GreenshotQiniuPlugin +{ + class QiniuDestination : AbstractDestination + { + private readonly QiniuPlugin _plugin; + public QiniuDestination(QiniuPlugin plugin) + { + _plugin = plugin; + } + + public override string Designation => "Qiniu"; + + public override string Description => Language.GetString("qiniu", LangKey.upload_menu_item); + + public override Image DisplayIcon + { + get + { + ComponentResourceManager resources = new ComponentResourceManager(typeof(QiniuPlugin)); + return (Image)resources.GetObject("Qiniu"); + } + } + + public override ExportInformation ExportCapture(bool manuallyInitiated, ISurface surface, ICaptureDetails captureDetails) + { + ExportInformation exportInformation = new ExportInformation(Designation, Description); + string uploadUrl; + bool uploaded = _plugin.Upload(captureDetails, surface, out uploadUrl); + if (uploaded) + { + exportInformation.ExportMade = true; + exportInformation.Uri = uploadUrl; + } + ProcessExport(exportInformation, surface); + return exportInformation; + } + } +} diff --git a/GreenshotQiniuPlugin/QiniuInfo.cs b/GreenshotQiniuPlugin/QiniuInfo.cs new file mode 100644 index 000000000..9d04eff1b --- /dev/null +++ b/GreenshotQiniuPlugin/QiniuInfo.cs @@ -0,0 +1,215 @@ +/* + * Greenshot - a free and open source screenshot tool + * Copyright (C) 2007-2016 Thomas Braun, Jens Klingen, Robin Krom + * + * For more information see: http://getgreenshot.org/ + * The Greenshot project is hosted on GitHub https://github.com/greenshot/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.Drawing; +using System.Xml; + +namespace GreenshotQiniuPlugin +{ + class QiniuInfo : IDisposable + { + private static readonly log4net.ILog Log = log4net.LogManager.GetLogger(typeof(QiniuInfo)); + + public string Hash + { + get; + set; + } + + private string _deleteHash; + public string DeleteHash + { + get { return _deleteHash; } + set + { + _deleteHash = value; + DeletePage = "https://imgur.com/delete/" + value; + } + } + + public string Title + { + get; + set; + } + + public string ImageType + { + get; + set; + } + + public DateTime Timestamp + { + get; + set; + } + + public string Original + { + get; + set; + } + + public string Page + { + get; + set; + } + + public string SmallSquare + { + get; + set; + } + + public string LargeThumbnail + { + get; + set; + } + + public string DeletePage + { + get; + set; + } + + private Image _image; + public Image Image + { + get { return _image; } + set + { + _image?.Dispose(); + _image = value; + } + } + + /// + /// The public accessible Dispose + /// Will call the GarbageCollector to SuppressFinalize, preventing being cleaned twice + /// + public void Dispose() + { + Dispose(true); + GC.SuppressFinalize(this); + } + + /// + /// This Dispose is called from the Dispose and the Destructor. + /// When disposing==true all non-managed resources should be freed too! + /// + /// + protected virtual void Dispose(bool disposing) + { + if (disposing) + { + _image?.Dispose(); + } + _image = null; + } + public static QiniuInfo ParseResponse(string response) + { + Log.Debug(response); + // This is actually a hack for BUG-1695 + // The problem is the (C) sign, we send it HTML encoded "®" to Imgur and get it HTML encoded in the XML back + // Added all the encodings I found quickly, I guess these are not all... but it should fix the issue for now. + response = response.Replace("¢", "¢"); + response = response.Replace("£", "£"); + response = response.Replace("¥", "¥"); + response = response.Replace("€", "€"); + response = response.Replace("©", "©"); + response = response.Replace("®", "®"); + + QiniuInfo qiniuInfo = new QiniuInfo(); + try + { + XmlDocument doc = new XmlDocument(); + doc.LoadXml(response); + XmlNodeList nodes = doc.GetElementsByTagName("id"); + if (nodes.Count > 0) + { + qiniuInfo.Hash = nodes.Item(0)?.InnerText; + } + nodes = doc.GetElementsByTagName("hash"); + if (nodes.Count > 0) + { + qiniuInfo.Hash = nodes.Item(0)?.InnerText; + } + nodes = doc.GetElementsByTagName("deletehash"); + if (nodes.Count > 0) + { + qiniuInfo.DeleteHash = nodes.Item(0)?.InnerText; + } + nodes = doc.GetElementsByTagName("type"); + if (nodes.Count > 0) + { + qiniuInfo.ImageType = nodes.Item(0)?.InnerText; + } + nodes = doc.GetElementsByTagName("title"); + if (nodes.Count > 0) + { + qiniuInfo.Title = nodes.Item(0)?.InnerText; + } + nodes = doc.GetElementsByTagName("datetime"); + if (nodes.Count > 0) + { + // Version 3 has seconds since Epoch + double secondsSince; + if (double.TryParse(nodes.Item(0)?.InnerText, out secondsSince)) + { + var epoch = new DateTimeOffset(1970, 1, 1, 0, 0, 0, TimeSpan.Zero); + qiniuInfo.Timestamp = epoch.AddSeconds(secondsSince).DateTime; + } + } + nodes = doc.GetElementsByTagName("original"); + if (nodes.Count > 0) + { + qiniuInfo.Original = nodes.Item(0)?.InnerText.Replace("http:", "https:"); + } + // Version 3 API only has Link + nodes = doc.GetElementsByTagName("link"); + if (nodes.Count > 0) + { + qiniuInfo.Original = nodes.Item(0)?.InnerText.Replace("http:", "https:"); + } + nodes = doc.GetElementsByTagName("imgur_page"); + if (nodes.Count > 0) + { + qiniuInfo.Page = nodes.Item(0)?.InnerText.Replace("http:", "https:"); + } + else + { + // Version 3 doesn't have a page link in the response + qiniuInfo.Page = $"https://imgur.com/{qiniuInfo.Hash}"; + } + nodes = doc.GetElementsByTagName("small_square"); + qiniuInfo.SmallSquare = nodes.Count > 0 ? nodes.Item(0)?.InnerText : $"http://i.imgur.com/{qiniuInfo.Hash}s.png"; + } + catch (Exception e) + { + Log.ErrorFormat("Could not parse Imgur response due to error {0}, response was: {1}", e.Message, response); + } + return qiniuInfo; + } + } +} diff --git a/GreenshotQiniuPlugin/QiniuPlugin.cs b/GreenshotQiniuPlugin/QiniuPlugin.cs new file mode 100644 index 000000000..3f36367a6 --- /dev/null +++ b/GreenshotQiniuPlugin/QiniuPlugin.cs @@ -0,0 +1,190 @@ +/* + * A Picasa Plugin for Greenshot + * Copyright (C) 2011 Francis Noel + * + * For more information see: http://getgreenshot.org/ + * + * 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 Greenshot.IniFile; +using Greenshot.Plugin; +using GreenshotPlugin.Controls; +using GreenshotPlugin.Core; + +using Qiniu.Common; +using Qiniu.IO; +using Qiniu.IO.Model; +using Qiniu.Http; +using Qiniu.Util; + +namespace GreenshotQiniuPlugin +{ + public class QiniuPlugin : IGreenshotPlugin + { + private static readonly log4net.ILog Log = log4net.LogManager.GetLogger(typeof(QiniuPlugin)); + private static QiniuConfiguration _config; + public static PluginAttribute Attributes; + private IGreenshotHost _host; + private ComponentResourceManager _resources; + private ToolStripMenuItem _itemPlugInConfig; + + public void Dispose() + { + Dispose(true); + GC.SuppressFinalize(this); + } + + protected virtual void Dispose(bool disposing) + { + if (disposing) + { + if (_itemPlugInConfig != null) + { + _itemPlugInConfig.Dispose(); + _itemPlugInConfig = null; + } + } + } + + public IEnumerable Destinations() + { + yield return new QiniuDestination(this); + } + + public IEnumerable Processors() + { + yield break; + } + + /// + /// Implementation of the IGreenshotPlugin.Initialize + /// + /// Use the IGreenshotPluginHost interface to register events + /// My own attributes + /// true if plugin is initialized, false if not (doesn't show) + public virtual bool Initialize(IGreenshotHost pluginHost, PluginAttribute myAttributes) + { + _host = pluginHost; + Attributes = myAttributes; + + // Get configuration + _config = IniConfig.GetIniSection(); + _resources = new ComponentResourceManager(typeof(QiniuPlugin)); + string text = Language.GetString("Qiniu", LangKey.configure); + _itemPlugInConfig = new ToolStripMenuItem(text) + { + Tag = _host, + Image = (Image)_resources.GetObject("Qiniu") + }; + _itemPlugInConfig.Click += delegate { + _config.ShowConfigDialog(); + }; + + PluginUtils.AddToContextMenu(_host, _itemPlugInConfig); + Language.LanguageChanged += OnLanguageChanged; + return true; + } + + public void OnLanguageChanged(object sender, EventArgs e) + { + if (_itemPlugInConfig != null) + { + _itemPlugInConfig.Text = Language.GetString("Qiniu", LangKey.configure); + } + } + + public virtual void Shutdown() + { + Log.Debug("Qiniu Plugin shutdown."); + Language.LanguageChanged -= OnLanguageChanged; + } + + /// + /// Implementation of the IPlugin.Configure + /// + public virtual void Configure() + { + _config.ShowConfigDialog(); + } + + + /// + /// Upload the capture to qiniu cloud + /// + /// + /// ISurface + /// Path to the album + /// out string for the url + /// true if the upload succeeded + public bool Upload(ICaptureDetails captureDetails, ISurface surfaceToUpload, out string uploadUrl) + { + SurfaceOutputSettings outputSettings = new SurfaceOutputSettings(_config.UploadFormat, _config.UploadJpegQuality, _config.UploadReduceColors); + try + { + string filename = Path.GetFileName(FilenameHelper.GetFilename(_config.UploadFormat, captureDetails)); + QiniuInfo qiniuInfo = null; + + + string path = Directory.GetCurrentDirectory(); + + string fullPath = Path.Combine(path, filename); + + // public static void Save(ISurface surface, string fullPath, bool allowOverwrite, SurfaceOutputSettings outputSettings, bool copyPathToClipboard) + // Run upload in the background + ImageOutput.Save(surfaceToUpload,fullPath,true,outputSettings,true); + //new PleaseWaitForm().ShowAndWait(Attributes.Name, Language.GetString("Qiniu", LangKey.communication_wait), + // delegate + // { + HttpResult result = QiniuUtils.UploadFile(fullPath,filename); + + //} + //); + // This causes an exeption if the upload failed :) + Log.DebugFormat("Uploaded to qiniu page: " + qiniuInfo.Page); + uploadUrl = null; + try + { + if (_config.UsePageLink) + { + uploadUrl = qiniuInfo.Page; + Clipboard.SetText(qiniuInfo.Page); + } + else + { + uploadUrl = qiniuInfo.Original; + Clipboard.SetText(qiniuInfo.Original); + } + } + catch (Exception ex) + { + Log.Error("Can't write to clipboard: ", ex); + } + return true; + } + catch (Exception e) + { + Log.Error(e); + MessageBox.Show(Language.GetString("Qiniu", LangKey.upload_failure) + " " + e.Message); + } + uploadUrl = null; + return false; + } + } +} diff --git a/GreenshotQiniuPlugin/QiniuPlugin.resx b/GreenshotQiniuPlugin/QiniuPlugin.resx new file mode 100644 index 000000000..2affd0476 --- /dev/null +++ b/GreenshotQiniuPlugin/QiniuPlugin.resx @@ -0,0 +1,124 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + Resources\Qiniu.bmp;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + + \ No newline at end of file diff --git a/GreenshotQiniuPlugin/QiniuUtils.cs b/GreenshotQiniuPlugin/QiniuUtils.cs new file mode 100644 index 000000000..b055542f9 --- /dev/null +++ b/GreenshotQiniuPlugin/QiniuUtils.cs @@ -0,0 +1,100 @@ +/* + * Greenshot - a free and open source screenshot tool + * Copyright (C) 2007-2016 Thomas Braun, Jens Klingen, Robin Krom + * + * For more information see: http://getgreenshot.org/ + * The Greenshot project is hosted on GitHub https://github.com/greenshot/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.IO; +using System.Linq; +using System.Net; +using Greenshot.IniFile; +using Greenshot.Plugin; +using GreenshotPlugin.Core; + +using Qiniu.Common; +using Qiniu.IO; +using Qiniu.IO.Model; +using Qiniu.Http; +using Qiniu.Util; + +namespace GreenshotQiniuPlugin +{ + /// + /// A collection of Qiniu helper methods + /// + public static class QiniuUtils { + private static readonly log4net.ILog Log = log4net.LogManager.GetLogger(typeof(QiniuUtils)); + private static readonly QiniuConfiguration _config = IniConfig.GetIniSection(); + + + + public static HttpResult UploadFile(string fullPath,string fileName) + { + Mac mac = new Mac(_config.AccessKey, _config.SecretKey); + PutPolicy putPolicy = new PutPolicy(); + putPolicy.Scope = _config.Scope; + putPolicy.SetExpires(3600); + putPolicy.DeleteAfterDays = 1; + string token = Auth.CreateUploadToken(mac, putPolicy.ToJsonString()); + + ResumableUploader target = new ResumableUploader(); + HttpResult result = target.UploadFile(fullPath, fileName, token); + File.Delete(fullPath); + return result; + } + + /// + /// Helper for logging + /// + /// + /// + private static void LogHeader(IDictionary nameValues, string key) { + if (nameValues.ContainsKey(key)) { + Log.InfoFormat("{0}={1}", key, nameValues[key]); + } + } + + /// + /// Log the current rate-limit information + /// + /// + private static void LogRateLimitInfo(WebResponse response) { + IDictionary nameValues = new Dictionary(); + foreach (string key in response.Headers.AllKeys) { + if (!nameValues.ContainsKey(key)) { + nameValues.Add(key, response.Headers[key]); + } + } + LogHeader(nameValues, "X-RateLimit-Limit"); + LogHeader(nameValues, "X-RateLimit-Remaining"); + LogHeader(nameValues, "X-RateLimit-UserLimit"); + LogHeader(nameValues, "X-RateLimit-UserRemaining"); + LogHeader(nameValues, "X-RateLimit-UserReset"); + LogHeader(nameValues, "X-RateLimit-ClientLimit"); + LogHeader(nameValues, "X-RateLimit-ClientRemaining"); + + // Update the credits in the config, this is shown in a form + //int credits; + //if (nameValues.ContainsKey("X-RateLimit-Remaining") && int.TryParse(nameValues["X-RateLimit-Remaining"], out credits)) { + // Config.Credits = credits; + //} + } + } +} diff --git a/GreenshotQiniuPlugin/Resources/Qiniu.bmp b/GreenshotQiniuPlugin/Resources/Qiniu.bmp new file mode 100644 index 0000000000000000000000000000000000000000..fe789130d5d4cf5d40491225da5d838ada00b8e5 GIT binary patch literal 175262 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 literal 0 HcmV?d00001