summaryrefslogtreecommitdiffstats
path: root/app_templates/kioslave/src/kioslave.py
diff options
context:
space:
mode:
Diffstat (limited to 'app_templates/kioslave/src/kioslave.py')
-rwxr-xr-xapp_templates/kioslave/src/kioslave.py618
1 files changed, 0 insertions, 618 deletions
diff --git a/app_templates/kioslave/src/kioslave.py b/app_templates/kioslave/src/kioslave.py
deleted file mode 100755
index 2d013b0..0000000
--- a/app_templates/kioslave/src/kioslave.py
+++ /dev/null
@@ -1,618 +0,0 @@
-#!/usr/bin/python
-###########################################################################
-# kioslave - description #
-# ------------------------------ #
-# begin : Mon May 2 2005 #
-# copyright : (C) 2005 by AUTHOR #
-# email : [email protected] #
-# #
-###########################################################################
-# #
-# This program is free software; you can redistribute it and/or modify #
-# it under the terms of the GNU General Public License as published by #
-# the Free Software Foundation; either version 2 of the License, or #
-# (at your option) any later version. #
-# #
-###########################################################################
-
-# Import the required Qt and KDE modules.
-from qt import *
-from kio import *
-from tdecore import *
-import os, time
-
-# For debugging purposes, import the sys and traceback modules.
-import sys, traceback
-
-DEBUG = 1
-
-# Define a class which will be used to create IOSlave instances.
-############################################################################
-class SlaveClass(KIO.SlaveBase):
- """SlaveClass(KIO.SlaveBase)
-
- See tdelibs/kio/kio/slavebase.h for virtual functions to override.
- """
-
- ########################################################################
- def __init__(self, pool, app):
- # We must call the initialisation method of the base class.
- KIO.SlaveBase.__init__(self, "kioslave", pool, app)
-
- # Attach the DCOP client object associated with this IOSlave to the
- # DCOP server.
- self.dcopClient().attach()
-
- self.debug("dcopClient: %i" % self.dcopClient().isRegistered())
-
- self.contents = RAMDir(None,u"/")
-
- self.host = ""
- self.document = None
- self.file = None
-
- self.debug("Exiting __init__ now");
-
- ########################################################################
- def __del__(self):
- pass
-
- ########################################################################
- # KIO.SlaveBase method
- def setHost(self, host, port, user, passwd):
- self.debug(
- "setHost: %s %s %s %s" % (
- repr(unicode(host)), repr(unicode(port)),
- repr(unicode(user)), repr(unicode(passwd))
- )
- )
-
- # This IOSlave does not allow a host to be specified as part of
- # a URL.
- if unicode(host) != u"":
- self.closeConnection()
- self.error(KIO.ERR_MALFORMED_URL, host)
- return
-
- ########################################################################
- # KIO.SlaveBase method
- def openConnection(self):
- # Don't call self.finished() in this method.
- self.debug("openConnection")
-
- ########################################################################
- # KIO.SlaveBase method
- def closeConnection(self):
- # Don't call self.finished() in this method.
- self.debug("closeConnection")
-
- ########################################################################
- # KIO.SlaveBase method
- def get(self, url):
- path = str(url.path())
- self.debug("get(): %s" % path)
- self.openConnection()
-
- item = self.contents.resolve(path)
- if item is None:
- self.error(KIO.ERR_DOES_NOT_EXIST, path)
- return
-
- if item.isDir():
- self.error(KIO.ERR_IS_DIRECTORY, path)
-
- self.totalSize(len(item.getData()))
- self.data(QByteArray(item.getData()))
-
- # The end of the data string.
- self.data(QByteArray())
-
- self.finished()
-
- ########################################################################
- # KIO.SlaveBase method
- def put(self, url, permissions, overwrite, resume):
- self.debug("put")
- self.openConnection()
-
- path = str(url.path())
- parts = path.split('/')
- filename = parts[-1]
- parent_dir = self.contents.resolveParent(path)
- if parent_dir is None:
- parent_path = '/'.join(parts[:-1])
- self.error(KIO.ERR_DOES_NOT_EXIST, parent_path)
- return
-
- if parent_dir.contains(filename):
- if not overwrite:
- self.error(KIO.ERR_COULD_NOT_WRITE, parent_path)
- return
- else:
- parent_dir.unlink(filename)
-
- # Read data from the application.
- bytearray = QByteArray()
- bytes = 0
- data = ""
-
- while True:
- self.dataReq()
- result = self.readData(bytearray)
-
- if result <= 0:
- # An error or the end of data was encountered.
- break
-
- # The number of bytes read is given in the result.
- bytes = bytes + result
- data = data + str(bytearray)
-
- parent_dir.insert(RAMFile(parent_dir,filename,data))
-
- self.finished()
-
- ########################################################################
- # KIO.SlaveBase method
- def stat(self, url):
- self.debug("stat: %s" % url.url(0,0))
- self.openConnection()
-
- self.debug("path:%s"% url.path())
-
- # Return info the for the root.
- item = self.contents.resolve(str(url.path()))
- if item is None:
- self.error(KIO.ERR_DOES_NOT_EXIST, str(url.path()))
- return
-
- self.statEntry(item.getStatEntry())
- self.finished()
-
- ########################################################################
- # KIO.SlaveBase method
- def mimetype(self, url):
- self.debug("mimetype: %s" % unicode(url))
- self.openConnection()
-
- path = str(url.path())
- item = self.contents.resolve(path)
- if item is None:
- self.error(KIO.ERR_DOES_NOT_EXIST, path)
- return
-
- self.mimeType(item.getMimetype())
-
- self.finished()
-
- ########################################################################
- # KIO.SlaveBase method
- def listDir(self, url):
- # The "url" argument is a tdecore.KURL object.
- self.debug("listDir: %s" % str(url.prettyURL(0)))
- self.openConnection()
-
- path = str(url.path())
- dir = self.contents.resolve(path)
- if dir is None:
- self.error(KIO.ERR_DOES_NOT_EXIST, path)
- return
-
- if not dir.isDir():
- self.error(KIO.ERR_IS_FILE, path)
- return
-
- for entry in dir.listDir():
- self.listEntry(entry, 0)
-
- self.listEntry([], 1) # Signal that the list is finished.
- self.finished()
-
- ########################################################################
- # KIO.SlaveBase method
- def mkdir(self, url, permissions):
- self.debug("mkdir")
- self.openConnection()
-
- parent_path = str(url.path())
- parent_dir = self.contents.resolveParent(parent_path)
- if parent_dir is None:
- self.error(KIO.ERR_DOES_NOT_EXIST, parent_path)
- return
-
- new_dir_obj = parent_dir.mkdir(parent_path.split('/')[-1])
- if new_dir_obj is None:
- self.error(KIO.ERR_COULD_NOT_MKDIR, parent_path)
- return
-
- self.finished()
-
- ########################################################################
- # KIO.SlaveBase method
- def rename(self, src, dest, overwrite):
- self.debug("rename: %s %s" % (src.path(), dest.path()))
- self.openConnection()
-
- src_path = str(src.path())
- src_obj = self.contents.resolve(src_path)
- if src_obj is None:
- self.error(KIO.ERR_DOES_NOT_EXIST, src_path)
- return
-
- # See if the destination path already exists.
- dest_path = str(dest.path())
- dest_obj = self.contents.resolve(dest_path)
- if dest_obj is not None:
- if dest_obj is src_obj:
- self.finished() # Done already.
- return
-
- if not overwrite:
- # Can't overwrite. not bad.
- self.error(KIO.ERR_CANNOT_RENAME, dest_path)
- return
- else:
- # Over write, just remove the object.
- dest_obj.getParent().unlink(dest_obj.getName())
-
- dest_dir = self.contents.resolveParent(dest_path)
- if dest_dir is None:
- self.error(KIO.ERR_DOES_NOT_EXIST, dest_path)
- return
-
- src_obj.getParent().unlink(src_obj)
- src_obj.setName(dest_path.split('/')[-1])
- dest_dir.insert(src_obj)
-
- self.finished()
-
- # Other possible file operations are represented by the following
- # methods which are not implemented.
-
- #def symlink(self, target, dest, overwrite):
- # debug("symlink")
- # ...
- # self.finished()
-
- #def chmod(self, url, permissions):
- # debug("chmod")
- # ...
- # self.finished()
-
- ########################################################################
- # KIO.SlaveBase method
- def copy(self, src, dest, permissions, overwrite):
- self.debug("copy")
- self.openConnection()
-
- src_path = str(src.path())
- src_obj = self.contents.resolve(src_path)
- if src_obj is None:
- self.error(KIO.ERR_DOES_NOT_EXIST, src_path)
- return
-
- # See if the destination path already exists.
- dest_path = str(dest.path())
- dest_obj = self.contents.resolve(dest_path)
- if dest_obj is not None:
- if dest_obj is src_obj:
- self.finished() # Done already.
- return
-
- if not overwrite:
- # Can't overwrite. not bad.
- self.error(KIO.ERR_COULD_NOT_WRITE, dest_path)
- return
- else:
- # Over write, just remove the object.
- dest_obj.getParent().unlink(dest_obj.getName())
-
- dest_dir = self.contents.resolveParent(dest_path)
- if dest_dir is None:
- self.error(KIO.ERR_DOES_NOT_EXIST, dest_path)
- return
-
- new_obj = src_obj.copy()
- new_obj.setName(dest_path.split('/')[-1])
- dest_dir.insert(new_obj)
-
- self.finished()
-
- ########################################################################
- # KIO.SlaveBase method
- def del_(self, url, isfile):
- self.debug("del_")
- self.openConnection()
-
- path = str(url.path())
- item = self.contents.resolve(path)
- if item is None:
- self.error(KIO.ERR_DOES_NOT_EXIST, path)
- return
-
- item.getParent().unlink(item.getName())
-
- self.finished()
-
- ########################################################################
- # KIO.SlaveBase method
- def disconnectSlave(self):
- self.debug("disconnectSlave")
- return
-
- ########################################################################
- # KIO.SlaveBase method
- def dispatchLoop(self):
- self.debug("dispatchLoop")
- KIO.SlaveBase.dispatchLoop(self)
-
- ########################################################################
- # KIO.SlaveBase method
- def error(self,errid,text):
- self.debug("error: %i, %s" % (errid,text) )
- KIO.SlaveBase.error(self,errid,text)
-
- ############################################################################
- def debug(self,msg):
- if DEBUG == 0: return
- print "kioslave:"+str(msg)+"\n"
- sys.stdout.flush()
-
-############################################################################
-class RAMDir(object):
- ############################################################################
- def __init__(self,parent,name):
- self.contents = {}
- self.parent = parent
- self.name = str(name)
-
- ############################################################################
- def getParent(self):
- return self.parent
-
- ############################################################################
- def setParent(self,parent):
- self.parent = parent
-
- ############################################################################
- def getName(self):
- return self.name
-
- ############################################################################
- def setName(self,name):
- self.name = str(name)
-
- ############################################################################
- def resolve(self,path):
- while path.endswith('/'):
- path = path[:-1]
- while path.startswith('/'):
- path = path[1:]
-
- if path=='':
- return self
-
- parts = path.split('/')
- self.debug(path)
- for item in self.contents.keys():
- self.debug("keys:"+item)
-
- if parts[0] in self.contents:
- return self.contents[parts[0]].resolve('/'.join(parts[1:]))
- self.debug("CHECKPOINT 1")
- return None
-
- ############################################################################
- def resolveParent(self,path):
- while path.endswith('/'):
- path = path[:-1]
- while path.startswith('/'):
- path = path[1:]
-
- if path=="":
- return None
-
- parts = path.split('/')
- return self.resolve('/'.join(parts[:-1]))
-
- ############################################################################
- def mkdir(self,name):
- if name in self.contents:
- return None
- new_dir = RAMDir(self,name)
- self.contents[name] = new_dir
- return new_dir
-
- ############################################################################
- def getStatEntry(self):
- # Return info the for the root.
- length = 0
-
- entry = []
- atom = KIO.UDSAtom()
- atom.m_uds = KIO.UDS_NAME
- atom.m_str = self.name
- #debug("name: %s" % name)
- entry.append(atom)
-
- atom = KIO.UDSAtom()
- atom.m_uds = KIO.UDS_SIZE
- atom.m_long = length
- #debug("length: %i" % length)
- entry.append(atom)
-
- atom = KIO.UDSAtom()
- atom.m_uds = KIO.UDS_MODIFICATION_TIME
- # Number of seconds since the epoch.
- atom.m_long = int(time.time())
- entry.append(atom)
-
- atom = KIO.UDSAtom()
- atom.m_uds = KIO.UDS_ACCESS
- # The usual octal permission information (rw-r--r-- in this case).
- atom.m_long = 0644
- entry.append(atom)
-
- # If the stat method is implemented then entries _must_ include
- # the UDE_FILE_TYPE atom or the whole system may not work at all.
- atom = KIO.UDSAtom()
- atom.m_uds = KIO.UDS_FILE_TYPE
- #atom.m_long = os.path.stat.S_IFREG
- atom.m_long = os.path.stat.S_IFDIR
- entry.append(atom)
-
- atom = KIO.UDSAtom()
- atom.m_uds = KIO.UDS_MIME_TYPE
- atom.m_str = self.getMimetype()
- entry.append(atom)
-
- return entry
-
- ############################################################################
- def listDir(self):
- list = []
- for item in self.contents.values():
- list.append(item.getStatEntry())
- return list
-
- ############################################################################
- def isDir(self):
- return True
-
- ############################################################################
- def insert(self,item):
- self.contents[item.getName()] = item
-
- ############################################################################
- def contains(self,name):
- return name in self.contents
-
- ############################################################################
- def unlink(self,name):
- if str(name) in self.contents:
- del self.contents[str(name)]
-
- ############################################################################
- def debug(self,msg):
- if DEBUG == 0: return
-
- print "kioslave:"+str(msg)+"\n"
- sys.stdout.flush()
-
- ############################################################################
- def getMimetype(self):
- return "inode/directory"
-
- ############################################################################
- def copy(self):
- new_dir = RAMDir(None,self.name)
-
- for item in self.contents.values():
- new_item = item.copy()
- new_item.setParent(new_dir)
- new_dir.insert(new_item)
-
- return new_dir
-
-############################################################################
-class RAMFile(object):
- ############################################################################
- def __init__(self,parent,name,data=None):
- self.parent = parent
- self.name = str(name)
- self.data = data
-
- ############################################################################
- def getParent(self):
- return self.parent
-
- ############################################################################
- def setParent(self,parent):
- self.parent = parent
-
- ############################################################################
- def getName(self):
- return self.name
-
- ############################################################################
- def setName(self,name):
- self.name = str(name)
-
- ############################################################################
- def resolve(self,path):
- if path!="":
- return None
- return self
-
- ############################################################################
- def getData(self):
- return self.data
-
- ############################################################################
- def resolveParent(self,path):
- return None
-
- ############################################################################
- def getStatEntry(self):
- # Return info the for the root.
- length = 0
-
- entry = []
- atom = KIO.UDSAtom()
- atom.m_uds = KIO.UDS_NAME
- atom.m_str = self.name
- #debug("name: %s" % name)
- entry.append(atom)
-
- length = 0
- if self.data is not None:
- length = len(self.data)
-
- atom = KIO.UDSAtom()
- atom.m_uds = KIO.UDS_SIZE
- atom.m_long = length
- #debug("length: %i" % length)
- entry.append(atom)
-
- atom = KIO.UDSAtom()
- atom.m_uds = KIO.UDS_MODIFICATION_TIME
- # Number of seconds since the epoch.
- atom.m_long = int(time.time())
- entry.append(atom)
-
- atom = KIO.UDSAtom()
- atom.m_uds = KIO.UDS_ACCESS
- # The usual octal permission information (rw-r--r-- in this case).
- atom.m_long = 0644
- entry.append(atom)
-
- # If the stat method is implemented then entries _must_ include
- # the UDE_FILE_TYPE atom or the whole system may not work at all.
- atom = KIO.UDSAtom()
- atom.m_uds = KIO.UDS_FILE_TYPE
- atom.m_long = os.path.stat.S_IFREG
- entry.append(atom)
-
- atom = KIO.UDSAtom()
- atom.m_uds = KIO.UDS_MIME_TYPE
- atom.m_str = self.getMimetype()
- entry.append(atom)
-
- return entry
-
- ############################################################################
- def isDir(self):
- return False
-
- ############################################################################
- def getMimetype(self):
- return "text/html"
-
- ############################################################################
- def copy(self):
- return RAMFile(None,self.name,self.data)
-
-############################################################################
-def SlaveFactory(pool, app):
- slave = SlaveClass(pool, app)
- slave.dispatchLoop()