|
@@ -32,7 +32,8 @@ const databases = {
|
|
|
WebHistory: fileHash('Library/Safari/History.db', 'AppDomain-com.apple.mobilesafari'),
|
|
|
Photos: fileHash('Media/PhotoData/Photos.sqlite', 'CameraRollDomain'),
|
|
|
WiFi: fileHash('SystemConfiguration/com.apple.wifi.plist', 'SystemPreferencesDomain'),
|
|
|
- Voicemail: fileHash('Library/Voicemail/voicemail.db')
|
|
|
+ Voicemail: fileHash('Library/Voicemail/voicemail.db'),
|
|
|
+ SafariBookmarks: fileHash('Library/Safari/Bookmarks.db')
|
|
|
}
|
|
|
|
|
|
var cache = {}
|
|
@@ -625,6 +626,105 @@ class IPhoneBackup {
|
|
|
}
|
|
|
})
|
|
|
}
|
|
|
+
|
|
|
+ getSafariBookmarks () {
|
|
|
+ return new Promise((resolve, reject) => {
|
|
|
+ var bookmarksdb = this.getDatabase(databases.SafariBookmarks)
|
|
|
+ try {
|
|
|
+ const query = `
|
|
|
+ select bookmarks.id
|
|
|
+ , bookmarks.title
|
|
|
+ , bookmarks.url
|
|
|
+ , bookmarks.parent as parent_id
|
|
|
+ , bookmarks.special_id
|
|
|
+ , bookmarks.type
|
|
|
+ , bookmarks.num_children
|
|
|
+ , bookmarks.editable
|
|
|
+ , bookmarks.deletable
|
|
|
+ , bookmarks.hidden
|
|
|
+ , bookmarks.hidden_ancestor_count
|
|
|
+ , bookmarks.order_index
|
|
|
+ , bookmarks.external_uuid
|
|
|
+ , bookmarks.read
|
|
|
+ , bookmarks.last_modified
|
|
|
+ , bookmarks.server_id
|
|
|
+ , bookmarks.sync_key
|
|
|
+ , bookmarks.added
|
|
|
+ , bookmarks.deleted
|
|
|
+ , bookmarks.fetched_icon
|
|
|
+ , bookmarks.dav_generation
|
|
|
+ , bookmarks.locally_added
|
|
|
+ , bookmarks.archive_status
|
|
|
+ , bookmarks.syncable
|
|
|
+ , bookmarks.web_filter_status
|
|
|
+ , bookmarks.modified_attributes
|
|
|
+ , parent_bookmarks.title as parent_title
|
|
|
+ from bookmarks
|
|
|
+ left join bookmarks as parent_bookmarks on parent_bookmarks.id = bookmarks.parent
|
|
|
+ where bookmarks.type = 0
|
|
|
+ order by bookmarks.id
|
|
|
+ `
|
|
|
+ bookmarksdb.all(query, async function (err, rows) {
|
|
|
+ if (err) reject(err)
|
|
|
+
|
|
|
+ resolve(rows)
|
|
|
+ })
|
|
|
+ } catch (e) {
|
|
|
+ reject(e)
|
|
|
+ }
|
|
|
+ })
|
|
|
+ }
|
|
|
+
|
|
|
+ getSafariBookmarksiOS7 () {
|
|
|
+ return new Promise((resolve, reject) => {
|
|
|
+ var bookmarksdb = this.getDatabase(databases.SafariBookmarks)
|
|
|
+ try {
|
|
|
+ const query = `
|
|
|
+ select bookmarks.id
|
|
|
+ , bookmarks.special_id
|
|
|
+ , bookmarks.parent as parent_id
|
|
|
+ , bookmarks.type
|
|
|
+ , bookmarks.title
|
|
|
+ , bookmarks.url
|
|
|
+ , bookmarks.num_children
|
|
|
+ , bookmarks.editable
|
|
|
+ , bookmarks.deletable
|
|
|
+ , bookmarks.hidden
|
|
|
+ , bookmarks.hidden_ancestor_count
|
|
|
+ , bookmarks.order_index
|
|
|
+ , bookmarks.external_uuid
|
|
|
+ , bookmarks.read
|
|
|
+ , bookmarks.last_modified
|
|
|
+ , bookmarks.server_id
|
|
|
+ , bookmarks.sync_key
|
|
|
+ , bookmarks.sync_data
|
|
|
+ , bookmarks.added
|
|
|
+ , bookmarks.deleted
|
|
|
+ , bookmarks.extra_attributes
|
|
|
+ , bookmarks.local_attributes
|
|
|
+ , bookmarks.fetched_icon
|
|
|
+ , bookmarks.icon
|
|
|
+ , bookmarks.dav_generation
|
|
|
+ , bookmarks.locally_added
|
|
|
+ , bookmarks.archive_status
|
|
|
+ , bookmarks.syncable
|
|
|
+ , bookmarks.web_filter_status
|
|
|
+ , parent_bookmarks.title as parent_title
|
|
|
+ from bookmarks
|
|
|
+ left join bookmarks as parent_bookmarks on parent_bookmarks.id = bookmarks.parent
|
|
|
+ where bookmarks.type = 0
|
|
|
+ order by bookmarks.id
|
|
|
+ `
|
|
|
+ bookmarksdb.all(query, async function (err, rows) {
|
|
|
+ if (err) reject(err)
|
|
|
+
|
|
|
+ resolve(rows)
|
|
|
+ })
|
|
|
+ } catch (e) {
|
|
|
+ reject(e)
|
|
|
+ }
|
|
|
+ })
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
module.exports.availableBackups = function () {
|