Skip to content

Commit

Permalink
Add sm.ms
Browse files Browse the repository at this point in the history
  • Loading branch information
chenguanzhou committed Jun 20, 2017
1 parent de8cccd commit 4fc9762
Show file tree
Hide file tree
Showing 10 changed files with 162 additions and 39 deletions.
14 changes: 10 additions & 4 deletions MarkDownEditor/App.config
Expand Up @@ -73,17 +73,23 @@
<setting name="ShowMathJax" serializeAs="String">
<value>True</value>
</setting>
<setting name="QiniuUserDomainNam" serializeAs="String">
<value />
</setting>
<setting name="QiniuACCESS_KEY" serializeAs="String">
<value>t_2QtVL2VmIUKcA31iQD1yvlSfCKB_ynzwPHcPZJ</value>
<value />
</setting>
<setting name="QiniuSECRET_KEY" serializeAs="String">
<value>256LcRO_2GBtLzxYzbXi8Ajr-A7KPFrGXtZlcsUt</value>
<value />
</setting>
<setting name="QiniuUserDomainName" serializeAs="String">
<value>http://7xread.com1.z0.glb.clouddn.com</value>
<value />
</setting>
<setting name="QiniuUserScope" serializeAs="String">
<value>markdowneditor</value>
<value />
</setting>
<setting name="CurrentImageStrorageServiceIndex" serializeAs="String">
<value>0</value>
</setting>
</MarkDownEditor.Properties.Settings>
</userSettings>
Expand Down
1 change: 1 addition & 0 deletions MarkDownEditor/MarkDownEditor.csproj
Expand Up @@ -174,6 +174,7 @@
<DesignTime>True</DesignTime>
</Compile>
<Compile Include="SimpleHelpers\FileEncoding.cs" />
<Compile Include="SMMSClient.cs" />
<Compile Include="ViewModel\FindReplaceViewModel.cs" />
<Compile Include="ViewModel\AboutViewModel.cs" />
<Compile Include="View\AboutControl.xaml.cs">
Expand Down
20 changes: 16 additions & 4 deletions MarkDownEditor/Properties/Settings.Designer.cs

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

14 changes: 10 additions & 4 deletions MarkDownEditor/Properties/Settings.settings
Expand Up @@ -68,17 +68,23 @@
<Setting Name="ShowMathJax" Type="System.Boolean" Scope="User">
<Value Profile="(Default)">True</Value>
</Setting>
<Setting Name="QiniuACCESS_KEY" Type="System.String" Scope="User">
<Setting Name="QiniuUserDomainNam" Type="System.String" Scope="User">
<Value Profile="(Default)" />
</Setting>
<Setting Name="QiniuSECRET_KEY" Type="System.String" Scope="User">
<Setting Name="QiniuACCESS_KEY" Type="System.String" Scope="User">
<Value Profile="(Default)" />
</Setting>
<Setting Name="QiniuUserDomainNam" Type="System.String" Scope="User">
<Setting Name="QiniuSECRET_KEY" Type="System.String" Scope="User">
<Value Profile="(Default)" />
</Setting>
<Setting Name="QiniuUserScope" Type="System.String" Scope="User">
<Setting Name="QiniuUserDomainName" Type="System.String" Scope="User">
<Value Profile="(Default)" />
</Setting>
<Setting Name="QiniuUserScope" Type="System.String" Scope="User">
<Value Profile="(Default)" />
</Setting>
<Setting Name="CurrentImageStrorageServiceIndex" Type="System.Int32" Scope="User">
<Value Profile="(Default)">0</Value>
</Setting>
</Settings>
</SettingsFile>
48 changes: 48 additions & 0 deletions MarkDownEditor/SMMSClient.cs
@@ -0,0 +1,48 @@
using Newtonsoft.Json.Linq;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Net.Http;
using System.Text;
using System.Threading.Tasks;

namespace MarkDownEditor
{
public class SMMSClient
{
public static string UploadImageToSMMS(string path)
{
FileStream fs = File.Open(path, FileMode.Open, FileAccess.Read);

using (var client = new HttpClient())
using (var formData = new MultipartFormDataContent())
{
client.DefaultRequestHeaders.TryAddWithoutValidation("Accept", "text/html,application/xhtml+xml,application/xml");
client.DefaultRequestHeaders.TryAddWithoutValidation("User-Agent", "Mozilla/5.0 (Windows NT 6.2; WOW64; rv:19.0) Gecko/20100101 Firefox/19.0");
client.DefaultRequestHeaders.TryAddWithoutValidation("Accept-Charset", "ISO-8859-1");



HttpContent fileStreamContent = new StreamContent(fs);
fileStreamContent.Headers.Add("Content-Type", "multipart/form-data");
formData.Add(fileStreamContent, "smfile", path);
var res = client.PostAsync("https://sm.ms/api/upload", formData).Result;

if (!res.IsSuccessStatusCode)
{
throw new HttpRequestException("Net error!");
}

using (var streamReader = new StreamReader(res.Content.ReadAsStreamAsync().Result))
{
JObject o = JObject.Parse(streamReader.ReadToEnd());
if (o["code"].ToString().ToLower() != "success")
throw new HttpRequestException(o["msg"].ToString());

return o["data"]["url"].ToString();
}
}
}
}
}
1 change: 1 addition & 0 deletions MarkDownEditor/View/MvvmChromiumWebBrowser.cs
Expand Up @@ -17,6 +17,7 @@ public MvvmChromiumWebBrowser()
{
this.RequestHandler = new RequestHandler();
this.IsBrowserInitializedChanged += MvvmChromiumWebBrowser_IsBrowserInitializedChanged;

}

