XRoom_Unity/Assets/ApiConnection.cs
2025-05-31 10:20:20 +03:30

202 lines
6.9 KiB
C#

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Networking;
using System;
using UnityEngine.UI;
using UnityEngine.Video;
using RTLTMPro;
using Paroxe.PdfRenderer;
[Serializable]
public class FileData
{
public string id;
public string link;
public string type;
public string status;
}
[Serializable]
public class ApiResponse
{
public int status;
public List<FileData> data;
public string message;
}
public class ApiConnection : MonoBehaviour
{
private string apiUrl = "http://185.116.161.39:8012/hivad/vr/files.php";
public List<string> imageLinks = new List<string>();
public List<string> pdfLinks = new List<string>();
public List<string> videoLinks = new List<string>();
public static ApiConnection instance;
public GameObject imageItem, videoItem;
public GameObject pdfItem;
void Start()
{
instance = this;
// StartCoroutine(FetchFiles());
// StartCoroutine(jobs());
StartCoroutine( webservice.instance.GetInfoRequest(jobs));
}
public void jobs(GetInfoResponse data)
{
if (data != null)
{
foreach (var img in data.images)
{
GameObject item = Instantiate(imageItem, imageItem.transform.parent);
item.name = imageLinks.Count.ToString();
item.SetActive(true);
StartCoroutine(LoadImage(item.GetComponentInChildren<RawImage>(), "http://194.62.43.230:8000/" + img.image));
item.GetComponentInChildren<RTLTextMeshPro>().text = img.name;
imageLinks.Add(img.image);
Debug.Log("Image: " + img.image);
}
foreach (var pdf in data.pdfs)
{
print("PDF: " + pdf.pdf);
GameObject item = Instantiate(pdfItem, pdfItem.transform.parent);
item.name = pdfLinks.Count.ToString();
item.GetComponentInChildren<RTLTextMeshPro>().text = pdf.name;
item.SetActive(true);
// StartCoroutine(LoadImage(item.GetComponentInChildren<RawImage>(), "http://194.62.43.230:8000/" + pdf.pdf));
pdfLinks.Add(pdf.pdf);
// Debug.Log("Image: " + pdf.pdf);
}
foreach (var video in data.videos)
{
GameObject item = Instantiate(videoItem, videoItem.transform.parent);
item.name = videoLinks.Count.ToString();
item.SetActive(true);
item.GetComponentInChildren<RTLTextMeshPro>().text = video.name;
videoLinks.Add("http://194.62.43.230:8000/" + video.video);
Debug.Log("Video: " + video.video);
}
foreach (var glb in data.glbs)
{
Debug.Log("GLB: " + glb.glb);
}
}
}
IEnumerator FetchFiles()
{
using (UnityWebRequest request = UnityWebRequest.Get(apiUrl))
{
yield return request.SendWebRequest();
if (request.result == UnityWebRequest.Result.Success)
{
ApiResponse response = JsonUtility.FromJson<ApiResponse>(request.downloadHandler.text);
CategorizeFiles(response.data);
}
else
{
Debug.LogError("Error fetching data: " + request.error);
}
}
}
void CategorizeFiles(List<FileData> files)
{
foreach (var file in files)
{
if (file.type == "0")
{
// برای تصاویر
GameObject item = Instantiate(imageItem, imageItem.transform.parent);
item.name = imageLinks.Count.ToString();
item.SetActive(true);
StartCoroutine(LoadImage(item.GetComponentInChildren<RawImage>(), file.link));
imageLinks.Add(file.link);
}
else if (file.type == "1")
{
// برای ویدیوها
GameObject item = Instantiate(videoItem, videoItem.transform.parent);
item.name = videoLinks.Count.ToString();
item.SetActive(true);
videoLinks.Add(file.link);
// گرفتن پیش‌نمایش از فریم 100 ویدیو
// StartCoroutine(LoadVideoPreview(item.GetComponentInChildren<RawImage>(), file.link));
}
}
Debug.Log("Images: " + string.Join(", ", imageLinks));
Debug.Log("Videos: " + string.Join(", ", videoLinks));
}
private IEnumerator LoadImage(RawImage r, string url)
{
using (UnityWebRequest request = UnityWebRequestTexture.GetTexture(url))
{
yield return request.SendWebRequest();
if (request.result == UnityWebRequest.Result.Success)
{
Texture2D texture = ((DownloadHandlerTexture)request.downloadHandler).texture;
r.texture = texture;
}
else
{
Debug.LogError("Error loading image: " + request.error);
}
}
}
private IEnumerator LoadVideoPreview(RawImage r,string url)
{
VideoPlayer videoPlayer = new GameObject("VideoPlayer").AddComponent<VideoPlayer>();
videoPlayer.url = url;
videoPlayer.renderMode = VideoRenderMode.APIOnly;
videoPlayer.isLooping = false;
// یک RenderTexture برای ذخیره فریم ویدیو
RenderTexture renderTexture = new RenderTexture(1920, 1080, 24); // ابعاد تصویر ویدیو
videoPlayer.targetTexture = renderTexture;
// آماده‌سازی و پخش ویدیو
videoPlayer.Prepare();
// صبر کنید تا ویدیو آماده شود
while (!videoPlayer.isPrepared)
{
yield return null;
}
// تنظیم زمان پخش به فریم 100
videoPlayer.time = (0 / videoPlayer.frameRate); // به زمان معادل فریم 100 تنظیم می‌کنیم
videoPlayer.Play();
// صبر کنید تا فریم مشخص شده پخش شود
yield return new WaitForSeconds(0.1f);
// گرفتن تصویر از RenderTexture
Texture2D texture = new Texture2D(1920, 1080); // ابعاد تصویر ویدیو
RenderTexture.active = renderTexture;
texture.ReadPixels(new Rect(0, 0, renderTexture.width, renderTexture.height), 0, 0);
texture.Apply();
// نمایش فریم به‌عنوان پیش‌نمایش ویدیو
r.texture = texture;
// توقف ویدیو پس از گرفتن فریم
videoPlayer.Stop();
Destroy(videoPlayer.gameObject); // حذف VideoPlayer پس از اتمام کار
}
}