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