Compare commits
61 Commits
micah/add-
...
kat/expose
Author | SHA1 | Date | |
---|---|---|---|
f9b02f65e0 | |||
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 |
839
src/index.tsx
839
src/index.tsx
File diff suppressed because it is too large
Load Diff
@@ -4,5 +4,6 @@ query getDeployedConfig {
|
||||
devMode
|
||||
environment
|
||||
firebase
|
||||
minimumAllowedAppVersion
|
||||
}
|
||||
}
|
||||
|
@@ -23,6 +23,7 @@ query GetFeed(
|
||||
stream {
|
||||
isCompleted
|
||||
}
|
||||
tableSize
|
||||
tags {
|
||||
tagClasses {
|
||||
name
|
||||
|
@@ -1,5 +1,7 @@
|
||||
query GetShots(
|
||||
$filterInput: FilterInput!
|
||||
$shotsPagination: GetShotsPagination
|
||||
$limit: Int
|
||||
$includeCreatedAt: Boolean! = false
|
||||
$includeUpdatedAt: Boolean! = false
|
||||
$includeCueObjectFeatures: Boolean! = false
|
||||
@@ -12,7 +14,11 @@ query GetShots(
|
||||
$includeMake: Boolean! = false
|
||||
$includeIntendedPocketType: Boolean! = false
|
||||
) {
|
||||
getShots(filterInput: $filterInput) {
|
||||
getShots(
|
||||
filterInput: $filterInput
|
||||
shotsPagination: $shotsPagination
|
||||
limit: $limit
|
||||
) {
|
||||
id
|
||||
videoId
|
||||
startFrame
|
||||
@@ -20,6 +26,15 @@ query GetShots(
|
||||
user {
|
||||
id
|
||||
}
|
||||
falsePositiveScore
|
||||
video {
|
||||
stream {
|
||||
resolution {
|
||||
width
|
||||
height
|
||||
}
|
||||
}
|
||||
}
|
||||
createdAt @include(if: $includeCreatedAt)
|
||||
updatedAt @include(if: $includeUpdatedAt)
|
||||
cueObjectFeatures @include(if: $includeCueObjectFeatures) {
|
||||
|
@@ -1,11 +1,22 @@
|
||||
mutation getProfileImageUploadLink($fileExt: String = ".png") {
|
||||
getProfileImageUploadLink(fileExt: $fileExt) {
|
||||
value {
|
||||
... on UploadLink {
|
||||
uploadUrl
|
||||
headers {
|
||||
key
|
||||
value
|
||||
}
|
||||
}
|
||||
... on GetProfileUploadLinkErrors {
|
||||
error {
|
||||
... on TooManyProfileImageUploadsErr {
|
||||
linksRequested
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
mutation editProfileImageUri($profileImageUri: String!) {
|
||||
|
@@ -1,5 +1,5 @@
|
||||
query GetStreamMonitoringDetails($videoId: Int!) {
|
||||
getVideo(videoId: $videoId) {
|
||||
query GetStreamMonitoringDetails($videoId: Int!, $debuggingJson: JSON) {
|
||||
getVideo(videoId: $videoId, debuggingJson: $debuggingJson) {
|
||||
id
|
||||
totalShots
|
||||
makePercentage
|
||||
@@ -70,6 +70,7 @@ query GetVideoUpdatePageDetails($videoId: Int!) {
|
||||
totalShots
|
||||
makePercentage
|
||||
elapsedTime
|
||||
tableSize
|
||||
tags {
|
||||
tagClasses {
|
||||
name
|
||||
@@ -98,6 +99,7 @@ query GetVideoDetails($videoId: Int!) {
|
||||
totalShotsMade
|
||||
createdAt
|
||||
updatedAt
|
||||
tableSize
|
||||
owner {
|
||||
id
|
||||
firebaseUid
|
||||
@@ -116,11 +118,10 @@ query GetVideoDetails($videoId: Int!) {
|
||||
query GetVideos($videoIds: [Int!]!) {
|
||||
getVideos(videoIds: $videoIds) {
|
||||
id
|
||||
playlist {
|
||||
segmentDurations
|
||||
}
|
||||
framesPerSecond
|
||||
stream {
|
||||
id
|
||||
streamSegmentType
|
||||
segments {
|
||||
uploaded
|
||||
valid
|
||||
@@ -129,6 +130,9 @@ query GetVideos($videoIds: [Int!]!) {
|
||||
framesPerSecond
|
||||
}
|
||||
}
|
||||
playlist {
|
||||
segmentDurations
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -138,12 +142,58 @@ query GetVideo($videoId: Int!) {
|
||||
playlist {
|
||||
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 {
|
||||
streamSegmentType
|
||||
segments {
|
||||
segmentIndex
|
||||
endFrameIndex
|
||||
framesPerSecond
|
||||
}
|
||||
resolution {
|
||||
width
|
||||
height
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -166,3 +216,24 @@ query GetMedianRunForVideo($videoId: Int!) {
|
||||
medianRun
|
||||
}
|
||||
}
|
||||
|
||||
query GetVideoForClipTimes($videoId: Int!) {
|
||||
getVideo(videoId: $videoId) {
|
||||
id
|
||||
framesPerSecond
|
||||
playlist {
|
||||
segmentDurations
|
||||
}
|
||||
stream {
|
||||
id
|
||||
streamSegmentType
|
||||
segments {
|
||||
uploaded
|
||||
valid
|
||||
segmentIndex
|
||||
endFrameIndex
|
||||
framesPerSecond
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -6,22 +6,59 @@ mutation CreateUploadStream($videoMetadataInput: VideoMetadataInput!) {
|
||||
|
||||
mutation GetUploadLink($videoId: Int!, $segmentIndex: Int!) {
|
||||
getUploadLink(videoId: $videoId, segmentIndex: $segmentIndex) {
|
||||
value {
|
||||
... on UploadLink {
|
||||
uploadUrl
|
||||
headers {
|
||||
key
|
||||
value
|
||||
}
|
||||
}
|
||||
... on GetUploadLinkErrors {
|
||||
error {
|
||||
... on MustHaveSetForUploadLinkErr {
|
||||
resolution
|
||||
framesPerSecond
|
||||
}
|
||||
... on SegmentAlreadyUploadedErr {
|
||||
segmentId
|
||||
}
|
||||
... on ProcessingFailedErr {
|
||||
processing {
|
||||
status
|
||||
errors {
|
||||
message
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
stream {
|
||||
uploadCompletionCursor
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
mutation GetHlsInitUploadLink($videoId: Int!) {
|
||||
getHlsInitUploadLink(videoId: $videoId) {
|
||||
value {
|
||||
... on UploadLink {
|
||||
uploadUrl
|
||||
headers {
|
||||
key
|
||||
value
|
||||
}
|
||||
}
|
||||
... on GetUploadLinkErrors {
|
||||
error {
|
||||
... on NoInitForChunkedUploadErr {
|
||||
segmentType
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
mutation SetSegmentDuration(
|
||||
@@ -72,6 +109,7 @@ query GetUploadStreamsWithDetails(
|
||||
isCompleted
|
||||
lastIntendedSegmentBound
|
||||
uploadCompletionCursor
|
||||
uploadsCompleted
|
||||
}
|
||||
}
|
||||
pageInfo {
|
||||
|
207
src/schema.gql
207
src/schema.gql
@@ -4,12 +4,17 @@ type Query {
|
||||
): [AggregateResultGQL!]!
|
||||
getBucketSet(keyName: String!): BucketSetGQL
|
||||
getDeployedConfig: DeployedConfigGQL!
|
||||
waitFor(duration: Float!): Float!
|
||||
getVideoMakePercentageIntervals(
|
||||
videoId: ID!
|
||||
intervalDuration: Int! = 300
|
||||
): [MakePercentageIntervalGQL!]!
|
||||
getShots(filterInput: FilterInput!): [ShotGQL!]!
|
||||
getShotAnnotationTypes: [ShotAnnotationTypeGQL!]!
|
||||
getShots(
|
||||
filterInput: FilterInput!
|
||||
shotsPagination: GetShotsPagination = null
|
||||
limit: Int! = 500
|
||||
): [ShotGQL!]!
|
||||
getShotAnnotationTypes(errorTypes: Boolean = false): [ShotAnnotationTypeGQL!]!
|
||||
getUser(userId: Int!): UserGQL
|
||||
getLoggedInUser: UserGQL
|
||||
getUsernames(
|
||||
@@ -24,7 +29,8 @@ type Query {
|
||||
after: String = null
|
||||
filters: VideoFilterInput = null
|
||||
): VideoHistoryGQL!
|
||||
getVideo(videoId: Int!): VideoGQL!
|
||||
getUserTags: [TagGQL!]!
|
||||
getVideo(videoId: Int!, debuggingJson: JSON = null): VideoGQL!
|
||||
getVideos(videoIds: [Int!]!): [VideoGQL!]!
|
||||
}
|
||||
|
||||
@@ -90,15 +96,24 @@ input FilterInput @oneOf {
|
||||
isLeftMiss: [Boolean!]
|
||||
isRightMiss: [Boolean!]
|
||||
isDirect: [Boolean!]
|
||||
tableSize: RangeFilter
|
||||
bankAngle: RangeFilter
|
||||
bankDistance: RangeFilter
|
||||
kickAngle: RangeFilter
|
||||
kickDistance: RangeFilter
|
||||
cueAngleAfterObject: RangeFilter
|
||||
cueSpeedAfterObject: RangeFilter
|
||||
spinType: [String!]
|
||||
falsePositiveScore: RangeFilter
|
||||
}
|
||||
|
||||
input RangeFilter {
|
||||
lessThan: Float = null
|
||||
greaterThanEqualTo: Float = null
|
||||
greaterThan: Float = null
|
||||
includeOnNone: Boolean! = false
|
||||
lessThanInclusive: Boolean! = false
|
||||
greaterThanInclusive: Boolean! = true
|
||||
}
|
||||
|
||||
enum PocketEnum {
|
||||
@@ -141,6 +156,7 @@ type DeployedConfigGQL {
|
||||
firebase: Boolean!
|
||||
devMode: Boolean!
|
||||
environment: String!
|
||||
minimumAllowedAppVersion: String!
|
||||
}
|
||||
|
||||
type MakePercentageIntervalGQL {
|
||||
@@ -161,6 +177,8 @@ type ShotGQL {
|
||||
serializedShotPaths: SerializedShotPathsGQL
|
||||
user: UserGQL
|
||||
annotations: [ShotAnnotationGQL!]!
|
||||
falsePositiveScore: Float
|
||||
video: VideoGQL
|
||||
}
|
||||
|
||||
"""
|
||||
@@ -213,6 +231,7 @@ type ShotAnnotationGQL {
|
||||
type: ShotAnnotationTypeGQL!
|
||||
creator: UserGQL!
|
||||
notes: String!
|
||||
errorDefault: Boolean!
|
||||
createdAt: DateTime
|
||||
updatedAt: DateTime
|
||||
}
|
||||
@@ -222,15 +241,6 @@ type ShotAnnotationTypeGQL {
|
||||
name: String!
|
||||
}
|
||||
|
||||
type UserPlayTimeGQL {
|
||||
totalSeconds: Float!
|
||||
}
|
||||
|
||||
type VideoHistoryGQL {
|
||||
videos: [VideoGQL!]!
|
||||
pageInfo: PageInfoGQL!
|
||||
}
|
||||
|
||||
type VideoGQL {
|
||||
id: Int!
|
||||
owner: UserGQL
|
||||
@@ -248,6 +258,7 @@ type VideoGQL {
|
||||
endTime: DateTime
|
||||
elapsedTime: Float
|
||||
framesPerSecond: Float!
|
||||
tableSize: Float!
|
||||
stream: UploadStreamGQL
|
||||
playlist: HLSPlaylistGQL
|
||||
tags: [VideoTag!]!
|
||||
@@ -269,6 +280,8 @@ type UploadStreamGQL {
|
||||
createdAt: DateTime!
|
||||
updatedAt: DateTime!
|
||||
segments: [UploadSegmentGQL!]!
|
||||
resolution: VideoResolutionGQL!
|
||||
streamSegmentType: StreamSegmentTypeEnum!
|
||||
}
|
||||
|
||||
enum InitPlaylistUploadStatusEnum {
|
||||
@@ -291,6 +304,16 @@ type UploadSegmentGQL {
|
||||
linksRequested: Int!
|
||||
}
|
||||
|
||||
type VideoResolutionGQL {
|
||||
width: Int
|
||||
height: Int
|
||||
}
|
||||
|
||||
enum StreamSegmentTypeEnum {
|
||||
FRAGMENTED_MP4
|
||||
RB_CHUNKED_MP4
|
||||
}
|
||||
|
||||
type HLSPlaylistGQL {
|
||||
videoId: Int!
|
||||
m3u8Text: String!
|
||||
@@ -337,6 +360,8 @@ type IntPoint2D {
|
||||
|
||||
type VideoProcessingGQL {
|
||||
errors: [VideoProcessingErrorGQL!]!
|
||||
status: ProcessingStatusEnum!
|
||||
statuses: [VideoProcessingStatusGQL!]!
|
||||
}
|
||||
|
||||
type VideoProcessingErrorGQL {
|
||||
@@ -345,6 +370,44 @@ type VideoProcessingErrorGQL {
|
||||
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 {
|
||||
hasNextPage: Boolean!
|
||||
endCursor: String
|
||||
@@ -355,10 +418,31 @@ input VideoFilterInput {
|
||||
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 {
|
||||
createBucketSet(params: CreateBucketSetInput!): BucketSetGQL!
|
||||
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!
|
||||
createUploadStream(
|
||||
videoMetadata: VideoMetadataInput!
|
||||
@@ -380,7 +464,44 @@ input CreateBucketSetInput {
|
||||
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!
|
||||
headers: [Header]!
|
||||
}
|
||||
@@ -390,29 +511,32 @@ type Header {
|
||||
value: String!
|
||||
}
|
||||
|
||||
type GetProfileUploadLinkErrors {
|
||||
error: TooManyProfileImageUploadsErr!
|
||||
}
|
||||
|
||||
type TooManyProfileImageUploadsErr {
|
||||
linksRequested: Int!
|
||||
}
|
||||
|
||||
type CreateUploadStreamReturn {
|
||||
videoId: Int!
|
||||
}
|
||||
|
||||
input VideoMetadataInput {
|
||||
resolution: VideoResolution!
|
||||
videoName: String = null
|
||||
startTime: DateTime = null
|
||||
endTime: DateTime = null
|
||||
gameType: String = null
|
||||
tableSize: String = null
|
||||
tableSize: Float = null
|
||||
uploadStreamMetadataInput: UploadStreamMetadataInput = null
|
||||
lastIntendedSegmentBound: Int = null
|
||||
streamSegmentType: StreamSegmentTypeEnum = null
|
||||
endStream: Boolean! = false
|
||||
resolution: VideoResolution = null
|
||||
framesPerSecond: Float = null
|
||||
}
|
||||
|
||||
input VideoResolution {
|
||||
width: Int!
|
||||
height: Int!
|
||||
}
|
||||
|
||||
input UploadStreamMetadataInput {
|
||||
deviceType: DeviceTypeEnum = null
|
||||
osVersion: String = null
|
||||
@@ -431,7 +555,42 @@ enum DeviceTypeEnum {
|
||||
BROWSER
|
||||
}
|
||||
|
||||
enum StreamSegmentTypeEnum {
|
||||
FRAGMENTED_MP4
|
||||
RB_CHUNKED_MP4
|
||||
input VideoResolution {
|
||||
width: Int!
|
||||
height: Int!
|
||||
}
|
||||
|
||||
type GetUploadLinkReturn {
|
||||
value: UploadLinkGetUploadLinkErrors!
|
||||
stream: UploadStreamGQL
|
||||
}
|
||||
|
||||
union UploadLinkGetUploadLinkErrors = UploadLink | GetUploadLinkErrors
|
||||
|
||||
type GetUploadLinkErrors {
|
||||
error: MustHaveSetForUploadLinkErrSegmentAlreadyUploadedErrProcessingFailedErrNoInitForChunkedUploadErrTooManyProfileImageUploadsErr!
|
||||
}
|
||||
|
||||
union MustHaveSetForUploadLinkErrSegmentAlreadyUploadedErrProcessingFailedErrNoInitForChunkedUploadErrTooManyProfileImageUploadsErr =
|
||||
MustHaveSetForUploadLinkErr
|
||||
| SegmentAlreadyUploadedErr
|
||||
| ProcessingFailedErr
|
||||
| NoInitForChunkedUploadErr
|
||||
| TooManyProfileImageUploadsErr
|
||||
|
||||
type MustHaveSetForUploadLinkErr {
|
||||
resolution: Boolean
|
||||
framesPerSecond: Boolean
|
||||
}
|
||||
|
||||
type SegmentAlreadyUploadedErr {
|
||||
segmentId: Int!
|
||||
}
|
||||
|
||||
type ProcessingFailedErr {
|
||||
processing: VideoProcessingGQL!
|
||||
}
|
||||
|
||||
type NoInitForChunkedUploadErr {
|
||||
segmentType: StreamSegmentTypeEnum!
|
||||
}
|
||||
|
Reference in New Issue
Block a user