Package com.bramosystems.oss.player.provider.vimeo.client.impl

Source Code of com.bramosystems.oss.player.provider.vimeo.client.impl.VimeoPlayerProvider$EventHandler

/*
* Copyright 2012 sbraheem.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
*      http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.bramosystems.oss.player.provider.vimeo.client.impl;

import com.bramosystems.oss.player.core.client.*;
import com.bramosystems.oss.player.core.client.spi.ConfigurationContext;
import com.bramosystems.oss.player.core.client.spi.PlayerElement;
import com.bramosystems.oss.player.core.client.spi.PlayerProvider;
import com.bramosystems.oss.player.core.client.spi.PlayerProviderFactory;
import com.bramosystems.oss.player.provider.vimeo.client.VimeoFlashPlayer;
import com.bramosystems.oss.player.provider.vimeo.client.VimeoUniversalPlayer;
import com.google.gwt.core.client.JavaScriptObject;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;

/**
*
* @author sbraheem
*/
@PlayerProvider(VimeoPlayerProvider.PROVIDER_NAME)
public class VimeoPlayerProvider implements PlayerProviderFactory {

    public static final String PROVIDER_NAME = "bst.vimeo",
            UNIVERSAL_PLAYER = "UniversalPlayer", FLASH_PLAYER = "FlashPlayer";
    private ConfigurationContext context;

    @Override
    public void init(ConfigurationContext context) {
        this.context = context;
        initMessageHandlersImpl(context.getGlobalJSStack());
    }

    private native void initMessageHandlersImpl(JavaScriptObject v) /*-{   
     $wnd.addEventListener('message', function(evt){
     if(evt.origin != 'http://player.vimeo.com') return;
     var dt = JSON.parse(evt.data);
     var p = dt.player_id;
     if(v[p] != null) {
     if(dt.event) {
     switch(dt.event) {
     case "ready":
     v[p].onInit();
     break;
     case "loadProgress":
     v[p].onLoadProgress(dt.data);
     break;
     case "playProgress":
     v[p].onPlayProgress(dt.data);
     break;
     case "play":
     v[p].onPlay();
     break;
     case "pause":
     v[p].onPause();
     break;
     case "finish":
     v[p].onFinish();
     break;
     case "seek":
     v[p].onSeek(dt.data);
     break;
     }
     } else {
     v[p].onMth(dt);
     }
     }
     }, false);
     }-*/;

    @Override
    public PlayerElement getPlayerElement(String playerName, String playerId, String mediaId, boolean autoplay, HashMap<String, String> params) {
        if (playerName.equals(UNIVERSAL_PLAYER)) {
            params.put("player_id", playerId);

            StringBuilder src = new StringBuilder("http://player.vimeo.com/video/");
            src.append(mediaId).append("?");

            Iterator<String> it = params.keySet().iterator();
            while (it.hasNext()) {
                String ky = it.next();
                src.append(ky).append("=").append(params.get(ky)).append("&");
            }
            src.deleteCharAt(src.lastIndexOf("&"));

            PlayerElement pe = new PlayerElement(PlayerElement.Type.IFrameElement, playerId, "");
            pe.addParam("frameborder", "0");
            pe.addParam("src", src.toString());
            return pe;
        } else {
            throw new IllegalArgumentException("Player '" + playerName + "' not known to this provider");
        }
    }

    @Override
    public PluginVersion getDetectedPluginVersion(String playerName) throws PluginNotFoundException {
        if (playerName.equals(FLASH_PLAYER)) {
            return PlayerUtil.getFlashPlayerVersion();
        } else if (playerName.equals(UNIVERSAL_PLAYER)) {
            if (PlayerUtil.isHTML5CompliantClient()) {
                return PluginVersion.get(5, 0, 0);
            } else {
                throw new PluginNotFoundException(Plugin.Native, "An HTML5 compliant browser is required!");
            }
        } else {
            throw new IllegalArgumentException("Player '" + playerName + "' not known to this provider");
        }
    }

    @Override
    public AbstractMediaPlayer getPlayer(String playerName, String mediaURL, boolean autoplay, String height, String width)
            throws PluginNotFoundException, PluginVersionException {
        if (playerName.equals(FLASH_PLAYER)) {
            return new VimeoFlashPlayer(mediaURL, autoplay, width, height);
        } else if (playerName.equals(UNIVERSAL_PLAYER)) {
            return new VimeoUniversalPlayer(mediaURL, autoplay, width, height);
        } else {
            throw new IllegalArgumentException("Player '" + playerName + "' not known to this provider");
        }
    }

