aniview 3.2.1 → 5.1.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 (51) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +8 -9
  3. data/bin/aniview +17 -9
  4. data/config/view.yml +3 -0
  5. data/lib/aniview.rb +1 -60
  6. data/modules/animeio/README.md +2 -0
  7. data/modules/animeio/config/daemon.yml +4 -0
  8. data/modules/animeio/config/view.yml +22 -0
  9. data/modules/animeio/lib/animeio.rb +24 -0
  10. data/modules/animeio/lib/animeio/anime_indexer.rb +99 -0
  11. data/modules/animeio/lib/animeio/animefile.rb +91 -0
  12. data/modules/animeio/lib/animeio/animeio.rb +175 -0
  13. data/modules/animeio/lib/animeio/animeio_view.rb +41 -0
  14. data/modules/animeio/lib/animeio/animeseries.rb +61 -0
  15. data/modules/mpv/README.md +2 -0
  16. data/modules/mpv/config/daemon.yml +2 -0
  17. data/modules/mpv/lib/mpv.rb +27 -0
  18. data/modules/mpv/lib/mpv/filename_widget.rb +16 -0
  19. data/modules/mpv/lib/mpv/mpv_controller.rb +85 -0
  20. data/modules/mpv/lib/mpv/time_widget.rb +29 -0
  21. metadata +33 -107
  22. data/lib/aniview/client/aniclient.rb +0 -118
  23. data/lib/aniview/interface/animeio/animefile.rb +0 -93
  24. data/lib/aniview/interface/animeio/animeio.rb +0 -321
  25. data/lib/aniview/interface/animeio/animeseries.rb +0 -60
  26. data/lib/aniview/interface/bridge.rb +0 -11
  27. data/lib/aniview/interface/deluge/delugec.rb +0 -172
  28. data/lib/aniview/interface/deluge/torrentitem.rb +0 -24
  29. data/lib/aniview/interface/item.rb +0 -24
  30. data/lib/aniview/interface/mpv/mpvbridge.rb +0 -149
  31. data/lib/aniview/interface/pref/defaults.json +0 -105
  32. data/lib/aniview/interface/pref/pref.rb +0 -209
  33. data/lib/aniview/interface/pref/prefitem.rb +0 -19
  34. data/lib/aniview/interface/pref/validate.json +0 -105
  35. data/lib/aniview/interface/schedule/schedule.rb +0 -99
  36. data/lib/aniview/interface/schedule/scheduleitem.rb +0 -59
  37. data/lib/aniview/interface/subscription/subscription.rb +0 -123
  38. data/lib/aniview/util/error.rb +0 -9
  39. data/lib/aniview/util/folder_listen.rb +0 -53
  40. data/lib/aniview/util/term.rb +0 -44
  41. data/lib/aniview/util/util.rb +0 -167
  42. data/lib/aniview/view/aiomenu.rb +0 -69
  43. data/lib/aniview/view/color.rb +0 -69
  44. data/lib/aniview/view/delugemenu.rb +0 -38
  45. data/lib/aniview/view/menu.rb +0 -325
  46. data/lib/aniview/view/prefmenu.rb +0 -26
  47. data/lib/aniview/view/schedulemenu.rb +0 -28
  48. data/lib/aniview/view/statusline.rb +0 -60
  49. data/lib/aniview/view/subscriptionmenu.rb +0 -37
  50. data/lib/application.rb +0 -306
  51. data/lib/daemon.rb +0 -188
