aniview 0.1.1 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 2b66376f37357235ebbe99719bb1cbb0d0b5e8e0
4
- data.tar.gz: 43a06a03050384618d6239dfd70dcbc6318e5273
3
+ metadata.gz: 28e7f572e02fc282a0fad72f7309b120930838da
4
+ data.tar.gz: 3acb283170492f2abf8d3fcb012250b5f5b3a190
5
5
  SHA512:
6
- metadata.gz: c23568aac4d1e285150ac4b542957aa2e6358c4509a05551c131755ef70027805c86d664e2b7c2a4b6f27b77ed0da9694bc2eca07f8cb2adbda5f87abaff6946
7
- data.tar.gz: b74432dc91c9b6702e7f1fb66b65ed37ec2591ac8b7f44ebe1837f4b0fe33a33ed682b96ab82e4422353829aeb8733e2fea214bd350fe445763bd8e768162e56
6
+ metadata.gz: 7d1b14652e56f0419711f6c4ad4299f83150f6d2799871ed8a4acaa33055604de8877532941de18d52309be69786678dc173ec275d3c499ac7e7bbf0b46468c2
7
+ data.tar.gz: 25b773fb7c112579f96b2806caaaa006839cd8cfc610300b192cf72cecaf78e3beb3a4e2b789391d6e3b7593b3f38bdc8157715c25dbff4cced30c96753bacd6
@@ -3,16 +3,20 @@ require 'highline/import'
3
3
  require 'json'
4
4
  require 'thread'
5
5
  require 'io/console'
6
+ require 'warning'
7
+
8
+ Warning.ignore([:fixnum, :bignum])
6
9
 
7
10
  require_relative 'aniview/view/aiomenu'
11
+ require_relative 'aniview/view/delugemenu'
8
12
  require_relative 'aniview/view/prefmenu'
9
13
  require_relative 'aniview/interface/animeio/animeio'
10
- require_relative 'aniview/interface/animeio/animefile'
14
+ require_relative 'aniview/interface/deluge/delugec'
15
+ require_relative 'aniview/interface/pref/pref'
11
16
 
12
17
  require_relative 'aniview/util/command'
13
- require_relative 'aniview/util/logger'
18
+ require_relative 'aniview/util/alogger'
14
19
  require_relative 'aniview/util/term'
15
- require_relative 'aniview/util/pref'
16
20
 
17
21
  $stdout.sync = true
18
22
 
@@ -37,11 +41,16 @@ class AniView
37
41
  "prefmenu" => {
38
42
  "title" => "preferences_title_format_str",
39
43
  "parent" => "preferences_item_format_str",
44
+ },
45
+ "delugemenu" => {
46
+ "title" => "deluge_title_format_str",
47
+ "parent" => "deluge_item_format_str",
40
48
  }
41
49
  }
42
50
 
43
51
  @aio = AnimeIO.new(@pref)
44
- logger = Logger.new(@pref.get "log_file")
52
+ @delugec = DelugeC.new()
53
+ @l = ALogger.new(@pref.get "log_file")
45
54
  @aiomenu = AioMenu.new(
46
55
  :getAll,
47
56
  @aio,
@@ -50,14 +59,30 @@ class AniView
50
59
  @format_["aiomenu_all"],
51
60
  @term
52
61
  )
53
-
54
- @prefmenu = PrefMenu.new(:getAll, @pref, @pref.get("menu_titles")["0"], @pref, @format_["prefmenu"], @term)
62
+ @prefmenu = PrefMenu.new(
63
+ :getAll,
64
+ @pref,
65
+ @pref.get("menu_titles")["0"],
66
+ @pref,
67
+ @format_["prefmenu"],
68
+ @term
69
+ )
70
+ @delugemenu = DelugeMenu.new(
71
+ :getTorrents,
72
+ @delugec,
73
+ @pref.get("menu_titles")["7"],
74
+ @pref,
75
+ @format_["delugemenu"],
76
+ @term
77
+ )
78
+
55
79
 
56
80
  @term.save.hide_cursor.echo_off
57
81
 
58
82
  end
59
83
 
60
84
  def cleanup
85
+ @mthread.exit if @mthread != nil
61
86
  @term.reset
