screen-recorder 1.1.0 → 1.5.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,50 +1,17 @@
1
1
  module ScreenRecorder
2
2
  # @since 1.0.0-beta4
3
3
  module Titles
4
- # Regex to filter out "Window Title: N/A" from Chrome extensions and "Window Title: ".
5
- # This is done to remove unusable titles and to match the Ffmpeg expected input format
6
- # for capturing specific windows.
7
- # For example, "Window Title: Google - Mozilla Firefox" becomes "Google - Mozilla Firefox".
8
- FILTERED_TITLES = %r{^Window Title:( N/A|\s+)?}.freeze
9
-
10
4
  #
11
- # Returns a list of available window titles for the given application (process) name.
5
+ # Returns a list of available window titles for the given process (application) name.
12
6
  #
7
+ # @return [Array]
8
+ #
9
+ # @example
10
+ # ScreenRecorder::Titles.fetch('chrome')
11
+ # #=> ["New Tab - Google Chrome"]
13
12
  def self.fetch(application)
14
- ScreenRecorder.logger.debug "Retrieving available windows for: #{application}"
15
- WindowGrabber.new.available_windows_for application
13
+ # @todo Remove Titles.fetch in v2.0
14
+ Window.fetch_title application
16
15
  end
17
-
18
- # @since 1.0.0-beta4
19
- class WindowGrabber
20
- #
21
- # Returns a list of available window titles for the given application (process) name.
22
- #
23
- def available_windows_for(application)
24
- raise NotImplementedError, 'Only Microsoft Windows (gdigrab) supports window capture.' unless OS.windows?
25
-
26
- titles = `tasklist /v /fi "imagename eq #{application}.exe" /fo list | findstr Window`
27
- .split("\n")
28
- .map { |i| i.gsub(FILTERED_TITLES, '') }
29
- .reject(&:empty?)
30
- raise Errors::ApplicationNotFound, "No open windows found for: #{application}.exe" if titles.empty?
31
-
32
- warn_on_mismatch(titles, application)
33
- titles
34
- end
35
-
36
- private
37
-
38
- #
39
- # Prints a warning if the retrieved list of window titles does no include
40
- # the given application process name, which applications commonly do.
41
- #
42
- def warn_on_mismatch(titles, application)
43
- return if titles.map(&:downcase).join(',').include? application.to_s
44
-
45
- ScreenRecorder.logger.warn "Process name and window title(s) do not match: #{titles}"
46
- ScreenRecorder.logger.warn 'Please manually provide the displayed window title.'
47
- end
48
- end # class WindowGrabber
49
16
  end # module Windows
50
17
  end # module FFMPEG
@@ -1,5 +1,7 @@
1
1
  module ScreenRecorder
2
2
  # @since 1.0.0.beta10
3
+ #
4
+ # @api private
3
5
  module TypeChecker
4
6
  #
5
7
  # Compares the given object's type (class) to the desired object type.
@@ -1,3 +1,3 @@
1
1
  module ScreenRecorder
2
- VERSION = '1.1.0'.freeze
2
+ VERSION = '1.5.0'.freeze
3
3
  end
@@ -3,21 +3,57 @@ module ScreenRecorder
3
3
  # @since 1.0.0-beta11
4
4
  class Window < Common
5
5
  #
6
- # Window recording specific initializer.
6
+ # Window recording mode.
7
7
  #
8
8
  def initialize(title:, output:, advanced: {})
9
- raise NotImplementedError, 'Window recording is only supported on Microsoft Windows.' unless OS.windows?
9
+ raise 'Window recording is only supported on Microsoft Windows.' unless OS.windows?
10
10
 
11
- super(input: format_input(title), output: output, advanced: advanced)
11
+ super(input: %("title=#{title}"), output: output, advanced: advanced)
12
12
  end
13
13
 
14
- private
14
+ class << self
15
+ #
16
+ # Returns a list of available window titles for the given process (application) name.
17
+ #
18
+ # @return [Array]
19
+ #
20
+ # @example
21
+ # ScreenRecorder::Window.fetch_title('chrome')
22
+ # #=> ["New Tab - Google Chrome"]
23
+ def fetch_title(process_name)
24
+ ScreenRecorder.logger.debug "Retrieving window title from '#{process_name}'"
25
+ window_title_for process_name
26
+ end
15
27
 
