Subversion Repositories tpanel

Rev

Rev 120 | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 120 Rev 122
Line 37... Line 37...
37
#include "terror.h"
37
#include "terror.h"
38
#include "tvalidatefile.h"
38
#include "tvalidatefile.h"
39
#include "tconfig.h"
39
#include "tconfig.h"
40
#include "tfsfreader.h"
40
#include "tfsfreader.h"
41
#include "tdirectory.h"
41
#include "tdirectory.h"
-
 
42
#include "tresources.h"
42
 
43
 
43
using std::string;
44
using std::string;
44
using std::vector;
45
using std::vector;
45
using std::ostream;
46
using std::ostream;
46
using std::bind;
47
using std::bind;
-
 
48
using std::ifstream;
-
 
49
 
-
 
50
#if __GNUC__ < 9 && !defined(__ANDROID__)
-
 
51
#if __cplusplus < 201703L
-
 
52
    #warning "Your C++ compiler seems to have no support for C++17 standard!"
-
 
53
#endif
-
 
54
    #include <experimental/filesystem>
-
 
55
    namespace fs = std::experimental::filesystem;
-
 
56
#else
-
 
57
#  ifdef __ANDROID__
-
 
58
#   if _LIBCPP_STD_VER >= 17
-
 
59
#       include <filesystem>
-
 
60
        namespace fs = std::__fs::filesystem;
-
 
61
#   else
-
 
62
#       include <experimental/filesystem>
-
 
63
        namespace fs = std::__fs::filesystem;
-
 
64
#   endif
-
 
65
#  else
-
 
66
#   include <filesystem>
-
 
67
    namespace fs = std::filesystem;
-
 
68
#  endif
-
 
69
#endif
-
 
70
 
-
 
71
#define SYSTEM_DEFAULT      "/.system"
47
 
72
 
48
TTPInit::TTPInit()
73
TTPInit::TTPInit()
49
{
74
{
50
    DECL_TRACER("TTPInit::TTPInit()");
75
    DECL_TRACER("TTPInit::TTPInit()");
51
}
76
}
Line 119... Line 144...
119
    {
144
    {
120
        if (!copyFile(*iter))
145
        if (!copyFile(*iter))
121
            err = true;
146
            err = true;
122
    }
147
    }
123
 
148
 
-
 
149
    // Mark files as system default files
-
 
150
    try
-
 
151
    {
-
 
152
        string marker = mPath + SYSTEM_DEFAULT;
-
 
153
        std::ofstream mark(marker);
-
 
154
        time_t t = time(NULL);
-
 
155
        mark.write((char *)&t, sizeof(time_t));
-
 
156
        mark.close();
-
 
157
    }
-
 
158
    catch (std::exception& e)
-
 
159
    {
-
 
160
        MSG_ERROR("Error creating a marker file: " << e.what());
-
 
161
        err = true;
-
 
162
    }
124
 
163
 
125
    return err;
164
    return err;
126
}
165
}
127
 
166
 
128
bool TTPInit::createSystemConfigs()
167
bool TTPInit::createSystemConfigs()
Line 342... Line 381...
342
    if ((pos = mPath.find_last_of("/")) != string::npos)
381
    if ((pos = mPath.find_last_of("/")) != string::npos)
343
        target = mPath.substr(0, pos) + "/" + TConfig::getFtpSurface();
382
        target = mPath.substr(0, pos) + "/" + TConfig::getFtpSurface();
344
 
383
 
345
    if (!force)
384
    if (!force)
346
    {
385
    {
347
        QFile pan(target.c_str());
-
 
348
 
-
 
349
        if (pan.exists() || TConfig::getFtpDownloadTime() > 0)
386
        if (!isVirgin() || TConfig::getFtpDownloadTime() > 0)
350
            return false;
387
            return false;
351
    }
388
    }
352
 
389
 
353
    if (_processEvents)
390
    if (_processEvents)
354
        _processEvents();
391
        _processEvents();
Line 385... Line 422...
385
 
422
 
386
    if (_processEvents)
423
    if (_processEvents)
387
        _processEvents();
424
        _processEvents();
388
 
425
 
389
    dir.dropFile(target);       // We remove our traces
426
    dir.dropFile(target);       // We remove our traces
-
 
427
    dir.dropFile(mPath + SYSTEM_DEFAULT);   // No more system default files
390
    TConfig::saveFtpDownloadTime(time(NULL));
428
    TConfig::saveFtpDownloadTime(time(NULL));
391
    TConfig::saveSettings();
429
    TConfig::saveSettings();
392
    return true;
430
    return true;
393
}
431
}
394
 
432
 
-
 
433
vector<string>& TTPInit::getFileList(const string& filter)
-
 
