mirror of
https://github.com/openharmony/multimedia_medialibrary_standard.git
synced 2026-07-01 00:17:55 -04:00
升级和扫描场景更新年月日数据
Signed-off-by: yangbo <yangbo258@huawei.com> Change-Id: Ia05b8edff9e60529df4a9f2456b4e232020d33d2
This commit is contained in:
@@ -136,20 +136,14 @@ const std::string PhotoColumn::CREATE_PHOTO_TABLE = "CREATE TABLE IF NOT EXISTS
|
||||
PHOTO_DATE_DAY + " TEXT)";
|
||||
|
||||
|
||||
const std::string PhotoColumn::CREATE_YEAR_INDEX = "CREATE INDEX '" +
|
||||
PHOTO_DATE_YEAR_INDEX + "'" + " ON " +
|
||||
PHOTOS_TABLE + " ('" +
|
||||
PHOTO_DATE_YEAR + "')";
|
||||
const std::string PhotoColumn::CREATE_YEAR_INDEX = BaseColumn::CreateIndex() +
|
||||
PHOTO_DATE_YEAR_INDEX + " ON " + PHOTOS_TABLE + " (" + PHOTO_DATE_YEAR + " DESC)";
|
||||
|
||||
const std::string PhotoColumn::CREATE_MONTH_INDEX = "CREATE INDEX '" +
|
||||
PHOTO_DATE_MONTH_INDEX + "'" + " ON " +
|
||||
PHOTOS_TABLE + " ('" +
|
||||
PHOTO_DATE_MONTH + "')";
|
||||
const std::string PhotoColumn::CREATE_MONTH_INDEX = BaseColumn::CreateIndex() +
|
||||
PHOTO_DATE_MONTH_INDEX + " ON " + PHOTOS_TABLE + " (" + PHOTO_DATE_MONTH + " DESC)";
|
||||
|
||||
const std::string PhotoColumn::CREATE_DAY_INDEX = "CREATE INDEX '" +
|
||||
PHOTO_DATE_DAY_INDEX + "'" + " ON " +
|
||||
PHOTOS_TABLE + " ('" +
|
||||
PHOTO_DATE_DAY + "')";
|
||||
const std::string PhotoColumn::CREATE_DAY_INDEX = BaseColumn::CreateIndex() +
|
||||
PHOTO_DATE_DAY_INDEX + " ON " + PHOTOS_TABLE + " (" + PHOTO_DATE_DAY + " DESC)";
|
||||
|
||||
const std::string PhotoColumn::QUERY_MEDIA_VOLUME = "SELECT sum(" + MediaColumn::MEDIA_SIZE + ") AS " +
|
||||
MediaColumn::MEDIA_SIZE + "," +
|
||||
|
||||
+27
-55
@@ -45,12 +45,12 @@ using namespace OHOS::NativeRdb;
|
||||
namespace {
|
||||
class AddYearTaskData : public OHOS::Media::AsyncTaskData {
|
||||
public:
|
||||
explicit AddYearTaskData(const shared_ptr<OHOS::Media::MediaLibraryRdbStore> store)
|
||||
explicit AddYearTaskData(RdbStore* store)
|
||||
: store_(store)
|
||||
{
|
||||
}
|
||||
virtual ~AddYearTaskData() = default;
|
||||
shared_ptr<OHOS::Media::MediaLibraryRdbStore> store_;
|
||||
RdbStore* store_;
|
||||
};
|
||||
}
|
||||
namespace OHOS::Media {
|
||||
@@ -1269,75 +1269,47 @@ void AddUpdateCloudSyncTrigger(RdbStore &store)
|
||||
void SetYearMonthDayData(AsyncTaskData *data)
|
||||
{
|
||||
auto* taskData = static_cast<AddYearTaskData*>(data);
|
||||
string queryRowSql = "SELECT " + MEDIA_DATA_DB_DATE_ADDED +"," +
|
||||
PhotoColumn::MEDIA_ID + " FROM " + PhotoColumn::PHOTOS_TABLE;
|
||||
auto resultSet = taskData->store_->QuerySql(queryRowSql);
|
||||
if (resultSet == nullptr || resultSet->GoToFirstRow() != NativeRdb::E_OK) {
|
||||
MEDIA_ERR_LOG("Can not get dataAdded");
|
||||
UpdateFail(__FILE__, __LINE__);
|
||||
return;
|
||||
}
|
||||
while (resultSet->GoToNextRow() == NativeRdb::E_OK) {
|
||||
int64_t dateAdd = GetInt64Val(MEDIA_DATA_DB_DATE_ADDED, resultSet);
|
||||
int32_t id = GetInt32Val(PhotoColumn::MEDIA_ID, resultSet);
|
||||
ValuesBucket valuesBucket;
|
||||
valuesBucket.PutString(PhotoColumn::PHOTO_DATE_YEAR,
|
||||
MediaFileUtils::StrCreateTime(PhotoColumn::PHOTO_DATE_YEAR_FORMAT, dateAdd));
|
||||
valuesBucket.PutString(PhotoColumn::PHOTO_DATE_MONTH,
|
||||
MediaFileUtils::StrCreateTime(PhotoColumn::PHOTO_DATE_MONTH_FORMAT, dateAdd));
|
||||
valuesBucket.PutString(PhotoColumn::PHOTO_DATE_DAY,
|
||||
MediaFileUtils::StrCreateTime(PhotoColumn::PHOTO_DATE_DAY_FORMAT, dateAdd));
|
||||
AbsRdbPredicates yearAbsPred(PhotoColumn::PHOTOS_TABLE);
|
||||
yearAbsPred.SetWhereClause(MEDIA_DATA_DB_ID + " = ? ");
|
||||
yearAbsPred.SetWhereArgs({to_string(id)});
|
||||
taskData->store_->Update(valuesBucket, yearAbsPred);
|
||||
}
|
||||
MEDIA_DEBUG_LOG("UpdateYearMonthDayData start");
|
||||
const vector<string> updateSql = {
|
||||
"UPDATE " + PhotoColumn::PHOTOS_TABLE + " SET " +
|
||||
PhotoColumn::PHOTO_DATE_YEAR + " = strftime('%Y', datetime(date_added, 'unixepoch', 'localtime')), " +
|
||||
PhotoColumn::PHOTO_DATE_MONTH + " = strftime('%Y%m', datetime(date_added, 'unixepoch', 'localtime')), " +
|
||||
PhotoColumn::PHOTO_DATE_DAY + " = strftime('%Y%m%d', datetime(date_added, 'unixepoch', 'localtime'))",
|
||||
PhotoColumn::CREATE_YEAR_INDEX,
|
||||
PhotoColumn::CREATE_MONTH_INDEX,
|
||||
PhotoColumn::CREATE_DAY_INDEX
|
||||
};
|
||||
ExecSqls(updateSql, *(taskData->store_));
|
||||
MEDIA_DEBUG_LOG("UpdateYearMonthDayData end");
|
||||
delete taskData;
|
||||
}
|
||||
|
||||
void AddYearMonthDayColumn(RdbStore &store)
|
||||
{
|
||||
const std::string alterYear =
|
||||
"ALTER TABLE " + PhotoColumn::PHOTOS_TABLE + " ADD COLUMN " +
|
||||
PhotoColumn::PHOTO_DATE_YEAR + " TEXT";
|
||||
int32_t result = store.ExecuteSql(alterYear);
|
||||
if (result != NativeRdb::E_OK) {
|
||||
UpdateFail(__FILE__, __LINE__);
|
||||
MEDIA_ERR_LOG("Upgrade rdb year error %{private}d", result);
|
||||
}
|
||||
const std::string alterMonth =
|
||||
"ALTER TABLE " + PhotoColumn::PHOTOS_TABLE + " ADD COLUMN " +
|
||||
PhotoColumn::PHOTO_DATE_MONTH + " TEXT";
|
||||
result = store.ExecuteSql(alterMonth);
|
||||
if (result != NativeRdb::E_OK) {
|
||||
UpdateFail(__FILE__, __LINE__);
|
||||
MEDIA_ERR_LOG("Upgrade rdb month error %{private}d", result);
|
||||
}
|
||||
const std::string alterDay =
|
||||
"ALTER TABLE " + PhotoColumn::PHOTOS_TABLE + " ADD COLUMN " +
|
||||
PhotoColumn::PHOTO_DATE_DAY + " TEXT";
|
||||
result = store.ExecuteSql(alterDay);
|
||||
if (result != NativeRdb::E_OK) {
|
||||
UpdateFail(__FILE__, __LINE__);
|
||||
MEDIA_ERR_LOG("Upgrade rdb day error %{private}d", result);
|
||||
}
|
||||
const vector<string> sqls = {
|
||||
"ALTER TABLE " + PhotoColumn::PHOTOS_TABLE + " ADD COLUMN " + PhotoColumn::PHOTO_DATE_YEAR + " TEXT",
|
||||
"ALTER TABLE " + PhotoColumn::PHOTOS_TABLE + " ADD COLUMN " + PhotoColumn::PHOTO_DATE_MONTH + " TEXT",
|
||||
"ALTER TABLE " + PhotoColumn::PHOTOS_TABLE + " ADD COLUMN " + PhotoColumn::PHOTO_DATE_DAY + " TEXT",
|
||||
};
|
||||
ExecSqls(sqls, store);
|
||||
|
||||
shared_ptr<MediaLibraryAsyncWorker> asyncWorker = MediaLibraryAsyncWorker::GetInstance();
|
||||
if (asyncWorker == nullptr) {
|
||||
UpdateFail(__FILE__, __LINE__);
|
||||
MEDIA_ERR_LOG("asyncWorker is nullptr");
|
||||
return;
|
||||
}
|
||||
shared_ptr<OHOS::Media::MediaLibraryRdbStore> rdbStore =
|
||||
MediaLibraryUnistoreManager::GetInstance().GetRdbStoreRaw();
|
||||
auto *taskData = new (nothrow) AddYearTaskData(rdbStore);
|
||||
|
||||
auto *taskData = new (nothrow) AddYearTaskData(&store);
|
||||
if (taskData == nullptr) {
|
||||
UpdateFail(__FILE__, __LINE__);
|
||||
MEDIA_ERR_LOG("taskData is nullptr");
|
||||
return;
|
||||
}
|
||||
shared_ptr<MediaLibraryAsyncTask> notifyAsyncTask =
|
||||
shared_ptr<MediaLibraryAsyncTask> asyncTask =
|
||||
make_shared<MediaLibraryAsyncTask>(SetYearMonthDayData, taskData);
|
||||
if (notifyAsyncTask != nullptr) {
|
||||
asyncWorker->AddTask(notifyAsyncTask, false);
|
||||
if (asyncTask != nullptr) {
|
||||
asyncWorker->AddTask(asyncTask, false);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -114,6 +114,15 @@ public:
|
||||
void SetAllExif(const VariantData &allExif);
|
||||
const std::string &GetAllExif() const;
|
||||
|
||||
void SetDateYear(const VariantData &dateYear);
|
||||
const std::string &getDateYear() const;
|
||||
|
||||
void SetDateMonth(const VariantData &dateMonth);
|
||||
const std::string &getDateMonth() const;
|
||||
|
||||
void SetDateDay(const VariantData &dateDay);
|
||||
const std::string &getDateDay() const;
|
||||
|
||||
#ifdef MEDIALIBRARY_COMPATIBILITY
|
||||
void SetPhotoSubType(const VariantData &photoSubType);
|
||||
int32_t GetPhotoSubType() const;
|
||||
@@ -155,6 +164,9 @@ private:
|
||||
int32_t width_;
|
||||
int32_t duration_;
|
||||
int32_t orientation_;
|
||||
string dateYear_;
|
||||
string dateMonth_;
|
||||
string dateDay_;
|
||||
|
||||
// video, audio, image
|
||||
int64_t dateTaken_;
|
||||
|
||||
@@ -20,6 +20,7 @@
|
||||
#include "directory_ex.h"
|
||||
#include "hitrace_meter.h"
|
||||
#include "ipc_skeleton.h"
|
||||
#include "media_file_utils.h"
|
||||
#include "media_log.h"
|
||||
#include "medialibrary_data_manager_utils.h"
|
||||
#include "medialibrary_errno.h"
|
||||
@@ -349,6 +350,10 @@ int32_t MediaScannerObj::BuildData(const struct stat &statInfo)
|
||||
data_->SetFileSize(statInfo.st_size);
|
||||
data_->SetFileDateModified(static_cast<int64_t>(statInfo.st_mtime));
|
||||
data_->SetFileDateAdded(static_cast<int64_t>(statInfo.st_ctime));
|
||||
int64_t cTime = static_cast<int64_t>(statInfo.st_ctime);
|
||||
data_->SetDateYear(MediaFileUtils::StrCreateTime(PhotoColumn::PHOTO_DATE_YEAR_FORMAT, cTime));
|
||||
data_->SetDateMonth(MediaFileUtils::StrCreateTime(PhotoColumn::PHOTO_DATE_MONTH_FORMAT, cTime));
|
||||
data_->SetDateDay(MediaFileUtils::StrCreateTime(PhotoColumn::PHOTO_DATE_DAY_FORMAT, cTime));
|
||||
|
||||
// extension and type
|
||||
string extension = ScannerUtils::GetFileExtension(path_);
|
||||
@@ -376,7 +381,6 @@ int32_t MediaScannerObj::GetFileMetadata()
|
||||
PostEventUtils::GetInstance().PostErrorProcess(ErrType::FILE_OPT_ERR, map);
|
||||
return E_SYSCALL;
|
||||
}
|
||||
|
||||
int errCode = BuildData(statInfo);
|
||||
if (errCode != E_OK) {
|
||||
VariantMap map = {{KEY_ERR_FILE, __FILE__}, {KEY_ERR_LINE, __LINE__}, {KEY_ERR_CODE, errCode},
|
||||
@@ -474,7 +478,6 @@ int32_t MediaScannerObj::BuildFileInfo(const string &parent, int32_t parentId)
|
||||
int32_t MediaScannerObj::ScanFileInTraversal(const string &path, const string &parent, int32_t parentId)
|
||||
{
|
||||
path_ = path;
|
||||
|
||||
if (ScannerUtils::IsFileHidden(path_)) {
|
||||
MEDIA_ERR_LOG("the file is hidden");
|
||||
VariantMap map = {{KEY_ERR_FILE, __FILE__}, {KEY_ERR_LINE, __LINE__}, {KEY_ERR_CODE, E_FILE_HIDDEN},
|
||||
@@ -482,7 +485,6 @@ int32_t MediaScannerObj::ScanFileInTraversal(const string &path, const string &p
|
||||
PostEventUtils::GetInstance().PostErrorProcess(ErrType::FILE_OPT_ERR, map);
|
||||
return E_FILE_HIDDEN;
|
||||
}
|
||||
|
||||
int32_t err = GetFileMetadata();
|
||||
if (err != E_OK) {
|
||||
if (err != E_SCANNED) {
|
||||
@@ -713,7 +715,6 @@ int32_t MediaScannerObj::ScanDirInternal()
|
||||
PostEventUtils::GetInstance().PostErrorProcess(ErrType::DB_OPT_ERR, map);
|
||||
return err;
|
||||
}
|
||||
|
||||
/* no further operation when stopped */
|
||||
err = WalkFileTree(dir_, NO_PARENT);
|
||||
if (err != E_OK) {
|
||||
@@ -723,7 +724,6 @@ int32_t MediaScannerObj::ScanDirInternal()
|
||||
PostEventUtils::GetInstance().PostErrorProcess(ErrType::FILE_OPT_ERR, map);
|
||||
return err;
|
||||
}
|
||||
|
||||
err = CommitTransaction();
|
||||
if (err != E_OK) {
|
||||
MEDIA_ERR_LOG("commit transaction err %{public}d", err);
|
||||
@@ -732,7 +732,6 @@ int32_t MediaScannerObj::ScanDirInternal()
|
||||
PostEventUtils::GetInstance().PostErrorProcess(ErrType::DB_OPT_ERR, map);
|
||||
return err;
|
||||
}
|
||||
|
||||
err = CleanupDirectory();
|
||||
if (err != E_OK) {
|
||||
MEDIA_ERR_LOG("clean up dir err %{public}d", err);
|
||||
|
||||
@@ -131,6 +131,12 @@ static void SetValuesFromMetaDataApi9(const Metadata &metadata, ValuesBucket &va
|
||||
values.PutLong(MEDIA_DATA_DB_DATE_TAKEN, metadata.GetDateTaken());
|
||||
values.PutLong(MEDIA_DATA_DB_TIME_PENDING, 0);
|
||||
|
||||
if (mediaType == MediaType::MEDIA_TYPE_IMAGE || mediaType == MEDIA_TYPE_VIDEO) {
|
||||
values.PutString(PhotoColumn::PHOTO_DATE_YEAR, metadata.getDateYear());
|
||||
values.PutString(PhotoColumn::PHOTO_DATE_MONTH, metadata.getDateMonth());
|
||||
values.PutString(PhotoColumn::PHOTO_DATE_DAY, metadata.getDateDay());
|
||||
}
|
||||
|
||||
SetValuesFromMetaDataAndType(metadata, values, mediaType, table);
|
||||
|
||||
if (isInsert) {
|
||||
@@ -162,6 +168,9 @@ static void SetValuesFromMetaDataApi10(const Metadata &metadata, ValuesBucket &v
|
||||
values.PutDouble(PhotoColumn::PHOTO_LATITUDE, metadata.GetLatitude());
|
||||
values.PutString(PhotoColumn::PHOTO_USER_COMMENT, metadata.GetUserComment());
|
||||
values.PutString(PhotoColumn::PHOTO_ALL_EXIF, metadata.GetAllExif());
|
||||
values.PutString(PhotoColumn::PHOTO_DATE_YEAR, metadata.getDateYear());
|
||||
values.PutString(PhotoColumn::PHOTO_DATE_MONTH, metadata.getDateMonth());
|
||||
values.PutString(PhotoColumn::PHOTO_DATE_DAY, metadata.getDateDay());
|
||||
#ifdef MEDIALIBRARY_COMPATIBILITY
|
||||
if (metadata.GetPhotoSubType() != 0) {
|
||||
values.PutInt(PhotoColumn::PHOTO_SUBTYPE, metadata.GetPhotoSubType());
|
||||
|
||||
@@ -84,6 +84,9 @@ void Metadata::Init()
|
||||
memberFuncMap_[PhotoColumn::PHOTO_USER_COMMENT] = make_pair(ResultSetDataType::TYPE_STRING,
|
||||
&Metadata::SetUserComment);
|
||||
memberFuncMap_[PhotoColumn::PHOTO_ALL_EXIF] = make_pair(ResultSetDataType::TYPE_STRING, &Metadata::SetAllExif);
|
||||
memberFuncMap_[PhotoColumn::PHOTO_DATE_YEAR] = make_pair(ResultSetDataType::TYPE_STRING, &Metadata::SetDateYear);
|
||||
memberFuncMap_[PhotoColumn::PHOTO_DATE_MONTH] = make_pair(ResultSetDataType::TYPE_STRING, &Metadata::SetDateMonth);
|
||||
memberFuncMap_[PhotoColumn::PHOTO_DATE_DAY] = make_pair(ResultSetDataType::TYPE_STRING, &Metadata::SetDateDay);
|
||||
}
|
||||
|
||||
void Metadata::SetFileId(const VariantData &id)
|
||||
@@ -366,6 +369,36 @@ const string &Metadata::GetAllExif() const
|
||||
return allExif_;
|
||||
}
|
||||
|
||||
void Metadata::SetDateYear(const VariantData &dateYear)
|
||||
{
|
||||
dateYear_ = get<string>(dateYear);
|
||||
}
|
||||
|
||||
const string &Metadata::getDateYear() const
|
||||
{
|
||||
return dateYear_;
|
||||
}
|
||||
|
||||
void Metadata::SetDateMonth(const VariantData &dateMonth)
|
||||
{
|
||||
dateMonth_ = get<string>(dateMonth);
|
||||
}
|
||||
|
||||
const string &Metadata::getDateMonth() const
|
||||
{
|
||||
return dateMonth_;
|
||||
}
|
||||
|
||||
void Metadata::SetDateDay(const VariantData &dateDay)
|
||||
{
|
||||
dateDay_ = get<string>(dateDay);
|
||||
}
|
||||
|
||||
const string &Metadata::getDateDay() const
|
||||
{
|
||||
return dateDay_;
|
||||
}
|
||||
|
||||
#ifdef MEDIALIBRARY_COMPATIBILITY
|
||||
void Metadata::SetPhotoSubType(const VariantData &photoSubType)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user