24#include "kiviostencilsetinstaller.h"
28#include <tqcheckbox.h>
29#include <tqstringlist.h>
32#include <kurlrequester.h>
33#include <tdemessagebox.h>
34#include <tdeio/netaccess.h>
36#include <kstandarddirs.h>
43 StencilSetInstaller::StencilSetInstaller(TQWidget *parent,
const char *name)
44 : KDialogBase(KDialogBase::Plain, i18n(
"Install Stencil Set"), Ok|Cancel, Ok, parent, name)
46 TQFrame* page = plainPage();
47 TQVBoxLayout* l =
new TQVBoxLayout(page);
50 m_url =
new KURLRequester(page);
52 setButtonOK(KGuiItem(i18n(
"&Install"),
"button_ok"));
54 connect( m_url->lineEdit(), TQ_SIGNAL( textChanged (
const TQString & ) ),
this, TQ_SLOT( slotUrlChanged(
const TQString & ) ) );
55 slotUrlChanged( m_url->lineEdit()->text() );
59 StencilSetInstaller::~StencilSetInstaller()
63 void StencilSetInstaller::slotUrlChanged(
const TQString &text )
65 enableButtonOK( !text.isEmpty() );
68 void StencilSetInstaller::install(
const TQString& urlString)
72 if(url.isEmpty())
return;
76 if(!TDEIO::NetAccess::download(url, tmpFile,
this)) {
77 KMessageBox::error(
this, i18n(
"Could not find the stencil set archive %1.").arg(url.prettyURL()));
81 KTar archive(urlString);
82 archive.open(IO_ReadOnly);
83 const KArchiveDirectory* rootDir = archive.directory();
85 TQStringList dirs = checkDirs(rootDir);
88 KMessageBox::error(
this, i18n(
"The file is not a valid stencil set archive."));
90 TDEIO::NetAccess::removeTempFile(tmpFile);
94 if(installStencilSets(rootDir, dirs)) {
95 KMessageBox::information(
this, i18n(
"The stencil set archive installed without errors."));
97 KMessageBox::error(
this, i18n(
"The entire archive could not be installed successfully."));
101 TDEIO::NetAccess::removeTempFile(tmpFile);
104 TQStringList StencilSetInstaller::checkDirs(
const KArchiveDirectory* rootDir)
108 const KArchiveEntry* possibleDir = 0;
109 const KArchiveDirectory* subDir = 0;
111 TQStringList entries = rootDir->entries();
113 for (TQStringList::Iterator it = entries.begin(); it != entries.end(); ++it) {
114 possibleDir = rootDir->entry(*it);
116 if (possibleDir->isDirectory()) {
117 subDir =
dynamic_cast<const KArchiveDirectory*
>( possibleDir );
119 if (subDir && subDir->entry(
"desc")) {
120 dirs.append(subDir->name());
128 bool StencilSetInstaller::installStencilSets(
const KArchiveDirectory* rootDir,
const TQStringList& dirs)
130 TQString installDir = locateLocal(
"data",
"kivio/stencils");
131 TDEStandardDirs::makeDir(installDir);
132 const KArchiveDirectory* currentDir = 0;
135 for (TQStringList::ConstIterator it = dirs.begin(); it != dirs.end(); ++it) {
136 currentDir =
dynamic_cast<const KArchiveDirectory*
>(rootDir->entry(*it));
143 currentDir->copyTo(installDir +
"/" + currentDir->name());
149 void StencilSetInstaller::slotOk()
151 install(m_url->url());
156#include "kiviostencilsetinstaller.moc"