Переглянути джерело

Prevent overwriting an existing output file

Godzil 7 роки тому
батько
коміт
714a528f8b
1 змінених файлів з 29 додано та 3 видалено
  1. 29 3
      src/episode.ts

+ 29 - 3
src/episode.ts

@@ -33,14 +33,40 @@ function complete(message: string, begin: number, done: (err: Error, ign: boolea
   done(null, false);
 }
 
+/**
+ * Check if a file exist..
+ */
+function fileExist(path: string) {
+  try
+  {
+    fs.statSync(path); 
+    return true; 
+  } 
+  catch (e) { }
+  return false;
+}
+
 /**
  * Downloads the subtitle and video.
  */
 function download(config: IConfig, page: IEpisodePage, player: IEpisodePlayer, done: (err: Error, ign: boolean) => void) {
   var series = config.series || page.series;
   series = series.replace("/","_").replace("'","_");
-  var fileName = name(config, page, series).replace("/","_").replace("'","_");
+  var fileName = name(config, page, series, "").replace("/","_").replace("'","_");
   var filePath = path.join(config.output || process.cwd(), series, fileName);
+  if (fileExist(filePath + ".mkv"))
+  {
+    var count = 0;
+    console.info("File '"+fileName+"' already exist...");
+    do
+    {
+      count = count + 1;
+      fileName = name(config, page, series, "-" + count).replace("/","_").replace("'","_");
+      filePath = path.join(config.output || process.cwd(), series, fileName);
+    } while(fileExist(filePath + ".mkv"))
+    console.info("Renaming to '"+fileName+"'...");
+  }
+
   mkdirp(path.dirname(filePath), (err: Error) => {
     if (err) return done(err, false);
     downloadSubtitle(config, player, filePath, err => {
@@ -105,13 +131,13 @@ function downloadVideo(config: IConfig,
 /**
  * Names the file based on the config, page, series and tag.
  */
-function name(config: IConfig, page: IEpisodePage, series: string) {
+function name(config: IConfig, page: IEpisodePage, series: string, extra: string) {
 	var episodeNum = parseInt(page.episode, 10);
 	var volumeNum = parseInt(page.volume, 10);
   var episode = (episodeNum < 10 ? '0' : '') + page.episode;
   var volume = (volumeNum < 10 ? '0' : '') + page.volume;
   var tag = config.tag || 'CrunchyRoll';
-  return series + ' ' + volume + 'x' + episode + ' [' + tag + ']';  
+  return series + ' ' + volume + 'x' + episode + extra + ' [' + tag + ']';  
 }
 
 /**