From ea66d1c191a8f06a18944a79991469797c8a3f5f Mon Sep 17 00:00:00 2001 From: Craig Everett Date: Fri, 10 Jan 2020 14:20:04 +0900 Subject: [PATCH] WIP: Make external program interface libe in 'zx', add desktop integration --- zomp/lib/otpr/zx/0.7.2/src/zx.erl | 55 +++++++++++++++++++++++++++---- 1 file changed, 49 insertions(+), 6 deletions(-) diff --git a/zomp/lib/otpr/zx/0.7.2/src/zx.erl b/zomp/lib/otpr/zx/0.7.2/src/zx.erl index 784fb29..aadd45e 100644 --- a/zomp/lib/otpr/zx/0.7.2/src/zx.erl +++ b/zomp/lib/otpr/zx/0.7.2/src/zx.erl @@ -131,6 +131,9 @@ do(["--version"]) -> do(["run", PackageString | ArgV]) -> ok = zx_daemon:connect(), not_done(run(PackageString, ArgV)); +do(["integrate", "desktop", PackageString]) -> + ok = zx_daemon:connect(), + done(zx_local:integrate(PackageString)); do(["list", "realms"]) -> done(zx_local:list_realms()); do(["list", "packages", Realm]) -> @@ -590,12 +593,11 @@ list_type(Realm, Type) -> zx_daemon:wait_result(ID). --spec list_type_ar(Type) -> Outcome +-spec list_type_ar(Type) -> Result when Type :: package_type(), - Outcome :: {ok, [Result]} + Result :: {ok, [package_id()]} | {error, Unexpected, [Result]} | {error, Reason}, - Result :: {id(), [package_id()]}, Unexpected :: {unexpected, {result, id(), term()}}, Reason :: bad_realm | bad_package @@ -621,12 +623,51 @@ list_type_ar(Targets) -> Error -> Error end. +scrub_errors([{ID, _} | Index], [{ID, {ok, PackageIDs}} | Results], Acc) -> + scrub_errors(Index, Results, [PackageIDs | Acc]); +scrub_errors([{ID, Realm} | Index], [{ID, Error} | Results], Acc) -> + ok = tell(warning, "Received weird result from realm ~tp: ~tp", [Realm, Error]), + scrub_errors(Index, Results, Acc); +scrub_errors([], [], Acc) -> + lists:append(Acc). --spec describe(Target) -> Result +-spec describe(package_id()) -> Result when Target :: package_id(), - Result :: + Result :: {ok, description()} + | {error, Reason}, + Reason :: bad_realm + | bad_package + | bad_version + | timeout + | network. +describe(PackageID) -> + {ok, ID} = zx_daemon:describe(PackageID), + zx_daemon:wait_result(ID). + + +-spec describe_plural([package_id()]) -> Result + when Result :: {ok, [description()]} + | {error, Unexpected, [Result]} + | {error, Reason}, + Unexpected :: {unexpected, {result, id(), term()}}, + Reason :: bad_realm + | bad_package + | bad_version + | timeout + | network + | {unexpected, Message :: string()}. + +describe_plural(PackageIDs) ->odescribe(PackageIDs) -> + Describe = + fun(PackageID) -> + {ok, ID} = zx_daemon:describe(PackageID), + ID + end, + IDs = lists:map(Describe, PackageIDs), + {ok, Descriptions} = zx_daemon:wait_results(IDs), + {ok, [Description || {_, {ok, Description}} <- Descriptions]}. %%% Execution of application @@ -947,6 +988,7 @@ usage_header() -> usage_user() -> "User Actions:~n" " zx run PackageID [Args]~n" + " zx integrate desktop PackageID~n" " zx list realms~n" " zx list packages Realm~n" " zx list versions PackageID~n" @@ -958,7 +1000,8 @@ usage_user() -> " zx import realm RealmFile~n" " zx drop realm Realm~n" " zx add mirror [Address [Port]]~n" - " zx drop mirror [Address [Port]]~n~n". + " zx drop mirror [Address [Port]]~n~n" + " zx --version~n~n". usage_dev() -> "Developer/Packager/Maintainer Actions:~n"