konsolekalendar Library API Documentation

main.cpp

00001 /***************************************************************************
00002               main.cpp  -  description
00003                  -------------------
00004     begin                : Sun Jan  6 11:50:14 EET 2002
00005     copyright            : (C) 2002-2003 by Tuukka Pasanen
00006     copyright            : (C) 2003 by Allen Winter
00007     email                : illuusio@mailcity.com
00008 
00009  ***************************************************************************/
00010 
00011 /***************************************************************************
00012  *                                                                         *
00013  *   This program is free software; you can redistribute it and/or modify  *
00014  *   it under the terms of the GNU General Public License as published by  *
00015  *   the Free Software Foundation; either version 2 of the License, or     *
00016  *   (at your option) any later version.                                   *
00017  *                                                                         *
00018  ***************************************************************************/
00019 #ifdef HAVE_CONFIG_H
00020 #include "config.h"
00021 #endif
00022 
00023 #if TIME_WITH_SYS_TIME
00024 # include <sys/time.h>
00025 # include <time.h>
00026 #else
00027 # if HAVE_SYS_TIME_H
00028 #  include <sys/time.h>
00029 # else
00030 #  include <time.h>
00031 # endif
00032 #endif
00033 
00034 #include <kcmdlineargs.h>
00035 #include <kaboutdata.h>
00036 #include <klocale.h>
00037 #include <kglobal.h>
00038 #include <kconfig.h>
00039 #include <kstandarddirs.h>
00040 #include <kdebug.h>
00041 
00042 #include <libkcal/calformat.h>
00043 #include <libkcal/calendarresources.h>
00044 #include <libkcal/resourcelocal.h>
00045 
00046 #include <qdatetime.h>
00047 #include <qfile.h>
00048 
00049 #include <stdlib.h>
00050 #include <iostream>
00051 
00052 #include "konsolekalendar.h"
00053 #include "konsolekalendarepoch.h"
00054 
00055 #include "konsolekalendarvariables.h"
00056 
00057 using namespace KCal;
00058 using namespace std;
00059 
00060 static const char progName[] = "konsolekalendar";
00061 static const char progDisplay[] = "KonsoleKalendar";
00062 static const char progVersion[] = "1.0.2";
00063 static const char description[] = I18N_NOOP("A command line interface to KDE calendars");
00064 
00065 static KCmdLineOptions options[] =
00066 {
00067   { "help", I18N_NOOP("Print this help and exit"), 0 },
00068   { "verbose", I18N_NOOP("Print helpful runtime messages"), 0 },
00069   { "dry-run", I18N_NOOP("Print what would have been done, but do not execute"), 0 },
00070   { "file <calendar-file>", I18N_NOOP("Specify which calendar you want to use"), 0 },
00071 
00072 
00073   { ":", I18N_NOOP(" Major operation modes:"), 0 },
00074   { "view", I18N_NOOP("  Print calendar events in specified export format"), 0 },
00075   { "add", I18N_NOOP("  Insert an event into the calendar"), 0 },
00076   { "change", I18N_NOOP("  Modify an existing calendar event"), 0 },
00077   { "delete", I18N_NOOP("  Remove an existing calendar event"), 0 },
00078   { "create", I18N_NOOP("  Create new calendar file if one does not exist"), 0 },
00079   { "import <import-file>", I18N_NOOP("  Import this calendar to main calendar"), 0 },
00080 
00081   { ":", I18N_NOOP(" Operation modifiers:"), 0 },
00082   { "next", I18N_NOOP("  View next activity in calendar"), 0 },
00083   { "all", I18N_NOOP("  View all calendar entries"), 0 },
00084   { "uid <uid>", I18N_NOOP("  Event Unique-string identifier"), 0 },
00085   { "show-next <show-next>", I18N_NOOP("  From this day show next # days' activities"), 0 },
00086   { "date <start-date>", I18N_NOOP("  Start from this day [YYYY-MM-DD]"), 0 },
00087   { "time <start-time>", I18N_NOOP("  Start from this time [HH:MM:SS]"), 0 },
00088   { "end-date <end-date>", I18N_NOOP("  End at this day [YYYY-MM-DD]"), 0 },
00089   { "end-time <end-time>", I18N_NOOP("  End at this time [HH:MM:SS]"), 0 },
00090   { "epoch-start <epoch-time>", I18N_NOOP(" Start from this time [secs since epoch]"), 0 },
00091   { "epoch-end <epoch-time>", I18N_NOOP("  End at this time [secs since epoch]"), 0 },
00092   { "summary <summary>", I18N_NOOP("  Add summary to event (for add/change modes)"), 0 },
00093   { "description <description>", I18N_NOOP("Add description to event (for add/change modes)"), 0 },
00094 
00095   { ":", I18N_NOOP(" Export options:"), 0 },
00096   { "export-type <export-type>", I18N_NOOP("Export file type (Default: text)"), 0 },
00097   { "export-file <export-file>", I18N_NOOP("Export to file (Default: stdout)"), 0 },
00098   { "export-list", I18N_NOOP("  Print list of export types supported and exit"), 0 },
00099 
00100   { "", I18N_NOOP("Examples:\n  konsolekalendar --view\n  konsolekalendar --add --date 2003-06-04 --time 10:00 --end-time 12:00 \\\n                  --summary \"Doctor Visit\" --description \"Get My Head Examined\"\n  konsolekalendar --delete --uid KOrganizer-1740380426.803"), 0 },
00101 
00102   KCmdLineLastOption
00103 };
00104 
00105 int main(int argc, char *argv[])
00106 {
00107   KLocale::setMainCatalogue("konsolekalendar");
00108 
00109   KAboutData aboutData(
00110       progName,                        // internal program name
00111       I18N_NOOP( progDisplay ),        // displayable program name.
00112       progVersion,                     // version string
00113       description,                     // short porgram description
00114       KAboutData::License_GPL,         // license type
00115       "(c) 2002-2004, Tuukka Pasanen and Allen Winter", // copyright statement
00116       0,                               // any free form text
00117       "http://pim.kde.org",            // program home page address
00118       "bugs.kde.org"                   // bug report email address
00119       );
00120 
00121   aboutData.addAuthor(
00122       "Tuukka Pasanen",                // developer's name
00123       I18N_NOOP("Primary Author"),     // task or role
00124       "illuusio@mailcity.com",         // email address
00125       0                                // home page or relevant link
00126       );
00127   aboutData.addAuthor(
00128       "Allen Winter",                  // developer's name
00129       I18N_NOOP("Author"),             // task or role
00130       "awinterz@users.sourceforge.net",// email address
00131       0                                // home page or relevant link
00132       );
00133 
00134 
00135 
00136   // KCmdLineArgs::init() final 'true' argument indicates no commandline options
00137   // for QApplication/KApplication (no KDE or Qt options)
00138   KCmdLineArgs::init( argc, argv, &aboutData, true );
00139   KCmdLineArgs::addCmdLineOptions( options ); // Add our own options.
00140 
00141   KInstance ins(progName);
00142 
00143 // Replace the KApplication call below with the three lines above
00144 // will make this a pure non-GUI application -- thanks for the info Stephan Kulow.
00145 
00146 //  KApplication app(
00147 //      false, // do not allowstyles -- disable the loading on plugin based styles
00148 //      false  // GUI is not enabled -- disable all GUI stuff
00149 //      );
00150 
00151   KCmdLineArgs *args = KCmdLineArgs::parsedArgs();
00152 
00153   QString KalendarFile;
00154 
00155   // Default values for start date/time (today at 07:00)
00156   QDate startdate = QDate::currentDate();
00157   QTime starttime(7,0);
00158 
00159   // Default values for end date/time (today at 17:00)
00160   QDate enddate = QDate::currentDate();
00161   QTime endtime(17,0);
00162 
00163   // Default values for switches
00164   bool view = true;
00165   bool add = false;
00166   bool change = false;
00167   bool del = false;
00168   bool create = false;
00169   bool calendarFile = false;
00170   bool importFile = false;
00171 
00172   QString option;
00173 
00174   KonsoleKalendarVariables variables;
00175   KonsoleKalendarEpoch epochs;
00176 
00177 
00178   variables.setExportType( NONE );
00179 
00180   if ( args->isSet("verbose") ) {
00181      variables.setVerbose(true);
00182   }
00183 
00184   if ( args->isSet("dry-run") ) {
00185      variables.setDryRun(true);
00186   }
00187 
00188   /*
00189    *
00190    *  Switch on export list
00191    */
00192   if ( args->isSet("export-list") ) {
00193      cout << i18n("\nKonsoleKalendar supports these export formats:\n  Text [Default]\n  HTML\n  CSV (Comma-Separated Values)").local8Bit() << endl;
00194      return(0);
00195   }
00196 
00197   /*
00198    *  Switch on exporting
00199    *
00200    */
00201   if ( args->isSet("export-type") ) {
00202      option = args->getOption("export-type");
00203 
00204      if ( option.upper() == "HTML" ) {
00205        kdDebug() << "main | export-type | Export to HTML" << endl;
00206        variables.setExportType( HTML );
00207      } else if( option.upper() == "CSV" ) {
00208        kdDebug() << "main | export-type | Export to CSV" << endl;
00209        variables.setExportType( CSV );
00210      } else if( option.upper() == "TEXT" ) {
00211        kdDebug() << "main | exporttype | Export to TXT" << endl;
00212        variables.setExportType( TEXT_KONSOLEKALENDAR );
00213      } else {
00214        cout << i18n("Invalid Export Type Specified: ").local8Bit()
00215             << option.local8Bit() << endl;
00216        return(1);
00217      }
00218   }
00219 
00220   /*
00221    *  Switch on export file name
00222    *
00223    */
00224   if ( args->isSet("export-file") ) {
00225     option = args->getOption("export-file");
00226 
00227     kdDebug() << "main | parse options | Export File: (" << option << ")" << endl;
00228 
00229     variables.setExportFile(option);
00230   }
00231 
00232   /*
00233    *  Switch on View (Print Entries).  This is the default mode of operation.
00234    *
00235    */
00236   if ( args->isSet("view") ) {
00237     view=true;
00238 
00239     kdDebug() << "main | parse options | Mode: (Print events)" << endl;
00240   }
00241 
00242   /*
00243    *  Switch on Add (Insert Entry)
00244    *
00245    */
00246   if ( args->isSet("add") ) {
00247     view=false;
00248     add=true;
00249 
00250     kdDebug() << "main | parse options | Mode: (Add event)" << endl;
00251   }
00252 
00253   /*
00254    *  Switch on Change (Modify Entry)
00255    *
00256    */
00257   if ( args->isSet("change") ) {
00258     view=false;
00259     change=true;
00260 
00261     kdDebug() << "main | parse options | Mode: (Change event)" << endl;
00262   }
00263 
00264   /*
00265    *  Switch on Delete (Remove Entry)
00266    *
00267    */
00268   if ( args->isSet("delete") ) {
00269     view=false;
00270     del=true;
00271 
00272     kdDebug() << "main | parse options | Mode: (Delete event)" << endl;
00273   }
00274 
00275   /*
00276    *  Switch on Create
00277    *
00278    */
00279   if ( args->isSet("create") ) {
00280     view=false;
00281     create=true;
00282 
00283     kdDebug() << "main | parse options | Calendar File: (Create)" << endl;
00284 
00285   }
00286 
00287 
00288   /*
00289    *  If there is summary attached.
00290    *
00291    */
00292   if ( args->isSet("summary") ) {
00293     option = args->getOption("summary");
00294 
00295     kdDebug() << "main | parse options | Summary: (" << option << ")" << endl;
00296 
00297     variables.setSummary(option);
00298   }
00299 
00300   /*
00301    *  If there is description attached.
00302    *
00303    */
00304   if ( args->isSet("description") ) {
00305     option = args->getOption("description");
00306 
00307     kdDebug() << "main | parse options | Description: (" << option << ")" << endl;
00308 
00309     variables.setDescription(option);
00310   }
00311 
00312   /*
00313    *  Show next happening and exit
00314    *
00315    */
00316   if ( args->isSet("next") )
00317   {
00318     kdDebug() << "main | parse options | Show next event only" << endl;
00319 
00320     variables.setNext(true);
00321   }
00322 
00323 
00324   /*
00325    *  Set event unique string identifier
00326    *
00327    */
00328   if (args->isSet("uid") ) {
00329     option = args->getOption("uid");
00330 
00331     kdDebug() << "main | parse options | Event UID: (" << option << ")" << endl;
00332 
00333     variables.setUID( option );
00334   }
00335 
00336   /*
00337    *  Set starting date for calendar
00338    *
00339    */
00340   if ( args->isSet("date") ) {
00341     option = args->getOption("date");
00342 
00343     kdDebug() << "main | parse options | Start date before conversion: (" << option << ")" << endl;
00344 
00345     startdate = QDate::fromString( option,  Qt::ISODate );
00346     if( ! startdate.isValid() ) {
00347       cout << i18n("Invalid Start Date Specified: ").local8Bit()
00348            << option.local8Bit() << endl;
00349       return(1);
00350     }
00351     kdDebug() << "main | parse options | Start date after conversion: (" << startdate.toString() << ")" << endl;
00352   }
00353 
00354 
00355   /*
00356    *  Set starting time
00357    *
00358    */
00359   if ( args->isSet("time") ) {
00360     option = args->getOption("time");
00361 
00362     kdDebug() << "main | parse options | Start time before conversion : (" << option << ")" << endl;
00363 
00364     starttime = QTime::fromString( option,  Qt::ISODate );
00365     if( ! starttime.isValid() ) {
00366       cout << i18n("Invalid Start Time Specified: ").local8Bit()
00367            << option.local8Bit() << endl;
00368       return(1);
00369     }
00370     kdDebug() << "main | parse options | Start time after conversion: (" << starttime.toString() << ")" << endl;
00371   }
00372 
00373   /*
00374    *  Set end date for calendar
00375    *
00376    */
00377 
00378   if ( args->isSet("end-date") ) {
00379     QString option = args->getOption("end-date");
00380 
00381     kdDebug() << "main | parse options | End date before conversion: (" << option << ")" << endl;
00382 
00383     enddate = QDate::fromString( option,  Qt::ISODate );
00384     if( ! enddate.isValid() ) {
00385       cout << i18n("Invalid End Date Specified: ").local8Bit()
00386            << option.local8Bit() << endl;
00387       return(1);
00388     }
00389     kdDebug() << "main | parse options | End date after conversion: (" << enddate.toString() << ")" << endl;
00390   }
00391 
00392   /*
00393    *  Show next # days and exit
00394    *
00395    */
00396 
00397   if ( args->isSet("show-next") )
00398   {
00399 
00400     bool ok;
00401 
00402     option = args->getOption("show-next");
00403     kdDebug() << "main | parse options | Show " << option << " days ahead" << endl;
00404     variables.setDaysCount( option.toInt( &ok, 10 ) );
00405 
00406     if( !ok ) {
00407       cout << i18n("Invalid Date Count Specified: ").local8Bit()
00408            << option.local8Bit() << endl;
00409       return(1);
00410     }
00411 
00412     enddate = startdate;
00413     enddate = enddate.addDays( variables.getDaysCount() );
00414     kdDebug() << "main | parse options | End date after conversion: (" << enddate.toString() << ")" << endl;
00415 
00416   }
00417 
00418   /*
00419    *  Set ending time
00420    *
00421    */
00422   if ( args->isSet("end-time") ) {
00423     option = args->getOption("end-time");
00424 
00425     kdDebug() << "main | parse options | End time before conversion: (" << option << ")" << endl;
00426 
00427     endtime = QTime::fromString( option,  Qt::ISODate );
00428     if( ! endtime.isValid() ) {
00429       cout << i18n("Invalid End Time Specified: ").local8Bit()
00430            << option.local8Bit() << endl;
00431       return(1);
00432     }
00433 
00434     kdDebug() << "main | parse options | End time after conversion: (" << endtime.toString() << ")" << endl;
00435   }
00436 
00437   /*
00438    *  Set start date/time from epoch
00439    *
00440    */
00441   time_t epochstart=0;
00442   if ( args->isSet("epoch-start") ) {
00443     option = args->getOption("epoch-start");
00444 
00445     kdDebug() << "main | parse options | Epoch start: (" << option << ")" << endl;
00446 
00447     epochstart = (time_t) option.toULong(0,10);
00448   }
00449 
00450   /*
00451    *  Set end date/time from epoch
00452    *
00453    */
00454   time_t epochend=0;
00455   if ( args->isSet("epoch-end") ) {
00456     option = args->getOption("epoch-end");
00457 
00458     kdDebug() << "main | parse options | Epoch end: (" << option << ")" << endl;
00459 
00460     epochend = (time_t) option.toULong(0,10);
00461   }
00462 
00463   if( args->isSet("all") ) {
00464     variables.setAll( true );
00465   } else {
00466     variables.setAll( false );
00467   }
00468 
00469   if ( args->isSet("import") ) {
00470     view = false;
00471     importFile = true;
00472     option = args->getOption("import");
00473     variables.setImportFile( option );
00474 
00475     kdDebug() << "main | parse options | importing file from: (" << option << ")" << endl;
00476   }
00477 
00478  KonsoleKalendar *konsolekalendar = new KonsoleKalendar( &variables );
00479 
00480  if ( args->isSet("file") ) {
00481     calendarFile = true;
00482     option = args->getOption("file");
00483     variables.setCalendarFile( option );
00484 
00485   /*
00486    * All modes need to know if the calendar file exists
00487    * This must be done before we get to opening biz
00488    */
00489     bool exists = QFile::exists( variables.getCalendarFile() );
00490 
00491   if ( create ) {
00492 
00493     kdDebug() << "main | createcalendar | check if calendar file already exists" << endl;
00494 
00495     if( exists ) {
00496       cout << i18n("Calendar ").local8Bit()
00497            << variables.getCalendarFile().local8Bit()
00498            << i18n(" already exists").local8Bit() << endl;
00499       return(1);
00500     }
00501     if( konsolekalendar->createCalendar() ) {
00502       cout << i18n("Calendar ").local8Bit()
00503            << variables.getCalendarFile().local8Bit()
00504            << i18n(" successfully created.").local8Bit() << endl;
00505       return(0);
00506     } else {
00507       cout << i18n("Unable to create calendar: ").local8Bit()
00508            << variables.getCalendarFile().local8Bit() << endl;
00509       return(1);
00510     }
00511    }
00512 
00513    if ( !exists ){
00514      cout << i18n("Calendar file not found").local8Bit()
00515           << option.local8Bit() << endl;
00516      cout << i18n("Try --create to create new calendar file").local8Bit()
00517           << endl;
00518      return(1);
00519    }
00520  }
00521 
00522   CalendarResources *calendarResource = NULL;
00523   CalendarLocal *localCalendar = NULL;
00524 
00525  /*
00526   * Should we use local calendar or resource?
00527   */
00528   variables.setTimeZoneId();
00529   if( args->isSet("file") ) {
00530     localCalendar = new CalendarLocal( variables.getTimeZoneId() );
00531     localCalendar->load( variables.getCalendarFile() );
00532     variables.setCalendar( localCalendar  );
00533   } else {
00534     calendarResource = new CalendarResources( variables.getTimeZoneId() );
00535     variables.setCalendarResources( calendarResource );
00536   }
00537 
00538   /***************************************************************************
00539    * Glorious date/time checking and setting code                            *
00540    ***************************************************************************/
00541   QDateTime startdatetime, enddatetime;
00542 
00543   // Handle case with either date or end-date unspecified
00544   if( !args->isSet("end-date") && args->isSet("date") ) {
00545     enddate = startdate;
00546     kdDebug() << "main | datetimestamp | setting enddate to startdate" << endl;
00547   } else if( args->isSet("end-date") && !args->isSet("date") ) {
00548     startdate = enddate;
00549     kdDebug() << "main | datetimestamp | setting startdate to enddate" << endl;
00550   }
00551 
00552   // NOTE: If neither date nor end-date specified, then event will be today.
00553 
00554   // Handle case with end time (or epoch) unspecified, and start time (or epoch) IS specified.
00555   // In this case, set the ending to 1 hour after starting.
00556   if( !args->isSet("end-time") && !args->isSet("epoch-end") ) {
00557     if( args->isSet("time") ) {
00558       endtime = starttime.addSecs(60*60);  // end is 1 hour after start
00559       kdDebug() << "main | datetimestamp | setting endtime 1 hour after starttime" << endl;
00560     } else if( args->isSet("epoch-start") ) {
00561       startdatetime = epochs.epoch2QDateTime(epochstart);
00562       enddatetime = startdatetime.addSecs(60*60);
00563       kdDebug() << "main | datetimestamp | setting endtime 1 hour after epochstart" << endl;
00564     }
00565   }
00566 
00567   // Handle case with time (or epoch) unspecified, and end-time (or epoch) IS specified.
00568   // In this case, set the starting to 1 hour before ending.
00569   if( !args->isSet("time") && !args->isSet("epoch-start") ) {
00570     if( args->isSet("end-time") ) {
00571       starttime = endtime.addSecs(-60*60);  // start is 1 hour before end
00572       kdDebug() << "main | datetimestamp | setting starttime 1 hour before endtime" << endl;
00573     } else if( args->isSet("epoch-end") ) {
00574       enddatetime = epochs.epoch2QDateTime(epochend);
00575       startdatetime = enddatetime.addSecs(-60*60);
00576       kdDebug() << "main | datetimestamp | setting starttime 1 before after epochend" << endl;
00577     }
00578   }
00579 
00580   // Handle case with time (or epoch) unspecified, and end-time (or epoch) unspecified.
00581   if( !args->isSet("time") && !args->isSet("epoch-start") &&
00582       !args->isSet("end-time") && !args->isSet("epoch-end") ) {
00583     // set default start date/time
00584     startdatetime = QDateTime::QDateTime(startdate, starttime);
00585     kdDebug() << "main | datetimestamp | setting startdatetime from default startdate (today) and starttime" << endl;
00586     // set default end date/time
00587     enddatetime = QDateTime::QDateTime(enddate, endtime);
00588     kdDebug() << "main | datetimestamp | setting enddatetime from default enddate (today) and endtime" << endl;
00589   }
00590 
00591   // Set startdatetime, enddatetime if still necessary
00592   if( startdatetime.isNull() ) {
00593     startdatetime = QDateTime::QDateTime(startdate, starttime);
00594     kdDebug() << "main | datetimestamp | setting startdatetime from startdate and starttime" << endl;
00595   }
00596   if( enddatetime.isNull() ) {
00597     enddatetime = QDateTime::QDateTime(enddate, endtime);
00598     kdDebug() << "main | datetimestamp | setting enddatetime from enddate and endtime" << endl;
00599   }
00600 
00601   // Finally!
00602   variables.setStartDateTime( startdatetime );
00603   variables.setEndDateTime( enddatetime );
00604 
00605   // Some more debug prints
00606   kdDebug() << "main | datetimestamp | StartDate=" << startdatetime.toString(Qt::TextDate) << endl;
00607   kdDebug() << "main | datetimestamp | EndDate=" << enddatetime.toString(Qt::TextDate) << endl;
00608 
00609   /***************************************************************************
00610    * Sanity checks                                                           *
00611    ***************************************************************************/
00612 
00613   // Cannot combine modes
00614   if( create + view + add + change + del > 1 ) {
00615     cout << i18n("Only 1 operation mode (view, add, change, delete,create) permitted at a time").local8Bit() << endl;
00616     return(1);
00617   }
00618 
00619   // Cannot have a ending before starting
00620   if( startdatetime > enddatetime ) {
00621     cout << i18n("Ending Date/Time occurs before the Starting Date/Time").local8Bit() << endl;
00622     return(1);
00623   }
00624 
00625   /***************************************************************************
00626    * Mode Dependent Settings                                                 *
00627    ***************************************************************************/
00628 
00629   // In add mode, make a check for floating events
00630   if( add ) {
00631 
00632     // If time, end-time, or epoch times are specified, then the event is NOT floating
00633     if( args->isSet("time")  || args->isSet("end-time") ||
00634         args->isSet("epoch-start") || args->isSet("epoch-end") ) {
00635       variables.setFloating(false);
00636       kdDebug() << "main | floatingcheck | turn-off floating event" << endl;
00637     }
00638   }
00639 
00640   args->clear(); // Free up some memory.
00641 
00642   /***************************************************************************
00643    * And away we go with the real work...                                    *
00644    ***************************************************************************/
00645 
00646 
00647 
00648   /*
00649    * Set our application name for use in unique IDs and error messages,
00650    * and product ID for incidence PRODID property
00651    */
00652   QString prodId = "-//K Desktop Environment//NONSGML %1 %2//EN";
00653   CalFormat::setApplication( progDisplay, prodId.arg( progDisplay).arg( progVersion ) );
00654 
00655     if( importFile ) {
00656       if( konsolekalendar->importCalendar() ) {
00657         cout << i18n("Calendar ").local8Bit()
00658              << variables.getImportFile().local8Bit()
00659              << i18n(" successfully imported.").local8Bit() << endl;
00660         return(0);
00661       } else {
00662         cout << i18n("Unable to import calendar: ").local8Bit()
00663              << variables.getImportFile().local8Bit() << endl;
00664         return(1);
00665       }
00666     }
00667 
00668     if( add ) {
00669       if( !konsolekalendar->isEvent( startdatetime, enddatetime, variables.getSummary() ) ) {
00670     kdDebug() << "main | modework | calling addEvent()" << endl;
00671     konsolekalendar->addEvent();
00672       } else {
00673     cout << i18n("Attempting to insert an event that already exists").local8Bit() << endl;
00674     return(1);
00675       }
00676     }
00677 
00678     if( change ) {
00679       kdDebug() << "main | modework | calling changeEvent()" << endl;
00680       if( !variables.isUID() ) {
00681     cout << i18n("Must specify a UID with --uid to change event").local8Bit() << endl;
00682     return(1);
00683       }
00684       if( konsolekalendar->changeEvent() != true ) {
00685     cout << i18n("Attempting to change a non-existent event").local8Bit() << endl;
00686     return(1);
00687       }
00688       kdDebug() << "main | modework | succesful changeEvent()" << endl;
00689     }
00690 
00691     if( del ) {
00692       kdDebug() << "main | modework | calling deleteEvent()" << endl;
00693       if( !variables.isUID() ) {
00694     cout << i18n("Must specify a UID with --uid to delete event").local8Bit() << endl;
00695     return(1);
00696       }
00697       if( konsolekalendar->deleteEvent() != true ) {
00698     cout << i18n("Attempting to delete a non-existent event").local8Bit() << endl;
00699     return(1);
00700       }
00701       kdDebug() << "main | modework | succesful deleteEvent()" << endl;
00702     }
00703 
00704     if( view ) {
00705       kdDebug() << "main | modework | calling showInstance() to view events" << endl;
00706       if( !konsolekalendar->showInstance() ) {
00707     cout << i18n("Cannot open specified export file: ").local8Bit()
00708              << variables.getExportFile().local8Bit() << endl;
00709     return(1);
00710       }
00711     }
00712 
00713   delete konsolekalendar;
00714 
00715   if( calendarFile ){
00716     localCalendar->close();
00717     delete localCalendar;
00718   } else {
00719     calendarResource->close();
00720     delete calendarResource;
00721   }
00722 
00723   kdDebug() << "main | exiting" << endl;
00724 
00725   return 0;
00726 }
KDE Logo
This file is part of the documentation for konsolekalendar Library Version 3.2.2.
Documentation copyright © 1996-2004 the KDE developers.
Generated on Sat May 1 11:38:15 2004 by doxygen 1.2.15 written by Dimitri van Heesch, © 1997-2003