feat: Handle toast and dsk images

This commit is contained in:
Felix Rieseberg 2020-08-01 22:56:14 +00:00
parent 9a1bbd40fb
commit c73331bf6a
2 changed files with 25 additions and 15 deletions

3
.gitattributes vendored
View File

@ -1 +1,2 @@
* text eol=lf text eol=lf
rom -text

View File

@ -1,6 +1,5 @@
const fs = require("fs"); const fs = require("fs");
const path = require("path"); const path = require("path");
const { error } = require("console");
const homeDir = require("os").homedir(); const homeDir = require("os").homedir();
const macDir = path.join(homeDir, "macintosh.js"); const macDir = path.join(homeDir, "macintosh.js");
@ -13,6 +12,24 @@ function getUserDataDiskPath() {
return path.join(userDataPath, "disk"); return path.join(userDataPath, "disk");
} }
// File type utilities
function isFile(v = "") {
return fs.statSync(path.join(macDir, v)).isFile();
}
function isHiddenFile(filename = '') {
return filename.startsWith('.');
}
function isCDImage(filename = '') {
return filename.endsWith('.iso') || filename.endsWith('.toast');
}
function isDiskImage(filename = '') {
return filename.endsWith('.img') || filename.endsWith('.dsk');
}
function cleanupCopyPath() { function cleanupCopyPath() {
try { try {
if (fs.existsSync(macintoshCopyPath)) { if (fs.existsSync(macintoshCopyPath)) {
@ -60,7 +77,7 @@ function preloadFilesAtPath(module, initalSourcePath) {
}`; }`;
const files = fs.readdirSync(sourcePath).filter((v) => { const files = fs.readdirSync(sourcePath).filter((v) => {
// Remove hidden, iso, and img files // Remove hidden, iso, and img files
return !v.startsWith(".") && !v.endsWith(".iso") && !v.endsWith(".img"); return !isHiddenFile(v) && !isDiskImage(v) && !isCDImage(v);
}); });
(files || []).forEach((fileName) => { (files || []).forEach((fileName) => {
@ -192,9 +209,9 @@ function writePrefs(userImages = []) {
if (userImages && userImages.length > 0) { if (userImages && userImages.length > 0) {
console.log(`writePrefs: Found ${userImages.length} user images`); console.log(`writePrefs: Found ${userImages.length} user images`);
userImages.forEach(({ name }) => { userImages.forEach(({ name }) => {
if (name.endsWith(".iso")) { if (isCDImage(name)) {
prefs += `\ncdrom ${name}`; prefs += `\ncdrom ${name}`;
} else if (name.endsWith(".img")) { } else if (isDiskImage(name)) {
prefs += `\ndisk ${name}`; prefs += `\ndisk ${name}`;
} }
}); });
@ -208,14 +225,6 @@ function writePrefs(userImages = []) {
} }
} }
function isMacDirFileOfType(extension = "", v = "") {
const isType = v.endsWith(`.${extension}`);
const isMatch = isType && fs.statSync(path.join(macDir, v)).isFile();
console.log(`isMacDirFileOfType: ${v} is file and ${extension}: ${isMatch}`);
return isMatch;
}
function getUserImages() { function getUserImages() {
const result = []; const result = [];
@ -227,8 +236,8 @@ function getUserImages() {
} }
const macDirFiles = fs.readdirSync(macDir); const macDirFiles = fs.readdirSync(macDir);
const imgFiles = macDirFiles.filter((v) => isMacDirFileOfType("img", v)); const imgFiles = macDirFiles.filter((v) => isFile(v) && isDiskImage(v));
const isoFiles = macDirFiles.filter((v) => isMacDirFileOfType("iso", v)); const isoFiles = macDirFiles.filter((v) => isFile(v) && isCDImage(v));
const isoImgFiles = [...isoFiles, ...imgFiles]; const isoImgFiles = [...isoFiles, ...imgFiles];
console.log(`getUserImages: iso and img files`, isoImgFiles); console.log(`getUserImages: iso and img files`, isoImgFiles);