chronicle-imessage 0.1.0 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.gitignore +2 -0
- data/README.md +1 -1
- data/chronicle-imessage.gemspec +1 -1
- data/lib/chronicle/imessage/imessage_extractor.rb +25 -22
- data/lib/chronicle/imessage/imessage_transformer.rb +4 -9
- data/lib/chronicle/imessage/version.rb +1 -1
- data/lib/chronicle/imessage.rb +0 -2
- metadata +5 -6
- data/Gemfile.lock +0 -88
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8e5b5b2c2b15c1a26c52871284d921960d825d24303b1d872d4d25c8d8782229
|
4
|
+
data.tar.gz: 5597cc2177ae72c86c2cc9a96b75f29dc5c07b0fe2053304e0e880b4d93919c5
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: bbae018587ad66e2a3ed05a5d7e878058cfac6c747fc283fbc54995f07bbbfc6aacaeddfaa16ae6ceb9d9547f0b4c20d692ce6a4fc059d542ca4621dec0b819c
|
7
|
+
data.tar.gz: ffc6247be044ebe0cfc58f545b10e7d622ebff3c82dc230c8f412abb61f971bce981bb6edcb58fbbe507a7cb8d639e8b19063ec6b66c2e332584e2c416357ab6
|
data/.gitignore
CHANGED
data/README.md
CHANGED
@@ -15,5 +15,5 @@ IMessage importer for [chronicle-etl](https://github.com/chronicle-app/chronicle
|
|
15
15
|
gem install chronicle-etl
|
16
16
|
chronicle-etl connectors:install imessage
|
17
17
|
|
18
|
-
chronicle-etl --extractor imessage --
|
18
|
+
chronicle-etl --extractor imessage --since:"2022-02-07" --transformer imessage --loader table
|
19
19
|
```
|
data/chronicle-imessage.gemspec
CHANGED
@@ -35,7 +35,7 @@ Gem::Specification.new do |spec|
|
|
35
35
|
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
36
36
|
spec.require_paths = ["lib"]
|
37
37
|
|
38
|
-
spec.add_dependency "chronicle-etl", "~> 0.
|
38
|
+
spec.add_dependency "chronicle-etl", "~> 0.4"
|
39
39
|
spec.add_dependency "sqlite3", "~> 1.4.2"
|
40
40
|
spec.add_dependency "phonelib", "~> 0.6.54"
|
41
41
|
|
@@ -10,14 +10,11 @@ module Chronicle
|
|
10
10
|
r.description = 'a local imessage database'
|
11
11
|
end
|
12
12
|
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
def initialize(options = {})
|
20
|
-
super(DEFAULT_OPTIONS.merge(options))
|
13
|
+
setting :db, default: File.join(Dir.home, 'Library', 'Messages', 'chat.db'), required: true
|
14
|
+
setting :load_attachments, default: false
|
15
|
+
setting :only_attachments, default: false
|
16
|
+
|
17
|
+
def prepare
|
21
18
|
prepare_data
|
22
19
|
end
|
23
20
|
|
@@ -38,34 +35,40 @@ module Chronicle
|
|
38
35
|
private
|
39
36
|
|
40
37
|
def prepare_data
|
41
|
-
@db = SQLite3::Database.new(@
|
42
|
-
@messages = load_messages
|
43
|
-
load_since: @options[:load_since],
|
44
|
-
load_until: @options[:load_until],
|
45
|
-
limit: @options[:limit]
|
46
|
-
)
|
38
|
+
@db = SQLite3::Database.new(@config.db, results_as_hash: true)
|
39
|
+
@messages = load_messages
|
47
40
|
@contacts = LocalContacts.new.contacts
|
48
41
|
@chats = load_chats
|
49
42
|
|
50
|
-
if @
|
43
|
+
if @config.load_attachments
|
51
44
|
@attachments = load_attachments(@messages.map{|m| m['message_id']})
|
52
45
|
end
|
53
46
|
end
|
54
47
|
|
55
|
-
def load_messages
|
56
|
-
|
57
|
-
|
48
|
+
def load_messages
|
49
|
+
conditions = []
|
50
|
+
|
51
|
+
if @config.until
|
52
|
+
load_until_ios = unix_to_ios_timestamp(@config.until.to_i) * 1000000000
|
53
|
+
conditions << "date < #{load_until_ios}"
|
54
|
+
end
|
55
|
+
|
56
|
+
if @config.since
|
57
|
+
load_since_ios = unix_to_ios_timestamp(@config.since.to_i) * 1000000000
|
58
|
+
conditions << "date > #{load_since_ios}"
|
59
|
+
end
|
60
|
+
|
61
|
+
if @config.only_attachments
|
62
|
+
conditions << "cache_has_attachments = true"
|
63
|
+
end
|
58
64
|
|
59
65
|
sql = "SELECT * from message as m
|
60
66
|
LEFT OUTER JOIN handle as h ON m.handle_id=h.ROWID
|
61
67
|
INNER JOIN chat_message_join as cm ON m.ROWID = cm.message_id"
|
62
68
|
|
63
|
-
conditions = []
|
64
|
-
conditions << "date < #{load_until_ios}" if load_until
|
65
|
-
conditions << "date > #{load_since_ios}" if load_since
|
66
69
|
sql += " WHERE #{conditions.join(" AND ")}" if conditions.any?
|
67
70
|
sql += " ORDER BY date DESC"
|
68
|
-
sql += " LIMIT #{limit}" if limit
|
71
|
+
sql += " LIMIT #{@config.limit}" if @config.limit
|
69
72
|
|
70
73
|
messages = @db.execute(sql)
|
71
74
|
end
|
@@ -8,13 +8,8 @@ module Chronicle
|
|
8
8
|
r.description = 'a row from a local imessage database'
|
9
9
|
end
|
10
10
|
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
def initialize(*args)
|
15
|
-
super(*args)
|
16
|
-
@options = @options.reverse_merge(DEFAULT_OPTIONS)
|
17
|
-
end
|
11
|
+
setting :my_phone_slug, required: true
|
12
|
+
setting :my_name, required: true
|
18
13
|
|
19
14
|
def transform
|
20
15
|
@message = @extraction.data
|
@@ -125,8 +120,8 @@ module Chronicle
|
|
125
120
|
def build_identity_mine
|
126
121
|
record = ::Chronicle::ETL::Models::Entity.new({
|
127
122
|
represents: 'identity',
|
128
|
-
slug: @
|
129
|
-
title: @
|
123
|
+
slug: @config.my_phone_slug,
|
124
|
+
title: @config.my_name,
|
130
125
|
provider: identity_provider(@message['service']),
|
131
126
|
provider_id: @message['account_guid']
|
132
127
|
})
|
data/lib/chronicle/imessage.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: chronicle-imessage
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Andrew Louis
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2022-02-
|
11
|
+
date: 2022-02-25 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: chronicle-etl
|
@@ -16,14 +16,14 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: '0.
|
19
|
+
version: '0.4'
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: '0.
|
26
|
+
version: '0.4'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: sqlite3
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -90,7 +90,6 @@ files:
|
|
90
90
|
- ".gitignore"
|
91
91
|
- CODE_OF_CONDUCT.md
|
92
92
|
- Gemfile
|
93
|
-
- Gemfile.lock
|
94
93
|
- README.md
|
95
94
|
- Rakefile
|
96
95
|
- bin/console
|
@@ -123,7 +122,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
123
122
|
- !ruby/object:Gem::Version
|
124
123
|
version: '0'
|
125
124
|
requirements: []
|
126
|
-
rubygems_version: 3.1.
|
125
|
+
rubygems_version: 3.1.6
|
127
126
|
signing_key:
|
128
127
|
specification_version: 4
|
129
128
|
summary: iMessage importer for Chronicle
|
data/Gemfile.lock
DELETED
@@ -1,88 +0,0 @@
|
|
1
|
-
PATH
|
2
|
-
remote: .
|
3
|
-
specs:
|
4
|
-
chronicle-imessage (0.1.0)
|
5
|
-
chronicle-etl (~> 0.3)
|
6
|
-
phonelib (~> 0.6.54)
|
7
|
-
sqlite3 (~> 1.4.2)
|
8
|
-
|
9
|
-
GEM
|
10
|
-
remote: https://rubygems.org/
|
11
|
-
specs:
|
12
|
-
activesupport (7.0.1)
|
13
|
-
concurrent-ruby (~> 1.0, >= 1.0.2)
|
14
|
-
i18n (>= 1.6, < 2)
|
15
|
-
minitest (>= 5.1)
|
16
|
-
tzinfo (~> 2.0)
|
17
|
-
chronic_duration (0.10.6)
|
18
|
-
numerizer (~> 0.1.1)
|
19
|
-
chronicle-etl (0.3.0)
|
20
|
-
activesupport
|
21
|
-
chronic_duration (~> 0.10.6)
|
22
|
-
colorize (~> 0.8.1)
|
23
|
-
marcel (~> 1.0.2)
|
24
|
-
mini_exiftool (~> 2.10)
|
25
|
-
nokogiri (~> 1.13)
|
26
|
-
runcom (~> 6.2)
|
27
|
-
sequel (~> 5.35)
|
28
|
-
sqlite3 (~> 1.4)
|
29
|
-
thor (~> 0.20)
|
30
|
-
tty-progressbar (~> 0.17)
|
31
|
-
tty-table (~> 0.11)
|
32
|
-
colorize (0.8.1)
|
33
|
-
concurrent-ruby (1.1.9)
|
34
|
-
i18n (1.9.1)
|
35
|
-
concurrent-ruby (~> 1.0)
|
36
|
-
marcel (1.0.2)
|
37
|
-
mini_exiftool (2.10.2)
|
38
|
-
mini_portile2 (2.7.1)
|
39
|
-
minitest (5.15.0)
|
40
|
-
nokogiri (1.13.1)
|
41
|
-
mini_portile2 (~> 2.7.0)
|
42
|
-
racc (~> 1.4)
|
43
|
-
numerizer (0.1.1)
|
44
|
-
pastel (0.8.0)
|
45
|
-
tty-color (~> 0.5)
|
46
|
-
phonelib (0.6.55)
|
47
|
-
racc (1.6.0)
|
48
|
-
rake (13.0.6)
|
49
|
-
refinements (7.18.0)
|
50
|
-
runcom (6.6.0)
|
51
|
-
refinements (~> 7.16)
|
52
|
-
xdg (~> 4.4)
|
53
|
-
sequel (5.53.0)
|
54
|
-
sqlite3 (1.4.2)
|
55
|
-
strings (0.2.1)
|
56
|
-
strings-ansi (~> 0.2)
|
57
|
-
unicode-display_width (>= 1.5, < 3.0)
|
58
|
-
unicode_utils (~> 1.4)
|
59
|
-
strings-ansi (0.2.0)
|
60
|
-
thor (0.20.3)
|
61
|
-
tty-color (0.6.0)
|
62
|
-
tty-cursor (0.7.1)
|
63
|
-
tty-progressbar (0.18.2)
|
64
|
-
strings-ansi (~> 0.2)
|
65
|
-
tty-cursor (~> 0.7)
|
66
|
-
tty-screen (~> 0.8)
|
67
|
-
unicode-display_width (>= 1.6, < 3.0)
|
68
|
-
tty-screen (0.8.1)
|
69
|
-
tty-table (0.12.0)
|
70
|
-
pastel (~> 0.8)
|
71
|
-
strings (~> 0.2.0)
|
72
|
-
tty-screen (~> 0.8)
|
73
|
-
tzinfo (2.0.4)
|
74
|
-
concurrent-ruby (~> 1.0)
|
75
|
-
unicode-display_width (2.1.0)
|
76
|
-
unicode_utils (1.4.0)
|
77
|
-
xdg (4.5.0)
|
78
|
-
|
79
|
-
PLATFORMS
|
80
|
-
ruby
|
81
|
-
|
82
|
-
DEPENDENCIES
|
83
|
-
bundler (~> 2.3)
|
84
|
-
chronicle-imessage!
|
85
|
-
rake (~> 13.0.6)
|
86
|
-
|
87
|
-
BUNDLED WITH
|
88
|
-
2.3.6
|