00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029 #include "previewdialog.h"
00030
00031 #include "kolistview.h"
00032 #include "koprefs.h"
00033 #include "stdcalendar.h"
00034
00035 #include <tdelocale.h>
00036
00037 #include <libkcal/calendarlocal.h>
00038
00039 #include <kstandarddirs.h>
00040 #include <tdefiledialog.h>
00041 #include <tdemessagebox.h>
00042 #include <tdeio/netaccess.h>
00043
00044 #include <tqlabel.h>
00045 #include <tqlayout.h>
00046 #include <tqradiobutton.h>
00047 #include <tqpushbutton.h>
00048 #include <tqdialog.h>
00049
00050 using namespace KCal;
00051
00052 PreviewDialog::PreviewDialog( const KURL &url, TQWidget *parent )
00053 : KDialogBase( Plain, i18n("Import Calendar/Event"), User1 | User2 | Cancel, User1, parent,
00054 0, true, true, KGuiItem( i18n("&Merge into existing calendar"), "merge" ) ),
00055 mOriginalUrl( url )
00056 {
00057 TQFrame *topFrame = plainPage();
00058 TQVBoxLayout *topLayout = new TQVBoxLayout( topFrame, 0, spacingHint() );
00059
00060 mCalendar = new CalendarLocal( KOPrefs::instance()->mTimeZoneId );
00061 mListView = new KOListView( mCalendar, topFrame, "PreviewDialog::ListView", true );
00062 topLayout->addWidget( mListView );
00063
00064 topLayout->setSpacing( spacingHint() );
00065 topLayout->setMargin( marginHint() );
00066
00067 connect( this, TQT_SIGNAL(user1Clicked()), TQT_SLOT(slotMerge()) );
00068 connect( this, TQT_SIGNAL(user2Clicked()), TQT_SLOT(slotAdd()) );
00069
00070
00071
00072 if ( isTempFile() ) {
00073 setButtonGuiItem( User2, KGuiItem( i18n("&Add as new calendar..."), "add" ) );
00074 } else {
00075 setButtonGuiItem( User2, KGuiItem( i18n("&Add as new calendar"), "add" ) );
00076 }
00077
00078 mLocalUrl = 0;
00079 }
00080
00081 PreviewDialog::~PreviewDialog()
00082 {
00083 if ( mLocalUrl && !mOriginalUrl.isLocalFile() ) {
00084 TDEIO::NetAccess::removeTempFile( mLocalUrl->path() );
00085 delete mLocalUrl;
00086 }
00087
00088 delete mCalendar;
00089 }
00090
00091 bool PreviewDialog::loadCalendar()
00092 {
00093
00094 if ( !mOriginalUrl.isLocalFile() ) {
00095 if ( mLocalUrl ) {
00096
00097 TDEIO::NetAccess::removeTempFile( mLocalUrl->path() );
00098 delete mLocalUrl;
00099 }
00100
00101 TQString tmpFile;
00102 if ( TDEIO::NetAccess::download( mOriginalUrl, tmpFile, 0 ) ) {
00103 mLocalUrl = new KURL( tmpFile );
00104 } else {
00105 mLocalUrl = 0;
00106 }
00107 } else {
00108 mLocalUrl = &mOriginalUrl;
00109 }
00110
00111 if ( mLocalUrl ) {
00112 const bool success = mCalendar->load( mLocalUrl->path() );
00113
00114 if ( !success && !mOriginalUrl.isLocalFile() ) {
00115 TDEIO::NetAccess::removeTempFile( mLocalUrl->path() );
00116 } else {
00117 mListView->showAll();
00118 }
00119 return success;
00120 } else {
00121 return false;
00122 }
00123 }
00124
00125 void PreviewDialog::slotMerge()
00126 {
00127 if ( mLocalUrl ) {
00128 emit openURL( *mLocalUrl, true );
00129 emit dialogFinished( this );
00130 accept();
00131 }
00132 }
00133
00134 void PreviewDialog::slotAdd()
00135 {
00136 KURL finalUrl = mOriginalUrl;
00137 if ( isTempFile() ) {
00138 const TQString fileName =
00139 KFileDialog::getSaveFileName( locateLocal( "data","korganizer/" ),
00140 i18n( "*.vcs *.ics|Calendar Files" ),
00141 this, i18n( "Select path for new calendar" ) );
00142
00143 finalUrl = KURL( fileName );
00144
00145 if ( !TDEIO::NetAccess::copy( mOriginalUrl, finalUrl, this ) && TDEIO::NetAccess::lastError() ) {
00146 KMessageBox::error( this, TDEIO::NetAccess::lastErrorString() );
00147 return;
00148 }
00149 }
00150
00151 if ( finalUrl.isValid() ) {
00152 emit addResource( finalUrl );
00153 emit dialogFinished( this );
00154 accept();
00155 }
00156 }
00157
00158 bool PreviewDialog::isTempFile() const
00159 {
00160 return mOriginalUrl.path().startsWith( locateLocal( "tmp", "" ) );
00161 }
00162
00163 #include "previewdialog.moc"