diff --git a/Handler/Search.hs b/Handler/Search.hs index 1b09a48..4892858 100755 --- a/Handler/Search.hs +++ b/Handler/Search.hs @@ -22,6 +22,8 @@ import qualified Data.Text as T import Data.Maybe (fromJust) import Data.List (sortBy, nub) +import Text.Fuzzy (test) + import Database.Persist.Sql (rawSql) import System.FilePath (splitDirectories) @@ -37,7 +39,7 @@ getSearchR = do [PersistText query] b <- rawSql "select ?? from medium where ? % any(string_to_array(description, ' '))" [PersistText query] - return $ nub $ sortBy (\ sa sb -> compare + return $ nub $ sortBy (\sa sb -> compare (T.unpack $ mediumTitle $ entityVal sa) (T.unpack $ mediumTitle $ entityVal sb)) $ a ++ b @@ -45,6 +47,13 @@ getSearchR = do rawSql "select ?? from \"user\" where name % ?" [PersistText query] albumList <- runDB $ rawSql "select ?? from album where title % ?" [PersistText query] + tagList <- runDB $ do + media <- selectList [] [Asc MediumTitle] + let tags = sortBy + (\sa sb -> compare sa sb) + (nub (concatMap mediumTags (map entityVal media))) + ret = filter (\a -> query `test` a) tags + return ret let allEmpty = null mediumList && null userList && null albumList defaultLayout $ do setTitle $ toHtml $ "Eidolon :: Search results for " ++ (T.unpack query) diff --git a/Handler/Tag.hs b/Handler/Tag.hs index cba4eb8..fbcffff 100755 --- a/Handler/Tag.hs +++ b/Handler/Tag.hs @@ -18,17 +18,19 @@ module Handler.Tag where import Import import qualified Data.Text as T +import Data.Maybe (catMaybes) import System.FilePath getTagR :: Text -> Handler Html getTagR tag = do - tempMedia <- runDB $ selectList [] [Asc MediumTitle] - almostMedia <- mapM (\a -> - if tag `elem` mediumTags (entityVal a) - then return (Just a) - else return Nothing - ) tempMedia - let media = removeItem Nothing almostMedia + media <- runDB $ do + almostMedia <- selectList [] [Asc MediumTitle] + ret <- catMaybes <$> mapM (\a -> + if tag `elem` mediumTags (entityVal a) + then return (Just a) + else return Nothing + ) almostMedia + return ret defaultLayout $ do setTitle $ toHtml ("Eidolon :: Tag " `T.append` tag) $(widgetFile "tagMedia") diff --git a/eidolon.cabal b/eidolon.cabal index c07da65..91f836f 100755 --- a/eidolon.cabal +++ b/eidolon.cabal @@ -1,5 +1,5 @@ name: eidolon -version: 0.1.11.5 +version: 0.1.11.6 synopsis: Image gallery in Yesod homepage: https://eidolon.nek0.eu license: AGPL-3 @@ -144,6 +144,7 @@ library , yesod-form >= 1.4.7 , magic , texmath + , fuzzy , yesod-auth , yesod-auth-hmac-keccak diff --git a/templates/result.hamlet b/templates/result.hamlet index 463f363..26f4c6b 100755 --- a/templates/result.hamlet +++ b/templates/result.hamlet @@ -38,3 +38,11 @@ $else
#{mediumTitle medium} + $if not $ null tagList +