aniview 3.2.1 → 5.1.0
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 +4 -4
- data/README.md +8 -9
- data/bin/aniview +17 -9
- data/config/view.yml +3 -0
- data/lib/aniview.rb +1 -60
- data/modules/animeio/README.md +2 -0
- data/modules/animeio/config/daemon.yml +4 -0
- data/modules/animeio/config/view.yml +22 -0
- data/modules/animeio/lib/animeio.rb +24 -0
- data/modules/animeio/lib/animeio/anime_indexer.rb +99 -0
- data/modules/animeio/lib/animeio/animefile.rb +91 -0
- data/modules/animeio/lib/animeio/animeio.rb +175 -0
- data/modules/animeio/lib/animeio/animeio_view.rb +41 -0
- data/modules/animeio/lib/animeio/animeseries.rb +61 -0
- data/modules/mpv/README.md +2 -0
- data/modules/mpv/config/daemon.yml +2 -0
- data/modules/mpv/lib/mpv.rb +27 -0
- data/modules/mpv/lib/mpv/filename_widget.rb +16 -0
- data/modules/mpv/lib/mpv/mpv_controller.rb +85 -0
- data/modules/mpv/lib/mpv/time_widget.rb +29 -0
- metadata +33 -107
- data/lib/aniview/client/aniclient.rb +0 -118
- data/lib/aniview/interface/animeio/animefile.rb +0 -93
- data/lib/aniview/interface/animeio/animeio.rb +0 -321
- data/lib/aniview/interface/animeio/animeseries.rb +0 -60
- data/lib/aniview/interface/bridge.rb +0 -11
- data/lib/aniview/interface/deluge/delugec.rb +0 -172
- data/lib/aniview/interface/deluge/torrentitem.rb +0 -24
- data/lib/aniview/interface/item.rb +0 -24
- data/lib/aniview/interface/mpv/mpvbridge.rb +0 -149
- data/lib/aniview/interface/pref/defaults.json +0 -105
- data/lib/aniview/interface/pref/pref.rb +0 -209
- data/lib/aniview/interface/pref/prefitem.rb +0 -19
- data/lib/aniview/interface/pref/validate.json +0 -105
- data/lib/aniview/interface/schedule/schedule.rb +0 -99
- data/lib/aniview/interface/schedule/scheduleitem.rb +0 -59
- data/lib/aniview/interface/subscription/subscription.rb +0 -123
- data/lib/aniview/util/error.rb +0 -9
- data/lib/aniview/util/folder_listen.rb +0 -53
- data/lib/aniview/util/term.rb +0 -44
- data/lib/aniview/util/util.rb +0 -167
- data/lib/aniview/view/aiomenu.rb +0 -69
- data/lib/aniview/view/color.rb +0 -69
- data/lib/aniview/view/delugemenu.rb +0 -38
- data/lib/aniview/view/menu.rb +0 -325
- data/lib/aniview/view/prefmenu.rb +0 -26
- data/lib/aniview/view/schedulemenu.rb +0 -28
- data/lib/aniview/view/statusline.rb +0 -60
- data/lib/aniview/view/subscriptionmenu.rb +0 -37
- data/lib/application.rb +0 -306
- data/lib/daemon.rb +0 -188
data/lib/aniview/view/color.rb
DELETED
@@ -1,69 +0,0 @@
|
|
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
|
@@ -1,38 +0,0 @@
|
|
1
|
-
require_relative 'menu'
|
2
|
-
require_relative '../util/util'
|
3
|
-
|
4
|
-
module Aniview
|
5
|
-
module View
|
6
|
-
class DelugeMenu < Menu
|
7
|
-
include Aniview::Util
|
8
|
-
def refresh_attributes
|
9
|
-
@attributes = {
|
10
|
-
"t" => @attributes["t"],
|
11
|
-
"s" => @interface.getStatus
|
12
|
-
}
|
13
|
-
end
|
14
|
-
|
15
|
-
def customControl(key, sel)
|
16
|
-
|
17
|
-
if @items != nil and @items.length > 0
|
18
|
-
item = @items.values[sel["out"]]
|
19
|
-
else
|
20
|
-
item = ""
|
21
|
-
end
|
22
|
-
|
23
|
-
if key == @pref.get("keybindings")["torrents_pause"]
|
24
|
-
@interface.toggleTorrent(item)
|
25
|
-
elsif key == @pref.get("keybindings")["torrents_remove"]
|
26
|
-
@interface.removeTorrent(item, false)
|
27
|
-
elsif key == @pref.get("keybindings")["torrents_remove_data"]
|
28
|
-
@interface.removeTorrent(item, true)
|
29
|
-
elsif key == "+"
|
30
|
-
pause
|
31
|
-
newval = Util.readline(@term, "mag:", "")
|
32
|
-
@interface.addTorrent newval, Dir.home + "/downloads/"
|
33
|
-
unpause
|
34
|
-
end
|
35
|
-
end
|
36
|
-
end
|
37
|
-
end
|
38
|
-
end
|
data/lib/aniview/view/menu.rb
DELETED
@@ -1,325 +0,0 @@
|
|
1
|
-
require 'benchmark'
|
2
|
-
|
3
|
-
require_relative 'color'
|
4
|
-
require_relative '../util/util'
|
5
|
-
|
6
|
-
module Aniview
|
7
|
-
module View
|
8
|
-
class Menu
|
9
|
-
include Aniview::Util
|
10
|
-
include Observable
|
11
|
-
|
12
|
-
attr_accessor :attributes
|
13
|
-
attr_accessor :format
|
14
|
-
|
15
|
-
def initialize(refresh_function: :items, interface:, name:, pref:, format:, term:, children: true, visible: false, logger: nil)
|
16
|
-
@attributes = {}
|
17
|
-
|
18
|
-
@logger = logger
|
19
|
-
|
20
|
-
@refresh_function = refresh_function
|
21
|
-
@interface = interface
|
22
|
-
@attributes["t"] = name
|
23
|
-
@pref = pref
|
24
|
-
@format = format
|
25
|
-
@term = term
|
26
|
-
@children = children
|
27
|
-
|
28
|
-
@expanded = -1
|
29
|
-
@selected = 0
|
30
|
-
|
31
|
-
@items_formatted = {}
|
32
|
-
@items_hash = {}
|
33
|
-
@hashmap = {}
|
34
|
-
@lu = 0
|
35
|
-
|
36
|
-
@oldRows = @term.rows
|
37
|
-
|
38
|
-
refresh
|
39
|
-
|
40
|
-
@view = [0, @term.rows - 3]
|
41
|
-
|
42
|
-
@updated = true
|
43
|
-
|
44
|
-
if @interface.singleton_class.include? Observable
|
45
|
-
@interface.add_observer(self, :refresh)
|
46
|
-
end
|
47
|
-
end
|
48
|
-
|
49
|
-
def unpause
|
50
|
-
unless @interface.singleton_class.include? Observable
|
51
|
-
auto_update s: :start
|
52
|
-
end
|
53
|
-
end
|
54
|
-
|
55
|
-
def pause
|
56
|
-
auto_update s: :stop
|
57
|
-
end
|
58
|
-
|
59
|
-
def auto_update s: :start
|
60
|
-
case s
|
61
|
-
when :start
|
62
|
-
@update_thread = Thread.new do
|
63
|
-
while true
|
64
|
-
refresh
|
65
|
-
changed
|
66
|
-
notify_observers
|
67
|
-
sleep 1
|
68
|
-
end
|
69
|
-
end
|
70
|
-
when :stop
|
71
|
-
@update_thread.exit if @update_thread
|
72
|
-
end
|
73
|
-
end
|
74
|
-
|
75
|
-
def rfunc=(new_method)
|
76
|
-
@refresh_function = new_method
|
77
|
-
@items_formatted = {}
|
78
|
-
@items_hash = {}
|
79
|
-
@lu = 0
|
80
|
-
refresh
|
81
|
-
refreshFormats
|
82
|
-
end
|
83
|
-
|
84
|
-
def change_screen_size redraw: true
|
85
|
-
#@term.rows = lines
|
86
|
-
#@term.cols = cols
|
87
|
-
@items_formatted = {}
|
88
|
-
@items_hash = {}
|
89
|
-
@lu = 0
|
90
|
-
refresh
|
91
|
-
|
92
|
-
#if @term.rows > @oldRows
|
93
|
-
|
94
|
-
diff = @term.rows - @oldRows
|
95
|
-
#@view[0] += diff
|
96
|
-
@view[1] += diff
|
97
|
-
|
98
|
-
@oldRows = @term.rows
|
99
|
-
adjustView
|
100
|
-
draw if redraw
|
101
|
-
end
|
102
|
-
|
103
|
-
def refresh
|
104
|
-
@items = @interface.send(@refresh_function)
|
105
|
-
refreshFormats
|
106
|
-
refresh_attributes
|
107
|
-
@expanded = -1 if @children and @items.values[@expanded] == nil
|
108
|
-
fixCursor
|
109
|
-
changed
|
110
|
-
notify_observers
|
111
|
-
end
|
112
|
-
|
113
|
-
def expand(i)
|
114
|
-
return if i > @items.length
|
115
|
-
if @expanded == i
|
116
|
-
@selected = @expanded
|
117
|
-
@expanded = -1
|
118
|
-
else
|
119
|
-
@selected = i
|
120
|
-
@expanded = i
|
121
|
-
end
|
122
|
-
fixCursor
|
123
|
-
adjustView
|
124
|
-
changed
|
125
|
-
notify_observers
|
126
|
-
end
|
127
|
-
|
128
|
-
def resolve_selected(resolve_me=@selected)
|
129
|
-
in_expanded=false
|
130
|
-
inside = 0
|
131
|
-
outside = resolve_me
|
132
|
-
if @expanded > -1
|
133
|
-
if resolve_me > @expanded and resolve_me <= (@items.values[@expanded].length + @expanded)
|
134
|
-
outside = @expanded
|
135
|
-
inside = resolve_me - @expanded - 1
|
136
|
-
in_expanded=true
|
137
|
-
elsif resolve_me > @expanded
|
138
|
-
outside = resolve_me - @items.values[@expanded].length
|
139
|
-
end
|
140
|
-
end
|
141
|
-
|
142
|
-
return Hash["out" => outside, "in" => inside, "in_expanded" => in_expanded]
|
143
|
-
end
|
144
|
-
|
145
|
-
def moveCursor(dir)
|
146
|
-
@selected -= 1 if dir == "up"
|
147
|
-
@selected += 1 if dir == "down"
|
148
|
-
adjustView
|
149
|
-
fixCursor
|
150
|
-
end
|
151
|
-
|
152
|
-
def fixCursor
|
153
|
-
#wrap selector
|
154
|
-
#@selected = getLen - 1 if @selected < 0
|
155
|
-
#@selected = 0 if @selected >= getLen
|
156
|
-
#
|
157
|
-
#nowrap
|
158
|
-
@selected = 0 if @selected < 0
|
159
|
-
@selected = getLen - 1 if @selected >= getLen
|
160
|
-
end
|
161
|
-
|
162
|
-
def getLen
|
163
|
-
len = @items.length
|
164
|
-
len += @items.values[@expanded].length if @expanded >= 0
|
165
|
-
return len
|
166
|
-
end
|
167
|
-
|
168
|
-
def color(index)
|
169
|
-
if index == @selected
|
170
|
-
return Aniview::View::Color.public_send(@pref.get("clr")["selected"])
|
171
|
-
else
|
172
|
-
return Aniview::View::Color.public_send(@pref.get("clr")["secondary"])
|
173
|
-
end
|
174
|
-
end
|
175
|
-
|
176
|
-
def adjustView
|
177
|
-
buffer = 2
|
178
|
-
bottom = @term.rows-3
|
179
|
-
|
180
|
-
diff = 0
|
181
|
-
if @selected < @view[0] + buffer #and @selected > buffer
|
182
|
-
while @selected < @view[0] + buffer
|
183
|
-
@view[0]-=1
|
184
|
-
@view[1]-=1
|
185
|
-
end
|
186
|
-
elsif @selected > @view[1] - (buffer+1) and @selected < getLen - buffer
|
187
|
-
while @selected > @view[1] - (buffer+1) and @selected < getLen - buffer
|
188
|
-
@view[0]+=1
|
189
|
-
@view[1]+=1
|
190
|
-
end
|
191
|
-
end
|
192
|
-
|
193
|
-
diff = 0 - @view[0] if @view[0] < 0
|
194
|
-
diff = bottom - @view[1] if @view[1] < bottom
|
195
|
-
|
196
|
-
@view[0] += diff
|
197
|
-
@view[1] += diff
|
198
|
-
end
|
199
|
-
|
200
|
-
def updated?
|
201
|
-
@updated and !(@updated = !@updated)
|
202
|
-
end
|
203
|
-
|
204
|
-
def updated!
|
205
|
-
@updated = true
|
206
|
-
end
|
207
|
-
|
208
|
-
def interface
|
209
|
-
@interface
|
210
|
-
end
|
211
|
-
|
212
|
-
def refreshFormats
|
213
|
-
@cl = {
|
214
|
-
"s" => Aniview::View::Color.public_send(@pref.get("clr")["selected"]),
|
215
|
-
"1" => Aniview::View::Color.public_send(@pref.get("clr")["primary"]),
|
216
|
-
"2" => Aniview::View::Color.public_send(@pref.get("clr")["secondary"]),
|
217
|
-
"m" => Aniview::View::Color.public_send(@pref.get("clr")["main"]),
|
218
|
-
}
|
219
|
-
|
220
|
-
nif = {}
|
221
|
-
|
222
|
-
@items.each { |parent, children|
|
223
|
-
|
224
|
-
parent_formatted = Util.parse_format(
|
225
|
-
@pref.get(@format)["parent"],
|
226
|
-
parent.attributes,
|
227
|
-
@term.cols
|
228
|
-
)
|
229
|
-
|
230
|
-
children_formatted = []
|
231
|
-
if @children
|
232
|
-
children.each { |child|
|
233
|
-
children_formatted << Util.parse_format(
|
234
|
-
@pref.get(@format)["child"],
|
235
|
-
child.attributes,
|
236
|
-
@term.cols
|
237
|
-
)
|
238
|
-
}
|
239
|
-
end
|
240
|
-
|
241
|
-
nif.merge!(parent_formatted => children_formatted)
|
242
|
-
}
|
243
|
-
|
244
|
-
@items_formatted = nif
|
245
|
-
|
246
|
-
@title_formatted = Util.parse_format(
|
247
|
-
@pref.get(@format)["title"],
|
248
|
-
@attributes,
|
249
|
-
@term.cols
|
250
|
-
)
|
251
|
-
|
252
|
-
changed
|
253
|
-
notify_observers
|
254
|
-
end
|
255
|
-
|
256
|
-
def draw
|
257
|
-
|
258
|
-
#refresh @items_formatted
|
259
|
-
#refreshFormats
|
260
|
-
|
261
|
-
#set the view
|
262
|
-
line_on = @view[0]
|
263
|
-
lines_to_draw = @view[1]
|
264
|
-
|
265
|
-
#print the menu title
|
266
|
-
lo="\e[1;1H"
|
267
|
-
print lo + @cl["m"] + @title_formatted + "\e[K"
|
268
|
-
|
269
|
-
#get the resolved start positions
|
270
|
-
resolved_start_position = resolve_selected line_on
|
271
|
-
outer_index = resolved_start_position["out"]
|
272
|
-
inner_index = resolved_start_position["in"]
|
273
|
-
|
274
|
-
# if we are starting in the expanded portion, skip its parent
|
275
|
-
if resolved_start_position["in_expanded"]
|
276
|
-
outer_index+=1
|
277
|
-
end
|
278
|
-
|
279
|
-
offset=line_on-1
|
280
|
-
|
281
|
-
while line_on < lines_to_draw
|
282
|
-
|
283
|
-
in_outer_region = ! (line_on >= getLen)
|
284
|
-
in_expanded_region = resolve_selected(line_on)["in_expanded"]
|
285
|
-
line = line_on-offset+1
|
286
|
-
selected = line_on == @selected
|
287
|
-
|
288
|
-
cl = ""
|
289
|
-
cl = @cl["s"] if selected
|
290
|
-
lo = "\e[#{line};1H" + cl
|
291
|
-
|
292
|
-
if in_expanded_region and @children
|
293
|
-
print @cl["2"] + lo + String(@items_formatted.values[@expanded][inner_index]) + "\e[K" unless @items_formatted.values[@expanded] == nil
|
294
|
-
inner_index+=1
|
295
|
-
elsif in_outer_region
|
296
|
-
print @cl["1"] + lo + String(@items_formatted.keys[outer_index]) + "\e[K"
|
297
|
-
outer_index+=1
|
298
|
-
else
|
299
|
-
print "\e[#{line};1H\e[2K\n"
|
300
|
-
end
|
301
|
-
|
302
|
-
line_on+=1
|
303
|
-
end
|
304
|
-
end
|
305
|
-
|
306
|
-
def control(key)
|
307
|
-
sel = resolve_selected
|
308
|
-
if key == @pref.get("keybindings")["menu_nav_up"]
|
309
|
-
moveCursor("up")
|
310
|
-
elsif key == @pref.get("keybindings")["menu_nav_down"]
|
311
|
-
moveCursor("down")
|
312
|
-
else
|
313
|
-
customControl(key, sel)
|
314
|
-
end
|
315
|
-
changed
|
316
|
-
notify_observers
|
317
|
-
end
|
318
|
-
|
319
|
-
def customControl(key, sel); end
|
320
|
-
|
321
|
-
def refresh_attributes; end
|
322
|
-
|
323
|
-
end
|
324
|
-
end
|
325
|
-
end
|
@@ -1,26 +0,0 @@
|
|
1
|
-
require_relative 'menu'
|
2
|
-
require_relative '../util/util'
|
3
|
-
|
4
|
-
module Aniview
|
5
|
-
module View
|
6
|
-
class PrefMenu < Menu
|
7
|
-
include Aniview::Util
|
8
|
-
|
9
|
-
def customControl(key, sel)
|
10
|
-
path = @items[sel["out"]].path
|
11
|
-
title = @items[sel["out"]].attributes["t"]
|
12
|
-
value = @items[sel["out"]].attributes["v"]
|
13
|
-
if key == "enter"
|
14
|
-
case @interface.pref_type(path)
|
15
|
-
when "boolean"
|
16
|
-
@interface.set(path, (not @interface.get_pref(path)))
|
17
|
-
else
|
18
|
-
newval = Util.readline(@term, title + ":", value)
|
19
|
-
@interface.set(path, newval)
|
20
|
-
end
|
21
|
-
refresh
|
22
|
-
end
|
23
|
-
end
|
24
|
-
end
|
25
|
-
end
|
26
|
-
end
|