diff --git a/src/org/geometerplus/fbreader/library/AuthorTree.java b/src/org/geometerplus/fbreader/library/AuthorTree.java index e64f9b9d4..7f0a7e931 100644 --- a/src/org/geometerplus/fbreader/library/AuthorTree.java +++ b/src/org/geometerplus/fbreader/library/AuthorTree.java @@ -46,7 +46,15 @@ public class AuthorTree extends LibraryTree { @Override protected String getSortKey() { - return Author != null ? "ASK:" + Author.SortKey + ":" + Author.DisplayName : null; + if (Author == null) { + return null; + } + return new StringBuilder() + .append(" Author:") + .append(Author.SortKey) + .append(":") + .append(Author.DisplayName) + .toString(); } @Override diff --git a/src/org/geometerplus/fbreader/library/BookTree.java b/src/org/geometerplus/fbreader/library/BookTree.java index df457909e..73c5c0d89 100644 --- a/src/org/geometerplus/fbreader/library/BookTree.java +++ b/src/org/geometerplus/fbreader/library/BookTree.java @@ -88,11 +88,6 @@ public class BookTree extends LibraryTree { return book != null && book.equals(Book); } - @Override - protected String getSortKey() { - return "BSK:" + super.getSortKey(); - } - @Override public int compareTo(FBTree tree) { final int cmp = super.compareTo(tree); diff --git a/src/org/geometerplus/fbreader/library/Library.java b/src/org/geometerplus/fbreader/library/Library.java index 13b51384b..36369da9f 100644 --- a/src/org/geometerplus/fbreader/library/Library.java +++ b/src/org/geometerplus/fbreader/library/Library.java @@ -56,10 +56,15 @@ public final class Library extends AbstractLibrary { private final static int STATUS_LOADING = 1; private final static int STATUS_SEARCHING = 2; private volatile int myStatusMask = 0; + private final Object myStatusLock = new Object(); - private synchronized void setStatus(int status) { - myStatusMask = status; - fireModelChangedEvent(ChangeListener.Code.StatusChanged); + private void setStatus(int status) { + synchronized (myStatusLock) { + if (myStatusMask != status) { + myStatusMask = status; + fireModelChangedEvent(ChangeListener.Code.StatusChanged); + } + } } public Library(BooksDatabase db) { @@ -341,12 +346,20 @@ public final class Library extends AbstractLibrary { // remove from recent/favorites list if no; // collect newly "orphaned" books final Set orphanedBooks = new HashSet(); + final Set physicalFiles = new HashSet(); int count = 0; for (Book book : savedBooksByFileId.values()) { synchronized (this) { + final ZLPhysicalFile file = book.File.getPhysicalFile(); + if (file != null) { + physicalFiles.add(file); + } + if (file != book.File && file != null && file.getPath().endsWith(".epub")) { + myDatabase.deleteFromBookList(book.getId()); + continue; + } if (book.File.exists()) { boolean doAdd = true; - final ZLPhysicalFile file = book.File.getPhysicalFile(); if (file == null) { continue; } @@ -382,6 +395,9 @@ public final class Library extends AbstractLibrary { final List physicalFilesList = collectPhysicalFiles(); for (ZLPhysicalFile file : physicalFilesList) { + if (physicalFiles.contains(file)) { + continue; + } collectBooks( file, fileInfos, savedBooksByFileId, orphanedBooksByFileId, diff --git a/src/org/geometerplus/fbreader/library/SeriesTree.java b/src/org/geometerplus/fbreader/library/SeriesTree.java index a0e679d82..dd4458619 100644 --- a/src/org/geometerplus/fbreader/library/SeriesTree.java +++ b/src/org/geometerplus/fbreader/library/SeriesTree.java @@ -64,6 +64,6 @@ public final class SeriesTree extends LibraryTree { @Override protected String getSortKey() { - return "SSK:" + super.getSortKey(); + return " Series:" + super.getSortKey(); } } diff --git a/src/org/geometerplus/fbreader/library/TagTree.java b/src/org/geometerplus/fbreader/library/TagTree.java index 87c27437a..117ead787 100644 --- a/src/org/geometerplus/fbreader/library/TagTree.java +++ b/src/org/geometerplus/fbreader/library/TagTree.java @@ -43,7 +43,7 @@ public final class TagTree extends LibraryTree { } protected String getSortKey() { - return (Tag != null) ? Tag.Name : null; + return Tag != null ? Tag.Name : null; } @Override diff --git a/src/org/geometerplus/fbreader/tree/FBTree.java b/src/org/geometerplus/fbreader/tree/FBTree.java index 70da51a01..0e62b8322 100644 --- a/src/org/geometerplus/fbreader/tree/FBTree.java +++ b/src/org/geometerplus/fbreader/tree/FBTree.java @@ -134,6 +134,30 @@ public abstract class FBTree extends ZLTree implements Comparable len) { + return 1; + } + if (s0.length() > len) { + return -1; + } + return 0; + } + public int compareTo(FBTree tree) { final String key0 = getSortKey(); final String key1 = tree.getSortKey(); @@ -143,7 +167,7 @@ public abstract class FBTree extends ZLTree implements Comparable