diff --git a/mobile/src/changelog.ts b/mobile/src/changelog.ts index e5f1f65..9728a2a 100644 --- a/mobile/src/changelog.ts +++ b/mobile/src/changelog.ts @@ -16,6 +16,13 @@ export type ChangelogEntry = { }; export const CHANGELOG: ChangelogEntry[] = [ + { + id: '2026-07-14c', + date: 'July 2026', + items: [ + 'Copy video link: while a video is playing, tap the link icon in the top bar to copy its URL, then paste it into a browser or a player like VLC or MX Player. Works best for direct sources.', + ], + }, { id: '2026-07-14b', date: 'July 2026', diff --git a/mobile/src/screens/PlayerScreen.tsx b/mobile/src/screens/PlayerScreen.tsx index 0162340..f611351 100644 --- a/mobile/src/screens/PlayerScreen.tsx +++ b/mobile/src/screens/PlayerScreen.tsx @@ -6,6 +6,7 @@ import { useEvent } from 'expo'; import * as Haptics from 'expo-haptics'; import * as ScreenOrientation from 'expo-screen-orientation'; import { useVideoPlayer, VideoView, type VideoSource } from 'expo-video'; +import * as Clipboard from 'expo-clipboard'; import React from 'react'; import { ActivityIndicator, @@ -188,6 +189,21 @@ function NativeVideoPlayer({ params }: { params: RouteParams }) { setControlsVisible(true); }, [player]); + // Kopiuj link odtwarzanego wideo (direct CDN / embed hostera) do schowka — user może + // wrzucić do VLC/MX/przeglądarki albo udostępnić (zgłoszenie 07-10). + const copyLink = React.useCallback(async () => { + setControlsVisible(true); + try { + await Clipboard.setStringAsync(url); + Alert.alert( + 'Link copied', + 'The video link is on your clipboard. Paste it into a browser or a player like VLC or MX Player.', + ); + } catch { + // ignore + } + }, [url]); + const statusEvent = useEvent(player, 'statusChange', { status: player.status }); const status = statusEvent?.status ?? player.status; const playerError = statusEvent?.error; @@ -839,6 +855,9 @@ function NativeVideoPlayer({ params }: { params: RouteParams }) { ) : ( )} + + 🔗 + {muted ? '🔇' : '🔊'}