[vlc-devel] [PATCH 2/3] playlist: add a toggle to shutdown the computer after the current playlist

Ludovic Fauvet etix at videolan.org
Wed Apr 17 12:46:35 CEST 2013


---
 src/libvlc-module.c   |  5 +++++
 src/playlist/engine.c |  1 +
 src/playlist/thread.c | 11 ++++++++++-
 3 files changed, 16 insertions(+), 1 deletion(-)

diff --git a/src/libvlc-module.c b/src/libvlc-module.c
index 4bd0227..f784591 100644
--- a/src/libvlc-module.c
+++ b/src/libvlc-module.c
@@ -1161,6 +1161,10 @@ static const char *const ppsz_albumart_descriptions[] =
 #define PAE_LONGTEXT N_( \
     "Exit if there are no more items in the playlist." )
 
+#define PAOFF_TEXT N_("Play and shutdown")
+#define PAOFF_LONGTEXT N_( \
+    "Shutdown the computer if there are no more items in the playlist." )
+
 #define PAP_TEXT N_("Play and pause")
 #define PAP_LONGTEXT N_( \
     "Pause each item in the playlist on the last frame." )
@@ -2025,6 +2029,7 @@ vlc_module_begin ()
         change_short('R')
         change_safe()
     add_bool( "play-and-exit", 0, PAE_TEXT, PAE_LONGTEXT, false )
+    add_bool( "play-and-shutdown", 0, PAOFF_TEXT, PAOFF_LONGTEXT, false )
     add_bool( "play-and-stop", 0, PAS_TEXT, PAS_LONGTEXT, false )
         change_safe()
     add_bool( "play-and-pause", 0, PAP_TEXT, PAP_LONGTEXT, true )
diff --git a/src/playlist/engine.c b/src/playlist/engine.c
index a80c3ef..a86d2af 100644
--- a/src/playlist/engine.c
+++ b/src/playlist/engine.c
@@ -485,6 +485,7 @@ static void VariablesInit( playlist_t *p_playlist )
     var_Create( p_playlist, "playlist-autostart", VLC_VAR_BOOL | VLC_VAR_DOINHERIT );
     var_Create( p_playlist, "play-and-stop", VLC_VAR_BOOL | VLC_VAR_DOINHERIT );
     var_Create( p_playlist, "play-and-exit", VLC_VAR_BOOL | VLC_VAR_DOINHERIT );
+    var_Create( p_playlist, "play-and-shutdown", VLC_VAR_BOOL | VLC_VAR_DOINHERIT );
     var_Create( p_playlist, "random", VLC_VAR_BOOL | VLC_VAR_DOINHERIT );
     var_AddCallback( p_playlist, "random", RandomCallback, NULL );
     var_Create( p_playlist, "repeat", VLC_VAR_BOOL | VLC_VAR_DOINHERIT );
diff --git a/src/playlist/thread.c b/src/playlist/thread.c
index 9bfbc3c..1f5092c 100644
--- a/src/playlist/thread.c
+++ b/src/playlist/thread.c
@@ -33,6 +33,7 @@
 #include <vlc_interface.h>
 #include <vlc_playlist.h>
 #include <vlc_rand.h>
+#include <vlc_os.h>
 #include "stream_output/stream_output.h"
 #include "playlist_internal.h"
 
@@ -492,7 +493,15 @@ static void LoopRequest( playlist_t *p_playlist, int i_status )
     msg_Dbg( p_playlist, "nothing to play" );
     p_sys->status.i_status = PLAYLIST_STOPPED;
 
-    if( var_GetBool( p_playlist, "play-and-exit" ) )
+    if( var_GetBool( p_playlist, "play-and-shutdown" ) )
+    {
+        msg_Info( p_playlist, "end of playlist, shutting down" );
+        if( !vlc_power_off() )
+            msg_Err( p_playlist, "unable to shutdown the computer");
+        else
+            libvlc_Quit( p_playlist->p_libvlc );
+    }
+    else if( var_GetBool( p_playlist, "play-and-exit" ) )
     {
         msg_Info( p_playlist, "end of playlist, exiting" );
         libvlc_Quit( p_playlist->p_libvlc );
-- 
1.8.2




More information about the vlc-devel mailing list