1 /*
2  * This program is free software; you can redistribute it and/or
3  * modify it under the terms of the GNU General Public License
4  * as published by the Free Software Foundation; either version 2
5  * of the License, or (at your option) any later version.
6  *
7  * This program is distributed in the hope that it will be useful,
8  * but WITHOUT ANY WARRANTY; without even the implied warranty of
9  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
10  * GNU General Public License for more details.
11 
12  * You should have received a copy of the GNU General Public License
13  * along with this program; if not, write to the Free Software
14  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
15  */
16 package net.sf.jftp.tools;
17 
18 import net.sf.jftp.JFtp;
19 import net.sf.jftp.config.Settings;
20 import net.sf.jftp.gui.*;
21 import net.sf.jftp.gui.base.StatusCanvas;
22 import net.sf.jftp.gui.framework.*;
23 import net.sf.jftp.system.LocalIO;
24 import net.sf.jftp.system.logging.Log;
25 import net.sf.jftp.util.*;
26 
27 import java.awt.*;
28 import java.awt.event.*;
29 
30 import java.net.*;
31 
32 import java.util.*;
33 
34 import javax.swing.*;
35 
36 
37 public class RSSFeeder extends JPanel implements Runnable, ActionListener
38 {
39     public static String urlstring = Settings.getRSSFeed();
40     Thread runner;
41     URL url;
42     RSSParser parser;
43     StatusCanvas can = new StatusCanvas();
44     HImageButton next = new HImageButton(Settings.nextRSSImage, "nextRSS",
45                                          "Display next RSS news item", this);
46     boolean header = false;
47     boolean breakHeader = false;
48     int HEADER_IVAL = 4000;
49     int LOAD_IVAL = 31 * 60000;
50 
51     //"http://www.spiegel.de/schlagzeilen/rss/0,5291,,00.xml";
RSSFeeder()52     public RSSFeeder()
53     {
54         setLayout(new BorderLayout(0, 0));
55         next.setPreferredSize(new Dimension(22, 22));
56         next.setMaximumSize(new Dimension(22, 22));
57 
58         //next.addActionListener(this);
59         add("West", next);
60         add("Center", can);
61         setPreferredSize(new Dimension(500, 25));
62         runner = new Thread(this);
63         runner.start();
64     }
65 
switchTo(String u)66     public void switchTo(String u)
67     {
68         if(u == null)
69         {
70             return;
71         }
72 
73         urlstring = u;
74 
75         runner.stop();
76         runner = new Thread(this);
77         runner.start();
78     }
79 
run()80     public void run()
81     {
82         long time;
83 
84         LocalIO.pause(3000);
85 
86         Log.out("Starting RSS Feed");
87 
88         try
89         {
90             can.setInterval(10);
91             url = new URL(urlstring);
92             parser = new RSSParser(url);
93             time = System.currentTimeMillis();
94         }
95         catch(Exception ex)
96         {
97             Log.debug("Error: Can't load RSS feed (" + ex + ")");
98             ex.printStackTrace();
99 
100             return;
101         }
102 
103         while(true)
104         {
105             try
106             {
107                 Enumeration e = parser.titles.elements();
108                 Enumeration e2 = parser.descs.elements();
109 
110                 while(e.hasMoreElements())
111                 {
112                     can.setText((String) e.nextElement());
113                     next.setEnabled(true);
114                     header = true;
115 
116                     int i = 0;
117 
118                     while(!breakHeader && (i < 100))
119                     {
120                         LocalIO.pause(HEADER_IVAL / 100);
121                         i++;
122                     }
123 
124                     next.setEnabled(false);
125                     breakHeader = false;
126                     header = false;
127 
128                     if(e2.hasMoreElements())
129                     {
130                         next.setEnabled(true);
131                         can.scrollText((String) e2.nextElement());
132                         next.setEnabled(false);
133                     }
134                 }
135             }
136             catch(Exception ex)
137             {
138                 ex.printStackTrace();
139             }
140 
141             if(System.currentTimeMillis() > (LOAD_IVAL + time))
142             {
143                 parser = new RSSParser(url);
144                 time = System.currentTimeMillis();
145             }
146         }
147     }
148 
actionPerformed(ActionEvent e)149     public void actionPerformed(ActionEvent e)
150     {
151         if(e.getSource() == next)
152         {
153             if(header)
154             {
155                 breakHeader = true;
156             }
157             else
158             {
159                 can.forward();
160             }
161         }
162     }
163 }
164