Now show whether there is a new release in the launcher.

This commit is contained in:
UnknownShadow200 2016-02-14 22:29:04 +11:00
parent 357b20619a
commit c32b8ddf2f
40 changed files with 76 additions and 80 deletions

View File

@ -8,7 +8,7 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "OpenTK", "OpenTK\OpenTK.csp
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "InteropPatcher", "InteropPatcher\InteropPatcher.csproj", "{4A4110EE-21CA-4715-AF67-0C8B7CE0642F}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Launcher2", "Launcher2\Launcher2.csproj", "{3E84ACC1-27B4-401B-A359-6AAE4DF6C9B5}"
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Launcher", "Launcher2\Launcher.csproj", "{3E84ACC1-27B4-401B-A359-6AAE4DF6C9B5}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution

View File

@ -2,7 +2,7 @@
using System.Drawing;
using ClassicalSharp;
namespace Launcher2 {
namespace Launcher {
public static class Drawer2DExt {

View File

@ -6,7 +6,7 @@ using OpenTK.Platform.X11;
using OSX = OpenTK.Platform.MacOS.Carbon;
using OSStatus = OpenTK.Platform.MacOS.OSStatus;
namespace Launcher2 {
namespace Launcher {
/// <summary> Platform specific class used to transfer a bitmap directly to the screen. </summary>
public abstract class PlatformDrawer {
@ -36,7 +36,6 @@ namespace Launcher2 {
}
}
// TODO: broken
public sealed class OSXPlatformDrawer : PlatformDrawer {
IntPtr windowPort;

View File

@ -3,7 +3,7 @@ using System.Drawing;
using ClassicalSharp;
using OpenTK.Input;
namespace Launcher2 {
namespace Launcher {
public sealed class ClassiCubeServersScreen : LauncherInputScreen {

View File

@ -3,7 +3,7 @@ using System.Drawing;
using ClassicalSharp;
using OpenTK.Input;
namespace Launcher2 {
namespace Launcher {
public sealed class ColoursScreen : LauncherInputScreen {

View File

@ -5,7 +5,7 @@ using System.IO;
using System.Net;
using ClassicalSharp;
namespace Launcher2 {
namespace Launcher {
public sealed class DirectConnectScreen : LauncherInputScreen {

View File

@ -4,7 +4,7 @@ using ClassicalSharp;
using OpenTK;
using OpenTK.Input;
namespace Launcher2 {
namespace Launcher {
public abstract class LauncherInputScreen : LauncherScreen {

View File

@ -3,7 +3,7 @@ using System.Drawing;
using ClassicalSharp;
using OpenTK.Input;
namespace Launcher2 {
namespace Launcher {
public abstract class LauncherScreen {
protected internal LauncherWindow game;

View File

@ -5,7 +5,7 @@ using System.IO;
using System.Net;
using ClassicalSharp;
namespace Launcher2 {
namespace Launcher {
public sealed partial class MainScreen : LauncherInputScreen {
@ -13,9 +13,8 @@ namespace Launcher2 {
public override void Tick() {
base.Tick();
// TODO: Why is this broken?
//if( game.checkTask != null )
// game.checkTask.TaskTick( SuccessfulUpdateCheck, this );
if( game.checkTask != null )
game.checkTask.TaskTick( SuccessfulUpdateCheck, this );
if( !signingIn ) return;
ClassicubeSession session = game.Session;

View File

@ -1,9 +1,10 @@
using System;
using System.Drawing;
using System.IO;
using System.Net;
using ClassicalSharp;
namespace Launcher2 {
namespace Launcher {
public sealed partial class MainScreen : LauncherInputScreen {
@ -40,9 +41,16 @@ namespace Launcher2 {
string updateText = "&eChecking for updates..";
bool updateDone;
void SuccessfulUpdateCheck( UpdateCheckTask task ) {
//if( updateDone ) return; TODO: Why is this broken?
//updateText = "&aNew release available";
//updateDone = true;
if( updateDone ) return;
string exePath = Path.Combine( Program.AppDirectory, "ClassicalSharp.exe" );
DateTime lastTime = File.GetLastWriteTime( exePath );
DateTime lastRelease = game.checkTask.LatestStable.TimeBuilt;
updateText = lastTime >= lastRelease ? "&eUp to date " : "&aNew release available";
updateDone = true;
game.MakeBackground();
Resize();
SelectWidget( selectedWidget );
}
void MakeWidgets() {

View File

@ -3,7 +3,7 @@ using System.Drawing;
using ClassicalSharp;
using ClassicalSharp.Network;
namespace Launcher2 {
namespace Launcher {
public sealed class ResourcesScreen : LauncherScreen {

View File

@ -2,10 +2,10 @@
using System.Drawing;
using System.IO;
using ClassicalSharp;
using Launcher2.Updater;
using Launcher.Updater;
using OpenTK.Input;
namespace Launcher2 {
namespace Launcher {
// TODO: Download asynchronously
public sealed class UpdatesScreen : LauncherScreen {
@ -23,7 +23,7 @@ namespace Launcher2 {
UpdateCheckTask checkTask;
public override void Init() {
if( game.checkTask.Done )
if( game.checkTask != null && game.checkTask.Done )
SuccessfulUpdateCheck( game.checkTask );
checkTask = new UpdateCheckTask();
checkTask.CheckForUpdatesAsync();
@ -55,14 +55,8 @@ namespace Launcher2 {
}
void SuccessfulUpdateCheck( UpdateCheckTask task ) {
dev = task.LatestDev;
lastDev = dev.TimeBuilt;
validDev = dev.DirectXSize > 50000 && dev.OpenGLSize > 50000;
stable = task.LatestStable;
lastStable = stable.TimeBuilt;
validStable = stable.DirectXSize > 50000 && stable.OpenGLSize > 50000;
game.checkTask = checkTask;
dev = task.LatestDev; lastDev = dev.TimeBuilt;
stable = task.LatestStable; lastStable = stable.TimeBuilt;
}
public override void Resize() {
@ -82,7 +76,6 @@ namespace Launcher2 {
const string dateFormat = "dd-MM-yyyy HH:mm";
DateTime lastStable, lastDev;
bool validStable = true, validDev = true;
bool updateCheckFailed;
void MakeWidgets() {
@ -93,21 +86,21 @@ namespace Launcher2 {
string yourBuild = File.GetLastWriteTime( exePath ).ToString( dateFormat );
MakeLabelAt( yourBuild, infoFont, Anchor.Centre, Anchor.Centre, 70, -120 );
MakeLabelAt( "Latest stable:", infoFont, Anchor.Centre, Anchor.Centre, -70, -75 );
string latestStable = GetDateString( lastStable, validStable );
MakeLabelAt( "Latest release:", infoFont, Anchor.Centre, Anchor.Centre, -70, -75 );
string latestStable = GetDateString( lastStable );
MakeLabelAt( latestStable, infoFont, Anchor.Centre, Anchor.Centre, 70, -75 );
MakeButtonAt( "Direct3D 9", 130, 30, titleFont, Anchor.Centre, -80, -40,
(x, y) => UpdateBuild( lastStable, validStable, true, true ) );
(x, y) => UpdateBuild( lastStable, true, true ) );
MakeButtonAt( "OpenGL", 130, 30, titleFont, Anchor.Centre, 80, -40,
(x, y) => UpdateBuild( lastStable, validStable, true, false ) );
(x, y) => UpdateBuild( lastStable, true, false ) );
MakeLabelAt( "Latest dev build:", infoFont, Anchor.Centre, Anchor.Centre, -80, 15 );
string latestDev = GetDateString( lastDev, validDev );
string latestDev = GetDateString( lastDev );
MakeLabelAt( latestDev, infoFont, Anchor.Centre, Anchor.Centre, 70, 15 );
MakeButtonAt( "Direct3D 9", 130, 30, titleFont, Anchor.Centre, -80, 50,
(x, y) => UpdateBuild( lastDev, validDev, false, true ) );
(x, y) => UpdateBuild( lastDev, false, true ) );
MakeButtonAt( "OpenGL", 130, 30, titleFont, Anchor.Centre, 80, 50,
(x, y) => UpdateBuild( lastDev, validDev, false, false ) );
(x, y) => UpdateBuild( lastDev, false, false ) );
MakeLabelAt( "&eDirect3D 9 is recommended for Windows.",
infoFont, Anchor.Centre, Anchor.Centre, 0, 105 );
@ -118,21 +111,20 @@ namespace Launcher2 {
0, 170, (x, y) => game.SetScreen( new MainScreen( game ) ) );
}
string GetDateString( DateTime last, bool valid ) {
string GetDateString( DateTime last ) {
if( updateCheckFailed ) return "Update check failed";
if( !valid ) return "Build corrupted";
if( last == DateTime.MinValue ) return "Checking..";
if( last == DateTime.MinValue ) return "Checking..";
return last.ToString( dateFormat );
}
void UpdateBuild( DateTime last, bool valid, bool release, bool dx ) {
if( last == DateTime.MinValue || !valid ) return;
void UpdateBuild( DateTime last, bool release, bool dx ) {
Build build = release ? stable : dev;
string dir = dx ? build.DirectXPath : build.OpenGLPath;
Console.WriteLine( "FETCH! " + dir );
Patcher.Update( dir );
if( last == DateTime.MinValue || build.DirectXSize < 50000
|| build.OpenGLSize < 50000 ) return;
string path = dx ? build.DirectXPath : build.OpenGLPath;
Utils.LogDebug( "Updating to: " + path );
Patcher.Update( path );
}
public override void Dispose() {

View File

@ -1,7 +1,7 @@
using System;
using System.Collections.Generic;
namespace Launcher2 {
namespace Launcher {
public partial class LauncherTableWidget : LauncherWidget {

View File

@ -2,7 +2,7 @@
using System.Collections.Generic;
using ClassicalSharp;
namespace Launcher2 {
namespace Launcher {
public partial class LauncherTableWidget : LauncherWidget {

View File

@ -3,7 +3,7 @@ using System.Collections.Generic;
using System.Drawing;
using ClassicalSharp;
namespace Launcher2 {
namespace Launcher {
public partial class LauncherTableWidget : LauncherWidget {

View File

@ -2,7 +2,7 @@
using System.Drawing;
using ClassicalSharp;
namespace Launcher2 {
namespace Launcher {
/// <summary> Widget that represents text can have modified by the user. </summary>
public sealed class LauncherBooleanWidget : LauncherWidget {

View File

@ -2,7 +2,7 @@
using System.Drawing;
using ClassicalSharp;
namespace Launcher2 {
namespace Launcher {
public sealed class LauncherButtonWidget : LauncherWidget {

View File

@ -3,7 +3,7 @@ using System.Drawing;
using System.Windows.Forms;
using ClassicalSharp;
namespace Launcher2 {
namespace Launcher {
/// <summary> Widget that represents text can have modified by the user. </summary>
public sealed class LauncherInputWidget : LauncherWidget {

View File

@ -2,7 +2,7 @@
using System.Drawing;
using ClassicalSharp;
namespace Launcher2 {
namespace Launcher {
/// <summary> Widget that represents text that cannot be modified by the user. </summary>
public sealed class LauncherLabelWidget : LauncherWidget {

View File

@ -1,7 +1,7 @@
using System;
using ClassicalSharp;
namespace Launcher2 {
namespace Launcher {
public abstract class LauncherWidget {

View File

@ -5,8 +5,8 @@
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<OutputType>WinExe</OutputType>
<RootNamespace>Launcher2</RootNamespace>
<AssemblyName>Launcher2</AssemblyName>
<RootNamespace>Launcher</RootNamespace>
<AssemblyName>Launcher</AssemblyName>
<TargetFrameworkVersion>v2.0</TargetFrameworkVersion>
<TargetFrameworkProfile>
</TargetFrameworkProfile>
@ -21,7 +21,7 @@
<RunPostBuildEvent>OnBuildSuccess</RunPostBuildEvent>
</PropertyGroup>
<PropertyGroup Condition=" '$(Platform)' == 'AnyCPU' ">
<PlatformTarget>AnyCPU</PlatformTarget>
<PlatformTarget>x86</PlatformTarget>
<BaseAddress>4194304</BaseAddress>
<RegisterForComInterop>False</RegisterForComInterop>
<GenerateSerializationAssemblies>Auto</GenerateSerializationAssemblies>

View File

@ -4,7 +4,7 @@ using System.IO;
using ClassicalSharp;
using ClassicalSharp.TexturePack;
namespace Launcher2 {
namespace Launcher {
public sealed partial class LauncherWindow {

View File

@ -9,7 +9,7 @@ using ClassicalSharp.Network;
using OpenTK;
using OpenTK.Graphics;
namespace Launcher2 {
namespace Launcher {
public sealed partial class LauncherWindow {
@ -179,6 +179,7 @@ namespace Launcher2 {
void Display() {
Dirty = false;
Screen.Dirty = false;
Console.WriteLine( "~~redraw~~" );
platformDrawer.Draw( Window.WindowInfo, Framebuffer );
}

View File

@ -2,7 +2,7 @@
using System.Drawing;
using System.IO;
namespace Launcher2 {
namespace Launcher {
public partial class ResourcePatcher {

View File

@ -3,7 +3,7 @@ using System.IO;
using ClassicalSharp.Network;
using ClassicalSharp.TexturePack;
namespace Launcher2 {
namespace Launcher {
public sealed class ResourceFetcher {

View File

@ -5,7 +5,7 @@ using System.IO;
using ClassicalSharp;
using ClassicalSharp.TexturePack;
namespace Launcher2 {
namespace Launcher {
public partial class ResourcePatcher {

View File

@ -4,7 +4,7 @@ using ClassicalSharp.Network;
using SharpWave;
using SharpWave.Codecs.Vorbis;
namespace Launcher2 {
namespace Launcher {
public sealed class SoundPatcher {

View File

@ -5,7 +5,7 @@ using System.IO;
using System.Text;
using ClassicalSharp.TexturePack;
namespace Launcher2 {
namespace Launcher {
public sealed class ZipWriter {

View File

@ -2,7 +2,7 @@
using System.IO;
using ClassicalSharp;
namespace Launcher2 {
namespace Launcher {
internal static class Program {

View File

@ -6,7 +6,7 @@ using System.Runtime.InteropServices;
using System.Threading;
using ClassicalSharp.TexturePack;
namespace Launcher2.Updater {
namespace Launcher.Updater {
public static class Patcher {

View File

@ -1,6 +1,6 @@
using System;
namespace Launcher2.Updater {
namespace Launcher.Updater {
public static class Scripts {

View File

@ -5,7 +5,7 @@ using System.IO;
using ClassicalSharp;
using OpenTK;
namespace Launcher2 {
namespace Launcher {
public static class Client {

View File

@ -1,6 +1,6 @@
using System;
namespace Launcher2 {
namespace Launcher {
public class ClientStartData {

View File

@ -23,7 +23,7 @@ using System.Collections.Generic;
using System.Globalization;
using System.Text;
namespace Launcher2 {
namespace Launcher {
public static class Json {
const int TOKEN_NONE = 0, TOKEN_CURLY_OPEN = 1, TOKEN_CURLY_CLOSE = 2;

View File

@ -2,7 +2,7 @@
using System.Drawing;
using ClassicalSharp;
namespace Launcher2 {
namespace Launcher {
public static class LauncherSkin {

View File

@ -1,7 +1,7 @@
using System;
using System.Security.Cryptography;
namespace Launcher2 {
namespace Launcher {
public static class Secure {

View File

@ -4,7 +4,7 @@ using System.Net;
using System.Threading;
using JsonObject = System.Collections.Generic.Dictionary<string, object>;
namespace Launcher2 {
namespace Launcher {
public sealed class ClassicubeSession : IWebTask {

View File

@ -4,7 +4,7 @@ using System.IO;
using System.Net;
using System.Text;
namespace Launcher2 {
namespace Launcher {
/// <summary> Represents a task that performs a series of GET or POST requests asynchronously. </summary>
public abstract class IWebTask {

View File

@ -1,6 +1,6 @@
using System;
namespace Launcher2 {
namespace Launcher {
public class ServerListEntry {

View File

@ -6,7 +6,7 @@ using System.Net;
using System.Threading;
using JsonObject = System.Collections.Generic.Dictionary<string, object>;
namespace Launcher2 {
namespace Launcher {
public class Build {
public DateTime TimeBuilt;
@ -79,9 +79,6 @@ namespace Launcher2 {
return false;
else
taskSuccess( this );
screen.game.MakeBackground();
screen.Resize();
return true;
}
}