mirror of
https://github.com/chylex/TweetDuck.git
synced 2025-04-28 18:15:47 +02:00
202 lines
5.5 KiB
JavaScript
202 lines
5.5 KiB
JavaScript
(function($, $TDU){
|
|
//
|
|
// Variable: Current timeout ID for update checking.
|
|
//
|
|
var updateCheckTimeoutID;
|
|
|
|
//
|
|
// Constant: Update exe file name.
|
|
//
|
|
const updateFileName = "TweetDuck.Update.exe";
|
|
|
|
//
|
|
// Constant: Url that returns JSON data about latest version.
|
|
//
|
|
const updateCheckUrlLatest = "https://api.github.com/repos/chylex/TweetDuck/releases/latest";
|
|
|
|
//
|
|
// Constant: Url that returns JSON data about all versions, including prereleases.
|
|
//
|
|
const updateCheckUrlAll = "https://api.github.com/repos/chylex/TweetDuck/releases";
|
|
|
|
//
|
|
// Constant: Fallback url in case the update installer file is missing.
|
|
//
|
|
const updateDownloadFallback = "https://tweetduck.chylex.com";
|
|
|
|
//
|
|
// Function: Creates the update notification element. Removes the old one if already exists.
|
|
//
|
|
var displayNotification = function(version, download){
|
|
var outdated = version === "unsupported";
|
|
|
|
var css = $("#tweetduck-update-css");
|
|
|
|
if (!css.length){
|
|
css = $(`
|
|
<style id='tweetduck-update-css'>
|
|
#tweetduck-update {
|
|
position: absolute;
|
|
bottom: 0;
|
|
width: 200px;
|
|
height: 170px;
|
|
z-index: 9999;
|
|
color: #fff;
|
|
background-color: rgb(32, 94, 138);
|
|
text-shadow: 1px 1px 1px rgba(0, 0, 0, 0.5);
|
|
}
|
|
|
|
.tdu-title {
|
|
font-size: 17px;
|
|
font-weight: bold;
|
|
text-align: center;
|
|
letter-spacing: 0.2px;
|
|
margin: 8px auto 2px;
|
|
}
|
|
|
|
.tdu-info {
|
|
font-size: 12px;
|
|
text-align: center;
|
|
margin: 3px auto 0;
|
|
}
|
|
|
|
.tdu-buttons button {
|
|
display: block;
|
|
margin: 7px auto 0;
|
|
padding: 4px 10px;
|
|
width: 80%;
|
|
height: 30px;
|
|
border: 0;
|
|
border-radius: 1px;
|
|
outline: none;
|
|
font-size: 14px;
|
|
color: #fff;
|
|
background-color: #419de0;
|
|
text-shadow: 1px 1px 1px rgba(0, 0, 0, 0.5);
|
|
box-shadow: 1px 1px 1px rgba(17, 17, 17, 0.5) !important;
|
|
transition: box-shadow 0.2s ease;
|
|
}
|
|
|
|
.tdu-buttons button:hover {
|
|
text-shadow: 1px 1px 1px rgba(0, 0, 0, 0.75);
|
|
box-shadow: 1px 1px 1px rgba(17, 17, 17, 0.75), 0 -2px 0 rgba(17, 17, 17, 0.33) inset !important;
|
|
}
|
|
|
|
.tdu-buttons button.tdu-btn-ignore, .tdu-buttons button.tdu-btn-later {
|
|
background-color: #607a8e;
|
|
color: #dfdfdf;
|
|
}
|
|
</style>
|
|
`).appendTo(document.head);
|
|
}
|
|
|
|
var ele = $("#tweetduck-update");
|
|
var existed = ele.length > 0;
|
|
|
|
if (existed){
|
|
ele.remove();
|
|
}
|
|
|
|
ele = $(outdated ? `
|
|
<div id='tweetduck-update'>
|
|
<p class='tdu-title'>Unsupported System</p>
|
|
<p class='tdu-info'>You will not receive updates.</p>
|
|
<div class='tdu-buttons'>
|
|
<button class='tdu-btn-unsupported'>Read more</button>
|
|
<button class='tdu-btn-ignore'>Dismiss</button>
|
|
</div>
|
|
</div>
|
|
` : `
|
|
<div id='tweetduck-update'>
|
|
<p class='tdu-title'>TweetDuck Update</p>
|
|
<p class='tdu-info'>Version ${version} is now available.</p>
|
|
<div class='tdu-buttons'>
|
|
<button class='tdu-btn-download'>Update now</button>
|
|
<button class='tdu-btn-later'>Remind me later</button>
|
|
<button class='tdu-btn-ignore'>Ignore this update</button>
|
|
</div>
|
|
</div>
|
|
`).appendTo(document.body).css("display", existed ? "block" : "none");
|
|
|
|
var hide = function(){
|
|
ele.remove();
|
|
css.remove();
|
|
};
|
|
|
|
var buttonDiv = ele.children(".tdu-buttons").first();
|
|
|
|
buttonDiv.children(".tdu-btn-download").click(function(){
|
|
hide();
|
|
|
|
if (download){
|
|
$TDU.onUpdateAccepted();
|
|
}
|
|
else{
|
|
$TDU.openBrowser(updateDownloadFallback);
|
|
}
|
|
});
|
|
|
|
buttonDiv.children(".tdu-btn-later").click(function(){
|
|
clearTimeout(updateCheckTimeoutID);
|
|
ele.slideUp(hide);
|
|
});
|
|
|
|
buttonDiv.children(".tdu-btn-unsupported").click(function(){
|
|
$TDU.openBrowser("https://github.com/chylex/TweetDuck/wiki/Supported-Systems");
|
|
});
|
|
|
|
buttonDiv.children(".tdu-btn-ignore,.tdu-btn-unsupported").click(function(){
|
|
$TDU.onUpdateDismissed();
|
|
ele.slideUp(hide);
|
|
});
|
|
|
|
if (!existed){
|
|
ele.slideDown();
|
|
}
|
|
|
|
return ele;
|
|
};
|
|
|
|
//
|
|
// Function: Returns milliseconds until the start of the next hour, with an extra offset in seconds that can skip an hour if the clock would roll over too soon.
|
|
//
|
|
var getTimeUntilNextHour = function(extra){
|
|
var now = new Date();
|
|
var offset = new Date(+now+extra*1000);
|
|
return new Date(offset.getFullYear(), offset.getMonth(), offset.getDate(), offset.getHours()+1, 0, 0)-now;
|
|
};
|
|
|
|
//
|
|
// Function: Runs an update check and updates all DOM elements appropriately.
|
|
//
|
|
var runUpdateCheck = function(eventID, versionTag, dismissedVersionTag, allowPre){
|
|
clearTimeout(updateCheckTimeoutID);
|
|
updateCheckTimeoutID = setTimeout($TDU.triggerUpdateCheck, getTimeUntilNextHour(60*30)); // 30 minute offset
|
|
|
|
$.getJSON(allowPre ? updateCheckUrlAll : updateCheckUrlLatest, function(response){
|
|
var release = allowPre ? response[0] : response;
|
|
|
|
var tagName = release.tag_name;
|
|
var hasUpdate = tagName !== versionTag && tagName !== dismissedVersionTag && release.assets.length > 0;
|
|
|
|
if (hasUpdate){
|
|
var obj = release.assets.find(asset => asset.name === updateFileName) || { browser_download_url: "" };
|
|
displayNotification(tagName, obj.browser_download_url);
|
|
|
|
if (eventID){ // ignore undefined and 0
|
|
$TDU.onUpdateCheckFinished(eventID, tagName, obj.browser_download_url);
|
|
}
|
|
}
|
|
else if (eventID){ // ignore undefined and 0
|
|
$TDU.onUpdateCheckFinished(eventID, null, null);
|
|
}
|
|
});
|
|
};
|
|
|
|
//
|
|
// Block: Setup global functions.
|
|
//
|
|
window.TDUF_displayNotification = displayNotification;
|
|
window.TDUF_runUpdateCheck = runUpdateCheck;
|
|
})($, $TDU);
|