blob: 74c9d5dd476217a28b87015a879f62f32d5d796a [file] [log] [blame]
The Android Open Source Project9066cfe2009-03-03 19:31:44 -08001/*
2 * Copyright (C) 2008 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17#ifndef MEDIASCANNER_H
18#define MEDIASCANNER_H
19
Mathias Agopian3b4062e2009-05-31 19:13:00 -070020#include <utils/Log.h>
21#include <utils/threads.h>
22#include <utils/List.h>
23#include <utils/Errors.h>
The Android Open Source Project9066cfe2009-03-03 19:31:44 -080024#include <pthread.h>
25
26namespace android {
27
28class MediaScannerClient;
29class StringArray;
30
Andreas Huberbfb9fb12009-12-03 11:31:19 -080031struct MediaScanner {
The Android Open Source Project9066cfe2009-03-03 19:31:44 -080032 MediaScanner();
Andreas Huberbfb9fb12009-12-03 11:31:19 -080033 virtual ~MediaScanner();
The Android Open Source Project9066cfe2009-03-03 19:31:44 -080034
Andreas Huberbfb9fb12009-12-03 11:31:19 -080035 virtual status_t processFile(
36 const char *path, const char *mimeType,
37 MediaScannerClient &client) = 0;
38
39 typedef bool (*ExceptionCheck)(void* env);
40 virtual status_t processDirectory(
Mike Lockwoodc37255d2010-09-10 14:47:36 -040041 const char *path, MediaScannerClient &client,
Andreas Huberbfb9fb12009-12-03 11:31:19 -080042 ExceptionCheck exceptionCheck, void *exceptionEnv);
43
44 void setLocale(const char *locale);
45
The Android Open Source Project9066cfe2009-03-03 19:31:44 -080046 // extracts album art as a block of data
Andreas Huberbfb9fb12009-12-03 11:31:19 -080047 virtual char *extractAlbumArt(int fd) = 0;
48
49protected:
50 const char *locale() const;
The Android Open Source Project9066cfe2009-03-03 19:31:44 -080051
52private:
The Android Open Source Project9066cfe2009-03-03 19:31:44 -080053 // current locale (like "ja_JP"), created/destroyed with strdup()/free()
Andreas Huberbfb9fb12009-12-03 11:31:19 -080054 char *mLocale;
The Android Open Source Project9066cfe2009-03-03 19:31:44 -080055
Andreas Huberbfb9fb12009-12-03 11:31:19 -080056 status_t doProcessDirectory(
Mike Lockwoodc37255d2010-09-10 14:47:36 -040057 char *path, int pathRemaining, MediaScannerClient &client,
58 ExceptionCheck exceptionCheck, void *exceptionEnv);
Andreas Huberbfb9fb12009-12-03 11:31:19 -080059
60 MediaScanner(const MediaScanner &);
61 MediaScanner &operator=(const MediaScanner &);
62};
The Android Open Source Project9066cfe2009-03-03 19:31:44 -080063
64class MediaScannerClient
65{
66public:
Marco Nelissen8b046612009-09-03 10:49:55 -070067 MediaScannerClient();
68 virtual ~MediaScannerClient();
69 void setLocale(const char* locale);
70 void beginFile();
71 bool addStringTag(const char* name, const char* value);
72 void endFile();
73
74 virtual bool scanFile(const char* path, long long lastModified, long long fileSize) = 0;
75 virtual bool handleStringTag(const char* name, const char* value) = 0;
76 virtual bool setMimeType(const char* mimeType) = 0;
77 virtual bool addNoMediaFolder(const char* path) = 0;
The Android Open Source Project9066cfe2009-03-03 19:31:44 -080078
79protected:
80 void convertValues(uint32_t encoding);
81
82protected:
83 // cached name and value strings, for native encoding support.
84 StringArray* mNames;
85 StringArray* mValues;
Andreas Huberbfb9fb12009-12-03 11:31:19 -080086
The Android Open Source Project9066cfe2009-03-03 19:31:44 -080087 // default encoding based on MediaScanner::mLocale string
88 uint32_t mLocaleEncoding;
89};
90
91}; // namespace android
92
93#endif // MEDIASCANNER_H
94