Normalize prefix and titles only if the current archive supports that feature.

Fixes #64 (impossible to search for articles with chinese letters)
This commit is contained in:
mossroy 2013-12-30 22:06:43 +01:00
parent fa580e671f
commit 917ed1e443

View File

@ -56,6 +56,7 @@ define(function(require) {
this.date = null; this.date = null;
this.language = null; this.language = null;
this.titleSearchFile = null; this.titleSearchFile = null;
this.normalizedTitles = true;
}; };
@ -183,6 +184,19 @@ define(function(require) {
var metadata = e.target.result; var metadata = e.target.result;
currentLocalArchiveInstance.language = /\nlanguage ?\= ?([^ \n]+)/.exec(metadata)[1]; currentLocalArchiveInstance.language = /\nlanguage ?\= ?([^ \n]+)/.exec(metadata)[1];
currentLocalArchiveInstance.date = /\ndate ?\= ?([^ \n]+)/.exec(metadata)[1]; currentLocalArchiveInstance.date = /\ndate ?\= ?([^ \n]+)/.exec(metadata)[1];
var normalizedTitlesRegex = /\normalized_titles ?\= ?([^ \n]+)/;
if (normalizedTitlesRegex.exec(metadata)) {
var normalizedTitlesInt = normalizedTitlesRegex.exec(metadata)[1];
if (normalizedTitlesInt === 0) {
currentLocalArchiveInstance.normalizedTitles = false;
}
else {
currentLocalArchiveInstance.normalizedTitles = true;
}
}
else {
currentLocalArchiveInstance.normalizedTitles = true;
}
}; };
reader.readAsText(file); reader.readAsText(file);
}; };
@ -340,9 +354,8 @@ define(function(require) {
hi = mid; hi = mid;
} }
else { else {
var normalizedTitle = var normalizedTitle = currentLocalArchiveInstance.normalizeStringIfCompatibleArchive(
normalize_string.normalizeString(utf8.parse(byteArray.subarray(startIndex, utf8.parse(byteArray.subarray(startIndex, newLineIndex)));
newLineIndex)));
if (normalizedTitle < normalizedPrefix) { if (normalizedTitle < normalizedPrefix) {
lo = mid + newLineIndex - 1; lo = mid + newLineIndex - 1;
} }
@ -427,7 +440,7 @@ define(function(require) {
alert('Title file read cancelled'); alert('Title file read cancelled');
}; };
var currentLocalArchiveInstance = this; var currentLocalArchiveInstance = this;
var normalizedTitleName = normalize_string.normalizeString(titleName); var normalizedTitleName = currentLocalArchiveInstance.normalizeStringIfCompatibleArchive(titleName);
this.recursivePrefixSearch(reader, normalizedTitleName, 0, titleFileSize, function(titleOffset) { this.recursivePrefixSearch(reader, normalizedTitleName, 0, titleFileSize, function(titleOffset) {
currentLocalArchiveInstance.getTitlesStartingAtOffset(titleOffset, MAX_TITLES_WITH_SAME_NORMALIZED_NAME, function(titleList) { currentLocalArchiveInstance.getTitlesStartingAtOffset(titleOffset, MAX_TITLES_WITH_SAME_NORMALIZED_NAME, function(titleList) {
if (titleList !== null && titleList.length>0) { if (titleList !== null && titleList.length>0) {
@ -463,7 +476,7 @@ define(function(require) {
LocalArchive.prototype.findTitlesWithPrefix = function(prefix, maxSize, callbackFunction) { LocalArchive.prototype.findTitlesWithPrefix = function(prefix, maxSize, callbackFunction) {
var titleFileSize = this.titleFile.size; var titleFileSize = this.titleFile.size;
if (prefix) { if (prefix) {
prefix = normalize_string.normalizeString(prefix); prefix = this.normalizeStringIfCompatibleArchive(prefix);
} }
var reader = new FileReader(); var reader = new FileReader();
@ -472,14 +485,14 @@ define(function(require) {
alert('Title file read cancelled'); alert('Title file read cancelled');
}; };
var currentLocalArchiveInstance = this; var currentLocalArchiveInstance = this;
var normalizedPrefix = normalize_string.normalizeString(prefix); var normalizedPrefix = this.normalizeStringIfCompatibleArchive(prefix);
this.recursivePrefixSearch(reader, normalizedPrefix, 0, titleFileSize, function(titleOffset) { this.recursivePrefixSearch(reader, normalizedPrefix, 0, titleFileSize, function(titleOffset) {
currentLocalArchiveInstance.getTitlesStartingAtOffset(titleOffset, maxSize, function(titleList) { currentLocalArchiveInstance.getTitlesStartingAtOffset(titleOffset, maxSize, function(titleList) {
// Keep only the titles with names starting with the prefix // Keep only the titles with names starting with the prefix
var i = 0; var i = 0;
for (i = 0; i < titleList.length; i++) { for (i = 0; i < titleList.length; i++) {
var titleName = titleList[i].name; var titleName = titleList[i].name;
var normalizedTitleName = normalize_string.normalizeString(titleName); var normalizedTitleName = currentLocalArchiveInstance.normalizeStringIfCompatibleArchive(titleName);
if (normalizedTitleName.length < normalizedPrefix.length || normalizedTitleName.substring(0, normalizedPrefix.length) !== normalizedPrefix) { if (normalizedTitleName.length < normalizedPrefix.length || normalizedTitleName.substring(0, normalizedPrefix.length) !== normalizedPrefix) {
break; break;
} }
@ -951,6 +964,21 @@ define(function(require) {
}; };
}; };
/**
* Normalize the given String, if the current Archive is compatible.
* If it's not, return the given String, as is.
* @param string : string to normalized
* @returns normalized string, or same string if archive is not compatible
*/
LocalArchive.prototype.normalizeStringIfCompatibleArchive = function(string) {
if (this.normalizedTitles === true) {
return normalize_string.normalizeString(string);
}
else {
return string;
}
};
/** /**
* ErrorHandler for FileReader * ErrorHandler for FileReader
* @param {type} evt * @param {type} evt