@@ 16,13 16,19 @@ import Util
cleanOld :: Config.Config -> XMPP.JID -> XMPP.XMPP ()
cleanOld config source = do
old <- liftIO $ DB.query (Config.db config)
- (s"SELECT target_muc, target_nick, source_nick FROM sessions WHERE version < ? AND source_muc = ?")
+ (s"SELECT target_muc, target_nick, source_nick, (SELECT COUNT(1) FROM sessions s where s.source_muc=sessions.source_muc AND s.target_muc=sessions.target_muc AND s.source_nick=sessions.source_nick) FROM sessions WHERE version < ? AND source_muc = ?")
(Config.dbVersion config, bareTxt source)
- forM_ old $ \(muc, nick, source_nick) ->
- let Just target = XMPP.parseJID $ muc ++ s"/" ++ nick in
- sendPresence config ((XMPP.emptyPresence XMPP.PresenceUnavailable) {
- XMPP.presenceFrom = XMPP.parseJID $ bareTxt source ++ s"/" ++ source_nick
- }) target
+ forM_ old $ \(muc, nick, source_nick, count) ->
+ let
+ Just target = XMPP.parseJID $ muc ++ s"/" ++ nick
+ Just source = XMPP.parseJID $ bareTxt source ++ s"/" ++ source_nick
+ in
+ if count > (1::Int) then
+ mkSession config XMPP.PresenceUnavailable (Just source) target
+ else
+ sendPresence config ((XMPP.emptyPresence XMPP.PresenceUnavailable) {
+ XMPP.presenceFrom = Just source
+ }) target
mkSession :: (MonadIO m) =>
Config.Config