Added specific mp3 media handler. modified RealAudio handler to inherit from
authormh <mh>
Sun, 2 Dec 2001 18:56:54 +0000 (18:56 +0000)
committermh <mh>
Sun, 2 Dec 2001 18:56:54 +0000 (18:56 +0000)
Audio handler. modified populate_mediatyp.sql

dbscripts/populate_mediatyp.sql
source/mir/media/MediaHandlerGeneric.java
source/mir/media/MediaHandlerImages.java
source/mir/media/MediaHandlerMp3.java [new file with mode: 0755]
source/mir/media/MediaHandlerRealAudio.java
source/mir/media/MediaHandlerRealVideo.java

index 5a126fb..fe5a71d 100755 (executable)
@@ -14,7 +14,7 @@ UPDATE "pg_class" SET "reltriggers" = 0 WHERE "relname" = 'media_type';
 
 INSERT INTO "media_type" ("id","name","mime_type","classname","tablename","dcname") VALUES (2,'unknown','application/octet-stream','Generic','UploadedMedia',NULL);
 INSERT INTO "media_type" ("id","name","mime_type","classname","tablename","dcname") VALUES (3,'jpg','image/gif','ImagesGif','Images',NULL);
-INSERT INTO "media_type" ("id","name","mime_type","classname","tablename","dcname") VALUES (4,'mp3','audio/mp3','Audio','UploadedMedia',NULL);
+INSERT INTO "media_type" ("id","name","mime_type","classname","tablename","dcname") VALUES (4,'mp3','audio/mp3','Mp3','UploadedMedia',NULL);
 INSERT INTO "media_type" ("id","name","mime_type","classname","tablename","dcname") VALUES (5,'jpg','image/jpeg','ImagesJpeg','Images',NULL);
 INSERT INTO "media_type" ("id","name","mime_type","classname","tablename","dcname") VALUES (6,'pdf','application/pdf','Generic','UploadedMedia',NULL);
 INSERT INTO "media_type" ("id","name","mime_type","classname","tablename","dcname") VALUES (7,'mpg','video/mpeg','Video','UploadedMedia',NULL);
