Skip to content
This repository was archived by the owner on Mar 1, 2019. It is now read-only.
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 4 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
@@ -1 +1,4 @@
node_modules/
node_modules/
.idea/
/.env
/dist/
3 changes: 3 additions & 0 deletions .stylelintrc
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
{
"extends": "stylelint-config-standard"
}
12 changes: 10 additions & 2 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,8 @@
"main": "src/main.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"electron": "electron ."
"electron": "electron .",
"release": "node release.js"
},
"repository": {
"type": "git",
Expand All @@ -22,7 +23,14 @@
},
"homepage": "https://github.com/c-bata/shooting-tweets#readme",
"dependencies": {
"electron-prebuilt": "^1.4.3",
"@slack/client": "git+https://github.com/slackapi/node-slack-sdk.git",
"electron": "^1.6.6",
"crashreporter": "^1.1.0",
"dotenv": "^4.0.0",
"twitter": "^1.4.0"
},
"devDependencies": {
"stylelint": "^7.10.1",
"stylelint-config-standard": "^16.0.0"
}
}
27 changes: 27 additions & 0 deletions release.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
var packager = require('electron-packager');
var config = require('./package.json');

packager({
dir: './', // 対象
out: './dist', // 出力先
name: config.name, // 名前
platform: 'darwin', // or win32
arch: 'x64', // 64bit
version: '1.6.6', // electron のバージョン
electronVersion: '1.6.6', // electron のバージョン
icon: 'resource/tray.png', // アイコン

'app-bundle-id': 'localhost', // ドメイン
'app-version': config.version, // バージョン

overwrite: true, // 上書き
asar: false, // アーカイブ
prune: true,
// 無視ファイル
ignore: "node_modules/(electron-packager|electron-prebuilt|\.bin)|release\.js",
}, function done(err, appPath) {
if (err) {
throw new Error(err);
}
console.log('Done!!');
});
35 changes: 23 additions & 12 deletions src/index.html
Original file line number Diff line number Diff line change
@@ -1,23 +1,34 @@
<!DOCTYPE html>
<html>
<head>

<head>
<meta charset="UTF-8">
<title>Hello World!</title>
<link rel="stylesheet" type="text/css" href="style.css">
</head>
<body>
<canvas id="tweetsCanvas"></canvas>
</body>
<script type="text/javascript" src="renderer.js"></script>
<script>
</head>

<body>
<canvas id="tweetsCanvas"></canvas>
</body>
<script type="text/javascript" src="renderer.js"></script>
<script>
const canvas = document.getElementById("tweetsCanvas");
//noinspection ES6ModulesDependencies
const canvasManager = new CanvasManager(canvas);
setIpcRenderer(canvasManager);

function loop() {
canvasManager.draw();
window.requestAnimationFrame(loop);
if (stream_loop_type === 'setTimeout') {
function loop() {
canvasManager.draw();
setTimeout(loop, stream_speed);
}
} else {
function loop() {
canvasManager.draw();
window.requestAnimationFrame(loop);
}
}
loop();
</script>
</html>
</script>

</html>
37 changes: 28 additions & 9 deletions src/main.js
Original file line number Diff line number Diff line change
@@ -1,15 +1,34 @@
const {app} = require('electron')
const createTray = require('./tray')
"use strict";

// .env
require('dotenv').config({ path: __dirname + '/../.env' })

const electron = require("electron")
const app = electron.app
const createTray = require('./tray');

// クラッシュレポート
let crash_report_url = process.env.CRASH_REPORT_URL || '';
if (crash_report_url !== '') {
const crashReporter = electron.crashReporter
crashReporter.start({
productName: 'comet.app',
companyName: 'An individual',
submitURL: crash_report_url,
autoSubmit: false
});
}

app.on('ready', () => {
createTray()
})
createTray()
});

// Quit when all windows are closed.
app.on('window-all-closed', () => {
if (process.platform !== 'darwin') {
app.quit()
}
})
if (process.platform !== 'darwin') {
app.quit()
}
});

app.on('activate', () => {})
app.on('activate', () => {
});
17 changes: 14 additions & 3 deletions src/renderer.js
Original file line number Diff line number Diff line change
@@ -1,15 +1,18 @@
"use strict";

const {ipcRenderer} = require('electron');

class Tweet {
constructor(text) {
this.text = text;
this.y = Math.random() * canvas.height;
this.x = canvas.width;
this.dx = - 2 - (Math.random() * 5);
this.dx = stream_dx_base - (Math.random() * 5);
console.log(stream_dx_base);
}

isDelete(ctx) {
let thresholdX = - ctx.measureText(this.text).width;
let thresholdX = -ctx.measureText(this.text).width;
return thresholdX > this.x
}

Expand Down Expand Up @@ -54,10 +57,18 @@ class CanvasManager {
}
}

