From 0e5b82f3348508eb7f4291a08722522a49edd752 Mon Sep 17 00:00:00 2001 From: Alex Auvolat Date: Mon, 5 Nov 2018 16:03:56 +0100 Subject: Facilitate file sending in chat --- shard/lib/cli/cli.ex | 19 +++++++++++++++++++ shardweb/assets/js/app.js | 6 ++++-- shardweb/lib/controllers/directory_controller.ex | 4 ++-- shardweb/lib/templates/identity/view.html.eex | 4 ++-- shardweb/mix.exs | 3 +-- 5 files changed, 28 insertions(+), 8 deletions(-) diff --git a/shard/lib/cli/cli.ex b/shard/lib/cli/cli.ex index d454a0b..380282d 100644 --- a/shard/lib/cli/cli.ex +++ b/shard/lib/cli/cli.ex @@ -170,6 +170,25 @@ defmodule SCLI do state end + defp handle_command(state, ["send_file", path]) do + {mime_type, 0} = System.cmd("file", ["-b", "--mime-type", path]) + mime_type = String.trim mime_type + IO.puts("Guessed mime type: #{mime_type}") + handle_command(state, ["send_file", path, mime_type]) + end + + defp handle_command(state, ["send_file", path, mime_type]) do + if state.room_pid != nil do + {:ok, m, _} = SApp.File.create(path, mime_type) + uri = ShardURI.from_manifest(m) + IO.puts("sending URI: #{uri}") + SApp.Chat.chat_send(state.room_pid, state.pk, uri) + else + IO.puts("Not in a chat room!") + end + state + end + defp handle_command(state, _cmd) do IO.puts "Invalid command" state diff --git a/shardweb/assets/js/app.js b/shardweb/assets/js/app.js index 1e5ea62..f3372f1 100644 --- a/shardweb/assets/js/app.js +++ b/shardweb/assets/js/app.js @@ -20,7 +20,9 @@ import "phoenix_html" import socket from "./socket" -import routes from './phoenix-jsroutes' +function parse_links(msg) { + return msg.replace(/shard:file:([0-9A-F]{64})/gi, '$&'); +} var chat_channel = window.Gon.getAsset('chat_channel'); if (chat_channel != undefined) @@ -30,7 +32,7 @@ if (chat_channel != undefined) channel.on('shout', function (payload) { // listen to the 'shout' event var li = document.createElement("li"); // creaet new list item DOM element var name = payload.name || 'guest'; // get name from payload or set default - li.innerHTML = '<' + name + ' ' + payload.pk16 + '> ' + payload.message; // set li contents + li.innerHTML = '<' + name + ' ' + payload.pk16 + '> ' + parse_links(payload.message); // set li contents // console.log(ul.scrollTop + ' ' + ul.scrollHeight + ' ' + ul.clientHeight); var must_scroll = (ul.scrollTop >= ul.scrollHeight - ul.clientHeight - 10); diff --git a/shardweb/lib/controllers/directory_controller.ex b/shardweb/lib/controllers/directory_controller.ex index ad5c426..d1b7136 100644 --- a/shardweb/lib/controllers/directory_controller.ex +++ b/shardweb/lib/controllers/directory_controller.ex @@ -84,12 +84,12 @@ defmodule ShardWeb.DirectoryController do info = SApp.File.get_info(pid) if info[:missing_blocks] == 0 do conn - |> put_resp_content_type(info[:mime_type]) + |> put_resp_content_type(String.trim(info[:mime_type])) |> send_file(200, info[:path]) else conn |> put_status(:not_found) - |> text("File not found or not yet completely downloaded.\n#{inspect(info)}") + |> text("File not found or not yet completely downloaded. Come back later!\n#{inspect(info)}") end end end diff --git a/shardweb/lib/templates/identity/view.html.eex b/shardweb/lib/templates/identity/view.html.eex index c81caf6..cc58ed5 100644 --- a/shardweb/lib/templates/identity/view.html.eex +++ b/shardweb/lib/templates/identity/view.html.eex @@ -20,10 +20,10 @@ <%= render ShardWeb.LayoutView, "flashes.html", assigns %> <%= if @view_pk != @pk do %> - PM + PM <% end %> - "> Public stuff + "> Public stuff
   <%= inspect(SApp.Identity.get_info(@pid), pretty: true, width: 40) %>
diff --git a/shardweb/mix.exs b/shardweb/mix.exs
index 90fc530..3b6ccb7 100644
--- a/shardweb/mix.exs
+++ b/shardweb/mix.exs
@@ -7,7 +7,7 @@ defmodule ShardWeb.Mixfile do
       version: "0.0.1",
       elixir: "~> 1.4",
       elixirc_paths: elixirc_paths(Mix.env),
-      compilers: [:phoenix, :gettext] ++ Mix.compilers ++ [:jsroutes],
+      compilers: [:phoenix, :gettext] ++ Mix.compilers,
       start_permanent: Mix.env == :prod,
       deps: deps()
     ]
@@ -36,7 +36,6 @@ defmodule ShardWeb.Mixfile do
       {:phoenix_pubsub, "~> 1.0"},
       {:phoenix_html, "~> 2.10"},
       {:phoenix_live_reload, "~> 1.0", only: :dev},
-      {:phoenix_jsroutes, "~> 0.0.4"},
       {:gettext, "~> 0.11"},
       {:cowboy, "~> 1.0"},
       {:phoenix_gon, "~> 0.4.0"},
-- 
cgit v1.2.3