// Copyright 2023 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "chromeos/ash/services/recording/gif_file_writer.h"
#include <string_view>
#include "base/containers/span.h"
namespace recording {
GifFileWriter::GifFileWriter(
mojo::PendingRemote<mojom::DriveFsQuotaDelegate> drive_fs_quota_delegate,
const base::FilePath& gif_file_path,
RecordingFileIoHelper::Delegate* file_io_helper_delegate)
: gif_file_(gif_file_path,
base::File::FLAG_CREATE_ALWAYS | base::File::FLAG_WRITE),
file_io_helper_(gif_file_path,
std::move(drive_fs_quota_delegate),
file_io_helper_delegate) {}
GifFileWriter::~GifFileWriter() = default;
void GifFileWriter::WriteByte(uint8_t byte) {
WriteBytesAndCheck(base::byte_span_from_ref(byte));
}
void GifFileWriter::WriteBuffer(base::span<const uint8_t> buffer) {
WriteBytesAndCheck(buffer);
}
void GifFileWriter::WriteString(std::string_view string) {
WriteBytesAndCheck(base::as_byte_span(string));
}
void GifFileWriter::WriteShort(uint16_t value) {
WriteByte(value & 0xFF);
WriteByte(((value >> 8) & 0xFF));
}
void GifFileWriter::FlushFile() {
gif_file_.Flush();
}
void GifFileWriter::WriteBytesAndCheck(base::span<const uint8_t> data) {
if (!gif_file_.WriteAtCurrentPosAndCheck(data)) {
file_io_helper_.delegate()->NotifyFailure(mojom::RecordingStatus::kIoError);
return;
}
file_io_helper_.OnBytesWritten(data.size_bytes());
}
} // namespace recording