Skip to content
Snippets Groups Projects
Commit b26c12d6 authored by Bruno Muniz's avatar Bruno Muniz :apple:
Browse files

Fix comments on MR

parent 8bc4ea6d
No related branches found
No related tags found
3 merge requests!71Releasing v1.1.5 (214),!69Implemented filtering for banned/blocked users and reporting,!67v1.1.5 b(203)
......@@ -430,7 +430,8 @@ public final class SingleChatController: UIViewController {
drawer.dismiss(animated: true) { [weak self] in
guard let self = self else { return }
self.drawerCancellables.removeAll()
self.didProceedWithReport()
self.viewModel.proceeedWithReport(screenshot: self.takeAppScreenshot())
self.navigationController?.popViewController(animated: true)
}
}.store(in: &drawerCancellables)
......@@ -445,21 +446,38 @@ public final class SingleChatController: UIViewController {
coordinator.toDrawer(drawer, from: self)
}
private func didProceedWithReport() {
var screenshotImage: UIImage?
func takeAppScreenshot() -> UIImage {
let foregroundWindowScene: UIWindowScene? = UIApplication.shared.connectedScenes
.filter { $0.activationState == .foregroundActive }
.compactMap { $0 as? UIWindowScene }
.first
let layer = UIApplication.shared.keyWindow!.layer
guard let foregroundWindowScene = foregroundWindowScene else {
fatalError("[takeAppScreenshot]: Unable to get foreground window scene")
}
let keyWindow: UIWindow?
if #available(iOS 15.0, *) {
keyWindow = foregroundWindowScene.keyWindow
} else {
keyWindow = UIApplication.shared.keyWindow
}
let scale = UIScreen.main.scale
UIGraphicsBeginImageContextWithOptions(layer.frame.size, false, scale);
guard let context = UIGraphicsGetCurrentContext() else { return }
layer.render(in: context)
guard let keyWindow = keyWindow else {
fatalError("[takeAppScreenshot]: Unable to get key window")
}
let rendererFormat = UIGraphicsImageRendererFormat()
rendererFormat.scale = foregroundWindowScene.screen.scale
let renderer = UIGraphicsImageRenderer(
bounds: keyWindow.bounds,
format: rendererFormat
)
if let image = UIGraphicsGetImageFromCurrentImageContext() {
UIGraphicsEndImageContext()
UIImageWriteToSavedPhotosAlbum(image, nil, nil, nil)
viewModel.uploadReport(screenshot: image)
navigationController?.popViewController(animated: true)
return renderer.image { ctx in
keyWindow.layer.render(in: ctx.cgContext)
}
}
......
......@@ -30,7 +30,7 @@ final class GroupChatViewModel {
private let routesSubject = PassthroughSubject<GroupChatNavigationRoutes, Never>()
var messages: AnyPublisher<[ArraySection<ChatSection, Message>], Never> {
session.dbManager.fetchMessagesPublisher(.init(chat: .group(info.group.id)))
session.dbManager.fetchMessagesPublisher(.init(chat: .group(info.group.id), isSenderBanned: false))
.assertNoFailure()
.map { messages -> [ArraySection<ChatSection, Message>] in
let groupedByDate = Dictionary(grouping: messages) { domainModel -> Date in
......
......@@ -222,9 +222,7 @@ final class SingleChatViewModel {
return (contactTitle, message.text)
}
func uploadReport(screenshot: UIImage) {
UIImageWriteToSavedPhotosAlbum(screenshot, nil, nil, nil)
func proceeedWithReport(screenshot: UIImage) {
var contact = contact
contact.isBlocked = true
_ = try? session.dbManager.saveContact(contact)
......
......@@ -50,10 +50,13 @@ final class ChatListViewModel {
}
var searchPublisher: AnyPublisher<SearchSnapshot, Never> {
let contactsQuery = Contact.Query(isBlocked: false, isBanned: false)
let contactsStream = session.dbManager
.fetchContactsPublisher(.init(isBlocked: false, isBanned: false))
.assertNoFailure()
.map { $0.filter { $0.id != self.session.myId }}
return Publishers.CombineLatest3(
session.dbManager.fetchContactsPublisher(contactsQuery).assertNoFailure(),
contactsStream,
chatsPublisher,
searchSubject
.removeDuplicates()
......@@ -137,7 +140,8 @@ final class ChatListViewModel {
groupChatInfoQuery: GroupChatInfo.Query(
authStatus: [.participating],
isLeaderBlocked: false,
isLeaderBanned: false
isLeaderBanned: false,
excludeBannedContactsMessages: true
),
groupQuery: Group.Query(
withMessages: false,
......
......@@ -144,17 +144,22 @@ final class SearchLeftViewModel {
var snapshot = SearchSnapshot()
if var user = user {
if let contact = try? session.dbManager.fetchContacts(.init(id: [user.id], isBlocked: false, isBanned: false)).first {
if let contact = try? session.dbManager.fetchContacts(.init(id: [user.id])).first {
user.authStatus = contact.authStatus
}
if user.authStatus != .friend {
if user.authStatus != .friend, !user.isBanned, !user.isBlocked {
snapshot.appendSections([.stranger])
snapshot.appendItems([.stranger(user)], toSection: .stranger)
}
}
let localsQuery = Contact.Query(text: stateSubject.value.input, authStatus: [.friend])
let localsQuery = Contact.Query(
text: stateSubject.value.input,
authStatus: [.friend],
isBlocked: false,
isBanned: false
)
if let locals = try? session.dbManager.fetchContacts(localsQuery),
let localsWithoutMe = removeMyself(from: locals),
......
......@@ -66,7 +66,7 @@ public final class TermsConditionsController: UIViewController {
let webController = UIViewController()
webController.view.addSubview(webView)
webView.snp.makeConstraints { $0.edges.equalToSuperview() }
webView.load(URLRequest(url: URL(string: "https://xx.network")!))
webView.load(URLRequest(url: URL(string: "https://elixxir.io/eula")!))
present(webController, animated: true)
}.store(in: &cancellables)
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment