Skip to content

Commit 2653321

Browse files
committed
Support renaming multiple files at once
1 parent 43f8ec2 commit 2653321

File tree

6 files changed

+35
-29
lines changed

6 files changed

+35
-29
lines changed

app/Http/Controllers/Api/Client/Servers/FileController.php

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ public function __construct(
6767
*
6868
* @throws \Pterodactyl\Exceptions\Http\Connection\DaemonConnectionException
6969
*/
70-
public function listDirectory(ListFilesRequest $request, Server $server): array
70+
public function directory(ListFilesRequest $request, Server $server): array
7171
{
7272
try {
7373
$contents = $this->fileRepository
@@ -90,7 +90,7 @@ public function listDirectory(ListFilesRequest $request, Server $server): array
9090
* @return \Illuminate\Http\Response
9191
* @throws \Pterodactyl\Exceptions\Http\Server\FileSizeTooLargeException
9292
*/
93-
public function getFileContents(GetFileContentsRequest $request, Server $server): Response
93+
public function contents(GetFileContentsRequest $request, Server $server): Response
9494
{
9595
return new Response(
9696
$this->fileRepository->setServer($server)->getContent(
@@ -140,7 +140,7 @@ public function download(GetFileContentsRequest $request, Server $server)
140140
* @param \Pterodactyl\Models\Server $server
141141
* @return \Illuminate\Http\JsonResponse
142142
*/
143-
public function writeFileContents(WriteFileContentRequest $request, Server $server): JsonResponse
143+
public function write(WriteFileContentRequest $request, Server $server): JsonResponse
144144
{
145145
$this->fileRepository->setServer($server)->putContent(
146146
$request->get('file'),
@@ -157,7 +157,7 @@ public function writeFileContents(WriteFileContentRequest $request, Server $serv
157157
* @param \Pterodactyl\Models\Server $server
158158
* @return \Illuminate\Http\JsonResponse
159159
*/
160-
public function createFolder(CreateFolderRequest $request, Server $server): JsonResponse
160+
public function create(CreateFolderRequest $request, Server $server): JsonResponse
161161
{
162162
$this->fileRepository
163163
->setServer($server)
@@ -173,11 +173,11 @@ public function createFolder(CreateFolderRequest $request, Server $server): Json
173173
* @param \Pterodactyl\Models\Server $server
174174
* @return \Illuminate\Http\JsonResponse
175175
*/
176-
public function renameFile(RenameFileRequest $request, Server $server): JsonResponse
176+
public function rename(RenameFileRequest $request, Server $server): JsonResponse
177177
{
178178
$this->fileRepository
179179
->setServer($server)
180-
->renameFile($request->input('rename_from'), $request->input('rename_to'));
180+
->renameFiles($request->input('root'), $request->input('files'));
181181

182182
return new JsonResponse([], Response::HTTP_NO_CONTENT);
183183
}
@@ -189,7 +189,7 @@ public function renameFile(RenameFileRequest $request, Server $server): JsonResp
189189
* @param \Pterodactyl\Models\Server $server
190190
* @return \Illuminate\Http\JsonResponse
191191
*/
192-
public function copyFile(CopyFileRequest $request, Server $server): JsonResponse
192+
public function copy(CopyFileRequest $request, Server $server): JsonResponse
193193
{
194194
$this->fileRepository
195195
->setServer($server)
@@ -203,7 +203,7 @@ public function copyFile(CopyFileRequest $request, Server $server): JsonResponse
203203
* @param \Pterodactyl\Models\Server $server
204204
* @return array
205205
*/
206-
public function compressFiles(CompressFilesRequest $request, Server $server): array
206+
public function compress(CompressFilesRequest $request, Server $server): array
207207
{
208208
$file = $this->fileRepository->setServer($server)
209209
->compressFiles(

app/Http/Requests/Api/Client/Servers/Files/RenameFileRequest.php

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,11 @@ public function permission(): string
2525
public function rules(): array
2626
{
2727
return [
28-
'rename_from' => 'string|required',
29-
'rename_to' => 'string|required',
28+
'root' => 'required|nullable|string',
29+
'files' => 'required|array',
30+
'files.*' => 'array',
31+
'files.*.to' => 'required|string',
32+
'files.*.from' => 'required|string',
3033
];
3134
}
3235
}

app/Repositories/Wings/DaemonFileRepository.php

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -109,20 +109,20 @@ public function createDirectory(string $name, string $path): ResponseInterface
109109
/**
110110
* Renames or moves a file on the remote machine.
111111
*
112-
* @param string $from
113-
* @param string $to
112+
* @param string|null $root
113+
* @param array $files
114114
* @return \Psr\Http\Message\ResponseInterface
115115
*/
116-
public function renameFile(string $from, string $to): ResponseInterface
116+
public function renameFiles(?string $root, array $files): ResponseInterface
117117
{
118118
Assert::isInstanceOf($this->server, Server::class);
119119

120120
return $this->getHttpClient()->put(
121121
sprintf('/api/servers/%s/files/rename', $this->server->uuid),
122122
[
123123
'json' => [
124-
'rename_from' => urldecode($from),
125-
'rename_to' => urldecode($to),
124+
'root' => $root ?? '/',
125+
'files' => $files,
126126
],
127127
]
128128
);
@@ -163,7 +163,7 @@ public function deleteFiles(?string $root, array $files): ResponseInterface
163163
sprintf('/api/servers/%s/files/delete', $this->server->uuid),
164164
[
165165
'json' => [
166-
'root' => $root,
166+
'root' => $root ?? '/',
167167
'files' => $files,
168168
],
169169
]

resources/scripts/api/server/files/renameFile.ts renamed to resources/scripts/api/server/files/renameFiles.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,11 @@ interface Data {
55
renameTo: string;
66
}
77

8-
export default (uuid: string, { renameFrom, renameTo }: Data): Promise<void> => {
8+
export default (uuid: string, directory: string, files: Data[]): Promise<void> => {
99
return new Promise((resolve, reject) => {
1010
http.put(`/api/client/servers/${uuid}/files/rename`, {
11-
rename_from: renameFrom,
12-
rename_to: renameTo,
11+
root: directory,
12+
files: files.map(f => ({ from: f.renameFrom, to: f.renameTo })),
1313
})
1414
.then(() => resolve())
1515
.catch(reject);

resources/scripts/components/server/files/RenameFileModal.tsx

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import Modal, { RequiredModalProps } from '@/components/elements/Modal';
33
import { Form, Formik, FormikHelpers } from 'formik';
44
import Field from '@/components/elements/Field';
55
import { join } from 'path';
6-
import renameFile from '@/api/server/files/renameFile';
6+
import renameFiles from '@/api/server/files/renameFiles';
77
import { ServerContext } from '@/state/server';
88
import { FileObject } from '@/api/server/files/loadDirectory';
99
import tw from 'twin.macro';
@@ -21,10 +21,12 @@ type Props = RequiredModalProps & { file: FileObject; useMoveTerminology?: boole
2121
export default ({ file, useMoveTerminology, ...props }: Props) => {
2222
const { uuid } = useServer();
2323
const { mutate } = useFileManagerSwr();
24-
const { clearAndAddHttpError } = useFlash();
24+
const { clearFlashes, clearAndAddHttpError } = useFlash();
2525
const directory = ServerContext.useStoreState(state => state.files.directory);
2626

2727
const submit = ({ name }: FormikValues, { setSubmitting }: FormikHelpers<FormikValues>) => {
28+
clearFlashes('files');
29+
2830
const len = name.split('/').length;
2931
if (!useMoveTerminology && len === 1) {
3032
// Rename the file within this directory.
@@ -36,7 +38,8 @@ export default ({ file, useMoveTerminology, ...props }: Props) => {
3638

3739
const renameFrom = join(directory, file.name);
3840
const renameTo = join(directory, name);
39-
renameFile(uuid, { renameFrom, renameTo })
41+
42+
renameFiles(uuid, directory, [ { renameFrom, renameTo } ])
4043
.then(() => props.onDismissed())
4144
.catch(error => {
4245
mutate();

routes/api-client.php

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -53,15 +53,15 @@
5353
});
5454

5555
Route::group(['prefix' => '/files'], function () {
56-
Route::get('/list', 'Servers\FileController@listDirectory');
57-
Route::get('/contents', 'Servers\FileController@getFileContents');
56+
Route::get('/list', 'Servers\FileController@directory');
57+
Route::get('/contents', 'Servers\FileController@contents');
5858
Route::get('/download', 'Servers\FileController@download');
59-
Route::put('/rename', 'Servers\FileController@renameFile');
60-
Route::post('/copy', 'Servers\FileController@copyFile');
61-
Route::post('/write', 'Servers\FileController@writeFileContents');
62-
Route::post('/compress', 'Servers\FileController@compressFiles');
59+
Route::put('/rename', 'Servers\FileController@rename');
60+
Route::post('/copy', 'Servers\FileController@copy');
61+
Route::post('/write', 'Servers\FileController@write');
62+
Route::post('/compress', 'Servers\FileController@compress');
6363
Route::post('/delete', 'Servers\FileController@delete');
64-
Route::post('/create-folder', 'Servers\FileController@createFolder');
64+
Route::post('/create-folder', 'Servers\FileController@create');
6565
});
6666

6767
Route::group(['prefix' => '/schedules'], function () {

0 commit comments

Comments
 (0)