Implement automatic updates.

This commit is contained in:
Daniel Kraus 2015-07-27 10:10:18 +02:00
parent 61e7d4b89d
commit cb560a92d7
6 changed files with 99 additions and 19 deletions

View File

@ -72,16 +72,7 @@ namespace zaaReloaded2.Properties {
[global::System.Configuration.ApplicationScopedSettingAttribute()] [global::System.Configuration.ApplicationScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("http://zaa.nephrowiki.de/downloads")] [global::System.Configuration.DefaultSettingValueAttribute("http://zaa.nephrowiki.de/versioninfo.txt")]
public string UpdatesUrl {
get {
return ((string)(this["UpdatesUrl"]));
}
}
[global::System.Configuration.ApplicationScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("versioninfo.txt")]
public string VersionInfoFile { public string VersionInfoFile {
get { get {
return ((string)(this["VersionInfoFile"])); return ((string)(this["VersionInfoFile"]));
@ -96,5 +87,16 @@ namespace zaaReloaded2.Properties {
return ((string)(this["ExceptionPostUrl"])); return ((string)(this["ExceptionPostUrl"]));
} }
} }
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
public global::System.DateTime LastUpdateCheck {
get {
return ((global::System.DateTime)(this["LastUpdateCheck"]));
}
set {
this["LastUpdateCheck"] = value;
}
}
} }
} }

View File

@ -17,14 +17,14 @@
<Setting Name="Homepage" Type="System.Uri" Scope="Application"> <Setting Name="Homepage" Type="System.Uri" Scope="Application">
<Value Profile="(Default)">http://zaa.nephrowiki.de</Value> <Value Profile="(Default)">http://zaa.nephrowiki.de</Value>
</Setting> </Setting>
<Setting Name="UpdatesUrl" Type="System.String" Scope="Application">
<Value Profile="(Default)">http://zaa.nephrowiki.de/downloads</Value>
</Setting>
<Setting Name="VersionInfoFile" Type="System.String" Scope="Application"> <Setting Name="VersionInfoFile" Type="System.String" Scope="Application">
<Value Profile="(Default)">versioninfo.txt</Value> <Value Profile="(Default)">http://zaa.nephrowiki.de/versioninfo.txt</Value>
</Setting> </Setting>
<Setting Name="ExceptionPostUrl" Type="System.String" Scope="Application"> <Setting Name="ExceptionPostUrl" Type="System.String" Scope="Application">
<Value Profile="(Default)">http://zaa.nephrowiki.de/postreport.php</Value> <Value Profile="(Default)">http://zaa.nephrowiki.de/postreport.php</Value>
</Setting> </Setting>
<Setting Name="LastUpdateCheck" Type="System.DateTime" Scope="User">
<Value Profile="(Default)" />
</Setting>
</Settings> </Settings>
</SettingsFile> </SettingsFile>

View File

