implementing the highly wanted select box for hand picking firmware builds that are available on baseflight.net
parent
330928f148
commit
97e37347d6
|
@ -652,6 +652,9 @@
|
|||
"firmwareFlasherNoReboot": {
|
||||
"message": "No reboot sequence"
|
||||
},
|
||||
"firmwareFlasherOnlineReleasesDescription": {
|
||||
"message": "Available online firmware releases"
|
||||
},
|
||||
"firmwareFlasherNoRebootDescription": {
|
||||
"message": "Check if you are flashing board with bootloader pins shorted"
|
||||
},
|
||||
|
@ -697,6 +700,12 @@
|
|||
"firmwareFlasherDate": {
|
||||
"message": "Date:"
|
||||
},
|
||||
"firmwareFlasherHash": {
|
||||
"message": "Hash:"
|
||||
},
|
||||
"firmwareFlasherUrl": {
|
||||
"message": "Go to GitHub to review this commit..."
|
||||
},
|
||||
"firmwareFlasherMessage": {
|
||||
"message": "Message:"
|
||||
},
|
||||
|
|
|
@ -70,6 +70,16 @@
|
|||
font-weight: bold;
|
||||
margin-left: 6px;
|
||||
}
|
||||
.tab-firmware_flasher .options select {
|
||||
width: 180px;
|
||||
height: 20px;
|
||||
|
||||
border: 1px solid silver;
|
||||
}
|
||||
.tab-firmware_flasher .option.releases {
|
||||
margin: 0 0 2px 0;
|
||||
line-height: 20px;
|
||||
}
|
||||
.tab-firmware_flasher .options .description {
|
||||
position: absolute;
|
||||
left: 200px;
|
||||
|
@ -100,6 +110,12 @@
|
|||
.tab-firmware_flasher .git_info p {
|
||||
padding: 5px;
|
||||
}
|
||||
.tab-firmware_flasher .git_info p a {
|
||||
font-weight: bold;
|
||||
}
|
||||
.tab-firmware_flasher .git_info p a:hover {
|
||||
text-decoration: underline;
|
||||
}
|
||||
.warning {
|
||||
border: 1px solid silver;
|
||||
}
|
||||
|
|
|
@ -4,6 +4,12 @@
|
|||
<span class="progressLabel" i18n="firmwareFlasherLoadFirmwareFile"></span>
|
||||
</div>
|
||||
<div class="options">
|
||||
<div class="option releases">
|
||||
<select name="release">
|
||||
<option value="0">Offline</option>
|
||||
</select>
|
||||
<span class="description" i18n="firmwareFlasherOnlineReleasesDescription"></span>
|
||||
</div>
|
||||
<div class="option">
|
||||
<label>
|
||||
<input class="updating" type="checkbox" />
|
||||
|
@ -25,13 +31,6 @@
|
|||
</label>
|
||||
<span class="description" i18n="firmwareFlasherFullChipEraseDescription"></span>
|
||||
</div>
|
||||
<div class="option">
|
||||
<label>
|
||||
<input class="flash_development_firmware" type="checkbox" />
|
||||
<span i18n="firmwareFlasherFlashDevelopmentFirmware"></span>
|
||||
</label>
|
||||
<span class="description" i18n="firmwareFlasherFlashDevelopmentFirmwareDescription"></span>
|
||||
</div>
|
||||
<div class="option">
|
||||
<label>
|
||||
<input class="flash_slowly" type="checkbox" />
|
||||
|
@ -44,6 +43,7 @@
|
|||
<div class="git_info">
|
||||
<div class="title" i18n="firmwareFlasherGithubInfoHead"></div>
|
||||
<p>
|
||||
<strong i18n="firmwareFlasherHash"></strong> <a i18n_title="firmwareFlasherUrl" class="hash" href="#" target="_blank"></a><br />
|
||||
<strong i18n="firmwareFlasherCommiter"></strong> <span class="committer"></span><br />
|
||||
<strong i18n="firmwareFlasherDate"></strong> <span class="date"></span><br />
|
||||
<strong i18n="firmwareFlasherMessage"></strong> <span class="message"></span>
|
||||
|
|
|
@ -29,6 +29,52 @@ TABS.firmware_flasher.initialize = function (callback) {
|
|||
worker.postMessage(str);
|
||||
}
|
||||
|
||||
// Fetch Releases
|
||||
$.get('http://firmware.baseflight.net/listing.json', function (data) {
|
||||
var releases = [],
|
||||
releases_e = $('select[name="release"]').empty(),
|
||||
d, date, offset;
|
||||
|
||||
// filter out what we need
|
||||
for (var i = 0; i < data.length; i++) {
|
||||
if (data[i].target == 'NAZE') {
|
||||
releases.push(data[i]);
|
||||
}
|
||||
}
|
||||
|
||||
// reorder the array by time
|
||||
releases.sort(function (a, b) {
|
||||
return b.time - a.time;
|
||||
});
|
||||
|
||||
// reorder the array by release flag TODO needs to be tested
|
||||
releases.sort(function (a, b) {
|
||||
if (a.release < b.release) {
|
||||
return 1;
|
||||
} else {
|
||||
return 0;
|
||||
}
|
||||
});
|
||||
|
||||
// populate select
|
||||
for (var i = 0; i < releases.length; i++) {
|
||||
d = new Date(releases[i].time * 1000);
|
||||
date = ('0' + (d.getMonth() + 1)).slice(-2) + '.' + ('0' + (d.getDate())).slice(-2) + '.' + d.getFullYear();
|
||||
date += ' - ' + ('0' + d.getHours()).slice(-2) + ':' + ('0' + d.getMinutes()).slice(-2);
|
||||
|
||||
var element = $('<option value="' + i + '">' + (((releases[i].release) ? 'Stable' : 'Dev') + ' ' + date) + '</option>').data('obj', releases[i]);
|
||||
releases_e.append(element);
|
||||
}
|
||||
|
||||
// bind events
|
||||
$('select[name="release"]').change(function() {
|
||||
// hide github info (if it exists)
|
||||
$('div.git_info').slideUp();
|
||||
});
|
||||
}).fail(function () {
|
||||
// Failed to load release list, offline?
|
||||
});
|
||||
|
||||
// UI Hooks
|
||||
$('a.load_file').click(function () {
|
||||
chrome.fileSystem.chooseEntry({type: 'openFile', accepts: [{extensions: ['hex']}]}, function (fileEntry) {
|
||||
|
@ -83,7 +129,7 @@ TABS.firmware_flasher.initialize = function (callback) {
|
|||
});
|
||||
|
||||
$('a.load_remote_file').click(function () {
|
||||
function process_hex(data, development) {
|
||||
function process_hex(data, obj) {
|
||||
intel_hex = data;
|
||||
|
||||
parse_hex(intel_hex, function (data) {
|
||||
|
@ -97,14 +143,8 @@ TABS.firmware_flasher.initialize = function (callback) {
|
|||
|
||||
$('a.flash_firmware').removeClass('locked');
|
||||
|
||||
if (!development) {
|
||||
url = 'https://api.github.com/repos/multiwii/baseflight/commits?page=1&per_page=1&path=obj/baseflight.hex';
|
||||
} else {
|
||||
url = 'https://api.github.com/repos/multiwii/baseflight/commits/' + development.commit;
|
||||
}
|
||||
|
||||
$.get(url, function (data) {
|
||||
var data = (development) ? data : data[0],
|
||||
$.get('https://api.github.com/repos/multiwii/baseflight/commits/' + obj.commit, function (data) {
|
||||
var data = data,
|
||||
d = new Date(data.commit.author.date),
|
||||
offset = d.getTimezoneOffset() / 60,
|
||||
date;
|
||||
|
@ -115,6 +155,7 @@ TABS.firmware_flasher.initialize = function (callback) {
|
|||
|
||||
$('div.git_info .committer').text(data.commit.author.name);
|
||||
$('div.git_info .date').text(date);
|
||||
$('div.git_info .hash').text(data.sha.slice(-7)).prop('href', 'https://github.com/multiwii/baseflight/commit/' + data.sha);
|
||||
$('div.git_info .message').text(data.commit.message);
|
||||
|
||||
$('div.git_info').slideDown();
|
||||
|
@ -130,40 +171,10 @@ TABS.firmware_flasher.initialize = function (callback) {
|
|||
$('a.flash_firmware').addClass('locked');
|
||||
}
|
||||
|
||||
if (!$('input.flash_development_firmware').is(':checked')) {
|
||||
$.get('https://raw.githubusercontent.com/multiwii/baseflight/master/obj/baseflight.hex', function (data) {
|
||||
process_hex(data, false);
|
||||
}).fail(failed_to_load);
|
||||
} else {
|
||||
$.get('http://firmware.baseflight.net/listing.json', function (data) {
|
||||
var filter = [],
|
||||
time = 0,
|
||||
obj = null;
|
||||
|
||||
// filter out what we need
|
||||
for (var i = 0; i < data.length; i++) {
|
||||
if (data[i].target == 'NAZE') {
|
||||
filter.push(data[i]);
|
||||
}
|
||||
}
|
||||
|
||||
if (filter.length > 1) {
|
||||
for (var i = 0; i < filter.length; i++) {
|
||||
if (time < filter[i].time) {
|
||||
time = filter[i].time;
|
||||
obj = filter[i];
|
||||
}
|
||||
}
|
||||
} else {
|
||||
obj = filter[0];
|
||||
}
|
||||
|
||||
$.get('http://firmware.baseflight.net/' + obj.file, function (data) {
|
||||
process_hex(data, obj);
|
||||
}).fail(failed_to_load);
|
||||
|
||||
}).fail(failed_to_load);
|
||||
}
|
||||
var obj = $('select[name="release"] option:selected').data('obj');
|
||||
$.get('http://firmware.baseflight.net/' + obj.file, function (data) {
|
||||
process_hex(data, obj);
|
||||
}).fail(failed_to_load);
|
||||
});
|
||||
|
||||
$('a.flash_firmware').click(function () {
|
||||
|
@ -340,24 +351,6 @@ TABS.firmware_flasher.initialize = function (callback) {
|
|||
});
|
||||
});
|
||||
|
||||
chrome.storage.local.get('flash_development_firmware', function (result) {
|
||||
if (result.flash_development_firmware) {
|
||||
$('input.flash_development_firmware').prop('checked', true);
|
||||
} else {
|
||||
$('input.flash_development_firmware').prop('checked', false);
|
||||
}
|
||||
|
||||
// bind UI hook so the status is saved on change
|
||||
$('input.flash_development_firmware').change(function () {
|
||||
// hide github info (if it exists)
|
||||
$('a.flash_firmware').addClass('locked');
|
||||
$('div.git_info').slideUp();
|
||||
$('span.progressLabel').text(chrome.i18n.getMessage('firmwareFlasherLoadFirmwareFile'));
|
||||
|
||||
chrome.storage.local.set({'flash_development_firmware': $(this).is(':checked')});
|
||||
});
|
||||
});
|
||||
|
||||
chrome.storage.local.get('flash_slowly', function (result) {
|
||||
if (result.flash_slowly) {
|
||||
$('input.flash_slowly').prop('checked', true);
|
||||
|
|
Loading…
Reference in New Issue