You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
171 lines
5.2 KiB
171 lines
5.2 KiB
using UnityEngine;
|
|
using Amazon.S3.Model;
|
|
using UltraCombos.Upload;
|
|
using OscJack;
|
|
using System.Collections;
|
|
|
|
[System.Serializable]
|
|
public class S3Tag
|
|
{
|
|
public string key;
|
|
public string value;
|
|
public static implicit operator Tag(S3Tag t) => new Tag { Key = t.key, Value = t.value };
|
|
}
|
|
|
|
public class SaveImage : MonoBehaviour
|
|
{
|
|
|
|
|
|
public Uploader uploader;
|
|
public RenderTexture renderTexture;
|
|
public string OutputFolder = "output";
|
|
|
|
public string FirebaseUrl = "https://firestore.googleapis.com/v1/projects/uc-24070-thegreattipsy/databases/(default)/documents/";
|
|
|
|
|
|
// Start is called before the first frame update
|
|
void Start()
|
|
{
|
|
uploader = GetComponent<Uploader>();
|
|
|
|
}
|
|
|
|
// Update is called once per frame
|
|
void Update()
|
|
{
|
|
|
|
}
|
|
|
|
|
|
|
|
public void save(string filename)
|
|
{
|
|
if (string.IsNullOrEmpty(filename))
|
|
{
|
|
Debug.LogError("Filename cannot be null or empty.");
|
|
return;
|
|
}
|
|
Debug.Log("Saving image to: " + filename);
|
|
|
|
string timestamp = System.DateTime.Now.ToString("yyyyMMdd");
|
|
if (!System.IO.Directory.Exists(OutputFolder + "/" + timestamp))
|
|
{
|
|
System.IO.Directory.CreateDirectory(OutputFolder + "/" + timestamp);
|
|
}
|
|
|
|
|
|
SaveRenderTextureToPNG(renderTexture, System.IO.Path.Combine(OutputFolder + "/" + timestamp, filename));
|
|
Debug.Log("Image saved to " + filename);
|
|
|
|
// Optionally, you can also log the full path
|
|
string fullPath = System.IO.Path.Combine(OutputFolder + "/" + timestamp + "/", filename);
|
|
Debug.Log("path: " + fullPath);
|
|
|
|
upload(fullPath);
|
|
}
|
|
|
|
void SaveRenderTextureToPNG(RenderTexture rt, string filePath)
|
|
{
|
|
RenderTexture currentRT = RenderTexture.active;
|
|
RenderTexture.active = rt;
|
|
|
|
Texture2D tex = new Texture2D(rt.width, rt.height, TextureFormat.RGBA32, false);
|
|
tex.ReadPixels(new Rect(0, 0, rt.width, rt.height), 0, 0);
|
|
tex.Apply();
|
|
|
|
byte[] bytes = tex.EncodeToPNG();
|
|
System.IO.File.WriteAllBytes(filePath, bytes);
|
|
|
|
Debug.Log("Saved RenderTexture to PNG at " + filePath + " with size: " + bytes.Length + " bytes");
|
|
|
|
RenderTexture.active = currentRT;
|
|
Destroy(tex);
|
|
}
|
|
|
|
void upload(string filename)
|
|
{
|
|
if (uploader != null)
|
|
{
|
|
uploader.Upload(filename, (response) =>
|
|
{
|
|
if (response.success)
|
|
{
|
|
Debug.Log("Upload successful: " + response.message);
|
|
|
|
writeToFirebase(filename, response.message);
|
|
}
|
|
else
|
|
{
|
|
Debug.LogError("Upload failed: " + response);
|
|
}
|
|
});
|
|
}
|
|
else
|
|
{
|
|
Debug.LogError("Uploader is not assigned.");
|
|
}
|
|
}
|
|
|
|
public void writeToFirebase(string filename, string url)
|
|
{
|
|
Debug.Log("Writing to Firebase: " + filename);
|
|
StartCoroutine(WriteToFirebaseCoroutine(filename, url));
|
|
|
|
IEnumerator WriteToFirebaseCoroutine(string filename, string url)
|
|
{
|
|
string id=filename.Split('/')[2].Split('.')[0];
|
|
Debug.Log("Extracted ID: " + id);
|
|
|
|
string firebaseUrl = FirebaseUrl + "prints/" + id;
|
|
string jsonData = "{ \"fields\": { " +
|
|
"\"url\": { \"stringValue\": \"" + url + "\" }, " +
|
|
"\"timestamp\": { \"timestampValue\": \"" + System.DateTime.UtcNow.ToString("o") + "\" } " +
|
|
"} }";
|
|
|
|
using (var www = new UnityEngine.Networking.UnityWebRequest(firebaseUrl, "PATCH"))
|
|
{
|
|
byte[] bodyRaw = System.Text.Encoding.UTF8.GetBytes(jsonData);
|
|
www.uploadHandler = new UnityEngine.Networking.UploadHandlerRaw(bodyRaw);
|
|
www.downloadHandler = new UnityEngine.Networking.DownloadHandlerBuffer();
|
|
www.SetRequestHeader("Content-Type", "application/json");
|
|
|
|
yield return www.SendWebRequest();
|
|
|
|
#if UNITY_2020_1_OR_NEWER
|
|
if (www.result != UnityEngine.Networking.UnityWebRequest.Result.Success)
|
|
#else
|
|
if (www.isNetworkError || www.isHttpError)
|
|
#endif
|
|
{
|
|
Debug.LogError("Error writing to Firebase: " + www.error);
|
|
Debug.LogError("Response: " + www.downloadHandler.text);
|
|
}
|
|
else
|
|
{
|
|
Debug.Log("Successfully wrote to Firebase: " + www.downloadHandler.text);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
public void sendOscMessage(string message)
|
|
{
|
|
// Implement your OSC message sending logic here
|
|
Debug.Log("Sending OSC message: " + message);
|
|
StartCoroutine(SendOscMessageCoroutine(message));
|
|
}
|
|
public IEnumerator SendOscMessageCoroutine(string message){
|
|
|
|
using (var client = new OscClient("127.0.0.1", 9000))
|
|
{
|
|
// Send two-component float values ten times.
|
|
for (var i = 0; i < 1; i++)
|
|
{
|
|
yield return new WaitForSeconds(0.5f);
|
|
client.Send("/uploaded", // OSC address
|
|
message); // Message content
|
|
}
|
|
}
|
|
}
|
|
|
|
} |