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:
Will Duff 2015-12-12 02:38:43 -08:00
parent bd34aecf68
commit ad482780be
17 changed files with 701 additions and 9 deletions

View File

@ -168,6 +168,13 @@ namespace OpenLiveWriter.BlogClient
} }
private const string IS_SHAREPOINT_BLOG = "IsSharePointBlog"; 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> /// <summary>
/// Id of the weblog on the host service /// Id of the weblog on the host service
/// </summary> /// </summary>

View File

@ -20,12 +20,16 @@ using OpenLiveWriter.BlogClient.Providers;
using OpenLiveWriter.HtmlParser.Parser; using OpenLiveWriter.HtmlParser.Parser;
using OpenLiveWriter.HtmlParser.Parser.FormAgent; using OpenLiveWriter.HtmlParser.Parser.FormAgent;
using OpenLiveWriter.Localization; using OpenLiveWriter.Localization;
using Google.Apis.Blogger.v3;
namespace OpenLiveWriter.BlogClient.Clients namespace OpenLiveWriter.BlogClient.Clients
{ {
[BlogClient("BloggerAtom", "Atom")] [BlogClient("BloggerAtom", "Atom")]
public class BloggerAtomClient : AtomClient 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) public BloggerAtomClient(Uri postApiUrl, IBlogCredentialsAccessor credentials)
: base(AtomProtocolVersion.V10DraftBlogger, postApiUrl, credentials) : base(AtomProtocolVersion.V10DraftBlogger, postApiUrl, credentials)
{ {

View File

@ -457,6 +457,11 @@
Identifier="BloggerError" Identifier="BloggerError"
Text="Blogger returned the following error:&#xD;&#xA;&#xD;&#xA;{0}" Text="Blogger returned the following error:&#xD;&#xA;&#xD;&#xA;{0}"
comment:Text="{0} - an error message" /> comment:Text="{0} - an error message" />
<Message
Identifier="GoogleBloggerLoginRequired"
Type="Warning"
Title="Open Live Writer"
Text="Sign in to Google Blogger to continue." />
<Message <Message
Identifier="UnexpectedErrorLogin" Identifier="UnexpectedErrorLogin"
Text="An unexpected error has occurred while attempting to log in:&#xD;&#xA;&#xD;&#xA;{0}" Text="An unexpected error has occurred while attempting to log in:&#xD;&#xA;&#xD;&#xA;{0}"
@ -524,7 +529,7 @@
Identifier="VideoLoginRequired" Identifier="VideoLoginRequired"
Type="Warning" Type="Warning"
Title="Open Live Writer" Title="Open Live Writer"
Text="Sign in and select a video to continue." /> Text="Sign in and select a video to continue." />
<Message <Message
Identifier="WordpressHomepageWrong" Identifier="WordpressHomepageWrong"
Type="Warning" Type="Warning"

View File

@ -34,6 +34,7 @@ namespace OpenLiveWriter.Localization
FtpServerUnavailable, FtpServerUnavailable,
FtpSettingsRequired, FtpSettingsRequired,
GoogleAuthTokenNotFound, GoogleAuthTokenNotFound,
GoogleBloggerLoginRequired,
GuestNotSupported, GuestNotSupported,
HomepageUrlInvalid, HomepageUrlInvalid,
HomepageUrlRequired, HomepageUrlRequired,

View File

@ -2796,6 +2796,12 @@ Check the file name and try again.</value>
<data name="DisplayMessage.GoogleAuthTokenNotFound.Text" xml:space="preserve"> <data name="DisplayMessage.GoogleAuthTokenNotFound.Text" xml:space="preserve">
<value>The server did not respond with the expected authorization token.</value> <value>The server did not respond with the expected authorization token.</value>
</data> </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"> <data name="DisplayMessage.GuestNotSupported.Text" xml:space="preserve">
<value>Using Open Live Writer from the guest account is not supported.</value> <value>Using Open Live Writer from the guest account is not supported.</value>
</data> </data>

View File

@ -360,6 +360,9 @@
<data name="DisplayMessage.InvalidWebImage.Type" xml:space="preserve"> <data name="DisplayMessage.InvalidWebImage.Type" xml:space="preserve">
<value>Asterisk</value> <value>Asterisk</value>
</data> </data>
<data name="DisplayMessage.GoogleBloggerLoginRequired.Type" xml:space="preserve">
<value>Warning</value>
</data>
<data name="DisplayMessage.LocalDeleteConfirmation.Buttons" xml:space="preserve"> <data name="DisplayMessage.LocalDeleteConfirmation.Buttons" xml:space="preserve">
<value>YesNo</value> <value>YesNo</value>
</data> </data>

View File

@ -395,7 +395,7 @@ namespace OpenLiveWriter.Localization
/// </summary> /// </summary>
BlogPluginsDescription, BlogPluginsDescription,
/// <summary> /// <summary>
/// Blogger, TypePad, and more /// TypePad and more
/// </summary> /// </summary>
BlogServiceNames, BlogServiceNames,
/// <summary> /// <summary>
@ -1103,6 +1103,14 @@ namespace OpenLiveWriter.Localization
/// </summary> /// </summary>
CWSharePointUseSystemLogin, CWSharePointUseSystemLogin,
/// <summary> /// <summary>
/// Provide Google Blogger Login
/// </summary>
CWGoogleBloggerTitle,
/// <summary>
/// To configure Google Blogger please sign in.
/// </summary>
CWGoogleBloggerDescription,
/// <summary>
/// &Microsoft Account: /// &Microsoft Account:
/// </summary> /// </summary>
CWSpacesUsername, CWSpacesUsername,
@ -5203,6 +5211,10 @@ namespace OpenLiveWriter.Localization
/// </summary> /// </summary>
WizardBlogTypeConfigureTo, WizardBlogTypeConfigureTo,
/// <summary> /// <summary>
/// &Google Blogger
/// </summary>
WizardBlogTypeGoogleBlogger,
/// <summary>
/// &Other services /// &Other services
/// </summary> /// </summary>
WizardBlogTypeOther, WizardBlogTypeOther,

View File

@ -59,6 +59,7 @@ WizardBlogTypeWelcome,"Many popular blog services work with {0}.","{0} - Long pr
WizardBlogTypeWhatBlogType,What blog service do you use?, 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""" 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, WizardBlogTypeSharePoint,&SharePoint,
WizardBlogTypeGoogleBlogger,&Google Blogger,
WizardBlogTypeOther,&Other services, WizardBlogTypeOther,&Other services,
Options,Options, Options,Options,
AllowAutoUpdate,"Automatically &update account information (categories, links, capabilities, and provider extensions)", 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, CWSharePointTitle2,Provide SharePoint Blog Login,
CWSharePointText2,Enter the login required to publish to your SharePoint blog., CWSharePointText2,Enter the login required to publish to your SharePoint blog.,
CWSharePointUseSystemLogin,Use my &Windows user name and password, 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. CWTitle,Add Blog Wizard,Caption of the Add Blog Wizard window.
CWProgressHeader,Setting up your blog account, CWProgressHeader,Setting up your blog account,
ProgressDownloadingEditingTemplate,Downloading editing template..., ProgressDownloadingEditingTemplate,Downloading editing template...,
@ -1329,7 +1332,7 @@ PostPageFilter,Filter {0}, {0} - Posts or Pages
LiveIDPrivacy,Privacy policy, LiveIDPrivacy,Privacy policy,
ForgotMyPassword,Forgot my password, 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, 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, FindCategory,Find category,
Alignment,Alignment,Tooltip for image alignment dropdown, Alignment,Alignment,Tooltip for image alignment dropdown,
CropPane,Image crop pane, CropPane,Image crop pane,

Can't render this file because it has a wrong number of fields in line 52.

View File

@ -460,7 +460,7 @@
<comment>From the Weblog | Edit Weblog Settings | Plugins preferences panel</comment> <comment>From the Weblog | Edit Weblog Settings | Plugins preferences panel</comment>
</data> </data>
<data name="BlogServiceNames" xml:space="preserve"> <data name="BlogServiceNames" xml:space="preserve">
<value>Blogger, TypePad, and more</value> <value>TypePad and more</value>
</data> </data>
<data name="BrightnessAdjust" xml:space="preserve"> <data name="BrightnessAdjust" xml:space="preserve">
<value>Contrast</value> <value>Contrast</value>
@ -1066,6 +1066,12 @@
<data name="CWSharePointUseSystemLogin" xml:space="preserve"> <data name="CWSharePointUseSystemLogin" xml:space="preserve">
<value>Use my &amp;Windows user name and password</value> <value>Use my &amp;Windows user name and password</value>
</data> </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"> <data name="CWSpacesUsername" xml:space="preserve">
<value>&amp;Microsoft Account ID:</value> <value>&amp;Microsoft Account ID:</value>
</data> </data>
@ -4497,6 +4503,9 @@ This might take a while.</value>
<value>Configure {0} to publish to:</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> <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>
<data name="WizardBlogTypeGoogleBlogger" xml:space="preserve">
<value>&amp;Google Blogger</value>
</data>
<data name="WizardBlogTypeOther" xml:space="preserve"> <data name="WizardBlogTypeOther" xml:space="preserve">
<value>&amp;Other services</value> <value>&amp;Other services</value>
</data> </data>

View File

@ -35,6 +35,7 @@ namespace OpenLiveWriter.PostEditor.Configuration
tempSettings.IsNewWeblog = false; tempSettings.IsNewWeblog = false;
tempSettings.IsSpacesBlog = blogSettings.IsSpacesBlog; tempSettings.IsSpacesBlog = blogSettings.IsSpacesBlog;
tempSettings.IsSharePointBlog = blogSettings.IsSharePointBlog; tempSettings.IsSharePointBlog = blogSettings.IsSharePointBlog;
tempSettings.IsGoogleBloggerBlog = blogSettings.IsGoogleBloggerBlog;
tempSettings.HostBlogId = blogSettings.HostBlogId; tempSettings.HostBlogId = blogSettings.HostBlogId;
tempSettings.BlogName = blogSettings.BlogName; tempSettings.BlogName = blogSettings.BlogName;
tempSettings.HomepageUrl = blogSettings.HomepageUrl; tempSettings.HomepageUrl = blogSettings.HomepageUrl;
@ -83,6 +84,7 @@ namespace OpenLiveWriter.PostEditor.Configuration
settings.HostBlogId = this.HostBlogId; settings.HostBlogId = this.HostBlogId;
settings.IsSpacesBlog = this.IsSpacesBlog; settings.IsSpacesBlog = this.IsSpacesBlog;
settings.IsSharePointBlog = this.IsSharePointBlog; settings.IsSharePointBlog = this.IsSharePointBlog;
settings.IsGoogleBloggerBlog = this.IsGoogleBloggerBlog;
settings.BlogName = this.BlogName; settings.BlogName = this.BlogName;
settings.HomepageUrl = this.HomepageUrl; settings.HomepageUrl = this.HomepageUrl;
settings.ForceManualConfig = this.ForceManualConfig; settings.ForceManualConfig = this.ForceManualConfig;
@ -254,6 +256,18 @@ namespace OpenLiveWriter.PostEditor.Configuration
} }
} }
public bool IsGoogleBloggerBlog
{
get
{
return _isGoogleBloggerBlog;
}
set
{
_isGoogleBloggerBlog = value;
}
}
public string HostBlogId public string HostBlogId
{ {
get get
@ -605,6 +619,7 @@ namespace OpenLiveWriter.PostEditor.Configuration
private bool? _savePassword; private bool? _savePassword;
private bool _isSpacesBlog = false; private bool _isSpacesBlog = false;
private bool _isSharePointBlog = false; private bool _isSharePointBlog = false;
private bool _isGoogleBloggerBlog = false;
private string _hostBlogId = String.Empty; private string _hostBlogId = String.Empty;
private string _blogName = String.Empty; private string _blogName = String.Empty;
private string _homePageUrl = String.Empty; private string _homePageUrl = String.Empty;
@ -665,6 +680,7 @@ namespace OpenLiveWriter.PostEditor.Configuration
_savePassword = sourceSettings._savePassword; _savePassword = sourceSettings._savePassword;
_isSpacesBlog = sourceSettings._isSpacesBlog; _isSpacesBlog = sourceSettings._isSpacesBlog;
_isSharePointBlog = sourceSettings._isSharePointBlog; _isSharePointBlog = sourceSettings._isSharePointBlog;
_isGoogleBloggerBlog = sourceSettings._isGoogleBloggerBlog;
_hostBlogId = sourceSettings._hostBlogId; _hostBlogId = sourceSettings._hostBlogId;
_blogName = sourceSettings._blogName; _blogName = sourceSettings._blogName;
_homePageUrl = sourceSettings._homePageUrl; _homePageUrl = sourceSettings._homePageUrl;

View File

@ -227,6 +227,18 @@ namespace OpenLiveWriter.PostEditor.Configuration.Wizard
_authenticationRequired = showAuthenticationStep; _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() private void AddConfirmationStep()
{ {
addWizardStep( addWizardStep(
@ -324,6 +336,7 @@ namespace OpenLiveWriter.PostEditor.Configuration.Wizard
// set the user's choice // set the user's choice
_temporarySettings.IsSharePointBlog = panelBlogType.IsSharePointBlog; _temporarySettings.IsSharePointBlog = panelBlogType.IsSharePointBlog;
_temporarySettings.IsGoogleBloggerBlog = panelBlogType.IsGoogleBloggerBlog;
// did this bootstrap a custom account wizard? // did this bootstrap a custom account wizard?
_providerAccountWizard = panelBlogType.ProviderAccountWizard; _providerAccountWizard = panelBlogType.ProviderAccountWizard;
@ -333,6 +346,10 @@ namespace OpenLiveWriter.PostEditor.Configuration.Wizard
{ {
AddSharePointBasicInfoSubStep(false); AddSharePointBasicInfoSubStep(false);
} }
else if (_temporarySettings.IsGoogleBloggerBlog)
{
AddGoogleBloggerOAuthSubStep();
}
else else
{ {
AddBasicInfoSubStep(); AddBasicInfoSubStep();
@ -514,6 +531,17 @@ namespace OpenLiveWriter.PostEditor.Configuration.Wizard
_authenticationStepAdded = false; _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) private void OnWeblogAndSettingsAutoDetectionCompleted(Object stepControl)
{ {
// if we weren't able to identify a specific weblog // if we weren't able to identify a specific weblog

View File

@ -30,6 +30,7 @@ namespace OpenLiveWriter.PostEditor.Configuration.Wizard
OtherBasicInfo = 33, OtherBasicInfo = 33,
SelectProvider = 40, SelectProvider = 40,
SharePointAuth = 41, SharePointAuth = 41,
GoogleBloggerAuth = 42,
SelectBlog = 50, SelectBlog = 50,
SelectImageEndPoint = 60, SelectImageEndPoint = 60,
Confirm = 80, Confirm = 80,

View File

@ -25,6 +25,7 @@ namespace OpenLiveWriter.PostEditor.Configuration.Wizard
private System.Windows.Forms.Label labelWelcomeText; private System.Windows.Forms.Label labelWelcomeText;
private System.Windows.Forms.Panel panelRadioButtons; private System.Windows.Forms.Panel panelRadioButtons;
private System.Windows.Forms.RadioButton radioButtonSharePoint; private System.Windows.Forms.RadioButton radioButtonSharePoint;
private System.Windows.Forms.RadioButton radioButtonBlogger;
private System.Windows.Forms.RadioButton radioButtonOther; private System.Windows.Forms.RadioButton radioButtonOther;
private System.Windows.Forms.Label labelOtherDesc; private System.Windows.Forms.Label labelOtherDesc;
private System.Windows.Forms.RadioButton radioButtonWordpress; private System.Windows.Forms.RadioButton radioButtonWordpress;
@ -47,6 +48,7 @@ namespace OpenLiveWriter.PostEditor.Configuration.Wizard
labelHeader.Text = Res.Get(StringId.WizardBlogTypeWhatBlogType); labelHeader.Text = Res.Get(StringId.WizardBlogTypeWhatBlogType);
labelWelcomeText.Text = Res.Get(StringId.WizardBlogTypeWelcome); labelWelcomeText.Text = Res.Get(StringId.WizardBlogTypeWelcome);
radioButtonSharePoint.Text = Res.Get(StringId.WizardBlogTypeSharePoint); radioButtonSharePoint.Text = Res.Get(StringId.WizardBlogTypeSharePoint);
radioButtonBlogger.Text = Res.Get(StringId.WizardBlogTypeGoogleBlogger);
radioButtonOther.Text = Res.Get(StringId.WizardBlogTypeOther); radioButtonOther.Text = Res.Get(StringId.WizardBlogTypeOther);
radioButtonWordpress.Text = Res.Get(StringId.CWWelcomeWP); 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(serviceName));
} }
comboBoxSelectWeblogType.Items.Add(new WeblogType(radioButtonBlogger));
// add "another weblog type" entry // add "another weblog type" entry
comboBoxSelectWeblogType.Items.Add(new WeblogType(radioButtonOther)); comboBoxSelectWeblogType.Items.Add(new WeblogType(radioButtonOther));
@ -99,8 +103,8 @@ namespace OpenLiveWriter.PostEditor.Configuration.Wizard
comboBoxSelectWeblogType.SelectedIndexChanged += new EventHandler(UserChangedSelectionHandler); comboBoxSelectWeblogType.SelectedIndexChanged += new EventHandler(UserChangedSelectionHandler);
radioButtonWordpress.CheckedChanged += new EventHandler(UserChangedSelectionHandler); radioButtonWordpress.CheckedChanged += new EventHandler(UserChangedSelectionHandler);
radioButtonSharePoint.CheckedChanged += new EventHandler(UserChangedSelectionHandler); radioButtonSharePoint.CheckedChanged += new EventHandler(UserChangedSelectionHandler);
radioButtonBlogger.CheckedChanged += new EventHandler(UserChangedSelectionHandler);
radioButtonOther.CheckedChanged += new EventHandler(UserChangedSelectionHandler); radioButtonOther.CheckedChanged += new EventHandler(UserChangedSelectionHandler);
} }
public override void NaturalizeLayout() public override void NaturalizeLayout()
@ -117,12 +121,13 @@ namespace OpenLiveWriter.PostEditor.Configuration.Wizard
MaximizeWidth(radioButtonWordpress); MaximizeWidth(radioButtonWordpress);
MaximizeWidth(radioButtonSharePoint); MaximizeWidth(radioButtonSharePoint);
MaximizeWidth(radioButtonBlogger);
MaximizeWidth(radioButtonOther); MaximizeWidth(radioButtonOther);
MaximizeWidth(labelOtherDesc); MaximizeWidth(labelOtherDesc);
using (new AutoGrow(panelRadioButtons, AnchorStyles.Bottom, true)) using (new AutoGrow(panelRadioButtons, AnchorStyles.Bottom, true))
{ {
LayoutHelper.NaturalizeHeightAndDistribute(3, radioButtonWordpress, radioButtonSharePoint, radioButtonOther); LayoutHelper.NaturalizeHeightAndDistribute(3, radioButtonWordpress, radioButtonSharePoint, radioButtonBlogger, radioButtonOther);
labelOtherDesc.Top = radioButtonOther.Bottom; 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 public IBlogProviderAccountWizardDescription ProviderAccountWizard
{ {
get get
@ -293,6 +313,7 @@ namespace OpenLiveWriter.PostEditor.Configuration.Wizard
this.panelRadioButtons = new System.Windows.Forms.Panel(); this.panelRadioButtons = new System.Windows.Forms.Panel();
this.radioButtonWordpress = new System.Windows.Forms.RadioButton(); this.radioButtonWordpress = new System.Windows.Forms.RadioButton();
this.radioButtonSharePoint = 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.radioButtonOther = new System.Windows.Forms.RadioButton();
this.labelOtherDesc = new System.Windows.Forms.Label(); this.labelOtherDesc = new System.Windows.Forms.Label();
this.panelComboBox = new System.Windows.Forms.Panel(); this.panelComboBox = new System.Windows.Forms.Panel();
@ -326,6 +347,7 @@ namespace OpenLiveWriter.PostEditor.Configuration.Wizard
| System.Windows.Forms.AnchorStyles.Right))); | System.Windows.Forms.AnchorStyles.Right)));
this.panelRadioButtons.Controls.Add(this.radioButtonWordpress); this.panelRadioButtons.Controls.Add(this.radioButtonWordpress);
this.panelRadioButtons.Controls.Add(this.radioButtonSharePoint); this.panelRadioButtons.Controls.Add(this.radioButtonSharePoint);
this.panelRadioButtons.Controls.Add(this.radioButtonBlogger);
this.panelRadioButtons.Controls.Add(this.radioButtonOther); this.panelRadioButtons.Controls.Add(this.radioButtonOther);
this.panelRadioButtons.Controls.Add(this.labelOtherDesc); this.panelRadioButtons.Controls.Add(this.labelOtherDesc);
this.panelRadioButtons.Location = new System.Drawing.Point(20, 88); 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.Size = new System.Drawing.Size(104, 24);
this.radioButtonSharePoint.TabIndex = 2; this.radioButtonSharePoint.TabIndex = 2;
this.radioButtonSharePoint.Text = "Share&Point weblog"; 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 // radioButtonOther
// //
this.radioButtonOther.Location = new System.Drawing.Point(0, 48); this.radioButtonOther.Location = new System.Drawing.Point(0, 48);
@ -366,8 +396,8 @@ namespace OpenLiveWriter.PostEditor.Configuration.Wizard
this.labelOtherDesc.Name = "labelOtherDesc"; this.labelOtherDesc.Name = "labelOtherDesc";
this.labelOtherDesc.Size = new System.Drawing.Size(332, 40); this.labelOtherDesc.Size = new System.Drawing.Size(332, 40);
this.labelOtherDesc.TabIndex = 5; this.labelOtherDesc.TabIndex = 5;
this.labelOtherDesc.Text = "Blogger, WordPress, TypePad, all others"; this.labelOtherDesc.Text = "TypePad and others";
// //
// panelComboBox // panelComboBox
// //
this.panelComboBox.Controls.Add(this.comboBoxSelectWeblogType); this.panelComboBox.Controls.Add(this.comboBoxSelectWeblogType);

View File

@ -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; }
}
}
}

View File

@ -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>

View File

@ -7,6 +7,8 @@
<RootNamespace>OpenLiveWriter.PostEditor</RootNamespace> <RootNamespace>OpenLiveWriter.PostEditor</RootNamespace>
<ProjectGuid>{D6C9A393-E0B8-4548-B84B-F8B6FE2A5645}</ProjectGuid> <ProjectGuid>{D6C9A393-E0B8-4548-B84B-F8B6FE2A5645}</ProjectGuid>
<AllowUnsafeBlocks>true</AllowUnsafeBlocks> <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
<NuGetPackageImportStamp>
</NuGetPackageImportStamp>
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
<Reference Include="Accessibility" /> <Reference Include="Accessibility" />
@ -22,10 +24,50 @@
<HintPath>..\packages\DeltaCompressionDotNet.1.0.0\lib\net45\DeltaCompressionDotNet.PatchApi.dll</HintPath> <HintPath>..\packages\DeltaCompressionDotNet.1.0.0\lib\net45\DeltaCompressionDotNet.PatchApi.dll</HintPath>
<Private>True</Private> <Private>True</Private>
</Reference> </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"> <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> <HintPath>..\packages\squirrel.windows.1.2.1\lib\Net45\ICSharpCode.SharpZipLib.dll</HintPath>
<Private>True</Private> <Private>True</Private>
</Reference> </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"> <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> <HintPath>..\packages\Mono.Cecil.0.9.6.1\lib\net45\Mono.Cecil.dll</HintPath>
<Private>True</Private> <Private>True</Private>
@ -42,6 +84,10 @@
<HintPath>..\packages\Mono.Cecil.0.9.6.1\lib\net45\Mono.Cecil.Rocks.dll</HintPath> <HintPath>..\packages\Mono.Cecil.0.9.6.1\lib\net45\Mono.Cecil.Rocks.dll</HintPath>
<Private>True</Private> <Private>True</Private>
</Reference> </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"> <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> <HintPath>..\packages\squirrel.windows.1.2.1\lib\Net45\NuGet.Squirrel.dll</HintPath>
<Private>True</Private> <Private>True</Private>
@ -58,6 +104,17 @@
<Reference Include="System.Data" /> <Reference Include="System.Data" />
<Reference Include="System.Design" /> <Reference Include="System.Design" />
<Reference Include="System.Drawing" /> <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" />
<Reference Include="System.Web.Services" /> <Reference Include="System.Web.Services" />
<Reference Include="System.Windows.Forms" /> <Reference Include="System.Windows.Forms" />
@ -141,6 +198,10 @@
<Project>{699FB638-CE02-48D7-8078-30A7939C5BCB}</Project> <Project>{699FB638-CE02-48D7-8078-30A7939C5BCB}</Project>
<Package>{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</Package> <Package>{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</Package>
</ProjectReference> </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>
<ItemGroup> <ItemGroup>
<Compile Include="..\GlobalAssemblyInfo.cs" /> <Compile Include="..\GlobalAssemblyInfo.cs" />
@ -270,6 +331,9 @@
<Compile Include="Configuration\Wizard\WeblogConfigurationWizardPanelSelectProvider.cs"> <Compile Include="Configuration\Wizard\WeblogConfigurationWizardPanelSelectProvider.cs">
<SubType>UserControl</SubType> <SubType>UserControl</SubType>
</Compile> </Compile>
<Compile Include="Configuration\Wizard\WeblogConfigurationWizardPanelGoogleBloggerAuthentication.cs">
<SubType>UserControl</SubType>
</Compile>
<Compile Include="Configuration\Wizard\WeblogConfigurationWizardPanelSharePointAuthentication.cs"> <Compile Include="Configuration\Wizard\WeblogConfigurationWizardPanelSharePointAuthentication.cs">
<SubType>UserControl</SubType> <SubType>UserControl</SubType>
</Compile> </Compile>
@ -989,6 +1053,10 @@
<DependentUpon>WeblogConfigurationWizardPanelSelectProvider.cs</DependentUpon> <DependentUpon>WeblogConfigurationWizardPanelSelectProvider.cs</DependentUpon>
<SubType>Designer</SubType> <SubType>Designer</SubType>
</EmbeddedResource> </EmbeddedResource>
<EmbeddedResource Include="Configuration\Wizard\WeblogConfigurationWizardPanelGoogleBloggerAuthentication.resx">
<DependentUpon>WeblogConfigurationWizardPanelGoogleBloggerAuthentication.cs</DependentUpon>
<SubType>Designer</SubType>
</EmbeddedResource>
<EmbeddedResource Include="Configuration\Wizard\WeblogConfigurationWizardPanelSharePointAuthentication.resx"> <EmbeddedResource Include="Configuration\Wizard\WeblogConfigurationWizardPanelSharePointAuthentication.resx">
<DependentUpon>WeblogConfigurationWizardPanelSharePointAuthentication.cs</DependentUpon> <DependentUpon>WeblogConfigurationWizardPanelSharePointAuthentication.cs</DependentUpon>
<SubType>Designer</SubType> <SubType>Designer</SubType>
@ -1612,4 +1680,11 @@
<None Include="app.config" /> <None Include="app.config" />
<None Include="packages.config" /> <None Include="packages.config" />
</ItemGroup> </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> </Project>

View File

@ -1,7 +1,18 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<packages> <packages>
<package id="DeltaCompressionDotNet" version="1.0.0" targetFramework="net452" /> <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="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="Splat" version="1.6.2" targetFramework="net452" />
<package id="squirrel.windows" version="1.2.1" targetFramework="net452" /> <package id="squirrel.windows" version="1.2.1" targetFramework="net452" />
<package id="Zlib.Portable.Signed" version="1.11.0" targetFramework="net452" />
</packages> </packages>