📄 filereceivedialog.java
字号:
/* Copyright (C) 2003 Adam Olsen This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 1, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */package com.valhalla.jbother;import com.valhalla.jbother.jabber.smack.*;import org.jivesoftware.smack.packet.IQ;import org.jivesoftware.smack.packet.XMPPError;import org.jivesoftware.smackx.filetransfer.*;import org.jivesoftware.smackx.packet.*;import org.jivesoftware.smack.packet.Packet;import org.jivesoftware.smack.PacketListener;import java.io.*;import java.net.*;import javax.swing.*;import java.awt.event.KeyEvent;import com.valhalla.settings.*;import java.awt.event.ActionListener;import java.awt.event.ActionEvent;import java.awt.*;import java.util.ResourceBundle;import java.util.Locale;/** * Dialog for receiving files. It's called each time <code><streamhost></code> packet * arrives. User can accept or reject incoming file by pressing "Accept" and "Reject" buttons. * *@author Lukasz Wiechec *@created Jan 19, 2005 4:25:58 PM */public class FileReceiveDialog extends FileDialog { private FileReceive receive; private FileTransferManager ft; private static JFileChooser fileChooser = new JFileChooser(); private JLabel sizeLabel = null; private JTextField sizeField = new JTextField(); java.text.NumberFormat nf = java.text.NumberFormat.getInstance(); private ResourceBundle resources = ResourceBundle.getBundle( "JBotherBundle", Locale.getDefault() ); public FileReceiveDialog(FileReceive receive) { this.receive = receive; this.ft = ft; setTitle( "Receive file" ); fromToLabel.setText( "From:" ); fromToTF.setEditable(false); fileTF.setEditable(false); ayeButton.setText( "Accept" ); ayeButton.setEnabled(true); ayeButton.setMnemonic( KeyEvent.VK_A ); nayButton.setText( "Reject" ); nayButton.setMnemonic( KeyEvent.VK_R ); descriptionArea.setEditable( false ); sizeLabel = new JLabel(resources.getString("fileSize")); sizeField.setEditable(false); addComponent(sizeLabel, sizeField); sizeField.setText(nf.format((receive.getSize()) / 1024) + "k"); fromToTF.setText(receive.getFrom()); fileTF.setText(receive.getName()); descriptionArea.setText(receive.getDescription()); } /** "Accept" button pressed */ protected void doAye() { // try really hard to make sure that file will not be overwritten // and can be written to boolean done = false; while( !done ) { fileChooser.setSelectedFile(new File(receive.getName())); int retval = fileChooser.showSaveDialog(this); if(retval == JFileChooser.APPROVE_OPTION) { if(fileChooser.getSelectedFile().exists()) { int choice = JOptionPane.showConfirmDialog(this, "File exists - overwrite?","Receive File",JOptionPane.YES_NO_CANCEL_OPTION); if(choice == JOptionPane.CANCEL_OPTION) { doNay(); return; } else if(choice == JOptionPane.NO_OPTION) { done = false; } else if(choice == JOptionPane.YES_OPTION) { done = true; if( ! fileChooser.getSelectedFile().canWrite() ) { JOptionPane.showMessageDialog(this, resources.getString( "writingToFileNotPermitted" ), resources.getString( "receiveFileError" ), JOptionPane.ERROR_MESSAGE ); done = false; } } } else { done = true; } } else if(retval == JFileChooser.CANCEL_OPTION) { doNay(); return; } } // send confirmation message indicating that we want to receive the file statusLabel.setText("Waiting for sender..."); disableAll(); new FileReceiveThread().start(); } class FileReceiveThread extends Thread { public void run() { dispose(); FileTransferManager ft = ConnectorThread.getInstance().getFileTransferManager(); boolean preferIBB = Settings.getInstance().getBoolean("preferIBB"); if(preferIBB) ft.setPreferredType(FileTransferManager.TYPE_IBB); else ft.setPreferredType(-1); receive.setFile(fileChooser.getSelectedFile()); FileProgressListener listener = FileProgressDialog.getInstance().addFile(receive, fileChooser.getSelectedFile().getName(), 1, receive.getSize()); try { receive.addProgressListener(listener); receive.save(fileChooser.getSelectedFile()); } catch(SocketException ex) { listener.update(FileTransferManager.Event.CANCELLED, 0, 0); } catch(Exception ex) { listener.update(FileTransferManager.Event.ERROR, 0, 0); } return; } } /** "Reject" button pressed */ protected void doNay() { // we don't want to accept the file so we need to send the IQ error message // to the Initiator IQ errorPacket = receive.getSI().createConfirmationMessage(); errorPacket.setType(IQ.Type.ERROR); errorPacket.setError(new XMPPError(403,"forbidden")); sendPacket( errorPacket ); dispose(); } /** * helper method for making sure that packet will be sent * @param packet packet to send */ private void sendPacket(Packet packet) { if(BuddyList.getInstance().checkConnection()) { BuddyList.getInstance().getConnection().sendPacket( packet ); } }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -