aniview 0.1.1 → 0.2.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 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
  - - ">="