mirror of
https://github.com/Dahlgren/arma-server-web-admin.git
synced 2024-08-30 17:22:10 +00:00
Merge pull request #109 from Dahlgren/feature/remove-playwithsix
Remove Play withSIX
This commit is contained in:
commit
9ca5cb3c82
99
lib/mods.js
99
lib/mods.js
@ -1,14 +1,9 @@
|
|||||||
var async = require('async')
|
|
||||||
var events = require('events')
|
var events = require('events')
|
||||||
var filesize = require('filesize')
|
|
||||||
var fs = require('fs.extra')
|
var fs = require('fs.extra')
|
||||||
var _ = require('lodash')
|
|
||||||
var path = require('path')
|
var path = require('path')
|
||||||
var playwithsix = require('playwithsix')
|
|
||||||
|
|
||||||
var Mods = function (config) {
|
var Mods = function (config) {
|
||||||
this.config = config
|
this.config = config
|
||||||
this.liteMods = true
|
|
||||||
this.mods = []
|
this.mods = []
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -25,52 +20,6 @@ Mods.prototype.delete = function (mod, cb) {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
Mods.prototype.download = function (mod, cb) {
|
|
||||||
var self = this
|
|
||||||
var currentDownloadMod = null
|
|
||||||
|
|
||||||
playwithsix.downloadMod(this.config.path, mod, {lite: this.liteMods}, function (err, mods) {
|
|
||||||
if (currentDownloadMod) {
|
|
||||||
currentDownloadMod.progress = null
|
|
||||||
self.emit('mods', self.mods)
|
|
||||||
}
|
|
||||||
self.updateMods()
|
|
||||||
|
|
||||||
if (cb) {
|
|
||||||
cb(err, mods)
|
|
||||||
}
|
|
||||||
}).on('progress', function (progress) {
|
|
||||||
var modName = progress.mod
|
|
||||||
|
|
||||||
if (!currentDownloadMod || currentDownloadMod.name !== modName) {
|
|
||||||
if (currentDownloadMod) {
|
|
||||||
currentDownloadMod.progress = null
|
|
||||||
}
|
|
||||||
|
|
||||||
var mod = _.find(self.mods, {name: modName})
|
|
||||||
|
|
||||||
if (mod) {
|
|
||||||
currentDownloadMod = mod
|
|
||||||
} else {
|
|
||||||
currentDownloadMod = {
|
|
||||||
name: modName,
|
|
||||||
outdated: false,
|
|
||||||
playWithSix: true
|
|
||||||
}
|
|
||||||
self.mods.push(currentDownloadMod)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Progress in whole percent
|
|
||||||
var newProgress = parseInt(progress.completed / progress.size * 100, 10)
|
|
||||||
|
|
||||||
if (newProgress !== currentDownloadMod.progress) {
|
|
||||||
currentDownloadMod.progress = newProgress
|
|
||||||
self.emit('mods', self.mods)
|
|
||||||
}
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
Mods.prototype.updateMods = function () {
|
Mods.prototype.updateMods = function () {
|
||||||
var self = this
|
var self = this
|
||||||
fs.readdir(self.config.path, function (err, files) {
|
fs.readdir(self.config.path, function (err, files) {
|
||||||
@ -79,52 +28,14 @@ Mods.prototype.updateMods = function () {
|
|||||||
} else {
|
} else {
|
||||||
var mods = files.filter(function (file) {
|
var mods = files.filter(function (file) {
|
||||||
return file.charAt(0) === '@'
|
return file.charAt(0) === '@'
|
||||||
})
|
}).map(function (name) {
|
||||||
|
return {
|
||||||
playwithsix.checkOutdated(self.config.path, function (err, outdatedMods) {
|
name: name
|
||||||
if (err) {
|
|
||||||
console.log('Error checking for outdated mods: ' + err)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
async.map(mods, function (mod, cb) {
|
|
||||||
var modPath = path.join(self.config.path, mod)
|
|
||||||
self.isPlayWithSixMod(modPath, function (isPlayWithSixMod) {
|
|
||||||
cb(null, {
|
|
||||||
name: mod,
|
|
||||||
outdated: outdatedMods && outdatedMods.indexOf(mod) >= 0,
|
|
||||||
progress: null,
|
|
||||||
playWithSix: isPlayWithSixMod
|
|
||||||
})
|
|
||||||
})
|
|
||||||
}, function (err, mods) {
|
|
||||||
if (!err) {
|
|
||||||
self.mods = mods
|
|
||||||
self.emit('mods', mods)
|
|
||||||
}
|
|
||||||
})
|
|
||||||
})
|
})
|
||||||
}
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
Mods.prototype.isPlayWithSixMod = function (modPath, cb) {
|
self.mods = mods
|
||||||
var pwsFile = path.join(modPath, '.synq.json')
|
self.emit('mods', mods)
|
||||||
fs.exists(pwsFile, function (exists) {
|
|
||||||
if (cb) {
|
|
||||||
cb(exists)
|
|
||||||
}
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
Mods.prototype.search = function (query, cb) {
|
|
||||||
playwithsix.search(query, function (err, mods) {
|
|
||||||
if (err) {
|
|
||||||
cb(err)
|
|
||||||
} else {
|
|
||||||
mods.map(function (mod) {
|
|
||||||
mod.formattedSize = filesize(mod.size)
|
|
||||||
})
|
|
||||||
cb(null, mods)
|
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
@ -27,7 +27,6 @@
|
|||||||
"lodash": "^3.6.0",
|
"lodash": "^3.6.0",
|
||||||
"morgan": "^1.8.1",
|
"morgan": "^1.8.1",
|
||||||
"multer": "^1.3.0",
|
"multer": "^1.3.0",
|
||||||
"playwithsix": "0.0.13",
|
|
||||||
"serve-static": "^1.12.1",
|
"serve-static": "^1.12.1",
|
||||||
"slugify": "^1.1.0",
|
"slugify": "^1.1.0",
|
||||||
"socket.io": "^1.0.4",
|
"socket.io": "^1.0.4",
|
||||||
|
@ -1,89 +0,0 @@
|
|||||||
define(function (require) {
|
|
||||||
|
|
||||||
'use strict';
|
|
||||||
|
|
||||||
var $ = require('jquery'),
|
|
||||||
_ = require('underscore'),
|
|
||||||
Backbone = require('backbone'),
|
|
||||||
Marionette = require('marionette'),
|
|
||||||
ListItemView = require('app/views/mods/search/list_item'),
|
|
||||||
Ladda = require('ladda'),
|
|
||||||
Mods = require('app/collections/mods'),
|
|
||||||
tpl = require('text!tpl/mods/form.html');
|
|
||||||
|
|
||||||
return Marionette.CompositeView.extend({
|
|
||||||
|
|
||||||
events: {
|
|
||||||
'submit': 'beforeSubmit',
|
|
||||||
},
|
|
||||||
|
|
||||||
itemView: ListItemView,
|
|
||||||
itemViewContainer: "tbody",
|
|
||||||
template: _.template(tpl),
|
|
||||||
|
|
||||||
initialize: function (options) {
|
|
||||||
this.mods = options.mods;
|
|
||||||
this.collection = new Mods();
|
|
||||||
this.bind('ok', this.submit);
|
|
||||||
this.bind('shown', this.shown);
|
|
||||||
|
|
||||||
var self = this;
|
|
||||||
this.listenTo(this.mods, "change reset add remove", function () {
|
|
||||||
self.collection.trigger('reset');
|
|
||||||
});
|
|
||||||
},
|
|
||||||
|
|
||||||
itemViewOptions: function(options) {
|
|
||||||
options.set('mods', this.mods);
|
|
||||||
},
|
|
||||||
|
|
||||||
beforeSubmit: function(e) {
|
|
||||||
e.preventDefault();
|
|
||||||
this.submit();
|
|
||||||
},
|
|
||||||
|
|
||||||
shown: function (modal) {
|
|
||||||
var $okBtn = modal.$el.find('.btn.ok');
|
|
||||||
$okBtn.addClass('ladda-button').attr('data-style', 'expand-left');
|
|
||||||
|
|
||||||
this.laddaBtn = Ladda.create($okBtn.get(0));
|
|
||||||
|
|
||||||
this.$el.find('form .mod').focus();
|
|
||||||
},
|
|
||||||
|
|
||||||
submit: function (modal) {
|
|
||||||
var self = this;
|
|
||||||
var $form = this.$el.find('form');
|
|
||||||
|
|
||||||
if (modal) {
|
|
||||||
self.modal.preventClose();
|
|
||||||
}
|
|
||||||
|
|
||||||
$form.find('.form-group').removeClass('has-error');
|
|
||||||
$form.find('.help-block').text('');
|
|
||||||
|
|
||||||
this.laddaBtn.start();
|
|
||||||
self.modal.$el.find('.btn.cancel').addClass('disabled');
|
|
||||||
|
|
||||||
$.ajax({
|
|
||||||
url: '/api/mods/search',
|
|
||||||
type: 'POST',
|
|
||||||
data: {
|
|
||||||
query: $form.find('.query').val()
|
|
||||||
},
|
|
||||||
dataType: 'json',
|
|
||||||
success: function (data) {
|
|
||||||
self.laddaBtn.stop();
|
|
||||||
self.modal.$el.find('.btn.cancel').removeClass('disabled');
|
|
||||||
self.collection.set(data);
|
|
||||||
},
|
|
||||||
error: function () {
|
|
||||||
self.laddaBtn.stop();
|
|
||||||
$form.find('.form-group').addClass('has-error');
|
|
||||||
$form.find('.help-block').text('Problem searching, try again');
|
|
||||||
self.modal.$el.find('.btn.cancel').removeClass('disabled');
|
|
||||||
}
|
|
||||||
});
|
|
||||||
},
|
|
||||||
});
|
|
||||||
});
|
|
@ -7,7 +7,6 @@ define(function (require) {
|
|||||||
Backbone = require('backbone'),
|
Backbone = require('backbone'),
|
||||||
Marionette = require('marionette'),
|
Marionette = require('marionette'),
|
||||||
ListItemView = require('app/views/mods/list_item'),
|
ListItemView = require('app/views/mods/list_item'),
|
||||||
FormView = require('app/views/mods/form'),
|
|
||||||
tpl = require('text!tpl/mods/list.html'),
|
tpl = require('text!tpl/mods/list.html'),
|
||||||
|
|
||||||
template = _.template(tpl);
|
template = _.template(tpl);
|
||||||
@ -18,7 +17,6 @@ define(function (require) {
|
|||||||
template: template,
|
template: template,
|
||||||
|
|
||||||
events: {
|
events: {
|
||||||
"click #download": "download",
|
|
||||||
"click #refresh": "refresh",
|
"click #refresh": "refresh",
|
||||||
},
|
},
|
||||||
|
|
||||||
@ -26,19 +24,6 @@ define(function (require) {
|
|||||||
this.listenTo(this.collection, "change reset", this.render);
|
this.listenTo(this.collection, "change reset", this.render);
|
||||||
},
|
},
|
||||||
|
|
||||||
download: function (event) {
|
|
||||||
event.preventDefault();
|
|
||||||
var view = new FormView({mods: this.collection});
|
|
||||||
var modal = new Backbone.BootstrapModal({
|
|
||||||
content: view,
|
|
||||||
animate: true,
|
|
||||||
cancelText: 'Close',
|
|
||||||
okText: 'Search',
|
|
||||||
});
|
|
||||||
view.modal = modal;
|
|
||||||
modal.open();
|
|
||||||
},
|
|
||||||
|
|
||||||
refresh: function (event) {
|
refresh: function (event) {
|
||||||
event.preventDefault();
|
event.preventDefault();
|
||||||
$.ajax({
|
$.ajax({
|
||||||
|
@ -18,7 +18,6 @@ define(function (require) {
|
|||||||
|
|
||||||
events: {
|
events: {
|
||||||
"click .destroy": "destroy",
|
"click .destroy": "destroy",
|
||||||
"click .update": "update",
|
|
||||||
},
|
},
|
||||||
|
|
||||||
destroy: function (event) {
|
destroy: function (event) {
|
||||||
@ -35,25 +34,5 @@ define(function (require) {
|
|||||||
self.model.destroy();
|
self.model.destroy();
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
|
|
||||||
update: function (event) {
|
|
||||||
var self = this;
|
|
||||||
event.preventDefault();
|
|
||||||
|
|
||||||
var $updateBtn = this.$el.find(".update");
|
|
||||||
var laddaBtn = Ladda.create($updateBtn.get(0));
|
|
||||||
laddaBtn.start();
|
|
||||||
|
|
||||||
$.ajax({
|
|
||||||
url: "/api/mods/" + this.model.get('name'),
|
|
||||||
type: 'PUT',
|
|
||||||
success: function (resp) {
|
|
||||||
laddaBtn.stop();
|
|
||||||
},
|
|
||||||
error: function (resp) {
|
|
||||||
laddaBtn.stop();
|
|
||||||
},
|
|
||||||
});
|
|
||||||
},
|
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
@ -1,58 +0,0 @@
|
|||||||
define(function (require) {
|
|
||||||
|
|
||||||
"use strict";
|
|
||||||
|
|
||||||
var $ = require('jquery'),
|
|
||||||
_ = require('underscore'),
|
|
||||||
Backbone = require('backbone'),
|
|
||||||
Marionette = require('marionette'),
|
|
||||||
Ladda = require('ladda'),
|
|
||||||
tpl = require('text!tpl/mods/search/list_item.html'),
|
|
||||||
|
|
||||||
template = _.template(tpl);
|
|
||||||
|
|
||||||
return Marionette.ItemView.extend({
|
|
||||||
tagName: "tr",
|
|
||||||
template: template,
|
|
||||||
|
|
||||||
events: {
|
|
||||||
"click .install": "install"
|
|
||||||
},
|
|
||||||
|
|
||||||
templateHelpers: {
|
|
||||||
progress: function() {
|
|
||||||
if (this.mods.get(this.name)) {
|
|
||||||
return this.mods.get(this.name).get('progress');
|
|
||||||
}
|
|
||||||
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
install: function (event) {
|
|
||||||
var self = this;
|
|
||||||
event.preventDefault();
|
|
||||||
|
|
||||||
this.laddaBtn = Ladda.create(this.$el.find(".ladda-button").get(0));
|
|
||||||
this.laddaBtn.start();
|
|
||||||
this.$el.find('.ladda-button').addClass('disabled');
|
|
||||||
|
|
||||||
$.ajax({
|
|
||||||
url: "/api/mods/",
|
|
||||||
type: 'POST',
|
|
||||||
data: {
|
|
||||||
name: this.model.get('name'),
|
|
||||||
},
|
|
||||||
dataType: 'json',
|
|
||||||
success: function (resp) {
|
|
||||||
self.laddaBtn.stop();
|
|
||||||
self.$el.find('.ladda-button').removeClass('disabled');
|
|
||||||
},
|
|
||||||
error: function (resp) {
|
|
||||||
self.laddaBtn.stop();
|
|
||||||
self.$el.find('.ladda-button').removeClass('disabled');
|
|
||||||
},
|
|
||||||
});
|
|
||||||
},
|
|
||||||
});
|
|
||||||
});
|
|
@ -1,23 +0,0 @@
|
|||||||
<p>
|
|
||||||
Install mods from <a href='http://play.withsix.com/' target=_blank>Play withSIX</a>
|
|
||||||
</p>
|
|
||||||
|
|
||||||
<form class="form" role="form" action="/api/mods" method="POST">
|
|
||||||
<div class="form-group">
|
|
||||||
<label for="query" class="control-label">Search</label>
|
|
||||||
<input type="text" class="form-control query" name="query" id="query">
|
|
||||||
<span class="help-block"></span>
|
|
||||||
</div>
|
|
||||||
</form>
|
|
||||||
|
|
||||||
<table class="table table-striped">
|
|
||||||
<thead>
|
|
||||||
<tr>
|
|
||||||
<th>Mod</th>
|
|
||||||
<th></th>
|
|
||||||
</tr>
|
|
||||||
</thead>
|
|
||||||
|
|
||||||
<!-- want to insert collection items, here -->
|
|
||||||
<tbody></tbody>
|
|
||||||
</table>
|
|
@ -3,11 +3,6 @@
|
|||||||
Refresh
|
Refresh
|
||||||
</a>
|
</a>
|
||||||
|
|
||||||
<a class="btn btn-primary" id="download" href="#">
|
|
||||||
<span class="glyphicon glyphicon-search"></span>
|
|
||||||
Search & Download
|
|
||||||
</a>
|
|
||||||
|
|
||||||
<table class="table table-striped">
|
<table class="table table-striped">
|
||||||
<thead>
|
<thead>
|
||||||
<tr>
|
<tr>
|
||||||
|
@ -1,30 +1,11 @@
|
|||||||
<td>
|
<td>
|
||||||
<a href='#mods/<%-name%>'><%-name%></a>
|
<a href='#mods/<%-name%>'><%-name%></a>
|
||||||
|
|
||||||
<% if (playWithSix) { %>
|
|
||||||
<img src="/images/playwithsix.png" height="20px" width="20px" />
|
|
||||||
<% } %>
|
|
||||||
</td>
|
</td>
|
||||||
<td>
|
<td>
|
||||||
<% if (progress) { %>
|
<a class="btn btn-danger btn-xs destroy ladda-button pull-right" data-style="expand-left">
|
||||||
<div class="progress" style="margin-bottom: 0;">
|
<span class="glyphicon glyphicon-trash"></span>
|
||||||
<div class="progress-bar" role="progressbar" aria-valuenow="<%-progress%>" aria-valuemin="0" aria-valuemax="100" style="width: <%-progress%>%; min-width: 2em;">
|
Delete
|
||||||
<%-progress%>%
|
</a>
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<% } else { %>
|
|
||||||
<a class="btn btn-danger btn-xs destroy ladda-button pull-right" data-style="expand-left">
|
|
||||||
<span class="glyphicon glyphicon-trash"></span>
|
|
||||||
Delete
|
|
||||||
</a>
|
|
||||||
|
|
||||||
<% if (outdated) { %>
|
<div class="clearfix"></div>
|
||||||
<a class="btn btn-primary btn-xs update ladda-button pull-right" data-style="expand-left" style="margin-right: 8px">
|
|
||||||
<span class="glyphicon glyphicon-save"></span>
|
|
||||||
Update
|
|
||||||
</a>
|
|
||||||
<% } %>
|
|
||||||
|
|
||||||
<div class="clearfix"></div>
|
|
||||||
<% } %>
|
|
||||||
</td>
|
</td>
|
||||||
|
@ -1,34 +0,0 @@
|
|||||||
<td style="width: 100%;">
|
|
||||||
<p>
|
|
||||||
<strong><%-name%></strong>
|
|
||||||
<small>
|
|
||||||
<% if (typeof(type) != "undefined" && type) { %>
|
|
||||||
<%-type%>
|
|
||||||
<% } else { %>
|
|
||||||
Unknown
|
|
||||||
<% } %>
|
|
||||||
</small>
|
|
||||||
</p>
|
|
||||||
<p><%-title%></p>
|
|
||||||
</td>
|
|
||||||
<td>
|
|
||||||
<p>
|
|
||||||
<% if (progress()) { %>
|
|
||||||
<div class="progress" style="margin-bottom: 0;">
|
|
||||||
<div class="progress-bar" role="progressbar" aria-valuenow="<%-progress()%>" aria-valuemin="0" aria-valuemax="100" style="width: <%-progress()%>%; min-width: 2em;">
|
|
||||||
<%-progress()%>%
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<% } else { %>
|
|
||||||
<a class="btn btn-primary btn-xs install ladda-button pull-right" data-style="expand-left">
|
|
||||||
<span class="glyphicon glyphicon-save"></span>
|
|
||||||
Install
|
|
||||||
</a>
|
|
||||||
<% } %>
|
|
||||||
<div class="clearfix"></div>
|
|
||||||
</p>
|
|
||||||
<p>
|
|
||||||
<small class="pull-right"><%-formattedSize%></small>
|
|
||||||
<div class="clearfix"></div>
|
|
||||||
</p>
|
|
||||||
</td>
|
|
@ -7,16 +7,6 @@ module.exports = function (modsManager) {
|
|||||||
res.send(modsManager.mods)
|
res.send(modsManager.mods)
|
||||||
})
|
})
|
||||||
|
|
||||||
router.post('/', function (req, res) {
|
|
||||||
modsManager.download(req.body.name)
|
|
||||||
res.status(204).send()
|
|
||||||
})
|
|
||||||
|
|
||||||
router.put('/:mod', function (req, res) {
|
|
||||||
modsManager.download(req.params.mod)
|
|
||||||
res.status(204).send()
|
|
||||||
})
|
|
||||||
|
|
||||||
router.delete('/:mod', function (req, res) {
|
router.delete('/:mod', function (req, res) {
|
||||||
modsManager.delete(req.params.mod, function (err) {
|
modsManager.delete(req.params.mod, function (err) {
|
||||||
if (err) {
|
if (err) {
|
||||||
@ -32,16 +22,5 @@ module.exports = function (modsManager) {
|
|||||||
res.status(204).send()
|
res.status(204).send()
|
||||||
})
|
})
|
||||||
|
|
||||||
router.post('/search', function (req, res) {
|
|
||||||
var query = req.body.query || ''
|
|
||||||
modsManager.search(query, function (err, mods) {
|
|
||||||
if (err || !mods) {
|
|
||||||
res.status(500).send(err)
|
|
||||||
} else {
|
|
||||||
res.send(mods)
|
|
||||||
}
|
|
||||||
})
|
|
||||||
})
|
|
||||||
|
|
||||||
return router
|
return router
|
||||||
}
|
}
|
||||||
|
@ -1,16 +0,0 @@
|
|||||||
var should = require('should')
|
|
||||||
|
|
||||||
var Mods = require('../../lib/mods.js')
|
|
||||||
|
|
||||||
describe('Mods', function () {
|
|
||||||
describe('search()', function () {
|
|
||||||
it('should find mods', function (done) {
|
|
||||||
var mods = new Mods()
|
|
||||||
mods.search('', function (err, mods) {
|
|
||||||
should(err).be.null()
|
|
||||||
mods.should.not.be.empty()
|
|
||||||
done()
|
|
||||||
})
|
|
||||||
})
|
|
||||||
})
|
|
||||||
})
|
|
Loading…
Reference in New Issue
Block a user