// Path: src/main/java/com/googlecode/eckoit/events/ConversionFinishedEvent.java
// public class ConversionFinishedEvent {
//     private File finishedFile;
//     private File availableToStream;
//     private int streamDuration;
//     private String segmentCount;
// 
// 
//     public ConversionFinishedEvent(File finishedFile) {
//         this.finishedFile = finishedFile;
//     }
// 
//     public File getFinishedFile() {
//         return finishedFile;
//     }
// 
//     /**
//      * @return the availableToStream
//      */
//     public File getAvailableToStream() {
//         return availableToStream;
//     }
// 
//     /**
//      * @param availableToStream the availableToStream to set
//      */
//     public void setAvailableToStream(File availableToStream) {
//         this.availableToStream = availableToStream;
//     }
// 
//     /**
//      * @return the streamDuration
//      */
//     public int getStreamDuration() {
//         return streamDuration;
//     }
// 
//     /**
//      * @param streamDuration the streamDuration to set
//      */
//     public void setStreamDuration(int streamDuration) {
//         this.streamDuration = streamDuration;
//     }
// 
//     /**
//      * @return the segmentCount
//      */
//     public String getSegmentCount() {
//         return segmentCount;
//     }
// 
//     /**
//      * @param segmentCount the segmentCount to set
//      */
//     public void setSegmentCount(String segmentCount) {
//         this.segmentCount = segmentCount;
//     }
// 
// 
// }
// 
// Path: src/main/java/com/googlecode/eckoit/events/RecordingSplitEvent.java
// public class RecordingSplitEvent {
//     private File finishedFile;
//     private boolean isFinal = false;
//     private String recordingID;
//     private long startTime;
// 
//     public RecordingSplitEvent(File finishedFile, String recordingID, long startTime) {
//         this.recordingID = recordingID;
//         this.finishedFile = finishedFile;
//         this.startTime = startTime;
//     }
// 
//     public File getFinishedFile() {
//         return finishedFile;
//     }
// 
//     /**
//      * @param finishedFile the finishedFile to set
//      */
//     public void setFinishedFile(File finishedFile) {
//         this.finishedFile = finishedFile;
//     }
// 
//     /**
//      * @return the isFinal
//      */
//     public boolean isIsFinal() {
//         return isFinal;
//     }
// 
//     /**
//      * @param isFinal the isFinal to set
//      */
//     public void setIsFinal(boolean isFinal) {
//         this.isFinal = isFinal;
//     }
// 
//     /**
//      * @return the recordingID
//      */
//     public String getRecordingID() {
//         return recordingID;
//     }
// 
//     /**
//      * @param recordingID the recordingID to set
//      */
//     public void setRecordingID(String recordingID) {
//         this.recordingID = recordingID;
//     }
// 
//     /**
//      * @return the startTime
//      */
//     public long getStartTime() {
//         return startTime;
//     }
// 
// }
// 
// Path: src/main/java/com/googlecode/eckoit/events/StreamReadyEvent.java
// public class StreamReadyEvent extends ConversionFinishedEvent {
// 
// 
//     private String contentType;
//     private long startTime;
// 
// 
//     public StreamReadyEvent(File finishedFile, String contentType, long startTime) {
//         super(finishedFile);
//         this.contentType = contentType;
//         this.startTime = startTime;
//     }
// 
//     /**
//      * @return the contentType
//      */
//     public String getContentType() {
//         return contentType;
//     }
// 
//     /**
//      * @return the startTime
//      */
//     public long getStartTime() {
//         return startTime;
//     }
// 
// }
// 
// Path: src/main/java/com/googlecode/eckoit/util/Slugger.java
// public class Slugger {
// 
//     public static String generateSlug(String text) {
//        return text.replaceAll("[^a-zA-Z0-9]", "_");
//     }
// 
// }


