#REFACTORING by stefan
authorStefan Vogel <sv@exept.de>
Fri, 12 Oct 2018 20:09:30 +0200
changeset 8505 5b3de8460594
parent 8504 2d8f21131bb3
child 8506 04df120d795f
#REFACTORING by stefan class: ImageReader removed: #writingFile:for:do: changed: #save:onFile: #saveAll:onFile: class: ImageReader class added: #writingFile:for:do: changed: #readerClassForFilename:
ImageReader.st
--- a/ImageReader.st	Fri Oct 12 20:08:00 2018 +0200
+++ b/ImageReader.st	Fri Oct 12 20:09:30 2018 +0200
@@ -1,3 +1,5 @@
+"{ Encoding: utf8 }"
+
 "
  COPYRIGHT (c) 1991 by Claus Gittinger
 	      All Rights Reserved
@@ -2137,19 +2139,20 @@
 readerClassForFilename:aStringOrFilename
     "return a reader class, determined by the file's name"
 
-    |mime reader|
-
-    mime := aStringOrFilename asFilename mimeTypeFromName.
+    |fileName mime reader|
+
+    fileName := aStringOrFilename asFilename.
+    mime := fileName mimeTypeFromName.
     mime isNil ifTrue:[
-	mime := aStringOrFilename asFilename mimeTypeOfContents.
+        mime := fileName mimeTypeOfContents.
     ].
 
     mime notNil ifTrue:[
-	reader := MIMETypes imageReaderForType:mime.
+        reader := MIMETypes imageReaderForType:mime.
     ].
     reader isNil ifTrue:[
-	"answer the reader when proceeding form this error"
-	reader := ConversionError raiseRequestErrorString:(' - unsupported image type: ''%1''' bindWith:(mime ? aStringOrFilename asFilename suffix)).
+        "answer the reader when proceeding from this error"
+        reader := ConversionError raiseRequestErrorString:(' - unsupported image type: ''%1''' bindWith:(mime ? aStringOrFilename asFilename suffix)).
     ].
     ^ reader
 
@@ -2370,6 +2373,45 @@
     "Created: / 22-02-2017 / 01:00:44 / cg"
 ! !
 
+!ImageReader class methodsFor:'private utilities'!
+
+writingFile:aFileName for:something do:aBlock
+    "helper for save image"
+
+    |stream done|
+
+    done := false.
+
+    [
+        stream := aFileName asFilename newReadWriteStream.
+        aBlock value:stream.
+        done := true.
+    ] on:FileStream openErrorSignal do:[:ex|
+        Image fileCreationErrorSignal
+            raiseWith:something
+            errorString:('file creation error: ' , ex description).
+    ] ensure:[
+        stream notNil ifTrue:[
+            stream close.
+            done ifFalse:[
+                OsError catch:[
+                    aFileName asFilename remove.
+                ]
+            ].
+        ].
+    ].
+
+    "
+        self writingFile:'/etc' for:nil do:[:arg| self halt].
+        self writingFile:'/tmp/ttttt' for:nil do:[:arg| arg nextPutLine:'Hello'].
+
+        self writingFile:'/tmp/ttttt' for:nil do:[:arg| ^ self].
+        self assert:'/tmp/ttttt' asFilename exists not
+    "
+
+    "Modified: / 04-08-2017 / 11:28:41 / stefan"
+! !
+
 !ImageReader class methodsFor:'queries'!
 
 isAbstract
@@ -2770,8 +2812,8 @@
 save:image onFile:aFileName
     "save image in my format on aFile"
 
-    self writingFile:aFileName for:image do:[:stream |
-	self save:image onStream:stream.
+    self class writingFile:aFileName for:image do:[:stream |
+        self save:image onStream:stream.
     ].
 !
 
@@ -2805,8 +2847,8 @@
      Not all file formats support multiple images,
      so be prepared for an exception to be raised."
 
-    self writingFile:aFileName for:aCollectionOfImages do:[:stream |
-	self saveAll:aCollectionOfImages onStream:stream.
+    self class writingFile:aFileName for:aCollectionOfImages do:[:stream |
+        self saveAll:aCollectionOfImages onStream:stream.
     ].
 
     "Modified: / 01-06-2010 / 19:02:17 / cg"
@@ -2823,34 +2865,6 @@
 	errorString:('save of imageSequence not implemented/supported for this format').
 
     "Modified (comment): / 22-02-2017 / 01:00:11 / cg"
-!
-
-writingFile:aFileName for:something do:aBlock
-    "helper for save image"
-
-    |stream|
-
-    [
-        stream := aFileName asFilename newReadWriteStream.
-    ] on:FileStream openErrorSignal do:[:ex|
-        ^ Image fileCreationErrorSignal
-            raiseWith:something
-            errorString:('file creation error: ' , ex description).
-    ].
-
-    [
-        [
-            aBlock value: stream
-        ] ensure:[
-            stream close.
-        ].
-    ] ifCurtailed:[
-        OsError catch:[
-            aFileName asFilename remove.
-        ]
-    ].
-
-    "Modified: / 04-08-2017 / 11:28:41 / stefan"
 ! !
 
 !ImageReader methodsFor:'initialization'!