mirror of
https://github.com/immich-app/immich
synced 2025-11-07 17:27:20 +00:00
feat(mobile): add cast support (#18341)
* initial cast framework complete and mocked cast dialog working * wip casting * casting works! just need to add session key check and remote video controls * cleanup of classes * add session expiration checks * cast dialog now shows connected device at top of list with a list header. Discovered devices are also cached for app session. * cast video player finalized * show fullsize assets on casting * translation already happens on the text element * remove prints * fix lintings * code review changes from @shenlong-tanwen * fix connect method override * fix alphabetization * remove important * filter chromecast audio devices * fix some disconnect command ordering issues and unawaited futures * remove prints * only disconnect if we are connected * don't try to reconnect if its the current device * add cast button to top bar * format sessions api * more formatting issues fixed * add snack bar to tell user that we cannot cast an asset that is not uploaded to server * make casting icon change to primary color when casting is active * only show casting snackbar if we are casting * dont show cast button if asset is remote and we are not casting * stop playing media if we seek to an asset that is not remote * remove https check since it works with local http IP addresses * remove unneeded imports * fix recasting when socket closes * fix info plist formatting * only show cast button if there is an active websocket connection (ie the server is accessible) * add device capability bitmask checks * small comment about bitmask
This commit is contained in:
parent
e88eb44aba
commit
5574b2dd39
24 changed files with 1101 additions and 41 deletions
47
mobile/lib/repositories/sessions_api.repository.dart
Normal file
47
mobile/lib/repositories/sessions_api.repository.dart
Normal file
|
|
@ -0,0 +1,47 @@
|
|||
import 'package:hooks_riverpod/hooks_riverpod.dart';
|
||||
import 'package:immich_mobile/interfaces/sessions_api.interface.dart';
|
||||
import 'package:immich_mobile/models/sessions/session_create_response.model.dart';
|
||||
import 'package:immich_mobile/providers/api.provider.dart';
|
||||
import 'package:immich_mobile/repositories/api.repository.dart';
|
||||
import 'package:openapi/api.dart';
|
||||
|
||||
final sessionsAPIRepositoryProvider = Provider(
|
||||
(ref) => SessionsAPIRepository(
|
||||
ref.watch(apiServiceProvider).sessionsApi,
|
||||
),
|
||||
);
|
||||
|
||||
class SessionsAPIRepository extends ApiRepository
|
||||
implements ISessionAPIRepository {
|
||||
final SessionsApi _api;
|
||||
|
||||
SessionsAPIRepository(this._api);
|
||||
|
||||
@override
|
||||
Future<SessionCreateResponse> createSession(
|
||||
String deviceType,
|
||||
String deviceOS, {
|
||||
int? duration,
|
||||
}) async {
|
||||
final dto = await checkNull(
|
||||
_api.createSession(
|
||||
SessionCreateDto(
|
||||
deviceType: deviceType,
|
||||
deviceOS: deviceOS,
|
||||
duration: duration,
|
||||
),
|
||||
),
|
||||
);
|
||||
|
||||
return SessionCreateResponse(
|
||||
id: dto.id,
|
||||
current: dto.current,
|
||||
deviceType: deviceType,
|
||||
deviceOS: deviceOS,
|
||||
expiresAt: dto.expiresAt,
|
||||
createdAt: dto.createdAt,
|
||||
updatedAt: dto.updatedAt,
|
||||
token: dto.token,
|
||||
);
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue