aniview 1.3.0 → 2.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (38) hide show
  1. checksums.yaml +4 -4
  2. data/bin/aniview +2 -3
  3. data/lib/aniview.rb +50 -243
  4. data/lib/aniview/client/aniclient.rb +111 -53
  5. data/lib/aniview/interface/animeio/animefile.rb +73 -64
  6. data/lib/aniview/interface/animeio/animeio.rb +184 -181
  7. data/lib/aniview/interface/animeio/animeseries.rb +53 -48
  8. data/lib/aniview/interface/deluge/delugec.rb +158 -153
  9. data/lib/aniview/interface/deluge/torrentitem.rb +21 -16
  10. data/lib/aniview/interface/item.rb +21 -17
  11. data/lib/aniview/interface/mpv/mpvbridge.rb +78 -73
  12. data/lib/aniview/interface/pref/pref.rb +135 -132
  13. data/lib/aniview/interface/pref/prefitem.rb +16 -15
  14. data/lib/aniview/interface/schedule/schedule.rb +89 -83
  15. data/lib/aniview/interface/schedule/scheduleitem.rb +54 -51
  16. data/lib/aniview/interface/subscription/subscription.rb +111 -108
  17. data/lib/aniview/util/term.rb +39 -36
  18. data/lib/aniview/util/util.rb +149 -0
  19. data/lib/aniview/view/aiomenu.rb +68 -63
  20. data/lib/aniview/view/color.rb +69 -67
  21. data/lib/aniview/view/delugemenu.rb +44 -40
  22. data/lib/aniview/view/menu.rb +281 -286
  23. data/lib/aniview/view/prefmenu.rb +36 -34
  24. data/lib/aniview/view/schedulemenu.rb +32 -29
  25. data/lib/aniview/view/statusline.rb +19 -14
  26. data/lib/aniview/view/subscriptionmenu.rb +35 -32
  27. data/lib/application.rb +260 -0
  28. data/lib/daemon.rb +174 -0
  29. metadata +5 -12
  30. data/bin/aniviewd +0 -20
  31. data/lib/aniview/util/alogger.rb +0 -18
  32. data/lib/aniview/util/command.rb +0 -25
  33. data/lib/aniview/util/format.rb +0 -123
  34. data/lib/aniview/util/online.rb +0 -12
  35. data/lib/aniview/util/serializer.rb +0 -19
  36. data/lib/aniview/util/stringhelp.rb +0 -50
  37. data/lib/aniview/view/emote.rb +0 -345
  38. data/lib/aniviewd.rb +0 -179
@@ -1,37 +1,40 @@
1
- class Term
2
-
3
- def initialize
4
- @tput=Hash[
5
- "smcup" => %x(tput smcup),
6
- "rmcup" => %x(tput rmcup),
7
- "civis" => %x(tput civis),
8
- "cnorm" => %x(tput cnorm),
9
- "el1" => "\e[2K",
10
- "bold" => %x(tput bold),
11
- "nobold" => %x(tput sgr0),
12
- ]
13
- end
14
-
15
- def save; print @tput["smcup"]; return self; end
16
- def restore; print @tput["rmcup"]; return self; end
17
- def hide_cursor; print @tput["civis"]; return self; end
18
- def show_cursor; print @tput["cnorm"]; return self; end
19
- def clear_line; print @tput["el1"]; return self; end
20
- def echo_off; %x(stty -echo); return self; end
21
- def echo_on; %x(stty echo); return self; end
22
- def clear; print "\033[2J"; return self; end
23
- def bold; print @tput["bold"]; return self; end
24
- def nobold; print @tput["nobold"]; return self; end
25
-
26
- def cols; return HighLine::SystemExtensions.terminal_size[0]; end
27
- def rows; return HighLine::SystemExtensions.terminal_size[1]; end
28
-
29
- def getKey
30
- return STDIN.getch.gsub("\r", "enter").gsub(" ", "space").gsub("A", "up").gsub("B", "down").gsub("C", "right").gsub("D", "left").gsub("\e", "skip").gsub("[", "skip")
31
- end
32
-
33
- def reset
34
- self.restore.show_cursor.echo_on
35
- end
36
-
1
+ module Aniview
2
+ module Util
3
+ class Term
4
+ def initialize
5
+ @tput=Hash[
6
+ "smcup" => %x(tput smcup),
7
+ "rmcup" => %x(tput rmcup),
8
+ "civis" => %x(tput civis),
9
+ "cnorm" => %x(tput cnorm),
10
+ "el1" => "\e[2K",
11
+ "bold" => %x(tput bold),
12
+ "nobold" => %x(tput sgr0),
13
+ ]
14
+ end
15
+
16
+ def save; print @tput["smcup"]; return self; end
17
+ def restore; print @tput["rmcup"]; return self; end
18
+ def hide_cursor; print @tput["civis"]; return self; end
19
+ def show_cursor; print @tput["cnorm"]; return self; end
20
+ def clear_line; print @tput["el1"]; return self; end
21
+ def echo_off; %x(stty -echo); return self; end
22
+ def echo_on; %x(stty echo); return self; end
23
+ def clear; print "\033[2J"; return self; end
24
+ def bold; print @tput["bold"]; return self; end
25
+ def nobold; print @tput["nobold"]; return self; end
26
+
27
+ def cols; return HighLine::SystemExtensions.terminal_size[0]; end
28
+ def rows; return HighLine::SystemExtensions.terminal_size[1]; end
29
+
30
+ def getKey
31
+ return STDIN.getch.gsub("\r", "enter").gsub(" ", "space").gsub("A", "up").gsub("B", "down").gsub("C", "right").gsub("D", "left").gsub("\e", "skip").gsub("[", "skip")
32
+ end
33
+
34
+ def reset
35
+ self.restore.show_cursor.echo_on
36
+ end
37
+
38
+ end
39
+ end
37
40
  end
