]> git.sesse.net Git - vlc/blobdiff - src/misc/messages.c
Use var_Inherit* instead of var_CreateGet*.
[vlc] / src / misc / messages.c
index 3541eaf39a7e9884ef8d9b1322f0c35401f1ec40..063ae608af898377900788fa088232727f9978fd 100644 (file)
 #include <vlc_common.h>
 
 #include <stdarg.h>                                       /* va_list for BSD */
-#include <locale.h>
+#ifdef __APPLE__
+# include <xlocale.h>
+#elif defined(HAVE_LOCALE_H)
+# include <locale.h>
+#endif
 #include <errno.h>                                                  /* errno */
 
 #ifdef WIN32
@@ -78,7 +82,6 @@ static uintptr_t banks = 0;
 #   define vlc_va_copy(dest,src) (dest)=(src)
 #endif
 
-#define QUEUE priv->msg_bank
 static inline msg_bank_t *libvlc_bank (libvlc_int_t *inst)
 {
     return (libvlc_priv (inst))->msg_bank;
@@ -103,11 +106,6 @@ struct msg_bank_t
     int i_sub;
     msg_subscription_t **pp_sub;
 
-    /* Logfile for WinCE */
-#ifdef UNDER_CE
-    FILE *logfile;
-#endif
-
     locale_t locale; /**< C locale for error messages */
     vlc_dictionary_t enabled_objects; ///< Enabled objects
     bool all_objects_enabled; ///< Should we print all objects?
@@ -131,14 +129,6 @@ msg_bank_t *msg_Create (void)
     /* C locale to get error messages in English in the logs */
     bank->locale = newlocale (LC_MESSAGES_MASK, "C", (locale_t)0);
 
-#ifdef UNDER_CE
-    QUEUE.logfile =
-        CreateFile( L"vlc-log.txt", GENERIC_WRITE,
-                    FILE_SHARE_READ|FILE_SHARE_WRITE, NULL,
-                    CREATE_ALWAYS, 0, NULL );
-    SetFilePointer( QUEUE.logfile, 0, NULL, FILE_END );
-#endif
-
     vlc_mutex_lock( &msg_stack_lock );
     if( banks++ == 0 )
         vlc_threadvar_create( &msg_context, cleanup_msg_context );
@@ -152,6 +142,7 @@ msg_bank_t *msg_Create (void)
 static void const * kObjectPrintingEnabled = &kObjectPrintingEnabled;
 static void const * kObjectPrintingDisabled = &kObjectPrintingDisabled;
 
+
 #undef msg_EnableObjectPrinting
 void msg_EnableObjectPrinting (vlc_object_t *obj, const char * psz_object)
 {
@@ -198,9 +189,6 @@ void msg_Destroy (msg_bank_t *bank)
         vlc_threadvar_delete( &msg_context );
     vlc_mutex_unlock( &msg_stack_lock );
 
-#ifdef UNDER_CE
-    CloseHandle( QUEUE.logfile );
-#endif
     if (bank->locale != (locale_t)0)
        freelocale (bank->locale);
 
@@ -215,6 +203,7 @@ struct msg_subscription_t
     libvlc_int_t   *instance;
     msg_callback_t  func;
     msg_cb_data_t  *opaque;
+    int             verbosity;
 };
 
 /**
@@ -237,6 +226,7 @@ msg_subscription_t *msg_Subscribe (libvlc_int_t *instance, msg_callback_t cb,
     sub->instance = instance;
     sub->func = cb;
     sub->opaque = opaque;
+    sub->verbosity = 2; /* by default, give all the messages */
 
     msg_bank_t *bank = libvlc_bank (instance);
     vlc_rwlock_wrlock (&bank->lock);
@@ -260,6 +250,18 @@ void msg_Unsubscribe (msg_subscription_t *sub)
     free (sub);
 }
 
