Advertisement
Guest User

Untitled

a guest
Jun 19th, 2020
53
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. var async = require('async');
  2. var path = require('path');
  3. var fs = require('fs-extra');
  4.  
  5. function profile_template() {
  6.   return  {
  7.     id: null,
  8.     time: null,
  9.     releaseTime: null,
  10.     type: null, // release, snapshot, old_version
  11.     group: null, //mojang, ftb, ftb_third_party, pocketmine, etc.
  12.     webui_desc: null,
  13.     weight: 0,
  14.     downloaded: false,
  15.     filename: null, // minecraft_server.1.8.8.jar
  16.     version: null // 1.8.8,
  17.   }
  18. }
  19.  
  20. exports.profile_manifests = {
  21.   mojang: {
  22.     name: "Mojang Official Minecraft Jars",
  23.     request_args: {
  24.       url: 'https://launchermeta.mojang.com/mc/game/version_manifest.json',
  25.       json: true
  26.     },
  27.     handler: function(profile_dir, body, callback) {
  28.       var request = require('request');
  29.       var p = [];
  30.  
  31.       var q = async.queue(function(obj, cb) {
  32.         async.waterfall([
  33.           async.apply(request, obj.url),
  34.           function(response, body, inner_cb) {
  35.             inner_cb(response.statusCode != 200, body)
  36.           },
  37.           function(body, inner_cb) {
  38.             var parsed = JSON.parse(body);
  39.             for (var idx in p)
  40.               if (p[idx]['id'] == obj['id'])
  41.                 try {
  42.                   p[idx]['url'] = parsed['downloads']['server']['url'];
  43.                 } catch (e) {}
  44.             inner_cb();
  45.           }
  46.         ])
  47.         cb();
  48.       }, 2);
  49.  
  50.       q.pause();
  51.  
  52.       try {  // BEGIN PARSING LOGIC
  53.     for (var index in body.versions) {
  54.       var item = new profile_template();
  55.       var ref_obj = body.versions[index];
  56.  
  57.       item['id'] = ref_obj['id'];
  58.       item['time'] = ref_obj['time'];
  59.       item['releaseTime'] = ref_obj['releaseTime'];
  60.       item['group'] = 'mojang';
  61.       item['webui_desc'] = 'Official Mojang Jar';
  62.       item['weight'] = 0;
  63.       item['filename'] = 'minecraft_server.{0}.jar'.format(ref_obj['id']);
  64.       item['downloaded'] = fs.existsSync(path.join(profile_dir, item.id, item.filename));
  65.       item['version'] = ref_obj['id'];
  66.       item['release_version'] = ref_obj['id'];
  67.       item['url'] = 'https://s3.amazonaws.com/Minecraft.Download/versions/{0}/minecraft_server.{0}.jar'.format(item.version);
  68.  
  69.       switch(ref_obj['type']) {
  70.         case 'release':
  71.           item['type'] = ref_obj['type'];
  72.               q.push({ id: item['id'], url: ref_obj.url });
  73.               p.push(item);
  74.           break;
  75.         case 'snapshot':
  76.           item['type'] = ref_obj['type'];
  77.               q.push({ id: item['id'], url: ref_obj.url });
  78.               p.push(item);
  79.           break;
  80.         default:
  81.           item['type'] = 'old_version'; //old_alpha, old_beta
  82.               //q.push({ id: item['id'], url: ref_obj.url });
  83.           break;
  84.       }
  85.           //p.push(item);
  86.     }
  87.       } catch (e) {}
  88.  
  89.       q.resume();
  90.       q.drain = function() {
  91.         callback(null, p);
  92.       }
  93.     }, //end handler
  94.     postdownload: function(profile_dir, dest_filepath, callback) {
  95.       callback();
  96.     }
  97.   },
  98.   ftb: {
  99.     name: 'Feed the Beast Server Packs',
  100.     request_args: {
  101.       url: 'http://dist.creeper.host/FTB2/static/modpacks.xml',
  102.       json: false
  103.     },
  104.     handler: function(profile_dir, body, callback) {
  105.       var p = [];
  106.  
  107.       try {  // BEGIN PARSING LOGIC
  108.         var xml_parser = require('xml2js');
  109.  
  110.         xml_parser.parseString(body, function(inner_err, result) {
  111.           var packs = result['modpacks']['modpack'];
  112.  
  113.           for (var index in packs) {
  114.             var item = new profile_template();
  115.             var ref_obj = packs[index]['$'];
  116.  
  117.             item['id'] = '{0}-{1}'.format(ref_obj['dir'], ref_obj['version']);
  118.             //item['time'] = ref_obj['time'];
  119.             //item['releaseTime'] = ref_obj['releaseTime'];
  120.             item['type'] = 'release';
  121.             item['group'] = 'ftb';
  122.             item['webui_desc'] = '{0} (mc: {1})'.format(ref_obj['name'], ref_obj['mcVersion']);
  123.             item['weight'] = 3;
  124.             item['filename'] = ref_obj['serverPack'];
  125.             item['url'] = 'http://dist.creeper.host/FTB2/modpacks/{0}/{1}/{2}'.format(ref_obj.dir, ref_obj.version.replace(/\./g, '_'), ref_obj.serverPack);
  126.             item['downloaded'] = fs.existsSync(path.join(profile_dir, item.id, item.filename));
  127.             item['version'] = ref_obj['mcVersion'];
  128.             item['release_version'] = ref_obj['version'];
  129.             p.push(item);
  130.  
  131.             var old_versions = ref_obj['oldVersions'].split(';');
  132.             for (var idx in old_versions) {
  133.               var new_item = new profile_template();
  134.  
  135.               new_item['id'] = '{0}-{1}'.format(ref_obj['dir'], old_versions[idx]);
  136.               //new_item['time'] = ref_obj['time'];
  137.               //new_item['releaseTime'] = ref_obj['releaseTime'];
  138.               new_item['type'] = 'old_version';
  139.               new_item['group'] = 'ftb';
  140.               new_item['webui_desc'] = ref_obj['name'];
  141.               new_item['weight'] = 3;
  142.               new_item['filename'] = ref_obj['serverPack'];
  143.               new_item['url'] = 'http://dist.creeper.host/FTB2/modpacks/{0}/{1}/{2}'.format(ref_obj.dir, old_versions[idx].replace(/\./g, '_'), ref_obj.serverPack);
  144.               new_item['downloaded'] = fs.existsSync(path.join(profile_dir, new_item.id, new_item.filename));
  145.               new_item['version'] = ref_obj['mcVersion'];
  146.               new_item['release_version'] = old_versions[idx];
  147.  
  148.               if (old_versions[idx].length > 0 && old_versions[idx] != ref_obj['version'])
  149.                 p.push(new_item);
  150.             }
  151.           }
  152.         }) // end parseString
  153.       } catch (e) {}
  154.  
  155.       callback(null, p);
  156.     }, //end handler
  157.     postdownload: function(profile_dir, dest_filepath, callback) {
  158.       callback();
  159.     }
  160.   },
  161.   ftb_third_party: {
  162.     name: 'Feed the Beast Third-Party Server Packs',
  163.     request_args: {
  164.       url: 'http://dist.creeper.host/FTB2/static/thirdparty.xml',
  165.       json: false
  166.     },
  167.     handler: function(profile_dir, body, callback) {
  168.       var p = [];
  169.  
  170.       try {
  171.         var xml_parser = require('xml2js');
  172.  
  173.         xml_parser.parseString(body, function(inner_err, result) {
  174.           var packs = result['modpacks']['modpack'];
  175.  
  176.           for (var index in packs) {
  177.             var item = new profile_template();
  178.             var ref_obj = packs[index]['$'];
  179.  
  180.             item['id'] = '{0}-{1}'.format(ref_obj['dir'], ref_obj['version']);
  181.             //item['time'] = ref_obj['time'];
  182.             //item['releaseTime'] = ref_obj['releaseTime'];
  183.             item['type'] = 'release';
  184.             item['group'] = 'ftb_third_party';
  185.             item['webui_desc'] = '{0} (mc: {1})'.format(ref_obj['name'], ref_obj['mcVersion']);
  186.             item['weight'] = 3;
  187.             item['filename'] = ref_obj['serverPack'];
  188.             item['url'] = 'http://dist.creeper.host/FTB2/modpacks/{0}/{1}/{2}'.format(ref_obj.dir, ref_obj.version.replace(/\./g, '_'), ref_obj.serverPack);
  189.             item['downloaded'] = fs.existsSync(path.join(profile_dir, item.id, item.filename));
  190.             item['version'] = ref_obj['mcVersion'];
  191.             item['release_version'] = ref_obj['version'];
  192.             p.push(item);
  193.  
  194.             var old_versions = ref_obj['oldVersions'].split(';');
  195.             for (var idx in old_versions) {
  196.               var new_item = new profile_template();
  197.  
  198.               new_item['id'] = '{0}-{1}'.format(ref_obj['dir'], old_versions[idx]);
  199.               //new_item['time'] = ref_obj['time'];
  200.               //new_item['releaseTime'] = ref_obj['releaseTime'];
  201.               new_item['type'] = 'old_version';
  202.               new_item['group'] = 'ftb';
  203.               new_item['webui_desc'] = ref_obj['name'];
  204.               new_item['weight'] = 3;
  205.               new_item['filename'] = ref_obj['serverPack'];
  206.               new_item['url'] = 'http://dist.creeper.host/FTB2/modpacks/{0}/{1}/{2}'.format(ref_obj.dir, ref_obj.version.replace(/\./g, '_'), ref_obj.serverPack);
  207.               new_item['downloaded'] = fs.existsSync(path.join(profile_dir, new_item.id, new_item.filename));
  208.               new_item['version'] = ref_obj['mcVersion'];
  209.               new_item['release_version'] = old_versions[idx];
  210.  
  211.               if (old_versions[idx].length > 0 && old_versions[idx] != ref_obj['version'])
  212.                 p.push(new_item);
  213.             }
  214.           }
  215.         })
  216.       } catch (e) {}
  217.  
  218.       callback(null, p);
  219.     }, //end handler
  220.     postdownload: function(profile_dir, dest_filepath, callback) {
  221.       callback();
  222.     }
  223.   },
  224.   forge: {
  225.     name: 'Forge Mod',
  226.     request_args: {
  227.       url: 'http://files.minecraftforge.net/maven/net/minecraftforge/forge/promotions.json',
  228.       json: true
  229.     },
  230.     handler: function(profile_dir, body, callback) {
  231.       var p = [];
  232.  
  233.       try {
  234.         for (var index in body.promos) {
  235.           var item = new profile_template();
  236.           var ref_obj = body.promos[index];
  237.  
  238.           item['id'] = index;
  239.           item['time'] = ref_obj['modified'];
  240.           item['releaseTime'] = ref_obj['modified'];
  241.           item['type'] = 'release';
  242.           item['group'] = 'forge';
  243.           item['webui_desc'] = 'Forge Jar (build {0})'.format(ref_obj['build']);
  244.           item['weight'] = 0;
  245.           if (ref_obj['branch'])
  246.             item['filename'] = 'forge-{0}-{1}-{2}-installer.jar'.format(ref_obj['mcversion'], ref_obj['version'], ref_obj['branch']);
  247.           else
  248.             item['filename'] = 'forge-{0}-{1}-installer.jar'.format(ref_obj['mcversion'], ref_obj['version']);
  249.           item['downloaded'] = fs.existsSync(path.join(profile_dir, item.id, item.filename));
  250.           item['version'] = ref_obj['mcversion'];
  251.           item['release_version'] = ref_obj['version'];
  252.           if (ref_obj['branch'])
  253.             item['url'] = 'http://files.minecraftforge.net/maven/net/minecraftforge/forge/{0}-{1}-{2}/{3}'.format(ref_obj['mcversion'], ref_obj['version'], ref_obj['branch'], item['filename']);
  254.           else
  255.             item['url'] = 'http://files.minecraftforge.net/maven/net/minecraftforge/forge/{0}-{1}/{2}'.format(ref_obj['mcversion'], ref_obj['version'], item['filename']);
  256.  
  257.           var ver = ref_obj['mcversion'].match(/(\d+)\.(\d+)\.?(\d+)?/);
  258.  
  259.           if (parseInt(ver[1]) >= 1 && parseInt(ver[2]) >= 6)
  260.             p.push(item); // 1.x major, .6 minor, chosen because 1.6.1 changed the installation process so drastically
  261.         }
  262.  
  263.       } catch (e) {}
  264.  
  265.       callback(null, p);
  266.     } //end handler
  267.   },
  268.   paperspigot: {
  269.     name: 'Paper',
  270.     request_args: {
  271.       url: 'https://papermc.io/api/v1/paper',
  272.       json: true
  273.     },
  274.     handler: function (profile_dir, body, callback) {
  275.       var p = [];
  276.  
  277.       try {
  278.         for (var index in body.versions) {
  279.           var version = body.versions[index];
  280.           var item = new profile_template();
  281.  
  282.           item['id'] = 'Paper-{0}-latest'.format(version);
  283.           item['group'] = 'papermc';
  284.           item['webui_desc'] = 'Latest Paper build for {0}'.format(version);
  285.           item['weight'] = 0;
  286.           item['filename'] = 'paperclip.jar'.format(version);
  287.           item['url'] = 'https://papermc.io/api/v1/paper/{0}/latest/download'.format(version);
  288.           item['downloaded'] = fs.existsSync(path.join(profile_dir, item.id, item.filename));
  289.           item['version'] = version;
  290.           item['release_version'] = version;
  291.           item['type'] = 'release'
  292.  
  293.           p.push(item);
  294.         }
  295.       } catch (e) { console.log(e) }
  296.       callback(null, p);
  297.     } //end handler
  298.   },
  299.   spigot: {
  300.     name: 'Spigot',
  301.     handler: function(profile_dir, callback) {
  302.       var p = [];
  303.  
  304.       try {
  305.         var item = {};
  306.  
  307.         item['id'] = 'BuildTools-latest';
  308.         item['time'] = new Date().getTime();
  309.         item['releaseTime'] = new Date().getTime();
  310.         item['type'] = 'release';
  311.         item['group'] = 'spigot';
  312.         item['webui_desc'] = 'Latest BuildTools.jar for building Spigot/Craftbukkit';
  313.         item['weight'] = 0;
  314.         item['filename'] = 'BuildTools.jar';
  315.         item['downloaded'] = fs.existsSync(path.join(profile_dir, item.id, item.filename));
  316.         item['version'] = 0;
  317.         item['release_version'] = '';
  318.         item['url'] = 'https://hub.spigotmc.org/jenkins/job/BuildTools/lastSuccessfulBuild/artifact/target/BuildTools.jar';
  319.  
  320.         p.push(item);
  321.  
  322.       } catch (e) {}
  323.  
  324.       callback(null, p);
  325.     } //end handler
  326.   },
  327.   imagicalmine: {
  328.     name: 'Imagicalmine',
  329.     handler: function(profile_dir, callback) {
  330.       var p = [];
  331.  
  332.       try {
  333.         var item = {};
  334.  
  335.         item['id'] = 'imagicalmine';
  336.         item['time'] = new Date().getTime();
  337.         item['releaseTime'] = new Date().getTime();
  338.         item['type'] = 'release';
  339.         item['group'] = 'imagicalmine';
  340.         item['webui_desc'] = 'Third-party Pocketmine build';
  341.         item['weight'] = 0;
  342.         item['filename'] = 'ImagicalMine.phar';
  343.         item['downloaded'] = fs.existsSync(path.join(profile_dir, item.id, item.filename));
  344.         item['version'] = 0;
  345.         item['release_version'] = '';
  346.         item['url'] = 'http://jenkins.imagicalmine.net:8080/job/ImagicalMine/lastStableBuild/artifact/releases/ImagicalMine.phar';
  347.  
  348.         p.push(item);
  349.       } catch (e) {}
  350.  
  351.       callback(null, p);
  352.     } //end handler
  353.   },
  354.   mianite: {
  355.     name: 'Mianite',
  356.     request_args: {
  357.       url: 'http://mianite.us/repo?api=true',
  358.       json: true
  359.     },
  360.     handler: function(profile_dir, body, callback) {
  361.       var p = [];
  362.  
  363.       try {
  364.         for (var r in body) {
  365.           var item = new profile_template();
  366.           var ref_obj = body[r];
  367.           try {
  368.             var version = ref_obj.version.match(/[\d+]\.[\d+]\.[\d+]/)[0];
  369.           } catch (e) {
  370.             continue;
  371.           }
  372.  
  373.           item['id'] = ref_obj['version'];
  374.           item['group'] = 'mianite';
  375.           item['webui_desc'] = 'Realm of Mianite {0}'.format(version);
  376.           item['weight'] = 10;
  377.           item['filename'] = path.basename(ref_obj['download']);
  378.           item['url'] = ref_obj['download'];
  379.           item['downloaded'] = fs.existsSync(path.join(profile_dir, item.id, item.filename));
  380.           item['version'] = version;
  381.           item['release_version'] = version;
  382.  
  383.           switch (ref_obj['version_tag']) {
  384.             case 'Recommended':
  385.               item['type'] = 'release';
  386.               break;
  387.             default:
  388.               if (ref_obj.version.match(/RC|A/))
  389.                 item['type'] = 'snapshot';
  390.               else
  391.                 item['type'] = 'release';
  392.               break;
  393.           }
  394.  
  395.           p.push(item);
  396.         }
  397.  
  398.       } catch (e) {console.log(e)}
  399.  
  400.       callback(null, p);
  401.     } //end handler
  402.   },
  403.   bungeecord: {
  404.     name: 'BungeeCord',
  405.     request_args: {
  406.       url: 'http://ci.md-5.net/job/BungeeCord/rssAll',
  407.       json: false
  408.     },
  409.     handler: function(profile_dir, body, callback) {
  410.       var p = [];
  411.  
  412.       try {
  413.         var xml_parser = require('xml2js');
  414.  
  415.         xml_parser.parseString(body, function(inner_err, result) {
  416.           try {
  417.             var packs = result['feed']['entry'];
  418.  
  419.             for (var index in packs) {
  420.               var item = new profile_template();
  421.               var ref_obj = packs[index];
  422.  
  423.               item['version'] = packs[index]['id'][0].split(':').slice(-1)[0];
  424.               item['group'] = 'bungeecord';
  425.               item['type'] = 'release';
  426.               item['id'] = 'BungeeCord-{0}'.format(item.version);
  427.               item['webui_desc'] = packs[index]['title'][0];
  428.               item['weight'] = 5;
  429.               item['filename'] = 'BungeeCord-{0}.jar'.format(item.version);
  430.               item['downloaded'] = fs.existsSync(path.join(profile_dir, item.id, item.filename));
  431.               item['url'] = 'http://ci.md-5.net/job/BungeeCord/{0}/artifact/bootstrap/target/BungeeCord.jar'.format(item.version);
  432.               p.push(item);
  433.             }
  434.             callback(err || inner_err, p);
  435.           } catch (e) {}
  436.         })
  437.  
  438.       } catch (e) {console.log(e)}
  439.  
  440.       callback(null, p);
  441.     } //end handler
  442.   },
  443.   spongevanilla: {
  444.     name: 'SpongeVanilla',
  445.     request_args: {
  446.       url: 'https://repo.spongepowered.org/maven/org/spongepowered/spongevanilla/maven-metadata.xml',
  447.       json: false,
  448.       gzip: true
  449.     },
  450.     handler: function(profile_dir, body, callback) {
  451.       var p = [];
  452.  
  453.       try {
  454.         var xml_parser = require('xml2js');
  455.  
  456.         xml_parser.parseString(body, function(inner_err, result) {
  457.           try {
  458.             var packs = result['metadata']['versioning'][0]['versions'][0]['version'];
  459.  
  460.             for (var index in packs) {
  461.               var item = new profile_template();
  462.               var matches = packs[index].match(/([\d\.]+)-([\d\.]+)?-?(\D+)-(\d+)/);
  463.  
  464.               item['version'] = packs[index];
  465.               item['group'] = 'spongevanilla';
  466.  
  467.               switch (matches[3]) {
  468.                 case 'DEV':
  469.                   item['type'] = 'snapshot';
  470.                   break;
  471.                 case 'BETA':
  472.                   item['type'] = 'release';
  473.                   break;
  474.                 default:
  475.                   item['type'] = 'old_versions';
  476.                   break;
  477.               }
  478.  
  479.               item['id'] = 'SpongeVanilla-{0}{1}{2}'.format(matches[1], matches[3][0].toLowerCase(), matches[4]);
  480.               item['webui_desc'] = 'Version {0}, build {1} (mc: {2})'.format(matches[2], matches[4], matches[1]);
  481.               item['weight'] = 5;
  482.               item['filename'] = 'spongevanilla-{0}.jar'.format(item.version);
  483.               item['downloaded'] = fs.existsSync(path.join(profile_dir, item.id, item.filename));
  484.               item['url'] = 'https://repo.spongepowered.org/maven/org/spongepowered/spongevanilla/{0}/spongevanilla-{0}.jar'.format(item.version);
  485.               p.push(item);
  486.             }
  487.             callback(inner_err, p);
  488.           } catch (e) {}
  489.         })
  490.  
  491.       } catch (e) {}
  492.  
  493.       callback(null, p);
  494.     } //end handler
  495.   },
  496.   cuberite: {
  497.     name: "Cuberite C++ Server",
  498.     request_args: {
  499.       url: 'http://builds.cuberite.org/rssLatest',
  500.       json: false
  501.     },
  502.     handler: function(profile_dir, body, callback) {
  503.       var p = [];
  504.  
  505.       try {  // BEGIN PARSING LOGIC
  506.         var item = {};
  507.  
  508.         item['id'] = 'cuberite-x64-latest';
  509.         item['time'] = new Date().getTime();
  510.         item['releaseTime'] = new Date().getTime();
  511.         item['type'] = 'release';
  512.         item['group'] = 'cuberite';
  513.         item['webui_desc'] = 'Latest Linux x64 release';
  514.         item['weight'] = 0;
  515.         item['filename'] = 'Cuberite.tar.gz';
  516.         item['downloaded'] = fs.existsSync(path.join(profile_dir, item.id, item.filename));
  517.         item['version'] = 0;
  518.         item['release_version'] = '';
  519.         item['url'] = 'https://builds.cuberite.org/job/Cuberite%20Linux%20x64%20Master/lastSuccessfulBuild/artifact/Cuberite.tar.gz';
  520.         p.push(JSON.parse(JSON.stringify(item)));
  521.  
  522.         item['id'] = 'cuberite-x86-latest';
  523.         item['time'] = new Date().getTime();
  524.         item['releaseTime'] = new Date().getTime();
  525.         item['type'] = 'release';
  526.         item['group'] = 'cuberite';
  527.         item['webui_desc'] = 'Latest Linux x86 release';
  528.         item['weight'] = 0;
  529.         item['filename'] = 'Cuberite.tar.gz';
  530.         item['downloaded'] = fs.existsSync(path.join(profile_dir, item.id, item.filename));
  531.         item['version'] = 0;
  532.         item['release_version'] = '';
  533.         item['url'] = 'https://builds.cuberite.org/job/Cuberite%20Linux%20x86%20Master/lastSuccessfulBuild/artifact/Cuberite.tar.gz';
  534.         p.push(JSON.parse(JSON.stringify(item)));
  535.  
  536.         item['id'] = 'cuberite-rpi-latest';
  537.         item['time'] = new Date().getTime();
  538.         item['releaseTime'] = new Date().getTime();
  539.         item['type'] = 'release';
  540.         item['group'] = 'cuberite';
  541.         item['webui_desc'] = 'Latest RPI release';
  542.         item['weight'] = 0;
  543.         item['filename'] = 'Cuberite.tar.gz';
  544.         item['downloaded'] = fs.existsSync(path.join(profile_dir, item.id, item.filename));
  545.         item['version'] = 0;
  546.         item['release_version'] = '';
  547.         item['url'] = 'https://builds.cuberite.org/job/Cuberite%20Linux%20raspi-armhf%20Master/lastSuccessfulBuild/artifact/Cuberite.tar.gz';
  548.         p.push(JSON.parse(JSON.stringify(item)));
  549.  
  550.         item['id'] = 'cuberite-bsd-latest';
  551.         item['time'] = new Date().getTime();
  552.         item['releaseTime'] = new Date().getTime();
  553.         item['type'] = 'release';
  554.         item['group'] = 'cuberite';
  555.         item['webui_desc'] = 'Latest FreeBSD x64 release';
  556.         item['weight'] = 0;
  557.         item['filename'] = 'Cuberite.tar.gz';
  558.         item['downloaded'] = fs.existsSync(path.join(profile_dir, item.id, item.filename));
  559.         item['version'] = 0;
  560.         item['release_version'] = '';
  561.         item['url'] = 'https://builds.cuberite.org/job/Cuberite-FreeBSD-x64-Master/lastSuccessfulBuild/artifact/Cuberite.tar.gz';
  562.         p.push(JSON.parse(JSON.stringify(item)));
  563.  
  564.       } catch (e) {}
  565.  
  566.       callback(null, p);
  567.     }, //end handler
  568.     postdownload: function(profile_dir, dest_filepath, callback) {
  569.       var child = require('child_process');
  570.       var which = require('which');
  571.       var binary = which.sync('tar');
  572.       var args = ['--force-local',
  573.                   '-xf', dest_filepath];
  574.       var params = { cwd: profile_dir }
  575.  
  576.       async.series([
  577.         function(cb) {
  578.           var proc = child.spawn(binary, args, params);
  579.           proc.once('exit', function(code) {
  580.             cb(code);
  581.           })
  582.         },
  583.         function(cb) {
  584.           var inside_dir = path.join(profile_dir, 'Server');
  585.           fs.readdir(inside_dir, function(err, files) {
  586.             if (!err)
  587.               async.each(files, function(file, inner_cb) {
  588.                 var old_filepath = path.join(inside_dir, file);
  589.                 var new_filepath = path.join(profile_dir, file);
  590.  
  591.                 fs.move(old_filepath, new_filepath, inner_cb);
  592.               }, cb);
  593.             else
  594.               cb(err);
  595.           })
  596.         }
  597.       ], callback)
  598.     }
  599.   },
  600.   nukkit: {
  601.     name: 'Nukkit',
  602.     handler: function(profile_dir, callback) {
  603.       var p = [];
  604.  
  605.       try {
  606.         var item = {};
  607.  
  608.         item['id'] = 'nukkit-stable';
  609.         item['time'] = new Date().getTime();
  610.         item['releaseTime'] = new Date().getTime();
  611.         item['type'] = 'release';
  612.         item['group'] = 'nukkit';
  613.         item['webui_desc'] = 'Minecraft: PE server for Java (stable)';
  614.         item['weight'] = 0;
  615.         item['filename'] = 'nukkit-1.0-SNAPSHOT.jar';
  616.         item['downloaded'] = fs.existsSync(path.join(profile_dir, item.id, item.filename));
  617.         item['version'] = 0;
  618.         item['release_version'] = '';
  619.         item['url'] = 'http://ci.mengcraft.com:8081/job/nukkit/lastStableBuild/artifact/target/nukkit-1.0-SNAPSHOT.jar';
  620.  
  621.         p.push(item);
  622.  
  623.         var item = {};
  624.  
  625.         item['id'] = 'nukkit-snapshot';
  626.         item['time'] = new Date().getTime();
  627.         item['releaseTime'] = new Date().getTime();
  628.         item['type'] = 'snapshot';
  629.         item['group'] = 'nukkit';
  630.         item['webui_desc'] = 'Minecraft: PE server for Java (last successful)';
  631.         item['weight'] = 0;
  632.         item['filename'] = 'nukkit-1.0-SNAPSHOT.jar';
  633.         item['downloaded'] = fs.existsSync(path.join(profile_dir, item.id, item.filename));
  634.         item['version'] = 0;
  635.         item['release_version'] = '';
  636.         item['url'] = 'http://ci.mengcraft.com:8081/job/nukkit/lastSuccessfulBuild/artifact/target/nukkit-1.0-SNAPSHOT.jar';
  637.  
  638.         p.push(item);
  639.       } catch (e) {}
  640.  
  641.       callback(null, p);
  642.     } //end handler
  643.   },
  644. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement