summaryrefslogtreecommitdiff
path: root/filemetadata.cpp
diff options
context:
space:
mode:
authorRusty Wagner <rusty@vector35.com>2016-08-30 22:05:21 -0400
committerRusty Wagner <rusty@vector35.com>2016-08-30 22:05:21 -0400
commit5b9887694a608b263f58fecfc3fa747b5f8dddf8 (patch)
tree523d576b8b55693c0c495a7ba5f5f37b98ab6d98 /filemetadata.cpp
parent3c19753e3ec474d4c84110b9e6ab8ef1f1971fe2 (diff)
parent3978e18b09ca745fd08defb8f00fbece267beaf2 (diff)
Merge branch 'analysis_cache' into dev
Diffstat (limited to 'filemetadata.cpp')
-rw-r--r--filemetadata.cpp43
1 files changed, 43 insertions, 0 deletions
diff --git a/filemetadata.cpp b/filemetadata.cpp
index 51e152bf..b3764167 100644
--- a/filemetadata.cpp
+++ b/filemetadata.cpp
@@ -25,6 +25,19 @@ using namespace Json;
using namespace std;
+struct DatabaseProgressCallbackContext
+{
+ std::function<void(size_t, size_t)> func;
+};
+
+
+static void DatabaseProgressCallback(void* ctxt, size_t progress, size_t total)
+{
+ DatabaseProgressCallbackContext* cb = (DatabaseProgressCallbackContext*)ctxt;
+ cb->func(progress, total);
+}
+
+
char* NavigationHandler::GetCurrentViewCallback(void* ctxt)
{
NavigationHandler* handler = (NavigationHandler*)ctxt;
@@ -246,6 +259,15 @@ bool FileMetadata::CreateDatabase(const string& name, BinaryView* data)
}
+bool FileMetadata::CreateDatabase(const string& name, BinaryView* data,
+ const function<void(size_t progress, size_t total)>& progressCallback)
+{
+ DatabaseProgressCallbackContext cb;
+ cb.func = progressCallback;
+ return BNCreateDatabaseWithProgress(data->GetObject(), name.c_str(), &cb, DatabaseProgressCallback);
+}
+
+
Ref<BinaryView> FileMetadata::OpenExistingDatabase(const string& path)
{
BNBinaryView* data = BNOpenExistingDatabase(m_object, path.c_str());
@@ -255,12 +277,33 @@ Ref<BinaryView> FileMetadata::OpenExistingDatabase(const string& path)
}
+Ref<BinaryView> FileMetadata::OpenExistingDatabase(const string& path,
+ const function<void(size_t progress, size_t total)>& progressCallback)
+{
+ DatabaseProgressCallbackContext cb;
+ cb.func = progressCallback;
+ BNBinaryView* data = BNOpenExistingDatabaseWithProgress(m_object, path.c_str(), &cb, DatabaseProgressCallback);
+ if (!data)
+ return nullptr;
+ return new BinaryView(data);
+}
+
+
bool FileMetadata::SaveAutoSnapshot(BinaryView* data)
{
return BNSaveAutoSnapshot(data->GetObject());
}
+bool FileMetadata::SaveAutoSnapshot(BinaryView* data,
+ const function<void(size_t progress, size_t total)>& progressCallback)
+{
+ DatabaseProgressCallbackContext cb;
+ cb.func = progressCallback;
+ return BNSaveAutoSnapshotWithProgress(data->GetObject(), &cb, DatabaseProgressCallback);
+}
+
+
void FileMetadata::BeginUndoActions()
{
BNBeginUndoActions(m_object);