Subversion Repositories spk

Rev

Rev 129 | Rev 161 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 129 Rev 133
Line 9... Line 9...
9
 
9
 
10
#undef GetTempPath
10
#undef GetTempPath
11
#undef GetCurrentDirectory
11
#undef GetCurrentDirectory
12
 
12
 
13
namespace PluginManager {
13
namespace PluginManager {
14
 
-
 
15
	void PackageBrowser::FindPackages_Files(System::String ^dir)
-
 
16
	{
-
 
17
		for ( int type = 0; type < 2; type++ )
-
 
18
		{
-
 
19
			array <System::String ^> ^Files = nullptr;
-
 
20
			if ( type == 0 )
-
 
21
				Files = Directory::GetFiles(dir, "*.spk");
-
 
22
			else if ( type == 1 )
-
 
23
				Files = Directory::GetFiles(dir, "*.xsp");
-
 
24
			else
-
 
25
				break;
-
 
26
 
-
 
27
			for ( int i = 0; i < Files->Length; i++ )
-
 
28
			{
-
 
29
				CyString file = CyStringFromSystemString(Files[i]);
-
 
30
				int error = 0;
-
 
31
				CBaseFile *p = m_pPackages->OpenPackage(file, &error, 0, SPKREAD_NODATA);
-
 
32
				if ( !p )
-
 
33
					continue;
-
 
34
				if ( p->IsMod() || m_pPackages->FindSpkPackage(p->name(), p->author()) )
-
 
35
				{
-
 
36
					delete p;
-
 
37
					continue;
-
 
38
				}
-
 
39
 
-
 
40
				// check its for the correct game
-
 
41
				if ( !p->CheckGameCompatability(m_pPackages->GetGame()) )
-
 
42
				{
-
 
43
					delete p;
-
 
44
					continue;
-
 
45
				}
-
 
46
 
-
 
47
				// check if its already on the list
-
 
48
				bool found = false;
-
 
49
				for ( CBaseFile *checkp = m_lAvailablePackages->First(); checkp; checkp = m_lAvailablePackages->Next() )
-
 
50
				{
-
 
51
					if ( p->name().Compare(checkp->name()) && p->author().Compare(checkp->author()) )
-
 
52
					{
-
 
53
						found = true;
-
 
54
						break;
-
 
55
					}
-
 
56
				}
-
 
57
 
-
 
58
				if ( found )
-
 
59
				{
-
 
60
					delete p;
-
 
61
					continue;
-
 
62
				}
-
 
63
 
-
 
64
				if ( p->GetIcon() )
-
 
65
				{
-
 
66
					bool addedIcon = false;
-
 
67
					p->ReadIconFileToMemory();
-
 
68
					p->GetIcon()->SetFilename(m_pPackages->GetTempDirectory().FindReplace("\\", "/") + "/" + p->author() + "_" + p->name() + "." + p->GetIconExt());
-
 
69
					p->GetIcon()->SetFullDir(m_pPackages->GetTempDirectory());
-
 
70
					if ( p->GetIcon()->UncompressData() )
-
 
71
					{
-
 
72
						if ( p->GetIcon()->writeFilePointer() )
-
 
73
							addedIcon = true;
-
 
74
					}
-
 
75
 
-
 
76
					if ( !addedIcon )
-
 
77
						p->SetIcon(NULL, "");
-
 
78
				}
-
 
79
 
-
 
80
				// get an advert to display
-
 
81
				if ( p->GetFirstFile(FILETYPE_ADVERT) )
-
 
82
				{
-
 
83
					bool done = false;
-
 
84
					C_File *f = p->GetFirstFile(FILETYPE_ADVERT);
-
 
85
					if ( p->ReadFileToMemory(f) )
-
 
86
					{
-
 
87
						f->SetFullDir(m_pPackages->GetTempDirectory());
-
 
88
						if ( f->UncompressData() )
-
 
89
						{
-
 
90
							if ( f->writeFilePointer() )
-
 
91
								done = true;
-
 
92
						}
-
 
93
					}
-
 
94
 
-
 
95
					if ( !done )
-
 
96
						f->DeleteData();
-
 
97
				}
-
 
98
 
-
 
99
				m_lAvailablePackages->push_back(p);				
-
 
100
			}
-
 
101
		}
-
 
102
	}
-
 
103
 
14
 
104
	bool PackageBrowser::AnyPackages()
15
	bool PackageBrowser::AnyPackages()
105
	{
16
	{
106
		if ( m_lAvailablePackages && m_lAvailablePackages->size() )
17
		if ( m_lAvailablePackages && m_lAvailablePackages->size() )
107
			return true;
18
			return true;
108
		if ( m_pPackages->AnyAvailablePackages() )
19
		if ( m_pPackages->AnyAvailablePackages() )
109
			return true;
20
			return true;
110
		return false;
21
		return false;
111
	}
-
 
112
 
-
 
113
	void PackageBrowser::FindPackages_Directory(String ^dir)
-
 
114
	{
-
 
115
		if ( Directory::Exists(dir) )
-
 
116
		{
-
 
117
			this->FindPackages_Files(dir);
-
 
118
 
-
 
119
			array <System::String ^> ^Dirs = Directory::GetDirectories(dir);
-
 
120
			if ( Dirs )
-
 
121
			{
-
 
122
				for ( int i = 0; i < Dirs->Length; i++ )
-
 
123
					this->FindPackages_Directory(Dirs[i]);
-
 
124
			}
-
 
125
		}
-
 
126
	}
-
 
127
 
-
 
128
	void PackageBrowser::FindPackages()
-
 
129
	{
-
 
130
		if ( !m_lAvailablePackages )
-
 
131
			m_lAvailablePackages = new CLinkList<CBaseFile>;
-
 
132
		
-
 
133
		String ^curDir = System::IO::FileInfo(System::Windows::Forms::Application::ExecutablePath).DirectoryName;
-
 
134
		this->FindPackages_Directory(curDir + "\\Addons");
-
 
135
		this->FindPackages_Directory(curDir + "\\Downloads");
-
 
136
		this->FindPackages_Directory(".\\Addons");
-
 
137
		this->FindPackages_Directory(".\\Downloads");
-
 
138
		this->FindPackages_Directory(m_sCurrentDir + "\\Addons");
-
 
139
		this->FindPackages_Directory(m_sCurrentDir + "\\Downloads");
-
 
140
 
-
 
141
		// find packages from registry key
-
 
142
		RegistryKey ^searchKey = Registry::CurrentUser->OpenSubKey("Software\\Egosoft\\SuperBox");
-
 
143
		if ( searchKey )
-
 
144
		{
-
 
145
			String ^dir = System::Convert::ToString(searchKey->GetValue("Addons"));
-
 
146
			if ( dir )
-
 
147
				this->FindPackages_Directory(dir);
-
 
148
		}
-
 
149
 
-
 
150
		// find packages from DVD
-
 
151
		cli::array<IO::DriveInfo ^> ^Drives = IO::DriveInfo::GetDrives();
-
 
152
		if ( Drives )
-
 
153
		{
-
 
154
			for ( int i = 0; i < Drives->Length; i++ )
-
 
155
			{
-
 
156
				IO::DriveInfo ^info = Drives[i];
-
 
157
				if ( info->DriveType != IO::DriveType::CDRom )
-
 
158
					continue;
-
 
159
				if ( info->IsReady )
-
 
160
					this->FindPackages_Directory(info->RootDirectory + "XPluginManager");
-
 
161
			}
-
 
162
		}
-
 
163
 
-
 
164
		// read all game directories extra content
-
 
165
		this->FindPackages_Directory(_US((m_pPackages->getCurrentDirectory().findReplace("\\", "/") + "/ExtraContent").findReplace("//", "/")));
-
 
166
 
-
 
167
		int num = 0;
-
 
168
		for ( CBaseFile *p = m_lAvailablePackages->First(); p; p = m_lAvailablePackages->Next() )
-
 
169
		{
-
 
170
			p->SetNum(num);
-
 
171
			++num;
-
 
172
		}
-
 
173
	}
22
	}
174
 
23
 
175
	bool PackageBrowser::CheckValidPackage(CBaseFile *p)
24
	bool PackageBrowser::CheckValidPackage(CBaseFile *p)
176
	{
25
	{
177
		if ( !p->CheckGameCompatability(m_pPackages->GetGame()) )
26
		if ( !p->CheckGameCompatability(m_pPackages->GetGame()) )