From 213af8edc6732612fb5116f6a4d61404aa7f9a10 Mon Sep 17 00:00:00 2001 From: Jackson Harper Date: Mon, 8 Jan 2024 10:58:23 +0800 Subject: [PATCH] Request sync objects for all folders on Android --- .../app/src/main/graphql/UpdatesSince.graphql | 9 +- .../app/src/main/graphql/schema.graphqls | 186 +++++++++++++++++- .../networking/SavedItemUpdatesQuery.kt | 1 + 3 files changed, 190 insertions(+), 6 deletions(-) diff --git a/android/Omnivore/app/src/main/graphql/UpdatesSince.graphql b/android/Omnivore/app/src/main/graphql/UpdatesSince.graphql index aa93b28d5..8a2c29013 100644 --- a/android/Omnivore/app/src/main/graphql/UpdatesSince.graphql +++ b/android/Omnivore/app/src/main/graphql/UpdatesSince.graphql @@ -1,5 +1,10 @@ -query UpdatesSince($after: String, $first: Int, $since: Date!) { - updatesSince(after: $after, first: $first, since: $since) { +query UpdatesSince( + $folder: String + $after: String + $first: Int + $since: Date! +) { + updatesSince(after: $after, first: $first, folder: $folder, since: $since) { ... on UpdatesSinceSuccess { edges { cursor diff --git a/android/Omnivore/app/src/main/graphql/schema.graphqls b/android/Omnivore/app/src/main/graphql/schema.graphqls index 335c93409..5c2431d8a 100644 --- a/android/Omnivore/app/src/main/graphql/schema.graphqls +++ b/android/Omnivore/app/src/main/graphql/schema.graphqls @@ -69,6 +69,7 @@ type Article { contentReader: ContentReader! createdAt: Date! description: String + folder: String! hasContent: Boolean hash: String! highlights(input: ArticleHighlightsInput): [Highlight!]! @@ -154,6 +155,7 @@ union ArticleSavingRequestResult = ArticleSavingRequestError | ArticleSavingRequ enum ArticleSavingRequestStatus { ARCHIVED + CONTENT_NOT_FETCHED DELETED FAILED PROCESSING @@ -203,6 +205,7 @@ enum BulkActionType { ARCHIVE DELETE MARK_AS_READ + MOVE_TO_FOLDER } enum ContentReader { @@ -227,8 +230,12 @@ enum CreateArticleErrorCode { input CreateArticleInput { articleSavingRequestId: ID + folder: String labels: [CreateLabelInput!] preparedDocument: PreparedDocumentInput + publishedAt: Date + rssFeedUrl: String + savedAt: Date skipParsing: Boolean source: String state: ArticleSavingRequestStatus @@ -377,6 +384,12 @@ enum CreateNewsletterEmailErrorCode { UNAUTHORIZED } +input CreateNewsletterEmailInput { + description: String + folder: String + name: String +} + union CreateNewsletterEmailResult = CreateNewsletterEmailError | CreateNewsletterEmailSuccess type CreateNewsletterEmailSuccess { @@ -631,6 +644,20 @@ type DeviceTokensSuccess { deviceTokens: [DeviceToken!]! } +type EmptyTrashError { + errorCodes: [EmptyTrashErrorCode!]! +} + +enum EmptyTrashErrorCode { + UNAUTHORIZED +} + +union EmptyTrashResult = EmptyTrashError | EmptyTrashSuccess + +type EmptyTrashSuccess { + success: Boolean +} + type Feature { createdAt: Date! expiresAt: Date @@ -641,6 +668,19 @@ type Feature { updatedAt: Date } +type Feed { + author: String + createdAt: Date + description: String + id: ID + image: String + publishedAt: Date + title: String! + type: String + updatedAt: Date + url: String! +} + type FeedArticle { annotationsCount: Int article: Article! @@ -674,12 +714,56 @@ type FeedArticlesSuccess { pageInfo: PageInfo! } +type FeedEdge { + cursor: String! + node: Feed! +} + +type FeedsError { + errorCodes: [FeedsErrorCode!]! +} + +enum FeedsErrorCode { + BAD_REQUEST + UNAUTHORIZED +} + +input FeedsInput { + after: String + first: Int + query: String + sort: SortParams +} + +union FeedsResult = FeedsError | FeedsSuccess + +type FeedsSuccess { + edges: [FeedEdge!]! + pageInfo: PageInfo! +} + +type FetchContentError { + errorCodes: [FetchContentErrorCode!]! +} + +enum FetchContentErrorCode { + BAD_REQUEST + UNAUTHORIZED +} + +union FetchContentResult = FetchContentError | FetchContentSuccess + +type FetchContentSuccess { + success: Boolean! +} + type Filter { - category: String! + category: String createdAt: Date! defaultFilter: Boolean description: String filter: String! + folder: String id: ID! name: String! position: Int! @@ -901,6 +985,8 @@ type IntegrationsSuccess { integrations: [Integration!]! } +scalar JSON + type JoinGroupError { errorCodes: [JoinGroupErrorCode!]! } @@ -925,6 +1011,7 @@ type Label { internal: Boolean name: String! position: Int + source: String } type LabelsError { @@ -1107,15 +1194,31 @@ type MoveLabelSuccess { label: Label! } +type MoveToFolderError { + errorCodes: [MoveToFolderErrorCode!]! +} + +enum MoveToFolderErrorCode { + ALREADY_EXISTS + BAD_REQUEST + UNAUTHORIZED +} + +union MoveToFolderResult = MoveToFolderError | MoveToFolderSuccess + +type MoveToFolderSuccess { + success: Boolean! +} + type Mutation { addPopularRead(name: String!): AddPopularReadResult! - bulkAction(action: BulkActionType!, async: Boolean, expectedCount: Int, labelIds: [ID!], query: String!): BulkActionResult! + bulkAction(action: BulkActionType!, arguments: JSON, async: Boolean, expectedCount: Int, labelIds: [ID!], query: String!): BulkActionResult! createArticle(input: CreateArticleInput!): CreateArticleResult! createArticleSavingRequest(input: CreateArticleSavingRequestInput!): CreateArticleSavingRequestResult! createGroup(input: CreateGroupInput!): CreateGroupResult! createHighlight(input: CreateHighlightInput!): CreateHighlightResult! createLabel(input: CreateLabelInput!): CreateLabelResult! - createNewsletterEmail: CreateNewsletterEmailResult! + createNewsletterEmail(input: CreateNewsletterEmailInput): CreateNewsletterEmailResult! deleteAccount(userID: ID!): DeleteAccountResult! deleteFilter(id: ID!): DeleteFilterResult! deleteHighlight(highlightId: ID!): DeleteHighlightResult! @@ -1124,6 +1227,8 @@ type Mutation { deleteNewsletterEmail(newsletterEmailId: ID!): DeleteNewsletterEmailResult! deleteRule(id: ID!): DeleteRuleResult! deleteWebhook(id: ID!): DeleteWebhookResult! + emptyTrash: EmptyTrashResult! + fetchContent(id: ID!): FetchContentResult! generateApiKey(input: GenerateApiKeyInput!): GenerateApiKeyResult! googleLogin(input: GoogleLoginInput!): LoginResult! googleSignup(input: GoogleSignupInput!): GoogleSignupResult! @@ -1135,6 +1240,7 @@ type Mutation { mergeHighlight(input: MergeHighlightInput!): MergeHighlightResult! moveFilter(input: MoveFilterInput!): MoveFilterResult! moveLabel(input: MoveLabelInput!): MoveLabelResult! + moveToFolder(folder: String!, id: ID!): MoveToFolderResult! optInFeature(input: OptInFeatureInput!): OptInFeatureResult! recommend(input: RecommendInput!): RecommendResult! recommendHighlights(input: RecommendHighlightsInput!): RecommendHighlightsResult! @@ -1161,6 +1267,7 @@ type Mutation { updateFilter(input: UpdateFilterInput!): UpdateFilterResult! updateHighlight(input: UpdateHighlightInput!): UpdateHighlightResult! updateLabel(input: UpdateLabelInput!): UpdateLabelResult! + updateNewsletterEmail(input: UpdateNewsletterEmailInput!): UpdateNewsletterEmailResult! updatePage(input: UpdatePageInput!): UpdatePageResult! updateSubscription(input: UpdateSubscriptionInput!): UpdateSubscriptionResult! updateUser(input: UpdateUserInput!): UpdateUserResult! @@ -1173,7 +1280,10 @@ type NewsletterEmail { address: String! confirmationCode: String createdAt: Date! + description: String + folder: String! id: ID! + name: String subscriptionCount: Int! } @@ -1292,6 +1402,7 @@ type Query { article(format: String, slug: String!, username: String!): ArticleResult! articleSavingRequest(id: ID, url: String): ArticleSavingRequestResult! deviceTokens: DeviceTokensResult! + feeds(input: FeedsInput!): FeedsResult! filters: FiltersResult! getUserPersonalization: GetUserPersonalizationResult! groups: GroupsResult! @@ -1303,11 +1414,12 @@ type Query { recentEmails: RecentEmailsResult! recentSearches: RecentSearchesResult! rules(enabled: Boolean): RulesResult! + scanFeeds(input: ScanFeedsInput!): ScanFeedsResult! search(after: String, first: Int, format: String, includeContent: Boolean, query: String): SearchResult! sendInstallInstructions: SendInstallInstructionsResult! subscriptions(sort: SortParams, type: SubscriptionType): SubscriptionsResult! typeaheadSearch(first: Int, query: String!): TypeaheadSearchResult! - updatesSince(after: String, first: Int, since: Date!, sort: SortParams): UpdatesSinceResult! + updatesSince(after: String, first: Int, folder: String, since: Date!, sort: SortParams): UpdatesSinceResult! user(userId: ID, username: String): UserResult! users: UsersResult! validateUsername(username: String!): Boolean! @@ -1604,6 +1716,7 @@ enum SaveErrorCode { input SaveFileInput { clientRequestId: ID! + folder: String labels: [CreateLabelInput!] source: String! state: ArticleSavingRequestStatus @@ -1625,6 +1738,7 @@ input SaveFilterInput { category: String description: String filter: String! + folder: String name: String! position: Int } @@ -1637,6 +1751,7 @@ type SaveFilterSuccess { input SavePageInput { clientRequestId: ID! + folder: String labels: [CreateLabelInput!] originalContent: String! parseResult: ParseResult @@ -1658,6 +1773,7 @@ type SaveSuccess { input SaveUrlInput { clientRequestId: ID! + folder: String labels: [CreateLabelInput!] locale: String publishedAt: Date @@ -1668,6 +1784,25 @@ input SaveUrlInput { url: String! } +type ScanFeedsError { + errorCodes: [ScanFeedsErrorCode!]! +} + +enum ScanFeedsErrorCode { + BAD_REQUEST +} + +input ScanFeedsInput { + opml: String + url: String +} + +union ScanFeedsResult = ScanFeedsError | ScanFeedsSuccess + +type ScanFeedsSuccess { + feeds: [Feed!]! +} + type SearchError { errorCodes: [SearchErrorCode!]! } @@ -1686,16 +1821,20 @@ type SearchItem { contentReader: ContentReader! createdAt: Date! description: String + folder: String! highlights: [Highlight!] id: ID! image: String isArchived: Boolean! labels: [Label!] language: String + links: JSON originalArticleUrl: String ownedByViewer: Boolean pageId: ID pageType: PageType! + previewContent: String + previewContentType: String publishedAt: Date quote: String readAt: Date @@ -1844,6 +1983,7 @@ input SetIntegrationInput { importItemState: ImportItemState name: String! syncedAt: Date + taskName: String token: String! type: IntegrationType } @@ -1874,6 +2014,7 @@ input SetLabelsInput { labelIds: [ID!] labels: [CreateLabelInput!] pageId: ID! + source: String } union SetLabelsResult = SetLabelsError | SetLabelsSuccess @@ -1963,6 +2104,7 @@ enum SetUserPersonalizationErrorCode { } input SetUserPersonalizationInput { + fields: JSON fontFamily: String fontSize: Int libraryLayoutType: String @@ -2068,6 +2210,10 @@ enum SubscribeErrorCode { } input SubscribeInput { + autoAddToLibrary: Boolean + fetchContent: Boolean + folder: String + isPrivate: Boolean subscriptionType: SubscriptionType url: String! } @@ -2079,11 +2225,15 @@ type SubscribeSuccess { } type Subscription { + autoAddToLibrary: Boolean count: Int! createdAt: Date! description: String + fetchContent: Boolean! + folder: String! icon: String id: ID! + isPrivate: Boolean lastFetchedAt: Date name: String! newsletterEmail: String @@ -2203,6 +2353,7 @@ input UpdateFilterInput { category: String description: String filter: String + folder: String id: String! name: String position: Int @@ -2307,6 +2458,28 @@ type UpdateLinkShareInfoSuccess { message: String! } +type UpdateNewsletterEmailError { + errorCodes: [UpdateNewsletterEmailErrorCode!]! +} + +enum UpdateNewsletterEmailErrorCode { + BAD_REQUEST + UNAUTHORIZED +} + +input UpdateNewsletterEmailInput { + description: String + folder: String + id: ID! + name: String +} + +union UpdateNewsletterEmailResult = UpdateNewsletterEmailError | UpdateNewsletterEmailSuccess + +type UpdateNewsletterEmailSuccess { + newsletterEmail: NewsletterEmail! +} + type UpdatePageError { errorCodes: [UpdatePageErrorCode!]! } @@ -2397,8 +2570,12 @@ enum UpdateSubscriptionErrorCode { } input UpdateSubscriptionInput { + autoAddToLibrary: Boolean description: String + fetchContent: Boolean + folder: String id: ID! + isPrivate: Boolean lastFetchedAt: Date lastFetchedChecksum: String name: String @@ -2557,6 +2734,7 @@ enum UserErrorCode { } type UserPersonalization { + fields: JSON fontFamily: String fontSize: Int id: ID diff --git a/android/Omnivore/app/src/main/java/app/omnivore/omnivore/networking/SavedItemUpdatesQuery.kt b/android/Omnivore/app/src/main/java/app/omnivore/omnivore/networking/SavedItemUpdatesQuery.kt index a50c71ce7..783ff3656 100644 --- a/android/Omnivore/app/src/main/java/app/omnivore/omnivore/networking/SavedItemUpdatesQuery.kt +++ b/android/Omnivore/app/src/main/java/app/omnivore/omnivore/networking/SavedItemUpdatesQuery.kt @@ -20,6 +20,7 @@ suspend fun Networker.savedItemUpdates( try { val result = authenticatedApolloClient().query( UpdatesSinceQuery( + folder = Optional.presentIfNotNull("all"), after = Optional.presentIfNotNull(cursor), first = Optional.presentIfNotNull(limit), since = since