wip
This commit is contained in:
parent
f8ce451b63
commit
6a4acfb6f3
|
@ -13,6 +13,7 @@
|
||||||
1C8760F8FB99C27D0C3A6ED1 /* RegistrationScreen.swift in Sources */ = {isa = PBXBuildFile; fileRef = 82D4382FFF3D97C4E1D7727C /* RegistrationScreen.swift */; };
|
1C8760F8FB99C27D0C3A6ED1 /* RegistrationScreen.swift in Sources */ = {isa = PBXBuildFile; fileRef = 82D4382FFF3D97C4E1D7727C /* RegistrationScreen.swift */; };
|
||||||
1D3623260D0F684500981E51 /* MonalAppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 1D3623250D0F684500981E51 /* MonalAppDelegate.m */; };
|
1D3623260D0F684500981E51 /* MonalAppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 1D3623250D0F684500981E51 /* MonalAppDelegate.m */; };
|
||||||
1D60589B0D05DD56006BFB54 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 29B97316FDCFA39411CA2CEA /* main.m */; };
|
1D60589B0D05DD56006BFB54 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 29B97316FDCFA39411CA2CEA /* main.m */; };
|
||||||
|
2075230B91C7DB319CCBA11D /* WrapperXMPP.swift in Sources */ = {isa = PBXBuildFile; fileRef = 998D2BEBAB8C1CA1AC471B4A /* WrapperXMPP.swift */; };
|
||||||
20D3611C2C10E12500E46587 /* BoardingCards.swift in Sources */ = {isa = PBXBuildFile; fileRef = 20D3611B2C10E12500E46587 /* BoardingCards.swift */; };
|
20D3611C2C10E12500E46587 /* BoardingCards.swift in Sources */ = {isa = PBXBuildFile; fileRef = 20D3611B2C10E12500E46587 /* BoardingCards.swift */; };
|
||||||
20D8C65E2C3C37FE00E6BDA2 /* MediaGallery.swift in Sources */ = {isa = PBXBuildFile; fileRef = 20D8C65D2C3C37FE00E6BDA2 /* MediaGallery.swift */; };
|
20D8C65E2C3C37FE00E6BDA2 /* MediaGallery.swift in Sources */ = {isa = PBXBuildFile; fileRef = 20D8C65D2C3C37FE00E6BDA2 /* MediaGallery.swift */; };
|
||||||
20ED55852BADDA5C0005783E /* GeneralSettings.swift in Sources */ = {isa = PBXBuildFile; fileRef = 20ED55842BADDA5C0005783E /* GeneralSettings.swift */; };
|
20ED55852BADDA5C0005783E /* GeneralSettings.swift in Sources */ = {isa = PBXBuildFile; fileRef = 20ED55842BADDA5C0005783E /* GeneralSettings.swift */; };
|
||||||
|
@ -139,7 +140,6 @@
|
||||||
7E1C0AC72CEF68C000B8FEC0 /* MainTabScreen.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7E1C0AC62CEF68C000B8FEC0 /* MainTabScreen.swift */; };
|
7E1C0AC72CEF68C000B8FEC0 /* MainTabScreen.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7E1C0AC62CEF68C000B8FEC0 /* MainTabScreen.swift */; };
|
||||||
7E1C0ACB2CEF6C7800B8FEC0 /* ContactsScreen.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7E1C0AC92CEF6C7800B8FEC0 /* ContactsScreen.swift */; };
|
7E1C0ACB2CEF6C7800B8FEC0 /* ContactsScreen.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7E1C0AC92CEF6C7800B8FEC0 /* ContactsScreen.swift */; };
|
||||||
7E1C0ACC2CEF6C7800B8FEC0 /* AddContactOrChannelScreen.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7E1C0AC82CEF6C7800B8FEC0 /* AddContactOrChannelScreen.swift */; };
|
7E1C0ACC2CEF6C7800B8FEC0 /* AddContactOrChannelScreen.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7E1C0AC82CEF6C7800B8FEC0 /* AddContactOrChannelScreen.swift */; };
|
||||||
7E6AF38F2CEB9110004328B5 /* MonalXmppWrapper.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7E6AF38E2CEB9110004328B5 /* MonalXmppWrapper.swift */; };
|
|
||||||
7E6AF3902CEB982F004328B5 /* sworim.sqlite in Resources */ = {isa = PBXBuildFile; fileRef = 2601D9CA0FBF25EF004DB939 /* sworim.sqlite */; };
|
7E6AF3902CEB982F004328B5 /* sworim.sqlite in Resources */ = {isa = PBXBuildFile; fileRef = 2601D9CA0FBF25EF004DB939 /* sworim.sqlite */; };
|
||||||
7E71758D2CECC5C70059F30B /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = 7E71758B2CECC5C70059F30B /* Localizable.strings */; };
|
7E71758D2CECC5C70059F30B /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = 7E71758B2CECC5C70059F30B /* Localizable.strings */; };
|
||||||
7E71758E2CECC5C70059F30B /* server_features.plist in Resources */ = {isa = PBXBuildFile; fileRef = 7E71758A2CECC5C70059F30B /* server_features.plist */; };
|
7E71758E2CECC5C70059F30B /* server_features.plist in Resources */ = {isa = PBXBuildFile; fileRef = 7E71758A2CECC5C70059F30B /* server_features.plist */; };
|
||||||
|
@ -242,6 +242,7 @@
|
||||||
84FC37552897521500634E3E /* snprintf.m in Sources */ = {isa = PBXBuildFile; fileRef = 84FC37542897521400634E3E /* snprintf.m */; };
|
84FC37552897521500634E3E /* snprintf.m in Sources */ = {isa = PBXBuildFile; fileRef = 84FC37542897521400634E3E /* snprintf.m */; };
|
||||||
84FC37572897523500634E3E /* metamacros.h in Headers */ = {isa = PBXBuildFile; fileRef = 84FC37562897523500634E3E /* metamacros.h */; };
|
84FC37572897523500634E3E /* metamacros.h in Headers */ = {isa = PBXBuildFile; fileRef = 84FC37562897523500634E3E /* metamacros.h */; };
|
||||||
84FC375928981A5600634E3E /* PasswordMigration.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84FC375828981A5600634E3E /* PasswordMigration.swift */; };
|
84FC375928981A5600634E3E /* PasswordMigration.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84FC375828981A5600634E3E /* PasswordMigration.swift */; };
|
||||||
|
90722912B34CD0DFD6ED291E /* WrapperChat.swift in Sources */ = {isa = PBXBuildFile; fileRef = 585781EBEDA697BA88FC803D /* WrapperChat.swift */; };
|
||||||
952EBC802BAF72F300183DBF /* DebugView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 952EBC7F2BAF72F300183DBF /* DebugView.swift */; };
|
952EBC802BAF72F300183DBF /* DebugView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 952EBC7F2BAF72F300183DBF /* DebugView.swift */; };
|
||||||
C10490492612ED2F0054AC9E /* MLEmoji.swift in Sources */ = {isa = PBXBuildFile; fileRef = C10490482612ED2F0054AC9E /* MLEmoji.swift */; };
|
C10490492612ED2F0054AC9E /* MLEmoji.swift in Sources */ = {isa = PBXBuildFile; fileRef = C10490482612ED2F0054AC9E /* MLEmoji.swift */; };
|
||||||
C10490E32612F3D00054AC9E /* MLCrypto.swift in Sources */ = {isa = PBXBuildFile; fileRef = C10490E22612F3D00054AC9E /* MLCrypto.swift */; };
|
C10490E32612F3D00054AC9E /* MLCrypto.swift in Sources */ = {isa = PBXBuildFile; fileRef = C10490E22612F3D00054AC9E /* MLCrypto.swift */; };
|
||||||
|
@ -646,6 +647,7 @@
|
||||||
54E594BC2523C34A00E4172B /* MLPubSub.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MLPubSub.m; sourceTree = "<group>"; };
|
54E594BC2523C34A00E4172B /* MLPubSub.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MLPubSub.m; sourceTree = "<group>"; };
|
||||||
54F0B81828231690003664BD /* WelcomeLogIn.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = WelcomeLogIn.swift; sourceTree = "<group>"; };
|
54F0B81828231690003664BD /* WelcomeLogIn.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = WelcomeLogIn.swift; sourceTree = "<group>"; };
|
||||||
54F0B81B282316F5003664BD /* RegisterAccount.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RegisterAccount.swift; sourceTree = "<group>"; };
|
54F0B81B282316F5003664BD /* RegisterAccount.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RegisterAccount.swift; sourceTree = "<group>"; };
|
||||||
|
585781EBEDA697BA88FC803D /* WrapperChat.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = WrapperChat.swift; sourceTree = "<group>"; };
|
||||||
59F4A459FBC6040A0F8CCAF3 /* Pods-NotificaionService.alpha-catalyst.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-NotificaionService.alpha-catalyst.xcconfig"; path = "Target Support Files/Pods-NotificaionService/Pods-NotificaionService.alpha-catalyst.xcconfig"; sourceTree = "<group>"; };
|
59F4A459FBC6040A0F8CCAF3 /* Pods-NotificaionService.alpha-catalyst.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-NotificaionService.alpha-catalyst.xcconfig"; path = "Target Support Files/Pods-NotificaionService/Pods-NotificaionService.alpha-catalyst.xcconfig"; sourceTree = "<group>"; };
|
||||||
5B9C86E0A568734587FE9BA2 /* Pods_monalxmpp.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_monalxmpp.framework; sourceTree = BUILT_PRODUCTS_DIR; };
|
5B9C86E0A568734587FE9BA2 /* Pods_monalxmpp.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_monalxmpp.framework; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||||
5BACDACCFE405FE0C903C897 /* Pods-MonalUITests.alpha.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-MonalUITests.alpha.xcconfig"; path = "Target Support Files/Pods-MonalUITests/Pods-MonalUITests.alpha.xcconfig"; sourceTree = "<group>"; };
|
5BACDACCFE405FE0C903C897 /* Pods-MonalUITests.alpha.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-MonalUITests.alpha.xcconfig"; path = "Target Support Files/Pods-MonalUITests/Pods-MonalUITests.alpha.xcconfig"; sourceTree = "<group>"; };
|
||||||
|
@ -664,7 +666,6 @@
|
||||||
7E1C0AC62CEF68C000B8FEC0 /* MainTabScreen.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MainTabScreen.swift; sourceTree = "<group>"; };
|
7E1C0AC62CEF68C000B8FEC0 /* MainTabScreen.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MainTabScreen.swift; sourceTree = "<group>"; };
|
||||||
7E1C0AC82CEF6C7800B8FEC0 /* AddContactOrChannelScreen.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AddContactOrChannelScreen.swift; sourceTree = "<group>"; };
|
7E1C0AC82CEF6C7800B8FEC0 /* AddContactOrChannelScreen.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AddContactOrChannelScreen.swift; sourceTree = "<group>"; };
|
||||||
7E1C0AC92CEF6C7800B8FEC0 /* ContactsScreen.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ContactsScreen.swift; sourceTree = "<group>"; };
|
7E1C0AC92CEF6C7800B8FEC0 /* ContactsScreen.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ContactsScreen.swift; sourceTree = "<group>"; };
|
||||||
7E6AF38E2CEB9110004328B5 /* MonalXmppWrapper.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MonalXmppWrapper.swift; sourceTree = "<group>"; };
|
|
||||||
7E6E446D2CECB76500505D5C /* another.im.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = another.im.entitlements; sourceTree = "<group>"; };
|
7E6E446D2CECB76500505D5C /* another.im.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = another.im.entitlements; sourceTree = "<group>"; };
|
||||||
7E7175892CECC5C70059F30B /* launchscreen.storyboard */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; path = launchscreen.storyboard; sourceTree = "<group>"; };
|
7E7175892CECC5C70059F30B /* launchscreen.storyboard */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; path = launchscreen.storyboard; sourceTree = "<group>"; };
|
||||||
7E71758A2CECC5C70059F30B /* server_features.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = server_features.plist; sourceTree = "<group>"; };
|
7E71758A2CECC5C70059F30B /* server_features.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = server_features.plist; sourceTree = "<group>"; };
|
||||||
|
@ -775,6 +776,7 @@
|
||||||
9705AFFB59AF72A9B79C1D7B /* Pods-MonalXMPPUnitTests.adhoc.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-MonalXMPPUnitTests.adhoc.xcconfig"; path = "Target Support Files/Pods-MonalXMPPUnitTests/Pods-MonalXMPPUnitTests.adhoc.xcconfig"; sourceTree = "<group>"; };
|
9705AFFB59AF72A9B79C1D7B /* Pods-MonalXMPPUnitTests.adhoc.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-MonalXMPPUnitTests.adhoc.xcconfig"; path = "Target Support Files/Pods-MonalXMPPUnitTests/Pods-MonalXMPPUnitTests.adhoc.xcconfig"; sourceTree = "<group>"; };
|
||||||
9760CF4718351300C4256921 /* Pods-shareSheet.appstore-quicksy.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-shareSheet.appstore-quicksy.xcconfig"; path = "Target Support Files/Pods-shareSheet/Pods-shareSheet.appstore-quicksy.xcconfig"; sourceTree = "<group>"; };
|
9760CF4718351300C4256921 /* Pods-shareSheet.appstore-quicksy.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-shareSheet.appstore-quicksy.xcconfig"; path = "Target Support Files/Pods-shareSheet/Pods-shareSheet.appstore-quicksy.xcconfig"; sourceTree = "<group>"; };
|
||||||
9899D670570190DCBE9EEDDB /* Pods-monalxmpp.appstore-quicksy.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-monalxmpp.appstore-quicksy.xcconfig"; path = "Target Support Files/Pods-monalxmpp/Pods-monalxmpp.appstore-quicksy.xcconfig"; sourceTree = "<group>"; };
|
9899D670570190DCBE9EEDDB /* Pods-monalxmpp.appstore-quicksy.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-monalxmpp.appstore-quicksy.xcconfig"; path = "Target Support Files/Pods-monalxmpp/Pods-monalxmpp.appstore-quicksy.xcconfig"; sourceTree = "<group>"; };
|
||||||
|
998D2BEBAB8C1CA1AC471B4A /* WrapperXMPP.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = WrapperXMPP.swift; sourceTree = "<group>"; };
|
||||||
A2ED40D3515305509E3E166C /* Pods-MonalUITests.alpha-catalyst.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-MonalUITests.alpha-catalyst.xcconfig"; path = "Target Support Files/Pods-MonalUITests/Pods-MonalUITests.alpha-catalyst.xcconfig"; sourceTree = "<group>"; };
|
A2ED40D3515305509E3E166C /* Pods-MonalUITests.alpha-catalyst.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-MonalUITests.alpha-catalyst.xcconfig"; path = "Target Support Files/Pods-MonalUITests/Pods-MonalUITests.alpha-catalyst.xcconfig"; sourceTree = "<group>"; };
|
||||||
A4C686567AC126CDDFB1BE44 /* Pods-NotificaionService.beta.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-NotificaionService.beta.xcconfig"; path = "Target Support Files/Pods-NotificaionService/Pods-NotificaionService.beta.xcconfig"; sourceTree = "<group>"; };
|
A4C686567AC126CDDFB1BE44 /* Pods-NotificaionService.beta.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-NotificaionService.beta.xcconfig"; path = "Target Support Files/Pods-NotificaionService/Pods-NotificaionService.beta.xcconfig"; sourceTree = "<group>"; };
|
||||||
AA697C1F9B9637B86665DFF1 /* Pods-NotificationService.appstore-quicksy.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-NotificationService.appstore-quicksy.xcconfig"; path = "Target Support Files/Pods-NotificationService/Pods-NotificationService.appstore-quicksy.xcconfig"; sourceTree = "<group>"; };
|
AA697C1F9B9637B86665DFF1 /* Pods-NotificationService.appstore-quicksy.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-NotificationService.appstore-quicksy.xcconfig"; path = "Target Support Files/Pods-NotificationService/Pods-NotificationService.appstore-quicksy.xcconfig"; sourceTree = "<group>"; };
|
||||||
|
@ -1452,7 +1454,7 @@
|
||||||
name = tools;
|
name = tools;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
};
|
};
|
||||||
29B97314FDCFA39411CA2CEA /* CustomTemplate */ = {
|
29B97314FDCFA39411CA2CEA = {
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
8414ADF92A7ABAC900EFFCCC /* Packages */,
|
8414ADF92A7ABAC900EFFCCC /* Packages */,
|
||||||
|
@ -1578,10 +1580,10 @@
|
||||||
7E8D7AE52CECD05C009AD3DF /* XMPP */ = {
|
7E8D7AE52CECD05C009AD3DF /* XMPP */ = {
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
7E6AF38E2CEB9110004328B5 /* MonalXmppWrapper.swift */,
|
|
||||||
404FB187FD6CB3DD41DAC820 /* AimErrors.swift */,
|
404FB187FD6CB3DD41DAC820 /* AimErrors.swift */,
|
||||||
E23C31EA05858AFC0AB43D06 /* Scenaries */,
|
E23C31EA05858AFC0AB43D06 /* Scenaries */,
|
||||||
8C5F2E42A69F9A7B93A20F78 /* Models */,
|
8C5F2E42A69F9A7B93A20F78 /* Models */,
|
||||||
|
ABC8671064FCFD060C57E114 /* Wrappers */,
|
||||||
);
|
);
|
||||||
path = XMPP;
|
path = XMPP;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
|
@ -1787,6 +1789,16 @@
|
||||||
path = Models;
|
path = Models;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
};
|
};
|
||||||
|
ABC8671064FCFD060C57E114 /* Wrappers */ = {
|
||||||
|
isa = PBXGroup;
|
||||||
|
children = (
|
||||||
|
998D2BEBAB8C1CA1AC471B4A /* WrapperXMPP.swift */,
|
||||||
|
585781EBEDA697BA88FC803D /* WrapperChat.swift */,
|
||||||
|
);
|
||||||
|
name = Wrappers;
|
||||||
|
path = Wrappers;
|
||||||
|
sourceTree = "<group>";
|
||||||
|
};
|
||||||
C1049187261301530054AC9E /* MonalXMPPUnitTests */ = {
|
C1049187261301530054AC9E /* MonalXMPPUnitTests */ = {
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
|
@ -2174,7 +2186,7 @@
|
||||||
eu,
|
eu,
|
||||||
"es-AR",
|
"es-AR",
|
||||||
);
|
);
|
||||||
mainGroup = 29B97314FDCFA39411CA2CEA /* CustomTemplate */;
|
mainGroup = 29B97314FDCFA39411CA2CEA;
|
||||||
packageReferences = (
|
packageReferences = (
|
||||||
C1F5C7AD2777638B0001F295 /* XCRemoteSwiftPackageReference "swift-collections" */,
|
C1F5C7AD2777638B0001F295 /* XCRemoteSwiftPackageReference "swift-collections" */,
|
||||||
841898A82957712000FEC77D /* XCRemoteSwiftPackageReference "ViewExtractor" */,
|
841898A82957712000FEC77D /* XCRemoteSwiftPackageReference "ViewExtractor" */,
|
||||||
|
@ -2780,7 +2792,6 @@
|
||||||
7E1C0ACC2CEF6C7800B8FEC0 /* AddContactOrChannelScreen.swift in Sources */,
|
7E1C0ACC2CEF6C7800B8FEC0 /* AddContactOrChannelScreen.swift in Sources */,
|
||||||
7E8D7AFE2CECEDB3009AD3DF /* LoadingScreen.swift in Sources */,
|
7E8D7AFE2CECEDB3009AD3DF /* LoadingScreen.swift in Sources */,
|
||||||
7E995F252CEAC5D2005B30EE /* RootView.swift in Sources */,
|
7E995F252CEAC5D2005B30EE /* RootView.swift in Sources */,
|
||||||
7E6AF38F2CEB9110004328B5 /* MonalXmppWrapper.swift in Sources */,
|
|
||||||
335B19D1B8E6A4D5FE71380C /* WelcomeScreen.swift in Sources */,
|
335B19D1B8E6A4D5FE71380C /* WelcomeScreen.swift in Sources */,
|
||||||
C11E557980B75AA90738EC9C /* LoginScreen.swift in Sources */,
|
C11E557980B75AA90738EC9C /* LoginScreen.swift in Sources */,
|
||||||
1C8760F8FB99C27D0C3A6ED1 /* RegistrationScreen.swift in Sources */,
|
1C8760F8FB99C27D0C3A6ED1 /* RegistrationScreen.swift in Sources */,
|
||||||
|
@ -2790,6 +2801,8 @@
|
||||||
07D2570A3091519439B47A6A /* Chat.swift in Sources */,
|
07D2570A3091519439B47A6A /* Chat.swift in Sources */,
|
||||||
DEDA22BC3DBA90E586F6B7CE /* Message.swift in Sources */,
|
DEDA22BC3DBA90E586F6B7CE /* Message.swift in Sources */,
|
||||||
5C2B6A5C14F38F315ECC3F5E /* ScenarioLogIn.swift in Sources */,
|
5C2B6A5C14F38F315ECC3F5E /* ScenarioLogIn.swift in Sources */,
|
||||||
|
2075230B91C7DB319CCBA11D /* WrapperXMPP.swift in Sources */,
|
||||||
|
90722912B34CD0DFD6ED291E /* WrapperChat.swift in Sources */,
|
||||||
);
|
);
|
||||||
runOnlyForDeploymentPostprocessing = 0;
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
};
|
};
|
||||||
|
@ -3737,7 +3750,7 @@
|
||||||
CODE_SIGN_ENTITLEMENTS = another.im/Resources/another.im.entitlements;
|
CODE_SIGN_ENTITLEMENTS = another.im/Resources/another.im.entitlements;
|
||||||
CODE_SIGN_IDENTITY = "Apple Development";
|
CODE_SIGN_IDENTITY = "Apple Development";
|
||||||
CODE_SIGN_STYLE = Automatic;
|
CODE_SIGN_STYLE = Automatic;
|
||||||
CURRENT_PROJECT_VERSION = 2;
|
CURRENT_PROJECT_VERSION = 3;
|
||||||
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
|
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
|
||||||
DEVELOPMENT_ASSET_PATHS = "";
|
DEVELOPMENT_ASSET_PATHS = "";
|
||||||
DEVELOPMENT_TEAM = K78H7BT98L;
|
DEVELOPMENT_TEAM = K78H7BT98L;
|
||||||
|
@ -3828,7 +3841,7 @@
|
||||||
CODE_SIGN_IDENTITY = "Apple Development";
|
CODE_SIGN_IDENTITY = "Apple Development";
|
||||||
CODE_SIGN_STYLE = Automatic;
|
CODE_SIGN_STYLE = Automatic;
|
||||||
COPY_PHASE_STRIP = NO;
|
COPY_PHASE_STRIP = NO;
|
||||||
CURRENT_PROJECT_VERSION = 2;
|
CURRENT_PROJECT_VERSION = 3;
|
||||||
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
|
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
|
||||||
DEVELOPMENT_ASSET_PATHS = "";
|
DEVELOPMENT_ASSET_PATHS = "";
|
||||||
DEVELOPMENT_TEAM = K78H7BT98L;
|
DEVELOPMENT_TEAM = K78H7BT98L;
|
||||||
|
@ -3925,7 +3938,7 @@
|
||||||
CODE_SIGN_IDENTITY = "Apple Development";
|
CODE_SIGN_IDENTITY = "Apple Development";
|
||||||
CODE_SIGN_STYLE = Automatic;
|
CODE_SIGN_STYLE = Automatic;
|
||||||
COPY_PHASE_STRIP = NO;
|
COPY_PHASE_STRIP = NO;
|
||||||
CURRENT_PROJECT_VERSION = 2;
|
CURRENT_PROJECT_VERSION = 3;
|
||||||
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
|
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
|
||||||
DEVELOPMENT_ASSET_PATHS = "";
|
DEVELOPMENT_ASSET_PATHS = "";
|
||||||
DEVELOPMENT_TEAM = K78H7BT98L;
|
DEVELOPMENT_TEAM = K78H7BT98L;
|
||||||
|
@ -4022,7 +4035,7 @@
|
||||||
CODE_SIGN_IDENTITY = "Apple Development";
|
CODE_SIGN_IDENTITY = "Apple Development";
|
||||||
CODE_SIGN_STYLE = Automatic;
|
CODE_SIGN_STYLE = Automatic;
|
||||||
COPY_PHASE_STRIP = NO;
|
COPY_PHASE_STRIP = NO;
|
||||||
CURRENT_PROJECT_VERSION = 2;
|
CURRENT_PROJECT_VERSION = 3;
|
||||||
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
|
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
|
||||||
DEVELOPMENT_ASSET_PATHS = "";
|
DEVELOPMENT_ASSET_PATHS = "";
|
||||||
DEVELOPMENT_TEAM = K78H7BT98L;
|
DEVELOPMENT_TEAM = K78H7BT98L;
|
||||||
|
@ -4119,7 +4132,7 @@
|
||||||
CODE_SIGN_IDENTITY = "Apple Development";
|
CODE_SIGN_IDENTITY = "Apple Development";
|
||||||
CODE_SIGN_STYLE = Automatic;
|
CODE_SIGN_STYLE = Automatic;
|
||||||
COPY_PHASE_STRIP = NO;
|
COPY_PHASE_STRIP = NO;
|
||||||
CURRENT_PROJECT_VERSION = 2;
|
CURRENT_PROJECT_VERSION = 3;
|
||||||
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
|
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
|
||||||
DEVELOPMENT_ASSET_PATHS = "";
|
DEVELOPMENT_ASSET_PATHS = "";
|
||||||
DEVELOPMENT_TEAM = K78H7BT98L;
|
DEVELOPMENT_TEAM = K78H7BT98L;
|
||||||
|
@ -4216,7 +4229,7 @@
|
||||||
CODE_SIGN_IDENTITY = "Apple Development";
|
CODE_SIGN_IDENTITY = "Apple Development";
|
||||||
CODE_SIGN_STYLE = Automatic;
|
CODE_SIGN_STYLE = Automatic;
|
||||||
COPY_PHASE_STRIP = NO;
|
COPY_PHASE_STRIP = NO;
|
||||||
CURRENT_PROJECT_VERSION = 2;
|
CURRENT_PROJECT_VERSION = 3;
|
||||||
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
|
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
|
||||||
DEVELOPMENT_ASSET_PATHS = "";
|
DEVELOPMENT_ASSET_PATHS = "";
|
||||||
DEVELOPMENT_TEAM = K78H7BT98L;
|
DEVELOPMENT_TEAM = K78H7BT98L;
|
||||||
|
|
|
@ -4,7 +4,7 @@ import SwiftUI
|
||||||
@main
|
@main
|
||||||
struct AnotherIMApp: App {
|
struct AnotherIMApp: App {
|
||||||
@UIApplicationDelegateAdaptor(AppDelegate.self) var appDelegate
|
@UIApplicationDelegateAdaptor(AppDelegate.self) var appDelegate
|
||||||
@StateObject var wrapper = MonalXmppWrapper()
|
@StateObject var wrapper = WrapperXMPP()
|
||||||
|
|
||||||
init() {
|
init() {
|
||||||
DDLog.add(DDOSLogger.sharedInstance, with: .all)
|
DDLog.add(DDOSLogger.sharedInstance, with: .all)
|
||||||
|
|
|
@ -2,7 +2,7 @@ import Foundation
|
||||||
import SwiftUI
|
import SwiftUI
|
||||||
|
|
||||||
struct ConversationMessageRow: View {
|
struct ConversationMessageRow: View {
|
||||||
@EnvironmentObject var chatWrapper: MonalChatWrapper
|
@EnvironmentObject var chatWrapper: WrapperXMPP
|
||||||
let message: Message
|
let message: Message
|
||||||
|
|
||||||
@State private var offset: CGSize = .zero
|
@State private var offset: CGSize = .zero
|
||||||
|
|
|
@ -4,7 +4,7 @@ import SwiftUI
|
||||||
|
|
||||||
struct ConversationScreen: View {
|
struct ConversationScreen: View {
|
||||||
@Environment(\.router) var router
|
@Environment(\.router) var router
|
||||||
@EnvironmentObject var chatWrapper: MonalChatWrapper
|
@EnvironmentObject var chatWrapper: WrapperChat
|
||||||
|
|
||||||
@State private var autoScroll = true
|
@State private var autoScroll = true
|
||||||
@State private var firstIsVisible = true
|
@State private var firstIsVisible = true
|
||||||
|
|
|
@ -3,7 +3,7 @@ import Foundation
|
||||||
import SwiftUI
|
import SwiftUI
|
||||||
|
|
||||||
struct ConversationSettingsScreen: View {
|
struct ConversationSettingsScreen: View {
|
||||||
@EnvironmentObject var chatWrapper: MonalChatWrapper
|
@EnvironmentObject var chatWrapper: WrapperChat
|
||||||
@Environment(\.router) var router
|
@Environment(\.router) var router
|
||||||
|
|
||||||
var body: some View {
|
var body: some View {
|
||||||
|
|
|
@ -3,7 +3,7 @@ import UIKit
|
||||||
|
|
||||||
struct ConversationTextInput: View {
|
struct ConversationTextInput: View {
|
||||||
@Environment(\.router) var router
|
@Environment(\.router) var router
|
||||||
@EnvironmentObject var chatWrapper: MonalChatWrapper
|
@EnvironmentObject var chatWrapper: WrapperChat
|
||||||
|
|
||||||
@State private var messageStr = ""
|
@State private var messageStr = ""
|
||||||
@FocusState private var isFocused: Bool
|
@FocusState private var isFocused: Bool
|
||||||
|
|
|
@ -2,7 +2,7 @@ import Combine
|
||||||
import SwiftUI
|
import SwiftUI
|
||||||
|
|
||||||
struct LoginScreen: View {
|
struct LoginScreen: View {
|
||||||
@EnvironmentObject var wrapper: MonalXmppWrapper
|
@EnvironmentObject var wrapper: WrapperXMPP
|
||||||
@Environment(\.router) var router
|
@Environment(\.router) var router
|
||||||
|
|
||||||
enum Field {
|
enum Field {
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
import SwiftUI
|
import SwiftUI
|
||||||
|
|
||||||
struct WelcomeScreen: View {
|
struct WelcomeScreen: View {
|
||||||
@EnvironmentObject var wrapper: MonalXmppWrapper
|
@EnvironmentObject var wrapper: WrapperXMPP
|
||||||
@Environment(\.router) var router
|
@Environment(\.router) var router
|
||||||
|
|
||||||
var body: some View {
|
var body: some View {
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
import SwiftUI
|
import SwiftUI
|
||||||
|
|
||||||
struct ChatsListScreen: View {
|
struct ChatsListScreen: View {
|
||||||
@EnvironmentObject var wrapper: MonalXmppWrapper
|
@EnvironmentObject var wrapper: WrapperXMPP
|
||||||
@Environment(\.router) var router
|
@Environment(\.router) var router
|
||||||
|
|
||||||
var body: some View {
|
var body: some View {
|
||||||
|
@ -43,7 +43,7 @@ struct ChatsListScreen: View {
|
||||||
}
|
}
|
||||||
|
|
||||||
private struct ChatsRow: View {
|
private struct ChatsRow: View {
|
||||||
@EnvironmentObject var wrapper: MonalXmppWrapper
|
@EnvironmentObject var wrapper: WrapperXMPP
|
||||||
@Environment(\.router) var router
|
@Environment(\.router) var router
|
||||||
|
|
||||||
var chat: Chat
|
var chat: Chat
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
import SwiftUI
|
import SwiftUI
|
||||||
|
|
||||||
struct AddContactOrChannelScreen: View {
|
struct AddContactOrChannelScreen: View {
|
||||||
@EnvironmentObject var wrapper: MonalXmppWrapper
|
@EnvironmentObject var wrapper: WrapperXMPP
|
||||||
@Environment(\.router) var router
|
@Environment(\.router) var router
|
||||||
|
|
||||||
enum Field {
|
enum Field {
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
import SwiftUI
|
import SwiftUI
|
||||||
|
|
||||||
struct ContactsScreen: View {
|
struct ContactsScreen: View {
|
||||||
@EnvironmentObject var wrapper: MonalXmppWrapper
|
@EnvironmentObject var wrapper: WrapperXMPP
|
||||||
@Environment(\.router) var router
|
@Environment(\.router) var router
|
||||||
|
|
||||||
var body: some View {
|
var body: some View {
|
||||||
|
@ -43,7 +43,7 @@ struct ContactsScreen: View {
|
||||||
}
|
}
|
||||||
|
|
||||||
private struct ContactsScreenRow: View {
|
private struct ContactsScreenRow: View {
|
||||||
@EnvironmentObject var wrapper: MonalXmppWrapper
|
@EnvironmentObject var wrapper: WrapperXMPP
|
||||||
@Environment(\.router) var router
|
@Environment(\.router) var router
|
||||||
|
|
||||||
var contact: Contact
|
var contact: Contact
|
||||||
|
|
|
@ -9,7 +9,7 @@ private enum Tab {
|
||||||
}
|
}
|
||||||
|
|
||||||
struct MainTabScreen: View {
|
struct MainTabScreen: View {
|
||||||
@EnvironmentObject var wrapper: MonalXmppWrapper
|
@EnvironmentObject var wrapper: WrapperXMPP
|
||||||
|
|
||||||
@State private var selectedTab: Tab = .chats
|
@State private var selectedTab: Tab = .chats
|
||||||
|
|
||||||
|
|
|
@ -2,7 +2,7 @@ import SwiftfulRouting
|
||||||
import SwiftUI
|
import SwiftUI
|
||||||
|
|
||||||
struct RootView: View {
|
struct RootView: View {
|
||||||
@EnvironmentObject var wrapper: MonalXmppWrapper
|
@EnvironmentObject var wrapper: WrapperXMPP
|
||||||
|
|
||||||
var body: some View {
|
var body: some View {
|
||||||
if wrapper.accountsAvailability == .someEnabled {
|
if wrapper.accountsAvailability == .someEnabled {
|
||||||
|
|
111
Monal/another.im/XMPP/Wrappers/WrapperChat.swift
Normal file
111
Monal/another.im/XMPP/Wrappers/WrapperChat.swift
Normal file
|
@ -0,0 +1,111 @@
|
||||||
|
import Foundation
|
||||||
|
import monalxmpp
|
||||||
|
|
||||||
|
final class WrapperChat: ObservableObject {
|
||||||
|
@Published private(set) var messages: [Message] = []
|
||||||
|
@Published var replyText: String = ""
|
||||||
|
@Published private(set) var mamRequestInProgress = false
|
||||||
|
@Published var isOmemoEnabled: Bool {
|
||||||
|
didSet {
|
||||||
|
toggleOmemo(isOmemoEnabled)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
let contact: Contact
|
||||||
|
|
||||||
|
private let monalContact: MLContact
|
||||||
|
private let account: Account
|
||||||
|
private let xmpp: MLXMPPManager
|
||||||
|
private let db: DataLayer
|
||||||
|
private var notificationObservers: [AnyObject] = []
|
||||||
|
|
||||||
|
init(account: Account, contact: Contact, db: DataLayer, xmpp: MLXMPPManager) {
|
||||||
|
self.contact = contact
|
||||||
|
self.account = account
|
||||||
|
self.db = db
|
||||||
|
self.xmpp = xmpp
|
||||||
|
|
||||||
|
// swiftlint:disable:next force_unwrapping
|
||||||
|
monalContact = db.contactList().first { $0.accountID.intValue == contact.ownerId && $0.contactJid == contact.contactJid }!
|
||||||
|
isOmemoEnabled = monalContact.isEncrypted
|
||||||
|
|
||||||
|
subscribe()
|
||||||
|
NotificationCenter.default.post(name: Notification.Name(kMonalNewMessageNotice), object: nil)
|
||||||
|
|
||||||
|
//
|
||||||
|
}
|
||||||
|
|
||||||
|
deinit {
|
||||||
|
notificationObservers.forEach { NotificationCenter.default.removeObserver($0) }
|
||||||
|
}
|
||||||
|
|
||||||
|
var chatTitle: String {
|
||||||
|
contact.name
|
||||||
|
}
|
||||||
|
|
||||||
|
func sendText(_ text: String) {
|
||||||
|
let newMessageId = UUID().uuidString
|
||||||
|
_ = db.addMessageHistory(
|
||||||
|
to: contact.contactJid,
|
||||||
|
forAccount: monalContact.accountID,
|
||||||
|
withMessage: text,
|
||||||
|
actuallyFrom: account.jid,
|
||||||
|
withId: newMessageId,
|
||||||
|
encrypted: monalContact.isEncrypted,
|
||||||
|
messageType: kMessageTypeText,
|
||||||
|
mimeType: nil,
|
||||||
|
size: nil
|
||||||
|
)
|
||||||
|
print(newMessageId)
|
||||||
|
xmpp.sendMessage(text, to: monalContact, isEncrypted: monalContact.isEncrypted, isUpload: false, messageId: newMessageId)
|
||||||
|
}
|
||||||
|
|
||||||
|
func requestMAM() {
|
||||||
|
if mamRequestInProgress { return }
|
||||||
|
mamRequestInProgress = true
|
||||||
|
|
||||||
|
guard let acc = xmpp.getEnabledAccount(forID: NSNumber(value: account.id)) else { return }
|
||||||
|
|
||||||
|
let lastStanzaId = messages.last?.stanzaId // last here because list is reversed
|
||||||
|
?? db.lastStanzaId(forAccount: NSNumber(value: account.id))
|
||||||
|
|
||||||
|
acc.setMAMQueryMostRecentFor(monalContact, before: lastStanzaId) { [weak self] msgs, _ in
|
||||||
|
DispatchQueue.main.asyncAfter(deadline: .now() + 0.5) { [weak self] in
|
||||||
|
self?.mamRequestInProgress = false
|
||||||
|
if !(msgs ?? []).isEmpty {
|
||||||
|
self?.refreshMessages()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private extension WrapperChat {
|
||||||
|
func subscribe() {
|
||||||
|
let newMsg = NotificationCenter.default.addObserver(forName: Notification.Name(kMonalNewMessageNotice), object: nil, queue: .main) { [weak self] _ in
|
||||||
|
self?.refreshMessages()
|
||||||
|
}
|
||||||
|
notificationObservers.append(newMsg)
|
||||||
|
|
||||||
|
let sentMsg = NotificationCenter.default.addObserver(forName: Notification.Name(kMonalSentMessageNotice), object: nil, queue: .main) { [weak self] _ in
|
||||||
|
self?.refreshMessages()
|
||||||
|
}
|
||||||
|
notificationObservers.append(sentMsg)
|
||||||
|
}
|
||||||
|
|
||||||
|
func refreshMessages() {
|
||||||
|
let messages = db.messages(forContact: contact.contactJid, forAccount: NSNumber(value: contact.ownerId))
|
||||||
|
.compactMap { obj -> Message? in
|
||||||
|
guard let message = obj as? MLMessage else { return nil }
|
||||||
|
return Message(message)
|
||||||
|
}
|
||||||
|
.sorted { $0.timestamp > $1.timestamp }
|
||||||
|
self.messages = messages
|
||||||
|
}
|
||||||
|
|
||||||
|
func toggleOmemo(_ new: Bool) {
|
||||||
|
if monalContact.isEncrypted != new {
|
||||||
|
monalContact.toggleEncryption(new)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -7,7 +7,7 @@ enum AccountsAvailability {
|
||||||
case someEnabled
|
case someEnabled
|
||||||
}
|
}
|
||||||
|
|
||||||
final class MonalXmppWrapper: ObservableObject {
|
final class WrapperXMPP: ObservableObject {
|
||||||
@Published private(set) var accountsAvailability: AccountsAvailability = .noAccounts
|
@Published private(set) var accountsAvailability: AccountsAvailability = .noAccounts
|
||||||
@Published private(set) var accounts: [Account] = []
|
@Published private(set) var accounts: [Account] = []
|
||||||
@Published private(set) var contacts: [Contact] = []
|
@Published private(set) var contacts: [Contact] = []
|
||||||
|
@ -19,8 +19,6 @@ final class MonalXmppWrapper: ObservableObject {
|
||||||
private var notificationObservers: [AnyObject] = []
|
private var notificationObservers: [AnyObject] = []
|
||||||
|
|
||||||
init() {
|
init() {
|
||||||
// here is some inits (just for now)
|
|
||||||
|
|
||||||
// init monalxmpp components
|
// init monalxmpp components
|
||||||
xmpp = MLXMPPManager.sharedInstance()
|
xmpp = MLXMPPManager.sharedInstance()
|
||||||
db = DataLayer.sharedInstance()
|
db = DataLayer.sharedInstance()
|
||||||
|
@ -29,10 +27,6 @@ final class MonalXmppWrapper: ObservableObject {
|
||||||
subscribeToUpdates()
|
subscribeToUpdates()
|
||||||
xmpp.reconnectAll()
|
xmpp.reconnectAll()
|
||||||
NotificationCenter.default.post(name: Notification.Name(kMonalRefresh), object: nil)
|
NotificationCenter.default.post(name: Notification.Name(kMonalRefresh), object: nil)
|
||||||
|
|
||||||
// reconnect
|
|
||||||
// xmpp.nowForegrounded()
|
|
||||||
// xmpp.connectIfNecessary()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
deinit {
|
deinit {
|
||||||
|
@ -41,7 +35,7 @@ final class MonalXmppWrapper: ObservableObject {
|
||||||
}
|
}
|
||||||
|
|
||||||
// MARK: - Public
|
// MARK: - Public
|
||||||
extension MonalXmppWrapper {
|
extension WrapperXMPP {
|
||||||
func tryLogin(_ login: String, _ password: String) async throws {
|
func tryLogin(_ login: String, _ password: String) async throws {
|
||||||
let scenario = ScenarioLogIn()
|
let scenario = ScenarioLogIn()
|
||||||
let result = await scenario.tryLogin(login, password)
|
let result = await scenario.tryLogin(login, password)
|
||||||
|
@ -65,14 +59,14 @@ extension MonalXmppWrapper {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func chat(with: Contact) -> MonalChatWrapper {
|
func chat(with: Contact) -> WrapperChat {
|
||||||
// swiftlint:disable:next force_unwrapping
|
// swiftlint:disable:next force_unwrapping
|
||||||
let account = accounts.first { $0.id == with.ownerId }!
|
let account = accounts.first { $0.id == with.ownerId }!
|
||||||
let chatModel = MonalChatWrapper(account: account, contact: with, db: db, xmpp: xmpp)
|
let chatModel = WrapperChat(account: account, contact: with, db: db, xmpp: xmpp)
|
||||||
return chatModel
|
return chatModel
|
||||||
}
|
}
|
||||||
|
|
||||||
func chat(with: Chat) -> MonalChatWrapper? {
|
func chat(with: Chat) -> WrapperChat? {
|
||||||
guard let account = accounts.first(where: { $0.id == with.accountId }) else { return nil }
|
guard let account = accounts.first(where: { $0.id == with.accountId }) else { return nil }
|
||||||
|
|
||||||
var contact = contacts.first(where: { $0.ownerId == with.accountId && $0.contactJid == with.participantJid })
|
var contact = contacts.first(where: { $0.ownerId == with.accountId && $0.contactJid == with.participantJid })
|
||||||
|
@ -89,13 +83,13 @@ extension MonalXmppWrapper {
|
||||||
}
|
}
|
||||||
|
|
||||||
guard let contact else { return nil }
|
guard let contact else { return nil }
|
||||||
let chatModel = MonalChatWrapper(account: account, contact: contact, db: db, xmpp: xmpp)
|
let chatModel = WrapperChat(account: account, contact: contact, db: db, xmpp: xmpp)
|
||||||
return chatModel
|
return chatModel
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// MARK: - Handle notifications
|
// MARK: - Handle notifications
|
||||||
private extension MonalXmppWrapper {
|
private extension WrapperXMPP {
|
||||||
func subscribeToUpdates() {
|
func subscribeToUpdates() {
|
||||||
// General
|
// General
|
||||||
let generalRefresh = NotificationCenter.default.addObserver(forName: Notification.Name(kMonalRefresh), object: nil, queue: .main) { [weak self] _ in
|
let generalRefresh = NotificationCenter.default.addObserver(forName: Notification.Name(kMonalRefresh), object: nil, queue: .main) { [weak self] _ in
|
||||||
|
@ -151,113 +145,3 @@ private extension MonalXmppWrapper {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// MARK: - Chat object
|
|
||||||
final class MonalChatWrapper: ObservableObject {
|
|
||||||
@Published private(set) var messages: [Message] = []
|
|
||||||
@Published var replyText: String = ""
|
|
||||||
@Published private(set) var mamRequestInProgress = false
|
|
||||||
@Published var isOmemoEnabled: Bool {
|
|
||||||
didSet {
|
|
||||||
toggleOmemo(isOmemoEnabled)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
let contact: Contact
|
|
||||||
|
|
||||||
private let monalContact: MLContact
|
|
||||||
private let account: Account
|
|
||||||
private let xmpp: MLXMPPManager
|
|
||||||
private let db: DataLayer
|
|
||||||
private var notificationObservers: [AnyObject] = []
|
|
||||||
|
|
||||||
init(account: Account, contact: Contact, db: DataLayer, xmpp: MLXMPPManager) {
|
|
||||||
self.contact = contact
|
|
||||||
self.account = account
|
|
||||||
self.db = db
|
|
||||||
self.xmpp = xmpp
|
|
||||||
|
|
||||||
// swiftlint:disable:next force_unwrapping
|
|
||||||
monalContact = db.contactList().first { $0.accountID.intValue == contact.ownerId && $0.contactJid == contact.contactJid }!
|
|
||||||
isOmemoEnabled = monalContact.isEncrypted
|
|
||||||
|
|
||||||
subscribe()
|
|
||||||
NotificationCenter.default.post(name: Notification.Name(kMonalNewMessageNotice), object: nil)
|
|
||||||
|
|
||||||
//
|
|
||||||
}
|
|
||||||
|
|
||||||
deinit {
|
|
||||||
notificationObservers.forEach { NotificationCenter.default.removeObserver($0) }
|
|
||||||
}
|
|
||||||
|
|
||||||
var chatTitle: String {
|
|
||||||
contact.name
|
|
||||||
}
|
|
||||||
|
|
||||||
func sendText(_ text: String) {
|
|
||||||
let newMessageId = UUID().uuidString
|
|
||||||
_ = db.addMessageHistory(
|
|
||||||
to: contact.contactJid,
|
|
||||||
forAccount: monalContact.accountID,
|
|
||||||
withMessage: text,
|
|
||||||
actuallyFrom: account.jid,
|
|
||||||
withId: newMessageId,
|
|
||||||
encrypted: monalContact.isEncrypted,
|
|
||||||
messageType: kMessageTypeText,
|
|
||||||
mimeType: nil,
|
|
||||||
size: nil
|
|
||||||
)
|
|
||||||
print(newMessageId)
|
|
||||||
xmpp.sendMessage(text, to: monalContact, isEncrypted: monalContact.isEncrypted, isUpload: false, messageId: newMessageId)
|
|
||||||
}
|
|
||||||
|
|
||||||
func requestMAM() {
|
|
||||||
if mamRequestInProgress { return }
|
|
||||||
mamRequestInProgress = true
|
|
||||||
|
|
||||||
guard let acc = xmpp.getEnabledAccount(forID: NSNumber(value: account.id)) else { return }
|
|
||||||
|
|
||||||
let lastStanzaId = messages.last?.stanzaId // last here because list is reversed
|
|
||||||
?? db.lastStanzaId(forAccount: NSNumber(value: account.id))
|
|
||||||
|
|
||||||
acc.setMAMQueryMostRecentFor(monalContact, before: lastStanzaId) { [weak self] msgs, _ in
|
|
||||||
DispatchQueue.main.asyncAfter(deadline: .now() + 0.5) { [weak self] in
|
|
||||||
self?.mamRequestInProgress = false
|
|
||||||
if !(msgs ?? []).isEmpty {
|
|
||||||
self?.refreshMessages()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private extension MonalChatWrapper {
|
|
||||||
func subscribe() {
|
|
||||||
let newMsg = NotificationCenter.default.addObserver(forName: Notification.Name(kMonalNewMessageNotice), object: nil, queue: .main) { [weak self] _ in
|
|
||||||
self?.refreshMessages()
|
|
||||||
}
|
|
||||||
notificationObservers.append(newMsg)
|
|
||||||
|
|
||||||
let sentMsg = NotificationCenter.default.addObserver(forName: Notification.Name(kMonalSentMessageNotice), object: nil, queue: .main) { [weak self] _ in
|
|
||||||
self?.refreshMessages()
|
|
||||||
}
|
|
||||||
notificationObservers.append(sentMsg)
|
|
||||||
}
|
|
||||||
|
|
||||||
func refreshMessages() {
|
|
||||||
let messages = db.messages(forContact: contact.contactJid, forAccount: NSNumber(value: contact.ownerId))
|
|
||||||
.compactMap { obj -> Message? in
|
|
||||||
guard let message = obj as? MLMessage else { return nil }
|
|
||||||
return Message(message)
|
|
||||||
}
|
|
||||||
.sorted { $0.timestamp > $1.timestamp }
|
|
||||||
self.messages = messages
|
|
||||||
}
|
|
||||||
|
|
||||||
func toggleOmemo(_ new: Bool) {
|
|
||||||
if monalContact.isEncrypted != new {
|
|
||||||
monalContact.toggleEncryption(new)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
Loading…
Reference in a new issue