net-imap 0.5.2 → 0.5.3
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.
Potentially problematic release.
This version of net-imap might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/docs/styles.css +1 -6
- data/lib/net/imap/response_data.rb +1 -0
- data/lib/net/imap/response_parser.rb +14 -1
- data/lib/net/imap/vanished_data.rb +56 -0
- data/lib/net/imap.rb +53 -21
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 49dc46f2744a04f6b151bc033176f2d59dabf04fb1996bba36a87b4b9f0f99b4
|
4
|
+
data.tar.gz: 411eac8fd696e619f0255d37a83b74b19b3290c68533fded627cd689d1afc57a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3049e6a03f6660c6e7c67c82a9fdb8994a2a0ec3777ca66a6e4941b1a08486e452eb17007e5c666e41a52e34c2c54d057e33aecd6a4b5bac9c522d5f20acfb43
|
7
|
+
data.tar.gz: 9c7f8e858614748c65a434900f8b6ddba04b9e31578aa9669987803153c31269888abe6baca8ae42c5ecc00287dab2f494de73ac89cf1fb81d44ebfa65d42c5d
|
data/docs/styles.css
CHANGED
@@ -6,9 +6,7 @@
|
|
6
6
|
|
7
7
|
main .method-detail {
|
8
8
|
display: grid;
|
9
|
-
grid-template-
|
10
|
-
"description description";
|
11
|
-
grid-template-columns: 1fr min-content;
|
9
|
+
grid-template-columns: 1fr auto;
|
12
10
|
justify-content: space-between;
|
13
11
|
}
|
14
12
|
|
@@ -20,19 +18,16 @@ main .method-header, main .method-controls {
|
|
20
18
|
}
|
21
19
|
|
22
20
|
main .method-header {
|
23
|
-
grid-area: "header";
|
24
21
|
border-right: none;
|
25
22
|
border-radius: 4px 0 0 4px;
|
26
23
|
}
|
27
24
|
|
28
25
|
main .method-controls {
|
29
|
-
grid-area: "controls";
|
30
26
|
border-left: none;
|
31
27
|
border-radius: 0 4px 4px 0;
|
32
28
|
}
|
33
29
|
|
34
30
|
main .method-description, main .aliases {
|
35
|
-
grid-area: "description";
|
36
31
|
grid-column: 1 / span 2;
|
37
32
|
padding-left: 1em;
|
38
33
|
}
|
@@ -6,6 +6,7 @@ module Net
|
|
6
6
|
autoload :FetchData, "#{__dir__}/fetch_data"
|
7
7
|
autoload :SearchResult, "#{__dir__}/search_result"
|
8
8
|
autoload :SequenceSet, "#{__dir__}/sequence_set"
|
9
|
+
autoload :VanishedData, "#{__dir__}/vanished_data"
|
9
10
|
|
10
11
|
# Net::IMAP::ContinuationRequest represents command continuation requests.
|
11
12
|
#
|
@@ -769,7 +769,6 @@ module Net
|
|
769
769
|
def response_data__ignored; response_data__unhandled(IgnoredResponse) end
|
770
770
|
alias response_data__noop response_data__ignored
|
771
771
|
|
772
|
-
alias expunged_resp response_data__unhandled
|
773
772
|
alias uidfetch_resp response_data__unhandled
|
774
773
|
alias listrights_data response_data__unhandled
|
775
774
|
alias myrights_data response_data__unhandled
|
@@ -841,6 +840,20 @@ module Net
|
|
841
840
|
alias mailbox_data__exists response_data__simple_numeric
|
842
841
|
alias mailbox_data__recent response_data__simple_numeric
|
843
842
|
|
843
|
+
# The name for this is confusing, because it *replaces* EXPUNGE
|
844
|
+
# >>>
|
845
|
+
# expunged-resp = "VANISHED" [SP "(EARLIER)"] SP known-uids
|
846
|
+
def expunged_resp
|
847
|
+
name = label "VANISHED"; SP!
|
848
|
+
earlier = if lpar? then label("EARLIER"); rpar; SP!; true else false end
|
849
|
+
uids = known_uids
|
850
|
+
data = VanishedData[uids, earlier]
|
851
|
+
UntaggedResponse.new name, data, @str
|
852
|
+
end
|
853
|
+
|
854
|
+
# TODO: replace with uid_set
|
855
|
+
alias known_uids sequence_set
|
856
|
+
|
844
857
|
# RFC3501 & RFC9051:
|
845
858
|
# msg-att = "(" (msg-att-dynamic / msg-att-static)
|
846
859
|
# *(SP (msg-att-dynamic / msg-att-static)) ")"
|
@@ -0,0 +1,56 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Net
|
4
|
+
class IMAP < Protocol
|
5
|
+
|
6
|
+
# Net::IMAP::VanishedData represents the contents of a +VANISHED+ response,
|
7
|
+
# which is described by the
|
8
|
+
# {QRESYNC}[https://www.rfc-editor.org/rfc/rfc7162.html] extension.
|
9
|
+
# [{RFC7162 §3.2.10}[https://www.rfc-editor.org/rfc/rfc7162.html#section-3.2.10]].
|
10
|
+
#
|
11
|
+
# +VANISHED+ responses replace +EXPUNGE+ responses when either the
|
12
|
+
# {QRESYNC}[https://www.rfc-editor.org/rfc/rfc7162.html] or the
|
13
|
+
# {UIDONLY}[https://www.rfc-editor.org/rfc/rfc9586.html] extension has been
|
14
|
+
# enabled.
|
15
|
+
class VanishedData < Data.define(:uids, :earlier)
|
16
|
+
|
17
|
+
# Returns a new VanishedData object.
|
18
|
+
#
|
19
|
+
# * +uids+ will be converted by SequenceSet.[].
|
20
|
+
# * +earlier+ will be converted to +true+ or +false+
|
21
|
+
def initialize(uids:, earlier:)
|
22
|
+
uids = SequenceSet[uids]
|
23
|
+
earlier = !!earlier
|
24
|
+
super
|
25
|
+
end
|
26
|
+
|
27
|
+
##
|
28
|
+
# :attr_reader: uids
|
29
|
+
#
|
30
|
+
# SequenceSet of UIDs that have been permanently removed from the mailbox.
|
31
|
+
|
32
|
+
##
|
33
|
+
# :attr_reader: earlier
|
34
|
+
#
|
35
|
+
# +true+ when the response was caused by Net::IMAP#uid_fetch with
|
36
|
+
# <tt>vanished: true</tt> or Net::IMAP#select/Net::IMAP#examine with
|
37
|
+
# <tt>qresync: true</tt>.
|
38
|
+
#
|
39
|
+
# +false+ when the response is used to announce message removals within an
|
40
|
+
# already selected mailbox.
|
41
|
+
|
42
|
+
# rdoc doesn't handle attr aliases nicely. :(
|
43
|
+
alias earlier? earlier # :nodoc:
|
44
|
+
##
|
45
|
+
# :attr_reader: earlier?
|
46
|
+
#
|
47
|
+
# Alias for #earlier.
|
48
|
+
|
49
|
+
# Returns an Array of all of the UIDs in #uids.
|
50
|
+
#
|
51
|
+
# See SequenceSet#numbers.
|
52
|
+
def to_a; uids.numbers end
|
53
|
+
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
data/lib/net/imap.rb
CHANGED
@@ -723,7 +723,7 @@ module Net
|
|
723
723
|
# * {IMAP URLAUTH Authorization Mechanism Registry}[https://www.iana.org/assignments/urlauth-authorization-mechanism-registry/urlauth-authorization-mechanism-registry.xhtml]
|
724
724
|
#
|
725
725
|
class IMAP < Protocol
|
726
|
-
VERSION = "0.5.
|
726
|
+
VERSION = "0.5.3"
|
727
727
|
|
728
728
|
# Aliases for supported capabilities, to be used with the #enable command.
|
729
729
|
ENABLE_ALIASES = {
|
@@ -1889,48 +1889,64 @@ module Net
|
|
1889
1889
|
send_command("UNSELECT")
|
1890
1890
|
end
|
1891
1891
|
|
1892
|
+
# call-seq:
|
1893
|
+
# expunge -> array of message sequence numbers
|
1894
|
+
# expunge -> VanishedData of UIDs
|
1895
|
+
#
|
1892
1896
|
# Sends an {EXPUNGE command [IMAP4rev1 §6.4.3]}[https://www.rfc-editor.org/rfc/rfc3501#section-6.4.3]
|
1893
|
-
#
|
1894
|
-
# selected mailbox
|
1897
|
+
# to permanently remove all messages with the +\Deleted+ flag from the
|
1898
|
+
# currently selected mailbox.
|
1899
|
+
#
|
1900
|
+
# Returns either an array of expunged message <em>sequence numbers</em> or
|
1901
|
+
# (when the appropriate capability is enabled) VanishedData of expunged
|
1902
|
+
# UIDs. Previously unhandled +EXPUNGE+ or +VANISHED+ responses are merged
|
1903
|
+
# with the direct response to this command. <tt>VANISHED (EARLIER)</tt>
|
1904
|
+
# responses will _not_ be merged.
|
1905
|
+
#
|
1906
|
+
# When no messages have been expunged, an empty array is returned,
|
1907
|
+
# regardless of which extensions are enabled. In a future release, an empty
|
1908
|
+
# VanishedData may be returned, based on the currently enabled extensions.
|
1895
1909
|
#
|
1896
1910
|
# Related: #uid_expunge
|
1911
|
+
#
|
1912
|
+
# ==== Capabilities
|
1913
|
+
#
|
1914
|
+
# When either QRESYNC[https://tools.ietf.org/html/rfc7162] or
|
1915
|
+
# UIDONLY[https://tools.ietf.org/html/rfc9586] are enabled, #expunge
|
1916
|
+
# returns VanishedData, which contains UIDs---<em>not message sequence
|
1917
|
+
# numbers</em>.
|
1897
1918
|
def expunge
|
1898
|
-
|
1899
|
-
send_command("EXPUNGE")
|
1900
|
-
clear_responses("EXPUNGE")
|
1901
|
-
end
|
1919
|
+
expunge_internal("EXPUNGE")
|
1902
1920
|
end
|
1903
1921
|
|
1922
|
+
# call-seq:
|
1923
|
+
# uid_expunge{uid_set) -> array of message sequence numbers
|
1924
|
+
# uid_expunge{uid_set) -> VanishedData of UIDs
|
1925
|
+
#
|
1904
1926
|
# Sends a {UID EXPUNGE command [RFC4315 §2.1]}[https://www.rfc-editor.org/rfc/rfc4315#section-2.1]
|
1905
1927
|
# {[IMAP4rev2 §6.4.9]}[https://www.rfc-editor.org/rfc/rfc9051#section-6.4.9]
|
1906
1928
|
# to permanently remove all messages that have both the <tt>\\Deleted</tt>
|
1907
1929
|
# flag set and a UID that is included in +uid_set+.
|
1908
1930
|
#
|
1931
|
+
# Returns the same result type as #expunge.
|
1932
|
+
#
|
1909
1933
|
# By using #uid_expunge instead of #expunge when resynchronizing with
|
1910
1934
|
# the server, the client can ensure that it does not inadvertantly
|
1911
1935
|
# remove any messages that have been marked as <tt>\\Deleted</tt> by other
|
1912
1936
|
# clients between the time that the client was last connected and
|
1913
1937
|
# the time the client resynchronizes.
|
1914
1938
|
#
|
1915
|
-
# *Note:*
|
1916
|
-
# >>>
|
1917
|
-
# Although the command takes a set of UIDs for its argument, the
|
1918
|
-
# server still returns regular EXPUNGE responses, which contain
|
1919
|
-
# a <em>sequence number</em>. These will be deleted from
|
1920
|
-
# #responses and this method returns them as an array of
|
1921
|
-
# <em>sequence number</em> integers.
|
1922
|
-
#
|
1923
1939
|
# Related: #expunge
|
1924
1940
|
#
|
1925
1941
|
# ==== Capabilities
|
1926
1942
|
#
|
1927
|
-
# The server's capabilities must include +UIDPLUS+
|
1943
|
+
# The server's capabilities must include either +IMAP4rev2+ or +UIDPLUS+
|
1928
1944
|
# [RFC4315[https://www.rfc-editor.org/rfc/rfc4315.html]].
|
1945
|
+
#
|
1946
|
+
# Otherwise, #uid_expunge is updated by extensions in the same way as
|
1947
|
+
# #expunge.
|
1929
1948
|
def uid_expunge(uid_set)
|
1930
|
-
|
1931
|
-
send_command("UID EXPUNGE", SequenceSet.new(uid_set))
|
1932
|
-
clear_responses("EXPUNGE")
|
1933
|
-
end
|
1949
|
+
expunge_internal("UID EXPUNGE", SequenceSet.new(uid_set))
|
1934
1950
|
end
|
1935
1951
|
|
1936
1952
|
# :call-seq:
|
@@ -1942,7 +1958,7 @@ module Net
|
|
1942
1958
|
# and returns either a SearchResult or an ESearchResult. SearchResult
|
1943
1959
|
# inherits from Array (for backward compatibility) but adds
|
1944
1960
|
# SearchResult#modseq when the +CONDSTORE+ capability has been enabled.
|
1945
|
-
# ESearchResult also implements to_a
|
1961
|
+
# ESearchResult also implements {#to_a}[rdoc-ref:ESearchResult#to_a], for
|
1946
1962
|
# compatibility with SearchResult.
|
1947
1963
|
#
|
1948
1964
|
# +criteria+ is one or more search keys and their arguments, which may be
|
@@ -3261,6 +3277,22 @@ module Net
|
|
3261
3277
|
end
|
3262
3278
|
end
|
3263
3279
|
|
3280
|
+
def expunge_internal(...)
|
3281
|
+
synchronize do
|
3282
|
+
send_command(...)
|
3283
|
+
expunged_array = clear_responses("EXPUNGE")
|
3284
|
+
vanished_array = extract_responses("VANISHED") { !_1.earlier? }
|
3285
|
+
if vanished_array.empty?
|
3286
|
+
expunged_array
|
3287
|
+
elsif vanished_array.length == 1
|
3288
|
+
vanished_array.first
|
3289
|
+
else
|
3290
|
+
merged_uids = SequenceSet[*vanished_array.map(&:uids)]
|
3291
|
+
VanishedData[uids: merged_uids, earlier: false]
|
3292
|
+
end
|
3293
|
+
end
|
3294
|
+
end
|
3295
|
+
|
3264
3296
|
RETURN_WHOLE = /\ARETURN\z/i
|
3265
3297
|
RETURN_START = /\ARETURN\b/i
|
3266
3298
|
private_constant :RETURN_WHOLE, :RETURN_START
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: net-imap
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.5.
|
4
|
+
version: 0.5.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Shugo Maeda
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: exe
|
11
11
|
cert_chain: []
|
12
|
-
date: 2024-12-
|
12
|
+
date: 2024-12-20 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: net-protocol
|
@@ -97,6 +97,7 @@ files:
|
|
97
97
|
- lib/net/imap/stringprep/saslprep_tables.rb
|
98
98
|
- lib/net/imap/stringprep/tables.rb
|
99
99
|
- lib/net/imap/stringprep/trace.rb
|
100
|
+
- lib/net/imap/vanished_data.rb
|
100
101
|
- net-imap.gemspec
|
101
102
|
- rakelib/benchmarks.rake
|
102
103
|
- rakelib/rdoc.rake
|