commit
2aec40d9be
|
@ -76,7 +76,7 @@ Test coding style:
|
||||||
$ npm run lint:js
|
$ npm run lint:js
|
||||||
```
|
```
|
||||||
|
|
||||||
### Helper commmands
|
### Helper commands
|
||||||
|
|
||||||
#### `npm run watch`
|
#### `npm run watch`
|
||||||
Reload the application automatically when you have saved source codes.
|
Reload the application automatically when you have saved source codes.
|
||||||
|
|
|
@ -61,7 +61,7 @@ Pre-work for the current release begins at the code complete date of the previou
|
||||||
- Post links to final tickets for next RC to the Desktop App channel
|
- Post links to final tickets for next RC to the Desktop App channel
|
||||||
- Submit PRs for hotfixes against the release branch, and review, test and merge prior to next RC
|
- Submit PRs for hotfixes against the release branch, and review, test and merge prior to next RC
|
||||||
4. Build:
|
4. Build:
|
||||||
- Push next RC to acceptance and announce in Destkop App channel with new RC link
|
- Push next RC to acceptance and announce in Desktop App channel with new RC link
|
||||||
5. PM:
|
5. PM:
|
||||||
- Test the new RC to verify fixes merged to the release branch work and post in Desktop App channel after testing
|
- Test the new RC to verify fixes merged to the release branch work and post in Desktop App channel after testing
|
||||||
- Update the meta issue with download links to the new RCs and a list of approved fixes
|
- Update the meta issue with download links to the new RCs and a list of approved fixes
|
||||||
|
@ -152,4 +152,4 @@ If a bug fix release is required, run through the following steps:
|
||||||
- Post and review [Mattermost Security Updates](https://about.mattermost.com/security-updates/) for the Desktop App
|
- Post and review [Mattermost Security Updates](https://about.mattermost.com/security-updates/) for the Desktop App
|
||||||
- Update Security Issues spreadsheet with issue number from posted update (e.g. v3.2.0.1)
|
- Update Security Issues spreadsheet with issue number from posted update (e.g. v3.2.0.1)
|
||||||
- Confirm the Security Researchers list on the [Responsible Disclosure Policy](https://www.mattermost.org/responsible-disclosure-policy/) is up to date
|
- Confirm the Security Researchers list on the [Responsible Disclosure Policy](https://www.mattermost.org/responsible-disclosure-policy/) is up to date
|
||||||
- Review community installers for the Desktop App and update version numbers if there are any discrepencies https://www.mattermost.org/installation/
|
- Review community installers for the Desktop App and update version numbers if there are any discrepancies https://www.mattermost.org/installation/
|
||||||
|
|
|
@ -105,7 +105,7 @@ The Mattermost desktop application offers:
|
||||||
- Icon notifications from Windows Task Bar
|
- Icon notifications from Windows Task Bar
|
||||||
- Desktop notifications
|
- Desktop notifications
|
||||||
|
|
||||||
See the Mattermost [help documention](http://docs.mattermost.com/help/getting-started/signing-in.html) for how to use the Mattermost team site.
|
See the Mattermost [help documentation](http://docs.mattermost.com/help/getting-started/signing-in.html) for how to use the Mattermost team site.
|
||||||
|
|
||||||
|
|
||||||
## Settings Page
|
## Settings Page
|
||||||
|
@ -121,7 +121,7 @@ The Settings Page is available from the **File** menu under **Settings** (Click
|
||||||
- **Hide Menu Bar** (Windows, Linux)
|
- **Hide Menu Bar** (Windows, Linux)
|
||||||
- This option hides the menu bar. Press "Alt" to show it.
|
- This option hides the menu bar. Press "Alt" to show it.
|
||||||
- **Show Icon on Menu Bar** (OS X)
|
- **Show Icon on Menu Bar** (OS X)
|
||||||
- The icon apeears on menu bar to indicate whether there are new messages or mention.
|
- The icon appears on menu bar to indicate whether there are new messages or mention.
|
||||||
- **Allow insecure contents**
|
- **Allow insecure contents**
|
||||||
- If your team is hosted on `https://`, images with `http://` are not rendered by default.
|
- If your team is hosted on `https://`, images with `http://` are not rendered by default.
|
||||||
This option allows such images to be rendered, but please be careful for security.
|
This option allows such images to be rendered, but please be careful for security.
|
||||||
|
@ -180,7 +180,7 @@ Below lists menu options (shortcut keys are listed in brackets, `Ctrl` becomes `
|
||||||
|
|
||||||
Mattermost lets users configure [desktop notifications](http://docs.mattermost.com/help/getting-started/configuring-notifications.html#desktop-notifications) to alert users to new events in a team site.
|
Mattermost lets users configure [desktop notifications](http://docs.mattermost.com/help/getting-started/configuring-notifications.html#desktop-notifications) to alert users to new events in a team site.
|
||||||
|
|
||||||
For the Mattermost Windows application, these appear as ballon notifications from the task bar on Windows 7 and Windows 8.1, and as a "toast" pop-up on Windows 10.
|
For the Mattermost Windows application, these appear as balloon notifications from the task bar on Windows 7 and Windows 8.1, and as a "toast" pop-up on Windows 10.
|
||||||
|
|
||||||
|
|
||||||
## Start Menu and Task Bar shortcuts (Windows)
|
## Start Menu and Task Bar shortcuts (Windows)
|
||||||
|
|
|
@ -77,7 +77,7 @@ export default class MainPage extends React.Component {
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
// can't switch tabs sequencially for some reason...
|
// can't switch tabs sequentially for some reason...
|
||||||
ipcRenderer.on('switch-tab', (event, key) => {
|
ipcRenderer.on('switch-tab', (event, key) => {
|
||||||
this.handleSelect(key);
|
this.handleSelect(key);
|
||||||
});
|
});
|
||||||
|
|
|
@ -85,7 +85,7 @@ export default class MattermostView extends React.Component {
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
// Open link in browserWindow. for exmaple, attached files.
|
// Open link in browserWindow. for example, attached files.
|
||||||
webview.addEventListener('new-window', (e) => {
|
webview.addEventListener('new-window', (e) => {
|
||||||
const currentURL = url.parse(webview.getURL());
|
const currentURL = url.parse(webview.getURL());
|
||||||
const destURL = url.parse(e.url);
|
const destURL = url.parse(e.url);
|
||||||
|
@ -98,7 +98,7 @@ export default class MattermostView extends React.Component {
|
||||||
if (destURL.path.match(/^\/api\/v[3-4]\/public\/files\//)) {
|
if (destURL.path.match(/^\/api\/v[3-4]\/public\/files\//)) {
|
||||||
ipcRenderer.send('download-url', e.url);
|
ipcRenderer.send('download-url', e.url);
|
||||||
} else {
|
} else {
|
||||||
// New window should disable nodeIntergration.
|
// New window should disable nodeIntegration.
|
||||||
window.open(e.url, remote.app.getName(), 'nodeIntegration=no, show=yes');
|
window.open(e.url, remote.app.getName(), 'nodeIntegration=no, show=yes');
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
@ -119,7 +119,7 @@ export default class MattermostView extends React.Component {
|
||||||
if (this.props.onSelectSpellCheckerLocale) {
|
if (this.props.onSelectSpellCheckerLocale) {
|
||||||
this.props.onSelectSpellCheckerLocale(locale);
|
this.props.onSelectSpellCheckerLocale(locale);
|
||||||
}
|
}
|
||||||
webview.send('set-spellcheker');
|
webview.send('set-spellchecker');
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
this.setState({isContextMenuAdded: true});
|
this.setState({isContextMenuAdded: true});
|
||||||
|
|
|
@ -141,7 +141,7 @@ function getUnreadCount() {
|
||||||
const activeChannel = document.querySelector('.active .sidebar-channel');
|
const activeChannel = document.querySelector('.active .sidebar-channel');
|
||||||
const closeButton = activeChannel.getElementsByClassName('btn-close');
|
const closeButton = activeChannel.getElementsByClassName('btn-close');
|
||||||
if (closeButton.length === 1 && closeButton[0].getAttribute('aria-describedby') === 'remove-dm-tooltip') {
|
if (closeButton.length === 1 && closeButton[0].getAttribute('aria-describedby') === 'remove-dm-tooltip') {
|
||||||
// If active channel is DM, all posts is treated as menion.
|
// If active channel is DM, all posts is treated as mention.
|
||||||
isMentioned = true;
|
isMentioned = true;
|
||||||
break;
|
break;
|
||||||
} else {
|
} else {
|
||||||
|
@ -192,7 +192,7 @@ function setSpellChecker() {
|
||||||
resetMisspelledState();
|
resetMisspelledState();
|
||||||
}
|
}
|
||||||
setSpellChecker();
|
setSpellChecker();
|
||||||
ipcRenderer.on('set-spellcheker', setSpellChecker);
|
ipcRenderer.on('set-spellchecker', setSpellChecker);
|
||||||
|
|
||||||
// mattermost-webapp is SPA. So cache is not cleared due to no navigation.
|
// mattermost-webapp is SPA. So cache is not cleared due to no navigation.
|
||||||
// We needed to manually clear cache to free memory in long-term-use.
|
// We needed to manually clear cache to free memory in long-term-use.
|
||||||
|
|
|
@ -176,7 +176,7 @@ const trayImages = (() => {
|
||||||
}
|
}
|
||||||
})();
|
})();
|
||||||
|
|
||||||
// If there is already an instance, activate the window in the existing instace and quit this one
|
// If there is already an instance, activate the window in the existing instance and quit this one
|
||||||
const gotTheLock = app.requestSingleInstanceLock();
|
const gotTheLock = app.requestSingleInstanceLock();
|
||||||
if (!gotTheLock) {
|
if (!gotTheLock) {
|
||||||
app.exit();
|
app.exit();
|
||||||
|
@ -333,7 +333,7 @@ app.on('certificate-error', (event, webContents, url, error, certificate, callba
|
||||||
});
|
});
|
||||||
|
|
||||||
app.on('gpu-process-crashed', (event, killed) => {
|
app.on('gpu-process-crashed', (event, killed) => {
|
||||||
console.log(`The GPU process has crached (killed = ${killed})`);
|
console.log(`The GPU process has crashed (killed = ${killed})`);
|
||||||
});
|
});
|
||||||
|
|
||||||
const loginCallbackMap = new Map();
|
const loginCallbackMap = new Map();
|
||||||
|
|
|
@ -16,7 +16,7 @@ describe('PermissionManager', function() {
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should grant a permisson for an origin', function() {
|
it('should grant a permission for an origin', function() {
|
||||||
const ORIGIN = 'origin';
|
const ORIGIN = 'origin';
|
||||||
const PERMISSION = 'permission';
|
const PERMISSION = 'permission';
|
||||||
const manager = new PermissionManager(permissionFile);
|
const manager = new PermissionManager(permissionFile);
|
||||||
|
@ -33,7 +33,7 @@ describe('PermissionManager', function() {
|
||||||
manager.isGranted(ORIGIN, PERMISSION + '_another').should.be.false;
|
manager.isGranted(ORIGIN, PERMISSION + '_another').should.be.false;
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should deny a permisson for an origin', function() {
|
it('should deny a permission for an origin', function() {
|
||||||
const ORIGIN = 'origin';
|
const ORIGIN = 'origin';
|
||||||
const PERMISSION = 'permission';
|
const PERMISSION = 'permission';
|
||||||
const manager = new PermissionManager(permissionFile);
|
const manager = new PermissionManager(permissionFile);
|
||||||
|
@ -50,7 +50,7 @@ describe('PermissionManager', function() {
|
||||||
manager.isDenied(ORIGIN, PERMISSION + '_another').should.be.false;
|
manager.isDenied(ORIGIN, PERMISSION + '_another').should.be.false;
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should save permissons to the file', function() {
|
it('should save permissions to the file', function() {
|
||||||
const ORIGIN = 'origin';
|
const ORIGIN = 'origin';
|
||||||
const PERMISSION = 'permission';
|
const PERMISSION = 'permission';
|
||||||
const manager = new PermissionManager(permissionFile);
|
const manager = new PermissionManager(permissionFile);
|
||||||
|
|
Loading…
Reference in a new issue