| OLD | NEW |
| 1 // Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include <limits> | 5 #include <limits> |
| 6 #include <set> | 6 #include <set> |
| 7 | 7 |
| 8 #include "chrome/browser/history/text_database.h" | 8 #include "chrome/browser/history/text_database.h" |
| 9 | 9 |
| 10 #include "base/file_util.h" | 10 #include "base/file_util.h" |
| (...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 108 return StringPrintf(L"%ls%d-%02d", file_base(), id / 100, id % 100); | 108 return StringPrintf(L"%ls%d-%02d", file_base(), id / 100, id % 100); |
| 109 } | 109 } |
| 110 | 110 |
| 111 // static | 111 // static |
| 112 TextDatabase::DBIdent TextDatabase::FileNameToID(const std::wstring& file_path){ | 112 TextDatabase::DBIdent TextDatabase::FileNameToID(const std::wstring& file_path){ |
| 113 std::wstring file_name = file_util::GetFilenameFromPath(file_path); | 113 std::wstring file_name = file_util::GetFilenameFromPath(file_path); |
| 114 | 114 |
| 115 // We don't actually check the prefix here. Since the file system could | 115 // We don't actually check the prefix here. Since the file system could |
| 116 // be case insensitive in ways we can't predict (NTFS), checking could | 116 // be case insensitive in ways we can't predict (NTFS), checking could |
| 117 // potentially be the wrong thing to do. Instead, we just look for a suffix. | 117 // potentially be the wrong thing to do. Instead, we just look for a suffix. |
| 118 static const int kIDStringLength = 7; // Room for "xxxx-xx". | 118 static const size_t kIDStringLength = 7; // Room for "xxxx-xx". |
| 119 if (file_name.length() < kIDStringLength) | 119 if (file_name.length() < kIDStringLength) |
| 120 return 0; | 120 return 0; |
| 121 const wchar_t* number_begin = | 121 const std::wstring suffix(&file_name[file_name.length() - kIDStringLength]); |
| 122 &file_name[file_name.length() - kIDStringLength]; | |
| 123 | 122 |
| 124 int year, month; | 123 if (suffix.length() != kIDStringLength || suffix[4] != L'-') { |
| 125 if (swscanf_s(number_begin, L"%d-%d", &year, &month) != 2) | 124 return 0; |
| 126 return 0; // Unable to get both numbers. | 125 } |
| 126 |
| 127 int year = StringToInt(suffix.substr(0, 4)); |
| 128 int month = StringToInt(suffix.substr(5, 2)); |
| 127 | 129 |
| 128 return year * 100 + month; | 130 return year * 100 + month; |
| 129 } | 131 } |
| 130 | 132 |
| 131 bool TextDatabase::Init() { | 133 bool TextDatabase::Init() { |
| 132 // Make sure, if we're not allowed to create the file, that it exists. | 134 // Make sure, if we're not allowed to create the file, that it exists. |
| 133 if (!allow_create_) { | 135 if (!allow_create_) { |
| 134 if (!file_util::PathExists(file_name_)) | 136 if (!file_util::PathExists(file_name_)) |
| 135 return false; | 137 return false; |
| 136 } | 138 } |
| (...skipping 204 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 341 URLSet::const_iterator found_url = found_urls->find(url); | 343 URLSet::const_iterator found_url = found_urls->find(url); |
| 342 if (found_url != found_urls->end()) | 344 if (found_url != found_urls->end()) |
| 343 continue; // Don't add this duplicate when unique URLs are requested. | 345 continue; // Don't add this duplicate when unique URLs are requested. |
| 344 } | 346 } |
| 345 | 347 |
| 346 // Fill the results into the vector (avoid copying the URL with Swap()). | 348 // Fill the results into the vector (avoid copying the URL with Swap()). |
| 347 results->resize(results->size() + 1); | 349 results->resize(results->size() + 1); |
| 348 Match& match = results->at(results->size() - 1); | 350 Match& match = results->at(results->size() - 1); |
| 349 match.url.Swap(&url); | 351 match.url.Swap(&url); |
| 350 | 352 |
| 351 match.title = statement->column_string16(1); | 353 match.title = UTF8ToWide(statement->column_string(1)); |
| 352 match.time = Time::FromInternalValue(statement->column_int64(2)); | 354 match.time = Time::FromInternalValue(statement->column_int64(2)); |
| 353 | 355 |
| 354 // Extract any matches in the title. | 356 // Extract any matches in the title. |
| 355 std::string offsets_str = statement->column_string(3); | 357 std::string offsets_str = statement->column_string(3); |
| 356 Snippet::ExtractMatchPositions(offsets_str, kTitleColumnIndex, | 358 Snippet::ExtractMatchPositions(offsets_str, kTitleColumnIndex, |
| 357 &match.title_match_positions); | 359 &match.title_match_positions); |
| 358 Snippet::ConvertMatchPositionsToWide(statement->column_string(1), | 360 Snippet::ConvertMatchPositionsToWide(statement->column_string(1), |
| 359 &match.title_match_positions); | 361 &match.title_match_positions); |
| 360 | 362 |
| 361 // Extract the matches in the body. | 363 // Extract the matches in the body. |
| (...skipping 17 matching lines...) Expand all Loading... |
| 379 // Since we got the results in order, we know the last item is the last | 381 // Since we got the results in order, we know the last item is the last |
| 380 // time we considered. | 382 // time we considered. |
| 381 *first_time_searched = results->back().time; | 383 *first_time_searched = results->back().time; |
| 382 } | 384 } |
| 383 | 385 |
| 384 statement->reset(); | 386 statement->reset(); |
| 385 } | 387 } |
| 386 | 388 |
| 387 } // namespace history | 389 } // namespace history |
| 388 | 390 |
| OLD | NEW |