vmail 0.5.7 → 0.5.8
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.
- data/lib/vmail.vim +1 -14
- data/lib/vmail/imap_client.rb +53 -31
- data/lib/vmail/version.rb +1 -1
- metadata +2 -2
data/lib/vmail.vim
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
if !exists("g:vmail_flagged_color")
|
2
|
-
let g:vmail_flagged_color = "ctermfg=green ctermbg=black"
|
2
|
+
let g:vmail_flagged_color = "ctermfg=green ctermbg=black guifg=green guibg=grey"
|
3
3
|
endif
|
4
4
|
let s:mailbox = $VMAIL_MAILBOX
|
5
5
|
let s:query = $VMAIL_QUERY
|
@@ -25,7 +25,6 @@ let s:new_message_template_command = s:client_script . "new_message_template "
|
|
25
25
|
let s:reply_template_command = s:client_script . "reply_template "
|
26
26
|
let s:forward_template_command = s:client_script . "forward_template "
|
27
27
|
let s:deliver_command = s:client_script . "deliver "
|
28
|
-
let s:save_draft_command = s:client_script . "save_draft "
|
29
28
|
let s:save_attachments_command = s:client_script . "save_attachments "
|
30
29
|
let s:open_html_part_command = s:client_script . "open_html_part "
|
31
30
|
let s:show_help_command = s:client_script . "show_help"
|
@@ -606,17 +605,6 @@ function! s:send_message()
|
|
606
605
|
redraw
|
607
606
|
endfunction
|
608
607
|
|
609
|
-
func! s:save_draft()
|
610
|
-
let mail = join(getline(1,'$'), "\n")
|
611
|
-
echo "saving draft"
|
612
|
-
call system(s:save_draft_command, mail)
|
613
|
-
redraw
|
614
|
-
call s:focus_list_window()
|
615
|
-
wincmd p
|
616
|
-
close!
|
617
|
-
echo "draft saved"
|
618
|
-
endfunc
|
619
|
-
|
620
608
|
" --------------------------------------------------------------------------------
|
621
609
|
|
622
610
|
" call from inside message window with <Leader>h
|
@@ -737,7 +725,6 @@ func! s:global_mappings()
|
|
737
725
|
" NOTE send_message is a global mapping, so user can load a saved
|
738
726
|
" message from a file and send it
|
739
727
|
nnoremap <silent> <leader>vs :call <SID>send_message()<CR>
|
740
|
-
nnoremap <silent> <leader>vd :call <SID>save_draft()<CR>
|
741
728
|
noremap <silent> <leader>o :call <SID>open_href()<cr>
|
742
729
|
noremap <silent> <leader>? :call <SID>show_help()<cr>
|
743
730
|
endfunc
|
data/lib/vmail/imap_client.rb
CHANGED
@@ -91,7 +91,8 @@ module Vmail
|
|
91
91
|
log "priming connection for delivering"
|
92
92
|
res = @imap.fetch(@ids[-1], ["ENVELOPE"])
|
93
93
|
if res.nil?
|
94
|
-
|
94
|
+
# just go ahead, just log
|
95
|
+
log "priming connection didn't work, connection seems broken, but still going ahead..."
|
95
96
|
end
|
96
97
|
end
|
97
98
|
end
|
@@ -283,9 +284,11 @@ module Vmail
|
|
283
284
|
@imap.search(update_query.join(' '))
|
284
285
|
}
|
285
286
|
# TODO change this. will throw error now
|
286
|
-
|
287
|
+
max_seqno = @message_list[-1][:seqno]
|
288
|
+
log "lookind for seqnos > #{max_seqno}"
|
289
|
+
new_ids = ids.select {|seqno| seqno > max_seqno}
|
287
290
|
@ids = @ids + new_ids
|
288
|
-
log "
|
291
|
+
log "update: new uids: #{new_ids.inspect}"
|
289
292
|
if !new_ids.empty?
|
290
293
|
res = fetch_envelopes(new_ids)
|
291
294
|
res
|
@@ -380,17 +383,22 @@ EOF
|
|
380
383
|
# for delete, do in a separate thread because deletions are slow
|
381
384
|
Thread.new do
|
382
385
|
unless @mailbox == '[Gmail]/Trash'
|
383
|
-
@imap.uid_copy
|
386
|
+
log "@imap.uid_copy #{uid_set.inspect} to trash"
|
387
|
+
log @imap.uid_copy(uid_set, "[Gmail]/Trash")
|
384
388
|
end
|
385
|
-
|
389
|
+
log "@imap.uid_store #{uid_set.inspect} #{action} [#{flg.to_sym}]"
|
390
|
+
log @imap.uid_store(uid_set, action, [flg.to_sym])
|
386
391
|
remove_uid_set_from_cached_lists(uid_set)
|
387
392
|
reload_mailbox
|
388
393
|
end
|
394
|
+
|
389
395
|
elsif flg == '[Gmail]/Spam'
|
390
396
|
log "Marking as spam index_range: #{index_range.inspect}; uid_set: #{uid_set.inspect}"
|
391
397
|
Thread.new do
|
392
|
-
@imap.uid_copy
|
393
|
-
|
398
|
+
log "@imap.uid_copy #{uid_set.inspect} to spam"
|
399
|
+
log @imap.uid_copy(uid_set, "[Gmail]/Spam")
|
400
|
+
log "@imap.uid_store #{uid_set.inspect} #{action} [:Deleted]"
|
401
|
+
log @imap.uid_store(uid_set, action, [:Deleted])
|
394
402
|
remove_uid_set_from_cached_lists(uid_set)
|
395
403
|
reload_mailbox
|
396
404
|
end
|
@@ -398,8 +406,8 @@ EOF
|
|
398
406
|
else
|
399
407
|
log "Flagging index_range: #{index_range.inspect}; uid_set: #{uid_set.inspect}"
|
400
408
|
Thread.new do
|
401
|
-
|
402
|
-
log
|
409
|
+
log "@imap.uid_store #{uid_set.inspect} #{action} [#{flg.to_sym}]"
|
410
|
+
log @imap.uid_store(uid_set, action, [flg.to_sym])
|
403
411
|
end
|
404
412
|
end
|
405
413
|
end
|
@@ -415,18 +423,36 @@ EOF
|
|
415
423
|
|
416
424
|
def remove_uid_set_from_cached_lists(uid_set)
|
417
425
|
# delete from cached @ids and @message_list
|
426
|
+
seqnos_to_delete = []
|
418
427
|
uid_set.each {|uid|
|
419
|
-
@message_list.
|
420
|
-
|
421
|
-
|
422
|
-
|
423
|
-
|
424
|
-
@ids.delete seqno
|
425
|
-
log "deleting msg uid #{row[:uid]} from @message_list"
|
426
|
-
@message_list.delete(row)
|
427
|
-
}
|
428
|
+
row = @message_list.detect {|row| row[:uid] == uid}
|
429
|
+
seqno = row[:seqno]
|
430
|
+
log "deleting seqno #{seqno} from @ids"
|
431
|
+
@ids.delete seqno
|
432
|
+
seqnos_to_delete << seqno
|
428
433
|
}
|
429
|
-
|
434
|
+
log "seqnos_to_delete: #{seqnos_to_delete.inspect}"
|
435
|
+
seqnos_to_delete.reverse.each do |seqno|
|
436
|
+
startsize = @message_list.size
|
437
|
+
log "deleting row with seqno #{seqno}"
|
438
|
+
@message_list = @message_list.delete_if {|x| x[:seqno] == seqno}
|
439
|
+
endsize = @message_list.size
|
440
|
+
log "deleted #{startsize - endsize} rows"
|
441
|
+
end
|
442
|
+
# now we need to decrement all the higher sequence numbers!
|
443
|
+
basenum = seqnos_to_delete.min # this is the lowested seqno deleted
|
444
|
+
diff = seqnos_to_delete.size # substract this from all seqnos >= basenum
|
445
|
+
changes = []
|
446
|
+
@message_list.each do |row|
|
447
|
+
if row[:seqno] >= basenum
|
448
|
+
changes << "#{row[:seqno]}->#{row[:seqno] - diff}"
|
449
|
+
row[:seqno] -= diff
|
450
|
+
end
|
451
|
+
end
|
452
|
+
log "seqno decremented: #{changes.join(";")}"
|
453
|
+
rescue
|
454
|
+
log "error removing uid set from cached lists"
|
455
|
+
log $!
|
430
456
|
end
|
431
457
|
|
432
458
|
def move_to(id_set, mailbox)
|
@@ -444,6 +470,7 @@ EOF
|
|
444
470
|
Thread.new do
|
445
471
|
log @imap.uid_copy(uid_set, mailbox)
|
446
472
|
log @imap.uid_store(uid_set, '+FLAGS', [:Deleted])
|
473
|
+
remove_uid_set_from_cached_lists(uid_set)
|
447
474
|
reload_mailbox
|
448
475
|
log "moved uid_set #{uid_set.inspect} to #{mailbox}"
|
449
476
|
end
|
@@ -468,7 +495,8 @@ EOF
|
|
468
495
|
log "current mailboxes: #{current_mailboxes.inspect}"
|
469
496
|
log "creating mailbox #{mailbox}"
|
470
497
|
log @imap.create(mailbox)
|
471
|
-
mailboxes = nil # force reload
|
498
|
+
@mailboxes = nil # force reload ...
|
499
|
+
list_mailboxes
|
472
500
|
end
|
473
501
|
end
|
474
502
|
|
@@ -537,15 +565,6 @@ EOF
|
|
537
565
|
"message '#{mail.subject}' sent"
|
538
566
|
end
|
539
567
|
|
540
|
-
def save_draft(text)
|
541
|
-
mail = new_mail_from_input(text)
|
542
|
-
log "saving draft"
|
543
|
-
reconnect_if_necessary do
|
544
|
-
log "saving draft"
|
545
|
-
log @imap.append("[Gmail]/Drafts", text.gsub(/\n/, "\r\n"), [:Seen], Time.now)
|
546
|
-
end
|
547
|
-
end
|
548
|
-
|
549
568
|
# TODO
|
550
569
|
def resume_draft
|
551
570
|
# chop off top three lines (this is hackey, fix later)
|
@@ -664,8 +683,11 @@ EOF
|
|
664
683
|
log "error: #{$!}"
|
665
684
|
log "attempting to reconnect"
|
666
685
|
log(revive_connection)
|
667
|
-
#
|
668
|
-
|
686
|
+
# hope this isn't an endless loop
|
687
|
+
reconnect_if_necessary do
|
688
|
+
close
|
689
|
+
block.call
|
690
|
+
end
|
669
691
|
rescue
|
670
692
|
log "error: #{$!}"
|
671
693
|
raise
|
data/lib/vmail/version.rb
CHANGED