mirror of
https://github.com/simplex-chat/simplex-chat.git
synced 2026-04-01 16:05:52 +00:00
28 lines
1.0 KiB
Haskell
28 lines
1.0 KiB
Haskell
{-# LANGUAGE DuplicateRecordFields #-}
|
|
{-# LANGUAGE FlexibleContexts #-}
|
|
|
|
module Simplex.Chat.Files where
|
|
|
|
import Control.Monad.IO.Class
|
|
import Simplex.Chat.Controller
|
|
import Simplex.Messaging.Util (ifM)
|
|
import System.FilePath (combine, splitExtensions)
|
|
import UnliftIO.Directory (doesDirectoryExist, doesFileExist, getHomeDirectory, getTemporaryDirectory)
|
|
|
|
uniqueCombine :: MonadIO m => FilePath -> String -> m FilePath
|
|
uniqueCombine fPath fName = tryCombine (0 :: Int)
|
|
where
|
|
tryCombine n =
|
|
let (name, ext) = splitExtensions fName
|
|
suffix = if n == 0 then "" else "_" <> show n
|
|
f = fPath `combine` (name <> suffix <> ext)
|
|
in ifM (doesFileExist f) (tryCombine $ n + 1) (pure f)
|
|
|
|
getChatTempDirectory :: ChatMonad m => m FilePath
|
|
getChatTempDirectory = chatReadVar tempDirectory >>= maybe getTemporaryDirectory pure
|
|
|
|
getDefaultFilesFolder :: ChatMonad m => m FilePath
|
|
getDefaultFilesFolder = do
|
|
dir <- (`combine` "Downloads") <$> getHomeDirectory
|
|
ifM (doesDirectoryExist dir) (pure dir) getChatTempDirectory
|