1
0
Fork 0
mirror of https://github.com/YunoHost-Apps/jappix_ynh.git synced 2024-09-03 19:26:19 +02:00

Update sources to Jappix 1.1.2

This commit is contained in:
mbugeia 2014-11-25 23:42:38 +01:00
parent 88db60ddf9
commit 71db53b86c
132 changed files with 18072 additions and 15798 deletions

View file

@ -4,8 +4,22 @@ Jappix Changelog
Here's the log of what has changed over the Jappix releases.
Primo, v1.1.0 (Jun 2014)
------------------------
Primo, v1.1.2 (October 2014)
----------------------------
* XEP-0353: Jingle Message Initiation @valeriansaliou
* Fixes Jingle calls in Chrome 38+ @valeriansaliou
Primo, v1.1.1 (September 2014)
------------------------------
* Ignore empty XHTML-IM messages @eijebong, @valeriansaliou
* Fix a bug with message markers @valeriansaliou
Primo, v1.1.0 (June 2014)
-------------------------
* XEP-0272: Multiparty Jingle (Muji) @valeriansaliou
* Prevent client crash on huge messages @valeriansaliou

View file

@ -67,14 +67,15 @@ Here are listed the XMPP Protocol Extensions that Jappix supports, as well as th
* XEP-0334: Message Processing Hints *v0.1*
* XEP-0338: Jingle Grouping Framework *v0.1*
* XEP-0339: Source-Specific Media Attributes in Jingle *v0.1*
* XEP-0353: Jingle Message Initiation *v0.1*
# XMPP Extensions (Updated)
* XEP-0272: Multiparty Jingle (Muji) *v0.2*
* Alternate URL: https://demo.frenchtouch.pro/valerian.saliou/xmpp/extensions/xep-0272.html
* Alternate URL: https://demo.hakuma.holdings/valerian.saliou/xmpp/extensions/xep-0272.html
* XEP-0313: Message Archive Management *v0.3*
* Alternate URL: https://demo.frenchtouch.pro/valerian.saliou/xmpp/extensions/xep-0313.html
* Alternate URL: https://demo.hakuma.holdings/valerian.saliou/xmpp/extensions/xep-0313.html
# XMPP Extensions (Proposed)

View file

