Package com.googlecode.eckoit.util

Source Code of com.googlecode.eckoit.util.FFMpegSetterUpper

/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/

package com.googlecode.eckoit.util;

import com.github.couchapptakeout.events.utils.DefaultUnzipper;
import com.github.couchapptakeout.events.utils.Unzipper;
import java.io.File;
import java.io.IOException;
import java.util.Arrays;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.apache.commons.io.FileUtils;
import org.apache.commons.lang.NotImplementedException;
import org.apache.commons.lang.SystemUtils;
import org.ektorp.AttachmentInputStream;
import org.ektorp.CouchDbConnector;

/**
*
* @author ryan
*/
public class FFMpegSetterUpper {



    /**
     * This will do everything in its power to get a ffmpeg name back.
     *
     * @param workingDir The working dir that will hold a cached copy of ffmpeg
     * @param connector A couchdb that holds binary copies of ffmpeg
     * @param designDocName the design doc that holds the binary copies
     * @return
     * @throws NotImplementedException ffmpeg cant be found anywhere!
     */
    public String ffmpegLocation(File workingDir, CouchDbConnector connector, String designDocName) throws NotImplementedException {
        String localFile = findLocalFFMpeg(workingDir);
        if (localFile != null) return localFile;

        // test system wide
        String system = findFFmepg();
        if (system != null) return system;

        return installFFMpegAndReturnLocation(workingDir, connector, designDocName);

    }


    protected String installFFMpegAndReturnLocation(File workingDir, CouchDbConnector connector, String designDocName) throws NotImplementedException {
        try {
            installLocalffmpg(workingDir, connector, designDocName);
            String localFile = findLocalFFMpeg(workingDir);
            if (localFile != null) return localFile;

            // if we are here, we cant find ffmpeg
            throw new NotImplementedException("FFMpeg can't be found.");

        } catch (IOException ex) {
            Logger.getLogger(FFMpegSetterUpper.class.getName()).log(Level.SEVERE, null, ex);
            throw new NotImplementedException("FFMpeg can't be found.");
        }
    }



    String windowsAttachmentName = "binaries/ffmpeg-win32.zip";
    String macAttachmentName = "binaries/ffmpeg-mac64.zip";


    List<String> windowsLocations = Arrays.asList(
        "C:\\Program Files\\Participatory Culture Foundation\\Miro Video Converter\\ffmpeg-bin\\ffmpeg.exe",
        "D:\\Program Files\\Participatory Culture Foundation\\Miro Video Converter\\ffmpeg-bin\\ffmpeg.exe",
        "C:\\Program Files\\FFmpeg for Audacity\\ffmpeg.exe",
        "D:\\Program Files\\FFmpeg for Audacity\\ffmpeg.exe"
    );
    List<String> macLocations = Arrays.asList(
        "/Applications/eckoit/lib/ffmpeg",
        "/Applications/Miro Video Converter.app/Contents/Resources/ffmpeg"
    );
    List<String> linuxLocations = Arrays.asList(
        "/usr/bin/ffmpeg"
    );



    protected String findLocalFFMpeg(File workingDir) {
        System.out.println(workingDir.getAbsolutePath());
        File testFile = null;
         if (SystemUtils.IS_OS_WINDOWS) {
            testFile = new File(workingDir, "ffmpeg.exe");
        }
        else if (SystemUtils.IS_OS_MAC_OSX) {
            testFile = new File(workingDir, "ffmpeg");

        }
        if (testFile == null) return null;
        if (testFile.exists() && testFile.isFile()) {
            return testFile.getAbsolutePath();
        }
        return null;
    }



    protected String findFFmepg() {
        String location = null;
        if (SystemUtils.IS_OS_WINDOWS) {
            location = checkLocations(windowsLocations);
        }
        else if (SystemUtils.IS_OS_MAC_OSX) {
            location = checkLocations(macLocations);

        } else if (SystemUtils.IS_OS_LINUX) {
            location = checkLocations(linuxLocations);
        }
        return location;       
    }


    protected boolean ffmpegCheck(String location) {
        File f = new File(location);
        if (f.exists() && f.isFile()) return true;
        else return false;
    }

    private String checkLocations(List<String> windowsLocations) {
        for(String location : windowsLocations) {
            if (ffmpegCheck(location)) return location;
        }
        return null;
    }




    protected void installLocalffmpg(File storDir, CouchDbConnector connector, String designDoc) throws IOException {
        String attachmentName = null;
        if (SystemUtils.IS_OS_WINDOWS) {
            attachmentName = windowsAttachmentName;
        }
        else if (SystemUtils.IS_OS_MAC_OSX) {
            attachmentName = macAttachmentName;

        } else {
            return;
        }
        File zip = downloadLocalZip(storDir, connector, designDoc, attachmentName);
        unzip(zip, storDir);
        zip.delete();
    }




    protected File downloadLocalZip(File storeDir, CouchDbConnector connector, String designDoc, String attachmentName) throws IOException {
        AttachmentInputStream is = connector.getAttachment(designDoc, attachmentName);
        File zipFile = new File(storeDir,"ffmpeg.zip");
        FileUtils.copyInputStreamToFile(is, zipFile);
        return zipFile;
    }


    protected void unzip(File zipFile, File dir) throws IOException {
        Unzipper uz = new DefaultUnzipper();
        uz.doUnzip(zipFile, dir);
    }



}
TOP

Related Classes of com.googlecode.eckoit.util.FFMpegSetterUpper

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.