Author: sayer
Date: 2009-04-01 17:53:24 +0200 (Wed, 01 Apr 2009)
New Revision: 1349

Modified:
   trunk/apps/dsm/DSMCoreModule.cpp
   trunk/apps/dsm/DSMCoreModule.h
   trunk/apps/dsm/DSMDialog.cpp
   trunk/apps/dsm/DSMDialog.h
   trunk/apps/dsm/DSMSession.h
   trunk/apps/dsm/doc/dsm_syntax.txt
Log:
o function to play a file at the beginning of the playlist (interrupts current 
playing)
o optional option to place separator in front of the playlist



Modified: trunk/apps/dsm/DSMCoreModule.cpp
===================================================================
--- trunk/apps/dsm/DSMCoreModule.cpp    2009-04-01 14:25:14 UTC (rev 1348)
+++ trunk/apps/dsm/DSMCoreModule.cpp    2009-04-01 15:53:24 UTC (rev 1349)
@@ -49,6 +49,7 @@
   DEF_CMD("playPrompt", SCPlayPromptAction);
   DEF_CMD("playPromptLooped", SCPlayPromptLoopedAction);
   DEF_CMD("playFile", SCPlayFileAction);
+  DEF_CMD("playFileFront", SCPlayFileFrontAction);
   DEF_CMD("recordFile", SCRecordFileAction);
   DEF_CMD("stopRecord", SCStopRecordAction);
   DEF_CMD("getRecordLength", SCGetRecordLengthAction);
@@ -154,8 +155,10 @@
   sc_sess->setPromptSet(resolveVars(arg, sess, sc_sess, event_params));
 } EXEC_ACTION_END;
 
+CONST_ACTION_2P(SCAddSeparatorAction, ',', true);
 EXEC_ACTION_START(SCAddSeparatorAction){
-  sc_sess->addSeparator(resolveVars(arg, sess, sc_sess, event_params));
+  bool front = resolveVars(par2, sess, sc_sess, event_params) == "true";
+  sc_sess->addSeparator(resolveVars(par1, sess, sc_sess, event_params), front);
 } EXEC_ACTION_END;
 
 EXEC_ACTION_START(SCPlayPromptLoopedAction){
@@ -181,6 +184,7 @@
     sc_sess->SET_ERRNO(DSM_ERRNO_OK);
 } EXEC_ACTION_END;
 
+CONST_ACTION_2P(SCPlayFileAction, ',', true);
 EXEC_ACTION_START(SCPlayFileAction) {
   bool loop = 
     resolveVars(par2, sess, sc_sess, event_params) == "true";
@@ -189,6 +193,15 @@
                    loop);
 } EXEC_ACTION_END;
 
+CONST_ACTION_2P(SCPlayFileFrontAction, ',', true);
+EXEC_ACTION_START(SCPlayFileFrontAction) {
+  bool loop = 
+    resolveVars(par2, sess, sc_sess, event_params) == "true";
+  DBG("par1 = '%s', par2 = %s\n", par1.c_str(), par2.c_str());
+  sc_sess->playFile(resolveVars(par1, sess, sc_sess, event_params), 
+                   loop, true);
+} EXEC_ACTION_END;
+
 EXEC_ACTION_START(SCRecordFileAction) {
   sc_sess->recordFile(resolveVars(arg, sess, sc_sess, event_params));
 } EXEC_ACTION_END;
@@ -282,9 +295,6 @@
 
 #undef DEF_SCModActionExec
 
-
-CONST_ACTION_2P(SCPlayFileAction, ',', true);
-
 CONST_ACTION_2P(SCLogAction, ',', false);
 EXEC_ACTION_START(SCLogAction) {
 

Modified: trunk/apps/dsm/DSMCoreModule.h
===================================================================
--- trunk/apps/dsm/DSMCoreModule.h      2009-04-01 14:25:14 UTC (rev 1348)
+++ trunk/apps/dsm/DSMCoreModule.h      2009-04-01 15:53:24 UTC (rev 1349)
@@ -63,7 +63,7 @@
 DEF_ACTION_1P(SCDisableDTMFDetection);
 
 DEF_ACTION_1P(SCSetPromptsAction);
-DEF_ACTION_1P(SCAddSeparatorAction);
+DEF_ACTION_2P(SCAddSeparatorAction);
 
 DEF_SCModSEStrArgAction(SCRepostAction);
 DEF_SCModSEStrArgAction(SCJumpFSMAction);
@@ -80,6 +80,7 @@
 DEF_ACTION_2P(SCLogAction);
 DEF_ACTION_1P(SCLogVarsAction);
 DEF_ACTION_2P(SCPlayFileAction);
+DEF_ACTION_2P(SCPlayFileFrontAction);
 DEF_ACTION_2P(SCPostEventAction);
 
 DEF_ACTION_2P(SCB2BConnectCalleeAction);

Modified: trunk/apps/dsm/DSMDialog.cpp
===================================================================
--- trunk/apps/dsm/DSMDialog.cpp        2009-04-01 14:25:14 UTC (rev 1348)
+++ trunk/apps/dsm/DSMDialog.cpp        2009-04-01 15:53:24 UTC (rev 1349)
@@ -238,7 +238,7 @@
   playlist.addToPlaylist(item);
 }
 
