1// Aseprite
2// Copyright (C) 2019-2020 Igara Studio S.A.
3// Copyright (C) 2016-2018 David Capello
4//
5// This program is distributed under the terms of
6// the End-User License Agreement for Aseprite.
7
8#ifndef APP_APP_CLI_PROCESSOR_H_INCLUDED
9#define APP_APP_CLI_PROCESSOR_H_INCLUDED
10#pragma once
11
12#include "app/cli/cli_delegate.h"
13#include "app/cli/cli_open_file.h"
14#include "app/doc_exporter.h"
15#include "app/util/open_batch.h"
16#include "doc/selected_layers.h"
17
18#include <memory>
19#include <set>
20#include <string>
21#include <vector>
22
23namespace doc {
24 class Sprite;
25}
26
27namespace app {
28
29 class AppOptions;
30 class Context;
31 class DocExporter;
32
33 class CliProcessor {
34 public:
35 CliProcessor(CliDelegate* delegate,
36 const AppOptions& options);
37 int process(Context* ctx);
38
39 // Public so it can be tested
40 static void FilterLayers(const doc::Sprite* sprite,
41 // By value because these vectors will be modified inside
42 std::vector<std::string> includes,
43 std::vector<std::string> excludes,
44 doc::SelectedLayers& filteredLayers);
45
46 private:
47 bool openFile(Context* ctx, CliOpenFile& cof);
48 void saveFile(Context* ctx, const CliOpenFile& cof);
49
50 void filterLayers(const doc::Sprite* sprite,
51 const CliOpenFile& cof,
52 doc::SelectedLayers& filteredLayers) {
53 CliProcessor::FilterLayers(
54 sprite,
55 cof.includeLayers,
56 cof.excludeLayers,
57 filteredLayers);
58 }
59
60 CliDelegate* m_delegate;
61 const AppOptions& m_options;
62 std::unique_ptr<DocExporter> m_exporter;
63
64 // Files already used in the CLI processing (e.g. when used to
65 // load a sequence of files) so we don't ask for them again.
66 std::set<std::string> m_usedFiles;
67 OpenBatchOfFiles m_batch;
68 };
69
70} // namespace app
71
72#endif
73