@@ -0,0 +1,149 @@
1
+ require 'base64'
2
+ require 'readline'
3
+
4
+ module Aniview
5
+ module Util
6
+ def self.readline(term, prompt = "", default = "")
7
+ term.bold.echo_on
8
+ print "\033[" + String(term.rows) + ";1H" + Aniview::View::Color.white
9
+ term.show_cursor
10
+ Readline.completion_append_character = ""
11
+ Readline.pre_input_hook = -> do
12
+ Readline.insert_text default
13
+ Readline.redisplay
14
+ Readline.pre_input_hook = nil
15
+ end
16
+ input = Readline.readline(prompt, false)
17
+ term.hide_cursor.nobold.echo_off.clear
18
+ return input
19
+ end
20
+
21
+ def self.format_duration v
22
+ hours = Integer((v-(v%3600))/3600)
23
+ minutes = Integer( ((v-(v%60))/60) - (hours * 60))
24
+ seconds = Integer(v%60)
25
+ seconds = "0" + String(seconds) if seconds < 10
26
+ if hours < 1 and minutes < 1
27
+ "0:#{seconds}"
28
+ else
29
+ if hours < 1
30
+ return "#{String(minutes)}:#{String(seconds)}"
31
+ else
32
+ minutes = "0" + String(minutes) if minutes < 10
33
+ return "#{String(hours)}:#{String(minutes)}:#{String(seconds)}"
34
+ end
35
+ end
36
+ end
37
+
38
+ def self.format_size s
39
+ fs = Float(s)
40
+
41
+ bytecount = {
42
+ "TB" => 1000000000000.0,
43
+ "GB" => 1000000000.0,
44
+ "MB" => 1000000.0,
45
+ "KB" => 1000.0,
46
+ "B" => 1.0,
47
+ }
48
+ r = "TB"
49
+ r = "GB" if s < bytecount["TB"]
50
+ r = "MB" if s < bytecount["GB"]
51
+ r = "KB" if s < bytecount["KB"]
52
+
53
+ return String( Float(fs/bytecount[r] * 10.0 ).round / 10.0 ) + r
54
+ end
55
+
56
+ def self.format_progress p
57
+ return "#{Integer(p)}.#{Integer(p * 10.0) % 10}"
58
+ end
59
+
60
+ def self.parse_format string, d, cols
61
+ le = "\e[K\n"
62
+
63
+ pstr = []
64
+ add_to = ""
65
+ buffer_char = []
66
+
67
+ mode = "char"
68
+
69
+ padding_collected = 0
70
+
71
+ string.split('').each { |c|
72
+
73
+ if mode == "e"
74
+ add_to += String(c)
75
+ mode = "char"
76
+
77
+ elsif c == '%'
78
+ mode = "%"
79
+
80
+ elsif c == '$'
81
+ mode = "$"
82
+
83
+ elsif c == '@'
84
+ pstr << add_to
85
+ add_to = ""
86
+ mode = "@"
87
+
88
+ elsif c == "#"
89
+ padding_collected += 1
90
+
91
+ elsif c == "\\"
92
+ mode = "e"
93
+
94
+ elsif mode == "@"
95
+ buffer_char << c
96
+ mode = "char"
97
+
98
+ elsif mode == "%"
99
+ addstr = ""
100
+ addstr = String(d[c]) if d.key?(c)
101
+ ol = addstr.length
102
+ addstr = " " + addstr while addstr.length < (ol + padding_collected)
103
+ add_to += addstr
104
+ mode = "char"
105
+
106
+ else
107
+ add_to += c
108
+
109
+ end
110
+ }
111
+ pstr << add_to
112
+
113
+ buffer_char << " " if buffer_char.length == 0
114
+
115
+ midstr = ""
116
+ tl = 0
117
+ pstr.each{ |s| tl += s.length }
118
+ buffer_space = 0
119
+ buffer_space = (cols - tl) / (pstr.length - 1) if pstr.length > 1
120
+
121
+ addl_space = (cols - tl) % pstr.length
122
+
123
+ pstr.each_with_index{ |str, i|
124
+ break if i == pstr.length - 1
125
+ buffer_ = ""
126
+ buffer_ = buffer_char[i] * buffer_space if buffer_space >= 0
127
+
128
+ midstr += str + buffer_
129
+ }
130
+ midstr += pstr[pstr.length - 1]
131
+
132
+ return midstr[0..cols-1]
133
+ end
134
+
135
+ def self.encode_object d
136
+ Base64.strict_encode64(Marshal.dump d)
137
+ end
138
+
139
+ def self.decode_object e
140
+ begin
141
+ Marshal.load(Base64.decode64(e))
142
+ rescue ArgumentError
143
+ {}
144
+ rescue TypeError
145
+ {}
146
+ end
147
+ end
148
+ end
149
+ end
@@ -1,66 +1,71 @@
1
1
  require_relative 'menu'
