Browse Source

implement draft/labeled-response-0.2

tags/v1.2.0-rc1
Shivaram Lingamneni 5 years ago
parent
commit
34f11ddb97
3 changed files with 17 additions and 9 deletions
  1. 1
    1
      gencapdefs.py
  2. 2
    2
      irc/caps/defs.go
  3. 14
    6
      irc/responsebuffer.go

+ 1
- 1
gencapdefs.py View File

@@ -77,7 +77,7 @@ CAPDEFS = [
77 77
     ),
78 78
     CapDef(
79 79
         identifier="LabeledResponse",
80
-        name="draft/labeled-response",
80
+        name="draft/labeled-response-0.2",
81 81
         url="https://ircv3.net/specs/extensions/labeled-response.html",
82 82
         standard="draft IRCv3",
83 83
     ),

+ 2
- 2
irc/caps/defs.go View File

@@ -53,7 +53,7 @@ const (
53 53
 	// https://ircv3.net/specs/extensions/invite-notify-3.2.html
54 54
 	InviteNotify Capability = iota
55 55
 
56
-	// LabeledResponse is the draft IRCv3 capability named "draft/labeled-response":
56
+	// LabeledResponse is the draft IRCv3 capability named "draft/labeled-response-0.2":
57 57
 	// https://ircv3.net/specs/extensions/labeled-response.html
58 58
 	LabeledResponse Capability = iota
59 59
 
@@ -135,7 +135,7 @@ var (
135 135
 		"echo-message",
136 136
 		"extended-join",
137 137
 		"invite-notify",
138
-		"draft/labeled-response",
138
+		"draft/labeled-response-0.2",
139 139
 		"draft/languages",
140 140
 		"oragono.io/maxline-2",
141 141
 		"message-tags",

+ 14
- 6
irc/responsebuffer.go View File

@@ -212,16 +212,24 @@ func (rb *ResponseBuffer) flushInternal(final bool, blocking bool) error {
212 212
 	}
213 213
 
214 214
 	useLabel := rb.session.capabilities.Has(caps.LabeledResponse) && rb.Label != ""
215
-	// use a batch if we have a label, and we either currently have 0 or 2+ messages,
215
+	// use a batch if we have a label, and we either currently have 2+ messages,
216 216
 	// or we are doing a Flush() and we have to assume that there will be more messages
217 217
 	// in the future.
218
-	useBatch := useLabel && (len(rb.messages) != 1 || !final)
218
+	startBatch := useLabel && (1 < len(rb.messages) || !final)
219 219
 
220
-	// if label but no batch, add label to first message
221
-	if useLabel && !useBatch && len(rb.messages) == 1 && rb.batchID == "" {
222
-		rb.messages[0].SetTag(caps.LabelTagName, rb.Label)
223
-	} else if useBatch {
220
+	if startBatch {
224 221
 		rb.sendBatchStart(blocking)
222
+	} else if useLabel && len(rb.messages) == 0 && rb.batchID == "" && final {
223
+		// ACK message
224
+		message := ircmsg.MakeMessage(nil, rb.session.client.server.name, "ACK")
225
+		message.SetTag(caps.LabelTagName, rb.Label)
226
+		if rb.session.capabilities.Has(caps.ServerTime) {
227
+			message.SetTag("time", time.Now().UTC().Format(IRCv3TimestampFormat))
228
+		}
229
+		rb.session.SendRawMessage(message, blocking)
230
+	} else if useLabel && len(rb.messages) == 1 && rb.batchID == "" && final {
231
+		// single labeled message
232
+		rb.messages[0].SetTag(caps.LabelTagName, rb.Label)
225 233
 	}
226 234
 
227 235
 	// send each message out

Loading…
Cancel
Save