5 This release is a major overhaul aimed to fix the previous design flaws
6 and clean up the codebase. Note that 2.2.0 will break compatibility with
7 the earlier versions, see the summary of changes further below for the
8 details. For most users most of these changes are transparent but those
9 who have used clive for anything else than "clive URL" should read the
12 2.2.0 changes the license from ISC back to GPLv3.
14 The changes made to the core elements of the project in 2.2.0 are
15 reflecting the need to stabilize these seemingly ever-changing parts
16 of clive. The config file format which was last changed in 2.0.0 is one
17 of such parts. 2.2.0 tries to correct this by using Getopt::ArgvFile
18 which allows defining the command line options in the config file (example
19 further below). This should eliminate the need to remember confusing
20 config file variable names and ease the transition as new features are
23 2.2.0 makes some radical changes to the use of cache which was previously
24 enabled by default to reuse the video details if a video was re-extracted
25 again. With this release, clive no longer attempts to reuse the cache
26 details by default -- instead the users are expected to invoke the
29 The cache, while arguably useful in some cases, has turned out to be the
30 most controversial feature of clive. Majority of the issues that people
31 have reported have been about the infamous HTTP 40x error with Youtube.
32 Most of those issues could be linked to expired Youtube video links
33 that clive used from the cache records.
35 clive still saves the parsed video details to the cache (if BerkeleyDB
36 module is installed) by default but even this can be disabled with
39 There are significant changes to the --emit-csv output. Only those
40 fields are now printed that are known to be any real use to anyone.
41 If there is need for additional fields, please contact the author.
43 Other changes made in 2.2.0 include removing a number of less useful
44 features that have lingered in the project since 1.x. In some ways,
45 upgrading to 2.2.0 could be compared to upgrading from 1.x to 2.x.
47 From the developer point of view there are mainly two notable changes:
48 Getopt::ArgvFile and new the OO design. Getopt::ArgvFile allowed to
49 remove a chunk of code from clive that was encumbering the codebase,
50 and the new OO design should make clive more adaptable to anyone who
51 is looking to take a hack at it.
53 Package and port maintainers will want to read the README file. The
54 previously used GNU Makefile is now gone clive uses ExtUtils::MakeMaker
55 instead which should be a welcome change to those familiar with Perl.
63 2. Last changed in 2.1.0
65 * Slight improvements to program startup time
67 * Config file format changes (Config::Tiny -> Getopt::ArgvFile)
68 1. Command line options can now be used in config file
69 2. Breaks compatibility with previous versions
70 3. Cleaner and new format allows using cmdline options in configs
71 4. Format was last changed in 2.0.0
73 -----------------------------------------------
74 # Config::Tiny: clive 2.0 - 2.1
75 cat >> ~/.config/clive/config
77 proxy = "http://foo:1234"
79 savedir = "/home/user/videos"
81 # Getopt::ArgvFile: clive 2.2
83 --proxy="http://foo:1234"
84 --savedir="/home/user/videos"
85 -----------------------------------------------
88 1. Cache is now passive (read:no, write:yes)
89 2. Add: --cache- option prefix
90 3. New option: --cache-read, --no-cache
91 5. Rename: misc. options (e.g. --show -> --cache-dump)
92 6. Record field changes
93 o Breaks compatibility with previous versions
94 7. New field delimiter '#'
98 1. ~/.config/clive/config -> ~/.cliverc
99 2. ~/.config/clive/recall -> ~/.clivelast
100 3. ~/.config/clive/cache -> ~/.clivecache
103 1. Add: --format=best support (closes issue #15 )
104 2. Rename: mp4 -> fmt18 (Youtube)
105 3. Rename: Dailymotion ID spark -> flv
108 1. cURL error handling
109 2. Google mp4 support
110 3. Do not strip link params (closes debian bug #530659)
111 4. --format=fmt6 (no longer supported by Youtube?)
112 5. Dailymotion ID parsing
119 * --emit-csv: changes to CSV fields (cleanup, print only the necessary fields)
121 page_link, video_link, filename, file_length_mb,
122 file_length_bytes, video_id, time_stamp, page_title,
123 initial_length, remaining_bytes
125 base_filename, file_length, video_link
129 2. --renew (now obsolete)
130 3. --youtube-user (broken since 2.1)
131 4. --youtube-pass (...)
143 1. Long options: aliases (e.g. --output_file | --output-file | --outputfile)
144 2. --filename-format: new specifiers, rename some of the old ones
145 3. --format: exit with an error if id is not recognized by clive
146 4. Rename: -r -> -l (--recall)
147 5. Many short options have been removed (or reused)
149 Developer-visible changes:
153 * Prerequisite changes
154 1. Written for Perl 5.10.0
155 o 5.8 probably OK although unverified
159 3. Removed prerequisites
164 4. Optional modules (no changes from 2.1.14)
168 * Installation changes
169 1. Makefile.PL (ExtUtils::MakeMaker) [see README]
172 1. Makefile (obsoleted by Makefile.PL)
173 2. clive.pod (merged into bin/clive)
174 3. clive.1 (generated from bin/clive)
180 User-visible changes:
181 * Add: support for youtube-nocookie.com (closes issue #12)
182 * Add: fmt35 format ID for Youtube [closes issue #10 (and #13)]
183 * Fix: liveleak id parsing
184 * Rename: --format IDs for Youtube
188 * Rename: --output-video -> --output-file
189 * Rename: output:file -> output:filename_format (config file)
190 * Remove: --overwrite option (use --output-file instead)
192 Developer-visible changes:
193 * Add: tests/ytube-nocookies.url
197 * 2.2.0 is under development, read more here:
198 http://code.google.com/p/clive/wiki/WhatsNew_2_2_0
204 Developer-visible changes:
205 * Change: use perltidy defaults for style
206 * Change: BerkeleyDB and File::Path modules are now optional
207 ** Cache features depend on these modules
208 * Moved opted_mods initilization to init_opted_mods (-> loop)
214 User-visible changes:
215 * Change: --connect-timeout, --connect-timeout-socks default -> 30s
216 * Fix: timeout after file transfer starts
217 * Fix: title parsing with custom character class (closes issue #8)
218 * Add: redtube support; thanks to anonprn2@gmail.com (closes issue #11)
219 * Fix: typo in --emit-xml --help string
225 User-visible changes:
226 * Change: --youtube-pass: prompt for password if left undefined
227 * Change: --filename-format: default -> "%t.%s"
228 * Fix: "Use of uninitialized value $opts{"ytpass"} ..."
231 ** --connect-timeout-socks
232 * Cleanup: manual page
234 Developer-visible changes:
235 * Rename: auth_youtube subroutine -> loginto_youtube
238 * Youtube login does not work (throw an error, patches welcome!)
244 NOTE: This release changes the clive status messages. This will likely
245 break compatibility with utilities that depend on these messages.
246 The changes were made to enable using abby (0.2.0+) as a front-end
249 User-visible changes:
250 * Add abby (front-end) compatibility
251 - Change output similar to cclive
252 - http://code.google.com/p/abby/
253 * Add Youtube HD support (--format=mp4_hd)
254 - Thanks to bf for the patch (via FreeBSD ports)
255 * Add tv.cctv.com support [issue #6]
256 - Thanks to suntong001 for data mining
258 - --limit-rate (config: [http]:limit_rate)
259 - --hosts (print supported hosts to stdout)
260 - --stderr (redirect all output to stderr instead of stdout)
261 * Improve file suffix parsing from content-type
262 - Rewrite the content-type handling block in query_video_length
263 - Use whatever is found after slash in the content-type string
264 - Use "flv" for exceptions (e.g. octet-*, x-flv, etc.)
265 * Replace dashes in video IDs with underscores before using them in fnames
266 * Change --version output
267 * Fix reading from stdin (closes Debian #522422)
268 - Assume reading from stdin only if queue and argv arrays are empty
269 * Fix exit with status code
270 - Exit 0 on success, and >0 if an error occurs
272 Developer-visible changes:
273 * Update examples/config with limit_rate
274 * Rename: configrc -> examples/config
275 * Replace the monstrous if-elsif-$host code block with a loop
281 User-visible changes:
282 * Fix GoogleVideo "id not found" handling
283 - Symptom: exit after "process page..." message
284 - Cause: no check for undefined id value
285 * Fix GoogleVideo support
286 - Symptom: see above fix
287 - Cause: HTML changes to the video pages
288 * Fix URI::Escape import for GoogleVideo redirects
289 - Symptom: crash with "Undefined subroutine &URI::Escape::uri_unescape"
290 - Cause: recent script start optimizations; a missing 'require'
292 - Symptom: "expected different content-type"
293 - Cause: website content-type changes
295 Developer-visible changes:
296 * Cleanup code (style-wise)
297 - perltidy -gnu -l=72
303 User-visible changes:
304 * Keep URL queue order
305 - Remove duplicate URL checking
306 * Remove --modver, change --version output
307 * Update manual page (clive.1, clive.pod)
308 - Rewrite EXAMPLES section
309 - Cleanup other sections
310 * Config file: add support for [output]:format (--format)
311 * Port dailymotion support from cclive
313 Developer-visible changes:
315 - Replace Perl module checking with for-loops (incl. optional)
316 * Optimize script start time
317 - Replace "use $module" with "require $module" where possible
318 * Update LICENSE, configrc
320 - Add [output]:format to configrc
321 * Add tests/dmotion.url
327 User-visible changes:
328 * Add --output-video option
329 * Add option groups to --help output
330 * Add --stream-exec and --stream options
332 * Config file: add support for
333 - [commands]:exec (--exec)
334 - [commands]:stream (--stream-exec)
335 - See configrc for an example
336 * Fix --exec; should no longer spew out "not found" shell errors
337 * Change default filename format to "%t_%d_%i.%s"
338 * Change to use "file is already fully retrieved" error message
339 * Port resizing progressbar from cclive
341 Developer-visible changes:
342 * Add tests/lastfm.url and tests/multi.lst
343 * Remove XML::Simple dependency
345 * Implement SIGWINCH handling
346 - Resize progressbar to match terminal width
347 - Progressbar width defaults to 80 (chars)
348 - OS must support SIGWINCH
349 - Requires Term::ReadKey module
350 - clive works without the module but will ignore any SIGWINCH events
351 * Touch cclive.1, cclive.pod, INSTALL and Makefile files
355 * Buried clive-list, grew weary of fighting spam with bare fists
356 - email the author directly or use the issue tracker, thanks
362 User-visible changes:
363 * Renamed the following options
364 - --noproxy => --no-proxy
365 - --noextract => --no-extract
366 - --nologin => --no-login
367 * Butchered --help output
368 - much less verbose now
369 - relocated manual page data to clive.pod
370 * Removed --manual option
371 * Obsoleted "play" and "rencode" config keys in "commands" section
372 * Added --exec option which resembles cclive's --exec command
373 * Removed --play, --noplay, --rencode and --norencode options
375 * Changed --paste short option from '-x' to '-p'
376 * Removed wmv format (breakcom)
377 - persistant HTTP/404 (not found) error
379 Developer-visible changes:
381 - additional INSTALL variables
383 - can be used to disable module checks
384 - removed "man" from "all"
385 - removed "clean" (useless)
391 User-visible changes:
392 * Fixed sevenload support
398 User-visible changes:
399 * Fixed Youtube login which sometimes reported failed attempts as OK
400 - Youtube defaults web interface language based on users ip
401 - clive looks for English words in the post-login page to confirm login
402 * Tweaked --version output
404 Developer-visible changes:
405 * Removed metacafe remnants
406 * Fixed bug in time2str subroutine which caused incorrect calculations
408 * removed genman script (obsoleted by "make man")
409 * Added a rudimentary (GNU) Makefile
410 * Cleaned up translate_embed subroutine
413 * Removed the clive-announce and clive-users mailing lists
414 - New release announcements will be posted via Freshmeat alone from now on
415 - Subscribe to the project at http://freshmeat.net/projects/clive
416 * Created the clive-list@googlegroups.com mailing-list
417 - For support questions, patches and bug reports
418 - Issue tracker will remain for tracking bugs
419 - Send an email to clive-list-subscribe@googlegroups.com to subscribe
425 User-visible changes:
426 * Documented missing "%t" (--filename-format) in manual page
427 * Tweaked "localfile_length == remotefile_length" message
428 * Renamed CLIVE_CONFIGDIR environment variable to CLIVE_HOME
430 Developer-visible changes:
431 * Cleaned up manual page
433 * Cleaned up FreeBSD details (INSTALL)
439 User-visible changes:
440 * Removed "See --manual" from --version output
441 * Added support for evisortv
442 - http://code.google.com/p/clive/issues/detail?id=4
443 * Fixed: reused incorrectly last http error code for remaining urls in queue
444 * Fixed: progressbar reported 100% even if error had occurred (e.g. http/403)
446 Developer-visible changes:
447 * Cleaned up subroutines
453 User-visible changes:
454 * Fixed "Requested range was not delivered by the server (http/33)" w/ -c
455 - this would occur with a batch of URLs while using the --continue option,
456 e.g. if the first file was continued, the following page fetches exited
458 * Added --savebatch option
459 * Added --overwrite option
460 * Replaced the buggy progressbar with a "lazy man's progressbar"
461 * Fixed "print() on closed filehandle STDOUT" with --grep+delete
462 * Fixed progressbar display with --continue
464 Developer-visible changes:
466 * Started to bundle src tarball with clive.1 manual page
467 * Added genman script which wraps pod2man with common options
468 * Fixed a potential div by zero bug in calc_progress
474 NOTE: Changed license GPL3 => ISC/OpenBSD.
476 User-visible changes:
477 * Added --modversion option
478 * Replaced Term::Progressbar with a built-in thermometer progressbar
479 * Removed --progress=bar:nominor support due to above changes
480 * Added liveleakcom support
481 - http://code.google.com/p/clive/issues/detail?id=3
483 Developer-visible changes:
484 * Made IO::Pager module optional
486 * Cleaned up --progress option description
487 * Changed to require WWW::Curl 4.05+
488 * Removed Term::Progress module dependency
489 * Fixed a potential bug in calc_progress (improper $rate init)
491 * Made Expect module optional
497 User-visible changes:
498 * Fixed gvideo/mp4 support (http/404 even if the extraction link existed)
499 * Changed "found redirect" message
500 * Changed --play, --rencode status messages to use file basename
502 Developer-visible changes:
503 * decode_utf8($page): removes extra steps, works better with HTML::TokeParser
504 * Added missing Expect module version to INSTALL
511 This aims to be the last beta before the release of 2.0 in December 2008.
512 Please report any remaining bugs to the issue tracker at:
513 http://code.google.com/p/clive/issues/list
515 User-visible changes:
516 * Removed metacafe support until fixed (see known issues)
517 * Changed Youtube login to report if there were "too many login failures"
518 * Fixed Youtube login support: reported failures incorrectly as OK
519 * Added support clivepass(1) utility (http://code.google.com/p/clive-utils)
520 * Added support for metacafe and sevenload embed URL translation
522 Developer-visible changes:
524 * New prerequisite module: Expect
525 * Updated FreeBSD + Ubuntu details (INSTALL)
526 * Cleaned up some code
527 * Rewrote embed URL translation
530 * Metacafe support broken (http/404)
536 User-visible changes:
537 * Fixed pasting from clipboard containing multiple URLs
538 * Fixed page fetch progress glitch that occured with 1+ batches
539 * Added --agent option
540 * Added --proxy option
541 * Added --savedir option
542 * Added --cclass option
543 * Added --filename-format option
544 * Added --show-format option
545 * Added --youtube-user and --youtube-pass options
546 * Added --emit-xml option
547 * Added --progress=[none|bar|dot]
548 * Replaced --noprogress with --progress=none
549 * Added avg. transfer rate notification
550 * Fixed filename printing for existing output files (e.g. output.flv.1)
551 * Added --play option
552 * Fixed metacafe support (error: failed to extract videoCDNURL)
553 * Added --rencode option
555 Developer-visible changes:
556 * Ported --emit-csv option from 1.x with minor changes
557 - Backwards compatible with 1.x
558 - Prints additional video details
559 - $length, $video_id, $time_stamp, $page_title, $cont_from, $remaining
560 * Changed to prefer 'dot' bar if the output is not a TTY
561 * Replaced progress bar with Term::ProgressBar (new module prerequisite)
562 * Cleaned up queue processing subroutine
568 User-visible changes:
569 * clive now ignores input lines that start with the '#' character
570 * Added support for CLIVE_CONFIGDIR environment variable
571 * Ported lastfm video support from 1.x
572 * --version now displays XML::Simple
573 * Changed "= Play:" to "=> Playing ..."
574 * Playing occurs now subsequently after going over the URL batch
576 Developer-visible changes:
577 * Removed a google video redirect (commented out, see code)
578 * Added the AUTHORS file
579 * XML::Simple was missing as a prerequisite in INSTALL
580 * Made minor syntactic tweaks to the source code
581 * Fixed missing --quiet check with the "=> Play" message
587 A complete overhaul and rewrite of 1.x.
589 User-visible changes:
590 * Users are expected to use the --continue/-c option to resume transfers
591 * Configuration file format (=> INI), path was changed (=> ~/.config/clive)
592 * All extractions now assume flv as the default download format
593 * Users are expected to understand when/how use the --format/-f option
594 * Reading input from multiple sources is possible (e.g. % clive -x URL URL)
595 * Added: --grep: used to grep and recall cached URL entries
596 * Added: --background and --output=logfile, --append=logfile options
597 * Many old cmdline and config options were removed due to new design
598 * Improved GoogleVideo support: handles redirects to other hosts
599 * Pager is used where needed (e.g. --show/-s)
600 * Changed default output file naming format to "%n-(%i)-[%d].%s"
601 * Removed: guba (deadweight), myvideo (borked), dmotion (bitches @ anon users)
603 Developer-visible changes:
605 - See the INSTALL file for prerequisites
606 * No installation: all-in-one script (excl. the 3rd party modules)
607 * Cache is now an integral part of clive, see CACHE in the manual page
608 * Embedded the --manual page (Pod)
609 * Improved Youtube login: removed is_adult HTTP get (done manually now)
610 * Grab the file suffix from the Content-Type header
611 * Improved GoogleVideo support: mp4 detection no more relies on English words
612 * Improved Metacafe support: removed unnecessary "familyfilter" HTTP get
616 - 2.x+ at http://googlecode.com/p/clive/
617 - 1.x remains at http://gna.org/projects/clive
619 - 2.x+ at http://googlecode.com/p/clive/
620 - 1.x remain at http://dl.gna.org/clive
622 - http://clive.sf.net/
623 - http://home.gna.org/clive redirects to the above
625 - 2.x+ at git://repo.or.cz/clive.git
626 - 1.x remains at svn://svn.gna.org/svn/clive
627 * Issue tracking: Moved
628 - 2.x+ at http://googlecode.com/p/clive/issues/
629 - 1.x bug tracker remains at http://gna.org/projects/clive
630 * Created http://googlegroups.com/group/clive-announce/
632 NOTE: See http://dl.gna.org/clive/CHANGES for 1.x.