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 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: []