示例#1
0
Doc Doc::CreateFromFile(const WCHAR *filePath)
{
    Doc doc;
    if (EpubDoc::IsSupportedFile(filePath))
        doc = Doc(EpubDoc::CreateFromFile(filePath));
    else if (Fb2Doc::IsSupportedFile(filePath))
        doc = Doc(Fb2Doc::CreateFromFile(filePath));
    else if (MobiDoc::IsSupportedFile(filePath)) {
        doc = Doc(MobiDoc::CreateFromFile(filePath));
        // MobiDoc is also used for loading PalmDoc - don't expose that to Doc users, though
        if (doc.mobiDoc && doc.mobiDoc->GetDocType() != Pdb_Mobipocket) {
            doc.Delete();
            // .prc files can be both MobiDoc or PalmDoc
            if (PalmDoc::IsSupportedFile(filePath))
                doc = Doc(PalmDoc::CreateFromFile(filePath));
        }
    }
    else if (PalmDoc::IsSupportedFile(filePath))
        doc = Doc(PalmDoc::CreateFromFile(filePath));

    // if failed to load and more specific error message hasn't been
    // set above, set a generic error message
    if (doc.IsNone()) {
        CrashIf(doc.error);
        doc.error = Error_Unknown;
        doc.filePath.Set(str::Dup(filePath));
    }
    else {
        CrashIf(!Doc::IsSupportedFile(filePath));
    }
    CrashIf(!doc.generic && !doc.IsNone());
    return doc;
}
 virtual void Run() {
     doc = Doc::CreateFromFile(fileName);
     // don't load PalmDoc, etc. files as long as they're not correctly formatted
     if (doc.AsMobi() && Pdb_Mobipocket != doc.AsMobi()->GetDocType())
         doc.Delete();
     // let uitask clean up this thread
     uitask::Post(this);
 }
示例#3
0
// this is to compare the time it takes to layout a whole ebook file
// using different text measurement method (since the time is mostly
// dominated by text measure)
void BenchEbookLayout(const WCHAR *filePath) {
    bool deleteLog = false;
    if (!gLog) {
        gLog = new slog::StderrLogger();
        deleteLog = true;
    }
    logbench(L"Starting: %s", filePath);
    if (!file::Exists(filePath)) {
        logbench(L"Error: file doesn't exist");
        return;
    }
    if (!Doc::IsSupportedFile(filePath)) {
        logbench(L"Error: not an ebook file");
        return;
    }
    Timer t;
    Doc doc = Doc::CreateFromFile(filePath);
    if (doc.LoadingFailed()) {
        logbench(L"Error: failed to load the file as doc");
        doc.Delete();
        return;
    }
    double timeMs = t.Stop();
    logbench(L"load: %.2f ms", timeMs);

    int nPages = TimeOneMethod(doc, TextRenderMethodGdi,          L"gdi       ");
    TimeOneMethod(doc, TextRenderMethodGdiplus,      L"gdi+      ");
    TimeOneMethod(doc, TextRenderMethodGdiplusQuick, L"gdi+ quick");

    // do it twice because the first run is very unfair to the first version that runs
    // (probably because of font caching)
    TimeOneMethod(doc, TextRenderMethodGdi,          L"gdi       ");
    TimeOneMethod(doc, TextRenderMethodGdiplus,      L"gdi+      ");
    TimeOneMethod(doc, TextRenderMethodGdiplusQuick, L"gdi+ quick");

    doc.Delete();

    logbench(L"pages: %d", nPages);
    if (deleteLog) {
        delete gLog;
    }
}
示例#4
0
 virtual void Run() {
     //lf(L"ThreadLoadEbook::Run(%s)", fileName);
     Timer t(true);
     doc = Doc::CreateFromFile(fileName);
     double loadingTimeMs = t.GetTimeInMs();
     lf(L"Loaded %s in %.2f ms", fileName, loadingTimeMs);
     // don't load PalmDoc, etc. files as long as they're not correctly formatted
     if (doc.AsMobi() && Pdb_Mobipocket != doc.AsMobi()->GetDocType())
         doc.Delete();
     // let uitask clean up this thread
     uitask::Post(this);
 }
示例#5
0
void ThreadLoadEbook::Run()
{
    //lf(L"ThreadLoadEbook::Run(%s)", fileName);
    Timer t(true);
    Doc doc = Doc::CreateFromFile(fileName);
    double loadingTimeMs = t.GetTimeInMs();
    //lf(L"Loaded %s in %.2f ms", fileName, t.GetTimeInMs());

    // don't load PalmDoc, etc. files as long as they're not correctly formatted
    if (doc.AsMobi() && Pdb_Mobipocket != doc.AsMobi()->GetDocType())
        doc.Delete();

    uitask::Post(new FinishedEbookLoadingTask(win, doc));
}
void ThreadLoadEbook::Run()
{
    //lf(L"ThreadLoadEbook::Run(%s)", fileName);
    Timer t(true);
    Doc doc = Doc::CreateFromFile(fileName);
    // TODO: even under heavy load, Doc::CreateFromFile doesn't take more
    //       than 50ms - any reason not to synchronously load ebooks?
    double loadingTimeMs = t.GetTimeInMs();
    lf(L"Loaded %s in %.2f ms", fileName, loadingTimeMs);

    // don't load PalmDoc, etc. files as long as they're not correctly formatted
    if (doc.AsMobi() && Pdb_Mobipocket != doc.AsMobi()->GetDocType())
        doc.Delete();

    uitask::Post(new FinishedEbookLoadingTask(win, doc));
}
示例#7
0
void ThreadLoadEbook::Run()
{
    //lf(_T("ThreadLoadEbook::Run(%s)"), fileName);
    Timer t(true);
    Doc doc = Doc::CreateFromFile(fileName);
    double loadingTimeMs = t.GetTimeInMs();
    //lf(_T("Loaded %s in %.2f ms"), fileName, t.GetTimeInMs());

    // don't load PalmDoc, etc. files as long as they're not correctly formatted
    if (doc.AsMobi() && Pdb_Mobipocket != doc.AsMobi()->GetDocType())
        doc.Delete();

    UiMsg *msg = new UiMsg(UiMsg::FinishedMobiLoading);
    msg->finishedMobiLoading.doc = new Doc(doc);
    msg->finishedMobiLoading.fileName = fileName;
    msg->finishedMobiLoading.win = win;
    fileName = NULL;
    uimsg::Post(msg);
}