@ -6,7 +6,7 @@ Jappix is a fresh new open social platform which enables you to create your own
You can build your own Jappix installation for your own requirements: if you want to use it as a personal social client, you can download it and put it on your webserver. It's easy, fast and free.
[![build status](https://ci.frenchtouch.pro/projects/7/status.png?ref=master)](https://ci.frenchtouch.pro/projects/7?ref=master)
[![build status](https://ci.hakuma.holdings/projects/7/status.png?ref=master)](https://ci.hakuma.holdings/projects/7?ref=master)
License
@ -45,7 +45,7 @@ Mirrors
In case a master service is down (GitHub for Git access or Jappix.org for project download), here is a list of available mirrors:
* Project website mirror: https://project.jappix.com/
* Development repository mirror: https://code.frenchtouch.pro/jappix/jappix
* Development repository mirror: https://code.hakuma.holdings/jappix/jappix
MUC Links

View file

@ -1 +1 @@
Primo [1.1.0]
Primo [1.1.2]

View file

@ -6,9 +6,9 @@
var BrowserDetect = {
init: function () {
this.browser = this.searchString(this.dataBrowser) || "An unknown browser";
this.version = this.searchVersion(navigator.userAgent)
|| this.searchVersion(navigator.appVersion)
|| "an unknown version";
this.version = this.searchVersion(navigator.userAgent) ||
this.searchVersion(navigator.appVersion) ||
"an unknown version";
this.OS = this.searchString(this.dataOS) || "an unknown OS";
},

View file

@ -22,6 +22,10 @@ var Call = (function() {
/* Variables */
self._start_stamp = 0;
self.call_auto_accept = {
'from' : null,
'sid' : null
};
/**
@ -139,6 +143,123 @@ var Call = (function() {
}
},
single_propose: function(stanza, proposed_medias) {
try {
var stanza_from = stanza.getFrom() || null;
var call_id = JSJaCJingleBroadcast.get_call_id(stanza);
// Request for Jingle session to be accepted
if(stanza_from && call_id) {
var call_media_main = 'audio';
if(JSJAC_JINGLE_MEDIA_VIDEO in proposed_medias) {
call_media_main = 'video';
}
Call.notify(
JSJAC_JINGLE_SESSION_SINGLE,
Common.bareXID(stanza_from),
('broadcast_' + call_media_main),
call_media_main,
null,
{
full_xid: stanza_from,
call_id: call_id,
medias: proposed_medias
}
);
Audio.play('incoming-call', true);
// Save initiator (security: don't save SID until it's accepted)
self.call_auto_accept.from = stanza_from;
self.call_auto_accept.sid = null;
}
} catch(e) {
Console.error('Call.init[single_propose]', e);
}
},
single_retract: function(stanza) {
try {
var stanza_from = stanza.getFrom() || null;
var call_id = JSJaCJingleBroadcast.get_call_id(stanza);
var call_medias = JSJaCJingleBroadcast.get_call_medias(call_id);
// Call retracted (from initiator)
if(self.call_auto_accept.from == stanza_from) {
Audio.stop('incoming-call');
Call.notify(
JSJAC_JINGLE_SESSION_SINGLE,
Common.bareXID(stanza_from),
'remote_canceled'
);
}
} catch(e) {
Console.error('Call.init[single_retract]', e);
}
},
single_accept: function(stanza) {
try {
var stanza_from = stanza.getFrom() || null;
var call_id = JSJaCJingleBroadcast.get_call_id(stanza);
// Another resource accepted the call
if(self.call_auto_accept.sid == call_id &&
stanza_from && Common.getFullXID() != stanza_from) {
self._unnotify();
Audio.stop('incoming-call');
}
} catch(e) {
Console.error('Call.init[single_accept]', e);
}
},
single_reject: function(stanza) {
try {
var stanza_from = stanza.getFrom() || null;
var call_id = JSJaCJingleBroadcast.get_call_id(stanza);
// Another resource rejected the call
if(self.call_auto_accept.sid == call_id &&
stanza_from && Common.getFullXID() != stanza_from) {
self._unnotify();
Audio.stop('incoming-call');
}
} catch(e) {
Console.error('Call.init[single_reject]', e);
}
},
single_proceed: function(stanza) {
try {
// Read broadcast parameters
var call_to = stanza.getFrom() || null;
var call_id = JSJaCJingleBroadcast.get_call_id(stanza);
var call_medias = JSJaCJingleBroadcast.get_call_medias(call_id);
// Check medias to include
var has_media_video = false;
for(var i = 0; i < call_medias.length; i++) {
if(call_medias[i] === JSJAC_JINGLE_MEDIA_VIDEO) {
has_media_video = true;
break;
}
}
var call_media_picked = has_media_video ? JSJAC_JINGLE_MEDIA_VIDEO : JSJAC_JINGLE_MEDIA_AUDIO;
// Follow up Jingle call
Jingle.follow_up(call_to, call_media_picked, call_id);
} catch(e) {
Console.error('Call.init[single_proceed]', e);
}
},
// Receive a multiparty (Muji) call
muji_invite: function(stanza, args) {
try {
@ -186,13 +307,14 @@ var Call = (function() {
/**
* Stops current call
* @public
* @param {boolean} abort
* @return {boolean}
*/
self.stop = function() {
self.stop = function(abort) {
try {
Jingle.stop();
Muji.stop();
Jingle.stop(abort);
Muji.stop(abort);
} catch(e) {
Console.error('Call.stop', e);
} finally {
@ -464,9 +586,10 @@ var Call = (function() {
* @param {string} xid
* @param {string} type
* @param {string} mode
* @param {object} [options_arr]
* @return {boolean}
*/
self.notify = function(call_type, xid, type, mode, sender_xid) {
self.notify = function(call_type, xid, type, mode, sender_xid, options_arr) {
try {
sender_xid = sender_xid || xid;
@ -532,11 +655,11 @@ var Call = (function() {
call_tools_all_sel.find('a.reply-button[data-action="' + button + '"]').click(function() {
try {
// Remove notification
self._unnotify(xid);
self._unnotify();
// Execute callback, if any
if(typeof attrs.cb === 'function') {
attrs.cb(xid, mode);
attrs.cb(xid, mode, options_arr);
}
Console.info('Closed call notification drawer');

View file

@ -234,9 +234,10 @@ var Chat = (function () {
* @private
* @param {string} type
* @param {string} id
* @param {string} xid
* @return {object}
*/
self._generateChatCode = function(type, id) {
self._generateChatCode = function(type, id, xid) {
var code_args = {};
@ -400,7 +401,7 @@ var Chat = (function () {
var escaped_xid = escape(xid);
// Special code
var chat_args = self._generateChatCode(type, id);
var chat_args = self._generateChatCode(type, id, xid);
// Append the chat HTML code
$('#page-engine').append(

View file

@ -555,7 +555,7 @@ var Common = (function () {
/**
* Gets the full XID of the user
* Gets the bare XID of the user
* @public
* @return {string}
*/
@ -575,6 +575,29 @@ var Common = (function () {
};
/**
* Gets the full XID of the user
* @public
* @return {string}
*/
self.getFullXID = function() {
try {
var xid = self.getXID();
// Return the full XID of the user
if(xid) {
return xid + '/' + con.resource;
}
return '';
} catch(e) {
Console.error('Common.getFullXID', e);
}
};
/**
* Generates the colors for a given user XID
* @public

View file

@ -460,7 +460,7 @@ var Connection = (function () {
// Remove the waiting item
Interface.removeGeneralWait();
// Init Jingle
// Init call
Call.init();
} catch(e) {
Console.error('Connection.handleConnected', e);
@ -522,6 +522,9 @@ var Connection = (function () {
try {
Console.info('Jappix is now disconnected.');
// Abort ongoing call (if any)
Call.stop(true);
// Normal disconnection
if(!self.current_session && !self.connected) {
Talk.destroy();

View file

@ -406,9 +406,10 @@ var DateUtils = (function () {
* Reads a message delay
* @public
* @param {string} node
* @return {string}
* @param {boolean} return_date
* @return {string|Date}
*/
self.readMessageDelay = function(node) {
self.readMessageDelay = function(node, return_date) {
try {
// Initialize
@ -425,8 +426,14 @@ var DateUtils = (function () {
// Old delay (obsolete XEP!)
var x_delay = jQuery(node).find('x[xmlns="' + NS_DELAY + '"]:first').attr('stamp');
if(x_delay)
if(x_delay) {
delay = x_delay.replace(/^(\w{4})(\w{2})(\w{2})T(\w{2}):(\w{2}):(\w{2})Z?(\S+)?/, '$1-$2-$3T$4:$5:$6Z$7');
}
}
// Return a date object?
if(return_date === true && delay) {
return Date.jab2date(delay);
}
return delay;

View file

@ -401,6 +401,32 @@ var Filter = (function () {
};
/**
* Returns whether XHTML body exists or not
* @public
* @param {DOM} xhtml_sel
* @return {boolean}
*/
self.has_xhtml_body = function(xhtml_sel) {
var has_xhtml_body = false;
try {
xhtml_sel.find('*').each(function() {
if($(this).text()) {
has_xhtml_body = true;
return false;
}
});
} catch(e) {
Console.error('Filter.has_xhtml_body', e);
} finally {
return has_xhtml_body;
}
};
/**
* Filters a xHTML message to be displayed in Jappix
* @public

View file

@ -21,7 +21,7 @@ var Groupchat = (function () {
/* Variables */
var JOIN_SUGGEST = [];
self.join_suggest = [];
/**
@ -197,7 +197,9 @@ var Groupchat = (function () {
// Store groupchats to join?
if(this_sel.is('.continue')) {
$('#suggest .content a.one.active').each(function() {
JOIN_SUGGEST.push(this_sel.attr('data-xid'));
self.join_suggest.push(
$(this).attr('data-xid')
);
});
}
@ -343,7 +345,6 @@ var Groupchat = (function () {
// Configure the new room
if(affiliation == 'owner' || affiliation == 'admin') {
console.debug('presence', presence.xml());
self._initialConfiguration(id, room);
}
@ -554,14 +555,14 @@ var Groupchat = (function () {
try {
// Nothing to join?
if(!JOIN_SUGGEST) {
if(!self.join_suggest) {
return;
}
// Join the chats
if(JOIN_SUGGEST.length) {
for(var g in JOIN_SUGGEST) {
Chat.checkCreate(JOIN_SUGGEST[g], 'groupchat');
if(self.join_suggest.length) {
for(var g in self.join_suggest) {
Chat.checkCreate(self.join_suggest[g], 'groupchat');
}
}
} catch(e) {
@ -614,7 +615,7 @@ var Groupchat = (function () {
// Attach events
self._suggestCheckEvents();
} else {
JOIN_SUGGEST = groupchat_arr;
self.join_suggest = groupchat_arr;
Connection.triggerConnected();
}

View file

@ -140,7 +140,7 @@ var addToHome = (function (w) {
options.message = '';
}
if ( options.message === '' ) { // We look for a suitable language (defaulted to en_us)
options.message = language in intl ? intl[language] : intl['en_us'];
options.message = language in intl ? intl[language] : intl.en_us;
}
if ( options.touchIcon ) {

View file

@ -63,9 +63,10 @@ var Jingle = (function() {
* @param hash
* @param local_view
* @param remote_view
* @param [sid]
* @return {object}
*/
self._args = function(connection, xid, hash, media, local_view, remote_view) {
self._args = function(connection, xid, hash, media, local_view, remote_view, sid) {
args = {};
@ -107,19 +108,30 @@ var Jingle = (function() {
} else {
// Incoming call?
if(jingle.is_responder()) {
Call.notify(
JSJAC_JINGLE_SESSION_SINGLE,
Common.bareXID(jingle.get_to()),
('call_' + jingle.get_media()),
jingle.get_media()
);
// Auto-accept (we previously accepted the associated broadcast request)
if(Call.call_auto_accept.from == jingle.get_to() && Call.call_auto_accept.sid == jingle.get_sid()) {
Call.call_auto_accept.from = null;
Call.call_auto_accept.sid = null;
// Play ringtone
// Hard-fix: avoids the JSJaC packets group timer (that will delay success reply)
setTimeout(function() {
Audio.play('incoming-call', true);
jingle.info(JSJAC_JINGLE_SESSION_INFO_RINGING);
}, 250);
// Delay acceptance (status change is delayed)
setTimeout(function() {
jingle.accept();
}, 250);
} else {
Call.notify(
JSJAC_JINGLE_SESSION_SINGLE,
Common.bareXID(jingle.get_to()),
('call_' + jingle.get_media()),
jingle.get_media()
);
// Play ringtone
// Hard-fix: avoids the JSJaC packets group timer (that will delay success reply)
setTimeout(function() {
Audio.play('incoming-call', true);
jingle.info(JSJAC_JINGLE_SESSION_INFO_RINGING);
}, 250);
}
} else {
Call.notify(
JSJAC_JINGLE_SESSION_SINGLE,
@ -258,7 +270,11 @@ var Jingle = (function() {
},
session_terminate_error: function(jingle, stanza) {
// Ensure we this is the same call session ID (SID)
if(typeof jingle.parent != 'undefined') {
jingle = jingle.parent;
}
// Ensure we this is the same call session ID (SID)
if(self._session.get_sid() == jingle.get_sid()) {
if(self._bypass_termination_notify !== true) {
self._reset();
@ -317,6 +333,10 @@ var Jingle = (function() {
Console.log('Jingle._args', 'session_terminate_request');
}
};
if(sid && typeof sid == 'string') {
args.sid = sid;
}
} catch(e) {
Console.error('Jingle._args', e);
} finally {
@ -333,9 +353,10 @@ var Jingle = (function() {
* @param mode
* @param is_callee
* @param stanza
* @param [sid]
* @return {boolean}
*/
self._new = function(xid, mode, is_callee, stanza) {
self._new = function(xid, mode, is_callee, stanza, sid) {
var status = false;
@ -379,7 +400,8 @@ var Jingle = (function() {
bare_hash,
media,
jingle_sel.find('.local_video video')[0],
jingle_sel.find('.remote_video video')[0]
jingle_sel.find('.remote_video video')[0],
sid
);
self._session = new JSJaCJingle.session(JSJAC_JINGLE_SESSION_SINGLE, args);
@ -462,8 +484,11 @@ var Jingle = (function() {
self.start = function(xid, mode) {
try {
if(!Call.is_ongoing()) {
self._new(xid, mode);
// Remote user supports XEP-0353
if(Caps.getFeatureResource(xid, NS_JINGLE_MESSAGE)) {
Jingle.propose(xid, mode);
} else {
Jingle.initialize(xid, mode);
}
} catch(e) {
Console.error('Jingle.start', e);
@ -474,6 +499,115 @@ var Jingle = (function() {
};
/**
* Initializes a Jingle call
* @public
* @param {string} xid
* @param {string} mode
* @return {boolean}
*/
self.initialize = function(xid, mode) {
try {
if(!Call.is_ongoing()) {
Console.info('Jingle.initialize', 'Initiating call with: ' + xid);
self._new(xid, mode);
}
} catch(e) {
Console.error('Jingle.initialize', e);
} finally {
return false;
}
};
/**
* Proposes a Jingle call
* @public
* @param {string} xid
* @param {string} mode
* @return {boolean}
*/
self.propose = function(xid, mode) {
try {
if(!Call.is_ongoing()) {
Console.info('Jingle.propose', 'Proposing call to: ' + xid);
var medias = [JSJAC_JINGLE_MEDIA_AUDIO];
if(mode == 'video') {
medias.push(JSJAC_JINGLE_MEDIA_VIDEO);
}
var call_id = JSJaCJingleBroadcast.propose(
xid, medias,
function(id) {
// Timeout
Call.notify(
JSJAC_JINGLE_SESSION_SINGLE,
xid,
'broadcast_timeout',
mode
);
// Retract
JSJaCJingleBroadcast.retract(xid, id);
}
);
// Send directed presence? (for CAPS, XEP-compliant)
if(!Common.exists('#roster .buddy[data-xid="' + escape(xid) + '"]')) {
Presence.send(xid);
}
Call.notify(
JSJAC_JINGLE_SESSION_SINGLE,
xid,
'broadcast_proposing',
mode,
null,
{
call_id: call_id
}
);
}
} catch(e) {
Console.error('Jingle.propose', e);
} finally {
return false;
}
};
/**
* Follows up a Jingle call (from broadcast)
* @public
* @param {string} xid
* @param {string} mode
* @param {string} sid
* @return {boolean}
*/
self.follow_up = function(xid, mode, sid) {
try {
if(!Call.is_ongoing()) {
self._new(xid, mode, false, null, sid);
}
} catch(e) {
Console.error('Jingle.follow_up', e);
} finally {
return false;
}
};
/**
* Reset current Jingle call
* @public
@ -503,9 +637,10 @@ var Jingle = (function() {
/**
* Stops current Jingle call
* @public
* @param {boolean} abort
* @return {boolean}
*/
self.stop = function() {
self.stop = function(abort) {
try {
// Reset interface
@ -514,7 +649,13 @@ var Jingle = (function() {
// Stop Jingle session
if(self._session !== null) {
self._call_ender = 'local';
self._session.terminate();
if(abort === true) {
self._session.abort();
self._session.get_session_terminate_error(self._session, null);
} else {
self._session.terminate();
}
Console.debug('Stopping current Jingle call...');
} else {
@ -651,6 +792,55 @@ var Jingle = (function() {
self._notify_map = function() {
try {
var broadcast_media_fn = function(xid, mode, attrs) {
JSJaCJingleBroadcast.accept(
attrs.full_xid, attrs.call_id, attrs.medias
);
// Send directed presence? (for CAPS, XEP-compliant)
if(!Common.exists('#roster .buddy[data-xid="' + escape(xid) + '"]')) {
Presence.send(attrs.full_xid);
}
// Marker to auto-accept call later
Call.call_auto_accept.from = attrs.full_xid;
Call.call_auto_accept.sid = attrs.call_id;
var medias_arr = [];
for(var cur_media in attrs.medias) {
medias_arr.push(cur_media);
}
Audio.stop('incoming-call');
Call.notify(
JSJAC_JINGLE_SESSION_SINGLE,
xid,
'broadcast_wait',
medias_arr
);
// Schedule timeout (in case we don't receive the Jingle initialization stanza)
setTimeout(function() {
if(self._session !== null &&
Call.call_auto_accept.sid == self._session.get_sid() &&
self._session.get_status() !== JSJAC_JINGLE_STATUS_INACTIVE) {
// Call received
Call.call_auto_accept.from = null;
Call.call_auto_accept.sid = null;
} else {
// Reset UI (timeout)
Call.notify(
JSJAC_JINGLE_SESSION_SINGLE,
xid,
'broadcast_error',
medias_arr
);
}
}, (JSJAC_JINGLE_BROADCAST_TIMEOUT * 1000));
};
return {
'call_audio': {
'text': Common._e("Is calling you"),
@ -700,6 +890,104 @@ var Jingle = (function() {
}
},
'broadcast_audio': {
'text': Common._e("Is calling you"),
'buttons': {
'accept': {
'text': Common._e("Accept"),
'color': 'green',
'cb': broadcast_media_fn
},
'decline': {
'text': Common._e("Decline"),
'color': 'red',
'cb': function(xid, mode, attrs) {
JSJaCJingleBroadcast.reject(
attrs.full_xid, attrs.call_id, attrs.medias
);
Audio.stop('incoming-call');
}
}
}
},
'broadcast_video': {
'text': Common._e("Is calling you"),
'buttons': {
'accept': {
'text': Common._e("Accept"),
'color': 'green',
'cb': broadcast_media_fn
},
'decline': {
'text': Common._e("Decline"),
'color': 'red',
'cb': function(xid, mode, attrs) {
JSJaCJingleBroadcast.reject(
attrs.full_xid, attrs.call_id, attrs.medias
);
Audio.stop('incoming-call');
}
}
}
},
'broadcast_wait': {
'text': Common._e("Waiting...")
},
'broadcast_proposing': {
'text': Common._e("Proposing call..."),
'buttons': {
'cancel': {
'text': Common._e("Cancel"),
'color': 'red',
'cb': function(xid, mode, attrs) {
// Retract from call
JSJaCJingleBroadcast.retract(
xid,
attrs.call_id
);
}
}
}
},
'broadcast_timeout': {
'text': Common._e("No answer"),
'buttons': {
'okay': {
'text': Common._e("Okay"),
'color': 'blue',
'cb': function(xid, mode) {
self._reset();
}
}
}
},
'broadcast_error': {
'text': Common._e("Call error"),
'buttons': {
'cancel': {
'text': Common._e("Cancel"),
'color': 'red',
'cb': function(xid, mode) {
self._reset();
}
}
}
},
'initiating': {
'text': Common._e("Initiating call"),

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -1227,7 +1227,7 @@ JSJAC_REGID_TIMEOUT = 20000; // time in msec until registered
JSJACHBC_MAX_HOLD = 1; // default for number of connctions
// held by connection manager
JSJACHBC_MAX_WAIT = 300; // default 'wait' param - how long an
JSJACHBC_MAX_WAIT = 20; // default 'wait' param - how long an
// idle connection should be held by
// connection manager

View file

@ -245,10 +245,10 @@ var Markers = (function () {
* @param {boolean} is_mam_marker
* @return {undefined}
*/
self.handle = function(from, message, is_mam_marker) {
self.handle = function(from, message, is_mam_marker, is_groupchat_user) {
try {
var xid = Common.bareXID(from);
var xid = ((is_groupchat_user !== true && Common.bareXID(from)) || from);
var marker_sel = $(message).find('[xmlns="' + NS_URN_MARKERS + '"]');
if(marker_sel.size()) {

View file

@ -1354,9 +1354,13 @@ var Message = (function () {
var xid = Common.bareXID(from);
var resource = Common.thisResource(from);
var hash = hex_md5(xid);
var xHTML = $(node).find('html body').size();
var xHTML_sel = $(node).find('html body');
var xHTML = xHTML_sel.size();
var is_groupchat_user = false;
// Check for non-empty body
var has_body = (((xHTML && Filter.has_xhtml_body(xHTML_sel)) || body) && true);
// This message comes from a Muji room (ignore)
if(Muji.is_room(xid)) {
return false;
@ -1441,7 +1445,7 @@ var Message = (function () {
}
// If the message has a content
if(xHTML || body) {
if(has_body === true) {
var filteredMessage;
var html_escape = true;
@ -1508,7 +1512,7 @@ var Message = (function () {
// Message marker?
if(Markers.hasResponseMarker(node)) {
return Markers.handle(from, node);
return Markers.handle(from, node, false, is_groupchat_user);
}
return false;

View file

@ -20,6 +20,10 @@ var Muji = (function() {
var self = {};
/* Constants */
self.INVITE_MAX_DELAY = 60;
/* Variables */
self._session = null;
self._caller_xid = null;
@ -1020,6 +1024,16 @@ var Muji = (function() {
try {
if(!Call.is_ongoing()) {
// Outdated invite?
var invite_delay = DateUtils.readMessageDelay(stanza.getNode(), true);
var date_now = DateUtils.getTimeStamp();
if(invite_delay &&
(date_now - DateUtils.extractStamp(invite_delay)) >= self.INVITE_MAX_DELAY) {
Console.warn('Muji.receive', 'Discarded outdated invite from: ' + Common.getStanzaFrom(stanza));
return;
}
// Create call session
self._new(
args.jid,
@ -1102,9 +1116,10 @@ var Muji = (function() {
/**
* Stops current Muji call
* @public
* @param {boolean} abort
* @return {boolean}
*/
self.stop = function() {
self.stop = function(abort) {
try {
// Reset interface
@ -1112,7 +1127,12 @@ var Muji = (function() {
// Stop Muji session
if(self._session !== null) {
self._session.leave();
if(abort === true) {
self._session.abort();
self._session.get_session_leave_error(self._session, null);
} else {
self._session.leave();
}
Console.debug('Stopping current Muji call...');
} else {
@ -1326,7 +1346,7 @@ var Muji = (function() {
'text': Common._e("Decline"),
'color': 'red',
'cb': function(xid, mode) {
self._session.abort();
self.stop(true);
Audio.stop('incoming-call');
}
}
@ -1350,7 +1370,7 @@ var Muji = (function() {
'text': Common._e("Decline"),
'color': 'red',
'cb': function(xid, mode) {
self._session.abort();
self.stop(true);
Audio.stop('incoming-call');
}
}
@ -1365,7 +1385,7 @@ var Muji = (function() {
'text': Common._e("Cancel"),
'color': 'red',
'cb': function(xid, mode) {
self._session.abort();
self.stop(true);
}
}
}
@ -1510,8 +1530,10 @@ var Muji = (function() {
'<div class="chatroom">' +
'<div class="chatroom_participants">' +
'<div class="participants_default_view">' +
'<span class="participants_counter">' + Common.printf(Common._e("%s participants"), 0) + '</span>' +
'<span class="participants_full">' + Common._e("(full)") + '</span>' +
'<div class="participants_default_details">' +
'<span class="participants_counter">' + Common.printf(Common._e("%s participants"), 0) + '</span>' +
'<span class="participants_full">' + Common._e("(full)") + '</span>' +
'</div>' +
'<a class="participants_invite call-images" href="#" title="' + Common._e("Invite people...") + '"></a>' +
'</div>' +
@ -1524,10 +1546,9 @@ var Muji = (function() {
'<input class="invite_xid input-reset" name="xid" type="text" placeholder="' + Common._e("Enter people names...") + '" autocomplete="off" />' +
'</div>' +
'<span class="invite_validate">' +
'<span class="invite_separator"></span>' +
'<a class="invite_go call-images" href="#"></a>' +
'</span>' +
'<a class="invite_validate" href="#">' +
'<span class="invite_validate_icon call-images"></span>' +
'</a>' +
'</form>' +
'<div class="participants_invite_search"></div>' +
@ -1759,7 +1780,7 @@ var Muji = (function() {
});
// Invite form validate event
participants_invite_validate.find('.invite_go').click(function() {
participants_invite_validate.click(function() {
try {
participants_invite_form.submit();
} catch(_e) {

View file

@ -311,7 +311,7 @@ var Talk = (function () {
Presence.first_sent = false;
Search.search_filtered = false;
Avatar.pending = [];
JOIN_SUGGEST = [];
Groupchat.join_suggest = [];
// Kill all timers, exept the board ones
$('*:not(#board .one-board)').stopTime();

View file

@ -359,46 +359,31 @@ html[dir="rtl"] #muji .chatroom .chatroom_participants .participants_invite_box
}
#muji .chatroom .chatroom_participants .participants_invite_box form.participants_invite_form .invite_validate {
background: #f9f9f9;
border: 1px solid #e7e7e7;
color: #94a6aa;
text-decoration: none;
padding: 4px 6px 5px 6px;
display: none;
position: absolute;
top: 4px;
right: 9px;
-moz-border-radius: 1px;
-webkit-border-radius: 1px;
border-radius: 1px;
}
#muji .chatroom .chatroom_participants .participants_invite_box form.participants_invite_form .invite_validate .invite_go {
#muji .chatroom .chatroom_participants .participants_invite_box form.participants_invite_form .invite_validate:active {
padding-top: 5px;
padding-bottom: 4px;
}
#muji .chatroom .chatroom_participants .participants_invite_box form.participants_invite_form .invite_validate .invite_validate_icon {
background-position: 0 -329px;
width: 14px;
height: 11px;
opacity: 0.6;
margin-top: 2px;
display: block;
position: absolute;
top: 11px;
right: 16px;
}
html[dir="rtl"] #muji .chatroom .chatroom_participants .participants_invite_box form.participants_invite_form .invite_validate .invite_go {
right: auto;
left: 8px;
}
#muji .chatroom .chatroom_participants .participants_invite_box form.participants_invite_form .invite_validate .invite_go:hover,
#muji .chatroom .chatroom_participants .participants_invite_box form.participants_invite_form .invite_validate .invite_go:active {
opacity: 1;
}
#muji .chatroom .chatroom_participants .participants_invite_box form.participants_invite_form .invite_validate .invite_separator,
#muji .chatroom form.chatroom_form .message_separator {
background: #e9e9e9;
width: 1px;
position: absolute;
top: 6px;
bottom: 6px;
}
#muji .chatroom .chatroom_participants .participants_invite_box form.participants_invite_form .invite_validate .invite_separator {
right: 40px;
}
html[dir="rtl"] #muji .chatroom .chatroom_participants .participants_invite_box form.participants_invite_form .invite_validate .invite_separator {
right: auto;
left: 32px;
}
#muji .chatroom .chatroom_participants .participants_invite_box form.participants_invite_form .invite_input_container {
@ -672,6 +657,11 @@ html[dir="rtl"] #muji .chatroom form.chatroom_form .message_icon {
}
#muji .chatroom form.chatroom_form .message_separator {
background: #e9e9e9;
width: 1px;
position: absolute;
top: 6px;
bottom: 6px;
left: 40px;
}

View file

@ -571,13 +571,15 @@ html[dir="rtl"] .call-content .call-notify .avatar-pane .avatar-container .avata
bottom: 8px;
}
.call-content .call-notify.notify-call_audio .avatar-pane .icon {
.call-content .call-notify.notify-call_audio .avatar-pane .icon,
.call-content .call-notify.notify-broadcast_audio .avatar-pane .icon {
background-position: 0 -120px;
width: 33px;
height: 33px;
}
.call-content .call-notify.notify-call_video .avatar-pane .icon {
.call-content .call-notify.notify-call_video .avatar-pane .icon,
.call-content .call-notify.notify-broadcast_video .avatar-pane .icon {
background-position: 0 -154px;
width: 33px;
height: 22px;

Binary file not shown.

View file

@ -4,10 +4,11 @@
# License: AGPL
# Authors: Valérian Saliou, JanCBorchardt
# Translators:
# sahwar <ve4ernik@gmail.com>, 2014
msgid ""
msgstr ""
"Project-Id-Version: Jappix\n"
"PO-Revision-Date: 2014-05-08 10:20+0100\n"
"PO-Revision-Date: 2014-10-13 10:45+0100\n"
"Last-Translator: Valérian Saliou <valerian@valeriansaliou.name>\n"
"Language-Team: Bulgarian (http://www.transifex.com/projects/p/jappix/"
"language/bg/)\n"
@ -17,7 +18,7 @@ msgstr ""
"Language: bg\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"POT-Creation-Date: \n"
"X-Generator: Poedit 1.6.5\n"
"X-Generator: Poedit 1.6.9\n"
msgid "default:LTR"
msgstr "default:LTR"
@ -60,12 +61,12 @@ msgid "Find a public Jappix node."
msgstr ""
msgid "Credits"
msgstr ""
msgstr "Благодарности"
msgid "Association"
msgstr ""
msgid "Web agency"
msgid "Company"
msgstr ""
msgid "Legal"
@ -84,10 +85,10 @@ msgid "Node owner"
msgstr ""
msgid "By using our service, you accept %s."
msgstr ""
msgstr "Като използвате нашата услуга, вие приемате %s."
msgid "our terms of use"
msgstr ""
msgstr "нашите условия за ползване"
msgid ""
"Jappix has been interrupted by a network issue, a bug or bad login (check "
@ -199,6 +200,21 @@ msgstr "Добяване на приятел"
msgid "Your groupchats"
msgstr "Вашите групови чатове"
msgid "Audio/video conference"
msgstr ""
msgid "Launch a group call"
msgstr ""
msgid "Audio conference"
msgstr "Аудио конференция"
msgid "Video conference"
msgstr "Видео конференция"
msgid "Conference call"
msgstr "Конферетно обаждане"
msgid "Manage your favorite groupchats"
msgstr "Управление на любимите ви групови чатове"
@ -254,7 +270,7 @@ msgid "Busy"
msgstr "зает"
msgid "Offline"
msgstr ""
msgstr "извън линия"
msgid "Mood"
msgstr "Настроение"
@ -457,22 +473,22 @@ msgid "Message archiving"
msgstr "Архивиране на съобщенията"
msgid "Store an history of your chats"
msgstr ""
msgstr "Запис на историята на вашите чатове"
msgid "Geolocation"
msgstr "Геолокация"
msgid "Disabled"
msgstr ""
msgstr "Изключено"
msgid "Store all chats"
msgstr ""
msgstr "Запис на всички чатове"
msgid "Store friend chats"
msgstr ""
msgid "Remove all archives"
msgstr ""
msgstr "Премахване на всички архиви"
msgid "Empty"
msgstr "Празно"
@ -571,7 +587,7 @@ msgid "Underlined text"
msgstr "Подчертан текст"
msgid "Send a file"
msgstr ""
msgstr "Изпращане на файл"
msgid ""
"Once uploaded, your friend will be prompted to download the file you sent."
@ -613,7 +629,7 @@ msgid "All tabs"
msgstr "Всички подпрозорци (табове)"
msgid "Join groupchat"
msgstr ""
msgstr "Присъединяване към групов чат"
msgid "Close this tab"
msgstr "Затваряне на подпрозореца (таба)"
@ -817,10 +833,10 @@ msgid "left the chat room"
msgstr "напусна чат стаята"
msgid "%s left"
msgstr ""
msgstr "%s напусна чата"
msgid "%s joined"
msgstr ""
msgstr "%s се присъедини към чата"
msgid "no status"
msgstr "без статус"
@ -841,6 +857,8 @@ msgid ""
"Jappix is an open social platform, that let's you easily get or keep in "
"touch with everyone."
msgstr ""
"Jappix е отворена социална платформа, която ви позволява лесно да поддържате "
"връзка с всекиго."
msgid ""
"Join the millions of users who are currently using the XMPP Network (Google "
@ -855,7 +873,7 @@ msgid "Hi there!"
msgstr "Ей, ти там, здравей!"
msgid "Welcome to %1s, “%2s”."
msgstr ""
msgstr "Добре дошли в %1s, „%2s“."
msgid "Login to your existing XMPP account or create a new one for free!"
msgstr ""
@ -999,7 +1017,7 @@ msgid "would like to get authorization."
msgstr "желае да получи пълномощно."
msgid "would like to send you a file: “%s”."
msgstr ""
msgstr "желае да ви изпрати файл: „%s“."
msgid "has received a file exchange request: “%s”."
msgstr ""
@ -1053,13 +1071,13 @@ msgid ""
msgstr ""
msgid "Open"
msgstr ""
msgstr "Отваряне"
msgid "Show"
msgstr ""
msgstr "Показване"
msgid "Hide"
msgstr ""
msgstr "Скриване"
msgid "Submit"
msgstr "Изпращане"
@ -1194,7 +1212,7 @@ msgid "Media integration"
msgstr "Медийна интеграция"
msgid "Keep local chat archives"
msgstr ""
msgstr "Пазене на локални архиви на чата"
msgid "XMPP links"
msgstr "XMPP връзки"
@ -2361,12 +2379,24 @@ msgstr ""
msgid "Stop"
msgstr ""
msgid "Leave"
msgstr ""
msgid "Mute"
msgstr ""
msgid "Unmute"
msgstr ""
msgid "Nobody there. Invite some people!"
msgstr ""
msgid "Invite people..."
msgstr ""
msgid "Enter people names..."
msgstr ""
msgid "Is calling you"
msgstr ""
@ -2406,6 +2436,24 @@ msgstr ""
msgid "Ending call..."
msgstr ""
msgid "Incoming group call"
msgstr ""
msgid "Preparing group call..."
msgstr ""
msgid "Connecting to group call..."
msgstr ""
msgid "Group call error"
msgstr ""
msgid "Ending group call..."
msgstr ""
msgid "Group call ended"
msgstr ""
msgid "Accept"
msgstr ""
@ -2423,3 +2471,51 @@ msgstr ""
msgid "Video Call"
msgstr ""
msgid "%s participant"
msgstr ""
msgid "%s participants"
msgstr ""
msgid "(full)"
msgstr ""
msgid "%s is able to receive group calls."
msgstr ""
msgid "%s may not support group calls."
msgstr ""
msgid "Send a message..."
msgstr ""
msgid "Edited"
msgstr ""
msgid "Edited (%s)"
msgstr ""
msgid "Editing"
msgstr ""
msgid "Being edited"
msgstr ""
msgid "Delivered"
msgstr ""
msgid "Read"
msgstr ""
msgid "Sending..."
msgstr ""
msgid "%s requested your attention to the conversation"
msgstr ""
msgid "You requested %s's attention to the conversation"
msgstr ""
msgid "Attention to conversation requested."
msgstr ""

View file

@ -54,7 +54,7 @@ msgstr ""
msgid "Association"
msgstr ""
msgid "Web agency"
msgid "Company"
msgstr ""
msgid "Legal"
@ -2091,6 +2091,12 @@ msgstr ""
msgid "Waiting..."
msgstr ""
msgid "Proposing call..."
msgstr ""
msgid "No answer"
msgstr ""
msgid "Ringing..."
msgstr ""

Binary file not shown.

View file

@ -11,7 +11,7 @@
msgid ""
msgstr ""
"Project-Id-Version: Jappix\n"
"PO-Revision-Date: 2014-05-29 17:06+0100\n"
"PO-Revision-Date: 2014-10-13 10:45+0100\n"
"Last-Translator: Valérian Saliou <valerian@valeriansaliou.name>\n"
"Language-Team: French (http://www.transifex.com/projects/p/jappix/language/"
"fr/)\n"
@ -21,7 +21,7 @@ msgstr ""
"Language: fr\n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
"POT-Creation-Date: \n"
"X-Generator: Poedit 1.6.5\n"
"X-Generator: Poedit 1.6.9\n"
msgid "default:LTR"
msgstr "default:LTR"
@ -69,8 +69,8 @@ msgstr "Crédits"
msgid "Association"
msgstr "Association"
msgid "Web agency"
msgstr "Agence Web"
msgid "Company"
msgstr "Entreprise"
msgid "Legal"
msgstr "Légal"
@ -198,6 +198,21 @@ msgstr "Ajouter un ami"
msgid "Your groupchats"
msgstr "Vos salons de discussion"
msgid "Audio/video conference"
msgstr "Conférence audio/vidéo"
msgid "Launch a group call"
msgstr "Lancer un appel de groupe"
msgid "Audio conference"
msgstr "Conférence audio"
msgid "Video conference"
msgstr "Conférence vidéo"
msgid "Conference call"
msgstr "Appel de groupe"
msgid "Manage your favorite groupchats"
msgstr "Gérer mes salons favoris"
@ -2387,12 +2402,24 @@ msgstr "Slot AdSense"
msgid "Stop"
msgstr "Stop"
msgid "Leave"
msgstr "Partir"
msgid "Mute"
msgstr "Muet"
msgid "Unmute"
msgstr "Audible"
msgid "Nobody there. Invite some people!"
msgstr "Il n'y a personne. Invitez du monde !"
msgid "Invite people..."
msgstr "Inviter des personnes..."
msgid "Enter people names..."
msgstr "Entrez les noms..."
msgid "Is calling you"
msgstr "Vous appelle"
@ -2432,6 +2459,24 @@ msgstr "Est déjà en appel"
msgid "Ending call..."
msgstr "Fin de l'appel..."
msgid "Incoming group call"
msgstr "Appel de groupe"
msgid "Preparing group call..."
msgstr "Préparation de l'appel..."
msgid "Connecting to group call..."
msgstr "Connexion à l'appel..."
msgid "Group call error"
msgstr "Erreur d'appel"
msgid "Ending group call..."
msgstr "Fin de l'appel..."
msgid "Group call ended"
msgstr "Appel terminé"
msgid "Accept"
msgstr "Accepter"
@ -2450,6 +2495,24 @@ msgstr "Appel Audio"
msgid "Video Call"
msgstr "Appel Vidéo"
msgid "%s participant"
msgstr "%s participant"
msgid "%s participants"
msgstr "%s participants"
msgid "(full)"
msgstr "(maxi)"
msgid "%s is able to receive group calls."
msgstr "%s peut recevoir des appels de groupe."
msgid "%s may not support group calls."
msgstr "%s ne semble pas supporter les appels de groupe."
msgid "Send a message..."
msgstr "Envoyer un message..."
msgid "Edited"
msgstr "Édité"

Binary file not shown.

View file

@ -10,7 +10,7 @@
msgid ""
msgstr ""
"Project-Id-Version: Jappix\n"
"PO-Revision-Date: 2014-05-08 10:21+0100\n"
"PO-Revision-Date: 2014-08-09 15:36+0100\n"
"Last-Translator: Valérian Saliou <valerian@valeriansaliou.name>\n"
"Language-Team: Hebrew (http://www.transifex.com/projects/p/jappix/language/"
"he/)\n"
@ -36,7 +36,7 @@ msgid "Social channel, chat and more."
msgstr "ערוץ חברתי, צ'אט ועוד."
msgid "Create your public profile."
msgstr "צור את הדיקן הפומבי שלך."
msgstr "צור דיקן פומבי משלך."
msgid "A mini-chat for your website."
msgstr "מיני צ'אט עבור אתר הרשת שלך."
@ -60,7 +60,7 @@ msgid "Jappix for your company."
msgstr "Jappix עבור הפירמה שלך."
msgid "Find a public Jappix node."
msgstr "מצא נקודת ממסר Jappix פומבית."
msgstr "מצא צומת Jappix פומבי."
msgid "Credits"
msgstr "תודות"
@ -84,7 +84,7 @@ msgid "Owner"
msgstr "בעלים"
msgid "Node owner"
msgstr "בעל הממסר"
msgstr "בעל צומת"
msgid "By using our service, you accept %s."
msgstr "על ידי שימוש בשירותנו, הינך מסכים/ה %s."
@ -144,7 +144,7 @@ msgid "Register"
msgstr "הרשמה"
msgid "Here we go!"
msgstr "קדימה לדרך!"
msgstr "המשך!"
msgid "Server"
msgstr "שרת"
@ -186,6 +186,21 @@ msgstr "הוספת חברים"
msgid "Your groupchats"
msgstr "שיחות הקבוצה שלך"
msgid "Audio/video conference"
msgstr "ועידת אודיו/וידאו"
msgid "Launch a group call"
msgstr "שגר שיחה קבוצתית"
msgid "Audio conference"
msgstr "ועידה קולית"
msgid "Video conference"
msgstr "ועידה חזותית"
msgid "Conference call"
msgstr "שיחת ועידה"
msgid "Manage your favorite groupchats"
msgstr "ניהול שיחות הקבוצה המועדפות עליך"
@ -1571,7 +1586,7 @@ msgstr "משתמשים"
msgid ""
"This is a restricted area: only the authorized users can manage this Jappix "
"node."
msgstr "זהו אזור מוגבל: רק משתמשים מורשים יכולים לנהל את ממסר Jappix זה."
msgstr "זהו אזור מוגבל: רק משתמשים מורשים יכולים לנהל את צומת Jappix זה."
msgid "Please use the form below to login to the administration panel."
msgstr "אנא השתמש בתבנית שלמטה כדי להתחבר את לוח הניהול."
@ -1602,16 +1617,16 @@ msgstr ""
"אותן למטה."
msgid "Change your Jappix node configuration with this tool."
msgstr "שינוי תצורת ממסר Jappix בעזרת כלי זה."
msgstr "שינוי תצורת צומת Jappix בעזרת כלי זה."
msgid "Change the XMPP hosts that this Jappix node serves with this tool."
msgstr "שנה מארחי XMPP שממסר Jappix זה משרת, בעזרת כלי זה."
msgstr "שנה מארחי XMPP אשר צומת Jappix זה משרת, בעזרת כלי זה."
msgid ""
"All this Jappix node stored files can be managed with this tool: please "
"select a sub-folder and start editing its content!"
msgstr ""
"כל הקבצים אשר מאוחסנים בממסר Jappix זה יכולים להתנהל בעזרת כלי זה: אנא בחר "
"כל הקבצים אשר מאוחסנים בצומת Jappix זה יכולים להתנהל בעזרת כלי זה: אנא בחר "
"תיקיית משנה ולאחר מכן תעמוד לרשותך האפשרות להתחיל לערוך את התוכן שלה!"
msgid "Jappix is fully customisable: you can change its design right here."
@ -1663,14 +1678,14 @@ msgid ""
"You can define more than one administrator for this Jappix node. You can "
"also change a password with this tool."
msgstr ""
"ניתן לתחום יותר ממנהלן אחד עבור ממסר Jappix זה. ניתן גם לשנות את הסיסמה "
"בעזרת כלי זה."
"באפשרותך לתחום יותר מאשר מנהלן אחד עבור צומת Jappix זה. באפשרותך גם לשנות את "
"הסיסמה בעזרת כלי זה."
msgid ""
"Update your Jappix node with this tool, or check if a new one is available. "
"Informations about the latest version are also displayed (in english)."
msgstr ""
"עדכון ממסר Jappix בעזרת כלי זה, לחלופין ניתן לבדוק אם ממסר חדש זמין כעת. "
"עדכון צומת Jappix בעזרת כלי זה, לחלופין ניתן לבדוק אם ממסר חדש זמין כעת. "
"מידע אודות הגרסה האחרונה גם כן מוצג (באנגלית)."
msgid "Access statistics"
@ -1770,7 +1785,7 @@ msgid ""
"Change your Jappix node background with this tool. You can either set a "
"custom color or an uploaded image. Let your creativity flow!"
msgstr ""
"שינוי רקע ממסר Jappix בעזרת כלי זה. ניתן להגדיר צבע מותאם או להעלות תמונה. "
"שינוי רקע צומת Jappix בעזרת כלי זה. ניתן להגדיר צבע מותאם או להעלות תמונה. "
"התירו ליצירתיות לזרום!"
msgid "Use default background"
@ -1934,7 +1949,7 @@ msgstr "תיקיית האחסון שרצית לטהר, הינה ריקה כעת!
msgid ""
"Keep your Jappix node fresh and fast, clean the storage folders regularly!"
msgstr "שמור על ממסר Jappix רענן ומהיר, על ידי טיהור תיקיות האחסון בקביעות!"
msgstr "שמור על צומת Jappix רענן ומהיר, על ידי טיהור תיקיות האחסון בקביעות!"
msgid ""
"Upload your music (Ogg Vorbis, MP3 or WAV) to be able to listen to it in "
@ -2296,12 +2311,24 @@ msgstr "משבצת AdSense"
msgid "Stop"
msgstr "עצור"
msgid "Leave"
msgstr ""
msgid "Mute"
msgstr "השתק"
msgid "Unmute"
msgstr "בטל השתקה"
msgid "Nobody there. Invite some people!"
msgstr "אף אחד לא נמצא שם. הזמן כמה אנשים!"
msgid "Invite people..."
msgstr "הזמנת אנשים..."
msgid "Enter people names..."
msgstr "הזנת שמות אנשים..."
msgid "Is calling you"
msgstr "מחייג/ת אליך"
@ -2309,7 +2336,7 @@ msgid "Initiating call"
msgstr "מתחיל כעת קריאה"
msgid "Connecting to call..."
msgstr "כעת מתחבר אל קריאה..."
msgstr "כעת מתחבר אל שיחה..."
msgid "Waiting..."
msgstr "כעת ממתין..."
@ -2341,6 +2368,24 @@ msgstr "כבר בעיצומה של שיחה"
msgid "Ending call..."
msgstr "כעת מסיים שיחה..."
msgid "Incoming group call"
msgstr "שיחת קבוצה נכנסת"
msgid "Preparing group call..."
msgstr "כעת מכין שיחת קבוצה..."
msgid "Connecting to group call..."
msgstr "כעת מתחבר אל שיחת קבוצה..."
msgid "Group call error"
msgstr "שגיאת שיחת קבוצה"
msgid "Ending group call..."
msgstr "כעת מסיים שיחת קבוצה..."
msgid "Group call ended"
msgstr "שיחת קבוצה הסתיימה"
msgid "Accept"
msgstr "קבל"
@ -2354,7 +2399,55 @@ msgid "Retry"
msgstr "נסה שוב"
msgid "Audio Call"
msgstr "שיחה קולית (אודיו)"
msgstr "שיחה קולית"
msgid "Video Call"
msgstr "שיחה חזותית (וידאו)"
msgstr "שיחה חזותית"
msgid "%s participant"
msgstr "משתתף %s"
msgid "%s participants"
msgstr "%s משתתפים"
msgid "(full)"
msgstr "(מלא)"
msgid "%s is able to receive group calls."
msgstr "%s מסוגל/ת לקבל שיחות קבוצתיות."
msgid "%s may not support group calls."
msgstr "%s עשוי שלא לתמוך בשיחות קבוצתיות."
msgid "Send a message..."
msgstr "שליחת הודעה..."
msgid "Edited"
msgstr ""
msgid "Edited (%s)"
msgstr ""
msgid "Editing"
msgstr ""
msgid "Being edited"
msgstr ""
msgid "Delivered"
msgstr ""
msgid "Read"
msgstr ""
msgid "Sending..."
msgstr "כעת שולח..."
msgid "%s requested your attention to the conversation"
msgstr "%s ביקש/ה את תשומת לבך אל הדיון"
msgid "You requested %s's attention to the conversation"
msgstr "ביקשת את הסבת צומת הלב של %s אל הדיון"
msgid "Attention to conversation requested."
msgstr "הסבת צומת לב אל הדיון התבקשה."

Binary file not shown.

View file

@ -4,13 +4,13 @@
# License: AGPL
# Authors: Valérian Saliou, JanCBorchardt
# Translators:
# DonIncognito <joe.brendel.ronck@gmail.com>, 2013
# Joé BRENDEL <joe.brendel.ronck@gmail.com>, 2013
# Kahr Patrick <patrick@nerds.lu>, 2013-2014
# Tullius, 2013
# Thull Michel, 2013
msgid ""
msgstr ""
"Project-Id-Version: Jappix\n"
"PO-Revision-Date: 2014-05-08 10:21+0100\n"
"PO-Revision-Date: 2014-08-09 15:36+0100\n"
"Last-Translator: Valérian Saliou <valerian@valeriansaliou.name>\n"
"Language-Team: Luxembourgish (http://www.transifex.com/projects/p/jappix/"
"language/lb/)\n"
@ -190,6 +190,21 @@ msgstr "E Kolleg adden"
msgid "Your groupchats"
msgstr "Deng Gruppenchats"
msgid "Audio/video conference"
msgstr ""
msgid "Launch a group call"
msgstr ""
msgid "Audio conference"
msgstr ""
msgid "Video conference"
msgstr ""
msgid "Conference call"
msgstr ""
msgid "Manage your favorite groupchats"
msgstr "Organiséier deng Gruppenchats"
@ -852,7 +867,7 @@ msgid "Hi there!"
msgstr "Moien!"
msgid "Welcome to %1s, “%2s”."
msgstr ""
msgstr "Wëllkomm op %1s, \"%2s\"."
msgid "Login to your existing XMPP account or create a new one for free!"
msgstr ""
@ -1215,7 +1230,7 @@ msgid "Friends"
msgstr "Kollegen"
msgid "Welcome to Jappix, your own social cloud!"
msgstr ""
msgstr "Wëllkomm op Jappix, denger eegener sozialer Cloud+"
msgid ""
"Before you start using it, you will have to change some settings, search for "
@ -1250,10 +1265,10 @@ msgid ""
"When you will press the save button, the profile editor will be opened. "
"Happy socializing!"
msgstr ""
"Wann dier op Späicheren dréckt geet den Profileditor op. Happy socializing!"
"Wanns du op Späicheren drécks geet den Profileditor op. Happy socializing!"
msgid "Share Jappix on %s"
msgstr "Deelt Jappix op %s"
msgstr "Deel Jappix op %s"
msgid "Follow Jappix topic on %s"
msgstr "Jappix op %s followen"
@ -1280,7 +1295,7 @@ msgid "Jappix installation"
msgstr "Jappix-Installatioun"
msgid "Welcome to the Jappix installation!"
msgstr "Moien fir d'Installatioun vun Jappix!"
msgstr "Wëlkomm bei der Installatioun vun Jappix!"
msgid ""
"This tool will help you installing Jappix, the first full-featured XMPP-"
@ -1296,7 +1311,7 @@ msgid "Welcome"
msgstr "Moien"
msgid "Storage configuration"
msgstr "Späicher Konfiguratioun"
msgstr "Späicher-Konfiguratioun"
msgid "Administrator account"
msgstr "Administrator-Kont"
@ -1326,7 +1341,7 @@ msgstr ""
msgid "It's time to build your own social cloud: just go to the next step!"
msgstr ""
"Et as Zäit fier Äer eegen Social Cloud opzebauen: weider bei dee nächste "
"Et as Zäit fier deng eegen Social Cloud opzebauen: weider bei dee nächste "
"Schrëtt!"
msgid ""
@ -1346,22 +1361,22 @@ msgstr ""
"Besëtzer vum Uerdner op %3s setzen (Hängt vun denger Konfiguratioun of)."
msgid "The folder is writable, you can continue!"
msgstr "An desen Uerdner kënnt Der schreiwen, Dier kënnt weidermaachen!"
msgstr "Du hues d'Schreiwrechter fier dësen Uerdner, du kanns weidermaachen!"
msgid ""
"Jappix offers you the possibility to manage your configuration, install new "
"plugins or search for updates. That's why you must create an administrator "
"account to access the manager."
msgstr ""
"Jappix gëtt Iech d'Méiglechkeet fier äer Astellungen ze geréieren, nei "
"Plugins ze installéieren oder no Updates ze sichen. Dofier musst dier en "
"Jappix gëtt Dier d'Méiglechkeet fier deng Astellungen ze geréieren, nei "
"Plugins ze installéieren oder no Updates ze sichen. Dofier musst de en "
"Administrator-Kont opmaachen fier un de Manager ze kommen."
msgid ""
"When Jappix will be installed, just click on the manager link on the home "
"page to access it."
msgstr ""
"Wann Jappix installéiert gëtt, klickt op de Manager-Link op der Haaptsäit "
"Wann Jappix bis installéiert as, klick op de Manager-Link op der Haaptsäit "
"fier eranzekommen."
msgid "Oops, you missed something or the two passwords do not match!"
@ -1527,7 +1542,7 @@ msgid "Finish"
msgstr "Fäerdeg"
msgid "Check again"
msgstr "Nach eng Kéier préifen"
msgstr "Nach eng Kéier iwwerpréifen"
msgid ""
"The folder is not writable, set the right permissions to the %s directory."
@ -2376,12 +2391,24 @@ msgstr "AdSense slot"
msgid "Stop"
msgstr "Stop"
msgid "Leave"
msgstr ""
msgid "Mute"
msgstr "Mute"
msgid "Unmute"
msgstr "Unmute"
msgid "Nobody there. Invite some people!"
msgstr ""
msgid "Invite people..."
msgstr ""
msgid "Enter people names..."
msgstr ""
msgid "Is calling you"
msgstr "Rifft dech un"
@ -2421,6 +2448,24 @@ msgstr "As besat"
msgid "Ending call..."
msgstr "Uruff beendegen..."
msgid "Incoming group call"
msgstr ""
msgid "Preparing group call..."
msgstr ""
msgid "Connecting to group call..."
msgstr ""
msgid "Group call error"
msgstr ""
msgid "Ending group call..."
msgstr ""
msgid "Group call ended"
msgstr ""
msgid "Accept"
msgstr "Unhuelen"
@ -2438,3 +2483,51 @@ msgstr "Uruff"
msgid "Video Call"
msgstr "Video Konferenz"
msgid "%s participant"
msgstr ""
msgid "%s participants"
msgstr ""
msgid "(full)"
msgstr ""
msgid "%s is able to receive group calls."
msgstr ""
msgid "%s may not support group calls."
msgstr ""
msgid "Send a message..."
msgstr ""
msgid "Edited"
msgstr "Editéiert"
msgid "Edited (%s)"
msgstr "editéiert (%s)"
msgid "Editing"
msgstr "editéiert"
msgid "Being edited"
msgstr "gëtt editéiert"
msgid "Delivered"
msgstr "verschéckt"
msgid "Read"
msgstr "liesen"
msgid "Sending..."
msgstr "fortschécken..."
msgid "%s requested your attention to the conversation"
msgstr ""
msgid "You requested %s's attention to the conversation"
msgstr ""
msgid "Attention to conversation requested."
msgstr ""

Binary file not shown.

File diff suppressed because it is too large Load diff

View file

@ -215,8 +215,8 @@ if(!anonymousMode() && !httpAuthEnabled()) { ?>
<a class="desc" href="http://www.post-pro.fr/"><?php _e("Association"); ?></a>
</span>
<span class="one">
<a class="name" href="https://frenchtouch.pro/">FrenchTouch</a>
<a class="desc" href="https://frenchtouch.pro/"><?php _e("Web agency"); ?></a>
<a class="name" href="https://hakuma.holdings/">Hakuma Holdings</a>
<a class="desc" href="https://hakuma.holdings/"><?php _e("Company"); ?></a>
</span>
<?php if(hasLegal()) { ?>

View file

@ -2,7 +2,7 @@
"name": "jappix",
"description": "Jappix test tools",
"version": "1.0.0",
"homepage": "http://jappix.org/",
"homepage": "https://jappix.org/",
"repository": {
"type": "git",