@@ -87,30 +87,29 @@ trait ZipEntryChecker {
8787 }
8888 }
8989
90- def findFirstEntry (file : File , recursive : Boolean = true )(callback : (String , ZipEntry , InputStream ) => Boolean ): Boolean = {
90+ def findFirstEntry (file : File , recursive : Boolean = true )(predicate : (String , ZipEntry , InputStream ) => Boolean ): Boolean = {
9191 val stream = new BufferedInputStream (new FileInputStream (file))
9292
93- try {
94- findFirstEntry(file.getName, stream, recursive)(callback)
95- } finally {
96- stream.close
97- }
93+ try findFirstEntry(file.getName, stream, recursive)(predicate) finally stream.close
9894 }
9995
100- def findFirstEntry (filename : String , stream : InputStream , recursive : Boolean )(callback : (String , ZipEntry , InputStream ) => Boolean ): Boolean = {
96+ def findFirstEntry (filename : String , stream : InputStream , recursive : Boolean )(predicate : (String , ZipEntry , InputStream ) => Boolean ): Boolean = {
10197 val zipStream = new ZipInputStream (stream)
10298
10399 try {
104100 val entryStream = Stream .continually(Try { zipStream.getNextEntry })
105101 .map(_.toOption.flatMap { Option (_) })
106- .takeWhile(_.isDefined)
107- .flatten
108- .filterNot(ZipCleaner .shouldFilter)
109-
110- entryStream.exists(entry =>
111- callback(filename, entry, zipStream)
112- || (recursive && isZip(entry.getName) && findFirstEntry(s " $filename/ ${entry.getName}" , new CloseShieldInputStream (zipStream), true )(callback))
113- )
102+ .takeWhile(_.isDefined)
103+ .flatten
104+ .filterNot(ZipCleaner .shouldFilter)
105+
106+ entryStream.exists { entry =>
107+ lazy val recurse = recursive &&
108+ isZip(entry.getName) &&
109+ findFirstEntry(s " $filename/ ${entry.getName}" , new CloseShieldInputStream (zipStream), true )(predicate)
110+
111+ predicate(filename, entry, zipStream) || recurse
112+ }
114113 } finally {
115114 zipStream.close
116115 }
0 commit comments