| 511 | } |
| 512 | |
| 513 | public void runSearch(final Location startPage, final Location finalPage, final int direction, final String needle, final OnException onException) { |
| 514 | worker.add(new Worker.Task() { |
| 515 | Location searchPage = startPage; |
| 516 | Location hitPage = null; |
| 517 | Quad[][] hits = new Quad[0][]; |
| 518 | boolean done = false; |
| 519 | boolean cancelled = false; |
| 520 | public void work() { |
| 521 | long executionUntil = System.currentTimeMillis() + 100; |
| 522 | do { |
| 523 | if (cancelSearch) { |
| 524 | cancelled = true; |
| 525 | continue; |
| 526 | } |
| 527 | |
| 528 | Page page = doc.loadPage(searchPage); |
| 529 | hits = page.search(needle); |
| 530 | if (hits != null && hits.length > 0) { |
| 531 | hitPage = searchPage; |
| 532 | done = true; |
| 533 | continue; |
| 534 | } |
| 535 | page.destroy(); |
| 536 | |
| 537 | if (searchPage.equals(finalPage)) { |
| 538 | done = true; |
| 539 | } |
| 540 | else if (direction >= 0) |
| 541 | searchPage = doc.nextPage(searchPage); |
| 542 | else |
| 543 | searchPage = doc.previousPage(searchPage); |
| 544 | } while (!cancelled && !done && System.currentTimeMillis() < executionUntil); |
| 545 | } |
| 546 | public void run() { |
| 547 | if (cancelled) { |
| 548 | ViewerCore.this.searchNeedle = null; |
| 549 | ViewerCore.this.searchHitPage = null; |
| 550 | callback.onSearchCancelled(); |
| 551 | } else if (done) { |
| 552 | ViewerCore.this.searchHitPage = hitPage; |
| 553 | callback.onSearchStop(needle, hitPage); |
| 554 | } else { |
| 555 | callback.onSearchPage(searchPage, needle); |
| 556 | worker.add(this); |
| 557 | } |
| 558 | } |
| 559 | public void exception(Throwable t) { |
| 560 | callback.onSearchStop(needle, null); |
| 561 | if (onException != null) |
| 562 | onException.run(t); |
| 563 | } |
| 564 | }); |
| 565 | } |
| 566 | |
| 567 | public void save(final String path, final String options, final DocumentWriter.OCRListener ocrListener, final OnException onException) { |
| 568 | worker.add(new Worker.Task() { |