From e40a7577bde76e98ab17df7e6d75d1694c73c95f Mon Sep 17 00:00:00 2001 From: BrightDV <92821484+BrightDV@users.noreply.github.com> Date: Tue, 29 Aug 2023 12:01:16 +0200 Subject: [PATCH] [video] add links to cache to remove duplicated requests --- lib/api/brightcove.dart | 56 +++++++++++++++++++++++++++++++++-------- 1 file changed, 45 insertions(+), 11 deletions(-) diff --git a/lib/api/brightcove.dart b/lib/api/brightcove.dart index 2758f55d..1e491314 100644 --- a/lib/api/brightcove.dart +++ b/lib/api/brightcove.dart @@ -19,22 +19,56 @@ import 'dart:convert'; +import 'package:flutter/foundation.dart'; +import 'package:flutter_cache_manager/file.dart'; +import 'package:flutter_cache_manager/flutter_cache_manager.dart'; import 'package:hive_flutter/hive_flutter.dart'; import 'package:http/http.dart'; class BrightCove { + static const key = 'brightCoveVideoCache'; + static CacheManager videoCache = CacheManager( + Config( + key, + stalePeriod: const Duration(hours: 1), + maxNrOfCacheObjects: 10, + repo: JsonCacheInfoRepository(databaseName: key), + fileService: HttpFileService(), + ), + ); + Future fetchStreamData(String videoId) async { - Uri uri = Uri.parse( - 'https://edge.api.brightcove.com/playback/v1/accounts/6057949432001/videos/$videoId', - ); - Response res = await get( - uri, - headers: { - 'Accept': - ' application/json;pk=BCpkADawqM1hQVBuXkSlsl6hUsBZQMmrLbIfOjJQ3_n8zmPOhlNSwZhQBF6d5xggxm0t052lQjYyhqZR3FW2eP03YGOER9ihJkUnIhRZGBxuLhnL-QiFpvcDWIh_LvwN5j8zkjTtGKarhsdV', - }, - ); - Map responseAsJson = jsonDecode(res.body); + late Map responseAsJson; + if (kIsWeb) { + Uri uri = Uri.parse( + 'https://edge.api.brightcove.com/playback/v1/accounts/6057949432001/videos/$videoId', + ); + Response res = await get( + uri, + headers: { + 'Accept': + ' application/json;pk=BCpkADawqM1hQVBuXkSlsl6hUsBZQMmrLbIfOjJQ3_n8zmPOhlNSwZhQBF6d5xggxm0t052lQjYyhqZR3FW2eP03YGOER9ihJkUnIhRZGBxuLhnL-QiFpvcDWIh_LvwN5j8zkjTtGKarhsdV', + }, + ); + responseAsJson = jsonDecode(res.body); + } else { + String url = + 'https://edge.api.brightcove.com/playback/v1/accounts/6057949432001/videos/$videoId'; + final Future fileStream = videoCache.getSingleFile( + url, + headers: { + 'Accept': + ' application/json;pk=BCpkADawqM1hQVBuXkSlsl6hUsBZQMmrLbIfOjJQ3_n8zmPOhlNSwZhQBF6d5xggxm0t052lQjYyhqZR3FW2eP03YGOER9ihJkUnIhRZGBxuLhnL-QiFpvcDWIh_LvwN5j8zkjTtGKarhsdV', + }, + ); + final response = await fileStream; + + responseAsJson = jsonDecode( + utf8.decode( + await response.readAsBytes(), + ), + ); + } return responseAsJson; }