lolcommits 0.13.1 → 0.14.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 (43) hide show
  1. checksums.yaml +5 -5
  2. data/.rubocop.yml +1 -0
  3. data/.rubocop_todo.yml +3 -3
  4. data/CHANGELOG.md +18 -7
  5. data/Gemfile +2 -0
  6. data/README.md +101 -76
  7. data/Rakefile +3 -1
  8. data/bin/console +1 -0
  9. data/bin/lolcommits +37 -32
  10. data/config/cucumber.yml +1 -1
  11. data/features/bugs.feature +2 -2
  12. data/features/lolcommits.feature +42 -17
  13. data/features/step_definitions/lolcommits_steps.rb +7 -3
  14. data/lib/lolcommits/animated_gif.rb +77 -0
  15. data/lib/lolcommits/backends/git_info.rb +15 -11
  16. data/lib/lolcommits/backends/installation_git.rb +4 -3
  17. data/lib/lolcommits/backends/installation_mercurial.rb +1 -1
  18. data/lib/lolcommits/backends/mercurial_info.rb +13 -9
  19. data/lib/lolcommits/capturer.rb +14 -6
  20. data/lib/lolcommits/capturer/capture_cygwin.rb +3 -14
  21. data/lib/lolcommits/capturer/capture_fake.rb +8 -2
  22. data/lib/lolcommits/capturer/capture_linux.rb +11 -10
  23. data/lib/lolcommits/capturer/capture_linux_video.rb +15 -0
  24. data/lib/lolcommits/capturer/capture_mac.rb +6 -11
  25. data/lib/lolcommits/capturer/capture_mac_video.rb +23 -0
  26. data/lib/lolcommits/capturer/capture_windows.rb +14 -9
  27. data/lib/lolcommits/capturer/capture_windows_video.rb +46 -0
  28. data/lib/lolcommits/cli/fatals.rb +1 -1
  29. data/lib/lolcommits/cli/launcher.rb +1 -1
  30. data/lib/lolcommits/cli/timelapse_gif.rb +28 -12
  31. data/lib/lolcommits/configuration.rb +4 -26
  32. data/lib/lolcommits/platform.rb +4 -4
  33. data/lib/lolcommits/plugin/base.rb +2 -2
  34. data/lib/lolcommits/plugin/configuration_helper.rb +1 -1
  35. data/lib/lolcommits/runner.rb +138 -69
  36. data/lib/lolcommits/version.rb +2 -2
  37. data/lolcommits.gemspec +4 -2
  38. data/test/assets/test_image.jpg +0 -0
  39. data/test/assets/test_video.mp4 +0 -0
  40. metadata +12 -9
  41. data/lib/lolcommits/capturer/capture_linux_animated.rb +0 -74
  42. data/lib/lolcommits/capturer/capture_mac_animated.rb +0 -75
  43. data/lib/lolcommits/capturer/capture_windows_animated.rb +0 -110
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 3eb952160c813f290a4ca2520f22424fdc6b9994
4
- data.tar.gz: a06c38ab8276d5534f8977f9c654b901e27bcc55
2
+ SHA256:
3
+ metadata.gz: 4225dde2c474dff419dbeb58619e1d9358af4862997e51726e6a9c0f0841bfc8
4
+ data.tar.gz: 9d09ffafba3cf5d9c50004c7106f272cbc54816c9b9e46be37bc94b548da20da
5
5
  SHA512:
6
- metadata.gz: 7be7a56b902295d3cc0a91529820c8fabeb61df08cecc82ca1ea07e3b4ac5937260d14dc99b7152add0b7e25aaa55782ed0ccb730f0caeef5bc841c3a6338649
7
- data.tar.gz: b2d241f9df3c63c13035725659b2946645c5e2b2beb06da46e26118d335a8c8133fd33787a22131ed2db19e974adad2738f510be512a364c7ba10fe80e6fc299
6
+ metadata.gz: f0c21b9d900549127a694a640d088e4a7c6c24bd84b1a791481b13234cd54efc5f96f45fcde31a3360b95573f2c654866e2dc071f1005c107283e1b8069d30a3
7
+ data.tar.gz: c4fb82801d5ed3b145fd55b007f065a7b4d8d53ff5c231aa4b45dbe3d7b7c18a03e4775357bbcd4a27f3d2ee76e5fd3753a5e4260d88b5b675f9e668a75436c3
@@ -3,6 +3,7 @@ AllCops:
3
3
  - 'vendor/bundle/**/*'
