aniview 0.2.0 → 0.3.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: 28e7f572e02fc282a0fad72f7309b120930838da
4
- data.tar.gz: 3acb283170492f2abf8d3fcb012250b5f5b3a190
3
+ metadata.gz: 2f84d93b24636a62d6ce22d1f9849091921c181c
4
+ data.tar.gz: a231335941b316bc5c11e1f65f92f2df6b413956
5
5
  SHA512:
6
- metadata.gz: 7d1b14652e56f0419711f6c4ad4299f83150f6d2799871ed8a4acaa33055604de8877532941de18d52309be69786678dc173ec275d3c499ac7e7bbf0b46468c2
7
- data.tar.gz: 25b773fb7c112579f96b2806caaaa006839cd8cfc610300b192cf72cecaf78e3beb3a4e2b789391d6e3b7593b3f38bdc8157715c25dbff4cced30c96753bacd6
6
+ metadata.gz: 7781cf1761ba7187e1f890e4be9d810e23a9e4c55983ae19df2a27af93215c7862898adfbc3af1d2dcfa2bd1d44037318479b92b9a180ae0d0317b92004247cb
7
+ data.tar.gz: a313caffe6a8a5c04d9501f91af855a194936f9af9a4699b904b223a4cf43c57585520d042485105592eb2f0c176751293567b118d5f22899c379b659138b5dc
@@ -10,12 +10,14 @@ Warning.ignore([:fixnum, :bignum])
10
10
  require_relative 'aniview/view/aiomenu'
11
11
  require_relative 'aniview/view/delugemenu'
12
12
  require_relative 'aniview/view/prefmenu'
13
+
13
14
  require_relative 'aniview/interface/animeio/animeio'
14
15
  require_relative 'aniview/interface/deluge/delugec'
15
16
  require_relative 'aniview/interface/pref/pref'
17
+ require_relative 'aniview/interface/rssfeed/rssfeed'
16
18
 
17
- require_relative 'aniview/util/command'
18
19
  require_relative 'aniview/util/alogger'
20
+ require_relative 'aniview/util/command'
19
21
  require_relative 'aniview/util/term'
20
22
 
21
23
  $stdout.sync = true
@@ -27,56 +29,37 @@ class AniView
27
29
 
28
30
  @pref = Pref.new
29
31
 
30
- @format_ = {
31
- "aiomenu_all" => {
32
- "title" => "anime_library_title_format_str",
33
- "parent" => "anime_library_title_show_format_str",
34
- "child" => "anime_library_title_episode_format_str",
35
- },
36
- "aiomenu_uw" => {
37
- "title" => "anime_library_unwatched_title_format_str",
38
- "parent" => "anime_library_unwatched_title_show_format_str",
39
- "child" => "anime_library_unwatched_title_episode_format_str",
40
- },
41
- "prefmenu" => {
42
- "title" => "preferences_title_format_str",
43
- "parent" => "preferences_item_format_str",
44
- },
45
- "delugemenu" => {
46
- "title" => "deluge_title_format_str",
47
- "parent" => "deluge_item_format_str",
48
- }
49
- }
50
-
51
32
  @aio = AnimeIO.new(@pref)
52
- @delugec = DelugeC.new()
53
- @l = ALogger.new(@pref.get "log_file")
33
+ @delugec = DelugeC.new(@pref)
34
+ #@rssfeed = RssFeed.new(@pref)
35
+ @l = ALogger.new(@pref.parseTilde(@pref.get "log_file"))
54
36
  @aiomenu = AioMenu.new(
55
- :getAll,
56
- @aio,
57
- @pref.get("menu_titles")["2"],
58
- @pref,
59
- @format_["aiomenu_all"],
60
- @term
37
+ refresh_function: :getAll,
38
+ interface: @aio,
39
+ name: @pref.get("menu_titles")["library"],
40
+ pref: @pref,
41
+ format: "format_library",
42
+ term: @term
61
43
  )
62
44
  @prefmenu = PrefMenu.new(
63
- :getAll,
64
- @pref,
65
- @pref.get("menu_titles")["0"],
66
- @pref,
67
- @format_["prefmenu"],
68
- @term
45
+ refresh_function: :getAll,
46
+ interface: @pref,
47
+ name: @pref.get("menu_titles")["preferences"],
48
+ pref: @pref,
49
+ format: "format_preferences",
50
+ term: @term,
51
+ children: false
69
52
  )
