Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: use Cancellation object instead of unsubscribe methods #15

Merged
merged 2 commits into from
Sep 18, 2024
Merged
Show file tree
Hide file tree
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
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -95,6 +95,7 @@ publish.properties
/.idea/compiler.xml
/.idea/jarRepositories.xml
/.idea/misc.xml
/.idea/shelf

# general
**/.DS_Store
8 changes: 1 addition & 7 deletions chat-android/src/main/java/com/ably/chat/ConnectionStatus.kt
Original file line number Diff line number Diff line change
Expand Up @@ -25,13 +25,7 @@ interface ConnectionStatus {
* Registers a listener that will be called whenever the connection status changes.
* @param listener The function to call when the status changes.
*/
fun on(listener: Listener)

/**
* Unregisters a listener
* @param listener The function to call when the status changes.
*/
fun off(listener: Listener)
fun on(listener: Listener): Subscription

/**
* An interface for listening to changes for the connection status
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,13 +10,7 @@ interface EmitsDiscontinuities {
* Register a listener to be called when a discontinuity is detected.
* @param listener The listener to be called when a discontinuity is detected.
*/
fun onDiscontinuity(listener: Listener)

/**
* Unregister a listener to be called when a discontinuity is detected.
* @param listener The listener
*/
fun offDiscontinuity(listener: Listener)
fun onDiscontinuity(listener: Listener): Subscription

/**
* An interface for listening when discontinuity happens
Expand Down
29 changes: 8 additions & 21 deletions chat-android/src/main/java/com/ably/chat/Messages.kt
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@
package com.ably.chat

import io.ably.lib.realtime.Channel
import io.ably.lib.types.PaginatedResult

/**
* This interface is used to interact with messages in a chat room: subscribing
Expand All @@ -24,13 +23,7 @@ interface Messages : EmitsDiscontinuities {
* @param listener callback that will be called
* @returns A response object that allows you to control the subscription.
*/
fun subscribe(listener: Listener)

/**
* Unsubscribe listener
* @param listener callback that will be unsubscribed
*/
fun unsubscribe(listener: Listener)
fun subscribe(listener: Listener): MessagesSubscription

/**
* Get messages that have been previously sent to the chat room, based on the provided options.
Expand Down Expand Up @@ -176,6 +169,10 @@ data class SendMessageParams(
val headers: MessageHeaders? = null,
)

interface MessagesSubscription : Subscription {
suspend fun getPreviousMessages(queryOptions: QueryOptions): PaginatedResult<Message>
}

class DefaultMessages(
private val roomId: String,
private val realtimeClient: RealtimeClient,
Expand All @@ -190,25 +187,15 @@ class DefaultMessages(
override val channel: Channel
get() = realtimeClient.channels.get(messagesChannelName, ChatChannelOptions())

override fun subscribe(listener: Messages.Listener) {
override fun subscribe(listener: Messages.Listener): MessagesSubscription {
TODO("Not yet implemented")
}
ttypic marked this conversation as resolved.
Show resolved Hide resolved

override fun unsubscribe(listener: Messages.Listener) {
TODO("Not yet implemented")
}

override suspend fun get(options: QueryOptions): PaginatedResult<Message> {
TODO("Not yet implemented")
}
override suspend fun get(options: QueryOptions): PaginatedResult<Message> = chatApi.getMessages(roomId, options)

override suspend fun send(params: SendMessageParams): Message = chatApi.sendMessage(roomId, params)

override fun onDiscontinuity(listener: EmitsDiscontinuities.Listener) {
TODO("Not yet implemented")
}

override fun offDiscontinuity(listener: EmitsDiscontinuities.Listener) {
override fun onDiscontinuity(listener: EmitsDiscontinuities.Listener): Subscription {
TODO("Not yet implemented")
}
}
21 changes: 3 additions & 18 deletions chat-android/src/main/java/com/ably/chat/Occupancy.kt
Original file line number Diff line number Diff line change
Expand Up @@ -23,14 +23,7 @@ interface Occupancy : EmitsDiscontinuities {
*
* @param listener A listener to be called when the occupancy of the room changes.
*/
fun subscribe(listener: Listener)

/**
* Unsubscribe a given listener to occupancy updates of the chat room.
*
* @param listener A listener to be unsubscribed.
*/
fun unsubscribe(listener: Listener)
fun subscribe(listener: Listener): Subscription

/**
* Get the current occupancy of the chat room.
Expand Down Expand Up @@ -72,23 +65,15 @@ internal class DefaultOccupancy(
override val channel: Channel
get() = messages.channel

override fun subscribe(listener: Occupancy.Listener) {
TODO("Not yet implemented")
}

override fun unsubscribe(listener: Occupancy.Listener) {
override fun subscribe(listener: Occupancy.Listener): Subscription {
TODO("Not yet implemented")
}

override suspend fun get(): OccupancyEvent {
TODO("Not yet implemented")
}

override fun onDiscontinuity(listener: EmitsDiscontinuities.Listener) {
TODO("Not yet implemented")
}

override fun offDiscontinuity(listener: EmitsDiscontinuities.Listener) {
override fun onDiscontinuity(listener: EmitsDiscontinuities.Listener): Subscription {
TODO("Not yet implemented")
}
}
20 changes: 3 additions & 17 deletions chat-android/src/main/java/com/ably/chat/Presence.kt
Original file line number Diff line number Diff line change
Expand Up @@ -60,13 +60,7 @@ interface Presence : EmitsDiscontinuities {
* Subscribe the given listener to all presence events.
* @param listener listener to subscribe
*/
fun subscribe(listener: Listener)

/**
* Unsubscribe the given listener to all presence events.
* @param listener listener to unsubscribe
*/
fun unsubscribe(listener: Listener)
fun subscribe(listener: Listener): Subscription

/**
* An interface for listening to new presence event
Expand Down Expand Up @@ -162,19 +156,11 @@ internal class DefaultPresence(
TODO("Not yet implemented")
}

override fun subscribe(listener: Presence.Listener) {
TODO("Not yet implemented")
}

override fun unsubscribe(listener: Presence.Listener) {
TODO("Not yet implemented")
}

override fun onDiscontinuity(listener: EmitsDiscontinuities.Listener) {
override fun subscribe(listener: Presence.Listener): Subscription {
TODO("Not yet implemented")
}

override fun offDiscontinuity(listener: EmitsDiscontinuities.Listener) {
override fun onDiscontinuity(listener: EmitsDiscontinuities.Listener): Subscription {
TODO("Not yet implemented")
}
}
19 changes: 3 additions & 16 deletions chat-android/src/main/java/com/ably/chat/RoomReactions.kt
Original file line number Diff line number Diff line change
Expand Up @@ -38,12 +38,7 @@ interface RoomReactions : EmitsDiscontinuities {
* @param listener The listener function to be called when a reaction is received.
* @returns A response object that allows you to control the subscription.
*/
fun subscribe(listener: Listener)

/**
* Unsubscribe all listeners from receiving room-level reaction events.
*/
fun unsubscribe(listener: Listener)
fun subscribe(listener: Listener): Subscription

/**
* An interface for listening to new reaction events
Expand Down Expand Up @@ -116,19 +111,11 @@ internal class DefaultRoomReactions(
TODO("Not yet implemented")
}

override fun subscribe(listener: RoomReactions.Listener) {
TODO("Not yet implemented")
}

override fun unsubscribe(listener: RoomReactions.Listener) {
TODO("Not yet implemented")
}

override fun onDiscontinuity(listener: EmitsDiscontinuities.Listener) {
override fun subscribe(listener: RoomReactions.Listener): Subscription {
TODO("Not yet implemented")
}

override fun offDiscontinuity(listener: EmitsDiscontinuities.Listener) {
override fun onDiscontinuity(listener: EmitsDiscontinuities.Listener): Subscription {
TODO("Not yet implemented")
}
}
7 changes: 1 addition & 6 deletions chat-android/src/main/java/com/ably/chat/RoomStatus.kt
Original file line number Diff line number Diff line change
Expand Up @@ -21,12 +21,7 @@ interface RoomStatus {
* @param listener The function to call when the status changes.
* @returns An object that can be used to unregister the listener.
*/
fun on(listener: Listener)

/**
* Removes all listeners that were added by the `onChange` method.
*/
fun off(listener: Listener)
fun on(listener: Listener): Subscription

/**
* An interface for listening to changes for the room status
Expand Down
12 changes: 12 additions & 0 deletions chat-android/src/main/java/com/ably/chat/Subscription.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
package com.ably.chat

/**
* An unsubscription handle, returned by various functions (mostly subscriptions)
* where unsubscription is required.
*/
ttypic marked this conversation as resolved.
Show resolved Hide resolved
fun interface Subscription {
/**
* Handle unsubscription (unsubscribe listeners, clean up)
*/
fun unsubscribe()
}
19 changes: 3 additions & 16 deletions chat-android/src/main/java/com/ably/chat/Typing.kt
Original file line number Diff line number Diff line change
Expand Up @@ -37,12 +37,7 @@ interface Typing : EmitsDiscontinuities {
*
* @param listener A listener to be called when the typing state of a user in the room changes.
*/
fun subscribe(listener: Listener)

/**
* Unsubscribe listeners from receiving typing events.
*/
fun unsubscribe(listener: Listener)
fun subscribe(listener: Listener): Subscription

/**
* Get the current typers, a set of clientIds.
Expand Down Expand Up @@ -89,11 +84,7 @@ internal class DefaultTyping(
override val channel: Channel
get() = realtimeClient.channels.get(typingIndicatorsChannelName, ChatChannelOptions())

override fun subscribe(listener: Typing.Listener) {
TODO("Not yet implemented")
}

override fun unsubscribe(listener: Typing.Listener) {
override fun subscribe(listener: Typing.Listener): Subscription {
TODO("Not yet implemented")
}

Expand All @@ -109,11 +100,7 @@ internal class DefaultTyping(
TODO("Not yet implemented")
}

override fun onDiscontinuity(listener: EmitsDiscontinuities.Listener) {
TODO("Not yet implemented")
}

override fun offDiscontinuity(listener: EmitsDiscontinuities.Listener) {
override fun onDiscontinuity(listener: EmitsDiscontinuities.Listener): Subscription {
TODO("Not yet implemented")
}
}