]> git.sesse.net Git - vlc/blobdiff - projects/activex/vlccontrol.cpp
libvlc_audio_*: remove useless exception parameters
[vlc] / projects / activex / vlccontrol.cpp
index 45347f7d6b5452d22aa9eb6b27e4d8b8ae546928..8e7f135cd45a297d5ef093880b6092d989fb96c4 100644 (file)
@@ -16,9 +16,9 @@
  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  * GNU General Public License for more details.
  *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
  *****************************************************************************/
 
 #include "plugin.h"
@@ -124,70 +124,47 @@ STDMETHODIMP VLCControl::put_Visible(VARIANT_BOOL isVisible)
 
 STDMETHODIMP VLCControl::play(void)
 {
-    libvlc_instance_t* p_libvlc;
-    HRESULT result = _p_instance->getVLC(&p_libvlc);
-    if( SUCCEEDED(result) )
-    {
-        libvlc_exception_t ex;
-        libvlc_exception_init(&ex);
+    libvlc_exception_t ex;
+    libvlc_exception_init(&ex);
 
-        libvlc_playlist_play(p_libvlc, -1, 0, NULL, &ex);
-        if( libvlc_exception_raised(&ex) )
-        {
-            _p_instance->setErrorInfo(IID_IVLCControl,
-                libvlc_exception_get_message(&ex));
-            libvlc_exception_clear(&ex);
-            return E_FAIL;
-        }
+    _p_instance->playlist_play(&ex);
+    HRESULT result = exception_bridge(&ex);
+    if( SUCCEEDED(result) )
         _p_instance->fireOnPlayEvent();
-        return NOERROR;
-    }
     return result;
 };
 
 STDMETHODIMP VLCControl::pause(void)
 {
-    libvlc_instance_t* p_libvlc;
-    HRESULT result = _p_instance->getVLC(&p_libvlc);
+    libvlc_media_player_t* p_md;
+    HRESULT result = _p_instance->getMD(&p_md);
     if( SUCCEEDED(result) )
     {
         libvlc_exception_t ex;
         libvlc_exception_init(&ex);
 
-        libvlc_playlist_pause(p_libvlc, &ex);
-        if( libvlc_exception_raised(&ex) )
-        {
-            _p_instance->setErrorInfo(IID_IVLCControl,
-                libvlc_exception_get_message(&ex));
-            libvlc_exception_clear(&ex);
-            return E_FAIL;
-        }
-        _p_instance->fireOnPauseEvent();
-        return NOERROR;
+        libvlc_media_player_pause(p_md, &ex);
+        result = exception_bridge(&ex);
+        if( SUCCEEDED(result) )
+            _p_instance->fireOnPauseEvent();
     }
     return result;
 };
 
 STDMETHODIMP VLCControl::stop(void)
 {
-    libvlc_instance_t* p_libvlc;
-    HRESULT result = _p_instance->getVLC(&p_libvlc);
+    libvlc_media_player_t *p_md;
+    HRESULT result = _p_instance->getMD(&p_md);
     if( SUCCEEDED(result) )
     {
         libvlc_exception_t ex;
         libvlc_exception_init(&ex);
 
-        libvlc_playlist_stop(p_libvlc, &ex);
-        if( libvlc_exception_raised(&ex) )
-        {
-            _p_instance->setErrorInfo(IID_IVLCControl,
-                libvlc_exception_get_message(&ex));
-            libvlc_exception_clear(&ex);
-            return E_FAIL;
-        }
-        return NOERROR;
+        libvlc_media_player_stop(p_md, &ex);
+        result = exception_bridge(&ex);
+        if( SUCCEEDED(result) )
+            _p_instance->fireOnStopEvent();
     }
-    _p_instance->fireOnStopEvent();
     return result;
 };
 
@@ -196,21 +173,13 @@ STDMETHODIMP VLCControl::get_Playing(VARIANT_BOOL *isPlaying)
     if( NULL == isPlaying )
         return E_POINTER;
 
-    HRESULT result = NOERROR;
-    if( _p_instance->isRunning() )
+    libvlc_media_player_t *p_md;
+    HRESULT result = _p_instance->getMD(&p_md);
+    if( SUCCEEDED(result) )
     {
-        libvlc_instance_t *p_libvlc;
-        result = _p_instance->getVLC(&p_libvlc);
-        if( SUCCEEDED(result) )
-        {
-            if( libvlc_playlist_isplaying(p_libvlc, NULL) )
-                *isPlaying = VARIANT_TRUE;
-            else
-                *isPlaying = VARIANT_FALSE;
-            return NOERROR;
-        }
-    }
-    *isPlaying = VARIANT_FALSE;
+        *isPlaying = libvlc_media_player_is_playing(p_md, NULL) ?
+                     VARIANT_TRUE : VARIANT_FALSE;
+    } else *isPlaying = VARIANT_FALSE;
     return result;
 };
 