16
- #
17
- # Sets input syntax specific to the FFmpeg window recorder.
18
- #
19
- def format_input(title)
20
- %("title=#{title}")
28
+ private
29
+
30
+ # Regex to filter out "Window Title: N/A" from Chrome extensions and "Window Title: ".
31
+ # This is done to remove unusable titles and to match the Ffmpeg expected input format
32
+ # for capturing specific windows.
33
+ # For example, "Window Title: Google - Mozilla Firefox" becomes "Google - Mozilla Firefox".
34
+ FILTERED_TITLES = %r{^Window Title:( N/A|\s+)?}.freeze
35
+
36
+ def window_title_for(process_name)
37
+ raise NotImplementedError, 'Only Microsoft Windows (gdigrab) supports window capture.' unless OS.windows?
38
+
39
+ titles = `tasklist /v /fi "imagename eq #{process_name}.exe" /fo list | findstr Window`
40
+ .split("\n")
41
+ .map { |i| i.gsub(FILTERED_TITLES, '') }
42
+ .reject(&:empty?)
43
+ raise Errors::ApplicationNotFound, "No open windows found for: #{process_name}.exe" if titles.empty?
44
+
45
+ warn_on_mismatch(titles, process_name)
46
+ ScreenRecorder.logger.debug "Retrieved titles: #{titles}"
47
+
48
+ titles
49
+ end
50
+
51
+ def warn_on_mismatch(titles, process_name)
52
+ return if titles.map(&:downcase).join(',').include? process_name.to_s
53
+
54
+ ScreenRecorder.logger.warn "Process name and window title(s) do not match: #{titles}"
55
+ ScreenRecorder.logger.warn 'Please manually provide the displayed window title.'
56
+ end
21
57
  end
22
58
  end
23
59
  end
@@ -9,13 +9,15 @@ Gem::Specification.new do |spec|
9
9
  spec.authors = ['Lakshya Kapoor']
10
10
  spec.email = ['kapoorlakshya@gmail.com']
11
11
  spec.homepage = 'http://github.com/kapoorlakshya/screen-recorder'
12
- spec.summary = 'Video record your computer screen using FFmpeg via Ruby.'
13
- spec.description = 'Video record your computer screen - desktop or specific window - using FFmpeg via Ruby on Windows, Linux, and macOS.'
12
+ spec.summary = 'Video record and take screenshots your computer screen using FFmpeg.'
13
+ spec.description = 'A Ruby gem to video record and take screenshots of your desktop or ' \
14
+ ' specific application window. Works on Windows, Linux, and macOS.'
14
15
  spec.license = 'MIT'
15
- # noinspection RubyStringKeysInHashInspection,RubyStringKeysInHashInspection,RubyStringKeysInHashInspection
16
+ # noinspection RubyStringKeysInHashInspection
16
17
  spec.metadata = {
17
- 'changelog_uri' => 'https://github.com/kapoorlakshya/screen-recorder/blob/master/CHANGES.md',
18
- 'source_code_uri' => 'https://github.com/kapoorlakshya/screen-recorder/',
18
+ 'changelog_uri' => 'https://github.com/kapoorlakshya/screen-recorder/blob/master/CHANGELOG.md',
19
+ 'source_code_uri' => "https://github.com/kapoorlakshya/screen-recorder/tree/v#{ScreenRecorder::VERSION}",
20
+ 'documentation_uri' => "https://www.rubydoc.info/gems/screen-recorder/#{ScreenRecorder::VERSION}",
19
21
  'bug_tracker_uri' => 'https://github.com/kapoorlakshya/screen-recorder/issues',
20
22
  'wiki_uri' => 'https://github.com/kapoorlakshya/screen-recorder/wiki'
21
23
  }
@@ -26,15 +28,17 @@ Gem::Specification.new do |spec|
26
28
 
27
29
  spec.require_paths = ['lib']
28
30
 
29
- spec.add_development_dependency 'rake', '~> 12.0'
31
+ spec.add_development_dependency 'ffi' # For selenium-webdriver on Windows
32
+ spec.add_development_dependency 'rake', '>= 12.0'
30
33
  spec.add_development_dependency 'rspec', '~> 3.0'
31
- spec.add_development_dependency 'rubocop', '~> 0.59'
32
- spec.add_development_dependency 'rubocop-performance', '~> 1.1.0'
33
- spec.add_development_dependency 'rubocop-rspec', '~> 1.32'
34
+ spec.add_development_dependency 'rubocop', '~> 0.75'
35
+ spec.add_development_dependency 'rubocop-performance', '~> 1.0'
36
+ spec.add_development_dependency 'rubocop-rspec', '~> 1.0'
34
37
  spec.add_development_dependency 'simplecov', '~> 0.16'