    @Override
    public AbstractMediaPlayer getPlayer(String playerName, String mediaURL, boolean autoplay)
            throws PluginNotFoundException, PluginVersionException {
        return getPlayer(playerName, mediaURL, autoplay, "400px", "300px");
    }

    @Override
    public PluginInfo getDetectedPluginInfo(String playerName) throws PluginNotFoundException {
        if (playerName.equals(FLASH_PLAYER)) {
            return PlayerUtil.getPluginInfo(Plugin.FlashPlayer);
        } else if (playerName.equals(UNIVERSAL_PLAYER)) {
            return PlayerUtil.getPluginInfo(Plugin.Native);
        } else {
            throw new IllegalArgumentException("Player '" + playerName + "' not known to this provider");
        }
    }

    @Override
    public Set<String> getPermittedMimeTypes(String playerName, PluginVersion version) {
        return new HashSet<String>();
    }

    @Override
    public Set<String> getPermittedMediaProtocols(String playerName, PluginVersion version) {
        return new HashSet<String>();
    }

    /**
     * *********************** Native Utils **************************************
     */
    public void initHandlers(String playerId, EventHandler handler) {
        initHandlersImpl(playerId, context.getGlobalJSStack(), handler);
    }

    public void closeHandlers(String playerId) {
        closeImpl(playerId, context.getGlobalJSStack());
    }

    public String getInitFunctionRef(String playerId) {
        return context.getGlobalJSStackName() + "." + playerId + ".onInit";
    }

    public String getEvtFunctionBaseName(String playerId) {
        return context.getGlobalJSStackName() + "." + playerId;
    }

    private native void closeImpl(String p, JavaScriptObject v) /*-{
     delete v[p];
     }-*/;

    private native void initHandlersImpl(String p, JavaScriptObject v, EventHandler h) /*-{
     v[p] = new Object();
     v[p].onInit = function(){
     h.@com.bramosystems.oss.player.provider.vimeo.client.impl.VimeoPlayerProvider.EventHandler::onInit()();
     }
     v[p].onMth = function(evt){
     h.@com.bramosystems.oss.player.provider.vimeo.client.impl.VimeoPlayerProvider.EventHandler::onMethod(Ljava/lang/String;Ljava/lang/String;)(evt.method,evt.value);
     }
     v[p].onMsg = function(evt){
     h.@com.bramosystems.oss.player.provider.vimeo.client.impl.VimeoPlayerProvider.EventHandler::onMsg(Ljava/lang/String;)(evt);
     }
     v[p].onLoadProgress = function(evt){
     h.@com.bramosystems.oss.player.provider.vimeo.client.impl.VimeoPlayerProvider.EventHandler::onLoadingProgress(DD)(parseFloat(evt.percent),parseFloat(evt.duration));
     }
     v[p].onPlayProgress = function(evt){
     h.@com.bramosystems.oss.player.provider.vimeo.client.impl.VimeoPlayerProvider.EventHandler::onPlayingProgress(D)(parseFloat(evt.seconds));
     }
     v[p].onPlay = function(){
     h.@com.bramosystems.oss.player.provider.vimeo.client.impl.VimeoPlayerProvider.EventHandler::onPlay()();
     }
     v[p].onPause = function(){
     h.@com.bramosystems.oss.player.provider.vimeo.client.impl.VimeoPlayerProvider.EventHandler::onPause()();
     }
     v[p].onFinish = function(){
     h.@com.bramosystems.oss.player.provider.vimeo.client.impl.VimeoPlayerProvider.EventHandler::onFinish()();
     }
     v[p].onSeek = function(evt){
     h.@com.bramosystems.oss.player.provider.vimeo.client.impl.VimeoPlayerProvider.EventHandler::onSeek(D)(evt.seconds);
     }
     }-*/;

    /*************************** Event Handler Interface *********************************/
    public static interface EventHandler {

        public void onInit();

        public void onLoadingProgress(double progress,double duration);

        public void onPlayingProgress(double seconds);

        public void onPlay();

        public void onFinish();

        public void onPause();

        public void onSeek(double seconds);

        public void onMsg(String msg);
       
        public void onMethod(String method, String retVal);
    }
}
TOP

Related Classes of com.bramosystems.oss.player.provider.vimeo.client.impl.VimeoPlayerProvider$EventHandler

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.