Skip to content
Open
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: 0 additions & 1 deletion .changes/adaptive-stream-manual-quality-merge

This file was deleted.

1 change: 0 additions & 1 deletion .changes/adaptive-stream-pixel-density

This file was deleted.

1 change: 0 additions & 1 deletion .changes/align-screenshare-simulcast-defaults

This file was deleted.

1 change: 0 additions & 1 deletion .changes/clamp-simulcast-lower-layers

This file was deleted.

1 change: 0 additions & 1 deletion .changes/fix-buffer-status-busy-wait

This file was deleted.

1 change: 0 additions & 1 deletion .changes/fix-connected-server-address

This file was deleted.

1 change: 0 additions & 1 deletion .changes/fix-deferred-track-listener-leak

This file was deleted.

1 change: 0 additions & 1 deletion .changes/fix-log-interpolation

This file was deleted.

1 change: 0 additions & 1 deletion .changes/fix-premature-publication-dispose

This file was deleted.

1 change: 0 additions & 1 deletion .changes/fix-reconnect-counter

This file was deleted.

1 change: 0 additions & 1 deletion .changes/fix-region-failover-condition

This file was deleted.

1 change: 0 additions & 1 deletion .changes/fix-send-sync-state-return-type

This file was deleted.

1 change: 0 additions & 1 deletion .changes/fix-session-start-reentrance

This file was deleted.

1 change: 0 additions & 1 deletion .changes/simplify-session-e2ee

This file was deleted.

1 change: 0 additions & 1 deletion .changes/update-protocol-v1-45-8

This file was deleted.

2 changes: 1 addition & 1 deletion .version
Original file line number Diff line number Diff line change
@@ -1 +1 @@
2.7.0
2.8.0
19 changes: 19 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,24 @@
# CHANGELOG

## 2.8.0

* Added: Session API support for simpler E2EE setup
* Changed: Manual video quality selection can be used with adaptive stream enabled
* Changed: Generated protocol definitions for LiveKit protocol v1.45.8
* Fixed: waitForBufferStatusLow busy-waiting after engine close
* Fixed: Simulcast lower layers exceeding the top layer
* Fixed: forceRelay log message interpolation
* Fixed: sendSyncState error handling so sync-state preparation failures are not swallowed
* Fixed: Screen share simulcast default low layer alignment
* Fixed: Region failover null-provider dereference
* Fixed: Android builds with dependencies that require compileSdk 36
* Fixed: Deferred track listener leaks across reconnects
* Fixed: Adaptive stream dimensions on high-density displays
* Fixed: Session.start() reentrancy during concurrent calls
* Fixed: Connected server address resolving from the wrong peer connection
* Fixed: Reconnect counter null assertion on the first reconnect attempt
* Fixed: Premature publication disposal during unpublish

## 2.7.0

* Added: Add setVideoDimensions for remote track publications
Expand Down
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ Include this package to your `pubspec.yaml`
```yaml
---
dependencies:
livekit_client: ^2.7.0
livekit_client: ^2.8.0
```

### iOS
Expand Down
2 changes: 1 addition & 1 deletion ios/livekit_client.podspec
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
Pod::Spec.new do |s|
s.name = 'livekit_client'
s.version = '2.7.0'
s.version = '2.8.0'
s.summary = 'Open source platform for real-time audio and video.'
s.description = 'Open source platform for real-time audio and video.'
s.homepage = 'https://livekit.io/'
Expand Down
2 changes: 1 addition & 1 deletion lib/src/livekit.dart
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ import 'support/platform.dart' show lkPlatformIsMobile;
/// Main entry point to connect to a room.
/// {@category Room}
class LiveKitClient {
static const version = '2.7.0';
static const version = '2.8.0';

/// Initialize the WebRTC plugin. If this is not manually called, will be
/// initialized with default settings.
Expand Down
2 changes: 1 addition & 1 deletion macos/livekit_client.podspec
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
Pod::Spec.new do |s|
s.name = 'livekit_client'
s.version = '2.7.0'
s.version = '2.8.0'
s.summary = 'Open source platform for real-time audio and video.'
s.description = 'Open source platform for real-time audio and video.'
s.homepage = 'https://livekit.io/'
Expand Down
2 changes: 1 addition & 1 deletion pubspec.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@
name: livekit_client
description: Flutter Client SDK for LiveKit. Build real-time video and audio
into your apps. Supports iOS, Android, and Web.
version: 2.7.0
version: 2.8.0
homepage: https://github.com/livekit/client-sdk-flutter

environment:
Expand Down
48 changes: 34 additions & 14 deletions scripts/create_version.dart
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ import 'dart:io';
///
/// Where:
/// - level: One of [patch, minor, major] indicating the version bump level
/// - kind: One of [added, changed, fixed, refactor, performance, security, deprecated, removed, docs, chore]
/// - kind: One of [added, changed, fixed, refactor, performance, security, deprecated, removed, docs]
/// - description: A detailed description of the change
///
/// Examples:
Expand Down Expand Up @@ -103,6 +103,10 @@ class Change {
});
}

String _allowedChangeKinds() => ChangeKind.values.map((e) => e.name).join(', ');

String _allowedChangeLevels() => ChangeLevel.values.map((e) => e.name).join(', ');

class SemanticVersion {
final int major;
final int minor;
Expand Down Expand Up @@ -154,39 +158,55 @@ List<Change> parseChanges() {
}

final changes = <Change>[];
final errors = <String>[];
final files = changesDir.listSync().whereType<File>().where((f) => !f.path.split('/').last.startsWith('.'));

for (final file in files) {
final content = file.readAsStringSync();
final lines = content.split('\n');

for (final line in lines) {
for (var i = 0; i < lines.length; i++) {
final rawLine = lines[i];
final line = rawLine.trim();
final location = '${file.path}:${i + 1}';

// Skip empty lines
if (line.trim().isEmpty) continue;
if (line.isEmpty) continue;

// Parse format: level type="kind" "description"
final parts = line.split(RegExp(r'\s+'));
if (parts.length < 3) continue;
final match = RegExp(r'^(\w+)\s+type="([^"]+)"\s+"([^"]+)"$').firstMatch(line);
if (match == null) {
errors.add('$location: expected `level type="kind" "description"`, found `$rawLine`');
continue;
}

// Extract level
final level = ChangeLevel.fromString(parts[0]);
if (level == null) continue;
final levelName = match.group(1)!;
final level = ChangeLevel.fromString(levelName);
if (level == null) {
errors.add('$location: unsupported level `$levelName`; expected one of: ${_allowedChangeLevels()}');
continue;
}

// Extract type from type="kind" format
final typeMatch = RegExp(r'type="(\w+)"').firstMatch(parts[1]);
if (typeMatch == null) continue;
final kind = ChangeKind.fromString(typeMatch.group(1)!);
if (kind == null) continue;
final kindName = match.group(2)!;
final kind = ChangeKind.fromString(kindName);
if (kind == null) {
errors.add('$location: unsupported type `$kindName`; expected one of: ${_allowedChangeKinds()}');
continue;
}

// Extract description from the last quoted string
final descMatch = RegExp(r'"([^"]+)"$').firstMatch(line);
if (descMatch == null) continue;
final description = descMatch.group(1)!;
final description = match.group(3)!;

changes.add(Change(level: level, kind: kind, description: description));
}
}

if (errors.isNotEmpty) {
throw Exception('Invalid change entries:\n${errors.map((e) => ' - $e').join('\n')}');
}

if (changes.isEmpty) {
throw Exception('No changes found in ${_Path.changes}');
}
Expand Down
Loading