mirror of
				https://github.com/OpenMW/openmw.git
				synced 2025-11-03 23:56:43 +00:00 
			
		
		
		
	handle deleted records
This commit is contained in:
		
							parent
							
								
									c1cd8305bc
								
							
						
					
					
						commit
						dd2b7d5c63
					
				
					 1 changed files with 39 additions and 17 deletions
				
			
		| 
						 | 
				
			
			@ -321,32 +321,54 @@ namespace CSMWorld
 | 
			
		|||
    {
 | 
			
		||||
        std::string id = reader.getHNOString ("NAME");
 | 
			
		||||
 | 
			
		||||
        /// \todo deal with deleted flag
 | 
			
		||||
 | 
			
		||||
        ESXRecordT record;
 | 
			
		||||
        record.mId = id;
 | 
			
		||||
        record.load (reader);
 | 
			
		||||
 | 
			
		||||
        int index = searchId (id);
 | 
			
		||||
 | 
			
		||||
        if (index==-1)
 | 
			
		||||
        if (reader.isNextSub ("DELE"))
 | 
			
		||||
        {
 | 
			
		||||
            // new record
 | 
			
		||||
            Record<ESXRecordT> record2;
 | 
			
		||||
            record2.mState = base ? RecordBase::State_BaseOnly : RecordBase::State_ModifiedOnly;
 | 
			
		||||
            (base ? record2.mBase : record2.mModified) = record;
 | 
			
		||||
            reader.skipRecord();
 | 
			
		||||
 | 
			
		||||
            appendRecord (record2);
 | 
			
		||||
            if (index==-1)
 | 
			
		||||
            {
 | 
			
		||||
                // deleting a record that does not exist
 | 
			
		||||
 | 
			
		||||
                // ignore it for now
 | 
			
		||||
 | 
			
		||||
                /// \todo report the problem to the user
 | 
			
		||||
            }
 | 
			
		||||
            else if (base)
 | 
			
		||||
            {
 | 
			
		||||
                removeRows (index, 1);
 | 
			
		||||
            }
 | 
			
		||||
            else
 | 
			
		||||
            {
 | 
			
		||||
                mRecords[index].mState = RecordBase::State_Deleted;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        else
 | 
			
		||||
        {
 | 
			
		||||
            // old record
 | 
			
		||||
            Record<ESXRecordT>& record2 = mRecords[index];
 | 
			
		||||
            ESXRecordT record;
 | 
			
		||||
            record.mId = id;
 | 
			
		||||
            record.load (reader);
 | 
			
		||||
 | 
			
		||||
            if (base)
 | 
			
		||||
                record2.mBase = record;
 | 
			
		||||
            if (index==-1)
 | 
			
		||||
            {
 | 
			
		||||
                // new record
 | 
			
		||||
                Record<ESXRecordT> record2;
 | 
			
		||||
                record2.mState = base ? RecordBase::State_BaseOnly : RecordBase::State_ModifiedOnly;
 | 
			
		||||
                (base ? record2.mBase : record2.mModified) = record;
 | 
			
		||||
 | 
			
		||||
                appendRecord (record2);
 | 
			
		||||
            }
 | 
			
		||||
            else
 | 
			
		||||
                record2.setModified (record);
 | 
			
		||||
            {
 | 
			
		||||
                // old record
 | 
			
		||||
                Record<ESXRecordT>& record2 = mRecords[index];
 | 
			
		||||
 | 
			
		||||
                if (base)
 | 
			
		||||
                    record2.mBase = record;
 | 
			
		||||
                else
 | 
			
		||||
                    record2.setModified (record);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in a new issue