elixir-desktop / desktop-example-app Goto Github PK
View Code? Open in Web Editor NEWElixir Sample App using the Desktop library with LiveView to create a desktop app
License: MIT License
Elixir Sample App using the Desktop library with LiveView to create a desktop app
License: MIT License
Hi! First: This looks like a super cool project! Thank you so much for doing this.
In the example I don't understand yet how to start a MacOS app. Do I need Xcode like for iOS apps? But then I didn't see a Xcode project. Thanks again!
App looks like this
But when clicking on add it show this:
[error] Process #PID<0.689.0> terminating
** (exit) {{{%Phoenix.Router.NoRouteError{conn: %Plug.Conn{adapter: {Plug.Cowboy.Conn, :...}, assigns: %{}, body_params: %{}, cookies: %{"_todo_key" => "vY5Vn1GZASlJGbeQX8SVxejE1N75JaDaD9vtMq0oQzNqMFhNkGtZvq6/mMg4V+m2N7UoT8A7F1cppGza7FoiFvIQqbaKe2TQx1IAHFF25uI2oDsfdiaTF8dRk84tgVnq"}, halted: false, host: "localhost", method: "GET", owner: #PID<0.689.0>, params: %{}, path_info: ["assets", "app.js"], path_params: %{}, port: 35957, private: %{TodoWeb.Router => {[], %{}}, :before_send => [#Function<0.77458138/1 in Plug.Session.before_send/2>, #Function<1.26106830/1 in Phoenix.LiveReloader.before_send_inject_reloader/3>], :phoenix_endpoint => TodoWeb.Endpoint, :phoenix_router => TodoWeb.Router, :plug_session => %{"_csrf_token" => "Bz-cj3L8PyPRhBoF0y93cbGE", "user" => true}, :plug_session_fetch => :done}, query_params: %{}, query_string: "", remote_ip: {127, 0, 0, 1}, req_cookies: %{"_todo_key" => "vY5Vn1GZASlJGbeQX8SVxejE1N75JaDaD9vtMq0oQzNqMFhNkGtZvq6/mMg4V+m2N7UoT8A7F1cppGza7FoiFvIQqbaKe2TQx1IAHFF25uI2oDsfdiaTF8dRk84tgVnq"}, req_headers: [{"accept", "*/*"}, {"accept-encoding", "gzip, deflate"}, {"accept-language", "en-US"}, {"connection", "Keep-Alive"}, {"cookie", "_todo_key=vY5Vn1GZASlJGbeQX8SVxejE1N75JaDaD9vtMq0oQzNqMFhNkGtZvq6/mMg4V+m2N7UoT8A7F1cppGza7FoiFvIQqbaKe2TQx1IAHFF25uI2oDsfdiaTF8dRk84tgVnq"}, {"host", "localhost:35957"}, {"referer", "http://localhost:35957/?text=dfgdfgd"}, {"user-agent", "Mozilla/5.0 (X11; Ubuntu; Linux x86_64) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.0 Safari/605.1.15"}], request_path: "/assets/app.js", resp_body: nil, resp_cookies: %{}, resp_headers: [{"cache-control", "max-age=0, private, must-revalidate"}, {"x-request-id", "FuRMk1IYPOmVgRoAAADI"}], scheme: :http, script_name: [], secret_key_base: :..., state: :unset, status: nil}, message: "no route found for GET /assets/app.js (TodoWeb.Router)", plug_status: 404, router: TodoWeb.Router}, [{TodoWeb.Router, :call, 2, [file: 'lib/phoenix/router.ex', line: 406]}, {TodoWeb.Endpoint, :plug_builder_call, 2, [file: 'lib/todo_web/endpoint.ex', line: 1]}, {TodoWeb.Endpoint, :"call (overridable 3)", 2, [file: 'lib/plug/debugger.ex', line: 136]}, {TodoWeb.Endpoint, :call, 2, [file: 'lib/todo_web/endpoint.ex', line: 1]}, {Phoenix.Endpoint.Cowboy2Handler, :init, 4, [file: 'lib/phoenix/endpoint/cowboy2_handler.ex', line: 43]}, {:cowboy_handler, :execute, 2, [file: '/home/tyoc213/git_repos/hub/elixir-desktop-example-app/deps/cowboy/src/cowboy_handler.erl', line: 37]}, {:cowboy_stream_h, :execute, 3, [file: '/home/tyoc213/git_repos/hub/elixir-desktop-example-app/deps/cowboy/src/cowboy_stream_h.erl', line: 306]}, {:cowboy_stream_h, :request_process, 3, [file: '/home/tyoc213/git_repos/hub/elixir-desktop-example-app/deps/cowboy/src/cowboy_stream_h.erl', line: 295]}, {:proc_lib, :init_p_do_apply, 3, [file: 'proc_lib.erl', line: 226]}]}, {TodoWeb.Endpoint, :call, [%Plug.Conn{adapter: {Plug.Cowboy.Conn, :...}, assigns: %{}, body_params: %Plug.Conn.Unfetched{aspect: :body_params}, cookies: %Plug.Conn.Unfetched{aspect: :cookies}, halted: false, host: "localhost", method: "GET", owner: #PID<0.689.0>, params: %Plug.Conn.Unfetched{aspect: :params}, path_info: ["assets", "app.js"], path_params: %{}, port: 35957, private: %{}, query_params: %Plug.Conn.Unfetched{aspect: :query_params}, query_string: "", remote_ip: {127, 0, 0, 1}, req_cookies: %Plug.Conn.Unfetched{aspect: :cookies}, req_headers: [{"accept", "*/*"}, {"accept-encoding", "gzip, deflate"}, {"accept-language", "en-US"}, {"connection", "Keep-Alive"}, {"cookie", "_todo_key=vY5Vn1GZASlJGbeQX8SVxejE1N75JaDaD9vtMq0oQzNqMFhNkGtZvq6/mMg4V+m2N7UoT8A7F1cppGza7FoiFvIQqbaKe2TQx1IAHFF25uI2oDsfdiaTF8dRk84tgVnq"}, {"host", "localhost:35957"}, {"referer", "http://localhost:35957/?text=dfgdfgd"}, {"user-agent", "Mozilla/5.0 (X11; Ubuntu; Linux x86_64) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.0 Safari/605.1.15"}], request_path: "/assets/app.js", resp_body: nil, resp_cookies: %{}, resp_headers: [{"cache-control", "max-age=0, private, must-revalidate"}], scheme: :http, script_name: [], secret_key_base: nil, state: :unset, status: nil}, []]}}, []}
Initial Call: :cowboy_stream_h.request_process/3
Ancestors: [#PID<0.642.0>, #PID<0.509.0>, #PID<0.508.0>, TodoWeb.Endpoint, TodoWeb.Sup, TodoApp, #PID<0.431.0>]
Message Queue Length: 0
Messages: []
Links: [#PID<0.642.0>]
Dictionary: ["$logger_metadata$": %{request_id: "FuRMk1IYPOmVgRoAAADI"}]
Trapping Exits: false
Status: :running
Heap Size: 17731
Stack Size: 29
Reductions: 69580
Following this issue:
#14
I installed a fresh version of Ubuntu in a VM:
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 22.04.1 LTS
Release: 22.04
Codename: jammy
I am using the following versions:
elixir v1.13-otp-24 /home/fl4m3/.tool-versions
erlang 24.3.4 /home/fl4m3/.tool-versions
nodejs 16.17.0 /home/fl4m3/.tool-versions
sqlite 3.39.2 /home/fl4m3/.tool-versions
I also installed wxWidgets 3.2.0 from Github (compiled for my version):
https://github.com/wxWidgets/wxWidgets
More specifically, I installed the base version following this guide:
https://github.com/wxWidgets/wxWidgets/tree/master/docs/base
After that I followed the normal instructions:
mix deps.get
cd assets
npm install
cd ..
mix assets.deploy
./run
The first time I launch the app it crashes:
Using the browser seems to work, but I also get some errors:
[notice] Casting {:ok,
[
{:dbus_message,
{:dbus_header, 108, 3, 0, 1, 96, 24,
[
{4, "org.freedesktop.DBus.Error.UnknownProperty"},
{5, 2590},
{6, ":1.30"},
{8, "s"}
]},
"Property IconAccessibleDesc not found in interface org.kde.StatusNotifierItem at given path"}
], ""}
@dominicletz saw your video on this very nice work. Some questions are below.
For updating -- you might want to take a look at the https://www.nerves-project.org/ which has a nice method to roll out updates.
The context menu is empty in KDE, I use kubuntu 20.04, also tried kubuntu 22.04, and ubuntu, in ubuntu it works fine, but in kde it is always empty no matter the version, also tried to compile the wx to the latest version but the bug continues.
OS: Kubuntu 20.04
Elixir: 1.15.4
Erlang: 25.3
The buttons work as expected, but the text is empty.
I guess basically
Error: Can't find stylesheet to import.
╷
2 │ @use "../node_modules/nprogress/nprogress.css";
Full log:
./run
Erlang/OTP 24 [erts-12.3] [source] [64-bit] [smp:16:16] [ds:16:16:10] [async-threads:1] [jit]
warning: use Mix.Config is deprecated. Use the Config module instead
config/dev.exs:1
12:59:48.834 [info] Application eex started at :nonode@nohost
12:59:48.839 [info] Application mime started at :nonode@nohost
12:59:48.839 [info] Child Agent of Supervisor Plug.Crypto.Application started
Pid: #PID<0.282.0>
Start Call: Agent.start_link(#Function<0.16488927/0 in Plug.Crypto.Application."-fun.start_crypto_keys/0-">)
Restart: :permanent
Shutdown: 5000
Type: :worker
12:59:48.842 [info] Application plug_crypto started at :nonode@nohost
12:59:48.844 [info] Child :telemetry_handler_table of Supervisor :telemetry_sup started
Pid: #PID<0.287.0>
Start Call: :telemetry_handler_table.start_link()
Restart: :permanent
Shutdown: 5000
Type: :worker
12:59:48.844 [info] Application telemetry started at :nonode@nohost
12:59:48.845 [info] Child Plug.Upload of Supervisor Plug.Application started
Pid: #PID<0.292.0>
Start Call: Plug.Upload.start_link([])
Restart: :permanent
Shutdown: 5000
Type: :worker
12:59:48.845 [info] Application plug started at :nonode@nohost
12:59:48.847 [info] Child :pg of Supervisor #PID<0.296.0> (Supervisor.Default) started
Pid: #PID<0.297.0>
Start Call: :pg.start_link(Phoenix.PubSub)
Restart: :permanent
Shutdown: 5000
Type: :worker
12:59:48.847 [info] Application phoenix_pubsub started at :nonode@nohost
12:59:48.847 [info] Application phoenix_view started at :nonode@nohost
12:59:48.852 [info] Child Phoenix.CodeReloader.Server of Supervisor Phoenix.Supervisor started
Pid: #PID<0.303.0>
Start Call: Phoenix.CodeReloader.Server.start_link([])
Restart: :permanent
Shutdown: 5000
Type: :worker
12:59:48.852 [info] Child Phoenix.Transports.LongPoll.Supervisor of Supervisor Phoenix.Supervisor started
Pid: #PID<0.304.0>
Start Call: DynamicSupervisor.start_link([name: Phoenix.Transports.LongPoll.Supervisor, strategy: :one_for_one])
Restart: :permanent
Shutdown: :infinity
Type: :supervisor
12:59:48.852 [info] Application phoenix started at :nonode@nohost
12:59:48.863 [info] Child Gettext.ExtractorAgent of Supervisor #PID<0.308.0> (Supervisor.Default) started
Pid: #PID<0.309.0>
Start Call: Gettext.ExtractorAgent.start_link([])
Restart: :permanent
Shutdown: 5000
Type: :worker
12:59:48.863 [info] Application gettext started at :nonode@nohost
12:59:48.874 [info] Child :disk_log_sup of Supervisor :kernel_safe_sup started
Pid: #PID<0.310.0>
Start Call: :disk_log_sup.start_link()
Restart: :permanent
Shutdown: 1000
Type: :supervisor
12:59:48.874 [info] Child :disk_log_server of Supervisor :kernel_safe_sup started
Pid: #PID<0.311.0>
Start Call: :disk_log_server.start_link()
Restart: :permanent
Shutdown: 2000
Type: :worker
[error] `inotify-tools` is needed to run `file_system` for your system, check https://github.com/rvoicilas/inotify-tools/wiki for more information about how to install it. If it's already installed but not be found, appoint executable file with `config.exs` or `FILESYSTEM_FSINOTIFY_EXECUTABLE_FILE` env.
[warning] Could not start Phoenix live-reload because we cannot listen to the file system.
You don't need to worry! This is an optional feature used during development to
refresh your browser when you save files and it does not affect production.
[error] Exqlite.Connection (#PID<0.440.0>) failed to connect: ** (Exqlite.Error) database is locked
[notice] Connecting to UNIX socket: "/run/user/1000/bus"
[notice] DBUS auth: sending initial data
[notice] Got GUID '13dbdbd894f0533e43d9ac976251aa4a' from the server
[notice] Succesfully negotiated UNIX FD passing
[notice] Calling "/"::"org.freedesktop.DBus".:Hello([])
[notice] Calling {:ok,
[
{:dbus_message,
{:dbus_header, 108, 1, 0, 1, 0, 1,
[
{1, "/"},
{6, "org.freedesktop.DBus"},
{2, "org.freedesktop.DBus"},
{3, "Hello"}
]}, :undefined}
], ""}
[notice] Received {:dbus_message,
{:dbus_header, 108, 2, 1, 1, 11, 1,
[{6, ":1.388"}, {5, 1}, {8, "s"}, {7, "org.freedesktop.DBus"}]}, ":1.388"}
[notice] Hello connection id: ":1.388"
[notice] Received {:dbus_message,
{:dbus_header, 108, 4, 1, 1, 11, 2,
[
{1, "/org/freedesktop/DBus"},
{2, "org.freedesktop.DBus"},
{3, "NameAcquired"},
{6, ":1.388"},
{8, "s"},
{7, "org.freedesktop.DBus"}
]}, ":1.388"}
[notice] Calling {:ok,
[
{:dbus_message,
{:dbus_header, 108, 1, 0, 1, 34, 2,
[
{8, "s"},
{1, "/org/freedesktop/DBus"},
{6, "org.freedesktop.DBus"},
{2, "org.freedesktop.DBus"},
{3, "NameHasOwner"}
]}, "org.kde.StatusNotifierWatcher"}
], ""}
[notice] Received {:dbus_message,
{:dbus_header, 108, 2, 1, 1, 4, 3,
[{6, ":1.388"}, {5, 2}, {8, "b"}, {7, "org.freedesktop.DBus"}]}, true}
[notice] Calling {:ok,
[
{:dbus_message,
{:dbus_header, 108, 1, 0, 1, 0, 3,
[
{1, "/"},
{6, "org.kde.StatusNotifierWatcher"},
{2, "org.freedesktop.DBus.Introspectable"},
{3, "Introspect"}
]}, :undefined}
], ""}
[notice] Received {:dbus_message,
{:dbus_header, 108, 2, 1, 1, 267, 4360,
[{6, ":1.388"}, {8, "s"}, {5, 3}, {7, ":1.38"}]},
"<!DOCTYPE node PUBLIC \"-//freedesktop//DTD D-BUS Object Introspection 1.0//EN\"\n \"http://www.freedesktop.org/standards/dbus/1.0/introspect.dtd\">\n<!-- GDBus 2.64.6 -->\n<node>\n <node name=\"StatusNotifierWatcher\"/>\n <node name=\"org\"/>\n</node>\n"}
[notice] Calling {:ok,
[
{:dbus_message,
{:dbus_header, 108, 1, 0, 1, 0, 4,
[
{1, "/StatusNotifierWatcher"},
{6, "org.kde.StatusNotifierWatcher"},
{2, "org.freedesktop.DBus.Introspectable"},
{3, "Introspect"}
]}, :undefined}
], ""}
[notice] Received {:dbus_message,
{:dbus_header, 108, 2, 1, 1, 2441, 4361,
[{6, ":1.388"}, {8, "s"}, {5, 4}, {7, ":1.38"}]},
"<!DOCTYPE node PUBLIC \"-//freedesktop//DTD D-BUS Object Introspection 1.0//EN\"\n \"http://www.freedesktop.org/standards/dbus/1.0/introspect.dtd\">\n<!-- GDBus 2.64.6 -->\n<node>\n <interface name=\"org.freedesktop.DBus.Properties\">\n <method name=\"Get\">\n <arg type=\"s\" name=\"interface_name\" direction=\"in\"/>\n <arg type=\"s\" name=\"property_name\" direction=\"in\"/>\n <arg type=\"v\" name=\"value\" direction=\"out\"/>\n </method>\n <method name=\"GetAll\">\n <arg type=\"s\" name=\"interface_name\" direction=\"in\"/>\n <arg type=\"a{sv}\" name=\"properties\" direction=\"out\"/>\n </method>\n <method name=\"Set\">\n <arg type=\"s\" name=\"interface_name\" direction=\"in\"/>\n <arg type=\"s\" name=\"property_name\" direction=\"in\"/>\n <arg type=\"v\" name=\"value\" direction=\"in\"/>\n </method>\n <signal name=\"PropertiesChanged\">\n <arg type=\"s\" name=\"interface_name\"/>\n <arg type=\"a{sv}\" name=\"changed_properties\"/>\n <arg type=\"as\" name=\"invalidated_properties\"/>\n </signal>\n </interface>\n <interface name=\"org.freedesktop.DBus.Introspectable\">\n <method name=\"Introspect\">\n <arg type=\"s\" name=\"xml_data\" direction=\"out\"/>\n </method>\n </interface>\n <interface name=\"org.freedesktop.DBus.Peer\">\n <method name=\"Ping\"/>\n <method name=\"GetMachineId\">\n <arg type=\"s\" name=\"machine_uuid\" direction=\"out\"/>\n </method>\n </interface>\n <interface name=\"org.kde.StatusNotifierWatcher\">\n <method name=\"RegisterStatusNotifierItem\">\n <arg type=\"s\" name=\"service\" direction=\"in\">\n </arg>\n </method>\n <method name=\"RegisterStatusNotifierHost\">\n <arg type=\"s\" name=\"service\" direction=\"in\">\n </arg>\n </method>\n <signal name=\"StatusNotifierItemRegistered\">\n <arg type=\"s\" name=\"arg_0\">\n </arg>\n </signal>\n <signal name=\"StatusNotifierItemUnregistered\">\n <arg type=\"s\" name=\"arg_0\">\n </arg>\n </signal>\n <signal name=\"StatusNotifierHostRegistered\">\n </signal>\n <signal name=\"StatusNotifierHostUnregistered\">\n </signal>\n <property type=\"as\" name=\"RegisteredStatusNotifierItems\" access=\"read\">\n <annotation name=\"org.qtproject.QtDBus.QtTypeName.Out0\" value=\"QStringList\">\n </annotation>\n </property>\n <property type=\"b\" name=\"IsStatusNotifierHostRegistered\" access=\"read\">\n </property>\n <property type=\"i\" name=\"ProtocolVersion\" access=\"read\">\n </property>\n </interface>\n</node>\n"}
[notice] Calling {:ok,
[
{:dbus_message,
{:dbus_header, 108, 1, 0, 1, 11, 5,
[
{8, "s"},
{1, "/StatusNotifierWatcher"},
{6, "org.kde.StatusNotifierWatcher"},
{2, "org.kde.StatusNotifierWatcher"},
{3, "RegisterStatusNotifierItem"}
]}, ":1.388"}
], ""}
[notice] Received {:dbus_message,
{:dbus_header, 108, 1, 0, 1, 31, 4365,
[
{1, "/StatusNotifierItem"},
{2, "org.freedesktop.DBus.Properties"},
{6, ":1.388"},
{8, "s"},
{3, "GetAll"},
{7, ":1.38"}
]}, "org.kde.StatusNotifierItem"}
[notice] Received {:dbus_message,
{:dbus_header, 108, 2, 1, 1, 0, 4368,
[{6, ":1.388"}, {8, ""}, {5, 5}, {7, ":1.38"}]}, :undefined}
[notice] Casting {:ok,
[
{:dbus_message,
{:dbus_header, 108, 2, 0, 1, 2462, 6,
[{5, 4365}, {6, ":1.38"}, {8, "a{sv}"}]},
%{
"AttentionIconName" => "",
"AttentionIconPixmap" => [],
"Category" => "ApplicationStatus",
"IconName" => "",
"IconPixmap" => [
{22, 22,
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ...]}
],
"IconThemePath" => "",
"Id" => "1",
"ItemIsMenu" => false,
"Menu" => "/MenuBar",
"OverlayIconName" => "",
"OverlayIconPixmap" => [],
"Status" => "Active",
"Title" => "",
"ToolTip" => {"", [], "", ""},
"WindowId" => 0
}}
], ""}
[notice] Casting {:ok,
[
{:dbus_message,
{:dbus_header, 108, 4, 0, 1, 0, 7,
[
{1, "/StatusNotifierItem"},
{2, "org.kde.StatusNotifierItem"},
{3, "NewIcon"}
]}, :undefined}
], ""}
[notice] Received {:dbus_message,
{:dbus_header, 108, 1, 0, 1, 27, 4372,
[
{1, "/MenuBar"},
{2, "org.freedesktop.DBus.Properties"},
{6, ":1.388"},
{8, "s"},
{3, "GetAll"},
{7, ":1.38"}
]}, "com.canonical.dbusmenu"}
[notice] Received {:dbus_message,
{:dbus_header, 108, 1, 0, 1, 4, 4373,
[
{1, "/MenuBar"},
{2, "com.canonical.dbusmenu"},
{6, ":1.388"},
{8, "i"},
{3, "AboutToShow"},
{7, ":1.38"}
]}, 0}
[notice] Casting {:ok,
[
{:dbus_message,
{:dbus_header, 108, 2, 0, 1, 132, 8,
[{5, 4372}, {6, ":1.38"}, {8, "a{sv}"}]},
%{
"IconThemePath" => [""],
"Status" => "normal",
"TextDirection" => "ltr",
"Version" => 1
}}
], ""}
[notice] Casting {:ok,
[
{:dbus_message,
{:dbus_header, 108, 2, 0, 1, 4, 9, [{5, 4373}, {6, ":1.38"}, {8, "b"}]},
false}
], ""}
[notice] Received {:dbus_message,
{:dbus_header, 108, 1, 0, 1, 45, 4374,
[
{1, "/MenuBar"},
{2, "com.canonical.dbusmenu"},
{6, ":1.388"},
{8, "iias"},
{3, "GetLayout"},
{7, ":1.38"}
]}, {0, -1, ["type", "children-display"]}}
[notice] Casting {:ok,
[
{:dbus_message,
{:dbus_header, 108, 4, 0, 1, 0, 10,
[
{1, "/StatusNotifierItem"},
{2, "org.kde.StatusNotifierItem"},
{3, "NewIcon"}
]}, :undefined}
], ""}
[notice] Casting {:ok,
[
{:dbus_message,
{:dbus_header, 108, 2, 0, 1, 20, 11,
[{5, 4374}, {6, ":1.38"}, {8, "u(ia{sv}av)"}]}, {1, {0, %{}, []}}}
], ""}
Overriding existing handler for signal 10. Set JSC_SIGNAL_FOR_GC if you want WebKit to use a different signal
Interactive Elixir (1.13.0) - press Ctrl+C to exit (type h() ENTER for help)
iex(1)> [notice] Received {:dbus_message,
{:dbus_header, 108, 1, 0, 1, 45, 4379,
[
{1, "/StatusNotifierItem"},
{2, "org.freedesktop.DBus.Properties"},
{6, ":1.388"},
{8, "ss"},
{3, "Get"},
{7, ":1.38"}
]}, {"org.kde.StatusNotifierItem", "IconName"}}
[notice] Received {:dbus_message,
{:dbus_header, 108, 1, 0, 1, 47, 4380,
[
{1, "/StatusNotifierItem"},
{2, "org.freedesktop.DBus.Properties"},
{6, ":1.388"},
{8, "ss"},
{3, "Get"},
{7, ":1.38"}
]}, {"org.kde.StatusNotifierItem", "IconPixmap"}}
[notice] Casting {:ok,
[
{:dbus_message,
{:dbus_header, 108, 2, 0, 1, 9, 12, [{5, 4379}, {6, ":1.38"}, {8, "v"}]},
""}
], ""}
[notice] Casting {:ok,
[
{:dbus_message,
{:dbus_header, 108, 2, 0, 1, 1964, 13, [{5, 4380}, {6, ":1.38"}, {8, "v"}]},
[
{22, 22,
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ...]}
]}
], ""}
[error] Process #PID<0.654.0> terminating
** (exit) {{{%Phoenix.Router.NoRouteError{conn: %Plug.Conn{adapter: {Plug.Cowboy.Conn, :...}, assigns: %{}, body_params: %{}, cookies: %{"_todo_key" => "VXupb6F+Zil035flvTOq/cpCIRj9XkVotLZRD19RmL6tPnJaEk/2gQQkMKmLhm2KRi6Prh5rPgvfyGZb5wm0gjFMqyUBSzHsGmQSUp/xBVWdUHOTPDuQhmIsO1NQgRBR"}, halted: false, host: "localhost", method: "GET", owner: #PID<0.654.0>, params: %{}, path_info: ["assets", "app.css"], path_params: %{}, port: 36623, private: %{TodoWeb.Router => {[], %{}}, :before_send => [#Function<0.77458138/1 in Plug.Session.before_send/2>, #Function<1.26106830/1 in Phoenix.LiveReloader.before_send_inject_reloader/3>], :phoenix_endpoint => TodoWeb.Endpoint, :phoenix_router => TodoWeb.Router, :plug_session => %{"_csrf_token" => "1nEirjvYHURL5KbKG8YrP0Ao", "user" => true}, :plug_session_fetch => :done}, query_params: %{}, query_string: "", remote_ip: {127, 0, 0, 1}, req_cookies: %{"_todo_key" => "VXupb6F+Zil035flvTOq/cpCIRj9XkVotLZRD19RmL6tPnJaEk/2gQQkMKmLhm2KRi6Prh5rPgvfyGZb5wm0gjFMqyUBSzHsGmQSUp/xBVWdUHOTPDuQhmIsO1NQgRBR"}, req_headers: [{"accept", "text/css,*/*;q=0.1"}, {"accept-encoding", "gzip, deflate"}, {"accept-language", "en-US"}, {"connection", "Keep-Alive"}, {"cookie", "_todo_key=VXupb6F+Zil035flvTOq/cpCIRj9XkVotLZRD19RmL6tPnJaEk/2gQQkMKmLhm2KRi6Prh5rPgvfyGZb5wm0gjFMqyUBSzHsGmQSUp/xBVWdUHOTPDuQhmIsO1NQgRBR"}, {"host", "localhost:36623"}, {"referer", "http://localhost:36623/?k=3EPDPDZPNQNO7IB4FHMJY56VU5VII5QPUDIPFNSKJAFSBNG2FSOA"}, {"user-agent", "Mozilla/5.0 (X11; Ubuntu; Linux x86_64) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.0 Safari/605.1.15"}], request_path: "/assets/app.css", resp_body: nil, resp_cookies: %{}, resp_headers: [{"cache-control", "max-age=0, private, must-revalidate"}, {"x-request-id", "FuRMPco2jPQ1JvIAAAAG"}], scheme: :http, script_name: [], secret_key_base: :..., state: :unset, status: nil}, message: "no route found for GET /assets/app.css (TodoWeb.Router)", plug_status: 404, router: TodoWeb.Router}, [{TodoWeb.Router, :call, 2, [file: 'lib/phoenix/router.ex', line: 406]}, {TodoWeb.Endpoint, :plug_builder_call, 2, [file: 'lib/todo_web/endpoint.ex', line: 1]}, {TodoWeb.Endpoint, :"call (overridable 3)", 2, [file: 'lib/plug/debugger.ex', line: 136]}, {TodoWeb.Endpoint, :call, 2, [file: 'lib/todo_web/endpoint.ex', line: 1]}, {Phoenix.Endpoint.Cowboy2Handler, :init, 4, [file: 'lib/phoenix/endpoint/cowboy2_handler.ex', line: 43]}, {:cowboy_handler, :execute, 2, [file: '/home/tyoc213/git_repos/hub/elixir-desktop-example-app/deps/cowboy/src/cowboy_handler.erl', line: 37]}, {:cowboy_stream_h, :execute, 3, [file: '/home/tyoc213/git_repos/hub/elixir-desktop-example-app/deps/cowboy/src/cowboy_stream_h.erl', line: 306]}, {:cowboy_stream_h, :request_process, 3, [file: '/home/tyoc213/git_repos/hub/elixir-desktop-example-app/deps/cowboy/src/cowboy_stream_h.erl', line: 295]}, {:proc_lib, :init_p_do_apply, 3, [file: 'proc_lib.erl', line: 226]}]}, {TodoWeb.Endpoint, :call, [%Plug.Conn{adapter: {Plug.Cowboy.Conn, :...}, assigns: %{}, body_params: %Plug.Conn.Unfetched{aspect: :body_params}, cookies: %Plug.Conn.Unfetched{aspect: :cookies}, halted: false, host: "localhost", method: "GET", owner: #PID<0.654.0>, params: %Plug.Conn.Unfetched{aspect: :params}, path_info: ["assets", "app.css"], path_params: %{}, port: 36623, private: %{}, query_params: %Plug.Conn.Unfetched{aspect: :query_params}, query_string: "", remote_ip: {127, 0, 0, 1}, req_cookies: %Plug.Conn.Unfetched{aspect: :cookies}, req_headers: [{"accept", "text/css,*/*;q=0.1"}, {"accept-encoding", "gzip, deflate"}, {"accept-language", "en-US"}, {"connection", "Keep-Alive"}, {"cookie", "_todo_key=VXupb6F+Zil035flvTOq/cpCIRj9XkVotLZRD19RmL6tPnJaEk/2gQQkMKmLhm2KRi6Prh5rPgvfyGZb5wm0gjFMqyUBSzHsGmQSUp/xBVWdUHOTPDuQhmIsO1NQgRBR"}, {"host", "localhost:36623"}, {"referer", "http://localhost:36623/?k=3EPDPDZPNQNO7IB4FHMJY56VU5VII5QPUDIPFNSKJAFSBNG2FSOA"}, {"user-agent", "Mozilla/5.0 (X11; Ubuntu; Linux x86_64) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.0 Safari/605.1.15"}], request_path: "/assets/app.css", resp_body: nil, resp_cookies: %{}, resp_headers: [{"cache-control", "max-age=0, private, must-revalidate"}], scheme: :http, script_name: [], secret_key_base: nil, state: :unset, status: nil}, []]}}, []}
Initial Call: :cowboy_stream_h.request_process/3
Ancestors: [#PID<0.645.0>, #PID<0.509.0>, #PID<0.508.0>, TodoWeb.Endpoint, TodoWeb.Sup, TodoApp, #PID<0.431.0>]
Message Queue Length: 0
Messages: []
Links: [#PID<0.645.0>]
Dictionary: ["$logger_metadata$": %{request_id: "FuRMPco2jPQ1JvIAAAAG"}]
Trapping Exits: false
Status: :running
Heap Size: 17731
Stack Size: 29
Reductions: 69643
[error] Process #PID<0.657.0> terminating
** (exit) {{{%Phoenix.Router.NoRouteError{conn: %Plug.Conn{adapter: {Plug.Cowboy.Conn, :...}, assigns: %{}, body_params: %{}, cookies: %{"_todo_key" => "VXupb6F+Zil035flvTOq/cpCIRj9XkVotLZRD19RmL6tPnJaEk/2gQQkMKmLhm2KRi6Prh5rPgvfyGZb5wm0gjFMqyUBSzHsGmQSUp/xBVWdUHOTPDuQhmIsO1NQgRBR"}, halted: false, host: "localhost", method: "GET", owner: #PID<0.657.0>, params: %{}, path_info: ["assets", "app.js"], path_params: %{}, port: 36623, private: %{TodoWeb.Router => {[], %{}}, :before_send => [#Function<0.77458138/1 in Plug.Session.before_send/2>, #Function<1.26106830/1 in Phoenix.LiveReloader.before_send_inject_reloader/3>], :phoenix_endpoint => TodoWeb.Endpoint, :phoenix_router => TodoWeb.Router, :plug_session => %{"_csrf_token" => "1nEirjvYHURL5KbKG8YrP0Ao", "user" => true}, :plug_session_fetch => :done}, query_params: %{}, query_string: "", remote_ip: {127, 0, 0, 1}, req_cookies: %{"_todo_key" => "VXupb6F+Zil035flvTOq/cpCIRj9XkVotLZRD19RmL6tPnJaEk/2gQQkMKmLhm2KRi6Prh5rPgvfyGZb5wm0gjFMqyUBSzHsGmQSUp/xBVWdUHOTPDuQhmIsO1NQgRBR"}, req_headers: [{"accept", "*/*"}, {"accept-encoding", "gzip, deflate"}, {"accept-language", "en-US"}, {"connection", "Keep-Alive"}, {"cookie", "_todo_key=VXupb6F+Zil035flvTOq/cpCIRj9XkVotLZRD19RmL6tPnJaEk/2gQQkMKmLhm2KRi6Prh5rPgvfyGZb5wm0gjFMqyUBSzHsGmQSUp/xBVWdUHOTPDuQhmIsO1NQgRBR"}, {"host", "localhost:36623"}, {"referer", "http://localhost:36623/?k=3EPDPDZPNQNO7IB4FHMJY56VU5VII5QPUDIPFNSKJAFSBNG2FSOA"}, {"user-agent", "Mozilla/5.0 (X11; Ubuntu; Linux x86_64) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.0 Safari/605.1.15"}], request_path: "/assets/app.js", resp_body: nil, resp_cookies: %{}, resp_headers: [{"cache-control", "max-age=0, private, must-revalidate"}, {"x-request-id", "FuRMPc0k6fvM5HcAAABG"}], scheme: :http, script_name: [], secret_key_base: :..., state: :unset, status: nil}, message: "no route found for GET /assets/app.js (TodoWeb.Router)", plug_status: 404, router: TodoWeb.Router}, [{TodoWeb.Router, :call, 2, [file: 'lib/phoenix/router.ex', line: 406]}, {TodoWeb.Endpoint, :plug_builder_call, 2, [file: 'lib/todo_web/endpoint.ex', line: 1]}, {TodoWeb.Endpoint, :"call (overridable 3)", 2, [file: 'lib/plug/debugger.ex', line: 136]}, {TodoWeb.Endpoint, :call, 2, [file: 'lib/todo_web/endpoint.ex', line: 1]}, {Phoenix.Endpoint.Cowboy2Handler, :init, 4, [file: 'lib/phoenix/endpoint/cowboy2_handler.ex', line: 43]}, {:cowboy_handler, :execute, 2, [file: '/home/tyoc213/git_repos/hub/elixir-desktop-example-app/deps/cowboy/src/cowboy_handler.erl', line: 37]}, {:cowboy_stream_h, :execute, 3, [file: '/home/tyoc213/git_repos/hub/elixir-desktop-example-app/deps/cowboy/src/cowboy_stream_h.erl', line: 306]}, {:cowboy_stream_h, :request_process, 3, [file: '/home/tyoc213/git_repos/hub/elixir-desktop-example-app/deps/cowboy/src/cowboy_stream_h.erl', line: 295]}, {:proc_lib, :init_p_do_apply, 3, [file: 'proc_lib.erl', line: 226]}]}, {TodoWeb.Endpoint, :call, [%Plug.Conn{adapter: {Plug.Cowboy.Conn, :...}, assigns: %{}, body_params: %Plug.Conn.Unfetched{aspect: :body_params}, cookies: %Plug.Conn.Unfetched{aspect: :cookies}, halted: false, host: "localhost", method: "GET", owner: #PID<0.657.0>, params: %Plug.Conn.Unfetched{aspect: :params}, path_info: ["assets", "app.js"], path_params: %{}, port: 36623, private: %{}, query_params: %Plug.Conn.Unfetched{aspect: :query_params}, query_string: "", remote_ip: {127, 0, 0, 1}, req_cookies: %Plug.Conn.Unfetched{aspect: :cookies}, req_headers: [{"accept", "*/*"}, {"accept-encoding", "gzip, deflate"}, {"accept-language", "en-US"}, {"connection", "Keep-Alive"}, {"cookie", "_todo_key=VXupb6F+Zil035flvTOq/cpCIRj9XkVotLZRD19RmL6tPnJaEk/2gQQkMKmLhm2KRi6Prh5rPgvfyGZb5wm0gjFMqyUBSzHsGmQSUp/xBVWdUHOTPDuQhmIsO1NQgRBR"}, {"host", "localhost:36623"}, {"referer", "http://localhost:36623/?k=3EPDPDZPNQNO7IB4FHMJY56VU5VII5QPUDIPFNSKJAFSBNG2FSOA"}, {"user-agent", "Mozilla/5.0 (X11; Ubuntu; Linux x86_64) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.0 Safari/605.1.15"}], request_path: "/assets/app.js", resp_body: nil, resp_cookies: %{}, resp_headers: [{"cache-control", "max-age=0, private, must-revalidate"}], scheme: :http, script_name: [], secret_key_base: nil, state: :unset, status: nil}, []]}}, []}
Initial Call: :cowboy_stream_h.request_process/3
Ancestors: [#PID<0.656.0>, #PID<0.509.0>, #PID<0.508.0>, TodoWeb.Endpoint, TodoWeb.Sup, TodoApp, #PID<0.431.0>]
Message Queue Length: 0
Messages: []
Links: [#PID<0.656.0>]
Dictionary: ["$logger_metadata$": %{request_id: "FuRMPc0k6fvM5HcAAABG"}]
Trapping Exits: false
Status: :running
Heap Size: 17731
Stack Size: 29
Reductions: 68841
> js/app.js:12:22: error: Could not resolve "nprogress" (mark it as external to exclude it from the bundle)
12 │ import NProgress from "nprogress"
╵ ~~~~~~~~~~~
1 error
[watch] build finished, watching for changes...
[notice] Casting {:ok,
[
{:dbus_message,
{:dbus_header, 108, 4, 0, 1, 8, 14,
[
{1, "/MenuBar"},
{2, "com.canonical.dbusmenu"},
{3, "LayoutUpdated"},
{8, "ui"}
]}, {2, 0}}
], ""}
[notice] Received {:dbus_message,
{:dbus_header, 108, 1, 0, 1, 45, 4381,
[
{1, "/MenuBar"},
{2, "com.canonical.dbusmenu"},
{6, ":1.388"},
{8, "iias"},
{3, "GetLayout"},
{7, ":1.38"}
]}, {0, -1, ["type", "children-display"]}}
[notice] Casting {:ok,
[
{:dbus_message,
{:dbus_header, 108, 2, 0, 1, 444, 15,
[{5, 4381}, {6, ":1.38"}, {8, "u(ia{sv}av)"}]},
{2,
{0, %{"children-display" => "submenu", "type" => "standard"},
[
{1, %{"children-display" => "", "type" => "standard"}, []},
{2, %{"children-display" => "", "type" => "separator"}, []},
{3, %{"children-display" => "", "type" => "separator"}, []},
{4, %{"children-display" => "", "type" => "standard"}, []}
]}}}
], ""}
[notice] Received {:dbus_message,
{:dbus_header, 108, 1, 0, 1, 24, 4382,
[
{1, "/MenuBar"},
{2, "com.canonical.dbusmenu"},
{6, ":1.388"},
{8, "aias"},
{3, "GetGroupProperties"},
{7, ":1.38"}
]}, {[1, 2, 3, 4], []}}
[notice] Casting {:ok,
[
{:dbus_message,
{:dbus_header, 108, 2, 0, 1, 161, 16,
[{5, 4382}, {6, ":1.38"}, {8, "a(ia{sv})"}]},
[
{1, %{"label" => "Open"}},
{2, %{"type" => "separator"}},
{3, %{"type" => "separator"}},
{4, %{"label" => "Quit"}}
]}
], ""}
Error: Can't find stylesheet to import.
╷
2 │ @use "../node_modules/nprogress/nprogress.css";
│ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
╵
css/app.scss 2:1 root stylesheet
Sass is watching for changes. Press Ctrl-C to stop.
[error] Process #PID<0.679.0> terminating
** (exit) {{{%Phoenix.Router.NoRouteError{conn: %Plug.Conn{adapter: {Plug.Cowboy.Conn, :...}, assigns: %{}, body_params: %{}, cookies: %{"_todo_key" => "VXupb6F+Zil035flvTOq/cpCIRj9XkVotLZRD19RmL6tPnJaEk/2gQQkMKmLhm2KRi6Prh5rPgvfyGZb5wm0gjFMqyUBSzHsGmQSUp/xBVWdUHOTPDuQhmIsO1NQgRBR"}, halted: false, host: "localhost", method: "GET", owner: #PID<0.679.0>, params: %{}, path_info: ["assets", "app.js"], path_params: %{}, port: 36623, private: %{TodoWeb.Router => {[], %{}}, :before_send => [#Function<0.77458138/1 in Plug.Session.before_send/2>, #Function<1.26106830/1 in Phoenix.LiveReloader.before_send_inject_reloader/3>], :phoenix_endpoint => TodoWeb.Endpoint, :phoenix_router => TodoWeb.Router, :plug_session => %{"_csrf_token" => "1nEirjvYHURL5KbKG8YrP0Ao", "user" => true}, :plug_session_fetch => :done}, query_params: %{}, query_string: "", remote_ip: {127, 0, 0, 1}, req_cookies: %{"_todo_key" => "VXupb6F+Zil035flvTOq/cpCIRj9XkVotLZRD19RmL6tPnJaEk/2gQQkMKmLhm2KRi6Prh5rPgvfyGZb5wm0gjFMqyUBSzHsGmQSUp/xBVWdUHOTPDuQhmIsO1NQgRBR"}, req_headers: [{"accept", "*/*"}, {"accept-encoding", "gzip, deflate"}, {"accept-language", "en-US"}, {"connection", "Keep-Alive"}, {"cookie", "_todo_key=VXupb6F+Zil035flvTOq/cpCIRj9XkVotLZRD19RmL6tPnJaEk/2gQQkMKmLhm2KRi6Prh5rPgvfyGZb5wm0gjFMqyUBSzHsGmQSUp/xBVWdUHOTPDuQhmIsO1NQgRBR"}, {"host", "localhost:36623"}, {"referer", "http://localhost:36623/?text=esto+esta+medio+culei%3F"}, {"user-agent", "Mozilla/5.0 (X11; Ubuntu; Linux x86_64) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.0 Safari/605.1.15"}], request_path: "/assets/app.js", resp_body: nil, resp_cookies: %{}, resp_headers: [{"cache-control", "max-age=0, private, must-revalidate"}, {"x-request-id", "FuRMQAystsNs8wkAAABC"}], scheme: :http, script_name: [], secret_key_base: :..., state: :unset, status: nil}, message: "no route found for GET /assets/app.js (TodoWeb.Router)", plug_status: 404, router: TodoWeb.Router}, [{TodoWeb.Router, :call, 2, [file: 'lib/phoenix/router.ex', line: 406]}, {TodoWeb.Endpoint, :plug_builder_call, 2, [file: 'lib/todo_web/endpoint.ex', line: 1]}, {TodoWeb.Endpoint, :"call (overridable 3)", 2, [file: 'lib/plug/debugger.ex', line: 136]}, {TodoWeb.Endpoint, :call, 2, [file: 'lib/todo_web/endpoint.ex', line: 1]}, {Phoenix.Endpoint.Cowboy2Handler, :init, 4, [file: 'lib/phoenix/endpoint/cowboy2_handler.ex', line: 43]}, {:cowboy_handler, :execute, 2, [file: '/home/tyoc213/git_repos/hub/elixir-desktop-example-app/deps/cowboy/src/cowboy_handler.erl', line: 37]}, {:cowboy_stream_h, :execute, 3, [file: '/home/tyoc213/git_repos/hub/elixir-desktop-example-app/deps/cowboy/src/cowboy_stream_h.erl', line: 306]}, {:cowboy_stream_h, :request_process, 3, [file: '/home/tyoc213/git_repos/hub/elixir-desktop-example-app/deps/cowboy/src/cowboy_stream_h.erl', line: 295]}, {:proc_lib, :init_p_do_apply, 3, [file: 'proc_lib.erl', line: 226]}]}, {TodoWeb.Endpoint, :call, [%Plug.Conn{adapter: {Plug.Cowboy.Conn, :...}, assigns: %{}, body_params: %Plug.Conn.Unfetched{aspect: :body_params}, cookies: %Plug.Conn.Unfetched{aspect: :cookies}, halted: false, host: "localhost", method: "GET", owner: #PID<0.679.0>, params: %Plug.Conn.Unfetched{aspect: :params}, path_info: ["assets", "app.js"], path_params: %{}, port: 36623, private: %{}, query_params: %Plug.Conn.Unfetched{aspect: :query_params}, query_string: "", remote_ip: {127, 0, 0, 1}, req_cookies: %Plug.Conn.Unfetched{aspect: :cookies}, req_headers: [{"accept", "*/*"}, {"accept-encoding", "gzip, deflate"}, {"accept-language", "en-US"}, {"connection", "Keep-Alive"}, {"cookie", "_todo_key=VXupb6F+Zil035flvTOq/cpCIRj9XkVotLZRD19RmL6tPnJaEk/2gQQkMKmLhm2KRi6Prh5rPgvfyGZb5wm0gjFMqyUBSzHsGmQSUp/xBVWdUHOTPDuQhmIsO1NQgRBR"}, {"host", "localhost:36623"}, {"referer", "http://localhost:36623/?text=esto+esta+medio+culei%3F"}, {"user-agent", "Mozilla/5.0 (X11; Ubuntu; Linux x86_64) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.0 Safari/605.1.15"}], request_path: "/assets/app.js", resp_body: nil, resp_cookies: %{}, resp_headers: [{"cache-control", "max-age=0, private, must-revalidate"}], scheme: :http, script_name: [], secret_key_base: nil, state: :unset, status: nil}, []]}}, []}
Initial Call: :cowboy_stream_h.request_process/3
Ancestors: [#PID<0.656.0>, #PID<0.509.0>, #PID<0.508.0>, TodoWeb.Endpoint, TodoWeb.Sup, TodoApp, #PID<0.431.0>]
Message Queue Length: 0
Messages: []
Links: [#PID<0.656.0>]
Dictionary: ["$logger_metadata$": %{request_id: "FuRMQAystsNs8wkAAABC"}]
Trapping Exits: false
Status: :running
Heap Size: 17731
Stack Size: 29
Reductions: 68868
[warning] Missing support for wxNotificationMessage Events - upgrade to wxWidgets 3.1 - messages won't be clickable
Can you use the https://github.com/elixir-desktop/desktop/blob/main/LICENSE.md or creative commons zero?
Trying to run the application on Ubuntu 20.04.3 LTS
I'm receiving the following error:
[error] Process #PID<0.794.0> terminating
** (exit) {:bad_return, {{TodoApp, :start, [:normal, []]}, {:EXIT, {{:badmatch, {:error, {{:EXIT, {{:badmatch, {:error, {{:undefined_function, {:wxWebView, :new, 0}}, [{:wxe_util, :rec, 1, [file: 'wxe_util.erl', line: 110]}, {Desktop.Fallback, :webview_new, 1, [file: 'lib/desktop/fallback.ex', line: 47]}, {Desktop.Window, :init, 1, [file: 'lib/desktop/window.ex', line: 189]}, {:wx_object, :init_it, 6, [file: 'wx_object.erl', line: 404]}, {:proc_lib, :init_p_do_apply, 3, [file: 'proc_lib.erl', line: 226]}]}}}, [{Desktop.Window, :start_link, 1, [file: 'lib/desktop/window.ex', line: 104]}, {:supervisor, :do_start_child_i, 3, [file: 'supervisor.erl', line: 414]}, {:supervisor, :do_start_child, 2, [file: 'supervisor.erl', line: 400]}, {:supervisor, :handle_start_child, 2, [file: 'supervisor.erl', line: 706]}, {:supervisor, :handle_call, 3, [file: 'supervisor.erl', line: 455]}, {:gen_server, :try_handle_call, 4, [file: 'gen_server.erl', line: 721]}, {:gen_server, :handle_msg, 6, [file: 'gen_server.erl', line: 750]}, {:proc_lib, :init_p_do_apply, 3, [file: 'proc_lib.erl', line: 226]}]}}, {:child, :undefined, TodoWindow, {Desktop.Window, :start_link, [[app: :todo_app, id: TodoWindow, title: "TodoApp", size: {600, 500}, icon: "icon.png", menubar: TodoApp.MenuBar, icon_menu: TodoApp.Menu, url: &TodoWeb.Endpoint.url/0, app: :todo_app, id: TodoWindow]]}, :permanent, false, 5000, :worker, [Desktop.Window]}}}}, [{TodoApp, :start, 2, [file: 'lib/todo_app.ex', line: 35]}, {:application_master, :start_it_old, 4, [file: 'application_master.erl', line: 293]}]}}}}
(kernel 8.0) application_master.erl:142: :application_master.init/4
(stdlib 3.15) proc_lib.erl:226: :proc_lib.init_p_do_apply/3
Initial Call: :application_master.init/4
Ancestors: [#PID<0.793.0>]
Message Queue Length: 1
Messages: [{:EXIT, #PID<0.795.0>, :normal}]
Links: [#PID<0.793.0>, #PID<0.44.0>]
Dictionary: []
Trapping Exits: true
Status: :running
Heap Size: 1598
Stack Size: 29
Reductions: 252
** (Mix) Could not start application todo_app: exited in: TodoApp.start(:normal, [])
** (EXIT) an exception was raised:
** (MatchError) no match of right hand side value: {:error, {{:EXIT, {{:badmatch, {:error, {{:undefined_function, {:wxWebView, :new, 0}}, [{:wxe_util, :rec, 1, [file: 'wxe_util.erl', line: 110]}, {Desktop.Fallback, :webview_new, 1, [file: 'lib/desktop/fallback.ex', line: 47]}, {Desktop.Window, :init, 1, [file: 'lib/desktop/window.ex', line: 189]}, {:wx_object, :init_it, 6, [file: 'wx_object.erl', line: 404]}, {:proc_lib, :init_p_do_apply, 3, [file: 'proc_lib.erl', line: 226]}]}}}, [{Desktop.Window, :start_link, 1, [file: 'lib/desktop/window.ex', line: 104]}, {:supervisor, :do_start_child_i, 3, [file: 'supervisor.erl', line: 414]}, {:supervisor, :do_start_child, 2, [file: 'supervisor.erl', line: 400]}, {:supervisor, :handle_start_child, 2, [file: 'supervisor.erl', line: 706]}, {:supervisor, :handle_call, 3, [file: 'supervisor.erl', line: 455]}, {:gen_server, :try_handle_call, 4, [file: 'gen_server.erl', line: 721]}, {:gen_server, :handle_msg, 6, [file: 'gen_server.erl', line: 750]}, {:proc_lib, :init_p_do_apply, 3, [file: 'proc_lib.erl', line: 226]}]}}, {:child, :undefined, TodoWindow, {Desktop.Window, :start_link, [[app: :todo_app, id: TodoWindow, title: "TodoApp", size: {600, 500}, icon: "icon.png", menubar: TodoApp.MenuBar, icon_menu: TodoApp.Menu, url: &TodoWeb.Endpoint.url/0, app: :todo_app, id: TodoWindow]]}, :permanent, false, 5000, :worker, [Desktop.Window]}}}
(todo_app 1.0.0) lib/todo_app.ex:35: TodoApp.start/2
(kernel 8.0) application_master.erl:293: :application_master.start_it_old/4
I'm using this elixir and erlang versions installed through asdf
:
elixir 1.12.3
erlang 24.0.1
Is this a known issue? I have tried what is mentioned here, but I get the same result.
Thanks in advance and congrats with the library 😄
When launching the application, on the left panel, the application has no icon:
How I launched the app:
npm install
cd ..
mix assets.deploy
./run
No visible errors are shown:
$ ./run
Erlang/OTP 24 [erts-12.1.5] [source] [64-bit] [smp:12:12] [ds:12:12:10] [async-threads:1] [jit]
warning: use Mix.Config is deprecated. Use the Config module instead
config/dev.exs:1
12:05:52.202 [info] Application eex started at :nonode@nohost
12:05:52.208 [info] Application mime started at :nonode@nohost
12:05:52.208 [info] Child Agent of Supervisor Plug.Crypto.Application started
Pid: #PID<0.283.0>
Start Call: Agent.start_link(#Function<0.16488927/0 in Plug.Crypto.Application."-fun.start_crypto_keys/0-">)
Restart: :permanent
Shutdown: 5000
Type: :worker
12:05:52.211 [info] Application plug_crypto started at :nonode@nohost
12:05:52.213 [info] Child :telemetry_handler_table of Supervisor :telemetry_sup started
Pid: #PID<0.288.0>
Start Call: :telemetry_handler_table.start_link()
Restart: :permanent
Shutdown: 5000
Type: :worker
12:05:52.213 [info] Application telemetry started at :nonode@nohost
12:05:52.214 [info] Child Plug.Upload of Supervisor Plug.Application started
Pid: #PID<0.293.0>
Start Call: Plug.Upload.start_link([])
Restart: :permanent
Shutdown: 5000
Type: :worker
12:05:52.215 [info] Application plug started at :nonode@nohost
12:05:52.216 [info] Child :pg of Supervisor #PID<0.297.0> (Supervisor.Default) started
Pid: #PID<0.298.0>
Start Call: :pg.start_link(Phoenix.PubSub)
Restart: :permanent
Shutdown: 5000
Type: :worker
12:05:52.216 [info] Application phoenix_pubsub started at :nonode@nohost
12:05:52.216 [info] Application phoenix_view started at :nonode@nohost
12:05:52.222 [info] Child Phoenix.CodeReloader.Server of Supervisor Phoenix.Supervisor started
Pid: #PID<0.304.0>
Start Call: Phoenix.CodeReloader.Server.start_link([])
Restart: :permanent
Shutdown: 5000
Type: :worker
12:05:52.222 [info] Child Phoenix.Transports.LongPoll.Supervisor of Supervisor Phoenix.Supervisor started
Pid: #PID<0.305.0>
Start Call: DynamicSupervisor.start_link([name: Phoenix.Transports.LongPoll.Supervisor, strategy: :one_for_one])
Restart: :permanent
Shutdown: :infinity
Type: :supervisor
12:05:52.222 [info] Application phoenix started at :nonode@nohost
12:05:52.235 [info] Child Gettext.ExtractorAgent of Supervisor #PID<0.309.0> (Supervisor.Default) started
Pid: #PID<0.310.0>
Start Call: Gettext.ExtractorAgent.start_link([])
Restart: :permanent
Shutdown: 5000
Type: :worker
12:05:52.235 [info] Application gettext started at :nonode@nohost
12:05:52.250 [info] Child :disk_log_sup of Supervisor :kernel_safe_sup started
Pid: #PID<0.311.0>
Start Call: :disk_log_sup.start_link()
Restart: :permanent
Shutdown: 1000
Type: :supervisor
12:05:52.250 [info] Child :disk_log_server of Supervisor :kernel_safe_sup started
Pid: #PID<0.312.0>
Start Call: :disk_log_server.start_link()
Restart: :permanent
Shutdown: 2000
Type: :worker
Sass is watching for changes. Press Ctrl-C to stop.
[watch] build finished, watching for changes...
[notice] Connecting to UNIX socket: "/run/user/1000/bus"
[notice] DBUS auth: sending initial data
[notice] Got GUID '027f216ba8c2148b5e89683862860b5f' from the server
[notice] Succesfully negotiated UNIX FD passing
[notice] Calling "/"::"org.freedesktop.DBus".:Hello([])
My system specs:
$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 20.04.4 LTS
Release: 20.04
Codename: focal
I can build the release without any issues to create TodoApp-1.1.0-linux-x86_64.run
, which, when run, will install TodoApp at ~/TodoApp
and run it smoothly.
However, if I close the app and then try to reopen it by clicking on the desktop icon or executing it from ~/TodoApp
, I don't get the window to open. To resolve this, I need to execute pkill -f TodoApp
, and after a few seconds, TodoApp will start successfully. But, if I close it again, we will encounter the same issue.
$ uname -a
Linux laptop 5.15.0-102-generic #112-Ubuntu SMP Tue Mar 5 16:50:32 UTC 2024 x86_64 x86_64 x86_64 GNU/Linux
When running run.bat
on my windows VM, I get an error because a process is trying to create a "Todo"
folder instead of a Todo
one.
The fix is to change the name of the App in the script (see below):
set WX_APP_TITLE=Todo
More info here:
https://elixirforum.com/t/elixir-desktop-application-does-open-in-edge/43701
I'm currently running the Todo application in an OS browser mode and I don't see any menu bar, so maybe this is only a partially-supported mode. But an error like this is logged after every user action:
[error] ** (KeyError) key :todos not found in: %Desktop.Menu{__adapter__: %Desktop.Menu.Adapter.Wx{env: {:wx_env, #Reference<0.1510893025.2632056833.118813>, #PID<0.514.0>, 0}, menu_pid: #PID<0.727.0>, menubar: {:wx_ref, 54, :wxMenuBar, []}, menubar_opts: {:taskbar, {:wx_ref, 41, :wxIcon, []}}, taskbar_icon: %Desktop.Wx.TaskBarIcon{fn_create_popup: #Function<4.88399616/0 in Desktop.Menu.Adapter.Wx.create_menubar/3>, skip_popup_menu?: true, wx_taskbar_icon: {:wx_ref, 55, :wxTaskBarIcon, []}}}, app: :todo_app, assigns: %{todos: [%TodoApp.Todo{__meta__: #Ecto.Schema.Metadata<:loaded, "todos">, id: 1, status: "todo", text: "foo"}, %TodoApp.Todo{__meta__: #Ecto.Schema.Metadata<:loaded, "todos">, id: 3, status: "todo", text: "bar"}]}, dom: [], last_render: nil, module: TodoApp.Menu, pid: #PID<0.727.0>}
(todo_app 1.0.0) lib/todo_app/menu.ex:34: TodoApp.Menu.set_state_icon/1
(todo_app 1.0.0) lib/todo_app/menu.ex:28: TodoApp.Menu.handle_info/2
(desktop 1.4.1) lib/desktop/menu.ex:462: Desktop.Menu.invoke_module_func/3
(desktop 1.4.1) lib/desktop/menu.ex:430: Desktop.Menu.proxy_handle_info/2
(desktop 1.4.1) lib/desktop/menu.ex:390: Desktop.Menu.handle_info/2
(stdlib 3.17.1) gen_server.erl:695: :gen_server.try_dispatch/4
(stdlib 3.17.1) gen_server.erl:771: :gen_server.handle_msg/6
(stdlib 3.17.1) proc_lib.erl:226: :proc_lib.init_p_do_apply/3
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.