aniview 1.3.0 → 2.0.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/bin/aniview +2 -3
- data/lib/aniview.rb +50 -243
- data/lib/aniview/client/aniclient.rb +111 -53
- data/lib/aniview/interface/animeio/animefile.rb +73 -64
- data/lib/aniview/interface/animeio/animeio.rb +184 -181
- data/lib/aniview/interface/animeio/animeseries.rb +53 -48
- data/lib/aniview/interface/deluge/delugec.rb +158 -153
- data/lib/aniview/interface/deluge/torrentitem.rb +21 -16
- data/lib/aniview/interface/item.rb +21 -17
- data/lib/aniview/interface/mpv/mpvbridge.rb +78 -73
- data/lib/aniview/interface/pref/pref.rb +135 -132
- data/lib/aniview/interface/pref/prefitem.rb +16 -15
- data/lib/aniview/interface/schedule/schedule.rb +89 -83
- data/lib/aniview/interface/schedule/scheduleitem.rb +54 -51
- data/lib/aniview/interface/subscription/subscription.rb +111 -108
- data/lib/aniview/util/term.rb +39 -36
- data/lib/aniview/util/util.rb +149 -0
- data/lib/aniview/view/aiomenu.rb +68 -63
- data/lib/aniview/view/color.rb +69 -67
- data/lib/aniview/view/delugemenu.rb +44 -40
- data/lib/aniview/view/menu.rb +281 -286
- data/lib/aniview/view/prefmenu.rb +36 -34
- data/lib/aniview/view/schedulemenu.rb +32 -29
- data/lib/aniview/view/statusline.rb +19 -14
- data/lib/aniview/view/subscriptionmenu.rb +35 -32
- data/lib/application.rb +260 -0
- data/lib/daemon.rb +174 -0
- metadata +5 -12
- data/bin/aniviewd +0 -20
- data/lib/aniview/util/alogger.rb +0 -18
- data/lib/aniview/util/command.rb +0 -25
- data/lib/aniview/util/format.rb +0 -123
- data/lib/aniview/util/online.rb +0 -12
- data/lib/aniview/util/serializer.rb +0 -19
- data/lib/aniview/util/stringhelp.rb +0 -50
- data/lib/aniview/view/emote.rb +0 -345
- data/lib/aniviewd.rb +0 -179
data/lib/daemon.rb
ADDED
@@ -0,0 +1,174 @@
|
|
1
|
+
require 'thread'
|
2
|
+
require 'socket'
|
3
|
+
require 'warning'
|
4
|
+
|
5
|
+
Warning.ignore([:fixnum, :bignum])
|
6
|
+
|
7
|
+
require_relative 'aniview/interface/deluge/delugec'
|
8
|
+
require_relative 'aniview/interface/pref/pref'
|
9
|
+
require_relative 'aniview/interface/schedule/schedule'
|
10
|
+
require_relative 'aniview/interface/subscription/subscription'
|
11
|
+
require_relative 'aniview/client/aniclient'
|
12
|
+
require_relative 'aniview/util/util'
|
13
|
+
|
14
|
+
module Aniview
|
15
|
+
class Daemon
|
16
|
+
|
17
|
+
def initialize(args)
|
18
|
+
|
19
|
+
@pref = Interface::Pref.new
|
20
|
+
@c = Client::AniClient.new @pref
|
21
|
+
|
22
|
+
args << "start" if args.length < 1
|
23
|
+
parseArgs args
|
24
|
+
|
25
|
+
@schedule = Interface::Schedule.new @pref
|
26
|
+
@delugec = Interface::DelugeC.new(@pref)
|
27
|
+
@subscription = Interface::Subscription.new(@pref, @schedule, @delugec, @c)
|
28
|
+
|
29
|
+
begin
|
30
|
+
@s = TCPServer.new @pref.get("daemon")["port"]
|
31
|
+
rescue Errno::EADDRINUSE
|
32
|
+
puts "error, something is already listening on #{@pref.get("daemon")["port"]}, maybe the \nserver is already running?"
|
33
|
+
quit
|
34
|
+
end
|
35
|
+
@looped = 0
|
36
|
+
@matches = 0
|
37
|
+
@lastchecked = "never"
|
38
|
+
|
39
|
+
$stdout.reopen(@pref.parseDir(@pref.get("daemon_log_file")), "w")
|
40
|
+
$stderr.reopen(@pref.parseDir(@pref.get("daemon_log_file")), "w")
|
41
|
+
$stdout.sync = true
|
42
|
+
$stderr.sync = true
|
43
|
+
|
44
|
+
end
|
45
|
+
|
46
|
+
def parseArgs args
|
47
|
+
args.each { |a|
|
48
|
+
case a
|
49
|
+
when "help"
|
50
|
+
help
|
51
|
+
quit
|
52
|
+
when "start"
|
53
|
+
if @c.server?
|
54
|
+
puts "already running"
|
55
|
+
quit
|
56
|
+
end
|
57
|
+
when "stop"
|
58
|
+
if @c.server?
|
59
|
+
puts "quitting"
|
60
|
+
@c.stopDaemon
|
61
|
+
quit
|
62
|
+
else
|
63
|
+
puts "server isn't running"
|
64
|
+
quit
|
65
|
+
end
|
66
|
+
when "info"
|
67
|
+
if @c.server?
|
68
|
+
puts @c.info
|
69
|
+
quit
|
70
|
+
else
|
71
|
+
puts "server isn't running"
|
72
|
+
quit
|
73
|
+
end
|
74
|
+
when "up?"
|
75
|
+
puts @c.server?
|
76
|
+
quit
|
77
|
+
when "nani"
|
78
|
+
puts @c.sendMsg("what?")
|
79
|
+
quit
|
80
|
+
when "items"
|
81
|
+
p @c.getItems
|
82
|
+
quit
|
83
|
+
else
|
84
|
+
puts "unknown command, dude!"
|
85
|
+
quit
|
86
|
+
end
|
87
|
+
}
|
88
|
+
end
|
89
|
+
|
90
|
+
def help
|
91
|
+
cmds = ["help", "start", "stop", "info", "up?", "nani"]
|
92
|
+
puts "commands:"
|
93
|
+
puts cmds.sort
|
94
|
+
end
|
95
|
+
|
96
|
+
def checkFeeds
|
97
|
+
Thread.abort_on_exception = true
|
98
|
+
Thread.new do
|
99
|
+
while true
|
100
|
+
@subscription.updateFeed
|
101
|
+
|
102
|
+
if @subscription.feed == nil
|
103
|
+
@lastchecked = "offline"
|
104
|
+
else
|
105
|
+
@lastchecked = Time.now.to_s
|
106
|
+
@schedule.load
|
107
|
+
@matches += @subscription.matchAll(verbose: true)
|
108
|
+
end
|
109
|
+
|
110
|
+
#p @schedule.getAll
|
111
|
+
@looped += 1
|
112
|
+
sleep Integer(@pref.get("rss_feed")["refresh_interval"])
|
113
|
+
end
|
114
|
+
end
|
115
|
+
end
|
116
|
+
|
117
|
+
def quit
|
118
|
+
@checkThread.exit unless @checkThread == nil
|
119
|
+
exit
|
120
|
+
end
|
121
|
+
|
122
|
+
def uptime
|
123
|
+
Util.format_duration(Time.now - @started)
|
124
|
+
end
|
125
|
+
|
126
|
+
def run
|
127
|
+
puts "--------"
|
128
|
+
puts "server started"
|
129
|
+
puts "server listening on port " + @pref.get("daemon")["port"]
|
130
|
+
|
131
|
+
trap(:QUIT) do
|
132
|
+
quit
|
133
|
+
end
|
134
|
+
|
135
|
+
@checkThread = checkFeeds
|
136
|
+
@started = Time.now
|
137
|
+
loop do
|
138
|
+
lastloop = false
|
139
|
+
client = @s.accept
|
140
|
+
|
141
|
+
message = client.gets.chomp.split(" ")
|
142
|
+
puts "got msg #{message} from client"
|
143
|
+
response = "okay."
|
144
|
+
|
145
|
+
message.each_with_index { |m, i|
|
146
|
+
case m
|
147
|
+
when "up?"
|
148
|
+
response = "true"
|
149
|
+
when "quit"
|
150
|
+
lastloop = true
|
151
|
+
response = "quitting"
|
152
|
+
when "info"
|
153
|
+
response = "uptime: #{uptime}, loops: #{@looped}, matches, #{@matches}"
|
154
|
+
when "lastchecked"
|
155
|
+
response = @lastchecked
|
156
|
+
when "items"
|
157
|
+
response = Util.encode_object(@schedule.getAll)
|
158
|
+
when "itemshash"
|
159
|
+
response = @schedule.getAllCereal
|
160
|
+
else
|
161
|
+
response = "what?"
|
162
|
+
end
|
163
|
+
}
|
164
|
+
|
165
|
+
response += "\n"
|
166
|
+
|
167
|
+
puts "responding with #{response}"
|
168
|
+
client.puts response
|
169
|
+
client.close
|
170
|
+
quit if lastloop
|
171
|
+
end
|
172
|
+
end
|
173
|
+
end
|
174
|
+
end
|
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:
|
4
|
+
version: 2.0.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-06-
|
11
|
+
date: 2017-06-04 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: streamio-ffmpeg
|
@@ -134,7 +134,6 @@ description: Browse local anime, based on cmus
|
|
134
134
|
email: meotleft@gmail.com
|
135
135
|
executables:
|
136
136
|
- aniview
|
137
|
-
- aniviewd
|
138
137
|
extensions: []
|
139
138
|
extra_rdoc_files: []
|
140
139
|
files:
|
@@ -154,25 +153,19 @@ files:
|
|
154
153
|
- "./lib/aniview/interface/schedule/schedule.rb"
|
155
154
|
- "./lib/aniview/interface/schedule/scheduleitem.rb"
|
156
155
|
- "./lib/aniview/interface/subscription/subscription.rb"
|
157
|
-
- "./lib/aniview/util/alogger.rb"
|
158
|
-
- "./lib/aniview/util/command.rb"
|
159
|
-
- "./lib/aniview/util/format.rb"
|
160
|
-
- "./lib/aniview/util/online.rb"
|
161
|
-
- "./lib/aniview/util/serializer.rb"
|
162
|
-
- "./lib/aniview/util/stringhelp.rb"
|
163
156
|
- "./lib/aniview/util/term.rb"
|
157
|
+
- "./lib/aniview/util/util.rb"
|
164
158
|
- "./lib/aniview/view/aiomenu.rb"
|
165
159
|
- "./lib/aniview/view/color.rb"
|
166
160
|
- "./lib/aniview/view/delugemenu.rb"
|
167
|
-
- "./lib/aniview/view/emote.rb"
|
168
161
|
- "./lib/aniview/view/menu.rb"
|
169
162
|
- "./lib/aniview/view/prefmenu.rb"
|
170
163
|
- "./lib/aniview/view/schedulemenu.rb"
|
171
164
|
- "./lib/aniview/view/statusline.rb"
|
172
165
|
- "./lib/aniview/view/subscriptionmenu.rb"
|
173
|
-
- "./lib/
|
166
|
+
- "./lib/application.rb"
|
167
|
+
- "./lib/daemon.rb"
|
174
168
|
- bin/aniview
|
175
|
-
- bin/aniviewd
|
176
169
|
homepage: https://github.com/annacrombie/aniview/
|
177
170
|
licenses:
|
178
171
|
- MIT
|
data/bin/aniviewd
DELETED
@@ -1,20 +0,0 @@
|
|
1
|
-
#!/usr/bin/env ruby
|
2
|
-
|
3
|
-
begin
|
4
|
-
require 'aniviewd'
|
5
|
-
rescue LoadError
|
6
|
-
require_relative '../lib/aniviewd' if File.exist?(File.join(File.dirname(__FILE__), '../lib/aniviewd.rb'))
|
7
|
-
end
|
8
|
-
|
9
|
-
unless defined? AniViewd
|
10
|
-
puts "cant find aniviewd library"
|
11
|
-
exit
|
12
|
-
end
|
13
|
-
|
14
|
-
av = AniViewd.new(ARGV)
|
15
|
-
|
16
|
-
process = fork do
|
17
|
-
av.run
|
18
|
-
end
|
19
|
-
|
20
|
-
Process.detach(process)
|
data/lib/aniview/util/alogger.rb
DELETED
@@ -1,18 +0,0 @@
|
|
1
|
-
class ALogger
|
2
|
-
|
3
|
-
def initialize(file, overwrite = true)
|
4
|
-
|
5
|
-
@logfile = file
|
6
|
-
mode = "a"
|
7
|
-
mode = "w" if overwrite
|
8
|
-
open(@logfile, mode) { |f| f.puts "initialized..." }
|
9
|
-
|
10
|
-
end
|
11
|
-
|
12
|
-
def log(string)
|
13
|
-
|
14
|
-
open(@logfile, 'a') { |f| f.puts "#{Time.now.to_s} #{string}" }
|
15
|
-
|
16
|
-
end
|
17
|
-
|
18
|
-
end
|
data/lib/aniview/util/command.rb
DELETED
@@ -1,25 +0,0 @@
|
|
1
|
-
require 'readline'
|
2
|
-
require_relative '../view/color'
|
3
|
-
|
4
|
-
class Command
|
5
|
-
def self.read(term, prompt = "", default = "")
|
6
|
-
|
7
|
-
term.bold.echo_on
|
8
|
-
|
9
|
-
print "\033[" + String(term.rows) + ";1H" + Color.white
|
10
|
-
term.show_cursor
|
11
|
-
|
12
|
-
Readline.completion_append_character = ""
|
13
|
-
Readline.pre_input_hook = -> do
|
14
|
-
Readline.insert_text default
|
15
|
-
Readline.redisplay
|
16
|
-
Readline.pre_input_hook = nil
|
17
|
-
end
|
18
|
-
|
19
|
-
input = Readline.readline(prompt, false)
|
20
|
-
|
21
|
-
term.hide_cursor.nobold.echo_off.clear
|
22
|
-
|
23
|
-
return input
|
24
|
-
end
|
25
|
-
end
|
data/lib/aniview/util/format.rb
DELETED
@@ -1,123 +0,0 @@
|
|
1
|
-
class Format
|
2
|
-
def self.format_duration v
|
3
|
-
hours = Integer((v-(v%3600))/3600)
|
4
|
-
minutes = Integer( ((v-(v%60))/60) - (hours * 60))
|
5
|
-
seconds = Integer(v%60)
|
6
|
-
seconds = "0" + String(seconds) if seconds < 10
|
7
|
-
if hours < 1 and minutes < 1
|
8
|
-
"0:#{seconds}"
|
9
|
-
else
|
10
|
-
if hours < 1
|
11
|
-
return "#{String(minutes)}:#{String(seconds)}"
|
12
|
-
else
|
13
|
-
minutes = "0" + String(minutes) if minutes < 10
|
14
|
-
return "#{String(hours)}:#{String(minutes)}:#{String(seconds)}"
|
15
|
-
end
|
16
|
-
end
|
17
|
-
end
|
18
|
-
|
19
|
-
def self.format_size s
|
20
|
-
fs = Float(s)
|
21
|
-
|
22
|
-
bytecount = {
|
23
|
-
"TB" => 1000000000000.0,
|
24
|
-
"GB" => 1000000000.0,
|
25
|
-
"MB" => 1000000.0,
|
26
|
-
"KB" => 1000.0,
|
27
|
-
"B" => 1.0,
|
28
|
-
}
|
29
|
-
r = "TB"
|
30
|
-
r = "GB" if s < bytecount["TB"]
|
31
|
-
r = "MB" if s < bytecount["GB"]
|
32
|
-
r = "KB" if s < bytecount["KB"]
|
33
|
-
|
34
|
-
return String( Float(fs/bytecount[r] * 10.0 ).round / 10.0 ) + r
|
35
|
-
end
|
36
|
-
|
37
|
-
def self.format_progress p
|
38
|
-
return "#{Integer(p)}.#{Integer(p * 10.0) % 10}"
|
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
|
-
|
54
|
-
if mode == "e"
|
55
|
-
add_to += String(c)
|
56
|
-
mode = "char"
|
57
|
-
|
58
|
-
elsif c == '%'
|
59
|
-
mode = "%"
|
60
|
-
|
61
|
-
elsif c == '$'
|
62
|
-
mode = "$"
|
63
|
-
|
64
|
-
elsif c == '@'
|
65
|
-
pstr << add_to
|
66
|
-
add_to = ""
|
67
|
-
mode = "@"
|
68
|
-
|
69
|
-
elsif c == "#"
|
70
|
-
padding_collected += 1
|
71
|
-
|
72
|
-
elsif c == "\\"
|
73
|
-
mode = "e"
|
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
|
-
|
94
|
-
end
|
95
|
-
}
|
96
|
-
pstr << add_to
|
97
|
-
|
98
|
-
buffer_char << " " if buffer_char.length == 0
|
99
|
-
|
100
|
-
midstr = ""
|
101
|
-
tl = 0
|
102
|
-
pstr.each{ |s| tl += s.length }
|
103
|
-
buffer_space = 0
|
104
|
-
buffer_space = (cols - tl) / (pstr.length - 1) if pstr.length > 1
|
105
|
-
|
106
|
-
addl_space = (cols - tl) % pstr.length
|
107
|
-
|
108
|
-
pstr.each_with_index{ |str, i|
|
109
|
-
#buffer_space += addl_space if i == pstr.length - 2
|
110
|
-
# p pstr.length
|
111
|
-
# p pstr
|
112
|
-
|
113
|
-
break if i == pstr.length - 1
|
114
|
-
buffer_ = ""
|
115
|
-
buffer_ = buffer_char[i] * buffer_space if buffer_space >= 0
|
116
|
-
|
117
|
-
midstr += str + buffer_
|
118
|
-
}
|
119
|
-
midstr += pstr[pstr.length - 1]
|
120
|
-
|
121
|
-
return midstr[0..cols-1]
|
122
|
-
end
|
123
|
-
end
|
data/lib/aniview/util/online.rb
DELETED
@@ -1,19 +0,0 @@
|
|
1
|
-
require 'base64'
|
2
|
-
|
3
|
-
class Serializer
|
4
|
-
|
5
|
-
def self.e d
|
6
|
-
Base64.strict_encode64(Marshal.dump d)
|
7
|
-
end
|
8
|
-
|
9
|
-
def self.d e
|
10
|
-
begin
|
11
|
-
Marshal.load(Base64.decode64(e))
|
12
|
-
rescue ArgumentError
|
13
|
-
{}
|
14
|
-
rescue TypeError
|
15
|
-
{}
|
16
|
-
end
|
17
|
-
end
|
18
|
-
|
19
|
-
end
|