Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
35 changes: 34 additions & 1 deletion examples/companion_radio/DataStore.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -563,6 +563,7 @@ bool DataStore::putBlobByKey(const uint8_t key[], int key_len, const uint8_t src
bool DataStore::deleteBlobByKey(const uint8_t key[], int key_len) {
return true; // this is just a stub on NRF52/STM32 platforms
}
void DataStore::cleanOrphanBlobs(DataStoreHost* host) {}
#else
inline void makeBlobPath(const uint8_t key[], int key_len, char* path, size_t path_size) {
char fname[18];
Expand Down Expand Up @@ -606,7 +607,39 @@ bool DataStore::deleteBlobByKey(const uint8_t key[], int key_len) {
makeBlobPath(key, key_len, path, sizeof(path));

_fs->remove(path);

return true; // return true even if file did not exist
}

void DataStore::cleanOrphanBlobs(DataStoreHost* host) {
if (_fs->exists("/bl/.cleaned")) return;
MESH_DEBUG_PRINTLN("Cleaning orphan blobs...");
File root = openRead("/bl");
if (root) {
for (File f = root.openNextFile(); f; f = root.openNextFile()) {
const char* name = f.name();
f.close();
if (name[0] == '.' || strlen(name) != 16) continue;
uint8_t file_key[8];
if (!mesh::Utils::fromHex(file_key, 8, name)) continue;
bool found = false;
ContactInfo c;
for (uint32_t i = 0; host->getContactForSave(i, c) && !found; i++) {
found = (memcmp(file_key, c.id.pub_key, 8) == 0);
}
if (!found) {
char path[24];
sprintf(path, "/bl/%s", name);
_fs->remove(path);
}
}
root.close();
}
#if defined(ESP32)
File m = _fs->open("/bl/.cleaned", "w", true);
#else
File m = _fs->open("/bl/.cleaned", "w");
#endif
if (m) m.close();
}
#endif
1 change: 1 addition & 0 deletions examples/companion_radio/DataStore.h
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,7 @@ class DataStore {
uint8_t getBlobByKey(const uint8_t key[], int key_len, uint8_t dest_buf[]);
bool putBlobByKey(const uint8_t key[], int key_len, const uint8_t src_buf[], uint8_t len);
bool deleteBlobByKey(const uint8_t key[], int key_len);
void cleanOrphanBlobs(DataStoreHost* host);
File openRead(const char* filename);
File openRead(FILESYSTEM* fs, const char* filename);
bool removeFile(const char* filename);
Expand Down
3 changes: 3 additions & 0 deletions examples/companion_radio/MyMesh.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -864,6 +864,9 @@ void MyMesh::begin(bool has_display) {
resetContacts();
_store->loadContacts(this);
bootstrapRTCfromContacts();

_store->cleanOrphanBlobs(this);

addChannel("Public", PUBLIC_GROUP_PSK); // pre-configure Andy's public channel
_store->loadChannels(this);

Expand Down