blob: a01588cb624ec4f93abcf4bb97d3589d35b04aec [file] [log] [blame]
// Copyright 2021 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 ASH_PROJECTOR_PROJECTOR_METADATA_CONTROLLER_H_
#define ASH_PROJECTOR_PROJECTOR_METADATA_CONTROLLER_H_
#include <memory>
#include <string>
#include "ash/ash_export.h"
#include "ash/projector/projector_metadata_model.h"
#include "base/memory/scoped_refptr.h"
#include "base/memory/weak_ptr.h"
#include "base/sequenced_task_runner.h"
#include "media/mojo/mojom/speech_recognition_service.mojom.h"
namespace base {
class FilePath;
} // namespace base
namespace ash {
// The controller in charge of recording and saving screencast metadata.
class ASH_EXPORT ProjectorMetadataController {
public:
ProjectorMetadataController();
ProjectorMetadataController(const ProjectorMetadataController&) = delete;
ProjectorMetadataController& operator=(const ProjectorMetadataController&) =
delete;
virtual ~ProjectorMetadataController();
// Invoked when recording is started to create a new instance of metadata
// model. Virtual for testing.
virtual void OnRecordingStarted();
// Records the transcript in metadata. Virtual for testing.
virtual void RecordTranscription(
const media::SpeechRecognitionResult& speech_result);
// Marks the next transcript as the beginning of a key idea.
// Virtual for testing.
virtual void RecordKeyIdea();
// Serializes the metadata and saves in storage. Virtual for testing.
virtual void SaveMetadata(const base::FilePath& video_file_path);
void SetProjectorMetadataModelForTest(
std::unique_ptr<ProjectorMetadata> metadata);
private:
std::unique_ptr<ProjectorMetadata> metadata_;
// A blocking task runner for file IO operations.
scoped_refptr<base::SequencedTaskRunner> blocking_task_runner_;
base::WeakPtrFactory<ProjectorMetadataController> weak_factory_{this};
};
} // namespace ash
#endif // ASH_PROJECTOR_PROJECTOR_METADATA_CONTROLLER_H_