Skip to content

Commit

Permalink
Allow .nme files to be deployed to acadnme. Let desktop apps use dyna…
Browse files Browse the repository at this point in the history
…mic ndll by default
  • Loading branch information
hughsando committed Aug 21, 2017
1 parent 18716da commit 3490dd5
Show file tree
Hide file tree
Showing 13 changed files with 172 additions and 198 deletions.
2 changes: 1 addition & 1 deletion acadnme/build.nmml
Expand Up @@ -46,7 +46,7 @@
<appIntent value="android.intent.category.LEANBACK_LAUNCHER" />
</android>

<assets from="../../bin/apps/" if="mobile||web" less="nocompile" >
<assets from="../bin/apps/" if="mobile||web" less="nocompile" >
<asset name="AcadnmeBoot.nme" />
<!--
<asset name="Flappybalt.nme" />
Expand Down
11 changes: 11 additions & 0 deletions acadnme/src/Acadnme.hx
Expand Up @@ -252,6 +252,17 @@ class Acadnme extends Sprite implements IScriptHandler
#end
}

@:keep // Used by boot
public static function getNmeVersion() : String
{
#if cppia
return "";
#else
return nme.Version.name;
#end
}


#if cpp
static public function __init__()
{
Expand Down
148 changes: 72 additions & 76 deletions samples/AcadnmeBoot/src/AcadnmeBoot.hx
Expand Up @@ -39,6 +39,7 @@ class AcadnmeBoot extends Screen implements IBoot
var serverEnabled:Bool;
var store:SharedObject;
var storeData:Dynamic;
var nmeVersion:String;

public function new()
{
Expand Down Expand Up @@ -80,18 +81,13 @@ class AcadnmeBoot extends Screen implements IBoot
titleBar.setItemLayout( new VerticalLayout().stretch() );
addWidget(titleBar);

var titleText = "";
for(engine in Acadnme.getEngines())
{
if (titleText!="")
titleText += " + ";
titleText += engine.name + "(v" + engine.version + ")";
}
if (titleText=="")
titleText = "No engine setting found";
var accent = 0xFFF3E0;
titleBar.addWidget( new TextLabel(titleText,{ textColor:0xffffff, fontSize:Skin.scale(24), bold:true, align:Layout.AlignCenterX|Layout.AlignTop }) );
titleBar.addWidget(new TextLabel(defaultDir,{ textColor:accent, align: Layout.AlignCenterY|Layout.AlignLeft }) );
nmeVersion = Acadnme.getNmeVersion();

var titleText = "Acadnme v" + nmeVersion;

var accent = 0xFFF3E0;
titleBar.addWidget( new TextLabel(titleText,{ textColor:0xffffff, fontSize:Skin.scale(24), bold:true, align:Layout.AlignCenterX|Layout.AlignTop }) );
titleBar.addWidget(new TextLabel(defaultDir,{ textColor:accent, align: Layout.AlignCenterY|Layout.AlignLeft }) );


var hostBar = new Widget({ align:Layout.AlignCenterY });
Expand Down Expand Up @@ -327,26 +323,26 @@ class AcadnmeBoot extends Screen implements IBoot
idx++;
}

var disabled = getHeaderError(details.engines);
var disabled = getVersionError(details.nme);

tileCtrl.add(createDetails(bitmap, defaultDir,details.name,details.developer, disabled, path));
}
}

public function getHeaderError(engines:Array<{name:String, version:String}>) : String
public function getVersionError(version:String) : String
{
if (engines==null || engines.length==0)
if (version==null)
return "No version";

var haveEngines:Array<{name:String, version:String}> = Acadnme.getEngines();
if (engines!=null && haveEngines!=null)
{
for(e in engines)
for(h in haveEngines)
if (e.name==h.name && e.version==h.version)
return null;
}
return "Version mismatch " + engines[0].name + " " + engines[0].version;
var parts = version.split(".");
if (parts.length!=3)
return "Bad version format :" + version;
var nmeParts = nmeVersion.split(".");
if (parts[0]!=nmeParts[0])
return "Bad major version : " + parts[0];

// check minor?
return null;
}


