Difference between revisions of "Development/Tutorials/KIO Slaves/Hello World"

Jump to: navigation, search
(Test it: command line access)
m (Text replace - "<code cppqt>" to "<syntaxhighlight lang="cpp-qt">")
Line 30: Line 30:
  
 
== hello.h ==
 
== hello.h ==
<code cppqt>
+
<syntaxhighlight lang="cpp-qt">
 
#ifndef HELLO_H
 
#ifndef HELLO_H
 
#define HELLO_H
 
#define HELLO_H
Line 50: Line 50:
  
 
== hello.cpp ==
 
== hello.cpp ==
<code cppqt>
+
<syntaxhighlight lang="cpp-qt">
 
#include "hello.h"
 
#include "hello.h"
 
#include <kdebug.h>  
 
#include <kdebug.h>  

Revision as of 21:29, 29 June 2011

Contents

Understanding

A kioslave allows you to represent any kind of storage in a way you want. As an example, the kio_http kioslave loads data from the network over the http (protocol) and shows it rendered as html. Technically, a kioslave is a shared object plus its description. E.g. the imap4 kioslave consist of the following files:

tweedleburg:/usr/local # find -iname "*imap4*"
./lib/kde4/kio_imap4.so
./share/kde4/services/imap4.protocol

The files

We want to write a "hello world" kioslave here. This can be seen as a learning exercise and as a template for future programming projects.

CMakeLists.txt

PROJECT( tutorial )
FIND_PACKAGE(KDE4 REQUIRED)
INCLUDE_DIRECTORIES( ${KDE4_INCLUDES} . )

set(kio_hello_PART_SRCS
   hello.cpp)

kde4_add_plugin(kio_hello ${kio_hello_PART_SRCS})

target_link_libraries(kio_hello ${KDE4_KIO_LIBS})

install(TARGETS kio_hello  DESTINATION ${PLUGIN_INSTALL_DIR})


########### install files ###############

install(FILES hello.protocol DESTINATION ${SERVICES_INSTALL_DIR})

hello.h

#ifndef HELLO_H
#define HELLO_H
 
#include <kio/slavebase.h>
 
/**
  This class implements a hello-world kioslave
 */
class hello : public KIO::SlaveBase
{
  public:
    hello( const QByteArray &pool, const QByteArray &app );
    void get( const KUrl &url );
};
 
#endif
</code>
 
== hello.cpp ==
<syntaxhighlight lang="cpp-qt">
#include "hello.h"
#include <kdebug.h> 
#include <kcomponentdata.h>
 
 
extern "C" int KDE_EXPORT kdemain( int argc, char **argv )
{                                   
  kDebug(7000) << "Entering function";
  KComponentData instance( "kio_hello" );
 
  if (argc != 4) 
  {
    fprintf( stderr, "Usage: kio_hello protocol domain-socket1 domain-socket2\n");
    exit( -1 );
  }
  hello slave( argv[2], argv[3] );
  slave.dispatchLoop();
  return 0;
}
 
void hello::get( const KUrl &url )
{
  kDebug(7000) << "Entering function";
  mimeType( "text/plain" );
  QByteArray str( "Hello_world" );
  data( str );
  finished();
  kDebug(7000) << "Leaving function";
}
 
hello::hello( const QByteArray &pool, const QByteArray &app )
: SlaveBase( "hello", pool, app ) {}
</code>
 
== hello.protocol == 
 [Protocol]
 DocPath=kioslave/kio_hello.html 
 exec=kio_hello
 input=none
 output=filesystem
 protocol=hello
 reading=true
 
== Compile the stuff ==
Create a new Folder "build":
<code>
mkdir build
cd build
</code>
Run cmake and make
<code>
cmake ..
make
</code>
 
now you can install it (maybe you should use an experimental setup?)
<code>
make install
</code>
 
If you should want to do this by hand:
 
 g++ -shared -lkdeui -lkio -lkdecore -fPIC -I/usr/local/include hello.cpp -o kio_hello.so
 
''this does not complile if the qt headers are not in /usr/local/include''
 
''On my system I could fix it by changing -I/usr/local/include to -I/usr/include/qt4''
== Install the stuff ==
 
now you can install it (maybe you should use an experimental setup?)
<code>
make install
</code>
 
or if you want to install it to your system:
<code>
sudo make install
</code>
 
Of course you can also do this by hand
 
Find out where your protocols are lying:
 kde4-config --path services
 /usr/share/kde4/services/
 
 kde4-config --path module
 /usr/lib64/kde4/
 
 cp kio_hello.so /usr/local/lib/kde4/
 cp kio_hello.so /usr/lib64/kde4/
 cp kio_hello.protocol /usr/share/kde4/services/
 
= Test it =
== in Konqueror ==
Start kinfocenter, choose hello as protocol. If this is possible, start konqueror, type hello:/// into the URL bar.
== on the command line ==
kioclient 'cat' 'hello:///'

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