diff options
Diffstat (limited to 'kresources/scalix/knotes')
-rw-r--r-- | kresources/scalix/knotes/CMakeLists.txt | 56 | ||||
-rw-r--r-- | kresources/scalix/knotes/Makefile.am | 28 | ||||
-rw-r--r-- | kresources/scalix/knotes/resourcescalix.cpp | 425 | ||||
-rw-r--r-- | kresources/scalix/knotes/resourcescalix.h | 128 | ||||
-rw-r--r-- | kresources/scalix/knotes/resourcescalix_plugin.cpp | 50 | ||||
-rw-r--r-- | kresources/scalix/knotes/scalix.desktop | 30 |
6 files changed, 0 insertions, 717 deletions
diff --git a/kresources/scalix/knotes/CMakeLists.txt b/kresources/scalix/knotes/CMakeLists.txt deleted file mode 100644 index 516690e05..000000000 --- a/kresources/scalix/knotes/CMakeLists.txt +++ /dev/null @@ -1,56 +0,0 @@ -################################################# -# -# (C) 2010-2011 Serghei Amelian -# serghei (DOT) amelian (AT) gmail.com -# -# Improvements and feedback are welcome -# -# This file is released under GPL >= 2 -# -################################################# - -include_directories( - ${CMAKE_CURRENT_BINARY_DIR} - ${CMAKE_SOURCE_DIR} - ${CMAKE_SOURCE_DIR}/knotes - ${CMAKE_SOURCE_DIR}/libtdepim - ${TDE_INCLUDE_DIR} - ${TQT_INCLUDE_DIRS} -) - -link_directories( - ${TQT_LIBRARY_DIRS} -) - - -##### other data ################################ - -# FIXME this is a conflict - -install( - FILES scalix.desktop - DESTINATION ${SERVICES_INSTALL_DIR}/kresources/knotes ) - -install( - FILES ../uninstall.desktop - RENAME scalix.desktop - DESTINATION ${SERVICES_INSTALL_DIR}/kresources/knotes ) - - -##### knotes_scalix (module) #################### - -tde_add_kpart( knotes_scalix AUTOMOC - SOURCES resourcescalix_plugin.cpp - LINK knotesscalix-shared - DESTINATION ${PLUGIN_INSTALL_DIR} -) - - -##### knotesscalix (shared) ##################### - -tde_add_library( knotesscalix SHARED AUTOMOC - SOURCES resourcescalix.cpp - VERSION 0.0.0 - LINK resourcescalixshared-static kgroupwarebase-shared knotes-shared - DESTINATION ${LIB_INSTALL_DIR} -) diff --git a/kresources/scalix/knotes/Makefile.am b/kresources/scalix/knotes/Makefile.am deleted file mode 100644 index 56d7efe3e..000000000 --- a/kresources/scalix/knotes/Makefile.am +++ /dev/null @@ -1,28 +0,0 @@ -METASOURCES = AUTO - -INCLUDES = -I$(top_srcdir)/kresources/scalix/shared \ - -I$(top_srcdir) -I$(top_srcdir)/knotes -I$(top_builddir)/libtdepim $(all_includes) - -# The scalix wizard links to this library too -lib_LTLIBRARIES = libknotesscalix.la - -libknotesscalix_la_SOURCES = resourcescalix.cpp -libknotesscalix_la_LDFLAGS = $(all_libraries) -no-undefined -libknotesscalix_la_LIBADD = \ - $(top_builddir)/kresources/scalix/shared/libresourcescalixshared.la \ - $(top_builddir)/knotes/libknotesresources.la \ - $(top_builddir)/libkcal/libkcal.la \ - -lkresources -ltdeprint - -kde_module_LTLIBRARIES = knotes_scalix.la - -knotes_scalix_la_SOURCES = resourcescalix_plugin.cpp -knotes_scalix_la_LDFLAGS = $(all_libraries) -module $(KDE_PLUGIN) -no-undefined -knotes_scalix_la_LIBADD = libknotesscalix.la - -servicedir = $(kde_servicesdir)/kresources/knotes -service_DATA = scalix.desktop - -install-data-local: $(srcdir)/../uninstall.desktop - $(mkinstalldirs) $(DESTDIR)$(servicedir) - $(INSTALL_DATA) $(srcdir)/../uninstall.desktop $(DESTDIR)$(servicedir)/scalix.desktop diff --git a/kresources/scalix/knotes/resourcescalix.cpp b/kresources/scalix/knotes/resourcescalix.cpp deleted file mode 100644 index 62b0daf48..000000000 --- a/kresources/scalix/knotes/resourcescalix.cpp +++ /dev/null @@ -1,425 +0,0 @@ -/* - This file is part of the scalix resource - based on the kolab resource. - - Copyright (c) 2004 Bo Thorsen <bo@sonofthor.dk> - Copyright (c) 2004 Till Adam <adam@kde.org> - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Library General Public - License as published by the Free Software Foundation; either - version 2 of the License, or (at your option) any later version. - - This library 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 - Library General Public License for more details. - - You should have received a copy of the GNU Library General Public License - along with this library; see the file COPYING.LIB. If not, write to - the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, - Boston, MA 02110-1301, USA. - - In addition, as a special exception, the copyright holders give - permission to link the code of this program with any edition of - the TQt library by Trolltech AS, Norway (or with modified versions - of TQt that use the same license as TQt), and distribute linked - combinations including the two. You must obey the GNU General - Public License in all respects for all of the code used other than - TQt. If you modify this file, you may extend this exception to - your version of the file, but you are not obligated to do so. If - you do not wish to do so, delete this exception statement from - your version. -*/ - -#include "resourcescalix.h" - -#include <knotes/resourcemanager.h> - -#include <libkcal/icalformat.h> - -#include <kdebug.h> -#include <kglobal.h> - -using namespace Scalix; - -static const char* configGroupName = "Note"; -static const char* kmailContentsType = "Note"; -static const char* attachmentMimeType = "application/x-vnd.kolab.note"; -static const char* inlineMimeType = "text/calendar"; - -ResourceScalix::ResourceScalix( const TDEConfig *config ) - : ResourceNotes( config ), ResourceScalixBase( "ResourceScalix-KNotes" ), - mCalendar( TQString::fromLatin1("UTC") ) -{ - setType( "scalix" ); -} - -ResourceScalix::~ResourceScalix() -{ -} - -bool ResourceScalix::doOpen() -{ - TDEConfig config( configFile() ); - config.setGroup( configGroupName ); - - // Get the list of Notes folders from KMail - TQValueList<KMailICalIface::SubResource> subResources; - if ( !kmailSubresources( subResources, kmailContentsType ) ) - return false; - - // Make the resource map from the folder list - TQValueList<KMailICalIface::SubResource>::ConstIterator it; - mSubResources.clear(); - for ( it = subResources.begin(); it != subResources.end(); ++it ) { - const TQString subResource = (*it).location; - const bool active = config.readBoolEntry( subResource, true ); - mSubResources[ subResource ] = Scalix::SubResource( active, (*it).writable, (*it).label ); - } - - return true; -} - -void ResourceScalix::doClose() -{ - TDEConfig config( configFile() ); - config.setGroup( configGroupName ); - Scalix::ResourceMap::ConstIterator it; - for ( it = mSubResources.begin(); it != mSubResources.end(); ++it ) - config.writeEntry( it.key(), it.data().active() ); -} - -bool ResourceScalix::loadSubResource( const TQString& subResource, - const TQString &mimetype ) -{ - // Get the list of journals - int count = 0; - if ( !kmailIncidencesCount( count, mimetype, subResource ) ) { - kdError() << "Communication problem in ResourceScalix::load()\n"; - return false; - } - - TQMap<TQ_UINT32, TQString> lst; - if( !kmailIncidences( lst, mimetype, subResource, 0, count ) ) { - kdError(5500) << "Communication problem in " - << "ResourceScalix::getIncidenceList()\n"; - return false; - } - - kdDebug(5500) << "Notes scalix resource: got " << lst.count() << " notes in " << subResource << endl; - - // Populate with the new entries - const bool silent = mSilent; - mSilent = true; - TQMap<TQ_UINT32, TQString>::Iterator it; - for ( it = lst.begin(); it != lst.end(); ++it ) { - KCal::Journal* journal = addNote( it.data(), subResource, it.key(), mimetype ); - if ( !journal ) - kdDebug(5500) << "loading note " << it.key() << " failed" << endl; - else - manager()->registerNote( this, journal ); - } - mSilent = silent; - - return true; -} - -bool ResourceScalix::load() -{ - // We get a fresh list of events, so clean out the old ones - mCalendar.deleteAllEvents(); - mUidMap.clear(); - - bool rc = true; - Scalix::ResourceMap::ConstIterator itR; - for ( itR = mSubResources.begin(); itR != mSubResources.end(); ++itR ) { - if ( !itR.data().active() ) - // This subResource is disabled - continue; - - TQString mimetype = inlineMimeType; - rc &= loadSubResource( itR.key(), mimetype ); - mimetype = attachmentMimeType; - rc &= loadSubResource( itR.key(), mimetype ); - } - - return rc; -} - -bool ResourceScalix::save() -{ - // Nothing to do here, we save everything in incidenceUpdated() - return true; -} - -bool ResourceScalix::addNote( KCal::Journal* journal ) -{ - return addNote( journal, TQString(), 0 ); -} - -KCal::Journal* ResourceScalix::addNote( const TQString& data, const TQString& subresource, - TQ_UINT32 sernum, const TQString& ) -{ - KCal::Journal* journal = 0; - // FIXME: This does not take into account the time zone! - KCal::ICalFormat formatter; - journal = static_cast<KCal::Journal*>( formatter.fromString( data ) ); - - Q_ASSERT( journal ); - if( journal && !mUidMap.contains( journal->uid() ) ) - if ( addNote( journal, subresource, sernum ) ) - return journal; - else - delete journal; - return 0; -} - -bool ResourceScalix::addNote( KCal::Journal* journal, - const TQString& subresource, TQ_UINT32 sernum ) -{ - kdDebug(5500) << "ResourceScalix::addNote( KCal::Journal*, '" << subresource << "', " << sernum << " )\n"; - - journal->registerObserver( this ); - - // Find out if this note was previously stored in KMail - bool newNote = subresource.isEmpty(); - mCalendar.addJournal( journal ); - - TQString resource = - newNote ? findWritableResource( mSubResources ) : subresource; - if ( resource.isEmpty() ) // canceled - return false; - - if ( !mSilent ) { - KCal::ICalFormat formatter; - const TQString xml = formatter.toString( journal ); - kdDebug(5500) << k_funcinfo << "XML string:\n" << xml << endl; - - if( !kmailUpdate( resource, sernum, xml, attachmentMimeType, journal->uid() ) ) { - kdError(5500) << "Communication problem in ResourceScalix::addNote()\n"; - return false; - } - } - - if ( !resource.isEmpty() && sernum != 0 ) { - mUidMap[ journal->uid() ] = StorageReference( resource, sernum ); - return true; - } - - return false; -} - -bool ResourceScalix::deleteNote( KCal::Journal* journal ) -{ - const TQString uid = journal->uid(); - if ( !mUidMap.contains( uid ) ) - // Odd - return false; - - if ( !mSilent ) { - kmailDeleteIncidence( mUidMap[ uid ].resource(), - mUidMap[ uid ].serialNumber() ); - } - mUidMap.remove( uid ); - manager()->deleteNote( journal ); - mCalendar.deleteJournal( journal ); - return true; -} - -KCal::Alarm::List ResourceScalix::alarms( const TQDateTime& from, const TQDateTime& to ) -{ - KCal::Alarm::List alarms; - KCal::Journal::List notes = mCalendar.journals(); - KCal::Journal::List::ConstIterator note; - for ( note = notes.begin(); note != notes.end(); ++note ) - { - TQDateTime preTime = from.addSecs( -1 ); - KCal::Alarm::List::ConstIterator it; - for( it = (*note)->alarms().begin(); it != (*note)->alarms().end(); ++it ) - { - if ( (*it)->enabled() ) - { - TQDateTime dt = (*it)->nextRepetition( preTime ); - if ( dt.isValid() && dt <= to ) - alarms.append( *it ); - } - } - } - - return alarms; -} - -void ResourceScalix::incidenceUpdated( KCal::IncidenceBase* i ) -{ - TQString subResource; - TQ_UINT32 sernum; - if ( mUidMap.contains( i->uid() ) ) { - subResource = mUidMap[ i->uid() ].resource(); - sernum = mUidMap[ i->uid() ].serialNumber(); - } else { // can this happen? - subResource = findWritableResource( mSubResources ); - if ( subResource.isEmpty() ) // canceled - return; - sernum = 0; - } - - KCal::Journal* journal = dynamic_cast<KCal::Journal*>( i ); - KCal::ICalFormat formatter; - const TQString xml = formatter.toString( journal ); - if( !xml.isEmpty() && kmailUpdate( subResource, sernum, xml, attachmentMimeType, journal->uid() ) ) - mUidMap[ i->uid() ] = StorageReference( subResource, sernum ); -} - -/* - * These are the DCOP slots that KMail call to notify when something - * changed. - */ -bool ResourceScalix::fromKMailAddIncidence( const TQString& type, - const TQString& subResource, - TQ_UINT32 sernum, - int, - const TQString& note ) -{ - // Check if this is a note - if( type != kmailContentsType ) return false; - - const bool silent = mSilent; - mSilent = true; - TQString mimetype = inlineMimeType; - KCal::Journal* journal = addNote( note, subResource, sernum, mimetype ); - if ( journal ) - manager()->registerNote( this, journal ); - mSilent = silent; - return true; -} - -void ResourceScalix::fromKMailDelIncidence( const TQString& type, - const TQString& /*subResource*/, - const TQString& uid ) -{ - // Check if this is a note - if( type != kmailContentsType ) return; - - kdDebug(5500) << "ResourceScalix::fromKMailDelIncidence( " << type << ", " << uid - << " )" << endl; - - const bool silent = mSilent; - mSilent = true; - KCal::Journal* j = mCalendar.journal( uid ); - if( j ) - deleteNote( j ); - mSilent = silent; -} - -void ResourceScalix::fromKMailRefresh( const TQString& type, - const TQString& /*subResource*/ ) -{ - if ( type == kmailContentsType ) - load(); // ### should call loadSubResource(subResource) probably -} - -void ResourceScalix::fromKMailAddSubresource( const TQString& type, - const TQString& subResource, - const TQString& mimetype, - bool writable ) -{ - if ( type != kmailContentsType ) - // Not ours - return; - - if ( mSubResources.contains( subResource ) ) - // Already registered - return; - - TDEConfig config( configFile() ); - config.setGroup( configGroupName ); - - bool active = config.readBoolEntry( subResource, true ); - mSubResources[ subResource ] = Scalix::SubResource( active, writable, subResource ); - loadSubResource( subResource, mimetype ); - emit signalSubresourceAdded( this, type, subResource ); -} - -void ResourceScalix::fromKMailDelSubresource( const TQString& type, - const TQString& subResource ) -{ - if ( type != configGroupName ) - // Not ours - return; - - if ( !mSubResources.contains( subResource ) ) - // Not registered - return; - - // Ok, it's our job, and we have it here - mSubResources.erase( subResource ); - - TDEConfig config( configFile() ); - config.setGroup( configGroupName ); - config.deleteEntry( subResource ); - config.sync(); - - // Make a list of all uids to remove - Scalix::UidMap::ConstIterator mapIt; - TQStringList uids; - for ( mapIt = mUidMap.begin(); mapIt != mUidMap.end(); ++mapIt ) - if ( mapIt.data().resource() == subResource ) - // We have a match - uids << mapIt.key(); - - // Finally delete all the incidences - if ( !uids.isEmpty() ) { - const bool silent = mSilent; - mSilent = true; - TQStringList::ConstIterator it; - for ( it = uids.begin(); it != uids.end(); ++it ) { - KCal::Journal* j = mCalendar.journal( *it ); - if( j ) - deleteNote( j ); - } - mSilent = silent; - } - - emit signalSubresourceRemoved( this, type, subResource ); -} - -void ResourceScalix::fromKMailAsyncLoadResult( const TQMap<TQ_UINT32, TQString>& map, - const TQString& type, - const TQString& folder ) -{ - // We are only interested in notes - if ( ( type != attachmentMimeType ) && ( type != inlineMimeType ) ) return; - // Populate with the new entries - const bool silent = mSilent; - mSilent = true; - TQString mimetype = inlineMimeType; - for( TQMap<TQ_UINT32, TQString>::ConstIterator it = map.begin(); it != map.end(); ++it ) { - KCal::Journal* journal = addNote( it.data(), folder, it.key(), mimetype ); - if ( !journal ) - kdDebug(5500) << "loading note " << it.key() << " failed" << endl; - else - manager()->registerNote( this, journal ); - } - mSilent = silent; -} - - -TQStringList ResourceScalix::subresources() const -{ - return mSubResources.keys(); -} - -bool ResourceScalix::subresourceActive( const TQString& res ) const -{ - if ( mSubResources.contains( res ) ) { - return mSubResources[ res ].active(); - } - - // Safe default bet: - kdDebug(5650) << "subresourceActive( " << res << " ): Safe bet\n"; - - return true; -} - - -#include "resourcescalix.moc" diff --git a/kresources/scalix/knotes/resourcescalix.h b/kresources/scalix/knotes/resourcescalix.h deleted file mode 100644 index 6a3676c1e..000000000 --- a/kresources/scalix/knotes/resourcescalix.h +++ /dev/null @@ -1,128 +0,0 @@ -/* - This file is part of the scalix resource - based on the kolab resource. - - Copyright (c) 2004 Bo Thorsen <bo@sonofthor.dk> - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Library General Public - License as published by the Free Software Foundation; either - version 2 of the License, or (at your option) any later version. - - This library 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 - Library General Public License for more details. - - You should have received a copy of the GNU Library General Public License - along with this library; see the file COPYING.LIB. If not, write to - the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, - Boston, MA 02110-1301, USA. - - In addition, as a special exception, the copyright holders give - permission to link the code of this program with any edition of - the TQt library by Trolltech AS, Norway (or with modified versions - of TQt that use the same license as TQt), and distribute linked - combinations including the two. You must obey the GNU General - Public License in all respects for all of the code used other than - TQt. If you modify this file, you may extend this exception to - your version of the file, but you are not obligated to do so. If - you do not wish to do so, delete this exception statement from - your version. -*/ - -#ifndef KNOTES_RESOURCESCALIX_H -#define KNOTES_RESOURCESCALIX_H - -#include <resourcenotes.h> -#include <libkcal/incidencebase.h> -#include <libkcal/calendarlocal.h> -#include "../shared/resourcescalixbase.h" -#include "../shared/subresource.h" -#include <tdepimmacros.h> - - -namespace Scalix { - -/** - * This class implements a KNotes resource that keeps its - * addresses in an IMAP folder in KMail (or other conforming email - * clients). - */ -class KDE_EXPORT ResourceScalix : public ResourceNotes, - public KCal::IncidenceBase::Observer, - public ResourceScalixBase -{ - Q_OBJECT - - -public: - ResourceScalix( const TDEConfig* ); - virtual ~ResourceScalix(); - - /// Load resource data. - bool load(); - - /// Save resource data. - bool save(); - - /// Open the notes resource. - bool doOpen(); - /// Close the notes resource. - void doClose(); - - bool addNote( KCal::Journal* ); - - bool deleteNote( KCal::Journal* ); - - KCal::Alarm::List alarms( const TQDateTime& from, const TQDateTime& to ); - - /// Reimplemented from IncidenceBase::Observer to know when a note was changed - void incidenceUpdated( KCal::IncidenceBase* ); - - /// The ResourceScalixBase methods called by KMail - bool fromKMailAddIncidence( const TQString& type, const TQString& resource, - TQ_UINT32 sernum, int format, const TQString& note ); - void fromKMailDelIncidence( const TQString& type, const TQString& resource, - const TQString& uid ); - void fromKMailRefresh( const TQString& type, const TQString& resource ); - - /// Listen to KMail changes in the amount of sub resources - void fromKMailAddSubresource( const TQString& type, const TQString& resource, - const TQString& label, bool writable ); - void fromKMailDelSubresource( const TQString& type, const TQString& resource ); - - void fromKMailAsyncLoadResult( const TQMap<TQ_UINT32, TQString>& map, - const TQString& type, - const TQString& folder ); - - /** Return the list of subresources. */ - TQStringList subresources() const; - - /** Is this subresource active? */ - bool subresourceActive( const TQString& ) const; - -signals: - void signalSubresourceAdded( Resource*, const TQString&, const TQString& ); - void signalSubresourceRemoved( Resource*, const TQString&, const TQString& ); - -private: - bool addNote( KCal::Journal* journal, const TQString& resource, - TQ_UINT32 sernum ); - KCal::Journal* addNote( const TQString& data, const TQString& subresource, - TQ_UINT32 sernum, const TQString &mimetype ); - - bool loadSubResource( const TQString& resource, const TQString& mimetype ); - - TQString configFile() const { - return ResourceScalixBase::configFile( "knotes" ); - } - - KCal::CalendarLocal mCalendar; - - // The list of subresources - Scalix::ResourceMap mSubResources; -}; - -} - -#endif // KNOTES_RESOURCESCALIX_H diff --git a/kresources/scalix/knotes/resourcescalix_plugin.cpp b/kresources/scalix/knotes/resourcescalix_plugin.cpp deleted file mode 100644 index 925c27b01..000000000 --- a/kresources/scalix/knotes/resourcescalix_plugin.cpp +++ /dev/null @@ -1,50 +0,0 @@ -/* - This file is part of the scalix resource - based on the kolab resource. - - Copyright (c) 2002 - 2004 Klarlvdalens Datakonsult AB - <info@klaralvdalens-datakonsult.se> - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Library General Public - License as published by the Free Software Foundation; either - version 2 of the License, or (at your option) any later version. - - This library 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 - Library General Public License for more details. - - You should have received a copy of the GNU Library General Public License - along with this library; see the file COPYING.LIB. If not, write to - the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, - Boston, MA 02110-1301, USA. - - In addition, as a special exception, the copyright holders give - permission to link the code of this program with any edition of - the TQt library by Trolltech AS, Norway (or with modified versions - of TQt that use the same license as TQt), and distribute linked - combinations including the two. You must obey the GNU General - Public License in all respects for all of the code used other than - TQt. If you modify this file, you may extend this exception to - your version of the file, but you are not obligated to do so. If - you do not wish to do so, delete this exception statement from - your version. -*/ - -#include "resourcescalix.h" - -class ScalixFactory : public KRES::PluginFactoryBase -{ -public: - KRES::Resource *resource( const TDEConfig *config ) - { - return new Scalix::ResourceScalix( config ); - } - - KRES::ConfigWidget *configWidget( TQWidget* ) - { - return 0; - } -}; - -K_EXPORT_COMPONENT_FACTORY( knotes_scalix, ScalixFactory() ) diff --git a/kresources/scalix/knotes/scalix.desktop b/kresources/scalix/knotes/scalix.desktop deleted file mode 100644 index 7669c7ae7..000000000 --- a/kresources/scalix/knotes/scalix.desktop +++ /dev/null @@ -1,30 +0,0 @@ -[Desktop Entry] -Name=Notes on Scalix Server via KMail -Name[bg]=Бележки на сървъра Scalix през KMail -Name[ca]=Notes en un servidor Scalix mitjançant el KMail -Name[da]=Noter på Scalix-server via KMail -Name[de]=Notizen auf einem Scalix-Server via KMail -Name[el]=Σημειώσεις σε εξυπηρετητή Scalix μέσω του KMail -Name[es]=Notas en servidor Scalix por medio de KMail -Name[et]=Kalender Scalix-serveris (KMaili vahendusel) -Name[fr]=Notes sur serveur Scalix via KMail -Name[is]=Minnismiðar á Scalix-þjóni gegnum KMail -Name[it]=Note su server Scalix via KMail -Name[ja]=KMail 経由 Scalix サーバのメモ -Name[km]=ចំណាំនៅលើម៉ាស៊ីនបម្រើ Scalix តាមរយៈ KMail -Name[nds]=Notizen op Scalix-Server över KMail -Name[nl]=Notities op Scalix-server via KMail -Name[pl]=Notatki na serwerze Scalix za pośrednictwem KMaila -Name[ru]=Заметки на сервере Scalix через KMail -Name[sk]=Poznámky na Scalix serveri pomocou KMail -Name[sr]=Белешке на Scalix серверу преко KMail-а -Name[sr@Latn]=Beleške na Scalix serveru preko KMail-a -Name[sv]=Anteckningar på Scalix-server via Kmail -Name[tr]=KMail Aracılığı ile Scalix Sunucusunda Takvim -Name[zh_CN]=通过 KMail 访问 Scalix 服务器上的日历 -Name[zh_TW]=透過 KMail 取得 Scalix 伺服器上的便條 -X-TDE-Library=knotes_scalix -Type=Service -ServiceTypes=KResources/Plugin -X-TDE-ResourceFamily=notes -X-TDE-ResourceType=scalix |