summaryrefslogtreecommitdiffstats
path: root/kio/kio/kdirlister_p.h
diff options
context:
space:
mode:
Diffstat (limited to 'kio/kio/kdirlister_p.h')
-rw-r--r--kio/kio/kdirlister_p.h358
1 files changed, 0 insertions, 358 deletions
diff --git a/kio/kio/kdirlister_p.h b/kio/kio/kdirlister_p.h
deleted file mode 100644
index 47bd4d452..000000000
--- a/kio/kio/kdirlister_p.h
+++ /dev/null
@@ -1,358 +0,0 @@
-/* This file is part of the KDE project
- Copyright (C) 2002 Michael Brade <brade@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.
-*/
-
-#ifndef kdirlister_p_h
-#define kdirlister_p_h
-
-#include "kfileitem.h"
-
-#include <tqmap.h>
-#include <tqdict.h>
-#include <tqcache.h>
-#include <tqwidget.h>
-
-#include <kurl.h>
-#include <kio/global.h>
-#include <kdirwatch.h>
-#include <dcopclient.h>
-
-class TQTimer;
-class KDirLister;
-namespace TDEIO { class Job; class ListJob; }
-
-
-class KDirLister::KDirListerPrivate
-{
-public:
- KDirListerPrivate()
- {
- complete = false;
-
- autoUpdate = false;
- isShowingDotFiles = false;
- dirOnlyMode = false;
-
- autoErrorHandling = false;
- errorParent = 0;
-
- delayedMimeTypes = false;
-
- rootFileItem = 0;
- lstNewItems = 0;
- lstRefreshItems = 0;
- lstMimeFilteredItems = 0;
- lstRemoveItems = 0;
- refreshItemWasFiltered = false;
-
- changes = NONE;
-
- window = 0;
-
- lstFilters.setAutoDelete( true );
- oldFilters.setAutoDelete( true );
- }
-
- /**
- * List of dirs handled by this dirlister. The first entry is the base URL.
- * For a tree view, it contains all the dirs shown.
- */
- KURL::List lstDirs;
-
- // toplevel URL
- KURL url;
-
- bool complete;
-
- bool autoUpdate;
- bool isShowingDotFiles;
- bool dirOnlyMode;
-
- bool autoErrorHandling;
- TQWidget *errorParent;
-
- bool delayedMimeTypes;
-
- struct JobData {
- long unsigned int percent, speed;
- TDEIO::filesize_t processedSize, totalSize;
- };
-
- TQMap<TDEIO::ListJob *, JobData> jobData;
-
- // file item for the root itself (".")
- KFileItem *rootFileItem;
-
- KFileItemList *lstNewItems, *lstRefreshItems;
- KFileItemList *lstMimeFilteredItems, *lstRemoveItems;
-
- bool refreshItemWasFiltered;
-
- int changes;
-
- TQWidget *window; // Main window ths lister is associated with
-
- TQString nameFilter;
- TQPtrList<TQRegExp> lstFilters, oldFilters;
- TQStringList mimeFilter, oldMimeFilter;
- TQStringList mimeExcludeFilter, oldMimeExcludeFilter;
-
- bool localURLSlotFired;
- KURL localURLResultURL;
- bool localURLResultIsLocal;
-};
-
-/**
- * Design of the cache:
- * There is a single KDirListerCache for the whole process.
- * It holds all the items used by the dir listers (itemsInUse)
- * as well as a cache of the recently used items (itemsCached).
- * Those items are grouped by directory (a DirItem represents a whole directory).
- *
- * KDirListerCache also runs all the jobs for listing directories, whether they are for
- * normal listing or for updates.
- * For faster lookups, it also stores two dicts:
- * a URL -> dirlister holding that URL (urlsCurrentlyHeld)
- * a URL -> dirlister currently listing that URL (urlsCurrentlyListed)
- */
-class KDirListerCache : public TQObject, KDirNotify
-{
- Q_OBJECT
-public:
- KDirListerCache( int maxCount = 10 );
- ~KDirListerCache();
-
- bool listDir( KDirLister *lister, const KURL& _url, bool _keep, bool _reload );
- bool validURL( const KDirLister *lister, const KURL& _url ) const;
-
- // stop all running jobs for lister
- void stop( KDirLister *lister );
- // stop just the job listing url for lister
- void stop( KDirLister *lister, const KURL &_url );
-
- void setAutoUpdate( KDirLister *lister, bool enable );
-
- void forgetDirs( KDirLister *lister );
- void forgetDirs( KDirLister *lister, const KURL &_url, bool notify );
-
- void updateDirectory( const KURL &_dir );
-
- KFileItemList *itemsForDir( const KURL &_dir ) const;
-
- KFileItem *findByName( const KDirLister *lister, const TQString &_name ) const;
- // if lister is set, it is checked that the url is held by the lister
- KFileItem *findByURL( const KDirLister *lister, const KURL &_url ) const;
-
- /**
- * Notify that files have been added in @p directory
- * The receiver will list that directory again to find
- * the new items (since it needs more than just the names anyway).
- * Reimplemented from KDirNotify.
- */
- virtual void FilesAdded( const KURL &directory );
-
- /**
- * Notify that files have been deleted.
- * This call passes the exact urls of the deleted files
- * so that any view showing them can simply remove them
- * or be closed (if its current dir was deleted)
- * Reimplemented from KDirNotify.
- */
- virtual void FilesRemoved( const KURL::List &fileList );
-
- /**
- * Notify that files have been changed.
- * At the moment, this is only used for new icon, but it could be
- * used for size etc. as well.
- * Note: this is ASYNC so that it can be used with a broadcast
- */
- virtual void FilesChanged( const KURL::List &fileList );
- virtual void FileRenamed( const KURL &src, const KURL &dst );
-
- static KDirListerCache *self();
-
- static bool exists();
-
-private slots:
- void slotFileDirty( const TQString &_file );
- void slotFileCreated( const TQString &_file );
- void slotFileDeleted( const TQString &_file );
-
- void slotFileDirtyDelayed();
-
- void slotEntries( TDEIO::Job *job, const TDEIO::UDSEntryList &entries );
- void slotResult( TDEIO::Job *j );
- void slotRedirection( TDEIO::Job *job, const KURL &url );
-
- void slotUpdateEntries( TDEIO::Job *job, const TDEIO::UDSEntryList &entries );
- void slotUpdateResult( TDEIO::Job *job );
-
-private:
- TDEIO::ListJob *jobForUrl( const TQString& url, TDEIO::ListJob *not_job = 0 );
- const KURL& joburl( TDEIO::ListJob *job );
-
- void killJob( TDEIO::ListJob *job );
-
- // check if _url is held by some lister and return true,
- // otherwise schedule a delayed update and return false
- bool checkUpdate( const TQString& _url );
- // when there were items deleted from the filesystem all the listers holding
- // the parent directory need to be notified, the unmarked items have to be deleted
- // and removed from the cache including all the childs.
- void deleteUnmarkedItems( TQPtrList<KDirLister> *, KFileItemList * );
- void processPendingUpdates();
- // common for slotRedirection and FileRenamed
- void renameDir( const KURL &oldUrl, const KURL &url );
- // common for deleteUnmarkedItems and FilesRemoved
- void deleteDir( const KURL& dirUrl );
- // remove directory from cache (itemsCached), including all child dirs
- void removeDirFromCache( const KURL& dir );
- // helper for renameDir
- void emitRedirections( const KURL &oldUrl, const KURL &url );
-
- void aboutToRefreshItem( KFileItem *fileitem );
- void emitRefreshItem( KFileItem *fileitem );
-
-#ifndef NDEBUG
- void printDebug();
-#endif
-
- struct DirItem
- {
- DirItem( const KURL &dir )
- : url(dir), rootItem(0), lstItems(new KFileItemList)
- {
- autoUpdates = 0;
- complete = false;
- lstItems->setAutoDelete( true );
- }
-
- ~DirItem()
- {
- if ( autoUpdates )
- {
- if ( KDirWatch::exists() && url.isLocalFile() )
- kdirwatch->removeDir( url.path() );
- sendSignal( false, url );
- }
- delete rootItem;
- delete lstItems;
- }
-
- void sendSignal( bool entering, const KURL& url )
- {
- DCOPClient *client = DCOPClient::mainClient();
- if ( !client )
- return;
- TQByteArray data;
- TQDataStream arg( data, IO_WriteOnly );
- arg << url;
- client->emitDCOPSignal( "KDirNotify", entering ? "enteredDirectory(KURL)" : "leftDirectory(KURL)", data );
- }
-
- void redirect( const KURL& newUrl )
- {
- if ( autoUpdates )
- {
- if ( url.isLocalFile() )
- kdirwatch->removeDir( url.path() );
- sendSignal( false, url );
-
- if ( newUrl.isLocalFile() )
- kdirwatch->addDir( newUrl.path() );
- sendSignal( true, newUrl );
- }
-
- url = newUrl;
-
- if ( rootItem )
- rootItem->setURL( newUrl );
- }
-
- void incAutoUpdate()
- {
- if ( autoUpdates++ == 0 )
- {
- if ( url.isLocalFile() )
- kdirwatch->addDir( url.path() );
- sendSignal( true, url );
- }
- }
-
- void decAutoUpdate()
- {
- if ( --autoUpdates == 0 )
- {
- if ( url.isLocalFile() )
- kdirwatch->removeDir( url.path() );
- sendSignal( false, url );
- }
-
- else if ( autoUpdates < 0 )
- autoUpdates = 0;
- }
-
- // number of KDirListers using autoUpdate for this dir
- short autoUpdates;
-
- // this directory is up-to-date
- bool complete;
-
- // the complete url of this directory
- KURL url;
-
- // KFileItem representing the root of this directory.
- // Remember that this is optional. FTP sites don't return '.' in
- // the list, so they give no root item
- KFileItem *rootItem;
- KFileItemList *lstItems;
- };
-
- static const unsigned short MAX_JOBS_PER_LISTER;
- TQMap<TDEIO::ListJob *, TDEIO::UDSEntryList> jobs;
-
- // an item is a complete directory
- TQDict<DirItem> itemsInUse;
- TQCache<DirItem> itemsCached;
-
- // A lister can be EITHER in urlsCurrentlyListed OR urlsCurrentlyHeld but NOT
- // in both at the same time.
- // On the other hand there can be some listers in urlsCurrentlyHeld
- // and some in urlsCurrentlyListed for the same url!
- // Or differently said, there can be an entry for url in urlsCurrentlyListed
- // and urlsCurrentlyHeld. This happens if more listers are requesting url at
- // the same time and one lister was stopped during the listing of files.
-
- // saves all urls that are currently being listed and maps them
- // to their KDirListers
- TQDict< TQPtrList<KDirLister> > urlsCurrentlyListed;
-
- // saves all KDirListers that are just holding url
- TQDict< TQPtrList<KDirLister> > urlsCurrentlyHeld;
-
- // running timers for the delayed update
- TQDict<TQTimer> pendingUpdates;
-
- static KDirListerCache *s_pSelf;
-};
-
-const unsigned short KDirListerCache::MAX_JOBS_PER_LISTER = 5;
-
-#define s_pCache KDirListerCache::self()
-
-#endif