mirror of
https://github.com/ClassiCube/ClassiCube.git
synced 2025-09-16 02:56:09 -04:00
Now show whether there is a new release in the launcher.
This commit is contained in:
parent
357b20619a
commit
c32b8ddf2f
@ -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
|
||||
|
@ -2,7 +2,7 @@
|
||||
using System.Drawing;
|
||||
using ClassicalSharp;
|
||||
|
||||
namespace Launcher2 {
|
||||
namespace Launcher {
|
||||
|
||||
public static class Drawer2DExt {
|
||||
|
||||
|
@ -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;
|
||||
|
@ -3,7 +3,7 @@ using System.Drawing;
|
||||
using ClassicalSharp;
|
||||
using OpenTK.Input;
|
||||
|
||||
namespace Launcher2 {
|
||||
namespace Launcher {
|
||||
|
||||
public sealed class ClassiCubeServersScreen : LauncherInputScreen {
|
||||
|
||||
|
@ -3,7 +3,7 @@ using System.Drawing;
|
||||
using ClassicalSharp;
|
||||
using OpenTK.Input;
|
||||
|
||||
namespace Launcher2 {
|
||||
namespace Launcher {
|
||||
|
||||
public sealed class ColoursScreen : LauncherInputScreen {
|
||||
|
||||
|
@ -5,7 +5,7 @@ using System.IO;
|
||||
using System.Net;
|
||||
using ClassicalSharp;
|
||||
|
||||
namespace Launcher2 {
|
||||
namespace Launcher {
|
||||
|
||||
public sealed class DirectConnectScreen : LauncherInputScreen {
|
||||
|
||||
|
@ -4,7 +4,7 @@ using ClassicalSharp;
|
||||
using OpenTK;
|
||||
using OpenTK.Input;
|
||||
|
||||
namespace Launcher2 {
|
||||
namespace Launcher {
|
||||
|
||||
public abstract class LauncherInputScreen : LauncherScreen {
|
||||
|
||||
|
@ -3,7 +3,7 @@ using System.Drawing;
|
||||
using ClassicalSharp;
|
||||
using OpenTK.Input;
|
||||
|
||||
namespace Launcher2 {
|
||||
namespace Launcher {
|
||||
|
||||
public abstract class LauncherScreen {
|
||||
protected internal LauncherWindow game;
|
||||
|
@ -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;
|
||||
|
@ -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() {
|
||||
|
@ -3,7 +3,7 @@ using System.Drawing;
|
||||
using ClassicalSharp;
|
||||
using ClassicalSharp.Network;
|
||||
|
||||
namespace Launcher2 {
|
||||
namespace Launcher {
|
||||
|
||||
public sealed class ResourcesScreen : LauncherScreen {
|
||||
|
||||
|
@ -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() {
|
||||
|
@ -1,7 +1,7 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace Launcher2 {
|
||||
namespace Launcher {
|
||||
|
||||
public partial class LauncherTableWidget : LauncherWidget {
|
||||
|
||||
|
@ -2,7 +2,7 @@
|
||||
using System.Collections.Generic;
|
||||
using ClassicalSharp;
|
||||
|
||||
namespace Launcher2 {
|
||||
namespace Launcher {
|
||||
|
||||
public partial class LauncherTableWidget : LauncherWidget {
|
||||
|
||||
|
@ -3,7 +3,7 @@ using System.Collections.Generic;
|
||||
using System.Drawing;
|
||||
using ClassicalSharp;
|
||||
|
||||
namespace Launcher2 {
|
||||
namespace Launcher {
|
||||
|
||||
public partial class LauncherTableWidget : LauncherWidget {
|
||||
|
||||
|
@ -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 {
|
||||
|
@ -2,7 +2,7 @@
|
||||
using System.Drawing;
|
||||
using ClassicalSharp;
|
||||
|
||||
namespace Launcher2 {
|
||||
namespace Launcher {
|
||||
|
||||
public sealed class LauncherButtonWidget : LauncherWidget {
|
||||
|
||||
|
@ -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 {
|
||||
|
@ -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 {
|
||||
|
@ -1,7 +1,7 @@
|
||||
using System;
|
||||
using ClassicalSharp;
|
||||
|
||||
namespace Launcher2 {
|
||||
namespace Launcher {
|
||||
|
||||
public abstract class LauncherWidget {
|
||||
|
||||
|
@ -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>
|
@ -4,7 +4,7 @@ using System.IO;
|
||||
using ClassicalSharp;
|
||||
using ClassicalSharp.TexturePack;
|
||||
|
||||
namespace Launcher2 {
|
||||
namespace Launcher {
|
||||
|
||||
public sealed partial class LauncherWindow {
|
||||
|
||||
|
@ -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 );
|
||||
}
|
||||
|
||||
|
@ -2,7 +2,7 @@
|
||||
using System.Drawing;
|
||||
using System.IO;
|
||||
|
||||
namespace Launcher2 {
|
||||
namespace Launcher {
|
||||
|
||||
public partial class ResourcePatcher {
|
||||
|
||||
|
@ -3,7 +3,7 @@ using System.IO;
|
||||
using ClassicalSharp.Network;
|
||||
using ClassicalSharp.TexturePack;
|
||||
|
||||
namespace Launcher2 {
|
||||
namespace Launcher {
|
||||
|
||||
public sealed class ResourceFetcher {
|
||||
|
||||
|
@ -5,7 +5,7 @@ using System.IO;
|
||||
using ClassicalSharp;
|
||||
using ClassicalSharp.TexturePack;
|
||||
|
||||
namespace Launcher2 {
|
||||
namespace Launcher {
|
||||
|
||||
public partial class ResourcePatcher {
|
||||
|
||||
|
@ -4,7 +4,7 @@ using ClassicalSharp.Network;
|
||||
using SharpWave;
|
||||
using SharpWave.Codecs.Vorbis;
|
||||
|
||||
namespace Launcher2 {
|
||||
namespace Launcher {
|
||||
|
||||
public sealed class SoundPatcher {
|
||||
|
||||
|
@ -5,7 +5,7 @@ using System.IO;
|
||||
using System.Text;
|
||||
using ClassicalSharp.TexturePack;
|
||||
|
||||
namespace Launcher2 {
|
||||
namespace Launcher {
|
||||
|
||||
public sealed class ZipWriter {
|
||||
|
||||
|
@ -2,7 +2,7 @@
|
||||
using System.IO;
|
||||
using ClassicalSharp;
|
||||
|
||||
namespace Launcher2 {
|
||||
namespace Launcher {
|
||||
|
||||
internal static class Program {
|
||||
|
||||
|
@ -6,7 +6,7 @@ using System.Runtime.InteropServices;
|
||||
using System.Threading;
|
||||
using ClassicalSharp.TexturePack;
|
||||
|
||||
namespace Launcher2.Updater {
|
||||
namespace Launcher.Updater {
|
||||
|
||||
public static class Patcher {
|
||||
|
||||
|
@ -1,6 +1,6 @@
|
||||
using System;
|
||||
|
||||
namespace Launcher2.Updater {
|
||||
namespace Launcher.Updater {
|
||||
|
||||
public static class Scripts {
|
||||
|
||||
|
@ -5,7 +5,7 @@ using System.IO;
|
||||
using ClassicalSharp;
|
||||
using OpenTK;
|
||||
|
||||
namespace Launcher2 {
|
||||
namespace Launcher {
|
||||
|
||||
public static class Client {
|
||||
|
||||
|
@ -1,6 +1,6 @@
|
||||
using System;
|
||||
|
||||
namespace Launcher2 {
|
||||
namespace Launcher {
|
||||
|
||||
public class ClientStartData {
|
||||
|
||||
|
@ -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;
|
||||
|
@ -2,7 +2,7 @@
|
||||
using System.Drawing;
|
||||
using ClassicalSharp;
|
||||
|
||||
namespace Launcher2 {
|
||||
namespace Launcher {
|
||||
|
||||
public static class LauncherSkin {
|
||||
|
||||
|
@ -1,7 +1,7 @@
|
||||
using System;
|
||||
using System.Security.Cryptography;
|
||||
|
||||
namespace Launcher2 {
|
||||
namespace Launcher {
|
||||
|
||||
public static class Secure {
|
||||
|
||||
|
@ -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 {
|
||||
|
||||
|
@ -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 {
|
||||
|
@ -1,6 +1,6 @@
|
||||
using System;
|
||||
|
||||
namespace Launcher2 {
|
||||
namespace Launcher {
|
||||
|
||||
public class ServerListEntry {
|
||||
|
||||
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user