Add context menu to list of calls, support archiving and deletion of messages
[infodrom/phone] / phone.php
index 9258c9f..b2dbd6d 100644 (file)
--- a/phone.php
+++ b/phone.php
@@ -54,6 +54,19 @@ function message_info($dir,$fname)
   return $info;
 }
 
+function call_cmp($a, $b)
+{
+  if (!empty($a['read']) && empty($b['read']))
+    return 1;
+  elseif (!empty($b['read']) && empty($a['read']))
+    return -1;
+  elseif ($a['timestamp'] > $b['timestamp'])
+    return -1;
+  else
+    return 1;
+  return 0;
+}
+
 function read_directory($directory)
 {
   $result = array();
@@ -62,13 +75,15 @@ function read_directory($directory)
     while (($filename = readdir($dir)) !== false) {
       if (($pos = strpos($filename, '.vmsg')) !== false) {
        $fname = substr($filename,0,$pos);
-       $info = message_info('incoming', $fname);
+       $info = message_info($directory, $fname);
        $info['fname'] = $fname;
        $result[] = $info;
       }
     }
     closedir($dir);
   }
+
+  usort($result, "call_cmp");
   return $result;
 }
 
@@ -93,6 +108,12 @@ function send_call($dir, $call)
     return;
   }
 
+  $info = read_info($dir, $call);
+  if (empty($info['read'])) {
+    $info['read'] = date('U');
+    write_info($dir, $call, $info);
+  }
+
   header(sprintf('Content-disposition: inline; filename="%s.au"', $call));
   header('Content-Type: audio/basic');
   header("Cache-Control: ");
@@ -103,4 +124,21 @@ function send_call($dir, $call)
   pclose($p);
 }
 
-?>
\ No newline at end of file
+function archive_call($call)
+{
+  $basename = SPOOL_DIR . '/' . 'incoming' . '/' . $call;
+  $basenew = SPOOL_DIR . '/' . 'archive' . '/' . $call;
+
+  rename($basename . '.vmsg', $basenew . '.vmsg');
+  rename($basename . '.info', $basenew . '.info');
+}
+
+function delete_call($dir, $call)
+{
+  $basename = SPOOL_DIR . '/' . $dir . '/' . $call;
+
+  unlink($basename . '.vmsg');
+  unlink($basename . '.info');
+}
+
+?>