mournmail 0.3.0 → 0.3.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/exe/mournmail_reindex +16 -0
- data/lib/mournmail/draft_mode.rb +6 -1
- data/lib/mournmail/summary_mode.rb +1 -1
- data/lib/mournmail/utils.rb +69 -32
- data/lib/mournmail/version.rb +1 -1
- metadata +9 -7
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9e37a11a19a93dfc9f11a9b9bb98bf3c4c20454668a1d6315627500ec313dc88
|
4
|
+
data.tar.gz: b8d099a3e67cd35761dab9789f5a3af7c13ebb98f152bf1c031d48d88e4ad69a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 999cb57363f9df4f2bc00eca563b93c61d32c7409e27d628d2ed2c27763af80688886d9b034570ed4291bd92251c5a7c4ae2a8942ea35aa01e7928d365675e8b
|
7
|
+
data.tar.gz: 96c435e264104b3ebbd1b71d5d561f7a7c207a8c1ee05f1b687192e4811b3b2ef1c7f476a8d2c0655ce452f2e577cfaff5a4c79a9fd28e9d9dc5fbe51944ed3a
|
@@ -0,0 +1,16 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require "groonga"
|
4
|
+
|
5
|
+
if ARGV.size < 1
|
6
|
+
STDERR.puts "Usage: mournmail_reindex <path to messages.db>"
|
7
|
+
exit 1
|
8
|
+
end
|
9
|
+
|
10
|
+
Groonga::Database.open(ARGV[0])
|
11
|
+
Groonga["Messages"].columns.each do |c|
|
12
|
+
print "Reindexing #{c.name}... "
|
13
|
+
STDOUT.flush
|
14
|
+
c.reindex
|
15
|
+
puts "done"
|
16
|
+
end
|
data/lib/mournmail/draft_mode.rb
CHANGED
@@ -7,6 +7,7 @@ module Mournmail
|
|
7
7
|
MAIL_MODE_MAP.define_key("\t", :draft_complete_or_insert_tab_command)
|
8
8
|
MAIL_MODE_MAP.define_key("\C-c\C-xv", :draft_pgp_sign_command)
|
9
9
|
MAIL_MODE_MAP.define_key("\C-c\C-xe", :draft_pgp_encrypt_command)
|
10
|
+
MAIL_MODE_MAP.define_key("\C-c\t", :insert_signature_command)
|
10
11
|
|
11
12
|
define_syntax :field_name, /^[A-Za-z\-]+: /
|
12
13
|
define_syntax :quotation, /^>.*/
|
@@ -78,7 +79,7 @@ module Mournmail
|
|
78
79
|
conf[:delivery_method],
|
79
80
|
options)
|
80
81
|
bury_buffer(@buffer)
|
81
|
-
background do
|
82
|
+
Mournmail.background do
|
82
83
|
begin
|
83
84
|
if !attached_messages.empty?
|
84
85
|
attached_messages.each do |attached_message|
|
@@ -181,6 +182,10 @@ module Mournmail
|
|
181
182
|
end
|
182
183
|
end
|
183
184
|
|
185
|
+
define_local_command(:insert_signature, doc: "Insert signature.") do
|
186
|
+
@buffer.insert(CONFIG[:signature])
|
187
|
+
end
|
188
|
+
|
184
189
|
private
|
185
190
|
|
186
191
|
def end_of_header
|
@@ -167,7 +167,7 @@ module Mournmail
|
|
167
167
|
|
168
168
|
define_local_command(:summary_toggle_deleted,
|
169
169
|
doc: <<~EOD) do
|
170
|
-
Toggle Deleted. Type `
|
170
|
+
Toggle Deleted. Type `X` to expunge deleted messages.
|
171
171
|
EOD
|
172
172
|
toggle_flag(selected_uid, :Deleted)
|
173
173
|
end
|
data/lib/mournmail/utils.rb
CHANGED
@@ -66,7 +66,9 @@ module Mournmail
|
|
66
66
|
define_variable :current_uid, attr: :accessor
|
67
67
|
define_variable :current_mail, attr: :accessor
|
68
68
|
define_variable :background_thread, attr: :accessor
|
69
|
+
define_variable :background_thread_mutex, initial_value: Mutex.new
|
69
70
|
define_variable :keep_alive_thread, attr: :accessor
|
71
|
+
define_variable :keep_alive_thread_mutex, initial_value: Mutex.new
|
70
72
|
define_variable :imap
|
71
73
|
define_variable :imap_mutex, initial_value: Mutex.new
|
72
74
|
define_variable :mailboxes, initial_value: []
|
@@ -75,42 +77,52 @@ module Mournmail
|
|
75
77
|
define_variable :groonga_db
|
76
78
|
|
77
79
|
def self.background(skip_if_busy: false)
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
self.background_thread = nil
|
80
|
+
@background_thread_mutex.synchronize do
|
81
|
+
if background_thread&.alive?
|
82
|
+
if skip_if_busy
|
83
|
+
return
|
84
|
+
else
|
85
|
+
raise EditorError, "Another background thread is running"
|
86
|
+
end
|
86
87
|
end
|
87
|
-
|
88
|
+
self.background_thread = Utils.background {
|
89
|
+
begin
|
90
|
+
yield
|
91
|
+
ensure
|
92
|
+
self.background_thread = nil
|
93
|
+
end
|
94
|
+
}
|
95
|
+
end
|
88
96
|
end
|
89
97
|
|
90
98
|
def self.start_keep_alive_thread
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
imap
|
99
|
+
@keep_alive_thread_mutex.synchronize do
|
100
|
+
if keep_alive_thread
|
101
|
+
raise EditorError, "Keep alive thread already running"
|
102
|
+
end
|
103
|
+
self.keep_alive_thread = Thread.start {
|
104
|
+
loop do
|
105
|
+
sleep(CONFIG[:mournmail_keep_alive_interval])
|
106
|
+
background(skip_if_busy: true) do
|
107
|
+
begin
|
108
|
+
imap_connect do |imap|
|
109
|
+
imap.noop
|
110
|
+
end
|
111
|
+
rescue => e
|
112
|
+
message("Error in IMAP NOOP: #{e.class}: #{e.message}")
|
101
113
|
end
|
102
|
-
rescue => e
|
103
|
-
message("Error in IMAP NOOP: #{e.class}: #{e.message}")
|
104
114
|
end
|
105
115
|
end
|
106
|
-
|
107
|
-
|
116
|
+
}
|
117
|
+
end
|
108
118
|
end
|
109
119
|
|
110
120
|
def self.stop_keep_alive_thread
|
111
|
-
|
112
|
-
keep_alive_thread
|
113
|
-
|
121
|
+
@keep_alive_thread_mutex.synchronize do
|
122
|
+
if keep_alive_thread
|
123
|
+
keep_alive_thread&.kill
|
124
|
+
self.keep_alive_thread = nil
|
125
|
+
end
|
114
126
|
end
|
115
127
|
end
|
116
128
|
|
@@ -228,14 +240,22 @@ module Mournmail
|
|
228
240
|
:scope => 'https://mail.google.com/',
|
229
241
|
:redirect_uri => 'urn:ietf:wg:oauth:2.0:oob'
|
230
242
|
)
|
231
|
-
|
232
243
|
auth_uri = auth_client.authorization_uri.to_s
|
233
|
-
Launchy.open(auth_uri)
|
234
|
-
|
235
244
|
auth_client.code = foreground! {
|
236
|
-
|
237
|
-
|
238
|
-
|
245
|
+
begin
|
246
|
+
Launchy.open(auth_uri)
|
247
|
+
rescue Launchy::CommandNotFoundError
|
248
|
+
buffer = show_google_auth_uri(auth_uri)
|
249
|
+
end
|
250
|
+
begin
|
251
|
+
Window.echo_area.clear_message
|
252
|
+
Window.redisplay
|
253
|
+
read_from_minibuffer("Code: ").chomp
|
254
|
+
ensure
|
255
|
+
if buffer
|
256
|
+
kill_buffer(buffer, force: true)
|
257
|
+
end
|
258
|
+
end
|
239
259
|
}
|
240
260
|
auth_client.fetch_access_token!
|
241
261
|
old_umask = File.umask(077)
|
@@ -249,6 +269,23 @@ module Mournmail
|
|
249
269
|
end
|
250
270
|
auth_client.access_token
|
251
271
|
end
|
272
|
+
|
273
|
+
def self.show_google_auth_uri(auth_uri)
|
274
|
+
buffer = Buffer.find_or_new("*message*",
|
275
|
+
undo_limit: 0, read_only: true)
|
276
|
+
buffer.apply_mode(Mournmail::MessageMode)
|
277
|
+
buffer.read_only_edit do
|
278
|
+
buffer.clear
|
279
|
+
buffer.insert(<<~EOF)
|
280
|
+
Open the following URI in your browser and type obtained code:
|
281
|
+
|
282
|
+
#{auth_uri}
|
283
|
+
EOF
|
284
|
+
end
|
285
|
+
window = Mournmail.message_window
|
286
|
+
window.buffer = buffer
|
287
|
+
buffer
|
288
|
+
end
|
252
289
|
|
253
290
|
def self.xoauth2_string(user, access_token)
|
254
291
|
"user=#{user}\1auth=Bearer #{access_token}\1\1"
|
data/lib/mournmail/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mournmail
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.
|
4
|
+
version: 0.3.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Shugo Maeda
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-
|
11
|
+
date: 2020-12-28 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: textbringer
|
@@ -125,7 +125,8 @@ dependencies:
|
|
125
125
|
description: A message user agent for Textbringer.
|
126
126
|
email:
|
127
127
|
- shugo@ruby-lang.org
|
128
|
-
executables:
|
128
|
+
executables:
|
129
|
+
- mournmail_reindex
|
129
130
|
extensions: []
|
130
131
|
extra_rdoc_files: []
|
131
132
|
files:
|
@@ -136,6 +137,7 @@ files:
|
|
136
137
|
- Rakefile
|
137
138
|
- bin/console
|
138
139
|
- bin/setup
|
140
|
+
- exe/mournmail_reindex
|
139
141
|
- lib/mournmail.rb
|
140
142
|
- lib/mournmail/commands.rb
|
141
143
|
- lib/mournmail/config.rb
|
@@ -155,7 +157,7 @@ homepage: https://github.com/shugo/mournmail
|
|
155
157
|
licenses:
|
156
158
|
- MIT
|
157
159
|
metadata: {}
|
158
|
-
post_install_message:
|
160
|
+
post_install_message:
|
159
161
|
rdoc_options: []
|
160
162
|
require_paths:
|
161
163
|
- lib
|
@@ -170,8 +172,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
170
172
|
- !ruby/object:Gem::Version
|
171
173
|
version: '0'
|
172
174
|
requirements: []
|
173
|
-
rubygems_version: 3.2.
|
174
|
-
signing_key:
|
175
|
+
rubygems_version: 3.2.3
|
176
|
+
signing_key:
|
175
177
|
specification_version: 4
|
176
178
|
summary: A message user agent for Textbringer.
|
177
179
|
test_files: []
|