62
87
  exit
63
88
  end
@@ -80,50 +105,62 @@ class AniView
80
105
 
81
106
  def run
82
107
 
83
- view = @aiomenu
108
+ @view = @aiomenu
84
109
 
85
110
  mutex = Mutex.new
86
111
  Signal.trap('SIGWINCH', proc {
87
- Thread.new { mutex.synchronize { view.draw } }
112
+ Thread.new { mutex.synchronize { @view.change_screen_size } }
88
113
  } )
89
114
 
90
115
  key = ""
91
- view.refresh
92
- view.set_screen_size(@term.rows, @term.cols)
116
+ @view.refresh
117
+ @shoulddraw = true
118
+
119
+ Thread.abort_on_exception = true
120
+ @mthread = Thread.new do
121
+ while true
122
+ if @shoulddraw
123
+ @view.draw
124
+ @view.refresh
125
+ end
126
+ sleep 1/45.0
127
+ end
128
+ end
93
129
 
94
130
  while true
95
- view.draw if key != "skip"
96
-
131
+ #@view.draw if key != "skip"
132
+ @shoulddraw = true
97
133
  key = @term.getKey
134
+ @shoulddraw = false
98
135
 
99
- if key == "1"
100
- @term.clear
101
- view = @aiomenu
102
- view.setName(@pref.get("menu_titles")[key])
103
- view.setFormat(@format_["aiomenu_uw"])
104
- view.setRfunc(:getUnwatched)
136
+ if key == @pref.get("keybindings")["goto unwatched"]
137
+ @view = @aiomenu
138
+ @view.setName(@pref.get("menu_titles")["1"])
139
+ @view.setFormat(@format_["aiomenu_uw"])
140
+ @view.setRfunc(:getUnwatched)
105
141
 
106
- elsif key == "2"
107
- @term.clear
108
- view = @aiomenu
109
- view.setName(@pref.get("menu_titles")[key])
110
- view.setFormat(@format_["aiomenu_all"])
111
- view.setRfunc(:getAll)
142
+ elsif key == @pref.get("keybindings")["goto all anime"]
143
+ @view = @aiomenu
144
+ @view.setName(@pref.get("menu_titles")["2"])
145
+ @view.setFormat(@format_["aiomenu_all"])
146
+ @view.setRfunc(:getAll)
112
147
 
113
148
  elsif key == "3"
114
- @term.clear
115
- view = @anilistmenu
116
- view.setName(@pref.get("menu_titles")[key])
117
- view.setRfunc(:getCompleted)
149
+ #@view = @anilistmenu
150
+ #@view.setName(@pref.get("menu_titles")[key])
151
+ #@view.setRfunc(:getCompleted)
152
+
153
+ elsif key == @pref.get("keybindings")["goto torrents"]
154
+ @view = @delugemenu
155
+ @view.setName(@pref.get("menu_titles")["7"])
156
+ @view.setRfunc(:getTorrents)
118
157
 
119
- elsif key == "0"
120
- @term.clear
121
- view = @prefmenu
122
- view.setName(@pref.get("menu_titles")[key])
123
- view.setRfunc(:getAll)
158
+ elsif key == @pref.get("keybindings")["goto preferences"]
159
+ @view = @prefmenu
160
+ @view.setName(@pref.get("menu_titles")["0"])
161
+ @view.setRfunc(:getAll)
124
162
 
125
163
  elsif key == ":"
126
-
127
164
  cmd = Command.read(@term, ":")
128
165
  self.runCommand cmd
129
166
 
@@ -131,7 +168,7 @@ class AniView
131
168
  self.cleanup
132
169
  end
133
170
 
134
- view.control(key)
171
+ @view.control(key)
135
172
  end
136
173
  end
137
174
  end
@@ -2,8 +2,9 @@ require 'streamio-ffmpeg'
2
2
  require 'date'
3
3
 
4
4
  require_relative '../../util/format'
5
+ require_relative '../item'
5
6
 
6
- class AnimeFile
7
+ class AnimeFile < Item
7
8
  def initialize(path_, seen = false)
8
9
  @watched = seen
9
10
  @watched_on = 0
