vtacfriendly 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
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: []