Subversion Repositories spk

Rev

Rev 224 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
1 cycrow 1
#include "../StdAfx.h"
2
#include "AddDialog.h"
3
 
4
namespace SpkExplorer {
5
	void AddDialog::AddFile(System::String ^file, System::String ^dir, int type, int game)
6
	{
7
		SAddFile *af = new SAddFile;
225 cycrow 8
		af->sFile = _WS(file);
1 cycrow 9
		if ( dir && dir->Length )
225 cycrow 10
			af->sDir = _WS(dir);
1 cycrow 11
		af->iType = type;
12
		af->iGame = game;
13
		m_lFiles->push_back(af);
14
 
15
		if ( type == FILETYPE_MOD && !m_bRemove )
16
		{
17
			if ( !IO::FileInfo(file).Extension->CompareTo(".cat") )
18
			{
19
				String ^datFile = IO::Path::GetDirectoryName(file) + "\\" + IO::Path::GetFileNameWithoutExtension(file) + ".dat";
20
				if ( IO::File::Exists(datFile) )
21
				{
22
					SAddFile *af = new SAddFile;
225 cycrow 23
					af->sFile = _WS(datFile);
1 cycrow 24
					if ( dir && dir->Length )
225 cycrow 25
						af->sDir = _WS(dir);
1 cycrow 26
					af->iType = type;
27
					af->iGame = game;
28
					m_lFiles->push_back(af);
29
				}
30
			}
31
		}
32
	}
33
	void AddDialog::AddFileList(ArrayList ^list, System::String ^dir, int type, int game)
34
	{
35
		for ( int i = 0; i < list->Count; i++ )
36
			this->AddFile(cli::safe_cast<System::String ^>(list[i]), dir, type, game);
37
	}
38
	void AddDialog::AddFileArray(cli::array<System::String ^> ^list, System::String ^dir, int type, int game)
39
	{
40
		for ( int i = 0; i < list->Length; i++ )
41
			this->AddFile(list[i], dir, type, game);
42
	}
43
 
44
	void AddDialog::Background_Finished(System::Object ^Sender, RunWorkerCompletedEventArgs ^E)
45
	{
46
		switch ( m_iStatus )
47
		{
48
			case ADDSTATUS_READ:
49
				if ( m_bRemove )
50
					m_iStatus = ADDSTATUS_REMOVE;
51
				else
52
					m_iStatus = ADDSTATUS_ADD;
53
				m_lFiles->First();
225 cycrow 54
				this->LabFile->Text = _US(m_lFiles->CurrentData()->sFile);
1 cycrow 55
				this->progressBar1->Maximum = m_lFiles->size();
56
				this->progressBar1->Value = 0;
57
				this->backgroundWorker1->RunWorkerAsync();
58
				break;
59
 
60
			case ADDSTATUS_ADD:
61
			case ADDSTATUS_REMOVE:
62
				if ( !m_lFiles->Next() )
63
					m_iStatus = ADDSTATUS_SAVE;
64
				else
65
				{
66
					++this->progressBar1->Value;
225 cycrow 67
					this->LabFile->Text = _US(m_lFiles->CurrentData()->sFile);
1 cycrow 68
				}
69
				this->backgroundWorker1->RunWorkerAsync();
70
				break;
71
 
72
			case ADDSTATUS_SAVE:
73
				this->Close();
74
				break;
75
		}
76
	}
77
 
78
	void AddDialog::Background_DoWork(System::Object ^Sender, DoWorkEventArgs ^E)
79
	{
80
		System::Threading::Thread::Sleep(5);
81
		switch ( m_iStatus )
82
		{
83
			case ADDSTATUS_READ:
84
				if ( m_pMultiPackage )
177 cycrow 85
					m_pMultiPackage->readAllPackages(SPKREAD_ALL);
1 cycrow 86
				else if ( m_pPackage )
87
					m_pPackage->ReadAllFilesToMemory();
88
				break;
89
 
90
			case ADDSTATUS_ADD:
91
				if ( m_lFiles->CurrentData()->iType < 0 && m_pMultiPackage ) // package
225 cycrow 92
					m_pMultiPackage->addFileNow(m_lFiles->CurrentData()->sFile, (m_lFiles->CurrentData()->iType == -1) ? true : false);
1 cycrow 93
				else if ( m_pPackage && m_lFiles->CurrentData()->iType >= 0 )
94
				{
225 cycrow 95
					m_pPackage->addFileNow(m_lFiles->CurrentData()->sFile, m_lFiles->CurrentData()->sDir, static_cast<FileType>(m_lFiles->CurrentData()->iType));
1 cycrow 96
					if ( m_pMultiPackage )
97
						m_bUpdatedPackage = true;
98
				}
99
				break;
100
 
101
			case ADDSTATUS_REMOVE:
102
				if ( m_lFiles->CurrentData()->iType < 0 && m_pMultiPackage ) // package
225 cycrow 103
					m_pMultiPackage->removeFile(m_lFiles->CurrentData()->sFile);
1 cycrow 104
				else if ( m_pPackage && m_lFiles->CurrentData()->iType >= 0 )
105
				{
225 cycrow 106
					m_pPackage->removeFile(m_lFiles->CurrentData()->sFile, static_cast<FileType>(m_lFiles->CurrentData()->iType), m_lFiles->CurrentData()->sDir, m_lFiles->CurrentData()->iGame);
1 cycrow 107
					if ( m_pMultiPackage )
108
						m_bUpdatedPackage = true;
109
				}
110
				break;
111
 
112
			case ADDSTATUS_SAVE:
113
				if ( m_pMultiPackage )
114
				{
115
					if ( m_bUpdatedPackage && m_pPackage )
116
						m_pMultiPackage->UpdatedPackage(m_pPackage);
177 cycrow 117
					m_pMultiPackage->writeFile(m_pMultiPackage->filename());
1 cycrow 118
				}
119
				else if ( m_pPackage )
224 cycrow 120
					m_pPackage->writeFile(m_pPackage->filename());
1 cycrow 121
				break;
122
		}
123
	}
124
};