#nullable enable using Best.HTTP; using Cysharp.Threading.Tasks; using SampleProject.Config; using System; using System.Collections.Generic; using UnityEngine; using UVC.Network; namespace UVC.Factory.Playback { public class PlaybackRepository { private PlaybackSQLiteService? sqliteService = null; public async UniTask>?> RequestPlaybackDateList() { //local //string path = System.IO.Path.Combine(Application.streamingAssetsPath, "playbackList.json"); //string json = System.IO.File.ReadAllText(path); //HttpResponseModel>> localData = JsonHelper.FromJson>>>(json); //return new EntityWithState>>(APIState.Loaded, localData.data); try { return await UniTask.RunOnThreadPool>?>(async () => { var response = await HttpRequester.RequestGet>>>($"{Constants.PlaybackDomain}/playback/list"); if (response.message.ToLower() == "success") { return new Dictionary>(response.data); } return null; }); } catch (Exception e) { Debug.Log($"Exception {e.ToString()}"); return null; } } public HTTPRequest? DownloadPlaybackData(string fileName, string savePath, Action OnProgress, Action OnComplete, Action OnError) { try { return HttpRequester.Download($"{Constants.PlaybackDomain}/playback/{fileName}", savePath, OnComplete, OnProgress, OnError); } catch (Exception e) { Debug.Log($"Exception {e.ToString()}"); return null; } } /// /// selectTime보다 +- second 사이의 데이터 요청. selectTime, second 포함 /// /// /// /// yyyy-MM-ddTHH:mm:ss.fffZ format string /// /// true: 오래된 시간이 먼저, false: 최근 시간이 먼저 /// /// public async UniTask> SelectBySecondAsync(string date, string sqlFileName, string selectTime, int second, bool orderAsc = true, int limit = 0) { validationSqliteService(date, sqlFileName); return await sqliteService!.SelectBySecond(selectTime, second, orderAsc, limit); } /// /// selectTime보다 +- second 사이의 데이터 요청. selectTime, second 포함 /// /// /// /// yyyy-MM-ddTHH:mm:ss.fffZ format string /// /// true: 오래된 시간이 먼저, false: 최근 시간이 먼저 /// /// public async UniTask> SelectBySecondBaseInfo(string date, string sqlFileName, string selectTime, int second = 59, bool orderAsc = true, int limit = 1) { validationSqliteService(date, sqlFileName); return await sqliteService!.SelectBySecondBaseInfo(selectTime, second, orderAsc, limit); } private void validationSqliteService(string date, string sqlFileName) { if (sqliteService == null) sqliteService = new PlaybackSQLiteService(); if (sqliteService.Connected) { if (sqliteService.Date != date || sqliteService.SqliteFileName != sqlFileName) { sqliteService.CloseDB(); } } sqliteService.Connect(date, sqlFileName); } } }