From 844242161cedfe5cd6172d0435cf86f91900a927 Mon Sep 17 00:00:00 2001 From: Bas Nijholt Date: Tue, 10 Jan 2017 21:30:40 +0100 Subject: [PATCH 1/3] Fix for OSX 10.12 --- iOSContacts.pm | 2 +- iOSMessages.pm | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) mode change 100644 => 100755 iOSContacts.pm mode change 100644 => 100755 iOSMessages.pm diff --git a/iOSContacts.pm b/iOSContacts.pm old mode 100644 new mode 100755 index 17d28f3..ee72082 --- a/iOSContacts.pm +++ b/iOSContacts.pm @@ -13,7 +13,7 @@ sub new my ($class, $params) = @_; my $self = { _backup_directory => $params->{backup_directory}, - _contacts_db_filename => '31bb7ba8914766d4ba40d6dfb6113c8b614be442', + _contacts_db_filename => '31/31bb7ba8914766d4ba40d6dfb6113c8b614be442', _contacts_db => undef, _contacts => undef }; diff --git a/iOSMessages.pm b/iOSMessages.pm old mode 100644 new mode 100755 index aff6ad8..ff8574c --- a/iOSMessages.pm +++ b/iOSMessages.pm @@ -10,7 +10,7 @@ sub new my ($class, $params) = @_; my $self = { _backup_directory => $params->{backup_directory}, - _sms_db_filename => '3d0d7e5fb2ce288813306e4d4636395e047a3d28', + _sms_db_filename => '3d/3d0d7e5fb2ce288813306e4d4636395e047a3d28', _sms_db => undef, _messages => {}, _attachments => {} @@ -118,6 +118,7 @@ sub _process_mms { $filepath =~ s#^~/#MediaDomain-#; my $sha1_filename = sha1_hex($filepath); + my $sha1_filename = substr($sha1_filename, 0, 2) . '/' . $sha1_filename; $self->{_attachments}->{$attachment_id} = { sha1_filename => $sha1_filename, filename => $filename, From 833b3b2c95c653b0ee79bf46c8bd83aef64f0fbf Mon Sep 17 00:00:00 2001 From: Peter Kagey Date: Fri, 7 Jun 2019 12:45:58 -0700 Subject: [PATCH 2/3] Remove trailing whitespace. --- iOSMessages.pm | 58 +++++++++++++++++++++++++------------------------- 1 file changed, 29 insertions(+), 29 deletions(-) diff --git a/iOSMessages.pm b/iOSMessages.pm index ff8574c..be59b8f 100755 --- a/iOSMessages.pm +++ b/iOSMessages.pm @@ -20,7 +20,7 @@ sub new print "direcotry " . $self->{_backup_directory} . "\n"; die 'Directory does not exist'; } - + bless $self, $class; $self->_generate_messages_hash(); return $self; @@ -36,17 +36,17 @@ sub get_attachments{ return $self->{_attachments}; } -# Internal methods +# Internal methods sub _db { my ($self) = @_; return $self->{_sms_db} if ($self->{_sms_db}); - $self->{_sms_db} = DBI->connect( - "dbi:SQLite:dbname=".$self->{_backup_directory}.$self->{_sms_db_filename}, - "", - "", - { RaiseError => 1 }, + $self->{_sms_db} = DBI->connect( + "dbi:SQLite:dbname=".$self->{_backup_directory}.$self->{_sms_db_filename}, + "", + "", + { RaiseError => 1 }, ) or die $DBI::errstr; return $self->{_sms_db}; } @@ -55,27 +55,27 @@ sub _generate_messages_hash { my ($self) = @_; my $dbh = $self->_db; - my $query = qq| - SELECT + my $query = qq| + SELECT m.rowid as RowID, - h.id AS UniqueID, - CASE is_from_me - WHEN 0 THEN "received" - WHEN 1 THEN "sent" - ELSE "Unknown" - END as Type, - CASE + h.id AS UniqueID, + CASE is_from_me + WHEN 0 THEN "received" + WHEN 1 THEN "sent" + ELSE "Unknown" + END as Type, + CASE WHEN date > 0 then TIME(date + 978307200, 'unixepoch', 'localtime') ELSE NULL END as Time, - CASE + CASE WHEN date > 0 THEN strftime('%Y%m%d', date + 978307200, 'unixepoch', 'localtime') ELSE NULL - END as Date, - CASE + END as Date, + CASE WHEN date > 0 THEN date + 978307200 ELSE NULL - END as Epoch, + END as Epoch, text as Text, maj.attachment_id AS AttachmentID FROM message m @@ -85,20 +85,20 @@ sub _generate_messages_hash { ORDER BY UniqueID, Date, Time|; my $sth = $dbh->prepare($query); $sth->execute(); - + my $tempMessages = {}; - + while (my $text = $sth->fetchrow_hashref){ if (my $uniqueID = $text->{'UniqueID'}) { my $uniqueID = $text->{'UniqueID'}; if ($date = $text->{'Date'}) { push @{$tempMessages->{$uniqueID}->{$date}}, $text; } - + if ($text->{'AttachmentID'}) { $self->_process_mms($text->{'AttachmentID'}); } - + } } $self->{_messages} = $tempMessages; @@ -106,22 +106,22 @@ sub _generate_messages_hash { sub _process_mms { my ($self, $attachment_id) = @_; - + my $dbh = $self->{_sms_db}; my $query = qq|SELECT * FROM attachment WHERE ROWID = ?|; my $sth = $dbh->prepare($query); $sth->execute($attachment_id); - + my $attachment = $sth->fetchrow_hashref(); my $filepath = $attachment->{filename}; (my $filename = $filepath) =~ s{(.*)/(.*)}{$2}xms; $filepath =~ s#^~/#MediaDomain-#; - + my $sha1_filename = sha1_hex($filepath); my $sha1_filename = substr($sha1_filename, 0, 2) . '/' . $sha1_filename; $self->{_attachments}->{$attachment_id} = { - sha1_filename => $sha1_filename, - filename => $filename, + sha1_filename => $sha1_filename, + filename => $filename, mime_type => $attachment->{mime_type} }; } From daadb75b6a541198bb16611576a08895550ac5fa Mon Sep 17 00:00:00 2001 From: Peter Kagey Date: Fri, 7 Jun 2019 12:47:03 -0700 Subject: [PATCH 3/3] Time is in nanoseconds. # see 06d218cfed7c75acc6e8925f9aea35b6864eaf7a --- iOSMessages.pm | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/iOSMessages.pm b/iOSMessages.pm index be59b8f..27f221b 100755 --- a/iOSMessages.pm +++ b/iOSMessages.pm @@ -65,15 +65,15 @@ sub _generate_messages_hash { ELSE "Unknown" END as Type, CASE - WHEN date > 0 then TIME(date + 978307200, 'unixepoch', 'localtime') + WHEN date > 0 then TIME(date / 1000000000 + 978307200, 'unixepoch', 'localtime') ELSE NULL END as Time, CASE - WHEN date > 0 THEN strftime('%Y%m%d', date + 978307200, 'unixepoch', 'localtime') + WHEN date > 0 THEN strftime('%Y%m%d', date / 1000000000 + 978307200, 'unixepoch', 'localtime') ELSE NULL END as Date, CASE - WHEN date > 0 THEN date + 978307200 + WHEN date > 0 THEN date / 1000000000 + 978307200 ELSE NULL END as Epoch, text as Text,