packages feed

manatee-mplayer 0.0.8 → 0.1.0

raw patch · 12 files changed

+184/−77 lines, 12 filesdep +binarydep +derivedep −gtk-serialized-eventdep ~manatee-coresetup-changedbinary-added

Dependencies added: binary, derive

Dependencies removed: gtk-serialized-event

Dependency ranges changed: manatee-core

Files

Daemon.hs view
@@ -1,7 +1,7 @@ -- Author:     Andy Stewart <lazycat.manatee@gmail.com> -- Maintainer: Andy Stewart <lazycat.manatee@gmail.com> -- --- Copyright (C) 2010 Andy Stewart, all rights reserved.+-- Copyright (C) 2010 ~ 2011 Andy Stewart, all rights reserved. --  -- This program is free software: you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by
Main.hs view
@@ -1,7 +1,7 @@ -- Author:     Andy Stewart <lazycat.manatee@gmail.com> -- Maintainer: Andy Stewart <lazycat.manatee@gmail.com> -- --- Copyright (C) 2010 Andy Stewart, all rights reserved.+-- Copyright (C) 2010 ~ 2011 Andy Stewart, all rights reserved. --  -- This program is free software: you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by
Manatee/Extension/Mplayer.hs view
@@ -1,7 +1,7 @@ -- Author:     Andy Stewart <lazycat.manatee@gmail.com> -- Maintainer: Andy Stewart <lazycat.manatee@gmail.com> -- --- Copyright (C) 2010 Andy Stewart, all rights reserved.+-- Copyright (C) 2010 ~ 2011 Andy Stewart, all rights reserved. --  -- This program is free software: you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by
Manatee/Extension/Mplayer/DBus.hs view
@@ -1,7 +1,7 @@ -- Author:     Andy Stewart <lazycat.manatee@gmail.com> -- Maintainer: Andy Stewart <lazycat.manatee@gmail.com> -- --- Copyright (C) 2010 Andy Stewart, all rights reserved.+-- Copyright (C) 2010 ~ 2011 Andy Stewart, all rights reserved. --  -- This program is free software: you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by
Manatee/Extension/Mplayer/Daemon.hs view
@@ -1,7 +1,7 @@ -- Author:     Andy Stewart <lazycat.manatee@gmail.com> -- Maintainer: Andy Stewart <lazycat.manatee@gmail.com> -- --- Copyright (C) 2010 Andy Stewart, all rights reserved.+-- Copyright (C) 2010 ~ 2011 Andy Stewart, all rights reserved. --  -- This program is free software: you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by
Manatee/Extension/Mplayer/PageMode.hs view
@@ -1,7 +1,7 @@ -- Author:     Andy Stewart <lazycat.manatee@gmail.com> -- Maintainer: Andy Stewart <lazycat.manatee@gmail.com> -- --- Copyright (C) 2010 Andy Stewart, all rights reserved.+-- Copyright (C) 2010 ~ 2011 Andy Stewart, all rights reserved. --  -- This program is free software: you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by
Manatee/Extension/Mplayer/PlaylistBuffer.hs view
@@ -1,7 +1,7 @@ -- Author:     Andy Stewart <lazycat.manatee@gmail.com> -- Maintainer: Andy Stewart <lazycat.manatee@gmail.com> -- --- Copyright (C) 2010 Andy Stewart, all rights reserved.+-- Copyright (C) 2010 ~ 2011 Andy Stewart, all rights reserved. --  -- This program is free software: you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by@@ -18,6 +18,7 @@  {-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE ScopedTypeVariables, DeriveDataTypeable #-}+{-# LANGUAGE TemplateHaskell #-} module Manatee.Extension.Mplayer.PlaylistBuffer where  import Audio.TagLib.TagLib@@ -25,22 +26,25 @@ import Control.Concurrent.STM  import Control.Monad (liftM, unless) import DBus.Client hiding (Signal)+import Data.Binary import Data.ByteString.UTF8+import Data.DeriveTH import Data.Maybe (maybeToList) import Data.Ord (comparing) import Data.Time import Data.Typeable-import Graphics.UI.Gtk.General.Enums-import Graphics.UI.Gtk.ModelView.TreeSortable+import Graphics.UI.Gtk hiding (get)+import Manatee.Core.Config import Manatee.Core.DBus import Manatee.Core.Types-import Manatee.Extension.Mplayer.PageMode import Manatee.Extension.Mplayer.DBus+import Manatee.Extension.Mplayer.PageMode import Manatee.Toolkit.General.Basic import Manatee.Toolkit.General.DBus import Manatee.Toolkit.General.List import Manatee.Toolkit.General.Maybe import Manatee.Toolkit.General.Process+import Manatee.Toolkit.General.STM import Manatee.Toolkit.Gio.Gio import System.FilePath import System.GIO.File.File @@ -56,9 +60,15 @@                    ,playlistBufferInfos                 :: TVar [MultimediaInfo]                    ,playlistBufferOptions               :: [(MultimediaOption, SortColumnId)]                    ,playlistBufferSortStatus            :: TVar (MultimediaOption, SortType)+                   ,playlistBufferState                 :: TVar PlaylistState                    }     deriving Typeable +data PlaylistState =+    PlaylistState {playlistStateSelectedPath          :: (Maybe TreePath)+                    ,playlistStateScrolledPosition      :: (Double, Double)+                    }+ data MultimediaInfo =     MultimediaInfo {miFilePath          :: ByteString                    ,miArtist            :: String@@ -157,6 +167,11 @@                       | MOComment                         deriving (Eq, Show, Read) +-- | Init state.+playlistInitState :: PlaylistState      +playlistInitState = +  PlaylistState Nothing (0, 0)+ -- | New playlist buffer. -- If path is directory, will search multimedia files with given directory. -- If path is multimedia file, then add to play list.@@ -193,6 +208,7 @@                  <*> newTVarIO infos                  <*> pure (pairPred [MOTitle, MOAlbum, MOArtist, MOYear, MOTrack, MOBitRate, MODuration])                  <*> newTVarIO (MOAlbum, SortAscending)+                 <*> newTVarIO playlistInitState  -- |  Generate multimedia infos. playlistBufferGenerateInfos :: FilePath -> IO [MultimediaInfo]@@ -275,3 +291,18 @@       mTrack2  = miTrack row2       mTitle1  = miTitle row1       mTitle2  = miTitle row2++-- | Write state.+playlistBufferWriteState :: PlaylistBuffer -> FilePath -> IO ()+playlistBufferWriteState buffer path = do+  state <- readTVarIO $ playlistBufferState buffer+  writeConfigPath path state++-- | Read state.+playlistBufferReadState :: PlaylistBuffer -> FilePath -> IO ()  +playlistBufferReadState buffer path = do+  state <- readConfigPath path playlistInitState+  writeTVarIO (playlistBufferState buffer) state+  +$(derive makeBinary ''PlaylistState)+
Manatee/Extension/Mplayer/PlaylistView.hs view
@@ -1,7 +1,7 @@ -- Author:     Andy Stewart <lazycat.manatee@gmail.com> -- Maintainer: Andy Stewart <lazycat.manatee@gmail.com> -- --- Copyright (C) 2010 Andy Stewart, all rights reserved.+-- Copyright (C) 2010 ~ 2011 Andy Stewart, all rights reserved. --  -- This program is free software: you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by@@ -28,7 +28,7 @@ import Data.Text.Lazy (Text) import Data.Typeable import Graphics.UI.Gtk hiding (Statusbar, statusbarNew, get)-import Graphics.UI.Gtk.Gdk.SerializedEvent+import Manatee.Core.Config import Manatee.Core.PageFrame import Manatee.Core.PageView import Manatee.Core.Types@@ -39,13 +39,13 @@ import Manatee.Toolkit.General.Maybe import Manatee.Toolkit.General.STM import Manatee.Toolkit.Gio.Gio-import Manatee.Toolkit.Gtk.Gtk import Manatee.Toolkit.Gtk.ModelView+import Manatee.Toolkit.Gtk.ScrolledWindow import Paths_manatee_mplayer+import System.FilePath import System.GIO.File.ContentType  import System.Posix.Process import System.Random-import System.FilePath  import qualified Data.Map as M @@ -69,16 +69,21 @@     pageBufferPackageName _     = fmap takeFileName getDataDir  instance PageView PlaylistView where-    pageViewBuffer              = PageBufferWrap . playlistViewBuffer-    pageViewPlugId              = playlistViewPlugId-    pageViewBox                 = pageFrameBox . playlistViewFrame-    pageViewScrolledWindow      = playlistViewScrolledWindow-    pageViewFocus               = treeViewFocus . playlistViewTreeView-    pageViewHandleKeyAction     = playlistViewHandleKeyAction-    pageViewScrollToTop         = playlistViewScrollToTop-    pageViewScrollToBottom      = playlistViewScrollToBottom-    pageViewScrollVerticalPage  = playlistViewScrollVerticalPage-    pageViewScrollVerticalStep  = playlistViewScrollVerticalStep+    pageViewBuffer               = PageBufferWrap . playlistViewBuffer+    pageViewPlugId               = playlistViewPlugId+    pageViewFrame                = playlistViewFrame+    pageViewLocalKeymap _        = playlistViewLocalKeymap+    pageViewLocalCommandMap _    = playlistViewLocalCommandMap+    pageViewFocus                = treeViewFocus . playlistViewTreeView+    pageViewPropagateWidget      = castToWidget . playlistViewTreeView+    pageViewSaveState view       = playlistViewSaveState view Nothing+    pageViewRestoreState view    = playlistViewRestoreState view Nothing+    pageViewWriteState view path = playlistViewSaveState view (Just path)+    pageViewReadState view path  = playlistViewRestoreState view (Just path)+    pageViewScrollToTop          = playlistViewScrollToTop+    pageViewScrollToBottom       = playlistViewScrollToBottom+    pageViewScrollVerticalPage   = playlistViewScrollVerticalPage+    pageViewScrollVerticalStep   = playlistViewScrollVerticalStep  data PlayMode = SingleMode               | ListMode@@ -144,7 +149,7 @@                   ListMode   -> RandomMode                   RandomMode -> SingleMode   writeTVarIO (playlistViewPlayMode view) newMode-  pageFrameUpdateStatusbar (playlistViewFrame view) "PlayMode" (" PlayMode (" ++ show newMode ++ ")")+  pageViewUpdateStatusbar view "PlayMode" (" PlayMode (" ++ show newMode ++ ")")  -- | Play current track. playlistViewPlayCurrent :: PlaylistView -> IO ()@@ -277,44 +282,74 @@ playlistViewPrevNode = treeViewFocusPrevToplevelNode . playlistViewTreeView  -- | Keymap.-playlistViewKeymap :: Map Text (PlaylistView -> IO ())-playlistViewKeymap = +playlistViewLocalKeymap :: Map Text Text+playlistViewLocalKeymap =      M.fromList-         [("j",         playlistViewNextNode)-         ,("k",         playlistViewPrevNode)-         ,("Down",      playlistViewNextNode)-         ,("Up",        playlistViewPrevNode)          -         ,("J",         playlistViewScrollToBottom)-         ,("K",         playlistViewScrollToTop)-         ,(" ",         playlistViewScrollVerticalPage True)-         ,("b",         playlistViewScrollVerticalPage False)-         ,("PageDown",  playlistViewScrollVerticalPage True)-         ,("PageUp",    playlistViewScrollVerticalPage False)-         ,("m",         playlistViewPlay)-         ,("Return",    playlistViewPlay)-         ,("M",         playlistViewPause)-         ,("z",         playlistViewStop)-         ,("h",         playlistViewBackward)-         ,("l",         playlistViewForward)-         ,("Right",     playlistViewBackward)-         ,("Left",      playlistViewForward)-         ,(",",         playlistViewVolumeDec)-         ,(".",         playlistViewVolumeInc)-         ,("-",         playlistViewVolumeDec)-         ,("=",         playlistViewVolumeInc)-         ,("n",         playlistViewPlayNext)-         ,("p",         playlistViewPlayPrev)-         ,("N",         playlistViewPlayRandom)-         ,("P",         playlistViewSwitchPlayMode)-         ,("1",         playlistViewSortByTitle)-         ,("2",         playlistViewSortByAlbum)-         ,("3",         playlistViewSortByArtist)-         ,("4",         playlistViewSortByYear)-         ,("5",         playlistViewSortByTrack)-         ,("6",         playlistViewSortByBitRate)-         ,("7",         playlistViewSortByDuration)+         [("j",         "Next")+         ,("k",         "Previous")+         ,("Down",      "Next")+         ,("Up",        "Previous")          +         ,("J",         "Scroll to bottom")+         ,("K",         "Scroll to top")+         ,(" ",         "Scroll page up")+         ,("b",         "Scroll page down")+         ,("PageDown",  "Scroll page up")+         ,("PageUp",    "Scroll page down")+         ,("m",         "Play")+         ,("Return",    "Play")+         ,("M",         "Pause")+         ,("z",         "Stop")+         ,("h",         "Backward")+         ,("l",         "Forward")+         ,("Right",     "Backward")+         ,("Left",      "Forward")+         ,(",",         "Decrease volume")+         ,(".",         "Increase volume")+         ,("-",         "Decrease volume")+         ,("=",         "Increase volume")+         ,("n",         "Play next")+         ,("p",         "Play previous")+         ,("N",         "Play random")+         ,("P",         "Switch play mode")+         ,("1",         "Sort by title")+         ,("2",         "Sort by album")+         ,("3",         "Sort by artist")+         ,("4",         "Sort by year")+         ,("5",         "Sort by track")+         ,("6",         "Sort by bit rate")+         ,("7",         "Sort by duration")          ] +-- | Keymap.+playlistViewLocalCommandMap :: Map Text (PlaylistView -> IO ())+playlistViewLocalCommandMap = +    M.fromList+         [("Next",              playlistViewNextNode)+         ,("Previous",          playlistViewPrevNode)+         ,("Scroll to bottom",  playlistViewScrollToBottom)+         ,("Scroll to top",     playlistViewScrollToTop)+         ,("Scroll page up",    playlistViewScrollVerticalPage True)+         ,("Scroll page down",  playlistViewScrollVerticalPage False)+         ,("Play",              playlistViewPlay)+         ,("Pause",             playlistViewPause)+         ,("Stop",              playlistViewStop)+         ,("Backward",          playlistViewBackward)+         ,("Forward",           playlistViewForward)+         ,("Decrease volume",   playlistViewVolumeDec)+         ,("Increase volume",   playlistViewVolumeInc)+         ,("Play next",         playlistViewPlayNext)+         ,("Play previous",     playlistViewPlayPrev)+         ,("Play random",       playlistViewPlayRandom)+         ,("Switch play mode",  playlistViewSwitchPlayMode)+         ,("Sort by title",     playlistViewSortByTitle)+         ,("Sort by album",     playlistViewSortByAlbum)+         ,("Sort by artist",    playlistViewSortByArtist)+         ,("Sort by year",      playlistViewSortByYear)+         ,("Sort by track",     playlistViewSortByTrack)+         ,("Sort by bit rate",  playlistViewSortByBitRate)+         ,("Sort by duration",  playlistViewSortByDuration)+         ]+ -- | Sort by title. playlistViewSortByTitle :: PlaylistView -> IO () playlistViewSortByTitle view = playlistViewSort view MOTitle@@ -414,10 +449,10 @@    -- Update play mode status.   mode <- readTVarIO (playlistViewPlayMode view)-  pageFrameUpdateStatusbar (playlistViewFrame view) "PlayMode" (" PlayMode (" ++ show mode ++ ")")+  pageViewUpdateStatusbar view "PlayMode" (" PlayMode (" ++ show mode ++ ")")    -- Update playing status.-  pageFrameUpdateStatusbar (playlistViewFrame view) "Playing" (" Playing : " ++ displayPath)+  pageViewUpdateStatusbar view "Playing" (" Playing : " ++ displayPath)    -- Send daemon signal to play.   processId <- fmap show getProcessID@@ -479,14 +514,41 @@   stepInc <- (<<<=) i2d treeViewGetSelectedCellHeight tv   treeViewScrollVertical tv sw (if isDown then stepInc else (- stepInc)) --- | Handle key action.-playlistViewHandleKeyAction :: PlaylistView -> Text -> SerializedEvent -> IO ()  -playlistViewHandleKeyAction view keystoke sEvent = -  case M.lookup keystoke playlistViewKeymap of-    Just action -> action view-    Nothing -> widgetPropagateEvent (playlistViewTreeView view) sEvent- -- | Scrolled window. playlistViewScrolledWindow :: PlaylistView -> ScrolledWindow     playlistViewScrolledWindow =     pageFrameScrolledWindow . playlistViewFrame++-- | Save state.+playlistViewSaveState :: PlaylistView -> Maybe FilePath -> IO ()+playlistViewSaveState view@(PlaylistView {playlistViewBuffer     = buffer+                                         ,playlistViewTreeView   = treeView}) +                      statePath = do+  -- Get selected path.+  selectedPath <- treeViewGetSelectedPath treeView++  -- Get scroll position.+  scrolledWindowPosition <- scrolledWindowGetValue (playlistViewScrolledWindow view)++  -- Save state.+  let state = PlaylistState selectedPath scrolledWindowPosition+  case statePath of+    Nothing   -> writeTVarIO (playlistBufferState buffer) state+    Just path -> writeConfigPath path state++-- | Restore state.+playlistViewRestoreState :: PlaylistView -> Maybe FilePath -> IO ()+playlistViewRestoreState view@(PlaylistView {playlistViewBuffer  = buffer+                                            ,playlistViewTreeView= treeView})+                         statePath = do+  bufferState <- readTVarIO (playlistBufferState buffer)+  (PlaylistState selectedPath scrolledWindowPosition) <- +      case statePath of+        Just path -> readConfigPath path bufferState+        Nothing   -> return bufferState++  -- Restore selected path.+  selectedPath ?>= \path -> treeViewSetCursor treeView path Nothing++  -- Restore scroll position.+  scrolledWindowSetValue (playlistViewScrolledWindow view) scrolledWindowPosition
Setup.hs view
@@ -1,7 +1,7 @@ -- Author:     Andy Stewart <lazycat.manatee@gmail.com> -- Maintainer: Andy Stewart <lazycat.manatee@gmail.com> -- --- Copyright (C) 2010 Andy Stewart, all rights reserved.+-- Copyright (C) 2010 ~ 2011 Andy Stewart, all rights reserved. --  -- This program is free software: you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by@@ -19,6 +19,7 @@ import Distribution.Simple import Manatee.Core.Config import Manatee.Core.Types+import Manatee.Toolkit.Cabal.Utils import Manatee.Toolkit.General.List import Manatee.Toolkit.General.Map import Manatee.Extension.Mplayer.PageMode@@ -29,7 +30,7 @@        -- Update Rule after install successful.        simpleUserHooks {          -- Update PageTypeRule.-         postInst = \ _ _ _ _ -> do+         postInst = \ _ _ pack_des lbi -> do              (PageTypeRule rule) <- readConfig pageTypeRulePath (PageTypeRule M.empty)              writeConfig pageTypeRulePath (PageTypeRule (M.insert "PagePlayer" "manatee-mplayer" rule))              -- Update FileOpenRule.@@ -46,4 +47,13 @@              (PageModeRule modeRule) <- readConfig pageModeRulePath (PageModeRule M.empty)              writeConfig pageModeRulePath (PageModeRule                                                  (M.insert "PagePlayer" (Left $ pageModeName mplayerMode) modeRule))+             -- Update Application info.+             let snapshotPath = getDataFilePath pack_des lbi "data/welcome/snapshot.png"+                 welcomeFile = getDataFilePath pack_des lbi "data/welcome/Fireflies.mp3"+             (WelcomeApplication apps) <- readConfig welcomeApplicationPath (WelcomeApplication M.empty)+             writeConfig welcomeApplicationPath (WelcomeApplication+                                                 (M.insert +                                                       ("Multimedia Player", snapshotPath)+                                                       ("PagePlayer", welcomeFile, [])+                                                       apps))        }
+ data/welcome/Fireflies.mp3 view

file too large to diff

+ data/welcome/snapshot.png view

binary file changed (absent → 138631 bytes)

manatee-mplayer.cabal view
@@ -1,13 +1,13 @@ name:			manatee-mplayer-version:		0.0.8+version:		0.1.0 Cabal-Version:	>= 1.6 license:		GPL-3 license-file:	LICENSE-copyright:		(c) 2009 ~ 2010 Andy Stewart+copyright:		(c) 2010 ~ 2011 Andy Stewart synopsis:		Mplayer client extension for Manatee. description:    manatee-mplayer is mplayer client extension for Manatee (Haskell/Gtk+ Integrated Live Environment)  .- Video at (Select 720p HD) at : <http://www.youtube.com/watch?v=weS6zys3U8k> <http://www.youtube.com/watch?v=A3DgKDVkyeM> <http://v.youku.com/v_show/id_XMjI2MDMzODI4.html>+ Video (Select 720p HD) at : <http://www.youtube.com/watch?v=weS6zys3U8k> <http://www.youtube.com/watch?v=A3DgKDVkyeM> <http://v.youku.com/v_show/id_XMjI2MDMzODI4.html>  .  Screenshots at : <http://goo.gl/MkVw>  .@@ -22,16 +22,20 @@ stability:		provisional category:		Manatee, Multimedia Player, Multimedia -tested-with:	GHC==6.12.3+tested-with:	GHC==7.0.2 build-type:		Custom +data-dir: ""+data-files: data/welcome/snapshot.png+            data/welcome/Fireflies.mp3+             Source-Repository head   type:         darcs   location:     http://patch-tag.com/r/AndyStewart/manatee-mplayer    Library-     build-depends: base >= 4 && < 5, manatee-core >= 0.0.8, dbus-client >= 0.3 && < 0.4, stm >= 2.1.2.0,-                    containers >= 0.3.0.0, gtk-serialized-event >= 0.12.0, gtk >= 0.12.0, +     build-depends: base >= 4 && < 5, manatee-core >= 0.1.0, dbus-client >= 0.3 && < 0.4, stm >= 2.1.2.0,+                    containers >= 0.3.0.0, gtk >= 0.12.0, derive, binary,                     text >= 0.7.1.0, bytestring >= 0.9.1.5, libtagc >= 0.12.0, regex-tdfa >= 1.1.2,                     filepath >= 1.1.0.3, utf8-string >= 0.3.4, time, dbus-core, gio >= 0.12.0,                     random >= 1.0.0.2, unix >= 2.4.0.0, process