18 Commits
1.2.0-1 ... dev

Author SHA1 Message Date
Riceneeder
5ad1fc333e 优化,减少可能到来的1.2.4的工作量
1.增加翻译
2.为darkmode添加过度动画
3.修改package.json
2022-09-03 21:22:56 +08:00
Riceneeder
8cc58d9e68 !9 v1.2.3
Merge pull request !9 from Riceneeder/dev;
v1.2.3 增添darkmode,调整优化界面、颜色,以适应darkmode
2022-09-03 02:48:28 +00:00
Riceneeder
8794bf428e Merge branch 'master' of gitee.com:spark-community-works-collections/wewechat-plus-plus into dev
Signed-off-by: Riceneeder <845541909@qq.com>
2022-09-03 02:18:10 +00:00
Riceneeder
f07197c39f v1.2.3
v1.2.3 增添darkmode,调整优化界面、颜色,以适应darkmode

Signed-off-by: Riceneeder <86492950+Riceneeder@users.noreply.github.com>
2022-09-03 10:07:48 +08:00
Riceneeder
e625954b2a !8 1.2.2
Merge pull request !8 from shenmo/auto-4915358-master-5d4eb191
2022-09-02 13:09:19 +00:00
90d68492eb single 2022-09-02 14:18:11 +08:00
4c2cdd9499 single 2022-09-02 14:08:16 +08:00
ff988aa446 single 2022-09-02 14:02:41 +08:00
62c2d3d99d single 2022-09-02 13:59:05 +08:00
442489dce2 1.2.2 2022-09-02 13:15:27 +08:00
fbc14e854a 更多翻译 2022-09-02 13:11:12 +08:00
96d67f0b6a update pipeline-build-20220901.yml 2022-09-02 03:49:18 +00:00
223edaf650 !6 1.2.1 release
Merge pull request !6 from shenmo/auto-4915358-master-c04635a6
2022-09-02 03:47:53 +00:00
9e9cd47a6f 1.2.1 release 2022-09-02 11:47:37 +08:00
7b396be00b !5 更正错误翻译 美观优化 准备发布1.2.1
* Merge branch 'master' of gitee.com:spark-community-works-collections/w…
* 更正错误翻译
* 翻译
2022-09-02 03:46:43 +00:00
b119fab5a4 update pipeline-build-pr-20220902.yml 2022-09-02 03:37:00 +00:00
fe92afef48 create pipeline-build-pr-20220902.yml 2022-09-02 03:36:42 +00:00
295b455e50 update pipeline-build-20220901.yml 2022-09-02 03:35:42 +00:00
32 changed files with 187 additions and 79 deletions

View File

@@ -7,10 +7,6 @@ triggers:
tags:
prefix:
- ''
pr:
branches:
prefix:
- ''
stages:
- name: stage-82deebcf
displayName: 构建

View File

@@ -0,0 +1,76 @@
version: '1.0'
name: pipeline-build-pr-20220902
displayName: pipeline-build-pr
triggers:
trigger: auto
pr:
branches:
prefix:
- ''
stages:
- name: stage-82deebcf
displayName: 构建
strategy: naturally
trigger: auto
executor: []
steps:
- step: build@nodejs
name: build_nodejs
displayName: Nodejs 构建
nodeVersion: 16.14.2
commands:
- '# 设置NPM源提升安装速度'
- npm config set registry https://registry.npmmirror.com
- npm i yarn -g
- yarn config set registry "https://registry.npmmirror.com"
- yarn config set electron_builder_binaries_mirror "https://npmmirror.com/mirrors/electron-builder-binaries/"
- yarn config set electron_mirror "https://code.gitlink.org.cn/shenmo7192/electron-releases/raw/branch/master/"
- mkdir -p /root/.cache/electron-builder/app-builder/
- mkdir ../release
- ELECTRON_BUILDER_BINARIES_MIRROR =https://registry.npmmirror.com/binary.html?path=electron-builder-binaries/
- '###'
- mkdir -p /root/.cache/electron-builder/app-builder/app-builder-v0.6.1-x64
- WORK_DIR=`pwd`
- cd /root/.cache/electron-builder/app-builder/app-builder-v0.6.1-x64
- 'wget https://code.gitlink.org.cn/shenmo7192/electron-releases/raw/branch/master/app-builder-v0.6.1-linux-x64.7z '
- '7z x app-builder-v0.6.1-linux-x64.7z '
- cd $WORK_DIR
- '###'
- mkdir -p /root/.cache/electron-builder/appimage/appimage-9.0.5
- cd /root/.cache/electron-builder/appimage/appimage-9.0.5
- wget https://code.gitlink.org.cn/shenmo7192/electron-releases/raw/branch/master/appimage-9.0.5.7z
- 7z x appimage-9.0.5.7z
- cd $WORK_DIR
- '###'
- 'mkdir -p /root/.cache/electron-builder/fpm/fpm-1.9.3-2.3.1-linux-x86_64 '
- 'cd /root/.cache/electron-builder/fpm/fpm-1.9.3-2.3.1-linux-x86_64 '
- wget https://code.gitlink.org.cn/shenmo7192/electron-releases/raw/branch/master/fpm-1.9.3-2.3.1-linux-x86_64.7z
- 7z x fpm-1.9.3-2.3.1-linux-x86_64.7z
- cd $WORK_DIR
- '###'
- yarn
- yarn package-linux
- mv ../release ./release
- rm -r ./release/linux-unpacked
artifacts:
- name: BUILD_ARTIFACT
path:
- ./release
caches: []
notify: []
strategy:
retry: '0'
- name: stage-cd5d9e5b
displayName: 上传制品
strategy: naturally
trigger: auto
executor: []
steps:
- step: publish@general_artifacts
name: publish_general_artifacts
displayName: 上传制品
dependArtifact: BUILD_ARTIFACT
artifactName: output
notify: []
strategy:
retry: '0'

17
main.js
View File

@@ -203,7 +203,7 @@ let mainMenu = [
}
},
{
label: '显示聊',
label: '显示聊天列表',
accelerator: !isOsx ? 'Ctrl+Shift+M' : 'Shift+Cmd+M',
click() {
mainWindow.show();
@@ -214,7 +214,12 @@ let mainMenu = [
type: 'separator',
},
{
label: ''
label: 'Darkmode',
accelerator: !isOsx ? 'Ctrl+Shift+D' : 'Shift+Cmd+D',
click() {
mainWindow.show();
mainWindow.webContents.send('darkmode');
}
},
{
type: 'separator',
@@ -477,6 +482,14 @@ function createMenu() {
mainWindow.setMenu(menu);
}
}
const shouldQuit = app.makeSingleInstance(() => {
if (mainWindow) {
if (mainWindow.isMinimized()) mainWindow.restore();
mainWindow.show();
mainWindow.focus();
}
});
shouldQuit && app.quit();
const createMainWindow = () => {
var mainWindowState = windowStateKeeper({

View File

@@ -1,10 +1,10 @@
{
"name": "wewechat",
"version": "1.2.0-1",
"version": "1.2.3",
"description": "make weweChat great again!!!",
"main": "main.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"test": "yarn build && ./node_modules/.bin/electron ./dist/main.js",
"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": "Chat",
"category": "Network",
"executableName": "wewechat",
"target": [
"deb",
@@ -75,9 +75,8 @@
},
"publish": [
{
"provider": "github",
"owner": "riceneeder",
"repo": "weweChat"
"provider": "generic",
"url": "https://gitee.com/spark-community-works-collections/wewechat-plus-plus/raw/master/"
}
]
},
@@ -86,6 +85,7 @@
"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",

View File

@@ -4,6 +4,7 @@ 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';
@@ -27,6 +28,11 @@ 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', () => {
@@ -130,6 +136,11 @@ class App extends Component {
ipcRenderer.on('show-errors', (event, args) => {
stores.snackbar.showMessage(args.message);
});
// Dark mode
ipcRenderer.on('darkmode', () => {
darkmode.toggle();
});
}
render() {

View File

@@ -5,6 +5,13 @@
<meta charset="utf-8">
<title>weweChat</title>
</head>
<style>
.darkmode-layer {
width: 100%;
height: 1px;
top: -1px;
}
</style>
<body>
<div id="root"></div>
<script>

View File

@@ -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('Can\'t send messages to yourself.');
this.props.showMessage('不能向自己发送消息');
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!` : 'Failed to send message.');
await this.props.showMessage(batch ? `Sending message to ${e.NickName} has failed!` : '消息发送失败');
}
return true;
@@ -114,7 +114,7 @@ export default class MessageInput extends Component {
continue;
}
// In batch mode just show the failed message
showMessage('Failed to send image.');
showMessage('发送图片失败');
}
}
}

View File

@@ -14,7 +14,7 @@
border: 0;
padding-right: 17px;
background: 0;
color: #333;
color: #808080;
font-size: 14px;
outline: 0;
}

View File

@@ -25,9 +25,9 @@ export default class Avatar extends Component {
className="disabledDrag"
src="assets/images/offline.png" />
<h1>Oops, seems like you are offline!</h1>
<h1>离线了离线了!</h1>
<button onClick={e => window.location.reload()}>Reload</button>
<button onClick={e => window.location.reload()}>尝试重新加载</button>
</div>
</div>
);

View File

@@ -145,7 +145,7 @@ export default class UserList extends Component {
return (
<li className={classes.notfound}>
<img src="assets/images/crash.png" />
<h3>Can't find any people matching '{searching}'</h3>
<h3>没有搜索到 '{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="Type to Search..."
placeholder="输入需要搜索的对象"
ref="input"
type="text" />

View File

@@ -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={`Hallo, im ${me && me.User.NickName}`}
defaultValue={`你好,我是 ${me && me.User.NickName}`}
ref="input"
type="text" />
<div>
<button onClick={e => this.addFriend()}>Send</button>
<button onClick={e => this.addFriend()}>发送</button>
<button onClick={e => close()}>Cancel</button>
<button onClick={e => close()}>取消</button>
</div>
</ModalBody>
</Modal>

View File

@@ -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()}>Cancel</button>
<button onClick={e => this.close()}>取消</button>
</div>
</ModalBody>
</Modal>

View File

@@ -103,7 +103,7 @@ export default class BatchSend extends Component {
<input
autoFocus={true}
onInput={e => this.search(e.target.value)}
placeholder="Batch to send message, Choose one or more user."
placeholder="批量发送消息,选择一个或多个用户"
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>Can't find any people matching '{searching}'</h1>
<h1>不能找到 '{searching}'</h1>
</div>
)
}

View File

@@ -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()}>Send</button>
<button onClick={e => cancel()}>Cancel</button>
<button onClick={e => ok()}>发送</button>
<button onClick={e => cancel()}>取消</button>
</div>
</ModalBody>
</Modal>

View File

@@ -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>Can't find any people matching '{query}'</h1>
<h1>找不到 '{query}'</h1>
</div>
</div>
);

View File

@@ -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">
Fork on Github
<i className="icon-ion-social-github" />
查看代码
<i className="icon-ion-fork-repo" />
</a>
</div>
);

View File

@@ -7,7 +7,6 @@
.footer {
position: relative;
background: #fff;
box-shadow: inset 0 1px 0 0 var(--shadow-color);
z-index: 9;
@@ -78,7 +77,7 @@
line-height: 60px;
border: 0;
background: 0;
color: #333;
color: #808080;
font-size: 14px;
outline: 0;
}
@@ -107,7 +106,7 @@
position: relative;
margin-right: 17px;
width: 166px;
color: rgba(0, 0, 0, .8);
color: #808080;
font-size: 14px;
padding: 9px 8px;
font-family: 'Roboto';

View File

@@ -78,7 +78,7 @@ export default class Forward extends Component {
onCancel={e => this.close()}
show={this.props.show}>
<ModalBody className={classes.container}>
Forward Message
转发消息
<div className={classes.avatars}>
{
@@ -100,10 +100,10 @@ export default class Forward extends Component {
<button
disabled={!this.state.selected.length}
onClick={e => this.send(this.state.selected)}>
Send Message
发送消息
</button>
<button onClick={e => this.close()}>Cancel</button>
<button onClick={e => this.close()}>取消</button>
</div>
</ModalBody>
</Modal>

View File

@@ -8,7 +8,7 @@
font-family: "system-ui";
font-weight: normal;
width: 100%;
color: #777;
color: #c3c3c3;
text-align: center;
background: rgba(255, 255, 255, 1);
-webkit-user-select: none;

View File

@@ -155,7 +155,7 @@ export default class ChatContent extends Component {
return `
<div class="${classes.invalidEmoji}">
<div></div>
<span>Send an emoji, view it on mobile</span>
<span>不支持的emoji请在其他客户端查看</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>Money Transfer</h4>
<h4>转账消息</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>
`;
}
@@ -448,7 +448,7 @@ export default class ChatContent extends Component {
var caniforward = [1, 3, 47, 43, 49 + 6].includes(message.MsgType);
var templates = [
{
label: 'Delete',
label: '删除',
click: () => {
this.props.deleteMessage(message.MsgId);
}
@@ -458,7 +458,7 @@ export default class ChatContent extends Component {
if (caniforward) {
templates.unshift({
label: 'Forward',
label: '转发',
click: () => {
this.props.showForward(message);
}
@@ -468,7 +468,7 @@ export default class ChatContent extends Component {
if (message.isme
&& message.CreateTime - new Date() < 2 * 60 * 1000) {
templates.unshift({
label: 'Recall',
label: '撤回',
click: () => {
this.props.recallMessage(message);
}
@@ -485,7 +485,7 @@ export default class ChatContent extends Component {
var user = this.props.user;
var menu = new remote.Menu.buildFromTemplate([
{
label: 'Toggle the conversation',
label: '切换对话',
click: () => {
this.props.toggleConversation();
}
@@ -494,7 +494,7 @@ export default class ChatContent extends Component {
type: 'separator',
},
{
label: 'Empty Content',
label: '清空聊天内容',
click: () => {
this.props.empty(user);
}
@@ -503,13 +503,13 @@ export default class ChatContent extends Component {
type: 'separator'
},
{
label: helper.isTop(user) ? 'Unsticky' : 'Sticky on Top',
label: helper.isTop(user) ? '取消置顶' : '聊天置顶',
click: () => {
this.props.sticky(user);
}
},
{
label: 'Delete',
label: '删除',
click: () => {
this.props.removeChat(user);
}
@@ -535,7 +535,7 @@ export default class ChatContent extends Component {
});
if (counter) {
tips.innerHTML = `You has ${counter} unread messages.`;
tips.innerHTML = `你有${counter}个未读消息`;
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 = `You has ${counter} unread messages.`;
tips.innerHTML = `你有${counter}个未读消息`;
tips.classList.add(classes.show);
}
return;

View File

@@ -114,7 +114,7 @@
width: 32px;
border-radius: 0;
z-index: 9;
box-shadow: 0 0 10px 0 rgba(0, 0, 0, .5);
box-shadow: 0 0 10px 0 rgba(225, 225, 225, 0.5);
cursor: pointer;
}
@@ -165,7 +165,7 @@
& .content {
position: relative;
max-width: 100%;
background: #fff;
background: rgba(225, 225, 225, 0.5);
box-shadow: 0 6px 28px 0 rgba(230, 230, 230, 100);
}
@@ -538,7 +538,7 @@
}
& .content {
background: #7ebef8;
background: rgba(0, 0, 200, 0.5);
}
& p {

View File

@@ -56,7 +56,7 @@ export default class Chats extends Component {
showContextMenu(user) {
var menu = new remote.Menu.buildFromTemplate([
{
label: 'Send Message',
label: '发送消息',
click: () => {
this.props.chatTo(user);
}
@@ -65,19 +65,19 @@ export default class Chats extends Component {
type: 'separator'
},
{
label: helper.isTop(user) ? 'Unsticky' : 'Sticky on Top',
label: helper.isTop(user) ? '取消置顶' : '聊天置顶',
click: () => {
this.props.sticky(user);
}
},
{
label: 'Delete',
label: '删除',
click: () => {
this.props.removeChat(user);
}
},
{
label: 'Mark as Read',
label: '标为已读',
click: () => {
this.props.markedRead(user.UserName);
}

View File

@@ -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="Search ..."
placeholder="搜索 ..."
ref="search"
type="text" />
{

View File

@@ -3,7 +3,6 @@
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;

View File

@@ -195,7 +195,7 @@ export default class Layout extends Component {
<i className="icon-ion-ios-cloud-upload-outline" />
<h2>Drop your file here</h2>
<h2>将文件拖到此处</h2>
</div>
</div>
</div>

View File

@@ -24,8 +24,8 @@ export default class Login extends Component {
src={this.props.avatar} />
}
<p>Scan successful</p>
<p>Confirm login on mobile WeChat</p>
<p>扫码成功</p>
<p>请在手机微信上确认登陆</p>
</div>
);
}

View File

@@ -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>Can't find any people matching '{searching}'</h1>
<h1>找不到 '{searching}'</h1>
</div>
)
}

View File

@@ -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()}>Cancel</button>
<button onClick={e => this.close()}>取消</button>
</div>
</ModalBody>
</Modal>

View File

@@ -1,6 +1,6 @@
.container {
background: #fff;
background: rgba(142, 142, 142, 0.6);
height: 100vh;
width: 100vw;
display: flex;

View File

@@ -172,7 +172,14 @@ export default class Settings extends Component {
</ul>
</div>
<div className={classes.column}>
<h2>TODO:</h2>
<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>
</div>
</div>
);

View File

@@ -4,7 +4,7 @@
justify-content: space-between;
padding: 12px 17px 0;
font-family: 'Helvetica Neue';
color: #000;
color: #808080;
& h2 {
font-weight: 300;

View File

@@ -75,7 +75,7 @@ class UserInfo extends Component {
});
this.toggleEdit(false);
} else {
this.props.showMessage('Failed to set remark name.');
this.props.showMessage('设置备注失败');
}
}
@@ -210,7 +210,7 @@ class UserInfo extends Component {
color: buttonColor,
opacity: .6,
}}>
{helper.isChatRoom(UserName) || isFriend ? 'Send Message' : 'Add Friend'}
{helper.isChatRoom(UserName) || isFriend ? '发送消息' : '添加好友'}
</div>
</div>
@@ -221,7 +221,7 @@ class UserInfo extends Component {
autoFocus={true}
defaultValue={RemarkName}
onKeyPress={e => this.handleEnter(e)}
placeholder="Type the remark name"
placeholder="设置备注"
ref="input"
type="text" />
)