packages feed

status-notifier-item 0.2.2.0 → 0.2.2.1

raw patch · 3 files changed

+89/−38 lines, 3 filesPVP: major bump suggested

API removals or changes: PVP suggests a major version bump

API changes (from Hackage documentation)

- StatusNotifier.Host.Service: defaultItemInfo :: ItemInfo
+ StatusNotifier.Host.Service: supressPixelData :: ItemInfo -> ItemInfo
+ StatusNotifier.Util: convertARGBToABGR :: Word32 -> Word32

Files

src/StatusNotifier/Host/Service.hs view
@@ -80,16 +80,8 @@   , menuPath :: Maybe ObjectPath   } deriving (Eq, Show) -defaultItemInfo =-  ItemInfo-  { itemServiceName = "a.b"-  , itemServicePath = "/"-  , iconThemePath = Nothing-  , iconName = ""-  , iconTitle = ""-  , iconPixmaps = []-  , menuPath = Nothing-  }+supressPixelData info =+  info { iconPixmaps = map (\(w, h, _) -> (w, h, "")) $ iconPixmaps info }  makeLensesWithLSuffix ''ItemInfo @@ -127,7 +119,7 @@       doUpdateForHandler utype uinfo (unique, handler) = do         logInfo (printf "Sending update (iconPixmaps suppressed): %s %s, for handler %s"                           (show utype)-                          (show $ uinfo { iconPixmaps = [] })+                          (show $ supressPixelData uinfo)                           (show $ hashUnique unique))         forkIO $ handler utype uinfo @@ -196,9 +188,16 @@         maybe I.defaultPath itemServicePath . Map.lookup name <$>         readMVar itemInfoMapVar -      handleItemRemoved serviceName = let busName = busName_ serviceName in-        modifyMVar_ itemInfoMapVar (return . Map.delete busName ) >>-        doUpdate ItemRemoved defaultItemInfo { itemServiceName = busName }+      handleItemRemoved serviceName =+        modifyMVar itemInfoMapVar doRemove >>=+        maybe logNonExistantRemoval (doUpdate ItemRemoved)+        where+          busName = busName_ serviceName+          doRemove currentMap =+            return (Map.delete busName currentMap, Map.lookup busName currentMap)+          logNonExistantRemoval =+            hostLogger WARNING $ printf "Attempt to remove unknown item %s" $+                       show busName        watcherRegistrationPairs =         [ (W.registerForStatusNotifierItemRegistered, const handleItemAdded)@@ -211,30 +210,71 @@        logPropError = logErrorWithMessage "Error updating property: " -      makeUpdaterFromProp = makeUpdaterFromProp' logPropError+      runProperty prop serviceName =+        getObjectPathForItemName serviceName >>= prop client serviceName -      makeUpdaterFromProp' onError lens updateType prop = getSender run-        where run sender =-                getObjectPathForItemName sender >>=-                prop client sender >>=-                either onError (runUpdate lens updateType sender)+      logUnknownSender updateType signal =+        hostLogger WARNING $+                   printf "Got signal for update type: %s from unknown sender: %s"+                   (show updateType) (show signal) -      runUpdate lens updateType sender newValue =-        modifyMVar itemInfoMapVar modify >>= callUpdate-          where modify infoMap =-                  let newMap = set (at sender . non defaultItemInfo . lens)-                               newValue infoMap-                  in return (newMap, Map.lookup sender newMap)-                callUpdate = flip whenJust (doUpdate updateType)+      logErrorsUpdater lens updateType prop signal =+        makeUpdaterFromProp lens updateType prop signal >>=+        either logPropError ((flip when logSenderErrorAndUpdateAll) . isNothing)+          where+            logSenderErrorAndUpdateAll = do+              logUnknownSender updateType signal+              void $ updatePropertyForAllItemInfos lens updateType prop -      updatePixmaps =+      makeUpdaterFromProp lens updateType prop+                          signal@M.Signal { M.signalSender = Just sender} =+        runExceptT $+          ExceptT (runProperty prop sender) >>=+          lift . runUpdateOfProperty lens updateType sender+      makeUpdaterFromProp _ _ _ _ = return $ Right Nothing++      runUpdateOfProperty lens updateType serviceName newValue = do+        maybeServiceInfo <- modifyMVar itemInfoMapVar modify+        whenJust maybeServiceInfo (doUpdate updateType)+        return maybeServiceInfo+          where+            modify infoMap =+              let newMap = set (at serviceName . _Just . lens) newValue infoMap+              in return (newMap, Map.lookup serviceName newMap)++      updatePropertyForAllItemInfos lens updateType prop = do+        readMVar itemInfoMapVar >>= mapM (runUpdateForService . itemServiceName)+        where runUpdateForService serviceName =+                runProperty prop serviceName >>=+                either (const $ return ())+                       (void . runUpdateOfProperty lens updateType serviceName)++      updateAllIcons =+        updatePropertyForAllItemInfos iconPixmapsL IconUpdated getPixmaps >>+        updatePropertyForAllItemInfos iconNameL IconNameUpdated I.getIconName++      handleNewPixmaps =         makeUpdaterFromProp iconPixmapsL IconUpdated getPixmaps-      handleNewIcon signal =-        makeUpdaterFromProp'-        (const $ updatePixmaps signal)-        iconNameL IconNameUpdated I.getIconName signal+      handleNewIconName =+        makeUpdaterFromProp iconNameL IconNameUpdated I.getIconName+      handleNewIcon signal = do+        newNameResult <- handleNewIconName signal+        newPixmapsResult <- handleNewPixmaps signal+        let remPD = right (fmap supressPixelData)+            result = (remPD newNameResult, remPD newPixmapsResult)+            debugLog = hostLogger DEBUG $ printf "Icon update results %s" (show result)+            updateAll = logUnknownSender IconUpdated signal >> void updateAllIcons+            gotProp = rights [newNameResult, newPixmapsResult]+            fullSuccess = catMaybes gotProp+        if null fullSuccess+        then if null gotProp+             then hostLogger WARNING $ printf+                    "Failed to load new icon with either method %s"+                    (show result)+             else updateAll+        else debugLog       handleNewTitle =-        makeUpdaterFromProp iconTitleL TitleUpdated I.getTitle+        logErrorsUpdater iconTitleL TitleUpdated I.getTitle        clientRegistrationPairs =         [ (I.registerForNewIcon, handleNewIcon)
src/StatusNotifier/Util.hs view
@@ -4,14 +4,16 @@ import           Control.Arrow import           Control.Lens import           DBus.Client+import qualified DBus.Generation as G import qualified DBus.Internal.Message as M import qualified DBus.Internal.Types as T import qualified DBus.Introspection as I-import qualified DBus.Generation as G+import           Data.Bits import qualified Data.ByteString as BS import           Data.Maybe import qualified Data.Vector.Storable as VS import           Data.Vector.Storable.ByteString+import           Data.Word import           Language.Haskell.TH import           Network.Socket (ntohl) import           StatusNotifier.TH@@ -49,9 +51,17 @@ whenJust :: Monad m => Maybe a -> (a -> m ()) -> m () whenJust = flip $ maybe $ return () +convertARGBToABGR :: Word32 -> Word32+convertARGBToABGR bits = (blue `shift` 16) .|. (red `shift` (-16)) .|. green .|. alpha+  where+    blue = bits .&. 0xFF+    green = bits .&. 0xFF00+    red = bits .&. 0xFF0000+    alpha = bits .&. 0xFF000000+ networkToSystemByteOrder :: BS.ByteString -> BS.ByteString networkToSystemByteOrder original =-  vectorToByteString $ VS.map ntohl $ byteStringToVector original+  vectorToByteString $ VS.map (convertARGBToABGR . ntohl) $ byteStringToVector original  maybeToEither :: b -> Maybe a -> Either b a maybeToEither = flip maybe Right . Left
status-notifier-item.cabal view
@@ -1,11 +1,11 @@--- This file has been generated from package.yaml by hpack version 0.28.2.+-- This file has been generated from package.yaml by hpack version 0.21.2. -- -- see: https://github.com/sol/hpack ----- hash: fab14775734399bef953c7eccd528496b0abd4ae265b3f999bf78e2ee151b2b4+-- hash: 0c0d886a82dbaa1abe2f1122ced43a208b5f1e3444653dbbe36e8f2fc564a729  name:           status-notifier-item-version:        0.2.2.0+version:        0.2.2.1 synopsis:       A wrapper over the StatusNotifierItem/libappindicator dbus specification description:    Please see the README on Github at <https://github.com/IvanMalison/status-notifier-item#readme> category:       Desktop@@ -18,6 +18,7 @@ license-file:   LICENSE build-type:     Simple cabal-version:  >= 1.10+ extra-source-files:     ChangeLog.md     README.md