+void msg_SubscriptionSetVerbosity( msg_subscription_t *sub, const int i_verbosity )
+{
+    if( i_verbosity < 0 || i_verbosity > 2 ) return;
+
+    msg_bank_t *bank = libvlc_bank ( sub->instance );
+
+    vlc_rwlock_wrlock (&bank->lock);
+
+    sub->verbosity = i_verbosity;
+
+    vlc_rwlock_unlock (&bank->lock);
+}
 /*****************************************************************************
  * msg_*: print a message
  *****************************************************************************
@@ -455,6 +457,33 @@ void msg_GenericVa (vlc_object_t *p_this, int i_type,
     for (int i = 0; i < bank->i_sub; i++)
     {
         msg_subscription_t *sub = bank->pp_sub[i];
+        libvlc_priv_t *priv = libvlc_priv( sub->instance );
+        msg_bank_t *bank = priv->msg_bank;
+        void *val = vlc_dictionary_value_for_key( &bank->enabled_objects,
+                                                  p_item->psz_module );
+        if( val == kObjectPrintingDisabled ) continue;
+        if( val != kObjectPrintingEnabled  ) /*if not allowed */
+        {
+            val = vlc_dictionary_value_for_key( &bank->enabled_objects,
+                                                 p_item->psz_object_type );
+            if( val == kObjectPrintingDisabled ) continue;
+            if( val == kObjectPrintingEnabled  ); /* Allowed */
+            else if( !bank->all_objects_enabled ) continue;
+        }
+        switch( p_item->i_type )
+        {
+            case VLC_MSG_INFO:
+            case VLC_MSG_ERR:
+                if( sub->verbosity < 0 ) continue;
+                break;
+            case VLC_MSG_WARN:
+                if( sub->verbosity < 1 ) continue;
+                break;
+            case VLC_MSG_DBG:
+                if( sub->verbosity < 2 ) continue;
+                break;
+        }
+
         sub->func (sub->opaque, p_item, 0);
     }
     vlc_rwlock_unlock (&bank->lock);
@@ -468,16 +497,13 @@ void msg_GenericVa (vlc_object_t *p_this, int i_type,
  *****************************************************************************/
 static void PrintMsg ( vlc_object_t * p_this, msg_item_t * p_item )
 {
-#   define COL(x)  "\033[" #x ";1m"
-#   define RED     COL(31)
-#   define GREEN   COL(32)
-#   define YELLOW  COL(33)
-#   define WHITE   COL(0)
+#   define COL(x,y)  "\033[" #x ";" #y "m"
+#   define RED     COL(31,1)
+#   define GREEN   COL(32,1)
+#   define YELLOW  COL(0,33)
+#   define WHITE   COL(0,1)
 #   define GRAY    "\033[0m"
 
-#ifdef UNDER_CE
-    int i_dummy;
-#endif
     static const char ppsz_type[4][9] = { "", " error", " warning", " debug" };
     static const char ppsz_color[4][8] = { WHITE, RED, YELLOW, GRAY };
     const char *psz_object;
@@ -520,19 +546,6 @@ static void PrintMsg ( vlc_object_t * p_this, msg_item_t * p_item )
             return;
     }
 
-#ifdef UNDER_CE
-#   define CE_WRITE(str) WriteFile( QUEUE.logfile, \
-                                    str, strlen(str), &i_dummy, NULL );
-    CE_WRITE( p_item->psz_module );
-    CE_WRITE( " " );
-    CE_WRITE( psz_object );
-    CE_WRITE( ppsz_type[i_type] );
-    CE_WRITE( ": " );
-    CE_WRITE( p_item->psz_msg );
-    CE_WRITE( "\r\n" );
-    FlushFileBuffers( QUEUE.logfile );
-
-#else
     int canc = vlc_savecancel ();
     /* Send the message to stderr */
     utf8_fprintf( stderr, "[%s%p%s] %s%s%s %s%s: %s%s%s\n",
@@ -547,11 +560,10 @@ static void PrintMsg ( vlc_object_t * p_this, msg_item_t * p_item )
                   p_item->psz_msg,
                   priv->b_color ? GRAY : "" );
 
-#   if defined(WIN32)
+#ifdef WIN32
     fflush( stderr );
-#   endif
-    vlc_restorecancel (canc);
 #endif
+    vlc_restorecancel (canc);
 }
 
 static msg_context_t* GetContext(void)
@@ -568,14 +580,6 @@ static msg_context_t* GetContext(void)
     return p_ctx;
 }
 
-void msg_StackDestroy (void *data)
-{
-    msg_context_t *p_ctx = data;
-
-    free (p_ctx->psz_message);
-    free (p_ctx);
-}
-
 void msg_StackSet( int i_code, const char *psz_message, ... )
 {
     va_list ap;