@@ -1,3 +1,4 @@
1
+ require 'mkmf'
1
2
  require 'base64'
2
3
  require_relative 'animefile'
3
4
  require_relative 'animeseries'
@@ -186,6 +187,6 @@ class AnimeIO
186
187
 
187
188
  #run mpv
188
189
  def watch(file)
189
- pid = spawn("mpv -alang jpn -slang eng -msg-level=all=fatal -ass '#{file}'")
190
+ pid = spawn("#{@pref.get "watch_command"} '#{file}'")
190
191
  end
191
192
  end
@@ -1,8 +1,9 @@
1
1
  require 'date'
2
2
 
3
3
  require_relative '../../util/format'
4
+ require_relative '../item'
4
5
 
5
- class AnimeSeries
6
+ class AnimeSeries < Item
6
7
  def initialize(_dir, children)
7
8
  @path = _dir
8
9
  @children = children
@@ -0,0 +1,34 @@
1
+ require 'deluge'
2
+ require_relative 'torrentitem'
3
+
4
+ class DelugeC
5
+
6
+ def initialize
7
+ @client = Deluge::Rpc::Client.new(
8
+ host: 'localhost',
9
+ port: 58846,
10
+ login: 'localclient',
11
+ password: '1df1520eb580f2f569f4c3e846c83da2cc7a222d'
12
+ )
13
+ @client.connect
14
+ end
15
+
16
+ def getTorrents
17
+ return @client.core.get_torrents_status({}, ['name', 'progress', 'eta'])
18
+ end
19
+
20
+ def makeHash(arr)
21
+ ret = {}
22
+ arr.each{ |t|
23
+ tinfo = t[1]
24
+ torrent = TorrentItem.new(
25
+ name: tinfo["name"],
26
+ progress: tinfo["progress"],
27
+ eta: tinfo["eta"],
28
+ )
29
+ ret.merge!(torrent => torrent)
30
+ }
31
+ return ret
32
+ end
33
+
34
+ end
@@ -0,0 +1,16 @@
1
+ require_relative '../../util/format'
2
+ require_relative '../item'
3
+
4
+ class TorrentItem < Item
5
+ def initialize(name:, progress:, eta:)
6
+ @attr = {
7
+ "n" => name,
8
+ "p" => Format.format_progress(progress),
9
+ "e" => Format.format_duration(eta),
10
+ }
11
+ end
12
+
13
+ def attributes
14
+ return @attr
15
+ end
16
+ end
@@ -0,0 +1,17 @@
1
+ class Item
2
+ def initialize()
3
+ @attr = {}
4
+ end
5
+
6
+ def attributes
7
+ return @attr
8
+ end
9
+
10
+ def cereal
11
+ contents = ""
12
+ @attr.each{ |a|
13
+ contents += String(a[1])
14
+ }
15
+ return "cereal-"+contents
16
+ end
17
+ end
@@ -1,4 +1,5 @@
1
1
  require 'fileutils'
2
+ require_relative 'prefitem'
2
3
 
3
4
  class Pref
4
5
  def initialize
@@ -18,14 +19,26 @@ class Pref
18
19
  end
19
20
 
20
21
  def defaults
