⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 filereceivedialog.java

📁 JBother是纯Java开发的Jabber(即时消息开源软件)客户端。支持群组聊天
💻 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 + -