462 lines
14 KiB
C#
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;
|
|
}
|
|
}
|
|
}
|