only compatible mod-updates and downgrades

This commit is contained in:
knoxfighter 2018-03-10 03:26:45 +01:00
parent fe88e09eb9
commit 41708ee924
6 changed files with 55 additions and 22 deletions

View File

@ -440,11 +440,17 @@ func FactorioVersion(w http.ResponseWriter, r *http.Request) {
Success: true,
}
w.Header().Set("Content-Type", "application/json;charset=UTF-8")
status := map[string]string{}
status["version"] = FactorioServ.Version
status["base_mod_version"] = FactorioServ.BaseModVersion
resp.Data = status
if err := json.NewEncoder(w).Encode(resp); err != nil {
log.Printf("Error loading Factorio Version: %s", err)
}
}
func LoginUser(w http.ResponseWriter, r *http.Request) {

View File

@ -59,8 +59,10 @@ class App extends React.Component {
dataType: "json",
success: (data) => {
if (data.success === true) {
this.setState({loggedIn: true,
username: data.data.Username})
this.setState({
loggedIn: true,
username: data.data.Username
});
}
}
})
@ -115,11 +117,13 @@ class App extends React.Component {
}
getFactorioVersion() {
$:ajax({
$.ajax({
url: "/api/server/facVersion",
dataType: "json",
// dataType: "json",
success: (data) => {
this.setState({
factorioVersion: data.data.base_mod_version
});
},
error: (xhr, status, err) => {
console.log('api/server/status', status, err.toString());
@ -149,16 +153,19 @@ class App extends React.Component {
// Render react-router components and pass in props
{React.cloneElement(
this.props.children,
{message: "",
messages: this.state.messages,
flashMessage: this.flashMessage,
facServStatus: this.facServStatus,
serverStatus: this.state.serverStatus,
getStatus: this.getStatus,
saves: this.state.saves,
getSaves: this.getSaves,
username: this.state.username,
socket: this.socket}
{
message: "",
messages: this.state.messages,
flashMessage: this.flashMessage,
facServStatus: this.facServStatus,
serverStatus: this.state.serverStatus,
factorioVersion: this.state.factorioVersion,
getStatus: this.getStatus,
saves: this.state.saves,
getSaves: this.getSaves,
username: this.state.username,
socket: this.socket
}
)}
<Footer />

View File

@ -1,4 +1,5 @@
import React from 'react';
import SemVer from 'semver';
class Mod extends React.Component {
constructor(props) {
@ -35,11 +36,19 @@ class Mod extends React.Component {
success: (data) => {
let newData = JSON.parse(data.data);
//get newest COMPATIBLE release
let newestRelease;
newData.releases.forEach((release) => {
console.log(release);
})
let newestRelease = newData.releases[newData.releases.length - 1];
if(newestRelease.version != this.props.mod.version) {
//TODO change to info_json dependency (when mod-portal-api is working again)
if(SemVer.satisfies(this.props.factorioVersion, release.info_json.factorio_version + ".x")) {
if(!newestRelease) {
newestRelease = release;
} else if(SemVer.gt(release.version, newestRelease.version)) {
newestRelease = release;
}
}
});
if(newestRelease && newestRelease.version != this.props.mod.version) {
if(this.props.updateCountAdd)
this.props.updateCountAdd();
@ -47,7 +56,8 @@ class Mod extends React.Component {
newVersionAvailable: true,
newVersion: {
downloadUrl: newestRelease.download_url,
file_name: newestRelease.file_name
file_name: newestRelease.file_name,
version: newestRelease.version
}
});
} else {
@ -87,6 +97,13 @@ class Mod extends React.Component {
let version;
if(this.state.newVersionAvailable) {
let faArrow;
if(SemVer.gt(this.state.newVersion.version, this.props.mod.version)) {
faArrow = "fa fa-arrow-circle-up";
} else {
faArrow = "fa fa-arrow-circle-down";
}
version = <span>{this.props.mod.version}
<a className="btn btn-xs btn-default update-button"
style={{
@ -108,7 +125,7 @@ class Mod extends React.Component {
this.state.updateInProgress ?
<div className='loader' style={{width: 15, height: 15, marginRight: 0, borderWidth: 3,}}></div>
:
<i className="fa fa-arrow-circle-up" title="Update Mod" style={{fontSize: "15pt"}}></i>
<i className={faArrow} title="Update Mod" style={{fontSize: "15pt"}}></i>
}
</a>
</span>;

View File

@ -446,6 +446,7 @@ class ModPackOverview extends React.Component {
</div>
<div className="box-body">
<ModManager
{...this.props}
installedMods={modpack.mods.mods}
deleteMod={this.modPackDeleteModHandler}
toggleMod={this.modPackToggleModHandler}

View File

@ -530,6 +530,7 @@ class ModsContent extends React.Component {
<section className="content">
<ModOverview
{...this.state}
{...this.props}
loadDownloadList={this.loadDownloadList}
submitFactorioLogin={this.handlerFactorioLogin}
toggleMod={this.toggleModHandler}

View File

@ -21,7 +21,8 @@
"react-dom": "^15.0.1",
"react-native-listener": "^1.0.2",
"react-router": "^2.3.0",
"sweetalert": "^1.1.3"
"sweetalert": "^1.1.3",
"semver": "latest"
},
"devDependencies": {
"css-loader": "^0.23.1",