Socket
Socket
Sign inDemoInstall

cemu-smm

Package Overview
Dependencies
3
Maintainers
1
Versions
65
Alerts
File Explorer

Advanced tools

Install Socket

Detect and block malicious and high-risk dependencies

Install

Comparing version 1.1.0 to 1.1.2

510

legacy/save.js

@@ -12,2 +12,3 @@ "use strict";

var createCourse = require("./course");
var Tnl = require("./tnl");

@@ -30,2 +31,10 @@ var SAVE_SIZE = 0xA000;

this.courses = {};
this.slotToIndex = {};
for (var i = 0; i < SAVE_ORDER_SIZE; i++) {
var index = this.data.readUInt8(SAVE_ORDER_OFFSET + i);
if (index !== 255) {
this.slotToIndex[i] = index;
}
}
}

@@ -75,127 +84,110 @@

reorder: function () {
var _ref2 = _asyncToGenerator(regeneratorRuntime.mark(function _callee3() {
var _ref2 = _asyncToGenerator(regeneratorRuntime.mark(function _callee4() {
var _this2 = this;
return regeneratorRuntime.wrap(function _callee3$(_context3) {
return regeneratorRuntime.wrap(function _callee4$(_context4) {
while (1) {
switch (_context3.prev = _context3.next) {
switch (_context4.prev = _context4.next) {
case 0:
_context3.next = 2;
_context4.next = 2;
return new Promise(function () {
var _ref3 = _asyncToGenerator(regeneratorRuntime.mark(function _callee2(resolve, reject) {
var numbers, i, index, missingNo, _i, promises, _loop, _i2, _loop2, _i3, _i4;
return regeneratorRuntime.wrap(function _callee2$(_context2) {
var _ref3 = _asyncToGenerator(regeneratorRuntime.mark(function _callee3(resolve) {
return regeneratorRuntime.wrap(function _callee3$(_context3) {
while (1) {
switch (_context2.prev = _context2.next) {
switch (_context3.prev = _context3.next) {
case 0:
_context2.prev = 0;
_context3.prev = 0;
return _context3.delegateYield(regeneratorRuntime.mark(function _callee2() {
var promises, slotToIndex, _loop, i, _loop2;
if (!(_this2.data.slice(SAVE_ORDER_OFFSET, SAVE_ORDER_OFFSET + SAVE_ORDER_SIZE).readUInt32BE(0) !== 0)) {
_context2.next = 21;
break;
}
return regeneratorRuntime.wrap(function _callee2$(_context2) {
while (1) {
switch (_context2.prev = _context2.next) {
case 0:
// rename course folders
promises = [];
slotToIndex = {};
// find all unused slots
numbers = [];
Object.assign(slotToIndex, _this2.slotToIndex);
for (i = SAVE_ORDER_SIZE - 1; i >= 0; i--) {
index = _this2.data.readUInt8(SAVE_ORDER_OFFSET + i);
_loop = function _loop(i) {
promises.push(new Promise(function (resolve) {
var value = slotToIndex[i];
var srcPath = path.resolve(_this2.pathToSave + "/course" + parseInt(i).pad(3));
var dstPath = path.resolve(_this2.pathToSave + "/course" + value.pad(3) + "_reorder");
fs.rename(srcPath, dstPath, function () {
_this2.slotToIndex[value] = value;
_this2.data.writeUInt8(value, SAVE_ORDER_OFFSET + value);
resolve();
});
resolve();
}));
};
if (index !== 255) {
numbers.push(index);
}
}
missingNo = [];
for (i in slotToIndex) {
_loop(i);
}
_context2.next = 7;
return Promise.all(promises);
for (_i = 0; _i < SAVE_ORDER_SIZE; _i++) {
if (!numbers.includes(_i)) {
missingNo.push(_i);
}
}
case 7:
promises = [];
// rename course folders
promises = [];
_loop2 = function _loop2(i) {
promises.push(new Promise(function (resolve) {
var srcPath = path.resolve(_this2.pathToSave + "/course" + i.pad(3) + "_reorder");
var dstPath = path.resolve(_this2.pathToSave + "/course" + i.pad(3));
fs.rename(srcPath, dstPath, function (err) {
if (err) {
if (_this2.slotToIndex[i]) {
delete _this2.slotToIndex[i];
}
_this2.data.writeUInt8(SAVE_ORDER_EMPTY, SAVE_ORDER_OFFSET + i);
}
resolve();
});
}));
};
_loop = function _loop(_i2) {
var index = _this2.data.readUInt8(SAVE_ORDER_OFFSET + _i2);
if (index !== 255) {
promises.push(new Promise(function (resolve) {
var srcPath = path.resolve(_this2.pathToSave + "/course" + _i2.pad(3));
var dstPath = path.resolve(_this2.pathToSave + "/course" + index.pad(3) + "_reorder");
fs.rename(srcPath, dstPath, function () {
resolve();
});
resolve();
}));
}
};
for (i = 0; i < SAVE_ORDER_SIZE; i++) {
_loop2(i);
}
_context2.next = 12;
return Promise.all(promises);
for (_i2 = 0; _i2 < SAVE_ORDER_SIZE; _i2++) {
_loop(_i2);
}
_context2.next = 11;
return Promise.all(promises);
case 12:
case 11:
promises = [];
// recalculate checksum
_this2.writeCrc();
_loop2 = function _loop2(_i3) {
promises.push(new Promise(function (resolve) {
var srcPath = path.resolve(_this2.pathToSave + "/course" + _i3.pad(3) + "_reorder");
var dstPath = path.resolve(_this2.pathToSave + "/course" + _i3.pad(3));
fs.rename(srcPath, dstPath, function () {
// somehow this does not throw an error if srcPath does not exist
resolve();
});
resolve();
}));
};
resolve();
for (_i3 = 0; _i3 < SAVE_ORDER_SIZE; _i3++) {
_loop2(_i3);
}
_context2.next = 16;
return Promise.all(promises);
case 14:
case "end":
return _context2.stop();
}
}
}, _callee2, _this2);
})(), "t0", 2);
case 16:
// write bytes to 'save.dat'
for (_i4 = 0; _i4 < SAVE_ORDER_SIZE; _i4++) {
if (missingNo.includes(_i4)) {
_this2.data.writeUInt8(SAVE_ORDER_EMPTY, SAVE_ORDER_OFFSET + _i4);
} else {
_this2.data.writeUInt8(_i4, SAVE_ORDER_OFFSET + _i4);
}
}
// recalculate checksum
_this2.writeCrc();
resolve();
_context2.next = 22;
case 2:
_context3.next = 7;
break;
case 21:
reject("No course has been saved so far");
case 4:
_context3.prev = 4;
_context3.t1 = _context3["catch"](0);
case 22:
_context2.next = 27;
break;
console.log(_context3.t1);
// TODO undo changes
case 24:
_context2.prev = 24;
_context2.t0 = _context2["catch"](0);
console.log(_context2.t0);
case 27:
case 7:
case "end":
return _context2.stop();
return _context3.stop();
}
}
}, _callee2, _this2, [[0, 24]]);
}, _callee3, _this2, [[0, 4]]);
}));
return function (_x, _x2) {
return function (_x) {
return _ref3.apply(this, arguments);

@@ -207,6 +199,6 @@ };

case "end":
return _context3.stop();
return _context4.stop();
}
}
}, _callee3, this);
}, _callee4, this);
}));

@@ -224,52 +216,31 @@

try {
if (this.data.slice(SAVE_ORDER_OFFSET, SAVE_ORDER_OFFSET + SAVE_ORDER_SIZE).readUInt32BE(0) !== 0) {
// find all unused slots
var numbers = [];
for (var i = SAVE_ORDER_SIZE - 1; i >= 0; i--) {
var index = this.data.readUInt8(SAVE_ORDER_OFFSET + i);
if (index !== 255) {
numbers.push(index);
// rename course folders
var slotToIndex = {};
Object.assign(slotToIndex, this.slotToIndex);
for (var i in this.slotToIndex) {
var value = slotToIndex[i];
var srcPath = path.resolve(this.pathToSave + "/course" + parseInt(i).pad(3));
var dstPath = path.resolve(this.pathToSave + "/course" + value.pad(3) + "_reorder");
fs.renameSync(srcPath, dstPath);
this.slotToIndex[value] = value;
this.data.writeUInt8(value, SAVE_ORDER_OFFSET + value);
}
for (var _i = 0; _i < SAVE_ORDER_SIZE; _i++) {
var _srcPath = path.resolve(this.pathToSave + "/course" + _i.pad(3) + "_reorder");
var _dstPath = path.resolve(this.pathToSave + "/course" + _i.pad(3));
try {
fs.renameSync(_srcPath, _dstPath);
} catch (err) {
if (this.slotToIndex[_i]) {
delete this.slotToIndex[_i];
}
this.data.writeUInt8(SAVE_ORDER_EMPTY, SAVE_ORDER_OFFSET + _i);
}
var missingNo = [];
for (var _i5 = 0; _i5 < SAVE_ORDER_SIZE; _i5++) {
if (!numbers.includes(_i5)) {
missingNo.push(_i5);
}
}
}
// rename course folders
for (var _i6 = 0; _i6 < SAVE_ORDER_SIZE; _i6++) {
var _index = this.data.readUInt8(SAVE_ORDER_OFFSET + _i6);
if (_index !== 255) {
var srcPath = path.resolve(this.pathToSave + "/course" + _i6.pad(3));
var dstPath = path.resolve(this.pathToSave + "/course" + _index.pad(3) + "_reorder");
fs.renameSync(srcPath, dstPath);
}
}
for (var _i7 = 0; _i7 < SAVE_ORDER_SIZE; _i7++) {
var _srcPath = path.resolve(this.pathToSave + "/course" + _i7.pad(3) + "_reorder");
var _dstPath = path.resolve(this.pathToSave + "/course" + _i7.pad(3));
try {
fs.renameSync(_srcPath, _dstPath);
} catch (err) {// ignore
}
}
// write bytes to 'save.dat'
for (var _i8 = 0; _i8 < SAVE_ORDER_SIZE; _i8++) {
if (missingNo.includes(_i8)) {
this.data.writeUInt8(SAVE_ORDER_EMPTY, SAVE_ORDER_OFFSET + _i8);
} else {
this.data.writeUInt8(_i8, SAVE_ORDER_OFFSET + _i8);
}
}
// recalculate checksum
this.writeCrc();
} else {
console.log("No course has been saved so far");
}
// recalculate checksum
this.writeCrc();
} catch (err) {
console.log(err);
// TODO undo changes
}

@@ -279,3 +250,3 @@ },

exportJpeg: function () {
var _ref4 = _asyncToGenerator(regeneratorRuntime.mark(function _callee7() {
var _ref4 = _asyncToGenerator(regeneratorRuntime.mark(function _callee8() {
var _this3 = this;

@@ -285,5 +256,5 @@

return regeneratorRuntime.wrap(function _callee7$(_context7) {
return regeneratorRuntime.wrap(function _callee8$(_context8) {
while (1) {
switch (_context7.prev = _context7.next) {
switch (_context8.prev = _context8.next) {
case 0:

@@ -295,10 +266,10 @@ promises = [];

promises.push(new Promise(function () {
var _ref5 = _asyncToGenerator(regeneratorRuntime.mark(function _callee6(resolve) {
var _ref5 = _asyncToGenerator(regeneratorRuntime.mark(function _callee7(resolve) {
var exists;
return regeneratorRuntime.wrap(function _callee6$(_context6) {
return regeneratorRuntime.wrap(function _callee7$(_context7) {
while (1) {
switch (_context6.prev = _context6.next) {
switch (_context7.prev = _context7.next) {
case 0:
exists = false;
_context6.next = 3;
_context7.next = 3;
return new Promise(function (resolve) {

@@ -313,21 +284,21 @@ fs.access(coursePath, fs.constants.R_OK | fs.constants.W_OK, function (err) {

if (!exists) {
_context6.next = 6;
_context7.next = 6;
break;
}
_context6.next = 6;
_context7.next = 6;
return Promise.all([new Promise(function () {
var _ref6 = _asyncToGenerator(regeneratorRuntime.mark(function _callee4(resolve) {
var _ref6 = _asyncToGenerator(regeneratorRuntime.mark(function _callee5(resolve) {
var tnl, jpeg;
return regeneratorRuntime.wrap(function _callee4$(_context4) {
return regeneratorRuntime.wrap(function _callee5$(_context5) {
while (1) {
switch (_context4.prev = _context4.next) {
switch (_context5.prev = _context5.next) {
case 0:
_context4.prev = 0;
_context5.prev = 0;
tnl = new Tnl(coursePath + "/thumbnail0.tnl");
_context4.next = 4;
_context5.next = 4;
return tnl.toJpeg();
case 4:
jpeg = _context4.sent;
jpeg = _context5.sent;

@@ -337,8 +308,8 @@ fs.writeFile(coursePath + "/thumbnail0.jpg", jpeg, null, function () {

});
_context4.next = 11;
_context5.next = 11;
break;
case 8:
_context4.prev = 8;
_context4.t0 = _context4["catch"](0);
_context5.prev = 8;
_context5.t0 = _context5["catch"](0);

@@ -349,25 +320,25 @@ resolve();

case "end":
return _context4.stop();
return _context5.stop();
}
}
}, _callee4, _this3, [[0, 8]]);
}, _callee5, _this3, [[0, 8]]);
}));
return function (_x4) {
return function (_x3) {
return _ref6.apply(this, arguments);
};
}()), new Promise(function () {
var _ref7 = _asyncToGenerator(regeneratorRuntime.mark(function _callee5(resolve) {
var _ref7 = _asyncToGenerator(regeneratorRuntime.mark(function _callee6(resolve) {
var tnl, jpeg;
return regeneratorRuntime.wrap(function _callee5$(_context5) {
return regeneratorRuntime.wrap(function _callee6$(_context6) {
while (1) {
switch (_context5.prev = _context5.next) {
switch (_context6.prev = _context6.next) {
case 0:
_context5.prev = 0;
_context6.prev = 0;
tnl = new Tnl(coursePath + "/thumbnail1.tnl");
_context5.next = 4;
_context6.next = 4;
return tnl.toJpeg();
case 4:
jpeg = _context5.sent;
jpeg = _context6.sent;

@@ -377,8 +348,8 @@ fs.writeFile(coursePath + "/thumbnail1.jpg", jpeg, null, function () {

});
_context5.next = 11;
_context6.next = 11;
break;
case 8:
_context5.prev = 8;
_context5.t0 = _context5["catch"](0);
_context6.prev = 8;
_context6.t0 = _context6["catch"](0);

@@ -389,9 +360,9 @@ resolve();

case "end":
return _context5.stop();
return _context6.stop();
}
}
}, _callee5, _this3, [[0, 8]]);
}, _callee6, _this3, [[0, 8]]);
}));
return function (_x5) {
return function (_x4) {
return _ref7.apply(this, arguments);

@@ -406,9 +377,9 @@ };

case "end":
return _context6.stop();
return _context7.stop();
}
}
}, _callee6, _this3);
}, _callee7, _this3);
}));
return function (_x3) {
return function (_x2) {
return _ref5.apply(this, arguments);

@@ -422,3 +393,3 @@ };

}
_context7.next = 5;
_context8.next = 5;
return Promise.all(promises);

@@ -428,6 +399,6 @@

case "end":
return _context7.stop();
return _context8.stop();
}
}
}, _callee7, this);
}, _callee8, this);
}));

@@ -442,4 +413,29 @@

exportJpegSync: function exportJpegSync() {
for (var i = 0; i < SAVE_ORDER_SIZE; i++) {
var _coursePath = path.resolve(this.pathToSave + "/course" + i.pad(3) + "/");
var exists = true;
try {
fs.accessSync(_coursePath, fs.constants.R_OK | fs.constants.W_OK);
} catch (err) {
exists = false;
}
if (exists) {
try {
var tnl = new Tnl(_coursePath + "/thumbnail0.tnl");
var jpeg = tnl.toJpegSync();
fs.writeFileSync(_coursePath + "/thumbnail0.jpg", jpeg);
} catch (err) {}
try {
var _tnl = new Tnl(_coursePath + "/thumbnail1.tnl");
var _jpeg = _tnl.toJpegSync();
fs.writeFileSync(_coursePath + "/thumbnail1.jpg", _jpeg);
} catch (err) {}
}
}
},
importJpeg: function () {
var _ref8 = _asyncToGenerator(regeneratorRuntime.mark(function _callee11() {
var _ref8 = _asyncToGenerator(regeneratorRuntime.mark(function _callee12() {
var _this4 = this;

@@ -449,5 +445,5 @@

return regeneratorRuntime.wrap(function _callee11$(_context11) {
return regeneratorRuntime.wrap(function _callee12$(_context12) {
while (1) {
switch (_context11.prev = _context11.next) {
switch (_context12.prev = _context12.next) {
case 0:

@@ -459,10 +455,10 @@ promises = [];

promises.push(new Promise(function () {
var _ref9 = _asyncToGenerator(regeneratorRuntime.mark(function _callee10(resolve) {
var _ref9 = _asyncToGenerator(regeneratorRuntime.mark(function _callee11(resolve) {
var exists;
return regeneratorRuntime.wrap(function _callee10$(_context10) {
return regeneratorRuntime.wrap(function _callee11$(_context11) {
while (1) {
switch (_context10.prev = _context10.next) {
switch (_context11.prev = _context11.next) {
case 0:
exists = false;
_context10.next = 3;
_context11.next = 3;
return new Promise(function (resolve) {

@@ -477,21 +473,21 @@ fs.access(coursePath, fs.constants.R_OK | fs.constants.W_OK, function (err) {

if (!exists) {
_context10.next = 6;
_context11.next = 6;
break;
}
_context10.next = 6;
_context11.next = 6;
return Promise.all([new Promise(function () {
var _ref10 = _asyncToGenerator(regeneratorRuntime.mark(function _callee8(resolve) {
var _ref10 = _asyncToGenerator(regeneratorRuntime.mark(function _callee9(resolve) {
var jpeg, tnl;
return regeneratorRuntime.wrap(function _callee8$(_context8) {
return regeneratorRuntime.wrap(function _callee9$(_context9) {
while (1) {
switch (_context8.prev = _context8.next) {
switch (_context9.prev = _context9.next) {
case 0:
_context8.prev = 0;
_context9.prev = 0;
jpeg = new Tnl(coursePath + "/thumbnail0.jpg");
_context8.next = 4;
_context9.next = 4;
return jpeg.fromJpeg(true);
case 4:
tnl = _context8.sent;
tnl = _context9.sent;

@@ -501,8 +497,8 @@ fs.writeFile(coursePath + "/thumbnail0.tnl", tnl, null, function () {

});
_context8.next = 11;
_context9.next = 11;
break;
case 8:
_context8.prev = 8;
_context8.t0 = _context8["catch"](0);
_context9.prev = 8;
_context9.t0 = _context9["catch"](0);

@@ -513,25 +509,25 @@ resolve();

case "end":
return _context8.stop();
return _context9.stop();
}
}
}, _callee8, _this4, [[0, 8]]);
}, _callee9, _this4, [[0, 8]]);
}));
return function (_x7) {
return function (_x6) {
return _ref10.apply(this, arguments);
};
}()), new Promise(function () {
var _ref11 = _asyncToGenerator(regeneratorRuntime.mark(function _callee9(resolve) {
var _ref11 = _asyncToGenerator(regeneratorRuntime.mark(function _callee10(resolve) {
var jpeg, tnl;
return regeneratorRuntime.wrap(function _callee9$(_context9) {
return regeneratorRuntime.wrap(function _callee10$(_context10) {
while (1) {
switch (_context9.prev = _context9.next) {
switch (_context10.prev = _context10.next) {
case 0:
_context9.prev = 0;
_context10.prev = 0;
jpeg = new Tnl(coursePath + "/thumbnail1.jpg");
_context9.next = 4;
_context10.next = 4;
return jpeg.fromJpeg(false);
case 4:
tnl = _context9.sent;
tnl = _context10.sent;

@@ -541,8 +537,8 @@ fs.writeFile(coursePath + "/thumbnail1.tnl", tnl, null, function () {

});
_context9.next = 11;
_context10.next = 11;
break;
case 8:
_context9.prev = 8;
_context9.t0 = _context9["catch"](0);
_context10.prev = 8;
_context10.t0 = _context10["catch"](0);

@@ -553,9 +549,9 @@ resolve();

case "end":
return _context9.stop();
return _context10.stop();
}
}
}, _callee9, _this4, [[0, 8]]);
}, _callee10, _this4, [[0, 8]]);
}));
return function (_x8) {
return function (_x7) {
return _ref11.apply(this, arguments);

@@ -570,9 +566,9 @@ };

case "end":
return _context10.stop();
return _context11.stop();
}
}
}, _callee10, _this4);
}, _callee11, _this4);
}));
return function (_x6) {
return function (_x5) {
return _ref9.apply(this, arguments);

@@ -586,3 +582,3 @@ };

}
_context11.next = 5;
_context12.next = 5;
return Promise.all(promises);

@@ -592,6 +588,6 @@

case "end":
return _context11.stop();
return _context12.stop();
}
}
}, _callee11, this);
}, _callee12, this);
}));

@@ -607,3 +603,3 @@

loadCourses: function () {
var _ref12 = _asyncToGenerator(regeneratorRuntime.mark(function _callee13() {
var _ref12 = _asyncToGenerator(regeneratorRuntime.mark(function _callee14() {
var _this5 = this;

@@ -613,5 +609,5 @@

return regeneratorRuntime.wrap(function _callee13$(_context13) {
return regeneratorRuntime.wrap(function _callee14$(_context14) {
while (1) {
switch (_context13.prev = _context13.next) {
switch (_context14.prev = _context14.next) {
case 0:

@@ -622,7 +618,7 @@ promises = [];

promises.push(new Promise(function () {
var _ref13 = _asyncToGenerator(regeneratorRuntime.mark(function _callee12(resolve) {
var _ref13 = _asyncToGenerator(regeneratorRuntime.mark(function _callee13(resolve) {
var exists, courseName, coursePath;
return regeneratorRuntime.wrap(function _callee12$(_context12) {
return regeneratorRuntime.wrap(function _callee13$(_context13) {
while (1) {
switch (_context12.prev = _context12.next) {
switch (_context13.prev = _context13.next) {
case 0:

@@ -632,3 +628,3 @@ exists = false;

coursePath = path.resolve(_this5.pathToSave + "/" + courseName + "/");
_context12.next = 5;
_context13.next = 5;
return new Promise(function (resolve) {

@@ -643,11 +639,11 @@ fs.access(coursePath, fs.constants.R_OK | fs.constants.W_OK, function (err) {

if (!exists) {
_context12.next = 9;
_context13.next = 9;
break;
}
_context12.next = 8;
_context13.next = 8;
return createCourse(i, coursePath);
case 8:
_this5.courses[courseName] = _context12.sent;
_this5.courses[courseName] = _context13.sent;

@@ -659,9 +655,9 @@ case 9:

case "end":
return _context12.stop();
return _context13.stop();
}
}
}, _callee12, _this5);
}, _callee13, _this5);
}));
return function (_x9) {
return function (_x8) {
return _ref13.apply(this, arguments);

@@ -675,14 +671,14 @@ };

}
_context13.next = 5;
_context14.next = 5;
return Promise.all(promises);
case 5:
return _context13.abrupt("return", this.courses);
return _context14.abrupt("return", this.courses);
case 6:
case "end":
return _context13.stop();
return _context14.stop();
}
}
}, _callee13, this);
}, _callee14, this);
}));

@@ -698,8 +694,8 @@

loadCoursesSync: function () {
var _ref14 = _asyncToGenerator(regeneratorRuntime.mark(function _callee14() {
var i, courseName, _coursePath;
var _ref14 = _asyncToGenerator(regeneratorRuntime.mark(function _callee15() {
var i, courseName, _coursePath2;
return regeneratorRuntime.wrap(function _callee14$(_context14) {
return regeneratorRuntime.wrap(function _callee15$(_context15) {
while (1) {
switch (_context14.prev = _context14.next) {
switch (_context15.prev = _context15.next) {
case 0:

@@ -710,3 +706,3 @@ i = 0;

if (!(i < SAVE_ORDER_SIZE)) {
_context14.next = 16;
_context15.next = 16;
break;

@@ -716,32 +712,32 @@ }

courseName = "course" + i.pad(3);
_coursePath = path.resolve(this.pathToSave + "/" + courseName + "/");
_context14.prev = 4;
_coursePath2 = path.resolve(this.pathToSave + "/" + courseName + "/");
_context15.prev = 4;
fs.accessSync(_coursePath, fs.constants.R_OK | fs.constants.W_OK);
_context14.next = 8;
return createCourse(i, _coursePath);
fs.accessSync(_coursePath2, fs.constants.R_OK | fs.constants.W_OK);
_context15.next = 8;
return createCourse(i, _coursePath2);
case 8:
this.courses[courseName] = _context14.sent;
_context14.next = 13;
this.courses[courseName] = _context15.sent;
_context15.next = 13;
break;
case 11:
_context14.prev = 11;
_context14.t0 = _context14["catch"](4);
_context15.prev = 11;
_context15.t0 = _context15["catch"](4);
case 13:
i++;
_context14.next = 1;
_context15.next = 1;
break;
case 16:
return _context14.abrupt("return", this.courses);
return _context15.abrupt("return", this.courses);
case 17:
case "end":
return _context14.stop();
return _context15.stop();
}
}
}, _callee14, this, [[4, 11]]);
}, _callee15, this, [[4, 11]]);
}));

@@ -748,0 +744,0 @@

@@ -59,2 +59,9 @@ "use strict";

toJpegSync: function toJpegSync() {
var data = fs.readFileSync(this.pathToFile);
var length = data.readUInt32BE(4);
return data.slice(8, 8 + length);
},
fromJpeg: function () {

@@ -61,0 +68,0 @@ var _ref2 = _asyncToGenerator(regeneratorRuntime.mark(function _callee4(isWide) {

{
"name": "cemu-smm",
"version": "1.1.0",
"version": "1.1.2",
"description": "This is a module to simplify all kinds of tasks with Loadiine Super Mario Maker save files and respectively Cemu",
"main": "index.js",
"scripts": {
"compile": "babel src --out-dir legacy"
"compile": "babel src --out-dir legacy",
"test": "node test/test"
},

@@ -9,0 +10,0 @@ "author": "Mario Reder",

@@ -8,2 +8,3 @@ const Promise = require("bluebird");

const createCourse = require("./course");
const Tnl = require("./tnl");

@@ -26,2 +27,10 @@ const SAVE_SIZE = 0xA000;

this.courses = {};
this.slotToIndex = {};
for (let i = 0; i < SAVE_ORDER_SIZE; i++) {
let index = this.data.readUInt8(SAVE_ORDER_OFFSET + i);
if (index !== 255) {
this.slotToIndex[i] = index;
}
}
}

@@ -52,68 +61,47 @@

await new Promise(async (resolve, reject) => {
await new Promise(async (resolve) => {
try {
if (this.data.slice(SAVE_ORDER_OFFSET, SAVE_ORDER_OFFSET + SAVE_ORDER_SIZE).readUInt32BE(0) !== 0) {
// find all unused slots
let numbers = [];
for (let i = SAVE_ORDER_SIZE - 1; i >= 0; i--) {
let index = this.data.readUInt8(SAVE_ORDER_OFFSET + i);
if (index !== 255) {
numbers.push(index);
}
}
let missingNo = [];
for (let i = 0; i < SAVE_ORDER_SIZE; i++) {
if (!numbers.includes(i)) {
missingNo.push(i);
}
}
// rename course folders
let promises = [];
for (let i = 0; i < SAVE_ORDER_SIZE; i++) {
let index = this.data.readUInt8(SAVE_ORDER_OFFSET + i);
if (index !== 255) {
promises.push(new Promise((resolve) => {
let srcPath = path.resolve(`${this.pathToSave}/course${i.pad(3)}`);
let dstPath = path.resolve(`${this.pathToSave}/course${(index).pad(3)}_reorder`);
fs.rename(srcPath, dstPath, () => {
resolve();
});
resolve();
}));
}
}
await Promise.all(promises);
promises = [];
for (let i = 0; i < SAVE_ORDER_SIZE; i++) {
promises.push(new Promise((resolve) => {
let srcPath = path.resolve(`${this.pathToSave}/course${i.pad(3)}_reorder`);
let dstPath = path.resolve(`${this.pathToSave}/course${i.pad(3)}`);
fs.rename(srcPath, dstPath, () => {
// somehow this does not throw an error if srcPath does not exist
resolve();
});
// rename course folders
let promises = [];
let slotToIndex = {};
Object.assign(slotToIndex, this.slotToIndex);
for (let i in slotToIndex) {
promises.push(new Promise((resolve) => {
let value = slotToIndex[i];
let srcPath = path.resolve(`${this.pathToSave}/course${parseInt(i).pad(3)}`);
let dstPath = path.resolve(`${this.pathToSave}/course${value.pad(3)}_reorder`);
fs.rename(srcPath, dstPath, () => {
this.slotToIndex[value] = value;
this.data.writeUInt8(value, SAVE_ORDER_OFFSET + value);
resolve();
}));
}
await Promise.all(promises);
});
resolve();
}));
}
await Promise.all(promises);
promises = [];
for (let i = 0; i < SAVE_ORDER_SIZE; i++) {
promises.push(new Promise((resolve) => {
let srcPath = path.resolve(`${this.pathToSave}/course${i.pad(3)}_reorder`);
let dstPath = path.resolve(`${this.pathToSave}/course${i.pad(3)}`);
fs.rename(srcPath, dstPath, (err) => {
if (err) {
if (this.slotToIndex[i]) {
delete this.slotToIndex[i];
}
this.data.writeUInt8(SAVE_ORDER_EMPTY, SAVE_ORDER_OFFSET + i);
}
resolve();
});
}));
}
await Promise.all(promises);
// write bytes to 'save.dat'
for (let i = 0; i < SAVE_ORDER_SIZE; i++) {
if (missingNo.includes(i)) {
this.data.writeUInt8(SAVE_ORDER_EMPTY, SAVE_ORDER_OFFSET + i);
} else {
this.data.writeUInt8(i, SAVE_ORDER_OFFSET + i);
}
}
// recalculate checksum
this.writeCrc();
// recalculate checksum
this.writeCrc();
resolve();
} else {
reject("No course has been saved so far");
}
resolve();
} catch (err) {
console.log(err);
// TODO undo changes
}

@@ -127,52 +115,31 @@ });

try {
if (this.data.slice(SAVE_ORDER_OFFSET, SAVE_ORDER_OFFSET + SAVE_ORDER_SIZE).readUInt32BE(0) !== 0) {
// find all unused slots
let numbers = [];
for (let i = SAVE_ORDER_SIZE - 1; i >= 0; i--) {
let index = this.data.readUInt8(SAVE_ORDER_OFFSET + i);
if (index !== 255) {
numbers.push(index);
// rename course folders
let slotToIndex = {};
Object.assign(slotToIndex, this.slotToIndex);
for (let i in this.slotToIndex) {
let value = slotToIndex[i];
let srcPath = path.resolve(`${this.pathToSave}/course${parseInt(i).pad(3)}`);
let dstPath = path.resolve(`${this.pathToSave}/course${value.pad(3)}_reorder`);
fs.renameSync(srcPath, dstPath);
this.slotToIndex[value] = value;
this.data.writeUInt8(value, SAVE_ORDER_OFFSET + value);
}
for (let i = 0; i < SAVE_ORDER_SIZE; i++) {
let srcPath = path.resolve(`${this.pathToSave}/course${i.pad(3)}_reorder`);
let dstPath = path.resolve(`${this.pathToSave}/course${i.pad(3)}`);
try {
fs.renameSync(srcPath, dstPath);
} catch (err) {
if (this.slotToIndex[i]) {
delete this.slotToIndex[i];
}
this.data.writeUInt8(SAVE_ORDER_EMPTY, SAVE_ORDER_OFFSET + i);
}
let missingNo = [];
for (let i = 0; i < SAVE_ORDER_SIZE; i++) {
if (!numbers.includes(i)) {
missingNo.push(i);
}
}
}
// rename course folders
for (let i = 0; i < SAVE_ORDER_SIZE; i++) {
let index = this.data.readUInt8(SAVE_ORDER_OFFSET + i);
if (index !== 255) {
let srcPath = path.resolve(`${this.pathToSave}/course${i.pad(3)}`);
let dstPath = path.resolve(`${this.pathToSave}/course${(index).pad(3)}_reorder`);
fs.renameSync(srcPath, dstPath);
}
}
for (let i = 0; i < SAVE_ORDER_SIZE; i++) {
let srcPath = path.resolve(`${this.pathToSave}/course${i.pad(3)}_reorder`);
let dstPath = path.resolve(`${this.pathToSave}/course${i.pad(3)}`);
try {
fs.renameSync(srcPath, dstPath);
} catch (err) { // ignore
}
}
// write bytes to 'save.dat'
for (let i = 0; i < SAVE_ORDER_SIZE; i++) {
if (missingNo.includes(i)) {
this.data.writeUInt8(SAVE_ORDER_EMPTY, SAVE_ORDER_OFFSET + i);
} else {
this.data.writeUInt8(i, SAVE_ORDER_OFFSET + i);
}
}
// recalculate checksum
this.writeCrc();
} else {
console.log("No course has been saved so far");
}
// recalculate checksum
this.writeCrc();
} catch (err) {
console.log(err);
// TODO undo changes
}

@@ -228,2 +195,30 @@

exportJpegSync: function () {
for (let i = 0; i < SAVE_ORDER_SIZE; i++) {
let coursePath = path.resolve(`${this.pathToSave}/course${i.pad(3)}/`);
let exists = true;
try {
fs.accessSync(coursePath, fs.constants.R_OK | fs.constants.W_OK);
} catch (err) {
exists = false;
}
if (exists) {
try {
let tnl = new Tnl(coursePath + "/thumbnail0.tnl");
let jpeg = tnl.toJpegSync();
fs.writeFileSync(coursePath + "/thumbnail0.jpg", jpeg)
} catch (err) {
}
try {
let tnl = new Tnl(coursePath + "/thumbnail1.tnl");
let jpeg = tnl.toJpegSync();
fs.writeFileSync(coursePath + "/thumbnail1.jpg", jpeg);
} catch (err) {
}
}
}
},
importJpeg: async function () {

@@ -230,0 +225,0 @@

@@ -42,2 +42,10 @@ const Promise = require("bluebird");

toJpegSync: function () {
let data = fs.readFileSync(this.pathToFile);
let length = data.readUInt32BE(4);
return data.slice(8, 8 + length);
},
fromJpeg: async function (isWide, doClip = false) {

@@ -44,0 +52,0 @@

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap

Packages

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc