datoriginalfilesdatabase.cpp 3.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. #include "datoriginalfilesdatabase.h"
  2. #include <QSqlError>
  3. #include <string>
  4. DatOriginalFilesDatabase::DatOriginalFilesDatabase(QString database_path) :
  5. orig_files_db(QSqlDatabase::addDatabase("QSQLITE", database_path)),
  6. _add_file_prepared_query(orig_files_db)
  7. {
  8. orig_files_db.setDatabaseName(database_path);
  9. orig_files_db.open();
  10. orig_files_db.exec(_create_database_query);
  11. orig_files_db.exec("PRAGMA synchronous = OFF");
  12. orig_files_db.exec("PRAGMA count_changes = OFF");
  13. orig_files_db.exec("PRAGMA journal_mode = MEMORY");
  14. orig_files_db.exec("PRAGMA temp_store = MEMORY");
  15. orig_files_db.exec("PRAGMA encoding = \"UTF-8\";");
  16. _add_file_prepared_query.prepare(_add_file_query);
  17. }
  18. DatOriginalFilesDatabase::~DatOriginalFilesDatabase() {
  19. closeDatabase();
  20. }
  21. void DatOriginalFilesDatabase::addFile(int file_id, int dat_id, int version, int iteration, const LOTRO_DAT::SubfileData &data) {
  22. std::stringstream options_stream;
  23. options_stream << data.options;
  24. const QString options = QString::fromStdString(options_stream.str());
  25. qDebug() << "AAAAAAdding file " << file_id << dat_id << version << iteration;
  26. _add_file_prepared_query.bindValue(":file_id", file_id);
  27. _add_file_prepared_query.bindValue(":dat_id", dat_id);
  28. _add_file_prepared_query.bindValue(":version", version);
  29. _add_file_prepared_query.bindValue(":iteration", iteration);
  30. _add_file_prepared_query.bindValue(":options", options);
  31. _add_file_prepared_query.bindValue(":binary_data", QByteArray(reinterpret_cast<char*>(data.binary_data.data()), data.binary_data.size()));
  32. _add_file_prepared_query.bindValue(":text_data", QString::fromStdU16String(data.text_data));
  33. if (!_add_file_prepared_query.exec()) {
  34. qWarning() << _add_file_prepared_query.lastError();
  35. }
  36. }
  37. bool DatOriginalFilesDatabase::getFile(int file_id, int &dat_id, int &version, int &iteration, LOTRO_DAT::SubfileData &data) {
  38. QSqlQuery get_file_query;
  39. get_file_query.exec(_get_file_query.arg(file_id));
  40. if (!get_file_query.next()) {
  41. return false;
  42. }
  43. dat_id = get_file_query.value(1).toInt();
  44. version = get_file_query.value(2).toInt();
  45. iteration = get_file_query.value(3).toInt();
  46. const QString options = QString::fromUtf8(get_file_query.value(4).toByteArray());
  47. data.options = YAML::Load(options.toStdString());
  48. const QByteArray binary_data = get_file_query.value(5).toByteArray();
  49. data.binary_data = LOTRO_DAT::BinaryData(binary_data.data(), binary_data.size());
  50. data.text_data = QString::fromUtf8(get_file_query.value(6).toByteArray()).toStdU16String();
  51. return true;
  52. }
  53. bool DatOriginalFilesDatabase::fileExists(int file_id) {
  54. QSqlQuery get_file_query;
  55. get_file_query.exec(_get_file_query.arg(file_id));
  56. return get_file_query.next();
  57. }
  58. void DatOriginalFilesDatabase::removeDatabase() {
  59. orig_files_db.close();
  60. QFile::remove(orig_files_db.databaseName());
  61. }
  62. void DatOriginalFilesDatabase::closeDatabase() {
  63. orig_files_db.close();
  64. }