21
- @pref = Hash[
22
+ @pref = {
23
+ "keybindings" => {
24
+ "goto preferences" => "0",
25
+ "goto unwatched" => "1",
26
+ "goto all anime" => "2",
27
+ "goto torrents" => "7",
28
+ "anime_set watched" => "Z",
29
+ "anime_set unwatched" => "u",
30
+ "anime_unwatch last watched" => "z",
31
+ "menu_nav_up" => "up",
32
+ "menu_nav_down" => "down",
33
+ "menu_nav_expand" => "space",
34
+ },
22
35
  "anime_locations" => @home + "/airing/shows/" + ":" + @home + "/anime/",
23
- "clr" => Hash[
36
+ "clr" => {
24
37
  "main" => "blue",
25
38
  "primary" => "white",
26
39
  "secondary"=> "cyan",
27
40
  "selected" => "red"
28
- ],
41
+ },
29
42
  "menu_titles" => {
30
43
  "1" => "unwatched",
31
44
  "2" => "anime library",
@@ -42,16 +55,19 @@ class Pref
42
55
  "anime_library_unwatched_title_format_str" => " %t@ $q@ %D %S ",
43
56
  "anime_library_unwatched_title_show_format_str" => " %t - %c@ %D %S ",
44
57
  "anime_library_unwatched_title_episode_format_str" => " %t@ %D %S %r ",
45
-
46
- "preferences_title_format_str" => " %t",
47
- "preferences_item_format_str" => " %t@.%v",
58
+ "deluge_title_format_str" => " %t",
59
+ "deluge_item_format_str" => " %n@ %p ",
60
+ "preferences_title_format_str" => " %t",
61
+ "preferences_item_format_str" => " %t@.%v",
48
62
 
49
63
  #"watch_file" => @conf + "/watched",
50
64
  "log_file" => @conf + "/aw.log",
51
65
  "watch_log" => @conf + "/watchlog",
52
66
 
67
+ "watch_command" => "mpv -alang jpn -slang eng -msg-level=all=fatal -ass",
68
+
53
69
  "local_anime" => nil
54
- ]
70
+ }
55
71
  self.save
56
72
  end
57
73
 
@@ -96,11 +112,11 @@ class Pref
96
112
  subtitle = title + "_" + subitem[0]
97
113
  subval = subitem[1]
98
114
 
99
- r.merge!(PrefItem.new(subtitle, subval, []) => PrefItem.new("", "", [item[0], subitem[0]]))
115
+ r.merge!(PrefItem.new(subtitle, subval, []) => [PrefItem.new("", "", [item[0], subitem[0]])])
100
116
  }
101
117
  next
102
118
  end
103
- r.merge!(PrefItem.new(title, val, []) => PrefItem.new("", "", [item[0]]))
119
+ r.merge!(PrefItem.new(title, val, []) => [ PrefItem.new("", "", [item[0]]) ] )
104
120
  }
105
121
  return r
106
122
  end
@@ -118,20 +134,3 @@ class Pref
118
134
  File.open(@pref_file, "r") {|f| @pref = JSON.parse(f.read)}
119
135
  end
120
136
  end
121
-
122
- class PrefItem
123
- def initialize(title, value, path_ = [])
124
- @path = path_
125
- @attr = {
126
- "t" => title,
127
- "v" => value,
128
- }
129
- end
130
-
131
- def attributes
132
- return @attr
133
- end
134
- def path
135
- return @path
136
- end
137
- end
@@ -0,0 +1,18 @@
1
+ require_relative '../item'
2
+
3
+ class PrefItem < Item
4
+ def initialize(title, value, path_ = [])
5
+ @path = path_
6
+ @attr = {
7
+ "t" => title,
8
+ "v" => value,
9
+ }
10
+ end
11
+
12
+ def attributes
13
+ return @attr
14
+ end
15
+ def path
16
+ return @path
17
+ end
18
+ end
@@ -1,4 +1,4 @@
1
- class Logger
1
+ class ALogger
2
2
  def initialize(file)
3
3
  @logfile = file
4
4
  open(@logfile, 'w') { |f| f.puts "initialized..." }
@@ -33,4 +33,8 @@ class Format
33
33
 
34
34
  return String( Float(fs/bytecount[r] * 10.0 ).round / 10.0 ) + r
35
35
  end
36
+
37
+ def self.format_progress p
38
+ return "#{Integer(p)}.#{Integer(p * 10.0) % 10}"
39
+ end
36
40
  end
@@ -1,7 +1,6 @@
1
1
  require_relative 'menu'
2
2
  require_relative '../util/format'
3
3
 
4
-
5
4
  class AioMenu < Menu
6
5
 
7
6
  def setmal malanime
@@ -40,7 +39,7 @@ class AioMenu < Menu
40
39
  def customControl(key, sel)
41
40
  path = @items.values[sel["out"]][sel["in"]].path
42
41
 
43
- if key == "space"
42
+ if key == @pref.get("keybindings")["menu_nav_expand"]
44
43
  expand(sel["out"])
45
44
  elsif key == "r"
46
45
  refresh
@@ -53,13 +52,13 @@ class AioMenu < Menu
53
52
  #@malanime.update(path)
