repl easier to use; add YAML dependency
parent
d94bbd44cc
commit
c9db66f0f9
|
@ -13,6 +13,12 @@ git-tree-sha1 = "b530fbeb6f41ab5a83fbe3db1fcbe879334bcd2d"
|
||||||
uuid = "b99e7846-7c00-51b0-8f62-c81ae34c0232"
|
uuid = "b99e7846-7c00-51b0-8f62-c81ae34c0232"
|
||||||
version = "0.4.2"
|
version = "0.4.2"
|
||||||
|
|
||||||
|
[[Codecs]]
|
||||||
|
deps = ["Test"]
|
||||||
|
git-tree-sha1 = "70885e5e038cba1c4c17a84ad6c40756e10a4fb5"
|
||||||
|
uuid = "19ecbf4d-ef7c-5e4b-b54a-0a0ff23c5aed"
|
||||||
|
version = "0.5.0"
|
||||||
|
|
||||||
[[Compat]]
|
[[Compat]]
|
||||||
deps = ["Base64", "Dates", "DelimitedFiles", "Distributed", "InteractiveUtils", "LibGit2", "Libdl", "LinearAlgebra", "Markdown", "Mmap", "Pkg", "Printf", "REPL", "Random", "Serialization", "SharedArrays", "Sockets", "SparseArrays", "Statistics", "Test", "UUIDs", "Unicode"]
|
deps = ["Base64", "Dates", "DelimitedFiles", "Distributed", "InteractiveUtils", "LibGit2", "Libdl", "LinearAlgebra", "Markdown", "Mmap", "Pkg", "Printf", "REPL", "Random", "Serialization", "SharedArrays", "Sockets", "SparseArrays", "Statistics", "Test", "UUIDs", "Unicode"]
|
||||||
git-tree-sha1 = "ae262fa91da6a74e8937add6b613f58cd56cdad4"
|
git-tree-sha1 = "ae262fa91da6a74e8937add6b613f58cd56cdad4"
|
||||||
|
@ -156,3 +162,9 @@ uuid = "cf7118a7-6976-5b1a-9a39-7adc72f591a4"
|
||||||
|
|
||||||
[[Unicode]]
|
[[Unicode]]
|
||||||
uuid = "4ec0a83e-493e-50e2-b9ac-8f72acf5a8f5"
|
uuid = "4ec0a83e-493e-50e2-b9ac-8f72acf5a8f5"
|
||||||
|
|
||||||
|
[[YAML]]
|
||||||
|
deps = ["Codecs", "Compat", "Pkg"]
|
||||||
|
git-tree-sha1 = "3bde77cee95cce0c0b9b18813d85e18e8ed4f415"
|
||||||
|
uuid = "ddb6d928-2868-570f-bddf-ab3f9cf99eb6"
|
||||||
|
version = "0.3.2"
|
||||||
|
|
|
@ -12,3 +12,4 @@ Nettle = "49dea1ee-f6fa-5aa6-9a11-8816cee7d4b9"
|
||||||
OhMyREPL = "5fb14364-9ced-5910-84b2-373655c76a03"
|
OhMyREPL = "5fb14364-9ced-5910-84b2-373655c76a03"
|
||||||
REPL = "3fa0cd96-eef1-5676-8a61-b3b8758bbffb"
|
REPL = "3fa0cd96-eef1-5676-8a61-b3b8758bbffb"
|
||||||
URIParser = "30578b45-9adc-5946-b283-645ec420af67"
|
URIParser = "30578b45-9adc-5946-b283-645ec420af67"
|
||||||
|
YAML = "ddb6d928-2868-570f-bddf-ab3f9cf99eb6"
|
||||||
|
|
|
@ -3,6 +3,7 @@ module MatrixChat
|
||||||
using OhMyREPL
|
using OhMyREPL
|
||||||
using HTTP
|
using HTTP
|
||||||
using JSON
|
using JSON
|
||||||
|
using YAML
|
||||||
using Nettle
|
using Nettle
|
||||||
using Dates
|
using Dates
|
||||||
|
|
||||||
|
|
44
src/repl.jl
44
src/repl.jl
|
@ -100,7 +100,6 @@ struct CommandSpec
|
||||||
description::String
|
description::String
|
||||||
help::Union{Nothing}
|
help::Union{Nothing}
|
||||||
end
|
end
|
||||||
command_specs = Dict{String,CommandSpec}() # TODO remove this ?
|
|
||||||
|
|
||||||
function SuperSpecs(foo)::Dict{String,Dict{String,CommandSpec}}
|
function SuperSpecs(foo)::Dict{String,Dict{String,CommandSpec}}
|
||||||
super_specs = Dict()
|
super_specs = Dict()
|
||||||
|
@ -747,8 +746,7 @@ function create_mode(repl, main)
|
||||||
return matrix_mode
|
return matrix_mode
|
||||||
end
|
end
|
||||||
|
|
||||||
function repl()
|
function repl_init(repl)
|
||||||
repl = Base.active_repl
|
|
||||||
main_mode = repl.interface.modes[1]
|
main_mode = repl.interface.modes[1]
|
||||||
matrix_mode = create_mode(repl, main_mode)
|
matrix_mode = create_mode(repl, main_mode)
|
||||||
push!(repl.interface.modes, matrix_mode)
|
push!(repl.interface.modes, matrix_mode)
|
||||||
|
@ -768,6 +766,44 @@ function repl()
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
|
|
||||||
|
function load_config_file(; configfile::String = expanduser("~/matrix/config.yaml"))
|
||||||
|
if isfile(configfile)
|
||||||
|
config = YAML.load_file(configfile)
|
||||||
|
else
|
||||||
|
# First run, create a new user/login and create the config file
|
||||||
|
@error "First run not implemented!"
|
||||||
|
end
|
||||||
|
config
|
||||||
|
end
|
||||||
|
|
||||||
|
function load_secret_or_login(config; secretfile = expanduser("~/matrix/secret.json"))
|
||||||
|
username = config["user"]["name"]
|
||||||
|
server = MatrixServer(config["user"]["server"])
|
||||||
|
if !isfile(secretfile)
|
||||||
|
# login
|
||||||
|
@info "Logging in..."
|
||||||
|
# FIXME: Don't know how to use a SecretBuffer
|
||||||
|
password = Base.getpass("@$(username):$(URI(server.instance).host)")
|
||||||
|
response = MatrixChat.login(server, username,
|
||||||
|
join(map(x -> read(seek(password, x), Char),
|
||||||
|
(1:password.size).-1),""))
|
||||||
|
write(secretfile, response.body |> String)
|
||||||
|
end
|
||||||
|
let sec = JSON.parse(open(secretfile, "r"))
|
||||||
|
@info "Session loaded from secret"
|
||||||
|
token = sec["access_token"]
|
||||||
|
deviceid = sec["device_id"]
|
||||||
|
end
|
||||||
|
(server, username, token, deviceid)
|
||||||
|
end
|
||||||
|
|
||||||
|
"""Initialize the REPL mode, read config files and start the TUI client
|
||||||
|
"""
|
||||||
|
function repl()
|
||||||
|
load_secret_or_login(load_config_file())
|
||||||
|
repl_init(Base.active_repl)
|
||||||
|
end
|
||||||
|
|
||||||
########
|
########
|
||||||
# SPEC #
|
# SPEC #
|
||||||
########
|
########
|
||||||
|
@ -833,8 +869,6 @@ for (k, v) in pairs(super_specs)
|
||||||
sort(map(wrap_option, collect(keys(spec.option_specs))))
|
sort(map(wrap_option, collect(keys(spec.option_specs))))
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
# TODO remove this
|
|
||||||
command_specs = super_specs["matrix"]
|
|
||||||
|
|
||||||
const help = md"""
|
const help = md"""
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue