Add Google Blogger configuration wizard panel
Adds a new radio button to specify a Google Blogger blog and a follow up panel to prompt users to open the Google Blogger OAuth flow.
This commit is contained in:
parent
bd34aecf68
commit
ad482780be
|
@ -168,6 +168,13 @@ namespace OpenLiveWriter.BlogClient
|
|||
}
|
||||
private const string IS_SHAREPOINT_BLOG = "IsSharePointBlog";
|
||||
|
||||
public bool IsGoogleBloggerBlog
|
||||
{
|
||||
get { return Settings.GetBoolean(IS_GOOGLE_BLOGGER_BLOG, false); }
|
||||
set { Settings.SetBoolean(IS_GOOGLE_BLOGGER_BLOG, value); }
|
||||
}
|
||||
private const string IS_GOOGLE_BLOGGER_BLOG = "IsGoogleBloggerBlog";
|
||||
|
||||
/// <summary>
|
||||
/// Id of the weblog on the host service
|
||||
/// </summary>
|
||||
|
|
|
@ -20,12 +20,16 @@ using OpenLiveWriter.BlogClient.Providers;
|
|||
using OpenLiveWriter.HtmlParser.Parser;
|
||||
using OpenLiveWriter.HtmlParser.Parser.FormAgent;
|
||||
using OpenLiveWriter.Localization;
|
||||
using Google.Apis.Blogger.v3;
|
||||
|
||||
namespace OpenLiveWriter.BlogClient.Clients
|
||||
{
|
||||
[BlogClient("BloggerAtom", "Atom")]
|
||||
public class BloggerAtomClient : AtomClient
|
||||
{
|
||||
public static string PicasaServiceScope = "https://picasaweb.google.com/data";
|
||||
public static string BloggerServiceScope = BloggerService.Scope.Blogger;
|
||||
|
||||
public BloggerAtomClient(Uri postApiUrl, IBlogCredentialsAccessor credentials)
|
||||
: base(AtomProtocolVersion.V10DraftBlogger, postApiUrl, credentials)
|
||||
{
|
||||
|
|
|
@ -457,6 +457,11 @@
|
|||
Identifier="BloggerError"
|
||||
Text="Blogger returned the following error:

{0}"
|
||||
comment:Text="{0} - an error message" />
|
||||
<Message
|
||||
Identifier="GoogleBloggerLoginRequired"
|
||||
Type="Warning"
|
||||
Title="Open Live Writer"
|
||||
Text="Sign in to Google Blogger to continue." />
|
||||
<Message
|
||||
Identifier="UnexpectedErrorLogin"
|
||||
Text="An unexpected error has occurred while attempting to log in:

{0}"
|
||||
|
@ -524,7 +529,7 @@
|
|||
Identifier="VideoLoginRequired"
|
||||
Type="Warning"
|
||||
Title="Open Live Writer"
|
||||
Text="Sign in and select a video to continue." />
|
||||
Text="Sign in and select a video to continue." />
|
||||
<Message
|
||||
Identifier="WordpressHomepageWrong"
|
||||
Type="Warning"
|
||||
|
|
|
@ -34,6 +34,7 @@ namespace OpenLiveWriter.Localization
|
|||
FtpServerUnavailable,
|
||||
FtpSettingsRequired,
|
||||
GoogleAuthTokenNotFound,
|
||||
GoogleBloggerLoginRequired,
|
||||
GuestNotSupported,
|
||||
HomepageUrlInvalid,
|
||||
HomepageUrlRequired,
|
||||
|
|
|
@ -2796,6 +2796,12 @@ Check the file name and try again.</value>
|
|||
<data name="DisplayMessage.GoogleAuthTokenNotFound.Text" xml:space="preserve">
|
||||
<value>The server did not respond with the expected authorization token.</value>
|
||||
</data>
|
||||
<data name="DisplayMessage.GoogleBloggerLoginRequired.Text" xml:space="preserve">
|
||||
<value>Sign in to Google Blogger to continue.</value>
|
||||
</data>
|
||||
<data name="DisplayMessage.GoogleBloggerLoginRequired.Title" xml:space="preserve">
|
||||
<value>Open Live Writer</value>
|
||||
</data>
|
||||
<data name="DisplayMessage.GuestNotSupported.Text" xml:space="preserve">
|
||||
<value>Using Open Live Writer from the guest account is not supported.</value>
|
||||
</data>
|
||||
|
|
|
@ -360,6 +360,9 @@
|
|||
<data name="DisplayMessage.InvalidWebImage.Type" xml:space="preserve">
|
||||
<value>Asterisk</value>
|
||||
</data>
|
||||
<data name="DisplayMessage.GoogleBloggerLoginRequired.Type" xml:space="preserve">
|
||||
<value>Warning</value>
|
||||
</data>
|
||||
<data name="DisplayMessage.LocalDeleteConfirmation.Buttons" xml:space="preserve">
|
||||
<value>YesNo</value>
|
||||
</data>
|
||||
|
|
|
@ -395,7 +395,7 @@ namespace OpenLiveWriter.Localization
|
|||
/// </summary>
|
||||
BlogPluginsDescription,
|
||||
/// <summary>
|
||||
/// Blogger, TypePad, and more
|
||||
/// TypePad and more
|
||||
/// </summary>
|
||||
BlogServiceNames,
|
||||
/// <summary>
|
||||
|
@ -1103,6 +1103,14 @@ namespace OpenLiveWriter.Localization
|
|||
/// </summary>
|
||||
CWSharePointUseSystemLogin,
|
||||
/// <summary>
|
||||
/// Provide Google Blogger Login
|
||||
/// </summary>
|
||||
CWGoogleBloggerTitle,
|
||||
/// <summary>
|
||||
/// To configure Google Blogger please sign in.
|
||||
/// </summary>
|
||||
CWGoogleBloggerDescription,
|
||||
/// <summary>
|
||||
/// &Microsoft Account:
|
||||
/// </summary>
|
||||
CWSpacesUsername,
|
||||
|
@ -5203,6 +5211,10 @@ namespace OpenLiveWriter.Localization
|
|||
/// </summary>
|
||||
WizardBlogTypeConfigureTo,
|
||||
/// <summary>
|
||||
/// &Google Blogger
|
||||
/// </summary>
|
||||
WizardBlogTypeGoogleBlogger,
|
||||
/// <summary>
|
||||
/// &Other services
|
||||
/// </summary>
|
||||
WizardBlogTypeOther,
|
||||
|
|
|
@ -59,6 +59,7 @@ WizardBlogTypeWelcome,"Many popular blog services work with {0}.","{0} - Long pr
|
|||
WizardBlogTypeWhatBlogType,What blog service do you use?,
|
||||
WizardBlogTypeConfigureTo,Configure {0} to publish to:,"{0} - Long product name, i.e. ""Open Live Writer""; followed by a choice of two options: ""SharePoint blog"" or ""Another blog service"""
|
||||
WizardBlogTypeSharePoint,&SharePoint,
|
||||
WizardBlogTypeGoogleBlogger,&Google Blogger,
|
||||
WizardBlogTypeOther,&Other services,
|
||||
Options,Options,
|
||||
AllowAutoUpdate,"Automatically &update account information (categories, links, capabilities, and provider extensions)",
|
||||
|
@ -365,6 +366,8 @@ CWSharePointTitle,Configure {0} for a SharePoint blog,{0} - Writer
|
|||
CWSharePointTitle2,Provide SharePoint Blog Login,
|
||||
CWSharePointText2,Enter the login required to publish to your SharePoint blog.,
|
||||
CWSharePointUseSystemLogin,Use my &Windows user name and password,
|
||||
CWGoogleBloggerTitle,Provide Google Blogger Login,
|
||||
CWGoogleBloggerDescription,To configure Google Blogger please sign in.,
|
||||
CWTitle,Add Blog Wizard,Caption of the Add Blog Wizard window.
|
||||
CWProgressHeader,Setting up your blog account,
|
||||
ProgressDownloadingEditingTemplate,Downloading editing template...,
|
||||
|
@ -1329,7 +1332,7 @@ PostPageFilter,Filter {0}, {0} - Posts or Pages
|
|||
LiveIDPrivacy,Privacy policy,
|
||||
ForgotMyPassword,Forgot my password,
|
||||
BrowseForFile,Browse for file,Tooltip over the button in the insert video from file dialog that opens an Open File Dialog when clicked,
|
||||
BlogServiceNames,"Blogger, TypePad, and more",
|
||||
BlogServiceNames,"TypePad and more",
|
||||
FindCategory,Find category,
|
||||
Alignment,Alignment,Tooltip for image alignment dropdown,
|
||||
CropPane,Image crop pane,
|
||||
|
|
Can't render this file because it has a wrong number of fields in line 52.
|
|
@ -460,7 +460,7 @@
|
|||
<comment>From the Weblog | Edit Weblog Settings | Plugins preferences panel</comment>
|
||||
</data>
|
||||
<data name="BlogServiceNames" xml:space="preserve">
|
||||
<value>Blogger, TypePad, and more</value>
|
||||
<value>TypePad and more</value>
|
||||
</data>
|
||||
<data name="BrightnessAdjust" xml:space="preserve">
|
||||
<value>Contrast</value>
|
||||
|
@ -1066,6 +1066,12 @@
|
|||
<data name="CWSharePointUseSystemLogin" xml:space="preserve">
|
||||
<value>Use my &Windows user name and password</value>
|
||||
</data>
|
||||
<data name="CWGoogleBloggerTitle" xml:space="preserve">
|
||||
<value>Provide Google Blogger Login</value>
|
||||
</data>
|
||||
<data name="CWGoogleBloggerDescription" xml:space="preserve">
|
||||
<value>To configure Google Blogger please sign in.</value>
|
||||
</data>
|
||||
<data name="CWSpacesUsername" xml:space="preserve">
|
||||
<value>&Microsoft Account ID:</value>
|
||||
</data>
|
||||
|
@ -4497,6 +4503,9 @@ This might take a while.</value>
|
|||
<value>Configure {0} to publish to:</value>
|
||||
<comment>{0} - Long product name, i.e. "Open Live Writer"; followed by a choice of two options: "SharePoint blog" or "Another blog service"</comment>
|
||||
</data>
|
||||
<data name="WizardBlogTypeGoogleBlogger" xml:space="preserve">
|
||||
<value>&Google Blogger</value>
|
||||
</data>
|
||||
<data name="WizardBlogTypeOther" xml:space="preserve">
|
||||
<value>&Other services</value>
|
||||
</data>
|
||||
|
|
|
@ -35,6 +35,7 @@ namespace OpenLiveWriter.PostEditor.Configuration
|
|||
tempSettings.IsNewWeblog = false;
|
||||
tempSettings.IsSpacesBlog = blogSettings.IsSpacesBlog;
|
||||
tempSettings.IsSharePointBlog = blogSettings.IsSharePointBlog;
|
||||
tempSettings.IsGoogleBloggerBlog = blogSettings.IsGoogleBloggerBlog;
|
||||
tempSettings.HostBlogId = blogSettings.HostBlogId;
|
||||
tempSettings.BlogName = blogSettings.BlogName;
|
||||
tempSettings.HomepageUrl = blogSettings.HomepageUrl;
|
||||
|
@ -83,6 +84,7 @@ namespace OpenLiveWriter.PostEditor.Configuration
|
|||
settings.HostBlogId = this.HostBlogId;
|
||||
settings.IsSpacesBlog = this.IsSpacesBlog;
|
||||
settings.IsSharePointBlog = this.IsSharePointBlog;
|
||||
settings.IsGoogleBloggerBlog = this.IsGoogleBloggerBlog;
|
||||
settings.BlogName = this.BlogName;
|
||||
settings.HomepageUrl = this.HomepageUrl;
|
||||
settings.ForceManualConfig = this.ForceManualConfig;
|
||||
|
@ -254,6 +256,18 @@ namespace OpenLiveWriter.PostEditor.Configuration
|
|||
}
|
||||
}
|
||||
|
||||
public bool IsGoogleBloggerBlog
|
||||
{
|
||||
get
|
||||
{
|
||||
return _isGoogleBloggerBlog;
|
||||
}
|
||||
set
|
||||
{
|
||||
_isGoogleBloggerBlog = value;
|
||||
}
|
||||
}
|
||||
|
||||
public string HostBlogId
|
||||
{
|
||||
get
|
||||
|
@ -605,6 +619,7 @@ namespace OpenLiveWriter.PostEditor.Configuration
|
|||
private bool? _savePassword;
|
||||
private bool _isSpacesBlog = false;
|
||||
private bool _isSharePointBlog = false;
|
||||
private bool _isGoogleBloggerBlog = false;
|
||||
private string _hostBlogId = String.Empty;
|
||||
private string _blogName = String.Empty;
|
||||
private string _homePageUrl = String.Empty;
|
||||
|
@ -665,6 +680,7 @@ namespace OpenLiveWriter.PostEditor.Configuration
|
|||
_savePassword = sourceSettings._savePassword;
|
||||
_isSpacesBlog = sourceSettings._isSpacesBlog;
|
||||
_isSharePointBlog = sourceSettings._isSharePointBlog;
|
||||
_isGoogleBloggerBlog = sourceSettings._isGoogleBloggerBlog;
|
||||
_hostBlogId = sourceSettings._hostBlogId;
|
||||
_blogName = sourceSettings._blogName;
|
||||
_homePageUrl = sourceSettings._homePageUrl;
|
||||
|
|
|
@ -227,6 +227,18 @@ namespace OpenLiveWriter.PostEditor.Configuration.Wizard
|
|||
_authenticationRequired = showAuthenticationStep;
|
||||
}
|
||||
|
||||
private void AddGoogleBloggerOAuthSubStep()
|
||||
{
|
||||
addWizardSubStep(
|
||||
new WizardSubStep(new WeblogConfigurationWizardPanelGoogleBloggerAuthentication(),
|
||||
null,
|
||||
new DisplayCallback(OnBasicInfoDisplayed),
|
||||
new VerifyStepCallback(OnValidatePanel),
|
||||
new NextCallback(OnGoogleBloggerOAuthCompleted),
|
||||
null,
|
||||
new BackCallback(OnGoogleBloggerOAuthBack)));
|
||||
}
|
||||
|
||||
private void AddConfirmationStep()
|
||||
{
|
||||
addWizardStep(
|
||||
|
@ -324,6 +336,7 @@ namespace OpenLiveWriter.PostEditor.Configuration.Wizard
|
|||
|
||||
// set the user's choice
|
||||
_temporarySettings.IsSharePointBlog = panelBlogType.IsSharePointBlog;
|
||||
_temporarySettings.IsGoogleBloggerBlog = panelBlogType.IsGoogleBloggerBlog;
|
||||
|
||||
// did this bootstrap a custom account wizard?
|
||||
_providerAccountWizard = panelBlogType.ProviderAccountWizard;
|
||||
|
@ -333,6 +346,10 @@ namespace OpenLiveWriter.PostEditor.Configuration.Wizard
|
|||
{
|
||||
AddSharePointBasicInfoSubStep(false);
|
||||
}
|
||||
else if (_temporarySettings.IsGoogleBloggerBlog)
|
||||
{
|
||||
AddGoogleBloggerOAuthSubStep();
|
||||
}
|
||||
else
|
||||
{
|
||||
AddBasicInfoSubStep();
|
||||
|
@ -514,6 +531,17 @@ namespace OpenLiveWriter.PostEditor.Configuration.Wizard
|
|||
_authenticationStepAdded = false;
|
||||
}
|
||||
|
||||
private void OnGoogleBloggerOAuthCompleted(Object stepControl)
|
||||
{
|
||||
OnBasicInfoAndAuthenticationCompleted((IAccountBasicInfoProvider)stepControl, new PerformBlogAutoDetection(PerformWeblogAndSettingsAutoDetectionSubStep));
|
||||
}
|
||||
|
||||
private void OnGoogleBloggerOAuthBack(Object stepControl)
|
||||
{
|
||||
var panel = (WeblogConfigurationWizardPanelGoogleBloggerAuthentication)stepControl;
|
||||
panel.CancelAuthorization();
|
||||
}
|
||||
|
||||
private void OnWeblogAndSettingsAutoDetectionCompleted(Object stepControl)
|
||||
{
|
||||
// if we weren't able to identify a specific weblog
|
||||
|
|
|
@ -30,6 +30,7 @@ namespace OpenLiveWriter.PostEditor.Configuration.Wizard
|
|||
OtherBasicInfo = 33,
|
||||
SelectProvider = 40,
|
||||
SharePointAuth = 41,
|
||||
GoogleBloggerAuth = 42,
|
||||
SelectBlog = 50,
|
||||
SelectImageEndPoint = 60,
|
||||
Confirm = 80,
|
||||
|
|
|
@ -25,6 +25,7 @@ namespace OpenLiveWriter.PostEditor.Configuration.Wizard
|
|||
private System.Windows.Forms.Label labelWelcomeText;
|
||||
private System.Windows.Forms.Panel panelRadioButtons;
|
||||
private System.Windows.Forms.RadioButton radioButtonSharePoint;
|
||||
private System.Windows.Forms.RadioButton radioButtonBlogger;
|
||||
private System.Windows.Forms.RadioButton radioButtonOther;
|
||||
private System.Windows.Forms.Label labelOtherDesc;
|
||||
private System.Windows.Forms.RadioButton radioButtonWordpress;
|
||||
|
@ -47,6 +48,7 @@ namespace OpenLiveWriter.PostEditor.Configuration.Wizard
|
|||
labelHeader.Text = Res.Get(StringId.WizardBlogTypeWhatBlogType);
|
||||
labelWelcomeText.Text = Res.Get(StringId.WizardBlogTypeWelcome);
|
||||
radioButtonSharePoint.Text = Res.Get(StringId.WizardBlogTypeSharePoint);
|
||||
radioButtonBlogger.Text = Res.Get(StringId.WizardBlogTypeGoogleBlogger);
|
||||
radioButtonOther.Text = Res.Get(StringId.WizardBlogTypeOther);
|
||||
radioButtonWordpress.Text = Res.Get(StringId.CWWelcomeWP);
|
||||
|
||||
|
@ -78,6 +80,8 @@ namespace OpenLiveWriter.PostEditor.Configuration.Wizard
|
|||
comboBoxSelectWeblogType.Items.Add(new WeblogType(serviceName));
|
||||
}
|
||||
|
||||
comboBoxSelectWeblogType.Items.Add(new WeblogType(radioButtonBlogger));
|
||||
|
||||
// add "another weblog type" entry
|
||||
comboBoxSelectWeblogType.Items.Add(new WeblogType(radioButtonOther));
|
||||
|
||||
|
@ -99,8 +103,8 @@ namespace OpenLiveWriter.PostEditor.Configuration.Wizard
|
|||
comboBoxSelectWeblogType.SelectedIndexChanged += new EventHandler(UserChangedSelectionHandler);
|
||||
radioButtonWordpress.CheckedChanged += new EventHandler(UserChangedSelectionHandler);
|
||||
radioButtonSharePoint.CheckedChanged += new EventHandler(UserChangedSelectionHandler);
|
||||
radioButtonBlogger.CheckedChanged += new EventHandler(UserChangedSelectionHandler);
|
||||
radioButtonOther.CheckedChanged += new EventHandler(UserChangedSelectionHandler);
|
||||
|
||||
}
|
||||
|
||||
public override void NaturalizeLayout()
|
||||
|
@ -117,12 +121,13 @@ namespace OpenLiveWriter.PostEditor.Configuration.Wizard
|
|||
|
||||
MaximizeWidth(radioButtonWordpress);
|
||||
MaximizeWidth(radioButtonSharePoint);
|
||||
MaximizeWidth(radioButtonBlogger);
|
||||
MaximizeWidth(radioButtonOther);
|
||||
MaximizeWidth(labelOtherDesc);
|
||||
|
||||
using (new AutoGrow(panelRadioButtons, AnchorStyles.Bottom, true))
|
||||
{
|
||||
LayoutHelper.NaturalizeHeightAndDistribute(3, radioButtonWordpress, radioButtonSharePoint, radioButtonOther);
|
||||
LayoutHelper.NaturalizeHeightAndDistribute(3, radioButtonWordpress, radioButtonSharePoint, radioButtonBlogger, radioButtonOther);
|
||||
labelOtherDesc.Top = radioButtonOther.Bottom;
|
||||
}
|
||||
}
|
||||
|
@ -162,6 +167,21 @@ namespace OpenLiveWriter.PostEditor.Configuration.Wizard
|
|||
}
|
||||
}
|
||||
|
||||
public bool IsGoogleBloggerBlog
|
||||
{
|
||||
get
|
||||
{
|
||||
if (panelRadioButtons.Visible)
|
||||
{
|
||||
return radioButtonBlogger.Checked;
|
||||
}
|
||||
else
|
||||
{
|
||||
return SelectedWeblog.RadioButton == radioButtonBlogger;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public IBlogProviderAccountWizardDescription ProviderAccountWizard
|
||||
{
|
||||
get
|
||||
|
@ -293,6 +313,7 @@ namespace OpenLiveWriter.PostEditor.Configuration.Wizard
|
|||
this.panelRadioButtons = new System.Windows.Forms.Panel();
|
||||
this.radioButtonWordpress = new System.Windows.Forms.RadioButton();
|
||||
this.radioButtonSharePoint = new System.Windows.Forms.RadioButton();
|
||||
this.radioButtonBlogger = new System.Windows.Forms.RadioButton();
|
||||
this.radioButtonOther = new System.Windows.Forms.RadioButton();
|
||||
this.labelOtherDesc = new System.Windows.Forms.Label();
|
||||
this.panelComboBox = new System.Windows.Forms.Panel();
|
||||
|
@ -326,6 +347,7 @@ namespace OpenLiveWriter.PostEditor.Configuration.Wizard
|
|||
| System.Windows.Forms.AnchorStyles.Right)));
|
||||
this.panelRadioButtons.Controls.Add(this.radioButtonWordpress);
|
||||
this.panelRadioButtons.Controls.Add(this.radioButtonSharePoint);
|
||||
this.panelRadioButtons.Controls.Add(this.radioButtonBlogger);
|
||||
this.panelRadioButtons.Controls.Add(this.radioButtonOther);
|
||||
this.panelRadioButtons.Controls.Add(this.labelOtherDesc);
|
||||
this.panelRadioButtons.Location = new System.Drawing.Point(20, 88);
|
||||
|
@ -349,7 +371,15 @@ namespace OpenLiveWriter.PostEditor.Configuration.Wizard
|
|||
this.radioButtonSharePoint.Size = new System.Drawing.Size(104, 24);
|
||||
this.radioButtonSharePoint.TabIndex = 2;
|
||||
this.radioButtonSharePoint.Text = "Share&Point weblog";
|
||||
//
|
||||
//
|
||||
// radioButtonBlogger
|
||||
//
|
||||
this.radioButtonBlogger.Location = new System.Drawing.Point(0, 72);
|
||||
this.radioButtonBlogger.Name = "radioButtonBlogger";
|
||||
this.radioButtonBlogger.Size = new System.Drawing.Size(104, 24);
|
||||
this.radioButtonBlogger.TabIndex = 3;
|
||||
this.radioButtonBlogger.Text = "&Google Blogger";
|
||||
//
|
||||
// radioButtonOther
|
||||
//
|
||||
this.radioButtonOther.Location = new System.Drawing.Point(0, 48);
|
||||
|
@ -366,8 +396,8 @@ namespace OpenLiveWriter.PostEditor.Configuration.Wizard
|
|||
this.labelOtherDesc.Name = "labelOtherDesc";
|
||||
this.labelOtherDesc.Size = new System.Drawing.Size(332, 40);
|
||||
this.labelOtherDesc.TabIndex = 5;
|
||||
this.labelOtherDesc.Text = "Blogger, WordPress, TypePad, all others";
|
||||
//
|
||||
this.labelOtherDesc.Text = "TypePad and others";
|
||||
//
|
||||
// panelComboBox
|
||||
//
|
||||
this.panelComboBox.Controls.Add(this.comboBoxSelectWeblogType);
|
||||
|
|
|
@ -0,0 +1,243 @@
|
|||
// Copyright (c) .NET Foundation. All rights reserved.
|
||||
// Licensed under the MIT license. See LICENSE file in the project root for details.
|
||||
|
||||
using System;
|
||||
using System.Windows.Forms;
|
||||
using System.Collections.Generic;
|
||||
using System.Threading.Tasks;
|
||||
using OpenLiveWriter.BlogClient;
|
||||
using OpenLiveWriter.BlogClient.Clients;
|
||||
using OpenLiveWriter.CoreServices;
|
||||
using OpenLiveWriter.CoreServices.Layout;
|
||||
using OpenLiveWriter.Extensibility.BlogClient;
|
||||
using OpenLiveWriter.Localization;
|
||||
using Google.Apis.Auth.OAuth2;
|
||||
using Google.Apis.Blogger.v3;
|
||||
using Google.Apis.Blogger.v3.Data;
|
||||
using Google.Apis.Services;
|
||||
using System.Threading;
|
||||
using OpenLiveWriter.BlogClient.Detection;
|
||||
|
||||
namespace OpenLiveWriter.PostEditor.Configuration.Wizard
|
||||
{
|
||||
/// <summary>
|
||||
/// Summary description for WeblogConfigurationWizardPanelAuthentication.
|
||||
/// </summary>
|
||||
internal class WeblogConfigurationWizardPanelGoogleBloggerAuthentication : WeblogConfigurationWizardPanel, IAccountBasicInfoProvider
|
||||
{
|
||||
private System.Windows.Forms.Label labelDescription;
|
||||
private System.Windows.Forms.Button buttonLogin;
|
||||
/// <summary>
|
||||
/// Required designer variable.
|
||||
/// </summary>
|
||||
private System.ComponentModel.Container components = null;
|
||||
|
||||
private UserCredential _userCredentials;
|
||||
private BlogList _blogList;
|
||||
private CancellationTokenSource _cancellationTokenSource;
|
||||
|
||||
public WeblogConfigurationWizardPanelGoogleBloggerAuthentication()
|
||||
{
|
||||
// This call is required by the Windows.Forms Form Designer.
|
||||
InitializeComponent();
|
||||
|
||||
labelHeader.Text = Res.Get(StringId.CWGoogleBloggerTitle);
|
||||
labelDescription.Text = Res.Get(StringId.CWGoogleBloggerDescription);
|
||||
buttonLogin.Text = Res.Get(StringId.Login);
|
||||
}
|
||||
|
||||
private async void buttonLogin_Click(object sender, EventArgs e)
|
||||
{
|
||||
buttonLogin.Enabled = false;
|
||||
|
||||
try
|
||||
{
|
||||
_cancellationTokenSource = new CancellationTokenSource();
|
||||
_userCredentials = await GoogleWebAuthorizationBroker.AuthorizeAsync(
|
||||
new ClientSecrets()
|
||||
{
|
||||
ClientId = "clientId",
|
||||
ClientSecret = "clientSecret"
|
||||
},
|
||||
new List<string>() { BloggerAtomClient.BloggerServiceScope, BloggerAtomClient.PicasaServiceScope },
|
||||
"user",
|
||||
_cancellationTokenSource.Token);
|
||||
_cancellationTokenSource = null;
|
||||
}
|
||||
finally
|
||||
{
|
||||
buttonLogin.Enabled = true;
|
||||
}
|
||||
}
|
||||
|
||||
private async Task ListUserBlogs()
|
||||
{
|
||||
BloggerService service = new BloggerService(new BaseClientService.Initializer()
|
||||
{
|
||||
HttpClientInitializer = _userCredentials
|
||||
});
|
||||
|
||||
_blogList = await service.Blogs.ListByUser("self").ExecuteAsync();
|
||||
}
|
||||
|
||||
public void CancelAuthorization()
|
||||
{
|
||||
if (_cancellationTokenSource != null)
|
||||
{
|
||||
_cancellationTokenSource.Cancel();
|
||||
}
|
||||
}
|
||||
|
||||
public override void NaturalizeLayout()
|
||||
{
|
||||
if (!DesignMode)
|
||||
{
|
||||
MaximizeWidth(labelDescription);
|
||||
|
||||
LayoutHelper.NaturalizeHeight(labelDescription);
|
||||
LayoutHelper.DistributeVertically(10, false, labelDescription, buttonLogin);
|
||||
}
|
||||
}
|
||||
|
||||
public override ConfigPanelId? PanelId
|
||||
{
|
||||
get { return ConfigPanelId.GoogleBloggerAuth; }
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Clean up any resources being used.
|
||||
/// </summary>
|
||||
protected override void Dispose(bool disposing)
|
||||
{
|
||||
if (disposing)
|
||||
{
|
||||
if (components != null)
|
||||
{
|
||||
components.Dispose();
|
||||
}
|
||||
}
|
||||
base.Dispose(disposing);
|
||||
}
|
||||
|
||||
#region Component Designer generated code
|
||||
/// <summary>
|
||||
/// Required method for Designer support - do not modify
|
||||
/// the contents of this method with the code editor.
|
||||
/// </summary>
|
||||
private void InitializeComponent()
|
||||
{
|
||||
this.buttonLogin = new System.Windows.Forms.Button();
|
||||
this.labelDescription = new System.Windows.Forms.Label();
|
||||
this.panelMain.SuspendLayout();
|
||||
this.SuspendLayout();
|
||||
//
|
||||
// panelMain
|
||||
//
|
||||
this.panelMain.Controls.Add(this.buttonLogin);
|
||||
this.panelMain.Controls.Add(this.labelDescription);
|
||||
//
|
||||
// buttonLogin
|
||||
//
|
||||
this.buttonLogin.AutoSize = true;
|
||||
this.buttonLogin.Location = new System.Drawing.Point(20, 0);
|
||||
this.buttonLogin.FlatStyle = FlatStyle.System;
|
||||
this.buttonLogin.Name = "buttonLogin";
|
||||
this.buttonLogin.Size = new System.Drawing.Size(168, 13);
|
||||
this.buttonLogin.TabIndex = 0;
|
||||
this.buttonLogin.Text = "Sign in";
|
||||
this.buttonLogin.Click += buttonLogin_Click;
|
||||
//
|
||||
// labelDescription
|
||||
//
|
||||
this.labelDescription.FlatStyle = FlatStyle.System;
|
||||
this.labelDescription.Location = new System.Drawing.Point(20, 0);
|
||||
this.labelDescription.Name = "labelDescription";
|
||||
this.labelDescription.Size = new System.Drawing.Size(360, 24);
|
||||
this.labelDescription.TabIndex = 1;
|
||||
this.labelDescription.Text = "To configure Google Blogger please sign in.";
|
||||
//
|
||||
// WeblogConfigurationWizardPanelGoogleBloggerAuthentication
|
||||
//
|
||||
this.Name = "WeblogConfigurationWizardPanelGoogleBloggerAuthentication";
|
||||
this.panelMain.ResumeLayout(false);
|
||||
this.ResumeLayout(false);
|
||||
|
||||
}
|
||||
#endregion
|
||||
|
||||
public override bool ValidatePanel()
|
||||
{
|
||||
if (_userCredentials == null || _userCredentials.Token == null)
|
||||
{
|
||||
ShowValidationError(buttonLogin, MessageId.GoogleBloggerLoginRequired);
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
public bool IsDirty(TemporaryBlogSettings settings)
|
||||
{
|
||||
return false;
|
||||
|
||||
// TODO:OLW
|
||||
// return Credentials.OAuthCredentials != settings.Credentials.OAuthCredentials;
|
||||
}
|
||||
|
||||
public IBlogProviderAccountWizardDescription ProviderAccountWizard
|
||||
{
|
||||
set { }
|
||||
}
|
||||
|
||||
public string AccountId
|
||||
{
|
||||
set { }
|
||||
}
|
||||
|
||||
public string HomepageUrl
|
||||
{
|
||||
get { return string.Empty; }
|
||||
set { }
|
||||
}
|
||||
|
||||
public bool SavePassword
|
||||
{
|
||||
get { return true; }
|
||||
set { }
|
||||
}
|
||||
|
||||
public bool ForceManualConfiguration
|
||||
{
|
||||
get { return false; }
|
||||
set { }
|
||||
}
|
||||
|
||||
public IBlogCredentials Credentials
|
||||
{
|
||||
get
|
||||
{
|
||||
TemporaryBlogCredentials credentials = new TemporaryBlogCredentials();
|
||||
credentials.Username = "user";
|
||||
if (_userCredentials != null)
|
||||
{
|
||||
// TODO:OLW
|
||||
//credentials.GoogleBloggerToken = _userCredentials;
|
||||
credentials.Password = _userCredentials.Token.AccessToken;
|
||||
credentials.SetCustomValue("RefreshToken", _userCredentials.Token.RefreshToken);
|
||||
credentials.SetCustomValue("Scope", _userCredentials.Token.Scope);
|
||||
credentials.SetCustomValue("Issued", _userCredentials.Token.Issued.ToBinary().ToString());
|
||||
}
|
||||
return credentials;
|
||||
}
|
||||
set
|
||||
{
|
||||
// TODO:OLW
|
||||
}
|
||||
}
|
||||
|
||||
public BlogInfo BlogAccount
|
||||
{
|
||||
get { return null; }
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,238 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<root>
|
||||
<!--
|
||||
Microsoft ResX Schema
|
||||
|
||||
Version 1.3
|
||||
|
||||
The primary goals of this format is to allow a simple XML format
|
||||
that is mostly human readable. The generation and parsing of the
|
||||
various data types are done through the TypeConverter classes
|
||||
associated with the data types.
|
||||
|
||||
Example:
|
||||
|
||||
... ado.net/XML headers & schema ...
|
||||
<resheader name="resmimetype">text/microsoft-resx</resheader>
|
||||
<resheader name="version">1.3</resheader>
|
||||
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
|
||||
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
|
||||
<data name="Name1">this is my long string</data>
|
||||
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
|
||||
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||
[base64 mime encoded serialized .NET Framework object]
|
||||
</data>
|
||||
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||
[base64 mime encoded string representing a byte array form of the .NET Framework object]
|
||||
</data>
|
||||
|
||||
There are any number of "resheader" rows that contain simple
|
||||
name/value pairs.
|
||||
|
||||
Each data row contains a name, and value. The row also contains a
|
||||
type or mimetype. Type corresponds to a .NET class that support
|
||||
text/value conversion through the TypeConverter architecture.
|
||||
Classes that don't support this are serialized and stored with the
|
||||
mimetype set.
|
||||
|
||||
The mimetype is used forserialized objects, and tells the
|
||||
ResXResourceReader how to depersist the object. This is currently not
|
||||
extensible. For a given mimetype the value must be set accordingly:
|
||||
|
||||
Note - application/x-microsoft.net.object.binary.base64 is the format
|
||||
that the ResXResourceWriter will generate, however the reader can
|
||||
read any of the formats listed below.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.binary.base64
|
||||
value : The object must be serialized with
|
||||
: System.Serialization.Formatters.Binary.BinaryFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.soap.base64
|
||||
value : The object must be serialized with
|
||||
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
|
||||
: and then encoded with base64 encoding.
|
||||
|
||||
mimetype: application/x-microsoft.net.object.bytearray.base64
|
||||
value : The object must be serialized into a byte array
|
||||
: using a System.ComponentModel.TypeConverter
|
||||
: and then encoded with base64 encoding.
|
||||
-->
|
||||
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||
<xsd:element name="root" msdata:IsDataSet="true">
|
||||
<xsd:complexType>
|
||||
<xsd:choice maxOccurs="unbounded">
|
||||
<xsd:element name="data">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" msdata:Ordinal="1" />
|
||||
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
<xsd:element name="resheader">
|
||||
<xsd:complexType>
|
||||
<xsd:sequence>
|
||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||
</xsd:sequence>
|
||||
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:choice>
|
||||
</xsd:complexType>
|
||||
</xsd:element>
|
||||
</xsd:schema>
|
||||
<resheader name="resmimetype">
|
||||
<value>text/microsoft-resx</value>
|
||||
</resheader>
|
||||
<resheader name="version">
|
||||
<value>1.3</value>
|
||||
</resheader>
|
||||
<resheader name="reader">
|
||||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<resheader name="writer">
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<data name="panelMain.Locked" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||
<value>False</value>
|
||||
</data>
|
||||
<data name="panelMain.SnapToGrid" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||
<value>True</value>
|
||||
</data>
|
||||
<data name="panelMain.DrawGrid" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||
<value>True</value>
|
||||
</data>
|
||||
<data name="panelMain.DefaultModifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||
<value>Private</value>
|
||||
</data>
|
||||
<data name="panelMain.Modifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||
<value>Family</value>
|
||||
</data>
|
||||
<data name="panelMain.GridSize" type="System.Drawing.Size, System.Drawing, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||
<value>8, 8</value>
|
||||
</data>
|
||||
<data name="labelPassword.Locked" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||
<value>False</value>
|
||||
</data>
|
||||
<data name="labelPassword.DefaultModifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||
<value>Private</value>
|
||||
</data>
|
||||
<data name="labelPassword.Modifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||
<value>Private</value>
|
||||
</data>
|
||||
<data name="textBoxPassword.DefaultModifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||
<value>Private</value>
|
||||
</data>
|
||||
<data name="textBoxPassword.Locked" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||
<value>False</value>
|
||||
</data>
|
||||
<data name="textBoxPassword.Modifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||
<value>Private</value>
|
||||
</data>
|
||||
<data name="textBoxUsername.DefaultModifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||
<value>Private</value>
|
||||
</data>
|
||||
<data name="textBoxUsername.Locked" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||
<value>False</value>
|
||||
</data>
|
||||
<data name="textBoxUsername.Modifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||
<value>Private</value>
|
||||
</data>
|
||||
<data name="labelUsername.Locked" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||
<value>False</value>
|
||||
</data>
|
||||
<data name="labelUsername.DefaultModifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||
<value>Private</value>
|
||||
</data>
|
||||
<data name="labelUsername.Modifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||
<value>Private</value>
|
||||
</data>
|
||||
<data name="labelTitle.Locked" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||
<value>False</value>
|
||||
</data>
|
||||
<data name="labelTitle.DefaultModifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||
<value>Private</value>
|
||||
</data>
|
||||
<data name="labelTitle.Modifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||
<value>Private</value>
|
||||
</data>
|
||||
<data name="labelText.Locked" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||
<value>False</value>
|
||||
</data>
|
||||
<data name="labelText.DefaultModifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||
<value>Private</value>
|
||||
</data>
|
||||
<data name="labelText.Modifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||
<value>Private</value>
|
||||
</data>
|
||||
<data name="cbUseSystemLogin.Locked" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||
<value>False</value>
|
||||
</data>
|
||||
<data name="cbUseSystemLogin.DefaultModifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||
<value>Private</value>
|
||||
</data>
|
||||
<data name="cbUseSystemLogin.Modifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||
<value>Private</value>
|
||||
</data>
|
||||
<data name="panelCustomLogin.Locked" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||
<value>False</value>
|
||||
</data>
|
||||
<data name="panelCustomLogin.SnapToGrid" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||
<value>True</value>
|
||||
</data>
|
||||
<data name="panelCustomLogin.DefaultModifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||
<value>Private</value>
|
||||
</data>
|
||||
<data name="panelCustomLogin.GridSize" type="System.Drawing.Size, System.Drawing, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||
<value>8, 8</value>
|
||||
</data>
|
||||
<data name="panelCustomLogin.DrawGrid" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||
<value>True</value>
|
||||
</data>
|
||||
<data name="panelCustomLogin.Modifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||
<value>Private</value>
|
||||
</data>
|
||||
<data name="checkBoxSavePassword.Locked" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||
<value>False</value>
|
||||
</data>
|
||||
<data name="checkBoxSavePassword.DefaultModifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||
<value>Private</value>
|
||||
</data>
|
||||
<data name="checkBoxSavePassword.Modifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||
<value>Private</value>
|
||||
</data>
|
||||
<data name="$this.TrayLargeIcon" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||
<value>False</value>
|
||||
</data>
|
||||
<data name="$this.Locked" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||
<value>False</value>
|
||||
</data>
|
||||
<data name="$this.SnapToGrid" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||
<value>True</value>
|
||||
</data>
|
||||
<data name="$this.DrawGrid" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||
<value>True</value>
|
||||
</data>
|
||||
<data name="$this.TrayHeight" type="System.Int32, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||
<value>80</value>
|
||||
</data>
|
||||
<data name="$this.Language" type="System.Globalization.CultureInfo, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||
<value>(Default)</value>
|
||||
</data>
|
||||
<data name="$this.Localizable" type="System.Boolean, mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||
<value>False</value>
|
||||
</data>
|
||||
<data name="$this.DefaultModifiers" type="System.CodeDom.MemberAttributes, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||
<value>Private</value>
|
||||
</data>
|
||||
<data name="$this.Name">
|
||||
<value>WeblogConfigurationWizardPanelSharePointAuthentication</value>
|
||||
</data>
|
||||
<data name="$this.GridSize" type="System.Drawing.Size, System.Drawing, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||
<value>8, 8</value>
|
||||
</data>
|
||||
</root>
|
|
@ -7,6 +7,8 @@
|
|||
<RootNamespace>OpenLiveWriter.PostEditor</RootNamespace>
|
||||
<ProjectGuid>{D6C9A393-E0B8-4548-B84B-F8B6FE2A5645}</ProjectGuid>
|
||||
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
|
||||
<NuGetPackageImportStamp>
|
||||
</NuGetPackageImportStamp>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<Reference Include="Accessibility" />
|
||||
|
@ -22,10 +24,50 @@
|
|||
<HintPath>..\packages\DeltaCompressionDotNet.1.0.0\lib\net45\DeltaCompressionDotNet.PatchApi.dll</HintPath>
|
||||
<Private>True</Private>
|
||||
</Reference>
|
||||
<Reference Include="Google.Apis, Version=1.9.2.27817, Culture=neutral, PublicKeyToken=4b01fa6e34db77ab, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\Google.Apis.1.9.2\lib\net40\Google.Apis.dll</HintPath>
|
||||
<Private>True</Private>
|
||||
</Reference>
|
||||
<Reference Include="Google.Apis.Auth, Version=1.9.2.27817, Culture=neutral, PublicKeyToken=4b01fa6e34db77ab, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\Google.Apis.Auth.1.9.2\lib\net40\Google.Apis.Auth.dll</HintPath>
|
||||
<Private>True</Private>
|
||||
</Reference>
|
||||
<Reference Include="Google.Apis.Auth.PlatformServices, Version=1.9.2.27820, Culture=neutral, PublicKeyToken=4b01fa6e34db77ab, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\Google.Apis.Auth.1.9.2\lib\net40\Google.Apis.Auth.PlatformServices.dll</HintPath>
|
||||
<Private>True</Private>
|
||||
</Reference>
|
||||
<Reference Include="Google.Apis.Blogger.v3, Version=1.9.2.48, Culture=neutral, PublicKeyToken=4b01fa6e34db77ab, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\Google.Apis.Blogger.v3.1.9.2.480\lib\portable-net40+sl50+win+wpa81+wp80\Google.Apis.Blogger.v3.dll</HintPath>
|
||||
<Private>True</Private>
|
||||
</Reference>
|
||||
<Reference Include="Google.Apis.Core, Version=1.9.2.27816, Culture=neutral, PublicKeyToken=4b01fa6e34db77ab, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\Google.Apis.Core.1.9.2\lib\portable-net40+sl50+win+wpa81+wp80\Google.Apis.Core.dll</HintPath>
|
||||
<Private>True</Private>
|
||||
</Reference>
|
||||
<Reference Include="Google.Apis.PlatformServices, Version=1.9.2.27818, Culture=neutral, PublicKeyToken=4b01fa6e34db77ab, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\Google.Apis.1.9.2\lib\net40\Google.Apis.PlatformServices.dll</HintPath>
|
||||
<Private>True</Private>
|
||||
</Reference>
|
||||
<Reference Include="ICSharpCode.SharpZipLib, Version=0.86.0.518, Culture=neutral, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\squirrel.windows.1.2.1\lib\Net45\ICSharpCode.SharpZipLib.dll</HintPath>
|
||||
<Private>True</Private>
|
||||
</Reference>
|
||||
<Reference Include="log4net, Version=1.2.13.0, Culture=neutral, PublicKeyToken=669e0ddf0bb1aa2a, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\log4net.2.0.3\lib\net40-full\log4net.dll</HintPath>
|
||||
<Private>True</Private>
|
||||
</Reference>
|
||||
<Reference Include="Microsoft.Threading.Tasks, Version=1.0.12.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\Microsoft.Bcl.Async.1.0.168\lib\net40\Microsoft.Threading.Tasks.dll</HintPath>
|
||||
<Private>True</Private>
|
||||
</Reference>
|
||||
<Reference Include="Microsoft.Threading.Tasks.Extensions, Version=1.0.12.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\Microsoft.Bcl.Async.1.0.168\lib\net40\Microsoft.Threading.Tasks.Extensions.dll</HintPath>
|
||||
<Private>True</Private>
|
||||
</Reference>
|
||||
<Reference Include="Microsoft.Threading.Tasks.Extensions.Desktop, Version=1.0.168.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\Microsoft.Bcl.Async.1.0.168\lib\net40\Microsoft.Threading.Tasks.Extensions.Desktop.dll</HintPath>
|
||||
<Private>True</Private>
|
||||
</Reference>
|
||||
<Reference Include="Mono.Cecil, Version=0.9.6.0, Culture=neutral, PublicKeyToken=0738eb9f132ed756, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\Mono.Cecil.0.9.6.1\lib\net45\Mono.Cecil.dll</HintPath>
|
||||
<Private>True</Private>
|
||||
|
@ -42,6 +84,10 @@
|
|||
<HintPath>..\packages\Mono.Cecil.0.9.6.1\lib\net45\Mono.Cecil.Rocks.dll</HintPath>
|
||||
<Private>True</Private>
|
||||
</Reference>
|
||||
<Reference Include="Newtonsoft.Json, Version=7.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\Newtonsoft.Json.7.0.1\lib\net45\Newtonsoft.Json.dll</HintPath>
|
||||
<Private>True</Private>
|
||||
</Reference>
|
||||
<Reference Include="NuGet.Squirrel, Version=3.0.0.0, Culture=neutral, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\squirrel.windows.1.2.1\lib\Net45\NuGet.Squirrel.dll</HintPath>
|
||||
<Private>True</Private>
|
||||
|
@ -58,6 +104,17 @@
|
|||
<Reference Include="System.Data" />
|
||||
<Reference Include="System.Design" />
|
||||
<Reference Include="System.Drawing" />
|
||||
<Reference Include="System.Net" />
|
||||
<Reference Include="System.Net.Http" />
|
||||
<Reference Include="System.Net.Http.Extensions, Version=2.2.29.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\Microsoft.Net.Http.2.2.29\lib\net45\System.Net.Http.Extensions.dll</HintPath>
|
||||
<Private>True</Private>
|
||||
</Reference>
|
||||
<Reference Include="System.Net.Http.Primitives, Version=4.2.29.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\Microsoft.Net.Http.2.2.29\lib\net45\System.Net.Http.Primitives.dll</HintPath>
|
||||
<Private>True</Private>
|
||||
</Reference>
|
||||
<Reference Include="System.Net.Http.WebRequest" />
|
||||
<Reference Include="System.Web" />
|
||||
<Reference Include="System.Web.Services" />
|
||||
<Reference Include="System.Windows.Forms" />
|
||||
|
@ -141,6 +198,10 @@
|
|||
<Project>{699FB638-CE02-48D7-8078-30A7939C5BCB}</Project>
|
||||
<Package>{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</Package>
|
||||
</ProjectReference>
|
||||
<Reference Include="Zlib.Portable, Version=1.11.0.0, Culture=neutral, PublicKeyToken=431cba815f6a8b5b, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\Zlib.Portable.Signed.1.11.0\lib\portable-net4+sl5+wp8+win8+wpa81+MonoTouch+MonoAndroid\Zlib.Portable.dll</HintPath>
|
||||
<Private>True</Private>
|
||||
</Reference>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Compile Include="..\GlobalAssemblyInfo.cs" />
|
||||
|
@ -270,6 +331,9 @@
|
|||
<Compile Include="Configuration\Wizard\WeblogConfigurationWizardPanelSelectProvider.cs">
|
||||
<SubType>UserControl</SubType>
|
||||
</Compile>
|
||||
<Compile Include="Configuration\Wizard\WeblogConfigurationWizardPanelGoogleBloggerAuthentication.cs">
|
||||
<SubType>UserControl</SubType>
|
||||
</Compile>
|
||||
<Compile Include="Configuration\Wizard\WeblogConfigurationWizardPanelSharePointAuthentication.cs">
|
||||
<SubType>UserControl</SubType>
|
||||
</Compile>
|
||||
|
@ -989,6 +1053,10 @@
|
|||
<DependentUpon>WeblogConfigurationWizardPanelSelectProvider.cs</DependentUpon>
|
||||
<SubType>Designer</SubType>
|
||||
</EmbeddedResource>
|
||||
<EmbeddedResource Include="Configuration\Wizard\WeblogConfigurationWizardPanelGoogleBloggerAuthentication.resx">
|
||||
<DependentUpon>WeblogConfigurationWizardPanelGoogleBloggerAuthentication.cs</DependentUpon>
|
||||
<SubType>Designer</SubType>
|
||||
</EmbeddedResource>
|
||||
<EmbeddedResource Include="Configuration\Wizard\WeblogConfigurationWizardPanelSharePointAuthentication.resx">
|
||||
<DependentUpon>WeblogConfigurationWizardPanelSharePointAuthentication.cs</DependentUpon>
|
||||
<SubType>Designer</SubType>
|
||||
|
@ -1612,4 +1680,11 @@
|
|||
<None Include="app.config" />
|
||||
<None Include="packages.config" />
|
||||
</ItemGroup>
|
||||
<Import Project="..\packages\Microsoft.Bcl.Build.1.0.21\build\Microsoft.Bcl.Build.targets" Condition="Exists('..\packages\Microsoft.Bcl.Build.1.0.21\build\Microsoft.Bcl.Build.targets')" />
|
||||
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
|
||||
<PropertyGroup>
|
||||
<ErrorText>This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
|
||||
</PropertyGroup>
|
||||
<Error Condition="!Exists('..\packages\Microsoft.Bcl.Build.1.0.21\build\Microsoft.Bcl.Build.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Microsoft.Bcl.Build.1.0.21\build\Microsoft.Bcl.Build.targets'))" />
|
||||
</Target>
|
||||
</Project>
|
|
@ -1,7 +1,18 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<packages>
|
||||
<package id="DeltaCompressionDotNet" version="1.0.0" targetFramework="net452" />
|
||||
<package id="Google.Apis" version="1.9.2" targetFramework="net452" />
|
||||
<package id="Google.Apis.Auth" version="1.9.2" targetFramework="net452" />
|
||||
<package id="Google.Apis.Blogger.v3" version="1.9.2.480" targetFramework="net452" />
|
||||
<package id="Google.Apis.Core" version="1.9.2" targetFramework="net452" />
|
||||
<package id="log4net" version="2.0.3" targetFramework="net452" />
|
||||
<package id="Microsoft.Bcl" version="1.1.10" targetFramework="net452" />
|
||||
<package id="Microsoft.Bcl.Async" version="1.0.168" targetFramework="net452" />
|
||||
<package id="Microsoft.Bcl.Build" version="1.0.21" targetFramework="net452" />
|
||||
<package id="Microsoft.Net.Http" version="2.2.29" targetFramework="net452" />
|
||||
<package id="Mono.Cecil" version="0.9.6.1" targetFramework="net452" />
|
||||
<package id="Newtonsoft.Json" version="7.0.1" targetFramework="net452" />
|
||||
<package id="Splat" version="1.6.2" targetFramework="net452" />
|
||||
<package id="squirrel.windows" version="1.2.1" targetFramework="net452" />
|
||||
<package id="Zlib.Portable.Signed" version="1.11.0" targetFramework="net452" />
|
||||
</packages>
|
Loading…
Reference in New Issue