mediascanner.h revision bfb9fb143b67c2d0307af2bce9af3c08f362b29a
19066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/*
29066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Copyright (C) 2008 The Android Open Source Project
39066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *
49066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License");
59066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * you may not use this file except in compliance with the License.
69066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * You may obtain a copy of the License at
79066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *
89066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *      http://www.apache.org/licenses/LICENSE-2.0
99066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *
109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Unless required by applicable law or agreed to in writing, software
119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS,
129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * See the License for the specific language governing permissions and
149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * limitations under the License.
159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */
169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#ifndef MEDIASCANNER_H
189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#define MEDIASCANNER_H
199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
203b4062eeb01be33951ba214e027da523cf09f8b1Mathias Agopian#include <utils/Log.h>
213b4062eeb01be33951ba214e027da523cf09f8b1Mathias Agopian#include <utils/threads.h>
223b4062eeb01be33951ba214e027da523cf09f8b1Mathias Agopian#include <utils/List.h>
233b4062eeb01be33951ba214e027da523cf09f8b1Mathias Agopian#include <utils/Errors.h>
249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include <pthread.h>
259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectnamespace android {
279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectclass MediaScannerClient;
299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectclass StringArray;
309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
31bfb9fb143b67c2d0307af2bce9af3c08f362b29aAndreas Huberstruct MediaScanner {
329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    MediaScanner();
33bfb9fb143b67c2d0307af2bce9af3c08f362b29aAndreas Huber    virtual ~MediaScanner();
34bfb9fb143b67c2d0307af2bce9af3c08f362b29aAndreas Huber
35bfb9fb143b67c2d0307af2bce9af3c08f362b29aAndreas Huber    virtual status_t processFile(
36bfb9fb143b67c2d0307af2bce9af3c08f362b29aAndreas Huber            const char *path, const char *mimeType,
37bfb9fb143b67c2d0307af2bce9af3c08f362b29aAndreas Huber            MediaScannerClient &client) = 0;
38bfb9fb143b67c2d0307af2bce9af3c08f362b29aAndreas Huber
399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    typedef bool (*ExceptionCheck)(void* env);
40bfb9fb143b67c2d0307af2bce9af3c08f362b29aAndreas Huber    virtual status_t processDirectory(
41bfb9fb143b67c2d0307af2bce9af3c08f362b29aAndreas Huber            const char *path, const char *extensions,
42bfb9fb143b67c2d0307af2bce9af3c08f362b29aAndreas Huber            MediaScannerClient &client,
43bfb9fb143b67c2d0307af2bce9af3c08f362b29aAndreas Huber            ExceptionCheck exceptionCheck, void *exceptionEnv);
44bfb9fb143b67c2d0307af2bce9af3c08f362b29aAndreas Huber
45bfb9fb143b67c2d0307af2bce9af3c08f362b29aAndreas Huber    void setLocale(const char *locale);
469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    // extracts album art as a block of data
48bfb9fb143b67c2d0307af2bce9af3c08f362b29aAndreas Huber    virtual char *extractAlbumArt(int fd) = 0;
49bfb9fb143b67c2d0307af2bce9af3c08f362b29aAndreas Huber
50bfb9fb143b67c2d0307af2bce9af3c08f362b29aAndreas Huberprotected:
51bfb9fb143b67c2d0307af2bce9af3c08f362b29aAndreas Huber    const char *locale() const;
529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectprivate:
549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    // current locale (like "ja_JP"), created/destroyed with strdup()/free()
55bfb9fb143b67c2d0307af2bce9af3c08f362b29aAndreas Huber    char *mLocale;
569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
57bfb9fb143b67c2d0307af2bce9af3c08f362b29aAndreas Huber    status_t doProcessDirectory(
58bfb9fb143b67c2d0307af2bce9af3c08f362b29aAndreas Huber            char *path, int pathRemaining, const char *extensions,
59bfb9fb143b67c2d0307af2bce9af3c08f362b29aAndreas Huber            MediaScannerClient &client, ExceptionCheck exceptionCheck,
60bfb9fb143b67c2d0307af2bce9af3c08f362b29aAndreas Huber            void *exceptionEnv);
61bfb9fb143b67c2d0307af2bce9af3c08f362b29aAndreas Huber
62bfb9fb143b67c2d0307af2bce9af3c08f362b29aAndreas Huber    MediaScanner(const MediaScanner &);
63bfb9fb143b67c2d0307af2bce9af3c08f362b29aAndreas Huber    MediaScanner &operator=(const MediaScanner &);
64bfb9fb143b67c2d0307af2bce9af3c08f362b29aAndreas Huber};
659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectclass MediaScannerClient
679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpublic:
698b0466170082fdf12f78d7b70358002520e99e9bMarco Nelissen    MediaScannerClient();
708b0466170082fdf12f78d7b70358002520e99e9bMarco Nelissen    virtual ~MediaScannerClient();
718b0466170082fdf12f78d7b70358002520e99e9bMarco Nelissen    void setLocale(const char* locale);
728b0466170082fdf12f78d7b70358002520e99e9bMarco Nelissen    void beginFile();
738b0466170082fdf12f78d7b70358002520e99e9bMarco Nelissen    bool addStringTag(const char* name, const char* value);
748b0466170082fdf12f78d7b70358002520e99e9bMarco Nelissen    void endFile();
758b0466170082fdf12f78d7b70358002520e99e9bMarco Nelissen
768b0466170082fdf12f78d7b70358002520e99e9bMarco Nelissen    virtual bool scanFile(const char* path, long long lastModified, long long fileSize) = 0;
778b0466170082fdf12f78d7b70358002520e99e9bMarco Nelissen    virtual bool handleStringTag(const char* name, const char* value) = 0;
788b0466170082fdf12f78d7b70358002520e99e9bMarco Nelissen    virtual bool setMimeType(const char* mimeType) = 0;
798b0466170082fdf12f78d7b70358002520e99e9bMarco Nelissen    virtual bool addNoMediaFolder(const char* path) = 0;
809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectprotected:
829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    void convertValues(uint32_t encoding);
839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectprotected:
859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    // cached name and value strings, for native encoding support.
869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    StringArray*    mNames;
879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    StringArray*    mValues;
88bfb9fb143b67c2d0307af2bce9af3c08f362b29aAndreas Huber
899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    // default encoding based on MediaScanner::mLocale string
909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    uint32_t        mLocaleEncoding;
919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project};
929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}; // namespace android
949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#endif // MEDIASCANNER_H
969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
97