Skip to content

Commit

Permalink
Writing darkmod.txt back to disk is now functional.
Browse files Browse the repository at this point in the history
  • Loading branch information
codereader committed Nov 5, 2017
1 parent 0a8b354 commit d4fa49b
Show file tree
Hide file tree
Showing 5 changed files with 336 additions and 14 deletions.
168 changes: 167 additions & 1 deletion install/ui/missioninfoeditdialog.fbp
Expand Up @@ -189,7 +189,7 @@
<property name="name">m_textCtrl1</property>
<property name="non_flexible_grow_mode">wxFLEX_GROWMODE_SPECIFIED</property>
<property name="permission">none</property>
<property name="rows">6</property>
<property name="rows">7</property>
<property name="vgap">0</property>
<object class="sizeritem" expanded="0">
<property name="border">5</property>
Expand Down Expand Up @@ -1434,6 +1434,172 @@
<event name="OnUpdateUI"></event>
</object>
</object>
<object class="sizeritem" expanded="1">
<property name="border">6</property>
<property name="flag">wxALIGN_CENTER_VERTICAL|wxALL</property>
<property name="proportion">0</property>
<object class="wxStaticText" expanded="1">
<property name="BottomDockable">1</property>
<property name="LeftDockable">1</property>
<property name="RightDockable">1</property>
<property name="TopDockable">1</property>
<property name="aui_layer"></property>
<property name="aui_name"></property>
<property name="aui_position"></property>
<property name="aui_row"></property>
<property name="best_size"></property>
<property name="bg"></property>
<property name="caption"></property>
<property name="caption_visible">1</property>
<property name="center_pane">0</property>
<property name="close_button">1</property>
<property name="context_help"></property>
<property name="context_menu">1</property>
<property name="default_pane">0</property>
<property name="dock">Dock</property>
<property name="dock_fixed">0</property>
<property name="docking">Left</property>
<property name="enabled">1</property>
<property name="fg"></property>
<property name="floatable">1</property>
<property name="font"></property>
<property name="gripper">0</property>
<property name="hidden">0</property>
<property name="id">wxID_ANY</property>
<property name="label">Output Path:</property>
<property name="max_size"></property>
<property name="maximize_button">0</property>
<property name="maximum_size"></property>
<property name="min_size"></property>
<property name="minimize_button">0</property>
<property name="minimum_size"></property>
<property name="moveable">1</property>
<property name="name">m_staticText12</property>
<property name="pane_border">1</property>
<property name="pane_position"></property>
<property name="pane_size"></property>
<property name="permission">protected</property>
<property name="pin_button">1</property>
<property name="pos"></property>
<property name="resize">Resizable</property>
<property name="show">1</property>
<property name="size"></property>
<property name="style"></property>
<property name="subclass"></property>
<property name="toolbar_pane">0</property>
<property name="tooltip"></property>
<property name="window_extra_style"></property>
<property name="window_name"></property>
<property name="window_style"></property>
<property name="wrap">-1</property>
<event name="OnChar"></event>
<event name="OnEnterWindow"></event>
<event name="OnEraseBackground"></event>
<event name="OnKeyDown"></event>
<event name="OnKeyUp"></event>
<event name="OnKillFocus"></event>
<event name="OnLeaveWindow"></event>
<event name="OnLeftDClick"></event>
<event name="OnLeftDown"></event>
<event name="OnLeftUp"></event>
<event name="OnMiddleDClick"></event>
<event name="OnMiddleDown"></event>
<event name="OnMiddleUp"></event>
<event name="OnMotion"></event>
<event name="OnMouseEvents"></event>
<event name="OnMouseWheel"></event>
<event name="OnPaint"></event>
<event name="OnRightDClick"></event>
<event name="OnRightDown"></event>
<event name="OnRightUp"></event>
<event name="OnSetFocus"></event>
<event name="OnSize"></event>
<event name="OnUpdateUI"></event>
</object>
</object>
<object class="sizeritem" expanded="1">
<property name="border">6</property>
<property name="flag">wxALL|wxEXPAND</property>
<property name="proportion">0</property>
<object class="wxStaticText" expanded="1">
<property name="BottomDockable">1</property>
<property name="LeftDockable">1</property>
<property name="RightDockable">1</property>
<property name="TopDockable">1</property>
<property name="aui_layer"></property>
<property name="aui_name"></property>
<property name="aui_position"></property>
<property name="aui_row"></property>
<property name="best_size"></property>
<property name="bg"></property>
<property name="caption"></property>
<property name="caption_visible">1</property>
<property name="center_pane">0</property>
<property name="close_button">1</property>
<property name="context_help"></property>
<property name="context_menu">1</property>
<property name="default_pane">0</property>
<property name="dock">Dock</property>
<property name="dock_fixed">0</property>
<property name="docking">Left</property>
<property name="enabled">1</property>
<property name="fg"></property>
<property name="floatable">1</property>
<property name="font"></property>
<property name="gripper">0</property>
<property name="hidden">0</property>
<property name="id">wxID_ANY</property>
<property name="label">C:GamesDarkmodfmsgathers</property>
<property name="max_size"></property>
<property name="maximize_button">0</property>
<property name="maximum_size"></property>
<property name="min_size"></property>
<property name="minimize_button">0</property>
<property name="minimum_size"></property>
<property name="moveable">1</property>
<property name="name">MissionInfoEditDialogOutputPath</property>
<property name="pane_border">1</property>
<property name="pane_position"></property>
<property name="pane_size"></property>
<property name="permission">protected</property>
<property name="pin_button">1</property>
<property name="pos"></property>
<property name="resize">Resizable</property>
<property name="show">1</property>
<property name="size"></property>
<property name="style"></property>
<property name="subclass"></property>
<property name="toolbar_pane">0</property>
<property name="tooltip"></property>
<property name="window_extra_style"></property>
<property name="window_name"></property>
<property name="window_style"></property>
<property name="wrap">-1</property>
<event name="OnChar"></event>
<event name="OnEnterWindow"></event>
<event name="OnEraseBackground"></event>
<event name="OnKeyDown"></event>
<event name="OnKeyUp"></event>
<event name="OnKillFocus"></event>
<event name="OnLeaveWindow"></event>
<event name="OnLeftDClick"></event>
<event name="OnLeftDown"></event>
<event name="OnLeftUp"></event>
<event name="OnMiddleDClick"></event>
<event name="OnMiddleDown"></event>
<event name="OnMiddleUp"></event>
<event name="OnMotion"></event>
<event name="OnMouseEvents"></event>
<event name="OnMouseWheel"></event>
<event name="OnPaint"></event>
<event name="OnRightDClick"></event>
<event name="OnRightDown"></event>
<event name="OnRightUp"></event>
<event name="OnSetFocus"></event>
<event name="OnSize"></event>
<event name="OnUpdateUI"></event>
</object>
</object>
</object>
</object>
<object class="sizeritem" expanded="1">
Expand Down
20 changes: 19 additions & 1 deletion install/ui/missioninfoeditdialog.xrc
Expand Up @@ -25,7 +25,7 @@
<flag>wxEXPAND|wxLEFT</flag>
<border>12</border>
<object class="wxFlexGridSizer">
<rows>6</rows>
<rows>7</rows>
<cols>2</cols>
<vgap>0</vgap>
<hgap>12</hgap>
Expand Down Expand Up @@ -176,6 +176,24 @@
<size>-1,150</size>
</object>
</object>
<object class="sizeritem">
<option>0</option>
<flag>wxALIGN_CENTER_VERTICAL|wxALL</flag>
<border>6</border>
<object class="wxStaticText" name="m_staticText12">
<label>Output Path:</label>
<wrap>-1</wrap>
</object>
</object>
<object class="sizeritem">
<option>0</option>
<flag>wxALL|wxEXPAND</flag>
<border>6</border>
<object class="wxStaticText" name="MissionInfoEditDialogOutputPath">
<label>C:GamesDarkmodfmsgathers</label>
<wrap>-1</wrap>
</object>
</object>
</object>
</object>
<object class="sizeritem">
Expand Down
120 changes: 110 additions & 10 deletions plugins/dm.editing/DarkmodTxt.cpp
Expand Up @@ -7,6 +7,7 @@
#include "igame.h"
#include "os/fs.h"

