summarylogtreecommitdiffstats
path: root/libwaveform-peak-tempfiles.diff
blob: a1632a875c9edf16e720a8cf431a72614d3dd308 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
diff --git a/wf/peakgen.c b/wf/peakgen.c
index 405e0ba..6023657 100644
--- a/wf/peakgen.c
+++ b/wf/peakgen.c
@@ -36,6 +36,7 @@
 #include <glib.h>
 #include <glib/gprintf.h>
 #include <glib/gstdio.h>
+#include <gio/gio.h>
 #ifdef USE_SNDFILE
 #include <sndfile.h>
 #else
@@ -206,7 +207,7 @@ waveform_ensure_peakfile__sync (Waveform* w)
 	gchar* peak_filename = waveform_get_peak_filename(filename);
 	if(!peak_filename) goto out;
 
-	if(g_file_test(peak_filename, G_FILE_TEST_EXISTS)){ 
+	if(g_file_test(peak_filename, G_FILE_TEST_EXISTS)){
 		dbg (1, "peak file exists. (%s)", peak_filename);
 
 		/*
@@ -329,7 +330,7 @@ wf_ff_peakgen (const char* infilename, const char* peak_filename)
 	if(!ad_open(&f, infilename)) return false;
 
 	gchar* basename = g_path_get_basename(peak_filename);
-	gchar* tmp_path = g_build_filename("/tmp", basename, NULL);
+	gchar* tmp_path = g_build_filename(g_get_tmp_dir(), basename, NULL);
 	g_free(basename);
 
 #ifdef USE_FFMPEG
@@ -520,9 +521,19 @@ wf_ff_peakgen (const char* infilename, const char* peak_filename)
 #endif
 
 	if(total_readcount){
-		int renamed = !rename(tmp_path, peak_filename);
+		GError *err = NULL;
+		GFile *tmp_file = g_file_new_for_path(tmp_path);
+		GFile *peak_file = g_file_new_for_path(peak_filename);
+		g_file_move(tmp_file, peak_file, G_FILE_COPY_OVERWRITE, NULL, NULL, NULL, &err);
+		g_object_unref(tmp_file);
+		g_object_unref(peak_file);
 		g_free(tmp_path);
-		if(!renamed) return false;
+
+		if(err!=NULL) {
+			printf("Could not move peak file to %s: %s\n", peak_filename, err->message);
+			g_error_free(err);
+			return false;
+		}
 	}else{
 		pwarn("failed to read from file %s", infilename);
 		g_unlink(tmp_path);
@@ -558,7 +569,7 @@ wf_ff_peakgen_split_stereo (const char* infilename, const char* peak_filename)
 	if(!ad_open(&f2, infilename2)) return false;
 
 	gchar* basename = g_path_get_basename(peak_filename);
-	gchar* tmp_path = g_build_filename("/tmp", basename, NULL);
+	gchar* tmp_path = g_build_filename(g_get_tmp_dir(), basename, NULL);
 	g_free(basename);
 
 #ifdef USE_FFMPEG
@@ -774,9 +785,19 @@ wf_ff_peakgen_split_stereo (const char* infilename, const char* peak_filename)
 #endif
 
 	if(total_readcount){
-		int renamed = !rename(tmp_path, peak_filename);
+		GError *err = NULL;
+		GFile *tmp_file = g_file_new_for_path(tmp_path);
+		GFile *peak_file = g_file_new_for_path(peak_filename);
+		g_file_move(tmp_file, peak_file, G_FILE_COPY_OVERWRITE, NULL, NULL, NULL, &err);
+		g_object_unref(tmp_file);
+		g_object_unref(peak_file);
 		g_free(tmp_path);
-		if(!renamed) return false;
+
+		if(err!=NULL) {
+			printf("Could not move peak file to %s: %s\n", peak_filename, err->message);
+			g_error_free(err);
+			return false;
+		}
 	}else{
 		pwarn("failed to read from file %s", infilename);
 		if(!g_unlink(tmp_path)){
@@ -939,7 +960,7 @@ static unsigned long
 sample2time(SF_INFO sfinfo, long samplenum)
 {
 	// long is good up to 4.2GB
-	
+
 	return (10 * samplenum) / ((sfinfo.samplerate/100) * sfinfo.channels);
 }
 #endif