#UI_ENHANCEMENT by cg
authorClaus Gittinger <cg@exept.de>
Tue, 21 May 2019 20:52:18 +0200
changeset 4947 6a569254ef65
parent 4946 ccd655ac6fc1
child 4948 d9c883fb9c17
#UI_ENHANCEMENT by cg class: ZipArchive useful errormessages (incl. filename) in open errors. changed: #name:mode: #readStreamFor: #readingFrom:
ZipArchive.st
--- a/ZipArchive.st	Sat May 18 13:09:58 2019 +0200
+++ b/ZipArchive.st	Tue May 21 20:52:18 2019 +0200
@@ -3369,14 +3369,14 @@
 
     filename := name asFilename.
     (readOrWriteMode = #read and:[filename exists not]) ifTrue:[
-	^ OpenError raiseRequestWith:filename errorString:' - file does not exist'.
+        ^ OpenError raiseRequestWith:filename errorString:(' - file does not exist: "%1"' bindWith:filename pathName).
     ].
     filename isDirectory ifTrue:[
-	^ OpenError raiseRequestWith:filename errorString:' - file is a directory'.
+        ^ OpenError raiseRequestWith:filename errorString:(' - file is a directory: "%1"' bindWith:filename pathName).
     ].
 
     stream notNil ifTrue: [
-	self close.
+        self close.
     ].
 
     archiveName := filename name.
@@ -3384,32 +3384,33 @@
 
     self openFile.
     mode ~~ #write ifTrue:[
-	|mustCloseFile|
-
-	mustCloseFile := true.
-	[
-	    self readDirectory.
-	    mustCloseFile := false.
-
-	    mode == #append ifTrue:[
-		members := self zipMembersByName values.
-		members isEmptyOrNil ifTrue:[^ self].
-
-		maxStartPosition := members maxApplying:[:eachMember | self dataStartOf:eachMember].
-		lastMember := members detect:[:eachMember | eachMember dataStart = maxStartPosition].
-
-		stream position:(startOfArchive + lastMember dataStart + lastMember compressedSize).
-		mode := #write.
-	    ].
-	] ensure:[
-	    mustCloseFile ifTrue:[self close].
-	].
+        |mustCloseFile|
+
+        mustCloseFile := true.
+        [
+            self readDirectory.
+            mustCloseFile := false.
+
+            mode == #append ifTrue:[
+                members := self zipMembersByName values.
+                members isEmptyOrNil ifTrue:[^ self].
+
+                maxStartPosition := members maxApplying:[:eachMember | self dataStartOf:eachMember].
+                lastMember := members detect:[:eachMember | eachMember dataStart = maxStartPosition].
+
+                stream position:(startOfArchive + lastMember dataStart + lastMember compressedSize).
+                mode := #write.
+            ].
+        ] ensure:[
+            mustCloseFile ifTrue:[self close].
+        ].
     ] ifFalse:[
-	zipMembersByName := Dictionary new.
+        zipMembersByName := Dictionary new.
     ].
 
     "Modified: / 31-08-2010 / 12:39:25 / sr"
     "Modified: / 17-02-2017 / 22:13:02 / stefan"
+    "Modified: / 21-05-2019 / 20:41:06 / Claus Gittinger"
 !
 
 readFrom:aPositionableStream
@@ -3425,25 +3426,26 @@
     "initialize the archive to read from aPositionableStream"
 
     stream notNil ifTrue: [
-	stream ~~ aPositionableStream ifTrue: [
-	    self close.
-	].
+        stream ~~ aPositionableStream ifTrue: [
+            self close.
+        ].
     ].
 
     mode := #read.
     aPositionableStream binary.
     stream := aPositionableStream.
     aPositionableStream isFileStream ifTrue:[
-	archiveName := aPositionableStream pathName.
-	aPositionableStream isDirectory ifTrue:[
-	    OpenError raiseWith:self errorString:(' - is a directory').
-	].
+        archiveName := aPositionableStream pathName.
+        aPositionableStream isDirectory ifTrue:[
+            OpenError raiseWith:self errorString:(' - is a directory: "%1"' bindWith:archiveName).
+        ].
     ] ifFalse:[
-	archiveName := 'internal stream'.
+        archiveName := 'internal stream'.
     ].
     self readDirectory.
 
     "Modified: / 21-11-2010 / 11:45:53 / cg"
+    "Modified: / 21-05-2019 / 20:45:28 / Claus Gittinger"
 !
 
 reopenForReading
@@ -4247,12 +4249,14 @@
     |zipEntry dataStart|
 
     (stream isNil or:[mode ~~ #read]) ifTrue:[
-	^ OpenError raiseRequestWith:nameOfFileInArchive errorString:'ZipArchive not open for reading ...'.
+        ^ OpenError raiseRequestWith:nameOfFileInArchive errorString:'ZipArchive not open for reading'.
     ].
 
     zipEntry := self findMember:nameOfFileInArchive.
     zipEntry isNil ifTrue:[
-	^ OpenError raiseRequestWith:nameOfFileInArchive errorString:'ZipArchive member does not exist: '.
+        ^ OpenError 
+                raiseRequestWith:nameOfFileInArchive 
+                errorString:('ZipArchive member does not exist: "%1"' bindWith:nameOfFileInArchive).
     ].
 
     dataStart := self dataStartOf:zipEntry.
@@ -4261,6 +4265,7 @@
     ^ (ZipReadStream zipFileStream:stream zipEntry:zipEntry) zipArchive:self.
 
     "Modified (format): / 17-02-2017 / 22:52:00 / stefan"
+    "Modified: / 21-05-2019 / 20:46:07 / Claus Gittinger"
 !
 
 reopenAndExtract:fileName intoStream:aWriteStream