aboutsummaryrefslogtreecommitdiffstats
path: root/src/net/java/sip/communicator/impl/replacement/bliptv/ReplacementServiceBliptvImpl.java
blob: d51bd36bcdcbdd045f286c067a8b447c0da50652 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
/*
 * 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.bliptv;

import java.io.*;
import java.net.*;
import java.util.regex.*;

import org.json.*;

import net.java.sip.communicator.service.replacement.*;
import net.java.sip.communicator.util.*;

/**
 * Implements the {@link ReplacementService} to provide previews for Blip.tv
 * links.
 * 
 * @author Purvesh Sahoo
 */
public class ReplacementServiceBliptvImpl
    implements ReplacementService
{
    /**
     * The logger for this class.
     */
    private static final Logger logger =
        Logger.getLogger(ReplacementServiceBliptvImpl.class);

    /**
     * The regex used to match the link in the message.
     */
    public static final String BLIPTV_PATTERN =
        "(?:[\\>])(http:\\/\\/(?:www\\.)?blip\\.tv\\/file\\/(\\d+).*(?=<))";

    /**
     * Configuration label shown in the config form. 
     */
    public static final String BLIPTV_CONFIG_LABEL = "Blip.tv";

    /**
     * Source name; also used as property label.
     */
    public static final String SOURCE_NAME = "BLIPTV";
    
    /**
     * Constructor for <tt>ReplacementServiceBliptvImpl</tt>.
     */
    public ReplacementServiceBliptvImpl()
    {
        logger.trace("Creating a Blip.TV Source.");
    }

    /**
     * Replaces the Blip.tv 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(BLIPTV_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 = "http://oohembed.com/oohembed/?url=" + m.group(1);

                URL sourceURL = new URL(url);
                URLConnection conn = sourceURL.openConnection();

                BufferedReader in =
                    new BufferedReader(new InputStreamReader(conn
                        .getInputStream()));

                String inputLine, holder = "";

                while ((inputLine = in.readLine()) != null)
                    holder += inputLine;
                in.close();

                JSONObject wrapper = new JSONObject(holder);

                String thumbUrl = wrapper.getString("thumbnail_url");

                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;
    }
    
    /**
     * Returns the source name
     * 
     * @return the source name
     */
    public String getSourceName()
    {
        return SOURCE_NAME;
    }
}