@ -24,6 +24,8 @@ using System.IO;
using Word = Microsoft.Office.Interop.Word; using Word = Microsoft.Office.Interop.Word;
using Office = Microsoft.Office.Core; using Office = Microsoft.Office.Core;
using Microsoft.Office.Tools.Word; using Microsoft.Office.Tools.Word;
using Bovender.Versioning;
using Bovender.Mvvm.Messaging;
namespace zaaReloaded2 namespace zaaReloaded2
{ {
@ -48,6 +50,11 @@ namespace zaaReloaded2
private void ThisAddIn_Shutdown(object sender, System.EventArgs e) private void ThisAddIn_Shutdown(object sender, System.EventArgs e)
{ {
if (_updaterVM != null && _updaterVM.IsUpdatePending)
{
if (_updaterVM.InstallUpdateCommand.CanExecute(null))
_updaterVM.InstallUpdateCommand.Execute(null);
}
} }
#region Properties #region Properties
@ -75,10 +82,36 @@ namespace zaaReloaded2
#endregion #endregion
#region Updater
void CheckForUpdates()
{
if (DateTime.Today == Properties.Settings.Default.LastUpdateCheck.Date)
return;
Properties.Settings.Default.LastUpdateCheck = DateTime.Today;
Properties.Settings.Default.Save();
_updaterVM = new UpdaterViewModel(new Updater.Updater());
if (!_updaterVM.CanCheckForUpdate) return;
_updaterVM.UpdateAvailableMessage.Sent += UpdateAvailableMessage_Sent;
_updaterVM.CheckForUpdateCommand.Execute(null);
}
void UpdateAvailableMessage_Sent(object sender, MessageArgs<ViewModelMessageContent> e)
{
UpdaterViewModel uvm = e.Content.ViewModel as UpdaterViewModel;
uvm.DestinationFolder = System.IO.Path.GetTempPath();
uvm.DownloadUpdateCommand.Execute(null);
}
#endregion
#region Private fields #region Private fields
private Ribbon _ribbon; Ribbon _ribbon;
UpdaterViewModel _updaterVM;
#endregion #endregion

37
zaaReloaded2/Updater/Updater.cs Executable file
View File

@ -0,0 +1,37 @@
/* Updater.cs
* part of zaaReloaded2
*
* Copyright 2015 Daniel Kraus
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace zaaReloaded2.Updater
{
class Updater : Bovender.Versioning.Updater
{
protected override Bovender.Versioning.SemanticVersion GetCurrentVersion()
{
return Version.CurrentVersion();
}
protected override Uri GetVersionInfoUri()
{
return new Uri(Properties.Settings.Default.VersionInfoFile);
}
}
}

View File

@ -23,6 +23,9 @@
<sectionGroup name="applicationSettings" type="System.Configuration.ApplicationSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" > <sectionGroup name="applicationSettings" type="System.Configuration.ApplicationSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" >
<section name="zaaReloaded2.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" /> <section name="zaaReloaded2.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
</sectionGroup> </sectionGroup>
<sectionGroup name="userSettings" type="System.Configuration.UserSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" >
<section name="zaaReloaded2.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" allowExeDefinition="MachineToLocalUser" requirePermission="false" />
</sectionGroup>
</configSections> </configSections>
<applicationSettings> <applicationSettings>
<zaaReloaded2.Properties.Settings> <zaaReloaded2.Properties.Settings>
@ -38,15 +41,19 @@
<setting name="Homepage" serializeAs="String"> <setting name="Homepage" serializeAs="String">
<value>http://zaa.nephrowiki.de</value> <value>http://zaa.nephrowiki.de</value>
</setting> </setting>
<setting name="UpdatesUrl" serializeAs="String">
<value>http://zaa.nephrowiki.de/downloads</value>
</setting>
<setting name="VersionInfoFile" serializeAs="String"> <setting name="VersionInfoFile" serializeAs="String">
<value>versioninfo.txt</value> <value>http://zaa.nephrowiki.de/versioninfo.txt</value>
</setting> </setting>
<setting name="ExceptionPostUrl" serializeAs="String"> <setting name="ExceptionPostUrl" serializeAs="String">
<value>http://zaa.nephrowiki.de/postreport.php</value> <value>http://zaa.nephrowiki.de/postreport.php</value>
</setting> </setting>
</zaaReloaded2.Properties.Settings> </zaaReloaded2.Properties.Settings>
</applicationSettings> </applicationSettings>
<userSettings>
<zaaReloaded2.Properties.Settings>
<setting name="LastUpdateCheck" serializeAs="String">
<value />
</setting>
</zaaReloaded2.Properties.Settings>
</userSettings>
</configuration> </configuration>

View File

@ -216,6 +216,7 @@
<Compile Include="Properties\AssemblyInfo.cs"> <Compile Include="Properties\AssemblyInfo.cs">
<SubType>Code</SubType> <SubType>Code</SubType>
</Compile> </Compile>
<Compile Include="Updater\Updater.cs" />
<Compile Include="ViewModels\AboutViewModel.cs" /> <Compile Include="ViewModels\AboutViewModel.cs" />
<Compile Include="Views\AboutView.xaml.cs"> <Compile Include="Views\AboutView.xaml.cs">
<DependentUpon>AboutView.xaml</DependentUpon> <DependentUpon>AboutView.xaml</DependentUpon>