Expand All @@ -362,71 +358,72 @@ class AcadnmeBoot extends Screen implements IBoot
for( name in FileSystem.readDirectory(defaultDir))
{
var title = name;
var dir = defaultDir + "/" +name;
if (sys.FileSystem.isDirectory(dir))
var path = defaultDir + "/" +name;
var disabled = "No manifest";
var developer = "unknown";
var bitmap:Widget = null;
var header:Dynamic = null;
var script:String = null;

if (sys.FileSystem.isDirectory(path))
{
var script = dir+"/ScriptMain.cppia";
script = path+"/ScriptMain.cppia";
if (!FileSystem.exists(script))
continue;

var disabled = "No manifest";
var manifest = dir+"/manifest.json";
var developer = "unknown";
var manifest = path+"/manifest.json";
if (FileSystem.exists(manifest))
{
disabled = "Bad manifest";
try
{
var content = File.getContent(manifest);
var json = haxe.Json.parse(content);
if (json!=null)
{
var header = json.header;
if (header!=null)
{
var engines = header.engines;
if (disabled!=null)
disabled = getHeaderError(engines);
if (header.developer!=null)
developer = "developer:" + header.developer;
if (header.name!=null)
title = header.name;
}
}
header = haxe.Json.parse(content);
}
catch(e:Dynamic) { }
}
}
else
{
if (!StringTools.endsWith(name,".nme"))
continue;

script = path;
disabled = "Bad manifest";
header = nme.script.Nme.getFileHeader(path);
}

if (header!=null)
{
disabled = null;

var bitmap:Widget = null;
for(ext in ["svg", "png", "jpg"])
if (header.svgIcon!=null)
{
var icon = dir + "/icon." + ext;
if (sys.FileSystem.exists(icon))
{
if (ext=="svg")
{
try
{
var src = sys.io.File.getContent(icon);
if (src!=null)
bitmap = createSvgBmp(src);
}
}
else
bitmap = createBmp(icon);
}
if (bitmap!=null)
break;
bitmap = createSvgBmp(header.svgIcon);
}
if (bitmap==null)
bitmap = createSvgBmp( Assets.getString("default.svg") );
else if (header.bmpIcon!=null)
{
var bytes = haxe.crypto.Base64.decode(header.bmpIcon);
bitmap = createBmp(bytes);
}

if (header.developer!=null)
developer = "developer:" + header.developer;

var path = disabled==null ? script : null;
if (path!=null)
launchScript[name] = path;
tileCtrl.add(createDetails(bitmap, dir,title,developer,disabled, path));
if (header.name!=null)
title = header.name;

disabled = getVersionError(header.nme);
}

if (bitmap==null)
bitmap = createSvgBmp( Assets.getString("default.svg") );

var path = disabled==null ? script : null;
if (path!=null)
launchScript[name] = path;

tileCtrl.add(createDetails(bitmap, path,title,developer,disabled, path));
}
}
catch(e:Dynamic)
Expand Down Expand Up @@ -473,14 +470,11 @@ class AcadnmeBoot extends Screen implements IBoot
}
}
}



}

public function createDetails(bitmap:Widget, dir:String, name:String, developer:String, inDisabled:String, path:String)
{
var result = new gm2d.ui.Control(["SimpleTile"],{ onEnter:function() onSelect(path) } );
var result = new gm2d.ui.Control(["SimpleTile"],{ onEnter:function() onSelect(path), onClick:function() onSelect(path) } );
result.addChild(bitmap);
var row = new HorizontalLayout();
row.add(bitmap.getLayout());
Expand All @@ -504,8 +498,10 @@ class AcadnmeBoot extends Screen implements IBoot
return result;
}

