[asterisk-commits] tilghman: branch 1.4 r244242 - /branches/1.4/apps/app_voicemail.c

SVN commits to the Asterisk project asterisk-commits at lists.digium.com
Mon Feb 1 17:13:46 CST 2010


Author: tilghman
Date: Mon Feb  1 17:13:44 2010
New Revision: 244242

URL: http://svnview.digium.com/svn/asterisk?view=rev&rev=244242
Log:
Backup and restore original textfile, for prosthesis (gerund of prepend).

Also, fix menuselect such that changing voicemail build options correctly
causes rebuild.

(closes issue #16415)
 Reported by: tomo1657
 Patches: 
       prepention.patch uploaded by tomo1657 (license 484)
       (with modifications by me to backport to 1.4)

Modified:
    branches/1.4/apps/app_voicemail.c

Modified: branches/1.4/apps/app_voicemail.c
URL: http://svnview.digium.com/svn/asterisk/branches/1.4/apps/app_voicemail.c?view=diff&rev=244242&r1=244241&r2=244242
==============================================================================
--- branches/1.4/apps/app_voicemail.c (original)
+++ branches/1.4/apps/app_voicemail.c Mon Feb  1 17:13:44 2010
@@ -34,7 +34,7 @@
  ***/
 
 /*** MAKEOPTS
-<category name="MENUSELECT_OPTS_app_voicemail" displayname="Voicemail Build Options" positive_output="yes" remove_on_change="apps/app_voicemail.o apps/app_directory.o">
+<category name="MENUSELECT_OPTS_app_voicemail" displayname="Voicemail Build Options" positive_output="yes" remove_on_change="apps/app_voicemail.o apps/app_voicemail.so apps/app_directory.o apps/app_directory.so">
 	<member name="ODBC_STORAGE" displayname="Storage of Voicemail using ODBC">
 		<depend>unixodbc</depend>
 		<depend>ltdl</depend>
@@ -5064,15 +5064,17 @@
 	signed char zero_gain = 0;
 	struct ast_config *msg_cfg;
 	const char *duration_str;
-	char msgfile[PATH_MAX], backup[PATH_MAX];
+	char msgfile[PATH_MAX], backup[PATH_MAX], backup_textfile[PATH_MAX];
 	char textfile[PATH_MAX];
 
 	/* Must always populate duration correctly */
 	make_file(msgfile, sizeof(msgfile), curdir, curmsg);
 	strcpy(textfile, msgfile);
 	strcpy(backup, msgfile);
+	strcpy(backup_textfile, msgfile);
 	strncat(textfile, ".txt", sizeof(textfile) - strlen(textfile) - 1);
 	strncat(backup, "-bak", sizeof(backup) - strlen(backup) - 1);
+	strncat(backup_textfile, "-bak.txt", sizeof(backup_textfile) - strlen(backup_textfile) - 1);
 
 	if (!(msg_cfg = ast_config_load(textfile))) {
 		return -1;
@@ -5098,10 +5100,13 @@
 			}
 
 			/* Back up the original file, so we can retry the prepend */
-			if (already_recorded)
+			if (already_recorded) {
 				ast_filecopy(backup, msgfile, NULL);
-			else
+				copy(backup_textfile, textfile);
+			} else {
 				ast_filecopy(msgfile, backup, NULL);
+				copy(textfile, backup_textfile);
+			}
 			already_recorded = 1;
 
 			if (record_gain)
@@ -5148,8 +5153,11 @@
 	}
 
 	ast_config_destroy(msg_cfg);
-	if (already_recorded)
-		ast_filedelete(backup, NULL);
+	if (already_recorded) {
+		/* Restore original files */
+		ast_filerename(backup, msgfile, NULL);
+		rename(backup_textfile, textfile);
+	}
 	if (prepend_duration)
 		*duration = prepend_duration;
 
@@ -5223,6 +5231,8 @@
 #ifdef IMAP_STORAGE
 	int todircount=0;
 	struct vm_state *dstvms;
+#else
+	char textfile[PATH_MAX], backup[PATH_MAX], backup_textfile[PATH_MAX];
 #endif
 	char username[70]="";
 	int res = 0, cmd = 0;
@@ -5428,6 +5438,20 @@
 					res = ast_play_and_wait(chan, "vm-saved"); */
 				res = ast_play_and_wait(chan, "vm-msgsaved");
 			}	
+#ifndef IMAP_STORAGE
+			/* Restore original message without prepended message if backup exists */
+			make_file(msgfile, sizeof(msgfile), dir, curmsg);
+			strcpy(textfile, msgfile);
+			strcpy(backup, msgfile);
+			strcpy(backup_textfile, msgfile);
+			strncat(textfile, ".txt", sizeof(textfile) - strlen(textfile) - 1);
+			strncat(backup, "-bak", sizeof(backup) - strlen(backup) - 1);
+			strncat(backup_textfile, "-bak.txt", sizeof(backup_textfile) - strlen(backup_textfile) - 1);
+			if (ast_fileexists(backup, NULL, NULL) > 0) {
+				ast_filerename(backup, msgfile, NULL);
+				rename(backup_textfile, textfile);
+			}
+#endif
 		}
 
 		/* Remove surrogate file */




More information about the asterisk-commits mailing list