1
0
Fork 0
mirror of https://github.com/geometer/FBReaderJ.git synced 2025-10-05 10:49:24 +02:00

Partially loaded catalogs

git-svn-id: https://only.mawhrin.net/repos/FBReaderJ/trunk@1607 6a642e6f-84f6-412e-ac94-c4a38d5a04b0
This commit is contained in:
Vasiliy Bout 2010-07-20 18:45:51 +00:00
parent 0566a317cc
commit d0230f72cb
14 changed files with 219 additions and 68 deletions

View file

@ -30,8 +30,8 @@ abstract class ItemsLoadingRunnable implements Runnable {
private final ItemsLoadingHandler myHandler;
private final long myUpdateInterval; // in milliseconds
private final int myItemsLimit;
public final long UpdateInterval; // in milliseconds
public final int ItemsLimit;
private boolean myInterruptRequested;
private boolean myInterruptConfirmed;
@ -42,13 +42,13 @@ abstract class ItemsLoadingRunnable implements Runnable {
private Object myFinishedLock = new Object();
public void interrupt() {
public void interruptLoading() {
synchronized (myInterruptLock) {
myInterruptRequested = true;
}
}
private boolean confirmInterrupt() {
private boolean confirmInterruptLoading() {
synchronized (myInterruptLock) {
if (myInterruptRequested) {
myInterruptConfirmed = true;
@ -57,7 +57,7 @@ abstract class ItemsLoadingRunnable implements Runnable {
}
}
public boolean tryResume() {
public boolean tryResumeLoading() {
synchronized (myInterruptLock) {
if (!myInterruptConfirmed) {
myInterruptRequested = false;
@ -66,12 +66,18 @@ abstract class ItemsLoadingRunnable implements Runnable {
}
}
private boolean isInterrupted() {
private boolean isLoadingInterrupted() {
synchronized (myInterruptLock) {
return myInterruptConfirmed;
}
}
private boolean isLoadingInterruptRequested() {
synchronized (myInterruptLock) {
return myInterruptRequested;
}
}
public ItemsLoadingRunnable(ItemsLoadingHandler handler) {
this(handler, 1000, 500);
@ -79,8 +85,8 @@ abstract class ItemsLoadingRunnable implements Runnable {
public ItemsLoadingRunnable(ItemsLoadingHandler handler, long updateIntervalMillis, int itemsLimit) {
myHandler = handler;
myUpdateInterval = updateIntervalMillis;
myItemsLimit = itemsLimit;
UpdateInterval = updateIntervalMillis;
ItemsLimit = itemsLimit;
}
public abstract String doBefore();
@ -98,24 +104,29 @@ abstract class ItemsLoadingRunnable implements Runnable {
err = doLoading(new NetworkOperationData.OnNewItemListener() {
private long myUpdateTime;
private int myItemsNumber;
public boolean onNewItem(NetworkLibraryItem item) {
public void onNewItem(NetworkLibraryItem item) {
myHandler.addItem(item);
final boolean interrupted = confirmInterrupt();
if (interrupted || myItemsNumber++ >= myItemsLimit) {
return true;
}
++myItemsNumber;
final long now = System.currentTimeMillis();
if (now > myUpdateTime) {
myHandler.sendUpdateItems();
myUpdateTime = now + myUpdateInterval;
myUpdateTime = now + UpdateInterval;
}
return false;
}
public boolean requestInterrupt() {
return isLoadingInterruptRequested() || myItemsNumber >= ItemsLimit;
}
public boolean confirmInterrupt() {
return confirmInterruptLoading() || myItemsNumber >= ItemsLimit;
}
});
myHandler.sendUpdateItems();
myHandler.ensureItemsProcessed();
myHandler.sendFinish(err, isInterrupted());
myHandler.sendFinish(err, isLoadingInterrupted());
myHandler.ensureFinishProcessed();
}
void runFinishHandler() {
synchronized (myFinishedLock) {
if (myFinishedHandler != null) {
myFinishedHandler.sendEmptyMessage(0);
@ -124,6 +135,7 @@ abstract class ItemsLoadingRunnable implements Runnable {
}
}
public void runOnFinish(final Runnable runnable) {
if (myFinishedHandler != null) {
return;