Compare commits
	
		
			77 Commits
		
	
	
		
			micah/add-
			...
			993f62b6cf
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
|  | 993f62b6cf | ||
| 15b307a88f | |||
| 72b338bfc2 | |||
| 267486774c | |||
| b94a568ef1 | |||
| b773ccfc8f | |||
| fd5c28e073 | |||
| 4c232829b6 | |||
| ddf1036009 | |||
| 9b3e5c23a0 | |||
| a7eae9d46b | |||
| 8c3e9d6273 | |||
| f306cc6c16 | |||
| 643cdb29e3 | |||
| 89287a0100 | |||
| f9b02f65e0 | |||
| 41169e2848 | |||
| ba36bc709c | |||
| 4005416233 | |||
| db4a6315cd | |||
| af38fdea64 | |||
| 172df69340 | |||
| a030a0ef16 | |||
| 7a6cc2739f | |||
| 41c9701e18 | |||
| 16e79ed608 | |||
| f401e1879b | |||
| 72b451d322 | |||
| 5350c46e0a | |||
| 1f5c5774e1 | |||
| 3b29502e7e | |||
| abc7e9fd05 | |||
| dd5ce77102 | |||
| dabaa3d1e1 | |||
| a6604a3a6d | |||
| 09a3e0e294 | |||
| f20ca53a2a | |||
| a2b912500c | |||
| 7de3d196ba | |||
| 6d5669aaf8 | |||
| 2c583509a2 | |||
| 3480637600 | |||
| f4665f51b1 | |||
| 810212dc12 | |||
| c3210df517 | |||
| 9f5c354433 | |||
| 23d9fef2b1 | |||
| df3087de7d | |||
| 5dd8318dab | |||
| 56c8bcce20 | |||
| 1c4961db5b | |||
| 5e0d01ea5b | |||
| e8938621fc | |||
| 8c8dcdd8e1 | |||
| 5085c9af90 | |||
| 85bc743c8e | |||
| b8efa644e3 | |||
| c18628a4ca | |||
| 535e24c9c2 | |||
| 04308b1003 | |||
| 43c626141e | |||
| c49266e4c1 | |||
| 6677b9232f | |||
| 76e792be88 | |||
| 5eac3d9d40 | |||
| 64593f09b7 | |||
| e20b68799f | |||
| 378878967a | |||
| 251ebe7056 | |||
| 615e4d5467 | |||
| a4f602d651 | |||
| c48512fc45 | |||
| d75822c465 | |||
| 4feeba5150 | |||
| e1237363f0 | |||
| b1550b31c5 | |||
| 81b9fd9f12 | 
							
								
								
									
										1189
									
								
								src/index.tsx
									
									
									
									
									
								
							
							
						
						
									
										1189
									
								
								src/index.tsx
									
									
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							| @@ -4,5 +4,6 @@ query getDeployedConfig { | |||||||
|     devMode |     devMode | ||||||
|     environment |     environment | ||||||
|     firebase |     firebase | ||||||
|  |     minimumAllowedAppVersion | ||||||
|   } |   } | ||||||
| } | } | ||||||
|   | |||||||
| @@ -23,6 +23,7 @@ query GetFeed( | |||||||
|       stream { |       stream { | ||||||
|         isCompleted |         isCompleted | ||||||
|       } |       } | ||||||
|  |       tableSize | ||||||
|       tags { |       tags { | ||||||
|         tagClasses { |         tagClasses { | ||||||
|           name |           name | ||||||
|   | |||||||
| @@ -1,5 +1,7 @@ | |||||||
| query GetShots( | query GetShots( | ||||||
|   $filterInput: FilterInput! |   $filterInput: FilterInput! | ||||||
|  |   $shotsPagination: GetShotsPagination | ||||||
|  |   $limit: Int | ||||||
|   $includeCreatedAt: Boolean! = false |   $includeCreatedAt: Boolean! = false | ||||||
|   $includeUpdatedAt: Boolean! = false |   $includeUpdatedAt: Boolean! = false | ||||||
|   $includeCueObjectFeatures: Boolean! = false |   $includeCueObjectFeatures: Boolean! = false | ||||||
| @@ -7,12 +9,17 @@ query GetShots( | |||||||
|   $includeCueObjectDistance: Boolean! = false |   $includeCueObjectDistance: Boolean! = false | ||||||
|   $includeCueObjectAngle: Boolean! = false |   $includeCueObjectAngle: Boolean! = false | ||||||
|   $includeCueBallSpeed: Boolean! = false |   $includeCueBallSpeed: Boolean! = false | ||||||
|  |   $includeSpinType: Boolean! = false | ||||||
|   $includeShotDirection: Boolean! = false |   $includeShotDirection: Boolean! = false | ||||||
|   $includeTargetPocketDistance: Boolean! = false |   $includeTargetPocketDistance: Boolean! = false | ||||||
|   $includeMake: Boolean! = false |   $includeMake: Boolean! = false | ||||||
|   $includeIntendedPocketType: Boolean! = false |   $includeIntendedPocketType: Boolean! = false | ||||||
| ) { | ) { | ||||||
|   getShots(filterInput: $filterInput) { |   getShots( | ||||||
|  |     filterInput: $filterInput | ||||||
|  |     shotsPagination: $shotsPagination | ||||||
|  |     limit: $limit | ||||||
|  |   ) { | ||||||
|     id |     id | ||||||
|     videoId |     videoId | ||||||
|     startFrame |     startFrame | ||||||
| @@ -20,6 +27,15 @@ query GetShots( | |||||||
|     user { |     user { | ||||||
|       id |       id | ||||||
|     } |     } | ||||||
|  |     falsePositiveScore | ||||||
|  |     video { | ||||||
|  |       stream { | ||||||
|  |         resolution { | ||||||
|  |           width | ||||||
|  |           height | ||||||
|  |         } | ||||||
|  |       } | ||||||
|  |     } | ||||||
|     createdAt @include(if: $includeCreatedAt) |     createdAt @include(if: $includeCreatedAt) | ||||||
|     updatedAt @include(if: $includeUpdatedAt) |     updatedAt @include(if: $includeUpdatedAt) | ||||||
|     cueObjectFeatures @include(if: $includeCueObjectFeatures) { |     cueObjectFeatures @include(if: $includeCueObjectFeatures) { | ||||||
| @@ -27,6 +43,7 @@ query GetShots( | |||||||
|       cueObjectAngle @include(if: $includeCueObjectAngle) |       cueObjectAngle @include(if: $includeCueObjectAngle) | ||||||
|       cueBallSpeed @include(if: $includeCueBallSpeed) |       cueBallSpeed @include(if: $includeCueBallSpeed) | ||||||
|       shotDirection @include(if: $includeShotDirection) |       shotDirection @include(if: $includeShotDirection) | ||||||
|  |       spinType @include(if: $includeSpinType) | ||||||
|     } |     } | ||||||
|     pocketingIntentionFeatures |     pocketingIntentionFeatures | ||||||
|       @include(if: $includePocketingIntentionFeatures) { |       @include(if: $includePocketingIntentionFeatures) { | ||||||
| @@ -37,9 +54,80 @@ query GetShots( | |||||||
|   } |   } | ||||||
| } | } | ||||||
|  |  | ||||||
|  | query GetSerializedShotPaths($filterInput: FilterInput!) { | ||||||
|  |   getShots(filterInput: $filterInput) { | ||||||
|  |     id | ||||||
|  |     videoId | ||||||
|  |     startFrame | ||||||
|  |     endFrame | ||||||
|  |     serializedShotPaths { | ||||||
|  |       b64EncodedBuffer | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  | } | ||||||
|  |  | ||||||
| query GetShotAnnotationTypes { | query GetShotAnnotationTypes { | ||||||
|   getShotAnnotationTypes { |   getShotAnnotationTypes { | ||||||
|     id |     id | ||||||
|     name |     name | ||||||
|   } |   } | ||||||
| } | } | ||||||
|  |  | ||||||
|  | query GetShotsWithMetadata( | ||||||
|  |   $filterInput: FilterInput! | ||||||
|  |   $shotsPagination: GetShotsPagination | ||||||
|  |   $limit: Int | ||||||
|  |   $includeCreatedAt: Boolean! = false | ||||||
|  |   $includeUpdatedAt: Boolean! = false | ||||||
|  |   $includeCueObjectFeatures: Boolean! = false | ||||||
|  |   $includePocketingIntentionFeatures: Boolean! = false | ||||||
|  |   $includeCueObjectDistance: Boolean! = false | ||||||
|  |   $includeCueObjectAngle: Boolean! = false | ||||||
|  |   $includeCueBallSpeed: Boolean! = false | ||||||
|  |   $includeSpinType: Boolean! = false | ||||||
|  |   $includeShotDirection: Boolean! = false | ||||||
|  |   $includeTargetPocketDistance: Boolean! = false | ||||||
|  |   $includeMake: Boolean! = false | ||||||
|  |   $includeIntendedPocketType: Boolean! = false | ||||||
|  | ) { | ||||||
|  |   getShotsWithMetadata( | ||||||
|  |     filterInput: $filterInput | ||||||
|  |     shotsPagination: $shotsPagination | ||||||
|  |     limit: $limit | ||||||
|  |   ) { | ||||||
|  |     count | ||||||
|  |     shots { | ||||||
|  |       id | ||||||
|  |       videoId | ||||||
|  |       startFrame | ||||||
|  |       endFrame | ||||||
|  |       user { | ||||||
|  |         id | ||||||
|  |       } | ||||||
|  |       falsePositiveScore | ||||||
|  |       video { | ||||||
|  |         stream { | ||||||
|  |           resolution { | ||||||
|  |             width | ||||||
|  |             height | ||||||
|  |           } | ||||||
|  |         } | ||||||
|  |       } | ||||||
|  |       createdAt @include(if: $includeCreatedAt) | ||||||
|  |       updatedAt @include(if: $includeUpdatedAt) | ||||||
|  |       cueObjectFeatures @include(if: $includeCueObjectFeatures) { | ||||||
|  |         cueObjectDistance @include(if: $includeCueObjectDistance) | ||||||
|  |         cueObjectAngle @include(if: $includeCueObjectAngle) | ||||||
|  |         cueBallSpeed @include(if: $includeCueBallSpeed) | ||||||
|  |         shotDirection @include(if: $includeShotDirection) | ||||||
|  |         spinType @include(if: $includeSpinType) | ||||||
|  |       } | ||||||
|  |       pocketingIntentionFeatures | ||||||
|  |         @include(if: $includePocketingIntentionFeatures) { | ||||||
|  |         targetPocketDistance @include(if: $includeTargetPocketDistance) | ||||||
|  |         make @include(if: $includeMake) | ||||||
|  |         intendedPocketType @include(if: $includeIntendedPocketType) | ||||||
|  |       } | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  | } | ||||||
|   | |||||||
| @@ -1,11 +1,22 @@ | |||||||
| mutation getProfileImageUploadLink($fileExt: String = ".png") { | mutation getProfileImageUploadLink($fileExt: String = ".png") { | ||||||
|   getProfileImageUploadLink(fileExt: $fileExt) { |   getProfileImageUploadLink(fileExt: $fileExt) { | ||||||
|  |     value { | ||||||
|  |       ... on UploadLink { | ||||||
|         uploadUrl |         uploadUrl | ||||||
|         headers { |         headers { | ||||||
|           key |           key | ||||||
|           value |           value | ||||||
|         } |         } | ||||||
|       } |       } | ||||||
|  |       ... on GetProfileUploadLinkErrors { | ||||||
|  |         error { | ||||||
|  |           ... on TooManyProfileImageUploadsErr { | ||||||
|  |             linksRequested | ||||||
|  |           } | ||||||
|  |         } | ||||||
|  |       } | ||||||
|  |     } | ||||||
|  |   } | ||||||
| } | } | ||||||
|  |  | ||||||
| mutation editProfileImageUri($profileImageUri: String!) { | mutation editProfileImageUri($profileImageUri: String!) { | ||||||
|   | |||||||
| @@ -1,5 +1,5 @@ | |||||||
| query GetStreamMonitoringDetails($videoId: Int!) { | query GetStreamMonitoringDetails($videoId: Int!, $debuggingJson: JSON) { | ||||||
|   getVideo(videoId: $videoId) { |   getVideo(videoId: $videoId, debuggingJson: $debuggingJson) { | ||||||
|     id |     id | ||||||
|     totalShots |     totalShots | ||||||
|     makePercentage |     makePercentage | ||||||
| @@ -70,6 +70,7 @@ query GetVideoUpdatePageDetails($videoId: Int!) { | |||||||
|     totalShots |     totalShots | ||||||
|     makePercentage |     makePercentage | ||||||
|     elapsedTime |     elapsedTime | ||||||
|  |     tableSize | ||||||
|     tags { |     tags { | ||||||
|       tagClasses { |       tagClasses { | ||||||
|         name |         name | ||||||
| @@ -98,6 +99,7 @@ query GetVideoDetails($videoId: Int!) { | |||||||
|     totalShotsMade |     totalShotsMade | ||||||
|     createdAt |     createdAt | ||||||
|     updatedAt |     updatedAt | ||||||
|  |     tableSize | ||||||
|     owner { |     owner { | ||||||
|       id |       id | ||||||
|       firebaseUid |       firebaseUid | ||||||
| @@ -116,11 +118,10 @@ query GetVideoDetails($videoId: Int!) { | |||||||
| query GetVideos($videoIds: [Int!]!) { | query GetVideos($videoIds: [Int!]!) { | ||||||
|   getVideos(videoIds: $videoIds) { |   getVideos(videoIds: $videoIds) { | ||||||
|     id |     id | ||||||
|     playlist { |     framesPerSecond | ||||||
|       segmentDurations |  | ||||||
|     } |  | ||||||
|     stream { |     stream { | ||||||
|       id |       id | ||||||
|  |       streamSegmentType | ||||||
|       segments { |       segments { | ||||||
|         uploaded |         uploaded | ||||||
|         valid |         valid | ||||||
| @@ -129,6 +130,9 @@ query GetVideos($videoIds: [Int!]!) { | |||||||
|         framesPerSecond |         framesPerSecond | ||||||
|       } |       } | ||||||
|     } |     } | ||||||
|  |     playlist { | ||||||
|  |       segmentDurations | ||||||
|  |     } | ||||||
|   } |   } | ||||||
| } | } | ||||||
|  |  | ||||||
| @@ -138,12 +142,58 @@ query GetVideo($videoId: Int!) { | |||||||
|     playlist { |     playlist { | ||||||
|       segmentDurations |       segmentDurations | ||||||
|     } |     } | ||||||
|  |     homographyHistory { | ||||||
|  |       frameIndex | ||||||
|  |       crop { | ||||||
|  |         left | ||||||
|  |         top | ||||||
|  |         width | ||||||
|  |         height | ||||||
|  |       } | ||||||
|  |       pockets { | ||||||
|  |         left | ||||||
|  |         top | ||||||
|  |         width | ||||||
|  |         height | ||||||
|  |       } | ||||||
|  |       sourcePoints { | ||||||
|  |         topLeft { | ||||||
|  |           x | ||||||
|  |           y | ||||||
|  |         } | ||||||
|  |         topSide { | ||||||
|  |           x | ||||||
|  |           y | ||||||
|  |         } | ||||||
|  |         topRight { | ||||||
|  |           x | ||||||
|  |           y | ||||||
|  |         } | ||||||
|  |         bottomLeft { | ||||||
|  |           x | ||||||
|  |           y | ||||||
|  |         } | ||||||
|  |         bottomSide { | ||||||
|  |           x | ||||||
|  |           y | ||||||
|  |         } | ||||||
|  |         bottomRight { | ||||||
|  |           x | ||||||
|  |           y | ||||||
|  |         } | ||||||
|  |       } | ||||||
|  |     } | ||||||
|     stream { |     stream { | ||||||
|  |       streamSegmentType | ||||||
|       segments { |       segments { | ||||||
|         segmentIndex |         segmentIndex | ||||||
|         endFrameIndex |         endFrameIndex | ||||||
|         framesPerSecond |         framesPerSecond | ||||||
|       } |       } | ||||||
|  |       resolution { | ||||||
|  |         width | ||||||
|  |         height | ||||||
|  |       } | ||||||
|     } |     } | ||||||
|   } |   } | ||||||
| } | } | ||||||
| @@ -166,3 +216,24 @@ query GetMedianRunForVideo($videoId: Int!) { | |||||||
|     medianRun |     medianRun | ||||||
|   } |   } | ||||||
| } | } | ||||||
|  |  | ||||||
|  | query GetVideoForClipTimes($videoId: Int!) { | ||||||
|  |   getVideo(videoId: $videoId) { | ||||||
|  |     id | ||||||
|  |     framesPerSecond | ||||||
|  |     playlist { | ||||||
|  |       segmentDurations | ||||||
|  |     } | ||||||
|  |     stream { | ||||||
|  |       id | ||||||
|  |       streamSegmentType | ||||||
|  |       segments { | ||||||
|  |         uploaded | ||||||
|  |         valid | ||||||
|  |         segmentIndex | ||||||
|  |         endFrameIndex | ||||||
|  |         framesPerSecond | ||||||
|  |       } | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  | } | ||||||
|   | |||||||
| @@ -6,22 +6,65 @@ mutation CreateUploadStream($videoMetadataInput: VideoMetadataInput!) { | |||||||
|  |  | ||||||
| mutation GetUploadLink($videoId: Int!, $segmentIndex: Int!) { | mutation GetUploadLink($videoId: Int!, $segmentIndex: Int!) { | ||||||
|   getUploadLink(videoId: $videoId, segmentIndex: $segmentIndex) { |   getUploadLink(videoId: $videoId, segmentIndex: $segmentIndex) { | ||||||
|  |     value { | ||||||
|  |       ... on UploadLink { | ||||||
|         uploadUrl |         uploadUrl | ||||||
|         headers { |         headers { | ||||||
|           key |           key | ||||||
|           value |           value | ||||||
|         } |         } | ||||||
|       } |       } | ||||||
|  |       ... on GetUploadLinkErrors { | ||||||
|  |         error { | ||||||
|  |           ... on MustHaveSetForUploadLinkErr { | ||||||
|  |             resolution | ||||||
|  |             framesPerSecond | ||||||
|  |           } | ||||||
|  |           ... on SegmentAlreadyUploadedErr { | ||||||
|  |             segmentId | ||||||
|  |           } | ||||||
|  |           ... on ProcessingFailedErr { | ||||||
|  |             processing { | ||||||
|  |               status | ||||||
|  |               errors { | ||||||
|  |                 message | ||||||
|  |               } | ||||||
|  |             } | ||||||
|  |           } | ||||||
|  |         } | ||||||
|  |       } | ||||||
|  |     } | ||||||
|  |     stream { | ||||||
|  |       uploadCompletionCursor | ||||||
|  |     } | ||||||
|  |   } | ||||||
| } | } | ||||||
|  |  | ||||||
| mutation GetHlsInitUploadLink($videoId: Int!) { | mutation GetHlsInitUploadLink($videoId: Int!) { | ||||||
|   getHlsInitUploadLink(videoId: $videoId) { |   getHlsInitUploadLink(videoId: $videoId) { | ||||||
|  |     value { | ||||||
|  |       ... on UploadLink { | ||||||
|         uploadUrl |         uploadUrl | ||||||
|         headers { |         headers { | ||||||
|           key |           key | ||||||
|           value |           value | ||||||
|         } |         } | ||||||
|       } |       } | ||||||
|  |       ... on GetUploadLinkErrors { | ||||||
|  |         error { | ||||||
|  |           ... on NoInitForChunkedUploadErr { | ||||||
|  |             segmentType | ||||||
|  |           } | ||||||
|  |           ... on InitUploadAlreadyCompletedErr { | ||||||
|  |             segmentType | ||||||
|  |           } | ||||||
|  |           ... on TooManyInitUploadsErr { | ||||||
|  |             linksRequested | ||||||
|  |           } | ||||||
|  |         } | ||||||
|  |       } | ||||||
|  |     } | ||||||
|  |   } | ||||||
| } | } | ||||||
|  |  | ||||||
| mutation SetSegmentDuration( | mutation SetSegmentDuration( | ||||||
| @@ -72,6 +115,7 @@ query GetUploadStreamsWithDetails( | |||||||
|         isCompleted |         isCompleted | ||||||
|         lastIntendedSegmentBound |         lastIntendedSegmentBound | ||||||
|         uploadCompletionCursor |         uploadCompletionCursor | ||||||
|  |         uploadsCompleted | ||||||
|       } |       } | ||||||
|     } |     } | ||||||
|     pageInfo { |     pageInfo { | ||||||
|   | |||||||
							
								
								
									
										228
									
								
								src/schema.gql
									
									
									
									
									
								
							
							
						
						
									
										228
									
								
								src/schema.gql
									
									
									
									
									
								
							| @@ -4,12 +4,22 @@ type Query { | |||||||
|   ): [AggregateResultGQL!]! |   ): [AggregateResultGQL!]! | ||||||
|   getBucketSet(keyName: String!): BucketSetGQL |   getBucketSet(keyName: String!): BucketSetGQL | ||||||
|   getDeployedConfig: DeployedConfigGQL! |   getDeployedConfig: DeployedConfigGQL! | ||||||
|  |   waitFor(duration: Float!): Float! | ||||||
|   getVideoMakePercentageIntervals( |   getVideoMakePercentageIntervals( | ||||||
|     videoId: ID! |     videoId: ID! | ||||||
|     intervalDuration: Int! = 300 |     intervalDuration: Int! = 300 | ||||||
|   ): [MakePercentageIntervalGQL!]! |   ): [MakePercentageIntervalGQL!]! | ||||||
|   getShots(filterInput: FilterInput!): [ShotGQL!]! |   getShotsWithMetadata( | ||||||
|   getShotAnnotationTypes: [ShotAnnotationTypeGQL!]! |     filterInput: FilterInput! | ||||||
|  |     shotsPagination: GetShotsPagination = null | ||||||
|  |     limit: Int! = 500 | ||||||
|  |   ): GetShotsResult! | ||||||
|  |   getShots( | ||||||
|  |     filterInput: FilterInput! | ||||||
|  |     shotsPagination: GetShotsPagination = null | ||||||
|  |     limit: Int! = 500 | ||||||
|  |   ): [ShotGQL!]! | ||||||
|  |   getShotAnnotationTypes(errorTypes: Boolean = false): [ShotAnnotationTypeGQL!]! | ||||||
|   getUser(userId: Int!): UserGQL |   getUser(userId: Int!): UserGQL | ||||||
|   getLoggedInUser: UserGQL |   getLoggedInUser: UserGQL | ||||||
|   getUsernames( |   getUsernames( | ||||||
| @@ -24,7 +34,8 @@ type Query { | |||||||
|     after: String = null |     after: String = null | ||||||
|     filters: VideoFilterInput = null |     filters: VideoFilterInput = null | ||||||
|   ): VideoHistoryGQL! |   ): VideoHistoryGQL! | ||||||
|   getVideo(videoId: Int!): VideoGQL! |   getUserTags: [TagGQL!]! | ||||||
|  |   getVideo(videoId: Int!, debuggingJson: JSON = null): VideoGQL! | ||||||
|   getVideos(videoIds: [Int!]!): [VideoGQL!]! |   getVideos(videoIds: [Int!]!): [VideoGQL!]! | ||||||
| } | } | ||||||
|  |  | ||||||
| @@ -90,15 +101,24 @@ input FilterInput @oneOf { | |||||||
|   isLeftMiss: [Boolean!] |   isLeftMiss: [Boolean!] | ||||||
|   isRightMiss: [Boolean!] |   isRightMiss: [Boolean!] | ||||||
|   isDirect: [Boolean!] |   isDirect: [Boolean!] | ||||||
|  |   tableSize: RangeFilter | ||||||
|   bankAngle: RangeFilter |   bankAngle: RangeFilter | ||||||
|   bankDistance: RangeFilter |   bankDistance: RangeFilter | ||||||
|   kickAngle: RangeFilter |   kickAngle: RangeFilter | ||||||
|   kickDistance: RangeFilter |   kickDistance: RangeFilter | ||||||
|  |   cueAngleAfterObject: RangeFilter | ||||||
|  |   spinType: [SpinTypeEnum!] | ||||||
|  |   cueSpeedAfterObject: RangeFilter | ||||||
|  |   falsePositiveScore: RangeFilter | ||||||
| } | } | ||||||
|  |  | ||||||
| input RangeFilter { | input RangeFilter { | ||||||
|   lessThan: Float = null |   lessThan: Float = null | ||||||
|   greaterThanEqualTo: Float = null |   greaterThanEqualTo: Float = null | ||||||
|  |   greaterThan: Float = null | ||||||
|  |   includeOnNone: Boolean! = false | ||||||
|  |   lessThanInclusive: Boolean! = false | ||||||
|  |   greaterThanInclusive: Boolean! = true | ||||||
| } | } | ||||||
|  |  | ||||||
| enum PocketEnum { | enum PocketEnum { | ||||||
| @@ -125,6 +145,13 @@ input ShotAnnotationInput { | |||||||
|   name: String! |   name: String! | ||||||
| } | } | ||||||
|  |  | ||||||
|  | enum SpinTypeEnum { | ||||||
|  |   DRAW | ||||||
|  |   FOLLOW | ||||||
|  |   CENTER | ||||||
|  |   UNKNOWN | ||||||
|  | } | ||||||
|  |  | ||||||
| type BucketSetGQL { | type BucketSetGQL { | ||||||
|   keyName: String! |   keyName: String! | ||||||
|   feature: String! |   feature: String! | ||||||
| @@ -141,6 +168,7 @@ type DeployedConfigGQL { | |||||||
|   firebase: Boolean! |   firebase: Boolean! | ||||||
|   devMode: Boolean! |   devMode: Boolean! | ||||||
|   environment: String! |   environment: String! | ||||||
|  |   minimumAllowedAppVersion: String! | ||||||
| } | } | ||||||
|  |  | ||||||
| type MakePercentageIntervalGQL { | type MakePercentageIntervalGQL { | ||||||
| @@ -148,6 +176,11 @@ type MakePercentageIntervalGQL { | |||||||
|   elapsedTime: Float! |   elapsedTime: Float! | ||||||
| } | } | ||||||
|  |  | ||||||
|  | type GetShotsResult { | ||||||
|  |   shots: [ShotGQL!]! | ||||||
|  |   count: Int | ||||||
|  | } | ||||||
|  |  | ||||||
| type ShotGQL { | type ShotGQL { | ||||||
|   id: Int! |   id: Int! | ||||||
|   videoId: Int! |   videoId: Int! | ||||||
| @@ -161,6 +194,8 @@ type ShotGQL { | |||||||
|   serializedShotPaths: SerializedShotPathsGQL |   serializedShotPaths: SerializedShotPathsGQL | ||||||
|   user: UserGQL |   user: UserGQL | ||||||
|   annotations: [ShotAnnotationGQL!]! |   annotations: [ShotAnnotationGQL!]! | ||||||
|  |   falsePositiveScore: Float | ||||||
|  |   video: VideoGQL | ||||||
| } | } | ||||||
|  |  | ||||||
| """ | """ | ||||||
| @@ -173,6 +208,7 @@ type CueObjectFeaturesGQL { | |||||||
|   cueObjectAngle: Float |   cueObjectAngle: Float | ||||||
|   cueBallSpeed: Float |   cueBallSpeed: Float | ||||||
|   shotDirection: ShotDirectionEnum |   shotDirection: ShotDirectionEnum | ||||||
|  |   spinType: SpinTypeEnum | ||||||
| } | } | ||||||
|  |  | ||||||
| type PocketingIntentionFeaturesGQL { | type PocketingIntentionFeaturesGQL { | ||||||
| @@ -213,6 +249,7 @@ type ShotAnnotationGQL { | |||||||
|   type: ShotAnnotationTypeGQL! |   type: ShotAnnotationTypeGQL! | ||||||
|   creator: UserGQL! |   creator: UserGQL! | ||||||
|   notes: String! |   notes: String! | ||||||
|  |   errorDefault: Boolean! | ||||||
|   createdAt: DateTime |   createdAt: DateTime | ||||||
|   updatedAt: DateTime |   updatedAt: DateTime | ||||||
| } | } | ||||||
| @@ -222,15 +259,6 @@ type ShotAnnotationTypeGQL { | |||||||
|   name: String! |   name: String! | ||||||
| } | } | ||||||
|  |  | ||||||
| type UserPlayTimeGQL { |  | ||||||
|   totalSeconds: Float! |  | ||||||
| } |  | ||||||
|  |  | ||||||
| type VideoHistoryGQL { |  | ||||||
|   videos: [VideoGQL!]! |  | ||||||
|   pageInfo: PageInfoGQL! |  | ||||||
| } |  | ||||||
|  |  | ||||||
| type VideoGQL { | type VideoGQL { | ||||||
|   id: Int! |   id: Int! | ||||||
|   owner: UserGQL |   owner: UserGQL | ||||||
| @@ -248,9 +276,11 @@ type VideoGQL { | |||||||
|   endTime: DateTime |   endTime: DateTime | ||||||
|   elapsedTime: Float |   elapsedTime: Float | ||||||
|   framesPerSecond: Float! |   framesPerSecond: Float! | ||||||
|  |   tableSize: Float! | ||||||
|   stream: UploadStreamGQL |   stream: UploadStreamGQL | ||||||
|   playlist: HLSPlaylistGQL |   playlist: HLSPlaylistGQL | ||||||
|   tags: [VideoTag!]! |   tags: [VideoTag!]! | ||||||
|  |   currentHomography: HomographyInfoGQL | ||||||
|   homographyHistory: [HomographyInfoGQL!]! |   homographyHistory: [HomographyInfoGQL!]! | ||||||
|   currentProcessing: VideoProcessingGQL |   currentProcessing: VideoProcessingGQL | ||||||
| } | } | ||||||
| @@ -269,6 +299,8 @@ type UploadStreamGQL { | |||||||
|   createdAt: DateTime! |   createdAt: DateTime! | ||||||
|   updatedAt: DateTime! |   updatedAt: DateTime! | ||||||
|   segments: [UploadSegmentGQL!]! |   segments: [UploadSegmentGQL!]! | ||||||
|  |   resolution: VideoResolutionGQL! | ||||||
|  |   streamSegmentType: StreamSegmentTypeEnum! | ||||||
| } | } | ||||||
|  |  | ||||||
| enum InitPlaylistUploadStatusEnum { | enum InitPlaylistUploadStatusEnum { | ||||||
| @@ -291,6 +323,16 @@ type UploadSegmentGQL { | |||||||
|   linksRequested: Int! |   linksRequested: Int! | ||||||
| } | } | ||||||
|  |  | ||||||
|  | type VideoResolutionGQL { | ||||||
|  |   width: Int | ||||||
|  |   height: Int | ||||||
|  | } | ||||||
|  |  | ||||||
|  | enum StreamSegmentTypeEnum { | ||||||
|  |   FRAGMENTED_MP4 | ||||||
|  |   RB_CHUNKED_MP4 | ||||||
|  | } | ||||||
|  |  | ||||||
| type HLSPlaylistGQL { | type HLSPlaylistGQL { | ||||||
|   videoId: Int! |   videoId: Int! | ||||||
|   m3u8Text: String! |   m3u8Text: String! | ||||||
| @@ -337,6 +379,8 @@ type IntPoint2D { | |||||||
|  |  | ||||||
| type VideoProcessingGQL { | type VideoProcessingGQL { | ||||||
|   errors: [VideoProcessingErrorGQL!]! |   errors: [VideoProcessingErrorGQL!]! | ||||||
|  |   status: ProcessingStatusEnum! | ||||||
|  |   statuses: [VideoProcessingStatusGQL!]! | ||||||
| } | } | ||||||
|  |  | ||||||
| type VideoProcessingErrorGQL { | type VideoProcessingErrorGQL { | ||||||
| @@ -345,6 +389,44 @@ type VideoProcessingErrorGQL { | |||||||
|   endSegmentIndex: Int |   endSegmentIndex: Int | ||||||
| } | } | ||||||
|  |  | ||||||
|  | enum ProcessingStatusEnum { | ||||||
|  |   STARTED | ||||||
|  |   FAILED | ||||||
|  |   SUCCEEDED | ||||||
|  |   SUSPENDED | ||||||
|  |   CREATED | ||||||
|  |   QUEUED | ||||||
|  |   RUNNING | ||||||
|  |   REEXTRACTING_FEATURES | ||||||
|  | } | ||||||
|  |  | ||||||
|  | type VideoProcessingStatusGQL { | ||||||
|  |   status: ProcessingStatusEnum! | ||||||
|  |   appVersion: String! | ||||||
|  |   sequenceId: Int! | ||||||
|  |   createdAt: DateTime | ||||||
|  |   updatedAt: DateTime | ||||||
|  | } | ||||||
|  |  | ||||||
|  | input GetShotsPagination { | ||||||
|  |   createdAfter: CreatedAfter! | ||||||
|  |   startFrameAfter: Int! | ||||||
|  | } | ||||||
|  |  | ||||||
|  | input CreatedAfter @oneOf { | ||||||
|  |   videoId: Int | ||||||
|  |   createdAt: DateTime | ||||||
|  | } | ||||||
|  |  | ||||||
|  | type UserPlayTimeGQL { | ||||||
|  |   totalSeconds: Float! | ||||||
|  | } | ||||||
|  |  | ||||||
|  | type VideoHistoryGQL { | ||||||
|  |   videos: [VideoGQL!]! | ||||||
|  |   pageInfo: PageInfoGQL! | ||||||
|  | } | ||||||
|  |  | ||||||
| type PageInfoGQL { | type PageInfoGQL { | ||||||
|   hasNextPage: Boolean! |   hasNextPage: Boolean! | ||||||
|   endCursor: String |   endCursor: String | ||||||
| @@ -355,10 +437,31 @@ input VideoFilterInput { | |||||||
|   requireCursorCompletion: Boolean! = true |   requireCursorCompletion: Boolean! = true | ||||||
| } | } | ||||||
|  |  | ||||||
|  | type TagGQL { | ||||||
|  |   name: String! | ||||||
|  |   id: Int! | ||||||
|  |   group: String | ||||||
|  | } | ||||||
|  |  | ||||||
|  | """ | ||||||
|  | The `JSON` scalar type represents JSON values as specified by [ECMA-404](https://ecma-international.org/wp-content/uploads/ECMA-404_2nd_edition_december_2017.pdf). | ||||||
|  | """ | ||||||
|  | scalar JSON | ||||||
|  |   @specifiedBy( | ||||||
|  |     url: "https://ecma-international.org/wp-content/uploads/ECMA-404_2nd_edition_december_2017.pdf" | ||||||
|  |   ) | ||||||
|  |  | ||||||
| type Mutation { | type Mutation { | ||||||
|   createBucketSet(params: CreateBucketSetInput!): BucketSetGQL! |   createBucketSet(params: CreateBucketSetInput!): BucketSetGQL! | ||||||
|   setLoggerLevel(path: String!, level: String!): Boolean! |   setLoggerLevel(path: String!, level: String!): Boolean! | ||||||
|   getProfileImageUploadLink(fileExt: String = ".png"): GetUploadLinkReturn! |   addAnnotationToShot( | ||||||
|  |     shotId: Int! | ||||||
|  |     annotationName: String! | ||||||
|  |     notes: String = null | ||||||
|  |   ): AddShotAnnotationReturn! | ||||||
|  |   getProfileImageUploadLink( | ||||||
|  |     fileExt: String = ".png" | ||||||
|  |   ): GetProfileUploadLinkReturn! | ||||||
|   editProfileImageUri(profileImageUri: String!): UserGQL! |   editProfileImageUri(profileImageUri: String!): UserGQL! | ||||||
|   createUploadStream( |   createUploadStream( | ||||||
|     videoMetadata: VideoMetadataInput! |     videoMetadata: VideoMetadataInput! | ||||||
| @@ -380,7 +483,44 @@ input CreateBucketSetInput { | |||||||
|   buckets: [BucketInputGQL!]! |   buckets: [BucketInputGQL!]! | ||||||
| } | } | ||||||
|  |  | ||||||
| type GetUploadLinkReturn { | type AddShotAnnotationReturn { | ||||||
|  |   value: SuccessfulAddAddShotAnnotationErrors! | ||||||
|  | } | ||||||
|  |  | ||||||
|  | union SuccessfulAddAddShotAnnotationErrors = | ||||||
|  |     SuccessfulAdd | ||||||
|  |   | AddShotAnnotationErrors | ||||||
|  |  | ||||||
|  | type SuccessfulAdd { | ||||||
|  |   value: Boolean! | ||||||
|  | } | ||||||
|  |  | ||||||
|  | type AddShotAnnotationErrors { | ||||||
|  |   error: DoesNotOwnShotErrOtherErrorNeedsNote! | ||||||
|  | } | ||||||
|  |  | ||||||
|  | union DoesNotOwnShotErrOtherErrorNeedsNote = | ||||||
|  |     DoesNotOwnShotErr | ||||||
|  |   | OtherErrorNeedsNote | ||||||
|  |  | ||||||
|  | type DoesNotOwnShotErr { | ||||||
|  |   shotId: Int! | ||||||
|  |   msg: String | ||||||
|  | } | ||||||
|  |  | ||||||
|  | type OtherErrorNeedsNote { | ||||||
|  |   msg: String | ||||||
|  | } | ||||||
|  |  | ||||||
|  | type GetProfileUploadLinkReturn { | ||||||
|  |   value: UploadLinkGetProfileUploadLinkErrors! | ||||||
|  | } | ||||||
|  |  | ||||||
|  | union UploadLinkGetProfileUploadLinkErrors = | ||||||
|  |     UploadLink | ||||||
|  |   | GetProfileUploadLinkErrors | ||||||
|  |  | ||||||
|  | type UploadLink { | ||||||
|   uploadUrl: String! |   uploadUrl: String! | ||||||
|   headers: [Header]! |   headers: [Header]! | ||||||
| } | } | ||||||
| @@ -390,6 +530,14 @@ type Header { | |||||||
|   value: String! |   value: String! | ||||||
| } | } | ||||||
|  |  | ||||||
|  | type GetProfileUploadLinkErrors { | ||||||
|  |   error: TooManyProfileImageUploadsErr! | ||||||
|  | } | ||||||
|  |  | ||||||
|  | type TooManyProfileImageUploadsErr { | ||||||
|  |   linksRequested: Int! | ||||||
|  | } | ||||||
|  |  | ||||||
| type CreateUploadStreamReturn { | type CreateUploadStreamReturn { | ||||||
|   videoId: Int! |   videoId: Int! | ||||||
| } | } | ||||||
| @@ -399,7 +547,7 @@ input VideoMetadataInput { | |||||||
|   startTime: DateTime = null |   startTime: DateTime = null | ||||||
|   endTime: DateTime = null |   endTime: DateTime = null | ||||||
|   gameType: String = null |   gameType: String = null | ||||||
|   tableSize: String = null |   tableSize: Float = null | ||||||
|   uploadStreamMetadataInput: UploadStreamMetadataInput = null |   uploadStreamMetadataInput: UploadStreamMetadataInput = null | ||||||
|   lastIntendedSegmentBound: Int = null |   lastIntendedSegmentBound: Int = null | ||||||
|   streamSegmentType: StreamSegmentTypeEnum = null |   streamSegmentType: StreamSegmentTypeEnum = null | ||||||
| @@ -426,12 +574,52 @@ enum DeviceTypeEnum { | |||||||
|   BROWSER |   BROWSER | ||||||
| } | } | ||||||
|  |  | ||||||
| enum StreamSegmentTypeEnum { |  | ||||||
|   FRAGMENTED_MP4 |  | ||||||
|   RB_CHUNKED_MP4 |  | ||||||
| } |  | ||||||
|  |  | ||||||
| input VideoResolution { | input VideoResolution { | ||||||
|   width: Int! |   width: Int! | ||||||
|   height: Int! |   height: Int! | ||||||
| } | } | ||||||
|  |  | ||||||
|  | type GetUploadLinkReturn { | ||||||
|  |   value: UploadLinkGetUploadLinkErrors! | ||||||
|  |   stream: UploadStreamGQL | ||||||
|  | } | ||||||
|  |  | ||||||
|  | union UploadLinkGetUploadLinkErrors = UploadLink | GetUploadLinkErrors | ||||||
|  |  | ||||||
|  | type GetUploadLinkErrors { | ||||||
|  |   error: MustHaveSetForUploadLinkErrSegmentAlreadyUploadedErrProcessingFailedErrNoInitForChunkedUploadErrTooManyProfileImageUploadsErrInitUploadAlreadyCompletedErrTooManyInitUploadsErr! | ||||||
|  | } | ||||||
|  |  | ||||||
|  | union MustHaveSetForUploadLinkErrSegmentAlreadyUploadedErrProcessingFailedErrNoInitForChunkedUploadErrTooManyProfileImageUploadsErrInitUploadAlreadyCompletedErrTooManyInitUploadsErr = | ||||||
|  |     MustHaveSetForUploadLinkErr | ||||||
|  |   | SegmentAlreadyUploadedErr | ||||||
|  |   | ProcessingFailedErr | ||||||
|  |   | NoInitForChunkedUploadErr | ||||||
|  |   | TooManyProfileImageUploadsErr | ||||||
|  |   | InitUploadAlreadyCompletedErr | ||||||
|  |   | TooManyInitUploadsErr | ||||||
|  |  | ||||||
|  | type MustHaveSetForUploadLinkErr { | ||||||
|  |   resolution: Boolean | ||||||
|  |   framesPerSecond: Boolean | ||||||
|  | } | ||||||
|  |  | ||||||
|  | type SegmentAlreadyUploadedErr { | ||||||
|  |   segmentId: Int! | ||||||
|  | } | ||||||
|  |  | ||||||
|  | type ProcessingFailedErr { | ||||||
|  |   processing: VideoProcessingGQL! | ||||||
|  | } | ||||||
|  |  | ||||||
|  | type NoInitForChunkedUploadErr { | ||||||
|  |   segmentType: StreamSegmentTypeEnum! | ||||||
|  | } | ||||||
|  |  | ||||||
|  | type InitUploadAlreadyCompletedErr { | ||||||
|  |   segmentType: StreamSegmentTypeEnum! | ||||||
|  | } | ||||||
|  |  | ||||||
|  | type TooManyInitUploadsErr { | ||||||
|  |   linksRequested: Int! | ||||||
|  | } | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user