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

Unified Diff: chrome/browser/media_galleries/fileapi/itunes_data_provider.h

Issue 16158004: iTunes file util and data provider for media galleries (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Undo incorrect fix Created 7 years, 6 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/itunes_data_provider.h
diff --git a/chrome/browser/media_galleries/fileapi/itunes_data_provider.h b/chrome/browser/media_galleries/fileapi/itunes_data_provider.h
new file mode 100644
index 0000000000000000000000000000000000000000..fbf490c06ddef121e854b595e84991fa067e20e2
--- /dev/null
+++ b/chrome/browser/media_galleries/fileapi/itunes_data_provider.h
@@ -0,0 +1,78 @@
+// Copyright 2013 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef CHROME_BROWSER_MEDIA_GALLERIES_FILEAPI_ITUNES_DATA_PROVIDER_H_
+#define CHROME_BROWSER_MEDIA_GALLERIES_FILEAPI_ITUNES_DATA_PROVIDER_H_
+
+#include <map>
+#include <set>
+#include <string>
+
+#include "base/basictypes.h"
+#include "base/callback_forward.h"
+#include "base/files/file_path.h"
+#include "chrome/browser/media_galleries/fileapi/itunes_library_parser.h"
+
+namespace itunes {
+
+// This class is the holder for iTunes parsed data. Given a path to the iTunes
+// library xml file it will read it in, parse the data, and provide convenient
+// methods to access it. When the file changes, it will update the data.
+// It is not thread safe, but can be run on any thread with IO access.
+class ITunesDataProvider {
+ public:
+ typedef std::string ArtistName;
+ typedef std::string AlbumName;
+ typedef std::string TrackName;
+ typedef std::map<TrackName, base::FilePath> Album;
+
+ explicit ITunesDataProvider(const base::FilePath& library_path);
+ ~ITunesDataProvider();
+
+ // Ask the data provider to refresh the data if necessary. |ready_callback|
+ // will be called when the data is up to date.
+ void RefreshData(const base::Closure& ready_callback);
+
+ // Get the platform path for the library xml file.
+ const base::FilePath& library_path() const;
+
+ // Returns true if |artist| exists in the library.
+ bool KnownArtist(const ArtistName& artist) const;
+
+ // Returns true if |artist| has an album by the name |album| in the library.
+ bool KnownAlbum(const ArtistName& artist, const AlbumName& album) const;
+
+ // Get the track named (filename basename) |track| in |album| by |artist|.
+ // If no such track exists, an empty FilePath is returned.
+ base::FilePath GetTrackLocation(const ArtistName& artist,
+ const AlbumName& album,
+ const TrackName& track) const;
+
+ // Get the set of artists.
+ std::set<ArtistName> GetArtistNames() const;
+
+ // Get the set of albums for |artist|.
+ std::set<AlbumName> GetAlbumNames(const ArtistName& artist) const;
+
+ // Get the tracks for the |album| by |artist|.
+ Album GetAlbum(const ArtistName& artist, const AlbumName& album) const;
+
+ private:
+ typedef std::map<AlbumName, Album> Artist;
+ typedef std::map<ArtistName, Artist> Library;
+
+ void ParseLibrary();
+
+ const base::FilePath library_path_;
+
+ Library library_;
+
+ bool needs_refresh_;
+
+ DISALLOW_COPY_AND_ASSIGN(ITunesDataProvider);
+};
+
+} // namespace itunes
+
+#endif // CHROME_BROWSER_MEDIA_GALLERIES_FILEAPI_ITUNES_DATA_PROVIDER_H_

Powered by Google App Engine
This is Rietveld 408576698