tag_processor.h

Go to the documentation of this file.
00001 PFC_DECLARE_EXCEPTION(exception_tag_not_found,exception_io_data,"Tag not found");
00002 
00006 class NOVTABLE tag_write_callback {
00007 public:
00010         virtual bool open_temp_file(service_ptr_t<file> & p_out,abort_callback & p_abort) = 0;  
00011 protected:
00012         tag_write_callback() {}
00013         ~tag_write_callback() {}
00014 private:
00015         tag_write_callback(const tag_write_callback &) {throw pfc::exception_not_implemented();}
00016         const tag_write_callback & operator=(const tag_write_callback &) {throw pfc::exception_not_implemented();}
00017 };
00018 
00019 class tag_write_callback_dummy : public tag_write_callback {
00020 public:
00021         bool open_temp_file(service_ptr_t<file> & p_out,abort_callback & p_abort) {return false;}
00022 };
00023 
00025 class NOVTABLE tag_processor_id3v2 : public service_base
00026 {
00027 public:
00028         virtual void read(const service_ptr_t<file> & p_file,file_info & p_info,abort_callback & p_abort) = 0;
00029         virtual void write(const service_ptr_t<file> & p_file,const file_info & p_info,abort_callback & p_abort) = 0;
00030         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;
00031 
00032         static bool g_get(service_ptr_t<tag_processor_id3v2> & p_out);
00033         static void g_skip(const service_ptr_t<file> & p_file,t_filesize & p_size_skipped,abort_callback & p_abort);
00034         static void g_remove(const service_ptr_t<file> & p_file,t_filesize & p_size_removed,abort_callback & p_abort);
00035         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);
00036 
00037         FB2K_MAKE_SERVICE_INTERFACE_ENTRYPOINT(tag_processor_id3v2);
00038 };
00039 
00041 class NOVTABLE tag_processor_trailing : public service_base
00042 {
00043 public:
00044         enum {
00045                 flag_apev2 = 1,
00046                 flag_id3v1 = 2,
00047         };
00048 
00049         virtual void read(const service_ptr_t<file> & p_file,file_info & p_info,abort_callback & p_abort) = 0;
00050         virtual void write(const service_ptr_t<file> & p_file,const file_info & p_info,unsigned p_flags,abort_callback & p_abort) = 0;
00051         virtual void remove(const service_ptr_t<file> & p_file,abort_callback & p_abort) = 0;
00052         virtual bool is_id3v1_sufficient(const file_info & p_info) = 0;
00053         virtual void truncate_to_id3v1(file_info & p_info) = 0;
00054         virtual void read_ex(const service_ptr_t<file> & p_file,file_info & p_info,t_filesize & p_tagoffset,abort_callback & p_abort) = 0;
00055 
00056         void write_id3v1(const service_ptr_t<file> & p_file,const file_info & p_info,abort_callback & p_abort);
00057         void write_apev2(const service_ptr_t<file> & p_file,const file_info & p_info,abort_callback & p_abort);
00058         void write_apev2_id3v1(const service_ptr_t<file> & p_file,const file_info & p_info,abort_callback & p_abort);
00059 
00060 
00061         FB2K_MAKE_SERVICE_INTERFACE_ENTRYPOINT(tag_processor_trailing);
00062 };
00063 
00064 namespace tag_processor {
00066         void write_id3v1(const service_ptr_t<file> & p_file,const file_info & p_info,abort_callback & p_abort);
00068         void write_apev2(const service_ptr_t<file> & p_file,const file_info & p_info,abort_callback & p_abort);
00070         void write_apev2_id3v1(const service_ptr_t<file> & p_file,const file_info & p_info,abort_callback & p_abort);
00072         void write_id3v2(const service_ptr_t<file> & p_file,const file_info & p_info,abort_callback & p_abort);
00074         void write_id3v2_id3v1(const service_ptr_t<file> & p_file,const file_info & p_info,abort_callback & p_abort);
00076         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);
00078         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);
00080         void remove_trailing(const service_ptr_t<file> & p_file,abort_callback & p_abort);
00082         bool remove_id3v2(const service_ptr_t<file> & p_file,abort_callback & p_abort);
00084         void remove_id3v2_trailing(const service_ptr_t<file> & p_file,abort_callback & p_abort);
00086         void read_trailing(const service_ptr_t<file> & p_file,file_info & p_info,abort_callback & p_abort);
00088         void read_trailing_ex(const service_ptr_t<file> & p_file,file_info & p_info,t_filesize & p_tagoffset,abort_callback & p_abort);
00090         void read_id3v2(const service_ptr_t<file> & p_file,file_info & p_info,abort_callback & p_abort);
00092         void read_id3v2_trailing(const service_ptr_t<file> & p_file,file_info & p_info,abort_callback & p_abort);
00093 
00094         void skip_id3v2(const service_ptr_t<file> & p_file,t_filesize & p_size_skipped,abort_callback & p_abort);
00095 
00096         bool is_id3v1_sufficient(const file_info & p_info);
00097         void truncate_to_id3v1(file_info & p_info);
00098 
00099 };

Generated on Thu Aug 28 21:15:34 2008 for foobar2000 SDK by  doxygen 1.5.5