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.
Files changed (51) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +8 -9
  3. data/bin/aniview +17 -9
  4. data/config/view.yml +3 -0
  5. data/lib/aniview.rb +1 -60
  6. data/modules/animeio/README.md +2 -0
  7. data/modules/animeio/config/daemon.yml +4 -0
  8. data/modules/animeio/config/view.yml +22 -0
  9. data/modules/animeio/lib/animeio.rb +24 -0
  10. data/modules/animeio/lib/animeio/anime_indexer.rb +99 -0
  11. data/modules/animeio/lib/animeio/animefile.rb +91 -0
  12. data/modules/animeio/lib/animeio/animeio.rb +175 -0
  13. data/modules/animeio/lib/animeio/animeio_view.rb +41 -0
  14. data/modules/animeio/lib/animeio/animeseries.rb +61 -0
  15. data/modules/mpv/README.md +2 -0
  16. data/modules/mpv/config/daemon.yml +2 -0
  17. data/modules/mpv/lib/mpv.rb +27 -0
  18. data/modules/mpv/lib/mpv/filename_widget.rb +16 -0
  19. data/modules/mpv/lib/mpv/mpv_controller.rb +85 -0
  20. data/modules/mpv/lib/mpv/time_widget.rb +29 -0
  21. metadata +33 -107
  22. data/lib/aniview/client/aniclient.rb +0 -118
  23. data/lib/aniview/interface/animeio/animefile.rb +0 -93
  24. data/lib/aniview/interface/animeio/animeio.rb +0 -321
  25. data/lib/aniview/interface/animeio/animeseries.rb +0 -60
  26. data/lib/aniview/interface/bridge.rb +0 -11
  27. data/lib/aniview/interface/deluge/delugec.rb +0 -172
  28. data/lib/aniview/interface/deluge/torrentitem.rb +0 -24
  29. data/lib/aniview/interface/item.rb +0 -24
  30. data/lib/aniview/interface/mpv/mpvbridge.rb +0 -149
  31. data/lib/aniview/interface/pref/defaults.json +0 -105
  32. data/lib/aniview/interface/pref/pref.rb +0 -209
  33. data/lib/aniview/interface/pref/prefitem.rb +0 -19
  34. data/lib/aniview/interface/pref/validate.json +0 -105
  35. data/lib/aniview/interface/schedule/schedule.rb +0 -99
  36. data/lib/aniview/interface/schedule/scheduleitem.rb +0 -59
  37. data/lib/aniview/interface/subscription/subscription.rb +0 -123
  38. data/lib/aniview/util/error.rb +0 -9
  39. data/lib/aniview/util/folder_listen.rb +0 -53
  40. data/lib/aniview/util/term.rb +0 -44
  41. data/lib/aniview/util/util.rb +0 -167
  42. data/lib/aniview/view/aiomenu.rb +0 -69
  43. data/lib/aniview/view/color.rb +0 -69
  44. data/lib/aniview/view/delugemenu.rb +0 -38
  45. data/lib/aniview/view/menu.rb +0 -325
  46. data/lib/aniview/view/prefmenu.rb +0 -26
  47. data/lib/aniview/view/schedulemenu.rb +0 -28
  48. data/lib/aniview/view/statusline.rb +0 -60
  49. data/lib/aniview/view/subscriptionmenu.rb +0 -37
  50. data/lib/application.rb +0 -306
  51. data/lib/daemon.rb +0 -188
@@ -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
@@ -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