Compare commits

...

9 Commits

Author SHA1 Message Date
9abb533be8 Add video processing labels to generated schema
All checks were successful
Tests / Tests (pull_request) Successful in 11s
2026-03-12 01:11:50 -07:00
c76220b65f Merge pull request 'Lightweight Query Operation - getVideoFeedSessionCount' (#223) from loewy/video-feed-session-count-query into master
Reviewed-on: #223
2026-01-30 22:37:59 +00:00
1218ecdaaa Merge branch 'master' into loewy/video-feed-session-count-query
All checks were successful
Tests / Tests (pull_request) Successful in 9s
2026-01-30 22:37:38 +00:00
dfd03a225a Merge pull request 'Include black in flake buildInputs' (#225) from loewy/include-just-black-in-flake-build-inputs into master
Reviewed-on: #225
2026-01-30 22:32:07 +00:00
adbe1c0f2b run black on shot_pb2.pyi
All checks were successful
Tests / Tests (pull_request) Successful in 9s
2026-01-30 14:31:23 -08:00
e1cc8b3ee1 include black in buildInput commands
Some checks failed
Tests / Tests (pull_request) Failing after 11s
2026-01-30 14:26:55 -08:00
c3156bac05 leightweight query to get totalshots
Some checks failed
Tests / Tests (pull_request) Failing after 10s
2026-01-30 13:36:37 -08:00
aba0b16a51 Merge pull request 'feat: Add bucketUrl to DeployedConfig' (#222) from feat/dynamic-bucket-url into master
Reviewed-on: #222
Reviewed-by: loewy <loewymalkov@gmail.com>
2026-01-27 00:51:35 +00:00
dean
82cec7d7cb feat: Add bucketUrl to DeployedConfig
All checks were successful
Tests / Tests (pull_request) Successful in 9s
Add bucketUrl field to schema and query so mobile can get
the bucket URL dynamically from the backend instead of
hardcoding it.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-19 13:06:04 -08:00
6 changed files with 134 additions and 2 deletions

View File

@@ -21,7 +21,7 @@
in in
with pkgs; { with pkgs; {
devShell = mkShell { devShell = mkShell {
buildInputs = [nodejs yarn watchman alejandra nodePackages.prettier just protobuf]; buildInputs = [nodejs yarn watchman alejandra nodePackages.prettier just protobuf black];
}; };
}); });
} }

View File

@@ -102,7 +102,6 @@ class CollisionInfo(_message.Message):
key: _Optional[int] = ..., key: _Optional[int] = ...,
value: _Optional[_Union[Point, _Mapping]] = ..., value: _Optional[_Union[Point, _Mapping]] = ...,
) -> None: ... ) -> None: ...
SOURCE_FIELD_NUMBER: _ClassVar[int] SOURCE_FIELD_NUMBER: _ClassVar[int]
BALL_IDENTIFIERS_FIELD_NUMBER: _ClassVar[int] BALL_IDENTIFIERS_FIELD_NUMBER: _ClassVar[int]
WALL_IDENTIFIER_FIELD_NUMBER: _ClassVar[int] WALL_IDENTIFIER_FIELD_NUMBER: _ClassVar[int]

View File

