ZoeAppClass/Assets/Scripts/Menu/APIMenu.cs

462 lines
14 KiB
C#

using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Networking;
public class APIMenu : MonoBehaviour
{
#region User
[Serializable]
public class UserDetails
{
public int status;
public string token;
public Response[] response;
}
[Serializable]
public class Response
{
public int IDMatricula;
public string Nome;
}
#endregion
#region Class
[Serializable]
public class Classes
{
public int status;
public List<responseClass> response = new List<responseClass>();
}
[Serializable]
public class responseClass {
public int idclasses, idcourses, disabled, ordem, viewed, sprites, demo;
public string name, description;
}
#endregion
#region Courses
[Serializable]
public class Courses {
public int status;
public List<responseCourses> response = new List<responseCourses>();
}
[Serializable]
public class responseCourses {
public int IDCurso;
public string NomeVersao;
}
#endregion
#region Liberada
[Serializable]
public class AulasLiberadas
{
public int status;
public responseLiberadas[] response;
}
[Serializable]
public class responseLiberadas {
public int qtde_presencas;
public int IDCurso;
}
#endregion
string route = "zoe.myrobotlab.com.br";
bool gotRoute = false;
public bool LicaoDeCasa = true;
public static bool licaodecasa;
public List<ClassContents> classesStorage = new List<ClassContents>();
public List<ClassContents> coursesStorage = new List<ClassContents>();
CacheController cc;
public bool fullSync = false;
IEnumerator GetRoute()
{
yield return new WaitForEndOfFrame();
while (!ReadingFile.instance.canGo)
{
yield return new WaitForEndOfFrame();
}
route = ReadingFile.route;
yield return new WaitForEndOfFrame();
gotRoute = true;
yield break;
}
private void Awake()
{
cc = GetComponent<CacheController>();
licaodecasa = LicaoDeCasa;
if (PlayerPrefs.HasKey("CurrentVersion"))
{
if (PlayerPrefs.GetString("CurrentVersion") != Application.version)
{
Debug.Log("Has to resync");
fullSync = true;
PlayerPrefs.SetString("CurrentVersion", Application.version);
}
}
else
{
Debug.Log("Has to resync");
fullSync = true;
PlayerPrefs.SetString("CurrentVersion", Application.version);
}
VerifyCaches();
StartCoroutine(GetRoute());
}
public class BypassCertificate : CertificateHandler
{
protected override bool ValidateCertificate(byte[] certificateData)
{
//Simply return true no matter what
return true;
}
}
public IEnumerator listClasses(string idCurso, string qntdChamadas)
{
ClassContents thisClass = new ClassContents();
thisClass.idClass = idCurso;
bool useCache = false;
for (int i = 0; i < classesStorage.Count; i++)
{
if (classesStorage[i].idClass == idCurso && classesStorage[i].isHomework == LicaoDeCasa)
{
thisClass.contentJson = classesStorage[i].contentJson;
useCache = true;
continue;
}
}
while (!gotRoute)
{
yield return new WaitForEndOfFrame();
}
string rotaCerta = "getClassEnByCourse";
if (ReadingFile.instance.userType == ReadingFile.UserType.Admin)
{
rotaCerta = "getClassEnByCourseAll";
Debug.Log(qntdChamadas);
}
if (!useCache)
{
using (UnityWebRequest www = UnityWebRequest.Get(route + "/api/classes/" + rotaCerta + "/" + idCurso + "/" + qntdChamadas + "/" + ((LicaoDeCasa) ? 1 : 0)))
{
www.certificateHandler = new BypassCertificate();
www.downloadHandler = new DownloadHandlerBuffer();
string token = PlayerPrefs.GetString("token");
www.SetRequestHeader("token", Uri.EscapeUriString(token));
yield return www.SendWebRequest();
if (www.isNetworkError || www.isHttpError)
{
Debug.LogError(www.error);
yield return new WaitForSecondsRealtime(1);
yield return StartCoroutine(listClasses(idCurso, qntdChamadas));
}
else
{
string Json = www.downloadHandler.text;
thisClass.contentJson = Json;
Debug.Log(Json);
Classes classess = JsonUtility.FromJson<Classes>(Json);
if (classess.response.Count <= 0)
{
responseClass fakeResponse = new responseClass();
fakeResponse.description = "No Class";
fakeResponse.disabled = 1;
fakeResponse.idclasses = 0;
fakeResponse.idcourses = 0;
fakeResponse.name = "No class";
fakeResponse.ordem = 0;
fakeResponse.viewed = 0;
fakeResponse.sprites = 0;
fakeResponse.demo = 0;
classess.response.Add(fakeResponse);
}
// Mostrar apenas as aulas demonstrativas
if (ReadingFile.instance.userType == ReadingFile.UserType.Demo)
{
List<responseClass> newResponseForDemo = new List<responseClass>();
for (int i = 0; i < classess.response.Count; i++)
{
if (classess.response[i].demo == 1)
{
newResponseForDemo.Add(classess.response[i]);
}
}
//classess.response = new responseClass[newResponseForDemo.Count];
classess.response.AddRange(newResponseForDemo.ToArray());
}
MenuController menu = MenuController.instance;
menu.classes.Add(classess);
classesStorage.Add(thisClass);
Debug.Log("Added " + thisClass.ToString());
}
}
}
else
{
string Json = thisClass.contentJson;
Debug.Log(Json);
Classes classess = JsonUtility.FromJson<Classes>(Json);
if (classess.response.Count <= 0)
{
responseClass fakeResponse = new responseClass();
fakeResponse.description = "No Class";
fakeResponse.disabled = 1;
fakeResponse.idclasses = 0;
fakeResponse.idcourses = 0;
fakeResponse.name = "No class";
fakeResponse.ordem = 0;
fakeResponse.viewed = 0;
fakeResponse.sprites = 0;
fakeResponse.demo = 0;
classess.response.Add(fakeResponse);
}
// Mostrar apenas as aulas demonstrativas
if (ReadingFile.instance.userType == ReadingFile.UserType.Demo)
{
List<responseClass> newResponseForDemo = new List<responseClass>();
for (int i = 0; i < classess.response.Count; i++)
{
if (classess.response[i].demo == 1)
{
newResponseForDemo.Add(classess.response[i]);
}
}
//classess.response = new responseClass[newResponseForDemo.Count];
classess.response.AddRange(newResponseForDemo.ToArray());
}
MenuController menu = MenuController.instance;
menu.classes.Add(classess);
}
yield break;
}
public IEnumerator aulasLiberadas(string idaluno, string idcurso, string banco, string nomeCurso)
{
while (!gotRoute)
{
yield return new WaitForEndOfFrame();
}
using (UnityWebRequest www = UnityWebRequest.Get(route + "/api/classes/getQtdeChamadas/" + idaluno + "/(" + idcurso + ")/" + banco))
{
www.certificateHandler = new BypassCertificate();
www.downloadHandler = new DownloadHandlerBuffer();
string token = PlayerPrefs.GetString("token");
www.SetRequestHeader("token", Uri.EscapeUriString(token));
yield return www.SendWebRequest();
if (www.isNetworkError || www.isHttpError)
{
Debug.LogError(www.error);
yield return new WaitForSecondsRealtime(1);
yield return StartCoroutine(aulasLiberadas(idaluno, idcurso, banco, nomeCurso));
}
else
{
string Json = www.downloadHandler.text;
Json = Json.Replace(":[[{", ":[{");
Json = Json.Replace("}]]}", "}]}");
AulasLiberadas aulas = JsonUtility.FromJson<AulasLiberadas>(Json);
int qtdPresencas = aulas?.response?.Length > 0 ? aulas.response[0].qtde_presencas : 0;
MenuController menu = MenuController.instance;
menu.allowedCourses.Add(idcurso);
menu.allowedClasses.Add(qtdPresencas);
Debug.Log("Quantidade de chamadas: " + aulas.response[0].qtde_presencas);
menu.coursesName.Add(nomeCurso);
}
}
yield break;
}
public IEnumerator listCourses(string idAluno, string banco) {
while (!gotRoute)
{
yield return new WaitForEndOfFrame();
}
string url = route + "/api/courses/";
if (ReadingFile.StudentUsers.Contains(ReadingFile.instance.userType))
url += "getRobotCourseByStudent/" + idAluno + "/" + banco;
else
url += "getRobotCourses";
using (UnityWebRequest www = UnityWebRequest.Get(url))
{
www.certificateHandler = new BypassCertificate();
www.downloadHandler = new DownloadHandlerBuffer();
string token = PlayerPrefs.GetString("token");
www.SetRequestHeader("token", Uri.EscapeUriString(token));
yield return www.SendWebRequest();
if (www.isNetworkError || www.isHttpError)
{
Debug.LogError(www.error);
yield return new WaitForSecondsRealtime(1);
yield return StartCoroutine(listCourses(idAluno, banco));
}
else
{
string Json = www.downloadHandler.text;
Json = Json.Replace(":[[{", ":[{");
Json = Json.Replace("}]]}", "}]}");
Courses courses = JsonUtility.FromJson<Courses>(Json);
// responseCourses kids = new responseCourses();
// kids.IDCurso = 42;
// kids.NomeVersao = "Kids Módulo 1";
// courses.response.Add(kids);
if (ReadingFile.instance.userType != ReadingFile.UserType.Admin)
{
responseCourses extraClasses = new responseCourses();
extraClasses.IDCurso = 41;
extraClasses.NomeVersao = "Aulas Extras";
courses.response.Add(extraClasses);
}
if (courses.status == 200)
{
for (int i = 0; i < courses.response.Count; i++)
{
yield return StartCoroutine(aulasLiberadas(ReadingFile.idmatricula,
courses.response[i].IDCurso.ToString(), ReadingFile.banco, courses.response[i].NomeVersao));
}
MenuController menu = MenuController.instance;
menu.listedCourses = true;
}
else
{
yield return new WaitForSecondsRealtime(1);
yield return StartCoroutine(listCourses(idAluno, banco));
}
}
}
yield break;
}
public IEnumerator LogarAluno()
{
while (!gotRoute)
{
yield return new WaitForEndOfFrame();
}
WWWForm form = new WWWForm();
form.AddField("type", 4);
form.AddField("password", ReadingFile.senha);
form.AddField("login", ReadingFile.idmatricula);
form.AddField("db", ReadingFile.banco);
using (UnityWebRequest www = UnityWebRequest.Post(route + "/api/users/authUser", form))
{
www.certificateHandler = new BypassCertificate();
www.downloadHandler = new DownloadHandlerBuffer();
yield return www.SendWebRequest();
if (www.isNetworkError || www.isHttpError)
{
Debug.Log(www.error);
}
else
{
//errorInOpen.text = www.downloadHandler.text;
//errorInOpen.text = www.responseCode.ToString();
string Json = www.downloadHandler.text;
Json = Json.Replace("[[{", "[{");
Json = Json.Replace("}]]", "}]");
UserDetails userdet = JsonUtility.FromJson<UserDetails>(Json);
if (userdet.status == 200)
{
PlayerPrefs.SetString("token", userdet.token);
}
else
{
}
}
}
}
public void UpdateClasses()
{
}
public void VerifyCaches()
{
if (!fullSync)
{
if (cc.HasFile("ClassLists.txt"))
{
classesStorage = cc.LoadCache("ClassLists.txt");
}
if (cc.HasFile("CoursesList.txt"))
{
coursesStorage = cc.LoadCache("CoursesList.txt");
}
}
else
{
}
}
public void FinishedLoading()
{
cc.SaveCache(classesStorage, "ClassLists.txt");
cc.SaveCache(coursesStorage, "CoursesList.txt");
if (fullSync)
{
fullSync = false;
}
}
}