From: RĂ©mi Denis-Courmont Date: Sat, 7 Mar 2009 18:56:01 +0000 (+0200) Subject: dialog_Login: simple replacement for intf_UserLoginPassword X-Git-Tag: 1.0.0-pre1~238 X-Git-Url: https://git.sesse.net/?a=commitdiff_plain;h=b47ec4014eeebe33064d2e154d7ae679f7f0c22f;p=vlc dialog_Login: simple replacement for intf_UserLoginPassword --- diff --git a/include/vlc_dialog.h b/include/vlc_dialog.h index 9758243b6c..7f06843aa1 100644 --- a/include/vlc_dialog.h +++ b/include/vlc_dialog.h @@ -64,6 +64,21 @@ void dialog_FatalWait (vlc_object_t *obj, const char *title, #define dialog_FatalWait(o, t, ...) \ dialog_FatalWait(VLC_OBJECT(o), t, __VA_ARGS__) +/** + * A login dialog. + */ +typedef struct dialog_login_t +{ + const char *title; + const char *message; + char **username; + char **password; +} dialog_login_t; + +VLC_EXPORT( void, dialog_Login, (vlc_object_t *, char **, char **, const char *, const char *) ); +#define dialog_Login(o, u, p, t, m) \ + dialog_Login(VLC_OBJECT(o), u, p, t, m) + VLC_EXPORT( int, dialog_Register, (vlc_object_t *) ); VLC_EXPORT( int, dialog_Unregister, (vlc_object_t *) ); #define dialog_Register(o) dialog_Register(VLC_OBJECT(o)) diff --git a/src/interface/dialog.c b/src/interface/dialog.c index 29a0466fa3..7763b8c4e6 100644 --- a/src/interface/dialog.c +++ b/src/interface/dialog.c @@ -92,6 +92,15 @@ static vlc_object_t *dialog_GetProvider (vlc_object_t *obj) return provider; } +/** + * Sends an error message through the user interface (if any). + * @param obj the VLC object emitting the error + * @param modal whether to wait for user to acknowledge the error + * before returning control to the caller + * @param title title of the error dialog + * @param fmt format string for the error message + * @param ap parameters list for the formatted error message + */ void dialog_VFatal (vlc_object_t *obj, bool modal, const char *title, const char *fmt, va_list ap) { @@ -108,11 +117,42 @@ void dialog_VFatal (vlc_object_t *obj, bool modal, const char *title, return; } - if (vasprintf (&text, fmt, ap) == -1) + if (vasprintf (&text, fmt, ap) != -1) + { + dialog_fatal_t dialog = { title, text, modal, }; + var_SetAddress (provider, "dialog-fatal", &dialog); + free (text); + } + vlc_object_release (provider); +} + +#undef dialog_Login +/** + * Requests a username and password through the user interface. + * @param obj the VLC object requesting credential informations + * @param username a pointer to the specified username [OUT] + * @param password a pointer to the specified password [OUT] + * @param title title for the dialog + * @param text text for the dialog + * @return Nothing. If a user name resp. a password was specified, + * it will be returned as a heap-allocated character array + * into the username resp password pointer. Those must be freed with free(). + * Otherwise *username resp *password will be NULL. + */ +void dialog_Login (vlc_object_t *obj, char **username, char **password, + const char *title, const char *text) +{ + assert ((username != NULL) && (password != NULL)); + + *username = *password = NULL; + if (obj->i_flags & OBJECT_FLAGS_NOINTERACT) + return; + + vlc_object_t *provider = dialog_GetProvider (obj); + if (provider == NULL) return; - dialog_fatal_t dialog = { title, text, modal, }; - var_SetAddress (provider, "dialog-fatal", &dialog); - free (text); + dialog_login_t dialog = { title, text, username, password, }; + var_SetAddress (provider, "dialog-login", &dialog); vlc_object_release (provider); } diff --git a/src/libvlccore.sym b/src/libvlccore.sym index 9892b39625..2e1c19ebf9 100644 --- a/src/libvlccore.sym +++ b/src/libvlccore.sym @@ -102,6 +102,7 @@ decode_URI_duplicate demux_PacketizerDestroy demux_PacketizerNew demux_vaControlHelper +dialog_Login dialog_Register dialog_Unregister dialog_VFatal