]> git.sesse.net Git - vlc/commitdiff
And do the same exception packing for the old activex interface.
authorJP Dinger <jpd@videolan.org>
Mon, 25 May 2009 18:08:05 +0000 (20:08 +0200)
committerJP Dinger <jpd@videolan.org>
Mon, 25 May 2009 18:09:01 +0000 (20:09 +0200)
projects/activex/vlccontrol.cpp
projects/activex/vlccontrol.h

index eac9956f91a4bb3e73cdfda1ce928643b6c76fe2..266b46ce949b91002e4b40dcae37ed591f0b9552 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"
@@ -128,15 +128,10 @@ STDMETHODIMP VLCControl::play(void)
     libvlc_exception_init(&ex);
 
     _p_instance->playlist_play(&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->fireOnPlayEvent();
-    return NOERROR;
+    HRESULT result = exception_bridge(&ex);
+    if( SUCCEEDED(result) )
+        _p_instance->fireOnPlayEvent();
+    return result;
 };
 
 STDMETHODIMP VLCControl::pause(void)
@@ -149,15 +144,9 @@ STDMETHODIMP VLCControl::pause(void)
         libvlc_exception_init(&ex);
 
         libvlc_media_player_pause(p_md, &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;
+        result = exception_bridge(&ex);
+        if( SUCCEEDED(result) )
+            _p_instance->fireOnPauseEvent();
     }
     return result;
 };
@@ -172,16 +161,10 @@ STDMETHODIMP VLCControl::stop(void)
         libvlc_exception_init(&ex);
 
         libvlc_media_player_stop(p_md, &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;
+        result = exception_bridge(&ex);
+        if( SUCCEEDED(result) )
+            _p_instance->fireOnStopEvent();
     }
-    _p_instance->fireOnStopEvent();
     return result;
 };
 
@@ -196,9 +179,7 @@ STDMETHODIMP VLCControl::get_Playing(VARIANT_BOOL *isPlaying)
     {
         *isPlaying = libvlc_media_player_is_playing(p_md, NULL) ?
                      VARIANT_TRUE : VARIANT_FALSE;
-        return NOERROR;
-    }
-    *isPlaying = VARIANT_FALSE;
+    } else *isPlaying = VARIANT_FALSE;
     return result;
 };
 
@@ -216,14 +197,7 @@ STDMETHODIMP VLCControl::get_Position(float *position)
         libvlc_exception_init(&ex);
 
         *position = libvlc_media_player_get_position(p_md, &ex);
-        if( ! libvlc_exception_raised(&ex) )
-        {
-            return NOERROR;
-        }
-        _p_instance->setErrorInfo(IID_IVLCControl,
-                     libvlc_exception_get_message(&ex));
-        libvlc_exception_clear(&ex);
-        return E_FAIL;
+        result = exception_bridge(&ex);
     }
     return result;
 };
@@ -238,14 +212,7 @@ STDMETHODIMP VLCControl::put_Position(float position)
         libvlc_exception_init(&ex);
 
         libvlc_media_player_set_position(p_md, position, &ex);
-        if( ! libvlc_exception_raised(&ex) )
-        {
-            return NOERROR;
-        }
-        _p_instance->setErrorInfo(IID_IVLCControl,
-                     libvlc_exception_get_message(&ex));
-        libvlc_exception_clear(&ex);
-        return E_FAIL;
+        result = exception_bridge(&ex);
     }
     return result;
 };
@@ -264,14 +231,7 @@ STDMETHODIMP VLCControl::get_Time(int *seconds)
         libvlc_exception_init(&ex);
 
         *seconds = libvlc_media_player_get_time(p_md, &ex);
-        if( ! libvlc_exception_raised(&ex) )
-        {
-            return NOERROR;
-        }
-        _p_instance->setErrorInfo(IID_IVLCControl,
-                     libvlc_exception_get_message(&ex));
-        libvlc_exception_clear(&ex);
-        return E_FAIL;
+        result = exception_bridge(&ex);
     }
     return result;
 };
@@ -294,14 +254,7 @@ STDMETHODIMP VLCControl::shuttle(int seconds)
 
         if( seconds < 0 ) seconds = 0;
         libvlc_media_player_set_time(p_md, (int64_t)seconds, &ex);
-        if( ! libvlc_exception_raised(&ex) )
-        {
-            return NOERROR;
-        }
-        _p_instance->setErrorInfo(IID_IVLCControl,
-                     libvlc_exception_get_message(&ex));
-        libvlc_exception_clear(&ex);
-        return E_FAIL;
+        result = exception_bridge(&ex);
     }
     return result;
 
@@ -335,14 +288,7 @@ STDMETHODIMP VLCControl::get_Length(int *seconds)
         libvlc_exception_init(&ex);
 
         *seconds = (double)libvlc_media_player_get_length(p_md, &ex);