54
53
 
55
54
  refresh
56
- elsif key == "Z"
55
+ elsif key == @pref.get("keybindings")["anime_set watched"]
57
56
  @interface.addWatched(path)
58
57
  refresh
59
- elsif key == "z"
58
+ elsif key == @pref.get("keybindings")["anime_set unwatch last watched"]
60
59
  @interface.rmWatched()
61
60
  refresh
62
- elsif key == "u"
61
+ elsif key == @pref.get("keybindings")["anime_set unwatched"]
63
62
  @interface.rmWatched(path)
64
63
 
65
64
  end
@@ -0,0 +1,28 @@
1
+ require_relative 'menu'
2
+ require_relative '../util/format'
3
+ require_relative '../util/command'
4
+
5
+
6
+ class DelugeMenu < Menu
7
+
8
+ def refresh
9
+ @items = @interface.makeHash @interface.send(@refresh_func)
10
+
11
+ @attributes = {
12
+ "t" => @attributes["t"],
13
+ }
14
+
15
+ @expanded = -1 if @items.values[@expanded] == nil
16
+ fixCursor
17
+ end
18
+
19
+ def customControl(key, sel)
20
+ if key == "space"
21
+
22
+ elsif key == "r"
23
+ refresh
24
+ elsif key == "enter"
25
+
26
+ end
27
+ end
28
+ end
@@ -1,4 +1,7 @@
1
1
  require_relative 'emote'
2
+ require 'benchmark'
3
+ require_relative '../util/alogger'
4
+ require 'digest/bubblebabble'
2
5
 
3
6
  class Menu
4
7
 
@@ -14,20 +17,34 @@ class Menu
14
17
  @expanded = -1
15
18
  @selected = 0
16
19
  @scrollup = false
17
-
20
+ @items_formatted = {}
21
+ @items_hash = {}
22
+ @hashmap = {}
23
+ @lu = 0
24
+
18
25
  refresh
19
26
  @lastcount = getLen
27
+
28
+ @l = ALogger.new(Dir.home + "/desktop/menu.log")
20
29
 
21
30
  end
22
31
 
23
32
  def setRfunc(name)
24
33
  @refresh_func = name
34
+ @items_formatted = {}
35
+ @items_hash = {}
36
+ @lu = 0
25
37
  refresh
38
+ refreshFormats
26
39
  end
27
40
 
28
- def set_screen_size(lines, cols)
41
+ def change_screen_size
29
42
  #@term.rows = lines
30
43
  #@term.cols = cols
44
+ @items_formatted = {}
45
+ @items_hash = {}
46
+ @lu = 0
47
+ refresh
31
48
  draw
32
49
  end
33
50
 
@@ -105,9 +122,84 @@ class Menu
105
122
  end
106
123
  end
107
124
 
125
+ def refreshFormats
126
+ now = Integer(DateTime.now.strftime('%Q'))
127
+ return if now - @lu < 100
128
+ @lu = now
129
+
130
+ @cl = {
131
+ "s" => $clr[@pref.get("clr")["selected"]],
132
+ "1" => $clr[@pref.get("clr")["primary"]],
133
+ "2" => $clr[@pref.get("clr")["secondary"]],
134
+ "m" => $clr[@pref.get("clr")["main"]],
135
+ }
136
+
137
+ #@items_formatted = {}
138
+ new_items_formatted = {}
139
+ new_items_hash = {}
140
+ new_hashmap = {}
141
+ @items.each_with_index { |item, i|
142
+
143
+ #@l.log @items.keys[i]
144
+ #
145
+ babble = item[0].cereal #Digest::SHA256.bubblebabble String(item[0])
146
+
147
+ if @items_hash.key? babble
148
+ val = @items_hash[babble]
149
+ new_items_hash.merge!(babble => val)
150
+ new_items_formatted.merge!(@hashmap[babble] => @items_formatted[@hashmap[babble]])
151
+ new_hashmap.merge!(babble => @hashmap[babble])
152
+ next
153
+ end
154
+
155
+ parent = printmf(
156
+ @pref.get(@format_["parent"]),
157
+ item[0].attributes,
158
+ )
159
+
160
+ children = []
161
+ children_hash = []
162
+
163
+ item[1].each { |subitem|
164
+
165
+ child_babble = subitem.cereal
166
+
167
+ if @items_hash.key? child_babble
168
+ val = @items_hash[babble]
169
+ new_items_hash.merge!(child_babble => val)
170
+ children<<@hashmap[babble]
171
+ new_hashmap.merge!(babble => @hashmap[babble])
172
+ next
173
+ end
174
+
175
+ children << printmf(
176
+ @pref.get(@format_["child"]),
177
+ subitem.attributes,
178
+ )
179
+ children_hash << subitem.hash
180
+
181
+ }
182
+
183
+ new_items_hash.merge!(babble => children_hash)
184
+ new_items_formatted.merge!(parent => children)
185
+ new_hashmap.merge!(babble => parent)
186
+ }
187
+
188
+ @items_formatted = new_items_formatted
189
+ @items_hash = new_items_hash
190
+ @hashmap = new_hashmap
191
+
192
+ @title_formatted = printmf(
193
+ @pref.get(@format_["title"]),
194
+ @attributes,
195
+ )
196
+
197
+ end
198
+
108
199
  def draw
