mirror of
https://github.com/ZuneDev/ZuneShell.dll.git
synced 2026-07-27 13:11:51 -07:00
311 lines
11 KiB
C#
311 lines
11 KiB
C#
// Decompiled with JetBrains decompiler
|
|
// Type: ZuneUI.SoftwareUpdates
|
|
// Assembly: ZuneShell, Version=4.7.0.0, Culture=neutral, PublicKeyToken=ddd0da4d3e678217
|
|
// MVID: FC8028F3-A47B-4FB4-B35B-11D1752D8264
|
|
// Assembly location: C:\Program Files\Zune\ZuneShell.dll
|
|
|
|
using Microsoft.Iris;
|
|
using Microsoft.Win32;
|
|
using Microsoft.Zune.Configuration;
|
|
using Microsoft.Zune.Service;
|
|
using Microsoft.Zune.Util;
|
|
using MicrosoftZuneLibrary;
|
|
using System;
|
|
using System.ComponentModel;
|
|
using System.Diagnostics;
|
|
using System.Globalization;
|
|
using System.Net;
|
|
using System.Text;
|
|
using System.Threading;
|
|
|
|
namespace ZuneUI
|
|
{
|
|
public class SoftwareUpdates : ModelItem
|
|
{
|
|
private const string m_PID = "92510-320-9256355-04773";
|
|
private bool m_checkingForUpdates;
|
|
private bool m_backgroundCheck;
|
|
private bool m_userInitiatedUpdate;
|
|
private static SoftwareUpdates m_instance;
|
|
private UpdateCheckEventArguments _lastUpdateCheckResult;
|
|
|
|
public event EventHandler InstallInitiated;
|
|
|
|
public static SoftwareUpdates Instance
|
|
{
|
|
get
|
|
{
|
|
if (m_instance == null)
|
|
m_instance = new SoftwareUpdates();
|
|
return m_instance;
|
|
}
|
|
}
|
|
|
|
public static string PID => "92510-320-9256355-04773";
|
|
|
|
public void StartUp() => Application.DeferredInvoke(new DeferredInvokeHandler(this.DeferredStartUp), DeferredInvokePriority.Low);
|
|
|
|
public bool CheckingForUpdates
|
|
{
|
|
get => this.m_checkingForUpdates;
|
|
private set
|
|
{
|
|
if (this.m_checkingForUpdates == value)
|
|
return;
|
|
this.m_checkingForUpdates = value;
|
|
this.FirePropertyChanged(nameof(CheckingForUpdates));
|
|
}
|
|
}
|
|
|
|
public UpdateCheckEventArguments LastUpdateCheckResult
|
|
{
|
|
get => this._lastUpdateCheckResult;
|
|
set
|
|
{
|
|
if (this._lastUpdateCheckResult == value)
|
|
return;
|
|
this._lastUpdateCheckResult = value;
|
|
this.FirePropertyChanged(nameof(LastUpdateCheckResult));
|
|
}
|
|
}
|
|
|
|
public void CheckForUpdates(bool isUserInitiated)
|
|
{
|
|
if (!this.CheckingForUpdates)
|
|
{
|
|
this._lastUpdateCheckResult = null;
|
|
this.CheckingForUpdates = true;
|
|
this.m_userInitiatedUpdate = isUserInitiated;
|
|
UpdateManager.Instance.BeginUpdateCheck(new UpdateProgressHandler(this.UpdateCheckCallback));
|
|
if (!this.m_userInitiatedUpdate)
|
|
return;
|
|
SQMLog.Log(SQMDataId.ManualCheckForUpdatesInvoked, 1);
|
|
}
|
|
else
|
|
this.m_backgroundCheck = false;
|
|
}
|
|
|
|
public void CancelCheckForUpdates()
|
|
{
|
|
UpdateManager.Instance.CancelUpdateCheck();
|
|
Instance.CheckingForUpdates = false;
|
|
}
|
|
|
|
public void InstallUpdates()
|
|
{
|
|
this.OnInstallInitiated();
|
|
UpdateManager.Instance.InstallUpdate(new UpdateProgressHandler(this.UpdateCheckCallback));
|
|
}
|
|
|
|
public void ShowUpdateAvailabilityDialog()
|
|
{
|
|
if (!this.LastUpdateCheckResult.UpdateFound && this.m_backgroundCheck)
|
|
return;
|
|
if (this.IsWUClientUpToDate())
|
|
{
|
|
if (this.LastUpdateCheckResult.HR >= 0)
|
|
UpdateDialogInfo.Show(this.LastUpdateCheckResult.UpdateFound, this.LastUpdateCheckResult.CriticalUpdateFound, this.m_userInitiatedUpdate);
|
|
else
|
|
Shell.ShowErrorDialog(this.LastUpdateCheckResult.HR, StringId.IDS_CHECK_FOR_UPDATES_FAILED);
|
|
}
|
|
else
|
|
Shell.ShowErrorDialog(-1072885299, StringId.IDS_CHECK_FOR_UPDATES_FAILED, StringId.IDS_CHECK_FOR_UPDATES_FAILED_DESCRIPTION);
|
|
}
|
|
|
|
private bool IsWUClientUpToDate()
|
|
{
|
|
string str = Environment.ExpandEnvironmentVariables("%windir%\\System32\\wuaueng.dll");
|
|
bool flag = false;
|
|
if (str != null && System.IO.File.Exists(str) && new Version(FileVersionInfo.GetVersionInfo(str).ProductVersion).CompareTo(new Version("7.2.6001.784")) >= 0)
|
|
flag = true;
|
|
return flag;
|
|
}
|
|
|
|
private void OnInstallInitiated()
|
|
{
|
|
if (this.InstallInitiated != null)
|
|
this.InstallInitiated(this, null);
|
|
this.FirePropertyChanged("InstallInitiated");
|
|
}
|
|
|
|
private void DeferredStartUp(object state)
|
|
{
|
|
this.CheckOsUpgrade();
|
|
DateTime lastUpdateCheck = ClientConfiguration.Shell.LastUpdateCheck;
|
|
uint num = Math.Min((uint)MachineConfiguration.Setup.UpdateCheckFrequency, 14U);
|
|
if (Math.Abs((DateTime.UtcNow - lastUpdateCheck).Days) >= num && !Fue.Instance.IsFirstLaunch && !Shell.SettingsFrame.Wizard.IsCurrent)
|
|
{
|
|
this.m_backgroundCheck = true;
|
|
this.CheckForUpdates(false);
|
|
}
|
|
this.CheckCodecAccounting();
|
|
}
|
|
|
|
private void DeferredUpdateCheckCallback(object args)
|
|
{
|
|
this.LastUpdateCheckResult = (UpdateCheckEventArguments)args;
|
|
if (this.LastUpdateCheckResult.HR >= 0)
|
|
{
|
|
try
|
|
{
|
|
ClientConfiguration.Shell.LastUpdateCheck = DateTime.UtcNow;
|
|
}
|
|
catch (ApplicationException ex)
|
|
{
|
|
}
|
|
}
|
|
if (this.m_backgroundCheck)
|
|
this.ShowUpdateAvailabilityDialog();
|
|
this.m_userInitiatedUpdate = false;
|
|
this.m_backgroundCheck = false;
|
|
this.CheckingForUpdates = false;
|
|
}
|
|
|
|
private void UpdateCheckCallback(UpdateCheckEventArguments args) => Application.DeferredInvoke(new DeferredInvokeHandler(this.DeferredUpdateCheckCallback), args, DeferredInvokePriority.Normal);
|
|
|
|
private void CheckOsUpgrade()
|
|
{
|
|
int num = Environment.OSVersion.Version.Major * 100 + Environment.OSVersion.Version.Minor;
|
|
int osVersion = MachineConfiguration.Setup.OSVersion;
|
|
if (num <= osVersion)
|
|
return;
|
|
if (osVersion < 600 && MachineConfiguration.HME.CurrentSharingUID != 0)
|
|
ThreadPool.QueueUserWorkItem(new WaitCallback(this.RepairNetworkSharingService), num);
|
|
if (osVersion >= 601 || num < 601)
|
|
return;
|
|
ThreadPool.QueueUserWorkItem(new WaitCallback(this.CreatePodcastLibraryTemplate), num);
|
|
}
|
|
|
|
private void RepairNetworkSharingService(object state)
|
|
{
|
|
int num = (int)state;
|
|
HMESettings hmeSettings = new HMESettings();
|
|
HRESULT hresult = hmeSettings.Init();
|
|
if (hresult.IsSuccess)
|
|
hresult = hmeSettings.RepairSharing();
|
|
if (!hresult.IsSuccess)
|
|
return;
|
|
MachineConfiguration.Setup.OSVersion = num;
|
|
}
|
|
|
|
private void CreatePodcastLibraryTemplate(object state)
|
|
{
|
|
int num = (int)state;
|
|
if (((HRESULT)Win7ShellManager.Instance.CreatePodcastLibraryTemplate()).IsSuccess)
|
|
MachineConfiguration.Setup.OSVersion = num;
|
|
Win7ShellManager.Instance.SyncLibraryFolders();
|
|
}
|
|
|
|
private void CheckCodecAccounting()
|
|
{
|
|
if (MachineConfiguration.Setup.CodecInfoSent)
|
|
return;
|
|
RegistryKey registryKey = Registry.LocalMachine.OpenSubKey("SOFTWARE\\Microsoft\\Zune");
|
|
DateTime utcNow = DateTime.UtcNow;
|
|
DateTime localTime = utcNow.ToLocalTime();
|
|
long totalMilliseconds = (long)localTime.Subtract(new DateTime(1970, 1, 1)).TotalMilliseconds;
|
|
string str1 = "ZuneSetup.exe";
|
|
string wtProfile = MachineConfiguration.Setup.WTProfile;
|
|
string str2 = totalMilliseconds.ToString();
|
|
string str3 = localTime.ToString("yyyy/MM/dd");
|
|
string str4 = TimeZone.CurrentTimeZone.GetUtcOffset(localTime).Hours.ToString();
|
|
string str5 = localTime.Hour.ToString();
|
|
string ietfLanguageTag = CultureInfo.CurrentUICulture.IetfLanguageTag;
|
|
string installationSource = MachineConfiguration.Setup.InstallationSource;
|
|
string pid = PID;
|
|
string version1 = (string)registryKey.GetValue("CurrentVersion");
|
|
string oldVersion = MachineConfiguration.Setup.OldVersion;
|
|
string str6 = string.Empty;
|
|
string str7 = "New";
|
|
if (!string.IsNullOrEmpty(version1))
|
|
{
|
|
try
|
|
{
|
|
Version version2 = new Version(version1);
|
|
int major = version2.Major;
|
|
int minor = version2.Minor;
|
|
if (!string.IsNullOrEmpty(oldVersion))
|
|
{
|
|
Version version3 = new Version(oldVersion);
|
|
str7 = !(version2 == version3) ? (version2.Major <= version3.Major ? (version2.Major != version3.Major ? "ReInstall" : "Upgrade") : "MajorUpgrade") : "ReInstall";
|
|
}
|
|
}
|
|
catch (ArgumentException ex)
|
|
{
|
|
}
|
|
catch (FormatException ex)
|
|
{
|
|
}
|
|
catch (OverflowException ex)
|
|
{
|
|
}
|
|
}
|
|
try
|
|
{
|
|
using (CryptoHelper cryptoHelper = new CryptoHelper(pid))
|
|
{
|
|
string data = utcNow.ToString("yyyy-MM-dd-hh-mm-ss");
|
|
str6 = Uri.EscapeDataString(cryptoHelper.Encrypt(data));
|
|
}
|
|
}
|
|
catch (Win32Exception ex)
|
|
{
|
|
}
|
|
string[] strArray = new string[27]
|
|
{
|
|
"http://m.webtrends.com/dcs8fe5yk00000s538qdxmbst_2t2k/dcs.gif",
|
|
"?dcsdat=",
|
|
str2,
|
|
"&dcsuri=",
|
|
str1,
|
|
"&dcssip=",
|
|
wtProfile,
|
|
"&wt.tz=",
|
|
str4,
|
|
"&wt.bh=",
|
|
str5,
|
|
"&wt.date=",
|
|
str3,
|
|
"&wt.ul=",
|
|
ietfLanguageTag,
|
|
"&zune_cver=",
|
|
version1,
|
|
"&zune_isource=",
|
|
installationSource,
|
|
"&zune_itype=",
|
|
str7,
|
|
"&zune_over=",
|
|
oldVersion,
|
|
"&zune_pid=",
|
|
pid,
|
|
"&zune_gmthash=",
|
|
str6
|
|
};
|
|
StringBuilder stringBuilder = new StringBuilder();
|
|
for (int index = 0; index < strArray.Length; ++index)
|
|
stringBuilder.Append(strArray[index]);
|
|
try
|
|
{
|
|
Microsoft.Zune.Service.HttpWebRequest httpWebRequest = Microsoft.Zune.Service.HttpWebRequest.Create(new Uri(stringBuilder.ToString()));
|
|
httpWebRequest.CancelOnShutdown = true;
|
|
httpWebRequest.GetResponseAsync(new AsyncRequestComplete(this.OnRequestComplete), null);
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
}
|
|
}
|
|
|
|
private void OnRequestComplete(Microsoft.Zune.Service.HttpWebResponse response, object requestArgs)
|
|
{
|
|
if (response.StatusCode == HttpStatusCode.OK)
|
|
{
|
|
MachineConfiguration.Setup.CodecInfoSent = true;
|
|
}
|
|
else
|
|
{
|
|
int statusCode = (int)response.StatusCode;
|
|
}
|
|
}
|
|
}
|
|
}
|