home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 1995 November / PCWK1195.iso / inne / win95 / sieciowe / hotja32.lzh / hotjava / classsrc / net / www / protocol / news / postmessagebutton.java < prev    next >
Text File  |  1995-08-11  |  5KB  |  155 lines

  1. /*
  2.  * @(#)PostMessageButton.java    1.9 95/05/21 James Gosling, Jonathan Payne
  3.  * 
  4.  * Copyright (c) 1994 Sun Microsystems, Inc. All Rights Reserved.
  5.  * 
  6.  * Permission to use, copy, modify, and distribute this software and its
  7.  * documentation for NON-COMMERCIAL purposes and without fee is hereby
  8.  * granted provided that this copyright notice appears in all copies. Please
  9.  * refer to the file "copyright.html" for further important copyright and
  10.  * licensing information.
  11.  * 
  12.  * SUN MAKES NO REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE
  13.  * SOFTWARE, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
  14.  * IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE,
  15.  * OR NON-INFRINGEMENT. SUN SHALL NOT BE LIABLE FOR ANY DAMAGES SUFFERED BY
  16.  * LICENSEE AS A RESULT OF USING, MODIFYING OR DISTRIBUTING THIS SOFTWARE OR
  17.  * ITS DERIVATIVES.
  18.  */
  19.  
  20. package net.www.protocol.news;
  21.  
  22. import java.io.*;
  23. import java.util.*;
  24. import net.nntp.*;
  25. import net.smtp.SmtpClient;
  26. // import browser.Applet;
  27. // import browser.WRWindow;
  28. // import browser.DocumentManager;
  29. import browser.hotjava;
  30. import net.TelnetInputStream;
  31. import net.UnknownHostException;
  32. import awt.*;
  33.  
  34. /** The "post" button on the mail/news dialog box */
  35. class PostMessageButton extends Button implements Runnable {
  36.     public PostMessageButton (Container w, ArticlePoster ap) {
  37.     super("Send", "", w);
  38.     article = ap;
  39.     }
  40.  
  41.     private Thread sender;
  42.  
  43.     public void selected(Component ct, int pos) {
  44.     if (sender != null && sender.isAlive())
  45.         article.status("Send in progress.");
  46.     else {
  47.         article.status("Sending...");
  48.         sender = new Thread(this);
  49.         sender.start();
  50.     }
  51.     }
  52.  
  53.     public void run() {
  54.     String user = article.from.getText().trim();
  55.     if (user.length() == 0) {
  56.         article.status("Please enter a 'from' address");
  57.         sender = null;
  58.         return;
  59.     }
  60.     if (hotjava.props != null) {
  61.         String ouser = (String) hotjava.props.get("usersMailAddress");
  62.         if (!user.equals(ouser)) {
  63.         hotjava.props.put("usersMailAddress", user);
  64.         hotjava.props.save();
  65.         }
  66.     }
  67.     if (article.mailing) {
  68.         try {
  69.         String to = article.group.getText().trim();
  70.         String cc = article.cc != null ? article.cc.getText().trim() : "";
  71.         SmtpClient os = new SmtpClient();
  72.         os.from(user);
  73.         os.to(to);
  74.         os.to(cc);
  75.         PrintStream ms = os.startMessage();
  76.         ms.print("From: " + user + "\nTo: " + to + "\nSubject: " + article.subject.getText() + "\r\n");
  77.         if (cc.length() > 0)
  78.             ms.print("Cc: " + cc + "\r\n");
  79.         String pd = article.wwwEncodedBody;
  80.         if (article.reference != null)
  81.             ms.print("In-Reply-To: <" + article.reference + ">\n");
  82.         if (pd != null)
  83.             ms.print("Content-Type: application/x-www-form-urlencoded\n");
  84.         else if (article.htmlToggle != null && article.htmlToggle.getState())
  85.             ms.print("Content-type: text/html\n");
  86.         ms.print("x-Mailer: " + hotjava.programName + " " + hotjava.version + " "
  87.              + System.getOSName() + "\n");
  88.         if (pd != null) {
  89.             int len = pd.length();
  90.             int pos = 0;
  91.             int col = 0;
  92.             ms.print("Content-Length: "+(len+(len/70+1)*2)+"\r\n\r\n");
  93.             while (pos < len) {
  94.             char c = pd.charAt(pos++);
  95.             col++;
  96.             if (col > 70) {
  97.                 col = 1;
  98.                 ms.print("\r\n");
  99.             }
  100.             ms.write(c);
  101.             }
  102.             ms.print("\r\n");
  103.         } else {
  104.             ms.print("\r\n");
  105.             if (article.t != null)
  106.             ms.print(article.t.getText());
  107.         }
  108.         os.closeServer();
  109.         article.unMap();
  110.         article.dispose();
  111.         } catch(Exception e) {
  112.         String msg = e.getMessage();
  113.         if (msg == null)
  114.             msg = e.toString();
  115.         article.status("Mail send failure: " + msg);
  116.         }
  117.     } else {
  118.         NntpClient ns = newsFetcher.news;
  119.         PrintStream ps = ns.startPost();
  120.         if (ps == null)
  121.         article.status("Couldn't start post: " + ns.getResponseString());
  122.         else {
  123.         ps.print("Subject: " + article.subject.getText() + "\r\n");
  124.         ps.print("From: " + user + "\r\n");
  125.         if (article.htmlToggle != null && article.htmlToggle.getState())
  126.             ps.print("Content-type: text/html\n");
  127.         if (article.reference != null)
  128.             ps.print("References: <" + article.reference + ">\n");
  129.         ps.print("Newsgroups: " + article.group.getText() + "\r\n\r\n");
  130.         String body = article.t != null ? article.t.getText() : "";
  131.         int limit = body.length();
  132.         int c = 0;
  133.         for (int i = 0; i < limit; i++) {
  134.             c = body.charAt(i);
  135.             if (c == '\n')
  136.             ps.print("\r\n");
  137.             else
  138.             ps.write(c);
  139.         }
  140.         if (c != '\n')
  141.             ps.print("\r\n");
  142.         if (!ns.finishPost())
  143.             article.status("Couldn't finish post: " + ns.getResponseString());
  144.         else {
  145.             article.unMap();
  146.             article.dispose();
  147.         }
  148.         }
  149.     }
  150.     sender = null;
  151.     }
  152.  
  153.     ArticlePoster article;
  154. }
  155.