]> git.rkrishnan.org Git - functorrent.git/blobdiff - src/main/Main.hs
FileSystem: encapsulate more filesystem functionality into the module
[functorrent.git] / src / main / Main.hs
index a75f01c122df050615e645c4ba9f0fb4f55563da..a7efef0570b878d7be548d1614a045ea4b83ee63 100644 (file)
@@ -6,15 +6,15 @@ import           Prelude hiding (log, length, readFile, getContents)
 import           Control.Concurrent (forkIO)
 import           Control.Concurrent.MVar (readMVar)
 import           Data.ByteString.Char8 (ByteString, getContents, readFile)
-import qualified FuncTorrent.FileSystem as FS (initFS, pieceMapFromFile, startThread)
+import qualified FuncTorrent.FileSystem as FS (createMsgChannel, pieceMapFromFile, startThread)
 import           FuncTorrent.Logger (initLogger, logMessage, logStop)
 import           FuncTorrent.Metainfo (Info(..), Metainfo(..), torrentToMetainfo)
 import           FuncTorrent.Peer (handlePeerMsgs)
 import           FuncTorrent.PieceManager (initPieceMap)
 import qualified FuncTorrent.Server as Server
 import           FuncTorrent.Tracker (connectedPeers, initialTrackerState, trackerLoop, udpTrackerLoop)
-import           FuncTorrent.Utils (createDummyFile)
 import           Network (PortID (PortNumber))
+import           System.IO (withFile, IOMode (ReadWriteMode))
 import           System.Directory (doesFileExist)
 import           System.Environment (getArgs)
 import           System.Exit (exitSuccess)
@@ -71,18 +71,11 @@ main = do
            pLen = pieceLength (info m)
            defaultPieceMap = initPieceMap pieceHash fileLen pLen
        log $ "create FS msg channel"
-       (handle, fsMsgChannel) <- FS.initFS filePath
+       fsMsgChannel <- FS.createMsgChannel
        log $ "Downloading file : " ++ filePath
-       dfe <- doesFileExist filePath
-       pieceMap <- if dfe
-                   then
-                     FS.pieceMapFromFile handle defaultPieceMap
-                   else do
-                     -- create a dummy file
-                     createDummyFile filePath (fromIntegral fileLen) >>
-                       return defaultPieceMap
+       pieceMap <- FS.pieceMapFromFile filePath fileLen defaultPieceMap
        log $ "start filesystem manager thread"
-       FS.startThread handle fsMsgChannel pieceMap
+       withFile filePath ReadWriteMode (FS.startThread pieceMap fsMsgChannel)
        log $ "starting server"
        (serverSock, (PortNumber portnum)) <- Server.start
        log $ "server started on " ++ show portnum