@@ -61,8 +61,18 @@ public function initialize(Server $server): void {
6161 $ this ->server ->on ('afterMethod:GET ' , $ this ->afterDownload (...), 999 );
6262 }
6363
64+ /**
65+ * @return iterable<NcNode>
66+ */
67+ protected function createIterator (array $ rootNodes ): iterable {
68+ foreach ($ rootNodes as $ rootNode ) {
69+ yield from $ this ->iterateNodes ($ rootNode );
70+ }
71+ }
72+
6473 /**
6574 * Recursively iterate over all nodes in a folder.
75+ * @return iterable<NcNode>
6676 */
6777 protected function iterateNodes (NcNode $ node ): iterable {
6878 yield $ node ;
@@ -151,14 +161,8 @@ public function handleDownload(Request $request, Response $response): ?bool {
151161 assert ($ child instanceof Node);
152162 $ rootNodes [] = $ child ->getNode ();
153163 }
154- $ allNodes = [];
155- foreach ($ rootNodes as $ rootNode ) {
156- foreach ($ this ->iterateNodes ($ rootNode ) as $ node ) {
157- $ allNodes [] = $ node ;
158- }
159- }
160164
161- $ event = new BeforeZipCreatedEvent ($ folder , $ files , $ allNodes );
165+ $ event = new BeforeZipCreatedEvent ($ folder , $ files , $ this -> createIterator ( $ rootNodes ) );
162166 $ this ->eventDispatcher ->dispatchTyped ($ event );
163167 if ((!$ event ->isSuccessful ()) || $ event ->getErrorMessage () !== null ) {
164168 $ errorMessage = $ event ->getErrorMessage ();
@@ -170,7 +174,6 @@ public function handleDownload(Request $request, Response $response): ?bool {
170174 // Downloading was denied by an app
171175 throw new Forbidden ($ errorMessage );
172176 }
173- $ allNodes = $ event ->getNodes ();
174177
175178 $ archiveName = $ folder ->getName ();
176179 if (count (explode ('/ ' , trim ($ folder ->getPath (), '/ ' ), 3 )) === 2 ) {
@@ -190,7 +193,7 @@ public function handleDownload(Request $request, Response $response): ?bool {
190193 if (empty ($ files )) {
191194 $ streamer ->addEmptyDir ($ archiveName );
192195 }
193- foreach ($ allNodes as $ node ) {
196+ foreach ($ event -> getNodes () as $ node ) {
194197 $ this ->streamNode ($ streamer , $ node , $ rootPath );
195198 }
196199 $ streamer ->finalize ();
0 commit comments