class PluginFileHandler extends PluginBase { static bool FileDuplicate(string source_name, string dest_name) { return CopyFile(source_name, dest_name); } static bool FileDelete(string file) { return DeleteFile(file); } static void FileRename(string source_name, string dest_name) { FileDuplicate(source_name, dest_name); FileDelete(source_name); } bool m_ReadOnly; int m_LineLimit; ref TStringArray m_FileContent; void PluginFileHandler() { m_FileContent = new TStringArray; m_LineLimit = -1; LoadFile(); } void ~PluginFileHandler() { ClearFileNoSave(); } override void OnInit() { super.OnInit(); } string GetFileName() { return string.Empty; } string GetSubFolderName() { return string.Empty; } void ClearFileNoSave() { m_FileContent.Clear(); } bool LoadFile() { ClearFileNoSave(); FileHandle file_index = OpenFile(GetFileName(), FileMode.READ); if ( file_index == 0 ) { return false; } string line_content = ""; int char_count = FGets( file_index, line_content ); while ( char_count != -1 ) { m_FileContent.Insert(line_content); char_count = FGets( file_index, line_content ); } CloseFile(file_index); return true; } bool SaveFile() { if ( m_ReadOnly ) { return false; } if (GetSubFolderName() && !FileExist(GetSubFolderName())) { MakeDirectory(GetSubFolderName()); } //Log("SaveFile -> Opening File: "+GetFileName()); FileHandle file_index = OpenFile(GetFileName(), FileMode.WRITE); if ( file_index == 0 ) { return false; } for ( int i = 0; i < m_FileContent.Count(); ++i) { //Log("SaveFile -> Writing: "+m_FileContent.Get(i)); FPrintln(file_index, m_FileContent.Get(i)); } CloseFile(file_index); return true; } bool IsReadOnly() { return m_ReadOnly; } void AddText(string text) { AddNewLineNoSave(text); SaveFile(); } void AddNewLineNoSave(string text) { if ( m_LineLimit > -1 ) { if ( m_LineLimit == 0 ) { return; } int lines_count = m_FileContent.Count(); if ( lines_count > 0 && lines_count >= m_LineLimit ) { int remove_indexes = lines_count - m_LineLimit; for ( int i = 0; i <= remove_indexes; ++i ) { m_FileContent.RemoveOrdered(0); } } } m_FileContent.Insert(text); } TStringArray GetFileContent() { return m_FileContent; } }