forked from Ivasoft/mattermost-mobile
Compare commits
21 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
9aa3de53a2 | ||
|
|
4d604c670a | ||
|
|
dac5be0eaa | ||
|
|
2402fd1681 | ||
|
|
377e12b53c | ||
|
|
1ff4c6ce83 | ||
|
|
1a8be5444c | ||
|
|
54c3ee97c4 | ||
|
|
9a20a45eee | ||
|
|
adab0b31ac | ||
|
|
72b6270f8e | ||
|
|
61d340d97d | ||
|
|
52179a557c | ||
|
|
b8766bbbf2 | ||
|
|
776a9d8fad | ||
|
|
fa10680ef3 | ||
|
|
341d773e8a | ||
|
|
f2fc1db00c | ||
|
|
4c606ed752 | ||
|
|
1ab2925ac1 | ||
|
|
7e7b382207 |
@@ -113,8 +113,8 @@ android {
|
||||
applicationId "com.mattermost.rnbeta"
|
||||
minSdkVersion rootProject.ext.minSdkVersion
|
||||
targetSdkVersion rootProject.ext.targetSdkVersion
|
||||
versionCode 166
|
||||
versionName "1.15.1"
|
||||
versionCode 170
|
||||
versionName "1.15.2"
|
||||
multiDexEnabled = true
|
||||
ndk {
|
||||
abiFilters "armeabi-v7a", "x86"
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
// See LICENSE.txt for license information.
|
||||
|
||||
import {UserTypes} from 'mattermost-redux/action_types';
|
||||
import {getStatus} from 'mattermost-redux/actions/users';
|
||||
import {getStatus, getStatusesByIds, startPeriodicStatusUpdates} from 'mattermost-redux/actions/users';
|
||||
import {General} from 'mattermost-redux/constants';
|
||||
import {getCurrentUserId} from 'mattermost-redux/selectors/entities/users';
|
||||
|
||||
@@ -23,3 +23,16 @@ export function setCurrentUserStatus(isOnline) {
|
||||
});
|
||||
};
|
||||
}
|
||||
|
||||
export function initUserStatuses() {
|
||||
return (dispatch, getState) => {
|
||||
const {statuses} = getState().entities.users || {};
|
||||
const userIds = Object.keys(statuses);
|
||||
|
||||
if (userIds.length) {
|
||||
dispatch(getStatusesByIds(userIds));
|
||||
}
|
||||
|
||||
dispatch(startPeriodicStatusUpdates());
|
||||
};
|
||||
}
|
||||
|
||||
@@ -7,12 +7,14 @@ import thunk from 'redux-thunk';
|
||||
import {UserTypes} from 'mattermost-redux/action_types';
|
||||
import {General} from 'mattermost-redux/constants';
|
||||
|
||||
import {setCurrentUserStatus} from 'app/actions/views/user';
|
||||
import {initUserStatuses, setCurrentUserStatus} from 'app/actions/views/user';
|
||||
|
||||
const mockStore = configureStore([thunk]);
|
||||
|
||||
jest.mock('mattermost-redux/actions/users', () => ({
|
||||
getStatus: (...args) => ({type: 'MOCK_GET_STATUS', args}),
|
||||
getStatusesByIds: (...args) => ({type: 'MOCK_GET_STATUS_BY_IDS', args}),
|
||||
startPeriodicStatusUpdates: () => ({type: 'MOCK_PERIODIC_STATUS_UPDATES'}),
|
||||
}));
|
||||
|
||||
describe('Actions.Views.User', () => {
|
||||
@@ -23,6 +25,11 @@ describe('Actions.Views.User', () => {
|
||||
entities: {
|
||||
users: {
|
||||
currentUserId: 'current-user-id',
|
||||
statuses: {
|
||||
'current-user-id': 'online',
|
||||
'another-user-id1': 'away',
|
||||
'another-user-id2': 'dnd',
|
||||
},
|
||||
},
|
||||
},
|
||||
});
|
||||
@@ -50,4 +57,15 @@ describe('Actions.Views.User', () => {
|
||||
await store.dispatch(setCurrentUserStatus(true));
|
||||
expect(store.getActions()).toEqual([action]);
|
||||
});
|
||||
|
||||
test('should initialize the periodic status updates and get the current user statuses', () => {
|
||||
const actionStatusByIds = {
|
||||
type: 'MOCK_GET_STATUS_BY_IDS',
|
||||
args: [['current-user-id', 'another-user-id1', 'another-user-id2']],
|
||||
};
|
||||
const actionPeriodicUpdates = {type: 'MOCK_PERIODIC_STATUS_UPDATES'};
|
||||
|
||||
store.dispatch(initUserStatuses());
|
||||
expect(store.getActions()).toEqual([actionStatusByIds, actionPeriodicUpdates]);
|
||||
});
|
||||
});
|
||||
|
||||
@@ -66,16 +66,18 @@ export default class AttachmentFields extends PureComponent {
|
||||
style={style.flex}
|
||||
key={`attachment__field-${i}__${nrTables}`}
|
||||
>
|
||||
<View
|
||||
style={style.headingContainer}
|
||||
key={`attachment__field-caption-${i}__${nrTables}`}
|
||||
>
|
||||
<View>
|
||||
<Text style={style.heading}>
|
||||
{field.title}
|
||||
</Text>
|
||||
{Boolean(field.title) && (
|
||||
<View
|
||||
style={style.headingContainer}
|
||||
key={`attachment__field-caption-${i}__${nrTables}`}
|
||||
>
|
||||
<View>
|
||||
<Text style={style.heading}>
|
||||
{field.title}
|
||||
</Text>
|
||||
</View>
|
||||
</View>
|
||||
</View>
|
||||
)}
|
||||
<View
|
||||
style={style.flex}
|
||||
key={`attachment__field-${i}__${nrTables}`}
|
||||
|
||||
@@ -97,7 +97,7 @@ export default class MessageAttachment extends PureComponent {
|
||||
navigator={navigator}
|
||||
onPermalinkPress={onPermalinkPress}
|
||||
textStyles={textStyles}
|
||||
value={attachment.text || attachment.fallback}
|
||||
value={attachment.text}
|
||||
/>
|
||||
<AttachmentFields
|
||||
baseTextStyle={baseTextStyle}
|
||||
|
||||
@@ -4,12 +4,15 @@
|
||||
import {bindActionCreators} from 'redux';
|
||||
import {connect} from 'react-redux';
|
||||
|
||||
import {startPeriodicStatusUpdates, stopPeriodicStatusUpdates, logout} from 'mattermost-redux/actions/users';
|
||||
import {stopPeriodicStatusUpdates, logout} from 'mattermost-redux/actions/users';
|
||||
import {init as initWebSocket, close as closeWebSocket} from 'mattermost-redux/actions/websocket';
|
||||
import {getCurrentChannelId} from 'mattermost-redux/selectors/entities/channels';
|
||||
|
||||
import {connection} from 'app/actions/device';
|
||||
import {setCurrentUserStatus} from 'app/actions/views/user';
|
||||
import {
|
||||
initUserStatuses as startPeriodicStatusUpdates,
|
||||
setCurrentUserStatus,
|
||||
} from 'app/actions/views/user';
|
||||
import {getConnection, isLandscape} from 'app/selectors/device';
|
||||
|
||||
import NetworkIndicator from './network_indicator';
|
||||
|
||||
@@ -228,12 +228,13 @@ export default class NetworkIndicator extends PureComponent {
|
||||
};
|
||||
|
||||
handleConnectionChange = ({hasInternet, serverReachable}) => {
|
||||
const {connection} = this.props.actions;
|
||||
const {connection, startPeriodicStatusUpdates} = this.props.actions;
|
||||
|
||||
// On first run always initialize the WebSocket
|
||||
// if we have internet connection
|
||||
if (hasInternet && this.firstRun) {
|
||||
this.initializeWebSocket();
|
||||
startPeriodicStatusUpdates();
|
||||
this.firstRun = false;
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -383,9 +383,18 @@ const getStyleSheet = makeStyleSheetFromTheme((theme) => {
|
||||
},
|
||||
profilePictureContainer: {
|
||||
marginBottom: 5,
|
||||
marginRight: 10,
|
||||
marginLeft: 12,
|
||||
marginTop: 10,
|
||||
|
||||
// to compensate STATUS_BUFFER in profile_picture component
|
||||
...Platform.select({
|
||||
android: {
|
||||
marginRight: 11,
|
||||
},
|
||||
ios: {
|
||||
marginRight: 10,
|
||||
},
|
||||
}),
|
||||
},
|
||||
replyBar: {
|
||||
backgroundColor: theme.centerChannelColor,
|
||||
|
||||
@@ -407,21 +407,19 @@ export default class PostBody extends PureComponent {
|
||||
return (
|
||||
<View style={style.messageContainerWithReplyBar}>
|
||||
<View style={replyBarStyle}/>
|
||||
<View style={[style.row]}>
|
||||
{body}
|
||||
{isFailed &&
|
||||
<TouchableOpacity
|
||||
onPress={onFailedPostPress}
|
||||
style={style.retry}
|
||||
>
|
||||
<Icon
|
||||
name='ios-information-circle-outline'
|
||||
size={26}
|
||||
color={theme.errorTextColor}
|
||||
/>
|
||||
</TouchableOpacity>
|
||||
}
|
||||
</View>
|
||||
{body}
|
||||
{isFailed &&
|
||||
<TouchableOpacity
|
||||
onPress={onFailedPostPress}
|
||||
style={style.retry}
|
||||
>
|
||||
<Icon
|
||||
name='ios-information-circle-outline'
|
||||
size={26}
|
||||
color={theme.errorTextColor}
|
||||
/>
|
||||
</TouchableOpacity>
|
||||
}
|
||||
</View>
|
||||
);
|
||||
}
|
||||
@@ -429,13 +427,10 @@ export default class PostBody extends PureComponent {
|
||||
|
||||
const getStyleSheet = makeStyleSheetFromTheme((theme) => {
|
||||
return {
|
||||
row: {
|
||||
flexDirection: 'row',
|
||||
},
|
||||
messageBody: {
|
||||
paddingBottom: 2,
|
||||
paddingTop: 2,
|
||||
width: '100%',
|
||||
flex: 1,
|
||||
},
|
||||
messageContainer: {
|
||||
width: '100%',
|
||||
@@ -445,7 +440,7 @@ const getStyleSheet = makeStyleSheetFromTheme((theme) => {
|
||||
},
|
||||
retry: {
|
||||
justifyContent: 'center',
|
||||
marginLeft: 12,
|
||||
marginLeft: 10,
|
||||
},
|
||||
message: {
|
||||
color: theme.centerChannelColor,
|
||||
@@ -454,6 +449,7 @@ const getStyleSheet = makeStyleSheetFromTheme((theme) => {
|
||||
},
|
||||
messageContainerWithReplyBar: {
|
||||
flexDirection: 'row',
|
||||
width: '100%',
|
||||
},
|
||||
pendingPost: {
|
||||
opacity: 0.5,
|
||||
|
||||
@@ -1,5 +1,65 @@
|
||||
// Jest Snapshot v1, https://goo.gl/fbAQLP
|
||||
|
||||
exports[`DateHeader component should match snapshot when timezone is set 1`] = `
|
||||
<View
|
||||
style={
|
||||
Array [
|
||||
Object {
|
||||
"alignItems": "center",
|
||||
"flexDirection": "row",
|
||||
"height": 28,
|
||||
"marginTop": 8,
|
||||
},
|
||||
undefined,
|
||||
]
|
||||
}
|
||||
>
|
||||
<View
|
||||
style={
|
||||
Object {
|
||||
"backgroundColor": "#3d3c40",
|
||||
"flex": 1,
|
||||
"height": 1,
|
||||
"opacity": 0.2,
|
||||
}
|
||||
}
|
||||
/>
|
||||
<View
|
||||
style={
|
||||
Object {
|
||||
"marginHorizontal": 15,
|
||||
}
|
||||
}
|
||||
>
|
||||
<InjectIntl(FormattedDate)
|
||||
day="2-digit"
|
||||
month="short"
|
||||
style={
|
||||
Object {
|
||||
"color": "#3d3c40",
|
||||
"fontSize": 14,
|
||||
"fontWeight": "600",
|
||||
}
|
||||
}
|
||||
timeZone="America/New_York"
|
||||
value={1970-01-18T17:19:12.392Z}
|
||||
weekday="short"
|
||||
year="numeric"
|
||||
/>
|
||||
</View>
|
||||
<View
|
||||
style={
|
||||
Object {
|
||||
"backgroundColor": "#3d3c40",
|
||||
"flex": 1,
|
||||
"height": 1,
|
||||
"opacity": 0.2,
|
||||
}
|
||||
}
|
||||
/>
|
||||
</View>
|
||||
`;
|
||||
|
||||
exports[`DateHeader component should match snapshot with suffix 1`] = `
|
||||
<View
|
||||
style={
|
||||
|
||||
@@ -17,11 +17,12 @@ export default class DateHeader extends PureComponent {
|
||||
static propTypes = {
|
||||
dateLineString: PropTypes.string.isRequired,
|
||||
theme: PropTypes.object.isRequired,
|
||||
timeZone: PropTypes.string,
|
||||
style: ViewPropTypes.style,
|
||||
};
|
||||
|
||||
render() {
|
||||
const {theme, dateLineString} = this.props;
|
||||
const {theme, timeZone, dateLineString} = this.props;
|
||||
const style = getStyleSheet(theme);
|
||||
const indexSuffix = dateLineString.indexOf(DATE_LINE_SUFFIX);
|
||||
|
||||
@@ -31,6 +32,17 @@ export default class DateHeader extends PureComponent {
|
||||
} else {
|
||||
date = new Date(parseInt(dateLineString.substring(DATE_LINE.length), 10));
|
||||
}
|
||||
const dateFormatProps = {
|
||||
weekday: 'short',
|
||||
day: '2-digit',
|
||||
month: 'short',
|
||||
year: 'numeric',
|
||||
value: date,
|
||||
};
|
||||
|
||||
if (timeZone) {
|
||||
dateFormatProps.timeZone = timeZone;
|
||||
}
|
||||
|
||||
return (
|
||||
<View style={[style.container, this.props.style]}>
|
||||
@@ -38,11 +50,7 @@ export default class DateHeader extends PureComponent {
|
||||
<View style={style.dateContainer}>
|
||||
<FormattedDate
|
||||
style={style.date}
|
||||
value={date}
|
||||
weekday='short'
|
||||
day='2-digit'
|
||||
month='short'
|
||||
year='numeric'
|
||||
{...dateFormatProps}
|
||||
/>
|
||||
</View>
|
||||
<View style={style.line}/>
|
||||
|
||||
@@ -13,6 +13,7 @@ import DateHeader from './date_header.js';
|
||||
describe('DateHeader', () => {
|
||||
const baseProps = {
|
||||
theme: Preferences.THEMES.default,
|
||||
timeZone: null,
|
||||
};
|
||||
|
||||
describe('component should match snapshot', () => {
|
||||
@@ -43,5 +44,20 @@ describe('DateHeader', () => {
|
||||
|
||||
expect(wrapper.getElement()).toMatchSnapshot();
|
||||
});
|
||||
|
||||
it('when timezone is set', () => {
|
||||
const props = {
|
||||
...baseProps,
|
||||
dateLineString: 'date-1531152392-index-2',
|
||||
timeZone: 'America/New_York',
|
||||
index: 2,
|
||||
};
|
||||
const wrapper = shallow(
|
||||
<DateHeader {...props}/>,
|
||||
{context: {intl: {formatMessage: jest.fn()}}},
|
||||
);
|
||||
|
||||
expect(wrapper.getElement()).toMatchSnapshot();
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
@@ -3,13 +3,26 @@
|
||||
|
||||
import {connect} from 'react-redux';
|
||||
|
||||
import {getCurrentUser} from 'mattermost-redux/selectors/entities/users';
|
||||
import {getTheme} from 'mattermost-redux/selectors/entities/preferences';
|
||||
import {getUserCurrentTimezone} from 'mattermost-redux/utils/timezone_utils';
|
||||
|
||||
import {isTimezoneEnabled} from 'app/utils/timezone';
|
||||
|
||||
import DateHeader from './date_header';
|
||||
|
||||
function mapStateToProps(state) {
|
||||
const enableTimezone = isTimezoneEnabled(state);
|
||||
const currentUser = getCurrentUser(state);
|
||||
let timeZone = null;
|
||||
|
||||
if (enableTimezone) {
|
||||
timeZone = getUserCurrentTimezone(currentUser.timezone);
|
||||
}
|
||||
|
||||
return {
|
||||
theme: getTheme(state),
|
||||
timeZone,
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
@@ -5,7 +5,7 @@ import {connect} from 'react-redux';
|
||||
|
||||
import {General} from 'mattermost-redux/constants';
|
||||
import {
|
||||
getFavoriteChannelIds,
|
||||
getSortedFavoriteChannelIds,
|
||||
getSortedUnreadChannelIds,
|
||||
getOrderedChannelIds,
|
||||
} from 'mattermost-redux/selectors/entities/channels';
|
||||
@@ -39,7 +39,7 @@ function mapStateToProps(state) {
|
||||
const isSystemAdmin = checkIsSystemAdmin(roles);
|
||||
const sidebarPrefs = getSidebarPreferences(state);
|
||||
const unreadChannelIds = getSortedUnreadChannelIds(state, null);
|
||||
const favoriteChannelIds = getFavoriteChannelIds(state);
|
||||
const favoriteChannelIds = getSortedFavoriteChannelIds(state);
|
||||
const orderedChannelIds = filterZeroUnreads(getOrderedChannelIds(
|
||||
state,
|
||||
null,
|
||||
|
||||
@@ -227,6 +227,8 @@ export default class SlideUpPanel extends PureComponent {
|
||||
transform: [{translateY: this.translateY}],
|
||||
};
|
||||
|
||||
const headerComponent = header(this.headerRef);
|
||||
|
||||
return (
|
||||
<TapGestureHandler
|
||||
maxDurationMs={100000}
|
||||
@@ -268,7 +270,7 @@ export default class SlideUpPanel extends PureComponent {
|
||||
>
|
||||
<Animated.View>
|
||||
<SlideUpPanelIndicator/>
|
||||
{header(this.headerRef)}
|
||||
{headerComponent}
|
||||
</Animated.View>
|
||||
</PanGestureHandler>
|
||||
<PanGestureHandler
|
||||
@@ -279,7 +281,7 @@ export default class SlideUpPanel extends PureComponent {
|
||||
onGestureEvent={this.onGestureEvent}
|
||||
onHandlerStateChange={this.onHandlerStateChange}
|
||||
>
|
||||
<Animated.View style={[styles.container, !header && styles.border]}>
|
||||
<Animated.View style={[styles.container, !headerComponent && styles.border]}>
|
||||
<NativeViewGestureHandler
|
||||
ref={this.scrollRef}
|
||||
waitFor={this.masterRef}
|
||||
|
||||
@@ -285,13 +285,13 @@ export default class ChannelInfo extends PureComponent {
|
||||
}
|
||||
});
|
||||
|
||||
handleFavorite = () => {
|
||||
handleFavorite = preventDoubleTap(() => {
|
||||
const {isFavorite, actions, currentChannel} = this.props;
|
||||
const {favoriteChannel, unfavoriteChannel} = actions;
|
||||
const toggleFavorite = isFavorite ? unfavoriteChannel : favoriteChannel;
|
||||
this.setState({isFavorite: !isFavorite});
|
||||
toggleFavorite(currentChannel.id);
|
||||
};
|
||||
});
|
||||
|
||||
handleClosePermalink = () => {
|
||||
const {actions} = this.props;
|
||||
@@ -304,7 +304,7 @@ export default class ChannelInfo extends PureComponent {
|
||||
this.showPermalinkView(postId);
|
||||
};
|
||||
|
||||
handleMuteChannel = () => {
|
||||
handleMuteChannel = preventDoubleTap(() => {
|
||||
const {actions, currentChannel, currentUserId, isChannelMuted} = this.props;
|
||||
const {updateChannelNotifyProps} = actions;
|
||||
const opts = {
|
||||
@@ -313,7 +313,7 @@ export default class ChannelInfo extends PureComponent {
|
||||
|
||||
this.setState({isMuted: !isChannelMuted});
|
||||
updateChannelNotifyProps(currentUserId, currentChannel.id, opts);
|
||||
};
|
||||
});
|
||||
|
||||
showPermalinkView = (postId) => {
|
||||
const {actions, navigator} = this.props;
|
||||
@@ -468,7 +468,6 @@ export default class ChannelInfo extends PureComponent {
|
||||
/>
|
||||
</React.Fragment>
|
||||
)}
|
||||
<View style={style.separator}/>
|
||||
</React.Fragment>
|
||||
);
|
||||
};
|
||||
@@ -507,60 +506,61 @@ export default class ChannelInfo extends PureComponent {
|
||||
style={style.scrollView}
|
||||
>
|
||||
{currentChannel.hasOwnProperty('id') &&
|
||||
<ChannelInfoHeader
|
||||
createAt={currentChannel.create_at}
|
||||
creator={currentChannelCreatorName}
|
||||
displayName={currentChannel.display_name}
|
||||
header={currentChannel.header}
|
||||
memberCount={currentChannelMemberCount}
|
||||
navigator={navigator}
|
||||
onPermalinkPress={this.handlePermalinkPress}
|
||||
purpose={currentChannel.purpose}
|
||||
status={status}
|
||||
theme={theme}
|
||||
type={currentChannel.type}
|
||||
isArchived={currentChannel.delete_at !== 0}
|
||||
/>
|
||||
<ChannelInfoHeader
|
||||
createAt={currentChannel.create_at}
|
||||
creator={currentChannelCreatorName}
|
||||
displayName={currentChannel.display_name}
|
||||
header={currentChannel.header}
|
||||
memberCount={currentChannelMemberCount}
|
||||
navigator={navigator}
|
||||
onPermalinkPress={this.handlePermalinkPress}
|
||||
purpose={currentChannel.purpose}
|
||||
status={status}
|
||||
theme={theme}
|
||||
type={currentChannel.type}
|
||||
isArchived={currentChannel.delete_at !== 0}
|
||||
/>
|
||||
}
|
||||
<View style={style.rowsContainer}>
|
||||
{this.actionsRows(style, channelIsArchived)}
|
||||
{this.renderLeaveOrDeleteChannelRow() &&
|
||||
<View>
|
||||
<ChannelInfoRow
|
||||
action={this.handleLeave}
|
||||
defaultMessage='Leave Channel'
|
||||
icon='sign-out'
|
||||
textId={t('navbar.leave')}
|
||||
theme={theme}
|
||||
/>
|
||||
</View>
|
||||
<React.Fragment>
|
||||
<View style={style.separator}/>
|
||||
<ChannelInfoRow
|
||||
action={this.handleLeave}
|
||||
defaultMessage='Leave Channel'
|
||||
icon='sign-out'
|
||||
textId={t('navbar.leave')}
|
||||
theme={theme}
|
||||
/>
|
||||
</React.Fragment>
|
||||
}
|
||||
</View>
|
||||
{this.renderLeaveOrDeleteChannelRow() && canDeleteChannel && !channelIsArchived &&
|
||||
<View style={style.footer}>
|
||||
<ChannelInfoRow
|
||||
action={this.handleDelete}
|
||||
defaultMessage='Archive Channel'
|
||||
iconColor='#CA3B27'
|
||||
icon='archive'
|
||||
textId={t('mobile.routes.channelInfo.delete_channel')}
|
||||
textColor='#CA3B27'
|
||||
theme={theme}
|
||||
/>
|
||||
</View>
|
||||
<View style={style.footer}>
|
||||
<ChannelInfoRow
|
||||
action={this.handleDelete}
|
||||
defaultMessage='Archive Channel'
|
||||
iconColor='#CA3B27'
|
||||
icon='archive'
|
||||
textId={t('mobile.routes.channelInfo.delete_channel')}
|
||||
textColor='#CA3B27'
|
||||
theme={theme}
|
||||
/>
|
||||
</View>
|
||||
}
|
||||
{this.renderCloseDirect() &&
|
||||
<View style={style.footer}>
|
||||
<ChannelInfoRow
|
||||
action={this.handleClose}
|
||||
defaultMessage={defaultMessage}
|
||||
icon='times'
|
||||
iconColor='#CA3B27'
|
||||
textId={i18nId}
|
||||
textColor='#CA3B27'
|
||||
theme={theme}
|
||||
/>
|
||||
</View>
|
||||
<View style={style.footer}>
|
||||
<ChannelInfoRow
|
||||
action={this.handleClose}
|
||||
defaultMessage={defaultMessage}
|
||||
icon='times'
|
||||
iconColor='#CA3B27'
|
||||
textId={i18nId}
|
||||
textColor='#CA3B27'
|
||||
theme={theme}
|
||||
/>
|
||||
</View>
|
||||
}
|
||||
</ScrollView>
|
||||
</View>
|
||||
|
||||
@@ -41,6 +41,8 @@ function mapStateToProps(state, ownProps) {
|
||||
let canAddReaction = true;
|
||||
let canEdit = false;
|
||||
let canEditUntil = -1;
|
||||
let {canDelete} = ownProps;
|
||||
let canPin = true;
|
||||
|
||||
if (hasNewPermissions(state)) {
|
||||
canAddReaction = haveIChannelPermission(state, {
|
||||
@@ -52,6 +54,8 @@ function mapStateToProps(state, ownProps) {
|
||||
|
||||
if (channelIsArchived) {
|
||||
canAddReaction = false;
|
||||
canDelete = false;
|
||||
canPin = false;
|
||||
} else {
|
||||
canEdit = canEditPost(state, config, license, currentTeamId, currentChannelId, currentUserId, post);
|
||||
if (canEdit && license.IsLicensed === 'true' &&
|
||||
@@ -66,6 +70,8 @@ function mapStateToProps(state, ownProps) {
|
||||
canAddReaction,
|
||||
canEdit,
|
||||
canEditUntil,
|
||||
canDelete,
|
||||
canPin,
|
||||
currentTeamUrl: getCurrentTeamUrl(state),
|
||||
isMyPost: currentUserId === post.user_id,
|
||||
post,
|
||||
|
||||
@@ -29,6 +29,7 @@ export default class PostOptions extends PureComponent {
|
||||
additionalOption: PropTypes.object,
|
||||
canAddReaction: PropTypes.bool,
|
||||
canDelete: PropTypes.bool,
|
||||
canPin: PropTypes.bool,
|
||||
canEdit: PropTypes.bool,
|
||||
canEditUntil: PropTypes.number.isRequired,
|
||||
channelIsReadOnly: PropTypes.bool,
|
||||
@@ -210,13 +211,19 @@ export default class PostOptions extends PureComponent {
|
||||
const actions = [
|
||||
this.getEditOption(),
|
||||
this.getFlagOption(),
|
||||
this.getPinOption(),
|
||||
this.getAddReactionOption(),
|
||||
this.getCopyPermalink(),
|
||||
this.getCopyText(),
|
||||
this.getDeleteOption(),
|
||||
];
|
||||
|
||||
const {canDelete, canPin} = this.props;
|
||||
if (canPin) {
|
||||
actions.splice(2, 0, this.getPinOption());
|
||||
}
|
||||
if (canDelete) {
|
||||
actions.push(this.getDeleteOption());
|
||||
}
|
||||
|
||||
return actions.filter((a) => a !== null);
|
||||
};
|
||||
|
||||
@@ -224,13 +231,19 @@ export default class PostOptions extends PureComponent {
|
||||
const actions = [
|
||||
this.getFlagOption(),
|
||||
this.getAddReactionOption(),
|
||||
this.getPinOption(),
|
||||
this.getCopyPermalink(),
|
||||
this.getCopyText(),
|
||||
this.getEditOption(),
|
||||
this.getDeleteOption(),
|
||||
];
|
||||
|
||||
const {canDelete, canPin} = this.props;
|
||||
if (canPin) {
|
||||
actions.splice(2, 0, this.getPinOption());
|
||||
}
|
||||
if (canDelete) {
|
||||
actions.push(this.getDeleteOption());
|
||||
}
|
||||
|
||||
return actions.filter((a) => a !== null);
|
||||
};
|
||||
|
||||
|
||||
@@ -31,7 +31,6 @@ function mapStateToProps(state) {
|
||||
teamsRequest: state.requests.teams.getTeams,
|
||||
teams: Object.values(getJoinableTeams(state)).sort(sortTeams),
|
||||
currentChannelId: getCurrentChannelId(state),
|
||||
joinTeamRequest: state.requests.teams.joinTeam,
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
@@ -51,7 +51,6 @@ export default class SelectTeam extends PureComponent {
|
||||
}).isRequired,
|
||||
currentChannelId: PropTypes.string,
|
||||
currentUrl: PropTypes.string.isRequired,
|
||||
joinTeamRequest: PropTypes.object.isRequired,
|
||||
navigator: PropTypes.object,
|
||||
userWithoutTeams: PropTypes.bool,
|
||||
teams: PropTypes.array.isRequired,
|
||||
@@ -81,11 +80,6 @@ export default class SelectTeam extends PureComponent {
|
||||
if (this.props.teams !== nextProps.teams) {
|
||||
this.buildData(nextProps);
|
||||
}
|
||||
|
||||
if (this.props.joinTeamRequest.status !== RequestStatus.FAILURE &&
|
||||
nextProps.joinTeamRequest.status === RequestStatus.FAILURE) {
|
||||
Alert.alert('', nextProps.joinTeamRequest.error.message);
|
||||
}
|
||||
}
|
||||
|
||||
getTeams = () => {
|
||||
@@ -160,8 +154,9 @@ export default class SelectTeam extends PureComponent {
|
||||
markChannelAsRead(currentChannelId);
|
||||
}
|
||||
|
||||
const success = await joinTeam(team.invite_id, team.id);
|
||||
if (!success) {
|
||||
const {error} = await joinTeam(team.invite_id, team.id);
|
||||
if (error) {
|
||||
Alert.alert(error.message);
|
||||
this.setState({joining: false});
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -36,7 +36,6 @@ describe('SelectTeam', () => {
|
||||
actions,
|
||||
currentChannelId: 'someId',
|
||||
currentUrl: 'test',
|
||||
joinTeamRequest: {},
|
||||
navigator: {
|
||||
setOnNavigatorEvent: jest.fn(),
|
||||
},
|
||||
|
||||
@@ -46,7 +46,7 @@ function isEmoticon(text) {
|
||||
}
|
||||
|
||||
export function hasEmojisOnly(message, customEmojis) {
|
||||
if (!message || message.length === 0) {
|
||||
if (!message || message.length === 0 || (/^\s{4}/).test(message)) {
|
||||
return {isEmojiOnly: false, shouldRenderJumboEmoji: false};
|
||||
}
|
||||
|
||||
|
||||
@@ -60,6 +60,10 @@ describe('hasEmojisOnly with named emojis', () => {
|
||||
name: 'Mixed valid and invalid named emojis',
|
||||
message: ' :smile: invalid :heart: ',
|
||||
expected: {isEmojiOnly: false, shouldRenderJumboEmoji: false},
|
||||
}, {
|
||||
name: 'This should render a codeblock instead',
|
||||
message: ' :D',
|
||||
expected: {isEmojiOnly: false, shouldRenderJumboEmoji: false},
|
||||
}];
|
||||
|
||||
const customEmojis = new Map([['valid_custom', 0]]);
|
||||
|
||||
@@ -487,7 +487,7 @@
|
||||
"sidebar_right_menu.logout": "로그아웃",
|
||||
"sidebar_right_menu.report": "문제 보고",
|
||||
"sidebar.direct": "개인 메시지",
|
||||
"sidebar.unreads": "More unreads",
|
||||
"sidebar.unreads": "읽지 않은 글 더보기",
|
||||
"signup.email": "이메일과 패스워드",
|
||||
"status_dropdown.set_away": "다른 용무 중",
|
||||
"status_dropdown.set_dnd": "방해 금지",
|
||||
|
||||
@@ -1,13 +1,13 @@
|
||||
{
|
||||
"about.date": "Data kompilacji:",
|
||||
"about.date": "Data Kompilacji:",
|
||||
"about.enterpriseEditione1": "Wersja Enterprise",
|
||||
"about.enterpriseEditionLearn": "Dowiedz się więcej na temat wydania Enteprise na stronie",
|
||||
"about.enterpriseEditionSt": "Współczesna komunikacja dla przedsiębiorstw zza Twojego firewalla.",
|
||||
"about.hash": "Wartość skrótu kompilacji",
|
||||
"about.hashee": "Build Hash wersji enterprise:",
|
||||
"about.hash": "Wartość Skrótu Kompilacji:",
|
||||
"about.hashee": "Build Hash Wersji Enterprise:",
|
||||
"about.teamEditionLearn": "Dołącz do społeczności Mattermost na stronie ",
|
||||
"about.teamEditionSt": "Cała komunikacja Twojego zespołu w jednym miejscu, z natychmiastowym przeszukiwaniem i dostępna z każdego miejsca.",
|
||||
"about.teamEditiont0": "Wydanie zespołowe",
|
||||
"about.teamEditiont0": "Wydanie Zespołowe",
|
||||
"about.teamEditiont1": "Wydanie Enterprise",
|
||||
"about.title": "O Mattermost",
|
||||
"announcment_banner.dont_show_again": "Don't show again",
|
||||
@@ -18,7 +18,7 @@
|
||||
"channel_header.directchannel.you": "{displayname} (Ty) ",
|
||||
"channel_header.manageMembers": "Zarządzaj użytkownikami",
|
||||
"channel_header.pinnedPosts": "Przypięte posty",
|
||||
"channel_header.viewMembers": "Wyświetl użytkowników",
|
||||
"channel_header.viewMembers": "Wyświetl Użytkowników",
|
||||
"channel_info.header": "Nagłówek:",
|
||||
"channel_info.purpose": "Cel:",
|
||||
"channel_loader.someone": "Ktoś",
|
||||
@@ -33,7 +33,7 @@
|
||||
"channel_modal.optional": "(opcjonalne)",
|
||||
"channel_modal.purpose": "Cel",
|
||||
"channel_modal.purposeEx": "Np. \"Kanał do zgłaszania bugów i usprawnień\"",
|
||||
"channel_notifications.muteChannel.settings": "kanał",
|
||||
"channel_notifications.muteChannel.settings": "Wycisz kanał",
|
||||
"combined_system_message.added_to_channel.many_expanded": "{users} and {lastUser} were **added to the channel** by {actor}.",
|
||||
"combined_system_message.added_to_channel.one": "{firstUser} **added to the channel** by {actor}.",
|
||||
"combined_system_message.added_to_channel.one_you": "You were **added to the channel** by {actor}.",
|
||||
@@ -112,13 +112,13 @@
|
||||
"login.signIn": "Zaloguj się",
|
||||
"login.username": "Nazwa użytkownika",
|
||||
"login.userNotFound": "Nie mogliśmy znaleźć konta pasującego do danych logowania.",
|
||||
"mobile.about.appVersion": "Wersja aplikacji: {version} (Build {number})",
|
||||
"mobile.about.appVersion": "Wersja Aplikacji: {version} (Build {number})",
|
||||
"mobile.about.copyright": "Copyright 2015-{currentYear} Mattermost, Inc. Wszelkie prawa zastrzeżone.",
|
||||
"mobile.about.database": "Baza danych: {type}",
|
||||
"mobile.about.licensed": "Licensed to: {company}",
|
||||
"mobile.about.powered_by": "{site} is powered by Mattermost",
|
||||
"mobile.about.serverVersion": "Wersja serwera: {version} (Build {number})",
|
||||
"mobile.about.serverVersionNoBuild": "Wersja serwera: {version}",
|
||||
"mobile.about.serverVersion": "Wersja Serwera: {version} (Build {number})",
|
||||
"mobile.about.serverVersionNoBuild": "Wersja Serwera: {version}",
|
||||
"mobile.account_notifications.reply.header": "WYSYŁAJ POWIADOMIENIA DLA",
|
||||
"mobile.account_notifications.threads_mentions": "Wzmianki w wątkach",
|
||||
"mobile.account_notifications.threads_start": "Wątki, które rozpocząłem",
|
||||
@@ -133,10 +133,10 @@
|
||||
"mobile.advanced_settings.reset_message": "\nThis will reset all offline data and restart the app. You will be automatically logged back in once the app restarts.\n",
|
||||
"mobile.advanced_settings.reset_title": "Reset Cache",
|
||||
"mobile.advanced_settings.timezone": "Strefa Czasowa",
|
||||
"mobile.advanced_settings.title": "Zaawansowane ustawienia",
|
||||
"mobile.advanced_settings.title": "Zaawansowane Ustawienia",
|
||||
"mobile.android.camera_permission_denied_description": "Aby zapisać obrazy i filmy do biblioteki, proszę zmień swoje ustawienia uprawnień.",
|
||||
"mobile.android.camera_permission_denied_title": "Camera access is required",
|
||||
"mobile.android.permission_denied_dismiss": "Dismiss",
|
||||
"mobile.android.permission_denied_dismiss": "Odrzuć",
|
||||
"mobile.android.permission_denied_retry": "Set permission",
|
||||
"mobile.android.photos_permission_denied_description": "Aby zapisać obrazy i filmy do biblioteki, proszę zmień swoje ustawienia uprawnień.",
|
||||
"mobile.android.photos_permission_denied_title": "Photo library access is required",
|
||||
@@ -149,38 +149,38 @@
|
||||
"mobile.authentication_error.title": "Błąd Autoryzacji",
|
||||
"mobile.calendar.dayNames": "Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday",
|
||||
"mobile.calendar.dayNamesShort": "Sun,Mon,Tue,Wed,Thu,Fri,Sat",
|
||||
"mobile.calendar.monthNames": "January,February,March,April,May,June,July,August,September,October,November,December",
|
||||
"mobile.calendar.monthNamesShort": "Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec",
|
||||
"mobile.calendar.monthNames": "Styczeń,Luty,Marzec,Kwiecień,Maj,Czerwiec,Lipiec,Sierpień,Wrzesień,Październik,Listopad,Grudzień",
|
||||
"mobile.calendar.monthNamesShort": "Sty,Lut,Mar,Kwi,Lip,Sie,Wrz,Paź,Lis,Gru",
|
||||
"mobile.channel_drawer.search": "Jump to...",
|
||||
"mobile.channel_info.alertMessageDeleteChannel": "Jesteś pewien, że chcesz opuścić {term} {name}?",
|
||||
"mobile.channel_info.alertMessageLeaveChannel": "Jesteś pewien, że chcesz opuścić {term} {name}?",
|
||||
"mobile.channel_info.alertNo": "Nie",
|
||||
"mobile.channel_info.alertTitleDeleteChannel": "Archive {term}",
|
||||
"mobile.channel_info.alertTitleDeleteChannel": "Archiwizuj {term}",
|
||||
"mobile.channel_info.alertTitleLeaveChannel": "{term} - Opuść",
|
||||
"mobile.channel_info.alertYes": "Tak",
|
||||
"mobile.channel_info.delete_failed": "Nie można dołączyć do kanału {displayName}. Sprawdź swoje połączenie i spróbuj ponownie.",
|
||||
"mobile.channel_info.edit": "Edit Channel",
|
||||
"mobile.channel_info.edit": "Edytuj Kanał",
|
||||
"mobile.channel_info.privateChannel": "Prywatny kanał",
|
||||
"mobile.channel_info.publicChannel": "Kanał publiczny",
|
||||
"mobile.channel_list.alertNo": "Nie",
|
||||
"mobile.channel_list.alertYes": "Tak",
|
||||
"mobile.channel_list.channels": "CHANNELS",
|
||||
"mobile.channel_list.closeDM": "Zamknij wiadomość bezpośrednią",
|
||||
"mobile.channel_list.closeGM": "Zamknij wiadomość grupową",
|
||||
"mobile.channel_list.members": "MEMBERS",
|
||||
"mobile.channel_list.channels": "KANAŁY",
|
||||
"mobile.channel_list.closeDM": "Zamknij Wiadomość Bezpośrednią",
|
||||
"mobile.channel_list.closeGM": "Zamknij Wiadomość Grupową",
|
||||
"mobile.channel_list.members": "CZŁONKOWIE",
|
||||
"mobile.channel_list.not_member": "NIE JEST UŻYTKOWNIKIEM",
|
||||
"mobile.channel_list.unreads": "NIEPRZECZYTANE",
|
||||
"mobile.channel_members.add_members_alert": "Musisz wybrać co najmniej jednego użytkownika, który ma zostać usunięty z kanału.",
|
||||
"mobile.channel.markAsRead": "Mark As Read",
|
||||
"mobile.client_upgrade": "Update App",
|
||||
"mobile.client_upgrade.can_upgrade_subtitle": "A new version is available for download.",
|
||||
"mobile.client_upgrade.can_upgrade_title": "Update Available",
|
||||
"mobile.client_upgrade.close": "Update Later",
|
||||
"mobile.client_upgrade.current_version": "Wersja serwera: {version}",
|
||||
"mobile.client_upgrade.download_error.message": "An error occurred downloading the new version.",
|
||||
"mobile.client_upgrade.download_error.title": "Unable to Install Update",
|
||||
"mobile.client_upgrade.latest_version": "Wersja serwera: {version}",
|
||||
"mobile.client_upgrade.listener.dismiss_button": "Dismiss",
|
||||
"mobile.channel.markAsRead": "Oznacz Jako Przeczytane",
|
||||
"mobile.client_upgrade": "Zaktualizuj Aplikacje",
|
||||
"mobile.client_upgrade.can_upgrade_subtitle": "Nowa wersja jest dostępna do pobrania.",
|
||||
"mobile.client_upgrade.can_upgrade_title": "Dostępna Aktualizacja",
|
||||
"mobile.client_upgrade.close": "Zaktualizuj Później",
|
||||
"mobile.client_upgrade.current_version": "Wersja Serwera: {version}",
|
||||
"mobile.client_upgrade.download_error.message": "Wystąpił błąd podczas pobierania nowej wersji.",
|
||||
"mobile.client_upgrade.download_error.title": "Nie można Zainstalować Aktualizacji",
|
||||
"mobile.client_upgrade.latest_version": "Wersja Serwera: {version}",
|
||||
"mobile.client_upgrade.listener.dismiss_button": "Odrzuć",
|
||||
"mobile.client_upgrade.listener.learn_more_button": "Learn More",
|
||||
"mobile.client_upgrade.listener.message": "A client upgrade is available!",
|
||||
"mobile.client_upgrade.listener.upgrade_button": "Upgrade",
|
||||
@@ -221,7 +221,7 @@
|
||||
"mobile.edit_channel": "Zapisz",
|
||||
"mobile.edit_post.title": "Edycja Wiadomości",
|
||||
"mobile.emoji_picker.activity": "AKTYWNOŚCI",
|
||||
"mobile.emoji_picker.custom": "CUSTOM",
|
||||
"mobile.emoji_picker.custom": "NIESTANDARDOWE",
|
||||
"mobile.emoji_picker.flags": "FLAGS",
|
||||
"mobile.emoji_picker.foods": "JEDZENIE",
|
||||
"mobile.emoji_picker.nature": "NATURE",
|
||||
@@ -286,7 +286,7 @@
|
||||
"mobile.notice_platform_link": "serwer",
|
||||
"mobile.notice_text": "Mattermost is made possible by the open source software used in our {platform} and {mobile}.",
|
||||
"mobile.notification_settings_mentions.keywords": "Słowa kluczowe:",
|
||||
"mobile.notification_settings_mentions.keywordsDescription": "Other words that trigger a mention",
|
||||
"mobile.notification_settings_mentions.keywordsDescription": "Inne słowa, które uruchamiają wzmianki",
|
||||
"mobile.notification_settings_mentions.keywordsHelp": "Keywords are non-case sensitive and should be separated by a comma.",
|
||||
"mobile.notification_settings_mentions.wordsTrigger": "SŁOWA, KTÓRE URUCHAMIAJĄ WZMIANKI",
|
||||
"mobile.notification_settings_mobile.default_sound": "Domyślny ({sound})",
|
||||
@@ -302,7 +302,7 @@
|
||||
"mobile.notification_settings_mobile.test_push": "To jest powiadomienie testowe push",
|
||||
"mobile.notification_settings_mobile.vibrate": "Wibracje",
|
||||
"mobile.notification_settings.auto_responder_short": "Automatyczne Odpowiedzi",
|
||||
"mobile.notification_settings.auto_responder.default_message": "Witaj, jestem nieobecny i nie mogę odpowiadać na wiadomości.",
|
||||
"mobile.notification_settings.auto_responder.default_message": "Witaj, jestem niedostępny i nie mogę obecnie odpowiadać na wiadomości.",
|
||||
"mobile.notification_settings.auto_responder.enabled": "Włączony",
|
||||
"mobile.notification_settings.auto_responder.footer_message": "Ustaw niestandardową wiadomość, która zostanie automatycznie wysłana w odpowiedzi na Wiadomości Bezpośrednie. Wzmianki na Kanałach Publicznych i Prywatnych nie uruchamiają automatycznej odpowiedzi. Włączenie Automatycznych Odpowiedzi ustawia twój status na Nieobecny i wyłącza powiadomienia email i push.",
|
||||
"mobile.notification_settings.auto_responder.message_placeholder": "Wiadomość",
|
||||
@@ -311,10 +311,10 @@
|
||||
"mobile.notification_settings.email_title": "Powiadomienia Email",
|
||||
"mobile.notification_settings.email.send": "WYŚLIJ POWIADOMIENIA EMAIL",
|
||||
"mobile.notification_settings.mentions_replies": "Wzmianki i Odpowiedzi",
|
||||
"mobile.notification_settings.mentions.channelWide": "Channel-wide mentions",
|
||||
"mobile.notification_settings.mentions.channelWide": "Wzmianki na kanale",
|
||||
"mobile.notification_settings.mentions.reply_title": "Wyślij powiadomienia o odpowiedzi do",
|
||||
"mobile.notification_settings.mentions.sensitiveName": "Twoje imię z rozróżnianiem wielkich i małych liter",
|
||||
"mobile.notification_settings.mentions.sensitiveUsername": "Your non-case sensitive username",
|
||||
"mobile.notification_settings.mentions.sensitiveUsername": "Twoja nazwa użytkownika bez rozróżniania wielkości liter",
|
||||
"mobile.notification_settings.mobile": "Mobile",
|
||||
"mobile.notification_settings.mobile_title": "Powiadomienia mobilne push",
|
||||
"mobile.notification_settings.modal_cancel": "ANULUJ",
|
||||
@@ -354,7 +354,7 @@
|
||||
"mobile.post.retry": "Odśwież",
|
||||
"mobile.posts_view.moreMsg": "Więcej Nowych Wiadomości Powyżej",
|
||||
"mobile.recent_mentions.empty_description": "W tym miejscu pojawią się wiadomości zawierające Twoją nazwę użytkownika i inne słowa, które będą wyzwalać wzmianki.",
|
||||
"mobile.recent_mentions.empty_title": "Ostatnie wzmianki",
|
||||
"mobile.recent_mentions.empty_title": "Brak Ostatnich Wzmianek",
|
||||
"mobile.rename_channel.display_name_maxLength": "Nazwa kanału musi posiadać mniej niż {maxLength, number} znaków",
|
||||
"mobile.rename_channel.display_name_minLength": "Channel name must be {minLength, number} or more characters",
|
||||
"mobile.rename_channel.display_name_required": "Channel name is required",
|
||||
@@ -409,10 +409,10 @@
|
||||
"mobile.server_upgrade.title": "Wymagane uaktualnienie serwera",
|
||||
"mobile.server_url.invalid_format": "Adres musi zaczynać się od http:// lub https://",
|
||||
"mobile.session_expired": "Sesja wygasła: zaloguj się, aby kontynuować otrzymywanie powiadomień.",
|
||||
"mobile.set_status.away": "Zaraz wracam",
|
||||
"mobile.set_status.away": "Nieobecny",
|
||||
"mobile.set_status.dnd": "Nie przeszkadzać",
|
||||
"mobile.set_status.offline": "Offline",
|
||||
"mobile.set_status.online": "Online",
|
||||
"mobile.set_status.online": "Dostępny",
|
||||
"mobile.settings.modal.check_for_upgrade": "Sprawdź Aktualizacje",
|
||||
"mobile.share_extension.cancel": "Anuluj",
|
||||
"mobile.share_extension.channel": "Kanał",
|
||||
@@ -429,8 +429,8 @@
|
||||
"mobile.terms_of_service.get_terms_error_description": "Make sure you have an active internet connection and try again. If this issue persists, contact your System Administrator.",
|
||||
"mobile.terms_of_service.get_terms_error_title": "Unable to load terms of service.",
|
||||
"mobile.terms_of_service.terms_rejected": "You must agree to the terms of service before accessing {siteName}. Please contact your System Administrator for more details.",
|
||||
"mobile.timezone_settings.automatically": "Set automatically",
|
||||
"mobile.timezone_settings.manual": "Change timezone",
|
||||
"mobile.timezone_settings.automatically": "Ustaw automatycznie",
|
||||
"mobile.timezone_settings.manual": "Zmień strefę czasową",
|
||||
"mobile.timezone_settings.select": "Select Timezone",
|
||||
"mobile.user_list.deactivated": "Dezaktywuj",
|
||||
"mobile.user.settings.notifications.email.fifteenMinutes": "Every 15 minutes",
|
||||
@@ -441,7 +441,7 @@
|
||||
"mobile.youtube_playback_error.description": "An error occurred while trying to play the YouTube video.\nDetails: {details}",
|
||||
"mobile.youtube_playback_error.title": "YouTube playback error",
|
||||
"modal.manual_status.auto_responder.message_": "Would you like to switch your status to \"{status}\" and disable Automatic Replies?",
|
||||
"modal.manual_status.auto_responder.message_away": "Would you like to switch your status to \"Away\" and disable Automatic Replies?",
|
||||
"modal.manual_status.auto_responder.message_away": "Czy chcesz zmienić swój status na \"Zaraz Wracam\" i wyłączyć automatyczne odpowiedzi?",
|
||||
"modal.manual_status.auto_responder.message_dnd": "Would you like to switch your status to \"Do Not Disturb\" and disable Automatic Replies?",
|
||||
"modal.manual_status.auto_responder.message_offline": "Would you like to switch your status to \"Offline\" and disable Automatic Replies?",
|
||||
"modal.manual_status.auto_responder.message_online": "Would you like to switch your status to \"Online\" and disable Automatic Replies?",
|
||||
@@ -470,30 +470,30 @@
|
||||
"post_info.bot": "BOT",
|
||||
"post_info.del": "Usuń",
|
||||
"post_info.edit": "Edytuj",
|
||||
"post_info.message.show_less": "Show Less",
|
||||
"post_info.message.show_more": "Show More",
|
||||
"post_info.message.show_less": "Pokaż Mniej",
|
||||
"post_info.message.show_more": "Pokaż Więcej",
|
||||
"post_info.system": "System",
|
||||
"post_message_view.edited": "(edytowany)",
|
||||
"posts_view.newMsg": "Nowe wiadomości",
|
||||
"posts_view.newMsg": "Nowe Wiadomości",
|
||||
"quick_switch_modal.teams": "Warunki",
|
||||
"rename_channel.handleHolder": "alfanumeryczne znaki z małej litery",
|
||||
"rename_channel.url": "Adres URL:",
|
||||
"rhs_thread.rootPostDeletedMessage.body": "Part of this thread has been deleted due to a data retention policy. You can no longer reply to this thread.",
|
||||
"search_bar.search": "Szukaj",
|
||||
"search_header.results": "Wyniki wyszukiwania",
|
||||
"search_header.title2": "Ostatnie wzmianki",
|
||||
"search_header.title2": "Ostatnie Wzmianki",
|
||||
"search_header.title3": "Oznaczone posty",
|
||||
"search_item.channelArchived": "Archived",
|
||||
"sidebar_right_menu.logout": "Wyloguj",
|
||||
"sidebar_right_menu.report": "Zgłoś problem",
|
||||
"sidebar.direct": "DIRECT MESSAGES",
|
||||
"sidebar.unreads": "More unreads",
|
||||
"sidebar_right_menu.report": "Zgłoś Problem",
|
||||
"sidebar.direct": "WIADOMOŚCI BEZPOŚREDNIE",
|
||||
"sidebar.unreads": "Więcej nieprzeczytanych",
|
||||
"signup.email": "E-mail i hasło",
|
||||
"status_dropdown.set_away": "Zaraz wracam",
|
||||
"status_dropdown.set_dnd": "Nie przeszkadzać",
|
||||
"status_dropdown.set_offline": "Offline",
|
||||
"status_dropdown.set_online": "Online",
|
||||
"status_dropdown.set_ooo": "Out of Office",
|
||||
"status_dropdown.set_online": "Dostępny",
|
||||
"status_dropdown.set_ooo": "Poza Biurem",
|
||||
"suggestion.mention.all": "OSTRZEŻENIE: wspomina wszystkich na kanale",
|
||||
"suggestion.mention.channel": "Powiadamia wszystkich na kanale",
|
||||
"suggestion.mention.channels": "Moje kanały",
|
||||
|
||||
@@ -26,13 +26,13 @@
|
||||
"channel_modal.cancel": "Anulare",
|
||||
"channel_modal.descriptionHelp": "Descrieți cum trebuie folosit acest canal.",
|
||||
"channel_modal.header": "Antet",
|
||||
"channel_modal.headerEx": "De exemplu: "[Link Title] (http://example.com)"",
|
||||
"channel_modal.headerEx": "De exemplu: \"[Adresa Titlu] (http://example.com)\"",
|
||||
"channel_modal.headerHelp": "Setați textul care va apărea în antetul canalului de lângă numele canalului. De exemplu, includeți linkurile frecvent utilizate prin tastarea [Link Title] (http://example.com).",
|
||||
"channel_modal.name": "Nume",
|
||||
"channel_modal.nameEx": "De exemplu: "Bugs", "Marketing", "客户 支持"",
|
||||
"channel_modal.nameEx": "De exemplu: \"Bugs\", \"Marketing\", \"客户 支持\"",
|
||||
"channel_modal.optional": "(opțional)",
|
||||
"channel_modal.purpose": "Scop",
|
||||
"channel_modal.purposeEx": "De exemplu: "Un canal pentru a trimite bug-uri și îmbunătățiri"",
|
||||
"channel_modal.purposeEx": "De exemplu: \"Un canal pentru a trimite bug-uri și îmbunătățiri\"",
|
||||
"channel_notifications.muteChannel.settings": "Dezactivați canalul",
|
||||
"combined_system_message.added_to_channel.many_expanded": "{users} și {lastUser} au fost ** adăugați la canalul ** de către {actor}.",
|
||||
"combined_system_message.added_to_channel.one": "{firstUser} ** a fost adăugat la canalul ** de către {actor}.",
|
||||
@@ -366,7 +366,7 @@
|
||||
"mobile.request.invalid_response": "A primit răspuns rău de la server.",
|
||||
"mobile.reset_status.alert_cancel": "Anulare",
|
||||
"mobile.reset_status.alert_ok": "OK",
|
||||
"mobile.reset_status.title_ooo": "Dezactivați "Out of Office"?",
|
||||
"mobile.reset_status.title_ooo": "Dezactivați \"Afară din birou\"?",
|
||||
"mobile.retry_message": "Mesajele refăcute au eșuat. Trageți în sus pentru a încerca din nou.",
|
||||
"mobile.routes.channel_members.action": "Eliminați membrii",
|
||||
"mobile.routes.channel_members.action_message": "Trebuie să selectați cel puțin un membru pentru a fi eliminat din canal.",
|
||||
@@ -440,11 +440,11 @@
|
||||
"mobile.video.save_error_title": "Salvați eroarea video",
|
||||
"mobile.youtube_playback_error.description": "A apărut o eroare în timp ce încerca pentru a rula video de pe YouTube.\nDetalii: {details}",
|
||||
"mobile.youtube_playback_error.title": "YouTube eroare de redare",
|
||||
"modal.manual_status.auto_responder.message_": "Doriți să treceți statutul dvs. la "{status}" și să dezactivați răspunsurile automate?",
|
||||
"modal.manual_status.auto_responder.message_away": "Doriți să vă schimbați statutul în "Away" și să dezactivați răspunsurile automate?",
|
||||
"modal.manual_status.auto_responder.message_dnd": "Doriți să vă schimbați statutul în "Nu deranjați" și să dezactivați răspunsurile automate?",
|
||||
"modal.manual_status.auto_responder.message_offline": "Doriți să vă schimbați statutul în "Offline" și să dezactivați răspunsurile automate?",
|
||||
"modal.manual_status.auto_responder.message_online": "Doriți să vă schimbați statusul la "Online" și să dezactivați răspunsurile automate?",
|
||||
"modal.manual_status.auto_responder.message_": "Doriți să treceți statutul dvs. la \"{status}\" și să dezactivați răspunsurile automate?",
|
||||
"modal.manual_status.auto_responder.message_away": "Doriți să vă schimbați statutul în \"Plecat\" și să dezactivați răspunsurile automate?",
|
||||
"modal.manual_status.auto_responder.message_dnd": "Doriți să vă schimbați statutul în \"Nu deranjați\" și să dezactivați răspunsurile automate?",
|
||||
"modal.manual_status.auto_responder.message_offline": "Doriți să vă schimbați statutul în \"Offline\" și să dezactivați răspunsurile automate?",
|
||||
"modal.manual_status.auto_responder.message_online": "Doriți să vă schimbați statusul la \"Online\" și să dezactivați răspunsurile automate?",
|
||||
"more_channels.noMore": "Nu mai există canale care să se alăture",
|
||||
"more_channels.title": "Mai multe canale",
|
||||
"msg_typing.areTyping": "{users} și {last} introduc ...",
|
||||
@@ -474,7 +474,7 @@
|
||||
"post_info.message.show_more": "Detalii",
|
||||
"post_info.system": "Sistem",
|
||||
"post_message_view.edited": "(editat)",
|
||||
"posts_view.newMsg": "Mesaje noi% 1: number of unread messages% 2: total number of messages",
|
||||
"posts_view.newMsg": "Mesaje noi",
|
||||
"quick_switch_modal.teams": "Echipe",
|
||||
"rename_channel.handleHolder": "caractere alfanumerice minuscule",
|
||||
"rename_channel.url": "URL",
|
||||
|
||||
@@ -409,7 +409,7 @@
|
||||
"mobile.server_upgrade.title": "Потрібно оновлення сервера",
|
||||
"mobile.server_url.invalid_format": "Адреса повинен починатися з http:// або https://",
|
||||
"mobile.session_expired": "Сесія закінчилася. Увійдіть, щоб продовжувати отримувати сповіщення.",
|
||||
"mobile.set_status.away": "Далеко",
|
||||
"mobile.set_status.away": "Не на місці",
|
||||
"mobile.set_status.dnd": "Не турбувати ",
|
||||
"mobile.set_status.offline": "Offline",
|
||||
"mobile.set_status.online": "Online",
|
||||
@@ -489,7 +489,7 @@
|
||||
"sidebar.direct": "ОСОБИСТІ ПОВІДОМЛЕННЯ",
|
||||
"sidebar.unreads": "НОВІ ПОВІДОМЛЕННЯ ",
|
||||
"signup.email": "Email і пароль ",
|
||||
"status_dropdown.set_away": "Далеко ",
|
||||
"status_dropdown.set_away": "Не на місці ",
|
||||
"status_dropdown.set_dnd": "Не турбувати ",
|
||||
"status_dropdown.set_offline": "Offline ",
|
||||
"status_dropdown.set_online": "Online ",
|
||||
@@ -537,7 +537,7 @@
|
||||
"user.settings.notifications.emailInfo": "Поштові повідомлення при згадках і особистих повідомленнях починають відправлятися якщо ви не в мережі або відійшли з {siteName} більше ніж на 5 хвилин.",
|
||||
"user.settings.notifications.never": "Ніколи ",
|
||||
"user.settings.notifications.onlyMentions": "Тільки для згадування та прямих повідомлень",
|
||||
"user.settings.push_notification.away": "Відсутня або не в мережі",
|
||||
"user.settings.push_notification.away": "Не на місці або не в мережі",
|
||||
"user.settings.push_notification.disabled": "Email повідомлення відключені ",
|
||||
"user.settings.push_notification.disabled_long": "Системний адміністратор не активував сповіщення електронною поштою. ",
|
||||
"user.settings.push_notification.offline": "Не в мережі",
|
||||
|
||||
@@ -309,15 +309,16 @@ platform :ios do
|
||||
error do |lane, exception|
|
||||
version = get_version_number(xcodeproj: './ios/Mattermost.xcodeproj', target: 'Mattermost')
|
||||
build_number = get_build_number(xcodeproj: './ios/Mattermost.xcodeproj')
|
||||
send_message_to_mattermost(
|
||||
version,
|
||||
build_number,
|
||||
'',
|
||||
'Unsuccessful Build',
|
||||
exception.message,
|
||||
[:lane],
|
||||
false
|
||||
)
|
||||
send_message_to_mattermost({
|
||||
:version_number => version,
|
||||
:build_number => build_number,
|
||||
:pretext => '',
|
||||
:title => 'Unsuccessful Build',
|
||||
:thumb_url => 'https://support.apple.com/library/content/dam/edam/applecare/images/en_US/iOS/move-to-ios-icon.png',
|
||||
:msg => exception.message,
|
||||
:default_payloads => [:lane],
|
||||
:success => false
|
||||
})
|
||||
end
|
||||
|
||||
def build_ios()
|
||||
@@ -438,7 +439,16 @@ platform :android do
|
||||
gradle_file: './android/app/build.gradle'
|
||||
)
|
||||
|
||||
send_message_to_mattermost(version_number, build_number, '', 'Unsuccessful Build', exception.message, [:lane], false)
|
||||
send_message_to_mattermost({
|
||||
:version_number => version_number,
|
||||
:build_number => build_number,
|
||||
:pretext => '',
|
||||
:title => 'Unsuccessful Build',
|
||||
:thumb_url => 'https://lh3.ggpht.com/XL0CrI8skkxnboGct-duyg-bZ_MxJDTrjczyjdU8OP2PM1dmj7SP4jL1K8JQeMIB3AM=w300',
|
||||
:msg => exception.message,
|
||||
:default_payloads => [:lane],
|
||||
:success => false,
|
||||
})
|
||||
end
|
||||
|
||||
def build_android()
|
||||
@@ -482,26 +492,26 @@ def save_config_json(json)
|
||||
end
|
||||
end
|
||||
|
||||
def send_message_to_mattermost(version_number, build_number, pretext, title, msg, default_payloads, success)
|
||||
def send_message_to_mattermost(options)
|
||||
unless ENV['MATTERMOST_WEBHOOK_URL'].nil? || ENV['MATTERMOST_WEBHOOK_URL'].empty?
|
||||
mattermost(
|
||||
pretext: pretext,
|
||||
message: msg,
|
||||
default_payloads: default_payloads,
|
||||
pretext: options[:pretext],
|
||||
message: options[:msg],
|
||||
default_payloads: options[:default_payloads],
|
||||
username: 'Fastlane',
|
||||
icon_url: 'https://s3-eu-west-1.amazonaws.com/fastlane.tools/fastlane.png',
|
||||
payload: {},
|
||||
attachment_properties: {
|
||||
title: title,
|
||||
thumb_url: 'https://lh3.ggpht.com/XL0CrI8skkxnboGct-duyg-bZ_MxJDTrjczyjdU8OP2PM1dmj7SP4jL1K8JQeMIB3AM=w300',
|
||||
title: options[:title],
|
||||
thumb_url: options[:thumb_url],
|
||||
fields: [{
|
||||
title: 'Version',
|
||||
value: version_number,
|
||||
value: options[:version_number],
|
||||
short: true
|
||||
},
|
||||
{
|
||||
title: 'Build Number',
|
||||
value: build_number,
|
||||
value: options[:build_number],
|
||||
short: true
|
||||
},
|
||||
{
|
||||
@@ -510,7 +520,7 @@ def send_message_to_mattermost(version_number, build_number, pretext, title, msg
|
||||
short: true
|
||||
}]
|
||||
},
|
||||
success: success
|
||||
success: options[:success]
|
||||
)
|
||||
end
|
||||
end
|
||||
@@ -545,15 +555,16 @@ def submit_to_store
|
||||
msg = 'Sign up as a beta tester [here](https://play.google.com/apps/testing/com.mattermost.rnbeta)'
|
||||
end
|
||||
|
||||
send_message_to_mattermost(
|
||||
version_number,
|
||||
build_number,
|
||||
pretext,
|
||||
'',
|
||||
msg,
|
||||
[],
|
||||
true
|
||||
)
|
||||
send_message_to_mattermost({
|
||||
:version_number => version_number,
|
||||
:build_number => build_number,
|
||||
:pretext => pretext,
|
||||
:title => '',
|
||||
:thumb_url => 'https://lh3.ggpht.com/XL0CrI8skkxnboGct-duyg-bZ_MxJDTrjczyjdU8OP2PM1dmj7SP4jL1K8JQeMIB3AM=w300',
|
||||
:msg => msg,
|
||||
:default_payloads => [],
|
||||
:success => true,
|
||||
})
|
||||
end
|
||||
|
||||
# Submit to TestFlight if required
|
||||
@@ -574,15 +585,16 @@ def submit_to_store
|
||||
version = get_version_number(xcodeproj: './ios/Mattermost.xcodeproj', target: 'Mattermost')
|
||||
build_number = get_build_number(xcodeproj: './ios/Mattermost.xcodeproj')
|
||||
|
||||
send_message_to_mattermost(
|
||||
version,
|
||||
build_number,
|
||||
pretext,
|
||||
'',
|
||||
msg,
|
||||
[],
|
||||
true
|
||||
)
|
||||
send_message_to_mattermost({
|
||||
:version_number => version_number,
|
||||
:build_number => build_number,
|
||||
:pretext => pretext,
|
||||
:title => '',
|
||||
:thumb_url => 'https://support.apple.com/library/content/dam/edam/applecare/images/en_US/iOS/move-to-ios-icon.png',
|
||||
:msg => msg,
|
||||
:default_payloads => [],
|
||||
:success => true,
|
||||
})
|
||||
end
|
||||
|
||||
unless apk_path.nil?
|
||||
|
||||
@@ -6,17 +6,17 @@ GEM
|
||||
public_suffix (>= 2.0.2, < 4.0)
|
||||
atomos (0.1.3)
|
||||
aws-eventstream (1.0.1)
|
||||
aws-partitions (1.114.0)
|
||||
aws-sdk-core (3.38.0)
|
||||
aws-partitions (1.129.0)
|
||||
aws-sdk-core (3.44.2)
|
||||
aws-eventstream (~> 1.0)
|
||||
aws-partitions (~> 1.0)
|
||||
aws-sigv4 (~> 1.0)
|
||||
jmespath (~> 1.0)
|
||||
aws-sdk-kms (1.11.0)
|
||||
aws-sdk-core (~> 3, >= 3.26.0)
|
||||
aws-sdk-kms (1.13.0)
|
||||
aws-sdk-core (~> 3, >= 3.39.0)
|
||||
aws-sigv4 (~> 1.0)
|
||||
aws-sdk-s3 (1.24.1)
|
||||
aws-sdk-core (~> 3, >= 3.37.0)
|
||||
aws-sdk-s3 (1.30.0)
|
||||
aws-sdk-core (~> 3, >= 3.39.0)
|
||||
aws-sdk-kms (~> 1)
|
||||
aws-sigv4 (~> 1.0)
|
||||
aws-sigv4 (1.0.3)
|
||||
@@ -28,24 +28,25 @@ GEM
|
||||
highline (~> 1.7.2)
|
||||
declarative (0.0.10)
|
||||
declarative-option (0.1.0)
|
||||
digest-crc (0.4.1)
|
||||
domain_name (0.5.20180417)
|
||||
unf (>= 0.0.5, < 1.0.0)
|
||||
dotenv (2.5.0)
|
||||
dotenv (2.6.0)
|
||||
emoji_regex (0.1.1)
|
||||
excon (0.62.0)
|
||||
faraday (0.15.3)
|
||||
faraday (0.15.4)
|
||||
multipart-post (>= 1.2, < 3)
|
||||
faraday-cookie_jar (0.0.6)
|
||||
faraday (>= 0.7.4)
|
||||
http-cookie (~> 1.0.0)
|
||||
faraday_middleware (0.12.2)
|
||||
faraday (>= 0.7.4, < 1.0)
|
||||
fastimage (2.1.4)
|
||||
fastlane (2.108.0)
|
||||
fastimage (2.1.5)
|
||||
fastlane (2.113.0)
|
||||
CFPropertyList (>= 2.3, < 4.0.0)
|
||||
addressable (>= 2.3, < 3.0.0)
|
||||
babosa (>= 1.0.2, < 2.0.0)
|
||||
bundler (>= 1.12.0, < 2.0.0)
|
||||
bundler (>= 1.12.0, < 3.0.0)
|
||||
colored
|
||||
commander-fastlane (>= 4.4.6, < 5.0.0)
|
||||
dotenv (>= 2.1.1, < 3.0.0)
|
||||
@@ -57,6 +58,7 @@ GEM
|
||||
fastimage (>= 2.1.0, < 3.0.0)
|
||||
gh_inspector (>= 1.1.2, < 2.0.0)
|
||||
google-api-client (>= 0.21.2, < 0.24.0)
|
||||
google-cloud-storage (>= 1.15.0, < 2.0.0)
|
||||
highline (>= 1.7.2, < 2.0.0)
|
||||
json (< 3.0.0)
|
||||
mini_magick (~> 4.5.1)
|
||||
@@ -91,6 +93,15 @@ GEM
|
||||
representable (~> 3.0)
|
||||
retriable (>= 2.0, < 4.0)
|
||||
signet (~> 0.9)
|
||||
google-cloud-core (1.2.7)
|
||||
google-cloud-env (~> 1.0)
|
||||
google-cloud-env (1.0.5)
|
||||
faraday (~> 0.11)
|
||||
google-cloud-storage (1.15.0)
|
||||
digest-crc (~> 0.4)
|
||||
google-api-client (~> 0.23)
|
||||
google-cloud-core (~> 1.2)
|
||||
googleauth (~> 0.6.2)
|
||||
googleauth (0.6.7)
|
||||
faraday (~> 0.12)
|
||||
jwt (>= 1.4, < 3.0)
|
||||
@@ -110,16 +121,16 @@ GEM
|
||||
mime-types-data (~> 3.2015)
|
||||
mime-types-data (3.2018.0812)
|
||||
mini_magick (4.5.1)
|
||||
mini_portile2 (2.3.0)
|
||||
mini_portile2 (2.4.0)
|
||||
multi_json (1.13.1)
|
||||
multi_xml (0.6.0)
|
||||
multipart-post (2.0.0)
|
||||
nanaimo (0.2.6)
|
||||
naturally (2.2.0)
|
||||
nokogiri (1.8.5)
|
||||
mini_portile2 (~> 2.3.0)
|
||||
nokogiri (1.10.0)
|
||||
mini_portile2 (~> 2.4.0)
|
||||
os (1.0.0)
|
||||
plist (3.4.0)
|
||||
plist (3.5.0)
|
||||
public_suffix (2.0.5)
|
||||
representable (3.0.4)
|
||||
declarative (< 0.1.0)
|
||||
@@ -143,13 +154,13 @@ GEM
|
||||
unicode-display_width (~> 1.1, >= 1.1.1)
|
||||
tty-cursor (0.6.0)
|
||||
tty-screen (0.6.5)
|
||||
tty-spinner (0.8.0)
|
||||
tty-cursor (>= 0.5.0)
|
||||
tty-spinner (0.9.0)
|
||||
tty-cursor (~> 0.6.0)
|
||||
uber (0.1.0)
|
||||
unf (0.1.4)
|
||||
unf_ext
|
||||
unf_ext (0.0.7.5)
|
||||
unicode-display_width (1.4.0)
|
||||
unicode-display_width (1.4.1)
|
||||
word_wrap (1.0.0)
|
||||
xcodeproj (1.7.0)
|
||||
CFPropertyList (>= 2.3.3, < 4.0)
|
||||
@@ -175,4 +186,4 @@ DEPENDENCIES
|
||||
nokogiri
|
||||
|
||||
BUNDLED WITH
|
||||
1.16.1
|
||||
1.17.3
|
||||
|
||||
@@ -2527,7 +2527,7 @@
|
||||
CODE_SIGN_ENTITLEMENTS = Mattermost/Mattermost.entitlements;
|
||||
CODE_SIGN_IDENTITY = "iPhone Developer";
|
||||
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
|
||||
CURRENT_PROJECT_VERSION = 166;
|
||||
CURRENT_PROJECT_VERSION = 170;
|
||||
DEAD_CODE_STRIPPING = NO;
|
||||
DEVELOPMENT_TEAM = UQ8HT4Q2XM;
|
||||
ENABLE_BITCODE = NO;
|
||||
@@ -2579,7 +2579,7 @@
|
||||
CODE_SIGN_ENTITLEMENTS = Mattermost/Mattermost.entitlements;
|
||||
CODE_SIGN_IDENTITY = "iPhone Developer";
|
||||
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
|
||||
CURRENT_PROJECT_VERSION = 166;
|
||||
CURRENT_PROJECT_VERSION = 170;
|
||||
DEAD_CODE_STRIPPING = NO;
|
||||
DEVELOPMENT_TEAM = UQ8HT4Q2XM;
|
||||
ENABLE_BITCODE = NO;
|
||||
|
||||
@@ -19,7 +19,7 @@
|
||||
<key>CFBundlePackageType</key>
|
||||
<string>APPL</string>
|
||||
<key>CFBundleShortVersionString</key>
|
||||
<string>1.15.1</string>
|
||||
<string>1.15.2</string>
|
||||
<key>CFBundleSignature</key>
|
||||
<string>????</string>
|
||||
<key>CFBundleURLTypes</key>
|
||||
@@ -34,7 +34,7 @@
|
||||
</dict>
|
||||
</array>
|
||||
<key>CFBundleVersion</key>
|
||||
<string>166</string>
|
||||
<string>170</string>
|
||||
<key>ITSAppUsesNonExemptEncryption</key>
|
||||
<false/>
|
||||
<key>LSRequiresIPhoneOS</key>
|
||||
|
||||
@@ -21,9 +21,9 @@
|
||||
<key>CFBundlePackageType</key>
|
||||
<string>XPC!</string>
|
||||
<key>CFBundleShortVersionString</key>
|
||||
<string>1.15.1</string>
|
||||
<string>1.15.2</string>
|
||||
<key>CFBundleVersion</key>
|
||||
<string>166</string>
|
||||
<string>170</string>
|
||||
<key>NSAppTransportSecurity</key>
|
||||
<dict>
|
||||
<key>NSAllowsArbitraryLoads</key>
|
||||
|
||||
@@ -15,10 +15,10 @@
|
||||
<key>CFBundlePackageType</key>
|
||||
<string>BNDL</string>
|
||||
<key>CFBundleShortVersionString</key>
|
||||
<string>1.15.1</string>
|
||||
<string>1.15.2</string>
|
||||
<key>CFBundleSignature</key>
|
||||
<string>????</string>
|
||||
<key>CFBundleVersion</key>
|
||||
<string>166</string>
|
||||
<string>170</string>
|
||||
</dict>
|
||||
</plist>
|
||||
|
||||
Reference in New Issue
Block a user