Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(18)

Unified Diff: chrome/browser/media_galleries/fileapi/media_path_filter.cc

Issue 149363004: Media Galleries: Initial media scanner implementation. (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: with test Created 6 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/media_galleries/fileapi/media_path_filter.cc
===================================================================
--- chrome/browser/media_galleries/fileapi/media_path_filter.cc (revision 247534)
+++ chrome/browser/media_galleries/fileapi/media_path_filter.cc (working copy)
@@ -12,7 +12,7 @@
namespace {
-const base::FilePath::CharType* const kExtraSupportedExtensions[] = {
+const base::FilePath::CharType* const kExtraSupportedImageExtensions[] = {
// RAW picture file types.
// Some of which are just image/tiff.
FILE_PATH_LITERAL("3fr"), // (Hasselblad)
@@ -45,8 +45,9 @@
// - Leica / Panasonic RAW files - image/x-panasonic-raw
// - Phase One RAW files - image/x-phaseone-raw
FILE_PATH_LITERAL("raw"),
+};
- // Video files types.
+const base::FilePath::CharType* const kExtraSupportedVideoExtensions[] = {
FILE_PATH_LITERAL("3gp"),
FILE_PATH_LITERAL("3gpp"),
FILE_PATH_LITERAL("avi"),
@@ -58,9 +59,11 @@
FILE_PATH_LITERAL("mpegps"),
FILE_PATH_LITERAL("mpg"),
FILE_PATH_LITERAL("wmv"),
+};
- // Audio file types. Many of these file types are audio files in the same
- // containers that the MIME sniffer already detects as video/subtype.
+const base::FilePath::CharType* const kExtraSupportedAudioExtensions[] = {
+ // Many of these file types are audio files in the same containers that the
+ // MIME sniffer already detects as video/subtype.
FILE_PATH_LITERAL("aac"), // audio/mpeg
FILE_PATH_LITERAL("alac"), // video/mp4
FILE_PATH_LITERAL("flac"), // audio/x-flac
@@ -75,6 +78,18 @@
!net::IsSupportedMimeType(mime_type);
}
+std::vector<base::FilePath::StringType> GetMediaExtensionList(
+ const std::string& mime_type) {
+ std::vector<base::FilePath::StringType> extensions;
+ net::GetExtensionsForMimeType(mime_type, &extensions);
+ std::vector<base::FilePath::StringType>::iterator new_end =
+ std::remove_if(extensions.begin(),
+ extensions.end(),
+ &IsUnsupportedExtension);
+ extensions.erase(new_end, extensions.end());
+ return extensions;
+}
+
} // namespace
MediaPathFilter::MediaPathFilter()
@@ -86,10 +101,16 @@
}
bool MediaPathFilter::Match(const base::FilePath& path) {
+ return GetType(path) != MEDIA_GALLERY_SCAN_FILE_TYPE_UNKNOWN;
+}
+
+MediaGalleryScanFileType MediaPathFilter::GetType(const base::FilePath& path) {
EnsureInitialized();
- return std::binary_search(media_file_extensions_.begin(),
- media_file_extensions_.end(),
- StringToLowerASCII(path.Extension()));
+ MediaFileExtensionMap::const_iterator it =
+ media_file_extensions_map_.find(StringToLowerASCII(path.Extension()));
+ if (it == media_file_extensions_map_.end())
+ return MEDIA_GALLERY_SCAN_FILE_TYPE_UNKNOWN;
+ return static_cast<MediaGalleryScanFileType>(it->second);
}
void MediaPathFilter::EnsureInitialized() {
@@ -97,26 +118,51 @@
if (initialized_)
return;
- // This may require I/O, so doing this in the ctor and removing
- // |initialized_| would result in a ThreadRestrictions failure.
- net::GetExtensionsForMimeType("image/*", &media_file_extensions_);
- net::GetExtensionsForMimeType("audio/*", &media_file_extensions_);
- net::GetExtensionsForMimeType("video/*", &media_file_extensions_);
+ // This may require I/O when it calls net::GetExtensionsForMimeType(), so
+ // doing this in the ctor and removing |initialized_| would result in a
+ // ThreadRestrictions failure.
+ AddExtensionsToMediaFileExtensionMap(GetMediaExtensionList("image/*"),
+ MEDIA_GALLERY_SCAN_FILE_TYPE_IMAGE);
+ AddExtensionsToMediaFileExtensionMap(GetMediaExtensionList("audio/*"),
+ MEDIA_GALLERY_SCAN_FILE_TYPE_AUDIO);
+ AddExtensionsToMediaFileExtensionMap(GetMediaExtensionList("video/*"),
+ MEDIA_GALLERY_SCAN_FILE_TYPE_VIDEO);
+ AddAdditionalExtensionsToMediaFileExtensionMap(
+ kExtraSupportedImageExtensions,
+ arraysize(kExtraSupportedImageExtensions),
+ MEDIA_GALLERY_SCAN_FILE_TYPE_IMAGE);
+ AddAdditionalExtensionsToMediaFileExtensionMap(
+ kExtraSupportedAudioExtensions,
+ arraysize(kExtraSupportedAudioExtensions),
+ MEDIA_GALLERY_SCAN_FILE_TYPE_AUDIO);
+ AddAdditionalExtensionsToMediaFileExtensionMap(
+ kExtraSupportedVideoExtensions,
+ arraysize(kExtraSupportedVideoExtensions),
+ MEDIA_GALLERY_SCAN_FILE_TYPE_VIDEO);
- MediaFileExtensionList::iterator new_end =
- std::remove_if(media_file_extensions_.begin(),
- media_file_extensions_.end(),
- &IsUnsupportedExtension);
- media_file_extensions_.erase(new_end, media_file_extensions_.end());
+ initialized_ = true;
+}
- // Add other common extensions.
- for (size_t i = 0; i < arraysize(kExtraSupportedExtensions); ++i)
- media_file_extensions_.push_back(kExtraSupportedExtensions[i]);
+void MediaPathFilter::AddExtensionsToMediaFileExtensionMap(
+ const MediaFileExtensionList& extensions_list,
+ MediaGalleryScanFileType type) {
+ for (size_t i = 0; i < extensions_list.size(); ++i)
+ AddExtensionToMediaFileExtensionMap(extensions_list[i].c_str(), type);
+}
- for (MediaFileExtensionList::iterator itr = media_file_extensions_.begin();
- itr != media_file_extensions_.end(); ++itr)
- *itr = base::FilePath::kExtensionSeparator + *itr;
- std::sort(media_file_extensions_.begin(), media_file_extensions_.end());
+void MediaPathFilter::AddAdditionalExtensionsToMediaFileExtensionMap(
+ const base::FilePath::CharType* const* extensions_list,
+ size_t extensions_list_size,
+ MediaGalleryScanFileType type) {
+ for (size_t i = 0; i < extensions_list_size; ++i)
+ AddExtensionToMediaFileExtensionMap(extensions_list[i], type);
+}
- initialized_ = true;
+void MediaPathFilter::AddExtensionToMediaFileExtensionMap(
+ const base::FilePath::CharType* extension,
+ MediaGalleryScanFileType type) {
+ base::FilePath::StringType extension_with_sep =
+ base::FilePath::kExtensionSeparator +
+ base::FilePath::StringType(extension);
+ media_file_extensions_map_[extension_with_sep] |= type;
}
« no previous file with comments | « chrome/browser/media_galleries/fileapi/media_path_filter.h ('k') | chrome/browser/media_galleries/media_folder_finder.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698