Project import generated by Copybara.

GitOrigin-RevId: aa7a2fadfab104fd54c1507c3c4446357e176e70
This commit is contained in:
Madari Developers 2025-01-09 06:35:44 +00:00
parent b816d78d98
commit d0dc2c2410
4 changed files with 85 additions and 12 deletions

View file

@ -108,6 +108,63 @@ jobs:
source-dir: build/app/outputs/flutter-apk
destination-dir: nightly/${{ github.run_id }}/android
build_android_tv:
runs-on: ubuntu-latest
environment: prod
steps:
- uses: actions/checkout@v3
- name: Set up Flutter
uses: subosito/flutter-action@v2
with:
channel: 'stable'
- uses: actions/setup-java@v4
with:
distribution: 'zulu'
java-version: '17'
- name: Install dependencies
run: flutter pub get
- name: Set up environment variables
run: |
touch .env
dart run build_runner build --delete-conflicting-outputs
- name: Create key.properties file
run: |
echo "storePassword=${{ secrets.STORE_PASSWORD }}" >> android/key.properties
echo "keyPassword=${{ secrets.KEY_PASSWORD }}" >> android/key.properties
echo "keyAlias=${{ secrets.KEY_ALIAS }}" >> android/key.properties
echo "storeFile=key.jks" >> android/key.properties
- name: Decode and save keystore file
run: |
echo "${{ secrets.STORE_FILE_BASE64 }}" | base64 --decode > android/app/key.jks
- run: |
sudo apt install ninja-build
name: install ninja
- name: Build Android
run: make build_android_tv
- name: Upload Android artifact
uses: actions/upload-artifact@v4
with:
name: android-build
path: build/app/outputs/flutter-apk/app-release-tv.apk
- uses: ryand56/r2-upload-action@v1.4
with:
r2-account-id: ${{ secrets.R2_ACCOUNT_ID }}
r2-access-key-id: ${{ secrets.R2_ACCESS_KEY_ID }}
r2-secret-access-key: ${{ secrets.R2_SECRET_ACCESS_KEY }}
r2-bucket: ${{ secrets.R2_BUCKET }}
source-dir: build/app/outputs/flutter-apk
destination-dir: nightly/${{ github.run_id }}/android-tv
build_ipa:
runs-on: macos-latest
environment: prod

View file

@ -1,4 +1,4 @@
.PHONY: build schema build_web build_mac build_android build_windows build_ipa build_linux
.PHONY: build schema build_web build_mac build_android build_windows build_ipa build_linux build_android_tv
BUILD_ID := $(or $(GITHUB_RUN_ID),dev)
@ -17,6 +17,9 @@ build_mac:
build_android:
flutter build apk --release --dart-define=BUILD_ID=$(BUILD_ID)
build_android_tv:
flutter build apk --release --dart-define=BUILD_ID=$(BUILD_ID) --dart-define=IS_TV=true
build_windows:
flutter build windows --release --dart-define=BUILD_ID=$(BUILD_ID)

View file

@ -74,16 +74,17 @@ class _VideoViewerState extends State<VideoViewer> {
if (player.state.playing) {
TraktService.instance!.startScrobbling(
meta: widget.meta as types.Meta,
progress: progress.toDouble(),
progress: currentProgressInPercentage,
);
} else {
TraktService.instance!.stopScrobbling(
meta: widget.meta as types.Meta,
progress: progress.toDouble(),
progress: currentProgressInPercentage,
);
}
} catch (e) {
print(e);
TraktService.instance!.debugLogs.add(e.toString());
}
}
@ -163,11 +164,19 @@ class _VideoViewerState extends State<VideoViewer> {
});
}
bool canCallOnce = false;
setDurationFromTrakt() async {
if (player.state.duration.inSeconds < 2) {
return;
}
if (canCallOnce) {
return;
}
canCallOnce = true;
if (!TraktService.instance!.isEnabled() || traktProgress == null) {
player.play();
return;
@ -287,7 +296,7 @@ class _VideoViewerState extends State<VideoViewer> {
});
}
_timer = Timer.periodic(const Duration(minutes: 1), (timer) {
_timer = Timer.periodic(const Duration(seconds: 30), (timer) {
saveWatchHistory();
});
@ -389,13 +398,6 @@ class _VideoViewerState extends State<VideoViewer> {
@override
void dispose() {
if (traktIntegration && widget.meta is types.Meta) {
TraktService.instance!.stopScrobbling(
meta: widget.meta as types.Meta,
progress: currentProgressInPercentage,
);
}
SystemChrome.setPreferredOrientations([
DeviceOrientation.portraitUp,
DeviceOrientation.portraitDown,
@ -414,7 +416,16 @@ class _VideoViewerState extends State<VideoViewer> {
_streamComplete.cancel();
_streamListen.cancel();
_duration.cancel();
if (traktIntegration && widget.meta is types.Meta) {
TraktService.instance!.stopScrobbling(
meta: widget.meta as types.Meta,
progress: currentProgressInPercentage,
);
}
player.dispose();
super.dispose();
}

View file

@ -158,7 +158,7 @@ class TraktService {
if (response.statusCode != 200) {
debugLogs.add(
"Failed to fetch data from ${url.replaceFirst("https://api.trakt.tv/", "")} ${response.statusCode}");
throw Exception('Failed to fetch data from $url');
throw Exception('Failed to fetch data from $url ${response.statusCode}');
}
debugLogs.add(
@ -319,6 +319,8 @@ class TraktService {
}).toList();
} catch (e, stack) {
print('Error fetching up next movies: $e');
debugLogs.add('Error fetching up next movies: $e');
debugLogs.add(stack.toString());
print(stack);
return [];
}