Package dreamboxdataservice

Source Code of dreamboxdataservice.DreamboxDataService

/*
* TV-Browser
* Copyright (C) 04-2003 Martin Oberhauser (martin@tvbrowser.org)
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
*
* CVS information:
*  $RCSfile$
*   $Source$
*     $Date: 2007-09-20 23:45:38 +0200 (Do, 20 Sep 2007) $
*   $Author: bananeweizen $
* $Revision: 3894 $
*/
package dreamboxdataservice;

import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.UnsupportedEncodingException;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.Properties;
import java.util.TimeZone;
import java.util.TreeMap;

import javax.xml.parsers.ParserConfigurationException;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;

import org.apache.commons.codec.binary.Base64;
import org.apache.commons.lang.StringUtils;
import org.xml.sax.SAXException;

import tvdataservice.SettingsPanel;
import tvdataservice.TvDataUpdateManager;
import util.exc.TvBrowserException;
import util.io.IOUtilities;
import util.ui.Localizer;
import devplugin.AbstractTvDataService;
import devplugin.Channel;
import devplugin.ChannelGroup;
import devplugin.ChannelGroupImpl;
import devplugin.Date;
import devplugin.PluginInfo;
import devplugin.ProgressMonitor;
import devplugin.Version;


public class DreamboxDataService extends AbstractTvDataService {
    /**
     * get list of bouquets
     */
    private final static String BOUQUETLIST = "1:7:1:0:0:0:0:0:0:0:(type == 1) || (type == 17) || (type == 195) || (type == 25)FROM BOUQUET \"bouquets.tv\" ORDER BY bouquet";

    /**
     * Translator
     */
    private static final Localizer mLocalizer = Localizer.getLocalizerFor(DreamboxDataService.class);

    private static final Version VERSION = new Version(0, 6, 2);

    private ChannelGroup mChannelGroup = new ChannelGroupImpl("Dreambox", "Dreambox", "Dreambox", "Dreambox");

    private Properties mProperties;
    /**
     * List of Channels
     */
    private ArrayList<Channel> mChannels = new ArrayList<Channel>();


    public void setWorkingDirectory(File dataDir) {
    }

    public ChannelGroup[] getAvailableGroups() {
        return new ChannelGroup[]{mChannelGroup};
    }

    public void updateTvData(TvDataUpdateManager updateManager, Channel[] channelArr, Date startDate, int dateCount, ProgressMonitor monitor) throws TvBrowserException {
        String ip = mProperties.getProperty("ip", "").trim();

        if (StringUtils.isNotEmpty(ip)) {
            int max = channelArr.length;

            monitor.setMaximum(max);
            monitor.setMessage(mLocalizer.msg("parsing", "Parsing Dreambox Data"));

            int pos = 0;
            for (Channel ch : channelArr) {
                pos++;
                monitor.setValue(pos);
                getEPGData(updateManager, ch);
            }

            monitor.setMessage("");

        }
    }

    public void loadSettings(Properties settings) {
        mProperties = settings;

        int numChannels = Integer.parseInt(settings.getProperty("NumberOfChannels", "0"));

        mChannels = new ArrayList<Channel>();

        TimeZone timeZone = TimeZone.getTimeZone("GMT+1:00");
        for (int i = 0; i < numChannels; i++) {
            Channel ch = new Channel(this, settings.getProperty("ChannelTitle-" + i, ""), settings.getProperty("ChannelId-"
                    + i, ""), timeZone, "de", "Imported from Dreambox", "", mChannelGroup, null, Channel.CATEGORY_TV);

            mChannels.add(ch);
        }
    }

    public Properties storeSettings() {
      Properties prop = new Properties();

      if (mProperties == null) {
        mProperties = new Properties();
      }
      prop.setProperty("ip", mProperties.getProperty("ip",""));
      prop.setProperty("username", mProperties.getProperty("username", ""));
      prop.setProperty("password", mProperties.getProperty("password", ""));

      if (mChannels != null) {
        prop.setProperty("NumberOfChannels", Integer.toString(mChannels.size()));
        int max = mChannels.size();
        for (int i = 0; i < max; i++) {
            Channel ch = mChannels.get(i);
            prop.setProperty("ChannelId-" + i, ch.getId());
            prop.setProperty("ChannelTitle-" + i, ch.getName());
        }
      } else {
        prop.setProperty("NumberOfChannels", "0");
      }

      return prop;
    }


    public boolean hasSettingsPanel() {
        return true;
    }

    public SettingsPanel getSettingsPanel() {
        return new DreamboxSettingsPanel(mProperties);
    }

    public Channel[] getAvailableChannels(ChannelGroup group) {
        return mChannels.toArray(new Channel[mChannels.size()]);
    }

    public Channel[] checkForAvailableChannels(ChannelGroup group, ProgressMonitor monitor) throws TvBrowserException {
        String ip = mProperties.getProperty("ip", "").trim();
        if (StringUtils.isNotEmpty(ip)) {
            mChannels = getChannels();
        } else {
            mChannels = new ArrayList<Channel>();
        }
        return mChannels.toArray(new Channel[mChannels.size()]);
    }

