Compare commits
38 Commits
dcdb324391
...
ivan/add-c
| Author | SHA1 | Date | |
|---|---|---|---|
| d619751144 | |||
| e431a1751f | |||
| 209f0aa019 | |||
| 70015a942c | |||
| 91cfcb28e7 | |||
| b2a09c1b8c | |||
| 59aaf47cbe | |||
| c426e753cd | |||
| c8cf97421b | |||
| 9718137ad3 | |||
| af1fb3fee7 | |||
| 025baf257a | |||
| 8239ab6e1b | |||
| 1f018f954e | |||
| fd78ddf641 | |||
| 7662f1f050 | |||
| 890bea2571 | |||
| f57f6dc32d | |||
| 14863e3357 | |||
|
|
58f01c567c | ||
| 937368c753 | |||
| d8c11875d4 | |||
| bacd9e77f0 | |||
| 69d755ba32 | |||
| 31fb95e3b0 | |||
| 7d0f9870dd | |||
| 4a493b4e8d | |||
| 341dc819a0 | |||
| b58aecf7a5 | |||
| 301c017d5e | |||
| 1a4b676635 | |||
| ce54bef0b4 | |||
| 2699d29d7b | |||
| 63a07d58ca | |||
| 59fe332fe0 | |||
| 33723f4ea2 | |||
| c0ee55069e | |||
| 492ae4a225 |
@@ -1,5 +1,7 @@
|
|||||||
overwrite: true
|
overwrite: true
|
||||||
schema: "src/schema.gql"
|
schema:
|
||||||
|
- "src/schema.gql"
|
||||||
|
- "src/client-schema.gql"
|
||||||
documents: "src/**/*.gql"
|
documents: "src/**/*.gql"
|
||||||
generates:
|
generates:
|
||||||
src/index.tsx:
|
src/index.tsx:
|
||||||
|
|||||||
7
src/client-schema.gql
Normal file
7
src/client-schema.gql
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
# see: https://www.apollographql.com/docs/react/local-state/managing-state-with-field-policies/
|
||||||
|
directive @client on FIELD
|
||||||
|
|
||||||
|
extend type ShotGQL {
|
||||||
|
startTime: Float!
|
||||||
|
endTime: Float!
|
||||||
|
}
|
||||||
1258
src/index.tsx
1258
src/index.tsx
File diff suppressed because it is too large
Load Diff
@@ -1,59 +1,3 @@
|
|||||||
query GetShots(
|
|
||||||
$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
|
|
||||||
) {
|
|
||||||
getShots(
|
|
||||||
filterInput: $filterInput
|
|
||||||
shotsPagination: $shotsPagination
|
|
||||||
limit: $limit
|
|
||||||
) {
|
|
||||||
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)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
query GetSerializedShotPaths($filterInput: FilterInput!) {
|
query GetSerializedShotPaths($filterInput: FilterInput!) {
|
||||||
getShots(filterInput: $filterInput) {
|
getShots(filterInput: $filterInput) {
|
||||||
id
|
id
|
||||||
@@ -73,65 +17,111 @@ query GetShotAnnotationTypes {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
query GetShotsWithMetadata(
|
query GetShotsWithVideoGql($filterInput: FilterInput!, $limit: Int) {
|
||||||
|
getShotsWithMetadata(filterInput: $filterInput, limit: $limit) {
|
||||||
|
ids
|
||||||
|
shots {
|
||||||
|
id
|
||||||
|
videoId
|
||||||
|
video {
|
||||||
|
screenshotUri
|
||||||
|
endTime
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
## Reserved for playlists (which are created from a filter)
|
||||||
|
query GetShotsWithMetadataFilterResult(
|
||||||
$filterInput: FilterInput!
|
$filterInput: FilterInput!
|
||||||
$shotsPagination: GetShotsPagination
|
$shotsPagination: GetShotsPagination
|
||||||
$limit: Int
|
$limit: Int
|
||||||
$includeCreatedAt: Boolean! = false
|
$ids: [Int!]
|
||||||
$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(
|
getShotsWithMetadata(
|
||||||
filterInput: $filterInput
|
filterInput: $filterInput
|
||||||
shotsPagination: $shotsPagination
|
shotsPagination: $shotsPagination
|
||||||
limit: $limit
|
limit: $limit
|
||||||
|
ids: $ids
|
||||||
) {
|
) {
|
||||||
count
|
count
|
||||||
shots {
|
shots {
|
||||||
id
|
...ShotWithAllFeatures
|
||||||
videoId
|
}
|
||||||
startFrame
|
ids
|
||||||
endFrame
|
}
|
||||||
user {
|
}
|
||||||
id
|
|
||||||
}
|
|
||||||
falsePositiveScore
|
|
||||||
video {
|
|
||||||
stream {
|
|
||||||
resolution {
|
|
||||||
width
|
|
||||||
height
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
serializedShotPaths {
|
|
||||||
b64EncodedBuffer
|
|
||||||
}
|
|
||||||
|
|
||||||
createdAt @include(if: $includeCreatedAt)
|
# TODO: Delete
|
||||||
updatedAt @include(if: $includeUpdatedAt)
|
query GetShotsWithMetadata(
|
||||||
cueObjectFeatures @include(if: $includeCueObjectFeatures) {
|
$filterInput: FilterInput!
|
||||||
cueObjectDistance @include(if: $includeCueObjectDistance)
|
$shotsPagination: GetShotsPagination
|
||||||
cueObjectAngle @include(if: $includeCueObjectAngle)
|
$limit: Int
|
||||||
cueBallSpeed @include(if: $includeCueBallSpeed)
|
$ids: [Int!]
|
||||||
shotDirection @include(if: $includeShotDirection)
|
) {
|
||||||
spinType @include(if: $includeSpinType)
|
getShotsWithMetadata(
|
||||||
}
|
filterInput: $filterInput
|
||||||
pocketingIntentionFeatures
|
shotsPagination: $shotsPagination
|
||||||
@include(if: $includePocketingIntentionFeatures) {
|
limit: $limit
|
||||||
targetPocketDistance @include(if: $includeTargetPocketDistance)
|
ids: $ids
|
||||||
make @include(if: $includeMake)
|
) {
|
||||||
intendedPocketType @include(if: $includeIntendedPocketType)
|
count
|
||||||
|
shots {
|
||||||
|
...ShotWithAllFeatures
|
||||||
|
}
|
||||||
|
ids
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
query GetShotsByIds($ids: [Int!]!) {
|
||||||
|
getShotsByIds(ids: $ids) {
|
||||||
|
...ShotWithAllFeatures
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fragment ShotWithAllFeatures on ShotGQL {
|
||||||
|
id
|
||||||
|
videoId
|
||||||
|
startFrame
|
||||||
|
endFrame
|
||||||
|
startTime @client
|
||||||
|
endTime @client
|
||||||
|
user {
|
||||||
|
id
|
||||||
|
}
|
||||||
|
falsePositiveScore
|
||||||
|
video {
|
||||||
|
id
|
||||||
|
stream {
|
||||||
|
resolution {
|
||||||
|
width
|
||||||
|
height
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
createdAt
|
||||||
|
updatedAt
|
||||||
|
cueObjectFeatures {
|
||||||
|
cueObjectDistance
|
||||||
|
cueObjectAngle
|
||||||
|
cueBallSpeed
|
||||||
|
shotDirection
|
||||||
|
spinType
|
||||||
|
}
|
||||||
|
pocketingIntentionFeatures {
|
||||||
|
make
|
||||||
|
targetPocketDistance
|
||||||
|
targetPocketAngle
|
||||||
|
targetPocketAngleDirection
|
||||||
|
marginOfErrorInDegrees
|
||||||
|
intendedPocketType
|
||||||
|
}
|
||||||
|
pocketingIntentionInfo {
|
||||||
|
ballId
|
||||||
|
pocketId
|
||||||
|
pathMetadataIndex
|
||||||
|
}
|
||||||
|
serializedShotPaths {
|
||||||
|
b64EncodedBuffer
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -117,25 +117,34 @@ query GetVideoDetails($videoId: Int!) {
|
|||||||
|
|
||||||
query GetVideos($videoIds: [Int!]!) {
|
query GetVideos($videoIds: [Int!]!) {
|
||||||
getVideos(videoIds: $videoIds) {
|
getVideos(videoIds: $videoIds) {
|
||||||
id
|
...VideoStreamMetadata
|
||||||
framesPerSecond
|
|
||||||
stream {
|
|
||||||
id
|
|
||||||
streamSegmentType
|
|
||||||
segments {
|
|
||||||
uploaded
|
|
||||||
valid
|
|
||||||
segmentIndex
|
|
||||||
endFrameIndex
|
|
||||||
framesPerSecond
|
|
||||||
}
|
|
||||||
}
|
|
||||||
playlist {
|
|
||||||
segmentDurations
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fragment VideoStreamMetadata on VideoGQL {
|
||||||
|
id
|
||||||
|
framesPerSecond
|
||||||
|
stream {
|
||||||
|
id
|
||||||
|
streamSegmentType
|
||||||
|
segments {
|
||||||
|
uploaded
|
||||||
|
valid
|
||||||
|
segmentIndex
|
||||||
|
endFrameIndex
|
||||||
|
framesPerSecond
|
||||||
|
}
|
||||||
|
}
|
||||||
|
playlist {
|
||||||
|
segmentDurations
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
query GetVideoForShotTime($videoId: Int!) {
|
||||||
|
getVideo(videoId: $videoId) {
|
||||||
|
...VideoStreamMetadata
|
||||||
|
}
|
||||||
|
}
|
||||||
query GetVideo($videoId: Int!) {
|
query GetVideo($videoId: Int!) {
|
||||||
getVideo(videoId: $videoId) {
|
getVideo(videoId: $videoId) {
|
||||||
id
|
id
|
||||||
@@ -237,3 +246,11 @@ query GetVideoForClipTimes($videoId: Int!) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
query GetHeaderInfoByVideoId($videoId: Int!) {
|
||||||
|
getVideo(videoId: $videoId) {
|
||||||
|
id
|
||||||
|
name
|
||||||
|
startTime
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@@ -11,6 +11,7 @@ type Query {
|
|||||||
): [MakePercentageIntervalGQL!]!
|
): [MakePercentageIntervalGQL!]!
|
||||||
getShotsWithMetadata(
|
getShotsWithMetadata(
|
||||||
filterInput: FilterInput!
|
filterInput: FilterInput!
|
||||||
|
ids: [Int!] = null
|
||||||
shotsPagination: GetShotsPagination = null
|
shotsPagination: GetShotsPagination = null
|
||||||
limit: Int! = 500
|
limit: Int! = 500
|
||||||
): GetShotsResult!
|
): GetShotsResult!
|
||||||
@@ -19,6 +20,7 @@ type Query {
|
|||||||
shotsPagination: GetShotsPagination = null
|
shotsPagination: GetShotsPagination = null
|
||||||
limit: Int! = 500
|
limit: Int! = 500
|
||||||
): [ShotGQL!]!
|
): [ShotGQL!]!
|
||||||
|
getShotsByIds(ids: [Int!]!): [ShotGQL!]!
|
||||||
getShotAnnotationTypes(errorTypes: Boolean = false): [ShotAnnotationTypeGQL!]!
|
getShotAnnotationTypes(errorTypes: Boolean = false): [ShotAnnotationTypeGQL!]!
|
||||||
getUser(userId: Int!): UserGQL
|
getUser(userId: Int!): UserGQL
|
||||||
getLoggedInUser: UserGQL
|
getLoggedInUser: UserGQL
|
||||||
@@ -107,26 +109,23 @@ Date with time (isoformat)
|
|||||||
"""
|
"""
|
||||||
scalar DateTime
|
scalar DateTime
|
||||||
|
|
||||||
input TimeInterval {
|
input TimeInterval @oneOf {
|
||||||
"""
|
timedelta: TimeDeltaGQL
|
||||||
A second is the base unit and cannot be subdivided
|
aligned: AlignedIntervalEnum
|
||||||
"""
|
}
|
||||||
seconds: Int = 0
|
|
||||||
minutes: Int = 0
|
input TimeDeltaGQL {
|
||||||
hours: Int = 0
|
|
||||||
days: Int = 0
|
days: Int = 0
|
||||||
weeks: Int = 0
|
weeks: Int = 0
|
||||||
months: Int = 0
|
months: Int = 0
|
||||||
|
|
||||||
"""
|
|
||||||
Assumes a year is 365 days long
|
|
||||||
"""
|
|
||||||
years: Int = 0
|
years: Int = 0
|
||||||
|
}
|
||||||
|
|
||||||
"""
|
enum AlignedIntervalEnum {
|
||||||
True eg 1/15-3/15 => [(1/15,1/31), (2/1,2/28), (3/1,3/15)] False eg 1/15-2/15 => [(1/15,2/14), (2/14,3/15)]
|
MONTH
|
||||||
"""
|
YEAR
|
||||||
calendarAlignedMonths: Boolean! = true
|
WEEK
|
||||||
|
DAY
|
||||||
}
|
}
|
||||||
|
|
||||||
input FilterInput @oneOf {
|
input FilterInput @oneOf {
|
||||||
@@ -142,6 +141,7 @@ input FilterInput @oneOf {
|
|||||||
shotDirection: [ShotDirectionEnum!]
|
shotDirection: [ShotDirectionEnum!]
|
||||||
videoId: [Int!]
|
videoId: [Int!]
|
||||||
userId: [Int!]
|
userId: [Int!]
|
||||||
|
username: [String!]
|
||||||
make: [Boolean!]
|
make: [Boolean!]
|
||||||
tags: [VideoTagInput!]
|
tags: [VideoTagInput!]
|
||||||
annotations: [ShotAnnotationInput!]
|
annotations: [ShotAnnotationInput!]
|
||||||
@@ -164,6 +164,7 @@ input FilterInput @oneOf {
|
|||||||
targetPocketAngleDirection: [ShotDirectionEnum!]
|
targetPocketAngleDirection: [ShotDirectionEnum!]
|
||||||
targetPocketAngle: FloatRangeFilter
|
targetPocketAngle: FloatRangeFilter
|
||||||
missAngleInDegrees: FloatRangeFilter
|
missAngleInDegrees: FloatRangeFilter
|
||||||
|
marginOfErrorInDegrees: FloatRangeFilter
|
||||||
createdAt: DateRangeFilter
|
createdAt: DateRangeFilter
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -248,6 +249,7 @@ type MakePercentageIntervalGQL {
|
|||||||
type GetShotsResult {
|
type GetShotsResult {
|
||||||
shots: [ShotGQL!]!
|
shots: [ShotGQL!]!
|
||||||
count: Int
|
count: Int
|
||||||
|
ids: [Int!]!
|
||||||
}
|
}
|
||||||
|
|
||||||
type ShotGQL {
|
type ShotGQL {
|
||||||
@@ -283,6 +285,7 @@ type PocketingIntentionFeaturesGQL {
|
|||||||
difficulty: Float
|
difficulty: Float
|
||||||
targetPocketAngle: Float
|
targetPocketAngle: Float
|
||||||
targetPocketAngleDirection: ShotDirectionEnum
|
targetPocketAngleDirection: ShotDirectionEnum
|
||||||
|
marginOfErrorInDegrees: Float
|
||||||
backcut: Boolean
|
backcut: Boolean
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -542,6 +545,10 @@ type Mutation {
|
|||||||
annotationName: String!
|
annotationName: String!
|
||||||
notes: String = null
|
notes: String = null
|
||||||
): AddShotAnnotationReturn!
|
): AddShotAnnotationReturn!
|
||||||
|
updateShotAnnotations(
|
||||||
|
shotId: Int!
|
||||||
|
annotations: [UpdateAnnotationInputGQL!]!
|
||||||
|
): UpdateShotAnnotationReturn!
|
||||||
getProfileImageUploadLink(
|
getProfileImageUploadLink(
|
||||||
fileExt: String = ".png"
|
fileExt: String = ".png"
|
||||||
): GetProfileUploadLinkReturn!
|
): GetProfileUploadLinkReturn!
|
||||||
@@ -595,6 +602,27 @@ type OtherErrorNeedsNote {
|
|||||||
msg: String
|
msg: String
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type UpdateShotAnnotationReturn {
|
||||||
|
value: SuccessfulUpdateUpdateShotAnnotationErrors!
|
||||||
|
}
|
||||||
|
|
||||||
|
union SuccessfulUpdateUpdateShotAnnotationErrors =
|
||||||
|
SuccessfulUpdate
|
||||||
|
| UpdateShotAnnotationErrors
|
||||||
|
|
||||||
|
type SuccessfulUpdate {
|
||||||
|
value: Boolean!
|
||||||
|
}
|
||||||
|
|
||||||
|
type UpdateShotAnnotationErrors {
|
||||||
|
error: DoesNotOwnShotErr
|
||||||
|
}
|
||||||
|
|
||||||
|
input UpdateAnnotationInputGQL {
|
||||||
|
name: String!
|
||||||
|
notes: String = null
|
||||||
|
}
|
||||||
|
|
||||||
type GetProfileUploadLinkReturn {
|
type GetProfileUploadLinkReturn {
|
||||||
value: UploadLinkGetProfileUploadLinkErrors!
|
value: UploadLinkGetProfileUploadLinkErrors!
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user