70
53
  @delugemenu = DelugeMenu.new(
71
- :getTorrents,
72
- @delugec,
73
- @pref.get("menu_titles")["7"],
74
- @pref,
75
- @format_["delugemenu"],
76
- @term
54
+ refresh_function: :getTorrents,
55
+ interface: @delugec,
56
+ name: @pref.get("menu_titles")["torrents"],
57
+ pref: @pref,
58
+ format: "format_torrents",
59
+ term: @term,
60
+ children: false
77
61
  )
78
62
 
79
-
80
63
  @term.save.hide_cursor.echo_off
81
64
 
82
65
  end
@@ -128,36 +111,30 @@ class AniView
128
111
  end
129
112
 
130
113
  while true
131
- #@view.draw if key != "skip"
132
114
  @shoulddraw = true
133
115
  key = @term.getKey
134
116
  @shoulddraw = false
135
117
 
136
- if key == @pref.get("keybindings")["goto unwatched"]
118
+ if key == @pref.get("keybindings")["goto_unwatched"]
137
119
  @view = @aiomenu
138
- @view.setName(@pref.get("menu_titles")["1"])
139
- @view.setFormat(@format_["aiomenu_uw"])
120
+ @view.setName(@pref.get("menu_titles")["unwatched"])
121
+ @view.setFormat("format_library_unwatched")
140
122
  @view.setRfunc(:getUnwatched)
141
123
 
142
- elsif key == @pref.get("keybindings")["goto all anime"]
124
+ elsif key == @pref.get("keybindings")["goto_library"]
143
125
  @view = @aiomenu
144
- @view.setName(@pref.get("menu_titles")["2"])
145
- @view.setFormat(@format_["aiomenu_all"])
126
+ @view.setName(@pref.get("menu_titles")["library"])
127
+ @view.setFormat("format_library")
146
128
  @view.setRfunc(:getAll)
147
-
148
- elsif key == "3"
149
- #@view = @anilistmenu
150
- #@view.setName(@pref.get("menu_titles")[key])
151
- #@view.setRfunc(:getCompleted)
152
129
 
153
- elsif key == @pref.get("keybindings")["goto torrents"]
130
+ elsif key == @pref.get("keybindings")["goto_torrents"]
154
131
  @view = @delugemenu
155
- @view.setName(@pref.get("menu_titles")["7"])
132
+ @view.setName(@pref.get("menu_titles")["torrents"])
156
133
  @view.setRfunc(:getTorrents)
157
134
 
158
- elsif key == @pref.get("keybindings")["goto preferences"]
135
+ elsif key == @pref.get("keybindings")["goto_preferences"]
159
136
  @view = @prefmenu
160
- @view.setName(@pref.get("menu_titles")["0"])
137
+ @view.setName(@pref.get("menu_titles")["preferences"])
161
138
  @view.setRfunc(:getAll)
162
139
 
163
140
  elsif key == ":"
@@ -25,7 +25,7 @@ class AnimeIO
25
25
  end
26
26
 
27
27
  def save
28
- @pref.saveLocalAnime Base64.encode64(Marshal.dump @@local_anime)
28
+ @pref.set "local_anime", Base64.encode64(Marshal.dump @@local_anime)
29
29
  end
30
30
 
31
31
  def load
@@ -40,6 +40,9 @@ class AnimeIO
40
40
  def index_anime(force: false, verbose: false)
41
41
  ret = {}
