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.
Files changed (38) hide show
  1. checksums.yaml +4 -4
  2. data/bin/aniview +2 -3
  3. data/lib/aniview.rb +50 -243
  4. data/lib/aniview/client/aniclient.rb +111 -53
  5. data/lib/aniview/interface/animeio/animefile.rb +73 -64
  6. data/lib/aniview/interface/animeio/animeio.rb +184 -181
  7. data/lib/aniview/interface/animeio/animeseries.rb +53 -48
  8. data/lib/aniview/interface/deluge/delugec.rb +158 -153
  9. data/lib/aniview/interface/deluge/torrentitem.rb +21 -16
  10. data/lib/aniview/interface/item.rb +21 -17
  11. data/lib/aniview/interface/mpv/mpvbridge.rb +78 -73
  12. data/lib/aniview/interface/pref/pref.rb +135 -132
  13. data/lib/aniview/interface/pref/prefitem.rb +16 -15
  14. data/lib/aniview/interface/schedule/schedule.rb +89 -83
  15. data/lib/aniview/interface/schedule/scheduleitem.rb +54 -51
  16. data/lib/aniview/interface/subscription/subscription.rb +111 -108
  17. data/lib/aniview/util/term.rb +39 -36
  18. data/lib/aniview/util/util.rb +149 -0
  19. data/lib/aniview/view/aiomenu.rb +68 -63
  20. data/lib/aniview/view/color.rb +69 -67
  21. data/lib/aniview/view/delugemenu.rb +44 -40
  22. data/lib/aniview/view/menu.rb +281 -286
  23. data/lib/aniview/view/prefmenu.rb +36 -34
  24. data/lib/aniview/view/schedulemenu.rb +32 -29
  25. data/lib/aniview/view/statusline.rb +19 -14
  26. data/lib/aniview/view/subscriptionmenu.rb +35 -32
  27. data/lib/application.rb +260 -0
  28. data/lib/daemon.rb +174 -0
  29. metadata +5 -12
  30. data/bin/aniviewd +0 -20
  31. data/lib/aniview/util/alogger.rb +0 -18
  32. data/lib/aniview/util/command.rb +0 -25
  33. data/lib/aniview/util/format.rb +0 -123
  34. data/lib/aniview/util/online.rb +0 -12
  35. data/lib/aniview/util/serializer.rb +0 -19
  36. data/lib/aniview/util/stringhelp.rb +0 -50
  37. data/lib/aniview/view/emote.rb +0 -345
  38. 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: 1.3.0
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-01 00:00:00.000000000 Z
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/aniviewd.rb"
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)
@@ -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
@@ -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
@@ -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
@@ -1,12 +0,0 @@
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
@@ -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