@@ -0,0 +1,41 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'animefile'
4
+ require_relative 'animeseries'
5
+
6
+ module Zashoku
7
+ module AnimeIO
8
+ class AnimeIOView < Zashoku::View
9
+ def refresh_attributes
10
+ unformatted_p =
11
+ !@items.empty? ? sum_attribute('p') / @items.length : 0
12
+
13
+ sum_d = sum_attribute('d')
14
+ unformatted_q =
15
+ sum_d.positive? ? sum_attribute('W') * 100.0 / sum_d : 0
16
+
17
+ @attributes = {
18
+ 't' => Zashoku.conf.get(%w[title animeio]),
19
+ 'D' => Zashoku::Formatter.duration(sum_attribute('d')),
20
+ 'S' => Zashoku::Formatter.size(sum_attribute('s')),
21
+ 'P' => Zashoku::Formatter.progress(unformatted_p),
22
+ 'Q' => Zashoku::Formatter.progress(unformatted_q),
23
+ 'c' => sum_attribute('c'),
24
+ 'w' => sum_attribute('w')
25
+ }
26
+ end
27
+
28
+ def sum_attribute(k)
29
+ @items.inject(0) { |mem, c| mem + c[0].attr[k] }
30
+ end
31
+
32
+ def refresh_items
33
+ Zashoku.command(mod: 'remote::animeio', meth: 'items')
34
+ end
35
+
36
+ def get_format
37
+ Zashoku.conf.get(%w[format animeio])
38
+ end
39
+ end
40
+ end
41
+ end
@@ -0,0 +1,61 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'date'
4
+
5
+ module Zashoku
6
+ module AnimeIO
7
+ class AnimeSeries < Zashoku::Item
8
+ include Zashoku::Util
9
+
10
+ attr_accessor :attr
11
+
12
+ def initialize(path, children = [])
13
+ @path = path
14
+
15
+ @attr = {
16
+ 't' => String(@path),
17
+ 'c' => 0,
18
+ 'd' => 0,
19
+ 's' => 0,
20
+ 'p' => 0,
21
+ 'w' => 0,
22
+ 'W' => 0
23
+ }
24
+
25
+ @children = children
26
+ @children.each { |c| self + c }
27
+ end
28
+
29
+ def +(other)
30
+ @attr['d'] += other.attr['d']
31
+ @attr['D'] = Zashoku::Formatter.duration(@attr['d'])
32
+ @attr['s'] += other.attr['s']
33
+ @attr['S'] = Zashoku::Formatter.size(@attr['s'])
34
+ @attr['c'] += 1
35
+ @attr['w'] += 1 if other.watched?
36
+ @attr['W'] += other.attr['d'] if other.watched?
37
+ end
38
+
39
+ def <<(af)
40
+ @children << af
41
+ self + af
42
+ average
43
+ end
44
+
45
+ def average
46
+ @attr['p'] = @attr['w'] * 100.0 / @attr['c']
47
+ @attr['q'] = @attr['d'].positive? ? @attr['W'] * 100.0 / @attr['d'] : 0
48
+ @attr['Q'] = Zashoku::Formatter.progress @attr['q']
49
+ @attr['P'] = Zashoku::Formatter.progress @attr['p']
50
+ end
51
+
52
+ def title
53
+ @path
54
+ end
55
+
56
+ def attributes
57
+ @attr
58
+ end
59
+ end
60
+ end
61
+ end
@@ -0,0 +1,2 @@
1
+ # zashoku-mpv
2
+ zashoku interface for mpv gem
@@ -0,0 +1,2 @@
1
+ ---
2
+ mpv_args: "--alang=jpn --slang=eng"
@@ -0,0 +1,27 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'mpv'
4
+
5
+ module Zashoku
6
+ module Mpv
7
+ extend Zashoku::Module
8
+
9
+ Version = [1, 0, 0].freeze
10
+ Root = File.expand_path('../', __dir__)
11
+
12
+ autoload :MpvController, File.join(Root, 'lib/mpv/mpv_controller')
13
+
14
+ def self.controller
15
+ MpvController.new
16
+ end
17
+
18
+ def self.widgets
19
+ require_relative 'mpv/filename_widget'
20
+ require_relative 'mpv/time_widget'
21
+ {
22
+ 'filename' => FilenameWidget.new,
23
+ 'time' => TimeWidget.new,
24
+ }
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,16 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Zashoku
4
+ module Mpv
5
+ class FilenameWidget < Zashoku::Statusline::Widget
6
+ def refresh
7
+ file = Zashoku.command(mod: 'remote::mpv', meth: 'filename')
8
+
9
+ @attr = {
10
+ 'f' => file,
11
+ 'F' => Zashoku::Formatter.media_file(file)
12
+ }
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,85 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Zashoku
4
+ module Mpv
5
+ class MpvController
6
+ include Observable
7
+
8
+ DefaultFilename = '.'
9
+ DefaultTimeHash = { pos: 0, end: 0, pct: 0, lu: Time.now}
10
+
11
+ attr_accessor :mpv, :filename, :time
12
+
13
+ def initialize
14
+ defaults
15
+ connect
16
+ end
17
+
18
+ def defaults
19
+ @filename = DefaultFilename
20
+ @time = DefaultTimeHash.dup
21
+ end
22
+
23
+ def refresh_filename
24
+ changed
25
+ notify_observers(
26
+ sender: 'mpv',
27
+ event: 'refresh_widget',
28
+ statusline: true,
29
+ widget: 'filename'
30
+ )
31
+ end
32
+
33
+ def refresh_time
34
+ changed
35
+ notify_observers(
36
+ sender: 'mpv',
37
+ event: 'refresh_widget',
38
+ statusline: true,
39
+ widget: 'time'
40
+ )
41
+ end
42
+
43
+ def connect
44
+ return unless @mpv&.client&.get_property("idle-active") == nil
45
+
46
+ @mpv = MPV::Session.new(
47
+ user_args: Zashoku.conf.get(['mpv_args']).split
48
+ )
49
+ @mpv.callbacks << method(:event_handler)
50
+ @mpv.client.command('observe_property_string', 2, 'time-pos')
51
+ @mpv.client.command('observe_property_string', 1, 'path')
52
+ end
53
+
54
+ def event_handler(e)
55
+ # p e
56
+ case e['event']
57
+ when 'property-change'
58
+ case e['name']
59
+ when 'path'
60
+ @filename = e['data'] || DefaultFilename
61
+ refresh_filename
62
+ when 'time-pos'
63
+ return if Time.now < @time[:lu] + 1
64
+ @time[:pos] = e['data']
65
+ @time[:end] = @mpv.client.get_property('duration')
66
+ @time[:pct] = @mpv.client.get_property('percent-pos')
67
+ @time[:lu] = Time.now
68
+ refresh_time
69
+ end
70
+ when "end-file"
71
+ defaults
72
+ refresh_time
73
+ refresh_filename
74
+ end
75
+ end
76
+
77
+ def watch(file)
78
+ connect
79
+ @mpv.client.command('loadfile', file)
80
+ Zashoku.command(mod: 'animeio', meth: 'watched!', args: [file])
81
+ end
82
+ end
83
+ end
84
+ end
85
+
@@ -0,0 +1,29 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Zashoku
4
+ module Mpv
5
+ class TimeWidget < Zashoku::Statusline::Widget
6
+ def refresh
7
+ time = to_f(Zashoku.command(mod: 'remote::mpv', meth: 'time'))
8
+ @attr = {
9
+ 't' => Zashoku::Formatter.duration(time[:pos]),
10
+ 'e' => Zashoku::Formatter.duration(time[:end]),
11
+ 'p' => Zashoku::Formatter.progress(time[:pct])
12
+ }
13
+ end
14
+
15
+ def to_f(h)
16
+ h.map do |k, d|
17
+ [
18
+ k,
19
+ begin
20
+ Float(d)
21
+ rescue TypeError
22
+ 0
23
+ end
24
+ ]
25
+ end.to_h
26
+ end
27
+ end
28
+ end
29
+ 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: 3.2.1
4
+ version: 5.1.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-08-30 00:00:00.000000000 Z
11
+ date: 2017-12-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: streamio-ffmpeg
@@ -31,106 +31,46 @@ dependencies:
31
31
  - !ruby/object:Gem::Version