35
38
  spec.add_development_dependency 'watir', '~> 6.0'
36
- spec.add_development_dependency 'webdrivers', '~> 3.0'
39
+ spec.add_development_dependency 'webdrivers', '~> 4.0'
37
40
 
38
- spec.add_runtime_dependency 'os', '~> 1.0.0'
41
+ spec.add_runtime_dependency 'childprocess', '>= 1.0', '< 4.0' # Roughly match Selenium
42
+ spec.add_runtime_dependency 'os', '~> 1.0'
39
43
  spec.add_runtime_dependency 'streamio-ffmpeg', '~> 3.0'
40
- end
44
+ end
metadata CHANGED
@@ -1,27 +1,41 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: screen-recorder
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.0
4
+ version: 1.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Lakshya Kapoor
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-04-14 00:00:00.000000000 Z
11
+ date: 2021-03-24 00:00:00.000000000 Z
12
12
  dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: ffi
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
13
27
  - !ruby/object:Gem::Dependency
14
28
  name: rake
15
29
  requirement: !ruby/object:Gem::Requirement
16
30
  requirements:
17
- - - "~>"
31
+ - - ">="
18
32
  - !ruby/object:Gem::Version
19
33
  version: '12.0'
20
34
  type: :development
21
35
  prerelease: false
22
36
  version_requirements: !ruby/object:Gem::Requirement
23
37
  requirements:
24
- - - "~>"
38
+ - - ">="
25
39
  - !ruby/object:Gem::Version
26
40
  version: '12.0'
27
41
  - !ruby/object:Gem::Dependency
@@ -44,42 +58,42 @@ dependencies:
44
58
  requirements:
45
59
  - - "~>"
46
60
  - !ruby/object:Gem::Version
47
- version: '0.59'
61
+ version: '0.75'
48
62
  type: :development
49
63
  prerelease: false
50
64
  version_requirements: !ruby/object:Gem::Requirement
51
65
  requirements:
52
66
  - - "~>"
53
67
  - !ruby/object:Gem::Version
54
- version: '0.59'
68
+ version: '0.75'
55
69
  - !ruby/object:Gem::Dependency
56
70
  name: rubocop-performance
57
71
  requirement: !ruby/object:Gem::Requirement
58
72
  requirements:
59
73
  - - "~>"
60
74
  - !ruby/object:Gem::Version
61
- version: 1.1.0
75
+ version: '1.0'
62
76
  type: :development
63
77
  prerelease: false
64
78
  version_requirements: !ruby/object:Gem::Requirement
65
79
  requirements:
66
80
  - - "~>"
67
81
  - !ruby/object:Gem::Version
68
- version: 1.1.0
82
+ version: '1.0'
69
83
  - !ruby/object:Gem::Dependency
70
84
  name: rubocop-rspec
71
85
  requirement: !ruby/object:Gem::Requirement
72
86
  requirements:
73
87
  - - "~>"
74
88
  - !ruby/object:Gem::Version
75
- version: '1.32'
89
+ version: '1.0'
76
90
  type: :development
77
91
  prerelease: false
78
92
  version_requirements: !ruby/object:Gem::Requirement
79
93
  requirements:
80
94
  - - "~>"
81
95
  - !ruby/object:Gem::Version
82
- version: '1.32'
96
+ version: '1.0'
83
97
  - !ruby/object:Gem::Dependency
84
98
  name: simplecov
85
99
  requirement: !ruby/object:Gem::Requirement
@@ -114,28 +128,48 @@ dependencies:
114
128
  requirements:
115
129
  - - "~>"
116
130
  - !ruby/object:Gem::Version
117
- version: '3.0'
131
+ version: '4.0'
118
132
  type: :development
119
133
  prerelease: false
120
134
  version_requirements: !ruby/object:Gem::Requirement
121
135
  requirements:
122
136
  - - "~>"
123
137
  - !ruby/object:Gem::Version