@@ -220,58 +189,30 @@ STDMETHODIMP VLCControl::get_Position(float *position)
         return E_POINTER;
     *position = 0.0f;
 
-    libvlc_instance_t* p_libvlc;
-    HRESULT result = E_UNEXPECTED;
-    result = _p_instance->getVLC(&p_libvlc);
+    libvlc_media_player_t *p_md;
+    HRESULT result = _p_instance->getMD(&p_md);
     if( SUCCEEDED(result) )
     {
         libvlc_exception_t ex;
         libvlc_exception_init(&ex);
 
-        libvlc_media_player_t *p_md;
-        p_md = libvlc_playlist_get_media_player(p_libvlc, &ex);
-        if( !libvlc_exception_raised(&ex) )
-        {
-            *position = libvlc_media_player_get_position(p_md, &ex);
-            libvlc_media_player_release(p_md);
-            if( ! libvlc_exception_raised(&ex) )
-            {
-                return NOERROR;
-            }
-        }
-        _p_instance->setErrorInfo(IID_IVLCControl,
-                     libvlc_exception_get_message(&ex));
-        libvlc_exception_clear(&ex);
-        return E_FAIL;
+        *position = libvlc_media_player_get_position(p_md, &ex);
+        result = exception_bridge(&ex);
     }
     return result;
 };
 
 STDMETHODIMP VLCControl::put_Position(float position)
 {
-    HRESULT result = E_UNEXPECTED;
-    libvlc_instance_t* p_libvlc;
-    result = _p_instance->getVLC(&p_libvlc);
+    libvlc_media_player_t *p_md;
+    HRESULT result = _p_instance->getMD(&p_md);
     if( SUCCEEDED(result) )
     {
         libvlc_exception_t ex;
         libvlc_exception_init(&ex);
 
-        libvlc_media_player_t *p_md;
-        p_md = libvlc_playlist_get_media_player(p_libvlc, &ex);
-        if( ! libvlc_exception_raised(&ex) )
-        {
-            libvlc_media_player_set_position(p_md, position, &ex);
-            libvlc_media_player_release(p_md);
-            if( ! libvlc_exception_raised(&ex) )
-            {
-                return NOERROR;
-            }
-        }
-        _p_instance->setErrorInfo(IID_IVLCControl,
-                     libvlc_exception_get_message(&ex));
-        libvlc_exception_clear(&ex);
-        return E_FAIL;
+        libvlc_media_player_set_position(p_md, position, &ex);
+        result = exception_bridge(&ex);
     }
     return result;
 };
@@ -282,28 +223,15 @@ STDMETHODIMP VLCControl::get_Time(int *seconds)
         return E_POINTER;
 
     *seconds = 0;
-    libvlc_instance_t* p_libvlc;
-    HRESULT result = _p_instance->getVLC(&p_libvlc);
+    libvlc_media_player_t *p_md;
+    HRESULT result = _p_instance->getMD(&p_md);
     if( SUCCEEDED(result) )
     {
         libvlc_exception_t ex;
         libvlc_exception_init(&ex);
 
-        libvlc_media_player_t *p_md;
-        p_md = libvlc_playlist_get_media_player(p_libvlc, &ex);
-        if( ! libvlc_exception_raised(&ex) )
-        {
-            *seconds = libvlc_media_player_get_time(p_md, &ex);
-            libvlc_media_player_release(p_md);
-            if( ! libvlc_exception_raised(&ex) )
-            {
-                return NOERROR;
-            }
-        }
-        _p_instance->setErrorInfo(IID_IVLCControl,
-                     libvlc_exception_get_message(&ex));
-        libvlc_exception_clear(&ex);
-        return E_FAIL;
+        *seconds = libvlc_media_player_get_time(p_md, &ex);
+        result = exception_bridge(&ex);
     }
     return result;
 };
