• Skip to content
  • Skip to link menu
  • KDE API Reference
  • kdepimlibs-4.14.10 API Reference
  • KDE Home
  • Contact Us
 

KCal Library

  • kcal
resourcelocal.cpp
Go to the documentation of this file.
1/*
2 This file is part of the kcal library.
3
4 Copyright (c) 1998 Preston Brown <pbrown@kde.org>
5 Copyright (c) 2001,2003 Cornelius Schumacher <schumacher@kde.org>
6
7 This library is free software; you can redistribute it and/or
8 modify it under the terms of the GNU Library General Public
9 License as published by the Free Software Foundation; either
10 version 2 of the License, or (at your option) any later version.
11
12 This library is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 Library General Public License for more details.
16
17 You should have received a copy of the GNU Library General Public License
18 along with this library; see the file COPYING.LIB. If not, write to
19 the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
20 Boston, MA 02110-1301, USA.
21*/
31#include "resourcelocal.h"
32#include "resourcelocal_p.h"
33#include "resourcelocalconfig.h"
34#include "vcalformat.h"
35#include "icalformat.h"
36#include "calendarlocal.h"
37#include "exceptions.h"
38#include "incidence.h"
39#include "event.h"
40#include "todo.h"
41#include "journal.h"
42
43#include <kresources/configwidget.h>
44
45#include <typeinfo>
46#include <stdlib.h>
47
48#include <QtCore/QString>
49
50#include <kdebug.h>
51#include <klocalizedstring.h>
52#include <kurl.h>
53#include <kdirwatch.h>
54#include <kstandarddirs.h>
55#include <kconfiggroup.h>
56
57
58using namespace KCal;
59
60ResourceLocal::ResourceLocal()
61 : ResourceCached(), d( new ResourceLocal::Private() )
62{
63 d->mLock = 0;
64 d->mURL = KUrl();
65 d->mFormat = new ICalFormat();
66 init();
67}
68
69ResourceLocal::ResourceLocal( const KConfigGroup &group )
70 : ResourceCached( group ), d( new ResourceLocal::Private() )
71{
72 d->mLock = 0;
73 QString url = group.readPathEntry( "CalendarURL", QString() );
74 d->mURL = KUrl( url );
75
76 QString format = group.readEntry( "Format" );
77 if ( format == "ical" ) {
78 d->mFormat = new ICalFormat();
79 } else if ( format == "vcal" ) {
80 d->mFormat = new VCalFormat();
81 } else {
82 d->mFormat = new ICalFormat();
83 }
84 init();
85}
86
87ResourceLocal::ResourceLocal( const QString &fileName )
88 : ResourceCached(), d( new ResourceLocal::Private )
89{
90 d->mURL = KUrl::fromPath( fileName );
91 d->mFormat = new ICalFormat();
92 init();
93}
94
95void ResourceLocal::writeConfig( KConfigGroup &group )
96{
97 kDebug();
98
99 ResourceCalendar::writeConfig( group );
100 group.writePathEntry( "CalendarURL", d->mURL.prettyUrl() );
101
102 if ( typeid( *d->mFormat ) == typeid( ICalFormat ) ) {
103 group.writeEntry( "Format", "ical" );
104 } else if ( typeid( *d->mFormat ) == typeid( VCalFormat ) ) {
105 group.writeEntry( "Format", "vcal" );
106 } else {
107 kDebug() << "ERROR: Unknown format type";
108 }
109}
110
111void ResourceLocal::init()
112{
113
114 setType( "file" );
115
116 setSavePolicy( SaveDelayed );
117
118 connect( &d->mDirWatch, SIGNAL(dirty(QString)),
119 SLOT(reload()) );
120 connect( &d->mDirWatch, SIGNAL(created(QString)),
121 SLOT(reload()) );
122 connect( &d->mDirWatch, SIGNAL(deleted(QString)),
123 SLOT(reload()) );
124
125 d->mLock = new KABC::Lock( d->mURL.path() );
126
127 d->mDirWatch.addFile( d->mURL.path() );
128 d->mDirWatch.startScan();
129}
130
131ResourceLocal::~ResourceLocal()
132{
133 d->mDirWatch.stopScan();
134 close();
135
136 delete d->mLock;
137 delete d;
138}
139
140KDateTime ResourceLocal::readLastModified()
141{
142 QFileInfo fi( d->mURL.path() );
143 return KDateTime( fi.lastModified() ); // use local time zone
144}
145
146bool ResourceLocal::doLoad( bool syncCache )
147{
148 Q_UNUSED( syncCache );
149
150 bool success;
151 if ( !KStandardDirs::exists( d->mURL.path() ) ) {
152 kDebug() << "File doesn't exist yet.";
153 // Save the empty calendar, so the calendar file will be created.
154 success = doSave( true );
155 } else {
156 success = calendar()->load( d->mURL.path() );
157 if ( success ) {
158 d->mLastModified = readLastModified();
159 }
160 }
161
162 return success;
163}
164
165bool ResourceLocal::doSave( bool syncCache )
166{
167 Q_UNUSED( syncCache );
168 bool success = calendar()->save( d->mURL.path() );
169 kDebug() << "Save of " << d->mURL.path() << "was " << success;
170 d->mLastModified = readLastModified();
171
172 return success;
173}
174
175bool ResourceLocal::doSave( bool syncCache, Incidence *incidence )
176{
177 return ResourceCached::doSave( syncCache, incidence );
178}
179
180KABC::Lock *ResourceLocal::lock()
181{
182 return d->mLock;
183}
184
185bool ResourceLocal::doReload()
186{
187 kDebug();
188
189 if ( !isOpen() ) {
190 kDebug() << "trying to reload from a closed file";
191 return false;
192 }
193
194 if ( d->mLastModified == readLastModified() ) {
195 kDebug() << "file not modified since last read.";
196 return false;
197 }
198
199 calendar()->close();
200 calendar()->load( d->mURL.path() );
201 return true;
202}
203
204void ResourceLocal::reload()
205{
206 if ( doReload() ) {
207 emit resourceChanged( this );
208 }
209}
210
211void ResourceLocal::dump() const
212{
213 ResourceCalendar::dump();
214 kDebug() << " Url:" << d->mURL.url();
215}
216
217QString ResourceLocal::fileName() const
218{
219 return d->mURL.path();
220}
221
222bool ResourceLocal::setFileName( const QString &fileName )
223{
224 bool open = isOpen();
225 if ( open ) {
226 close();
227 }
228 delete d->mLock;
229 d->mDirWatch.stopScan();
230 d->mDirWatch.removeFile( d->mURL.path() );
231 d->mURL = KUrl::fromPath( fileName );
232 d->mLock = new KABC::Lock( d->mURL.path() );
233 d->mDirWatch.addFile( d->mURL.path() );
234 d->mDirWatch.startScan();
235 return true;
236}
237
238bool ResourceLocal::setValue( const QString &key, const QString &value )
239{
240 if ( key == "File" ) {
241 return setFileName( value );
242 } else {
243 return false;
244 }
245}
246
247bool ResourceLocal::operator==( const ResourceLocal &other )
248{
249 return
250 d->mURL == other.d->mURL &&
251 d->mLastModified == other.d->mLastModified;
252}
253
254ResourceLocal &ResourceLocal::operator=( const ResourceLocal &other )
255{
256 // check for self assignment
257 if ( &other == this ) {
258 return *this;
259 }
260
261 d->mURL = other.d->mURL;
262 d->mLastModified = other.d->mLastModified;
263 return *this;
264}
calendarlocal.h
This file is part of the API for handling calendar data and defines the CalendarLocal class.
KCal::CalendarLocal::load
bool load(const QString &fileName, CalFormat *format=0)
Loads a calendar on disk in vCalendar or iCalendar format into the current calendar.
Definition: calendarlocal.cpp:115
KCal::CalendarLocal::save
bool save()
Writes the calendar to disk.
Definition: calendarlocal.cpp:132
KCal::CalendarLocal::close
void close()
Clears out the current calendar, freeing all used memory etc.
Definition: calendarlocal.cpp:158
KCal::ICalFormat
iCalendar format implementation.
Definition: icalformat.h:53
KCal::Incidence
Provides the abstract base class common to non-FreeBusy (Events, To-dos, Journals) calendar component...
Definition: incidence.h:70
KCal::ResourceCached
This class provides a calendar resource using a local CalendarLocal object to cache the calendar data...
Definition: resourcecached.h:45
KCal::ResourceCached::setSavePolicy
void setSavePolicy(int policy)
Set save policy.
Definition: resourcecached.cpp:160
KCal::ResourceCached::SaveDelayed
@ SaveDelayed
save after every change, after a 15 second delay
Definition: resourcecached.h:66
KCal::ResourceCached::doSave
virtual bool doSave(bool syncCache)=0
Do the actual saving of the resource data.
KCal::ResourceCalendar::incidence
Incidence * incidence(const QString &uid)
Return incidence with given unique id.
Definition: resourcecalendar.cpp:99
KCal::ResourceCalendar::resourceChanged
void resourceChanged(ResourceCalendar *)
This signal is emitted when the data in the resource has changed.
KCal::ResourceLocal
Provides a calendar resource stored as a local file.
Definition: resourcelocal.h:47
KCal::ResourceLocal::reload
void reload()
Reload the resource data from the local file.
Definition: resourcelocal.cpp:204
KCal::ResourceLocal::fileName
QString fileName() const
Returns the fileName for this resource.
Definition: resourcelocal.cpp:217
KCal::ResourceLocal::ResourceLocal
ResourceLocal()
Constructs a resource using default configuration information.
Definition: resourcelocal.cpp:60
KCal::ResourceLocal::operator==
bool operator==(const ResourceLocal &other)
Compares this ResourceLocal and other for equality.
Definition: resourcelocal.cpp:247
KCal::ResourceLocal::dump
void dump() const
Dumps the resource.
Definition: resourcelocal.cpp:211
KCal::ResourceLocal::readLastModified
KDateTime readLastModified()
Returns the date/time the local file was last modified.
Definition: resourcelocal.cpp:140
KCal::ResourceLocal::lock
KABC::Lock * lock()
Returns the lock.
Definition: resourcelocal.cpp:180
KCal::ResourceLocal::~ResourceLocal
virtual ~ResourceLocal()
Destroys the resource.
Definition: resourcelocal.cpp:131
KCal::ResourceLocal::doReload
virtual bool doReload()
Called by reload() to reload the resource, if it is already open.
Definition: resourcelocal.cpp:185
KCal::ResourceLocal::doLoad
virtual bool doLoad(bool syncCache)
Actually loads the data from the local file.
Definition: resourcelocal.cpp:146
KCal::ResourceLocal::setFileName
bool setFileName(const QString &fileName)
Sets the fileName for this resource.
Definition: resourcelocal.cpp:222
KCal::ResourceLocal::setValue
bool setValue(const QString &key, const QString &value)
Sets a value for this resource.
Definition: resourcelocal.cpp:238
KCal::ResourceLocal::doSave
virtual bool doSave(bool syncCache)
Actually saves the data to the local file.
Definition: resourcelocal.cpp:165
KCal::ResourceLocal::writeConfig
virtual void writeConfig(KConfigGroup &group)
Writes KConfig config to a local file.
Definition: resourcelocal.cpp:95
KCal::ResourceLocal::operator=
ResourceLocal & operator=(const ResourceLocal &other)
Sets this ResourceLocal equal to other.
Definition: resourcelocal.cpp:254
KRES::Resource::open
bool open()
KRES::Resource::isOpen
bool isOpen() const
KRES::Resource::dump
virtual void dump() const
KRES::Resource::setType
void setType(const QString &type)
KRES::Resource::close
void close()
configwidget.h
event.h
This file is part of the API for handling calendar data and defines the Event class.
exceptions.h
This file is part of the API for handling calendar data and defines the Exception and ErrorFormat cla...
icalformat.h
This file is part of the API for handling calendar data and defines the ICalFormat class.
incidence.h
This file is part of the API for handling calendar data and defines the Incidence class.
journal.h
This file is part of the API for handling calendar data and defines the Journal class.
resourcelocal.h
This file is part of the API for handling calendar data and defines the ResourceLocal class.
todo.h
This file is part of the API for handling calendar data and defines the Todo class.
vcalformat.h
This file is part of the API for handling calendar data and defines the VCalFormat base class.
This file is part of the KDE documentation.
Documentation copyright © 1996-2022 The KDE developers.
Generated on Thu Jul 21 2022 00:00:00 by doxygen 1.9.5 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.

KCal Library

Skip menu "KCal Library"
  • Main Page
  • Namespace List
  • Namespace Members
  • Alphabetical List
  • Class List
  • Class Hierarchy
  • Class Members
  • File List
  • File Members
  • Related Pages

kdepimlibs-4.14.10 API Reference

Skip menu "kdepimlibs-4.14.10 API Reference"
  • akonadi
  •   contact
  •   kmime
  •   socialutils
  • kabc
  • kalarmcal
  • kblog
  • kcal
  • kcalcore
  • kcalutils
  • kholidays
  • kimap
  • kioslave
  •   imap4
  •   mbox
  •   nntp
  • kldap
  • kmbox
  • kmime
  • kontactinterface
  • kpimidentities
  • kpimtextedit
  • kpimutils
  • kresources
  • ktnef
  • kxmlrpcclient
  • mailtransport
  • microblog
  • qgpgme
  • syndication
  •   atom
  •   rdf
  •   rss2
Report problems with this website to our bug tracking system.
Contact the specific authors with questions and comments about the page contents.

KDE® and the K Desktop Environment® logo are registered trademarks of KDE e.V. | Legal