|
@@ -151,6 +151,48 @@ namespace LOTRO_DAT {
|
|
|
}
|
|
|
|
|
|
|
|
|
+
|
|
|
+ /*!
|
|
|
+ * \author Ivan Arkhipov
|
|
|
+ * \date 21.10.2018
|
|
|
+ * Извлечение в базу данных файла с заданным id
|
|
|
+ * \param[in] file_id ID файла
|
|
|
+ * \param[in] db Указатель на объект базы данных
|
|
|
+ */
|
|
|
+
|
|
|
+ DatOperationResult<> DatExporter::ExtractFileById(long long file_id, Database *db) {
|
|
|
+ if (!db)
|
|
|
+ return DatOperationResult<>(ERROR, "EXTRACTFILEBYIDTODB: database is nullptr");
|
|
|
+
|
|
|
+ dat->GetStatusModule().SetStatus(DatStatus::E_EXTRACTING);
|
|
|
+ dat->GetStatusModule().SetPercentage(50);
|
|
|
+ LOG(INFO) << "Extracting file with id = " << file_id << "to database...";
|
|
|
+
|
|
|
+ auto operation_GetFile = dat->GetFileSystem().GetFile(file_id);
|
|
|
+ if (operation_GetFile.result == ERROR) {
|
|
|
+ dat->GetStatusModule().ClearAll();
|
|
|
+ return DatOperationResult<>(ERROR, "EXTRACTFILEBYIDTODB: File not found! id = " + std::to_string(file_id));
|
|
|
+ }
|
|
|
+ std::shared_ptr<SubFile> file = operation_GetFile.value;
|
|
|
+
|
|
|
+ auto operation_GetFileData = dat->GetFileSystem().GetFileData(*file, 8);
|
|
|
+ if (operation_GetFileData.result == ERROR) {
|
|
|
+ dat->GetStatusModule().ClearAll();
|
|
|
+ return DatOperationResult<>(ERROR, "EXTRACTFILEBYIDTODB: Can't get data for id = " + std::to_string(file_id));
|
|
|
+ }
|
|
|
+
|
|
|
+ SubfileData export_data = file->PrepareForExport(operation_GetFileData.value);
|
|
|
+
|
|
|
+ bool result = db->PushFile(export_data);
|
|
|
+
|
|
|
+ dat->GetStatusModule().ClearAll();
|
|
|
+ if (!result)
|
|
|
+ return DatOperationResult<>(ERROR, "EXTRACTFILEBYIDTODB: Cannot export file" + std::to_string(file_id));
|
|
|
+
|
|
|
+ LOG(INFO) << "Successfully exported file " << file_id << " to database";
|
|
|
+ return DatOperationResult<>(SUCCESS);
|
|
|
+ }
|
|
|
+
|
|
|
/*!
|
|
|
* \author Gi1dor
|
|
|
* \date 05.07.2018
|
|
@@ -171,5 +213,4 @@ namespace LOTRO_DAT {
|
|
|
|
|
|
return DatOperationResult<>();
|
|
|
}
|
|
|
-
|
|
|
};
|