]> git.sesse.net Git - vlc/blobdiff - modules/access_filter/timeshift.c
Fix [17660]
[vlc] / modules / access_filter / timeshift.c
index 361534fcce7c089ed787f258ebe94d165fb58996..540a18d339d2099413dc94f97cdbf85538e950f3 100644 (file)
 /*****************************************************************************
  * Preamble
  *****************************************************************************/
+#include <vlc/vlc.h>
+
+#include <stdio.h>
 #include <stdlib.h>
 
 #include <errno.h>
 
-#include <vlc/vlc.h>
 #include <vlc/input.h>
 #include "charset.h"
 
@@ -42,11 +44,15 @@ static int  Open ( vlc_object_t * );
 static void Close( vlc_object_t * );
 
 #define GRANULARITY_TEXT N_("Timeshift granularity")
-#define GRANULARITY_LONGTEXT N_( "Size of the temporary files use to store " \
-  "the timeshifted stream." )
+/// \bug [String] typo
+#define GRANULARITY_LONGTEXT N_( "This is the size of the temporary files " \
+  "that will be used to store the timeshifted streams." )
 #define DIR_TEXT N_("Timeshift directory")
 #define DIR_LONGTEXT N_( "Directory used to store the timeshift temporary " \
   "files." )
+#define FORCE_TEXT N_("Force use of the timeshift module")
+#define FORCE_LONGTEXT N_("Force use of the timeshift module even if the " \
+  "access declares that it can control pace or pause." )
 
 vlc_module_begin();
     set_shortname( _("Timeshift") );
@@ -60,6 +66,8 @@ vlc_module_begin();
     add_integer( "timeshift-granularity", 50, NULL, GRANULARITY_TEXT,
                  GRANULARITY_LONGTEXT, VLC_TRUE );
     add_directory( "timeshift-dir", 0, 0, DIR_TEXT, DIR_LONGTEXT, VLC_FALSE );
+    add_bool( "timeshift-force", VLC_FALSE, NULL, FORCE_TEXT, FORCE_LONGTEXT,
+              VLC_FALSE );
 vlc_module_end();
 
 /*****************************************************************************
@@ -112,17 +120,27 @@ static int Open( vlc_object_t *p_this )
     access_sys_t *p_sys;
     vlc_bool_t b_bool;
 
-    /* Only work with not pace controled access */
-    if( access2_Control( p_src, ACCESS_CAN_CONTROL_PACE, &b_bool ) || b_bool )
+    var_Create( p_access, "timeshift-force",
+                VLC_VAR_BOOL | VLC_VAR_DOINHERIT );
+    if( var_GetBool( p_access, "timeshift-force" ) == VLC_TRUE )
     {
-        msg_Dbg( p_src, "ACCESS_CAN_CONTROL_PACE" );
-        return VLC_EGENERIC;
+        msg_Dbg( p_access, "Forcing use of timeshift even if access can control pace or pause" );
     }
-    /* Refuse access that can be paused */
-    if( access2_Control( p_src, ACCESS_CAN_PAUSE, &b_bool ) || b_bool )
+    else
     {
-        msg_Dbg( p_src, "ACCESS_CAN_PAUSE: timeshift useless" );
-        return VLC_EGENERIC;
+        /* Only work with not pace controled access */
+        if( access2_Control( p_src, ACCESS_CAN_CONTROL_PACE, &b_bool )
+            || b_bool )
+        {
+            msg_Dbg( p_src, "ACCESS_CAN_CONTROL_PACE: timeshift useless" );
+            return VLC_EGENERIC;
+        }
+        /* Refuse access that can be paused */
+        if( access2_Control( p_src, ACCESS_CAN_PAUSE, &b_bool ) || b_bool )
+        {
+            msg_Dbg( p_src, "ACCESS_CAN_PAUSE: timeshift useless" );
+            return VLC_EGENERIC;
+        }
     }
 
     /* */
@@ -546,21 +564,25 @@ static char *GetTmpFilePath( access_t *p_access )
     if( psz_dir == NULL )
     {
 #ifdef WIN32
-        char psz_local_dir[MAX_PATH];
-        int i_size;
+        DWORD ret = GetTempPathW (0, NULL);
+        wchar_t wdir[ret + 3]; // can at least old "C:" + nul
+        const wchar_t *pwdir = wdir;
+        wchar_t *pwdir_free = NULL;
 
-        i_size = GetTempPath( MAX_PATH, psz_local_dir );
-        if( i_size <= 0 || i_size > MAX_PATH )
+        if (GetTempPathW (ret + 1, wdir) == 0)
         {
-            if( !getcwd( psz_local_dir, MAX_PATH ) )
-                strcpy( psz_local_dir, "C:" );
+            pwdir_free = pwdir = _wgetcwd (NULL, 0);
+            if (pwdir == NULL)
+                pwdir = L"C:";
         }
 
-        psz_dir = FromLocaleDup( psz_local_dir );
+        psz_dir = FromWide (pwdir);
+        if (pwdir_free != NULL)
+            free (pwdir_free);
 
-        /* remove last \\ if any */
-        if( psz_dir[strlen(psz_dir)-1] == '\\' )
-            psz_dir[strlen(psz_dir)-1] = '\0';
+        /* remove trailing antislash if any */
+        if (psz_dir[strlen (psz_dir) - 1] == '\\')
+            psz_dir[strlen (psz_dir) - 1] = '\0';
 #else
         psz_dir = strdup( "/tmp" );
 #endif