dvd-info.c: Trigger the easy lookup if explicit chapter bounds aren't given.
[dvdrip] / dvdrip
diff --git a/dvdrip b/dvdrip
index a4b5900..9634fe0 100755 (executable)
--- a/dvdrip
+++ b/dvdrip
@@ -5,6 +5,7 @@ dev=${DVDRIP_DEVICE-/dev/dvd}
 tmp=${DVDRIP_TMPDIR-${HOME?}/tmp/dvdrip}
 archive=${DVDRIP_ARCHIVE-jem.distorted.org.uk:/mnt/dvd/archive}
 : ${DVD_SECTOR_COPY=dvd-sector-copy}
+: ${DVD_ID=dvd-id}
 : ${DVDRIP_UPLOAD=dvdrip-upload}
 backup=nil ding=nil eject=nil force=nil retry=nil verbose=nil bogus=nil
 unset params
@@ -77,7 +78,7 @@ esac
 
 mkdir -p "$tmp/$tag"
 
-discid=$(dvd-id "$dev")
+discid=$("$DVD_ID" -I "$dev")
 if [ -f "$tmp/$tag/discid" ]; then
   read oldid <"$tmp/$tag/discid"
   case $force,$oldid in
@@ -95,6 +96,12 @@ info "copying \`$discid'"
 echo "$discid" >"$tmp/$tag/discid.new"
 mv "$tmp/$tag/discid.new" "$tmp/$tag/discid"
 
+if [ -b "$dev" ]; then msz=$(blockdev --getsize64 "$dev")
+else msz=nil; fi
+
+echo "$dev" >"$tmp/$tag/device.new"
+mv "$tmp/$tag/device.new" "$tmp/$tag/device"
+
 accumulate_badblocks () {
   if [ -f "$tmp/$tag/badblocks.new" ]; then
     if [ ! -f "$tmp/$tag/badblocks" ]; then
@@ -143,12 +150,24 @@ if [ ! -f "$tmp/$tag/iso" ]; then
       -b"$tmp/$tag/badblocks.new" "$@" "$dev" "$tmp/$tag/iso.new"
   run mv "$tmp/$tag/iso.new" "$tmp/$tag/iso"
   accumulate_badblocks
+  rm -f "$tmp/$tag/device"
   case $retry in t) rm -f "$tmp/$tag/badblocks.retry" ;; esac
   if [ -f "$tmp/$tag/badblocks" ]; then
     fail "bad sectors found: check \`$tmp/$tag/iso', run again if ok"
   fi
+  case $msz in
+    nil) ;;
+    *)
+      newmsz=$(blockdev --getsize64 "$dev")
+      case $newmsz in
+       $msz) ;;
+       *) fail "medium size changed ($msz -> $newmsz): try again" ;;
+      esac
+      ;;
+  esac
 fi
 
+rm -f "$tmp/$tag/device"
 run mv "$tmp/$tag/dest.new" "$tmp/$tag/dest"
 if [ -f "$tmp/$tag/eject" ]; then eject=t; else eject=nil; fi
 if [ -f "$tmp/$tag/ding" ]; then ding=t; else ding=nil; fi