From a6ba40c2522f3b51183279be58d9f0d9c8090b21 Mon Sep 17 00:00:00 2001 From: Julien Dessaux Date: Sat, 2 Oct 2010 00:28:48 +0200 Subject: Fixed the plugin loading process. --- HsbotIrcBot/Hsbot/Irc/Plugin.hs | 37 +++++++++++++++++++------------------ 1 file changed, 19 insertions(+), 18 deletions(-) (limited to 'HsbotIrcBot/Hsbot/Irc') diff --git a/HsbotIrcBot/Hsbot/Irc/Plugin.hs b/HsbotIrcBot/Hsbot/Irc/Plugin.hs index 40facbe..359f12b 100644 --- a/HsbotIrcBot/Hsbot/Irc/Plugin.hs +++ b/HsbotIrcBot/Hsbot/Irc/Plugin.hs @@ -40,24 +40,25 @@ loadIrcPlugin :: String -> IrcBot () loadIrcPlugin pluginName = do ircbot <- get let masterChan = ircBotChan ircbot - pluginChan <- liftIO (newChan :: IO (Chan IrcBotMsg)) - let entryPoint = case pluginName of - "Core" -> ircBotPluginCore - "Ping" -> ircBotPluginPing - "Quote" -> ircBotPluginQuote - _ -> ircBotPluginDummy - let oldPlugins = ircBotPlugins ircbot - -- We check for unicity - case M.lookup pluginName oldPlugins of - Just _ -> return () - Nothing -> do - mvar <- liftIO newEmptyMVar - threadId <- liftIO . forkIO $ finally (entryPoint pluginChan masterChan) (putMVar mvar ()) - let plugin = IrcPluginState { ircPluginName = pluginName - , ircPluginChan = pluginChan - , ircPluginMasterChan = masterChan } - newPlugins = M.insert pluginName (plugin, mvar, threadId) oldPlugins - put $ ircbot { ircBotPlugins = newPlugins } + (entryPoint, loadIt) = case pluginName of + "Core" -> (ircBotPluginCore, True) + "Ping" -> (ircBotPluginPing, True) + "Quote" -> (ircBotPluginQuote, True) + _ -> (ircBotPluginDummy, False) + when loadIt $ do + pluginChan <- liftIO (newChan :: IO (Chan IrcBotMsg)) + let oldPlugins = ircBotPlugins ircbot + -- We check for unicity + case M.lookup pluginName oldPlugins of + Just _ -> return () + Nothing -> do + mvar <- liftIO newEmptyMVar + threadId <- liftIO . forkIO $ finally (entryPoint pluginChan masterChan) (putMVar mvar ()) + let plugin = IrcPluginState { ircPluginName = pluginName + , ircPluginChan = pluginChan + , ircPluginMasterChan = masterChan } + newPlugins = M.insert pluginName (plugin, mvar, threadId) oldPlugins + put $ ircbot { ircBotPlugins = newPlugins } -- | Sends a list of loaded plugins listPlugins :: IrcMsg -> String -> IrcBot () -- cgit v1.2.3