mirror of
https://github.com/coop-deluxe/sm64coopdx.git
synced 2024-11-25 13:35:12 +00:00
Close modfile at the correct time when downloading
This commit is contained in:
parent
26a465fd80
commit
5424b1bb69
5 changed files with 9 additions and 11 deletions
|
@ -738,9 +738,8 @@
|
||||||
|
|
||||||
--- @class ModFile
|
--- @class ModFile
|
||||||
--- @field public cachedPath string
|
--- @field public cachedPath string
|
||||||
--- @field public complete boolean
|
|
||||||
--- @field public curOffset integer
|
|
||||||
--- @field public relativePath string
|
--- @field public relativePath string
|
||||||
|
--- @field public wroteBytes integer
|
||||||
|
|
||||||
--- @class ModeTransitionInfo
|
--- @class ModeTransitionInfo
|
||||||
--- @field public frame integer
|
--- @field public frame integer
|
||||||
|
|
|
@ -1053,9 +1053,8 @@
|
||||||
| Field | Type | Access |
|
| Field | Type | Access |
|
||||||
| ----- | ---- | ------ |
|
| ----- | ---- | ------ |
|
||||||
| cachedPath | `string` | read-only |
|
| cachedPath | `string` | read-only |
|
||||||
| complete | `boolean` | read-only |
|
|
||||||
| curOffset | `integer` | read-only |
|
|
||||||
| relativePath | `string` | read-only |
|
| relativePath | `string` | read-only |
|
||||||
|
| wroteBytes | `integer` | read-only |
|
||||||
|
|
||||||
[:arrow_up_small:](#)
|
[:arrow_up_small:](#)
|
||||||
|
|
||||||
|
|
|
@ -854,15 +854,14 @@ static struct LuaObjectField sModFields[LUA_MOD_FIELD_COUNT] = {
|
||||||
// { "size", LVT_???, offsetof(struct Mod, size), true, LOT_??? }, <--- UNIMPLEMENTED
|
// { "size", LVT_???, offsetof(struct Mod, size), true, LOT_??? }, <--- UNIMPLEMENTED
|
||||||
};
|
};
|
||||||
|
|
||||||
#define LUA_MOD_FILE_FIELD_COUNT 4
|
#define LUA_MOD_FILE_FIELD_COUNT 3
|
||||||
static struct LuaObjectField sModFileFields[LUA_MOD_FILE_FIELD_COUNT] = {
|
static struct LuaObjectField sModFileFields[LUA_MOD_FILE_FIELD_COUNT] = {
|
||||||
{ "cachedPath", LVT_STRING_P, offsetof(struct ModFile, cachedPath), true, LOT_NONE },
|
{ "cachedPath", LVT_STRING_P, offsetof(struct ModFile, cachedPath), true, LOT_NONE },
|
||||||
{ "complete", LVT_BOOL, offsetof(struct ModFile, complete), true, LOT_NONE },
|
|
||||||
{ "curOffset", LVT_U64, offsetof(struct ModFile, curOffset), true, LOT_NONE },
|
|
||||||
// { "dataHash", LOT_???, offsetof(struct ModFile, dataHash), true, LOT_??? }, <--- UNIMPLEMENTED
|
// { "dataHash", LOT_???, offsetof(struct ModFile, dataHash), true, LOT_??? }, <--- UNIMPLEMENTED
|
||||||
// { "fp", LVT_???, offsetof(struct ModFile, fp), true, LOT_??? }, <--- UNIMPLEMENTED
|
// { "fp", LVT_???, offsetof(struct ModFile, fp), true, LOT_??? }, <--- UNIMPLEMENTED
|
||||||
{ "relativePath", LVT_STRING, offsetof(struct ModFile, relativePath), true, LOT_NONE },
|
{ "relativePath", LVT_STRING, offsetof(struct ModFile, relativePath), true, LOT_NONE },
|
||||||
// { "size", LVT_???, offsetof(struct ModFile, size), true, LOT_??? }, <--- UNIMPLEMENTED
|
// { "size", LVT_???, offsetof(struct ModFile, size), true, LOT_??? }, <--- UNIMPLEMENTED
|
||||||
|
{ "wroteBytes", LVT_U64, offsetof(struct ModFile, wroteBytes), true, LOT_NONE },
|
||||||
};
|
};
|
||||||
|
|
||||||
#define LUA_MODE_TRANSITION_INFO_FIELD_COUNT 6
|
#define LUA_MODE_TRANSITION_INFO_FIELD_COUNT 6
|
||||||
|
|
|
@ -12,8 +12,7 @@ struct ModFile {
|
||||||
size_t size;
|
size_t size;
|
||||||
|
|
||||||
FILE* fp;
|
FILE* fp;
|
||||||
u64 curOffset;
|
u64 wroteBytes;
|
||||||
bool complete;
|
|
||||||
u8 dataHash[16];
|
u8 dataHash[16];
|
||||||
char* cachedPath;
|
char* cachedPath;
|
||||||
};
|
};
|
||||||
|
|
|
@ -322,6 +322,7 @@ static void open_mod_file(struct Mod* mod, struct ModFile* file) {
|
||||||
|
|
||||||
mod_file_create_directories(mod, file);
|
mod_file_create_directories(mod, file);
|
||||||
|
|
||||||
|
file->wroteBytes = 0;
|
||||||
file->fp = fopen(fullPath, "wb");
|
file->fp = fopen(fullPath, "wb");
|
||||||
if (file->fp == NULL) {
|
if (file->fp == NULL) {
|
||||||
LOG_ERROR("unable to open for write: '%s' - '%s'", fullPath, strerror(errno));
|
LOG_ERROR("unable to open for write: '%s' - '%s'", fullPath, strerror(errno));
|
||||||
|
@ -399,7 +400,7 @@ after_group:;
|
||||||
u64 fileWriteLength = MIN((modFile->size - fileWriteOffset), (chunkLength - chunkPour));
|
u64 fileWriteLength = MIN((modFile->size - fileWriteOffset), (chunkLength - chunkPour));
|
||||||
|
|
||||||
// read from file, filling chunk
|
// read from file, filling chunk
|
||||||
if (!modFile->cachedPath) {
|
if (!modFile->cachedPath && (modFile->wroteBytes < modFile->size)) {
|
||||||
open_mod_file(mod, modFile);
|
open_mod_file(mod, modFile);
|
||||||
if (modFile->fp == NULL) {
|
if (modFile->fp == NULL) {
|
||||||
LOG_ERROR("Failed to open file for download write: %s", modFile->cachedPath);
|
LOG_ERROR("Failed to open file for download write: %s", modFile->cachedPath);
|
||||||
|
@ -407,8 +408,9 @@ after_group:;
|
||||||
}
|
}
|
||||||
fseek(modFile->fp, fileWriteOffset, SEEK_SET);
|
fseek(modFile->fp, fileWriteOffset, SEEK_SET);
|
||||||
fwrite(&chunk[chunkPour], sizeof(u8), fileWriteLength, modFile->fp);
|
fwrite(&chunk[chunkPour], sizeof(u8), fileWriteLength, modFile->fp);
|
||||||
|
modFile->wroteBytes += fileWriteLength;
|
||||||
|
|
||||||
if (modFile->fp != NULL) {
|
if (modFile->wroteBytes >= modFile->size) {
|
||||||
fflush(modFile->fp);
|
fflush(modFile->fp);
|
||||||
fclose(modFile->fp);
|
fclose(modFile->fp);
|
||||||
modFile->fp = NULL;
|
modFile->fp = NULL;
|
||||||
|
|
Loading…
Reference in a new issue