Code Monkey home page Code Monkey logo

desktop-example-app's Introduction

TodoApp: A Desktop Sample App

This application is an example of an Elixir LiveView based desktop application. It uses the elixir-desktop library and a local SQLite database to create a web-technology based desktop app.

Changes in 1.2

  • Added desktop_deployment and CI to generate windows+macos+linux binaries

To build binaries locally run:

mix desktop.installer

Changes in 1.1

  • Updated to Phoenix 1.7 and LiveView 0.18

Changes in 1.0

General notes

To run this app you need at least Erlang 24 and recent builds of wxWidgets and at least Elixir 1.11.4.

Dependencies

This example assumes you've got installed:

  • git
  • Elixir, at least 1.11.4
  • Erlang, at least OTP 24
  • npm
  • C compiler (make/nmake) for SQLite

If you want to build for iOS you'll also need xcode and in order to build for Android you'll need the Android Studio.

Application set-up

Run:

cd assets
npm install
cd ..
mix assets.deploy

Screenshots

Linux build Windows build MacOS build Android build iOS build

desktop-example-app's People

Contributors

adamwight avatar c4lliope avatar dominicletz avatar fire avatar jonahgeorge avatar kpanic avatar mpotra avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

desktop-example-app's Issues

How to start a macOS app?

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!

Recurring error "key :todos not found in: %Desktop.Menu"

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

Empty context menu in KDE

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.

image

OS: Kubuntu 20.04
Elixir: 1.15.4
Erlang: 25.3

The buttons work as expected, but the text is empty.

Application Icon does not work for Linux

When launching the application, on the left panel, the application has no icon:

no-icon

How I launched the app:

  • enter assets folder
  • 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

Can't run example app

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 😄

Questions about access to system resources?

@dominicletz saw your video on this very nice work. Some questions are below.

  • Is there a way to listen to UDP/TCP socks from this native app? I have some services that broadcast to the system and I was wondering how the system blocks or allows this type of data connection.
  • Is there a way to access the microphone, or video camera of the device? I have a system that takes phone calls.
  • How is video rendering within the application does the processor take a performance hit? Can it play 4k streams? Playing of audio? Adjusting sound and so on?
  • How does mobile hand-off to wi-fi look when trying to connect outbound?

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.

add item throw err?

App looks like this

image

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

Cant find ../node_modules/nprogress/nprogress.css

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

Application does not work on Ubuntu 22.04

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:

Screenshot from 2022-09-05 11-50-58

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"}
 ], ""}

Cannot reopen the App on Unbuntu 22.04

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

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.