MTP file transfers happen in two stages. The SendObjectInfo command sends some information about the file and reserves an ObjectHandle for the new file. The file transfer is then performed using the SendObject command. To support this in the media provider, MtpDatabase.beginSendObject receives the information from SendObjectInfo and creates an row for it in the MTP objects table for the new file. After the file transfer has completed, then MtpDatabase.endSendObject is called. In endSendObject, we run the media scanner on the new file, which will add a row to the images, audio, video or audio playlist table. To avoid the media scanner creating a second row for the file in the MTP objects table, we pass the ObjectHandle created in beginSendObject to the media scanner, which then passes it to the media provider via the content values when it performs its insert. Change-Id: I1ebcc63d6bd4404b0d3a93c703a9d3c097381d3a Signed-off-by: Mike Lockwood <lockwood@android.com>
70 lines
2.8 KiB
C++
70 lines
2.8 KiB
C++
/*
|
|
* Copyright (C) 2010 The Android Open Source Project
|
|
*
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
*/
|
|
|
|
#ifndef _MTP_DATABASE_H
|
|
#define _MTP_DATABASE_H
|
|
|
|
#include "MtpTypes.h"
|
|
|
|
namespace android {
|
|
|
|
class MtpDataPacket;
|
|
|
|
class MtpDatabase {
|
|
public:
|
|
virtual ~MtpDatabase() {}
|
|
|
|
// called from SendObjectInfo to reserve a database entry for the incoming file
|
|
virtual MtpObjectHandle beginSendObject(const char* path,
|
|
MtpObjectFormat format,
|
|
MtpObjectHandle parent,
|
|
MtpStorageID storage,
|
|
uint64_t size,
|
|
time_t modified) = 0;
|
|
|
|
// called to report success or failure of the SendObject file transfer
|
|
// success should signal a notification of the new object's creation,
|
|
// failure should remove the database entry created in beginSendObject
|
|
virtual void endSendObject(const char* path,
|
|
MtpObjectHandle handle,
|
|
MtpObjectFormat format,
|
|
bool succeeded) = 0;
|
|
|
|
virtual MtpObjectHandleList* getObjectList(MtpStorageID storageID,
|
|
MtpObjectFormat format,
|
|
MtpObjectHandle parent) = 0;
|
|
|
|
virtual MtpResponseCode getObjectProperty(MtpObjectHandle handle,
|
|
MtpObjectProperty property,
|
|
MtpDataPacket& packet) = 0;
|
|
|
|
virtual MtpResponseCode getObjectInfo(MtpObjectHandle handle,
|
|
MtpDataPacket& packet) = 0;
|
|
|
|
virtual bool getObjectFilePath(MtpObjectHandle handle,
|
|
MtpString& filePath,
|
|
int64_t& fileLength) = 0;
|
|
virtual bool deleteFile(MtpObjectHandle handle) = 0;
|
|
|
|
virtual void beginTransaction() = 0;
|
|
virtual void commitTransaction() = 0;
|
|
virtual void rollbackTransaction() = 0;
|
|
};
|
|
|
|
}; // namespace android
|
|
|
|
#endif // _MTP_DATABASE_H
|