annotate foosdk/sdk/foobar2000/SDK/commandline.h @ 1:20d02a178406 default tip

*: check in everything else yay
author Paper <paper@tflc.us>
date Mon, 05 Jan 2026 02:15:46 -0500
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1 #pragma once
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3 //! Service for handling commandline arguments passed to foobar2000.exe
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4 class NOVTABLE commandline_handler : public service_base
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
6 public:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
7 enum result
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
8 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
9 RESULT_NOT_OURS,//not our command
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
10 RESULT_PROCESSED,//command processed
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
11 RESULT_PROCESSED_EXPECT_FILES,//command processed, we want to takeover file urls after this command
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
12 };
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
13 virtual result on_token(const char * token)=0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
14 virtual void on_file(const char* url) { (void)url; };//optional
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
15 virtual void on_files_done() {};//optional
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
16 virtual bool want_directories() {return false;}
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
17
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
18 FB2K_MAKE_SERVICE_INTERFACE_ENTRYPOINT(commandline_handler);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
19 };
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
20
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
21 //! Helper automatically turning passed file locations into metadb_handle objects (audio track references)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
22 class commandline_handler_metadb_handle : public commandline_handler {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
23 protected:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
24 void on_file(const char * url) override final;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
25 bool want_directories() override {return true;}
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
26 public:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
27 //! Override me
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
28 virtual result on_token(const char * token) override = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
29 //! Override me
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
30 virtual void on_files_done() override {};
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
31 //! Override me
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
32 virtual void on_file(const metadb_handle_ptr & ptr) = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
33 };
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
34
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
35 /*
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
36
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
37 how commandline_handler is used:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
38
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
39 scenario #1:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
40 creation => on_token() => deletion
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
41 scenario #2:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
42 creation => on_token() returning RESULT_PROCESSED_EXPECT_FILES => on_file(), on_file().... => on_files_done() => deletion
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
43 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
44
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
45 template<typename T>
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
46 class commandline_handler_factory_t : public service_factory_t<T> {};