434
{
-
 
435
    DECL_TRACER("TTPInit::getFileList(const string& filter)");
-
 
436
 
-
 
437
    ftplib *ftp = new ftplib();
-
 
438
 
-
 
439
    if (TConfig::getFtpPassive())
-
 
440
        ftp->SetConnmode(ftplib::pasv);
-
 
441
    else
-
 
442
        ftp->SetConnmode(ftplib::port);
-
 
443
 
-
 
444
    string scon = TConfig::getController() + ":21";
-
 
445
    MSG_DEBUG("Trying to connect to " << scon);
-
 
446
 
-
 
447
    if (!ftp->Connect(scon.c_str()))
-
 
448
    {
-
 
449
        delete ftp;
-
 
450
        return mDirList;
-
 
451
    }
-
 
452
 
-
 
453
    string sUser = TConfig::getFtpUser();
-
 
454
    string sPass = TConfig::getFtpPassword();
-
 
455
    MSG_DEBUG("Trying to login <" << sUser << ", " << sPass << ">");
-
 
456
 
-
 
457
    if (!ftp->Login(sUser.c_str(), sPass.c_str()))
-
 
458
    {
-
 
459
        delete ftp;
-
 
460
        return mDirList;
-
 
461
    }
-
 
462
 
-
 
463
    string tmpFile = std::tmpnam(nullptr);
-
 
464
    MSG_DEBUG("Reading remote directory / into file " << tmpFile);
-
 
465
    ftp->Nlst(tmpFile.c_str(), "/");
-
 
466
    ftp->Quit();
-
 
467
    delete ftp;
-
 
468
    mDirList.clear();
-
 
469
 
-
 
470
    try
-
 
471
    {
-
 
472
        char buffer[1024];
-
 
473
        string uFilter = toUpper((std::string&)filter);
-
 
474
 
-
 
475
        std::ifstream ifile(tmpFile);
-
 
476
 
-
 
477
        while (ifile.getline(buffer, sizeof(buffer)))
-
 
478
        {
-
 
479
            string buf = buffer;
-
 
480
            string fname = trim(buf);
-
 
481
 
-
 
482
            if (!filter.empty())
-
 
483
            {
-
 
484
                if (endsWith(toUpper(buf), uFilter))
-
 
485
                    mDirList.push_back(trim(fname));
-
 
486
            }
-
 
487
            else
-
 
488
                mDirList.push_back(trim(fname));
-
 
489
        }
-
 
490
 
-
 
491
        ifile.close();
-
 
492
    }
-
 
493
    catch (std::exception& e)
-
 
494
    {
-
 
495
        MSG_ERROR("Error opening file " << tmpFile << ": " << e.what());
-
 
496
    }
-
 
497
 
-
 
498
    fs::remove(tmpFile);
-
 
499
 
-
 
500
    if (mDirList.size() > 0)
-
 
501
    {
-
 
502
        vector<string>::iterator iter;
-
 
503
 
-
 
504
        for (iter = mDirList.begin(); iter != mDirList.end(); ++iter)
-
 
505
        {
-
 
506
            MSG_DEBUG("File: " << *iter);
-
 
507
        }
-
 
508
    }
-
 
509
 
-
 
510
    return mDirList;
-
 
511
}
-
 
512
 
395
int TTPInit::progressCallback(off64_t xfer)
513
int TTPInit::progressCallback(off64_t xfer)
396
{
514
{
397
    DECL_TRACER("TTPInit::progressCallback(off64_t xfer)");
515
    DECL_TRACER("TTPInit::progressCallback(off64_t xfer)");
398
 
516
 
399
    if (_processEvents && xfer > 0)
517
    if (_processEvents && xfer > 0)
400
        _processEvents();
518
        _processEvents();
401
 
519
 
402
    return 1;
520
    return 1;
403
}
521
}
404
 
522
 
-
 
523
bool TTPInit::isSystemDefault()
-
 
524
{
-
 
525
    DECL_TRACER("TTPInit::isSystemDefault()");
-
 
526
 
-
 
527
    try
-
 
528
    {
-
 
529
        string marker = mPath + SYSTEM_DEFAULT;
-
 
530
        return fs::exists(marker);
-
 
531
    }
-
 
532
    catch (std::exception& e)
-
 
533
    {
-
 
534
        MSG_ERROR("File system error: " << e.what())
-
 
535
        return false;
-
 
536
    }
-
 
537
 
-
 
538
    return true;
-
 
539
}
-
 
540
 
-
 
541
bool TTPInit::isVirgin()
-
 
542
{
-
 
543
    DECL_TRACER("TTPInit::isVirgin()");
-
 
544
 
-
 
545
    try
-
 
546
    {
-
 
547
        if (!fs::exists(mPath) || isSystemDefault())
-
 
548
            return true;
-
 
549
    }
-
 
550
    catch (std::exception& e)
-
 
551
    {
-
 
552
        MSG_ERROR("File system error: " << e.what());
-
 
553
        return true;
-
 
554
    }
-
 
555
 
-
 
556
    return false;
-
 
557
}
-
 
558
 
405
#ifdef __ANDROID__
559
#ifdef __ANDROID__
406
bool TTPInit::askPermissions()
560
bool TTPInit::askPermissions()
407
{
561
{
408
    DECL_TRACER("TTPInit::askPermissions()");
562
    DECL_TRACER("TTPInit::askPermissions()");
409
 
563