PictureDao.cpp 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. #include "PictureDao.h"
  2. #include <QSqlQuery>
  3. using namespace std;
  4. PictureDao::PictureDao(QSqlDatabase &database) : mDatabase(database) {}
  5. void PictureDao::init() const {
  6. if (!mDatabase.tables().contains("pictures")) {
  7. QSqlQuery query(mDatabase);
  8. query.exec(
  9. "CREATE TABLE pictures(id INTEGER PRIMARY KEY AUTOINCRMENT, album_id "
  10. "INTEGER, url TEXT)");
  11. }
  12. }
  13. void PictureDao::addPictureInAlbum(int albumId, Picture &picture) const {
  14. QSqlQuery query(mDatabase);
  15. query.prepare("INSERT INTO pictures(album_id,url) VALUES(:album_id,:url)");
  16. query.bindValue(":album_id", albumId);
  17. query.bindValue(":url", picture.fileUrl().url());
  18. }
  19. void PictureDao::removePicture(int id) const {
  20. QSqlQuery query(mDatabase);
  21. query.prepare("DELETE FROM pictures WHERE id=:id");
  22. query.bindValue(":id", id);
  23. query.exec();
  24. }
  25. void PictureDao::removePictureForAlbum(int albumId) const {
  26. QSqlQuery query(mDatabase);
  27. query.prepare("DELETE FROM pictures WHERE album_id=:albumId");
  28. query.bindValue(":albumid", albumId);
  29. query.exec();
  30. }
  31. unique_ptr<vector<unique_ptr<Picture>>> PictureDao::picturesForAlbum(
  32. int albumId) const {
  33. QSqlQuery query(mDatabase);
  34. query.prepare("SELECT * FROM pictures WHERE album_id=:albumId");
  35. query.bindValue(":albumId", albumId);
  36. query.exec();
  37. unique_ptr<vector<unique_ptr<Picture>>> list(new vector<unique_ptr<Picture>>);
  38. while (query.next()) {
  39. unique_ptr<Picture> pic(new Picture());
  40. pic->setFileUrl(query.value("url").toUrl());
  41. pic->setAlbumId(query.value("album_id").toInt());
  42. pic->setId(query.value("id").toInt());
  43. list->push_back(std::move(pic));
  44. }
  45. return list;
  46. }