2
- require_relative '../util/format'
2
+ require_relative '../util/util'
3
3
 
4
- class AioMenu < Menu
5
-
6
- def setmal malanime
7
- @malanime = malanime
8
- end
9
-
10
- def refresh
11
- @items = @interface.makeHash @interface.send(@refresh_func)
12
-
13
- @attributes = {
14
- "t" => @attributes["t"],
15
- "D" => Format.format_duration(getDuration),
16
- "S" => Format.format_size(getSize)
17
- }
18
-
19
- @expanded = -1 if @items.values[@expanded] == nil
20
- fixCursor
21
- end
22
-
23
- def getDuration
24
- dur = 0
25
- @items.each{ |child|
26
- dur += child[0].attributes["d"]
27
- }
28
- return dur
29
- end
30
-
31
- def getSize
32
- size = 0
33
- @items.each{ |child|
34
- size += child[0].attributes["s"]
35
- }
36
- return size
37
- end
38
-
39
- def customControl(key, sel)
40
- path = @items.values[sel["out"]][sel["in"]].path
41
-
42
- if key == @pref.get("keybindings")["menu_nav_expand"]
43
- expand(sel["out"])
44
- elsif key == "r"
45
- refresh
46
- elsif key == "enter"
47
-
48
- @interface.watch(@items.values[sel["out"]][sel["in"]])
49
- #@interface.addWatched(path)
50
- @interface.logWatched(path)
51
-
52
- #@malanime.update(path)
53
-
54
- refresh
55
- elsif key == @pref.get("keybindings")["anime_set_watched"]
56
- @interface.addWatched(path)
57
- refresh
58
- elsif key == @pref.get("keybindings")["anime_undo_set_watched"]
59
- @interface.rmWatched()
60
- refresh
61
- elsif key == @pref.get("keybindings")["anime_set_unwatched"]
62
- @interface.rmWatched(path)
63
-
64
- end
65
- end
4
+ module Aniview
5
+ module View
6
+ class AioMenu < Menu
7
+ include Aniview::Util
8
+ def setmal malanime
9
+ @malanime = malanime
10
+ end
11
+
12
+ def refresh
13
+ @items = @interface.makeHash @interface.send(@refresh_function)
14
+
15
+ @attributes = {
16
+ "t" => @attributes["t"],
17
+ "D" => Util.format_duration(getDuration),
18
+ "S" => Util.format_size(getSize)
19
+ }
20
+
21
+ @expanded = -1 if @items.values[@expanded] == nil
22
+ fixCursor
23
+ end
24
+
25
+ def getDuration
26
+ dur = 0
27
+ @items.each{ |child|
28
+ dur += child[0].attributes["d"]
29
+ }
30
+ return dur
31
+ end
32
+
33
+ def getSize
34
+ size = 0
35
+ @items.each{ |child|
36
+ size += child[0].attributes["s"]
37
+ }
38
+ return size
39
+ end
40
+
41
+ def customControl(key, sel)
42
+ path = @items.values[sel["out"]][sel["in"]].path
43
+
44
+ if key == @pref.get("keybindings")["menu_nav_expand"]
45
+ expand(sel["out"])
46
+ elsif key == "r"
47
+ refresh
48
+ elsif key == "enter"
49
+
50
+ @interface.watch(@items.values[sel["out"]][sel["in"]])
51
+ #@interface.addWatched(path)
52
+ @interface.logWatched(path)
53
+
54
+ #@malanime.update(path)
55
+
56
+ refresh
57
+ elsif key == @pref.get("keybindings")["anime_set_watched"]
58
+ @interface.addWatched(path)
59
+ refresh
60
+ elsif key == @pref.get("keybindings")["anime_undo_set_watched"]
61
+ @interface.rmWatched()
62
+ refresh
63
+ elsif key == @pref.get("keybindings")["anime_set_unwatched"]
64
+ @interface.rmWatched(path)
65
+
66
+ end
67
+ end
68
+ end
69
+ end
66
70
  end