@@ -273,6 +273,7 @@ export type DeployedConfigGql = {
__typename?: "DeployedConfigGQL"; __typename?: "DeployedConfigGQL";
allowNewUsers: Scalars["Boolean"]["output"]; allowNewUsers: Scalars["Boolean"]["output"];
bannerMessages: Array<BannerGql>; bannerMessages: Array<BannerGql>;
bucketUrl: Scalars["String"]["output"];
defaultAndroidRecordingFormat: StreamSegmentTypeEnum; defaultAndroidRecordingFormat: StreamSegmentTypeEnum;
devMode: Scalars["Boolean"]["output"]; devMode: Scalars["Boolean"]["output"];
environment: Scalars["String"]["output"]; environment: Scalars["String"]["output"];
@@ -3491,6 +3492,8 @@ export type VideoProcessingGql = {
errors: Array<VideoProcessingErrorGql>; errors: Array<VideoProcessingErrorGql>;
framesProcessed?: Maybe<Scalars["Int"]["output"]>; framesProcessed?: Maybe<Scalars["Int"]["output"]>;
id: Scalars["Int"]["output"]; id: Scalars["Int"]["output"];
labels: Array<Scalars["String"]["output"]>;
parentProcessingId?: Maybe<Scalars["Int"]["output"]>;
progressPercentage?: Maybe<Scalars["Float"]["output"]>; progressPercentage?: Maybe<Scalars["Float"]["output"]>;
status: ProcessingStatusEnum; status: ProcessingStatusEnum;
statuses: Array<VideoProcessingStatusGql>; statuses: Array<VideoProcessingStatusGql>;
@@ -3977,6 +3980,7 @@ export type GetDeployedConfigQuery = {
minimumAllowedAppVersion: string; minimumAllowedAppVersion: string;
subscriptionGatingEnabled: boolean; subscriptionGatingEnabled: boolean;
defaultAndroidRecordingFormat: StreamSegmentTypeEnum; defaultAndroidRecordingFormat: StreamSegmentTypeEnum;
bucketUrl: string;
bannerMessages: Array<{ bannerMessages: Array<{
__typename?: "BannerGQL"; __typename?: "BannerGQL";
color: string; color: string;
@@ -4211,6 +4215,21 @@ export type VideoCardFieldsFragment = {
}>; }>;
}; };
export type GetVideoFeedSessionCountQueryVariables = Exact<{
limit?: Scalars["Int"]["input"];
filters?: InputMaybe<VideoFilterInput>;
includePrivate?: InputMaybe<IncludePrivateEnum>;
feedInput?: InputMaybe<VideoFeedInputGql>;
}>;
export type GetVideoFeedSessionCountQuery = {
__typename?: "Query";
getFeedVideos: {
__typename?: "VideoHistoryGQL";
videos: Array<{ __typename?: "VideoGQL"; id: number; totalShots: number }>;
};
};
export type GetVideoFeedQueryVariables = Exact<{ export type GetVideoFeedQueryVariables = Exact<{
limit?: Scalars["Int"]["input"]; limit?: Scalars["Int"]["input"];
after?: InputMaybe<Scalars["String"]["input"]>; after?: InputMaybe<Scalars["String"]["input"]>;
@@ -8219,6 +8238,7 @@ export const GetDeployedConfigDocument = gql`
priority priority
} }
defaultAndroidRecordingFormat defaultAndroidRecordingFormat
bucketUrl
} }
} }
`; `;
@@ -8519,6 +8539,95 @@ export type GetFeedQueryResult = Apollo.QueryResult<
GetFeedQuery, GetFeedQuery,
GetFeedQueryVariables GetFeedQueryVariables
>; >;
export const GetVideoFeedSessionCountDocument = gql`
query GetVideoFeedSessionCount(
$limit: Int! = 100
$filters: VideoFilterInput = null
$includePrivate: IncludePrivateEnum = MINE
$feedInput: VideoFeedInputGQL = null
) {
getFeedVideos(
limit: $limit
filters: $filters
includePrivate: $includePrivate
feedInput: $feedInput
) {
videos {
id
totalShots
}
}
}
`;
/**
* __useGetVideoFeedSessionCountQuery__
*
* To run a query within a React component, call `useGetVideoFeedSessionCountQuery` and pass it any options that fit your needs.
* When your component renders, `useGetVideoFeedSessionCountQuery` 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 } = useGetVideoFeedSessionCountQuery({
* variables: {
* limit: // value for 'limit'
* filters: // value for 'filters'
* includePrivate: // value for 'includePrivate'
* feedInput: // value for 'feedInput'
* },
* });
*/
export function useGetVideoFeedSessionCountQuery(
baseOptions?: Apollo.QueryHookOptions<
GetVideoFeedSessionCountQuery,
GetVideoFeedSessionCountQueryVariables
>,
) {
const options = { ...defaultOptions, ...baseOptions };
return Apollo.useQuery<
GetVideoFeedSessionCountQuery,
GetVideoFeedSessionCountQueryVariables
>(GetVideoFeedSessionCountDocument, options);
}
export function useGetVideoFeedSessionCountLazyQuery(
baseOptions?: Apollo.LazyQueryHookOptions<
GetVideoFeedSessionCountQuery,
GetVideoFeedSessionCountQueryVariables
>,
) {
const options = { ...defaultOptions, ...baseOptions };
return Apollo.useLazyQuery<
GetVideoFeedSessionCountQuery,
GetVideoFeedSessionCountQueryVariables
>(GetVideoFeedSessionCountDocument, options);
}
export function useGetVideoFeedSessionCountSuspenseQuery(
baseOptions?: Apollo.SuspenseQueryHookOptions<
GetVideoFeedSessionCountQuery,
GetVideoFeedSessionCountQueryVariables
>,
) {
const options = { ...defaultOptions, ...baseOptions };
return Apollo.useSuspenseQuery<
GetVideoFeedSessionCountQuery,
GetVideoFeedSessionCountQueryVariables
>(GetVideoFeedSessionCountDocument, options);
}
export type GetVideoFeedSessionCountQueryHookResult = ReturnType<
typeof useGetVideoFeedSessionCountQuery
>;
export type GetVideoFeedSessionCountLazyQueryHookResult = ReturnType<
typeof useGetVideoFeedSessionCountLazyQuery
>;
export type GetVideoFeedSessionCountSuspenseQueryHookResult = ReturnType<
typeof useGetVideoFeedSessionCountSuspenseQuery
>;
export type GetVideoFeedSessionCountQueryResult = Apollo.QueryResult<
GetVideoFeedSessionCountQuery,
GetVideoFeedSessionCountQueryVariables
>;
export const GetVideoFeedDocument = gql` export const GetVideoFeedDocument = gql`
query GetVideoFeed( query GetVideoFeed(
$limit: Int! = 5 $limit: Int! = 5

View File

@@ -15,5 +15,6 @@ query getDeployedConfig {
priority priority
} }
defaultAndroidRecordingFormat defaultAndroidRecordingFormat
bucketUrl
} }
} }

View File

@@ -90,6 +90,26 @@ fragment VideoCardFields on VideoGQL {
} }
} }
# Lightweight version of GetVideoFeed for counting sessions only
query GetVideoFeedSessionCount(
$limit: Int! = 100
$filters: VideoFilterInput = null
$includePrivate: IncludePrivateEnum = MINE
$feedInput: VideoFeedInputGQL = null
) {
getFeedVideos(
limit: $limit
filters: $filters
includePrivate: $includePrivate
feedInput: $feedInput
) {
videos {
id
totalShots
}
}
}
query GetVideoFeed( query GetVideoFeed(
$limit: Int! = 5 $limit: Int! = 5
$after: String = null $after: String = null

View File

@@ -605,6 +605,8 @@ type IntPoint2D {
type VideoProcessingGQL { type VideoProcessingGQL {
id: Int! id: Int!
parentProcessingId: Int
labels: [String!]!
errors: [VideoProcessingErrorGQL!]! errors: [VideoProcessingErrorGQL!]!
status: ProcessingStatusEnum! status: ProcessingStatusEnum!
statuses: [VideoProcessingStatusGQL!]! statuses: [VideoProcessingStatusGQL!]!
@@ -669,6 +671,7 @@ type DeployedConfigGQL {
subscriptionGatingEnabled: Boolean! subscriptionGatingEnabled: Boolean!
bannerMessages: [BannerGQL!]! bannerMessages: [BannerGQL!]!
defaultAndroidRecordingFormat: StreamSegmentTypeEnum! defaultAndroidRecordingFormat: StreamSegmentTypeEnum!
bucketUrl: String!
} }
type BannerGQL { type BannerGQL {