Provide the exception code, handle lack of message.
[vlc.git] / bindings / cil / src / exception.cs
index 24b96fe..2b3118f 100644 (file)
@@ -32,6 +32,18 @@ namespace VideoLAN.LibVLC
      */
     public class VLCException : Exception
     {
+        int code;
+        /**
+         * VLC exception code.
+         */
+        public int Code
+        {
+            get
+            {
+                return code;
+            }
+        }
+
         /**
          * Creates a managed VLC exception.
          */
@@ -57,14 +69,30 @@ namespace VideoLAN.LibVLC
            : base (message, inner)
         {
         }
-    };
 
-    /**
-     * @section Internals
-     */
+        /**
+         * Creates a VLC exception
+         * @param code VLC exception code
+         * @param message VLC exception message
+         */
+        public VLCException (int code, string message) : base (message)
+        {
+            this.code = code;
+        }
+
+        /**
+         * Creates a VLC exception
+         * @param code VLC exception code
+         */
+        public VLCException (int code) : base ()
+        {
+            this.code = code;
+        }
+    };
 
     /**
-     * libvlc_exception_t: structure for unmanaged LibVLC exceptions
+     * @brief NativeException: CIL representation for libvlc_exception_t.
+     * @ingroup Internals
      */
     [StructLayout (LayoutKind.Sequential)]
     public sealed class NativeException : IDisposable
@@ -74,15 +102,15 @@ namespace VideoLAN.LibVLC
         IntPtr message;
 
         [DllImport ("libvlc.dll", EntryPoint="libvlc_exception_init")]
-        static extern void Init (NativeException e);
+        private static extern void Init (NativeException e);
         [DllImport ("libvlc.dll", EntryPoint="libvlc_exception_clear")]
-        static extern void Clear (NativeException e);
+        private static extern void Clear (NativeException e);
         /*[DllImport ("libvlc.dll",
                     EntryPoint="libvlc_exception_raised")]
-        static extern int Raised (NativeException e);*/
+        private static extern int Raised (NativeException e);*/
         [DllImport ("libvlc.dll",
                     EntryPoint="libvlc_exception_get_message")]
-        static extern IntPtr GetMessage (NativeException e);
+        private static extern IntPtr GetMessage (NativeException e);
 
         public NativeException ()
         {
@@ -95,11 +123,16 @@ namespace VideoLAN.LibVLC
          */
         public void Raise ()
         {
+            if (raised == 0)
+                return;
+
+            string msg = U8String.FromNative (message);
             try
             {
-                string msg = U8String.FromNative (GetMessage (this));
                 if (msg != null)
-                    throw new VLCException (msg);
+                    throw new VLCException (code, msg);
+                else
+                    throw new VLCException (code);
             }
             finally
             {