import com.github.couchapptakeout.events.ExitApplicationMessage;
import com.googlecode.eckoit.events.ConversionFinishedEvent;
import com.googlecode.eckoit.events.RecordingSplitEvent;
import com.googlecode.eckoit.events.StreamReadyEvent;
import com.googlecode.eckoit.util.Slugger;
import java.io.File;
import java.io.IOException;
import java.util.concurrent.LinkedBlockingQueue;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.bushe.swing.event.EventBus;
import org.bushe.swing.event.EventSubscriber;
            try {
                RecordingSplitEvent recordingFinished = completedRecordings.take();
                File wav = recordingFinished.getFinishedFile();
                if (wav != null) {
                    if (tooFresh(wav)) {
                        completedRecordings.add(recordingFinished);
                    } else {
                        Logger.getLogger(ContinousAudioConvereter.class.getName()).log(Level.INFO, "converting wav: " + wav.getAbsolutePath());
                        doConversion(recordingFinished.getRecordingID(), wav, recordingFinished.getStartTime());

                    }
                }
            } catch (InterruptedException ex) {
                Logger.getLogger(ContinousAudioConvereter.class.getName()).log(Level.SEVERE, null, ex);
            }
            sleep();
        }
        System.out.println("Continous Audio Converter Shutdown");
        
        
    }

    protected void doConversion(String recordingID, File wav, long sectionStartTime) {
        File mp3 = null;
        File ogg = null;
        try {
            mp3 = convertToMP3(recordingID, wav);
            if (config.isStream()) {
                File ts = convertToTs(recordingID, mp3);

// Path: src/main/java/com/googlecode/eckoit/events/ConversionFinishedEvent.java
// public class ConversionFinishedEvent {
//     private File finishedFile;
//     private File availableToStream;
//     private int streamDuration;
//     private String segmentCount;
// 
// 
//     public ConversionFinishedEvent(File finishedFile) {
//         this.finishedFile = finishedFile;
//     }
// 
//     public File getFinishedFile() {
//         return finishedFile;
//     }
// 
//     /**
//      * @return the availableToStream
//      */
//     public File getAvailableToStream() {
//         return availableToStream;
//     }
// 
//     /**
//      * @param availableToStream the availableToStream to set
//      */
//     public void setAvailableToStream(File availableToStream) {
//         this.availableToStream = availableToStream;
//     }
// 
//     /**
//      * @return the streamDuration
//      */
//     public int getStreamDuration() {
//         return streamDuration;
//     }
// 
//     /**
//      * @param streamDuration the streamDuration to set
//      */
//     public void setStreamDuration(int streamDuration) {
//         this.streamDuration = streamDuration;
//     }
// 
//     /**
//      * @return the segmentCount
//      */
//     public String getSegmentCount() {
//         return segmentCount;
//     }
// 
//     /**
//      * @param segmentCount the segmentCount to set
//      */
//     public void setSegmentCount(String segmentCount) {
//         this.segmentCount = segmentCount;
//     }
// 
// 
// }
// 
// Path: src/main/java/com/googlecode/eckoit/events/RecordingSplitEvent.java
// public class RecordingSplitEvent {
//     private File finishedFile;
//     private boolean isFinal = false;
//     private String recordingID;
//     private long startTime;
// 
//     public RecordingSplitEvent(File finishedFile, String recordingID, long startTime) {
//         this.recordingID = recordingID;
//         this.finishedFile = finishedFile;
//         this.startTime = startTime;
//     }
// 
//     public File getFinishedFile() {
//         return finishedFile;
//     }
// 
//     /**
//      * @param finishedFile the finishedFile to set
//      */
//     public void setFinishedFile(File finishedFile) {
//         this.finishedFile = finishedFile;
//     }
// 
//     /**
//      * @return the isFinal
//      */
//     public boolean isIsFinal() {
//         return isFinal;
//     }
// 
//     /**
//      * @param isFinal the isFinal to set
//      */
//     public void setIsFinal(boolean isFinal) {
//         this.isFinal = isFinal;
//     }
// 
//     /**
//      * @return the recordingID
//      */
//     public String getRecordingID() {
//         return recordingID;
//     }
// 
//     /**
//      * @param recordingID the recordingID to set
//      */
//     public void setRecordingID(String recordingID) {
//         this.recordingID = recordingID;
//     }
// 
//     /**
//      * @return the startTime
//      */
//     public long getStartTime() {
//         return startTime;
//     }
// 
// }
// 
// Path: src/main/java/com/googlecode/eckoit/events/StreamReadyEvent.java
// public class StreamReadyEvent extends ConversionFinishedEvent {
// 
// 
//     private String contentType;
//     private long startTime;
// 
// 
//     public StreamReadyEvent(File finishedFile, String contentType, long startTime) {
//         super(finishedFile);
//         this.contentType = contentType;
//         this.startTime = startTime;
//     }
// 
//     /**
//      * @return the contentType
//      */
//     public String getContentType() {
//         return contentType;
//     }
// 
//     /**
//      * @return the startTime
//      */
//     public long getStartTime() {
//         return startTime;
//     }
// 
// }
// 
// Path: src/main/java/com/googlecode/eckoit/util/Slugger.java
// public class Slugger {
// 
//     public static String generateSlug(String text) {
//        return text.replaceAll("[^a-zA-Z0-9]", "_");
//     }
// 
// }


// Path: src/main/java/com/googlecode/eckoit/audio/ContinousAudioConvereter.java
import com.github.couchapptakeout.events.ExitApplicationMessage;
import com.googlecode.eckoit.events.ConversionFinishedEvent;
import com.googlecode.eckoit.events.RecordingSplitEvent;
import com.googlecode.eckoit.events.StreamReadyEvent;
import com.googlecode.eckoit.util.Slugger;
import java.io.File;
import java.io.IOException;
import java.util.concurrent.LinkedBlockingQueue;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.bushe.swing.event.EventBus;
import org.bushe.swing.event.EventSubscriber;

            try {
                RecordingSplitEvent recordingFinished = completedRecordings.take();
                File wav = recordingFinished.getFinishedFile();
                if (wav != null) {
                    if (tooFresh(wav)) {
                        completedRecordings.add(recordingFinished);
                    } else {
                        Logger.getLogger(ContinousAudioConvereter.class.getName()).log(Level.INFO, "converting wav: " + wav.getAbsolutePath());
                        doConversion(recordingFinished.getRecordingID(), wav, recordingFinished.getStartTime());

                    }
                }
            } catch (InterruptedException ex) {
                Logger.getLogger(ContinousAudioConvereter.class.getName()).log(Level.SEVERE, null, ex);
            }
            sleep();
        }
        System.out.println("Continous Audio Converter Shutdown");
        
        
    }

    protected void doConversion(String recordingID, File wav, long sectionStartTime) {
        File mp3 = null;
        File ogg = null;
        try {
            mp3 = convertToMP3(recordingID, wav);
            if (config.isStream()) {
                File ts = convertToTs(recordingID, mp3);

                StreamReadyEvent sre = new StreamReadyEvent(mp3, "video/MP2T", sectionStartTime);