1 // 2 // This file is part of the aMule Project. 3 // 4 // Copyright (c) 2003-2011 aMule Team ( admin@amule.org / http://www.amule.org ) 5 // Copyright (c) 2002-2011 Merkur ( devs@emule-project.net / http://www.emule-project.net ) 6 // 7 // Any parts of this program derived from the xMule, lMule or eMule project, 8 // or contributed by third-party developers are copyrighted by their 9 // respective authors. 10 // 11 // This program is free software; you can redistribute it and/or modify 12 // it under the terms of the GNU General Public License as published by 13 // the Free Software Foundation; either version 2 of the License, or 14 // (at your option) any later version. 15 // 16 // This program is distributed in the hope that it will be useful, 17 // but WITHOUT ANY WARRANTY; without even the implied warranty of 18 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 19 // GNU General Public License for more details. 20 // 21 // You should have received a copy of the GNU General Public License 22 // along with this program; if not, write to the Free Software 23 // Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA 24 // 25 26 #ifndef SHAREDFILELIST_H 27 #define SHAREDFILELIST_H 28 29 #include <list> 30 #include <map> 31 #include <wx/thread.h> // Needed for wxMutex 32 33 #include "Types.h" // Needed for uint16 and uint64 34 35 struct UnknownFile_Struct; 36 37 class CKnownFileList; 38 class CKnownFile; 39 class CMemFile; 40 class CMD4Hash; 41 class CServer; 42 class CPublishKeywordList; 43 class CPath; 44 class CAICHHash; 45 class CThreadTask; 46 47 48 typedef std::map<CMD4Hash,CKnownFile*> CKnownFileMap; 49 typedef std::map<wxString, CPath> StringPathMap; 50 typedef std::list<CPath> PathList; 51 52 class CSharedFileList { 53 public: 54 CSharedFileList(CKnownFileList* in_filelist); 55 ~CSharedFileList(); 56 void Reload(); 57 void SafeAddKFile(CKnownFile* toadd, bool bOnlyAdd = false); 58 void RemoveFile(CKnownFile* toremove); 59 CKnownFile* GetFileByID(const CMD4Hash& filehash); 60 short GetFilePriorityByID(const CMD4Hash& filehash); 61 const CKnownFile* GetFileByIndex(unsigned int index) const; GetCount()62 size_t GetCount() { wxMutexLocker lock(list_mut); return m_Files_map.size(); } GetFileCount()63 size_t GetFileCount() { wxMutexLocker lock(list_mut); return m_Files_map.size(); } 64 void CopyFileList(std::vector<CKnownFile*>& out_list) const; 65 void UpdateItem(CKnownFile* toupdate); 66 void GetSharedFilesByDirectory(const wxString& directory, CKnownFilePtrList& list); 67 void ClearED2KPublishInfo(); 68 void RepublishFile(CKnownFile* pFile); 69 void Process(); PublishNextTurn()70 void PublishNextTurn() { m_lastPublishED2KFlag = true; } 71 bool RenameFile(CKnownFile* pFile, const CPath& newName); 72 73 /** 74 * Returns the name of a folder visible to the public. 75 * 76 * @param dir The full path to a shared directory. 77 * @return The name of the shared directory that will be visible to the public. 78 * 79 * This function is used to hide sensitive data considering the directory structure of the client. 80 * The returned public name consists of only subdirectories that are shared. 81 * Example: /ed2k/shared/games/tetris -> "games/tetris" if /ed2k/shared are not marked as shared 82 */ 83 wxString GetPublicSharedDirName(const CPath& dir); 84 const CPath* GetDirForPublicSharedDirName(const wxString& strSharedDir) const; 85 86 /** 87 * Returns true, if the specified path points to a shared directory or single shared file. 88 */ 89 bool IsShared(const CPath& path) const; 90 91 /* Kad Stuff */ 92 void Publish(); 93 void AddKeywords(CKnownFile* pFile); 94 void RemoveKeywords(CKnownFile* pFile); 95 // This is actually unused, but keep it here - will be needed later. 96 void ClearKadSourcePublishInfo(); 97 98 /** 99 * Checks for files which missing or wrong AICH hashes. 100 * Those that are found are scheduled for ACIH hashing. 101 */ 102 void CheckAICHHashes(const std::list<CAICHHash>& hashes); 103 104 private: 105 typedef std::list<CThreadTask *> TaskList; 106 107 bool AddFile(CKnownFile* pFile); 108 unsigned AddFilesFromDirectory(const CPath& directory, TaskList & hashTasks); 109 void FindSharedFiles(); 110 bool reloading; 111 112 void SendListToServer(); 113 uint32 m_lastPublishED2K; 114 bool m_lastPublishED2KFlag; 115 116 CKnownFileList* filelist; 117 118 CKnownFileMap m_Files_map; 119 mutable wxMutex list_mut; 120 121 StringPathMap m_PublicSharedDirNames; //! used for mapping strings to shared directories 122 123 /* Kad Stuff */ 124 CPublishKeywordList* m_keywords; 125 unsigned int m_currFileSrc; 126 unsigned int m_currFileNotes; 127 unsigned int m_currFileKey; 128 uint32 m_lastPublishKadSrc; 129 uint32 m_lastPublishKadNotes; 130 }; 131 132 #endif // SHAREDFILELIST_H 133 // File_checked_for_headers 134