|
|
|
|
@ -37,6 +37,7 @@ static QList<mf_transfer_request> transfers;
|
|
|
|
|
static QList<quint64> cancelled; |
|
|
|
|
static bool ready = true; |
|
|
|
|
static std::function<void(mf_transfer_request)> transferStarted; |
|
|
|
|
static std::function<void(mf_gui_request)> requestStarted; |
|
|
|
|
extern "C" int gui_bridge_is_uasync_ready(void) { return ready; } |
|
|
|
|
extern "C" UTUN_INSTANCE* gui_bridge_get_inst(void) { return nullptr; } |
|
|
|
|
extern "C" void gui_bridge_post_uasync_fn(void (*function)(void*), void* arg) { |
|
|
|
|
@ -44,6 +45,7 @@ extern "C" void gui_bridge_post_uasync_fn(void (*function)(void*), void* arg) {
|
|
|
|
|
auto* request = (mf_gui_request*)arg; |
|
|
|
|
if (request->message.command == MF_QUOTA) quotaCaptured = *request; |
|
|
|
|
else captured = *request; |
|
|
|
|
if (requestStarted) requestStarted(*request); |
|
|
|
|
} |
|
|
|
|
if (function == member_files_gui_transfer) { |
|
|
|
|
auto request = *(mf_transfer_request*)arg; transfers.append(request); |
|
|
|
|
@ -100,7 +102,7 @@ private slots:
|
|
|
|
|
debug_set_category_level(DEBUG_CATEGORY_DEBUG, DEBUG_LEVEL_DEBUG); |
|
|
|
|
debug_set_category_level(DEBUG_CATEGORY_MEDIA, DEBUG_LEVEL_INFO); |
|
|
|
|
} |
|
|
|
|
void init() { transfers.clear(); cancelled.clear(); ready = true; transferStarted = {}; } |
|
|
|
|
void init() { transfers.clear(); cancelled.clear(); ready = true; transferStarted = {}; requestStarted = {}; } |
|
|
|
|
|
|
|
|
|
void deleteAndParentShortcuts() { |
|
|
|
|
sqlite3* sql = nullptr; QCOMPARE(sqlite3_open(":memory:", &sql), SQLITE_OK); |
|
|
|
|
@ -124,9 +126,11 @@ private slots:
|
|
|
|
|
// Offscreen не восстанавливает активное окно после закрытия модального диалога.
|
|
|
|
|
browser.activateWindow(); QTRY_VERIFY(browser.isActiveWindow()); QTRY_VERIFY(tree->hasFocus()); |
|
|
|
|
answerDialog(QMessageBox::Yes); QTest::keyClick(tree, Qt::Key_Delete); |
|
|
|
|
QCOMPARE(captured.message.command, uint8_t(MF_STAT)); respond(browser, captured, MF_OK); |
|
|
|
|
QCOMPARE(captured.message.command, uint8_t(MF_REMOVE_PATH)); QCOMPARE(captured.message.owner, 22ULL); |
|
|
|
|
QCOMPARE(QString::fromUtf8(captured.message.path), QString("documents/nested/remote.txt")); |
|
|
|
|
QCOMPARE(QByteArray((const char*)captured.message.version, 16), QByteArray(16, '\7')); |
|
|
|
|
respond(browser, captured, MF_OK); QTRY_VERIFY(!cancelButton(browser)->isEnabled()); |
|
|
|
|
browser.activateWindow(); QTRY_VERIFY(browser.isActiveWindow()); |
|
|
|
|
location->setFocus(); location->setText("abc"); location->setCursorPosition(1); |
|
|
|
|
previous = captured.message.request_id; |
|
|
|
|
@ -196,16 +200,17 @@ private slots:
|
|
|
|
|
exported = QString::fromUtf8(request.local); |
|
|
|
|
{ QFile file(exported); QVERIFY(file.open(QIODevice::WriteOnly)); QCOMPARE(file.write("downloaded bytes"), 16LL); } |
|
|
|
|
complete(browser, request); |
|
|
|
|
QTRY_VERIFY(copy->isEnabled()); |
|
|
|
|
const auto* mime = QApplication::clipboard()->mimeData(); QVERIFY(mime->hasUrls()); |
|
|
|
|
QCOMPARE(mime->urls(), QList<QUrl>{QUrl::fromLocalFile(exported)}); |
|
|
|
|
QVERIFY(mime->data("x-special/gnome-copied-files").startsWith("copy\n")); |
|
|
|
|
copy->trigger(); QCOMPARE(transfers.size(), 1); // Готовая версия не скачивается повторно.
|
|
|
|
|
|
|
|
|
|
item->setData(0, Qt::UserRole + 2, QByteArray(16, '\10')); |
|
|
|
|
QApplication::clipboard()->setText("keep on error"); copy->trigger(); QTRY_COMPARE(transfers.size(), 2); |
|
|
|
|
complete(browser, transfers.last(), MF_IO_ERROR); QCOMPARE(QApplication::clipboard()->text(), QString("keep on error")); |
|
|
|
|
complete(browser, transfers.last(), MF_IO_ERROR); QTRY_VERIFY(copy->isEnabled()); |
|
|
|
|
QCOMPARE(QApplication::clipboard()->text(), QString("keep on error")); |
|
|
|
|
copy->trigger(); QTRY_COMPARE(transfers.size(), 3); auto cancelledRequest = transfers.last(); |
|
|
|
|
cancelButton(browser)->click(); complete(browser, cancelledRequest, MF_CANCELLED); |
|
|
|
|
cancelButton(browser)->click(); complete(browser, cancelledRequest, MF_CANCELLED); QTRY_VERIFY(copy->isEnabled()); |
|
|
|
|
QCOMPARE(QApplication::clipboard()->text(), QString("keep on error")); |
|
|
|
|
|
|
|
|
|
bool committed = false, received = false; |
|
|
|
|
@ -278,7 +283,7 @@ private slots:
|
|
|
|
|
QCOMPARE(QString::fromUtf8(captured.message.path), QString("documents/dropped.txt")); |
|
|
|
|
int count = transfers.size(); respond(browser, captured, MF_NOT_FOUND); QCOMPARE(transfers.size(), count + 1); |
|
|
|
|
QCOMPARE(QString::fromUtf8(transfers.last().remote), QString("documents/dropped.txt")); |
|
|
|
|
complete(browser, transfers.last()); |
|
|
|
|
complete(browser, transfers.last()); QTRY_VERIFY(!cancel->isEnabled()); |
|
|
|
|
} |
|
|
|
|
browser.setChannel("42", 11); |
|
|
|
|
QDragEnterEvent other(QPoint(3, 3), Qt::CopyAction, &mime, Qt::LeftButton, Qt::NoModifier); |
|
|
|
|
@ -358,12 +363,12 @@ private slots:
|
|
|
|
|
QCOMPARE(QString::fromUtf8(transfers[0].remote), QString("a.txt")); QCOMPARE(transfers[0].owner, 22ULL); |
|
|
|
|
QCOMPARE(QString::fromUtf8(transfers[0].local), paths[0]); QCOMPARE(transfers[0].group, 42ULL); |
|
|
|
|
QCOMPARE(QByteArray((const char*)transfers[0].version, 16), QByteArray(16, '\0')); |
|
|
|
|
complete(browser, transfers[0]); QCOMPARE(QString::fromUtf8(captured.message.path), QString("b.txt")); |
|
|
|
|
complete(browser, transfers[0]); QTRY_COMPARE(QString::fromUtf8(captured.message.path), QString("b.txt")); |
|
|
|
|
answerDialog(QMessageBox::No); respond(browser, captured, MF_OK); |
|
|
|
|
QCOMPARE(transfers.size(), 1); QCOMPARE(QString::fromUtf8(captured.message.path), QString("c.txt")); |
|
|
|
|
QCOMPARE(transfers.size(), 1); QTRY_COMPARE(QString::fromUtf8(captured.message.path), QString("c.txt")); |
|
|
|
|
answerDialog(QMessageBox::Yes); respond(browser, captured, MF_OK); QCOMPARE(transfers.size(), 2); |
|
|
|
|
QCOMPARE(QByteArray((const char*)transfers[1].version, 16), QByteArray(16, '\7')); |
|
|
|
|
complete(browser, transfers[1]); QVERIFY(status->text().contains("2 uploaded, 1 skipped")); QVERIFY(!cancel->isEnabled()); |
|
|
|
|
complete(browser, transfers[1]); QTRY_VERIFY(!cancel->isEnabled()); QVERIFY(status->text().contains("Completed: 2, skipped: 1")); |
|
|
|
|
for (const auto& path : paths) QVERIFY(QFile::exists(path)); |
|
|
|
|
|
|
|
|
|
answerDialog(QDialog::Accepted); browser.uploadOwnFiles("42", paths); |
|
|
|
|
@ -380,10 +385,11 @@ private slots:
|
|
|
|
|
answerDialog(QDialog::Accepted); browser.uploadOwnFiles("42", paths); |
|
|
|
|
QTRY_COMPARE(captured.message.command, uint8_t(MF_STAT)); respond(browser, captured, MF_NOT_FOUND); |
|
|
|
|
QCOMPARE(transfers.size(), 4); complete(browser, transfers.last(), MF_NO_SPACE); |
|
|
|
|
QVERIFY(status->text().contains("Upload stopped: a.txt")); QVERIFY(!cancel->isEnabled()); QCOMPARE(transfers.size(), 4); |
|
|
|
|
QVERIFY(status->text().contains("a.txt")); QVERIFY(!cancel->isEnabled()); QCOMPARE(transfers.size(), 4); |
|
|
|
|
|
|
|
|
|
QString invalid = dir.filePath(".unsupported"); { QFile file(invalid); QVERIFY(file.open(QIODevice::WriteOnly)); } |
|
|
|
|
answerDialog(QDialog::Accepted); browser.uploadOwnFiles("42", {dir.path()}); |
|
|
|
|
QTRY_VERIFY(status->text().contains("not folders or links")); QVERIFY(!cancel->isEnabled()); QCOMPARE(transfers.size(), 4); |
|
|
|
|
QTRY_VERIFY(status->text().contains("Cannot copy this path")); QVERIFY(!cancel->isEnabled()); QCOMPARE(transfers.size(), 4); |
|
|
|
|
|
|
|
|
|
QCOMPARE(sqlite3_exec(sql, "DELETE FROM peers_42 WHERE node_id=33", nullptr, nullptr, nullptr), SQLITE_OK); |
|
|
|
|
answerDialog(QMessageBox::Ok); browser.uploadOwnFiles("42", paths); QVERIFY(!cancel->isEnabled()); QCOMPARE(transfers.size(), 4); |
|
|
|
|
|