Skip to content

Commit ab770ea

Browse files
committed
add readDirSync() and unlinkSync()
1 parent 10b51b8 commit ab770ea

File tree

7 files changed

+45
-20
lines changed

7 files changed

+45
-20
lines changed

cpp/HybridMmfilePackage.cpp

Lines changed: 33 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -37,28 +37,42 @@ double HybridMmfilePackage::getEncryptedFileSize(const std::string& path) {
3737
return getFileSize(getAbsolutePath(path)) - sizeof(EncryptedFileHeader);
3838
}
3939

40+
static std::vector<ReadDirItem> _readDir(const std::string& absPath) {
41+
std::vector<ReadDirItem> items;
42+
try {
43+
for (const auto& entry : std::filesystem::directory_iterator(absPath)) {
44+
ReadDirItem item;
45+
item.name = entry.path().filename().string();
46+
item.path = entry.path().string();
47+
item.isFile = entry.is_regular_file();
48+
item.isDirectory = entry.is_directory();
49+
item.size = item.isFile ? entry.file_size() : 0;
50+
item.mtime = std::chrono::duration_cast<std::chrono::seconds>(entry.last_write_time().time_since_epoch()).count();
51+
items.push_back(item);
52+
}
53+
} catch (const std::exception& e) {
54+
// Handle errors (e.g., directory does not exist, permissions issue)
55+
throw std::runtime_error(std::string("Failed to read directory: ") + e.what());
56+
}
57+
return items;
58+
}
59+
60+
std::vector<ReadDirItem> HybridMmfilePackage::readDirSync(const std::string& path) {
61+
std::string absPath = getAbsolutePath(path);
62+
return _readDir(absPath);
63+
}
64+
4065
std::shared_ptr<Promise<std::vector<ReadDirItem>>> HybridMmfilePackage::readDir(const std::string& path) {
4166
std::string absPath = getAbsolutePath(path);
4267
return Promise<std::vector<ReadDirItem>>::async([=]() -> std::vector<ReadDirItem> {
4368
// This runs on a separate Thread!
44-
std::vector<ReadDirItem> items;
45-
try {
46-
for (const auto& entry : std::filesystem::directory_iterator(absPath)) {
47-
ReadDirItem item;
48-
item.name = entry.path().filename().string();
49-
item.path = entry.path().string();
50-
item.isFile = entry.is_regular_file();
51-
item.isDirectory = entry.is_directory();
52-
item.size = item.isFile ? entry.file_size() : 0;
53-
item.mtime = std::chrono::duration_cast<std::chrono::seconds>(entry.last_write_time().time_since_epoch()).count();
54-
items.push_back(item);
55-
}
56-
} catch (const std::exception& e) {
57-
// Handle errors (e.g., directory does not exist, permissions issue)
58-
throw std::runtime_error(std::string("Failed to read directory: ") + e.what());
59-
}
60-
return items;
61-
});
69+
return _readDir(absPath);
70+
});
71+
}
72+
73+
void HybridMmfilePackage::unlinkSync(const std::string& path) {
74+
std::string absPath = getAbsolutePath(path);
75+
std::filesystem::remove_all(absPath);
6276
}
6377

6478
std::shared_ptr<Promise<void>> HybridMmfilePackage::unlink(const std::string& path) {
@@ -69,4 +83,5 @@ std::shared_ptr<Promise<void>> HybridMmfilePackage::unlink(const std::string& pa
6983
});
7084
}
7185

86+
7287
} // namespace margelo::nitro::mmfile

cpp/HybridMmfilePackage.hpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,10 @@ class HybridMmfilePackage : public HybridMmfilePackageSpec
2828
double getFileSize(const std::string& path) override;
2929
double getEncryptedFileSize(const std::string& path) override;
3030

31+
std::vector<ReadDirItem> readDirSync(const std::string& path) override;
3132
std::shared_ptr<Promise<std::vector<ReadDirItem>>> readDir(const std::string& path) override;
33+
34+
void unlinkSync(const std::string& path) override;
3235
std::shared_ptr<Promise<void>> unlink(const std::string& path) override;
3336

3437
private:

cpp/tests/MMapFileBench.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ class FileAppendBenchmark : public ::testing::TestWithParam<size_t> {
3434
mmapEncryptedFile.clear();
3535
mmapEncryptedFile.close();
3636
remove(mmencryptedfilePath.c_str());
37-
close(fd);
37+
close(fd);
3838
remove(filePath.c_str());
3939
}
4040

example/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,10 @@
1010
"test": "jest"
1111
},
1212
"dependencies": {
13+
"@d4l/react-native-mmfile": "file:d4l-react-native-mmfile-1.1.1.tgz",
1314
"react": "19.0.0",
1415
"react-native": "0.78.1",
1516
"react-native-fs": "^2.20.0",
16-
"react-native-mmfile": "file:react-native-mmfile-1.1.0.tgz",
1717
"react-native-mmkv": "^3.2.0",
1818
"react-native-nitro-modules": "^0.25.2"
1919
},

nitrogen/generated/shared/c++/HybridMmfilePackageSpec.cpp

Lines changed: 2 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

nitrogen/generated/shared/c++/HybridMmfilePackageSpec.hpp

Lines changed: 2 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/specs/MmfilePackage.nitro.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,5 +21,8 @@ export interface MmfilePackage extends HybridObject<{ ios: 'c++', android: 'c++'
2121
getEncryptedFileSize(path: string): number;
2222

2323
readDir(path: string): Promise<ReadDirItem[]>
24+
readDirSync(path: string): ReadDirItem[]
25+
2426
unlink(path: string): Promise<void>;
27+
unlinkSync(path: string): void;
2528
}

0 commit comments

Comments
 (0)