locations.js 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. const fileHash = require('../../util/backup_filehash')
  2. const PHOTOS_DB = fileHash('Media/PhotoData/Photos.sqlite', 'CameraRollDomain')
  3. module.exports = {
  4. version: 4,
  5. name: 'photos.locations',
  6. description: `List all photo geotag's GPS locations`,
  7. requiresBackup: true,
  8. // Run on a v3 lib / backup object.
  9. run (lib, { backup }) {
  10. return getPhotoLocationHistory(backup)
  11. },
  12. // Manifest fields.
  13. output: {
  14. time: el => el.XFORMATTEDDATESTRING,
  15. latitude: el => el.ZLATITUDE,
  16. longitude: el => el.ZLONGITUDE,
  17. file: el => el.ZFILENAME
  18. }
  19. }
  20. function getPhotoLocationHistory (backup) {
  21. return new Promise((resolve, reject) => {
  22. backup.openDatabase(PHOTOS_DB)
  23. .then(db => {
  24. db.all(`SELECT
  25. ZDATECREATED,
  26. ZLATITUDE,
  27. ZLONGITUDE,
  28. ZFILENAME,
  29. datetime(ZDATECREATED + 978307200, 'unixepoch') AS XFORMATTEDDATESTRING
  30. FROM ZGENERICASSET ORDER BY ZDATECREATED ASC`, function (err, rows) {
  31. if (err) reject(err)
  32. resolve(rows)
  33. })
  34. })
  35. .catch(reject)
  36. })
  37. }