Compare commits

...

28 Commits

Author SHA1 Message Date
0999c88797 added resolution
All checks were successful
Tests / Tests (pull_request) Successful in 15s
2024-07-18 20:10:23 -07:00
d3559ede21 Merge pull request 'Add frames_per_second' (#21) from loewy/add-fps into master
Reviewed-on: #21
Reviewed-by: countablecloud <countablecloud@gmail.com>
2024-07-18 17:51:30 -06:00
ef6ccca3f9 fix black issue
All checks were successful
Tests / Tests (pull_request) Successful in 14s
2024-07-18 16:46:27 -07:00
f781e9648f add pycache to gitignore
Some checks failed
Tests / Tests (pull_request) Failing after 15s
2024-07-18 16:37:59 -07:00
18d2eea029 add shot_pb2 2024-07-18 16:34:22 -07:00
a95bdab8bf ad frames per second to schema 2024-07-18 16:14:28 -07:00
eaeb1ed0ea Add resolution 2024-07-18 01:14:18 -06:00
f9d6377fe4 Update durations in seconds 2024-07-16 21:48:15 -06:00
30cf72de78 Merge pull request 'Add initPlaylistUploadStatus' (#20) from loewy/update-video-gql-operations into master
Reviewed-on: #20
2024-07-16 20:24:58 -06:00
fd49dec34c add initPlaylistUploadStatus
All checks were successful
Tests / Tests (pull_request) Successful in 8s
2024-07-16 19:23:54 -07:00
cdd1cdd526 Fix segment parameter again 2024-07-16 20:22:16 -06:00
bce363e8ff Parameter to setSegmentDuration should be segmentIndex 2024-07-16 20:20:37 -06:00
80f609b8a2 Merge pull request 'Add operation for set segment duration' (#19) from loewy/set-segment-duration-operation into master
Reviewed-on: #19
Reviewed-by: Ivan Malison <ivanmalison@gmail.com>
2024-07-16 17:54:19 -06:00
6205e9a353 add operation for set segment duration
All checks were successful
Tests / Tests (pull_request) Successful in 15s
2024-07-16 16:33:22 -07:00
12f7e1f115 Merge pull request 'Add operation getHlsInitUploadLink' (#18) from loewy/operation-get-hls-init-upload-link into master
Reviewed-on: #18
2024-07-16 15:28:43 -06:00
296ad969f4 Merge branch 'master' into loewy/operation-get-hls-init-upload-link
All checks were successful
Tests / Tests (pull_request) Successful in 9s
2024-07-16 15:27:37 -06:00
d25c08447e Merge pull request 'Adds init playlist status' (#17) from mk/add-init-file-uploaded-marking into master
Reviewed-on: #17
Reviewed-by: Ivan Malison <ivanmalison@gmail.com>
2024-07-16 15:26:27 -06:00
7502a75753 Merge remote-tracking branch 'origin' into mk/add-init-file-uploaded-marking
All checks were successful
Tests / Tests (pull_request) Successful in 7s
2024-07-16 14:23:32 -07:00
1a14db1a17 Adds init playlist status
All checks were successful
Tests / Tests (pull_request) Successful in 14s
2024-07-16 14:21:45 -07:00
67d8bcac21 add operation for hls init link
All checks were successful
Tests / Tests (pull_request) Successful in 14s
2024-07-15 17:29:55 -07:00
4ca27317b4 Add operation for shot annotation types 2024-07-15 15:37:43 -06:00
dc214e878f Add annotations to shot gql 2024-07-15 15:32:21 -06:00
d669dba320 Add getUsernames operation 2024-07-14 00:16:02 -06:00
235f4a58e9 Add getUsernames 2024-07-13 23:43:18 -06:00
03c1d08d8c Request isAdmin in getLoggedInUser 2024-07-13 17:47:41 -06:00
cc36a8b51d Add isAdmin 2024-07-13 17:40:30 -06:00
d743ad83e3 Merge pull request 'Expand GQL Interfaces To Accomodate Multiple Stream Types' (#16) from mk/extend-to-additional-stream-types into master
Reviewed-on: #16
2024-07-12 22:08:57 -06:00
194c258dcd Expand GQL Interfaces To Accomodate Multiple Stream Types
All checks were successful
Tests / Tests (pull_request) Successful in 15s
2024-07-12 18:50:50 -06:00
7 changed files with 453 additions and 2 deletions

1
.gitignore vendored
View File

@@ -3,3 +3,4 @@ dist
.direnv
/after.txt
/before.txt
**/__pycache__/**

View File

@@ -833,6 +833,12 @@ export type HomographyInfoGql = {
sourcePoints: PocketPointsGql;
};
export enum InitPlaylistUploadStatusEnum {
NotApplicable = "NOT_APPLICABLE",
NotUploaded = "NOT_UPLOADED",
Uploaded = "UPLOADED",
}
export type IntPoint2D = {
__typename?: "IntPoint2D";
x: Scalars["Int"]["output"];
@@ -852,9 +858,11 @@ export type Mutation = {
deleteVideo: Scalars["Boolean"]["output"];
editProfileImageUri: UserGql;
editUploadStream: Scalars["Boolean"]["output"];
getHlsInitUploadLink: GetUploadLinkReturn;
getProfileImageUploadLink: GetUploadLinkReturn;
getUploadLink: GetUploadLinkReturn;
setLoggerLevel: Scalars["Boolean"]["output"];
setSegmentDuration: Scalars["Boolean"]["output"];
};
export type MutationCreateBucketSetArgs = {
@@ -878,6 +886,10 @@ export type MutationEditUploadStreamArgs = {
videoMetadata: VideoMetadataInput;
};
export type MutationGetHlsInitUploadLinkArgs = {
videoId: Scalars["Int"]["input"];
};
export type MutationGetProfileImageUploadLinkArgs = {
fileExt?: InputMaybe<Scalars["String"]["input"]>;
};
@@ -892,6 +904,12 @@ export type MutationSetLoggerLevelArgs = {
path: Scalars["String"]["input"];
};
export type MutationSetSegmentDurationArgs = {
duration: Scalars["Float"]["input"];
segmentIndex: Scalars["Int"]["input"];
videoId: Scalars["Int"]["input"];
};
export type PageInfoGql = {
__typename?: "PageInfoGQL";
endCursor?: Maybe<Scalars["String"]["output"]>;
@@ -932,6 +950,7 @@ export type Query = {
getShots: Array<ShotGql>;
getUser?: Maybe<UserGql>;
getUserVideos: VideoHistoryGql;
getUsernames: Array<Scalars["String"]["output"]>;
getVideo: VideoGql;
getVideoMakePercentageIntervals: Array<MakePercentageIntervalGql>;
getVideos: Array<VideoGql>;
@@ -964,6 +983,12 @@ export type QueryGetUserVideosArgs = {
userId?: InputMaybe<Scalars["Int"]["input"]>;
};
export type QueryGetUsernamesArgs = {
after?: InputMaybe<Scalars["String"]["input"]>;
limit?: InputMaybe<Scalars["Int"]["input"]>;
matchString?: InputMaybe<Scalars["String"]["input"]>;
};
export type QueryGetVideoArgs = {
videoId: Scalars["Int"]["input"];
};
@@ -987,6 +1012,16 @@ export type SerializedShotPathsGql = {
b64EncodedBuffer?: Maybe<Scalars["String"]["output"]>;
};
export type ShotAnnotationGql = {
__typename?: "ShotAnnotationGQL";
createdAt?: Maybe<Scalars["DateTime"]["output"]>;
creator: UserGql;
notes: Scalars["String"]["output"];
shotId: Scalars["Int"]["output"];
type: ShotAnnotationTypeGql;
updatedAt?: Maybe<Scalars["DateTime"]["output"]>;
};
export type ShotAnnotationInput = {
name: Scalars["String"]["input"];
};
@@ -1005,6 +1040,7 @@ export enum ShotDirectionEnum {
export type ShotGql = {
__typename?: "ShotGQL";
annotations: Array<ShotAnnotationGql>;
bankFeatures?: Maybe<BankFeaturesGql>;
createdAt?: Maybe<Scalars["DateTime"]["output"]>;
cueObjectFeatures?: Maybe<CueObjectFeaturesGql>;
@@ -1023,6 +1059,11 @@ export type StreamErrorGql = {
message: Scalars["String"]["output"];
};
export enum StreamSegmentTypeEnum {
FragmentedMp4 = "FRAGMENTED_MP4",
RbChunkedMp4 = "RB_CHUNKED_MP4",
}
export type TargetMetricsGql = {
__typename?: "TargetMetricsGQL";
averageDifficulty?: Maybe<Scalars["Float"]["output"]>;
@@ -1032,7 +1073,7 @@ export type TargetMetricsGql = {
export type UploadSegmentGql = {
__typename?: "UploadSegmentGQL";
durationsInSeconds?: Maybe<Scalars["Float"]["output"]>;
durationInSeconds?: Maybe<Scalars["Float"]["output"]>;
endFrameIndex?: Maybe<Scalars["Int"]["output"]>;
framesPerSecond?: Maybe<Scalars["Float"]["output"]>;
linksRequested: Scalars["Int"]["output"];
@@ -1046,6 +1087,7 @@ export type UploadStreamGql = {
createdAt: Scalars["DateTime"]["output"];
errors: Array<StreamErrorGql>;
id: Scalars["ID"]["output"];
initPlaylistUploadStatus?: Maybe<InitPlaylistUploadStatusEnum>;
isCompleted: Scalars["Boolean"]["output"];
lastIntendedSegmentBound?: Maybe<Scalars["Int"]["output"]>;
linksRequested: Scalars["Int"]["output"];
@@ -1075,6 +1117,7 @@ export type UserGql = {
createdAt?: Maybe<Scalars["DateTime"]["output"]>;
firebaseUid: Scalars["String"]["output"];
id: Scalars["Int"]["output"];
isAdmin: Scalars["Boolean"]["output"];
profileImageUri?: Maybe<Scalars["String"]["output"]>;
updatedAt?: Maybe<Scalars["DateTime"]["output"]>;
username: Scalars["String"]["output"];
@@ -1124,9 +1167,12 @@ export type VideoHistoryGql = {
export type VideoMetadataInput = {
endStream?: Scalars["Boolean"]["input"];
endTime?: InputMaybe<Scalars["DateTime"]["input"]>;
framesPerSecond?: InputMaybe<Scalars["Float"]["input"]>;
gameType?: InputMaybe<Scalars["String"]["input"]>;
lastIntendedSegmentBound?: InputMaybe<Scalars["Int"]["input"]>;
resolution: VideoResolution;
startTime?: InputMaybe<Scalars["DateTime"]["input"]>;
streamSegmentType?: InputMaybe<StreamSegmentTypeEnum>;
tableSize?: InputMaybe<Scalars["String"]["input"]>;
uploadStreamMetadataInput?: InputMaybe<UploadStreamMetadataInput>;
videoName?: InputMaybe<Scalars["String"]["input"]>;
@@ -1144,6 +1190,11 @@ export type VideoProcessingGql = {
errors: Array<VideoProcessingErrorGql>;
};
export type VideoResolution = {
height: Scalars["Int"]["input"];
width: Scalars["Int"]["input"];
};
export type VideoTag = {
__typename?: "VideoTag";
name: Scalars["String"]["output"];
@@ -1298,6 +1349,19 @@ export type GetShotsQuery = {
}>;
};
export type GetShotAnnotationTypesQueryVariables = Exact<{
[key: string]: never;
}>;
export type GetShotAnnotationTypesQuery = {
__typename?: "Query";
getShotAnnotationTypes: Array<{
__typename?: "ShotAnnotationTypeGQL";
id: number;
name: string;
}>;
};
export type GetProfileImageUploadLinkMutationVariables = Exact<{
fileExt?: InputMaybe<Scalars["String"]["input"]>;
}>;
@@ -1341,6 +1405,7 @@ export type GetLoggedInUserQuery = {
id: number;
firebaseUid: string;
username: string;
isAdmin: boolean;
profileImageUri?: string | null;
activeVideoId?: number | null;
createdAt?: any | null;
@@ -1357,6 +1422,17 @@ export type GetUserPlayTimeQuery = {
getPlayTime: { __typename?: "UserPlayTimeGQL"; totalSeconds: number };
};
export type GetUsernamesQueryVariables = Exact<{
matchString: Scalars["String"]["input"];
limit?: InputMaybe<Scalars["Int"]["input"]>;
after?: InputMaybe<Scalars["String"]["input"]>;
}>;
export type GetUsernamesQuery = {
__typename?: "Query";
getUsernames: Array<string>;
};
export type GetStreamMonitoringDetailsQueryVariables = Exact<{
videoId: Scalars["Int"]["input"];
}>;
@@ -1403,6 +1479,7 @@ export type GetStreamMonitoringDetailsQuery = {
isCompleted: boolean;
uploadCompletionCursor: number;
lastIntendedSegmentBound?: number | null;
initPlaylistUploadStatus?: InitPlaylistUploadStatusEnum | null;
} | null;
currentProcessing?: {
__typename?: "VideoProcessingGQL";
@@ -1600,6 +1677,34 @@ export type GetUploadLinkMutation = {
};
};
export type GetHlsInitUploadLinkMutationVariables = Exact<{
videoId: Scalars["Int"]["input"];
}>;
export type GetHlsInitUploadLinkMutation = {
__typename?: "Mutation";
getHlsInitUploadLink: {
__typename?: "GetUploadLinkReturn";
uploadUrl: string;
headers: Array<{
__typename?: "Header";
key: string;
value: string;
} | null>;
};
};
export type SetSegmentDurationMutationVariables = Exact<{
videoId: Scalars["Int"]["input"];
segmentIndex: Scalars["Int"]["input"];
duration: Scalars["Float"]["input"];
}>;
export type SetSegmentDurationMutation = {
__typename?: "Mutation";
setSegmentDuration: boolean;
};
export type EditUploadStreamMutationVariables = Exact<{
videoId: Scalars["Int"]["input"];
videoMetadataInput: VideoMetadataInput;
@@ -2108,6 +2213,79 @@ export type GetShotsQueryResult = Apollo.QueryResult<
GetShotsQuery,
GetShotsQueryVariables
>;
export const GetShotAnnotationTypesDocument = gql`
query GetShotAnnotationTypes {
getShotAnnotationTypes {
id
name
}
}
`;
/**
* __useGetShotAnnotationTypesQuery__
*
* To run a query within a React component, call `useGetShotAnnotationTypesQuery` and pass it any options that fit your needs.
* When your component renders, `useGetShotAnnotationTypesQuery` returns an object from Apollo Client that contains loading, error, and data properties
* you can use to render your UI.
*
* @param baseOptions options that will be passed into the query, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options;
*
* @example
* const { data, loading, error } = useGetShotAnnotationTypesQuery({
* variables: {
* },
* });
*/
export function useGetShotAnnotationTypesQuery(
baseOptions?: Apollo.QueryHookOptions<
GetShotAnnotationTypesQuery,
GetShotAnnotationTypesQueryVariables
>,
) {
const options = { ...defaultOptions, ...baseOptions };
return Apollo.useQuery<
GetShotAnnotationTypesQuery,
GetShotAnnotationTypesQueryVariables
>(GetShotAnnotationTypesDocument, options);
}
export function useGetShotAnnotationTypesLazyQuery(
baseOptions?: Apollo.LazyQueryHookOptions<
GetShotAnnotationTypesQuery,
GetShotAnnotationTypesQueryVariables
>,
) {
const options = { ...defaultOptions, ...baseOptions };
return Apollo.useLazyQuery<
GetShotAnnotationTypesQuery,
GetShotAnnotationTypesQueryVariables
>(GetShotAnnotationTypesDocument, options);
}
export function useGetShotAnnotationTypesSuspenseQuery(
baseOptions?: Apollo.SuspenseQueryHookOptions<
GetShotAnnotationTypesQuery,
GetShotAnnotationTypesQueryVariables
>,
) {
const options = { ...defaultOptions, ...baseOptions };
return Apollo.useSuspenseQuery<
GetShotAnnotationTypesQuery,
GetShotAnnotationTypesQueryVariables
>(GetShotAnnotationTypesDocument, options);
}
export type GetShotAnnotationTypesQueryHookResult = ReturnType<
typeof useGetShotAnnotationTypesQuery
>;
export type GetShotAnnotationTypesLazyQueryHookResult = ReturnType<
typeof useGetShotAnnotationTypesLazyQuery
>;
export type GetShotAnnotationTypesSuspenseQueryHookResult = ReturnType<
typeof useGetShotAnnotationTypesSuspenseQuery
>;
export type GetShotAnnotationTypesQueryResult = Apollo.QueryResult<
GetShotAnnotationTypesQuery,
GetShotAnnotationTypesQueryVariables
>;
export const GetProfileImageUploadLinkDocument = gql`
mutation getProfileImageUploadLink($fileExt: String = ".png") {
getProfileImageUploadLink(fileExt: $fileExt) {
@@ -2224,6 +2402,7 @@ export const GetLoggedInUserDocument = gql`
id
firebaseUid
username
isAdmin
profileImageUri
activeVideoId
createdAt
@@ -2369,6 +2548,83 @@ export type GetUserPlayTimeQueryResult = Apollo.QueryResult<
GetUserPlayTimeQuery,
GetUserPlayTimeQueryVariables
>;
export const GetUsernamesDocument = gql`
query getUsernames(
$matchString: String!
$limit: Int = null
$after: String = null
) {
getUsernames(matchString: $matchString, limit: $limit, after: $after)
}
`;
/**
* __useGetUsernamesQuery__
*
* To run a query within a React component, call `useGetUsernamesQuery` and pass it any options that fit your needs.
* When your component renders, `useGetUsernamesQuery` returns an object from Apollo Client that contains loading, error, and data properties
* you can use to render your UI.
*
* @param baseOptions options that will be passed into the query, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options;
*
* @example
* const { data, loading, error } = useGetUsernamesQuery({
* variables: {
* matchString: // value for 'matchString'
* limit: // value for 'limit'
* after: // value for 'after'
* },
* });
*/
export function useGetUsernamesQuery(
baseOptions: Apollo.QueryHookOptions<
GetUsernamesQuery,
GetUsernamesQueryVariables
>,
) {
const options = { ...defaultOptions, ...baseOptions };
return Apollo.useQuery<GetUsernamesQuery, GetUsernamesQueryVariables>(
GetUsernamesDocument,
options,
);
}
export function useGetUsernamesLazyQuery(
baseOptions?: Apollo.LazyQueryHookOptions<
GetUsernamesQuery,
GetUsernamesQueryVariables
>,
) {
const options = { ...defaultOptions, ...baseOptions };
return Apollo.useLazyQuery<GetUsernamesQuery, GetUsernamesQueryVariables>(
GetUsernamesDocument,
options,
);
}
export function useGetUsernamesSuspenseQuery(
baseOptions?: Apollo.SuspenseQueryHookOptions<
GetUsernamesQuery,
GetUsernamesQueryVariables
>,
) {
const options = { ...defaultOptions, ...baseOptions };
return Apollo.useSuspenseQuery<GetUsernamesQuery, GetUsernamesQueryVariables>(
GetUsernamesDocument,
options,
);
}
export type GetUsernamesQueryHookResult = ReturnType<
typeof useGetUsernamesQuery
>;
export type GetUsernamesLazyQueryHookResult = ReturnType<
typeof useGetUsernamesLazyQuery
>;
export type GetUsernamesSuspenseQueryHookResult = ReturnType<
typeof useGetUsernamesSuspenseQuery
>;
export type GetUsernamesQueryResult = Apollo.QueryResult<
GetUsernamesQuery,
GetUsernamesQueryVariables
>;
export const GetStreamMonitoringDetailsDocument = gql`
query GetStreamMonitoringDetails($videoId: Int!) {
getVideo(videoId: $videoId) {
@@ -2423,6 +2679,7 @@ export const GetStreamMonitoringDetailsDocument = gql`
isCompleted
uploadCompletionCursor
lastIntendedSegmentBound
initPlaylistUploadStatus
}
currentProcessing {
errors {
@@ -3214,6 +3471,118 @@ export type GetUploadLinkMutationOptions = Apollo.BaseMutationOptions<
GetUploadLinkMutation,
GetUploadLinkMutationVariables
>;
export const GetHlsInitUploadLinkDocument = gql`
mutation GetHlsInitUploadLink($videoId: Int!) {
getHlsInitUploadLink(videoId: $videoId) {
uploadUrl
headers {
key
value
}
}
}
`;
export type GetHlsInitUploadLinkMutationFn = Apollo.MutationFunction<
GetHlsInitUploadLinkMutation,
GetHlsInitUploadLinkMutationVariables
>;
/**
* __useGetHlsInitUploadLinkMutation__
*
* To run a mutation, you first call `useGetHlsInitUploadLinkMutation` within a React component and pass it any options that fit your needs.
* When your component renders, `useGetHlsInitUploadLinkMutation` returns a tuple that includes:
* - A mutate function that you can call at any time to execute the mutation
* - An object with fields that represent the current status of the mutation's execution
*
* @param baseOptions options that will be passed into the mutation, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options-2;
*
* @example
* const [getHlsInitUploadLinkMutation, { data, loading, error }] = useGetHlsInitUploadLinkMutation({
* variables: {
* videoId: // value for 'videoId'
* },
* });
*/
export function useGetHlsInitUploadLinkMutation(
baseOptions?: Apollo.MutationHookOptions<
GetHlsInitUploadLinkMutation,
GetHlsInitUploadLinkMutationVariables
>,
) {
const options = { ...defaultOptions, ...baseOptions };
return Apollo.useMutation<
GetHlsInitUploadLinkMutation,
GetHlsInitUploadLinkMutationVariables
>(GetHlsInitUploadLinkDocument, options);
}
export type GetHlsInitUploadLinkMutationHookResult = ReturnType<
typeof useGetHlsInitUploadLinkMutation
>;
export type GetHlsInitUploadLinkMutationResult =
Apollo.MutationResult<GetHlsInitUploadLinkMutation>;
export type GetHlsInitUploadLinkMutationOptions = Apollo.BaseMutationOptions<
GetHlsInitUploadLinkMutation,
GetHlsInitUploadLinkMutationVariables
>;
export const SetSegmentDurationDocument = gql`
mutation SetSegmentDuration(
$videoId: Int!
$segmentIndex: Int!
$duration: Float!
) {
setSegmentDuration(
videoId: $videoId
segmentIndex: $segmentIndex
duration: $duration
)
}
`;
export type SetSegmentDurationMutationFn = Apollo.MutationFunction<
SetSegmentDurationMutation,
SetSegmentDurationMutationVariables
>;
/**
* __useSetSegmentDurationMutation__
*
* To run a mutation, you first call `useSetSegmentDurationMutation` within a React component and pass it any options that fit your needs.
* When your component renders, `useSetSegmentDurationMutation` returns a tuple that includes:
* - A mutate function that you can call at any time to execute the mutation
* - An object with fields that represent the current status of the mutation's execution
*
* @param baseOptions options that will be passed into the mutation, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options-2;
*
* @example
* const [setSegmentDurationMutation, { data, loading, error }] = useSetSegmentDurationMutation({
* variables: {
* videoId: // value for 'videoId'
* segmentIndex: // value for 'segmentIndex'
* duration: // value for 'duration'
* },
* });
*/
export function useSetSegmentDurationMutation(
baseOptions?: Apollo.MutationHookOptions<
SetSegmentDurationMutation,
SetSegmentDurationMutationVariables
>,
) {
const options = { ...defaultOptions, ...baseOptions };
return Apollo.useMutation<
SetSegmentDurationMutation,
SetSegmentDurationMutationVariables
>(SetSegmentDurationDocument, options);
}
export type SetSegmentDurationMutationHookResult = ReturnType<
typeof useSetSegmentDurationMutation
>;
export type SetSegmentDurationMutationResult =
Apollo.MutationResult<SetSegmentDurationMutation>;
export type SetSegmentDurationMutationOptions = Apollo.BaseMutationOptions<
SetSegmentDurationMutation,
SetSegmentDurationMutationVariables
>;
export const EditUploadStreamDocument = gql`
mutation EditUploadStream(
$videoId: Int!

View File

@@ -36,3 +36,10 @@ query GetShots(
}
}
}
query GetShotAnnotationTypes {
getShotAnnotationTypes {
id
name
}
}

View File

@@ -24,6 +24,7 @@ query getLoggedInUser {
id
firebaseUid
username
isAdmin
profileImageUri
activeVideoId
createdAt
@@ -36,3 +37,11 @@ query GetUserPlayTime($userId: Int!) {
totalSeconds
}
}
query getUsernames(
$matchString: String!
$limit: Int = null
$after: String = null
) {
getUsernames(matchString: $matchString, limit: $limit, after: $after)
}

View File

@@ -51,6 +51,7 @@ query GetStreamMonitoringDetails($videoId: Int!) {
isCompleted
uploadCompletionCursor
lastIntendedSegmentBound
initPlaylistUploadStatus
}
currentProcessing {
errors {

View File

@@ -14,6 +14,28 @@ mutation GetUploadLink($videoId: Int!, $segmentIndex: Int!) {
}
}
mutation GetHlsInitUploadLink($videoId: Int!) {
getHlsInitUploadLink(videoId: $videoId) {
uploadUrl
headers {
key
value
}
}
}
mutation SetSegmentDuration(
$videoId: Int!
$segmentIndex: Int!
$duration: Float!
) {
setSegmentDuration(
videoId: $videoId
segmentIndex: $segmentIndex
duration: $duration
)
}
mutation EditUploadStream(
$videoId: Int!
$videoMetadataInput: VideoMetadataInput!

View File

@@ -12,6 +12,11 @@ type Query {
getShotAnnotationTypes: [ShotAnnotationTypeGQL!]!
getUser(userId: Int!): UserGQL
getLoggedInUser: UserGQL
getUsernames(
matchString: String = null
limit: Int = null
after: String = null
): [String!]!
getPlayTime(userId: Int!): UserPlayTimeGQL!
getUserVideos(
userId: Int = null
@@ -155,6 +160,7 @@ type ShotGQL {
bankFeatures: BankFeaturesGQL
serializedShotPaths: SerializedShotPathsGQL
user: UserGQL
annotations: [ShotAnnotationGQL!]!
}
"""
@@ -195,12 +201,22 @@ type UserGQL {
id: Int!
firebaseUid: String!
username: String!
isAdmin: Boolean!
activeVideoId: Int
profileImageUri: String
createdAt: DateTime
updatedAt: DateTime
}
type ShotAnnotationGQL {
shotId: Int!
type: ShotAnnotationTypeGQL!
creator: UserGQL!
notes: String!
createdAt: DateTime
updatedAt: DateTime
}
type ShotAnnotationTypeGQL {
id: Int!
name: String!
@@ -246,6 +262,7 @@ type UploadStreamGQL {
segmentProcessingCursor: Int!
lastIntendedSegmentBound: Int
isCompleted: Boolean!
initPlaylistUploadStatus: InitPlaylistUploadStatusEnum
lowestUnuploadedSegmentIndex: Int!
uploadCompletionCursor: Int!
errors: [StreamErrorGQL!]!
@@ -254,6 +271,12 @@ type UploadStreamGQL {
segments: [UploadSegmentGQL!]!
}
enum InitPlaylistUploadStatusEnum {
NOT_APPLICABLE
NOT_UPLOADED
UPLOADED
}
type StreamErrorGQL {
message: String!
}
@@ -264,7 +287,7 @@ type UploadSegmentGQL {
valid: Boolean!
endFrameIndex: Int
framesPerSecond: Float
durationsInSeconds: Float
durationInSeconds: Float
linksRequested: Int!
}
@@ -341,6 +364,12 @@ type Mutation {
videoMetadata: VideoMetadataInput!
): CreateUploadStreamReturn!
getUploadLink(videoId: Int!, segmentIndex: Int!): GetUploadLinkReturn!
getHlsInitUploadLink(videoId: Int!): GetUploadLinkReturn!
setSegmentDuration(
videoId: Int!
segmentIndex: Int!
duration: Float!
): Boolean!
editUploadStream(videoId: Int!, videoMetadata: VideoMetadataInput!): Boolean!
deleteVideo(videoId: Int!): Boolean!
}
@@ -366,6 +395,7 @@ type CreateUploadStreamReturn {
}
input VideoMetadataInput {
resolution: VideoResolution!
videoName: String = null
startTime: DateTime = null
endTime: DateTime = null
@@ -373,7 +403,14 @@ input VideoMetadataInput {
tableSize: String = null
uploadStreamMetadataInput: UploadStreamMetadataInput = null
lastIntendedSegmentBound: Int = null
streamSegmentType: StreamSegmentTypeEnum = null
endStream: Boolean! = false
framesPerSecond: Float = null
}
input VideoResolution {
width: Int!
height: Int!
}
input UploadStreamMetadataInput {
@@ -393,3 +430,8 @@ enum DeviceTypeEnum {
ANDROID
BROWSER
}
enum StreamSegmentTypeEnum {
FRAGMENTED_MP4
RB_CHUNKED_MP4
}