42
42
  (@pref.get("anime_locations").split(":")).each { |dir|
43
+
44
+ dir = @pref.parseTilde dir
45
+
43
46
  Dir.glob("#{dir}*/*.{mkv,avi,mp4}").each { |file|
44
47
  puts "indexing #{file}" if verbose
45
48
  seen_this = false
@@ -92,13 +95,7 @@ class AnimeIO
92
95
 
93
96
  (sarr).each { |animefile|
94
97
 
95
- #puts animefile.path
96
-
97
98
  this_parent = parent animefile.path
98
-
99
- #puts animefile.path
100
- #puts this_parent
101
-
102
99
 
103
100
  if this_parent != last_parent
104
101
  ret.merge!(
@@ -160,7 +157,7 @@ class AnimeIO
160
157
  end
161
158
 
162
159
  def logWatched(file)
163
- open(@pref.get("watch_log"), 'a') do |f|
160
+ open(@pref.parseTilde(@pref.get("watch_log")), 'a') do |f|
164
161
  f.puts %x(date).chomp + " ./" + File.basename(file) + " " + @watch_log_tag
165
162
  end
166
163
  end
@@ -3,14 +3,36 @@ require_relative 'torrentitem'
3
3
 
4
4
  class DelugeC
5
5
 
6
- def initialize
6
+ def initialize pref
7
+ @pref = pref
8
+
9
+ host = @pref.get("deluge_config")["host"]
10
+ login = @pref.get("deluge_config")["login"]
11
+ password = @pref.get("deluge_config")["password"]
12
+
13
+ if (login == "" and password == "") and (host == "127.0.0.1" or host == "localhost")
14
+ la = localAuth
15
+ login = la[0]
16
+ password = la[1]
17
+ @pref.set(["deluge_config", "login"], login)
18
+ @pref.set(["deluge_config", "password"], password)
19
+ end
20
+
7
21
  @client = Deluge::Rpc::Client.new(
8
- host: 'localhost',
9
- port: 58846,
10
- login: 'localclient',
11
- password: '1df1520eb580f2f569f4c3e846c83da2cc7a222d'
22
+ host: host,
23
+ port: Integer(@pref.get("deluge_config")["port"]),
24
+ login: @pref.get("deluge_config")["login"],
25
+ password: @pref.get("deluge_config")["password"]
12
26
  )
27
+
13
28
  @client.connect
29
+
30
+ end
31
+
32
+ def localAuth
33
+ authfile = Dir.home + "/.config/deluge/auth"
34
+ ["", ""] if not File.exist? authfile
35
+ File.open(Dir.home + "/.config/deluge/auth") { |f| f.read }.split(":")
14
36
  end
15
37
 
16
38
  def getTorrents
@@ -31,4 +53,4 @@ class DelugeC
31
53
  return ret
32
54
  end
33
55
 
34
- end
56
+ end
@@ -0,0 +1,68 @@
1
+ {
2
+ "keybindings" :
3
+ {
4
+ "goto_preferences" : "0",
5
+ "goto_unwatched" : "1",
6
+ "goto_library" : "2",
7
+ "goto_torrents" : "3",
8
+ "anime_set_watched" : "Z",
9
+ "anime_set_unwatched" : "u",
10
+ "anime_undo_set_watched" : "z",
11
+ "menu_nav_up" : "up",
12
+ "menu_nav_down" : "down",
13
+ "menu_nav_expand" : "space"
14
+ },
15
+ "anime_locations" : "~/anime/",
16
+ "clr" :
17
+ {
18
+ "main" : "blue",
19
+ "primary" : "white",
20
+ "secondary" : "cyan",
21
+ "selected" : "red"
22
+ },
23
+ "menu_titles" :
24
+ {
25
+ "unwatched" : "unwatched",
26
+ "library" : "anime library",
27
+ "torrents" : "torrents",
28
+ "preferences" : "preferences"
29
+ },
30
+ "format_library" :
31
+ {
32
+ "title" : " %t @ %D %S ",
33
+ "parent" : " %t - %c@ %D %S ",
34
+ "child" : " %t@ %D %S "
35
+ },
36
+ "format_library_unwatched" :
37
+ {
38
+ "title" : " %t @ $q@ %D %S ",
39
+ "parent" : " %t - %c@ %D %S ",
40
+ "child" : " %t@ %D %S %r "
41
+ },
42
+ "format_torrents" :
43
+ {
44
+ "title" : " %t",
45
+ "parent" : " %n@ %p "
46
+ },
47
+ "format_preferences" :
48
+ {
49
+ "title" : " %t",
50
+ "parent" : " %t@ %v "
51
+ },
52
+ "deluge_config" :
53
+ {
54
+ "host" : "localhost",
55
+ "port" : "58846",
56
+ "login" : "",
57
+ "password" : ""
58
+ },
59
+ "rss_feed" :
60
+ {
61
+ "url" : "https://www.nyaa.se/?page=rss&cats=1_37&filter=1&term=",
62
+ "refresh_interval" : "150"
63
+ },
64
+ "log_file" : "~/.aw/aw.log",
65
+ "watch_log" : "~/.aw/watchlog",
66
+ "watch_command" : "mpv -alang jpn -slang eng -msg-level=all=fatal -ass",
67
+ "local_anime" : null
68
+ }
@@ -1,5 +1,7 @@
1
1
  require 'fileutils'
2
2
  require_relative 'prefitem'
3
+ require_relative '../../view/emote.rb'
4
+ require_relative '../../util/alogger'
3
5
 
4
6
  class Pref
5
7
  def initialize
@@ -7,91 +9,90 @@ class Pref
7
9
  @home = Dir.home
8
10
  @conf = @home + "/.aw"
9
11
 
12
+ File.open(File.join(File.dirname(__FILE__), "/validate.json"), "r") {
13
+ |f| @validate = JSON.parse(f.read)
14
+ }
15
+
10
16
  dirname = File.dirname(@conf)
11
- unless File.directory?(dirname)
12
- FileUtils.mkdir_p(dirname)
13
- end
17
+ FileUtils.mkdir_p(dirname) unless File.directory?(dirname)
14
18
 
15
- @pref_file = @conf + "/r_anime"
19
+ @pref_file = @conf + "/r_anime.json"
20
+
21
+ @l = ALogger.new(Dir.home + "/desktop/validate.log")
16
22
 
17
23
  self.defaults if not File.exist?(@pref_file)
18
24
  self.load
19
25
  end
20
26
 
27
+ def parseTilde path
28
+ path.gsub("~", Dir.home)
29
+ end
30
+
21
31
  def defaults
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
- },
35
- "anime_locations" => @home + "/airing/shows/" + ":" + @home + "/anime/",
36
- "clr" => {
37
- "main" => "blue",
38
- "primary" => "white",
39
- "secondary"=> "cyan",
40
- "selected" => "red"
41
- },
42
- "menu_titles" => {
43
- "1" => "unwatched",
44
- "2" => "anime library",
45
- "3" => "MyAnimeList",
46
-
47
- "7" => "torrents",
48
- "8" => "subscriptions",
49
- "9" => "schedule",
50
- "0" => "preferences"
51
- },
52
- "anime_library_title_format_str" => " %t - $r@ %D %S ",
53
- "anime_library_title_show_format_str" => " %t - %c@ %D %S ",
54
- "anime_library_title_episode_format_str" => " %t@ %D %S %t",
55
- "anime_library_unwatched_title_format_str" => " %t@ $q@ %D %S ",
56
- "anime_library_unwatched_title_show_format_str" => " %t - %c@ %D %S ",
57
- "anime_library_unwatched_title_episode_format_str" => " %t@ %D %S %r ",
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",
62
-
63
- #"watch_file" => @conf + "/watched",
64
- "log_file" => @conf + "/aw.log",
65
- "watch_log" => @conf + "/watchlog",
66
-
67
- "watch_command" => "mpv -alang jpn -slang eng -msg-level=all=fatal -ass",
68
-
69
- "local_anime" => nil
70
- }
32
+ File.open(File.join(File.dirname(__FILE__), "/defaults.json"), "r") {|f| @pref = JSON.parse(f.read)}
71
33
  self.save
72
34
  end
73
35
 
74
36
  def set(s, val)
75
- arr = [s] if s.class == String
76
- arr = s if s.class == Array
77
- @pref = setpref(arr, val, @pref)
37
+ trail = [s] if s.class == String
38
+ trail = s if s.class == Array
39
+ if valpref(trail, val, @validate)
40
+ @pref = setpref(trail, val, @pref)
41
+ end
42
+
78
43
  save
79
44
  end
80
45
 
81
- def setpref(s, val, bpref)
82
- if s.length == 1
83
- bpref[s[0]]=val
84
- return bpref
46
+ def setpref(trail, destination, map)
47
+ if trail.length == 1
48
+ map[trail[0]] = destination
49
+ return map
85
50
  else
86
- key = s.delete_at(0)
87
- bpref[key] = setpref(s, val, bpref[key])
51
+
52
+ blaze = trail[0]
53
+ map[blaze] = setpref(trail[1..-1], destination, map[blaze])
54
+
55
+ end
56
+ return map
57
+ end
58
+
59
+ def valpref(trail, destination, map)
60
+
61
+ if trail.length == 1
62
+ skeys = [
63
+ "space",
64
+ "up",
65
+ "down",
66
+ "left",
67
+ "right",
68
+ "enter"
69
+ ]
70
+
71
+ case map[trail[0]]
72
+ when "key"
73
+ return false if destination.length != 1 and not skeys.include? destination
74
+
75
+ when "path"
76
+ destination.split(":").each { |d|
77
+ return false if not Dir.exist?(parseTilde d)}
78
+
79
+ when "color"
80
+ return false if not $clr.key? destination
81
+
82
+ when "int"
83
+ return false if not destination.scan(/\D/).empty? and destination.length > 1
84
+ end
85
+
86
+ return true
87
+
88
+ else
89
+ blaze = trail[0]
90
+ return valpref(trail[1..-1], destination, map[blaze])
88
91
  end
89
- return bpref
90
92
  end
91
93
 
92
94
  def get s
93
95
  return @pref[s] if @pref.key?(s)
94
- return ""
95
96
  end
96
97
 
97
98
  def getAll
@@ -111,7 +112,6 @@ class Pref
111
112
  item[1].each { |subitem|
112
113
  subtitle = title + "_" + subitem[0]
113
114
  subval = subitem[1]
114
-
115
115
  r.merge!(PrefItem.new(subtitle, subval, []) => [PrefItem.new("", "", [item[0], subitem[0]])])
116
116
  }
117
117
  next
@@ -121,11 +121,6 @@ class Pref
121
121
  return r
122
122
  end
123
123
 
124
- def saveLocalAnime dump
125
- @pref["local_anime"] = dump
126
- self.save
127
- end
128
-
129
124
  def save
130
125
  File.open(@pref_file, "w") { |f| f.write(@pref.to_json) }
131
126
  end
@@ -0,0 +1,68 @@
1
+ {
2
+ "keybindings" :
3
+ {
4
+ "goto_preferences" : "key",
5
+ "goto_unwatched" : "key",
6
+ "goto_library" : "key",
7
+ "goto_torrents" : "key",
8
+ "anime_set_watched" : "key",
9
+ "anime_set_unwatched" : "key",
10
+ "anime_undo_set_watched" : "key",
11
+ "menu_nav_up" : "key",
12
+ "menu_nav_down" : "key",
13
+ "menu_nav_expand" : "key"
14
+ },
15
+ "anime_locations" : "path",
16
+ "clr" :
17
+ {
18
+ "main" : "color",
19
+ "primary" : "color",
20
+ "secondary" : "color",
21
+ "selected" : "color"
22
+ },
23
+ "menu_titles" :
24
+ {
25
+ "unwatched" : "any",
26
+ "library" : "any",
27
+ "torrents" : "any",
28
+ "preferences" : "any"
29
+ },
30
+ "format_library" :
31
+ {
32
+ "title" : "any",
33
+ "parent" : "any",
34
+ "child" : "any"
35
+ },
36
+ "format_library_unwatched" :
37
+ {
38
+ "title" : "any",
39
+ "parent" : "any",
40
+ "child" : "any"
41
+ },
42
+ "format_torrents" :
43
+ {
44
+ "title" : "any",
45
+ "parent" : "any"
46
+ },
47
+ "format_preferences" :
48
+ {
49
+ "title" : "any",
50
+ "parent" : "any"
51
+ },
52
+ "deluge_config" :
53
+ {
54
+ "host" : "any",
55
+ "port" : "int",
56
+ "login" : "any",
57
+ "password" : "any"
58
+ },
59
+ "rss_feed" :
60
+ {
61
+ "url" : "any",
62
+ "refresh_interval" : "int"
63
+ },
64
+ "log_file" : "path",
65
+ "watch_log" : "path",
66
+ "watch_command" : "any",
67
+ "local_anime" : "any"
68
+ }
@@ -0,0 +1,26 @@
1
+ require 'simple-rss'
2
+ require 'open-uri'
3
+
4
+ class RssFeed
5
+ def initialize #pref
6
+ #@pref = pref
7
+ @testurl = "https://www.nyaa.se/?page=rss&cats=1_37&filter=1&term="
8
+ end
9
+
10
+ def updateFeed
11
+ #@rss = SimpleRSS.parse open(@pref.get "rss_feed")
12
+ @rss = SimpleRSS.parse open (@testurl)
13
+ end
14
+
15
+ def daemon
16
+ while true
17
+
18
+ end
19
+ end
20
+
21
+ def match string
22
+ @rss.items.each{ |item|
23
+ #item.
24
+ }
25
+ end
26
+ end
@@ -37,4 +37,84 @@ class Format
37
37
  def self.format_progress p
38
38
  return "#{Integer(p)}.#{Integer(p * 10.0) % 10}"
39
39
  end
40
+
41
+ def self.parse_format string, d, cols
42
+ le = "\e[K\n"
43
+
44
+ pstr = []
45
+ add_to = ""
46
+ buffer_char = []
47
+
48
+ mode = "char"
49
+
50
+ padding_collected = 0
51
+
52
+ string.split('').each { |c|
53
+ if mode == "e"
54
+ add_to += String(c)
55
+ escape_mode = false
56
+
57
+ elsif c == '%'
58
+ mode = "%"
59
+
60
+ elsif c == '$'
61
+ mode = "$"
62
+
63
+ elsif c == '@'
64
+ pstr << add_to
65
+ add_to = ""
66
+ mode = "@"
67
+
68
+ elsif c == "#"
69
+ padding_collected += 1
70
+
71
+ elsif c == "\\"
72
+ mode = "e"
73
+ mode = "char"
74
+
75
+ elsif mode == "@"
76
+ buffer_char << c
77
+ mode = "char"
78
+
79
+ elsif mode == "%"
80
+ addstr = ""
81
+ addstr = String(d[c]) if d.key?(c)
82
+ ol = addstr.length
83
+ addstr = " " + addstr while addstr.length < (ol + padding_collected)
84
+ add_to += addstr
85
+ mode = "char"
86
+
87
+ elsif mode == "$"
88
+ add_to += String($emote[c]) if $emote.key?(c)
89
+ mode = "char"
90
+
91
+ else
92
+ add_to += c
93
+ end
94
+ }
95
+ pstr << add_to
96
+
97
+ midstr = ""
98
+ tl = 0
99
+ pstr.each{ |s| tl += s.length }
100
+ buffer_space = 0
101
+ buffer_space = (cols - tl) / (pstr.length - 1) if pstr.length > 1
102
+
103
+ addl_space = (cols - tl) % pstr.length
104
+
105
+ pstr.each_with_index{ |str, i|
106
+ #buffer_space += addl_space if i == pstr.length - 2
107
+ #if i == pstr.length - 1
108
+ #puts addl_space
109
+ #puts i == pstr.length - 1
110
+
111
+ break if i == pstr.length - 1
112
+ buffer_ = ""
113
+ buffer_ = buffer_char[i] * buffer_space if buffer_space >= 0
114
+ midstr += str + buffer_
115
+ }
116
+ midstr += pstr[pstr.length - 1]
117
+
118
+ return midstr
119
+ end
40
120
  end
@@ -0,0 +1,12 @@
1
+ require 'net/ping'
2
+
3
+ class Online
4
+ def initialize
5
+
6
+ end
7
+
8
+ def up? host
9
+ result = %x("ping -c 1 #{host} | grep received")
10
+ end
11
+
12
+ end
@@ -52,13 +52,13 @@ class AioMenu < Menu
52
52
  #@malanime.update(path)
53
53
 
54
54
  refresh
55
- elsif key == @pref.get("keybindings")["anime_set watched"]
55
+ elsif key == @pref.get("keybindings")["anime_set_watched"]
56
56
  @interface.addWatched(path)
57
57
  refresh
58
- elsif key == @pref.get("keybindings")["anime_set unwatch last watched"]
58
+ elsif key == @pref.get("keybindings")["anime_undo_set_watched"]
59
59
  @interface.rmWatched()
60
60
  refresh
61
- elsif key == @pref.get("keybindings")["anime_set unwatched"]
61
+ elsif key == @pref.get("keybindings")["anime_set_unwatched"]
62
62
  @interface.rmWatched(path)
63
63
 
64
64
  end
@@ -1,13 +1,20 @@
1
1
  require_relative 'emote'
2
- require 'benchmark'
3
2
  require_relative '../util/alogger'
4
- require 'digest/bubblebabble'
3
+ require_relative '../util/format'
5
4
 
6
5
  class Menu
7
6
 
8
- def initialize(refresh_function, interface, name, pref, format_, term)
7
+ def initialize(
8
+ refresh_function:,
9
+ interface:,
10
+ name:,
11
+ pref:,
12
+ format:,
13
+ term:,
14
+ children: true
15
+ )
9
16
  @term = term
10
- @format_ = format_
17
+ @format = format
11
18
  @attributes = {
12
19
  "t" => name,
13
20
  }
@@ -17,6 +24,7 @@ class Menu
17
24
  @expanded = -1
18
25
  @selected = 0
19
26
  @scrollup = false
27
+ @children = children
20
28
  @items_formatted = {}
21
29
  @items_hash = {}
22
30
  @hashmap = {}
@@ -24,8 +32,6 @@ class Menu
24
32
 
25
33
  refresh
26
34
  @lastcount = getLen
27
-
28
- @l = ALogger.new(Dir.home + "/desktop/menu.log")
29
35
 
30
36
  end
31
37
 
@@ -53,7 +59,7 @@ class Menu
53
59
  end
54
60
 
55
61
  def setFormat(format_)
56
- @format_ = format_
62
+ @format = format_
57
63
  end
58
64
 
59
65
  def refresh
@@ -152,33 +158,37 @@ class Menu
152
158
  next
153
159
  end
154
160
 
155
- parent = printmf(
156
- @pref.get(@format_["parent"]),
161
+ parent = Format.parse_format(
162
+ @pref.get(@format)["parent"],
157
163
  item[0].attributes,
164
+ @term.cols
158
165
  )
159
166
 
160
167
  children = []
161
168
  children_hash = []
162
169
 
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
- }
170
+ if @children
171
+ item[1].each { |subitem|
172
+
173
+ child_babble = subitem.cereal
174
+
175
+ if @items_hash.key? child_babble
176
+ val = @items_hash[babble]
177
+ new_items_hash.merge!(child_babble => val)
178
+ children<<@hashmap[babble]
179
+ new_hashmap.merge!(babble => @hashmap[babble])
180
+ next
181
+ end
182
+
183
+ children << Format.parse_format(
184
+ @pref.get(@format)["child"],
185
+ subitem.attributes,
186
+ @term.cols
187
+ )
188
+ children_hash << subitem.hash
189
+
190
+ }
191
+ end
182
192
 
183
193
  new_items_hash.merge!(babble => children_hash)
184
194
  new_items_formatted.merge!(parent => children)
@@ -189,9 +199,10 @@ class Menu
189
199
  @items_hash = new_items_hash
190
200
  @hashmap = new_hashmap
191
201
 
192
- @title_formatted = printmf(
193
- @pref.get(@format_["title"]),
202
+ @title_formatted = Format.parse_format(
203
+ @pref.get(@format)["title"],
194
204
  @attributes,
205
+ @term.cols
195
206
  )
196
207
 
197
208
  end
@@ -245,11 +256,10 @@ class Menu
245
256
  cl = @cl["s"] if selected
246
257
  lo = "\e[#{line};1H" + cl
247
258
 
248
- if in_expanded_region
259
+ if in_expanded_region and @children
249
260
  print @cl["2"] + lo + String(@items_formatted.values[@expanded][inner_index])
250
261
  inner_index+=1
251
262
  elsif in_outer_region
252
- #@l.log "#{@attributes["t"]} #{line_on} #{starter} #{String(@items_formatted.keys[outer_index])} - #{String(@cl["1"])} #{String(lo)}"
253
263
  print @cl["1"] + lo + String(@items_formatted.keys[outer_index])
254
264
  outer_index+=1
255
265
  else
@@ -260,82 +270,6 @@ class Menu
260
270
  end
261
271
  end
262
272
 
263
- def printmf(string, d)
264
- le = "\e[K\n"
265
-
266
- pstr = []
267
- add_to = ""
268
- buffer_char = []
269
-
270
- percent_mode = false
271
- dollar_mode = false
272
- at_mode = false
273
- escape_mode = false
274
- padding_collected = 0
275
-
276
- string.split('').each { |c|
277
- if escape_mode == true
278
- add_to += String(c)
279
- escape_mode = false
280
- elsif c == '%'
281
- percent_mode = true
282
- elsif c == '$'
283
- dollar_mode = true
284
- elsif c == '@'
285
- pstr << add_to
286
- add_to = ""
287
- at_mode = true
288
- elsif c == "#"
289
- padding_collected += 1
290
- elsif c == "\\"
291
- escape_mode = true
292
- elsif at_mode
293
- buffer_char << c
294
- at_mode = false
295
- elsif percent_mode
296
- addstr = ""
297
- addstr = String(d[c]) if d.key?(c)
298
- ol = addstr.length
299
- while addstr.length < (ol + padding_collected)
300
- addstr = " " + addstr
301
- end
302
-
303
- add_to += addstr
304
-
305
- percent_mode = false
306
- elsif dollar_mode
307
- add_to += String($emote[c]) if $emote.key?(c)
308
- dollar_mode = false
309
- else
310
- add_to += c
311
- end
312
- }
313
- pstr << add_to
314
-
315
- midstr = ""
316
- tl = 0
317
- pstr.each{ |s| tl += s.length }
318
- buffer_space = 0
319
- buffer_space = (@term.cols - tl) / (pstr.length - 1) if pstr.length > 1
320
-
321
- addl_space = (@term.cols - tl) % pstr.length
322
-
323
- pstr.each_with_index{ |str, i|
324
- #buffer_space += addl_space if i == pstr.length - 2
325
- #if i == pstr.length - 1
326
- #puts addl_space
327
- #puts i == pstr.length - 1
328
-
329
- break if i == pstr.length - 1
330
- buffer_ = ""
331
- buffer_ = buffer_char[i] * buffer_space if buffer_space >= 0
332
- midstr += str + buffer_
333
- }
334
- midstr += pstr[pstr.length - 1]
335
-
336
- return midstr
337
- end
338
-
339
273
  def control(key)
340
274
  sel = resolveSelected
341
275
  if key == @pref.get("keybindings")["menu_nav_up"]
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: aniview
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - annacrombie
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-04-17 00:00:00.000000000 Z
11
+ date: 2017-04-25 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: streamio-ffmpeg
@@ -90,6 +90,46 @@ dependencies:
90
90
  - - ">="
91
91
  - !ruby/object:Gem::Version
92
92
  version: 0.10.0
93
+ - !ruby/object:Gem::Dependency
94
+ name: simple-rss
95
+ requirement: !ruby/object:Gem::Requirement
96
+ requirements:
97
+ - - "~>"
98
+ - !ruby/object:Gem::Version
99
+ version: '1.3'
100
+ - - ">="
101
+ - !ruby/object:Gem::Version
102
+ version: 1.3.1
103
+ type: :runtime
104
+ prerelease: false
105
+ version_requirements: !ruby/object:Gem::Requirement
106
+ requirements:
107
+ - - "~>"
108
+ - !ruby/object:Gem::Version
109
+ version: '1.3'
110
+ - - ">="
111
+ - !ruby/object:Gem::Version
112
+ version: 1.3.1
113
+ - !ruby/object:Gem::Dependency
114
+ name: net-ping
115
+ requirement: !ruby/object:Gem::Requirement
116
+ requirements:
117
+ - - "~>"
118
+ - !ruby/object:Gem::Version
119
+ version: '2.0'
120
+ - - ">="
121
+ - !ruby/object:Gem::Version
122
+ version: 2.0.1
123
+ type: :runtime
124
+ prerelease: false
125
+ version_requirements: !ruby/object:Gem::Requirement
126
+ requirements:
127
+ - - "~>"
128
+ - !ruby/object:Gem::Version
129
+ version: '2.0'
130
+ - - ">="
131
+ - !ruby/object:Gem::Version
132
+ version: 2.0.1
93
133
  description: Browse local anime, based on cmus
94
134
  email: meotleft@gmail.com
95
135
  executables:
@@ -97,25 +137,29 @@ executables:
97
137
  extensions: []
98
138
  extra_rdoc_files: []
99
139
  files:
140
+ - "./lib/aniview.rb"
141
+ - "./lib/aniview/interface/animeio/animefile.rb"
142
+ - "./lib/aniview/interface/animeio/animeio.rb"
143
+ - "./lib/aniview/interface/animeio/animeseries.rb"
144
+ - "./lib/aniview/interface/deluge/delugec.rb"
145
+ - "./lib/aniview/interface/deluge/torrentitem.rb"
146
+ - "./lib/aniview/interface/item.rb"
147
+ - "./lib/aniview/interface/pref/defaults.json"
148
+ - "./lib/aniview/interface/pref/pref.rb"
149
+ - "./lib/aniview/interface/pref/prefitem.rb"
150
+ - "./lib/aniview/interface/pref/validate.json"
151
+ - "./lib/aniview/interface/rssfeed/rssfeed.rb"
152
+ - "./lib/aniview/util/alogger.rb"
153
+ - "./lib/aniview/util/command.rb"
154
+ - "./lib/aniview/util/format.rb"
155
+ - "./lib/aniview/util/online.rb"
156
+ - "./lib/aniview/util/term.rb"
157
+ - "./lib/aniview/view/aiomenu.rb"
158
+ - "./lib/aniview/view/delugemenu.rb"
159
+ - "./lib/aniview/view/emote.rb"
160
+ - "./lib/aniview/view/menu.rb"
161
+ - "./lib/aniview/view/prefmenu.rb"
100
162
  - bin/aniview
101
- - lib/aniview.rb
102
- - lib/aniview/interface/animeio/animefile.rb
103
- - lib/aniview/interface/animeio/animeio.rb
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
111
- - lib/aniview/util/command.rb
112
- - lib/aniview/util/format.rb
113
- - lib/aniview/util/term.rb
114
- - lib/aniview/view/aiomenu.rb
115
- - lib/aniview/view/delugemenu.rb
116
- - lib/aniview/view/emote.rb
117
- - lib/aniview/view/menu.rb
118
- - lib/aniview/view/prefmenu.rb
119
163
  homepage: https://github.com/annacrombie/aniview/
120
164
  licenses:
121
165
  - MIT