public function createBmp(filename:String) : Widget
public function createBmp(bytes:haxe.io.Bytes) : Widget
{
//var bmp = renderer.renderBitmap( new Rectangle(0,0,size/scale,size/scale), scale );
//return new Image(bmp, { padding:3, wantsFocus:false } );
return null;
}

Expand Down
2 changes: 1 addition & 1 deletion src/nme/Lib.hx
Expand Up @@ -13,7 +13,7 @@ import nme.Loader;
import nme.app.Application;
import haxe.CallStack;

#if (toolkit && cpp && !cppia)
#if (nme_static && cpp && !cppia)
import nme.StaticNme;
#end

Expand Down
2 changes: 1 addition & 1 deletion src/nme/Version.hx
@@ -1,4 +1,4 @@
package nme;
class Version {
public static inline var name="5.0.0";
public static inline var name="6.0.0";
}
2 changes: 1 addition & 1 deletion src/nme/script/Client.hx
Expand Up @@ -98,7 +98,7 @@ class Client
var parts = inHostName.split("@");
var hostName = parts.pop();
var password = parts.join("@");
trace("HOSR " + hostName);
trace("HOST " + hostName);
trace("pass " + password);
var host = new Host(hostName);
if (log!=null)
Expand Down
3 changes: 1 addition & 2 deletions src/nme/script/Nme.hx
Expand Up @@ -25,11 +25,10 @@ class Nme
public static function getHeader(input:haxe.io.Input)
{
var magic = input.readString(4);
if (magic!="NME!")
if (magic!="NME$")
throw "NME - bad magic";
input.bigEndian = false;
var headerLen = input.readInt32();
var zipLen = input.readInt32();
return haxe.Json.parse( input.readString(headerLen) );
}

Expand Down
13 changes: 9 additions & 4 deletions src/nme/script/Server.hx
Expand Up @@ -84,8 +84,6 @@ class Server
var docsDir = nme.filesystem.File.documentsDirectory.nativePath;
//directory = sys.FileSystem.fullPath( docsDir ) + "/" + inEngineName;
directory = docsDir + "/" + inEngineName;
trace("docs -> " + docsDir);
trace("Directory -> " + directory);
try
{
sys.FileSystem.createDirectory(directory);
Expand Down Expand Up @@ -337,7 +335,7 @@ trace("Directory -> " + directory);
case "get","aget":
var async = cmd=="aget";
if (inCommand[0]=="" || inCommand[0]==null)
return "usage: set name";
return "usage: get name";
else if (handler==null && !async)
return "Error: no handler";
else
Expand Down Expand Up @@ -449,7 +447,14 @@ trace("Directory -> " + directory);
var message = restartOnScript ? "restart" : "ok";
toSocket.writeInt32(message.length);
toSocket.writeString(message);
var fullPath = directory+"/"+app+"/ScriptMain.cppia";

var fullPath:String = null;
var nmeName = directory+"/"+app;
log("nmeName " + nmeName);
if (FileSystem.exists(nmeName) && !FileSystem.isDirectory(nmeName) )
fullPath = nmeName;
else
fullPath = directory+"/"+app+"/ScriptMain.cppia";
log("fullPath " + fullPath);

if (restartOnScript)
Expand Down
2 changes: 1 addition & 1 deletion tools/nme/src/platforms/AndroidPlatform.hx
Expand Up @@ -142,7 +142,7 @@ class AndroidPlatform extends Platform
context.ANDROID_INSTALL_LOCATION = project.androidConfig.installLocation;
context.DEBUGGABLE = project.debug;

var staticNme = project.hasDef("toolkit");
var staticNme = project.isStaticNme();
for(ndll in project.ndlls)
if (ndll.name=="nme" && ndll.isStatic)
staticNme = true;
Expand Down

0 comments on commit 3490dd5

Please sign in to comment.