diff options
Diffstat (limited to 'src/net/java/sip/communicator/impl/replacement/viddler')
3 files changed, 229 insertions, 0 deletions
diff --git a/src/net/java/sip/communicator/impl/replacement/viddler/ReplacementServiceViddlerImpl.java b/src/net/java/sip/communicator/impl/replacement/viddler/ReplacementServiceViddlerImpl.java new file mode 100644 index 0000000..676ac55 --- /dev/null +++ b/src/net/java/sip/communicator/impl/replacement/viddler/ReplacementServiceViddlerImpl.java @@ -0,0 +1,145 @@ +/* + * SIP Communicator, the OpenSource Java VoIP and Instant Messaging client. + * + * Distributable under LGPL license. See terms of license at gnu.org. + */ +package net.java.sip.communicator.impl.replacement.viddler; + +import java.io.*; +import java.net.*; +import java.util.regex.*; + +import net.java.sip.communicator.service.replacement.*; +import net.java.sip.communicator.util.*; + +/** + * Implements the {@link ReplacementService} to provide previews for Viddler + * links. + * + * @author Purvesh Sahoo + */ +public class ReplacementServiceViddlerImpl + implements ReplacementService +{ + /** + * The logger for this class. + */ + private static final Logger logger = + Logger.getLogger(ReplacementServiceViddlerImpl.class); + + /** + * The regex used to match the link in the message. + */ + public static final String VIDDLER_PATTERN = + "(?:[\\>])(http:\\/\\/(?:www\\.)?viddler\\.com\\/explore\\/(\\w+)\\/videos\\/\\d+.*(?=<\\/A>))"; + + /** + * API Key required to access the viddler api. + */ + private static final String API_KEY = "1bi6ckuzmklyaqseiqtl"; + + /** + * Viddler API url. + */ + private static final String sourceURL = + "http://api.viddler.com/rest/v1/?method=viddler.videos.getDetailsByUrl&api_key=" + + API_KEY; + + /** + * Configuration label property name. The label is saved in the languages + * file under this property. + */ + public static final String VIDDLER_CONFIG_LABEL = "VIDDLER"; + + /** + * Constructor for <tt>ReplacementServiceViddlerImpl</tt>. The source needs + * to add itself to {@link ReplacementService} sourceList to be + * displayed in the configuration panel. + */ + public ReplacementServiceViddlerImpl() + { + sourceList.add(VIDDLER_CONFIG_LABEL); + logger.trace("Creating a Viddler Source."); + } + + /** + * Replaces the viddler video links in the chat message with their + * corresponding thumbnails. + * + * @param chatString the original chat message. + * @return replaced chat message with the thumbnail image; the original + * message in case of no match. + */ + public String getReplacedMessage(String chatString) + { + final Pattern p = + Pattern.compile(VIDDLER_PATTERN, Pattern.CASE_INSENSITIVE + | Pattern.DOTALL); + Matcher m = p.matcher(chatString); + + int count = 0, startPos = 0; + StringBuffer msgBuff = new StringBuffer(); + + while (m.find()) + { + count++; + msgBuff.append(chatString.substring(startPos, m.start())); + startPos = m.end(); + + try + { + String url = sourceURL + "&url=" + m.group(1) + "/"; + + URL sourceURL = new URL(url); + URLConnection conn = sourceURL.openConnection(); + + BufferedReader in = + new BufferedReader(new InputStreamReader(conn + .getInputStream())); + + String inputLine; + StringBuffer holder = new StringBuffer(); + + while ((inputLine = in.readLine()) != null) + holder.append(inputLine); + in.close(); + + String startTag = "<thumbnail_url>"; + String endTag = "</thumbnail_url>"; + + String response = holder.toString(); + + int start = response.indexOf(startTag) + startTag.length(); + int end = response.toString().indexOf(endTag); + String thumbUrl = response.substring(start, end); + + if (thumbUrl != null) + { + msgBuff.append("<IMG HEIGHT=\"90\" WIDTH=\"120\" SRC=\""); + msgBuff.append(thumbUrl); + msgBuff.append("\"></IMG>"); + + } + else + { + startPos = 0; + msgBuff = new StringBuffer(); + } + + } + catch (Exception e) + { + startPos = 0; + msgBuff = new StringBuffer(); + e.printStackTrace(); + } + } + + msgBuff.append(chatString.substring(startPos)); + + if (!msgBuff.toString().equals(chatString)) + return msgBuff.toString(); + + return chatString; + } +}
\ No newline at end of file diff --git a/src/net/java/sip/communicator/impl/replacement/viddler/ViddlerActivator.java b/src/net/java/sip/communicator/impl/replacement/viddler/ViddlerActivator.java new file mode 100644 index 0000000..8ea3dfa --- /dev/null +++ b/src/net/java/sip/communicator/impl/replacement/viddler/ViddlerActivator.java @@ -0,0 +1,71 @@ +/* + * SIP Communicator, the OpenSource Java VoIP and Instant Messaging client. + * + * Distributable under LGPL license. + * See terms of license at gnu.org. + */ +package net.java.sip.communicator.impl.replacement.viddler; + +import java.util.*; + +import net.java.sip.communicator.service.replacement.*; +import net.java.sip.communicator.util.*; + +import org.osgi.framework.*; + +/** + * Activator for the Viddler source bundle. + * @author Purvesh Sahoo + */ +public class ViddlerActivator + implements BundleActivator +{ + + /** + * The <tt>Logger</tt> used by the <tt>ViddlerActivator</tt> + * class. + */ + private static final Logger logger = + Logger.getLogger(ViddlerActivator.class); + + /** + * The Viddler source service registration. + */ + private ServiceRegistration viddlerServReg = null; + + /** + * The source implementation reference. + */ + private static ReplacementService viddlerSource = null; + + /** + * Starts this bundle. + * + * @param context bundle context. + * @throws Exception + */ + public void start(BundleContext context) throws Exception + { + Hashtable<String, String> hashtable = new Hashtable<String, String>(); + hashtable.put(ReplacementService.SOURCE_NAME, "VIDDLER"); + viddlerSource = new ReplacementServiceViddlerImpl(); + + viddlerServReg = + context.registerService(ReplacementService.class.getName(), + viddlerSource, hashtable); + + logger.info("Viddler source implementation [STARTED]."); + } + + /** + * Stops bundle. + * + * @param bc context. + * @throws Exception + */ + public void stop(BundleContext bc) throws Exception + { + viddlerServReg.unregister(); + logger.info("Viddler source implementation [STOPPED]."); + } +}
\ No newline at end of file diff --git a/src/net/java/sip/communicator/impl/replacement/viddler/viddler.source.manifest.mf b/src/net/java/sip/communicator/impl/replacement/viddler/viddler.source.manifest.mf new file mode 100644 index 0000000..ed053c2 --- /dev/null +++ b/src/net/java/sip/communicator/impl/replacement/viddler/viddler.source.manifest.mf @@ -0,0 +1,13 @@ +Bundle-Activator: net.java.sip.communicator.impl.replacement.viddler.ViddlerActivator +Bundle-Name: Viddler Preview Replacement Source +Bundle-Description: A bundle providing processing for Viddler previews. +Bundle-Vendor: sip-communicator.org +Bundle-Version: 1.0.0 +System-Bundle: yes +Export-Package: net.java.sip.communicator.service.replacement +Import-Package: org.osgi.framework, + net.java.sip.communicator.service.configuration, + net.java.sip.communicator.service.resources, + net.java.sip.communicator.util, + net.java.sip.communicator.service.replacement, + org.apache.http
\ No newline at end of file |