-void DSMDialog::playFile(const string& name, bool loop) {
+void DSMDialog::playFile(const string& name, bool loop, bool front) {
   AmAudioFile* af = new AmAudioFile();
   if(af->open(name,AmAudioFile::Read)) {
     ERROR("audio file '%s' could not be opened for reading.\n", 
@@ -250,7 +250,11 @@
   if (loop) 
     af->loop.set(true);
 
-  playlist.addToPlaylist(new AmPlaylistItem(af, NULL));
+  if (front)
+    playlist.addToPlayListFront(new AmPlaylistItem(af, NULL));
+  else
+    playlist.addToPlaylist(new AmPlaylistItem(af, NULL));
+
   audiofiles.push_back(af);
   SET_ERRNO(DSM_ERRNO_OK);
 }
@@ -337,7 +341,7 @@
 }
 
 
-void DSMDialog::addSeparator(const string& name) {
+void DSMDialog::addSeparator(const string& name, bool front) {
   unsigned int id = 0;
   if (str2i(name, id)) {
     SET_ERRNO(DSM_ERRNO_UNKNOWN_ARG);
@@ -345,7 +349,10 @@
   }
 
   AmPlaylistSeparator* sep = new AmPlaylistSeparator(this, id);
-  playlist.addToPlaylist(new AmPlaylistItem(sep, sep));
+  if (front)
+    playlist.addToPlayListFront(new AmPlaylistItem(sep, sep));
+  else
+    playlist.addToPlaylist(new AmPlaylistItem(sep, sep));
   // for garbage collector
   audiofiles.push_back(sep);
   SET_ERRNO(DSM_ERRNO_OK);

Modified: trunk/apps/dsm/DSMDialog.h
===================================================================
--- trunk/apps/dsm/DSMDialog.h  2009-04-01 14:25:14 UTC (rev 1348)
+++ trunk/apps/dsm/DSMDialog.h  2009-04-01 15:53:24 UTC (rev 1349)
@@ -88,14 +88,14 @@
 
   void closePlaylist(bool notify);
   void addToPlaylist(AmPlaylistItem* item);
-  void playFile(const string& name, bool loop);
+  void playFile(const string& name, bool loop, bool front=false);
   void recordFile(const string& name);
   unsigned int getRecordLength();
   unsigned int getRecordDataSize();
   void stopRecord();
 
   void setPromptSet(const string& name);
-  void addSeparator(const string& name);
+  void addSeparator(const string& name, bool front = false);
   void connectMedia();
   void disconnectMedia();
   void mute();

Modified: trunk/apps/dsm/DSMSession.h
===================================================================
--- trunk/apps/dsm/DSMSession.h 2009-04-01 14:25:14 UTC (rev 1348)
+++ trunk/apps/dsm/DSMSession.h 2009-04-01 15:53:24 UTC (rev 1349)
@@ -64,7 +64,7 @@
   virtual ~DSMSession();
 
   virtual void playPrompt(const string& name, bool loop = false) = 0;
-  virtual void playFile(const string& name, bool loop) = 0;
+  virtual void playFile(const string& name, bool loop, bool front = false) = 0;
   virtual void recordFile(const string& name) = 0;
   virtual unsigned int getRecordLength() = 0;
   virtual unsigned int getRecordDataSize() = 0;
@@ -72,7 +72,7 @@
   virtual void addToPlaylist(AmPlaylistItem* item) = 0;
   virtual void closePlaylist(bool notify) = 0;
   virtual void setPromptSet(const string& name) = 0;
-  virtual void addSeparator(const string& name) = 0;
+  virtual void addSeparator(const string& name, bool front = false) = 0;
   virtual void connectMedia() = 0;
   virtual void disconnectMedia() = 0;
   virtual void mute() = 0;

Modified: trunk/apps/dsm/doc/dsm_syntax.txt
===================================================================
--- trunk/apps/dsm/doc/dsm_syntax.txt   2009-04-01 14:25:14 UTC (rev 1348)
+++ trunk/apps/dsm/doc/dsm_syntax.txt   2009-04-01 15:53:24 UTC (rev 1349)
@@ -42,13 +42,14 @@
    prompt not found in current prompt set
  playPromptLooped(param)
  playFile(filename)
+ playFileFront(filename)
  recordFile(filename)
  stopRecord()
  getRecordLength([dst_varname])   -- only while recording! default dst var: 
record_length
  getRecordDataSize([dst_varname]) -- only while recording! default dst var: 
record_data_size
  closePlaylist()
- addSeparator(id)
-   fires event when playlist hits it 
+ addSeparator(id [, bool front])
+   fires event when playlist hits it ; front=[true|false]
  connectMedia() 
    set playlist as input and output of session, and connect to mediaprocessor 
  disconnectMedia() 

_______________________________________________
Semsdev mailing list
[email protected]
http://lists.iptel.org/mailman/listinfo/semsdev

Reply via email to