@@ -23,8 +23,8 @@ INSERT INTO "media_type" ("id","name","mime_type","classname","tablename","dcnam
 INSERT INTO "media_type" ("id","name","mime_type","classname","tablename","dcname") VALUES (10,'ra','audio/vnd.rn-realaudio','RealAudio','UploadedMedia',NULL);
 INSERT INTO "media_type" ("id","name","mime_type","classname","tablename","dcname") VALUES (11,'rm','video/vnd.rn-realvideo','RealVideo','UploadedMedia',NULL);
 INSERT INTO "media_type" ("id","name","mime_type","classname","tablename","dcname") VALUES (12,'ra','audio/x-pn-realaudio','RealAudio','UploadedMedia',NULL);
-INSERT INTO "media_type" ("id","name","mime_type","classname","tablename","dcname") VALUES (13,'mp3','audio/x-mp3','Audio','UploadedMedia',NULL);
-INSERT INTO "media_type" ("id","name","mime_type","classname","tablename","dcname") VALUES (14,'mp3','audio/x-mpeg','Audio','UploadedMedia',NULL);
+INSERT INTO "media_type" ("id","name","mime_type","classname","tablename","dcname") VALUES (13,'mp3','audio/x-mp3','Mp3','UploadedMedia',NULL);
+INSERT INTO "media_type" ("id","name","mime_type","classname","tablename","dcname") VALUES (14,'mp3','audio/x-mpeg','Mp3','UploadedMedia',NULL);
 
 
 -- Enable triggers
index 52ff97b..5cad443 100755 (executable)
@@ -35,9 +35,9 @@ import mir.storage.*;
 public class MediaHandlerGeneric implements MirMedia
 {
 
-    private String imageHost = MirConfig.getProp("Producer.Image.Host");
-    private static String imageRoot = MirConfig.getProp("Producer.ImageRoot");
-    private Logfile theLog = Logfile.getInstance(MirConfig.getProp("Home")+"log/media.log");
+    protected String imageHost = MirConfig.getProp("Producer.Image.Host");
+    protected String imageRoot = MirConfig.getProp("Producer.ImageRoot");
+    protected Logfile theLog = Logfile.getInstance(this.getClass().getName());
     public boolean set (byte[] uploadedData, Entity ent, Entity mediaTypeEnt ) {
         String ext = mediaTypeEnt.getValue("name");
         String dir = MirConfig.getProp("Producer.Media.Path");
@@ -125,7 +125,10 @@ public class MediaHandlerGeneric implements MirMedia
 
     public String getURL(Entity ent, Entity mediaTypeEnt)
     {
-      int size = Integer.parseInt(ent.getValue("size"), 10)/1024;
+      String stringSize = ent.getValue("size");
+      if (stringSize == null)
+        return null;
+      int size = Integer.parseInt(stringSize, 10)/1024;
       String title = ent.getValue("title")+
         " - "+mediaTypeEnt.getValue("name")+" "+
         size+" KB";
index b85904a..3a4365e 100755 (executable)
@@ -34,7 +34,7 @@ public class MediaHandlerImages
     protected final String        WEBDB_GIF="1";
 
     protected String imageType="0";
-    private Logfile theLog = Logfile.getInstance(MirConfig.getProp("Home")+"log/media.log");
+    private Logfile theLog = Logfile.getInstance(this.getClass().getName());
 
        public byte[] get(Entity ent, Entity mediaTypeEnt)
        {
diff --git a/source/mir/media/MediaHandlerMp3.java b/source/mir/media/MediaHandlerMp3.java
new file mode 100755 (executable)
index 0000000..747ef37
--- /dev/null
@@ -0,0 +1,116 @@
+/*
+ * put your module comment here
+ */
+
+
+package  mir.media;
+
+import java.util.*;
+
+import mir.entity.*;
+import mir.misc.*;
+import mir.storage.*;
+
+
+/**
+ * Please note: this media handler produces 
+ * 3 media files, the raw .mp3, a .m3u which is 
+ * contains the URL for the mp3 and a .pls which
+ * contains the URL to the mp3 in shoutcast playlist
+ * format. What's important is that the web server (of 
+ * the media host) must recognize the .m3u and .pls file 
+ * extensions and send the proper "audio/x-mpegurl"
+ * and "audio/x-scpls" mime-types respectively.
+ * If the web server is apache, it's easy, just 
+ * add:
+ *
+ * audio/x-mpegurl                 m3u
+ * audio/x-scpl                    pls
+ *
+ * to the file pointed to by the "TypesConfig" 
+ * command in your apache config file. Or add 
+ * and equivalent AddType command to your httpd.conf.
+ * Of course this assumes that the mod_mime is loaded.
+ *
+ * If the web server is not apache, then your on your own.
+ * 
+ * @see mir.media.MirMedia
+ * @author mh <heckmann@hbe.ca>
+ * @version 01.12.2001
+ */
+
+public class MediaHandlerMp3 extends MediaHandlerAudio implements MirMedia
+{
+
+    public boolean set (byte[] uploadedData, Entity ent, Entity mediaTypeEnt ) {
+        String ext = mediaTypeEnt.getValue("name");
+        String dir = MirConfig.getProp("Producer.Media.Path");
+        String mediaHost = MirConfig.getProp("Producer.Media.Host");
+        String date = ent.getValue("date");
+        String datePath = StringUtil.webdbDate2path(date);
+        String baseName = ent.getId();
+        String mediaFname = baseName+"."+ext;
+        String mp3Pointer = mediaHost+datePath+mediaFname;
+        String mpegURLFile = baseName+".m3u"; 
+        String playlistFile = baseName+".pls"; 
+        Integer size = new Integer(uploadedData.length);
+        if(FileUtil.write(dir+"/"+datePath+"/"+mediaFname, uploadedData)) {
+        //if(FileUtil.write(dir+"/"+mediaFname, uploadedData)) {
+            //were done with the data, dereference.
+            uploadedData=null;
+            
+            try {
+                //write the "meta" files
+                //first the .m3u since it only contains one line
+                FileUtil.write(dir+"/"+datePath+"/"+mpegURLFile,mp3Pointer.getBytes());
+                //now the .pls file
+                FileUtil.write(dir+"/"+datePath+"/"+playlistFile,mp3Pointer.getBytes());
+                ent.setValueForProperty("is_produced", "1");
+                ent.setValueForProperty("icon_is_produced", "1");
+                ent.setValueForProperty("publish_path",datePath+"/"+mediaFname);
+                //ent.setValueForProperty("publish_path", mediaFname);
+                ent.setValueForProperty("publish_server", mediaHost);
+                ent.setValueForProperty("size", size.toString());
+                ent.update();
+            } catch (StorageObjectException e) {
+                theLog.printError("StorageObjectException: "+e.toString()); 
+                return false;
+            }
+        } else {
+            theLog.printError("could not write FILE!"); 
+            return false;
+        }
+
+        return true;
+    }
+
+    public String getURL(Entity ent, Entity mediaTypeEnt)
+    {
+      String stringSize = ent.getValue("size");
+      if (stringSize == null)
+        return null;
+      int size = Integer.parseInt(stringSize, 10)/1024;
+      String rawTitle = ent.getValue("title")+
+        " - "+mediaTypeEnt.getValue("name")+" "+
+        size+" KB "+"download";
+      String m3uTitle = ent.getValue("title")+
+        " - "+mediaTypeEnt.getValue("name")+" "+
+        "streaming URL";
+      String plsTitle = ent.getValue("title")+
+        " - "+mediaTypeEnt.getValue("name")+" "+
+        "playlist URL";
+
+      String basePath=StringUtil.regexpReplace(ent.getValue("publish_path"), ".mp3$","");
+
+      String m3uURL = StringUtil.createURLLinks(ent.getValue("publish_server")+"/"+basePath+".m3u", m3uTitle, imageRoot, getBigIcon());
+      String plsURL = StringUtil.createURLLinks(ent.getValue("publish_server")+"/"+basePath+".pls", plsTitle, imageRoot, getBigIcon());
+      String rawURL = StringUtil.createURLLinks(ent.getValue("publish_server")+"/"+ent.getValue("publish_path"), rawTitle, imageRoot, getBigIcon());
+    
+      return m3uURL+"\n<p>"+plsURL+"\n<p>"+rawURL;
+
+    }
+
+}
+        
+        
+
index a7b4c52..5a1c7c1 100755 (executable)
@@ -23,12 +23,9 @@ import mir.storage.*;
  */
 
 
-public class MediaHandlerRealAudio extends MediaHandlerGeneric implements MirMedia
+public class MediaHandlerRealAudio extends MediaHandlerAudio implements MirMedia
 {
 
-    private String imageHost = MirConfig.getProp("Producer.Image.Host");
-    private static String imageRoot = MirConfig.getProp("Producer.ImageRoot");
-    private Logfile theLog = Logfile.getInstance(MirConfig.getProp("Home")+"log/media.log");
     public boolean set (byte[] uploadedData, Entity ent, Entity mediaTypeEnt ) {
         String ext = mediaTypeEnt.getValue("name");
         String dir = MirConfig.getProp("Producer.Media.Path");
@@ -36,11 +33,11 @@ public class MediaHandlerRealAudio extends MediaHandlerGeneric implements MirMed
         String mediaHost = MirConfig.getProp("Producer.Media.Host");
         String rtspMediaHost = MirConfig.getProp("Producer.RealMedia.Host");
 
-        String mediaFname = ent.getId()+"."+ext;
-       String RealMediaPointer = rtspMediaHost+mediaFname;
-       String RealMediaFile = ent.getId()+".ram";
         String date = ent.getValue("date");
         String datePath = StringUtil.webdbDate2path(date);
+        String mediaFname = ent.getId()+"."+ext;
+           String realMediaPointer = rtspMediaHost+datePath+mediaFname;
+           String realMediaFile = ent.getId()+".ram";
         Integer size = new Integer(uploadedData.length);
         if(FileUtil.write(dir+"/"+datePath+"/"+mediaFname, uploadedData)) {
         //if(FileUtil.write(rtspDir+"/"+mediaFname, uploadedData)) {
@@ -48,13 +45,12 @@ public class MediaHandlerRealAudio extends MediaHandlerGeneric implements MirMed
             uploadedData=null;
             
             try {
-//write an ram file
-FileUtil.write(dir+"/"+RealMediaFile,RealMediaPointer.getBytes());
-
+                //write a ram file
+                FileUtil.write(dir+"/"+datePath+"/"+realMediaFile,realMediaPointer.getBytes());
                 ent.setValueForProperty("is_produced", "1");
                 ent.setValueForProperty("icon_is_produced", "1");
-                ent.setValueForProperty("publish_path",datePath+"/"+mediaFname);
-                //ent.setValueForProperty("publish_path", RealMediaFile);
+                ent.setValueForProperty("publish_path",datePath+"/"+realMediaFile);
+                //ent.setValueForProperty("publish_path", realMediaFile);
                 ent.setValueForProperty("publish_server", mediaHost);
                 ent.setValueForProperty("size", size.toString());
                 ent.update();
@@ -70,51 +66,6 @@ FileUtil.write(dir+"/"+RealMediaFile,RealMediaPointer.getBytes());
         return true;
     }
 
-
-
-
-
-    public String getPublishHost()
-    {
-        return MirConfig.getProp("Producer.Media.Host");
-    }
-
-
-
-    public String getURL(Entity ent, Entity mediaTypeEnt)
-    {
-      int size = Integer.parseInt(ent.getValue("size"), 10)/1024;
-      String title = ent.getValue("title")+
-        " - "+mediaTypeEnt.getValue("name")+" "+
-        size+" KB";
-      return StringUtil.createURLLinks(ent.getValue("publish_server")+"/"+
-        ent.getValue("publish_path"), title, imageRoot, getBigIcon());
-    }
-
-   
-    private static String tinyIcon = MirConfig.getProp("Producer.Icon.TinyAudio");
-    private static String bigIcon = MirConfig.getProp("Producer.Icon.BigAudio");
-
-  public String getTinyIcon()
-  {
-    return tinyIcon;
-  }
-
-  public String getBigIcon()
-  {
-    return bigIcon;
-  }
-
-  public String getIconAlt()
-  {
-    return "Audio";
-  }
-
-  public boolean isAudio()
-  {
-    return true;
-  }
-
 }
         
         
index 264d1bd..83d693c 100755 (executable)
@@ -28,7 +28,7 @@ public class MediaHandlerRealVideo extends MediaHandlerGeneric implements MirMed
 
     private String imageHost = MirConfig.getProp("Producer.Image.Host");
     private static String imageRoot = MirConfig.getProp("Producer.ImageRoot");
-    private Logfile theLog = Logfile.getInstance(MirConfig.getProp("Home")+"log/media.log");
+    private Logfile theLog = Logfile.getInstance(this.getClass().getName());
     public boolean set (byte[] uploadedData, Entity ent, Entity mediaTypeEnt ) {
         String ext = mediaTypeEnt.getValue("name");
         String dir = MirConfig.getProp("Producer.Media.Path");