// 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;
        //System.out.println("Renaming");
        mp3Temp.renameTo(mp3);
        return mp3;
    }
    private synchronized File convertToOGG(String recordingID, File wav) throws InterruptedException, IOException {
        File ogg = getFileForDocument(recordingID, wav, ".ogg");
        if (ogg.exists()) return ogg;


        long bitrate = config.getOggBitrate();
        long frequency = config.getOggFrequency();
        
        File oggTemp = getFileForDocument(recordingID, wav, "tmp.ogg");
        FFMpegConverter converter = new FFMpegConverter(getFfmpegcmd(), FFMpegConverter.ENCODER_VORBIS);

        converter.convert(wav, bitrate, frequency, oggTemp, true);
        oggTemp.renameTo(ogg);
        return ogg;
    }
    private File convertToTs(String recordingID, File mp3) throws InterruptedException, IOException {
        FFMpegConverter converter = new FFMpegConverter(getFfmpegcmd(), FFMpegConverter.ENCODER_MP3);
        File ts = getFileForDocument(recordingID, mp3, ".ts");
        converter.makeTS(mp3, ts);
        return ts;
    }
    private File getFileForDocument(String recordingID, File wav, String suffix) {
        // just do sibblings
        String count = getSegmentCount(wav);


// 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;

        //System.out.println("Renaming");
        mp3Temp.renameTo(mp3);
        return mp3;
    }
    private synchronized File convertToOGG(String recordingID, File wav) throws InterruptedException, IOException {
        File ogg = getFileForDocument(recordingID, wav, ".ogg");
        if (ogg.exists()) return ogg;


        long bitrate = config.getOggBitrate();
        long frequency = config.getOggFrequency();
        
        File oggTemp = getFileForDocument(recordingID, wav, "tmp.ogg");
        FFMpegConverter converter = new FFMpegConverter(getFfmpegcmd(), FFMpegConverter.ENCODER_VORBIS);

        converter.convert(wav, bitrate, frequency, oggTemp, true);
        oggTemp.renameTo(ogg);
        return ogg;
    }
    private File convertToTs(String recordingID, File mp3) throws InterruptedException, IOException {
        FFMpegConverter converter = new FFMpegConverter(getFfmpegcmd(), FFMpegConverter.ENCODER_MP3);
        File ts = getFileForDocument(recordingID, mp3, ".ts");
        converter.makeTS(mp3, ts);
        return ts;
    }
    private File getFileForDocument(String recordingID, File wav, String suffix) {
        // just do sibblings
        String count = getSegmentCount(wav);


        String safeId = Slugger.generateSlug(recordingID);