-import Control.Concurrent (threadDelay)
-import qualified Control.Exception as X
-import Control.Monad (forever)
-import qualified Data.ByteString.Lazy.Char8 as BL
-import qualified Data.Text as T
-import Data.List (isSuffixOf)
-import Data.Time
-import Data.Time.Clock.POSIX
-import Data.Version (showVersion)
-import Data.Word (Word64)
-import Network.AMQP
-import Network.AMQP.Types
-import Network.AMQP.Utils.Connection
-import Network.AMQP.Utils.Helpers
-import Network.AMQP.Utils.Options
-import Paths_amqp_utils (version)
-import System.Environment
-import System.INotify
-import qualified System.Posix.Files as F
+-- generic AMQP publisher
+import Control.Concurrent
+import qualified Control.Exception as X
+import Control.Monad (forM_)
+import qualified Data.ByteString.Char8 as BS
+import qualified Data.ByteString.Lazy.Char8 as BL
+import qualified Data.Map as M
+import Data.Maybe
+import qualified Data.Text as T
+import Data.Time
+import Data.Time.Clock.POSIX
+import Data.Version (showVersion)
+import Data.Word (Word64)
+import Magic
+import Network.AMQP
+import Network.AMQP.Types
+import Network.AMQP.Utils.Connection
+import Network.AMQP.Utils.Helpers
+import Network.AMQP.Utils.Options
+import Paths_amqp_utils (version)
+import qualified System.Directory.OsPath as DO
+import System.Environment
+import System.Exit
+#if linux_HOST_OS
+import System.INotify
+#endif
+import System.Posix.ByteString (RawFilePath)
+import qualified System.Posix.Files.ByteString as FB
+import qualified System.Posix.Files.PosixString as FP
+import qualified System.OsPath as OS
+import qualified System.File.OsPath as FOS