foobar2000 SDK  2015-01-14
tag_processor.h
Go to the documentation of this file.
1 PFC_DECLARE_EXCEPTION(exception_tag_not_found,exception_io_data,"Tag not found");
2 
6 class NOVTABLE tag_write_callback {
7 public:
10  virtual bool open_temp_file(service_ptr_t<file> & p_out,abort_callback & p_abort) = 0;
11 protected:
14 private:
15  tag_write_callback(const tag_write_callback &) {throw pfc::exception_not_implemented();}
16  const tag_write_callback & operator=(const tag_write_callback &) {throw pfc::exception_not_implemented();}
17 };
18 
20 public:
21  bool open_temp_file(service_ptr_t<file> & p_out,abort_callback & p_abort) {return false;}
22 };
23 
25 class NOVTABLE tag_processor_id3v2 : public service_base
26 {
27 public:
28  virtual void read(const service_ptr_t<file> & p_file,file_info & p_info,abort_callback & p_abort) = 0;
29  virtual void write(const service_ptr_t<file> & p_file,const file_info & p_info,abort_callback & p_abort) = 0;
30  virtual void write_ex(tag_write_callback & p_callback,const service_ptr_t<file> & p_file,const file_info & p_info,abort_callback & p_abort) = 0;
31 
32  static bool g_get(service_ptr_t<tag_processor_id3v2> & p_out);
33  static void g_skip(const service_ptr_t<file> & p_file,t_filesize & p_size_skipped,abort_callback & p_abort);
34  static void g_skip_at(const service_ptr_t<file> & p_file,t_filesize p_base, t_filesize & p_size_skipped,abort_callback & p_abort);
35  static t_size g_multiskip(const service_ptr_t<file> & p_file,t_filesize & p_size_skipped,abort_callback & p_abort);
36  static void g_remove(const service_ptr_t<file> & p_file,t_filesize & p_size_removed,abort_callback & p_abort);
37  static void g_remove_ex(tag_write_callback & p_callback,const service_ptr_t<file> & p_file,t_filesize & p_size_removed,abort_callback & p_abort);
38 
39  FB2K_MAKE_SERVICE_INTERFACE_ENTRYPOINT(tag_processor_id3v2);
40 };
41 
43 class NOVTABLE tag_processor_trailing : public service_base
44 {
45 public:
46  enum {
47  flag_apev2 = 1,
48  flag_id3v1 = 2,
49  };
50 
51  virtual void read(const service_ptr_t<file> & p_file,file_info & p_info,abort_callback & p_abort) = 0;
52  virtual void write(const service_ptr_t<file> & p_file,const file_info & p_info,unsigned p_flags,abort_callback & p_abort) = 0;
53  virtual void remove(const service_ptr_t<file> & p_file,abort_callback & p_abort) = 0;
54  virtual bool is_id3v1_sufficient(const file_info & p_info) = 0;
55  virtual void truncate_to_id3v1(file_info & p_info) = 0;
56  virtual void read_ex(const service_ptr_t<file> & p_file,file_info & p_info,t_filesize & p_tagoffset,abort_callback & p_abort) = 0;
57 
58  void write_id3v1(const service_ptr_t<file> & p_file,const file_info & p_info,abort_callback & p_abort);
59  void write_apev2(const service_ptr_t<file> & p_file,const file_info & p_info,abort_callback & p_abort);
60  void write_apev2_id3v1(const service_ptr_t<file> & p_file,const file_info & p_info,abort_callback & p_abort);
61 
62 
63  FB2K_MAKE_SERVICE_INTERFACE_ENTRYPOINT(tag_processor_trailing);
64 };
65 
66 namespace tag_processor {
68  void write_id3v1(const service_ptr_t<file> & p_file,const file_info & p_info,abort_callback & p_abort);
70  void write_apev2(const service_ptr_t<file> & p_file,const file_info & p_info,abort_callback & p_abort);
72  void write_apev2_id3v1(const service_ptr_t<file> & p_file,const file_info & p_info,abort_callback & p_abort);
74  void write_id3v2(const service_ptr_t<file> & p_file,const file_info & p_info,abort_callback & p_abort);
76  void write_id3v2_id3v1(const service_ptr_t<file> & p_file,const file_info & p_info,abort_callback & p_abort);
78  void write_multi(const service_ptr_t<file> & p_file,const file_info & p_info,abort_callback & p_abort,bool p_write_id3v1,bool p_write_id3v2,bool p_write_apev2);
80  void write_multi_ex(tag_write_callback & p_callback,const service_ptr_t<file> & p_file,const file_info & p_info,abort_callback & p_abort,bool p_write_id3v1,bool p_write_id3v2,bool p_write_apev2);
82  void remove_trailing(const service_ptr_t<file> & p_file,abort_callback & p_abort);
84  bool remove_id3v2(const service_ptr_t<file> & p_file,abort_callback & p_abort);
86  void remove_id3v2_trailing(const service_ptr_t<file> & p_file,abort_callback & p_abort);
88  void read_trailing(const service_ptr_t<file> & p_file,file_info & p_info,abort_callback & p_abort);
90  void read_trailing_ex(const service_ptr_t<file> & p_file,file_info & p_info,t_filesize & p_tagoffset,abort_callback & p_abort);
92  void read_id3v2(const service_ptr_t<file> & p_file,file_info & p_info,abort_callback & p_abort);
94  void read_id3v2_trailing(const service_ptr_t<file> & p_file,file_info & p_info,abort_callback & p_abort);
95 
96  void skip_id3v2(const service_ptr_t<file> & p_file,t_filesize & p_size_skipped,abort_callback & p_abort);
97 
98  bool is_id3v1_sufficient(const file_info & p_info);
99  void truncate_to_id3v1(file_info & p_info);
100 
101 };
void read(const service_ptr_t< file > &p_file, abort_callback &p_abort, pfc::string_base &p_out, bool &is_utf8)
void write_id3v1(const service_ptr_t< file > &p_file, const file_info &p_info, abort_callback &p_abort)
Strips all recognized tags from the file and writes an ID3v1 tag with specified info.
bool open_temp_file(service_ptr_t< file > &p_out, abort_callback &p_abort)
Called only once per operation (or not called at all when operation being performed can be done in-pl...
Definition: tag_processor.h:21
void write_id3v2_id3v1(const service_ptr_t< file > &p_file, const file_info &p_info, abort_callback &p_abort)
Strips all recognized tags from the file and writes ID3v1+ID3v2 tags with specified info...
void remove_id3v2_trailing(const service_ptr_t< file > &p_file, abort_callback &p_abort)
Removes ID3v2 and trailing tags from specified file (not to be confused with trailing ID3v2 which are...
For internal use - call tag_processor namespace methods instead.
Definition: tag_processor.h:25
void read_trailing(const service_ptr_t< file > &p_file, file_info &p_info, abort_callback &p_abort)
Reads trailing tags from the file.
Callback interface for write-tags-to-temp-file-and-swap scheme, used for ID3v2 tag updates and such w...
Definition: tag_processor.h:6
void write_multi_ex(tag_write_callback &p_callback, const service_ptr_t< file > &p_file, const file_info &p_info, abort_callback &p_abort, bool p_write_id3v1, bool p_write_id3v2, bool p_write_apev2)
Strips all recognized tags from the file and writes new tags with specified info according to paramet...
void write_apev2(const service_ptr_t< file > &p_file, const file_info &p_info, abort_callback &p_abort)
Strips all recognized tags from the file and writes an APEv2 tag with specified info.
void write_id3v2(const service_ptr_t< file > &p_file, const file_info &p_info, abort_callback &p_abort)
Strips all recognized tags from the file and writes an ID3v2 tag with specified info.
tag_write_callback(const tag_write_callback &)
Definition: tag_processor.h:15
void write_apev2_id3v1(const service_ptr_t< file > &p_file, const file_info &p_info, abort_callback &p_abort)
Strips all recognized tags from the file and writes ID3v1+APEv2 tags with specified info...
void read_trailing_ex(const service_ptr_t< file > &p_file, file_info &p_info, t_filesize &p_tagoffset, abort_callback &p_abort)
Reads trailing tags from the file. Extended version, returns offset at which parsed tags start...
Main interface class for information about some playable object.
Definition: file_info.h:73
void remove_trailing(const service_ptr_t< file > &p_file, abort_callback &p_abort)
Removes trailing tags from the file.
PFC_DECLARE_EXCEPTION(exception_tag_not_found, exception_io_data,"Tag not found")
const tag_write_callback & operator=(const tag_write_callback &)
Definition: tag_processor.h:16
size_t t_size
Definition: int_types.h:48
void read_id3v2(const service_ptr_t< file > &p_file, file_info &p_info, abort_callback &p_abort)
Reads ID3v2 tags from specified file.
For internal use - call tag_processor namespace methods instead.
Definition: tag_processor.h:43
bool remove_id3v2(const service_ptr_t< file > &p_file, abort_callback &p_abort)
Removes ID3v2 tags from the file. Returns true when a tag was removed, false when the file was not al...
void truncate_to_id3v1(file_info &p_info)
bool is_id3v1_sufficient(const file_info &p_info)
Base class for all service classes. Provides interfaces for reference counter and querying for differ...
Definition: service.h:333
void write(const service_ptr_t< file > &p_file, abort_callback &p_abort, const char *p_string, bool is_utf8)
void skip_id3v2(const service_ptr_t< file > &p_file, t_filesize &p_size_skipped, abort_callback &p_abort)
t_uint64 t_filesize
Type used for file size related variables.
Definition: filesystem.h:8
void read_id3v2_trailing(const service_ptr_t< file > &p_file, file_info &p_info, abort_callback &p_abort)
Reads ID3v2 and trailing tags from specified file (not to be confused with trailing ID3v2 which are n...
void write_multi(const service_ptr_t< file > &p_file, const file_info &p_info, abort_callback &p_abort, bool p_write_id3v1, bool p_write_id3v2, bool p_write_apev2)
Strips all recognized tags from the file and writes new tags with specified info according to paramet...