| 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;
 | 
        
           |  |  | 8 | 		af->sFile = CyStringFromSystemString(file);
 | 
        
           |  |  | 9 | 		if ( dir && dir->Length )
 | 
        
           |  |  | 10 | 			af->sDir = CyStringFromSystemString(dir);
 | 
        
           |  |  | 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;
 | 
        
           |  |  | 23 | 					af->sFile = CyStringFromSystemString(datFile);
 | 
        
           |  |  | 24 | 					if ( dir && dir->Length )
 | 
        
           |  |  | 25 | 						af->sDir = CyStringFromSystemString(dir);
 | 
        
           |  |  | 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();
 | 
        
           |  |  | 54 | 				this->LabFile->Text = SystemStringFromCyString(m_lFiles->CurrentData()->sFile);
 | 
        
           |  |  | 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;
 | 
        
           |  |  | 67 | 					this->LabFile->Text = SystemStringFromCyString(m_lFiles->CurrentData()->sFile);
 | 
        
           |  |  | 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 )
 | 
        
           |  |  | 85 | 					m_pMultiPackage->ReadAllPackages(SPKREAD_ALL);
 | 
        
           |  |  | 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
 | 
        
           |  |  | 92 | 					m_pMultiPackage->AddFileNow(m_lFiles->CurrentData()->sFile, (m_lFiles->CurrentData()->iType == -1) ? true : false);
 | 
        
           |  |  | 93 | 				else if ( m_pPackage && m_lFiles->CurrentData()->iType >= 0 )
 | 
        
           |  |  | 94 | 				{
 | 
        
           | 170 | cycrow | 95 | 					m_pPackage->addFileNow(m_lFiles->CurrentData()->sFile.ToString(), m_lFiles->CurrentData()->sDir.ToString(), 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
 | 
        
           |  |  | 103 | 					m_pMultiPackage->RemoveFile(m_lFiles->CurrentData()->sFile);
 | 
        
           |  |  | 104 | 				else if ( m_pPackage && m_lFiles->CurrentData()->iType >= 0 )
 | 
        
           |  |  | 105 | 				{
 | 
        
           | 172 | cycrow | 106 | 					m_pPackage->removeFile(m_lFiles->CurrentData()->sFile.ToString(), static_cast<FileType>(m_lFiles->CurrentData()->iType), m_lFiles->CurrentData()->sDir.ToString(), 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);
 | 
        
           |  |  | 117 | 					m_pMultiPackage->WriteFile(m_pMultiPackage->GetFilename());
 | 
        
           |  |  | 118 | 				}
 | 
        
           |  |  | 119 | 				else if ( m_pPackage )
 | 
        
           | 50 | cycrow | 120 | 					m_pPackage->WriteFile(m_pPackage->filename());
 | 
        
           | 1 | cycrow | 121 | 				break;
 | 
        
           |  |  | 122 | 		}
 | 
        
           |  |  | 123 | 	}
 | 
        
           |  |  | 124 | };
 |