124
- version: '3.0'
138
+ version: '4.0'
139
+ - !ruby/object:Gem::Dependency
140
+ name: childprocess
141
+ requirement: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - ">="
144
+ - !ruby/object:Gem::Version
145
+ version: '1.0'
146
+ - - "<"
147
+ - !ruby/object:Gem::Version
148
+ version: '4.0'
149
+ type: :runtime
150
+ prerelease: false
151
+ version_requirements: !ruby/object:Gem::Requirement
152
+ requirements:
153
+ - - ">="
154
+ - !ruby/object:Gem::Version
155
+ version: '1.0'
156
+ - - "<"
157
+ - !ruby/object:Gem::Version
158
+ version: '4.0'
125
159
  - !ruby/object:Gem::Dependency
126
160
  name: os
127
161
  requirement: !ruby/object:Gem::Requirement
128
162
  requirements:
129
163
  - - "~>"
130
164
  - !ruby/object:Gem::Version
131
- version: 1.0.0
165
+ version: '1.0'
132
166
  type: :runtime
133
167
  prerelease: false
134
168
  version_requirements: !ruby/object:Gem::Requirement
135
169
  requirements:
136
170
  - - "~>"
137
171
  - !ruby/object:Gem::Version
138
- version: 1.0.0
172
+ version: '1.0'
139
173
  - !ruby/object:Gem::Dependency
140
174
  name: streamio-ffmpeg
141
175
  requirement: !ruby/object:Gem::Requirement
@@ -150,8 +184,8 @@ dependencies:
150
184
  - - "~>"
151
185
  - !ruby/object:Gem::Version
152
186
  version: '3.0'
153
- description: Video record your computer screen - desktop or specific window - using
154
- FFmpeg via Ruby on Windows, Linux, and macOS.
187
+ description: A Ruby gem to video record and take screenshots of your desktop or specific
188
+ application window. Works on Windows, Linux, and macOS.
155
189
  email:
156
190
  - kapoorlakshya@gmail.com
157
191
  executables: []
@@ -159,11 +193,11 @@ extensions: []
159
193
  extra_rdoc_files: []
160
194
  files:
161
195
  - ".github/ISSUE_TEMPLATE.md"
196
+ - ".github/workflows/tests.yml"
162
197
  - ".gitignore"
163
198
  - ".rspec"
164
199
  - ".rubocop.yml"
165
- - ".travis.yml"
166
- - CHANGES.md
200
+ - CHANGELOG.md
167
201
  - Gemfile
168
202
  - LICENSE.txt
169
203
  - README.md
@@ -184,8 +218,9 @@ homepage: http://github.com/kapoorlakshya/screen-recorder
184
218
  licenses:
185
219
  - MIT
186
220
  metadata:
187
- changelog_uri: https://github.com/kapoorlakshya/screen-recorder/blob/master/CHANGES.md
188
- source_code_uri: https://github.com/kapoorlakshya/screen-recorder/
221
+ changelog_uri: https://github.com/kapoorlakshya/screen-recorder/blob/master/CHANGELOG.md
222
+ source_code_uri: https://github.com/kapoorlakshya/screen-recorder/tree/v1.5.0
223
+ documentation_uri: https://www.rubydoc.info/gems/screen-recorder/1.5.0
189
224
  bug_tracker_uri: https://github.com/kapoorlakshya/screen-recorder/issues
190
225
  wiki_uri: https://github.com/kapoorlakshya/screen-recorder/wiki
191
226
  post_install_message:
@@ -203,9 +238,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
203
238
  - !ruby/object:Gem::Version
204
239
  version: '0'
205
240
  requirements: []
206
- rubyforge_project:
207
- rubygems_version: 2.7.6
241
+ rubygems_version: 3.1.4
208
242
  signing_key:
209
243
  specification_version: 4
210
- summary: Video record your computer screen using FFmpeg via Ruby.
244
+ summary: Video record and take screenshots your computer screen using FFmpeg.
211
245
  test_files: []
data/.travis.yml DELETED
@@ -1,35 +0,0 @@
1
- ---
2
- os:
3
- - linux
4
- - osx
5
- dist: xenial
6
- language: ruby
7
- cache: bundler
8
-
9
- branches:
10
- only:
11
- - /.*/
12
-
13
- rvm:
14
- - 2.3.8
15
- - 2.4.5
16
- - 2.5.5
17
- - 2.6.2
18
-
19
- env:
20
- - DISPLAY=":0"
21
-
22
- addons:
23
- firefox: latest
24
- apt:
25
- packages:
26
- - ffmpeg
27
- homebrew:
28
- packages:
29
- - ffmpeg
30
-
31
- before_install:
32
- - gem update --system --no-document
33
-
34
- before_script:
35
- - nohup Xvfb :0 -screen 0 1024x768x24 &