109
200
  #the number of lines to preview
110
201
  buffer = 3
202
+ refreshFormats
111
203
 
112
204
  #@term.rows-2 is used because 2 lines are reserved for
113
205
  #the command line (the bottom line)
@@ -128,13 +220,8 @@ class Menu
128
220
 
129
221
  def drawFrom(line_on, lines_to_draw)
130
222
  #print menu header
131
- printmf(
132
- @pref.get(@format_["title"]),
133
- 1,
134
- false,
135
- @attributes,
136
- "title"
137
- )
223
+ lo="\e[1;1H"
224
+ print lo + @cl["m"] + @title_formatted + "\e[K"
138
225
 
139
226
  resolved_start_position = resolveSelected line_on
140
227
 
@@ -151,49 +238,31 @@ class Menu
151
238
 
152
239
  in_outer_region = ! (line_on >= getLen)
153
240
  in_expanded_region = resolveSelected(line_on)["in_expanded"]
154
- real_line_on = line_on-offset+1
241
+ line = line_on-offset+1
155
242
  selected = line_on == @selected
156
243
 
244
+ cl = ""
245
+ cl = @cl["s"] if selected
246
+ lo = "\e[#{line};1H" + cl
247
+
157
248
  if in_expanded_region
158
- printmf(
159
- @pref.get(@format_["child"]),
160
- real_line_on,
161
- selected,
162
- @items.values[@expanded][ inner_index ].attributes,
163
- "inside"
164
- )
249
+ print @cl["2"] + lo + String(@items_formatted.values[@expanded][inner_index])
165
250
  inner_index+=1
166
251
  elsif in_outer_region
167
- printmf(
168
- @pref.get(@format_["parent"]),
169
- real_line_on,
170
- selected,
171
- @items.keys[outer_index].attributes,
172
- "outside"
173
- )
252
+ #@l.log "#{@attributes["t"]} #{line_on} #{starter} #{String(@items_formatted.keys[outer_index])} - #{String(@cl["1"])} #{String(lo)}"
253
+ print @cl["1"] + lo + String(@items_formatted.keys[outer_index])
174
254
  outer_index+=1
175
255
  else
176
- print "\e[2K\n"
256
+ print "\e[#{line};1H\e[2K\n"
177
257
  end
178
258
 
179
259
  line_on+=1
180
260
  end
181
261
  end
182
262
 
183
- def printmf(string, line, selected, d, loc)
184
- lo = "\e[#{line};1H"
263
+ def printmf(string, d)
185
264
  le = "\e[K\n"
186
265
 
187
- if loc == "outside"
188
- cl = $clr[@pref.get("clr")["primary"]]
189
- elsif loc == "inside"
190
- cl = $clr[@pref.get("clr")["secondary"]]
191
- elsif loc == "title"
192
- cl = $clr[@pref.get("clr")["main"]]
193
- end
194
-
195
- cl = $clr[@pref.get("clr")["selected"]] if selected
196
-
197
266
  pstr = []