71
+
@@ -1,67 +1,69 @@
1
- class Color
2
-
3
- def self.black
4
- "\e[30m"
5
- end
6
-
7
- def self.red
8
- "\e[31m"
9
- end
10
-
11
- def self.green
12
- "\e[32m"
13
- end
14
-
15
- def self.yellow
16
- "\e[33m"
17
- end
18
-
19
- def self.blue
20
- "\e[34m"
21
- end
22
-
23
- def self.magenta
24
- "\e[35m"
25
- end
26
-
27
- def self.cyan
28
- "\e[36m"
29
- end
30
-
31
- def self.white
32
- "\e[37m"
33
- end
34
-
35
- def self.bright_black
36
- "\e[37m"
37
- end
38
-
39
- def self.bright_red
40
- "\e[38m"
41
- end
42
-
43
- def self.bright_green
44
- "\e[39m"
45
- end
46
-
47
- def self.bright_yellow
48
- "\e[40m"
49
- end
50
-
51
- def self.bright_blue
52
- "\e[41m"
53
- end
54
-
55
- def self.bright_magenta
56
- "\e[42m"
57
- end
58
-
59
- def self.bright_cyan
60
- "\e[43m"
61
- end
62
-
63
- def self.bright_white
64
- "\e[44m"
65
- end
66
-
67
- end
1
+ module Aniview
2
+ module View
3
+ module Color
4
+ def self.black
5
+ "\e[30m"
6
+ end
7
+
8
+ def self.red
9
+ "\e[31m"
10
+ end
11
+
12
+ def self.green
13
+ "\e[32m"
14
+ end
15
+
16
+ def self.yellow
17
+ "\e[33m"
18
+ end
19
+
20
+ def self.blue
21
+ "\e[34m"
22
+ end
23
+
24
+ def self.magenta
25
+ "\e[35m"
26
+ end
27
+
28
+ def self.cyan
29
+ "\e[36m"
30
+ end
31
+
32
+ def self.white
33
+ "\e[37m"
34
+ end
35
+
36
+ def self.bright_black
37
+ "\e[37m"
38
+ end
39
+
40
+ def self.bright_red
41
+ "\e[38m"
42
+ end
43
+
44
+ def self.bright_green
45
+ "\e[39m"
46
+ end
47
+
48
+ def self.bright_yellow
49
+ "\e[40m"
50
+ end
51
+
52
+ def self.bright_blue
53
+ "\e[41m"
54
+ end
55
+
56
+ def self.bright_magenta
57
+ "\e[42m"
58
+ end
59
+
60
+ def self.bright_cyan
61
+ "\e[43m"
62
+ end
63
+
64
+ def self.bright_white
65
+ "\e[44m"
66
+ end
67
+ end
68
+ end
69
+ end