]> git.sesse.net Git - vlc/blobdiff - modules/access_filter/timeshift.c
A bit of headers cleanup
[vlc] / modules / access_filter / timeshift.c
old mode 100755 (executable)
new mode 100644 (file)
index e7beaff..7ef7dce
  *
  * You should have received a copy of the GNU General Public License
  * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111, USA.
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
  *****************************************************************************/
 
 /*****************************************************************************
  * Preamble
  *****************************************************************************/
+#include <vlc/vlc.h>
+
+#include <stdio.h>
 #include <stdlib.h>
 
 #include <errno.h>
 
-#include <vlc/vlc.h>
-#include <vlc/input.h>
+#include <vlc_access.h>
+#include <vlc_charset.h>
+
 #include <unistd.h>
 
 /*****************************************************************************
@@ -40,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") );
@@ -58,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();
 
 /*****************************************************************************
@@ -110,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;
+        }
     }
 
     /* */
@@ -375,7 +395,7 @@ static int WriteBlockToFile( access_t *p_access, block_t *p_block )
 
         sprintf( p_sys->psz_filename, "%s%i.dat",
                  p_sys->psz_filename_base, p_sys->i_files );
-        file = fopen( p_sys->psz_filename, "w+b" );
+        file = utf8_fopen( p_sys->psz_filename, "w+b" );
 
         if( !file && p_sys->i_files < 2 )
         {
@@ -535,35 +555,42 @@ static char *GetTmpFilePath( access_t *p_access )
     char *psz_dir = var_GetString( p_access, "timeshift-dir" );
     char *psz_filename_base;
 
-    if( psz_dir && !*psz_dir )
+    if( ( psz_dir != NULL ) && ( psz_dir[0] == '\0' ) )
     {
         free( psz_dir );
-        psz_dir = 0;
+        psz_dir = NULL;
     }
 
-    if( !psz_dir )
+    if( psz_dir == NULL )
     {
 #ifdef WIN32
-        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;
 
-        psz_dir = malloc( MAX_PATH + 1 );
-        i_size = GetTempPath( MAX_PATH, psz_dir );
-        if( i_size <= 0 || i_size > MAX_PATH )
+        if (GetTempPathW (ret + 1, wdir) == 0)
         {
-            if( !getcwd( psz_dir, MAX_PATH ) ) strcpy( psz_dir, "c:" );
+            pwdir_free = pwdir = _wgetcwd (NULL, 0);
+            if (pwdir == NULL)
+                pwdir = L"C:";
         }
 
-        /* remove last \\ if any */
-        if( psz_dir[strlen(psz_dir)-1] == '\\' )
-            psz_dir[strlen(psz_dir)-1] = '\0';
-#else
+        psz_dir = FromWide (pwdir);
+        if (pwdir_free != NULL)
+            free (pwdir_free);
 
+        /* 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
     }
 
     asprintf( &psz_filename_base, "%s/vlc-timeshift-%d-%d-",
               psz_dir, getpid(), p_access->i_object_id );
+    free( psz_dir );
 
     return psz_filename_base;
 }