core: do not start clean up manager in background NSE (#3657)
* core: do not start clean up manager in background NSE * update UIs * fix test
This commit is contained in:
parent
e294999044
commit
3ccd9903a7
@ -211,7 +211,7 @@ func apiDeleteUser(_ userId: Int64, _ delSMPQueues: Bool, viewPwd: String?) asyn
|
|||||||
}
|
}
|
||||||
|
|
||||||
func apiStartChat() throws -> Bool {
|
func apiStartChat() throws -> Bool {
|
||||||
let r = chatSendCmdSync(.startChat(subscribe: true, expire: true, xftp: true))
|
let r = chatSendCmdSync(.startChat(mainApp: true))
|
||||||
switch r {
|
switch r {
|
||||||
case .chatStarted: return true
|
case .chatStarted: return true
|
||||||
case .chatRunning: return false
|
case .chatRunning: return false
|
||||||
|
@ -697,7 +697,7 @@ func apiGetActiveUser() -> User? {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func apiStartChat() throws -> Bool {
|
func apiStartChat() throws -> Bool {
|
||||||
let r = sendSimpleXCmd(.startChat(subscribe: false, expire: false, xftp: false))
|
let r = sendSimpleXCmd(.startChat(mainApp: false))
|
||||||
switch r {
|
switch r {
|
||||||
case .chatStarted: return true
|
case .chatStarted: return true
|
||||||
case .chatRunning: return false
|
case .chatRunning: return false
|
||||||
|
@ -25,7 +25,7 @@ public enum ChatCommand {
|
|||||||
case apiMuteUser(userId: Int64)
|
case apiMuteUser(userId: Int64)
|
||||||
case apiUnmuteUser(userId: Int64)
|
case apiUnmuteUser(userId: Int64)
|
||||||
case apiDeleteUser(userId: Int64, delSMPQueues: Bool, viewPwd: String?)
|
case apiDeleteUser(userId: Int64, delSMPQueues: Bool, viewPwd: String?)
|
||||||
case startChat(subscribe: Bool, expire: Bool, xftp: Bool)
|
case startChat(mainApp: Bool)
|
||||||
case apiStopChat
|
case apiStopChat
|
||||||
case apiActivateChat(restoreChat: Bool)
|
case apiActivateChat(restoreChat: Bool)
|
||||||
case apiSuspendChat(timeoutMicroseconds: Int)
|
case apiSuspendChat(timeoutMicroseconds: Int)
|
||||||
@ -154,7 +154,7 @@ public enum ChatCommand {
|
|||||||
case let .apiMuteUser(userId): return "/_mute user \(userId)"
|
case let .apiMuteUser(userId): return "/_mute user \(userId)"
|
||||||
case let .apiUnmuteUser(userId): return "/_unmute user \(userId)"
|
case let .apiUnmuteUser(userId): return "/_unmute user \(userId)"
|
||||||
case let .apiDeleteUser(userId, delSMPQueues, viewPwd): return "/_delete user \(userId) del_smp=\(onOff(delSMPQueues))\(maybePwd(viewPwd))"
|
case let .apiDeleteUser(userId, delSMPQueues, viewPwd): return "/_delete user \(userId) del_smp=\(onOff(delSMPQueues))\(maybePwd(viewPwd))"
|
||||||
case let .startChat(subscribe, expire, xftp): return "/_start subscribe=\(onOff(subscribe)) expire=\(onOff(expire)) xftp=\(onOff(xftp))"
|
case let .startChat(mainApp): return "/_start main=\(onOff(mainApp))"
|
||||||
case .apiStopChat: return "/_stop"
|
case .apiStopChat: return "/_stop"
|
||||||
case let .apiActivateChat(restore): return "/_app activate restore=\(onOff(restore))"
|
case let .apiActivateChat(restore): return "/_app activate restore=\(onOff(restore))"
|
||||||
case let .apiSuspendChat(timeoutMicroseconds): return "/_app suspend \(timeoutMicroseconds)"
|
case let .apiSuspendChat(timeoutMicroseconds): return "/_app suspend \(timeoutMicroseconds)"
|
||||||
|
@ -583,7 +583,7 @@ object ChatController {
|
|||||||
}
|
}
|
||||||
|
|
||||||
suspend fun apiStartChat(): Boolean {
|
suspend fun apiStartChat(): Boolean {
|
||||||
val r = sendCmd(null, CC.StartChat(expire = true))
|
val r = sendCmd(null, CC.StartChat(mainApp = true))
|
||||||
when (r) {
|
when (r) {
|
||||||
is CR.ChatStarted -> return true
|
is CR.ChatStarted -> return true
|
||||||
is CR.ChatRunning -> return false
|
is CR.ChatRunning -> return false
|
||||||
@ -2161,7 +2161,7 @@ sealed class CC {
|
|||||||
class ApiMuteUser(val userId: Long): CC()
|
class ApiMuteUser(val userId: Long): CC()
|
||||||
class ApiUnmuteUser(val userId: Long): CC()
|
class ApiUnmuteUser(val userId: Long): CC()
|
||||||
class ApiDeleteUser(val userId: Long, val delSMPQueues: Boolean, val viewPwd: String?): CC()
|
class ApiDeleteUser(val userId: Long, val delSMPQueues: Boolean, val viewPwd: String?): CC()
|
||||||
class StartChat(val expire: Boolean): CC()
|
class StartChat(val mainApp: Boolean): CC()
|
||||||
class ApiStopChat: CC()
|
class ApiStopChat: CC()
|
||||||
class SetTempFolder(val tempFolder: String): CC()
|
class SetTempFolder(val tempFolder: String): CC()
|
||||||
class SetFilesFolder(val filesFolder: String): CC()
|
class SetFilesFolder(val filesFolder: String): CC()
|
||||||
@ -2288,7 +2288,7 @@ sealed class CC {
|
|||||||
is ApiMuteUser -> "/_mute user $userId"
|
is ApiMuteUser -> "/_mute user $userId"
|
||||||
is ApiUnmuteUser -> "/_unmute user $userId"
|
is ApiUnmuteUser -> "/_unmute user $userId"
|
||||||
is ApiDeleteUser -> "/_delete user $userId del_smp=${onOff(delSMPQueues)}${maybePwd(viewPwd)}"
|
is ApiDeleteUser -> "/_delete user $userId del_smp=${onOff(delSMPQueues)}${maybePwd(viewPwd)}"
|
||||||
is StartChat -> "/_start subscribe=on expire=${onOff(expire)} xftp=on"
|
is StartChat -> "/_start main=${onOff(mainApp)}"
|
||||||
is ApiStopChat -> "/_stop"
|
is ApiStopChat -> "/_stop"
|
||||||
is SetTempFolder -> "/_temp_folder $tempFolder"
|
is SetTempFolder -> "/_temp_folder $tempFolder"
|
||||||
is SetFilesFolder -> "/_files_folder $filesFolder"
|
is SetFilesFolder -> "/_files_folder $filesFolder"
|
||||||
|
@ -311,10 +311,10 @@ cfgServers p s = case p of
|
|||||||
SPSMP -> s.smp
|
SPSMP -> s.smp
|
||||||
SPXFTP -> s.xftp
|
SPXFTP -> s.xftp
|
||||||
|
|
||||||
startChatController :: forall m. ChatMonad' m => Bool -> Bool -> Bool -> m (Async ())
|
startChatController :: forall m. ChatMonad' m => Bool -> m (Async ())
|
||||||
startChatController subConns enableExpireCIs startXFTPWorkers = do
|
startChatController mainApp = do
|
||||||
asks smpAgent >>= resumeAgentClient
|
asks smpAgent >>= resumeAgentClient
|
||||||
unless subConns $
|
unless mainApp $
|
||||||
chatWriteVar subscriptionMode SMOnlyCreate
|
chatWriteVar subscriptionMode SMOnlyCreate
|
||||||
users <- fromRight [] <$> runExceptT (withStoreCtx' (Just "startChatController, getUsers") getUsers)
|
users <- fromRight [] <$> runExceptT (withStoreCtx' (Just "startChatController, getUsers") getUsers)
|
||||||
restoreCalls
|
restoreCalls
|
||||||
@ -324,15 +324,15 @@ startChatController subConns enableExpireCIs startXFTPWorkers = do
|
|||||||
start s users = do
|
start s users = do
|
||||||
a1 <- async agentSubscriber
|
a1 <- async agentSubscriber
|
||||||
a2 <-
|
a2 <-
|
||||||
if subConns
|
if mainApp
|
||||||
then Just <$> async (subscribeUsers False users)
|
then Just <$> async (subscribeUsers False users)
|
||||||
else pure Nothing
|
else pure Nothing
|
||||||
atomically . writeTVar s $ Just (a1, a2)
|
atomically . writeTVar s $ Just (a1, a2)
|
||||||
when startXFTPWorkers $ do
|
when mainApp $ do
|
||||||
startXFTP
|
startXFTP
|
||||||
void $ forkIO $ startFilesToReceive users
|
void $ forkIO $ startFilesToReceive users
|
||||||
startCleanupManager
|
startCleanupManager
|
||||||
when enableExpireCIs $ startExpireCIs users
|
startExpireCIs users
|
||||||
pure a1
|
pure a1
|
||||||
startXFTP = do
|
startXFTP = do
|
||||||
tmp <- readTVarIO =<< asks tempDirectory
|
tmp <- readTVarIO =<< asks tempDirectory
|
||||||
@ -544,10 +544,10 @@ processChatCommand' vr = \case
|
|||||||
checkDeleteChatUser user'
|
checkDeleteChatUser user'
|
||||||
withChatLock "deleteUser" . procCmd $ deleteChatUser user' delSMPQueues
|
withChatLock "deleteUser" . procCmd $ deleteChatUser user' delSMPQueues
|
||||||
DeleteUser uName delSMPQueues viewPwd_ -> withUserName uName $ \userId -> APIDeleteUser userId delSMPQueues viewPwd_
|
DeleteUser uName delSMPQueues viewPwd_ -> withUserName uName $ \userId -> APIDeleteUser userId delSMPQueues viewPwd_
|
||||||
StartChat subConns enableExpireCIs startXFTPWorkers -> withUser' $ \_ ->
|
StartChat mainApp -> withUser' $ \_ ->
|
||||||
asks agentAsync >>= readTVarIO >>= \case
|
asks agentAsync >>= readTVarIO >>= \case
|
||||||
Just _ -> pure CRChatRunning
|
Just _ -> pure CRChatRunning
|
||||||
_ -> checkStoreNotChanged $ startChatController subConns enableExpireCIs startXFTPWorkers $> CRChatStarted
|
_ -> checkStoreNotChanged $ startChatController mainApp $> CRChatStarted
|
||||||
APIStopChat -> do
|
APIStopChat -> do
|
||||||
ask >>= stopChatController
|
ask >>= stopChatController
|
||||||
pure CRChatStopped
|
pure CRChatStopped
|
||||||
@ -6153,8 +6153,8 @@ chatCommandP =
|
|||||||
"/_delete user " *> (APIDeleteUser <$> A.decimal <* " del_smp=" <*> onOffP <*> optional (A.space *> jsonP)),
|
"/_delete user " *> (APIDeleteUser <$> A.decimal <* " del_smp=" <*> onOffP <*> optional (A.space *> jsonP)),
|
||||||
"/delete user " *> (DeleteUser <$> displayName <*> pure True <*> optional (A.space *> pwdP)),
|
"/delete user " *> (DeleteUser <$> displayName <*> pure True <*> optional (A.space *> pwdP)),
|
||||||
("/user" <|> "/u") $> ShowActiveUser,
|
("/user" <|> "/u") $> ShowActiveUser,
|
||||||
"/_start subscribe=" *> (StartChat <$> onOffP <* " expire=" <*> onOffP <* " xftp=" <*> onOffP),
|
"/_start main=" *> (StartChat <$> onOffP),
|
||||||
"/_start" $> StartChat True True True,
|
"/_start" $> StartChat True,
|
||||||
"/_stop" $> APIStopChat,
|
"/_stop" $> APIStopChat,
|
||||||
"/_app activate restore=" *> (APIActivateChat <$> onOffP),
|
"/_app activate restore=" *> (APIActivateChat <$> onOffP),
|
||||||
"/_app activate" $> APIActivateChat True,
|
"/_app activate" $> APIActivateChat True,
|
||||||
|
@ -233,7 +233,7 @@ data ChatCommand
|
|||||||
| UnmuteUser
|
| UnmuteUser
|
||||||
| APIDeleteUser UserId Bool (Maybe UserPwd)
|
| APIDeleteUser UserId Bool (Maybe UserPwd)
|
||||||
| DeleteUser UserName Bool (Maybe UserPwd)
|
| DeleteUser UserName Bool (Maybe UserPwd)
|
||||||
| StartChat {subscribeConnections :: Bool, enableExpireChatItems :: Bool, startXFTPWorkers :: Bool}
|
| StartChat {mainApp :: Bool}
|
||||||
| APIStopChat
|
| APIStopChat
|
||||||
| APIActivateChat {restoreChat :: Bool}
|
| APIActivateChat {restoreChat :: Bool}
|
||||||
| APISuspendChat {suspendTimeout :: Int}
|
| APISuspendChat {suspendTimeout :: Int}
|
||||||
|
@ -35,7 +35,7 @@ runSimplexChat :: ChatOpts -> User -> ChatController -> (User -> ChatController
|
|||||||
runSimplexChat ChatOpts {maintenance} u cc chat
|
runSimplexChat ChatOpts {maintenance} u cc chat
|
||||||
| maintenance = wait =<< async (chat u cc)
|
| maintenance = wait =<< async (chat u cc)
|
||||||
| otherwise = do
|
| otherwise = do
|
||||||
a1 <- runReaderT (startChatController True True True) cc
|
a1 <- runReaderT (startChatController True) cc
|
||||||
a2 <- async $ chat u cc
|
a2 <- async $ chat u cc
|
||||||
waitEither_ a1 a2
|
waitEither_ a1 a2
|
||||||
|
|
||||||
|
@ -1149,7 +1149,7 @@ testSubscribeAppNSE tmp =
|
|||||||
alice ##> "/_app suspend 1"
|
alice ##> "/_app suspend 1"
|
||||||
alice <## "ok"
|
alice <## "ok"
|
||||||
alice <## "chat suspended"
|
alice <## "chat suspended"
|
||||||
nseAlice ##> "/_start subscribe=off expire=off xftp=off"
|
nseAlice ##> "/_start main=off"
|
||||||
nseAlice <## "chat started"
|
nseAlice <## "chat started"
|
||||||
nseAlice ##> "/ad"
|
nseAlice ##> "/ad"
|
||||||
cLink <- getContactLink nseAlice True
|
cLink <- getContactLink nseAlice True
|
||||||
|
Loading…
Reference in New Issue
Block a user