[vlc-devel] [RFC] autosaving config options.

Derk-Jan Hartman hartman at videolan.org
Wed Aug 27 20:25:59 CEST 2008

On 26 aug 2008, at 08:45, Rémi Denis-Courmont wrote:
> On Mon, 25 Aug 2008 20:00:22 +0200, Derk-Jan Hartman <hartman at videolan.org 
> >
> wrote:
>> You want to expose the config item->saved (Currently only item->value
>> is exposed) ? So that the preferences of Qt4 and OSX would only show
>> the Saved values, instead of the "current values" ? Such that when  
>> you
>> change the preferences and save them, only the original values are
>> saved, and not something that was changed on the fly ?
> Yes. One problem nowadays is that you may end up "saving the command  
> line"
> if you save the preferences.

Yes i'm aware.

>>> And then, there's the persistent lack of clear policy for using
>>> config_* vs
>>> var_*.
>> gibalou was gonna merge the two at one time. But he never described
>> how that would be done. Since it didn't happen, everyone started  
>> using
>> config_Put again to save options.
> I fail to see why we should change config_Put*. However, we COULD use
> var_Create/var_Get for command line options, and get rid of the  
> "current
> configuration" altogether. That brings us to my real problem with  
> config_.*
> vs var_.*: there is no consistent policy for using config_Get* or
> var_CreateGet*
>> Oh, and then we STILL need a way to make command-line options
>> unsaveable .......
>> By creating/setting variables at libvlc object level I guess, instead
>> of changing the values of the config itself.
> Yes. But then we need to replace all config_Get* invocations with
> var_(Create)Get, with the preferences UI being the only exception.

As a test I have made a few simple edits to try and implement this. In  
this process, I discovered that the playlist variables (and the input  
variables have the same issue btw) are initialized (in  
playlist_Create() ) before the playlist is attached to it's parent.  
This breaks the variable inheritance model.
After I moved the playlist attach call (now the last item in  
playlist_ThreadCreate() directly after the creating of the p_playlist  
object and before Initilization of the variables, I could successfully  
communicate commandline options to the interfaces (those options that  
actually already use variables of course)

diff --git a/src/config/cmdline.c b/src/config/cmdline.c
index 4ea2e6a..6bd320f 100644
--- a/src/config/cmdline.c
+++ b/src/config/cmdline.c
@@ -293,19 +293,25 @@ int __config_LoadCmdLine( vlc_object_t *p_this,  
int *pi_argc,
                      case CONFIG_ITEM_MODULE_LIST:
                      case CONFIG_ITEM_MODULE_LIST_CAT:
                      case CONFIG_ITEM_MODULE_CAT:
-                        config_PutPsz( p_this, psz_name, optarg );
+                        var_Create( p_this->p_libvlc, psz_name,  
VLC_VAR_STRING ); /* FIXME not everything is VLC_VAR_STRING */
+                        var_SetString( p_this->p_libvlc, psz_name,  
optarg );
                      case CONFIG_ITEM_INTEGER:
-                        config_PutInt( p_this, psz_name,  
strtol(optarg, 0, 0));
+                        var_Create( p_this->p_libvlc, psz_name,  
+                        var_SetInteger( p_this->p_libvlc, psz_name,  
strtol( optarg, 0, 0) );
                      case CONFIG_ITEM_FLOAT:
-                        config_PutFloat( p_this, psz_name,  
(float)atof(optarg) );
+                        var_Create( p_this->p_libvlc, psz_name,  
+                        var_SetFloat( p_this->p_libvlc, psz_name,  
(float)atof(optarg) );
                      case CONFIG_ITEM_KEY:
-                        config_PutInt( p_this, psz_name,  
ConfigStringToKey( optarg ) );
+                        var_Create( p_this->p_libvlc, psz_name,  
+                        var_SetInteger( p_this->p_libvlc, psz_name,  
ConfigStringToKey( optarg ) );
                      case CONFIG_ITEM_BOOL:
-                        config_PutInt( p_this, psz_name, !flag );
+msg_Dbg( p_this->p_libvlc, "now setting %s to %d", psz_name, !flag );
+                        var_Create( p_this->p_libvlc, psz_name,  
+                        var_SetBool( p_this->p_libvlc, psz_name, ! 
flag );

More information about the vlc-devel mailing list