4
Copyright (c) 2009 by Alexander Kazarin <boiler@co.ru>
5
2011 by Evgeny Khryukin
7
***************************************************************************
9
* This program is free software; you can redistribute it and/or modify *
10
* it under the terms of the GNU General Public License as published by *
11
* the Free Software Foundation; either version 2 of the License, or *
12
* (at your option) any later version. *
14
***************************************************************************
18
#include <QFileDialog>
20
#include <QListWidgetItem>
21
#include <QMouseEvent>
23
#include <QMessageBox>
24
#include <QDesktopServices>
26
#include "yandexnarodmanage.h"
27
#include "uploaddialog.h"
28
#include "optionaccessinghost.h"
29
#include "yandexnarodsettings.h"
31
#include "ui_yandexnarodmanage.h"
35
//------------------------------------------
36
//-------ListWidgetItem---------------------
37
//------------------------------------------
38
class ListWidgetItem : public QListWidgetItem
41
ListWidgetItem(const QIcon& ico, const yandexnarodNetMan::FileItem& fileitem)
42
: QListWidgetItem(ico, fileitem.filename)
45
QString toolTip = QObject::tr("Name: %1\nSize: %2\nDate prolongate: %3\nURL: %4\nPassword: %5")
46
.arg(fileitem.filename)
47
.arg( QString(fileitem.size).replace(" ", " ") )
49
.arg(fileitem.fileurl)
50
.arg(fileitem.passset ? QObject::tr("Yes") : QObject::tr("No"));
54
const yandexnarodNetMan::FileItem& fileItem() const
60
yandexnarodNetMan::FileItem item_;
66
//------------------------------------------
67
//-------ListWidget-------------------------
68
//------------------------------------------
69
ListWidget::ListWidget(QWidget* p)
74
QStringList ListWidget::mimeTypes() const
76
return QStringList() << "text/plain";
79
QMimeData* ListWidget::mimeData(const QList<QListWidgetItem *> items) const
84
QMimeData* d = new QMimeData();
86
foreach(QListWidgetItem *i, items) {
87
text += static_cast<ListWidgetItem*>(i)->fileItem().fileurl + "\n";
94
void ListWidget::mousePressEvent(QMouseEvent *event)
96
QListWidget::mousePressEvent(event);
97
if(event->button() == Qt::RightButton) {
98
QListWidgetItem *lwi = itemAt(event->pos());
100
ListWidgetItem *it = static_cast<ListWidgetItem*>(lwi);
101
emit menu(it->fileItem());
107
static QStringList files(const QMimeData *md)
109
QString str = QFile::decodeName(QByteArray::fromPercentEncoding(md->data("text/uri-list")));
110
QRegExp re("file://(.+)");
112
int index = re.indexIn(str);
114
files.append(re.cap(1).trimmed());
115
index = re.indexIn(str, index+1);
120
void ListWidget::dragEnterEvent(QDragEnterEvent *event)
122
const QMimeData *md = event->mimeData();
123
QStringList list = files(md);
125
if(list.size() == 1) {
126
QFile file(list.takeFirst());
132
event->acceptProposedAction();
136
void ListWidget::dropEvent(QDropEvent *event)
138
QStringList list = files(event->mimeData());
139
if(list.size() == 1) {
140
const QString path = list.takeFirst();
143
emit uploadFile(path);
146
event->setDropAction(Qt::IgnoreAction);
151
//------------------------------------------
152
//-------yandexnarodManage------------------
153
//------------------------------------------
154
yandexnarodManage::yandexnarodManage(QWidget* p)
155
: QDialog(p, Qt::Window)
156
, ui_(new Ui::yandexnarodManageClass)
159
setWindowTitle(tr("Yandex.Narod file manager"));
160
setWindowIcon(QIcon(":/icons/yandexnarodplugin.png"));
161
ui_->frameProgress->hide();
162
ui_->frameFileActions->hide();
163
ui_->listWidget->clear();
165
ui_->btnOpenBrowser->setIcon(qApp->style()->standardIcon(QStyle::SP_BrowserReload));
169
QPixmap iconimage(":/icons/yandexnarod-icons-files.png");
170
for (int i=0; i<(iconimage.width()/16); i++) {
171
QIcon icon(iconimage.copy((i*16),0,16,16));
172
fileicons.append(icon);
175
fileiconstyles["b-icon-music"] = 0;
176
fileiconstyles["b-icon-video"] = 1;
177
fileiconstyles["b-icon-arc"] = 2;
178
fileiconstyles["b-icon-doc"] = 3;
179
fileiconstyles["b-icon-soft"] = 4;
180
fileiconstyles["b-icon-unknown"] = 5;
181
fileiconstyles["b-icon-picture"] = 14;
183
Options* o = Options::instance();
184
int h = o->getOption(CONST_HEIGHT, 200).toInt();
185
int w = o->getOption(CONST_WIDTH, 300).toInt();
189
setAttribute(Qt::WA_QuitOnClose, false);
190
setAttribute(Qt::WA_DeleteOnClose, true);
192
connect(ui_->listWidget, SIGNAL(menu(yandexnarodNetMan::FileItem)), SLOT(doMenu(yandexnarodNetMan::FileItem)));
193
connect(ui_->listWidget, SIGNAL(uploadFile(QString)), this, SLOT(uploadFile(QString)), Qt::QueuedConnection);
196
yandexnarodManage::~yandexnarodManage()
198
Options* o = Options::instance();
199
o->setOption(CONST_HEIGHT, height());
200
o->setOption(CONST_WIDTH, width());
205
void yandexnarodManage::newNetMan()
207
netman = new yandexnarodNetMan(this);
208
connect(netman, SIGNAL(statusText(QString)), ui_->labelStatus, SLOT(setText(QString)));
209
connect(netman, SIGNAL(newFileItem(yandexnarodNetMan::FileItem)), this, SLOT(newFileItem(yandexnarodNetMan::FileItem)));
210
connect(netman, SIGNAL(finished()), this, SLOT(netmanFinished()));
213
void yandexnarodManage::newFileItem(yandexnarodNetMan::FileItem fileitem)
216
QString fileiconname = fileitem.fileicon.replace("-old", "");
217
if (fileiconstyles.contains(fileiconname))
218
iconnum = fileiconstyles[fileiconname];
220
QListWidgetItem *listitem = new ListWidgetItem(fileicons[iconnum], fileitem);
221
ui_->listWidget->addItem(listitem);
224
void yandexnarodManage::netmanPrepare()
226
ui_->frameProgress->show();
227
ui_->labelStatus->clear();
228
ui_->frameFileActions->hide();
229
ui_->btnReload->setEnabled(false);
232
void yandexnarodManage::netmanFinished()
234
ui_->btnReload->setEnabled(true);
237
void yandexnarodManage::on_btnReload_clicked()
239
ui_->listWidget->clear();
241
netman->startGetFilelist();
244
void yandexnarodManage::on_btnDelete_clicked()
246
QList<yandexnarodNetMan::FileItem> out;
247
foreach(QListWidgetItem* i, ui_->listWidget->selectedItems()) {
248
ListWidgetItem* lwi = static_cast<ListWidgetItem*>(i);
249
yandexnarodNetMan::FileItem &f = const_cast<yandexnarodNetMan::FileItem&>(lwi->fileItem());
258
int rez = QMessageBox::question(this, tr("Delete file(s)"), tr("Are you sure?"), QMessageBox::Ok | QMessageBox::Cancel);
259
if(rez == QMessageBox::Cancel)
262
foreach(QListWidgetItem* i, ui_->listWidget->selectedItems()) {
263
i->setIcon(fileicons[15]);
266
netman->startDelFiles(out);
269
void yandexnarodManage::on_btnProlong_clicked()
272
QList<yandexnarodNetMan::FileItem> out;
273
foreach(QListWidgetItem* i, ui_->listWidget->selectedItems()) {
274
ListWidgetItem* lwi = static_cast<ListWidgetItem*>(i);
275
yandexnarodNetMan::FileItem f = lwi->fileItem();
276
if(f.prolong() < 45) {
280
netman->startProlongFiles(out);
283
void yandexnarodManage::on_btnClearCookies_clicked()
285
netman->disconnect();
286
netman->deleteLater();
288
Options::instance()->saveCookies(QList<QNetworkCookie>());
291
ui_->frameProgress->show();
292
ui_->labelStatus->setText(O_M(MRemoveCookie));
295
void yandexnarodManage::on_btnOpenBrowser_clicked()
297
QDesktopServices::openUrl(QUrl("http://narod.yandex.ru/disk/all/"));
300
void yandexnarodManage::on_listWidget_pressed(QModelIndex)
302
if (ui_->frameFileActions->isHidden())
303
ui_->frameFileActions->show();
305
bool prolong = false;
306
foreach(QListWidgetItem* i, ui_->listWidget->selectedItems()) {
307
ListWidgetItem* lwi = static_cast<ListWidgetItem*>(i);
308
if(lwi->fileItem().prolong() < 45) {
313
ui_->btnProlong->setEnabled(prolong);
316
void yandexnarodManage::on_btnClipboard_clicked()
319
foreach(QListWidgetItem* i, ui_->listWidget->selectedItems()) {
320
text << static_cast<ListWidgetItem*>(i)->fileItem().fileurl;
322
copyToClipboard(text.join("\n"));
325
void yandexnarodManage::copyToClipboard(const QString &text)
327
QClipboard *clipboard = QApplication::clipboard();
328
clipboard->setText(text);
331
void yandexnarodManage::on_btnUpload_clicked()
333
QString filePath = QFileDialog::getOpenFileName(this, O_M(MChooseFile), Options::instance()->getOption(CONST_LAST_FOLDER).toString());
335
if (!filePath.isEmpty()) {
336
QFileInfo fi(filePath);
337
Options::instance()->setOption(CONST_LAST_FOLDER, fi.dir().path());
339
uploadFile(filePath);
343
void yandexnarodManage::uploadFile(const QString &path)
345
uploadDialog* uploadwidget = new uploadDialog(this);
346
connect(uploadwidget, SIGNAL(canceled()), this, SLOT(netmanFinished()));
347
connect(uploadwidget, SIGNAL(finished()), this, SLOT(netmanFinished()));
348
uploadwidget->show();
349
uploadwidget->start(path);
352
void yandexnarodManage::doMenu(const yandexnarodNetMan::FileItem &it)
355
QList<QAction*> actions;
356
QAction *act = new QAction(tr("Set password"), &m);
357
act->setVisible(!it.passset);
360
act = new QAction(tr("Remove password"), &m);
361
act->setVisible(it.passset);
364
act = new QAction(tr("Copy URL"), &m);
367
act = new QAction(tr("Prolongate"), &m);
369
act->setEnabled(it.prolong() < 45);
371
m.addActions(actions);
372
QAction* ret = m.exec(QCursor::pos());
374
switch(ret->data().toInt()) {
376
netman->startSetPass(it);
379
netman->startRemovePass(it);
382
copyToClipboard(it.fileurl);
385
netman->startProlongFiles(QList<yandexnarodNetMan::FileItem>() << it);