@@ -317,29 +245,16 @@ STDMETHODIMP VLCControl::put_Time(int seconds)
 
 STDMETHODIMP VLCControl::shuttle(int seconds)
 {
-    libvlc_instance_t* p_libvlc;
-    HRESULT result = _p_instance->getVLC(&p_libvlc);
+    libvlc_media_player_t *p_md;
+    HRESULT result = _p_instance->getMD(&p_md);
     if( SUCCEEDED(result) )
     {
         libvlc_exception_t ex;
         libvlc_exception_init(&ex);
 
-        libvlc_media_player_t *p_md;
-        p_md = libvlc_playlist_get_media_player(p_libvlc, &ex);
-        if( ! libvlc_exception_raised(&ex) )
-        {
-            if( seconds < 0 ) seconds = 0;
-            libvlc_media_player_set_time(p_md, (int64_t)seconds, &ex);
-            libvlc_media_player_release(p_md);
-            if( ! libvlc_exception_raised(&ex) )
-            {
-                return NOERROR;
-            }
-        }
-        _p_instance->setErrorInfo(IID_IVLCControl,
-                     libvlc_exception_get_message(&ex));
-        libvlc_exception_clear(&ex);
-        return E_FAIL;
+        if( seconds < 0 ) seconds = 0;
+        libvlc_media_player_set_time(p_md, (int64_t)seconds, &ex);
+        result = exception_bridge(&ex);
     }
     return result;
 
@@ -347,23 +262,13 @@ STDMETHODIMP VLCControl::shuttle(int seconds)
 
 STDMETHODIMP VLCControl::fullscreen(void)
 {
-    HRESULT result = E_UNEXPECTED;
-    if( _p_instance->isRunning() )
+    libvlc_media_player_t *p_md;
+    HRESULT result = _p_instance->getMD(&p_md);
+    if( SUCCEEDED(result) )
     {
-        libvlc_instance_t *p_libvlc;
-        result = _p_instance->getVLC(&p_libvlc);
-        if( SUCCEEDED(result) )
+        if( libvlc_media_player_is_playing(p_md, NULL) )
         {
-            if( libvlc_playlist_isplaying(p_libvlc, NULL) )
-            {
-                libvlc_media_player_t *p_md =
-                    libvlc_playlist_get_media_player(p_libvlc, NULL);
-                if( p_md )
-                {
-                    libvlc_toggle_fullscreen(p_md, NULL);
-                    libvlc_media_player_release(p_md);
-                }
-            }
+            libvlc_toggle_fullscreen(p_md, NULL);
         }
     }
     return result;
@@ -375,28 +280,15 @@ STDMETHODIMP VLCControl::get_Length(int *seconds)
         return E_POINTER;
     *seconds = 0;
 
-    libvlc_instance_t* p_libvlc;
-    HRESULT result = _p_instance->getVLC(&p_libvlc);
+    libvlc_media_player_t *p_md;
+    HRESULT result = _p_instance->getMD(&p_md);
     if( SUCCEEDED(result) )
     {
         libvlc_exception_t ex;
         libvlc_exception_init(&ex);
 
-        libvlc_media_player_t *p_md;
-        p_md = libvlc_playlist_get_media_player(p_libvlc, &ex);
-        if( ! libvlc_exception_raised(&ex) )
-        {
-            *seconds = (double)libvlc_media_player_get_length(p_md, &ex);
-            libvlc_media_player_release(p_md);
-            if( ! libvlc_exception_raised(&ex) )
-            {
-                return NOERROR;
-            }
-        }
-        _p_instance->setErrorInfo(IID_IVLCControl,
-                     libvlc_exception_get_message(&ex));
-        libvlc_exception_clear(&ex);
-        return E_FAIL;
+        *seconds = (double)libvlc_media_player_get_length(p_md, &ex);
+        result = exception_bridge(&ex);
     }
     return result;
 
@@ -406,32 +298,16 @@ STDMETHODIMP VLCControl::playFaster(void)
 {
     int32_t rate = 2;
 
-    HRESULT result = E_UNEXPECTED;
-    if( !_p_instance->isRunning() )
-        return result;
+    libvlc_media_player_t *p_md;
+    HRESULT result = _p_instance->getMD(&p_md);
 
-    libvlc_instance_t* p_libvlc;
-    result = _p_instance->getVLC(&p_libvlc);
     if( SUCCEEDED(result) )
     {
         libvlc_exception_t ex;
         libvlc_exception_init(&ex);
 
-        libvlc_media_player_t *p_md;
-        p_md = libvlc_playlist_get_media_player(p_libvlc, &ex);
-        if( ! libvlc_exception_raised(&ex) )
-        {
-            libvlc_media_player_set_rate(p_md, rate, &ex);
-            libvlc_media_player_release(p_md);
-            if( ! libvlc_exception_raised(&ex) )
-            {
-                return NOERROR;
-            }
-        }
-        _p_instance->setErrorInfo(IID_IVLCControl,
-                     libvlc_exception_get_message(&ex));
-        libvlc_exception_clear(&ex);
-        return E_FAIL;
+        libvlc_media_player_set_rate(p_md, rate, &ex);
+        result = exception_bridge(&ex);
     }
     return result;
 };
@@ -440,32 +316,15 @@ STDMETHODIMP VLCControl::playSlower(void)
 {
     float rate = 0.5;
 
-    HRESULT result = E_UNEXPECTED;
-    if( !_p_instance->isRunning() )
-        return result;
-
-    libvlc_instance_t* p_libvlc;
-    result = _p_instance->getVLC(&p_libvlc);
+    libvlc_media_player_t *p_md;
+    HRESULT result = _p_instance->getMD(&p_md);
     if( SUCCEEDED(result) )
     {
         libvlc_exception_t ex;
         libvlc_exception_init(&ex);
 
-        libvlc_media_player_t *p_md;
-        p_md = libvlc_playlist_get_media_player(p_libvlc, &ex);
-        if( ! libvlc_exception_raised(&ex) )
-        {
-            libvlc_media_player_set_rate(p_md, rate, &ex);
-            libvlc_media_player_release(p_md);
-            if( ! libvlc_exception_raised(&ex) )
-            {
-                return NOERROR;
-            }
-        }
-        _p_instance->setErrorInfo(IID_IVLCControl,
-                     libvlc_exception_get_message(&ex));
-        libvlc_exception_clear(&ex);
-        return E_FAIL;
+        libvlc_media_player_set_rate(p_md, rate, &ex);
+        result = exception_bridge(&ex);
     }
     return result;
 };
@@ -490,35 +349,34 @@ STDMETHODIMP VLCControl::toggleMute(void)
     libvlc_instance_t* p_libvlc;
     HRESULT result = _p_instance->getVLC(&p_libvlc);
     if( SUCCEEDED(result) )
-    {
-        libvlc_exception_t ex;
-        libvlc_exception_init(&ex);
-
-        libvlc_audio_toggle_mute(p_libvlc, &ex);
-        if( libvlc_exception_raised(&ex) )
-        {
-            _p_instance->setErrorInfo(IID_IVLCControl,
-                         libvlc_exception_get_message(&ex));
-            libvlc_exception_clear(&ex);
-            return E_FAIL;
-        }
-        return NOERROR;
-    }
+        libvlc_audio_toggle_mute(p_libvlc);
     return result;
 };
 
 STDMETHODIMP VLCControl::setVariable(BSTR name, VARIANT value)
 {
-    /** setVariable() is an unsafe interface because of security
-      implications it has and is thus removed. */
-    return E_INVALIDARG;
+    libvlc_instance_t* p_libvlc;
+    HRESULT result = _p_instance->getVLC(&p_libvlc);
+    if( SUCCEEDED(result) )
+    {
+        _p_instance->setErrorInfo(IID_IVLCControl,
+            "setVariable() is an unsafe interface to use. "
+            "It has been removed because of security implications." );
+    }
+    return E_FAIL;
 };
 
 STDMETHODIMP VLCControl::getVariable(BSTR name, VARIANT *value)
 {
-    /** getVariable() is an unsafe interface because of security
-      implications it has and is thus removed. */
-    return E_INVALIDARG;
+    libvlc_instance_t* p_libvlc;
+    HRESULT result = _p_instance->getVLC(&p_libvlc);
+    if( SUCCEEDED(result) )
+    {
+        _p_instance->setErrorInfo(IID_IVLCControl,
+            "getVariable() is an unsafe interface to use. "
+            "It has been removed because of security implications." );
+    }
+    return E_FAIL;
 };
 
 void VLCControl::FreeTargetOptions(char **cOptions, int cOptionCount)
@@ -862,28 +720,23 @@ STDMETHODIMP VLCControl::addTarget(BSTR uri, VARIANT options, enum VLCPlaylistMo
         libvlc_exception_t ex;
         libvlc_exception_init(&ex);
 
-        position = libvlc_playlist_add_extended(p_libvlc, cUri, cUri,
-                                                cOptionsCount,
-                                                const_cast<const char**>(cOptions),
-                                                &ex);
+        position = _p_instance->playlist_add_extended_untrusted(cUri,
+                       cOptionsCount, const_cast<const char**>(cOptions), &ex);
 
         FreeTargetOptions(cOptions, cOptionsCount);
         CoTaskMemFree(cUri);
 
-        if( libvlc_exception_raised(&ex) )
+        hr = exception_bridge(&ex);
+        if( SUCCEEDED(hr) )
+        {
+            if( mode & VLCPlayListAppendAndGo )
+                _p_instance->fireOnPlayEvent();
+        }
+        else
         {
-            _p_instance->setErrorInfo(IID_IVLCPlaylist,
-                libvlc_exception_get_message(&ex));
-            libvlc_exception_clear(&ex);
-
             if( mode & VLCPlayListAppendAndGo )
                 _p_instance->fireOnStopEvent();
-            return E_FAIL;
         }
-
-        if( mode & VLCPlayListAppendAndGo )
-            _p_instance->fireOnPlayEvent();
-        return NOERROR;
     }
     return hr;
 };