-        if( ! libvlc_exception_raised(&ex) )
-        {
-            return NOERROR;
-        }
-        _p_instance->setErrorInfo(IID_IVLCControl,
-                     libvlc_exception_get_message(&ex));
-        libvlc_exception_clear(&ex);
-        return E_FAIL;
+        result = exception_bridge(&ex);
     }
     return result;
 
@@ -360,18 +306,8 @@ STDMETHODIMP VLCControl::playFaster(void)
         libvlc_exception_t ex;
         libvlc_exception_init(&ex);
 
-        if( ! libvlc_exception_raised(&ex) )
-        {
-            libvlc_media_player_set_rate(p_md, rate, &ex);
-            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;
 };
@@ -388,14 +324,7 @@ STDMETHODIMP VLCControl::playSlower(void)
         libvlc_exception_init(&ex);
 
         libvlc_media_player_set_rate(p_md, rate, &ex);
-        if( ! libvlc_exception_raised(&ex) )
-        {
-            return NOERROR;
-        }
-        _p_instance->setErrorInfo(IID_IVLCControl,
-                     libvlc_exception_get_message(&ex));
-        libvlc_exception_clear(&ex);
-        return E_FAIL;
+        result = exception_bridge(&ex);
     }
     return result;
 };
@@ -425,14 +354,7 @@ STDMETHODIMP VLCControl::toggleMute(void)
         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;
+        result = exception_bridge(&ex);
     }
     return result;
 };
@@ -810,20 +732,17 @@ STDMETHODIMP VLCControl::addTarget(BSTR uri, VARIANT options, enum VLCPlaylistMo
         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;
 };
@@ -842,14 +761,7 @@ STDMETHODIMP VLCControl::get_PlaylistIndex(int *index)
         libvlc_exception_init(&ex);
 
         *index = _p_instance->playlist_get_current_index(&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;
+        result = exception_bridge(&ex);
     }
     return result;
 };
@@ -863,14 +775,7 @@ STDMETHODIMP VLCControl::get_PlaylistCount(int *count)
     libvlc_exception_init(&ex);
 
     *count = _p_instance->playlist_count(&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 exception_bridge(&ex);
 };
 
 STDMETHODIMP VLCControl::playlistNext(void)
@@ -883,14 +788,7 @@ STDMETHODIMP VLCControl::playlistNext(void)
         libvlc_exception_init(&ex);
 
         _p_instance->playlist_next(&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;
+        result = exception_bridge(&ex);
     }
     return result;
 };
@@ -905,14 +803,7 @@ STDMETHODIMP VLCControl::playlistPrev(void)
         libvlc_exception_init(&ex);
 
         _p_instance->playlist_prev(&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;
+        result = exception_bridge(&ex);
     }
     return result;
 };
@@ -927,14 +818,7 @@ STDMETHODIMP VLCControl::playlistClear(void)
         libvlc_exception_init(&ex);
 
         _p_instance->playlist_clear(&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;
+        result = exception_bridge(&ex);
     }
     return result;
 };
index fa19b31fac53c8fffaa162fec1231de5fc39e906..35e8fde8b7a654540e769a95f71b77e46885dcb7 100644 (file)
@@ -15,9 +15,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.
  *****************************************************************************/
 
 #ifndef _VLCCONTROL_H_
@@ -29,7 +29,8 @@ class VLCControl : public IVLCControl
 {
 public:
 
-    VLCControl(VLCPlugin *p_instance) :  _p_instance(p_instance), _p_typeinfo(NULL) {};
+    VLCControl(VLCPlugin *p_instance):
+        _p_instance(p_instance), _p_typeinfo(NULL) { }
     virtual ~VLCControl();
 
     // IUnknown methods
@@ -46,10 +47,12 @@ public:
             return NOERROR;
         }
         return _p_instance->pUnkOuter->QueryInterface(riid, ppv);
-    };
+    }
 
-    STDMETHODIMP_(ULONG) AddRef(void) { return _p_instance->pUnkOuter->AddRef(); };
-    STDMETHODIMP_(ULONG) Release(void) { return _p_instance->pUnkOuter->Release(); };
+    STDMETHODIMP_(ULONG) AddRef(void)
+        { return _p_instance->pUnkOuter->AddRef(); }
+    STDMETHODIMP_(ULONG) Release(void)
+        { return _p_instance->pUnkOuter->Release(); }
 
     // IDispatch methods
     STDMETHODIMP GetTypeInfoCount(UINT*);
@@ -98,6 +101,15 @@ public:
 private:
 
     HRESULT      getTypeInfo();
+    HRESULT      exception_bridge(libvlc_exception_t *ex)
+    {
+        if( ! libvlc_exception_raised(ex) )
+            return NOERROR;
+        _p_instance->setErrorInfo(IID_IVLCControl,
+                                  libvlc_exception_get_message(ex));
+        libvlc_exception_clear(ex);
+        return E_FAIL;
+    }
 
     VLCPlugin *_p_instance;
     ITypeInfo *_p_typeinfo;