/// <summary> /// Coroutine for retrieving xAPI statements from the configured LRS. /// </summary> /// <param name="url"></param> /// <param name="callback"></param> /// <returns></returns> public static IEnumerator GetStatementsRoutine(string url, Action <StatementResult, UnityWebRequest> callback) { // Serialize this thing then convert into a utf-8 byte array var request = XAPIMessenger.BuildGetRequest(url); yield return(request.SendWebRequest()); // Return whatever we found. StatementResult result = JsonConvert.DeserializeObject <StatementResult>(request.downloadHandler.text); // Correct Actor IFI Types for (int k = 0; k < result.StatementCount; k++) { result.Statements[k].Actor.ifi = result.Statements[k].Actor.GuessIFI(); } // Make the callback callback(result, request); }
/// <summary> /// Merge the specified original and recent StatementResult instances. /// /// This will merge the Statement arrays and maintain the most recent IRL for the More property. /// </summary> /// <param name="original">Original.</param> /// <param name="recent">Recent.</param> public static StatementResult Merge(StatementResult original, StatementResult recent, int?limit = null) { // Create the result to return StatementResult merged = new StatementResult(); // Check how many statements we need merged.Statements = new List <Statement>(original.StatementCount + recent.StatementCount); // Copy them into a new statement array merged.Statements.AddRange(original.Statements); merged.Statements.AddRange(recent.Statements); // Remove if necessary if (limit.HasValue && merged.StatementCount > limit.Value) { merged.Statements.RemoveRange(limit.Value - 1, 1 + merged.StatementCount - limit.Value); } // Then take the most recent IRI merged.MoreIRL = recent.MoreIRL; // And return whatever we build return(merged); }