00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
#include <kdebug.h>
00021
#include <kapplication.h>
00022
#include <qdatastream.h>
00023
#include <qcstring.h>
00024
#include <dcopclient.h>
00025
00026
#include "ksharedfiledevice.h"
00027
00028
00029 KSharedFileDevice::KSharedFileDevice() :
QFile()
00030 {
00031
00032 }
00033 KSharedFileDevice::KSharedFileDevice(
const QString &name ) :
QFile(name )
00034 {
00035
00036 }
00037 KSharedFileDevice::~KSharedFileDevice()
00038 {
00039
00040 }
00044 bool KSharedFileDevice::open(
int mode )
00045 {
00046
00047 setMode( mode );
00048 qWarning(
"KSharedfdileDevice::open" );
00049
00050
if( isWritable() || isReadWrite() ) {
00051 qWarning(
"ReadWrite" );
00052
QByteArray data;
00053
QByteArray replyData;
00054
QCString replyType;
00055
QDataStream arg(data, IO_WriteOnly );
00056 arg << name();
00057
if(kapp->dcopClient()->call(
"kded",
"ksharedfile",
00058
"writeLockFile(QString)",
00059 data,
00060 replyType, replyData ) ) {
00061
QDataStream res( replyData, IO_ReadOnly );
00062
bool ok;
00063 res >> ok;
00064
if( ok ){
00065
if( QFile::open(mode ) ){
00066 qWarning(
"open worked" );
00067
return true;
00068 }
else{
00069 qWarning(
"open failed" );
00070
return false;
00071 }
00072 }
else{
00073 kapp->dcopClient()->call(
"kded",
"ksharedfile",
00074
"writeUnlockFile(QString)",
00075 data, replyType, replyData);
00076
return false;
00077 }
00078 }
else {
00079
return false;
00080 }
00081 }
else if( isReadable() ) {
00082 qWarning(
"ReadOnly" );
00083
QByteArray data;
00084
QByteArray replyData;
00085
QCString replyType;
00086
QDataStream arg(data, IO_WriteOnly );
00087 arg << name();
00088
if(kapp->dcopClient()->call(
"kded",
"ksharedfile",
00089
"readShareFile(QString)",
00090 data,
00091 replyType, replyData ) ) {
00092
QDataStream res( replyData, IO_ReadOnly );
00093
bool ok=
false;
00094 res >> ok;
00095
if( ok ){
00096
if( QFile::open(mode ) ){
00097 qWarning(
"open worked" );
00098
return true;
00099 }
else{
00100 qWarning(
"hmm couldn't open" );
00101
return false;
00102 }
00103 }
else{
00104 kapp->dcopClient()->call(
"kded",
"ksharedfile",
00105
"readUnshareFile(Qtring)",
00106 data, replyType, replyData);
00107
return false;
00108 }
00109 }
else {
00110
return false;
00111 }
00112 }
00113
return false;
00114 }
00115 void KSharedFileDevice::close( )
00116 {
00117
if(!isOpen() )
00118
return;
00119 qWarning(
"KSharedDevice::close %s", name().latin1() );
00120
if( isWritable() || isReadWrite() ){
00121
QByteArray data;
00122
QByteArray replyData;
00123
QCString replyType;
00124
QDataStream arg(data, IO_WriteOnly );
00125 arg << name();
00126 kapp->dcopClient()->call(
"kded",
"ksharedfile",
00127
"writeUnlockFile(QString)",
00128 data,
00129 replyType, replyData );
00130 }
else{
00131
QByteArray data;
00132
QByteArray replyData;
00133
QCString replyType;
00134
QDataStream arg(data, IO_WriteOnly );
00135 arg << name();
00136 kapp->dcopClient()->call(
"kded",
"ksharedfile",
00137
"readUnshareFile(QString)",
00138 data,
00139 replyType, replyData );
00140 }
00141 }
00142
00143