summaryrefslogtreecommitdiff
path: root/recording
diff options
context:
space:
mode:
Diffstat (limited to 'recording')
-rw-r--r--recording/config.go5
-rw-r--r--recording/runner.go38
2 files changed, 35 insertions, 8 deletions
diff --git a/recording/config.go b/recording/config.go
index 76a6f3a..ff3ae2a 100644
--- a/recording/config.go
+++ b/recording/config.go
@@ -21,8 +21,9 @@ type TransportConfig struct {
}
type DownloadConfig struct {
- SaveDirectory string `mapstructure:"save_directory"`
- DiskWriteBufferBytes int `mapstructure:"disk_write_buffer_bytes"`
+ SaveDirectory string `mapstructure:"save_directory"`
+ DiskWriteBufferBytes int `mapstructure:"disk_write_buffer_bytes"`
+ UseSpecialExtNameBeforeFinishing bool `mapstructure:"use_special_ext_name_when_downloading"`
}
type WatchConfig struct {
diff --git a/recording/runner.go b/recording/runner.go
index 039b760..fddb562 100644
--- a/recording/runner.go
+++ b/recording/runner.go
@@ -25,6 +25,7 @@ type TaskResult struct {
}
const kReadChunkSize = 128 * 1024
+const kSpecialExtName = "partial"
// runTaskWithAutoRestart
// start a monitor&download task.
@@ -193,12 +194,37 @@ func record(
}
streamSource := urlInfo.Data.URLs[0]
- fileName := fmt.Sprintf(
- "%s.%s",
- GenerateFileName(profile.Data.Title, time.Now()),
- common.Errorable[string](common.GetFileExtensionFromUrl(streamSource.URL)).OrElse("flv"),
- )
- filePath := path.Join(task.Download.SaveDirectory, fileName)
+ var extName string
+
+ // the real extension name (without renaming)
+ originalExtName := common.Errorable[string](common.GetFileExtensionFromUrl(streamSource.URL)).OrElse("flv")
+
+ if task.TaskConfig.Download.UseSpecialExtNameBeforeFinishing {
+ extName = kSpecialExtName
+ } else {
+ extName = originalExtName
+ }
+
+ baseName := GenerateFileName(profile.Data.Title, time.Now())
+ fileName := common.CombineFileName(baseName, extName)
+ saveDir := task.Download.SaveDirectory
+ filePath := path.Join(saveDir, fileName)
+
+ // rename the extension name to originalExtName when finish writing
+ defer func() {
+ if extName == originalExtName {
+ return
+ }
+ from := filePath
+ to := path.Join(saveDir, common.CombineFileName(baseName, originalExtName))
+ err := os.Rename(from, to)
+ if err != nil {
+ task.logger.Error("Cannot rename %v to %v: %v", from, to, err)
+ return
+ }
+ task.logger.Info("Rename file \"%s\" to \"%s\".", from, to)
+ }()
+
file, err := os.OpenFile(filePath, os.O_CREATE|os.O_TRUNC|os.O_WRONLY, 0644)
if err != nil {
task.logger.Error("Cannot open file for writing: %v", err)