Download (and cache) requested follows (IOS-157)
Thanks to @kimar for pointing this out!
This commit is contained in:
parent
a1315b9006
commit
1a1b2d44a4
|
@ -32,7 +32,7 @@ extension DataSourceFacade {
|
||||||
static func responseToUserFollowRequestAction(
|
static func responseToUserFollowRequestAction(
|
||||||
dependency: NeedsDependency & AuthContextProvider,
|
dependency: NeedsDependency & AuthContextProvider,
|
||||||
notification: ManagedObjectRecord<Notification>,
|
notification: ManagedObjectRecord<Notification>,
|
||||||
query: Mastodon.API.Account.FollowReqeustQuery
|
query: Mastodon.API.Account.FollowRequestQuery
|
||||||
) async throws {
|
) async throws {
|
||||||
let selectionFeedbackGenerator = await UISelectionFeedbackGenerator()
|
let selectionFeedbackGenerator = await UISelectionFeedbackGenerator()
|
||||||
await selectionFeedbackGenerator.selectionChanged()
|
await selectionFeedbackGenerator.selectionChanged()
|
||||||
|
|
|
@ -16,7 +16,7 @@ extension APIService {
|
||||||
|
|
||||||
public func followRequest(
|
public func followRequest(
|
||||||
userID: Mastodon.Entity.Account.ID,
|
userID: Mastodon.Entity.Account.ID,
|
||||||
query: Mastodon.API.Account.FollowReqeustQuery,
|
query: Mastodon.API.Account.FollowRequestQuery,
|
||||||
authenticationBox: MastodonAuthenticationBox
|
authenticationBox: MastodonAuthenticationBox
|
||||||
) async throws -> Mastodon.Response.Content<Mastodon.Entity.Relationship> {
|
) async throws -> Mastodon.Response.Content<Mastodon.Entity.Relationship> {
|
||||||
let response = try await Mastodon.API.Account.followRequest(
|
let response = try await Mastodon.API.Account.followRequest(
|
||||||
|
@ -51,4 +51,17 @@ extension APIService {
|
||||||
return response
|
return response
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public func pendingFollowRequest(
|
||||||
|
userID: Mastodon.Entity.Account.ID,
|
||||||
|
authenticationBox: MastodonAuthenticationBox
|
||||||
|
) async throws -> Mastodon.Response.Content<[Mastodon.Entity.Account]> {
|
||||||
|
let response = try await Mastodon.API.Account.pendingFollowRequest(
|
||||||
|
session: session,
|
||||||
|
domain: authenticationBox.domain,
|
||||||
|
userID: userID,
|
||||||
|
authorization: authenticationBox.userAuthorization
|
||||||
|
).singleOutput()
|
||||||
|
|
||||||
|
return response
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -45,7 +45,12 @@ public final class AuthenticationService: NSObject {
|
||||||
let blockedIds = try await apiService.getBlocked(
|
let blockedIds = try await apiService.getBlocked(
|
||||||
authenticationBox: authBox
|
authenticationBox: authBox
|
||||||
).value.map { $0.id }
|
).value.map { $0.id }
|
||||||
|
|
||||||
|
let followRequestIds = try await apiService.pendingFollowRequest(userID: authBox.userID,
|
||||||
|
authenticationBox: authBox)
|
||||||
|
.value.map { $0.id }
|
||||||
|
|
||||||
|
authBox.inMemoryCache.followRequestedUserIDs = followRequestIds
|
||||||
authBox.inMemoryCache.followingUserIds = followingIds
|
authBox.inMemoryCache.followingUserIds = followingIds
|
||||||
authBox.inMemoryCache.blockedUserIds = blockedIds
|
authBox.inMemoryCache.blockedUserIds = blockedIds
|
||||||
}
|
}
|
||||||
|
|
|
@ -10,6 +10,11 @@ import Combine
|
||||||
|
|
||||||
// MARK: - Account credentials
|
// MARK: - Account credentials
|
||||||
extension Mastodon.API.Account {
|
extension Mastodon.API.Account {
|
||||||
|
|
||||||
|
static func pendingFollowRequestEndpointURL(domain: String) -> URL {
|
||||||
|
return Mastodon.API.endpointURL(domain: domain)
|
||||||
|
.appendingPathComponent("follow_requests")
|
||||||
|
}
|
||||||
|
|
||||||
static func acceptFollowRequestEndpointURL(domain: String, userID: Mastodon.Entity.Account.ID) -> URL {
|
static func acceptFollowRequestEndpointURL(domain: String, userID: Mastodon.Entity.Account.ID) -> URL {
|
||||||
return Mastodon.API.endpointURL(domain: domain)
|
return Mastodon.API.endpointURL(domain: domain)
|
||||||
|
@ -25,7 +30,7 @@ extension Mastodon.API.Account {
|
||||||
.appendingPathComponent("reject")
|
.appendingPathComponent("reject")
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Accept Follow
|
/// Pending Follow Requests
|
||||||
///
|
///
|
||||||
///
|
///
|
||||||
/// - Since: 0.0.0
|
/// - Since: 0.0.0
|
||||||
|
@ -37,6 +42,38 @@ extension Mastodon.API.Account {
|
||||||
/// - domain: Mastodon instance domain. e.g. "example.com"
|
/// - domain: Mastodon instance domain. e.g. "example.com"
|
||||||
/// - userID: ID of the account in the database
|
/// - userID: ID of the account in the database
|
||||||
/// - authorization: User token
|
/// - authorization: User token
|
||||||
|
/// - Returns: `AnyPublisher` contains `[Account]` nested in the response
|
||||||
|
public static func pendingFollowRequest(
|
||||||
|
session: URLSession,
|
||||||
|
domain: String,
|
||||||
|
userID: Mastodon.Entity.Account.ID,
|
||||||
|
authorization: Mastodon.API.OAuth.Authorization
|
||||||
|
) -> AnyPublisher<Mastodon.Response.Content<[Mastodon.Entity.Account]>, Error> {
|
||||||
|
let request = Mastodon.API.get(
|
||||||
|
url: pendingFollowRequestEndpointURL(domain: domain),
|
||||||
|
authorization: authorization
|
||||||
|
)
|
||||||
|
return session.dataTaskPublisher(for: request)
|
||||||
|
.tryMap { data, response in
|
||||||
|
let value = try Mastodon.API.decode(type: [Mastodon.Entity.Account].self, from: data, response: response)
|
||||||
|
return Mastodon.Response.Content(value: value, response: response)
|
||||||
|
}
|
||||||
|
.eraseToAnyPublisher()
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/// Accept Follow
|
||||||
|
///
|
||||||
|
///
|
||||||
|
/// - Since: 0.0.0
|
||||||
|
/// - Version: 3.3.0
|
||||||
|
/// # Reference
|
||||||
|
/// [Document](https://docs.joinmastodon.org/methods/accounts/follow_requests/#allow)
|
||||||
|
/// - Parameters:
|
||||||
|
/// - session: `URLSession`
|
||||||
|
/// - domain: Mastodon instance domain. e.g. "example.com"
|
||||||
|
/// - userID: ID of the account in the database
|
||||||
|
/// - authorization: User token
|
||||||
/// - Returns: `AnyPublisher` contains `Relationship` nested in the response
|
/// - Returns: `AnyPublisher` contains `Relationship` nested in the response
|
||||||
public static func acceptFollowRequest(
|
public static func acceptFollowRequest(
|
||||||
session: URLSession,
|
session: URLSession,
|
||||||
|
@ -63,7 +100,7 @@ extension Mastodon.API.Account {
|
||||||
/// - Since: 0.0.0
|
/// - Since: 0.0.0
|
||||||
/// - Version: 3.3.0
|
/// - Version: 3.3.0
|
||||||
/// # Reference
|
/// # Reference
|
||||||
/// [Document](https://docs.joinmastodon.org/methods/accounts/follow_requests/)
|
/// [Document](https://docs.joinmastodon.org/methods/accounts/follow_requests/#reject)
|
||||||
/// - Parameters:
|
/// - Parameters:
|
||||||
/// - session: `URLSession`
|
/// - session: `URLSession`
|
||||||
/// - domain: Mastodon instance domain. e.g. "example.com"
|
/// - domain: Mastodon instance domain. e.g. "example.com"
|
||||||
|
@ -92,7 +129,7 @@ extension Mastodon.API.Account {
|
||||||
|
|
||||||
extension Mastodon.API.Account {
|
extension Mastodon.API.Account {
|
||||||
|
|
||||||
public enum FollowReqeustQuery {
|
public enum FollowRequestQuery {
|
||||||
case accept
|
case accept
|
||||||
case reject
|
case reject
|
||||||
}
|
}
|
||||||
|
@ -101,7 +138,7 @@ extension Mastodon.API.Account {
|
||||||
session: URLSession,
|
session: URLSession,
|
||||||
domain: String,
|
domain: String,
|
||||||
userID: Mastodon.Entity.Account.ID,
|
userID: Mastodon.Entity.Account.ID,
|
||||||
query: FollowReqeustQuery,
|
query: FollowRequestQuery,
|
||||||
authorization: Mastodon.API.OAuth.Authorization
|
authorization: Mastodon.API.OAuth.Authorization
|
||||||
) -> AnyPublisher<Mastodon.Response.Content<Mastodon.Entity.Relationship>, Error> {
|
) -> AnyPublisher<Mastodon.Response.Content<Mastodon.Entity.Relationship>, Error> {
|
||||||
switch query {
|
switch query {
|
||||||
|
|
Loading…
Reference in New Issue