//noinspection JSUnusedLocalSymbols
function setIpcRenderer(canvasManager) {
ipcRenderer.on('tweet', function(event, args) {
ipcRenderer.on('tweet', function (event, args) {
var tweet = new Tweet(args);
canvasManager.pushTweet(tweet);
event.sender.send('tweet-reply', 'pong');
});
}

//initialize
let stream_dx_base = parseInt(process.env.STREAM_DX_BASE || '-2');
//noinspection JSUnusedLocalSymbols
let stream_speed = process.env.STREAM_SPEED || '100';
//noinspection JSUnusedLocalSymbols
let stream_loop_type = process.env.STREAM_LOOP_TYPE || 'setTimeout';
62 changes: 62 additions & 0 deletions src/slack-stream.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
"use strict";

let first_flg = true;
let slack_sdk_path = '@slack/client';
let RtmClient = require(slack_sdk_path).RtmClient;
let RTM_EVENTS = require(slack_sdk_path).RTM_EVENTS;
let CLIENT_EVENTS = require(slack_sdk_path).CLIENT_EVENTS;
let bot_token = process.env.SLACK_BOT_TOKEN || '';
let bot_channel = process.env.SLACK_BOT_CHANNEL || '';
// var MemoryDataStore = require(slack_sdk_path).MemoryDataStore;

let rtm = null;

function makeClient(win) {
rtm = new RtmClient(bot_token, {
// Sets the level of logging we require
// logLevel: 'error',
// Initialise a data store for our client, this will load additional helper functions for the storing and retrieval of data
// dataStore: new MemoryDataStore()
});
// The client will emit an RTM.AUTHENTICATED event on successful connection, with the `rtm.start` payload if you want to cache it
rtm.on(CLIENT_EVENTS.RTM.AUTHENTICATED, function (rtmStartData) {
console.log(`Logged in as ${rtmStartData.self.name} of team ${rtmStartData.team.name}, but not yet connected to a channel`);
});
// ここでメッセージを取得
rtm.on(RTM_EVENTS.MESSAGE, function (message) {
// let user = rtm.dataStore.getUserById(rtm.activeUserId)
// console.log(user);
if (message.channel === bot_channel) {
win.webContents.send('tweet', message.text);
console.log(message.text);
}
});
}

function startStream(win) {
console.log('startStream');
makeClient(win);
if (first_flg) {
rtm.start();
first_flg = false;
} else {
if (!rtm.connected) {
console.log('reconnect');
rtm.start();
}
}
}

function stopStream() {
console.log('stopStream');
// rtm.handleWsClose();
if (rtm.connected) {
console.log('disconnect');
rtm.disconnect();
}
}

module.exports = {
startStream: startStream,
stopStream: stopStream
};
2 changes: 2 additions & 0 deletions src/style.css
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,14 @@ html {
height: 100%;
width: 100%
}

body {
margin: 0;
height: 100%;
width: 100%;
/* background-color: rgba(0, 0, 0, 0.0); */
}

canvas {
height: 100%;
width: 100%;
Expand Down
29 changes: 18 additions & 11 deletions src/tray.js
Original file line number Diff line number Diff line change
@@ -1,7 +1,10 @@
const {app, Tray, Menu, ipcMain} = require('electron')
const {startStream, stopStream} = require('./twitter-stream')
const {createWindow, closeWindow} = require('./twitter-window')
let stream_type = process.env.STREAM_TYPE || 'twitter';
//noinspection JSUnusedLocalSymbols
const {startStream, stopStream} = require('./' + stream_type + '-stream');
//noinspection JSUnusedLocalSymbols
const {createWindow, closeWindow} = require('./twitter-window');

const {app, Tray, Menu, ipcMain} = require('electron');
let trayTemplate = [
{
label: 'Settings',
Expand All @@ -12,31 +15,35 @@ let trayTemplate = [
{
label: 'Start',
click: () => {
console.log('Start twitter streaming.')
let win = createWindow()
console.log('Start twitter streaming.');
let win = createWindow();
startStream(win)
}
},
{
label: 'Stop',
click: () => {
console.log('Stop twitter streaming.')
closeWindow()
console.log('Stop twitter streaming.');
closeWindow();
stopStream()
}
},
{
label: 'Quit',
click: () => {
console.log('Bye!')
console.log('Bye!');
app.quit()
}
}
]
];

let tray = null;
module.exports = function createTray() {
const tray = new Tray(`${__dirname}/../resource/tray.png`)
tray = new Tray(`${__dirname}/../resource/tray.png`)
const contextMenu = Menu.buildFromTemplate(trayTemplate)
tray.setToolTip('This is my application.')
tray.setContextMenu(contextMenu)
}
// 環境依存でトレイが勝手に消えるときは使わず開始
// let win = createWindow();
// startStream(win)
};
23 changes: 12 additions & 11 deletions src/twitter-stream.js
Original file line number Diff line number Diff line change
@@ -1,24 +1,25 @@
const Twitter = require('twitter')
const {ipcMain} = require('electron')
const Twitter = require('twitter');
//noinspection JSUnusedLocalSymbols
const {ipcMain} = require('electron');

// If use let, this variable cleaned up by runtime(GC).
var _twitter_stream = null
let hashTag = process.env.HASHTAG
var _twitter_stream = null;
let hashTag = process.env.HASHTAG;
let client = new Twitter({
consumer_key: process.env.TWITTER_CONSUMER_KEY,
consumer_secret: process.env.TWITTER_CONSUMER_SECRET,
access_token_key: process.env.TWITTER_ACCESS_TOKEN_KEY,
access_token_secret: process.env.TWITTER_ACCESS_TOKEN_SECRET
})
});

function startStream(win) {
// Set timelilne for retrieving hashtag
client.stream('statuses/filter', {track: hashTag}, function(stream) {
_twitter_stream = stream
stream.on('data', function(tweet) {
win.webContents.send('tweet', tweet.text)
client.stream('statuses/filter', {track: hashTag}, function (stream) {
_twitter_stream = stream;
stream.on('data', function (tweet) {
win.webContents.send('tweet', tweet.text);
console.log(tweet.text)
})
});
// Handle errors
stream.on('error', function (error) {
console.log(error)
Expand All @@ -33,4 +34,4 @@ function stopStream() {
module.exports = {
startStream: startStream,
stopStream: stopStream
}
};
Loading