Display recently visited issues and merge requests

This commit is contained in:
Marcel van Remmerden 2021-06-07 21:00:29 +02:00
parent 768f70fc36
commit 1eba506f99
6 changed files with 1158 additions and 212 deletions

BIN
assets/gymlist.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 436 B

View File

@ -2,16 +2,14 @@
<html>
<head>
<meta charset="UTF-8">
<meta http-equiv="Content-Security-Policy" content="default-src 'self'; script-src 'self'">
<meta http-equiv="X-Content-Security-Policy" content="default-src 'self'; script-src 'self'">
<title>Hello World!</title>
<link rel="stylesheet" href="style.css">
<link rel="preconnect" href="https://fonts.gstatic.com">
<link href="https://fonts.googleapis.com/css2?family=Inter&display=swap" rel="stylesheet">
</head>
<body>
<h1>Hello World!</h1>
We are using Node.js <span id="node-version"></span>,
Chromium <span id="chrome-version"></span>,
and Electron <span id="electron-version"></span>.
<img id="header-logo" src="https://about.gitlab.com/images/press/logo/svg/gitlab-icon-1-color-white-rgb.svg" /></br>
<div id="test"></div>
<script src="./renderer.js"></script>
</body>
</html>

121
myApp.js
View File

@ -1,33 +1,108 @@
const { menubar } = require('menubar')
const { Menu, net } = require("electron")
const { Menu } = require("electron")
const fetch = require('node-fetch');
const Store = require('electron-store');
const store = new Store()
const shell = require('electron').shell
const BrowserHistory = require('node-browser-history');
let access_token = store.get('access_token')
let user_id = store.get('user_id')
let username = store.get('username')
let recentlyVisitedString = ''
let numberOfRecentlyVisited = 10
const mb = menubar({
showDockIcon: false,
showOnAllWorkspaces: false,
icon: __dirname + '/assets/gitlab.png',
browserWindow: {
width: 600,
height: 600
}
});
mb.on('ready', () => {
const contextMenu = Menu.buildFromTemplate([
{ label: 'Quit', click: () => { mb.app.quit(); } }
])
mb.tray.on('right-click', () => {
mb.tray.popUpContextMenu(contextMenu)
})
console.log(access_token)
console.log(user_id)
console.log(username)
const request = net.request(' https://gitlab.com/api/v4/users?username=mvanremmerden')
request.on('response', (response) => {
response.on('data', (chunk) => {
console.log(JSON.parse(chunk)[0].id)
})
response.on('end', () => {
console.log('No more data in response.')
})
})
request.end()
});
if (access_token && user_id && username) {
setupSecondaryMenu()
mb.on('after-create-window', () => {
//mb.window.webContents.openDevTools()
getRecentlyVisited()
mb.window.webContents.setWindowOpenHandler(({ url }) => {
shell.openExternal(url);
return { action: 'deny' };
});
})
} else {
setupSecondaryMenu()
mb.on('after-create-window', () => {
mb.window.loadURL('https://gitlab.com/oauth/authorize?client_id=99c07cc5466cbc721ef2667acd38d3acf45edd2fc314a955861be783585f4be5&redirect_uri=https://gitlab.com&response_type=token&state=test&scope=api')
mb.window.on('page-title-updated', handleLogin)
})
}
function setupSecondaryMenu() {
mb.on('ready', () => {
const contextMenu = Menu.buildFromTemplate([
{ label: 'Quit', click: () => { mb.app.quit(); } }
])
mb.tray.on('right-click', () => {
mb.tray.popUpContextMenu(contextMenu)
})
});
}
function handleLogin() {
if (mb.window.webContents.getURL().indexOf('#access_token=') != '-1') {
const code = mb.window.webContents.getURL().split('#access_token=')[1].replace('&token_type=Bearer&state=test', '')
console.log('https://gitlab.com/api/v4/issues?assignee_id=813373&access_token=' + code)
fetch('https://gitlab.com/api/v4/user?access_token=' + code).then(result => {
return result.json()
}).then(result => {
console.log(code)
console.log(result.id)
console.log(result.username)
store.set('access_token', code)
store.set('user_id', result.id)
store.set('username', result.username)
mb.window.loadURL(`file://${__dirname}/index.html`)
mb.window.removeListener('page-title-updated', handleLogin)
})
} else {
console.log('not loaded')
}
}
function getRecentlyVisited() {
BrowserHistory.getAllHistory(500).then(history => {
history.forEach(item => {
item = item.reverse()
let i = 0
for(let j = 0; j < item.length; j++) {
if (item[j].url.indexOf('https://gitlab.com/') == 0 && (item[j].url.indexOf('/-/issues/') != -1 || item[j].url.indexOf('/-/merge-requests/') != -1)) {
i++
recentlyVisitedString += '<a href=\\"' + item[j].url + '\\" target=\\"_blank\\">' + escapeHtml(item[j].title.split('·')[0]) + '</a></br></br>'
if(i == numberOfRecentlyVisited) {
break
}
}
}
})
mb.window.webContents.executeJavaScript('document.getElementById("test").innerHTML = "' + recentlyVisitedString + '"')
})
}
function escapeHtml(unsafe) {
return unsafe
.replace(/&/g, "&amp;")
.replace(/</g, "&lt;")
.replace(/>/g, "&gt;")
.replace(/"/g, "&quot;")
.replace(/'/g, "&#039;");
}
mb.on('after-create-window', () => {
mb.app.dock.hide();
mb.window.openDevTools()
})

1215
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@ -24,11 +24,14 @@
"@electron-forge/maker-rpm": "^6.0.0-beta.57",
"@electron-forge/maker-squirrel": "^6.0.0-beta.57",
"@electron-forge/maker-zip": "^6.0.0-beta.57",
"electron": "^13.1.1"
"electron": "^13.1.1",
"electron-store": "^8.0.0",
"node-fetch": "^2.6.1"
},
"dependencies": {
"electron-squirrel-startup": "^1.0.0",
"menubar": "^9.0.4"
"menubar": "^9.0.4",
"node-browser-history": "^2.4.5"
},
"config": {
"forge": {

15
style.css Normal file
View File

@ -0,0 +1,15 @@
body {
background-color: #0d1117;
color: #c9d1d9;
padding: 1rem;
font-family: 'Inter';
font-size: 14px;
}
a {
color: #c9d1d9;
text-decoration: none;
}
#header-logo {
width: 40px;
margin: -8px 0 0 -8px;
}