#region IsBrowserInitialized
Expand Down
2 changes: 1 addition & 1 deletion MarkDownEditor/View/RequestHandler.cs
Expand Up @@ -89,7 +89,7 @@ public void OnResourceRedirect(IWebBrowser browserControl, IBrowser browser, IFr

public void OnResourceRedirect(IWebBrowser browserControl, IBrowser browser, IFrame frame, IRequest request, IResponse response, ref string newUrl)
{
throw new NotImplementedException();
//throw new NotImplementedException();
}

public bool OnResourceResponse(IWebBrowser browserControl, IBrowser browser, IFrame frame, IRequest request, IResponse response)
Expand Down
47 changes: 28 additions & 19 deletions MarkDownEditor/View/SettingsControl.xaml
Expand Up @@ -65,29 +65,38 @@
</DockPanel>
</StackPanel>
</Expander>
<Expander Header="{x:Static p:Resources.QiniuConf}" Height="300">
<StackPanel>
<DockPanel Margin="0,5,0,5">
<TextBlock Text="ACCESS_KEY:" Style="{StaticResource SettingKeyStyle}" Margin="5,0,0,0"/>
</DockPanel>
<TextBox x:Name="txtACCESS_KEY" HorizontalAlignment="Left" Height="23" Margin="5,0,0,0" TextWrapping="Wrap" Text="{Binding QiniuACCESS_KEY}" VerticalAlignment="Top" Width="280"/>

<DockPanel Margin="0,5,0,5">
<TextBlock Text="SECRET_KEY:" Style="{StaticResource SettingKeyStyle}" Margin="5,0,0,0"/>
</DockPanel>
<TextBox x:Name="txtSECRET_KEY" HorizontalAlignment="Left" Height="23" Margin="5,0,0,0" TextWrapping="Wrap" Text="{Binding QiniuSECRET_KEY}" VerticalAlignment="Top" Width="280"/>
<Expander IsExpanded="True" Header="Image Storage Service">
<Controls:MetroAnimatedSingleRowTabControl SelectedIndex="{Binding CurrentImageStrorageServiceIndex}">
<Controls:MetroTabItem Header="SM.MS"/>
<Controls:MetroTabItem Header="IMGUR"/>
<Controls:MetroTabItem Header="Qiniu">
<StackPanel>
<DockPanel Margin="0,5,0,5">
<TextBlock Text="ACCESS_KEY:" Style="{StaticResource SettingKeyStyle}" Margin="5,0,0,0"/>
</DockPanel>
<TextBox x:Name="txtACCESS_KEY" HorizontalAlignment="Left" Height="23" Margin="5,0,0,0" TextWrapping="Wrap" Text="{Binding QiniuACCESS_KEY}" VerticalAlignment="Top" Width="280"/>

<DockPanel Margin="0,5,0,5">
<TextBlock Text="{x:Static p:Resources.QiniuUserDomainName}" Style="{StaticResource SettingKeyStyle}" Margin="5,0,0,0"/>
</DockPanel>
<TextBox x:Name="txtUserDomainName" HorizontalAlignment="Left" Height="23" Margin="5,0,0,0" TextWrapping="Wrap" Text="{Binding QiniuUserDomainName}" VerticalAlignment="Top" Width="280"/>
<DockPanel Margin="0,5,0,5">
<TextBlock Text="SECRET_KEY:" Style="{StaticResource SettingKeyStyle}" Margin="5,0,0,0"/>
</DockPanel>
<TextBox x:Name="txtSECRET_KEY" HorizontalAlignment="Left" Height="23" Margin="5,0,0,0" TextWrapping="Wrap" Text="{Binding QiniuSECRET_KEY}" VerticalAlignment="Top" Width="280"/>

<DockPanel Margin="0,5,0,5">
<TextBlock Text="{x:Static p:Resources.QiniuUserScope}" Style="{StaticResource SettingKeyStyle}" Margin="5,0,0,0"/>
</DockPanel>
<TextBox x:Name="txtUserScope" HorizontalAlignment="Left" Height="23" Margin="5,0,0,0" TextWrapping="Wrap" Text="{Binding QiniuUserScope}" VerticalAlignment="Top" Width="280"/>
<DockPanel Margin="0,5,0,5">
<TextBlock Text="{x:Static p:Resources.QiniuUserDomainName}" Style="{StaticResource SettingKeyStyle}" Margin="5,0,0,0"/>
</DockPanel>
<TextBox x:Name="txtUserDomainName" HorizontalAlignment="Left" Height="23" Margin="5,0,0,0" TextWrapping="Wrap" Text="{Binding QiniuUserDomainName}" VerticalAlignment="Top" Width="280"/>

</StackPanel>
<DockPanel Margin="0,5,0,5">
<TextBlock Text="{x:Static p:Resources.QiniuUserScope}" Style="{StaticResource SettingKeyStyle}" Margin="5,0,0,0"/>
</DockPanel>
<TextBox x:Name="txtUserScope" HorizontalAlignment="Left" Height="23" Margin="5,0,0,0" TextWrapping="Wrap" Text="{Binding QiniuUserScope}" VerticalAlignment="Top" Width="280"/>

</StackPanel>
</Controls:MetroTabItem>


</Controls:MetroAnimatedSingleRowTabControl>
</Expander>

</StackPanel>
Expand Down
28 changes: 21 additions & 7 deletions MarkDownEditor/ViewModel/MainViewModel.cs
Expand Up @@ -1077,11 +1077,19 @@ public bool CanRedo
return image.Link;
};
Func<string, Task<string>> uploadImage2SMMS = async (string filePath) =>
{
return await Task<string>.Run(() =>
{
return SMMSClient.UploadImageToSMMS(filePath);
});
};
Func<string, Task<string>> uploadImage2Qiniu = async (string filePath) =>
{
return await Task<string>.Run(()=>
{
var settingModel = new SettingsViewModel();
var settingModel = SettingsViewModel;
Qiniu.Conf.Config.ACCESS_KEY = settingModel.QiniuACCESS_KEY;
Qiniu.Conf.Config.SECRET_KEY = settingModel.QiniuSECRET_KEY;
Expand All @@ -1103,13 +1111,14 @@ public bool CanRedo
});
};
string currentImageStorageService = SettingsViewModel.CurrentImageStrorageService;
var ret = await DialogCoordinator.Instance.ShowMessageAsync(this, Properties.Resources.Image, Properties.Resources.SelectImageType,
MessageDialogStyle.AffirmativeAndNegativeAndDoubleAuxiliary, new MetroDialogSettings()
{
AffirmativeButtonText = Properties.Resources.OnlineImage,
NegativeButtonText = Properties.Resources.Cancel,
FirstAuxiliaryButtonText = Properties.Resources.UploadLocalImage2IMGUR,
SecondAuxiliaryButtonText = Properties.Resources.UploadLocalImage2Qiniu,
FirstAuxiliaryButtonText = "Upload Image To " + currentImageStorageService,
SecondAuxiliaryButtonText = "Insert local image (maybe not avalible when exporting)",
ColorScheme = MetroDialogColorScheme.Accented
});
Expand All @@ -1122,9 +1131,9 @@ public bool CanRedo
insertUrl(link);
}
else
else if (ret == MessageDialogResult.FirstAuxiliary)
//upload
{
{
OpenFileDialog dlg = new OpenFileDialog();
dlg.Title = Properties.Resources.UploadImagesTitle;
dlg.Filter = Properties.Resources.ImageFilter;
Expand All @@ -1138,8 +1147,13 @@ public bool CanRedo
if (info.Length > 5120000)
throw new Exception(Properties.Resources.ImageSizeError);
progress.SetIndeterminate();
string link = ret == MessageDialogResult.FirstAuxiliary ? await uploadImage2Imgur(dlg.FileName) : await uploadImage2Qiniu(dlg.FileName);
string link;
if (currentImageStorageService == "SM.MS")
link = await uploadImage2SMMS(dlg.FileName);
else if (currentImageStorageService == "IMGUR")
link = await uploadImage2Imgur(dlg.FileName);
else
link = await uploadImage2Qiniu(dlg.FileName);
await progress.CloseAsync();
insertUrl(link);
}
Expand Down
26 changes: 26 additions & 0 deletions MarkDownEditor/ViewModel/SettingsViewModel.cs
Expand Up @@ -121,6 +121,32 @@ public class AccentItem
}
public List<AccentItem> AccentColors { get; set; } = ThemeManager.Accents.Select(s => new AccentItem() { Name = s.Name, ColorBrush = s.Resources["AccentColorBrush"] as Brush }).ToList();

public List<string> AllImageStrorageServices => new List<string>
{
"SM.MS",
"IMGUR",
"Qiniu"
};

private int currentImageStrorageServiceIndex = Properties.Settings.Default.CurrentImageStrorageServiceIndex;
public int CurrentImageStrorageServiceIndex
{
get { return currentImageStrorageServiceIndex; }
set
{
if (currentImageStrorageServiceIndex == value)
return;

currentImageStrorageServiceIndex = value;
Properties.Settings.Default.CurrentImageStrorageServiceIndex = value;
Properties.Settings.Default.Save();

RaisePropertyChanged("CurrentImageStrorageServiceIndex");
}
}

public string CurrentImageStrorageService => AllImageStrorageServices[CurrentImageStrorageServiceIndex];

#endregion

private FontFamily editorFont = new FontFamily(Properties.Settings.Default.EditorFont);
Expand Down

0 comments on commit 4fc9762

Please sign in to comment.