This can cut the FTB loading by ~66% - worth it, but not ideal. Real solution will have to be implemented later.
		
			
				
	
	
		
			108 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			108 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
/* Copyright 2013-2015 MultiMC Contributors
 | 
						|
 *
 | 
						|
 * Licensed under the Apache License, Version 2.0 (the "License");
 | 
						|
 * you may not use this file except in compliance with the License.
 | 
						|
 * You may obtain a copy of the License at
 | 
						|
 *
 | 
						|
 *     http://www.apache.org/licenses/LICENSE-2.0
 | 
						|
 *
 | 
						|
 * Unless required by applicable law or agreed to in writing, software
 | 
						|
 * distributed under the License is distributed on an "AS IS" BASIS,
 | 
						|
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
						|
 * See the License for the specific language governing permissions and
 | 
						|
 * limitations under the License.
 | 
						|
 */
 | 
						|
 | 
						|
#include "INISettingsObject.h"
 | 
						|
#include "Setting.h"
 | 
						|
 | 
						|
INISettingsObject::INISettingsObject(const QString &path, QObject *parent)
 | 
						|
	: SettingsObject(parent)
 | 
						|
{
 | 
						|
	m_filePath = path;
 | 
						|
	m_ini.loadFile(path);
 | 
						|
}
 | 
						|
 | 
						|
void INISettingsObject::setFilePath(const QString &filePath)
 | 
						|
{
 | 
						|
	m_filePath = filePath;
 | 
						|
}
 | 
						|
 | 
						|
bool INISettingsObject::reload()
 | 
						|
{
 | 
						|
	return m_ini.loadFile(m_filePath) && SettingsObject::reload();
 | 
						|
}
 | 
						|
 | 
						|
void INISettingsObject::suspendSave()
 | 
						|
{
 | 
						|
	m_suspendSave = true;
 | 
						|
}
 | 
						|
 | 
						|
void INISettingsObject::resumeSave()
 | 
						|
{
 | 
						|
	m_suspendSave = false;
 | 
						|
	if(m_doSave)
 | 
						|
	{
 | 
						|
		m_ini.saveFile(m_filePath);
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
void INISettingsObject::changeSetting(const Setting &setting, QVariant value)
 | 
						|
{
 | 
						|
	if (contains(setting.id()))
 | 
						|
	{
 | 
						|
		// valid value -> set the main config, remove all the sysnonyms
 | 
						|
		if (value.isValid())
 | 
						|
		{
 | 
						|
			auto list = setting.configKeys();
 | 
						|
			m_ini.set(list.takeFirst(), value);
 | 
						|
			for(auto iter: list)
 | 
						|
				m_ini.remove(iter);
 | 
						|
		}
 | 
						|
		// invalid -> remove all (just like resetSetting)
 | 
						|
		else
 | 
						|
		{
 | 
						|
			for(auto iter: setting.configKeys())
 | 
						|
				m_ini.remove(iter);
 | 
						|
		}
 | 
						|
		doSave();
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
void INISettingsObject::doSave()
 | 
						|
{
 | 
						|
	if(m_suspendSave)
 | 
						|
	{
 | 
						|
		m_doSave = true;
 | 
						|
	}
 | 
						|
	else
 | 
						|
	{
 | 
						|
		m_ini.saveFile(m_filePath);
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
void INISettingsObject::resetSetting(const Setting &setting)
 | 
						|
{
 | 
						|
	// if we have the setting, remove all the synonyms. ALL OF THEM
 | 
						|
	if (contains(setting.id()))
 | 
						|
	{
 | 
						|
		for(auto iter: setting.configKeys())
 | 
						|
			m_ini.remove(iter);
 | 
						|
		doSave();
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
QVariant INISettingsObject::retrieveValue(const Setting &setting)
 | 
						|
{
 | 
						|
	// if we have the setting, return value of the first matching synonym
 | 
						|
	if (contains(setting.id()))
 | 
						|
	{
 | 
						|
		for(auto iter: setting.configKeys())
 | 
						|
		{
 | 
						|
			if(m_ini.contains(iter))
 | 
						|
				return m_ini[iter];
 | 
						|
		}
 | 
						|
	}
 | 
						|
	return QVariant();
 | 
						|
}
 |