From 32cf23f18c9cc82fe828980a07b17b39919cc864 Mon Sep 17 00:00:00 2001 From: Loris Sauter Date: Wed, 27 Apr 2022 12:04:19 +0200 Subject: [PATCH 1/3] Added support for upcoming DRES API change for submissions --- Runtime/Libs/Dev.Dres.ClientApi.dll | Bin 140288 -> 140288 bytes Runtime/Libs/Dev.Dres.ClientApi.dll.meta | 2 +- Runtime/Libs/Dev.Dres.ClientApi.xml.meta | 2 +- Runtime/Libs/JsonSubTypes.Dres.dll.meta | 2 +- Runtime/Libs/Newtonsoft.Json.Dres.dll.meta | 2 +- Runtime/Libs/RestSharp.Dres.dll.meta | 2 +- .../Scripts/Dres/UnityClient/DresClient.cs | 12 +++++++ .../Scripts/Dres/UnityClient/DresWrapper.cs | 32 +++++++++++++----- 8 files changed, 40 insertions(+), 14 deletions(-) diff --git a/Runtime/Libs/Dev.Dres.ClientApi.dll b/Runtime/Libs/Dev.Dres.ClientApi.dll index dc63cfe107e3248532b7216b788ff07a221c7c64..c0c1ea1382df2e09e991479c87da7124e2669f11 100644 GIT binary patch delta 43 zcmZoT!O?JnV?qaulu%|;W6#ze#s|*@Zg?@NaEVRvYBUAQ*^>bwBY96TZ(Wuw|wXUggfVi B7KH!+ diff --git a/Runtime/Libs/Dev.Dres.ClientApi.dll.meta b/Runtime/Libs/Dev.Dres.ClientApi.dll.meta index 10c51a8..81d6bfa 100644 --- a/Runtime/Libs/Dev.Dres.ClientApi.dll.meta +++ b/Runtime/Libs/Dev.Dres.ClientApi.dll.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: d1665b390fad2f24f970ad6268e95f01 +guid: ea1e48357400b6c4f9ab9924741896e6 PluginImporter: externalObjects: {} serializedVersion: 2 diff --git a/Runtime/Libs/Dev.Dres.ClientApi.xml.meta b/Runtime/Libs/Dev.Dres.ClientApi.xml.meta index 9cbd85c..8f3dc8a 100644 --- a/Runtime/Libs/Dev.Dres.ClientApi.xml.meta +++ b/Runtime/Libs/Dev.Dres.ClientApi.xml.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: afc79d5a8516b8f45ba4aed7d21cbb32 +guid: 7acaebea6dcab594880fd70383c987f7 TextScriptImporter: externalObjects: {} userData: diff --git a/Runtime/Libs/JsonSubTypes.Dres.dll.meta b/Runtime/Libs/JsonSubTypes.Dres.dll.meta index e6f027a..feebf4e 100644 --- a/Runtime/Libs/JsonSubTypes.Dres.dll.meta +++ b/Runtime/Libs/JsonSubTypes.Dres.dll.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 2512d704cb515e540aed7475bfa3e124 +guid: 1aafa2d95222bc04da0a81af1ca8a443 PluginImporter: externalObjects: {} serializedVersion: 2 diff --git a/Runtime/Libs/Newtonsoft.Json.Dres.dll.meta b/Runtime/Libs/Newtonsoft.Json.Dres.dll.meta index 7558adc..cb66a09 100644 --- a/Runtime/Libs/Newtonsoft.Json.Dres.dll.meta +++ b/Runtime/Libs/Newtonsoft.Json.Dres.dll.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 5dee3bce8bb1d7645b21fe9439ba6779 +guid: dbf677481f82bff4e975e213a5a425d5 PluginImporter: externalObjects: {} serializedVersion: 2 diff --git a/Runtime/Libs/RestSharp.Dres.dll.meta b/Runtime/Libs/RestSharp.Dres.dll.meta index ad04b0f..8ce4fd9 100644 --- a/Runtime/Libs/RestSharp.Dres.dll.meta +++ b/Runtime/Libs/RestSharp.Dres.dll.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: a936bad827f5c8846b4236cc12e0799f +guid: e027e052fdbe41a4bb05da336a3c24a9 PluginImporter: externalObjects: {} serializedVersion: 2 diff --git a/Runtime/Scripts/Dres/UnityClient/DresClient.cs b/Runtime/Scripts/Dres/UnityClient/DresClient.cs index 424b94d..71fa089 100644 --- a/Runtime/Scripts/Dres/UnityClient/DresClient.cs +++ b/Runtime/Scripts/Dres/UnityClient/DresClient.cs @@ -1,6 +1,7 @@ using System.Collections.Generic; using System.Threading.Tasks; using Dev.Dres.ClientApi.Model; +using UnityEditor; namespace Dres.Unityclient { @@ -26,6 +27,7 @@ public async Task Login() UserDetails = await DresWrapper.Login(config.user, config.password); } + /// /// Submits the given item (and optionally frame informaiton) to the DRES instance as current user. /// @@ -38,6 +40,16 @@ public async Task SubmitResult(string item, int? fr return await DresWrapper.Submit(item, UserDetails.SessionId, frame); } + /// + /// Submits the given text to the DRES instance as current user + /// + /// The text to submit (this can be anything). + /// The success / failure state of the operation + public async Task SubmitTextualResult(string text) + { + return await DresWrapper.SubmitText(text, UserDetails.SessionId); + } + /// /// Sends the given results as result log to the DRES instance as current user. /// For further information on the logging format, please consider visiting the diff --git a/Runtime/Scripts/Dres/UnityClient/DresWrapper.cs b/Runtime/Scripts/Dres/UnityClient/DresWrapper.cs index 16a588f..0b2be76 100644 --- a/Runtime/Scripts/Dres/UnityClient/DresWrapper.cs +++ b/Runtime/Scripts/Dres/UnityClient/DresWrapper.cs @@ -12,25 +12,25 @@ namespace Dres.Unityclient ///
/// This class is held deliberately stateless (no session ID etc.) to allow multi-user scenarios in the future. ///
- public static class DresWrapper + internal static class DresWrapper { /// /// The deliberately single Logging Api instance of DRES. Used to send logs to DRES /// - public static readonly LogApi LogApi = new LogApi(DresConfigManager.Instance.ApiConfiguration); + internal static readonly LogApi LogApi = new LogApi(DresConfigManager.Instance.ApiConfiguration); /// /// The deliberately single Status Api instance of DRES. Used to get the status of DRES /// - public static readonly StatusApi StatusApi = new StatusApi(DresConfigManager.Instance.ApiConfiguration); + internal static readonly StatusApi StatusApi = new StatusApi(DresConfigManager.Instance.ApiConfiguration); /// /// The deliberately single Submission Api instance of DRES. Used to submit media items during competitions to DRES: /// - public static readonly SubmissionApi SubmissionApi = new SubmissionApi(DresConfigManager.Instance.ApiConfiguration); + internal static readonly SubmissionApi SubmissionApi = new SubmissionApi(DresConfigManager.Instance.ApiConfiguration); /// /// The deliberately single User Api instance of DRES. Used to log into DRES and retrieve the session id of the user. /// - public static readonly UserApi UserApi = new UserApi(DresConfigManager.Instance.ApiConfiguration); + internal static readonly UserApi UserApi = new UserApi(DresConfigManager.Instance.ApiConfiguration); /// /// Login to DRES with given username and password. @@ -41,7 +41,7 @@ public static class DresWrapper /// The DRES password /// The login state on success. /// If the config has no credentials set and no credentials file exists - public static async Task Login(string user, string password) + internal static async Task Login(string user, string password) { var loginRequest = new LoginRequest(user, password); return await UserApi.PostApiV1LoginAsync(loginRequest); @@ -57,10 +57,24 @@ public static async Task Login(string user, string password) /// If no notion of frames exist for the item, this can likely be omitted. /// The submission state on success / failure. /// A 404 if there is no ongoing competition for this session, a 403 if there is no such user - public static async Task Submit(string item, string session, int? frame = null) + internal static async Task Submit(string item, string session, int? frame = null) { return await SubmissionApi.GetApiV1SubmitAsync(item: item, frame: frame, session: session); } + + /// + /// Submits given TEXT to the DRES endpoint. + /// Submissions are only allowed during active competitions (inferred from the given sesssion id) + /// + /// The submission in textual form (might also be a number) submit + /// The session id to which this submission belongs + /// The submission state on success / failure. + /// A 404 if there is no ongoing competition for this session, a 403 if there is no such user + internal static async Task SubmitText(string text, string session) + { + return await SubmissionApi.GetApiV1SubmitAsync(text= text, session=session); + } + /// /// Send result logs to the DRES endpoint. @@ -75,7 +89,7 @@ public static async Task Submit(string item, string /// The session id to which this log belongs /// The state of success / failure of the log sending. /// A 404 if there is no ongoing competition for this session, a 403 if there is no such user - public static async Task LogResults(long timestamp, string sortType, string resultSetAvailability, + internal static async Task LogResults(long timestamp, string sortType, string resultSetAvailability, List results, List events, string session) { var resultLog = new QueryResultLog(timestamp, sortType, resultSetAvailability, results, events); @@ -92,7 +106,7 @@ public static async Task LogResults(long timestamp, string sortTy /// The session id to which this log belongs /// The state of success / failure of the log sending. /// A 404 if there is no ongoing competition for this session, a 403 if there is no such user - public static async Task LogQueryEvents(long timestamp, List events, string session) + internal static async Task LogQueryEvents(long timestamp, List events, string session) { var queryEventLog = new QueryEventLog(timestamp, events); return await LogApi.PostApiV1LogQueryAsync(session, queryEventLog); From e61246b2d6b8ae9b9d4e40e498f70d90283aecf4 Mon Sep 17 00:00:00 2001 From: Florian Spiess Date: Mon, 9 May 2022 10:05:22 +0200 Subject: [PATCH 2/3] Removed superfluous meta file. --- Runtime/Scripts/Dres/UnityInterface.meta | 3 --- 1 file changed, 3 deletions(-) delete mode 100644 Runtime/Scripts/Dres/UnityInterface.meta diff --git a/Runtime/Scripts/Dres/UnityInterface.meta b/Runtime/Scripts/Dres/UnityInterface.meta deleted file mode 100644 index 5c7a2c8..0000000 --- a/Runtime/Scripts/Dres/UnityInterface.meta +++ /dev/null @@ -1,3 +0,0 @@ -fileFormatVersion: 2 -guid: 557a5c5eae9b444fb1f602a66abf358d -timeCreated: 1638192805 \ No newline at end of file From 17282ffd2ee4a7f8026e22ffc5f910a6a798114c Mon Sep 17 00:00:00 2001 From: Florian Spiess Date: Mon, 9 May 2022 11:14:02 +0200 Subject: [PATCH 3/3] Upgraded API and fixed text submission. --- Runtime/Libs/Dev.Dres.ClientApi.dll | Bin 140288 -> 100352 bytes Runtime/Libs/Dev.Dres.ClientApi.dll.meta | 2 +- Runtime/Libs/Dev.Dres.ClientApi.xml | 6606 ++++++++--------- Runtime/Libs/Dev.Dres.ClientApi.xml.meta | 2 +- Runtime/Libs/JsonSubTypes.Dres.dll.meta | 2 +- Runtime/Libs/Newtonsoft.Json.Dres.dll.meta | 2 +- Runtime/Libs/RestSharp.Dres.dll.meta | 2 +- .../Scripts/Dres/UnityClient/DresWrapper.cs | 2 +- 8 files changed, 3047 insertions(+), 3571 deletions(-) mode change 100644 => 100755 Runtime/Libs/Dev.Dres.ClientApi.dll diff --git a/Runtime/Libs/Dev.Dres.ClientApi.dll b/Runtime/Libs/Dev.Dres.ClientApi.dll old mode 100644 new mode 100755 index c0c1ea1382df2e09e991479c87da7124e2669f11..3a3c53f310f205e524b429c852afc5cb888d29e8 GIT binary patch literal 100352 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 literal 140288 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 diff --git a/Runtime/Libs/Dev.Dres.ClientApi.dll.meta b/Runtime/Libs/Dev.Dres.ClientApi.dll.meta index 81d6bfa..10c51a8 100644 --- a/Runtime/Libs/Dev.Dres.ClientApi.dll.meta +++ b/Runtime/Libs/Dev.Dres.ClientApi.dll.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: ea1e48357400b6c4f9ab9924741896e6 +guid: d1665b390fad2f24f970ad6268e95f01 PluginImporter: externalObjects: {} serializedVersion: 2 diff --git a/Runtime/Libs/Dev.Dres.ClientApi.xml b/Runtime/Libs/Dev.Dres.ClientApi.xml index 578c07b..b7c99db 100644 --- a/Runtime/Libs/Dev.Dres.ClientApi.xml +++ b/Runtime/Libs/Dev.Dres.ClientApi.xml @@ -1,3565 +1,3041 @@ - - - - Dev.Dres.ClientApi - - - - - Represents a collection of functions to interact with the API endpoints - - - - - Represents configuration aspects required to interact with the API endpoints. - - - - - Gets the base path of the API client. - - The base path - - - - Gets or sets the configuration object - - An instance of the Configuration - - - - Provides a factory method hook for the creation of exceptions. - - - - - Returns an overview of the currently active task for a run - - - - - Thrown when fails to make API call - - Session Token - ClientTaskInfo - - - - Returns an overview of the currently active task for a run - - - - - Thrown when fails to make API call - - Session Token - ApiResponse of ClientTaskInfo - - - - Lists an overview of all competition runs visible to the current client - - - - - Thrown when fails to make API call - Session Token - ClientRunInfoList - - - - Lists an overview of all competition runs visible to the current client - - - - - Thrown when fails to make API call - Session Token - ApiResponse of ClientRunInfoList - - - - Returns an overview of the currently active task for a run - - - - - Thrown when fails to make API call - - Session Token - Task of ClientTaskInfo - - - - Returns an overview of the currently active task for a run - - - - - Thrown when fails to make API call - - Session Token - Task of ApiResponse (ClientTaskInfo) - - - - Lists an overview of all competition runs visible to the current client - - - - - Thrown when fails to make API call - Session Token - Task of ClientRunInfoList - - - - Lists an overview of all competition runs visible to the current client - - - - - Thrown when fails to make API call - Session Token - Task of ApiResponse (ClientRunInfoList) - - - - Represents a collection of functions to interact with the API endpoints - - - - - Initializes a new instance of the class. - - - - - - Initializes a new instance of the class - - - - - - Initializes a new instance of the class - using Configuration object - - An instance of Configuration - - - - - Gets the base path of the API client. - - The base path - - - - Sets the base path of the API client. - - The base path - - - - Gets the default header. - - Dictionary of HTTP header - - - - Add default header. - - Header field name. - Header field value. - - - - - Returns an overview of the currently active task for a run - - Thrown when fails to make API call - - Session Token - ClientTaskInfo - - - - Returns an overview of the currently active task for a run - - Thrown when fails to make API call - - Session Token - ApiResponse of ClientTaskInfo - - - - Returns an overview of the currently active task for a run - - Thrown when fails to make API call - - Session Token - Task of ClientTaskInfo - - - - Returns an overview of the currently active task for a run - - Thrown when fails to make API call - - Session Token - Task of ApiResponse (ClientTaskInfo) - - - - Lists an overview of all competition runs visible to the current client - - Thrown when fails to make API call - Session Token - ClientRunInfoList - - - - Lists an overview of all competition runs visible to the current client - - Thrown when fails to make API call - Session Token - ApiResponse of ClientRunInfoList - - - - Lists an overview of all competition runs visible to the current client - - Thrown when fails to make API call - Session Token - Task of ClientRunInfoList - - - - Lists an overview of all competition runs visible to the current client - - Thrown when fails to make API call - Session Token - Task of ApiResponse (ClientRunInfoList) - - - - Gets or sets the configuration object - - An instance of the Configuration - - - - Provides a factory method hook for the creation of exceptions. - - - - - Represents a collection of functions to interact with the API endpoints - - - - - Provides a JSON download of the entire competition description structure. - - - - - Thrown when fails to make API call - Competition ID - string - - - - Provides a JSON download of the entire competition description structure. - - - - - Thrown when fails to make API call - Competition ID - ApiResponse of string - - - - Provides a JSON download of the entire competition run structure. - - - - - Thrown when fails to make API call - Competition run ID - string - - - - Provides a JSON download of the entire competition run structure. - - - - - Thrown when fails to make API call - Competition run ID - ApiResponse of string - - - - Provides a CSV download with the scores for a given competition run. - - - - - Thrown when fails to make API call - Competition run ID - string - - - - Provides a CSV download with the scores for a given competition run. - - - - - Thrown when fails to make API call - Competition run ID - ApiResponse of string - - - - Provides a JSON download of the entire competition description structure. - - - - - Thrown when fails to make API call - Competition ID - Task of string - - - - Provides a JSON download of the entire competition description structure. - - - - - Thrown when fails to make API call - Competition ID - Task of ApiResponse (string) - - - - Provides a JSON download of the entire competition run structure. - - - - - Thrown when fails to make API call - Competition run ID - Task of string - - - - Provides a JSON download of the entire competition run structure. - - - - - Thrown when fails to make API call - Competition run ID - Task of ApiResponse (string) - - - - Provides a CSV download with the scores for a given competition run. - - - - - Thrown when fails to make API call - Competition run ID - Task of string - - - - Provides a CSV download with the scores for a given competition run. - - - - - Thrown when fails to make API call - Competition run ID - Task of ApiResponse (string) - - - - Represents a collection of functions to interact with the API endpoints - - - - - Initializes a new instance of the class. - - - - - - Initializes a new instance of the class - - - - - - Initializes a new instance of the class - using Configuration object - - An instance of Configuration - - - - - Gets the base path of the API client. - - The base path - - - - Sets the base path of the API client. - - The base path - - - - Gets the default header. - - Dictionary of HTTP header - - - - Add default header. - - Header field name. - Header field value. - - - - - Provides a JSON download of the entire competition description structure. - - Thrown when fails to make API call - Competition ID - string - - - - Provides a JSON download of the entire competition description structure. - - Thrown when fails to make API call - Competition ID - ApiResponse of string - - - - Provides a JSON download of the entire competition description structure. - - Thrown when fails to make API call - Competition ID - Task of string - - - - Provides a JSON download of the entire competition description structure. - - Thrown when fails to make API call - Competition ID - Task of ApiResponse (string) - - - - Provides a JSON download of the entire competition run structure. - - Thrown when fails to make API call - Competition run ID - string - - - - Provides a JSON download of the entire competition run structure. - - Thrown when fails to make API call - Competition run ID - ApiResponse of string - - - - Provides a JSON download of the entire competition run structure. - - Thrown when fails to make API call - Competition run ID - Task of string - - - - Provides a JSON download of the entire competition run structure. - - Thrown when fails to make API call - Competition run ID - Task of ApiResponse (string) - - - - Provides a CSV download with the scores for a given competition run. - - Thrown when fails to make API call - Competition run ID - string - - - - Provides a CSV download with the scores for a given competition run. - - Thrown when fails to make API call - Competition run ID - ApiResponse of string - - - - Provides a CSV download with the scores for a given competition run. - - Thrown when fails to make API call - Competition run ID - Task of string - - - - Provides a CSV download with the scores for a given competition run. - - Thrown when fails to make API call - Competition run ID - Task of ApiResponse (string) - - - - Gets or sets the configuration object - - An instance of the Configuration - - - - Provides a factory method hook for the creation of exceptions. - - - - - Represents a collection of functions to interact with the API endpoints - - - - - Accepts query logs from participants - - - - - Thrown when fails to make API call - Session Token - (optional) - SuccessStatus - - - - Accepts query logs from participants - - - - - Thrown when fails to make API call - Session Token - (optional) - ApiResponse of SuccessStatus - - - - Accepts result logs from participants - - - - - Thrown when fails to make API call - Session Token - (optional) - SuccessStatus - - - - Accepts result logs from participants - - - - - Thrown when fails to make API call - Session Token - (optional) - ApiResponse of SuccessStatus - - - - Accepts query logs from participants - - - - - Thrown when fails to make API call - Session Token - (optional) - Task of SuccessStatus - - - - Accepts query logs from participants - - - - - Thrown when fails to make API call - Session Token - (optional) - Task of ApiResponse (SuccessStatus) - - - - Accepts result logs from participants - - - - - Thrown when fails to make API call - Session Token - (optional) - Task of SuccessStatus - - - - Accepts result logs from participants - - - - - Thrown when fails to make API call - Session Token - (optional) - Task of ApiResponse (SuccessStatus) - - - - Represents a collection of functions to interact with the API endpoints - - - - - Initializes a new instance of the class. - - - - - - Initializes a new instance of the class - - - - - - Initializes a new instance of the class - using Configuration object - - An instance of Configuration - - - - - Gets the base path of the API client. - - The base path - - - - Sets the base path of the API client. - - The base path - - - - Gets the default header. - - Dictionary of HTTP header - - - - Add default header. - - Header field name. - Header field value. - - - - - Accepts query logs from participants - - Thrown when fails to make API call - Session Token - (optional) - SuccessStatus - - - - Accepts query logs from participants - - Thrown when fails to make API call - Session Token - (optional) - ApiResponse of SuccessStatus - - - - Accepts query logs from participants - - Thrown when fails to make API call - Session Token - (optional) - Task of SuccessStatus - - - - Accepts query logs from participants - - Thrown when fails to make API call - Session Token - (optional) - Task of ApiResponse (SuccessStatus) - - - - Accepts result logs from participants - - Thrown when fails to make API call - Session Token - (optional) - SuccessStatus - - - - Accepts result logs from participants - - Thrown when fails to make API call - Session Token - (optional) - ApiResponse of SuccessStatus - - - - Accepts result logs from participants - - Thrown when fails to make API call - Session Token - (optional) - Task of SuccessStatus - - - - Accepts result logs from participants - - Thrown when fails to make API call - Session Token - (optional) - Task of ApiResponse (SuccessStatus) - - - - Gets or sets the configuration object - - An instance of the Configuration - - - - Provides a factory method hook for the creation of exceptions. - - - - - Represents a collection of functions to interact with the API endpoints - - - - - Returns the current time on the server. - - - - - Thrown when fails to make API call - CurrentTime - - - - Returns the current time on the server. - - - - - Thrown when fails to make API call - ApiResponse of CurrentTime - - - - Returns the current time on the server. - - - - - Thrown when fails to make API call - Task of CurrentTime - - - - Returns the current time on the server. - - - - - Thrown when fails to make API call - Task of ApiResponse (CurrentTime) - - - - Represents a collection of functions to interact with the API endpoints - - - - - Initializes a new instance of the class. - - - - - - Initializes a new instance of the class - - - - - - Initializes a new instance of the class - using Configuration object - - An instance of Configuration - - - - - Gets the base path of the API client. - - The base path - - - - Sets the base path of the API client. - - The base path - - - - Gets the default header. - - Dictionary of HTTP header - - - - Add default header. - - Header field name. - Header field value. - - - - - Returns the current time on the server. - - Thrown when fails to make API call - CurrentTime - - - - Returns the current time on the server. - - Thrown when fails to make API call - ApiResponse of CurrentTime - - - - Returns the current time on the server. - - Thrown when fails to make API call - Task of CurrentTime - - - - Returns the current time on the server. - - Thrown when fails to make API call - Task of ApiResponse (CurrentTime) - - - - Gets or sets the configuration object - - An instance of the Configuration - - - - Provides a factory method hook for the creation of exceptions. - - - - - Represents a collection of functions to interact with the API endpoints - - - - - Endpoint to accept submissions - - - - - Thrown when fails to make API call - Collection identifier. Optional, in which case the default collection for the run will be considered. (optional) - Identifier for the actual media object or media file. (optional) - Frame number for media with temporal progression (e.g. video). (optional) - Shot number for media with temporal progression (e.g. video). (optional) - Timecode for media with temporal progression (e.g. video). (optional) - Session Token (optional) - SuccessfulSubmissionsStatus - - - - Endpoint to accept submissions - - - - - Thrown when fails to make API call - Collection identifier. Optional, in which case the default collection for the run will be considered. (optional) - Identifier for the actual media object or media file. (optional) - Frame number for media with temporal progression (e.g. video). (optional) - Shot number for media with temporal progression (e.g. video). (optional) - Timecode for media with temporal progression (e.g. video). (optional) - Session Token (optional) - ApiResponse of SuccessfulSubmissionsStatus - - - - Endpoint to accept submissions - - - - - Thrown when fails to make API call - Collection identifier. Optional, in which case the default collection for the run will be considered. (optional) - Identifier for the actual media object or media file. (optional) - Frame number for media with temporal progression (e.g. video). (optional) - Shot number for media with temporal progression (e.g. video). (optional) - Timecode for media with temporal progression (e.g. video). (optional) - Session Token (optional) - Task of SuccessfulSubmissionsStatus - - - - Endpoint to accept submissions - - - - - Thrown when fails to make API call - Collection identifier. Optional, in which case the default collection for the run will be considered. (optional) - Identifier for the actual media object or media file. (optional) - Frame number for media with temporal progression (e.g. video). (optional) - Shot number for media with temporal progression (e.g. video). (optional) - Timecode for media with temporal progression (e.g. video). (optional) - Session Token (optional) - Task of ApiResponse (SuccessfulSubmissionsStatus) - - - - Represents a collection of functions to interact with the API endpoints - - - - - Initializes a new instance of the class. - - - - - - Initializes a new instance of the class - - - - - - Initializes a new instance of the class - using Configuration object - - An instance of Configuration - - - - - Gets the base path of the API client. - - The base path - - - - Sets the base path of the API client. - - The base path - - - - Gets the default header. - - Dictionary of HTTP header - - - - Add default header. - - Header field name. - Header field value. - - - - - Endpoint to accept submissions - - Thrown when fails to make API call - Collection identifier. Optional, in which case the default collection for the run will be considered. (optional) - Identifier for the actual media object or media file. (optional) - Frame number for media with temporal progression (e.g. video). (optional) - Shot number for media with temporal progression (e.g. video). (optional) - Timecode for media with temporal progression (e.g. video). (optional) - Session Token (optional) - SuccessfulSubmissionsStatus - - - - Endpoint to accept submissions - - Thrown when fails to make API call - Collection identifier. Optional, in which case the default collection for the run will be considered. (optional) - Identifier for the actual media object or media file. (optional) - Frame number for media with temporal progression (e.g. video). (optional) - Shot number for media with temporal progression (e.g. video). (optional) - Timecode for media with temporal progression (e.g. video). (optional) - Session Token (optional) - ApiResponse of SuccessfulSubmissionsStatus - - - - Endpoint to accept submissions - - Thrown when fails to make API call - Collection identifier. Optional, in which case the default collection for the run will be considered. (optional) - Identifier for the actual media object or media file. (optional) - Frame number for media with temporal progression (e.g. video). (optional) - Shot number for media with temporal progression (e.g. video). (optional) - Timecode for media with temporal progression (e.g. video). (optional) - Session Token (optional) - Task of SuccessfulSubmissionsStatus - - - - Endpoint to accept submissions - - Thrown when fails to make API call - Collection identifier. Optional, in which case the default collection for the run will be considered. (optional) - Identifier for the actual media object or media file. (optional) - Frame number for media with temporal progression (e.g. video). (optional) - Shot number for media with temporal progression (e.g. video). (optional) - Timecode for media with temporal progression (e.g. video). (optional) - Session Token (optional) - Task of ApiResponse (SuccessfulSubmissionsStatus) - - - - Gets or sets the configuration object - - An instance of the Configuration - - - - Provides a factory method hook for the creation of exceptions. - - - - - Represents a collection of functions to interact with the API endpoints - - - - - Deletes the specified user. Requires ADMIN privileges - - - - - Thrown when fails to make API call - User ID - UserDetails - - - - Deletes the specified user. Requires ADMIN privileges - - - - - Thrown when fails to make API call - User ID - ApiResponse of UserDetails - - - - Clears all user roles of the current session. - - - - - Thrown when fails to make API call - Session Token (optional) - SuccessStatus - - - - Clears all user roles of the current session. - - - - - Thrown when fails to make API call - Session Token (optional) - ApiResponse of SuccessStatus - - - - Get information about the current user. - - - - - Thrown when fails to make API call - UserDetails - - - - Get information about the current user. - - - - - Thrown when fails to make API call - ApiResponse of UserDetails - - - - Get current sessionId - - - - - Thrown when fails to make API call - Session Token (optional) - SessionId - - - - Get current sessionId - - - - - Thrown when fails to make API call - Session Token (optional) - ApiResponse of SessionId - - - - Gets details of the user with the given id - - - - - Thrown when fails to make API call - User's UID - UserDetails - - - - Gets details of the user with the given id - - - - - Thrown when fails to make API call - User's UID - ApiResponse of UserDetails - - - - Updates the specified user, if it exists. Anyone is allowed to update their data, however only ADMINs are allowed to update anyone - - - - - Thrown when fails to make API call - User ID - (optional) - UserDetails - - - - Updates the specified user, if it exists. Anyone is allowed to update their data, however only ADMINs are allowed to update anyone - - - - - Thrown when fails to make API call - User ID - (optional) - ApiResponse of UserDetails - - - - Sets roles for session based on user account and returns a session cookie. - - - - - Thrown when fails to make API call - (optional) - UserDetails - - - - Sets roles for session based on user account and returns a session cookie. - - - - - Thrown when fails to make API call - (optional) - ApiResponse of UserDetails - - - - Creates a new user, if the username is not already taken. Requires ADMIN privileges - - - - - Thrown when fails to make API call - (optional) - UserDetails - - - - Creates a new user, if the username is not already taken. Requires ADMIN privileges - - - - - Thrown when fails to make API call - (optional) - ApiResponse of UserDetails - - - - Deletes the specified user. Requires ADMIN privileges - - - - - Thrown when fails to make API call - User ID - Task of UserDetails - - - - Deletes the specified user. Requires ADMIN privileges - - - - - Thrown when fails to make API call - User ID - Task of ApiResponse (UserDetails) - - - - Clears all user roles of the current session. - - - - - Thrown when fails to make API call - Session Token (optional) - Task of SuccessStatus - - - - Clears all user roles of the current session. - - - - - Thrown when fails to make API call - Session Token (optional) - Task of ApiResponse (SuccessStatus) - - - - Get information about the current user. - - - - - Thrown when fails to make API call - Task of UserDetails - - - - Get information about the current user. - - - - - Thrown when fails to make API call - Task of ApiResponse (UserDetails) - - - - Get current sessionId - - - - - Thrown when fails to make API call - Session Token (optional) - Task of SessionId - - - - Get current sessionId - - - - - Thrown when fails to make API call - Session Token (optional) - Task of ApiResponse (SessionId) - - - - Gets details of the user with the given id - - - - - Thrown when fails to make API call - User's UID - Task of UserDetails - - - - Gets details of the user with the given id - - - - - Thrown when fails to make API call - User's UID - Task of ApiResponse (UserDetails) - - - - Updates the specified user, if it exists. Anyone is allowed to update their data, however only ADMINs are allowed to update anyone - - - - - Thrown when fails to make API call - User ID - (optional) - Task of UserDetails - - - - Updates the specified user, if it exists. Anyone is allowed to update their data, however only ADMINs are allowed to update anyone - - - - - Thrown when fails to make API call - User ID - (optional) - Task of ApiResponse (UserDetails) - - - - Sets roles for session based on user account and returns a session cookie. - - - - - Thrown when fails to make API call - (optional) - Task of UserDetails - - - - Sets roles for session based on user account and returns a session cookie. - - - - - Thrown when fails to make API call - (optional) - Task of ApiResponse (UserDetails) - - - - Creates a new user, if the username is not already taken. Requires ADMIN privileges - - - - - Thrown when fails to make API call - (optional) - Task of UserDetails - - - - Creates a new user, if the username is not already taken. Requires ADMIN privileges - - - - - Thrown when fails to make API call - (optional) - Task of ApiResponse (UserDetails) - - - - Represents a collection of functions to interact with the API endpoints - - - - - Initializes a new instance of the class. - - - - - - Initializes a new instance of the class - - - - - - Initializes a new instance of the class - using Configuration object - - An instance of Configuration - - - - - Gets the base path of the API client. - - The base path - - - - Sets the base path of the API client. - - The base path - - - - Gets the default header. - - Dictionary of HTTP header - - - - Add default header. - - Header field name. - Header field value. - - - - - Deletes the specified user. Requires ADMIN privileges - - Thrown when fails to make API call - User ID - UserDetails - - - - Deletes the specified user. Requires ADMIN privileges - - Thrown when fails to make API call - User ID - ApiResponse of UserDetails - - - - Deletes the specified user. Requires ADMIN privileges - - Thrown when fails to make API call - User ID - Task of UserDetails - - - - Deletes the specified user. Requires ADMIN privileges - - Thrown when fails to make API call - User ID - Task of ApiResponse (UserDetails) - - - - Clears all user roles of the current session. - - Thrown when fails to make API call - Session Token (optional) - SuccessStatus - - - - Clears all user roles of the current session. - - Thrown when fails to make API call - Session Token (optional) - ApiResponse of SuccessStatus - - - - Clears all user roles of the current session. - - Thrown when fails to make API call - Session Token (optional) - Task of SuccessStatus - - - - Clears all user roles of the current session. - - Thrown when fails to make API call - Session Token (optional) - Task of ApiResponse (SuccessStatus) - - - - Get information about the current user. - - Thrown when fails to make API call - UserDetails - - - - Get information about the current user. - - Thrown when fails to make API call - ApiResponse of UserDetails - - - - Get information about the current user. - - Thrown when fails to make API call - Task of UserDetails - - - - Get information about the current user. - - Thrown when fails to make API call - Task of ApiResponse (UserDetails) - - - - Get current sessionId - - Thrown when fails to make API call - Session Token (optional) - SessionId - - - - Get current sessionId - - Thrown when fails to make API call - Session Token (optional) - ApiResponse of SessionId - - - - Get current sessionId - - Thrown when fails to make API call - Session Token (optional) - Task of SessionId - - - - Get current sessionId - - Thrown when fails to make API call - Session Token (optional) - Task of ApiResponse (SessionId) - - - - Gets details of the user with the given id - - Thrown when fails to make API call - User's UID - UserDetails - - - - Gets details of the user with the given id - - Thrown when fails to make API call - User's UID - ApiResponse of UserDetails - - - - Gets details of the user with the given id - - Thrown when fails to make API call - User's UID - Task of UserDetails - - - - Gets details of the user with the given id - - Thrown when fails to make API call - User's UID - Task of ApiResponse (UserDetails) - - - - Updates the specified user, if it exists. Anyone is allowed to update their data, however only ADMINs are allowed to update anyone - - Thrown when fails to make API call - User ID - (optional) - UserDetails - - - - Updates the specified user, if it exists. Anyone is allowed to update their data, however only ADMINs are allowed to update anyone - - Thrown when fails to make API call - User ID - (optional) - ApiResponse of UserDetails - - - - Updates the specified user, if it exists. Anyone is allowed to update their data, however only ADMINs are allowed to update anyone - - Thrown when fails to make API call - User ID - (optional) - Task of UserDetails - - - - Updates the specified user, if it exists. Anyone is allowed to update their data, however only ADMINs are allowed to update anyone - - Thrown when fails to make API call - User ID - (optional) - Task of ApiResponse (UserDetails) - - - - Sets roles for session based on user account and returns a session cookie. - - Thrown when fails to make API call - (optional) - UserDetails - - - - Sets roles for session based on user account and returns a session cookie. - - Thrown when fails to make API call - (optional) - ApiResponse of UserDetails - - - - Sets roles for session based on user account and returns a session cookie. - - Thrown when fails to make API call - (optional) - Task of UserDetails - - - - Sets roles for session based on user account and returns a session cookie. - - Thrown when fails to make API call - (optional) - Task of ApiResponse (UserDetails) - - - - Creates a new user, if the username is not already taken. Requires ADMIN privileges - - Thrown when fails to make API call - (optional) - UserDetails - - - - Creates a new user, if the username is not already taken. Requires ADMIN privileges - - Thrown when fails to make API call - (optional) - ApiResponse of UserDetails - - - - Creates a new user, if the username is not already taken. Requires ADMIN privileges - - Thrown when fails to make API call - (optional) - Task of UserDetails - - - - Creates a new user, if the username is not already taken. Requires ADMIN privileges - - Thrown when fails to make API call - (optional) - Task of ApiResponse (UserDetails) - - - - Gets or sets the configuration object - - An instance of the Configuration - - - - Provides a factory method hook for the creation of exceptions. - - - - - API client is mainly responsible for making the HTTP call to the API backend. - - - - - Initializes a new instance of the class - with default configuration. - - - - - Initializes a new instance of the class - with default base path (http://localhost). - - An instance of Configuration. - - - - Initializes a new instance of the class - with default configuration. - - The base path. - - - - Gets or sets the default API client for making HTTP calls. - - The default API client. - - - - Makes the HTTP request (Sync). - - URL path. - HTTP method. - Query parameters. - HTTP body (POST request). - Header parameters. - Form parameters. - File parameters. - Path parameters. - Content Type of the request - Object - - - - Makes the asynchronous HTTP request. - - URL path. - HTTP method. - Query parameters. - HTTP body (POST request). - Header parameters. - Form parameters. - File parameters. - Path parameters. - Content type. - The Task instance. - - - - Escape string (url-encoded). - - String to be escaped. - Escaped string. - - - - Create FileParameter based on Stream. - - Parameter name. - Input stream. - FileParameter. - - - - If parameter is DateTime, output in a formatted string (default ISO 8601), customizable with Configuration.DateTime. - If parameter is a list, join the list with ",". - Otherwise just return the string. - - The parameter (header, path, query, form). - Formatted string. - - - - Deserialize the JSON string into a proper object. - - The HTTP response. - Object type. - Object representation of the JSON string. - - - - Serialize an input (model) into JSON string - - Object. - JSON string. - - - - Check if the given MIME is a JSON MIME. - JSON MIME examples: - application/json - application/json; charset=UTF8 - APPLICATION/JSON - application/vnd.company+json - - MIME - Returns True if MIME type is json. - - - - Select the Content-Type header's value from the given content-type array: - if JSON type exists in the given array, use it; - otherwise use the first one defined in 'consumes' - - The Content-Type array to select from. - The Content-Type header to use. - - - - Select the Accept header's value from the given accepts array: - if JSON exists in the given array, use it; - otherwise use all of them (joining into a string) - - The accepts array to select from. - The Accept header to use. - - - - Encode string in base64 format. - - String to be encoded. - Encoded string. - - - - Dynamically cast the object into target type. - - Object to be casted - Target type - Casted object - - - - Convert stream to byte array - - Input stream to be converted - Byte array - - - - URL encode a string - Credit/Ref: https://github.com/restsharp/RestSharp/blob/master/RestSharp/Extensions/StringExtensions.cs#L50 - - String to be URL encoded - Byte array - - - - Sanitize filename by removing the path - - Filename - Filename - - - - Convert params to key/value pairs. - Use collectionFormat to properly format lists and collections. - - Collection format. - Key name. - Value object. - A list of KeyValuePairs - - - - Check if generic object is a collection. - - - True if object is a collection type - - - - Gets or sets an instance of the IReadableConfiguration. - - An instance of the IReadableConfiguration. - - helps us to avoid modifying possibly global - configuration values from within a given client. It does not guarantee thread-safety - of the instance in any way. - - - - - Gets or sets the RestClient. - - An instance of the RestClient - - - - API Exception - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class. - - HTTP status code. - Error message. - - - - Initializes a new instance of the class. - - HTTP status code. - Error message. - Error content. - - - - Gets or sets the error code (HTTP status code) - - The error code (HTTP status code). - - - - Gets or sets the error content (body json object) - - The error content (Http response body). - - - - API Response - - - - - Initializes a new instance of the class. - - HTTP status code. - HTTP headers. - Data (parsed HTTP body) - - - - Gets or sets the status code (HTTP status code) - - The status code. - - - - Gets or sets the HTTP headers - - HTTP headers - - - - Gets or sets the data (parsed HTTP body) - - The data. - - - - Represents a set of configuration settings - - - - - Represents a readable-only configuration contract. - - - - - Gets the API key with prefix. - - API key identifier (authentication scheme). - API key with prefix. - - - - Gets the access token. - - Access token. - - - - Gets the API key. - - API key. - - - - Gets the API key prefix. - - API key prefix. - - - - Gets the base path. - - Base path. - - - - Gets the date time format. - - Date time foramt. - - - - Gets the default header. - - Default header. - - - - Gets the temp folder path. - - Temp folder path. - - - - Gets the HTTP connection timeout (in milliseconds) - - HTTP connection timeout. - - - - Gets the user agent. - - User agent. - - - - Gets the username. - - Username. - - - - Gets the password. - - Password. - - - - Version of the package. - - Version of the package. - - - - Identifier for ISO 8601 DateTime Format - - See https://msdn.microsoft.com/en-us/library/az4se3k1(v=vs.110).aspx#Anchor_8 for more information. - - - - Default creation of exceptions for a given method name and response object - - - - - Gets or sets the API key based on the authentication name. - - The API key. - - - - Gets or sets the prefix (e.g. Token) of the API key based on the authentication name. - - The prefix of the API key. - - - - Initializes a new instance of the class - - - - - Initializes a new instance of the class - - - - - Initializes a new instance of the class with different settings - - Api client - Dictionary of default HTTP header - Username - Password - accessToken - Dictionary of API key - Dictionary of API key prefix - Temp folder path - DateTime format string - HTTP connection timeout (in milliseconds) - HTTP user agent - - - - Initializes a new instance of the Configuration class. - - Api client. - - - - Gets the API key with prefix. - - API key identifier (authentication scheme). - API key with prefix. - - - - Add default header. - - Header field name. - Header field value. - - - - - Creates a new based on this instance. - - - - - - Returns a string with essential information for debugging. - - - - - Add Api Key Header. - - Api Key name. - Api Key value. - - - - - Sets the API key prefix. - - Api Key name. - Api Key value. - - - - Gets or sets the default Configuration. - - Configuration. - - - - Gets an instance of an ApiClient for this configuration - - - - - Gets or sets the base path for API access. - - - - - Gets or sets the default header. - - - - - Gets or sets the HTTP timeout (milliseconds) of ApiClient. Default to 100000 milliseconds. - - - - - Gets or sets the HTTP user agent. - - Http user agent. - - - - Gets or sets the username (HTTP basic authentication). - - The username. - - - - Gets or sets the password (HTTP basic authentication). - - The password. - - - - Gets or sets the access token for OAuth2 authentication. - - The access token. - - - - Gets or sets the temporary folder path to store the files downloaded from the server. - - Folder path. - - - - Gets or sets the date time format used when serializing in the ApiClient - By default, it's set to ISO 8601 - "o", for others see: - https://msdn.microsoft.com/en-us/library/az4se3k1(v=vs.110).aspx - and https://msdn.microsoft.com/en-us/library/8kb3ddd4(v=vs.110).aspx - No validation is done to ensure that the string you're providing is valid - - The DateTimeFormat string - - - - Gets or sets the prefix (e.g. Token) of the API key based on the authentication name. - - The prefix of the API key. - - - - Gets or sets the API key based on the authentication name. - - The API key. - - - - A delegate to ExceptionFactory method - - Method name - Response - Exceptions - - - - provides a compile-time extension point for globally configuring - API Clients. - - - A customized implementation via partial class may reside in another file and may - be excluded from automatic generation via a .openapi-generator-ignore file. - - - - - Formatter for 'date' openapi formats ss defined by full-date - RFC3339 - see https://github.com/OAI/OpenAPI-Specification/blob/master/versions/3.0.0.md#data-types - - - - - Initializes a new instance of the class. - - - - - ClientRunInfo - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class. - - id (required). - name (required). - description. - status (required). - - - - Returns the string presentation of the object - - String presentation of the object - - - - Returns the JSON string presentation of the object - - JSON string presentation of the object - - - - Returns true if objects are equal - - Object to be compared - Boolean - - - - Returns true if ClientRunInfo instances are equal - - Instance of ClientRunInfo to be compared - Boolean - - - - Gets the hash code - - Hash code - - - - To validate all properties of the instance - - Validation context - Validation Result - - - - Gets or Sets Status - - - - - Gets or Sets Id - - - - - Gets or Sets Name - - - - - Gets or Sets Description - - - - - Defines Status - - - - - Enum CREATED for value: CREATED - - - - - Enum ACTIVE for value: ACTIVE - - - - - Enum PREPARINGTASK for value: PREPARING_TASK - - - - - Enum RUNNINGTASK for value: RUNNING_TASK - - - - - Enum TASKENDED for value: TASK_ENDED - - - - - Enum TERMINATED for value: TERMINATED - - - - - ClientRunInfoList - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class. - - runs (required). - - - - Returns the string presentation of the object - - String presentation of the object - - - - Returns the JSON string presentation of the object - - JSON string presentation of the object - - - - Returns true if objects are equal - - Object to be compared - Boolean - - - - Returns true if ClientRunInfoList instances are equal - - Instance of ClientRunInfoList to be compared - Boolean - - - - Gets the hash code - - Hash code - - - - To validate all properties of the instance - - Validation context - Validation Result - - - - Gets or Sets Runs - - - - - ClientTaskInfo - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class. - - id (required). - name (required). - taskGroup (required). - remainingTime (required). - running (required). - - - - Returns the string presentation of the object - - String presentation of the object - - - - Returns the JSON string presentation of the object - - JSON string presentation of the object - - - - Returns true if objects are equal - - Object to be compared - Boolean - - - - Returns true if ClientTaskInfo instances are equal - - Instance of ClientTaskInfo to be compared - Boolean - - - - Gets the hash code - - Hash code - - - - To validate all properties of the instance - - Validation context - Validation Result - - - - Gets or Sets Id - - - - - Gets or Sets Name - - - - - Gets or Sets TaskGroup - - - - - Gets or Sets RemainingTime - - - - - Gets or Sets Running - - - - - CurrentTime - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class. - - timeStamp (required). - - - - Returns the string presentation of the object - - String presentation of the object - - - - Returns the JSON string presentation of the object - - JSON string presentation of the object - - - - Returns true if objects are equal - - Object to be compared - Boolean - - - - Returns true if CurrentTime instances are equal - - Instance of CurrentTime to be compared - Boolean - - - - Gets the hash code - - Hash code - - - - To validate all properties of the instance - - Validation context - Validation Result - - - - Gets or Sets TimeStamp - - - - - ErrorStatus - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class. - - description (required). - status (required). - - - - Returns the string presentation of the object - - String presentation of the object - - - - Returns the JSON string presentation of the object - - JSON string presentation of the object - - - - Returns true if objects are equal - - Object to be compared - Boolean - - - - Returns true if ErrorStatus instances are equal - - Instance of ErrorStatus to be compared - Boolean - - - - Gets the hash code - - Hash code - - - - To validate all properties of the instance - - Validation context - Validation Result - - - - Gets or Sets Description - - - - - Gets or Sets Status - - - - - LoginRequest - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class. - - username (required). - password (required). - - - - Returns the string presentation of the object - - String presentation of the object - - - - Returns the JSON string presentation of the object - - JSON string presentation of the object - - - - Returns true if objects are equal - - Object to be compared - Boolean - - - - Returns true if LoginRequest instances are equal - - Instance of LoginRequest to be compared - Boolean - - - - Gets the hash code - - Hash code - - - - To validate all properties of the instance - - Validation context - Validation Result - - - - Gets or Sets Username - - - - - Gets or Sets Password - - - - - QueryEvent - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class. - - timestamp (required). - category (required). - type (required). - value (required). - - - - Returns the string presentation of the object - - String presentation of the object - - - - Returns the JSON string presentation of the object - - JSON string presentation of the object - - - - Returns true if objects are equal - - Object to be compared - Boolean - - - - Returns true if QueryEvent instances are equal - - Instance of QueryEvent to be compared - Boolean - - - - Gets the hash code - - Hash code - - - - To validate all properties of the instance - - Validation context - Validation Result - - - - Gets or Sets Category - - - - - Gets or Sets Timestamp - - - - - Gets or Sets Type - - - - - Gets or Sets Value - - - - - Defines Category - - - - - Enum TEXT for value: TEXT - - - - - Enum IMAGE for value: IMAGE - - - - - Enum SKETCH for value: SKETCH - - - - - Enum FILTER for value: FILTER - - - - - Enum BROWSING for value: BROWSING - - - - - Enum COOPERATION for value: COOPERATION - - - - - Enum OTHER for value: OTHER - - - - - QueryEventLog - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class. - - timestamp (required). - events (required). - - - - Returns the string presentation of the object - - String presentation of the object - - - - Returns the JSON string presentation of the object - - JSON string presentation of the object - - - - Returns true if objects are equal - - Object to be compared - Boolean - - - - Returns true if QueryEventLog instances are equal - - Instance of QueryEventLog to be compared - Boolean - - - - Gets the hash code - - Hash code - - - - To validate all properties of the instance - - Validation context - Validation Result - - - - Gets or Sets Timestamp - - - - - Gets or Sets Events - - - - - QueryResult - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class. - - item (required). - segment. - frame. - score. - rank. - - - - Returns the string presentation of the object - - String presentation of the object - - - - Returns the JSON string presentation of the object - - JSON string presentation of the object - - - - Returns true if objects are equal - - Object to be compared - Boolean - - - - Returns true if QueryResult instances are equal - - Instance of QueryResult to be compared - Boolean - - - - Gets the hash code - - Hash code - - - - To validate all properties of the instance - - Validation context - Validation Result - - - - Gets or Sets Item - - - - - Gets or Sets Segment - - - - - Gets or Sets Frame - - - - - Gets or Sets Score - - - - - Gets or Sets Rank - - - - - QueryResultLog - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class. - - timestamp (required). - sortType (required). - resultSetAvailability (required). - results (required). - events (required). - - - - Returns the string presentation of the object - - String presentation of the object - - - - Returns the JSON string presentation of the object - - JSON string presentation of the object - - - - Returns true if objects are equal - - Object to be compared - Boolean - - - - Returns true if QueryResultLog instances are equal - - Instance of QueryResultLog to be compared - Boolean - - - - Gets the hash code - - Hash code - - - - To validate all properties of the instance - - Validation context - Validation Result - - - - Gets or Sets Timestamp - - - - - Gets or Sets SortType - - - - - Gets or Sets ResultSetAvailability - - - - - Gets or Sets Results - - - - - Gets or Sets Events - - - - - SessionId - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class. - - sessionId (required). - - - - Returns the string presentation of the object - - String presentation of the object - - - - Returns the JSON string presentation of the object - - JSON string presentation of the object - - - - Returns true if objects are equal - - Object to be compared - Boolean - - - - Returns true if SessionId instances are equal - - Instance of SessionId to be compared - Boolean - - - - Gets the hash code - - Hash code - - - - To validate all properties of the instance - - Validation context - Validation Result - - - - Gets or Sets _SessionId - - - - - SuccessfulSubmissionsStatus - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class. - - submission (required). - description (required). - status (required). - - - - Returns the string presentation of the object - - String presentation of the object - - - - Returns the JSON string presentation of the object - - JSON string presentation of the object - - - - Returns true if objects are equal - - Object to be compared - Boolean - - - - Returns true if SuccessfulSubmissionsStatus instances are equal - - Instance of SuccessfulSubmissionsStatus to be compared - Boolean - - - - Gets the hash code - - Hash code - - - - To validate all properties of the instance - - Validation context - Validation Result - - - - Gets or Sets Submission - - - - - Gets or Sets Description - - - - - Gets or Sets Status - - - - - Defines Submission - - - - - Enum CORRECT for value: CORRECT - - - - - Enum WRONG for value: WRONG - - - - - Enum INDETERMINATE for value: INDETERMINATE - - - - - Enum UNDECIDABLE for value: UNDECIDABLE - - - - - SuccessStatus - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class. - - description (required). - status (required). - - - - Returns the string presentation of the object - - String presentation of the object - - - - Returns the JSON string presentation of the object - - JSON string presentation of the object - - - - Returns true if objects are equal - - Object to be compared - Boolean - - - - Returns true if SuccessStatus instances are equal - - Instance of SuccessStatus to be compared - Boolean - - - - Gets the hash code - - Hash code - - - - To validate all properties of the instance - - Validation context - Validation Result - - - - Gets or Sets Description - - - - - Gets or Sets Status - - - - - UserDetails - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class. - - id (required). - username (required). - role (required). - sessionId. - - - - Returns the string presentation of the object - - String presentation of the object - - - - Returns the JSON string presentation of the object - - JSON string presentation of the object - - - - Returns true if objects are equal - - Object to be compared - Boolean - - - - Returns true if UserDetails instances are equal - - Instance of UserDetails to be compared - Boolean - - - - Gets the hash code - - Hash code - - - - To validate all properties of the instance - - Validation context - Validation Result - - - - Gets or Sets Role - - - - - Gets or Sets Id - - - - - Gets or Sets Username - - - - - Gets or Sets SessionId - - - - - Defines Role - - - - - Enum ADMIN for value: ADMIN - - - - - Enum JUDGE for value: JUDGE - - - - - Enum VIEWER for value: VIEWER - - - - - Enum PARTICIPANT for value: PARTICIPANT - - - - - UserRequest - - - - - Initializes a new instance of the class. - - - - - Initializes a new instance of the class. - - username (required). - password. - role. - - - - Returns the string presentation of the object - - String presentation of the object - - - - Returns the JSON string presentation of the object - - JSON string presentation of the object - - - - Returns true if objects are equal - - Object to be compared - Boolean - - - - Returns true if UserRequest instances are equal - - Instance of UserRequest to be compared - Boolean - - - - Gets the hash code - - Hash code - - - - To validate all properties of the instance - - Validation context - Validation Result - - - - Gets or Sets Role - - - - - Gets or Sets Username - - - - - Gets or Sets Password - - - - - Defines Role - - - - - Enum ADMIN for value: ADMIN - - - - - Enum JUDGE for value: JUDGE - - - - - Enum VIEWER for value: VIEWER - - - - - Enum PARTICIPANT for value: PARTICIPANT - - - - + + + + Dev.Dres.ClientApi + + + + + CurrentTime + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class. + + timeStamp (required). + + + + Gets or Sets TimeStamp + + + + + Returns the string presentation of the object + + String presentation of the object + + + + Returns the JSON string presentation of the object + + JSON string presentation of the object + + + + Returns true if objects are equal + + Object to be compared + Boolean + + + + Returns true if CurrentTime instances are equal + + Instance of CurrentTime to be compared + Boolean + + + + Gets the hash code + + Hash code + + + + To validate all properties of the instance + + Validation context + Validation Result + + + + SuccessfulSubmissionsStatus + + + + + Defines Submission + + + + + Enum CORRECT for value: CORRECT + + + + + Enum WRONG for value: WRONG + + + + + Enum INDETERMINATE for value: INDETERMINATE + + + + + Enum UNDECIDABLE for value: UNDECIDABLE + + + + + Gets or Sets Submission + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class. + + submission (required). + description (required). + status (required). + + + + Gets or Sets Description + + + + + Gets or Sets Status + + + + + Returns the string presentation of the object + + String presentation of the object + + + + Returns the JSON string presentation of the object + + JSON string presentation of the object + + + + Returns true if objects are equal + + Object to be compared + Boolean + + + + Returns true if SuccessfulSubmissionsStatus instances are equal + + Instance of SuccessfulSubmissionsStatus to be compared + Boolean + + + + Gets the hash code + + Hash code + + + + To validate all properties of the instance + + Validation context + Validation Result + + + + QueryResultLog + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class. + + timestamp (required). + sortType (required). + resultSetAvailability (required). + results (required). + events (required). + + + + Gets or Sets Timestamp + + + + + Gets or Sets SortType + + + + + Gets or Sets ResultSetAvailability + + + + + Gets or Sets Results + + + + + Gets or Sets Events + + + + + Returns the string presentation of the object + + String presentation of the object + + + + Returns the JSON string presentation of the object + + JSON string presentation of the object + + + + Returns true if objects are equal + + Object to be compared + Boolean + + + + Returns true if QueryResultLog instances are equal + + Instance of QueryResultLog to be compared + Boolean + + + + Gets the hash code + + Hash code + + + + To validate all properties of the instance + + Validation context + Validation Result + + + + LoginRequest + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class. + + username (required). + password (required). + + + + Gets or Sets Username + + + + + Gets or Sets Password + + + + + Returns the string presentation of the object + + String presentation of the object + + + + Returns the JSON string presentation of the object + + JSON string presentation of the object + + + + Returns true if objects are equal + + Object to be compared + Boolean + + + + Returns true if LoginRequest instances are equal + + Instance of LoginRequest to be compared + Boolean + + + + Gets the hash code + + Hash code + + + + To validate all properties of the instance + + Validation context + Validation Result + + + + ErrorStatus + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class. + + description (required). + status (required). + + + + Gets or Sets Description + + + + + Gets or Sets Status + + + + + Returns the string presentation of the object + + String presentation of the object + + + + Returns the JSON string presentation of the object + + JSON string presentation of the object + + + + Returns true if objects are equal + + Object to be compared + Boolean + + + + Returns true if ErrorStatus instances are equal + + Instance of ErrorStatus to be compared + Boolean + + + + Gets the hash code + + Hash code + + + + To validate all properties of the instance + + Validation context + Validation Result + + + + ClientTaskInfo + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class. + + id (required). + name (required). + taskGroup (required). + remainingTime (required). + running (required). + + + + Gets or Sets Id + + + + + Gets or Sets Name + + + + + Gets or Sets TaskGroup + + + + + Gets or Sets RemainingTime + + + + + Gets or Sets Running + + + + + Returns the string presentation of the object + + String presentation of the object + + + + Returns the JSON string presentation of the object + + JSON string presentation of the object + + + + Returns true if objects are equal + + Object to be compared + Boolean + + + + Returns true if ClientTaskInfo instances are equal + + Instance of ClientTaskInfo to be compared + Boolean + + + + Gets the hash code + + Hash code + + + + To validate all properties of the instance + + Validation context + Validation Result + + + + QueryEventLog + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class. + + timestamp (required). + events (required). + + + + Gets or Sets Timestamp + + + + + Gets or Sets Events + + + + + Returns the string presentation of the object + + String presentation of the object + + + + Returns the JSON string presentation of the object + + JSON string presentation of the object + + + + Returns true if objects are equal + + Object to be compared + Boolean + + + + Returns true if QueryEventLog instances are equal + + Instance of QueryEventLog to be compared + Boolean + + + + Gets the hash code + + Hash code + + + + To validate all properties of the instance + + Validation context + Validation Result + + + + UserDetails + + + + + Defines Role + + + + + Enum ADMIN for value: ADMIN + + + + + Enum JUDGE for value: JUDGE + + + + + Enum VIEWER for value: VIEWER + + + + + Enum PARTICIPANT for value: PARTICIPANT + + + + + Gets or Sets Role + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class. + + id (required). + username (required). + role (required). + sessionId. + + + + Gets or Sets Id + + + + + Gets or Sets Username + + + + + Gets or Sets SessionId + + + + + Returns the string presentation of the object + + String presentation of the object + + + + Returns the JSON string presentation of the object + + JSON string presentation of the object + + + + Returns true if objects are equal + + Object to be compared + Boolean + + + + Returns true if UserDetails instances are equal + + Instance of UserDetails to be compared + Boolean + + + + Gets the hash code + + Hash code + + + + To validate all properties of the instance + + Validation context + Validation Result + + + + SuccessStatus + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class. + + description (required). + status (required). + + + + Gets or Sets Description + + + + + Gets or Sets Status + + + + + Returns the string presentation of the object + + String presentation of the object + + + + Returns the JSON string presentation of the object + + JSON string presentation of the object + + + + Returns true if objects are equal + + Object to be compared + Boolean + + + + Returns true if SuccessStatus instances are equal + + Instance of SuccessStatus to be compared + Boolean + + + + Gets the hash code + + Hash code + + + + To validate all properties of the instance + + Validation context + Validation Result + + + + ClientRunInfo + + + + + Defines Status + + + + + Enum CREATED for value: CREATED + + + + + Enum ACTIVE for value: ACTIVE + + + + + Enum PREPARINGTASK for value: PREPARING_TASK + + + + + Enum RUNNINGTASK for value: RUNNING_TASK + + + + + Enum TASKENDED for value: TASK_ENDED + + + + + Enum TERMINATED for value: TERMINATED + + + + + Gets or Sets Status + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class. + + id (required). + name (required). + description. + status (required). + + + + Gets or Sets Id + + + + + Gets or Sets Name + + + + + Gets or Sets Description + + + + + Returns the string presentation of the object + + String presentation of the object + + + + Returns the JSON string presentation of the object + + JSON string presentation of the object + + + + Returns true if objects are equal + + Object to be compared + Boolean + + + + Returns true if ClientRunInfo instances are equal + + Instance of ClientRunInfo to be compared + Boolean + + + + Gets the hash code + + Hash code + + + + To validate all properties of the instance + + Validation context + Validation Result + + + + QueryResult + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class. + + item (required). + segment. + frame. + score. + rank. + + + + Gets or Sets Item + + + + + Gets or Sets Segment + + + + + Gets or Sets Frame + + + + + Gets or Sets Score + + + + + Gets or Sets Rank + + + + + Returns the string presentation of the object + + String presentation of the object + + + + Returns the JSON string presentation of the object + + JSON string presentation of the object + + + + Returns true if objects are equal + + Object to be compared + Boolean + + + + Returns true if QueryResult instances are equal + + Instance of QueryResult to be compared + Boolean + + + + Gets the hash code + + Hash code + + + + To validate all properties of the instance + + Validation context + Validation Result + + + + ClientRunInfoList + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class. + + runs (required). + + + + Gets or Sets Runs + + + + + Returns the string presentation of the object + + String presentation of the object + + + + Returns the JSON string presentation of the object + + JSON string presentation of the object + + + + Returns true if objects are equal + + Object to be compared + Boolean + + + + Returns true if ClientRunInfoList instances are equal + + Instance of ClientRunInfoList to be compared + Boolean + + + + Gets the hash code + + Hash code + + + + To validate all properties of the instance + + Validation context + Validation Result + + + + QueryEvent + + + + + Defines Category + + + + + Enum TEXT for value: TEXT + + + + + Enum IMAGE for value: IMAGE + + + + + Enum SKETCH for value: SKETCH + + + + + Enum FILTER for value: FILTER + + + + + Enum BROWSING for value: BROWSING + + + + + Enum COOPERATION for value: COOPERATION + + + + + Enum OTHER for value: OTHER + + + + + Gets or Sets Category + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class. + + timestamp (required). + category (required). + type (required). + value (required). + + + + Gets or Sets Timestamp + + + + + Gets or Sets Type + + + + + Gets or Sets Value + + + + + Returns the string presentation of the object + + String presentation of the object + + + + Returns the JSON string presentation of the object + + JSON string presentation of the object + + + + Returns true if objects are equal + + Object to be compared + Boolean + + + + Returns true if QueryEvent instances are equal + + Instance of QueryEvent to be compared + Boolean + + + + Gets the hash code + + Hash code + + + + To validate all properties of the instance + + Validation context + Validation Result + + + + Represents a collection of functions to interact with the API endpoints + + + + + Returns an overview of the currently active task for a run + + + + + Thrown when fails to make API call + + Session Token + ClientTaskInfo + + + + Returns an overview of the currently active task for a run + + + + + Thrown when fails to make API call + + Session Token + ApiResponse of ClientTaskInfo + + + + Lists an overview of all competition runs visible to the current client + + + + + Thrown when fails to make API call + Session Token + ClientRunInfoList + + + + Lists an overview of all competition runs visible to the current client + + + + + Thrown when fails to make API call + Session Token + ApiResponse of ClientRunInfoList + + + + Returns an overview of the currently active task for a run + + + + + Thrown when fails to make API call + + Session Token + Task of ClientTaskInfo + + + + Returns an overview of the currently active task for a run + + + + + Thrown when fails to make API call + + Session Token + Task of ApiResponse (ClientTaskInfo) + + + + Lists an overview of all competition runs visible to the current client + + + + + Thrown when fails to make API call + Session Token + Task of ClientRunInfoList + + + + Lists an overview of all competition runs visible to the current client + + + + + Thrown when fails to make API call + Session Token + Task of ApiResponse (ClientRunInfoList) + + + + Represents a collection of functions to interact with the API endpoints + + + + + Initializes a new instance of the class. + + + + + + Initializes a new instance of the class + + + + + + Initializes a new instance of the class + using Configuration object + + An instance of Configuration + + + + + Gets the base path of the API client. + + The base path + + + + Sets the base path of the API client. + + The base path + + + + Gets or sets the configuration object + + An instance of the Configuration + + + + Provides a factory method hook for the creation of exceptions. + + + + + Gets the default header. + + Dictionary of HTTP header + + + + Add default header. + + Header field name. + Header field value. + + + + + Returns an overview of the currently active task for a run + + Thrown when fails to make API call + + Session Token + ClientTaskInfo + + + + Returns an overview of the currently active task for a run + + Thrown when fails to make API call + + Session Token + ApiResponse of ClientTaskInfo + + + + Returns an overview of the currently active task for a run + + Thrown when fails to make API call + + Session Token + Task of ClientTaskInfo + + + + Returns an overview of the currently active task for a run + + Thrown when fails to make API call + + Session Token + Task of ApiResponse (ClientTaskInfo) + + + + Lists an overview of all competition runs visible to the current client + + Thrown when fails to make API call + Session Token + ClientRunInfoList + + + + Lists an overview of all competition runs visible to the current client + + Thrown when fails to make API call + Session Token + ApiResponse of ClientRunInfoList + + + + Lists an overview of all competition runs visible to the current client + + Thrown when fails to make API call + Session Token + Task of ClientRunInfoList + + + + Lists an overview of all competition runs visible to the current client + + Thrown when fails to make API call + Session Token + Task of ApiResponse (ClientRunInfoList) + + + + Represents a collection of functions to interact with the API endpoints + + + + + Returns the current time on the server. + + + + + Thrown when fails to make API call + CurrentTime + + + + Returns the current time on the server. + + + + + Thrown when fails to make API call + ApiResponse of CurrentTime + + + + Returns the current time on the server. + + + + + Thrown when fails to make API call + Task of CurrentTime + + + + Returns the current time on the server. + + + + + Thrown when fails to make API call + Task of ApiResponse (CurrentTime) + + + + Represents a collection of functions to interact with the API endpoints + + + + + Initializes a new instance of the class. + + + + + + Initializes a new instance of the class + + + + + + Initializes a new instance of the class + using Configuration object + + An instance of Configuration + + + + + Gets the base path of the API client. + + The base path + + + + Sets the base path of the API client. + + The base path + + + + Gets or sets the configuration object + + An instance of the Configuration + + + + Provides a factory method hook for the creation of exceptions. + + + + + Gets the default header. + + Dictionary of HTTP header + + + + Add default header. + + Header field name. + Header field value. + + + + + Returns the current time on the server. + + Thrown when fails to make API call + CurrentTime + + + + Returns the current time on the server. + + Thrown when fails to make API call + ApiResponse of CurrentTime + + + + Returns the current time on the server. + + Thrown when fails to make API call + Task of CurrentTime + + + + Returns the current time on the server. + + Thrown when fails to make API call + Task of ApiResponse (CurrentTime) + + + + Represents a collection of functions to interact with the API endpoints + + + + + Endpoint to accept submissions + + + + + Thrown when fails to make API call + Collection identifier. Optional, in which case the default collection for the run will be considered. (optional) + Identifier for the actual media object or media file. (optional) + Text to be submitted. ONLY for tasks with target type TEXT. If this parameter is provided, it superseeds all athers. (optional) + Frame number for media with temporal progression (e.g. video). (optional) + Shot number for media with temporal progression (e.g. video). (optional) + Timecode for media with temporal progression (e.g. video). (optional) + Session Token (optional) + SuccessfulSubmissionsStatus + + + + Endpoint to accept submissions + + + + + Thrown when fails to make API call + Collection identifier. Optional, in which case the default collection for the run will be considered. (optional) + Identifier for the actual media object or media file. (optional) + Text to be submitted. ONLY for tasks with target type TEXT. If this parameter is provided, it superseeds all athers. (optional) + Frame number for media with temporal progression (e.g. video). (optional) + Shot number for media with temporal progression (e.g. video). (optional) + Timecode for media with temporal progression (e.g. video). (optional) + Session Token (optional) + ApiResponse of SuccessfulSubmissionsStatus + + + + Endpoint to accept submissions + + + + + Thrown when fails to make API call + Collection identifier. Optional, in which case the default collection for the run will be considered. (optional) + Identifier for the actual media object or media file. (optional) + Text to be submitted. ONLY for tasks with target type TEXT. If this parameter is provided, it superseeds all athers. (optional) + Frame number for media with temporal progression (e.g. video). (optional) + Shot number for media with temporal progression (e.g. video). (optional) + Timecode for media with temporal progression (e.g. video). (optional) + Session Token (optional) + Task of SuccessfulSubmissionsStatus + + + + Endpoint to accept submissions + + + + + Thrown when fails to make API call + Collection identifier. Optional, in which case the default collection for the run will be considered. (optional) + Identifier for the actual media object or media file. (optional) + Text to be submitted. ONLY for tasks with target type TEXT. If this parameter is provided, it superseeds all athers. (optional) + Frame number for media with temporal progression (e.g. video). (optional) + Shot number for media with temporal progression (e.g. video). (optional) + Timecode for media with temporal progression (e.g. video). (optional) + Session Token (optional) + Task of ApiResponse (SuccessfulSubmissionsStatus) + + + + Represents a collection of functions to interact with the API endpoints + + + + + Initializes a new instance of the class. + + + + + + Initializes a new instance of the class + + + + + + Initializes a new instance of the class + using Configuration object + + An instance of Configuration + + + + + Gets the base path of the API client. + + The base path + + + + Sets the base path of the API client. + + The base path + + + + Gets or sets the configuration object + + An instance of the Configuration + + + + Provides a factory method hook for the creation of exceptions. + + + + + Gets the default header. + + Dictionary of HTTP header + + + + Add default header. + + Header field name. + Header field value. + + + + + Endpoint to accept submissions + + Thrown when fails to make API call + Collection identifier. Optional, in which case the default collection for the run will be considered. (optional) + Identifier for the actual media object or media file. (optional) + Text to be submitted. ONLY for tasks with target type TEXT. If this parameter is provided, it superseeds all athers. (optional) + Frame number for media with temporal progression (e.g. video). (optional) + Shot number for media with temporal progression (e.g. video). (optional) + Timecode for media with temporal progression (e.g. video). (optional) + Session Token (optional) + SuccessfulSubmissionsStatus + + + + Endpoint to accept submissions + + Thrown when fails to make API call + Collection identifier. Optional, in which case the default collection for the run will be considered. (optional) + Identifier for the actual media object or media file. (optional) + Text to be submitted. ONLY for tasks with target type TEXT. If this parameter is provided, it superseeds all athers. (optional) + Frame number for media with temporal progression (e.g. video). (optional) + Shot number for media with temporal progression (e.g. video). (optional) + Timecode for media with temporal progression (e.g. video). (optional) + Session Token (optional) + ApiResponse of SuccessfulSubmissionsStatus + + + + Endpoint to accept submissions + + Thrown when fails to make API call + Collection identifier. Optional, in which case the default collection for the run will be considered. (optional) + Identifier for the actual media object or media file. (optional) + Text to be submitted. ONLY for tasks with target type TEXT. If this parameter is provided, it superseeds all athers. (optional) + Frame number for media with temporal progression (e.g. video). (optional) + Shot number for media with temporal progression (e.g. video). (optional) + Timecode for media with temporal progression (e.g. video). (optional) + Session Token (optional) + Task of SuccessfulSubmissionsStatus + + + + Endpoint to accept submissions + + Thrown when fails to make API call + Collection identifier. Optional, in which case the default collection for the run will be considered. (optional) + Identifier for the actual media object or media file. (optional) + Text to be submitted. ONLY for tasks with target type TEXT. If this parameter is provided, it superseeds all athers. (optional) + Frame number for media with temporal progression (e.g. video). (optional) + Shot number for media with temporal progression (e.g. video). (optional) + Timecode for media with temporal progression (e.g. video). (optional) + Session Token (optional) + Task of ApiResponse (SuccessfulSubmissionsStatus) + + + + Represents a collection of functions to interact with the API endpoints + + + + + Accepts query logs from participants + + + + + Thrown when fails to make API call + Session Token + (optional) + SuccessStatus + + + + Accepts query logs from participants + + + + + Thrown when fails to make API call + Session Token + (optional) + ApiResponse of SuccessStatus + + + + Accepts result logs from participants + + + + + Thrown when fails to make API call + Session Token + (optional) + SuccessStatus + + + + Accepts result logs from participants + + + + + Thrown when fails to make API call + Session Token + (optional) + ApiResponse of SuccessStatus + + + + Accepts query logs from participants + + + + + Thrown when fails to make API call + Session Token + (optional) + Task of SuccessStatus + + + + Accepts query logs from participants + + + + + Thrown when fails to make API call + Session Token + (optional) + Task of ApiResponse (SuccessStatus) + + + + Accepts result logs from participants + + + + + Thrown when fails to make API call + Session Token + (optional) + Task of SuccessStatus + + + + Accepts result logs from participants + + + + + Thrown when fails to make API call + Session Token + (optional) + Task of ApiResponse (SuccessStatus) + + + + Represents a collection of functions to interact with the API endpoints + + + + + Initializes a new instance of the class. + + + + + + Initializes a new instance of the class + + + + + + Initializes a new instance of the class + using Configuration object + + An instance of Configuration + + + + + Gets the base path of the API client. + + The base path + + + + Sets the base path of the API client. + + The base path + + + + Gets or sets the configuration object + + An instance of the Configuration + + + + Provides a factory method hook for the creation of exceptions. + + + + + Gets the default header. + + Dictionary of HTTP header + + + + Add default header. + + Header field name. + Header field value. + + + + + Accepts query logs from participants + + Thrown when fails to make API call + Session Token + (optional) + SuccessStatus + + + + Accepts query logs from participants + + Thrown when fails to make API call + Session Token + (optional) + ApiResponse of SuccessStatus + + + + Accepts query logs from participants + + Thrown when fails to make API call + Session Token + (optional) + Task of SuccessStatus + + + + Accepts query logs from participants + + Thrown when fails to make API call + Session Token + (optional) + Task of ApiResponse (SuccessStatus) + + + + Accepts result logs from participants + + Thrown when fails to make API call + Session Token + (optional) + SuccessStatus + + + + Accepts result logs from participants + + Thrown when fails to make API call + Session Token + (optional) + ApiResponse of SuccessStatus + + + + Accepts result logs from participants + + Thrown when fails to make API call + Session Token + (optional) + Task of SuccessStatus + + + + Accepts result logs from participants + + Thrown when fails to make API call + Session Token + (optional) + Task of ApiResponse (SuccessStatus) + + + + Represents a collection of functions to interact with the API endpoints + + + + + Clears all user roles of the current session. + + + + + Thrown when fails to make API call + Session Token (optional) + SuccessStatus + + + + Clears all user roles of the current session. + + + + + Thrown when fails to make API call + Session Token (optional) + ApiResponse of SuccessStatus + + + + Get information about the current user. + + + + + Thrown when fails to make API call + UserDetails + + + + Get information about the current user. + + + + + Thrown when fails to make API call + ApiResponse of UserDetails + + + + Sets roles for session based on user account and returns a session cookie. + + + + + Thrown when fails to make API call + (optional) + UserDetails + + + + Sets roles for session based on user account and returns a session cookie. + + + + + Thrown when fails to make API call + (optional) + ApiResponse of UserDetails + + + + Clears all user roles of the current session. + + + + + Thrown when fails to make API call + Session Token (optional) + Task of SuccessStatus + + + + Clears all user roles of the current session. + + + + + Thrown when fails to make API call + Session Token (optional) + Task of ApiResponse (SuccessStatus) + + + + Get information about the current user. + + + + + Thrown when fails to make API call + Task of UserDetails + + + + Get information about the current user. + + + + + Thrown when fails to make API call + Task of ApiResponse (UserDetails) + + + + Sets roles for session based on user account and returns a session cookie. + + + + + Thrown when fails to make API call + (optional) + Task of UserDetails + + + + Sets roles for session based on user account and returns a session cookie. + + + + + Thrown when fails to make API call + (optional) + Task of ApiResponse (UserDetails) + + + + Represents a collection of functions to interact with the API endpoints + + + + + Initializes a new instance of the class. + + + + + + Initializes a new instance of the class + + + + + + Initializes a new instance of the class + using Configuration object + + An instance of Configuration + + + + + Gets the base path of the API client. + + The base path + + + + Sets the base path of the API client. + + The base path + + + + Gets or sets the configuration object + + An instance of the Configuration + + + + Provides a factory method hook for the creation of exceptions. + + + + + Gets the default header. + + Dictionary of HTTP header + + + + Add default header. + + Header field name. + Header field value. + + + + + Clears all user roles of the current session. + + Thrown when fails to make API call + Session Token (optional) + SuccessStatus + + + + Clears all user roles of the current session. + + Thrown when fails to make API call + Session Token (optional) + ApiResponse of SuccessStatus + + + + Clears all user roles of the current session. + + Thrown when fails to make API call + Session Token (optional) + Task of SuccessStatus + + + + Clears all user roles of the current session. + + Thrown when fails to make API call + Session Token (optional) + Task of ApiResponse (SuccessStatus) + + + + Get information about the current user. + + Thrown when fails to make API call + UserDetails + + + + Get information about the current user. + + Thrown when fails to make API call + ApiResponse of UserDetails + + + + Get information about the current user. + + Thrown when fails to make API call + Task of UserDetails + + + + Get information about the current user. + + Thrown when fails to make API call + Task of ApiResponse (UserDetails) + + + + Sets roles for session based on user account and returns a session cookie. + + Thrown when fails to make API call + (optional) + UserDetails + + + + Sets roles for session based on user account and returns a session cookie. + + Thrown when fails to make API call + (optional) + ApiResponse of UserDetails + + + + Sets roles for session based on user account and returns a session cookie. + + Thrown when fails to make API call + (optional) + Task of UserDetails + + + + Sets roles for session based on user account and returns a session cookie. + + Thrown when fails to make API call + (optional) + Task of ApiResponse (UserDetails) + + + + Represents a collection of functions to interact with the API endpoints + + + + + Provides a JSON download of the entire competition description structure. + + + + + Thrown when fails to make API call + Competition ID + string + + + + Provides a JSON download of the entire competition description structure. + + + + + Thrown when fails to make API call + Competition ID + ApiResponse of string + + + + Provides a JSON download of the entire competition run structure. + + + + + Thrown when fails to make API call + Competition run ID + string + + + + Provides a JSON download of the entire competition run structure. + + + + + Thrown when fails to make API call + Competition run ID + ApiResponse of string + + + + Provides a CSV download with the scores for a given competition run. + + + + + Thrown when fails to make API call + Competition run ID + string + + + + Provides a CSV download with the scores for a given competition run. + + + + + Thrown when fails to make API call + Competition run ID + ApiResponse of string + + + + Provides a JSON download of the entire competition description structure. + + + + + Thrown when fails to make API call + Competition ID + Task of string + + + + Provides a JSON download of the entire competition description structure. + + + + + Thrown when fails to make API call + Competition ID + Task of ApiResponse (string) + + + + Provides a JSON download of the entire competition run structure. + + + + + Thrown when fails to make API call + Competition run ID + Task of string + + + + Provides a JSON download of the entire competition run structure. + + + + + Thrown when fails to make API call + Competition run ID + Task of ApiResponse (string) + + + + Provides a CSV download with the scores for a given competition run. + + + + + Thrown when fails to make API call + Competition run ID + Task of string + + + + Provides a CSV download with the scores for a given competition run. + + + + + Thrown when fails to make API call + Competition run ID + Task of ApiResponse (string) + + + + Represents a collection of functions to interact with the API endpoints + + + + + Initializes a new instance of the class. + + + + + + Initializes a new instance of the class + + + + + + Initializes a new instance of the class + using Configuration object + + An instance of Configuration + + + + + Gets the base path of the API client. + + The base path + + + + Sets the base path of the API client. + + The base path + + + + Gets or sets the configuration object + + An instance of the Configuration + + + + Provides a factory method hook for the creation of exceptions. + + + + + Gets the default header. + + Dictionary of HTTP header + + + + Add default header. + + Header field name. + Header field value. + + + + + Provides a JSON download of the entire competition description structure. + + Thrown when fails to make API call + Competition ID + string + + + + Provides a JSON download of the entire competition description structure. + + Thrown when fails to make API call + Competition ID + ApiResponse of string + + + + Provides a JSON download of the entire competition description structure. + + Thrown when fails to make API call + Competition ID + Task of string + + + + Provides a JSON download of the entire competition description structure. + + Thrown when fails to make API call + Competition ID + Task of ApiResponse (string) + + + + Provides a JSON download of the entire competition run structure. + + Thrown when fails to make API call + Competition run ID + string + + + + Provides a JSON download of the entire competition run structure. + + Thrown when fails to make API call + Competition run ID + ApiResponse of string + + + + Provides a JSON download of the entire competition run structure. + + Thrown when fails to make API call + Competition run ID + Task of string + + + + Provides a JSON download of the entire competition run structure. + + Thrown when fails to make API call + Competition run ID + Task of ApiResponse (string) + + + + Provides a CSV download with the scores for a given competition run. + + Thrown when fails to make API call + Competition run ID + string + + + + Provides a CSV download with the scores for a given competition run. + + Thrown when fails to make API call + Competition run ID + ApiResponse of string + + + + Provides a CSV download with the scores for a given competition run. + + Thrown when fails to make API call + Competition run ID + Task of string + + + + Provides a CSV download with the scores for a given competition run. + + Thrown when fails to make API call + Competition run ID + Task of ApiResponse (string) + + + + API client is mainly responsible for making the HTTP call to the API backend. + + + + + Allows for extending request processing for generated code. + + The RestSharp request object + + + + Allows for extending response processing for generated code. + + The RestSharp request object + The RestSharp response object + + + + Initializes a new instance of the class + with default configuration. + + + + + Initializes a new instance of the class + with default base path (http://localhost). + + An instance of Configuration. + + + + Initializes a new instance of the class + with default configuration. + + The base path. + + + + Gets or sets the default API client for making HTTP calls. + + The default API client. + + + + Gets or sets an instance of the IReadableConfiguration. + + An instance of the IReadableConfiguration. + + helps us to avoid modifying possibly global + configuration values from within a given client. It does not guarantee thread-safety + of the instance in any way. + + + + + Gets or sets the RestClient. + + An instance of the RestClient + + + + Makes the HTTP request (Sync). + + URL path. + HTTP method. + Query parameters. + HTTP body (POST request). + Header parameters. + Form parameters. + File parameters. + Path parameters. + Content Type of the request + Object + + + + Makes the asynchronous HTTP request. + + URL path. + HTTP method. + Query parameters. + HTTP body (POST request). + Header parameters. + Form parameters. + File parameters. + Path parameters. + Content type. + The Task instance. + + + + Escape string (url-encoded). + + String to be escaped. + Escaped string. + + + + Create FileParameter based on Stream. + + Parameter name. + Input stream. + FileParameter. + + + + If parameter is DateTime, output in a formatted string (default ISO 8601), customizable with Configuration.DateTime. + If parameter is a list, join the list with ",". + Otherwise just return the string. + + The parameter (header, path, query, form). + Formatted string. + + + + Deserialize the JSON string into a proper object. + + The HTTP response. + Object type. + Object representation of the JSON string. + + + + Serialize an input (model) into JSON string + + Object. + JSON string. + + + + Check if the given MIME is a JSON MIME. + JSON MIME examples: + application/json + application/json; charset=UTF8 + APPLICATION/JSON + application/vnd.company+json + + MIME + Returns True if MIME type is json. + + + + Select the Content-Type header's value from the given content-type array: + if JSON type exists in the given array, use it; + otherwise use the first one defined in 'consumes' + + The Content-Type array to select from. + The Content-Type header to use. + + + + Select the Accept header's value from the given accepts array: + if JSON exists in the given array, use it; + otherwise use all of them (joining into a string) + + The accepts array to select from. + The Accept header to use. + + + + Encode string in base64 format. + + String to be encoded. + Encoded string. + + + + Dynamically cast the object into target type. + + Object to be casted + Target type + Casted object + + + + Convert stream to byte array + + Input stream to be converted + Byte array + + + + URL encode a string + Credit/Ref: https://github.com/restsharp/RestSharp/blob/master/RestSharp/Extensions/StringExtensions.cs#L50 + + String to be URL encoded + Byte array + + + + Sanitize filename by removing the path + + Filename + Filename + + + + Convert params to key/value pairs. + Use collectionFormat to properly format lists and collections. + + Collection format. + Key name. + Value object. + A list of KeyValuePairs + + + + Check if generic object is a collection. + + + True if object is a collection type + + + + Represents a readable-only configuration contract. + + + + + Gets the access token. + + Access token. + + + + Gets the API key. + + API key. + + + + Gets the API key prefix. + + API key prefix. + + + + Gets the base path. + + Base path. + + + + Gets the date time format. + + Date time foramt. + + + + Gets the default header. + + Default header. + + + + Gets the temp folder path. + + Temp folder path. + + + + Gets the HTTP connection timeout (in milliseconds) + + HTTP connection timeout. + + + + Gets the user agent. + + User agent. + + + + Gets the username. + + Username. + + + + Gets the password. + + Password. + + + + Gets the API key with prefix. + + API key identifier (authentication scheme). + API key with prefix. + + + + API Response + + + + + Gets or sets the status code (HTTP status code) + + The status code. + + + + Gets or sets the HTTP headers + + HTTP headers + + + + Gets or sets the data (parsed HTTP body) + + The data. + + + + Initializes a new instance of the class. + + HTTP status code. + HTTP headers. + Data (parsed HTTP body) + + + + Represents a set of configuration settings + + + + + Version of the package. + + Version of the package. + + + + Identifier for ISO 8601 DateTime Format + + See https://msdn.microsoft.com/en-us/library/az4se3k1(v=vs.110).aspx#Anchor_8 for more information. + + + + Default creation of exceptions for a given method name and response object + + + + + Gets or sets the default Configuration. + + Configuration. + + + + Gets or sets the API key based on the authentication name. + + The API key. + + + + Gets or sets the prefix (e.g. Token) of the API key based on the authentication name. + + The prefix of the API key. + + + + Initializes a new instance of the class + + + + + Initializes a new instance of the class + + + + + Initializes a new instance of the class with different settings + + Api client + Dictionary of default HTTP header + Username + Password + accessToken + Dictionary of API key + Dictionary of API key prefix + Temp folder path + DateTime format string + HTTP connection timeout (in milliseconds) + HTTP user agent + + + + Initializes a new instance of the Configuration class. + + Api client. + + + + Gets an instance of an ApiClient for this configuration + + + + + Gets or sets the base path for API access. + + + + + Gets or sets the default header. + + + + + Gets or sets the HTTP timeout (milliseconds) of ApiClient. Default to 100000 milliseconds. + + + + + Gets or sets the HTTP user agent. + + Http user agent. + + + + Gets or sets the username (HTTP basic authentication). + + The username. + + + + Gets or sets the password (HTTP basic authentication). + + The password. + + + + Gets the API key with prefix. + + API key identifier (authentication scheme). + API key with prefix. + + + + Gets or sets the access token for OAuth2 authentication. + + The access token. + + + + Gets or sets the temporary folder path to store the files downloaded from the server. + + Folder path. + + + + Gets or sets the date time format used when serializing in the ApiClient + By default, it's set to ISO 8601 - "o", for others see: + https://msdn.microsoft.com/en-us/library/az4se3k1(v=vs.110).aspx + and https://msdn.microsoft.com/en-us/library/8kb3ddd4(v=vs.110).aspx + No validation is done to ensure that the string you're providing is valid + + The DateTimeFormat string + + + + Gets or sets the prefix (e.g. Token) of the API key based on the authentication name. + + The prefix of the API key. + + + + Gets or sets the API key based on the authentication name. + + The API key. + + + + Add default header. + + Header field name. + Header field value. + + + + + Creates a new based on this instance. + + + + + + Returns a string with essential information for debugging. + + + + + Add Api Key Header. + + Api Key name. + Api Key value. + + + + + Sets the API key prefix. + + Api Key name. + Api Key value. + + + + API Exception + + + + + Gets or sets the error code (HTTP status code) + + The error code (HTTP status code). + + + + Gets or sets the error content (body json object) + + The error content (Http response body). + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class. + + HTTP status code. + Error message. + + + + Initializes a new instance of the class. + + HTTP status code. + Error message. + Error content. + + + + Represents configuration aspects required to interact with the API endpoints. + + + + + Gets or sets the configuration object + + An instance of the Configuration + + + + Gets the base path of the API client. + + The base path + + + + Provides a factory method hook for the creation of exceptions. + + + + + provides a compile-time extension point for globally configuring + API Clients. + + + A customized implementation via partial class may reside in another file and may + be excluded from automatic generation via a .openapi-generator-ignore file. + + + + + Formatter for 'date' openapi formats ss defined by full-date - RFC3339 + see https://github.com/OAI/OpenAPI-Specification/blob/master/versions/3.0.0.md#data-types + + + + + Initializes a new instance of the class. + + + + + A delegate to ExceptionFactory method + + Method name + Response + Exceptions + + + diff --git a/Runtime/Libs/Dev.Dres.ClientApi.xml.meta b/Runtime/Libs/Dev.Dres.ClientApi.xml.meta index 8f3dc8a..9cbd85c 100644 --- a/Runtime/Libs/Dev.Dres.ClientApi.xml.meta +++ b/Runtime/Libs/Dev.Dres.ClientApi.xml.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 7acaebea6dcab594880fd70383c987f7 +guid: afc79d5a8516b8f45ba4aed7d21cbb32 TextScriptImporter: externalObjects: {} userData: diff --git a/Runtime/Libs/JsonSubTypes.Dres.dll.meta b/Runtime/Libs/JsonSubTypes.Dres.dll.meta index feebf4e..e6f027a 100644 --- a/Runtime/Libs/JsonSubTypes.Dres.dll.meta +++ b/Runtime/Libs/JsonSubTypes.Dres.dll.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 1aafa2d95222bc04da0a81af1ca8a443 +guid: 2512d704cb515e540aed7475bfa3e124 PluginImporter: externalObjects: {} serializedVersion: 2 diff --git a/Runtime/Libs/Newtonsoft.Json.Dres.dll.meta b/Runtime/Libs/Newtonsoft.Json.Dres.dll.meta index cb66a09..7558adc 100644 --- a/Runtime/Libs/Newtonsoft.Json.Dres.dll.meta +++ b/Runtime/Libs/Newtonsoft.Json.Dres.dll.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: dbf677481f82bff4e975e213a5a425d5 +guid: 5dee3bce8bb1d7645b21fe9439ba6779 PluginImporter: externalObjects: {} serializedVersion: 2 diff --git a/Runtime/Libs/RestSharp.Dres.dll.meta b/Runtime/Libs/RestSharp.Dres.dll.meta index 8ce4fd9..ad04b0f 100644 --- a/Runtime/Libs/RestSharp.Dres.dll.meta +++ b/Runtime/Libs/RestSharp.Dres.dll.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: e027e052fdbe41a4bb05da336a3c24a9 +guid: a936bad827f5c8846b4236cc12e0799f PluginImporter: externalObjects: {} serializedVersion: 2 diff --git a/Runtime/Scripts/Dres/UnityClient/DresWrapper.cs b/Runtime/Scripts/Dres/UnityClient/DresWrapper.cs index 0b2be76..fd8a325 100644 --- a/Runtime/Scripts/Dres/UnityClient/DresWrapper.cs +++ b/Runtime/Scripts/Dres/UnityClient/DresWrapper.cs @@ -72,7 +72,7 @@ internal static async Task Submit(string item, stri /// A 404 if there is no ongoing competition for this session, a 403 if there is no such user internal static async Task SubmitText(string text, string session) { - return await SubmissionApi.GetApiV1SubmitAsync(text= text, session=session); + return await SubmissionApi.GetApiV1SubmitAsync(text: text, session: session); }