File: Plugin.chs

package info (click to toggle)
haskell-gstreamer 0.12.1-1
  • links: PTS, VCS
  • area: main
  • in suites: wheezy
  • size: 720 kB
  • sloc: haskell: 635; ansic: 116; makefile: 11; sh: 7
file content (166 lines) | stat: -rw-r--r-- 4,997 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
--  GIMP Toolkit (GTK) Binding for Haskell: binding to gstreamer -*-haskell-*-
--
--  Author : Peter Gavin
--  Created: 1-Apr-2007
--
--  Copyright (c) 2007 Peter Gavin
--
--  This library is free software: you can redistribute it and/or
--  modify it under the terms of the GNU Lesser General Public License
--  as published by the Free Software Foundation, either version 3 of
--  the License, or (at your option) any later version.
--  
--  This library is distributed in the hope that it will be useful,
--  but WITHOUT ANY WARRANTY; without even the implied warranty of
--  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
--  Lesser General Public License for more details.
--  
--  You should have received a copy of the GNU Lesser General Public
--  License along with this program.  If not, see
--  <http://www.gnu.org/licenses/>.
--  
--  GStreamer, the C library which this Haskell library depends on, is
--  available under LGPL Version 2. The documentation included with
--  this library is based on the original GStreamer documentation.
--  
-- | Maintainer  : gtk2hs-devel@lists.sourceforge.net
--   Stability   : alpha
--   Portability : portable (depends on GHC)
module Media.Streaming.GStreamer.Core.Plugin (
  Plugin,
  PluginClass,
  castToPlugin,
  gTypePlugin,

  pluginGetName,
  pluginGetDescription,
  pluginGetFilename,
  pluginGetLicense,
  pluginGetPackage,
  pluginGetOrigin,
  pluginGetSource,
  pluginGetVersion,
  pluginIsLoaded,
  pluginLoadByName,
  pluginLoad,
  
  pluginName,
  pluginDescription,
  pluginFilename,
  pluginLicense,
  pluginPackage,
  pluginOrigin,
  pluginSource,
  pluginVersion
  
  ) where

import Control.Monad (liftM)
{#import Media.Streaming.GStreamer.Core.Types#}
import System.Glib.GObject
import System.Glib.FFI
import System.Glib.UTFString
import System.Glib.Attributes ( ReadAttr
                              , readAttr )

{# context lib = "gstreamer" prefix = "gst" #}

pluginGetName :: PluginClass plugin
              => plugin
              -> IO String
pluginGetName plugin =
    {# call plugin_get_name #} (toPlugin plugin) >>= peekUTFString

pluginGetDescription :: PluginClass plugin
                     => plugin
                     -> IO String
pluginGetDescription plugin =
    {# call plugin_get_description #} (toPlugin plugin) >>= peekUTFString

pluginGetFilename :: PluginClass plugin
                  => plugin
                  -> IO FilePath
pluginGetFilename plugin =
    {# call plugin_get_filename #} (toPlugin plugin) >>= peekUTFString

pluginGetLicense :: PluginClass plugin
                 => plugin
                 -> IO String
pluginGetLicense plugin =
    {# call plugin_get_license #} (toPlugin plugin) >>= peekUTFString

pluginGetPackage :: PluginClass plugin
                 => plugin
                 -> IO String
pluginGetPackage plugin =
    {# call plugin_get_package #} (toPlugin plugin) >>= peekUTFString

pluginGetOrigin :: PluginClass plugin
                => plugin
                -> IO String
pluginGetOrigin plugin =
    {# call plugin_get_origin #} (toPlugin plugin) >>= peekUTFString

pluginGetSource :: PluginClass plugin
                => plugin
                -> IO String
pluginGetSource plugin =
    {# call plugin_get_source #} (toPlugin plugin) >>= peekUTFString

pluginGetVersion :: PluginClass plugin
                 => plugin
                 -> IO String
pluginGetVersion plugin =
    {# call plugin_get_version #} (toPlugin plugin) >>= peekUTFString

pluginIsLoaded :: PluginClass plugin
               => plugin
               -> IO Bool
pluginIsLoaded =
    (liftM toBool) . {# call plugin_is_loaded #} . toPlugin

pluginName :: PluginClass plugin
           => ReadAttr plugin String
pluginName = readAttr pluginGetName

pluginDescription :: PluginClass plugin
                  => ReadAttr plugin String
pluginDescription = readAttr pluginGetDescription

pluginFilename :: PluginClass plugin
               => ReadAttr plugin FilePath
pluginFilename = readAttr pluginGetFilename

pluginLicense :: PluginClass plugin
              => ReadAttr plugin String
pluginLicense = readAttr pluginGetLicense

pluginPackage :: PluginClass plugin
              => ReadAttr plugin String
pluginPackage = readAttr pluginGetPackage

pluginOrigin :: PluginClass plugin
             => ReadAttr plugin String
pluginOrigin = readAttr pluginGetOrigin

pluginSource :: PluginClass plugin
             => ReadAttr plugin String
pluginSource = readAttr pluginGetSource

pluginVersion :: PluginClass plugin
              => ReadAttr plugin String
pluginVersion = readAttr pluginGetVersion

pluginLoad :: PluginClass plugin
           => plugin
           -> IO plugin
pluginLoad plugin =
    liftM (unsafeCastGObject . toGObject) $
        {# call plugin_load #} (toPlugin plugin) >>=
            takeObject

pluginLoadByName :: String
                 -> IO Plugin
pluginLoadByName name =
    withUTFString name {# call plugin_load_by_name #} >>=
        takeObject