00001 #include "kvncbookmarkdlg.h"
00002
00003
00004 #include <opie2/odebug.h>
00005 #include <qpe/global.h>
00006 using namespace Opie::Core;
00007
00008
00009 #include <qdir.h>
00010 #include <qtextstream.h>
00011 #include <qlistbox.h>
00012
00013 KVNCBookmarkDlg::KVNCBookmarkDlg( QWidget * parent, const char * name, WFlags f )
00014
00015 : KVNCBookmarkDlgBase( parent, name,f)
00016 {
00017 readBookmarks();
00018 refresh();
00019
00020 }
00021
00022 KVNCBookmarkDlg::~KVNCBookmarkDlg()
00023 {
00024 }
00025
00026 void KVNCBookmarkDlg::addBookmark(KRFBServer * server)
00027 {
00028 if (server) {
00029 servers.append(server);
00030 bookmarkList->insertItem(server->name);
00031 writeBookmarks();
00032 refresh();
00033 }
00034 }
00035
00036 void KVNCBookmarkDlg::deleteBookmark(QString name)
00037 {
00038 KRFBServer * server=0;
00039 for ( server=servers.first(); server != 0; server=servers.next() ) {
00040 if (server->name==name) {
00041 servers.remove(servers.at());
00042 writeBookmarks();
00043 refresh();
00044 return;
00045 }
00046 }
00047 }
00048 KRFBServer *KVNCBookmarkDlg::getServer(QString name)
00049 {
00050 KRFBServer * server=0;
00051 for ( server=servers.first(); server != 0; server=servers.next() ) {
00052 if (server->name==name)
00053
00054 return server;
00055 }
00056 return 0;
00057 }
00058
00059
00060
00061
00062
00063
00064
00065
00066
00067
00068
00069 QString KVNCBookmarkDlg::encipher(const QString& plain)
00070 {
00071
00072 QString cipher;
00073 int mix=28730492;
00074 for (int i=0; i<(int)plain.length(); i++) {
00075 int u = plain[i].unicode();
00076 int c = u ^ mix;
00077 QString x = QString::number(c,36);
00078 cipher.append(QChar('a'+x.length()));
00079 cipher.append(x);
00080 mix *= u;
00081 }
00082 return cipher;
00083 }
00084
00085 QString KVNCBookmarkDlg::decipher(const QString& cipher)
00086 {
00087 QString plain;
00088 int mix=28730492;
00089 for (int i=0; i<(int)cipher.length();) {
00090 int l = cipher[i].unicode()-'a';
00091 QString x = cipher.mid(i+1,l); i+=l+1;
00092 int u = x.toInt(0,36) ^ mix;
00093 plain.append(QChar(u));
00094 mix *= u;
00095 }
00096 return plain;
00097 }
00098
00099 void KVNCBookmarkDlg::readBookmarks(void)
00100 {
00101 QFile f(QDir::homeDirPath() + QString("/Applications/keypebble/bookmarks"));
00102
00103 QStringList entry;
00104 QString key, val;
00105 KRFBServer * server=0;
00106
00107 if ( f.open(IO_ReadOnly) ) {
00108 QTextStream t( &f );
00109 QString s;
00110 int n = 1;
00111 while ( !t.eof() ) {
00112 s = t.readLine();
00113
00114
00115 entry=QStringList::split('=',s);
00116 key=entry[0].stripWhiteSpace().lower();
00117 val=entry[1].stripWhiteSpace();
00118
00119 if (key=="server") {
00120
00121 if (server){
00122 servers.append(server);
00123 server=0;
00124 }
00125 server = new KRFBServer();
00126
00127 if (!server)
00128 return;
00129 server->name=val;
00130
00131 }
00132 else if (key=="hostname")
00133 server->hostname=val;
00134 else if (key=="password")
00135 server->password=decipher(val);
00136 else if (key=="display")
00137 server->display=val.toInt();
00138 else if (key=="hextile")
00139 server->hexTile=val.toInt();
00140 else if (key=="corre")
00141 server->corre=val.toInt();
00142 else if (key=="rre")
00143 server->rre=val.toInt();
00144 else if (key=="copyrect")
00145 server->copyrect=val.toInt();
00146 else if (key=="colors256")
00147 server->colors256=val.toInt();
00148 else if (key=="shared")
00149 server->shared=val.toInt();
00150 else if (key=="readonly")
00151 server->readOnly=val.toInt();
00152 else if (key=="deiconify")
00153 server->deIconify=val.toInt();
00154 else if (key=="updaterate")
00155 server->updateRate=val.toInt();
00156 else if (key=="scalefactor")
00157 server->scaleFactor=val.toInt();
00158
00159 }
00160 if (server){
00161 servers.append(server);
00162 server=0;
00163 }
00164 f.close();
00165 }
00166 }
00167
00168 void KVNCBookmarkDlg::writeBookmarks(void)
00169 {
00170 QString filename=Global::applicationFileName("keypebble","bookmarks");
00171
00172 QFile f(filename);
00173
00174 QString key, val;
00175 KRFBServer * server=0;
00176
00177 if ( f.open(IO_ReadWrite) ) {
00178 QTextStream t( &f );
00179 QString s;
00180 int n = 1;
00181 KRFBServer *server;
00182
00183 for ( server=servers.first(); server != 0; server=servers.next() ) {
00184 odebug << server->name << oendl;
00185 t << "server=" << server->name << '\n';
00186 t << "\thostname=" << server->hostname << '\n';
00187 t << "\tpassword=" << encipher(server->password )<< '\n';
00188 t << "\tdisplay=" << server->display << '\n';
00189 t << "\thextile=" << server->hexTile << '\n';
00190 t << "\tcorre=" << server->corre << '\n';
00191 t << "\trre=" << server->rre << '\n';
00192 t << "\tcopyrect=" << server->copyrect << '\n';
00193 t << "\tshared=" << server->shared << '\n';
00194 t << "\treadonly=" << server->readOnly << '\n';
00195 t << "\tdeiconify=" << server->deIconify << '\n';
00196 t << "\tupdaterate=" << server->updateRate << '\n';
00197 t << "\tscalefactor=" << server->scaleFactor << '\n';
00198
00199 }
00200 f.close();
00201 }
00202 }
00203 void KVNCBookmarkDlg::refresh(void)
00204 {
00205 bookmarkList->clear();
00206 KRFBServer * server=0;
00207 for ( server=servers.first(); server != 0; server=servers.next() ) {
00208 bookmarkList->insertItem(server->name);
00209 }
00210 }
00211
00212 QString KVNCBookmarkDlg::selectedBookmark()
00213 {
00214 return bookmarkList->currentText();
00215 }