Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
V
vlc
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Redmine
Redmine
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Operations
Operations
Metrics
Environments
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
videolan
vlc
Commits
6c464c3c
Commit
6c464c3c
authored
Dec 06, 2006
by
Rafaël Carré
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Simplification of one-instance mode
It now checks if a capable "Media Player" is running, not only VLC.
parent
9dc29b4f
Changes
3
Show whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
110 additions
and
177 deletions
+110
-177
extras/dbus-vlc.py
extras/dbus-vlc.py
+7
-0
modules/control/dbus.c
modules/control/dbus.c
+0
-3
src/libvlc-common.c
src/libvlc-common.c
+103
-174
No files found.
extras/dbus-vlc.py
View file @
6c464c3c
...
...
@@ -20,6 +20,13 @@
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
#
#
# NOTE: this controller is a SAMPLE, and thus doesn't implement all the D-Bus Media Player specification. http://wiki.videolan.org/index.php/DBus-spec
# This is an unfinished document (on the 12/06/2006) and has been designed to be as general as possible.
# So don't expect that much from this, but basic capabilities should work out of the box (Play/Pause/Next/Add)
#
# Also notice it has been designed first for a previous specificaiton, and thus some code may not work/be disabled
#
import
dbus
import
dbus.glib
import
gtk
...
...
modules/control/dbus.c
View file @
6c464c3c
...
...
@@ -573,9 +573,6 @@ static int Open( vlc_object_t *p_this )
return
VLC_EGENERIC
;
}
/* we unregister the object /, registered by libvlc */
dbus_connection_unregister_object_path
(
p_conn
,
"/"
);
/* we register the objects */
dbus_connection_register_object_path
(
p_conn
,
VLC_DBUS_ROOT_PATH
,
&
vlc_dbus_root_vtable
,
p_this
);
...
...
src/libvlc-common.c
View file @
6c464c3c
...
...
@@ -218,40 +218,6 @@ libvlc_int_t * libvlc_InternalCreate( void )
return
p_libvlc
;
}
/*
* D-Bus callback needed in libvlc_InternalInit()
*/
#ifdef HAVE_DBUS_3
/* Handling of messages received on / object */
static
DBusHandlerResult
handle_root
(
DBusConnection
*
p_conn
,
DBusMessage
*
p_from
,
void
*
p_data
)
{
DBusMessage
*
p_msg
=
dbus_message_new_method_return
(
p_from
);
if
(
!
p_msg
)
return
DBUS_HANDLER_RESULT_NEED_MEMORY
;
DBusMessageIter
args
;
dbus_message_iter_init_append
(
p_msg
,
&
args
);
char
*
p_root
=
malloc
(
strlen
(
"<node name='/'></node>"
)
);
if
(
!
p_root
)
return
DBUS_HANDLER_RESULT_NEED_MEMORY
;
sprintf
(
p_root
,
"<node name='/'></node>"
);
if
(
!
dbus_message_iter_append_basic
(
&
args
,
DBUS_TYPE_STRING
,
&
p_root
)
)
return
DBUS_HANDLER_RESULT_NEED_MEMORY
;
if
(
!
dbus_connection_send
(
p_conn
,
p_msg
,
NULL
)
)
return
DBUS_HANDLER_RESULT_NEED_MEMORY
;
dbus_connection_flush
(
p_conn
);
dbus_message_unref
(
p_msg
);
return
DBUS_HANDLER_RESULT_HANDLED
;
}
/* vtable passed to dbus_connection_register_object_path() */
static
DBusObjectPathVTable
vlc_dbus_root_vtable
=
{
NULL
,
handle_root
,
NULL
,
NULL
,
NULL
,
NULL
};
#endif
/**
* Initialize a libvlc instance
* This function initializes a previously allocated libvlc instance:
...
...
@@ -608,6 +574,8 @@ int libvlc_InternalInit( libvlc_int_t *p_libvlc, int i_argc, char *ppsz_argv[] )
/* FIXME: could be replaced by using Unix sockets */
#ifdef HAVE_DBUS_3
if
(
config_GetInt
(
p_libvlc
,
"one-instance"
)
)
{
/* Initialise D-Bus interface, check for other instances */
DBusConnection
*
p_conn
;
DBusError
dbus_error
;
...
...
@@ -620,26 +588,11 @@ int libvlc_InternalInit( libvlc_int_t *p_libvlc, int i_argc, char *ppsz_argv[] )
p_conn
=
dbus_bus_get
(
DBUS_BUS_SESSION
,
&
dbus_error
);
if
(
!
p_conn
)
{
msg_Err
(
p_libvlc
,
"Failed to connect to the
D-Bus session daemon: %s"
,
msg_Err
(
p_libvlc
,
"Failed to connect to
D-Bus session daemon: %s"
,
dbus_error
.
message
);
dbus_error_free
(
&
dbus_error
);
}
else
{
/* we request the service org.videolan.vlc */
i_dbus_service
=
dbus_bus_request_name
(
p_conn
,
"org.videolan.vlc"
,
0
,
&
dbus_error
);
if
(
dbus_error_is_set
(
&
dbus_error
)
)
{
msg_Err
(
p_libvlc
,
"Error requesting org.videolan.vlc service: "
"%s
\n
"
,
dbus_error
.
message
);
dbus_error_free
(
&
dbus_error
);
}
else
{
if
(
i_dbus_service
!=
DBUS_REQUEST_NAME_REPLY_PRIMARY_OWNER
)
{
/* the name is already registered by another instance of vlc */
if
(
config_GetInt
(
p_libvlc
,
"one-instance"
)
)
{
/* check if a Media Player is available
* if not: D-Bus control is not enabled on the other
...
...
@@ -655,16 +608,13 @@ int libvlc_InternalInit( libvlc_int_t *p_libvlc, int i_argc, char *ppsz_argv[] )
if
(
p_test_reply
==
NULL
)
{
dbus_error_free
(
&
dbus_error
);
msg_Err
(
p_libvlc
,
"one instance mode has been "
"set but D-Bus control interface is not "
"enabled. Enable it and restart vlc, or "
"disable one instance mode."
);
msg_Dbg
(
p_libvlc
,
"No Media Player is running. "
"Continuing normally."
);
}
else
{
dbus_message_unref
(
p_test_reply
);
msg_Warn
(
p_libvlc
,
"Another vlc instance exists: will now exit"
);
msg_Warn
(
p_libvlc
,
"Another Media Player is running. Exiting"
);
int
i_input
;
DBusMessage
*
p_dbus_msg
;
...
...
@@ -674,7 +624,7 @@ int libvlc_InternalInit( libvlc_int_t *p_libvlc, int i_argc, char *ppsz_argv[] )
for
(
i_input
=
optind
;
i_input
<
i_argc
;
i_input
++
)
{
msg_Dbg
(
p_libvlc
,
"Give %s to other vlc
\n
"
,
msg_Dbg
(
p_libvlc
,
"Adds %s to the running Media Player
"
,
ppsz_argv
[
i_input
]
);
p_dbus_msg
=
dbus_message_new_method_call
(
...
...
@@ -685,20 +635,18 @@ int libvlc_InternalInit( libvlc_int_t *p_libvlc, int i_argc, char *ppsz_argv[] )
{
msg_Err
(
p_libvlc
,
"D-Bus problem"
);
system_End
(
p_libvlc
);
exit
(
0
);
exit
(
VLC_ETIMEOUT
);
}
/* append MRLs */
dbus_message_iter_init_append
(
p_dbus_msg
,
&
dbus_args
);
dbus_message_iter_init_append
(
p_dbus_msg
,
&
dbus_args
);
if
(
!
dbus_message_iter_append_basic
(
&
dbus_args
,
DBUS_TYPE_STRING
,
&
ppsz_argv
[
i_input
]
)
)
DBUS_TYPE_STRING
,
&
ppsz_argv
[
i_input
]
)
)
{
msg_Err
(
p_libvlc
,
"Out of memory"
);
dbus_message_unref
(
p_dbus_msg
);
system_End
(
p_libvlc
);
exit
(
0
);
exit
(
VLC_ENOMEM
);
}
b_play
=
TRUE
;
if
(
config_GetInt
(
p_libvlc
,
"playlist-enqueue"
)
)
...
...
@@ -709,7 +657,7 @@ int libvlc_InternalInit( libvlc_int_t *p_libvlc, int i_argc, char *ppsz_argv[] )
msg_Err
(
p_libvlc
,
"Out of memory"
);
dbus_message_unref
(
p_dbus_msg
);
system_End
(
p_libvlc
);
exit
(
0
);
exit
(
VLC_ENOMEM
);
}
/* send message and get a handle for a reply */
...
...
@@ -719,7 +667,7 @@ int libvlc_InternalInit( libvlc_int_t *p_libvlc, int i_argc, char *ppsz_argv[] )
msg_Err
(
p_libvlc
,
"D-Bus problem"
);
dbus_message_unref
(
p_dbus_msg
);
system_End
(
p_libvlc
);
exit
(
0
);
exit
(
VLC_ETIMEOUT
);
}
if
(
NULL
==
p_dbus_pending
)
...
...
@@ -727,7 +675,7 @@ int libvlc_InternalInit( libvlc_int_t *p_libvlc, int i_argc, char *ppsz_argv[] )
msg_Err
(
p_libvlc
,
"D-Bus problem"
);
dbus_message_unref
(
p_dbus_msg
);
system_End
(
p_libvlc
);
exit
(
0
);
exit
(
VLC_ETIMEOUT
);
}
dbus_connection_flush
(
p_conn
);
dbus_message_unref
(
p_dbus_msg
);
...
...
@@ -738,31 +686,12 @@ int libvlc_InternalInit( libvlc_int_t *p_libvlc, int i_argc, char *ppsz_argv[] )
/* bye bye */
system_End
(
p_libvlc
);
exit
(
0
);
exit
(
VLC_SUCCESS
);
}
}
/* we're not in one-instance mode */
else
{
msg_Dbg
(
p_libvlc
,
"org.videolan.vlc is already registered "
"on the session bus
\n
"
);
}
}
/* the named is owned by something else */
else
{
/* register "/" object */
if
(
!
dbus_connection_register_object_path
(
p_conn
,
"/"
,
&
vlc_dbus_root_vtable
,
NULL
)
)
{
msg_Err
(
p_libvlc
,
"Out of memory"
);
}
msg_Dbg
(
p_libvlc
,
"We are the primary owner of org.videolan.vlc on the "
" session bus"
);
}
}
/* no error when requesting the name on the bus */
/* we unreference the connection when we've finished with it */
dbus_connection_unref
(
p_conn
);
}
/* ( p_conn != NULL ) */
}
#endif
/*
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment