Compare commits
3 Commits
dev
...
auto-49153
| Author | SHA1 | Date | |
|---|---|---|---|
| c4703eb5ba | |||
| c8c60e693f | |||
| f2aa5bdcf2 |
26
main.js
26
main.js
@@ -214,12 +214,7 @@ let mainMenu = [
|
||||
type: 'separator',
|
||||
},
|
||||
{
|
||||
label: 'Darkmode',
|
||||
accelerator: !isOsx ? 'Ctrl+Shift+D' : 'Shift+Cmd+D',
|
||||
click() {
|
||||
mainWindow.show();
|
||||
mainWindow.webContents.send('darkmode');
|
||||
}
|
||||
label: ''
|
||||
},
|
||||
{
|
||||
type: 'separator',
|
||||
@@ -336,6 +331,8 @@ let avatarCache = {};
|
||||
let avatarPlaceholder = `${__dirname}/src/assets/images/user-fallback.png`;
|
||||
const icon = `${__dirname}/src/assets/images/dock.png`;
|
||||
|
||||
|
||||
|
||||
async function getIcon(cookies, userid, src) {
|
||||
var cached = avatarCache[userid];
|
||||
var icon;
|
||||
@@ -482,19 +479,20 @@ function createMenu() {
|
||||
mainWindow.setMenu(menu);
|
||||
}
|
||||
}
|
||||
// 实现单例,在启动第二个实例后,激活主窗口,然后退出第二个实例
|
||||
const shouldQuit = app.makeSingleInstance(() => {
|
||||
if (mainWindow) {
|
||||
if (mainWindow.isMinimized()) mainWindow.restore();
|
||||
mainWindow.show();
|
||||
mainWindow.focus();
|
||||
if (mainWindow.isMinimized()) mainWindow.restore()
|
||||
mainWindow.focus()
|
||||
}
|
||||
});
|
||||
shouldQuit && app.quit();
|
||||
})
|
||||
|
||||
shouldQuit && app.quit()
|
||||
|
||||
const createMainWindow = () => {
|
||||
var mainWindowState = windowStateKeeper({
|
||||
defaultWidth: 745,
|
||||
defaultHeight: 450,
|
||||
defaultWidth: 1300,
|
||||
defaultHeight: 700,
|
||||
});
|
||||
|
||||
mainWindow = new BrowserWindow({
|
||||
@@ -716,7 +714,6 @@ const createMainWindow = () => {
|
||||
mainWindow.webContents.setUserAgent('Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/603.3.8 (KHTML, like Gecko) Version/10.1.2 Safari/603.3.8');
|
||||
createMenu();
|
||||
};
|
||||
|
||||
app.setName(pkg.name);
|
||||
app.dock && app.dock.setIcon(icon);
|
||||
|
||||
@@ -725,6 +722,7 @@ app.on('before-quit', () => {
|
||||
// Fix issues #14
|
||||
forceQuit = true;
|
||||
});
|
||||
|
||||
app.on('activate', e => {
|
||||
if (!mainWindow.isVisible()) {
|
||||
mainWindow.show();
|
||||
|
||||
14
package.json
14
package.json
@@ -1,10 +1,10 @@
|
||||
{
|
||||
"name": "wewechat",
|
||||
"version": "1.2.3",
|
||||
"version": "1.2.2",
|
||||
"description": "make weweChat great again!!!",
|
||||
"main": "main.js",
|
||||
"scripts": {
|
||||
"test": "yarn build && ./node_modules/.bin/electron ./dist/main.js",
|
||||
"test": "echo \"Error: no test specified\" && exit 1",
|
||||
"js-lint": "node node_modules/.bin/eslint .",
|
||||
"css-lint": "stylelint --fix src/**/*.css",
|
||||
"lint": "yarn css-lint && yarn js-lint",
|
||||
@@ -23,7 +23,7 @@
|
||||
"author": {
|
||||
"email": "845541909@qq.com"
|
||||
},
|
||||
"homepage": "https://gitee.com/spark-community-works-collections/wewechat-plus-plus/README.md",
|
||||
"homepage": "https://gitee.com/spark-community-works-collections/wewechat-plus-plus/README.md",
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "https://gitee.com/spark-community-works-collections/wewechat-plus-plus"
|
||||
@@ -54,7 +54,7 @@
|
||||
},
|
||||
"linux": {
|
||||
"icon": "../resource",
|
||||
"category": "Network",
|
||||
"category": "Chat",
|
||||
"executableName": "wewechat",
|
||||
"target": [
|
||||
"deb",
|
||||
@@ -75,8 +75,9 @@
|
||||
},
|
||||
"publish": [
|
||||
{
|
||||
"provider": "generic",
|
||||
"url": "https://gitee.com/spark-community-works-collections/wewechat-plus-plus/raw/master/"
|
||||
"provider": "github",
|
||||
"owner": "riceneeder",
|
||||
"repo": "weweChat"
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -85,7 +86,6 @@
|
||||
"axios": "^0.18.0",
|
||||
"browser-md5-file": "^1.0.0",
|
||||
"classname": "^0.0.0",
|
||||
"darkmode-js": "^1.5.7",
|
||||
"delegate": "^3.1.3",
|
||||
"electron-context-menu": "^0.10.0",
|
||||
"electron-json-storage": "^4.0.2",
|
||||
|
||||
11
src/app.js
11
src/app.js
@@ -4,7 +4,6 @@ import { render } from 'react-dom';
|
||||
import { Provider } from 'mobx-react';
|
||||
import { HashRouter } from 'react-router-dom';
|
||||
import { ipcRenderer } from 'electron';
|
||||
import Darkmode from 'darkmode-js';
|
||||
|
||||
import './global.css';
|
||||
import './assets/fonts/icomoon/style.css';
|
||||
@@ -28,11 +27,6 @@ class App extends Component {
|
||||
|
||||
componentDidMount() {
|
||||
var navigator = this.refs.navigator;
|
||||
const options = {
|
||||
time: '0.5s',
|
||||
mixColor: '#cccccc',
|
||||
};
|
||||
const darkmode = new Darkmode(options);
|
||||
|
||||
// Hide the tray icon
|
||||
ipcRenderer.on('hide-tray', () => {
|
||||
@@ -136,11 +130,6 @@ class App extends Component {
|
||||
ipcRenderer.on('show-errors', (event, args) => {
|
||||
stores.snackbar.showMessage(args.message);
|
||||
});
|
||||
|
||||
// Dark mode
|
||||
ipcRenderer.on('darkmode', () => {
|
||||
darkmode.toggle();
|
||||
});
|
||||
}
|
||||
|
||||
render() {
|
||||
|
||||
@@ -5,13 +5,6 @@
|
||||
<meta charset="utf-8">
|
||||
<title>weweChat</title>
|
||||
</head>
|
||||
<style>
|
||||
.darkmode-layer {
|
||||
width: 100%;
|
||||
height: 1px;
|
||||
top: -1px;
|
||||
}
|
||||
</style>
|
||||
<body>
|
||||
<div id="root"></div>
|
||||
<script>
|
||||
|
||||
@@ -29,7 +29,7 @@ export default class MessageInput extends Component {
|
||||
&& user.length === 1
|
||||
&& user.slice(-1).pop().UserName === this.props.me.UserName
|
||||
) {
|
||||
this.props.showMessage('不能向自己发送消息');
|
||||
this.props.showMessage('Can\'t send messages to yourself.');
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -62,7 +62,7 @@ export default class MessageInput extends Component {
|
||||
);
|
||||
|
||||
if (!res) {
|
||||
await this.props.showMessage(batch ? `Sending message to ${e.NickName} has failed!` : '消息发送失败');
|
||||
await this.props.showMessage(batch ? `Sending message to ${e.NickName} has failed!` : 'Failed to send message.');
|
||||
}
|
||||
|
||||
return true;
|
||||
@@ -114,7 +114,7 @@ export default class MessageInput extends Component {
|
||||
continue;
|
||||
}
|
||||
// In batch mode just show the failed message
|
||||
showMessage('发送图片失败');
|
||||
showMessage('Failed to send image.');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
border: 0;
|
||||
padding-right: 17px;
|
||||
background: 0;
|
||||
color: #808080;
|
||||
color: #333;
|
||||
font-size: 14px;
|
||||
outline: 0;
|
||||
}
|
||||
|
||||
@@ -25,9 +25,9 @@ export default class Avatar extends Component {
|
||||
className="disabledDrag"
|
||||
src="assets/images/offline.png" />
|
||||
|
||||
<h1>离线了离线了!</h1>
|
||||
<h1>Oops, seems like you are offline!</h1>
|
||||
|
||||
<button onClick={e => window.location.reload()}>尝试重新加载</button>
|
||||
<button onClick={e => window.location.reload()}>Reload</button>
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
|
||||
@@ -145,7 +145,7 @@ export default class UserList extends Component {
|
||||
return (
|
||||
<li className={classes.notfound}>
|
||||
<img src="assets/images/crash.png" />
|
||||
<h3>没有搜索到 '{searching}'</h3>
|
||||
<h3>Can't find any people matching '{searching}'</h3>
|
||||
</li>
|
||||
);
|
||||
}
|
||||
@@ -180,7 +180,7 @@ export default class UserList extends Component {
|
||||
autoFocus={true}
|
||||
onKeyUp={e => this.navigation(e)}
|
||||
onInput={e => this.search(e.target.value)}
|
||||
placeholder="输入需要搜索的对象"
|
||||
placeholder="Type to Search..."
|
||||
ref="input"
|
||||
type="text" />
|
||||
|
||||
|
||||
@@ -27,18 +27,18 @@ export default class AddFriend extends Component {
|
||||
onCancel={e => close()}
|
||||
show={show}>
|
||||
<ModalBody className={classes.container}>
|
||||
发送好友请求
|
||||
Send friend request first
|
||||
|
||||
<input
|
||||
autoFocus={true}
|
||||
defaultValue={`你好,我是 ${me && me.User.NickName}`}
|
||||
defaultValue={`Hallo, im ${me && me.User.NickName}`}
|
||||
ref="input"
|
||||
type="text" />
|
||||
|
||||
<div>
|
||||
<button onClick={e => this.addFriend()}>发送</button>
|
||||
<button onClick={e => this.addFriend()}>Send</button>
|
||||
|
||||
<button onClick={e => close()}>取消</button>
|
||||
<button onClick={e => close()}>Cancel</button>
|
||||
</div>
|
||||
</ModalBody>
|
||||
</Modal>
|
||||
|
||||
@@ -88,7 +88,7 @@ export default class AddMember extends Component {
|
||||
onCancel={e => this.close()}
|
||||
show={this.props.show}>
|
||||
<ModalBody className={classes.container}>
|
||||
添加群组
|
||||
Add Members
|
||||
|
||||
<div className={classes.avatars}>
|
||||
{
|
||||
@@ -110,10 +110,10 @@ export default class AddMember extends Component {
|
||||
<button
|
||||
disabled={!this.state.selected.length}
|
||||
onClick={e => this.add(this.state.selected)}>
|
||||
添加
|
||||
Add
|
||||
</button>
|
||||
|
||||
<button onClick={e => this.close()}>取消</button>
|
||||
<button onClick={e => this.close()}>Cancel</button>
|
||||
</div>
|
||||
</ModalBody>
|
||||
</Modal>
|
||||
|
||||
@@ -103,7 +103,7 @@ export default class BatchSend extends Component {
|
||||
<input
|
||||
autoFocus={true}
|
||||
onInput={e => this.search(e.target.value)}
|
||||
placeholder="批量发送消息,选择一个或多个用户"
|
||||
placeholder="Batch to send message, Choose one or more user."
|
||||
type="text" />
|
||||
|
||||
<span>
|
||||
@@ -126,7 +126,7 @@ export default class BatchSend extends Component {
|
||||
(searching && filtered.length === 0) && (
|
||||
<div className={classes.notfound}>
|
||||
<img src="assets/images/crash.png" />
|
||||
<h1>不能找到 '{searching}'</h1>
|
||||
<h1>Can't find any people matching '{searching}'</h1>
|
||||
</div>
|
||||
)
|
||||
}
|
||||
|
||||
@@ -49,14 +49,14 @@ export default class ConfirmImagePaste extends Component {
|
||||
fullscreen={true}
|
||||
show={show}>
|
||||
<ModalBody className={classes.container}>
|
||||
发送图片 ?
|
||||
Send image ?
|
||||
|
||||
<img src={image} />
|
||||
|
||||
<div>
|
||||
<input onKeyUp={e => this.navigation(e)} id="imageInputHidden" style={{'zIndex': '-1', 'position': 'absolute', 'top': '-20px'}} />
|
||||
<button onClick={e => ok()}>发送</button>
|
||||
<button onClick={e => cancel()}>取消</button>
|
||||
<button onClick={e => ok()}>Send</button>
|
||||
<button onClick={e => cancel()}>Cancel</button>
|
||||
</div>
|
||||
</ModalBody>
|
||||
</Modal>
|
||||
|
||||
@@ -82,7 +82,7 @@ export default class Contacts extends Component {
|
||||
<div className={clazz(classes.container, classes.notfound)}>
|
||||
<div className={classes.inner}>
|
||||
<img src="assets/images/crash.png" />
|
||||
<h1>找不到 '{query}'</h1>
|
||||
<h1>Can't find any people matching '{query}'</h1>
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
|
||||
@@ -11,7 +11,7 @@ export default class Placeholder extends Component {
|
||||
className={classes.button}
|
||||
href="mailto:var.845541909@qq.com?Subject=WeWeChat%20Feedback"
|
||||
target="_blank">
|
||||
发送反馈
|
||||
Send Feedback
|
||||
<i className="icon-ion-ios-email-outline" />
|
||||
</a>
|
||||
|
||||
@@ -19,8 +19,8 @@ export default class Placeholder extends Component {
|
||||
className={classes.button}
|
||||
href="https://gitee.com/spark-community-works-collections/wewechat-plus-plus"
|
||||
target="_blank">
|
||||
查看代码
|
||||
<i className="icon-ion-fork-repo" />
|
||||
Fork on Github
|
||||
<i className="icon-ion-social-github" />
|
||||
</a>
|
||||
</div>
|
||||
);
|
||||
|
||||
@@ -7,6 +7,7 @@
|
||||
|
||||
.footer {
|
||||
position: relative;
|
||||
background: #fff;
|
||||
box-shadow: inset 0 1px 0 0 var(--shadow-color);
|
||||
z-index: 9;
|
||||
|
||||
@@ -77,7 +78,7 @@
|
||||
line-height: 60px;
|
||||
border: 0;
|
||||
background: 0;
|
||||
color: #808080;
|
||||
color: #333;
|
||||
font-size: 14px;
|
||||
outline: 0;
|
||||
}
|
||||
@@ -106,7 +107,7 @@
|
||||
position: relative;
|
||||
margin-right: 17px;
|
||||
width: 166px;
|
||||
color: #808080;
|
||||
color: rgba(0, 0, 0, .8);
|
||||
font-size: 14px;
|
||||
padding: 9px 8px;
|
||||
font-family: 'Roboto';
|
||||
|
||||
@@ -103,7 +103,7 @@ export default class Forward extends Component {
|
||||
发送消息
|
||||
</button>
|
||||
|
||||
<button onClick={e => this.close()}>取消</button>
|
||||
<button onClick={e => this.close()}>Cancel</button>
|
||||
</div>
|
||||
</ModalBody>
|
||||
</Modal>
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
font-family: "system-ui";
|
||||
font-weight: normal;
|
||||
width: 100%;
|
||||
color: #c3c3c3;
|
||||
color: #777;
|
||||
text-align: center;
|
||||
background: rgba(255, 255, 255, 1);
|
||||
-webkit-user-select: none;
|
||||
|
||||
@@ -155,7 +155,7 @@ export default class ChatContent extends Component {
|
||||
return `
|
||||
<div class="${classes.invalidEmoji}">
|
||||
<div></div>
|
||||
<span>不支持的emoji,请在其他客户端查看</span>
|
||||
<span>Send an emoji, view it on mobile</span>
|
||||
</div>
|
||||
`;
|
||||
|
||||
@@ -201,7 +201,7 @@ export default class ChatContent extends Component {
|
||||
console.error('Invalid video message: %o', message);
|
||||
|
||||
return `
|
||||
收到无法解析的视频消息,请参阅控制台输出
|
||||
Receive an invalid video message, please see the console output.
|
||||
`;
|
||||
}
|
||||
|
||||
@@ -215,7 +215,7 @@ export default class ChatContent extends Component {
|
||||
|
||||
return `
|
||||
<div class="${classes.transfer}">
|
||||
<h4>转账消息</h4>
|
||||
<h4>Money Transfer</h4>
|
||||
<span>💰 ${transfer.money}</span>
|
||||
<p>如需收钱,请打开手机微信确认收款。</p>
|
||||
</div>
|
||||
@@ -257,7 +257,7 @@ export default class ChatContent extends Component {
|
||||
return `
|
||||
<div class="${classes.locationSharing}">
|
||||
<i class="icon-ion-ios-location"></i>
|
||||
位置分享,请查看其他客户端
|
||||
Location sharing, Please check your phone.
|
||||
</div>
|
||||
`;
|
||||
}
|
||||
@@ -485,7 +485,7 @@ export default class ChatContent extends Component {
|
||||
var user = this.props.user;
|
||||
var menu = new remote.Menu.buildFromTemplate([
|
||||
{
|
||||
label: '切换对话',
|
||||
label: 'Toggle the conversation',
|
||||
click: () => {
|
||||
this.props.toggleConversation();
|
||||
}
|
||||
@@ -535,7 +535,7 @@ export default class ChatContent extends Component {
|
||||
});
|
||||
|
||||
if (counter) {
|
||||
tips.innerHTML = `你有${counter}个未读消息`;
|
||||
tips.innerHTML = `You has ${counter} unread messages.`;
|
||||
tips.classList.add(classes.show);
|
||||
} else {
|
||||
tips.classList.remove(classes.show);
|
||||
@@ -573,7 +573,7 @@ export default class ChatContent extends Component {
|
||||
let counter = viewport.querySelectorAll(`.${classes.message}.unread`).length;
|
||||
|
||||
if (counter) {
|
||||
tips.innerHTML = `你有${counter}个未读消息`;
|
||||
tips.innerHTML = `You has ${counter} unread messages.`;
|
||||
tips.classList.add(classes.show);
|
||||
}
|
||||
return;
|
||||
|
||||
@@ -114,7 +114,7 @@
|
||||
width: 32px;
|
||||
border-radius: 0;
|
||||
z-index: 9;
|
||||
box-shadow: 0 0 10px 0 rgba(225, 225, 225, 0.5);
|
||||
box-shadow: 0 0 10px 0 rgba(0, 0, 0, .5);
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
@@ -165,7 +165,7 @@
|
||||
& .content {
|
||||
position: relative;
|
||||
max-width: 100%;
|
||||
background: rgba(225, 225, 225, 0.5);
|
||||
background: #fff;
|
||||
box-shadow: 0 6px 28px 0 rgba(230, 230, 230, 100);
|
||||
}
|
||||
|
||||
@@ -538,7 +538,7 @@
|
||||
}
|
||||
|
||||
& .content {
|
||||
background: rgba(0, 0, 200, 0.5);
|
||||
background: #7ebef8;
|
||||
}
|
||||
|
||||
& p {
|
||||
|
||||
@@ -209,7 +209,7 @@ export default class SearchBar extends Component {
|
||||
onFocus={e => this.filter(e.target.value)}
|
||||
onInput={e => this.filter(e.target.value)}
|
||||
onKeyUp={e => this.navigation(e)}
|
||||
placeholder="搜索 ..."
|
||||
placeholder="Search ..."
|
||||
ref="search"
|
||||
type="text" />
|
||||
{
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
height: calc(100vh - 100px);
|
||||
overflow: hidden;
|
||||
overflow-y: auto;
|
||||
background: rgba(255, 255, 255, .8);
|
||||
box-shadow: inset 0 1px 0 0 #eaedea;
|
||||
filter: blur(0);
|
||||
transition: .2s;
|
||||
|
||||
@@ -195,7 +195,7 @@ export default class Layout extends Component {
|
||||
|
||||
<i className="icon-ion-ios-cloud-upload-outline" />
|
||||
|
||||
<h2>将文件拖到此处</h2>
|
||||
<h2>Drop your file here</h2>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -24,8 +24,8 @@ export default class Login extends Component {
|
||||
src={this.props.avatar} />
|
||||
}
|
||||
|
||||
<p>扫码成功</p>
|
||||
<p>请在手机微信上确认登陆</p>
|
||||
<p>Scan successful</p>
|
||||
<p>Confirm login on mobile WeChat</p>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
@@ -68,7 +68,7 @@ export default class Members extends Component {
|
||||
(searching && filtered.length === 0) && (
|
||||
<div className={classes.notfound}>
|
||||
<img src="assets/images/crash.png" />
|
||||
<h1>找不到 '{searching}'</h1>
|
||||
<h1>Can't find any people matching '{searching}'</h1>
|
||||
</div>
|
||||
)
|
||||
}
|
||||
|
||||
@@ -114,10 +114,10 @@ export default class NewChat extends Component {
|
||||
<button
|
||||
disabled={!this.state.selected.length}
|
||||
onClick={e => this.chat()}>
|
||||
发送消息
|
||||
Chat
|
||||
</button>
|
||||
|
||||
<button onClick={e => this.close()}>取消</button>
|
||||
<button onClick={e => this.close()}>Cancel</button>
|
||||
</div>
|
||||
</ModalBody>
|
||||
</Modal>
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
|
||||
.container {
|
||||
background: rgba(142, 142, 142, 0.6);
|
||||
background: #fff;
|
||||
height: 100vh;
|
||||
width: 100vw;
|
||||
display: flex;
|
||||
|
||||
@@ -172,14 +172,7 @@ export default class Settings extends Component {
|
||||
</ul>
|
||||
</div>
|
||||
<div className={classes.column}>
|
||||
<h2>更新记录:</h2>
|
||||
|
||||
<p>
|
||||
v1.2.3 增添darkmode,调整优化界面、颜色,以适应darkmode<br />
|
||||
v1.2.2 添加单例运行,在后台时在启动器中启动会拉到前台而不是再启动一个wewechat,更多的汉化<br />
|
||||
v1.2.1 汉化<br />
|
||||
v1.2.0 Make weweChat great again!!! Fix uos support
|
||||
</p>
|
||||
<h2>TODO:</h2>
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
justify-content: space-between;
|
||||
padding: 12px 17px 0;
|
||||
font-family: 'Helvetica Neue';
|
||||
color: #808080;
|
||||
color: #000;
|
||||
|
||||
& h2 {
|
||||
font-weight: 300;
|
||||
|
||||
@@ -75,7 +75,7 @@ class UserInfo extends Component {
|
||||
});
|
||||
this.toggleEdit(false);
|
||||
} else {
|
||||
this.props.showMessage('设置备注失败');
|
||||
this.props.showMessage('Failed to set remark name.');
|
||||
}
|
||||
}
|
||||
|
||||
@@ -221,7 +221,7 @@ class UserInfo extends Component {
|
||||
autoFocus={true}
|
||||
defaultValue={RemarkName}
|
||||
onKeyPress={e => this.handleEnter(e)}
|
||||
placeholder="设置备注"
|
||||
placeholder="Type the remark name"
|
||||
ref="input"
|
||||
type="text" />
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user