@@ -901,15 +754,8 @@ STDMETHODIMP VLCControl::get_PlaylistIndex(int *index)
         libvlc_exception_t ex;
         libvlc_exception_init(&ex);
 
-        *index = libvlc_playlist_get_current_index(p_libvlc, &ex);
-        if( libvlc_exception_raised(&ex) )
-        {
-            _p_instance->setErrorInfo(IID_IVLCControl,
-                libvlc_exception_get_message(&ex));
-            libvlc_exception_clear(&ex);
-            return E_FAIL;
-        }
-        return NOERROR;
+        *index = _p_instance->playlist_get_current_index(&ex);
+        result = exception_bridge(&ex);
     }
     return result;
 };
@@ -919,25 +765,11 @@ STDMETHODIMP VLCControl::get_PlaylistCount(int *count)
     if( NULL == count )
         return E_POINTER;
 
-    *count = 0;
-    libvlc_instance_t* p_libvlc;
-    HRESULT result = _p_instance->getVLC(&p_libvlc);
-    if( SUCCEEDED(result) )
-    {
-        libvlc_exception_t ex;
-        libvlc_exception_init(&ex);
+    libvlc_exception_t ex;
+    libvlc_exception_init(&ex);
 
-        *count = libvlc_playlist_items_count(p_libvlc, &ex);
-        if( libvlc_exception_raised(&ex) )
-        {
-            _p_instance->setErrorInfo(IID_IVLCControl,
-                libvlc_exception_get_message(&ex));
-            libvlc_exception_clear(&ex);
-            return E_FAIL;
-        }
-        return NOERROR;
-    }
-    return result;
+    *count = _p_instance->playlist_count(&ex);
+    return exception_bridge(&ex);
 };
 
 STDMETHODIMP VLCControl::playlistNext(void)
