Some checks failed
build-packages / resolve bundled mosh-client (push) Has been cancelled
build-packages / resolve bundled et-client (push) Has been cancelled
build-packages / build-macos (push) Has been cancelled
build-packages / build-windows (push) Has been cancelled
build-packages / build-linux-x64 (push) Has been cancelled
build-packages / build-linux-arm64 (push) Has been cancelled
build-packages / release (push) Has been cancelled
build-packages / update Nix release metadata (push) Has been cancelled
build-packages / bump homebrew tap (push) Has been cancelled
test / lint-and-test (push) Has been cancelled
AI automation / Route event (push) Has been cancelled
AI automation / Hand reopened issue to maintainers (push) Has been cancelled
AI automation / Clean source issue state (push) Has been cancelled
AI automation / Reconcile handoffs (push) Has been cancelled
AI automation / Classify issue (push) Has been cancelled
AI automation / Claude Code smoke (push) Has been cancelled
AI automation / Review issue follow-up (push) Has been cancelled
AI automation / Publish issue follow-up (push) Has been cancelled
AI automation / Implement with Claude Code (push) Has been cancelled
AI automation / Publish implement PR (push) Has been cancelled
AI automation / Continue queued issue comments (push) Has been cancelled
AI automation / Codex review loop (push) Has been cancelled
AI automation / Publish Codex fix (push) Has been cancelled
AI automation / Clear Codex dispatch marker (push) Has been cancelled
AI automation / Own PR re-request Codex (push) Has been cancelled
AI automation / External PR re-request Codex (push) Has been cancelled
AI automation / Poll Codex reaction / retry (push) Has been cancelled
build-et-binaries / build-linux-x64 (push) Has been cancelled
build-et-binaries / build-linux-arm64 (push) Has been cancelled
build-et-binaries / build-macos-universal (push) Has been cancelled
build-et-binaries / build-windows-x64 (push) Has been cancelled
build-et-binaries / release (push) Has been cancelled
67 lines
2.2 KiB
TypeScript
67 lines
2.2 KiB
TypeScript
import { useCallback } from "react";
|
|
import { netcattyBridge } from "../../../infrastructure/services/netcattyBridge";
|
|
import type { SftpFileEntry, SftpFilenameEncoding } from "../../../domain/models";
|
|
import { buildMockLocalFiles } from "./mockLocalFiles";
|
|
import { formatFileSize, formatDate } from "./utils";
|
|
|
|
export const useSftpDirectoryListing = () => {
|
|
const getMockLocalFiles = useCallback((path: string): SftpFileEntry[] => {
|
|
return buildMockLocalFiles(path);
|
|
}, []);
|
|
|
|
const listLocalFiles = useCallback(
|
|
async (path: string): Promise<SftpFileEntry[]> => {
|
|
const rawFiles = await netcattyBridge.get()?.listLocalDir?.(path);
|
|
if (!rawFiles) {
|
|
return getMockLocalFiles(path);
|
|
}
|
|
|
|
return rawFiles.map((f) => {
|
|
const size = parseInt(f.size) || 0;
|
|
const lastModified = new Date(f.lastModified).getTime();
|
|
return {
|
|
name: f.name,
|
|
type: f.type as "file" | "directory" | "symlink",
|
|
size,
|
|
sizeFormatted: formatFileSize(size),
|
|
lastModified,
|
|
lastModifiedFormatted: formatDate(lastModified),
|
|
linkTarget: f.linkTarget as "file" | "directory" | null | undefined,
|
|
hidden: f.hidden,
|
|
owner: f.owner,
|
|
};
|
|
});
|
|
},
|
|
[getMockLocalFiles],
|
|
);
|
|
|
|
const listRemoteFiles = useCallback(
|
|
async (sftpId: string, path: string, encoding?: SftpFilenameEncoding): Promise<SftpFileEntry[]> => {
|
|
const rawFiles = await netcattyBridge.get()?.listSftp(sftpId, path, encoding);
|
|
if (!rawFiles) return [];
|
|
|
|
return rawFiles.map((f) => {
|
|
const size = parseInt(f.size) || 0;
|
|
const lastModified = new Date(f.lastModified).getTime();
|
|
return {
|
|
name: f.name,
|
|
type: f.type as "file" | "directory" | "symlink",
|
|
size,
|
|
sizeFormatted: formatFileSize(size),
|
|
lastModified,
|
|
lastModifiedFormatted: formatDate(lastModified),
|
|
permissions: f.permissions,
|
|
owner: f.owner,
|
|
linkTarget: f.linkTarget as "file" | "directory" | null | undefined,
|
|
};
|
|
});
|
|
},
|
|
[],
|
|
);
|
|
|
|
return {
|
|
listLocalFiles,
|
|
listRemoteFiles,
|
|
};
|
|
};
|