capa 0.1.4 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/bin/capa +3 -0
- data/lib/capa.rb +25 -4
- data/lib/capa/emulator_recorder.rb +8 -4
- data/lib/capa/helper.rb +0 -1
- data/lib/capa/recorder_factory.rb +34 -0
- data/lib/capa/simulator_recorder.rb +11 -5
- data/lib/capa/version.rb +1 -1
- metadata +4 -5
- data/bin/capa-android +0 -19
- data/bin/capa-ios +0 -20
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a5774c2dc81775fcb01070ec5f107ee6d6619c8820a877b0c55dd6509d1266f9
|
4
|
+
data.tar.gz: 70cedf1db2030087a9bc1e2100a1aa0e817fdf3b66c8f5028645441f86cf2515
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5f2f11dee1c55172dc0ac094d97dd1ead53ef5b8185435b9174a984f0b812ef9eb98bb3e40988281d42d5c508ce1de3243af0966df4e01f9b6e1c2888c668fc1
|
7
|
+
data.tar.gz: 909ceb3236834024a08f0e16daddb59df46499e83bdd8a728f0d44fd4ad3b192fcd0c6af64e5b628d1d2e384baddc81422d3b40edc933c8357fbc3926dea3ab2
|
data/bin/capa
ADDED
data/lib/capa.rb
CHANGED
@@ -13,15 +13,18 @@ options = {}
|
|
13
13
|
|
14
14
|
# Set up the options you are looking for
|
15
15
|
optparse = OptionParser.new do |opts|
|
16
|
-
explanation = ">
|
17
|
-
> The command #{"$ capa-android".bold} will generate a video and a GIF from the Android Emulator .\n\n"
|
16
|
+
explanation = "> #{"$ capa".bold} will generate a video and a GIF from the iOS Simulator or the Android Emulator. #{"capa".bold} will try to infer the platform. Alternatively you can select which platform you wish to record in.\n\n"
|
18
17
|
usage = "Usage: #{$0} [options]".bold
|
19
18
|
opts.banner = "#{explanation} #{usage}"
|
20
19
|
|
21
|
-
opts.on( '-o', '--output NAME', "Output filename. Defaults to
|
20
|
+
opts.on( '-o', '--output NAME', "Output filename. Defaults to #{"recording".italic}" ) do |o|
|
22
21
|
options[:output] = o
|
23
22
|
end
|
24
23
|
|
24
|
+
opts.on( '-p', '--platform NAME', "Available platforms: #{"ios".italic} and #{"android".italic}" ) do |o|
|
25
|
+
options[:platform] = o
|
26
|
+
end
|
27
|
+
|
25
28
|
opts.on("-v", "--version", "Display version") do
|
26
29
|
puts Capa::VERSION
|
27
30
|
exit
|
@@ -36,4 +39,22 @@ end
|
|
36
39
|
# The parse! method also removes any options it finds from ARGV.
|
37
40
|
optparse.parse!
|
38
41
|
|
39
|
-
|
42
|
+
video_filename = "#{options[:output] || 'recording'}.mp4"
|
43
|
+
|
44
|
+
recorder_factory = RecorderFactory.new(filename: video_filename)
|
45
|
+
platform = platform = options[:platform] || recorder_factory.infer_platform
|
46
|
+
recorder = recorder_factory.create(from_platform: platform)
|
47
|
+
|
48
|
+
abort("Please choose a platform. Help: #{$0} -h") if recorder.nil?
|
49
|
+
|
50
|
+
generator = GIFGenerator.new(input_video: video_filename, output_gif: "#{video_filename}.gif")
|
51
|
+
|
52
|
+
begin
|
53
|
+
recorder.record
|
54
|
+
rescue Capa::UserAbort
|
55
|
+
puts 'Exiting...'
|
56
|
+
recorder.cancel
|
57
|
+
exit
|
58
|
+
end
|
59
|
+
|
60
|
+
generator.generate
|
@@ -1,7 +1,8 @@
|
|
1
1
|
require_relative 'string'
|
2
2
|
require_relative 'helper'
|
3
|
+
require_relative 'recorder_factory'
|
3
4
|
|
4
|
-
class EmulatorRecorder
|
5
|
+
class EmulatorRecorder < Recorder
|
5
6
|
def initialize(filename: '')
|
6
7
|
abort('Please provide a name for the video') if filename.blank?
|
7
8
|
@filename = filename
|
@@ -23,25 +24,28 @@ class EmulatorRecorder
|
|
23
24
|
"Tip: Galaxy Nexus works great!") if /err=-38/ =~ message
|
24
25
|
end
|
25
26
|
|
26
|
-
puts 'Capturing video... Press ENTER to save'
|
27
|
+
puts 'Capturing video from the Android Emulator... Press ENTER to save'
|
27
28
|
p = gets.chomp
|
28
29
|
`adb shell killall -SIGINT screenrecord`
|
29
30
|
sleep 0.5
|
30
31
|
pull_video_from_emulator
|
31
32
|
end
|
32
33
|
|
34
|
+
def cancel
|
35
|
+
`adb shell killall screenrecord`
|
36
|
+
end
|
37
|
+
|
33
38
|
def pull_video_from_emulator
|
34
39
|
# We can specify the device, in case there is more than one connected: -s emulator-5554
|
35
40
|
puts `adb pull #{emulator_video_path}`
|
36
41
|
end
|
37
42
|
|
38
|
-
private
|
39
|
-
|
40
43
|
def emulator_video_path
|
41
44
|
"/sdcard/#{@filename}"
|
42
45
|
end
|
43
46
|
|
44
47
|
def can_record?
|
48
|
+
return false if command?('adb') == false
|
45
49
|
# Example response
|
46
50
|
#
|
47
51
|
# "List of devices attached\n
|
data/lib/capa/helper.rb
CHANGED
@@ -0,0 +1,34 @@
|
|
1
|
+
class RecorderFactory
|
2
|
+
def initialize(filename: '')
|
3
|
+
@recorders = {
|
4
|
+
'ios' => SimulatorRecorder.new(filename: filename),
|
5
|
+
'android' => EmulatorRecorder.new(filename: filename)
|
6
|
+
}
|
7
|
+
end
|
8
|
+
|
9
|
+
def infer_platform
|
10
|
+
available_platforms = @recorders
|
11
|
+
.select { |key, recorder| recorder.can_record? }
|
12
|
+
.map { |key, recorder| key }
|
13
|
+
|
14
|
+
return available_platforms.first if available_platforms.count == 1
|
15
|
+
end
|
16
|
+
|
17
|
+
def create(from_platform: '')
|
18
|
+
@recorders[from_platform] unless from_platform.nil?
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
class Recorder
|
23
|
+
def record
|
24
|
+
raise 'not implemented'
|
25
|
+
end
|
26
|
+
|
27
|
+
def cancel
|
28
|
+
raise 'not implemented'
|
29
|
+
end
|
30
|
+
|
31
|
+
def can_record?
|
32
|
+
raise 'not implemented'
|
33
|
+
end
|
34
|
+
end
|
@@ -1,13 +1,14 @@
|
|
1
1
|
require_relative 'string'
|
2
|
+
require_relative 'recorder_factory'
|
2
3
|
|
3
|
-
class SimulatorRecorder
|
4
|
+
class SimulatorRecorder < Recorder
|
4
5
|
def initialize(filename: '')
|
5
6
|
abort('Please provide a name for the video') if filename.blank?
|
6
7
|
@filename = filename
|
7
8
|
end
|
8
9
|
|
9
10
|
def record
|
10
|
-
abort unless can_record?
|
11
|
+
abort("You need to open the iOS Simulator") unless can_record?
|
11
12
|
|
12
13
|
Signal.trap("SIGINT") { raise Capa::UserAbort }
|
13
14
|
Signal.trap("SIGTSTP") { raise Capa::UserAbort }
|
@@ -16,16 +17,21 @@ class SimulatorRecorder
|
|
16
17
|
`xcrun simctl io booted recordVideo #{@filename}`
|
17
18
|
end
|
18
19
|
|
19
|
-
puts 'Capturing video... Press ENTER to save'
|
20
|
+
puts 'Capturing video from the iOS Simulator... Press ENTER to save'
|
20
21
|
p = gets.chomp
|
21
22
|
`killall -SIGINT simctl`
|
22
23
|
end
|
23
24
|
|
24
|
-
|
25
|
+
def cancel
|
26
|
+
if system('pgrep simctl > /dev/null')
|
27
|
+
`killall simctl`
|
28
|
+
end
|
29
|
+
end
|
25
30
|
|
26
31
|
def can_record?
|
32
|
+
return false if command?('xcrun') == false
|
27
33
|
# Will output 'No devices are booted.' if Simulator.app is closed
|
28
|
-
`xcrun simctl io booted enumerate`
|
34
|
+
`xcrun simctl io booted enumerate > /dev/null 2>&1`
|
29
35
|
$?.exitstatus == 0
|
30
36
|
end
|
31
37
|
end
|
data/lib/capa/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: capa
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Alex Salom
|
@@ -14,17 +14,16 @@ description: capa can record animated GIFs (and videos) from the iOS Simulator a
|
|
14
14
|
the Android Emulator because a GIF is worth a thousand lines of code.
|
15
15
|
email: alex.salom@gmail.com
|
16
16
|
executables:
|
17
|
-
- capa
|
18
|
-
- capa-android
|
17
|
+
- capa
|
19
18
|
extensions: []
|
20
19
|
extra_rdoc_files: []
|
21
20
|
files:
|
22
|
-
- bin/capa
|
23
|
-
- bin/capa-ios
|
21
|
+
- bin/capa
|
24
22
|
- lib/capa.rb
|
25
23
|
- lib/capa/emulator_recorder.rb
|
26
24
|
- lib/capa/gif_generator.rb
|
27
25
|
- lib/capa/helper.rb
|
26
|
+
- lib/capa/recorder_factory.rb
|
28
27
|
- lib/capa/simulator_recorder.rb
|
29
28
|
- lib/capa/string.rb
|
30
29
|
- lib/capa/version.rb
|
data/bin/capa-android
DELETED
@@ -1,19 +0,0 @@
|
|
1
|
-
#!/usr/bin/env ruby
|
2
|
-
|
3
|
-
require_relative '../lib/capa'
|
4
|
-
|
5
|
-
abort('Please install adb https://developer.android.com/studio/') unless command?('adb')
|
6
|
-
abort('Please install gifify: https://github.com/vvo/gifify') unless command?('gifify')
|
7
|
-
|
8
|
-
recorder = EmulatorRecorder.new(filename: @video_filename)
|
9
|
-
generator = GIFGenerator.new(input_video: @video_filename, output_gif: "#{@video_filename}.gif")
|
10
|
-
|
11
|
-
begin
|
12
|
-
recorder.record
|
13
|
-
rescue Capa::UserAbort
|
14
|
-
puts 'Exiting...'
|
15
|
-
`adb shell killall screenrecord`
|
16
|
-
exit
|
17
|
-
end
|
18
|
-
|
19
|
-
generator.generate
|
data/bin/capa-ios
DELETED
@@ -1,20 +0,0 @@
|
|
1
|
-
#!/usr/bin/env ruby
|
2
|
-
|
3
|
-
require_relative '../lib/capa'
|
4
|
-
|
5
|
-
abort('Please install gifify: https://github.com/vvo/gifify') unless command?('gifify')
|
6
|
-
|
7
|
-
recorder = SimulatorRecorder.new(filename: @video_filename)
|
8
|
-
generator = GIFGenerator.new(input_video: @video_filename, output_gif: "#{@video_filename}.gif")
|
9
|
-
|
10
|
-
begin
|
11
|
-
recorder.record
|
12
|
-
rescue Capa::UserAbort
|
13
|
-
puts 'Exiting...'
|
14
|
-
if system('pgrep simctl > /dev/null')
|
15
|
-
`killall simctl`
|
16
|
-
end
|
17
|
-
exit
|
18
|
-
end
|
19
|
-
|
20
|
-
generator.generate
|