198
267
  add_to = ""
199
268
  buffer_char = []
@@ -264,14 +333,14 @@ class Menu
264
333
  }
265
334
  midstr += pstr[pstr.length - 1]
266
335
 
267
- print lo + cl + midstr + le
336
+ return midstr
268
337
  end
269
338
 
270
339
  def control(key)
271
340
  sel = resolveSelected
272
- if key == "up"
341
+ if key == @pref.get("keybindings")["menu_nav_up"]
273
342
  moveCursor("up")
274
- elsif key == "down"
343
+ elsif key == @pref.get("keybindings")["menu_nav_down"]
275
344
  moveCursor("down")
276
345
  else
277
346
  customControl(key, sel)
@@ -17,7 +17,7 @@ class PrefMenu < Menu
17
17
  end
18
18
 
19
19
  def customControl(key, sel)
20
- path = @items.values[sel["out"]].path
20
+ path = @items.values[sel["out"]][0].path
21
21
  title = @items.keys[sel["out"]].attributes["t"]
22
22
  value = @items.keys[sel["out"]].attributes["v"]
23
23
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: aniview
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - annacrombie
@@ -50,6 +50,46 @@ dependencies:
50
50
  - - ">="
51
51
  - !ruby/object:Gem::Version
52
52
  version: 1.7.8
53
+ - !ruby/object:Gem::Dependency
54
+ name: deluge-rpc
55
+ requirement: !ruby/object:Gem::Requirement
56
+ requirements:
57
+ - - "~>"
58
+ - !ruby/object:Gem::Version
59
+ version: '0.1'
60
+ - - ">="
61
+ - !ruby/object:Gem::Version
62
+ version: 0.1.3
63
+ type: :runtime
64
+ prerelease: false
65
+ version_requirements: !ruby/object:Gem::Requirement
66
+ requirements:
67
+ - - "~>"
68
+ - !ruby/object:Gem::Version
69
+ version: '0.1'
70
+ - - ">="
71
+ - !ruby/object:Gem::Version
72
+ version: 0.1.3
73
+ - !ruby/object:Gem::Dependency
74
+ name: warning
75
+ requirement: !ruby/object:Gem::Requirement
76
+ requirements:
77
+ - - "~>"
78
+ - !ruby/object:Gem::Version
79
+ version: '0.10'
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: 0.10.0
83
+ type: :runtime
84
+ prerelease: false
85
+ version_requirements: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: '0.10'
90
+ - - ">="
91
+ - !ruby/object:Gem::Version
92
+ version: 0.10.0
53
93
  description: Browse local anime, based on cmus
54
94
  email: meotleft@gmail.com
55
95
  executables:
@@ -62,12 +102,17 @@ files:
62
102
  - lib/aniview/interface/animeio/animefile.rb
63
103
  - lib/aniview/interface/animeio/animeio.rb
64
104
  - lib/aniview/interface/animeio/animeseries.rb
105
+ - lib/aniview/interface/deluge/delugec.rb
106
+ - lib/aniview/interface/deluge/torrentitem.rb
107
+ - lib/aniview/interface/item.rb
108
+ - lib/aniview/interface/pref/pref.rb
109
+ - lib/aniview/interface/pref/prefitem.rb
110
+ - lib/aniview/util/alogger.rb
65
111
  - lib/aniview/util/command.rb
66
112
  - lib/aniview/util/format.rb
67
- - lib/aniview/util/logger.rb
68
- - lib/aniview/util/pref.rb
69
113
  - lib/aniview/util/term.rb
70
114
  - lib/aniview/view/aiomenu.rb
115
+ - lib/aniview/view/delugemenu.rb
71
116
  - lib/aniview/view/emote.rb
72
117
  - lib/aniview/view/menu.rb
73
118
  - lib/aniview/view/prefmenu.rb
@@ -83,7 +128,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
83
128
  requirements:
84
129
  - - ">"
85
130
  - !ruby/object:Gem::Version
86
- version: 2.2.0
131
+ version: 2.3.99
87
132
  required_rubygems_version: !ruby/object:Gem::Requirement
88
133
  requirements:
89
134
  - - ">="