#include <fstream>
#include <fmt/format.h>
#include "string/trim.h"
#include "string/convert.h"
Expand All @@ -20,26 +21,51 @@ const std::string& DarkmodTxt::getTitle()
return _title;
}

void DarkmodTxt::setTitle(const std::string& title)
{
_title = title;
}

const std::string& DarkmodTxt::getAuthor()
{
return _author;
}

void DarkmodTxt::setAuthor(const std::string& author)
{
_author = author;
}

const std::string& DarkmodTxt::getDescription()
{
return _description;
}

void DarkmodTxt::setDescription(const std::string& desc)
{
_description = desc;
}

const std::string& DarkmodTxt::getVersion()
{
return _version;
}

void DarkmodTxt::setVersion(const std::string& version)
{
_version = version;
}

const std::string& DarkmodTxt::getReqTdmVersion()
{
return _reqTdmVersion;
}

void DarkmodTxt::setReqTdmVersion(const std::string& reqVersion)
{
_reqTdmVersion = reqVersion;
}

const DarkmodTxt::TitleList& DarkmodTxt::getMissionTitles()
{
return _missionTitles;
Expand Down Expand Up @@ -174,19 +200,11 @@ DarkmodTxtPtr DarkmodTxt::CreateFromStream(std::istream& stream)

DarkmodTxtPtr DarkmodTxt::LoadForCurrentMod()
{
std::string modPath = GlobalGameManager().getModPath();

if (modPath.empty())
{
rMessage() << "Mod path empty, falling back to mod base path..." << std::endl;
modPath = GlobalGameManager().getModBasePath();
}

fs::path darkmodTxtPath = fs::path(modPath) / NAME();
std::string darkmodTxtPath = GetPathForCurrentMod();

rMessage() << "Trying to open file " << darkmodTxtPath << std::endl;

ArchiveTextFilePtr file = GlobalFileSystem().openTextFileInAbsolutePath(darkmodTxtPath.string());
ArchiveTextFilePtr file = GlobalFileSystem().openTextFileInAbsolutePath(darkmodTxtPath);

if (file)
{
Expand All @@ -197,4 +215,86 @@ DarkmodTxtPtr DarkmodTxt::LoadForCurrentMod()
return std::make_shared<DarkmodTxt>();
}

std::string DarkmodTxt::toString()
{
std::string output;

if (!_title.empty())
{
output += fmt::format("Title: {0}", _title);
}

if (_missionTitles.size() > 1)
{
// Skip the first string, which is the same as the title
for (std::size_t i = 1; i < _missionTitles.size(); ++i)
{
output += fmt::format("\nMission {1:d} Title: {0}", _missionTitles[i], i);
}
}

if (!_description.empty())
{
output += fmt::format("\nDescription: {0}", _description);
}

if (!_author.empty())
{
output += fmt::format("\nAuthor: {0}", _author);
}

if (!_version.empty())
{
output += fmt::format("\nVersion: {0}", _version);
}

if (!_reqTdmVersion.empty())
{
output += fmt::format("\nRequired TDM Version: {0}", _reqTdmVersion);
}

return output;
}

void DarkmodTxt::saveToCurrentMod()
{
std::string outputPath = GetPathForCurrentMod();

rMessage() << "Writing darkmod.txt contents to " << outputPath << std::endl;

std::ofstream outputStream;

// Let the stream throw exceptions
std::ios_base::iostate exceptionMask = outputStream.exceptions() | std::ios::failbit;
outputStream.exceptions(exceptionMask);

try
{
outputStream.open(outputPath);
outputStream << toString();
outputStream.close();

rMessage() << "Successfully wrote darkmod.txt contents to " << outputPath << std::endl;
}
catch (std::ios_base::failure& ex)
{
throw std::runtime_error(fmt::format(_("Could not write darkmod.txt contents:\n{0}"), ex.what()));
}
}

std::string DarkmodTxt::GetPathForCurrentMod()
{
std::string modPath = GlobalGameManager().getModPath();

if (modPath.empty())
{
rMessage() << "Mod path empty, falling back to mod base path..." << std::endl;
modPath = GlobalGameManager().getModBasePath();
}

fs::path darkmodTxtPath = fs::path(modPath) / NAME();

return darkmodTxtPath.string();
}

}

0 comments on commit d4fa49b

Please sign in to comment.