4
4
  - 'vendor/bundle/**/.*'
5
5
  - '.bundle/**/*'
6
+ - 'bin/lolcommits'
6
7
 
7
8
  Metrics/BlockLength:
8
9
  Exclude:
@@ -39,11 +39,11 @@ Metrics/BlockLength:
39
39
  # Offense count: 2
40
40
  # Configuration parameters: CountComments.
41
41
  Metrics/ClassLength:
42
- Max: 140
42
+ Max: 150
43
43
 
44
44
  # Offense count: 5
45
45
  Metrics/CyclomaticComplexity:
46
- Max: 9
46
+ Max: 10
47
47
 
48
48
  # Offense count: 23
49
49
  # Configuration parameters: CountComments.
@@ -94,4 +94,4 @@ Style/SymbolArray:
94
94
  # Configuration parameters: AllowHeredoc, AllowURI, URISchemes, IgnoreCopDirectives, IgnoredPatterns.
95
95
  # URISchemes: http, https
96
96
  Metrics/LineLength:
97
- Max: 161
97
+ Max: 168
@@ -1,17 +1,25 @@
1
- ### Lolcommits Change Log
1
+ ### ChangeLog
2
2
 
3
- All notable changes to this project will be documented in this file. This
4
- project adheres to [Semantic Versioning][Semver].
3
+ All notable changes to this project will be documented in this file.
4
+ This project adheres to [Semantic Versioning][Semver].
5
5
 
6
6
  ## [Unreleased]
7
7
 
8
8
  * Your contribution here!
9
9
 
