|
|
@@ -13,6 +13,15 @@ bool flipper_http_append_to_file(
|
|
|
File* file = storage_file_alloc(storage);
|
|
|
|
|
|
if(start_new_file) {
|
|
|
+ // Delete the file if it already exists
|
|
|
+ if(storage_file_exists(storage, file_path)) {
|
|
|
+ if(!storage_simply_remove_recursive(storage, file_path)) {
|
|
|
+ FURI_LOG_E(HTTP_TAG, "Failed to delete file: %s", file_path);
|
|
|
+ storage_file_free(file);
|
|
|
+ furi_record_close(RECORD_STORAGE);
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ }
|
|
|
// Open the file in write mode
|
|
|
if(!storage_file_open(file, file_path, FSAM_WRITE, FSOM_CREATE_ALWAYS)) {
|
|
|
FURI_LOG_E(HTTP_TAG, "Failed to open file for writing: %s", file_path);
|
|
|
@@ -156,10 +165,14 @@ int32_t flipper_http_worker(void* context) {
|
|
|
// Write to file if buffer is full
|
|
|
if(file_buffer_len >= FILE_BUFFER_SIZE) {
|
|
|
if(!flipper_http_append_to_file(
|
|
|
- file_buffer, file_buffer_len, false, fhttp.file_path)) {
|
|
|
+ file_buffer,
|
|
|
+ file_buffer_len,
|
|
|
+ fhttp.just_started_bytes,
|
|
|
+ fhttp.file_path)) {
|
|
|
FURI_LOG_E(HTTP_TAG, "Failed to append data to file");
|
|
|
}
|
|
|
file_buffer_len = 0;
|
|
|
+ fhttp.just_started_bytes = false;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
@@ -1149,6 +1162,7 @@ void flipper_http_rx_callback(const char* line, void* context) {
|
|
|
fhttp.state = RECEIVING;
|
|
|
// for GET request, save data only if it's a bytes request
|
|
|
fhttp.save_bytes = fhttp.is_bytes_request;
|
|
|
+ fhttp.just_started_bytes = true;
|
|
|
return;
|
|
|
} else if(strstr(line, "[POST/SUCCESS]") != NULL) {
|
|
|
FURI_LOG_I(HTTP_TAG, "POST request succeeded.");
|
|
|
@@ -1157,6 +1171,7 @@ void flipper_http_rx_callback(const char* line, void* context) {
|
|
|
fhttp.state = RECEIVING;
|
|
|
// for POST request, save data only if it's a bytes request
|
|
|
fhttp.save_bytes = fhttp.is_bytes_request;
|
|
|
+ fhttp.just_started_bytes = true;
|
|
|
return;
|
|
|
} else if(strstr(line, "[PUT/SUCCESS]") != NULL) {
|
|
|
FURI_LOG_I(HTTP_TAG, "PUT request succeeded.");
|