Skip to content

Commit

Permalink
Refactor SpinifySubscriptionMixin to use specific implementation clas…
Browse files Browse the repository at this point in the history
…ses for client and server subscriptions
  • Loading branch information
PlugFox committed Jun 11, 2024
1 parent a47f9b6 commit 07994aa
Show file tree
Hide file tree
Showing 2 changed files with 29 additions and 12 deletions.
14 changes: 3 additions & 11 deletions lib/src/spinify_impl.dart
Original file line number Diff line number Diff line change
Expand Up @@ -401,21 +401,13 @@ base mixin SpinifySubscriptionMixin on SpinifyBase, SpinifyCommandMixin {
final sub = _clientSubscriptionRegistry[reply.event.channel] ??
_serverSubscriptionRegistry[reply.event.channel];
sub?.onEvent(reply.event);
config.logger?.call(
const SpinifyLogLevel.debug(),
'push_received',
'Push received',
<String, Object?>{
'push': reply,
'event': reply.event,
},
);
} else if (reply is SpinifyConnectResult) {
// Update subscriptions state.
final entries = reply.subs?.entries;
//final entries = reply.subs?.entries;
// TODO(plugfox): implement subscription state update
/* for (final entry in entries) {
final MapEntry<String, SpinifySubscribeResult>(key: channel, value: sub) = entry;
final MapEntry<String, SpinifySubscribeResult>(key: channel, value: sub)
= entry;
final subState = reply.subs[channel];
if (subState != null) {
sub.state = subState;
Expand Down
27 changes: 26 additions & 1 deletion lib/src/subscription_impl.dart
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import 'package:meta/meta.dart';

import 'model/channel_event.dart';
import 'model/channel_events.dart';
import 'model/config.dart';
import 'model/exception.dart';
import 'model/history.dart';
import 'model/presence_stats.dart';
Expand Down Expand Up @@ -37,6 +38,8 @@ abstract base class SpinifySubscriptionBase implements SpinifySubscription {
return target;
}

SpinifyLogger? get _logger => _client.config.logger;

SpinifySubscriptionState _state =
SpinifySubscriptionState.unsubscribed(code: 0, reason: 'initial state');
final StreamController<SpinifySubscriptionState> _stateController =
Expand All @@ -49,7 +52,8 @@ abstract base class SpinifySubscriptionBase implements SpinifySubscription {
SpinifySubscriptionState get state => _state;

@override
SpinifySubscriptionStates get states => throw UnimplementedError();
SpinifySubscriptionStates get states =>
SpinifySubscriptionStates(_stateController.stream);

@override
SpinifyChannelEvents<SpinifyChannelEvent> get stream =>
Expand All @@ -59,11 +63,32 @@ abstract base class SpinifySubscriptionBase implements SpinifySubscription {
void onEvent(SpinifyChannelEvent event) {
_eventController.add(event);
// TODO(plugfox): update since position

_logger?.call(
const SpinifyLogLevel.debug(),
'channel_event_received',
'Channel event received',
<String, Object?>{
'channel': channel,
'subscription': this,
'event': event,
},
);
}

@mustCallSuper
void setState(SpinifySubscriptionState state) {
_stateController.add(_state = state);
_logger?.call(
const SpinifyLogLevel.debug(),
'subscription_state_changed',
'Subscription state changed',
<String, Object?>{
'channel': channel,
'subscription': this,
'state': _state,
},
);
}

@mustCallSuper
Expand Down

0 comments on commit 07994aa

Please sign in to comment.