32
32
  version: 3.0.2
33
33
  - !ruby/object:Gem::Dependency
34
- name: highline
35
- requirement: !ruby/object:Gem::Requirement
36
- requirements:
37
- - - "~>"
38
- - !ruby/object:Gem::Version
39
- version: '1.7'
40
- - - ">="
41
- - !ruby/object:Gem::Version
42
- version: 1.7.8
43
- type: :runtime
44
- prerelease: false
45
- version_requirements: !ruby/object:Gem::Requirement
46
- requirements:
47
- - - "~>"
48
- - !ruby/object:Gem::Version
49
- version: '1.7'
50
- - - ">="
51
- - !ruby/object:Gem::Version
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
93
- - !ruby/object:Gem::Dependency
94
- name: simple-rss
34
+ name: mpv
95
35
  requirement: !ruby/object:Gem::Requirement
96
36
  requirements:
97
37
  - - "~>"
98
38
  - !ruby/object:Gem::Version
99
- version: '1.3'
39
+ version: '2.0'
100
40
  - - ">="
101
41
  - !ruby/object:Gem::Version
102
- version: 1.3.1
42
+ version: 2.0.2
103
43
  type: :runtime
104
44
  prerelease: false
105
45
  version_requirements: !ruby/object:Gem::Requirement
106
46
  requirements:
107
47
  - - "~>"
108
48
  - !ruby/object:Gem::Version
109
- version: '1.3'
49
+ version: '2.0'
110
50
  - - ">="
111
51
  - !ruby/object:Gem::Version
112
- version: 1.3.1
52
+ version: 2.0.2
113
53
  - !ruby/object:Gem::Dependency
114
- name: mpv
54
+ name: zashoku
115
55
  requirement: !ruby/object:Gem::Requirement
116
56
  requirements:
117
57
  - - "~>"
118
58
  - !ruby/object:Gem::Version
119
- version: '2.0'
59
+ version: '1.5'
120
60
  - - ">="
121
61
  - !ruby/object:Gem::Version
122
- version: 2.0.2
62
+ version: 1.5.0
123
63
  type: :runtime
124
64
  prerelease: false