10
+ ## [0.14.0][] (14 May 2019)
11
+ * `main_image` now deprecated, use `lolcommit_path` instead (@matthutchinson)
12
+ * make actual videos to make gifs from (@ruxton [#386][])
13
+ * improved tabs/spacing on git commit hook text (@matthutchinson)
14
+ * add video captures `-v {seconds}` and runner overlays (@matthutchinson [#392][])
15
+ * `Capturer` classes refactored and renamed (@matthutchinson)
16
+ * `AnimatedGif` class takes care of gif generating (@matthutchinson)
17
+
10
18
  ## [0.13.1][] (29 April 2019)
11
19
  * Update all links and badges (in gemspec, README etc.) to lolcommits
12
- organisation
13
- * remove gem `post_install` message
14
- * use `lolcommits-loltext ~> 0.1.0'
20
+ organisation (@matthutchinson)
21
+ * remove gem `post_install` message (@matthutchinson)
22
+ * use `lolcommits-loltext ~> 0.1.0' (@matthutchinson)
15
23
 
16
24
  ## [0.13.0][] (23 April 2019)
17
25
  * Require at least Ruby 2.3
@@ -342,7 +350,8 @@ project adheres to [Semantic Versioning][Semver].
342
350
  reliable to not glitch.)
343
351
 
344
352
  [Semver]: http://semver.org
345
- [Unreleased]: https://github.com/lolcommits/lolcommits/compare/v0.13.1...HEAD
353
+ [Unreleased]: https://github.com/lolcommits/lolcommits/compare/v0.14.0...HEAD
354
+ [0.14.0]: https://github.com/lolcommits/lolcommits/compare/v0.13.1...v0.14.0
346
355
  [0.13.1]: https://github.com/lolcommits/lolcommits/compare/v0.13.0...v0.13.1
347
356
  [0.13.0]: https://github.com/lolcommits/lolcommits/compare/v0.12.1...v0.13.0
348
357
  [0.12.1]: https://github.com/lolcommits/lolcommits/compare/v0.12.0...v0.12.1
@@ -537,3 +546,5 @@ project adheres to [Semantic Versioning][Semver].
537
546
  [#377]: https://github.com/lolcommits/lolcommits/pull/377
538
547
  [#384]: https://github.com/lolcommits/lolcommits/pull/384
539
548
  [#385]: https://github.com/lolcommits/lolcommits/pull/385
549
+ [#386]: https://github.com/lolcommits/lolcommits/pull/386
550
+ [#392]: https://github.com/lolcommits/lolcommits/pull/392
data/Gemfile CHANGED
@@ -1,2 +1,4 @@
1
+ # frozen_string_literal: true
2
+
1
3
  source 'https://rubygems.org'
2
4
  gemspec
data/README.md CHANGED
@@ -8,15 +8,17 @@
8
8
 
9
9
  > git-based selfies for software developers
10
10
 
11
- lolcommits takes a snapshot with your webcam every time you git commit code, and
12
- archives a lolcat style image with it. Git blame has never been so much fun.
11
+ lolcommits takes a snapshot with your webcam every time you git commit
12
+ code, and archives a lolcat style image with it. Git blame has never
13
+ been so much fun.
13
14
 
14
15
  By default, the lol images are stored by a Github style short SHA in a
15
16
  `~/.lolcommits` directory created for you.
16
17
 
17
18
  ## History
18
19
 
19
- Originally created by [@mroth] in 2011 as a joke project for [Hack && Tell], lolcommits has grown considerably since then, and is now
20
+ Originally created by [@mroth] in 2011 as a joke project for [Hack &&
21
+ Tell], lolcommits has grown considerably since then, and is now
20
22
  primarily maintained by [@matthutchinson].
21
23
 
22
24
  Thank you to all of the [contributors] throughout the years!
@@ -48,8 +50,8 @@ page on our wiki!
48
50
 
49
51
  ### macOS
50
52
 
51
- You'll need ImageMagick installed. [Homebrew](http://mxcl.github.com/homebrew/)
52
- makes this easy.
53
+ You'll need ImageMagick installed.
54
+ [Homebrew](http://mxcl.github.com/homebrew/) makes this easy.
53
55
 
54
56
  brew install imagemagick
55
57
 
@@ -57,11 +59,11 @@ Then install with:
57
59
 
58
60
  [sudo] gem install lolcommits
59
61
 
60
- If you're using RVM (or rbenv), you can/should probably omit the sudo, but the
61
- default macOS Ruby install usually requires it.
62
+ If you're using RVM (or rbenv), you can/should probably omit the sudo,
63
+ but the default macOS Ruby install usually requires it.
62
64
 
63
- Lolcommits v0.8.1 was the last release to support Ruby < 2.0. If you'd like to
64
- use older Rubies try:
65
+ Lolcommits v0.8.1 was the last release to support Ruby < 2.0. If you'd
66
+ like to use older Rubies try:
65
67
 
66
68
  [sudo] gem install lolcommits --version 0.8.1 # for Ruby 1.9
67
69
  [sudo] gem install lolcommits --version 0.7.0 # for Ruby 1.8
@@ -69,13 +71,13 @@ use older Rubies try:
69
71
 
70
72
  ### Linux
71
73
 
72
- Install these dependencies using your package manager of choice, for example in
73
- Ubuntu:
74
+ Install these dependencies using your package manager of choice, for
75
+ example in Ubuntu:
74
76
 
75
77
  sudo apt-get install mplayer imagemagick libmagickwand-dev
76
78
 
77
- For Ubuntu 14.04 or newer, you need to manually install ffmpeg since it no
78
- longer ships with the default Ubuntu sources ([downloads
79
+ For Ubuntu 14.04 or newer, you need to manually install ffmpeg since it
80
+ no longer ships with the default Ubuntu sources ([downloads
79
81
  here](http://ffmpeg.org/download.html)).
80
82
 
81
83
  Then install with:
@@ -98,108 +100,131 @@ Windows](https://github.com/lolcommits/lolcommits/wiki/Installing-on-Windows).
98
100
 
99
101
  ### Enabling and basic usage
100
102
 
101
- Within any git repository, simply run `lolcommits --enable`. From that point on,
102
- any git commit will automatically trigger a lolcommit capture! By default, all
103
- lolcommits are stored in `~/.lolcommits` and placed in a subdirectory by project
104
- name, with a filename matching the commit hash.
103
+ Within any git repository, simply run `lolcommits --enable`. From that
104
+ point on, any git commit will automatically trigger a lolcommit capture!
105
+ By default, all lolcommits are stored in `~/.lolcommits` and placed in a
106
+ subdirectory by project name, with a filename matching the commit hash.
105
107
 
106
108
  Follow [these
107
109
  steps](https://github.com/lolcommits/lolcommits/wiki/Enabling-Lolcommits-for-all-your-Git-Repositories)
108
110
  to enable lolcommits across all your repos; using `git init` and the
109
111
  `init.templatedir` setting.
110
112
 
111
- Don't worry about it too much, half the fun of lolcommits is forgetting it's
112
- installed!
113
+ Don't worry about it too much, half the fun of lolcommits is forgetting
114
+ it's installed!
113
115
 
114
116
 
115
117
  ### Other commands
116
118
 
117
- OK, if you insist... Since you know about `--enable`, common sense suggests
118
- there is also a repository specific `--disable`, hopefully you can guess what
119
- that does.
119
+ OK, if you insist... Since you know about `--enable`, common sense
120
+ suggests there is also a repository specific `--disable`, hopefully you
121
+ can guess what that does.
120
122
 
121
- Other handy common commands include `--last`, which will open for display your
122
- most recent lolcommit, or `--browse`, which pops open the directory containing
123
- all the lolcommit images for your current repository. You can always do `--help`
124
- for a full list of available commands.
123
+ Other handy common commands include `--last`, which will open for
124
+ display your most recent lolcommit, or `--browse`, which pops open the
125
+ directory containing all the lolcommit images for your current
126
+ repository. You can always do `--help` for a full list of available
127
+ commands.
125
128
 
126
- **NOTE**: Any extra arguments you pass with `--enable` are appended to the
127
- git post-hook capture command. For example;
129
+ **NOTE**: Any extra arguments you pass with `--enable` are appended to
130
+ the git post-hook capture command. For example;
128
131
 
129
132
  lolcommits --enable --delay 5 --animate 4 --fork
130
133
 
131
- Will configure capturing of an animated gif (4 secs) after a 5 sec delay in a
132
- forked process. See the section below for more capture configuration options.
134
+ Will configure capturing of an animated gif (4 secs) after a 5 sec delay
135
+ in a forked process. See the section below for more capture
136
+ configuration options.
133
137
 
134
138
 
135
139
  ### Capture configuration options
136
140
 
137
- lolcommits has some capture options for additional lulz. You can enable these
138
- via environment variables like so;
141
+ lolcommits has some capture options for additional lulz. You can enable
142
+ these via environment variables like so;
139
143
 
140
- * `LOLCOMMITS_DEVICE` set a webcam device - **except windows (non-animated) captures**
141
- * `LOLCOMMITS_ANIMATE` (in seconds) set time for capturing an animated gif -
144
+ * `LOLCOMMITS_DEVICE` set a webcam device - **except windows
145
+ (non-animated) captures**
146
+ * `LOLCOMMITS_VIDEO` (in seconds) set time for capturing a video -
142
147
  **requires ffmpeg**
143
- * `LOLCOMMITS_DELAY` (in seconds) set delay time before capturing (for slow
144
- webcams to warmup)
145
- * `LOLCOMMITS_FORK` fork lolcommit runner (capture command forks to a new
146
- process, speedily returning you to your terminal)
148
+ * `LOLCOMMITS_ANIMATE` (in seconds) set time for capturing an animated
149
+ gif - **requires ffmpeg**
150
+ * `LOLCOMMITS_DELAY` (in seconds) set delay time before capturing (for
151
+ slow webcams to warmup)
152
+ * `LOLCOMMITS_FORK` fork lolcommit runner (capture command forks to a
153
+ new process, speedily returning you to your terminal)
147
154
  * `LOLCOMMITS_STEALTH` disable all notification messages when capturing
148
- * `LOLCOMMITS_DIR` set the output directory used for all repositories (defaults
149
- to ~/.lolcommits)
150
- * `LOLCOMMITS_CAPTURE_DISABLED` disables lolcommit capturing in the commit hook
151
- (when set as 'true')
155
+ * `LOLCOMMITS_DIR` set the output directory used for all repositories
156
+ (defaults to ~/.lolcommits)
157
+ * `LOLCOMMITS_CAPTURE_DISABLED` disables lolcommit capturing in the
158
+ commit hook (when set as 'true')
152
159
 
153
-
154
- Or they can be set with arguments to the capture command (located in your
155
- repository's `.git/hooks/post-commit` file).
160
+ Or they can be set with arguments to the capture command (located in
161
+ your repository's `.git/hooks/post-commit` file).
156
162
 
157
163
  * `--device {name}` or `-d {name}`
164
+ * `--video {seconds}` or `-v {seconds}`
158
165
  * `--animate {seconds}` or `-a {seconds}`
159
166
  * `--delay {seconds}` or `-w {seconds}`
160
167
  * `--fork`
161
168
  * `--stealth`
162
169
 
163
- Use `lolcommits --devices` to list all attached video devices available for
164
- capturing.
165
-
166
- You can configure lolcommit text positions, font styles (type, size, color etc.)
167
- or add a transparent overlay to your images. Simply configure the default
168
- loltext plugin with this command:
170
+ You can configure lolcommit text positions, font styles (type, size,
171
+ color etc.) or add a transparent overlay to your images. Simply
172
+ configure the default loltext plugin with this command:
169
173
 
170
174
  lolcommits --config -p loltext
171
175
 
172
176
  To find out more about styling, read about the [loltext
173
177
  options](https://github.com/lolcommits/lolcommits/wiki/Configure-Commit-Capturing#loltext-options).
174
178
 
179
+ Use `lolcommits --devices` to list all attached video devices available
180
+ for capturing.
181
+
182
+ Finally, run `lolcommits --help` for details on all the available
183
+ arguments.
175
184
 
176
- ### Animated Gif Capturing
177
185
 
178
- Animated gifs can take a while to generate (depending on the number of seconds
179
- you capture and the capabilities of your machine).
180
- [ffmpeg](https://www.ffmpeg.org) is required and can be installed like so;
186
+ ### Videos
181
187
 
182
- * Linux - [follow this guide](https://www.ffmpeg.org/download.html#build-linux)
188
+ You can tell lolcommits to capture an mp4 video (instead of an image).
189
+ [ffmpeg](https://www.ffmpeg.org) is required and can be installed like
190
+ so;
191
+
192
+ * Linux - [follow this
193
+ guide](https://www.ffmpeg.org/download.html#build-linux)
183
194
  * macOS - `brew install ffmpeg`
184
- * Windows - [follow this guide](https://ffmpeg.org/download.html#build-windows)
195
+ * Windows - [follow this
196
+ guide](https://ffmpeg.org/download.html#build-windows)
197
+
198
+ To enable, use the `-v {seconds}` option or set the `LOLCOMMITS_VIDEO`
199
+ environment variable with the number of seconds to capture.
185
200
 
186
- To enable, just set the `LOLCOMMITS_ANIMATE` environment variable with the
187
- number of seconds to capture. If you find animated capturing takes too long, try
188
- setting `LOLCOMMITS_FORK=true`.
201
+
202
+ ### Animated Gifs
203
+
204
+ Animated gifs can take a while to generate (depending on the number of
205
+ seconds you capture and the capabilities of your machine).
206
+
207
+ To enable, use the `-a {seconds}` option or set the `LOLCOMMITS_ANIMATE`
208
+ environment variable with the number of seconds to capture. If you find
209
+ animated capturing takes too long, try setting `LOLCOMMITS_FORK=true`.
189
210
 
190
211
  ![Example animated lolcommit
191
- gif](http://cdn2.usa.bugleblogs.com/blogs/000/000/003/de0eb9aa695.gif "Example
192
- animated lolcommit gif")
212
+ gif](http://cdn2.usa.bugleblogs.com/blogs/000/000/003/de0eb9aa695.gif
213
+ "Example animated lolcommit gif")
214
+
215
+ **NOTE**: If both `LOLCOMMITS_ANIMATE` and `LOLCOMMITS_VIDEO` options are set, the
216
+ video duration takes precedence and is applied to both captures.
193
217
 
194
218
 
195
219
  ### Plugins
196
220
 
197
- A growing number of plugins are available, allowing you to transform or share
198
- your lolcommits with others. The default plugin simply appends your commit
199
- message and sha to the captured image. Others can post to Twitter, Tumblr (and
200
- other services), or even translate your commit messages to
201
- [lolspeak](http://www.urbandictionary.com/define.php?term=lolspeak). Check them
202
- out on our [plugins
221
+ A growing number of plugins are available, allowing you to transform or
222
+ share your lolcommits with others. The default plugin simply appends
223
+ your commit message and sha to the captured image. Others can post to
224
+ Twitter, Tumblr (and other services), or even translate your commit
225
+ messages to
226
+ [lolspeak](http://www.urbandictionary.com/define.php?term=lolspeak).
227
+ Check them out on our [plugins
203
228
  page](https://github.com/lolcommits/lolcommits/wiki/Configuring-Plugins).
204
229
 
205
230
  To list all installed plugins use:
@@ -214,8 +239,8 @@ Installed plugins can be easily enabled, configured or disabled with the
214
239
  lolcommits --config -p loltext
215
240
 
216
241
  Interested in developing your own plugin? Follow [this simple
217
- guide](https://github.com/lolcommits/lolcommits-sample_plugin#developing-your-own-plugin) at the
218
- Lolcommits Sample Plugin README.
242
+ guide](https://github.com/lolcommits/lolcommits-sample_plugin#developing-your-own-plugin)
243
+ at the Lolcommits Sample Plugin README.
219
244
 
220
245
 
221
246
  ## Timelapse
@@ -228,11 +253,12 @@ Watch your face decay while you program, with an animated timelapse gif!
228
253
 
229
254
  ## Troubles?
230
255
 
231
- Try our trouble-shooting [FAQ](https://github.com/lolcommits/lolcommits/wiki/FAQ), or
232
- take a read through our [wiki](https://github.com/lolcommits/lolcommits/wiki). If you
233
- think something is broken or missing, please raise a [Github
234
- issue](https://github.com/lolcommits/lolcommits/issues) (and please check if we
235
- haven't [already
256
+ Try our trouble-shooting
257
+ [FAQ](https://github.com/lolcommits/lolcommits/wiki/FAQ), or take a read
258
+ through our [wiki](https://github.com/lolcommits/lolcommits/wiki). If
259
+ you think something is broken or missing, please raise a [Github
260
+ issue](https://github.com/lolcommits/lolcommits/issues) (and please
261
+ check if we haven't [already
236
262
  addressed](https://github.com/lolcommits/lolcommits/issues?q=is%3Aissue+is%3Aclosed)
237
263
  it).
238
264
 
@@ -241,4 +267,3 @@ it).
241
267
 
242
268
  The program is available as open source under the terms of
243
269
  [LGPL-3](https://opensource.org/licenses/LGPL-3.0).
244
-
data/Rakefile CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'bundler'
2
4
  require 'rake/clean'
3
5
 
@@ -32,7 +34,7 @@ Rake::TestTask.new do |t|
32
34
  end
33
35
 
34
36
  Rake::FileUtilsExt.verbose(false)
35
- CUKE_RESULTS = 'results.html'.freeze
37
+ CUKE_RESULTS = 'results.html'
36
38
  CLEAN << CUKE_RESULTS
37
39
  Cucumber::Rake::Task.new(:features) do |t|
38
40
  optstr = "features --format html -o #{CUKE_RESULTS} --format progress -x"
@@ -1,4 +1,5 @@
1
1
  #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
2
3
 
3
4
  require 'bundler/setup'
4
5
  require 'lolcommits'
@@ -21,11 +21,11 @@ class App
21
21
  include Lolcommits::CLI
22
22
 
23
23
  description 'git-based selfies for software developers (https://lolcommits.github.io)'
24
- version Lolcommits::VERSION
24
+ version Lolcommits::VERSION
25
25
 
26
26
  main do
27
27
  # check for fatal conditions before execution
28
- Fatals.die_if_no_valid_ffmpeg_installed! if capture_animated?
28
+ Fatals.die_if_no_valid_ffmpeg_installed! if capture_duration.positive?
29
29
  Fatals.die_on_fatal_platform_conditions!
30
30
 
31
31
  if options.empty?
@@ -39,7 +39,9 @@ class App
39
39
  plugin_manager = PluginManager.init
40
40
  config = Configuration.new(plugin_manager, test_mode: options[:test])
41
41
 
42
- if options[:'show-config']
42
+ if options[:version]
43
+ puts Lolcommits::VERSION
44
+ elsif options[:'show-config']
43
45
  puts config
44
46
  elsif options[:plugins]
45
47
  config.list_plugins
@@ -59,14 +61,14 @@ class App
59
61
  end
60
62
 
61
63
  if options[:last]
62
- show_last_lolimage(config.loldir)
64
+ show_last_lolcommit(config.loldir)
63
65
  elsif options[:browse]
64
66
  Launcher.open_folder(config.loldir)
65
67
  elsif options[:timelapse]
66
- TimelapseGif.new(config).run(options[:period])
68
+ TimelapseGif.new(config.loldir).run(options[:period])
67
69
  elsif options[:config]
68
70
  config.do_configure!(options[:plugin])
69
- elsif options[:capture]
71
+ elsif options[:capture] || options[:video] || options[:animate]
70
72
  capture_lolcommit(config)
71
73
  end
72
74
  end
@@ -87,17 +89,19 @@ class App
87
89
  on('-l', '--last', 'view the most recent lolcommit')
88
90
  on('-b', '--browse', 'browse this repo\'s lolcommits')
89
91
 
90
- on('--timelapse', 'generate animated timelapse gif from captured images')
92
+ on('-t', '--timelapse', 'generate animated timelapse gif from captured images')
91
93
  on('--period {today}', 'period to use for the timelapse gif (today or all)')
92
94
 
93
95
  # optional capturing options
94
96
  on('--device {name}', 'device name to capture from (mac/linux only)')
95
- on('-a', '--animate {seconds}', 'enable animated gif captures with duration')
97
+ on('-a', '--animate {seconds}', 'animated gif capture with duration')
98
+ on('-v', '--video {seconds}', 'video capture with duration')
96
99
  on('-w', '--delay {seconds}', 'delay before taking a snapshot')
97
- on('--stealth', 'capture image in stealth mode (no output)')
98
- on('--fork', 'fork capturing process to the background')
99
100
  on('-s', '--sha {string}', 'pass commit sha manually (--test mode only)')
100
101
  on('-m', '--msg {string}', 'pass commit message manually (--test mode only)')
102
+ on('--stealth', 'capture image in stealth mode (no output)')
103
+ on('--fork', 'fork capturing process to the background')
104
+ on('--version', 'show current version info')
101
105
 
102
106
  #
103
107
  # No options specified, help the user out
@@ -117,37 +121,36 @@ class App
117
121
  'Specify a device with --device "{device name}" or set the LOLCOMMITS_DEVICE env variable'
118
122
  end
119
123
 
120
- def self.show_last_lolimage(loldir)
121
- lolimage = Dir.glob(File.join(loldir, '*.{jpg,gif}')).max_by { |f| File.mtime(f) }
124
+ def self.show_last_lolcommit(loldir)
125
+ lolimage = Dir.glob(File.join(loldir, '*.{jpg,mp4,gif}')).max_by { |f| File.mtime(f) }
122
126
 
123
127
  if lolimage.nil?
124
128
  warn 'No lolcommits have been captured for this repository yet.'
125
129
  exit 1
126
130
  end
127
- Launcher.open_image(lolimage)
128
- end
129
-
130
- def self.capture_device
131
- result = options[:device] || ENV['LOLCOMMITS_DEVICE'] || nil
132
- result ||= Dir.glob('/dev/video*').first if Platform.platform_linux?
133
- result
131
+ Launcher.open_file(lolimage)
134
132
  end
135
133
 
136
134
  def self.capture_lolcommit(config)
137
- should_we_fork = options[:fork] || ENV['LOLCOMMITS_FORK'] || false
135
+ should_fork = options[:fork] || ENV['LOLCOMMITS_FORK'] || false
138
136
  capture_stealth = options[:stealth] || ENV['LOLCOMMITS_STEALTH'] || false
137
+ capture_device = options[:device] || ENV['LOLCOMMITS_DEVICE'] || nil
139
138
  capture_delay = (options[:delay] || ENV['LOLCOMMITS_DELAY']).to_i
139
+ capture_gif = !(options[:animate] || ENV['LOLCOMMITS_ANIMATE']).nil?
140
+ capture_video = !(options[:video] || ENV['LOLCOMMITS_VIDEO']).nil?
140
141
 
141
142
  capture_options = {
142
143
  capture_delay: capture_delay,
143
144
  capture_stealth: capture_stealth,
144
145
  capture_device: capture_device,
145
- capture_animate: capture_animate,
146
+ capture_duration: capture_duration,
147
+ capture_gif: capture_gif,
148
+ capture_video: capture_video,
146
149
  config: config
147
150
  }
148
151
 
149
152
  process_runner = ProcessRunner.new(config)
150
- process_runner.fork_me?(should_we_fork) do
153
+ process_runner.fork_me?(should_fork) do
151
154
  if options[:test]
152
155
  info '*** Capturing in test mode.'
153
156
  capture_options.merge!(test_capture_options)
@@ -157,7 +160,7 @@ class App
157
160
  runner.run
158
161
 
159
162
  # automatically open the image in test mode
160
- Launcher.open_image(runner.main_image) if options[:test]
163
+ Launcher.open_file(runner.lolcommit_path) if options[:test]
161
164
  end
162
165
  end
163
166
 
@@ -170,17 +173,19 @@ class App
170
173
 
171
174
  # Duration for animated capturing
172
175
  #
173
- # If animation is enabled, returns an integer > 0 representing seconds.
174
- # Seconds will be 0 if no option set, meaning no animated capture will take
175
- # place.
176
+ # If video/animation is enabled, this returns an integer > 0 (seconds)
177
+ # Seconds will be 0 if no option set, meaning a regular image capture
178
+ # will take place. Video duration takes precedence if both options are
179
+ # set.
176
180
  #
177
181
  # @return [Integer]
178
- def self.capture_animate
179
- (options[:animate] || ENV['LOLCOMMITS_ANIMATE']).to_i
180
- end
181
-
182
- def self.capture_animated?
183
- capture_animate > 0
182
+ def self.capture_duration
183
+ (
184
+ options[:video] ||
185
+ ENV['LOLCOMMITS_VIDEO'] ||
186
+ options[:animate] ||
187
+ ENV['LOLCOMMITS_ANIMATE']
188
+ ).to_i
184
189
  end
185
190
 
186
191
  #