Browse Source

Adding build output modal, ant debug running for Android deploy with output

Josh Engebretson 10 years ago
parent
commit
8ca337b400

+ 12 - 0
Script/AtomicEditor/ui/modal/ModalOps.ts

@@ -11,6 +11,7 @@ import ManageLicense = require("./license/ManageLicense");
 import ProWindow = require("./license/ProWindow");
 
 import BuildWindow = require("./build/BuildWindow");
+import BuildOutput= require("./build/BuildOutput");
 import BuildSettingsWindow = require("./build/BuildSettingsWindow");
 
 import ResourceSelection = require("./ResourceSelection");
@@ -188,6 +189,17 @@ class ModalOps extends Atomic.ScriptObject {
 
     }
 
+    showBuildOutput(buildBase:ToolCore.BuildBase) {
+
+        if (this.show()) {
+
+            this.opWindow = new BuildOutput(buildBase);
+
+        }
+
+    }
+
+
     showActivationSuccessWindow() {
 
         if (this.show()) {

+ 37 - 0
Script/AtomicEditor/ui/modal/build/BuildOutput.ts

@@ -0,0 +1,37 @@
+
+import EditorUI = require("../../EditorUI");
+import ModalWindow = require("../ModalWindow");
+
+class BuildOutput extends ModalWindow {
+
+    constructor(buildBase:ToolCore.BuildBase) {
+
+        super();
+
+        this.buildBase = buildBase;
+
+        this.init("Program Output", "AtomicEditor/editor/ui/programoutput.tb.txt");
+
+        this.outputField = <Atomic.UIEditField> this.getWidget("output");
+
+        this.resizeToFitContent();
+        this.center();
+
+        this.subscribeToEvent(buildBase, "BuildOutput", (ev:ToolCore.BuildOutputEvent) => {
+
+          console.log(ev.text);
+          this.text += ev.text;
+          this.outputField.text = this.text;
+          this.outputField.scrollTo(0, 0xffffff);
+
+        });
+
+    }
+
+    text:string;
+    buildBase:ToolCore.BuildBase;
+    outputField:Atomic.UIEditField;
+
+}
+
+export = BuildOutput;

+ 5 - 2
Script/AtomicEditor/ui/modal/build/BuildWindow.ts

@@ -51,8 +51,8 @@ class BuildWindow extends ModalWindow {
             }
 
             if (ev.target.id == "build") {
-                this.build();
                 this.hide();
+                this.build();
                 return true;
             }
 
@@ -76,7 +76,7 @@ class BuildWindow extends ModalWindow {
         var buildSystem = ToolCore.buildSystem;
         var toolSystem = ToolCore.toolSystem;
 
-        toolSystem.setCurrentPlatform(toolSystem.getPlatformByName("WEB").platformID);
+        toolSystem.setCurrentPlatform(toolSystem.getPlatformByName("ANDROID").platformID);
 
         buildSystem.buildPath = "/Users/josh/Desktop/MyBuilds/";
 
@@ -84,6 +84,9 @@ class BuildWindow extends ModalWindow {
         var platform = toolSystem.currentPlatform;
 
         var buildBase = platform.newBuild(project);
+
+        EditorUI.getModelOps().showBuildOutput(buildBase);
+
         buildSystem.queueBuild(buildBase);
         buildSystem.startNextBuild();
 

+ 18 - 0
Script/TypeScript/AtomicWork.d.ts

@@ -236,6 +236,24 @@ declare module ToolCore {
 
     }
 
+    export interface BuildOutputEvent {
+
+        text:string;
+
+    }
+
+    export interface BuildCompleteEvent {
+
+        platformID:number;
+
+    }
+
+    export interface BuildFailedEvent {
+
+        platformID:number;
+        message:string;
+
+    }
 
     export var toolEnvironment: ToolEnvironment;
     export var toolSystem: ToolSystem;

+ 60 - 2
Source/ToolCore/Build/BuildAndroid.cpp

@@ -8,11 +8,13 @@
 
 #include "../ToolSystem.h"
 #include "../ToolEnvironment.h"
+#include "../Subprocess/SubprocessSystem.h"
 #include "../Project/Project.h"
 
 #include "AndroidProjectGenerator.h"
 
 #include "BuildSystem.h"
+#include "BuildEvents.h"
 #include "BuildAndroid.h"
 
 namespace ToolCore
@@ -28,6 +30,58 @@ BuildAndroid::~BuildAndroid()
 
 }
 
+void BuildAndroid::SendBuildFailure(const String& message)
+{
+
+    VariantMap buildError;
+    buildError[BuildFailed::P_PLATFORMID] = PLATFORMID_ANDROID;
+    buildError[BuildFailed::P_MESSAGE] = message;
+    SendEvent(E_BUILDFAILED, buildError);
+
+}
+
+void BuildAndroid::RunAntDebug()
+{
+    ToolEnvironment* tenv = GetSubsystem<ToolEnvironment>();
+    SubprocessSystem* subs = GetSubsystem<SubprocessSystem>();
+    ToolPrefs* tprefs = tenv->GetToolPrefs();
+
+    Poco::Process::Env env;
+
+#ifdef ATOMIC_PLATFORM_OSX
+    String antCommand = tprefs->GetAntPath();
+    Vector<String> args;
+    args.Push("debug");
+#else
+    // C:\ProgramData\Oracle\Java\javapath;
+    Vector<String> args;
+    String antCommand = "cmd";
+    String antPath = prefs->GetAntPath() + "/ant.bat";
+    env["JAVA_HOME"] = prefs->GetJDKRootPath().CString();
+    // ant is a batch file on windows, so have to run with cmd /c
+    args.Push("/c");
+    args.Push("\"" + antPath + "\"");
+    args.Push("debug");
+#endif
+
+    currentBuildPhase_ = AntBuildDebug;
+    Subprocess* subprocess = subs->Launch(antCommand, args, buildPath_, env);
+
+    if (!subprocess)
+    {
+        SendBuildFailure("BuildFailed::RunAntDebug");
+        return;
+    }
+
+    VariantMap buildOutput;
+    buildOutput[BuildOutput::P_TEXT] = "<color #D4FB79>Starting Android Deployment</color>\n\n";
+    SendEvent(E_BUILDOUTPUT, buildOutput);
+
+    //SubscribeToEvent(subprocess, E_SUBPROCESSCOMPLETE, HANDLER(BuildAndroid, HandleEvent));
+    SubscribeToEvent(subprocess, E_SUBPROCESSOUTPUT, HANDLER(BuildBase, HandleSubprocessOutputEvent));
+
+}
+
 void BuildAndroid::Initialize()
 {
     ToolSystem* tsystem = GetSubsystem<ToolSystem>();
@@ -48,6 +102,7 @@ void BuildAndroid::Initialize()
 
     BuildResourceEntries();
 }
+
 void BuildAndroid::Build(const String& buildPath)
 {
     ToolEnvironment* tenv = GetSubsystem<ToolEnvironment>();
@@ -102,11 +157,14 @@ void BuildAndroid::Build(const String& buildPath)
 
     if (!gen.Generate())
     {
+        SendBuildFailure(gen.GetErrorText());
         return;
     }
 
-    BuildSystem* buildSystem = GetSubsystem<BuildSystem>();
-    buildSystem->BuildComplete(PLATFORMID_ANDROID, buildPath_);
+    RunAntDebug();
+
+    //BuildSystem* buildSystem = GetSubsystem<BuildSystem>();
+    //buildSystem->BuildComplete(PLATFORMID_ANDROID, buildPath_);
 
     //fileSystem->SystemCommandAsync("/Applications/Firefox.app/Contents/MacOS/firefox");
 

+ 15 - 1
Source/ToolCore/Build/BuildAndroid.h

@@ -26,8 +26,22 @@ public:
 
 protected:
 
-    void Initialize();
+    enum BuildPhase
+    {
+        AndroidUpdateProject,
+        AntBuildDebug,
+        ADBListDevices,
+        ADBInstall,
+        ADBStartActivity
+    };
+
+    void RunAntDebug();
+
+    void SendBuildFailure(const String& message);
 
+    BuildPhase currentBuildPhase_;
+
+    void Initialize();
 
 };
 

+ 13 - 0
Source/ToolCore/Build/BuildBase.cpp

@@ -5,9 +5,11 @@
 #include <Atomic/IO/Log.h>
 #include <Atomic/IO/FileSystem.h>
 
+#include "../Subprocess/SubprocessSystem.h"
 #include "../Project/Project.h"
 #include "../ToolEnvironment.h"
 
+#include "BuildEvents.h"
 #include "BuildBase.h"
 #include "ResourcePackager.h"
 
@@ -46,6 +48,17 @@ void BuildBase::BuildError(const String& error)
     buildErrors_.Push(error);
 }
 
+void BuildBase::HandleSubprocessOutputEvent(StringHash eventType, VariantMap& eventData)
+{
+    // E_SUBPROCESSOUTPUT
+    const String& text = eventData[SubprocessOutput::P_TEXT].GetString();
+
+    // convert to a build output event and forward to subscribers
+    VariantMap buildOutputData;
+    buildOutputData[BuildOutput::P_TEXT] = text;
+    SendEvent(E_BUILDOUTPUT, buildOutputData);
+}
+
 void BuildBase::GetDefaultResourcePaths(Vector<String>& paths)
 {
     paths.Clear();

+ 3 - 0
Source/ToolCore/Build/BuildBase.h

@@ -39,6 +39,9 @@ public:
     void BuildWarn(const String& warning);
     void BuildError(const String& error);
 
+    /// Converts subprocess output event to a buildoutput event
+    void HandleSubprocessOutputEvent(StringHash eventType, VariantMap& eventData);
+
 protected:
 
     void GenerateResourcePackage(const String& resourcePackagePath);

+ 5 - 0
Source/ToolCore/Build/BuildEvents.h

@@ -16,6 +16,11 @@ EVENT(E_BUILDCOMPLETE, BuildComplete)
     PARAM(P_PLATFORMID, PlatformID); // unsigned (PLATFORMID)
 }
 
+EVENT(E_BUILDOUTPUT, BuildOutput)
+{
+    PARAM(P_TEXT, Text); // string
+}
+
 EVENT(E_BUILDFAILED, BuildFailed)
 {
     PARAM(P_PLATFORMID, PlatformID); // unsigned (PLATFORMID)

+ 12 - 0
Source/ToolCore/ToolPrefs.cpp

@@ -20,6 +20,18 @@ ToolPrefs::~ToolPrefs()
 
 }
 
+const String& ToolPrefs::GetAntPath()
+{
+#ifdef ATOMIC_PLATFORM_OSX
+    static String defaultAntPath("/usr/local/bin/ant");
+    if (!antPath_.Length())
+        return defaultAntPath;
+    return antPath_;
+#else
+    return antPath_;
+#endif
+}
+
 String ToolPrefs::GetPrefsPath()
 {
     FileSystem* fs = GetSubsystem<FileSystem>();

+ 1 - 1
Source/ToolCore/ToolPrefs.h

@@ -18,7 +18,7 @@ public:
 
     const String& GetAndroidSDKPath() { return androidSDKPath_; }
     const String& GetJDKRootPath() { return jdkRootPath_; }
-    const String& GetAntPath() { return antPath_; }
+    const String& GetAntPath();
 
     void SetAndroidSDKPath(const String& path) { androidSDKPath_ = path; }
     void SetJDKRootPath(const String& path) { jdkRootPath_ = path; }