@@ -949,15 +781,8 @@ STDMETHODIMP VLCControl::playlistNext(void)
         libvlc_exception_t ex;
         libvlc_exception_init(&ex);
 
-        libvlc_playlist_next(p_libvlc, &ex);
-        if( libvlc_exception_raised(&ex) )
-        {
-            _p_instance->setErrorInfo(IID_IVLCControl,
-                libvlc_exception_get_message(&ex));
-            libvlc_exception_clear(&ex);
-            return E_FAIL;
-        }
-        return NOERROR;
+        _p_instance->playlist_next(&ex);
+        result = exception_bridge(&ex);
     }
     return result;
 };
@@ -971,15 +796,8 @@ STDMETHODIMP VLCControl::playlistPrev(void)
         libvlc_exception_t ex;
         libvlc_exception_init(&ex);
 
-        libvlc_playlist_prev(p_libvlc, &ex);
-        if( libvlc_exception_raised(&ex) )
-        {
-            _p_instance->setErrorInfo(IID_IVLCControl,
-                libvlc_exception_get_message(&ex));
-            libvlc_exception_clear(&ex);
-            return E_FAIL;
-        }
-        return NOERROR;
+        _p_instance->playlist_prev(&ex);
+        result = exception_bridge(&ex);
     }
     return result;
 };
@@ -993,15 +811,8 @@ STDMETHODIMP VLCControl::playlistClear(void)
         libvlc_exception_t ex;
         libvlc_exception_init(&ex);
 
-        libvlc_playlist_clear(p_libvlc, &ex);
-        if( libvlc_exception_raised(&ex) )
-        {
-            _p_instance->setErrorInfo(IID_IVLCControl,
-                libvlc_exception_get_message(&ex));
-            libvlc_exception_clear(&ex);
-            return E_FAIL;
-        }
-        return NOERROR;
+        _p_instance->playlist_clear(&ex);
+        result = exception_bridge(&ex);
     }
     return result;
 };