mirror of
https://github.com/OpenFactorioServerManager/factorio-server-manager.git
synced 2025-02-03 13:21:25 +02:00
added: toggle-button will work now
This commit is contained in:
parent
67436983df
commit
02a85337c2
@ -182,6 +182,34 @@ func ModPortalInstallHandler(w http.ResponseWriter, r *http.Request) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func ToggleModHandler(w http.ResponseWriter, r *http.Request) {
|
||||||
|
var err error
|
||||||
|
resp := JSONResponse{
|
||||||
|
Success: false,
|
||||||
|
}
|
||||||
|
|
||||||
|
w.Header().Set("Content-Type", "application/json;charset=UTF-8")
|
||||||
|
|
||||||
|
//Get Data out of the request
|
||||||
|
mod_name := r.FormValue("mod_name")
|
||||||
|
|
||||||
|
resp.Data, err = toggleMod(mod_name)
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
resp.Data = fmt.Sprintf("Error in installMod: %s", err)
|
||||||
|
if err := json.NewEncoder(w).Encode(resp); err != nil {
|
||||||
|
log.Printf("Error in installMod: %s", err)
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
resp.Success = true
|
||||||
|
|
||||||
|
if err := json.NewEncoder(w).Encode(resp); err != nil {
|
||||||
|
log.Printf("Error in ModPortalInstallHandler: %s", err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Toggles mod passed in through mod variable
|
// Toggles mod passed in through mod variable
|
||||||
// Updates mod-list.json file to toggle the enabled status of mods
|
// Updates mod-list.json file to toggle the enabled status of mods
|
||||||
/*func ToggleMod(w http.ResponseWriter, r *http.Request) {
|
/*func ToggleMod(w http.ResponseWriter, r *http.Request) {
|
||||||
|
54
src/mods.go
54
src/mods.go
@ -22,8 +22,8 @@ type ModsList struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// List mods installed in the factorio/mods directory
|
// List mods installed in the factorio/mods directory
|
||||||
func listInstalledMods(modDir string) (ModsList, error) {
|
func listInstalledMods() (ModsList, error) {
|
||||||
file, err := ioutil.ReadFile(modDir + "/mod-list.json")
|
file, err := ioutil.ReadFile(config.FactorioModsDir + "/mod-list.json")
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Println(err.Error())
|
log.Println(err.Error())
|
||||||
@ -48,6 +48,8 @@ type ModInfo struct {
|
|||||||
Version string `json:"version"`
|
Version string `json:"version"`
|
||||||
Title string `json:"title"`
|
Title string `json:"title"`
|
||||||
Author string `json:"author"`
|
Author string `json:"author"`
|
||||||
|
FileName string `json:"file_name"`
|
||||||
|
Enabled bool `json:"enabled"`
|
||||||
}
|
}
|
||||||
func listInstalledModsByFolder() (ModInfoList, error) {
|
func listInstalledModsByFolder() (ModInfoList, error) {
|
||||||
//scan ModFolder
|
//scan ModFolder
|
||||||
@ -85,6 +87,8 @@ func listInstalledModsByFolder() (ModInfoList, error) {
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
mod_info.FileName = info.Name()
|
||||||
|
mod_info.FileName = info.Name()
|
||||||
result.Mods = append(result.Mods, mod_info)
|
result.Mods = append(result.Mods, mod_info)
|
||||||
|
|
||||||
break
|
break
|
||||||
@ -99,9 +103,53 @@ func listInstalledModsByFolder() (ModInfoList, error) {
|
|||||||
return ModInfoList{}, err_o
|
return ModInfoList{}, err_o
|
||||||
}
|
}
|
||||||
|
|
||||||
|
mod_list_by_json, err_o := listInstalledMods()
|
||||||
|
if err_o != nil {
|
||||||
|
return ModInfoList{}, err_o
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, json_mod := range mod_list_by_json.Mods {
|
||||||
|
for result_index, result_mod := range result.Mods {
|
||||||
|
if result_mod.Name == json_mod.Name {
|
||||||
|
result.Mods[result_index].Enabled = json_mod.Enabled
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return result, nil
|
return result, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func toggleMod(mod_name string)([]ModInfo, error) {
|
||||||
|
var err error
|
||||||
|
|
||||||
|
mod_list, err := listInstalledMods()
|
||||||
|
|
||||||
|
for index, mod := range mod_list.Mods {
|
||||||
|
if mod.Name == mod_name {
|
||||||
|
mod_list.Mods[index].Enabled = !mod_list.Mods[index].Enabled
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
//build new json
|
||||||
|
new_json, _ := json.Marshal(mod_list)
|
||||||
|
|
||||||
|
ioutil.WriteFile(config.FactorioModsDir + "/mod-list.json", new_json, 0664)
|
||||||
|
|
||||||
|
mod_info_list, err := listInstalledModsByFolder()
|
||||||
|
if err != nil {
|
||||||
|
log.Fatal(err)
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return mod_info_list.Mods, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
type LoginErrorResponse struct {
|
type LoginErrorResponse struct {
|
||||||
Message string `json:"message"`
|
Message string `json:"message"`
|
||||||
@ -221,7 +269,7 @@ func installMod(username string, userKey string, url string, filename string, mo
|
|||||||
}
|
}
|
||||||
file.Close()
|
file.Close()
|
||||||
|
|
||||||
mod_list, err := listInstalledMods(config.FactorioModsDir)
|
mod_list, err := listInstalledMods()
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err, 500
|
return nil, err, 500
|
||||||
|
@ -173,6 +173,11 @@ var apiRoutes = Routes{
|
|||||||
"POST",
|
"POST",
|
||||||
"/mods/install",
|
"/mods/install",
|
||||||
ModPortalInstallHandler,
|
ModPortalInstallHandler,
|
||||||
|
}, {
|
||||||
|
"ToggleMod",
|
||||||
|
"POST",
|
||||||
|
"/mods/toggle",
|
||||||
|
ToggleModHandler,
|
||||||
}, /*{
|
}, /*{
|
||||||
"ListMods",
|
"ListMods",
|
||||||
"GET",
|
"GET",
|
||||||
|
@ -24,7 +24,6 @@ class InstalledMods extends React.Component {
|
|||||||
contentType: false,
|
contentType: false,
|
||||||
success: (data) => {
|
success: (data) => {
|
||||||
var response = JSON.parse(data)
|
var response = JSON.parse(data)
|
||||||
console.log(response.success);
|
|
||||||
if (response.success === true) {
|
if (response.success === true) {
|
||||||
this.updateInstalledMods();
|
this.updateInstalledMods();
|
||||||
}
|
}
|
||||||
|
@ -1,46 +0,0 @@
|
|||||||
import React from 'react';
|
|
||||||
import Mod from './Mod.jsx'
|
|
||||||
|
|
||||||
class ModList extends React.Component {
|
|
||||||
render() {
|
|
||||||
return(
|
|
||||||
<div className="box">
|
|
||||||
<div className="box-header">
|
|
||||||
<h3 className="box-title">Manage Mods</h3>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div className="box-body">
|
|
||||||
<div className="table-responsive">
|
|
||||||
<table className="table table-striped">
|
|
||||||
<thead>
|
|
||||||
<tr>
|
|
||||||
<th>Name</th>
|
|
||||||
<th>Status</th>
|
|
||||||
<th>Toggle Status</th>
|
|
||||||
</tr>
|
|
||||||
</thead>
|
|
||||||
<tbody>
|
|
||||||
{this.props.listMods.map ( (mod, i) => {
|
|
||||||
return(
|
|
||||||
<Mod
|
|
||||||
key={i}
|
|
||||||
mod={mod}
|
|
||||||
{...this.props}
|
|
||||||
/>
|
|
||||||
)
|
|
||||||
})}
|
|
||||||
</tbody>
|
|
||||||
</table>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
ModList.propTypes = {
|
|
||||||
listMods: React.PropTypes.array.isRequired,
|
|
||||||
toggleMod: React.PropTypes.func.isRequired
|
|
||||||
}
|
|
||||||
|
|
||||||
export default ModList
|
|
@ -8,7 +8,9 @@ class Mod extends React.Component {
|
|||||||
this.modStatus = <span className="label label-success">Enabled</span>
|
this.modStatus = <span className="label label-success">Enabled</span>
|
||||||
}
|
}
|
||||||
return(
|
return(
|
||||||
<tr>
|
<tr data-mod-name={this.props.mod.name}
|
||||||
|
data-file-name={this.props.mod.file_name}
|
||||||
|
>
|
||||||
<td>{this.props.mod.title}</td>
|
<td>{this.props.mod.title}</td>
|
||||||
<td>{this.modStatus}</td>
|
<td>{this.modStatus}</td>
|
||||||
<td>
|
<td>
|
||||||
@ -16,8 +18,7 @@ class Mod extends React.Component {
|
|||||||
ref='modName'
|
ref='modName'
|
||||||
type='submit'
|
type='submit'
|
||||||
value='Toggle'
|
value='Toggle'
|
||||||
name={this.props.mod.name}
|
onClick={this.props.toggleMod}
|
||||||
//TODO toggle and remove mod
|
|
||||||
/>
|
/>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
@ -26,7 +27,8 @@ class Mod extends React.Component {
|
|||||||
}
|
}
|
||||||
|
|
||||||
Mod.propTypes = {
|
Mod.propTypes = {
|
||||||
mod: React.PropTypes.object.isRequired
|
mod: React.PropTypes.object.isRequired,
|
||||||
|
toggleMod: React.PropTypes.func.isRequired
|
||||||
}
|
}
|
||||||
|
|
||||||
export default Mod
|
export default Mod
|
||||||
|
@ -40,6 +40,7 @@ class ModOverview extends React.Component {
|
|||||||
}
|
}
|
||||||
|
|
||||||
render() {
|
render() {
|
||||||
|
console.log(this.props.installedMods)
|
||||||
return(
|
return(
|
||||||
<div className="box">
|
<div className="box">
|
||||||
<div className="box-header">
|
<div className="box-header">
|
||||||
@ -95,7 +96,8 @@ class ModOverview extends React.Component {
|
|||||||
|
|
||||||
ModOverview.propTypes = {
|
ModOverview.propTypes = {
|
||||||
installedMods: React.PropTypes.array.isRequired,
|
installedMods: React.PropTypes.array.isRequired,
|
||||||
submitFactorioLogin: React.PropTypes.func.isRequired
|
submitFactorioLogin: React.PropTypes.func.isRequired,
|
||||||
|
toggleMod: React.PropTypes.func.isRequired
|
||||||
};
|
};
|
||||||
|
|
||||||
export default ModOverview;
|
export default ModOverview;
|
@ -12,6 +12,7 @@ class ModsContent extends React.Component {
|
|||||||
this.handlerFactorioLogin = this.handlerFactorioLogin.bind(this);
|
this.handlerFactorioLogin = this.handlerFactorioLogin.bind(this);
|
||||||
this.loadDownloadList = this.loadDownloadList.bind(this);
|
this.loadDownloadList = this.loadDownloadList.bind(this);
|
||||||
this.swalSubmitHandler = this.swalSubmitHandler.bind(this);
|
this.swalSubmitHandler = this.swalSubmitHandler.bind(this);
|
||||||
|
this.toggleModHandler = this.toggleModHandler.bind(this);
|
||||||
|
|
||||||
this.state = {
|
this.state = {
|
||||||
username: "",
|
username: "",
|
||||||
@ -218,6 +219,36 @@ class ModsContent extends React.Component {
|
|||||||
// });
|
// });
|
||||||
};
|
};
|
||||||
|
|
||||||
|
toggleModHandler(e) {
|
||||||
|
e.preventDefault();
|
||||||
|
console.log(e.target);
|
||||||
|
let $button = $(e.target);
|
||||||
|
let $row = $button.parents("tr");
|
||||||
|
let mod_name = $row.data("mod-name");
|
||||||
|
|
||||||
|
$.ajax({
|
||||||
|
url: "/api/mods/toggle",
|
||||||
|
method: "POST",
|
||||||
|
data: {
|
||||||
|
mod_name: mod_name
|
||||||
|
},
|
||||||
|
dataType: "JSON",
|
||||||
|
success: (data) => {
|
||||||
|
this.setState({
|
||||||
|
installedMods: data.data
|
||||||
|
});
|
||||||
|
},
|
||||||
|
error: (jqXHR, status, err) => {
|
||||||
|
console.log('api/mods/details', status, err.toString());
|
||||||
|
swal({
|
||||||
|
title: "Toggle Mod went wrong",
|
||||||
|
text: err.toString(),
|
||||||
|
type: "error"
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
render() {
|
render() {
|
||||||
return(
|
return(
|
||||||
<div className="content-wrapper">
|
<div className="content-wrapper">
|
||||||
@ -237,6 +268,7 @@ class ModsContent extends React.Component {
|
|||||||
{...this.state}
|
{...this.state}
|
||||||
loadDownloadList={this.loadDownloadList}
|
loadDownloadList={this.loadDownloadList}
|
||||||
submitFactorioLogin={this.handlerFactorioLogin}
|
submitFactorioLogin={this.handlerFactorioLogin}
|
||||||
|
toggleMod={this.toggleModHandler}
|
||||||
/>
|
/>
|
||||||
</section>
|
</section>
|
||||||
</div>
|
</div>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user