vtacfriendly 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/bin/vtac-ui +104 -0
- data/lib/vtac_friendly/analytics_tab.rb +68 -0
- data/lib/vtac_friendly/config_tab.rb +55 -0
- data/lib/vtac_friendly/system_tab.rb +31 -0
- data/lib/vtac_friendly/vtac_client.rb +16 -0
- data/lib/vtac_friendly/vtac_packet.rb +37 -0
- data/lib/vtac_friendly.rb +19 -0
- metadata +92 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: c46638a042bcc01490a05eb4b0b91d51b93e50a288bd35fe205fa723dff374be
|
4
|
+
data.tar.gz: 411b3df41a0db976bb19a39d4ccc0eb51257e2bae7e68b46718d3224e61eb0a7
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: c144c9f1bbfd8dd7c6be8ee7891ac7bf9744ea2c362d237049882ebe1f98237c56b1a7f932a0587b7d47173ff0c488d19a2babdb06e7c946634d488098ef2292
|
7
|
+
data.tar.gz: 6f0619deec5fc44ea5404c8d569f4acb0961617f9872b20917eaecd187963aeb5cec7a8dba01984b69e992ddf6f4b0f19146bcc47c942f31c79e53fdc15d86e2
|
data/bin/vtac-ui
ADDED
@@ -0,0 +1,104 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require_relative "../lib/vtac_friendly.rb"
|
4
|
+
require "argparse"
|
5
|
+
require "io/console"
|
6
|
+
|
7
|
+
switches = {
|
8
|
+
p: { has_argument: true },
|
9
|
+
}
|
10
|
+
options = {}
|
11
|
+
|
12
|
+
args = ArgsParser::Args.new(switches: switches, options: options)
|
13
|
+
|
14
|
+
# Connect to client
|
15
|
+
|
16
|
+
srv = VtacFriendly::Client.connect(args.data[0], args.switches[:p] ? args.switches[:p].to_i : 5582)
|
17
|
+
server = srv[0]
|
18
|
+
server_name = srv[1]
|
19
|
+
sock_domain, remote_port, remote_hostname, remote_ip = server.peeraddr
|
20
|
+
|
21
|
+
bb = (R::C.color :blue) + (R::F.bold)
|
22
|
+
rb = R::F.reset(R::F.bold) + (R::C.color :reset)
|
23
|
+
|
24
|
+
ctab = :analytics
|
25
|
+
|
26
|
+
R::Cr.hide
|
27
|
+
|
28
|
+
loop do
|
29
|
+
R::S.clear
|
30
|
+
R::Cr.go_to_pos(0,0)
|
31
|
+
puts "Connected to #{server_name}@#{remote_ip}"
|
32
|
+
|
33
|
+
if ctab == :analytics
|
34
|
+
puts "_.f:bold.__.cb:black._Analytics_.f:reset.__.cb:gray._ConfigSystem".to_ftext
|
35
|
+
VtacFriendly::AnalyticsTab.show server
|
36
|
+
|
37
|
+
R::Cr.go_to_pos(0, R::S.height)
|
38
|
+
R::C.color :gray, type: :bg, mode: :set
|
39
|
+
print "#{bb}H#{rb} Tab left #{bb}L#{rb} Tab right #{bb}R#{rb} Reset analytics"
|
40
|
+
print " "*(R::S.width-R::Cr.pos[0])
|
41
|
+
elsif ctab == :config
|
42
|
+
puts "_.cb:gray._Analytics_.f:bold.__.cb:black._Config_.f:reset.__.cb:gray._System".to_ftext
|
43
|
+
VtacFriendly::ConfigTab.show server
|
44
|
+
|
45
|
+
R::Cr.go_to_pos(0, R::S.height)
|
46
|
+
R::C.color :gray, type: :bg, mode: :set
|
47
|
+
print "#{bb}H#{rb} Tab left #{bb}L#{rb} Tab right #{bb}P#{rb} Change pxsize #{bb}R#{rb} Change room length #{bb}M#{rb} Toggle mirroring"
|
48
|
+
print " "*(R::S.width-R::Cr.pos[0])
|
49
|
+
elsif ctab == :system
|
50
|
+
puts "_.cb:gray._AnalyticsConfig_.f:bold.__.cb:black._System".to_ftext
|
51
|
+
VtacFriendly::SystemTab.show remote_ip, server_name
|
52
|
+
|
53
|
+
R::Cr.go_to_pos(0, R::S.height)
|
54
|
+
R::C.color :gray, type: :bg, mode: :set
|
55
|
+
print "#{bb}H#{rb} Tab left #{bb}L#{rb} Tab right #{bb}S#{rb} Shut down #{bb}R#{rb} Reboot #{bb}U#{rb} Update"
|
56
|
+
print " "*(R::S.width-R::Cr.pos[0])
|
57
|
+
end
|
58
|
+
|
59
|
+
R::F.reset mode: :set
|
60
|
+
char = STDIN.getch
|
61
|
+
|
62
|
+
if char.upcase == "L" && ctab == :analytics
|
63
|
+
ctab = :config
|
64
|
+
elsif char.upcase == "H" && ctab == :config
|
65
|
+
ctab = :analytics
|
66
|
+
elsif char.upcase == "L" && ctab == :config
|
67
|
+
ctab = :system
|
68
|
+
elsif char.upcase == "H" && ctab == :system
|
69
|
+
ctab = :config
|
70
|
+
end
|
71
|
+
|
72
|
+
if char.upcase == "P" && ctab == :config
|
73
|
+
VtacFriendly::ConfigTab.change_pxsize(server)
|
74
|
+
end
|
75
|
+
if char.upcase == "R" && ctab == :config
|
76
|
+
VtacFriendly::ConfigTab.change_roomlength(server)
|
77
|
+
end
|
78
|
+
if char.upcase == "M" && ctab == :config
|
79
|
+
VtacFriendly::ConfigTab.toggle_mirroring(server)
|
80
|
+
end
|
81
|
+
|
82
|
+
if char.upcase == "R" && ctab == :analytics
|
83
|
+
VtacFriendly::AnalyticsTab.reset(server)
|
84
|
+
end
|
85
|
+
|
86
|
+
if char.upcase == "S" && ctab == :system
|
87
|
+
VtacFriendly::SystemTab.shutdown(server)
|
88
|
+
end
|
89
|
+
|
90
|
+
if char.upcase == "R" && ctab == :system
|
91
|
+
VtacFriendly::SystemTab.reboot(server)
|
92
|
+
end
|
93
|
+
|
94
|
+
if char.upcase == "U" && ctab == :system
|
95
|
+
VtacFriendly::SystemTab.update(server)
|
96
|
+
end
|
97
|
+
|
98
|
+
if char == "\x03"
|
99
|
+
R::Cr.show
|
100
|
+
R::S.clear
|
101
|
+
R::Cr.go_to_pos(0,0)
|
102
|
+
exit
|
103
|
+
end
|
104
|
+
end
|
@@ -0,0 +1,68 @@
|
|
1
|
+
module VtacFriendly
|
2
|
+
module AnalyticsTab
|
3
|
+
def show(server)
|
4
|
+
# Draw remotes
|
5
|
+
sh15 = "
|
6
|
+
#{R::C.color :green}╔═════════════╗
|
7
|
+
║ -A0 -A1 #{R::C.color :green}║
|
8
|
+
║ #{R::C.color :green}║
|
9
|
+
║ -A2 #{R::C.color :green}║
|
10
|
+
║ -A3 -A4 -A5 #{R::C.color :green}║
|
11
|
+
║ -A6 #{R::C.color :green}║
|
12
|
+
║ #{R::C.color :green}║
|
13
|
+
║ -A7 -A8 #{R::C.color :green}║
|
14
|
+
║ -A9 -AA #{R::C.color :green}║
|
15
|
+
║ -AB -AC #{R::C.color :green}║
|
16
|
+
║ -AD -AE #{R::C.color :green}║
|
17
|
+
╚═════════════╝
|
18
|
+
#{R::C.color :reset}"
|
19
|
+
|
20
|
+
# Get data
|
21
|
+
sh15_buttons = ["A0", "A1", "A2", "A3", "A4", "A5", "A6", "A7", "A8", "A9", "AA", "AB", "AC", "AD", "AE"]
|
22
|
+
white_spectrum_colors = (234..245).to_a.reverse
|
23
|
+
sh15_keypresses_by_usage={}
|
24
|
+
sh15_buttons_color = {}
|
25
|
+
|
26
|
+
# Get heatmap colors
|
27
|
+
sh15_buttons.each do |b|
|
28
|
+
server.puts VtacPacket.new(:command, "analytics keypresses view #{b}")
|
29
|
+
sh15_keypresses_by_usage[b] = VtacPacket.new(from_packet: server.gets)[:contents].to_i
|
30
|
+
end
|
31
|
+
|
32
|
+
max_num = sh15_keypresses_by_usage.values.max
|
33
|
+
max_num = 1 if (max_num == 0)
|
34
|
+
|
35
|
+
sh15_keypresses_by_usage.keys.each do |k|
|
36
|
+
percentile = (sh15_keypresses_by_usage[k].to_f/max_num.to_f)*100
|
37
|
+
num = white_spectrum_colors[(percentile/(100.0/white_spectrum_colors.length)).to_i-1]
|
38
|
+
sh15_buttons_color[k] = num
|
39
|
+
end
|
40
|
+
|
41
|
+
sh15_buttons.each do |b|
|
42
|
+
server.puts VtacPacket.new(:command, "analytics keypresses view #{b}")
|
43
|
+
num = VtacPacket.new(from_packet: server.gets)[:contents]
|
44
|
+
if num == ""
|
45
|
+
num = "000"
|
46
|
+
elsif num.length > 3
|
47
|
+
num = "999"
|
48
|
+
elsif num.length < 3
|
49
|
+
num = "0"*(3-(num.length)) + num
|
50
|
+
end
|
51
|
+
|
52
|
+
num = "#{R::F.bold}#{R::C.color :yellow}#{R::C.num_color sh15_buttons_color[b], type: :bg}#{num}#{R::C.color :reset}#{R::C.color :reset, type: :bg}#{R::F.reset}"
|
53
|
+
|
54
|
+
sh15.gsub!(?-+b, num)
|
55
|
+
end
|
56
|
+
|
57
|
+
puts sh15
|
58
|
+
|
59
|
+
end
|
60
|
+
|
61
|
+
def reset(server)
|
62
|
+
server.puts VtacPacket.new(:command, "analytics keypresses clear")
|
63
|
+
VtacPacket.new(from_packet: server.gets)[:contents]
|
64
|
+
end
|
65
|
+
|
66
|
+
module_function :show, :reset
|
67
|
+
end
|
68
|
+
end
|
@@ -0,0 +1,55 @@
|
|
1
|
+
module VtacFriendly
|
2
|
+
module ConfigTab
|
3
|
+
def show(server)
|
4
|
+
server.puts VtacPacket.new(:command, "config pxsize")
|
5
|
+
pxsize = VtacPacket.new(from_packet: server.gets)[:contents]
|
6
|
+
|
7
|
+
server.puts VtacPacket.new(:command, "config roomlength")
|
8
|
+
roomlength = VtacPacket.new(from_packet: server.gets)[:contents]
|
9
|
+
|
10
|
+
server.puts VtacPacket.new(:command, "config mirrored")
|
11
|
+
mirrored = VtacPacket.new(from_packet: server.gets)[:contents] == "0" ? "Off" : "On"
|
12
|
+
|
13
|
+
puts "
|
14
|
+
#{R::C.color :blue}#{R::F.bold}Pxsize#{R::F.reset} #{pxsize}
|
15
|
+
#{R::C.color :blue}#{R::F.bold}Room length#{R::F.reset} #{roomlength}
|
16
|
+
#{R::C.color :blue}#{R::F.bold}Mirroring#{R::F.reset} #{mirrored}
|
17
|
+
"
|
18
|
+
end
|
19
|
+
|
20
|
+
def change_pxsize(server)
|
21
|
+
R::Cr.go_to_pos(0, R::S.height-1)
|
22
|
+
R::C.color :gray, type: :bg, mode: :set
|
23
|
+
print "Pxsize: "
|
24
|
+
|
25
|
+
R::Cr.show
|
26
|
+
server.puts VtacPacket.new(:command, "config pxsize #{STDIN.gets.chomp}")
|
27
|
+
R::Cr.hide
|
28
|
+
|
29
|
+
R::C.color :reset, type: :bg, mode: :set
|
30
|
+
|
31
|
+
VtacPacket.new(from_packet: server.gets)[:contents]
|
32
|
+
end
|
33
|
+
|
34
|
+
def change_roomlength(server)
|
35
|
+
R::Cr.go_to_pos(0, R::S.height-1)
|
36
|
+
R::C.color :gray, type: :bg, mode: :set
|
37
|
+
print "Room length: "
|
38
|
+
|
39
|
+
R::Cr.show
|
40
|
+
server.puts VtacPacket.new(:command, "config roomlength #{STDIN.gets.chomp}")
|
41
|
+
R::Cr.hide
|
42
|
+
|
43
|
+
R::C.color :reset, type: :bg, mode: :set
|
44
|
+
|
45
|
+
VtacPacket.new(from_packet: server.gets)[:contents]
|
46
|
+
end
|
47
|
+
|
48
|
+
def toggle_mirroring(server)
|
49
|
+
server.puts VtacPacket.new(:command, "config mirrored toggle")
|
50
|
+
VtacPacket.new(from_packet: server.gets)[:contents]
|
51
|
+
end
|
52
|
+
|
53
|
+
module_function :show, :change_pxsize, :change_roomlength, :toggle_mirroring
|
54
|
+
end
|
55
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
module VtacFriendly
|
2
|
+
module SystemTab
|
3
|
+
def show(ip, name)
|
4
|
+
puts "
|
5
|
+
#{R::C.color :blue}#{R::F.bold}IP#{R::F.reset} #{ip}
|
6
|
+
#{R::C.color :blue}#{R::F.bold}Server name#{R::F.reset} #{name}
|
7
|
+
"
|
8
|
+
end
|
9
|
+
|
10
|
+
def shutdown(server)
|
11
|
+
server.puts VtacPacket.new(:command, "shutdown")
|
12
|
+
VtacPacket.new(from_packet: server.gets)[:contents]
|
13
|
+
R::Cr.show
|
14
|
+
exit
|
15
|
+
end
|
16
|
+
|
17
|
+
def reboot(server)
|
18
|
+
server.puts VtacPacket.new(:command, "reboot")
|
19
|
+
VtacPacket.new(from_packet: server.gets)[:contents]
|
20
|
+
R::Cr.show
|
21
|
+
exit
|
22
|
+
end
|
23
|
+
|
24
|
+
def update(server)
|
25
|
+
server.puts VtacPacket.new(:command, "update")
|
26
|
+
VtacPacket.new(from_packet: server.gets)[:contents]
|
27
|
+
end
|
28
|
+
|
29
|
+
module_function :show, :shutdown, :reboot, :update
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
module VtacFriendly
|
2
|
+
module Client
|
3
|
+
def connect(host, port)
|
4
|
+
server = TCPSocket.open(host, port)
|
5
|
+
|
6
|
+
init_pack = VtacPacket.new(from_packet: server.gets)
|
7
|
+
server_name = init_pack[:contents]
|
8
|
+
|
9
|
+
server.puts VtacPacket.new(:id_client, "vtac_client")
|
10
|
+
|
11
|
+
return [server, server_name]
|
12
|
+
end
|
13
|
+
|
14
|
+
module_function :connect
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
module VtacFriendly
|
2
|
+
class VtacPacket
|
3
|
+
@@allowed_types = [:command, :response, :id_server, :id_client, :error, :disconnect]
|
4
|
+
|
5
|
+
def initialize(type=:response, contents="", from_packet:nil)
|
6
|
+
if !from_packet
|
7
|
+
if @@allowed_types.include?(type)
|
8
|
+
@type = type
|
9
|
+
@contents = contents.to_s
|
10
|
+
end
|
11
|
+
else
|
12
|
+
packet = from_packet
|
13
|
+
packet = JSON.parse(packet)
|
14
|
+
@type = packet["type"]
|
15
|
+
@contents = packet["contents"]
|
16
|
+
end
|
17
|
+
|
18
|
+
return self
|
19
|
+
end
|
20
|
+
|
21
|
+
def to_h
|
22
|
+
return {type: @type.to_s, contents: @contents}
|
23
|
+
end
|
24
|
+
|
25
|
+
def to_s
|
26
|
+
return self.to_json.to_s
|
27
|
+
end
|
28
|
+
|
29
|
+
def to_json
|
30
|
+
return self.to_h.to_json
|
31
|
+
end
|
32
|
+
|
33
|
+
def [](k)
|
34
|
+
return self.to_h[k.to_sym]
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
require_relative "vtac_friendly/vtac_client.rb"
|
2
|
+
require_relative "vtac_friendly/vtac_packet.rb"
|
3
|
+
require_relative "vtac_friendly/analytics_tab.rb"
|
4
|
+
require_relative "vtac_friendly/config_tab.rb"
|
5
|
+
require_relative "vtac_friendly/system_tab.rb"
|
6
|
+
require "socket"
|
7
|
+
require "rbtext"
|
8
|
+
require "json"
|
9
|
+
|
10
|
+
module VtacFriendly
|
11
|
+
@ver_1 = 0
|
12
|
+
@ver_2 = 0
|
13
|
+
@ver_3 = 1
|
14
|
+
@ver_4 = ""
|
15
|
+
|
16
|
+
def self.version
|
17
|
+
"#{@ver_1}.#{@ver_2}.#{@ver_3}#{".#{@ver_4}" if @ver_4.length > 1}"
|
18
|
+
end
|
19
|
+
end
|
metadata
ADDED
@@ -0,0 +1,92 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: vtacfriendly
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Matthias Lee
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2023-01-15 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: argparse
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: 0.0.3
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: 0.0.3
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: rbtext
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: 0.3.2
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: 0.3.2
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: io-console
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: 0.5.6
|
48
|
+
type: :runtime
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: 0.5.6
|
55
|
+
description: A friendly interface for VTAC
|
56
|
+
email: matthias@matthiasclee.com
|
57
|
+
executables:
|
58
|
+
- vtac-ui
|
59
|
+
extensions: []
|
60
|
+
extra_rdoc_files: []
|
61
|
+
files:
|
62
|
+
- bin/vtac-ui
|
63
|
+
- lib/vtac_friendly.rb
|
64
|
+
- lib/vtac_friendly/analytics_tab.rb
|
65
|
+
- lib/vtac_friendly/config_tab.rb
|
66
|
+
- lib/vtac_friendly/system_tab.rb
|
67
|
+
- lib/vtac_friendly/vtac_client.rb
|
68
|
+
- lib/vtac_friendly/vtac_packet.rb
|
69
|
+
homepage: https://github.com/Matthiasclee/VtacFriendly
|
70
|
+
licenses:
|
71
|
+
- AGPL-3.0
|
72
|
+
metadata: {}
|
73
|
+
post_install_message:
|
74
|
+
rdoc_options: []
|
75
|
+
require_paths:
|
76
|
+
- lib
|
77
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
78
|
+
requirements:
|
79
|
+
- - ">="
|
80
|
+
- !ruby/object:Gem::Version
|
81
|
+
version: '0'
|
82
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
83
|
+
requirements:
|
84
|
+
- - ">="
|
85
|
+
- !ruby/object:Gem::Version
|
86
|
+
version: '0'
|
87
|
+
requirements: []
|
88
|
+
rubygems_version: 3.1.6
|
89
|
+
signing_key:
|
90
|
+
specification_version: 4
|
91
|
+
summary: Vtac UI
|
92
|
+
test_files: []
|