125
65
  version_requirements: !ruby/object:Gem::Requirement
126
66
  requirements:
127
67
  - - "~>"
128
68
  - !ruby/object:Gem::Version
129
- version: '2.0'
69
+ version: '1.5'
130
70
  - - ">="
131
71
  - !ruby/object:Gem::Version
132
- version: 2.0.2
133
- description: Browse local anime, based on cmus
72
+ version: 1.5.0
73
+ description: Browse local media, based on cmus
134
74
  email: meotleft@gmail.com
135
75
  executables:
136
76
  - aniview
@@ -138,37 +78,23 @@ extensions: []
138
78
  extra_rdoc_files: []
139
79
  files:
140
80
  - "./README.md"
81
+ - "./config/view.yml"
141
82
  - "./lib/aniview.rb"
142
- - "./lib/aniview/client/aniclient.rb"
143
- - "./lib/aniview/interface/animeio/animefile.rb"
144
- - "./lib/aniview/interface/animeio/animeio.rb"
145
- - "./lib/aniview/interface/animeio/animeseries.rb"
146
- - "./lib/aniview/interface/bridge.rb"
147
- - "./lib/aniview/interface/deluge/delugec.rb"
148
- - "./lib/aniview/interface/deluge/torrentitem.rb"
149
- - "./lib/aniview/interface/item.rb"
150
- - "./lib/aniview/interface/mpv/mpvbridge.rb"
151
- - "./lib/aniview/interface/pref/defaults.json"
152
- - "./lib/aniview/interface/pref/pref.rb"
153
- - "./lib/aniview/interface/pref/prefitem.rb"
154
- - "./lib/aniview/interface/pref/validate.json"
155
- - "./lib/aniview/interface/schedule/schedule.rb"
156
- - "./lib/aniview/interface/schedule/scheduleitem.rb"
157
- - "./lib/aniview/interface/subscription/subscription.rb"
158
- - "./lib/aniview/util/error.rb"
159
- - "./lib/aniview/util/folder_listen.rb"
160
- - "./lib/aniview/util/term.rb"
161
- - "./lib/aniview/util/util.rb"
162
- - "./lib/aniview/view/aiomenu.rb"
163
- - "./lib/aniview/view/color.rb"
164
- - "./lib/aniview/view/delugemenu.rb"
165
- - "./lib/aniview/view/menu.rb"
166
- - "./lib/aniview/view/prefmenu.rb"
167
- - "./lib/aniview/view/schedulemenu.rb"
168
- - "./lib/aniview/view/statusline.rb"
169
- - "./lib/aniview/view/subscriptionmenu.rb"
170
- - "./lib/application.rb"
171
- - "./lib/daemon.rb"
83
+ - "./modules/animeio/README.md"
84
+ - "./modules/animeio/config/daemon.yml"
85
+ - "./modules/animeio/config/view.yml"
86
+ - "./modules/animeio/lib/animeio.rb"
87
+ - "./modules/animeio/lib/animeio/anime_indexer.rb"
88
+ - "./modules/animeio/lib/animeio/animefile.rb"
89
+ - "./modules/animeio/lib/animeio/animeio.rb"
90
+ - "./modules/animeio/lib/animeio/animeio_view.rb"
91
+ - "./modules/animeio/lib/animeio/animeseries.rb"
92
+ - "./modules/mpv/README.md"
93
+ - "./modules/mpv/config/daemon.yml"
94
+ - "./modules/mpv/lib/mpv.rb"
95
+ - "./modules/mpv/lib/mpv/filename_widget.rb"
96
+ - "./modules/mpv/lib/mpv/mpv_controller.rb"
97
+ - "./modules/mpv/lib/mpv/time_widget.rb"
172
98
  - bin/aniview
173
99
  homepage: https://github.com/annacrombie/aniview/
174
100
  licenses:
@@ -180,9 +106,9 @@ require_paths:
180
106
  - lib
181
107
  required_ruby_version: !ruby/object:Gem::Requirement
182
108
  requirements:
183
- - - ">"
109
+ - - ">="
184
110
  - !ruby/object:Gem::Version
185
- version: 2.3.99
111
+ version: '0'
186
112
  required_rubygems_version: !ruby/object:Gem::Requirement
187
113
  requirements:
188
114
  - - ">="
@@ -190,8 +116,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
190
116
  version: '0'
191
117
  requirements: []
192
118
  rubyforge_project:
193
- rubygems_version: 2.6.8
119
+ rubygems_version: 2.6.11
194
120
  signing_key:
195
121
  specification_version: 4
196
- summary: command line anime library manager
122
+ summary: command line media library manager
197
123
  test_files: []