00001 class file_move_callback_manager
00002 {
00003 public:
00004 void on_library_add_items(const pfc::list_base_const_t<metadb_handle_ptr> & p_data);
00005 void on_library_remove_items(const pfc::list_base_const_t<metadb_handle_ptr> & p_data);
00006
00007 void on_moved(const pfc::string_list_const & p_from,const pfc::string_list_const & p_to);
00008 void on_copied(const pfc::string_list_const & p_from,const pfc::string_list_const & p_to);
00009
00010 void on_hint(const pfc::list_base_const_t<metadb_handle_ptr> & p_list,const pfc::list_base_const_t<const file_info*> & p_infos,const pfc::list_base_const_t<t_filestats> & p_stats);
00011
00012 void run_callback();
00013 private:
00014 metadb_handle_list m_removed;
00015 metadb_handle_list m_added;
00016
00017 pfc::string_list_impl m_copy_from,m_copy_to;
00018 pfc::string_list_impl m_move_from,m_move_to;
00019
00020 metadb_handle_list m_hint_handles;
00021 pfc::list_t<file_info_const_impl> m_hint_infos;
00022 pfc::list_t<t_filestats> m_hint_stats;
00023 };
00024
00025 class file_move_helper
00026 {
00027 public:
00028 file_move_helper();
00029 ~file_move_helper();
00030 file_move_helper(const file_move_helper & p_src);
00031 bool take_snapshot(const char * p_path,abort_callback & p_abort);
00032 bool on_moved(const char * p_path,abort_callback & p_abort);
00033 bool on_copied(const char * p_path,abort_callback & p_abort);
00034 bool on_moved(const char * p_path,abort_callback & p_abort,file_move_callback_manager & p_cb);
00035 bool on_copied(const char * p_path,abort_callback & p_abort,file_move_callback_manager & p_cb);
00036
00037 static bool g_on_deleted(const pfc::list_base_const_t<const char *> & p_files);
00038
00039 static t_size g_filter_dead_files_sorted_make_mask(pfc::list_base_t<metadb_handle_ptr> & p_data,const pfc::list_base_const_t<const char*> & p_dead,bit_array_var & p_mask);
00040 static t_size g_filter_dead_files_sorted(pfc::list_base_t<metadb_handle_ptr> & p_data,const pfc::list_base_const_t<const char*> & p_dead);
00041 static t_size g_filter_dead_files(pfc::list_base_t<metadb_handle_ptr> & p_data,const pfc::list_base_const_t<const char*> & p_dead);
00042
00043 private:
00044
00045 struct t_entry
00046 {
00047 playable_location_impl m_location;
00048 file_info_i m_info;
00049 t_filestats m_stats;
00050 bool m_have_info;
00051 };
00052
00053 metadb_handle_list m_source_handles;
00054
00055 pfc::array_t<t_entry> m_data;
00056
00057 const char * get_source_path() const;
00058
00059 void make_new_item_list(pfc::list_base_t<metadb_handle_ptr> & p_out,const char * p_path,file_move_callback_manager & p_cb);
00060 };