Skip to content

Commit

Permalink
Merge pull request #14 from Silk-GUI/Apps
Browse files Browse the repository at this point in the history
version 0.3
  • Loading branch information
zodern committed Jan 5, 2015
2 parents 6787289 + 2c51760 commit 5570df8
Show file tree
Hide file tree
Showing 56 changed files with 1,610 additions and 557 deletions.
4 changes: 4 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -4,3 +4,7 @@ npm-debug.log
roadmap
*.orig
*.*~

.brackets.json

apps/app-defaults/settings/app-defaults.json
42 changes: 19 additions & 23 deletions apps/app-defaults/index.js
Original file line number Diff line number Diff line change
@@ -1,15 +1,12 @@
var methods = Silk.methods;
var defaults = {};

var djson = __dirname + "/settings/app-defaults.json";
var windows;
var Silk = {
defaults: {}
};

methods.add({
"windows": function (windows) {
initialize(windows);
console.log("Silk.defaults " + JSON.stringify(Silk.defaults));
}
});

Expand All @@ -20,7 +17,10 @@ function loadDefaults() {

fs.exists(fileName, function (exists) {
// TODO create file if it doesn't exist
if (!exists) return;
if (!exists) {
fs.writeFileSync(djson, '{}')

}

fs.stat(fileName, function (err, stats) {
if (err) return console.log(err);
Expand Down Expand Up @@ -58,7 +58,6 @@ function saveDefaults() {
for (item in defaults) {

// TODO only save items that have a default
console.log("contents: " + item);
contents[item] = {};
contents[item].default = defaults[item].default;
contents[item].available = [];
Expand All @@ -75,29 +74,26 @@ function saveDefaults() {

function initialize(windows) {

defaults = Silk.defaults;


for (var i = 0; i < windows.length; ++i) {
if (!("opens" in windows[i])) continue;
var opens = windows[i].opens;

//for each mime listed in windows
for (var x = 0; x < opens.length; ++x) {

if (opens[x] in Silk.defaults) {
if (opens[x] in defaults) {

// don't add duplicate apps
if (Silk.defaults[opens[x]].available.indexOf(windows[i].title) < 0) {
Silk.defaults[opens[x]].available.push(windows[i].title);
if (defaults[opens[x]].available.indexOf(windows[i].title) < 0) {
defaults[opens[x]].available.push(windows[i].title);
}

} else {

// create object for defaults

Silk.defaults[opens[x]] = {};
Silk.defaults[opens[x]] = {
defaults[opens[x]] = {};
defaults[opens[x]] = {
default: "",
available: [windows[i].title]
};
Expand All @@ -106,23 +102,23 @@ function initialize(windows) {
}

loadDefaults();
console.log(JSON.stringify(defaults, null, 4));
//console.log(JSON.stringify(defaults, null, 4));
methods.add({
"Silk/appDefaults": function (mime) {
if (mime in Silk.defaults) {
return Silk.defaults[mime];
if (mime in defaults) {
return defaults[mime];
} else {
var ret = Silk.defaults["*"];
var ret = defaults["*"];
ret.mime = "*";
return ret
}
},
"Silk/setDefault": function (data) {
if (data.mime in Silk.defaults) {
Silk.defaults[data.mime].default = data.app;
if (data.mime in defaults) {
defaults[data.mime].default = data.app;
} else {
Silk.defaults[data.mime] = {};
Silk.defaults[data.mime] = {
defaults[data.mime] = {};
defaults[data.mime] = {
default: data.app,
available: []
};
Expand Down
2 changes: 1 addition & 1 deletion apps/app-defaults/settings/app-defaults.json
Original file line number Diff line number Diff line change
@@ -1 +1 @@
{"text/plain":{"default":"","available":[]},"*":{"default":"","available":[]},"undefined":{"default":"Text Editor","available":[]},"text/html":{"default":"Text Editor","available":[]}}
{}
153 changes: 153 additions & 0 deletions apps/appManager/index.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,153 @@
var request = require('request');
var fs = require('fs');
var path = require('path');
var yauzl = require("yauzl");
var mkdirp = require('mkdirp');
var async = require('async');

var methods = Silk.methods;
var apps = [];
var appsFolder = __dirname.split(path.sep);
appsFolder = appsFolder.slice(0, appsFolder.length - 1);
appsFolder = appsFolder.join(path.sep);

methods.add({
"apps/remove": function (data, call_obj, send) {
send(void(0), "Deleting...");

var file = data.folder;
var folder = appsFolder + path.sep + file;
var deleteFolderRecursive = function (path) {
if (fs.existsSync(path)) {
fs.readdirSync(path).forEach(function (file, index) {
var curPath = path + "/" + file;
if (fs.lstatSync(curPath).isDirectory()) { // recurse
deleteFolderRecursive(curPath);
} else { // delete file
fs.unlinkSync(curPath);
}
});
fs.rmdirSync(path);
console.log("Finished removing " + file);
send(void(0), " ");
}
};
deleteFolderRecursive(folder);
},
"apps/list": function (data, call_obj, send) {
Silk.api.call('apps/list', {}, function(err, data){
if(err){
send(err);
} else{
send(void(0), data);
}
})
},
"apps/install": download
});

function download(data, call_ob, send) {

fs.exists(appsFolder + path.sep + data.url.replace("/", "-"), function (exists) {
if (exists === true) {
send(new Error("App already exists"));
return;
}

if (data.url === "") {
send(new Error("Url can not be empty"));
}
var repo = data.url;

var url = "https://api.github.com/repos/" + repo + "/zipball";
var options = {
url: url,
headers: {
'User-Agent': 'silk-gui'
}
};

send(void(0), "Downloading...");
request(options).on('response', function (response) {
}).on('error', function (err) {
send(err)
}).on("end", function () {
send(void(0), "pending");
install(data, call_ob, send)
}).pipe(fs.createWriteStream(__dirname + path.sep + 'test.zip'));

});
}

function install(data, call_ob, send) {
send(void(0), "Installing ...");
var extractTo = appsFolder + path.sep + data.url.replace("/", "-");
try {
yauzl.open(__dirname + path.sep + 'test.zip', function (err, zipfile) {
if (err) {
send(err);
return;
}
zipfile.once('end', function () {
Silk.api.call('apps/start', data.url.replace('/', '-'), function (err, data) {
console.log(error);
send(void(0), "Finished installing!")

});
send(void(0), 'Starting App');
fs.unlink(__dirname + path.sep + 'test.zip', function (err) {
if (err) {
send(err);

}
console.log('Installed ' + data.url);
send(void(0), " ");
})
});
zipfile.on("entry", function (entry) {

if (/\/$/.test(entry.fileName)) {
// directory file names end with '/'
return;
}

var fileName = entry.fileName;
fileName = fileName.split(path.sep);
fileName = fileName.splice(1, fileName.length)
fileName = fileName.join(path.sep);

entry.fileName = fileName;
var dest = path.join(extractTo, entry.fileName)
var destDir = path.dirname(dest)
// dest = dest.split(path.sep);
// dest = dest.slice(0, dest.length - 1);

zipfile.openReadStream(entry, function (err, readStream) {
if (err) {
send(err);
return;
}

mkdirp(destDir, function (err) {
if (err) {
send(err);
}


//entry.fileName = data.url.replace("/", "-");
// ensure parent directory exists, and then:

readStream.pipe(fs.createWriteStream(dest).on("error", function (err) {
send(err)
}))
});

});

});
});

} catch (e) {
send(e);
}
}
Binary file added apps/appManager/public/icon.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading

0 comments on commit 5570df8

Please sign in to comment.