    public ChannelGroup[] checkForAvailableChannelGroups(ProgressMonitor monitor) throws TvBrowserException {
        return new ChannelGroup[]{mChannelGroup};
    }

    public boolean supportsDynamicChannelList() {
        return true;
    }

    public boolean supportsDynamicChannelGroups() {
        return false;
    }


    public static Version getVersion() {
        return VERSION;
    }

    public PluginInfo getInfo() {
        return new PluginInfo(DreamboxDataService.class, mLocalizer.msg("name", "Dreambox Data"), mLocalizer.msg("desc", "Loads data from the dreambox."),
                "Bodo Tasche");
    }

    /**
     * @return All channels available in the dreambox
     */
    public ArrayList<Channel> getChannels() {
        try {
            ArrayList<Channel> allChannels = new ArrayList<Channel>();

            TreeMap<String, String> bouquets = getServiceDataBonquets(URLEncoder.encode(BOUQUETLIST, "UTF8"));

            if (bouquets != null) {
                for (String key : bouquets.keySet()) {
                    TreeMap<String, String> map = getServiceData(URLEncoder.encode(key, "UTF8"));

                    for (String mkey : map.keySet()) {
                        Channel ch = new Channel(this, map.get(mkey), "DREAM" + StringUtils.replace(mkey, ":", "_"), TimeZone.getTimeZone("GMT+1:00"), "de",
                                "Imported from Dreambox", "", mChannelGroup, null, Channel.CATEGORY_TV);
                        allChannels.add(ch);
                    }
                }
            }

            return allChannels;
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }

        return new ArrayList<Channel>();
    }

    /**
     * @param service Service-ID
     * @return Data of specific service
     */
    public TreeMap<String, String> getServiceDataBonquets(String service) {
        try {
            URL url = new URL("http://" + mProperties.getProperty("ip","") + "/web/getservices?bRef=" + service);

            URLConnection connection = url.openConnection();

            String userpassword = mProperties.getProperty("username", "") + ":" + IOUtilities.xorEncode(mProperties.getProperty("password", ""), DreamboxSettingsPanel.PASSWORDSEED);
            String encoded = new String(Base64.encodeBase64(userpassword.getBytes()));
            connection.setRequestProperty("Authorization", "Basic " + encoded);

            connection.setConnectTimeout(10);
            InputStream stream = connection.getInputStream();

            SAXParser saxParser = SAXParserFactory.newInstance().newSAXParser();

            DreamboxHandler handler = new DreamboxHandler();

            saxParser.parse(stream, handler);

            return handler.getData();
        } catch (ParserConfigurationException e) {
            e.printStackTrace();
        } catch (SAXException e) {
            e.printStackTrace();
        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

        return null;
    }

    /**
     * @param service Service-ID
     * @return Data of specific service
     */
    public TreeMap<String, String> getServiceData(String service) {
        try {
            URL url = new URL("http://" + mProperties.getProperty("ip", "") + "/web/getservices?sRef=" + service);
            URLConnection connection = url.openConnection();

            String userpassword = mProperties.getProperty("username", "") + ":" + IOUtilities.xorEncode(mProperties.getProperty("password", ""), DreamboxSettingsPanel.PASSWORDSEED);
            String encoded = new String(Base64.encodeBase64(userpassword.getBytes()));
            connection.setRequestProperty("Authorization", "Basic " + encoded);

            connection.setConnectTimeout(10);
            InputStream stream = connection.getInputStream();

            SAXParser saxParser = SAXParserFactory.newInstance().newSAXParser();

            DreamboxHandler handler = new DreamboxHandler();

            saxParser.parse(stream, handler);

            return handler.getData();
        } catch (ParserConfigurationException e) {
            e.printStackTrace();
        } catch (SAXException e) {
            e.printStackTrace();
        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

        return null;
    }

    private void getEPGData(TvDataUpdateManager updateManager, Channel ch) {
        try {
            URL url = new URL("http://" + mProperties.getProperty("ip", "") + "/web/epgservice?sRef=" + StringUtils.replace(StringUtils.replace(ch.getId().substring(5), "_", ":"), " ", "%20"));

            URLConnection connection = url.openConnection();

            String userpassword = mProperties.getProperty("username", "") + ":" + IOUtilities.xorEncode(mProperties.getProperty("password", ""), DreamboxSettingsPanel.PASSWORDSEED);
            String encoded = new String(Base64.encodeBase64(userpassword.getBytes()));
            connection.setRequestProperty("Authorization", "Basic " + encoded);

            connection.setConnectTimeout(60);
            InputStream stream = connection.getInputStream();

            SAXParser saxParser = SAXParserFactory.newInstance().newSAXParser();

            DreamboxChannelHandler handler = new DreamboxChannelHandler(updateManager, ch);

            saxParser.parse(stream, handler);
        } catch (ParserConfigurationException e) {
            e.printStackTrace();
        } catch (SAXException e) {
            e.printStackTrace();
        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }


}
TOP

Related Classes of dreamboxdataservice.DreamboxDataService

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.