Subversion Repositories spk

Rev

Rev 50 | Rev 121 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
1 cycrow 1
#include "..\StdAfx.h"
2
#include "..\listviewsorter.h"
3
 
4
#include "PackageBrowser.h"
5
#include "CheckUpdate.h"
6
#include "MainGui.h"
7
 
8
using namespace System::IO;
9
 
10
#undef GetTempPath
11
#undef GetCurrentDirectory
12
 
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;
50 cycrow 34
				if ( p->IsMod() || m_pPackages->FindSpkPackage(p->name(), p->author()) )
1 cycrow 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
				{
50 cycrow 51
					if ( p->name().Compare(checkp->name()) && p->author().Compare(checkp->author()) )
1 cycrow 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();
50 cycrow 68
					p->GetIcon()->SetFilename(m_pPackages->GetTempDirectory().FindReplace("\\", "/") + "/" + p->author() + "_" + p->name() + "." + p->GetIconExt());
1 cycrow 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
 
104
	bool PackageBrowser::AnyPackages()
105
	{
106
		if ( m_lAvailablePackages && m_lAvailablePackages->size() )
107
			return true;
108
		if ( m_pPackages->AnyAvailablePackages() )
109
			return true;
110
		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(SystemStringFromCyString(m_pPackages->GetCurrentDirectoryW().FindReplace("/","\\")) + "\\ExtraContent");
166
 
167
 
168
		int num = 0;
169
		for ( CBaseFile *p = m_lAvailablePackages->First(); p; p = m_lAvailablePackages->Next() )
170
		{
171
			p->SetNum(num);
172
			++num;
173
		}
174
	}
175
 
176
	bool PackageBrowser::CheckValidPackage(CBaseFile *p)
177
	{
178
		if ( !p->CheckGameCompatability(m_pPackages->GetGame()) )
179
			return false;
180
 
48 cycrow 181
		if ( !this->CheckCheat->Checked && p->pluginType() == PLUGIN_CHEAT )
1 cycrow 182
			return false;
48 cycrow 183
		if ( !this->CheckExperimental->Checked && p->pluginType() == PLUGIN_EXPERIMENTAL )
1 cycrow 184
			return false;
185
		if ( p->GetType() == TYPE_XSP && !this->CheckShips->Checked )
186
			return false;
187
		if ( this->CheckSigned->Checked && !p->IsSigned() )
188
			return false;
189
 
190
		return true;
191
	}
192
 
193
	bool PackageBrowser::CheckValidPackage(SAvailablePackage *p)
194
	{
195
		if ( p->iType == PACKAGETYPE_MOD )
196
			return false;
197
 
198
		if ( !p->lGames.empty() )
199
		{
200
			bool found = false;
201
			for ( SGameCompat *gc = p->lGames.First(); gc; gc = p->lGames.Next() ) {
202
				if ( gc->iGame == m_pPackages->GetGame() ) {
203
					found = true;
204
					break;
205
				}
206
			}
207
 
208
			if ( !found )
209
				return false;
210
		}
211
 
212
		if ( !this->CheckCheat->Checked && p->iPluginType == PLUGIN_CHEAT )
213
			return false;
214
		if ( !this->CheckExperimental->Checked && p->iPluginType == PLUGIN_EXPERIMENTAL )
215
			return false;
216
		if ( p->iType == PACKAGETYPE_SHIP && !this->CheckShips->Checked )
217
			return false;
218
		if ( this->CheckSigned->Checked && !p->bSigned )
219
			return false;
220
 
221
		return true;
222
	}
223
 
224
	ListViewItem ^PackageBrowser::CreateItem(CBaseFile *p)
225
	{
226
		ListViewItem ^item = gcnew ListViewItem(SystemStringFromCyString(p->GetLanguageName(m_pPackages->GetLanguage())), -1);
50 cycrow 227
		item->SubItems->Add(_US(p->author()));
228
		item->SubItems->Add(_US(p->version()));
229
		item->SubItems->Add(_US(p->creationDate()));
1 cycrow 230
		if ( p->GetType() == TYPE_SPK )
231
			item->SubItems->Add(SystemStringFromCyString(((CSpkFile *)p)->GetScriptTypeString(m_pPackages->GetLanguage())));
232
		else if ( p->GetType() == TYPE_XSP )
233
			item->SubItems->Add("Ship");
234
 
235
		if ( p->IsSigned() )
236
			item->SubItems->Add("Yes");
237
		else
238
			item->SubItems->Add("No");
239
 
240
 
241
		return item;
242
	}
243
 
244
	ListViewItem ^PackageBrowser::CreateItem(SAvailablePackage *p)
245
	{
246
		ListViewItem ^item = gcnew ListViewItem(SystemStringFromCyString(p->sName), -1);
247
		item->SubItems->Add(SystemStringFromCyString(p->sAuthor));
248
		item->SubItems->Add(SystemStringFromCyString(p->sVersion));
249
		item->SubItems->Add(SystemStringFromCyString(p->sUpdated));
250
 
251
		switch (p->iType)
252
		{
253
			case PACKAGETYPE_SHIP:
254
				item->SubItems->Add("Ship");
255
				break;
256
			case PACKAGETYPE_LIBRARY:
257
				item->SubItems->Add("Library");
258
				break;
259
			case PACKAGETYPE_CUSTOMSTART:
260
				item->SubItems->Add("Custom Start");
261
				break;
262
			case PACKAGETYPE_PATCH:
263
				item->SubItems->Add("Patch");
264
				break;
265
			case PACKAGETYPE_UPDATE:
266
				item->SubItems->Add("Update");
267
				break;
268
			case PACKAGETYPE_MOD:
269
				item->SubItems->Add("Mod");
270
				break;
271
			case PACKAGETYPE_FAKEPATCH:
272
				item->SubItems->Add("Fake Patch");
273
				break;
274
			case PACKAGETYPE_NORMAL:
275
				if ( p->iScriptType > 0 )
276
					item->SubItems->Add(SystemStringFromCyString(CSpkFile::GetScriptTypeStringStatic(p->iScriptType)));
277
				else
278
					item->SubItems->Add("Package");
279
				break;
280
		}
281
 
282
		if ( p->bSigned )
283
			item->SubItems->Add("Yes");
284
		else
285
			item->SubItems->Add("No");
286
 
287
		return item;
288
	}
289
 
290
	void PackageBrowser::UpdatePackages()
291
	{
292
		m_pPackages->AssignPackageNumbers();
293
		ListPackages->Items->Clear();
294
		ListPackages->Groups->Clear();
295
 
296
		ListViewGroup ^gNormal = gcnew ListViewGroup("Normal", HorizontalAlignment::Left);
297
		ListPackages->Groups->Add(gNormal);
298
		ListViewGroup ^gStable = gcnew ListViewGroup("Stable", HorizontalAlignment::Left);
299
		ListPackages->Groups->Add(gStable);
300
		ListViewGroup ^gExperimental = gcnew ListViewGroup("Experimental", HorizontalAlignment::Left);
301
		ListPackages->Groups->Add(gExperimental);
302
		ListViewGroup ^gCheat = gcnew ListViewGroup("Cheat", HorizontalAlignment::Left);
303
		ListPackages->Groups->Add(gCheat);
304
		ListViewGroup ^gShip = gcnew ListViewGroup("Ships", HorizontalAlignment::Left);
305
		ListPackages->Groups->Add(gShip);
306
		ListViewGroup ^gMod = gcnew ListViewGroup("Mods", HorizontalAlignment::Left);
307
		ListPackages->Groups->Add(gMod);
308
 
309
		if ( m_lAvailablePackages )
310
		{
311
			for ( CBaseFile *p = m_lAvailablePackages->First(); p; p = m_lAvailablePackages->Next() )
312
			{
313
				// check if its already installed
314
				if ( m_pPackages->FindPackage(p) )
315
					continue;
316
 
317
				if ( !this->CheckValidPackage(p) )
318
					continue;
319
 
320
 
321
				ListViewItem ^item = this->CreateItem(p);
322
				item->Group = gNormal;
323
				if ( p->GetType() == TYPE_XSP )
324
					item->Group = gShip;
325
				else if ( p->GetType() == TYPE_SPK )
326
				{
48 cycrow 327
					switch ( p->pluginType() ) {
328
						case PLUGIN_STABLE:			item->Group = gStable; break;
329
						case PLUGIN_EXPERIMENTAL:	item->Group = gExperimental; break;
330
						case PLUGIN_CHEAT:			item->Group = gCheat; break;
331
						case PLUGIN_MOD:			item->Group = gMod;	break;
1 cycrow 332
					}
333
				}
334
 
335
				item->Tag = p->GetNum();
336
				ListPackages->Items->Add(item);
337
				if ( p->GetIcon() )
338
					PluginManager::DisplayListIcon(p, ListPackages, item);
339
				else
340
				{
341
					if ( p->GetType() == TYPE_XSP )
342
						item->ImageIndex = this->imageList1->Images->IndexOfKey("ship.png");
343
					else if ( p->IsMod() || p->IsFakePatch() )
344
						item->ImageIndex = this->imageList1->Images->IndexOfKey("fake.png");
345
					else if ( p->GetType() == TYPE_SPK && ((CSpkFile *)p)->IsLibrary() )
346
						item->ImageIndex = this->imageList1->Images->IndexOfKey("library.png");
347
					else
348
						item->ImageIndex = this->imageList1->Images->IndexOfKey("package.png");
349
				}
350
			}
351
		}
352
 
353
		if ( this->checkBox1->Checked )
354
		{
355
			for ( SAvailablePackage *p = m_pPackages->GetAvailablePackageList()->First(); p; p = m_pPackages->GetAvailablePackageList()->Next() )
356
			{
357
				if ( m_pPackages->FindPackage(p->sName, p->sAuthor) ) continue;
358
				if ( !this->CheckValidPackage(p) ) continue;
359
 
360
				ListViewItem ^item = this->CreateItem(p);
361
				item->Group = gNormal;
362
				if ( p->iType == PACKAGETYPE_SHIP )
363
					item->Group = gShip;
364
				else 
365
				{
366
					switch ( p->iPluginType )
367
					{
368
						case PLUGIN_STABLE:
369
							item->Group = gStable;
370
							break;
371
						case PLUGIN_EXPERIMENTAL:
372
							item->Group = gExperimental;
373
							break;
374
						case PLUGIN_CHEAT:
375
							item->Group = gCheat;
376
							break;
377
						case PLUGIN_MOD:
378
							item->Group = gMod;
379
							break;
380
					}
381
				}
382
 
383
				item->ImageIndex = this->imageList1->Images->IndexOfKey("download");
384
 
385
 
386
				item->Tag = SystemStringFromCyString(p->sFilename);
387
				ListPackages->Items->Add(item);
388
			}
389
		}
390
 
391
		ListPackages->AutoResizeColumns(ColumnHeaderAutoResizeStyle::HeaderSize);
392
		PackageSelected(ListPackages, gcnew System::EventArgs());
393
	}
394
 
395
	void PackageBrowser::RemovePackages()
396
	{
397
		if ( m_lAvailablePackages )
398
		{
399
			for ( CBaseFile *p = m_lAvailablePackages->First(); p; p = m_lAvailablePackages->Next() )
400
			{
401
				if ( p->GetIcon() )
52 cycrow 402
					CFileIO::Remove(p->GetIcon()->GetFilePointer().ToString());
1 cycrow 403
				delete p;
404
			}
405
			m_lAvailablePackages->destroy();
406
			delete m_lAvailablePackages;
407
		}
408
		m_lAvailablePackages = NULL;
409
	}
410
 
411
	void PackageBrowser::UpdateControls()
412
	{
413
	}
414
 
415
	void PackageBrowser::SetupEvents()
416
	{
417
		ListPackages->SelectedIndexChanged += gcnew EventHandler(this, &PluginManager::PackageBrowser::PackageSelected);
418
		CheckCheat->Click += gcnew EventHandler(this, &PluginManager::PackageBrowser::CheckEvent);
419
		CheckShips->Click += gcnew EventHandler(this, &PluginManager::PackageBrowser::CheckEvent);
420
		CheckExperimental->Click += gcnew EventHandler(this, &PluginManager::PackageBrowser::CheckEvent);
421
		this->ListPackages->ColumnClick += gcnew ColumnClickEventHandler(this, &PluginManager::PackageBrowser::SortList);
422
	}
423
 
424
	void PackageBrowser::UpdateRatings(bool clear, int ease, int change, int rec)
425
	{
426
		if ( clear )
427
		{
428
			LabRecNA->Hide();
429
			LabChangeNA->Hide();
430
			LabEaseNA->Hide();
431
			PicEase1->Hide();
432
			PicEase2->Hide();
433
			PicEase3->Hide();
434
			PicEase4->Hide();
435
			PicEase5->Hide();
436
			PicChange1->Hide();
437
			PicChange2->Hide();
438
			PicChange3->Hide();
439
			PicChange4->Hide();
440
			PicChange5->Hide();
441
			PicRec1->Hide();
442
			PicRec2->Hide();
443
			PicRec3->Hide();
444
			PicRec4->Hide();
445
			PicRec5->Hide();
446
		}
447
 
448
		// ease of use rating
449
		if ( ease < 1 )
450
			LabEaseNA->Show();
451
		if ( ease >= 1 )
452
			PicEase1->Show();
453
		if ( ease >= 2 )
454
			PicEase2->Show();
455
		if ( ease >= 3 )
456
			PicEase3->Show();
457
		if ( ease >= 4 )
458
			PicEase4->Show();
459
		if ( ease >= 5 )
460
			PicEase5->Show();
461
 
462
		// game changing rating
463
		if ( change < 1 )
464
			LabChangeNA->Show();
465
		if ( change >= 1 )
466
			PicChange1->Show();
467
		if ( change >= 2 )
468
			PicChange2->Show();
469
		if ( change >= 3 )
470
			PicChange3->Show();
471
		if ( change >= 4 )
472
			PicChange4->Show();
473
		if ( change >= 5 )
474
			PicChange5->Show();
475
 
476
		// Recommanded rating
477
		if ( rec < 1 )
478
			LabRecNA->Show();
479
		if ( rec >= 1 )
480
			PicRec1->Show();
481
		if ( rec >= 2 )
482
			PicRec2->Show();
483
		if ( rec >= 3 )
484
			PicRec3->Show();
485
		if ( rec >= 4 )
486
			PicRec4->Show();
487
		if ( rec >= 5 )
488
			PicRec5->Show();
489
	}
490
 
491
	void PackageBrowser::PackageSelected(System::Object ^Sender, System::EventArgs ^E)
492
	{
493
		this->PictureBox->Image = nullptr;
494
 
495
		UpdateRatings(true, -1, -1, -1);
496
 
497
		this->button1->Visible = false;
498
		bool enabled = false;
499
		CBaseFile *p = NULL;
500
		SAvailablePackage *ap = NULL;
501
		if ( ListPackages->SelectedItems->Count )
502
		{
503
			ListViewItem ^item = ListPackages->SelectedItems[0];
504
			if ( item )
505
			{
506
				CyString sNum = CyStringFromSystemString(Convert::ToString(item->Tag));
507
				if ( sNum.IsNumber() )
508
				{
509
					enabled = true;
510
					p = m_lAvailablePackages->Get(Convert::ToInt32(item->Tag));
511
				}
512
				else
513
				{
514
					this->button1->Visible = true;
515
					ap = m_pPackages->FindAvailablePackage(sNum);
516
				}
517
			}
518
		}
519
 
520
		// update package display
521
		if ( p )
522
		{
48 cycrow 523
			Utils::String desc = p->description();
524
			desc = desc.findReplace("<br>", "\n");
525
			desc = desc.findReplace("<br/>", "\n");
526
			desc = desc.findReplace("<p>", "\n\t");
527
			desc = desc.findReplace("<p/>", "\n");
528
			TextDesc->Text = _US(desc.stripHtml());
1 cycrow 529
			GroupPackage->Text = "Current Package (" + SystemStringFromCyString(p->GetLanguageName(m_pPackages->GetLanguage())) + ")";
530
 
46 cycrow 531
			UpdateRatings(true, p->easeOfUse(), p->gameChanging(), p->recommended());
1 cycrow 532
			// display an advert
533
			bool addedIcon = false;
534
			if ( p->GetFirstFile(FILETYPE_ADVERT) )
535
			{
536
				C_File *f = p->GetFirstFile(FILETYPE_ADVERT);
537
				System::String ^aFile = SystemStringFromCyString(f->GetFilePointer().FindReplace("/", "\\").FindReplace("\\\\", "\\"));
538
				if ( System::IO::File::Exists(aFile) )
539
				{
540
					try 
541
					{
542
						Bitmap ^myBitmap = gcnew Bitmap(aFile);
543
						if ( myBitmap )
544
						{
545
							this->PictureBox->Image = dynamic_cast<Image ^>(myBitmap);
546
							addedIcon = true;
547
						}
548
					} catch (System::ArgumentException ^) {
549
					}
550
					if ( !addedIcon )
551
					{
552
						try 
553
						{
554
							Image ^myImage = Drawing::Image::FromFile(aFile);
555
							if ( myImage )
556
							{
557
								this->PictureBox->Image = myImage;
558
								addedIcon = true;
559
							}
560
						} catch (System::ArgumentException ^) {
561
						} catch (System::OutOfMemoryException ^) {
562
						}
563
					}
564
				}
565
			}
566
 
567
			if ( !addedIcon )
568
			{
569
				System::ComponentModel::ComponentResourceManager^  resources = (gcnew System::ComponentModel::ComponentResourceManager(PackageBrowser::typeid));
570
				System::Drawing::Icon ^icon = (cli::safe_cast<System::Drawing::Icon^  >(resources->GetObject(L"$this.Icon")));
571
				this->PictureBox->Image = icon->ToBitmap();
572
			}
573
		}
574
		else if ( ap )
575
		{
576
			CyString desc = ap->sDesc;
577
			desc = desc.FindReplace("<br>", "\n");
578
			desc = desc.FindReplace("<br/>", "\n");
579
			desc = desc.FindReplace("<p>", "\n\t");
580
			desc = desc.FindReplace("<p/>", "\n");
581
			TextDesc->Text = SystemStringFromCyString(desc.StripHTML());
582
			GroupPackage->Text = "Current Package (" + SystemStringFromCyString(ap->sName) + ") [DOWNLOAD REQUIRED]";
583
 
584
			UpdateRatings(true, ap->iEase, ap->iChanging, ap->iRec);
585
 
586
			System::ComponentModel::ComponentResourceManager^  resources = (gcnew System::ComponentModel::ComponentResourceManager(PackageBrowser::typeid));
587
			System::Drawing::Icon ^icon = (cli::safe_cast<System::Drawing::Icon^  >(resources->GetObject(L"$this.Icon")));
588
			this->PictureBox->Image = icon->ToBitmap();
589
		}
590
		// clear package display
591
		else
592
		{
593
			GroupPackage->Text = "Current Package (None)";
594
			TextDesc->Text = "";
595
		}
596
 
597
		m_pSelectedMod = p;
598
		m_pSelectedPackage = ap;
599
 
600
		ButInstall->Enabled = enabled;
601
	}
602
 
603
	void PackageBrowser::SortList(System::Object ^Sender, ColumnClickEventArgs ^E)
604
	{
605
		if ( E->Column == m_iLastCol )
606
		{
607
			m_bReverse = !m_bReverse;
608
			this->ListPackages->ListViewItemSorter = gcnew ListViewItemComparer(E->Column, m_bReverse);
609
		}
610
		else
611
		{
612
			m_bReverse = false;
613
			this->ListPackages->ListViewItemSorter = gcnew ListViewItemComparer(E->Column, m_bReverse);
614
		}
615
		this->ListPackages->Sort();
616
		m_iLastCol = E->Column;
617
 
618
	}
619
 
620
	void PackageBrowser::DownloadPackage()
621
	{
622
		if ( !m_pSelectedPackage ) 
623
		{
624
			this->button1->Visible = false;
625
			return;
626
		}
627
 
628
		CheckUpdate ^update = gcnew CheckUpdate(m_pPackages, m_pImageList);
629
		update->SetDownloader();
630
		update->OnePackage(m_pSelectedPackage);
631
		if ( update->ShowDialog(this) == Windows::Forms::DialogResult::OK )
632
		{
633
			this->DialogResult = Windows::Forms::DialogResult::Yes;
634
			for ( int i = 0; i < update->GetInstallList()->Count; i++ )
635
				cli::safe_cast<MainGui ^>(this->Owner)->InstallPackage(Convert::ToString(update->GetInstallList()[i]), false, false, true);
636
			this->Close();
637
		}
638
	}
639
 
640
}