Skip to content
Draft
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
143 changes: 143 additions & 0 deletions src/pages/docs/messages/updates-deletes.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -88,6 +88,40 @@ await channel.updateMessage(
{ description: 'reason for update' }
);
```

```swift
import Ably

let realtime = ARTRealtime(key: "{{API_KEY}}")
// This assumes there is an 'updates' namespace with a channel rule enabling updates and deletes
let channel = realtime.channels.get("updates:example")

// Publish the original message
channel.publish([.init(name: "message-name", data: "original-data")]) { result, error in
if let error = error {
print("Failed to publish: \(error.message)")
return
}

// Get the serial from the published message
guard let serial = result.serials.first else {
print("No serial available")
return
}

// Publish an update using the serial
let messageUpdate = ARTMessage(name: nil, data: "updated-data")
messageUpdate.serial = serial

channel.update(messageUpdate, operation: .init(clientId: nil, descriptionText: "reason for update", metadata: nil), params: nil) { result, error in
if let error = error {
print("Failed to update message: \(error.message)")
return
}
print("Message updated")
}
}
```
</Code>

#### Returns
Expand Down Expand Up @@ -182,6 +216,40 @@ await channel.deleteMessage(
{ description: 'reason for delete' }
);
```

```swift
import Ably

let realtime = ARTRealtime(key: "{{API_KEY}}")
// This assumes there is an 'updates' namespace with a channel rule enabling updates and deletes
let channel = realtime.channels.get("updates:example")

// Publish the original message
channel.publish([.init(name: "message-name", data: "original-data")]) { result, error in
if let error = error {
print("Failed to publish: \(error.message)")
return
}

// Get the serial from the published message
guard let serial = result.serials.first else {
print("No serial available")
return
}

// Delete the message using the serial
let messageToDelete = ARTMessage(name: nil, data: "") // clear the previous data
messageToDelete.serial = serial

channel.delete(messageToDelete, operation: .init(clientId: nil, descriptionText: "reason for delete", metadata: nil), params: nil) { result, error in
if let error = error {
print("Failed to delete message: \(error.message)")
return
}
print("Message deleted")
}
}
```
</Code>

#### Returns
Expand Down Expand Up @@ -279,6 +347,43 @@ channel.appendMessage({ serial, data: '!' });

// the message in history now has data: "Hello, World!"
```

```swift
import Ably

let realtime = ARTRealtime(key: "{{API_KEY}}")
// This assumes there is an 'updates' namespace with a channel rule enabling updates and deletes
let channel = realtime.channels.get("updates:example")

// Publish the original message
channel.publish([.init(name: "message-name", data: "Hello")]) { result, error in
if let error = error {
print("Failed to publish: \(error.message)")
return
}

// Get the serial from the published message
guard let serial = result.serials.first else {
print("No serial available")
return
}

// Append to the message a few times (without needing to await each to finish
// before doing the next); the data will be concatenated
for fragment in [", ", "World", "!"] { // fragments to append
let messageAppend = ARTMessage(name: nil, data: fragment)
messageAppend.serial = serial

channel.append(messageAppend, operation: nil, params: nil) { result, error in
if let error = error {
print("Failed to append: \(error.message)")
return
}
print("Message appended with fragment: \(fragment)")
}
}
}
```
</Code>

#### Returns
Expand Down Expand Up @@ -342,6 +447,25 @@ const channel = rest.channels.get('updates:example');
// message for a serial you have stored or passed around
const message = await channel.getMessage(msg);
```

```swift
import Ably

let rest = ARTRest(key: "{{API_KEY}}")
let channel = rest.channels.get("updates:example")

let serial = "0123456789-001@abcdefghij:001" // example serial

channel.getMessageWithSerial(serial) { message, error in
if let error = error {
print("Failed to get message: \(error.message)")
return
}
if let message = message {
print("Retrieved message: \(message.data, default: "")")
}
}
```
</Code>

## Get message versions <a id="versions"/>
Expand All @@ -366,6 +490,25 @@ const channel = rest.channels.get('updates:example');
const page = await channel.getMessageVersions(msg);
console.log(`Found ${page.items.length} versions`);
```

```swift
import Ably

let rest = ARTRest(key: "{{API_KEY}}")
let channel = rest.channels.get("updates:example")

let serial = "0123456789-001@abcdefghij:001" // example serial

channel.getMessageVersions(withSerial: serial) { page, error in
if let error = error {
print("Failed to get message versions: \(error.message)")
return
}
if let page = page {
print("Found \(page.items.count) versions")
}
}
```
</Code>

## Message version structure <a id="version-structure"/>
Expand Down