< Summary

Class:DCL.GLTFast.Wrappers.GltFastDownloadProvider
Assembly:AssetPromiseKeeper
File(s):/tmp/workspace/unity-renderer/unity-renderer/Assets/Scripts/MainScripts/DCL/Controllers/AssetManager/GLTFast/Wrappers/GLTFastDownloadProvider.cs
Covered lines:0
Uncovered lines:28
Coverable lines:28
Total lines:84
Line coverage:0% (0 of 28)
Covered branches:0
Total branches:0

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity NPath complexity Sequence coverage
GltFastDownloadProvider(...)0%2100%
Request()0%30500%
GetFinalUrl(...)0%6200%
RequestTexture()0%30500%
Dispose()0%6200%

File(s)

/tmp/workspace/unity-renderer/unity-renderer/Assets/Scripts/MainScripts/DCL/Controllers/AssetManager/GLTFast/Wrappers/GLTFastDownloadProvider.cs

#LineLine coverage
 1using System;
 2using System.Collections.Generic;
 3using System.Threading.Tasks;
 4using GLTFast.Loading;
 5using UnityEngine;
 6using UnityEngine.Networking;
 7
 8namespace DCL.GLTFast.Wrappers
 9{
 10    /// <summary>
 11    /// With this class we replace all of GLTFast web requests with our own
 12    /// </summary>
 13    internal class GltFastDownloadProvider : IDownloadProvider, IDisposable
 14    {
 15        private readonly IWebRequestController webRequestController;
 16        private readonly AssetIdConverter fileToUrl;
 017        private List<IDisposable> disposables = new ();
 18        private string baseUrl;
 19
 020        public GltFastDownloadProvider(string baseUrl, IWebRequestController webRequestController, AssetIdConverter file
 21        {
 022            this.baseUrl = baseUrl;
 023            this.webRequestController = webRequestController;
 024            this.fileToUrl = fileToUrl;
 025        }
 26
 27        public async Task<IDownload> Request(Uri uri)
 28        {
 029            string finalUrl = GetFinalUrl(uri);
 30
 031            WebRequestAsyncOperation asyncOp = (WebRequestAsyncOperation)webRequestController.Get(
 32                url: finalUrl,
 33                downloadHandler: new DownloadHandlerBuffer(),
 34                timeout: 30,
 35                disposeOnCompleted: false,
 36                requestAttemps: 3);
 37
 038            GltfDownloaderWrapper wrapper = new GltfDownloaderWrapper(asyncOp);
 039            disposables.Add(wrapper);
 40
 041            while (wrapper.MoveNext()) { await Task.Yield(); }
 42
 043            if (!wrapper.Success) { Debug.LogError($"<color=Red>[GLTFast WebRequest Failed]</color> {asyncOp.asyncOp.web
 44
 045            return wrapper;
 046        }
 47
 48        private string GetFinalUrl(Uri uri)
 49        {
 050            var finalUrl = uri.OriginalString;
 51
 052            finalUrl = finalUrl.Replace(baseUrl, "");
 53
 054            return fileToUrl(finalUrl, out string url) ? url : uri.OriginalString;
 55        }
 56
 57        public async Task<ITextureDownload> RequestTexture(Uri uri, bool nonReadable)
 58        {
 059            string finalUrl = GetFinalUrl(uri);
 60
 061            var asyncOp = webRequestController.GetTexture(
 62                url: finalUrl,
 63                timeout: 30,
 64                disposeOnCompleted: false,
 65                requestAttemps: 3);
 66
 067            GltfTextureDownloaderWrapper wrapper = new GltfTextureDownloaderWrapper(asyncOp);
 068            disposables.Add(wrapper);
 69
 070            while (wrapper.MoveNext()) { await Task.Yield(); }
 71
 072            if (!wrapper.Success) { Debug.LogError("[GLTFast Texture WebRequest Failed] " + asyncOp.asyncOp.webRequest.u
 73
 074            return wrapper;
 075        }
 76
 77        public void Dispose()
 78        {
 079            foreach (IDisposable disposable in disposables) { disposable.Dispose(); }
 80
 081            disposables = null;
 082        }
 83    }
 84}