diff options
66 files changed, 1695 insertions, 526 deletions
@@ -78,7 +78,7 @@ <classpathentry kind="lib" path="lib/os-specific/mac/growl4j.jar"/> <classpathentry kind="lib" path="lib/os-specific/mac/OrangeExtensions.jar"/> <classpathentry kind="lib" path="lib/installer-exclude/jmork-1.0.5-SNAPSHOT.jar" sourcepath="/jmork"/> - <classpathentry kind="lib" path="lib/installer-exclude/bcprov-jdk15on-150.jar"/> + <classpathentry kind="lib" path="lib/installer-exclude/bcprov-jdk15on-151.jar"/> <classpathentry kind="lib" path="lib/installer-exclude/commons-lang3-3.1.jar"/> <classpathentry kind="lib" path="lib/installer-exclude/bccontrib-1.0-SNAPSHOT.jar"/> <classpathentry kind="lib" path="lib/installer-exclude/zrtp4j-light.jar"/> @@ -12,3 +12,4 @@ release lib/accounts.properties .DS_Store web-start/WebStartBuild.properties +nbproject/private @@ -1315,7 +1315,7 @@ <zipfileset dir="${dest}/net/java/sip/communicator/impl/libjitsi" prefix="net/java/sip/communicator/impl/libjitsi"/> - <zipfileset src="${lib.noinst}/bcpkix-jdk15on-150.jar" prefix="" + <zipfileset src="${lib.noinst}/bcpkix-jdk15on-151.jar" prefix="" excludes="META-INF/BCKEY.*"/> <zipfileset src="${lib.noinst}/fmj.jar" prefix=""/> <zipfileset src="${lib.noinst}/libjitsi.jar" prefix=""/> @@ -2513,7 +2513,7 @@ org.bouncycastle.util"/> <!--BUNDLE-BOUNCYCASTLE --> <target name="bundle-bouncycastle"> - <copy file="${lib.noinst}/bcprov-jdk15on-150.jar" tofile="${bundles.dest}/bouncycastle.jar"/> + <copy file="${lib.noinst}/bcprov-jdk15on-151.jar" tofile="${bundles.dest}/bouncycastle.jar"/> <copy file="${lib.noinst}/bccontrib-1.0-SNAPSHOT.jar" tofile="${bundles.dest}/bccontrib.jar"/> </target> diff --git a/lib/installer-exclude/bcpkix-jdk15on-150.jar b/lib/installer-exclude/bcpkix-jdk15on-151.jar Binary files differindex 5dc125f..57e0080 100644..100755 --- a/lib/installer-exclude/bcpkix-jdk15on-150.jar +++ b/lib/installer-exclude/bcpkix-jdk15on-151.jar diff --git a/lib/installer-exclude/bcprov-jdk15on-150.jar b/lib/installer-exclude/bcprov-jdk15on-151.jar Binary files differindex d4b510d..4076e11 100644..100755 --- a/lib/installer-exclude/bcprov-jdk15on-150.jar +++ b/lib/installer-exclude/bcprov-jdk15on-151.jar diff --git a/lib/installer-exclude/fmj.jar b/lib/installer-exclude/fmj.jar Binary files differindex dc18668..699a893 100644 --- a/lib/installer-exclude/fmj.jar +++ b/lib/installer-exclude/fmj.jar diff --git a/lib/installer-exclude/hsqldb.jar.manifest.mf b/lib/installer-exclude/hsqldb.jar.manifest.mf new file mode 100644 index 0000000..597b652 --- /dev/null +++ b/lib/installer-exclude/hsqldb.jar.manifest.mf @@ -0,0 +1,102 @@ +Manifest-Version: 1.0 +Export-Package: org.hsqldb;uses:="org.hsqldb.server,org.hsqldb.jdbc,or + g.hsqldb.types,org.hsqldb.rowio,org.hsqldb.result,org.hsqldb.persist, + org.hsqldb.error,org.hsqldb.navigator,org.hsqldb.map,org.hsqldb.lib,o + rg.hsqldb.rights,org.hsqldb.index,org.hsqldb.dbinfo,org.hsqldb.lib.ja + va,org.hsqldb.scriptio",org.hsqldb.auth;uses:="org.hsqldb.jdbc,org.hs + qldb.types,org.hsqldb.lib,javax.security.auth.callback,javax.security + .auth.login,javax.security.auth,javax.naming.directory,javax.naming,j + avax.naming.ldap,javax.net.ssl",org.hsqldb.dbinfo;uses:="org.hsqldb.r + ights,org.hsqldb.resources,org.hsqldb,org.hsqldb.map,org.hsqldb.persi + st,org.hsqldb.lib,org.hsqldb.types,org.hsqldb.result,org.hsqldb.index + ",org.hsqldb.error;uses:="org.hsqldb.resources,org.hsqldb,org.hsqldb. + result,org.hsqldb.lib",org.hsqldb.index;uses:="org.hsqldb.persist,org + .hsqldb.types,org.hsqldb,org.hsqldb.navigator,org.hsqldb.rights,org.h + sqldb.error,org.hsqldb.lib,org.hsqldb.rowio",org.hsqldb.jdbc;uses:="o + rg.hsqldb.types,org.hsqldb,org.hsqldb.navigator,org.hsqldb.result,org + .hsqldb.lib.java,org.hsqldb.lib,org.hsqldb.error,javax.sql,org.hsqldb + .persist,javax.naming,javax.naming.spi,org.hsqldb.jdbc.pool,javax.xml + .parsers,org.w3c.dom,org.xml.sax,javax.xml.stream,javax.xml.transform + .stax,javax.xml.transform.dom,org.w3c.dom.bootstrap,javax.xml.transfo + rm,javax.xml.bind.util,javax.xml.transform.stream,javax.xml.transform + .sax",org.hsqldb.jdbc.pool;uses:="javax.sql,org.hsqldb.jdbc,org.hsqld + b.lib,javax.naming,javax.transaction.xa,org.hsqldb,org.hsqldb.error", + org.hsqldb.lib;uses:="org.hsqldb.lib.java,org.hsqldb.map,org.hsqldb", + org.hsqldb.lib.java,org.hsqldb.lib.tar;uses:="org.hsqldb.lib",org.hsq + ldb.lib.tar.rb,org.hsqldb.map;uses:="org.hsqldb.lib,org.hsqldb.types" + ,org.hsqldb.navigator;uses:="org.hsqldb,org.hsqldb.error,org.hsqldb.r + owio,org.hsqldb.result,org.hsqldb.types,org.hsqldb.lib,org.hsqldb.ind + ex,org.hsqldb.persist",org.hsqldb.persist;uses:="org.hsqldb,org.hsqld + b.error,org.hsqldb.map,org.hsqldb.rowio,org.hsqldb.lib,javax.crypto.s + pec,javax.crypto,org.hsqldb.scriptio,org.hsqldb.types,org.hsqldb.resu + lt,org.hsqldb.navigator,org.hsqldb.index,org.hsqldb.lib.tar,org.hsqld + b.dbinfo,org.hsqldb.lib.java",org.hsqldb.resources;uses:="org.hsqldb. + lib",org.hsqldb.result;uses:="org.hsqldb.persist,org.hsqldb.types,org + .hsqldb.error,org.hsqldb,org.hsqldb.navigator,org.hsqldb.map,org.hsql + db.rowio,org.hsqldb.lib",org.hsqldb.rights;uses:="org.hsqldb.types,or + g.hsqldb.error,org.hsqldb,org.hsqldb.lib,org.hsqldb.result",org.hsqld + b.rowio;uses:="org.hsqldb.types,org.hsqldb.error,org.hsqldb,org.hsqld + b.lib,org.hsqldb.map,org.hsqldb.persist",org.hsqldb.sample,org.hsqldb + .scriptio;uses:="org.hsqldb.persist,org.hsqldb,org.hsqldb.error,org.h + sqldb.rowio,org.hsqldb.lib,org.hsqldb.types,org.hsqldb.map,org.hsqldb + .result,org.hsqldb.navigator",org.hsqldb.server;uses:="org.hsqldb.per + sist,org.hsqldb.jdbc,org.hsqldb.error,org.hsqldb,javax.net,javax.secu + rity.cert,javax.net.ssl,org.hsqldb.lib,org.hsqldb.types,org.hsqldb.re + sult,org.hsqldb.resources,org.hsqldb.lib.java,org.hsqldb.map,org.hsql + db.rowio,org.hsqldb.navigator,javax.servlet,javax.servlet.http",org.h + sqldb.types;uses:="org.hsqldb.jdbc,org.hsqldb.error,org.hsqldb,org.hs + qldb.lib,org.hsqldb.map,org.hsqldb.result,org.hsqldb.lib.java,org.hsq + ldb.persist,org.hsqldb.rights",org.hsqldb.util;uses:="javax.swing,jav + ax.swing.border,org.hsqldb.lib.java,org.hsqldb.lib,javax.swing.tree,j + avax.swing.table,javax.swing.event" +Implementation-Title: Standard runtime +Implementation-Version: 2.3.1 +Build-Vendor: blaine +Specification-Vendor: The HSQL Development Group +Tool: Bnd-0.0.384 +Bundle-Name: HSQLDB +Created-By: 1.6.0_30 (Sun Microsystems Inc.) +Ant-Version: Apache Ant 1.8.4 +Implementation-Vendor: The HSQL Development Group +Bundle-Version: 2.3.1 +Bnd-LastModified: 1381200774974 +Specification-Title: HSQLDB +Bundle-ManifestVersion: 2 +Bundle-Description: HyperSQL Lightweight 100% Java SQL Database Engine +Specification-Version: 2.3.1 +Import-Package: javax.crypto;resolution:=optional,javax.crypto.spec;re + solution:=optional,javax.naming;resolution:=optional,javax.naming.dir + ectory;resolution:=optional,javax.naming.ldap;resolution:=optional,ja + vax.naming.spi;resolution:=optional,javax.net;resolution:=optional,ja + vax.net.ssl;resolution:=optional,javax.security.auth;resolution:=opti + onal,javax.security.auth.callback;resolution:=optional,javax.security + .auth.login;resolution:=optional,javax.security.cert;resolution:=opti + onal,javax.servlet;resolution:=optional,javax.servlet.http;resolution + :=optional,javax.sql;resolution:=optional,javax.swing;resolution:=opt + ional,javax.swing.border;resolution:=optional,javax.swing.event;resol + ution:=optional,javax.swing.table;resolution:=optional,javax.swing.tr + ee;resolution:=optional,javax.transaction.xa;resolution:=optional,jav + ax.xml.bind.util;resolution:=optional,javax.xml.parsers;resolution:=o + ptional,javax.xml.stream;resolution:=optional,javax.xml.transform;res + olution:=optional,javax.xml.transform.dom;resolution:=optional,javax. + xml.transform.sax;resolution:=optional,javax.xml.transform.stax;resol + ution:=optional,javax.xml.transform.stream;resolution:=optional,org.h + sqldb;resolution:=optional,org.hsqldb.auth;resolution:=optional,org.h + sqldb.dbinfo;resolution:=optional,org.hsqldb.error;resolution:=option + al,org.hsqldb.index;resolution:=optional,org.hsqldb.jdbc;resolution:= + optional,org.hsqldb.jdbc.pool;resolution:=optional,org.hsqldb.lib;res + olution:=optional,org.hsqldb.lib.java;resolution:=optional,org.hsqldb + .lib.tar;resolution:=optional,org.hsqldb.lib.tar.rb;resolution:=optio + nal,org.hsqldb.map;resolution:=optional,org.hsqldb.navigator;resoluti + on:=optional,org.hsqldb.persist;resolution:=optional,org.hsqldb.resou + rces;resolution:=optional,org.hsqldb.result;resolution:=optional,org. + hsqldb.rights;resolution:=optional,org.hsqldb.rowio;resolution:=optio + nal,org.hsqldb.sample;resolution:=optional,org.hsqldb.scriptio;resolu + tion:=optional,org.hsqldb.server;resolution:=optional,org.hsqldb.type + s;resolution:=optional,org.hsqldb.util;resolution:=optional,org.w3c.d + om;resolution:=optional,org.w3c.dom.bootstrap;resolution:=optional,or + g.xml.sax;resolution:=optional +Bundle-SymbolicName: org.hsqldb.hsqldb +Main-Class: org.hsqldb.util.DatabaseManagerSwing +Originally-Created-By: 1.6.0_30-b12 (Sun Microsystems Inc.) + diff --git a/lib/installer-exclude/ice4j.jar b/lib/installer-exclude/ice4j.jar Binary files differindex ba6f443..29f5cc6 100644 --- a/lib/installer-exclude/ice4j.jar +++ b/lib/installer-exclude/ice4j.jar diff --git a/lib/installer-exclude/libjitsi.jar b/lib/installer-exclude/libjitsi.jar Binary files differindex d5dc16a..3a63713 100644 --- a/lib/installer-exclude/libjitsi.jar +++ b/lib/installer-exclude/libjitsi.jar diff --git a/lib/installer-exclude/sdes4j.jar b/lib/installer-exclude/sdes4j.jar Binary files differindex 0aa0ff7..6b90e63 100644 --- a/lib/installer-exclude/sdes4j.jar +++ b/lib/installer-exclude/sdes4j.jar diff --git a/nbproject/project.properties b/nbproject/project.properties new file mode 100644 index 0000000..338575b --- /dev/null +++ b/nbproject/project.properties @@ -0,0 +1,29 @@ +auxiliary.org-netbeans-modules-editor-indent.CodeStyle.project.expand-tabs=true +auxiliary.org-netbeans-modules-editor-indent.CodeStyle.project.indent-shift-width=4 +auxiliary.org-netbeans-modules-editor-indent.CodeStyle.project.spaces-per-tab=4 +auxiliary.org-netbeans-modules-editor-indent.CodeStyle.project.tab-size=8 +auxiliary.org-netbeans-modules-editor-indent.CodeStyle.project.text-limit-width=80 +auxiliary.org-netbeans-modules-editor-indent.CodeStyle.project.text-line-wrap=none +auxiliary.org-netbeans-modules-editor-indent.CodeStyle.usedProfile=project +auxiliary.org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.alignMultilineImplements=true +auxiliary.org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.alignMultilineThrows=true +auxiliary.org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.classDeclBracePlacement=NEW_LINE +auxiliary.org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.expand-tabs=true +auxiliary.org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.importGroupsOrder=* +auxiliary.org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.indent-shift-width=4 +auxiliary.org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.methodDeclBracePlacement=NEW_LINE +auxiliary.org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.otherBracePlacement=NEW_LINE +auxiliary.org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.placeCatchOnNewLine=true +auxiliary.org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.placeElseOnNewLine=true +auxiliary.org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.placeFinallyOnNewLine=true +auxiliary.org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.placeWhileOnNewLine=true +auxiliary.org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.spaces-per-tab=4 +auxiliary.org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.tab-size=8 +auxiliary.org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.text-limit-width=80 +auxiliary.org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.text-line-wrap=words +auxiliary.org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.usePackageImport=true +auxiliary.org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.useSingleClassImport=false +auxiliary.org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapExtendsImplementsKeyword=WRAP_ALWAYS +auxiliary.org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapExtendsImplementsList=WRAP_ALWAYS +auxiliary.org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapThrowsKeyword=WRAP_ALWAYS +auxiliary.org-netbeans-modules-editor-indent.text.x-java.CodeStyle.project.wrapThrowsList=WRAP_ALWAYS diff --git a/nbproject/project.xml b/nbproject/project.xml index 6fc27b3..851da9c 100644 --- a/nbproject/project.xml +++ b/nbproject/project.xml @@ -116,7 +116,7 @@ <java-data xmlns="http://www.netbeans.org/ns/freeform-project-java/2"> <compilation-unit> <package-root>src</package-root> - <classpath mode="compile">lib/felix.jar:lib/bundle/commons-logging.jar:lib/bundle/junit.jar:lib/bundle/log4j.jar:lib/installer-exclude/apache-ant-1.7.0.jar:lib/installer-exclude/dhcp4java-1.00.jar:lib/installer-exclude/dict4j.jar:lib/installer-exclude/dnsjava.jar:lib/installer-exclude/fmj.jar:lib/installer-exclude/forms-1.2.1.jar:lib/installer-exclude/gdata-client-1.0.jar:lib/installer-exclude/gdata-client-meta-1.0.jar:lib/installer-exclude/gdata-contacts-3.0.jar:lib/installer-exclude/gdata-contacts-meta-3.0.jar:lib/installer-exclude/gdata-core-1.0.jar:lib/installer-exclude/google-collect-1.0-rc1.jar:lib/installer-exclude/hexdump-0.2.jar:lib/installer-exclude/httpclient-osgi-4.2.3.jar:lib/installer-exclude/httpcore-osgi-4.2.3.jar:lib/installer-exclude/ice4j.jar:lib/installer-exclude/jain-sdp.jar:lib/installer-exclude/jain-sip-api.jar:lib/installer-exclude/jain-sip-ri.jar:lib/installer-exclude/jdic_misc.jar:lib/installer-exclude/jfontchooser-1.0.5.jar:lib/installer-exclude/jmdns.jar:lib/installer-exclude/jml-1.0b5.jar:lib/installer-exclude/jmyspell-core.jar:lib/installer-exclude/jna.jar:lib/installer-exclude/jnsapi.jar:lib/installer-exclude/joscar-client.jar:lib/installer-exclude/joscar-common.jar:lib/installer-exclude/joscar-protocol.jar:lib/installer-exclude/jsch-0.1.36.jar:lib/installer-exclude/jsocks-klea.jar:lib/installer-exclude/json-simple-1.1.1.jar:lib/installer-exclude/jspeex.jar:lib/installer-exclude/junit.jar:lib/installer-exclude/laf-widget.jar:lib/installer-exclude/lcrypto-jdk16-143.jar:lib/installer-exclude/libdbus-java-2.7.jar:lib/installer-exclude/libjitsi.jar:lib/installer-exclude/log4j-1.2.8.jar:lib/installer-exclude/lti-civil-no_s_w_t.jar:lib/installer-exclude/mac_widgets-0.9.5.jar:lib/installer-exclude/nist-sdp-1.0.jar:lib/installer-exclude/otr4j.jar:lib/installer-exclude/pircbot.jar:lib/installer-exclude/profiler4j-1.0-beta3-SC.jar:lib/installer-exclude/sdes4j.jar:lib/installer-exclude/smack.jar:lib/installer-exclude/smackx.jar:lib/installer-exclude/swing-worker-1.2.jar:lib/installer-exclude/jna-platform.jar:lib/installer-exclude/unix-0.5.jar:lib/installer-exclude/weupnp-0.1.2-SNAPSHOT.jar:lib/installer-exclude/ymsg_network_v0_67.jar:lib/installer-exclude/zrtp4j-light.jar:lib/installer-exclude/jcalendar-1.4.jar:lib/installer-exclude/bcpkix-jdk15on-150.jar:lib/installer-exclude/bcprov-jdk15on-150.jar:lib/installer-exclude/guava-15.0.jar:lib/installer-exclude/libphonenumber-5.9.jar:lib/installer-exclude/commons-lang3-3.1.jar:lib/installer-exclude/jmork-1.0.5-SNAPSHOT.jar:lib/os-specific/mac/growl4j.jar:lib/os-specific/mac/OrangeExtensions.jar:lib/os-specific/mac/installer-exclude/dock.jar</classpath> + <classpath mode="compile">lib/felix.jar:lib/bundle/commons-logging.jar:lib/bundle/junit.jar:lib/bundle/log4j.jar:lib/installer-exclude/apache-ant-1.7.0.jar:lib/installer-exclude/dhcp4java-1.00.jar:lib/installer-exclude/dict4j.jar:lib/installer-exclude/dnsjava.jar:lib/installer-exclude/fmj.jar:lib/installer-exclude/forms-1.2.1.jar:lib/installer-exclude/gdata-client-1.0.jar:lib/installer-exclude/gdata-client-meta-1.0.jar:lib/installer-exclude/gdata-contacts-3.0.jar:lib/installer-exclude/gdata-contacts-meta-3.0.jar:lib/installer-exclude/gdata-core-1.0.jar:lib/installer-exclude/google-collect-1.0-rc1.jar:lib/installer-exclude/hexdump-0.2.jar:lib/installer-exclude/httpclient-osgi-4.2.3.jar:lib/installer-exclude/httpcore-osgi-4.2.3.jar:lib/installer-exclude/ice4j.jar:lib/installer-exclude/jain-sdp.jar:lib/installer-exclude/jain-sip-api.jar:lib/installer-exclude/jain-sip-ri.jar:lib/installer-exclude/jdic_misc.jar:lib/installer-exclude/jfontchooser-1.0.5.jar:lib/installer-exclude/jmdns.jar:lib/installer-exclude/jml-1.0b5.jar:lib/installer-exclude/jmyspell-core.jar:lib/installer-exclude/jna.jar:lib/installer-exclude/jnsapi.jar:lib/installer-exclude/joscar-client.jar:lib/installer-exclude/joscar-common.jar:lib/installer-exclude/joscar-protocol.jar:lib/installer-exclude/jsch-0.1.36.jar:lib/installer-exclude/jsocks-klea.jar:lib/installer-exclude/json-simple-1.1.1.jar:lib/installer-exclude/jspeex.jar:lib/installer-exclude/junit.jar:lib/installer-exclude/laf-widget.jar:lib/installer-exclude/lcrypto-jdk16-143.jar:lib/installer-exclude/libdbus-java-2.7.jar:lib/installer-exclude/libjitsi.jar:lib/installer-exclude/log4j-1.2.8.jar:lib/installer-exclude/lti-civil-no_s_w_t.jar:lib/installer-exclude/mac_widgets-0.9.5.jar:lib/installer-exclude/nist-sdp-1.0.jar:lib/installer-exclude/otr4j.jar:lib/installer-exclude/pircbot.jar:lib/installer-exclude/profiler4j-1.0-beta3-SC.jar:lib/installer-exclude/sdes4j.jar:lib/installer-exclude/smack.jar:lib/installer-exclude/smackx.jar:lib/installer-exclude/swing-worker-1.2.jar:lib/installer-exclude/jna-platform.jar:lib/installer-exclude/unix-0.5.jar:lib/installer-exclude/weupnp-0.1.2-SNAPSHOT.jar:lib/installer-exclude/ymsg_network_v0_67.jar:lib/installer-exclude/zrtp4j-light.jar:lib/installer-exclude/jcalendar-1.4.jar:lib/installer-exclude/bcpkix-jdk15on-151.jar:lib/installer-exclude/bcprov-jdk15on-151.jar:lib/installer-exclude/guava-15.0.jar:lib/installer-exclude/libphonenumber-5.9.jar:lib/installer-exclude/commons-lang3-3.1.jar:lib/installer-exclude/jmork-1.0.5-SNAPSHOT.jar:lib/os-specific/mac/growl4j.jar:lib/os-specific/mac/OrangeExtensions.jar:lib/os-specific/mac/installer-exclude/dock.jar</classpath> <built-to>classes</built-to> <source-level>1.5</source-level> </compilation-unit> diff --git a/resources/images/protocol/facebook/status16x16-meeting.png b/resources/images/protocol/facebook/status16x16-meeting.png Binary files differnew file mode 100644 index 0000000..6d939ee --- /dev/null +++ b/resources/images/protocol/facebook/status16x16-meeting.png diff --git a/resources/images/protocol/ippi/sip16x16-meeting.png b/resources/images/protocol/ippi/sip16x16-meeting.png Binary files differnew file mode 100644 index 0000000..a48b7db --- /dev/null +++ b/resources/images/protocol/ippi/sip16x16-meeting.png diff --git a/resources/images/protocol/iptel/sip16x16-meeting.png b/resources/images/protocol/iptel/sip16x16-meeting.png Binary files differnew file mode 100644 index 0000000..c637f5f --- /dev/null +++ b/resources/images/protocol/iptel/sip16x16-meeting.png diff --git a/resources/images/protocol/sip2sip/sip16x16-meeting.png b/resources/images/protocol/sip2sip/sip16x16-meeting.png Binary files differnew file mode 100644 index 0000000..20b191a --- /dev/null +++ b/resources/images/protocol/sip2sip/sip16x16-meeting.png diff --git a/resources/install/README.Debian b/resources/install/README.Debian new file mode 100644 index 0000000..ecd925b --- /dev/null +++ b/resources/install/README.Debian @@ -0,0 +1,7 @@ +To create debian source package you need some other projects sources that +jitsi depends on. In the same folder where jitsi is checked out do: +git clone https://github.com/jitsi/otr4j.git +git clone https://github.com/jitsi/libsrc.git +And then in jitsi do: ant deb-src -Dlabel=4444 +This will create orig.tar.gz debian sources that can be used to debuild +debian package.
\ No newline at end of file diff --git a/resources/install/build.xml b/resources/install/build.xml index 4036c35..efcd5ed 100644 --- a/resources/install/build.xml +++ b/resources/install/build.xml @@ -582,6 +582,7 @@ <filterchain> <tokenfilter> <replacestring from="@@lib" to="${wix.heat.jitsi.lib.dir}" /> + <replacestring from="@APP_NAME@" to="${application.name}" /> </tokenfilter> </filterchain> </copy> @@ -2295,8 +2296,11 @@ token="/usr/share/java/org.apache.felix.framework.jar:/usr/share/java/org.apache.felix.main.jar" value="$LIBPATH/felix.jar"/> <replace file="${debianize.dir}/sh/${package.name}" - token="$SCDIR/sc-bundles/util.jar/launchutils.jar" - value="$SCDIR/sc-bundles/util.jar"/> + token="-common" + value="/sc-bundles"/> + <replace file="${debianize.dir}/sh/${package.name}" + token="util.jar/launchutils.jar" + value="util.jar"/> <replace file="${debianize.dir}/sh/${package.name}" token="/usr/lib/jni" value="$SCDIR/lib/native"/> @@ -2550,7 +2554,7 @@ <!-- pack as original sources --> <tar destfile="${debian.dir}/${package.name}_${sip-communicator.version}.orig.tar.gz" compression="gzip" - basedir="${debian.src.dir}"/> + basedir="${debian.tmp.dir}"/> <delete dir="${debian.tmp.dir}"/> </target> @@ -2970,10 +2974,10 @@ link="${debian.src.dir}/lib/installer-exclude/bccontrib-1.0-SNAPSHOT.jar"/> <symlink resource="/usr/share/java/bcprov.jar" overwrite="true" - link="${debian.src.dir}/lib/installer-exclude/bcprov-jdk15on-150.jar"/> + link="${debian.src.dir}/lib/installer-exclude/bcprov-jdk15on-151.jar"/> <symlink resource="/usr/share/java/bcpkix.jar" overwrite="true" - link="${debian.src.dir}/lib/installer-exclude/bcpkix-jdk15on-150.jar"/> + link="${debian.src.dir}/lib/installer-exclude/bcpkix-jdk15on-151.jar"/> <!-- liblaf-widget-java --> <symlink resource="/usr/share/java/laf-widget.jar" @@ -3236,13 +3240,13 @@ </patternset> </unzip> <delete file="${debian.bundles.dest}/util.jar"/> - <mkdir dir="${debian.bundles.dest}/util.jar/META-INF"/> - <symlink resource="../../../../share/java/dnsjava.jar" - link="${debian.bundles.dest}/util.jar/dnsjava.jar"/> + <mkdir dir="${debian.bundles.common.dest}/util.jar/META-INF"/> + <symlink resource="../../../share/java/dnsjava.jar" + link="${debian.bundles.common.dest}/util.jar/dnsjava.jar"/> <!-- Create the util.jar--> <jar compress="false" - destfile="${debian.bundles.dest}/util.jar/util.jar"> + destfile="${debian.bundles.common.dest}/util.jar/util.jar"> <zipfileset dir="${dest}/net/java/sip/communicator/util" prefix="net/java/sip/communicator/util"> <exclude name="dns/**"/> @@ -3250,7 +3254,7 @@ </jar> <!-- Create the launchutils.jar--> <jar compress="false" - destfile="${debian.bundles.dest}/util.jar/launchutils.jar"> + destfile="${debian.bundles.common.dest}/util.jar/launchutils.jar"> <zipfileset dir="${dest}/net/java/sip/communicator/util/launchutils" prefix="net/java/sip/communicator/util/launchutils"/> @@ -3263,16 +3267,17 @@ </zipfileset> </jar> <move file="${debian.bundles.dest}/META-INF/MANIFEST.MF" - todir="${debian.bundles.dest}/util.jar/META-INF"/> + todir="${debian.bundles.common.dest}/util.jar/META-INF"/> <delete dir="${debian.bundles.dest}/META-INF"/> + <delete dir="${debian.bundles.dest}/util.jar"/> <!-- Removes the last empty line --> <replaceregexp - file="${debian.bundles.dest}/util.jar/META-INF/MANIFEST.MF" + file="${debian.bundles.common.dest}/util.jar/META-INF/MANIFEST.MF" match="^\r\n$" flags="m" replace=""/> <concat - destfile="${debian.bundles.dest}/util.jar/META-INF/MANIFEST.MF" + destfile="${debian.bundles.common.dest}/util.jar/META-INF/MANIFEST.MF" append="true" eol="crlf" fixlastline="true">Bundle-ClassPath: .,util.jar,dnsjava.jar

</concat> @@ -3281,6 +3286,11 @@ <echo file="${debian.bundles.dest}/../lib/felix.client.run.properties" append="true">felix.auto.start.14= reference:file:/usr/share/java/dnsjava.jar </echo> + <replace file="${debian.bundles.dest}/../lib/felix.client.run.properties" + token="reference:file:sc-bundles/util.jar"> + <replacevalue>reference:file:/usr/share/jitsi-common/util.jar</replacevalue> + </replace> + </target> <!-- target to rebuild the util bundle reusing debian package --> @@ -3415,16 +3425,16 @@ </patternset> </unzip> <delete file="${debian.bundles.dest}/smacklib.jar"/> - <mkdir dir="${debian.bundles.dest}/smacklib.jar/META-INF"/> + <mkdir dir="${debian.bundles.common.dest}/smacklib.jar/META-INF"/> - <symlink resource="../../../../share/java/xpp3-min.jar" - link="${debian.bundles.dest}/smacklib.jar/xpp3.jar"/> - <symlink resource="../../../../share/java/jzlib.jar" - link="${debian.bundles.dest}/smacklib.jar/jzlib.jar"/> + <symlink resource="../../../share/java/xpp3-min.jar" + link="${debian.bundles.common.dest}/smacklib.jar/xpp3.jar"/> + <symlink resource="../../../share/java/jzlib.jar" + link="${debian.bundles.common.dest}/smacklib.jar/jzlib.jar"/> <!-- Create the smacklib .jar--> <jar compress="false" - destfile="${debian.bundles.dest}/smacklib.jar/smacklib.jar" + destfile="${debian.bundles.common.dest}/smacklib.jar/smacklib.jar" manifest="lib/installer-exclude/smack.manifest.mf"> <zipfileset src="lib/installer-exclude/smackx-debug.jar" prefix=""/> <zipfileset src="lib/installer-exclude/smack.jar" prefix=""/> @@ -3432,19 +3442,25 @@ <zipfileset src="lib/installer-exclude/jnsapi.jar" prefix=""/> </jar> <move file="${debian.bundles.dest}/META-INF/MANIFEST.MF" - todir="${debian.bundles.dest}/smacklib.jar/META-INF"/> + todir="${debian.bundles.common.dest}/smacklib.jar/META-INF"/> <delete dir="${debian.bundles.dest}/META-INF"/> + <delete dir="${debian.bundles.dest}/smacklib.jar"/> <!-- Removes the last empty line --> <replaceregexp - file="${debian.bundles.dest}/smacklib.jar/META-INF/MANIFEST.MF" + file="${debian.bundles.common.dest}/smacklib.jar/META-INF/MANIFEST.MF" match="^\r\n$" flags="m" replace=""/> <concat - destfile="${debian.bundles.dest}/smacklib.jar/META-INF/MANIFEST.MF" + destfile="${debian.bundles.common.dest}/smacklib.jar/META-INF/MANIFEST.MF" append="true" eol="crlf" fixlastline="true">Bundle-ClassPath: .,smacklib.jar,xpp3.jar,jzlib.jar

</concat> + <replace file="${debian.bundles.dest}/../lib/felix.client.run.properties" + token="reference:file:sc-bundles/smacklib.jar"> + <replacevalue>reference:file:/usr/share/jitsi-common/smacklib.jar</replacevalue> + </replace> + </target> <!-- target to rebuild the jmdnslib bundle reusing debian package --> @@ -3502,7 +3518,7 @@ eol="crlf" fixlastline="true">Bundle-ClassPath: .,bcprov.jar

</concat> </target> - + <!-- target to rebuild the account info bundle reusing debian package --> <target name="deb-bundle-plugin-accountinfo"> @@ -3578,35 +3594,40 @@ </patternset> </unzip> <delete file="${debian.bundles.dest}/libjitsi.jar"/> - <mkdir dir="${debian.bundles.dest}/libjitsi.jar/META-INF"/> - <symlink resource="../../../../share/java/bcpkix.jar" - link="${debian.bundles.dest}/libjitsi.jar/"/> - <symlink resource="../../../../share/libjitsi/libjitsi.jar" - link="${debian.bundles.dest}/libjitsi.jar/"/> - <symlink resource="../../../../share/libjitsi/lib/fmj.jar" - link="${debian.bundles.dest}/libjitsi.jar/"/> + <mkdir dir="${debian.bundles.common.dest}/libjitsi.jar/META-INF"/> + <symlink resource="../../../share/java/bcpkix.jar" + link="${debian.bundles.common.dest}/libjitsi.jar/"/> + <symlink resource="../../../share/libjitsi/libjitsi.jar" + link="${debian.bundles.common.dest}/libjitsi.jar/"/> + <symlink resource="../../../share/libjitsi/lib/fmj.jar" + link="${debian.bundles.common.dest}/libjitsi.jar/"/> <!-- Create the sys .jar--> <jar compress="false" - destfile="${debian.bundles.dest}/libjitsi.jar/libjitsi-impl.jar"> + destfile="${debian.bundles.common.dest}/libjitsi.jar/libjitsi-impl.jar"> <zipfileset dir="${dest}/net/java/sip/communicator/impl/libjitsi" prefix="net/java/sip/communicator/impl/libjitsi"/> </jar> <move file="${debian.bundles.dest}/META-INF/MANIFEST.MF" - todir="${debian.bundles.dest}/libjitsi.jar/META-INF"/> + todir="${debian.bundles.common.dest}/libjitsi.jar/META-INF"/> <delete dir="${debian.bundles.dest}/META-INF"/> + <delete dir="${debian.bundles.dest}/libjitsi.jar"/> <!-- Removes the last empty line --> <replaceregexp - file="${debian.bundles.dest}/libjitsi.jar/META-INF/MANIFEST.MF" + file="${debian.bundles.common.dest}/libjitsi.jar/META-INF/MANIFEST.MF" match="^\r\n$" flags="m" replace=""/> <concat - destfile="${debian.bundles.dest}/libjitsi.jar/META-INF/MANIFEST.MF" + destfile="${debian.bundles.common.dest}/libjitsi.jar/META-INF/MANIFEST.MF" append="true" eol="crlf" fixlastline="true">Bundle-ClassPath: .,libjitsi-impl.jar,fmj.jar,libjitsi.jar,bcpkix.jar

</concat> + <replace file="${debian.bundles.dest}/../lib/felix.client.run.properties" + token="reference:file:sc-bundles/libjitsi.jar"> + <replacevalue>reference:file:/usr/share/jitsi-common/libjitsi.jar</replacevalue> + </replace> <!--bundle-netaddr--> <unzip src="${debian.bundles.dest}/netaddr.jar" @@ -3616,35 +3637,40 @@ </patternset> </unzip> <delete file="${debian.bundles.dest}/netaddr.jar"/> - <mkdir dir="${debian.bundles.dest}/netaddr.jar/META-INF"/> - <symlink resource="../../../../share/libjitsi/lib/ice4j.jar" - link="${debian.bundles.dest}/netaddr.jar/"/> - <symlink resource="../../../../share/java/weupnp.jar" - link="${debian.bundles.dest}/netaddr.jar/"/> + <mkdir dir="${debian.bundles.common.dest}/netaddr.jar/META-INF"/> + <symlink resource="../../../share/libjitsi/lib/ice4j.jar" + link="${debian.bundles.common.dest}/netaddr.jar/"/> + <symlink resource="../../../share/java/weupnp.jar" + link="${debian.bundles.common.dest}/netaddr.jar/"/> <!-- Create the sys .jar--> <jar compress="false" - destfile="${debian.bundles.dest}/netaddr.jar/netaddr.jar"> + destfile="${debian.bundles.common.dest}/netaddr.jar/netaddr.jar"> <zipfileset dir="${dest}/net/java/sip/communicator/service/netaddr" prefix="net/java/sip/communicator/service/netaddr"/> <zipfileset dir="${dest}/net/java/sip/communicator/impl/netaddr" prefix="net/java/sip/communicator/impl/netaddr"/> </jar> <move file="${debian.bundles.dest}/META-INF/MANIFEST.MF" - todir="${debian.bundles.dest}/netaddr.jar/META-INF"/> + todir="${debian.bundles.common.dest}/netaddr.jar/META-INF"/> <delete dir="${debian.bundles.dest}/META-INF"/> + <delete dir="${debian.bundles.dest}/netaddr.jar"/> <!-- Removes the last empty line --> <replaceregexp - file="${debian.bundles.dest}/netaddr.jar/META-INF/MANIFEST.MF" + file="${debian.bundles.common.dest}/netaddr.jar/META-INF/MANIFEST.MF" match="^\r\n$" flags="m" replace=""/> <concat - destfile="${debian.bundles.dest}/netaddr.jar/META-INF/MANIFEST.MF" + destfile="${debian.bundles.common.dest}/netaddr.jar/META-INF/MANIFEST.MF" append="true" eol="crlf" fixlastline="true">Bundle-ClassPath: .,netaddr.jar,ice4j.jar,weupnp.jar

</concat> + <replace file="${debian.bundles.dest}/../lib/felix.client.run.properties" + token="reference:file:sc-bundles/netaddr.jar"> + <replacevalue>reference:file:/usr/share/jitsi-common/netaddr.jar</replacevalue> + </replace> <!--zrtp4j /usr/share/libjitsi/lib/zrtp4j-light.jar --> <unzip src="${debian.bundles.dest}/zrtp4j.jar" @@ -3761,5 +3787,76 @@ <attribute name="Bundle-ClassPath" value=".,httpmime.jar"/> </manifest> </target> + <target name="deb-bundle-common"> + + <move file="${debian.bundles.dest}/protocol-jabber.jar" + tofile="${debian.bundles.common.dest}/protocol-jabber.jar"/> + <replace file="${debian.bundles.dest}/../lib/felix.client.run.properties" + token="reference:file:sc-bundles/protocol-jabber.jar"> + <replacevalue>reference:file:/usr/share/jitsi-common/protocol-jabber.jar</replacevalue> + </replace> + + <move file="${debian.bundles.dest}/protocol-media.jar" + tofile="${debian.bundles.common.dest}/protocol-media.jar"/> + <replace file="${debian.bundles.dest}/../lib/felix.client.run.properties" + token="reference:file:sc-bundles/protocol-media.jar"> + <replacevalue>reference:file:/usr/share/jitsi-common/protocol-media.jar</replacevalue> + </replace> + + <move file="${debian.bundles.dest}/protocol.jar" + tofile="${debian.bundles.common.dest}/protocol.jar"/> + <replace file="${debian.bundles.dest}/../lib/felix.client.run.properties" + token="reference:file:sc-bundles/protocol.jar"> + <replacevalue>reference:file:/usr/share/jitsi-common/protocol.jar</replacevalue> + </replace> + <move file="${debian.bundles.dest}/configuration.jar" + tofile="${debian.bundles.common.dest}/configuration.jar"/> + <replace file="${debian.bundles.dest}/../lib/felix.client.run.properties" + token="reference:file:sc-bundles/configuration.jar"> + <replacevalue>reference:file:/usr/share/jitsi-common/configuration.jar</replacevalue> + </replace> + + <move file="${debian.bundles.dest}/dns.jar" + tofile="${debian.bundles.common.dest}/dns.jar"/> + <replace file="${debian.bundles.dest}/../lib/felix.client.run.properties" + token="reference:file:sc-bundles/dns.jar"> + <replacevalue>reference:file:/usr/share/jitsi-common/dns.jar</replacevalue> + </replace> + + <move file="${debian.bundles.dest}/dnsservice.jar" + tofile="${debian.bundles.common.dest}/dnsservice.jar"/> + <replace file="${debian.bundles.dest}/../lib/felix.client.run.properties" + token="reference:file:sc-bundles/dnsservice.jar"> + <replacevalue>reference:file:/usr/share/jitsi-common/dnsservice.jar</replacevalue> + </replace> + + <move file="${debian.bundles.dest}/fileaccess.jar" + tofile="${debian.bundles.common.dest}/fileaccess.jar"/> + <replace file="${debian.bundles.dest}/../lib/felix.client.run.properties" + token="reference:file:sc-bundles/fileaccess.jar"> + <replacevalue>reference:file:/usr/share/jitsi-common/fileaccess.jar</replacevalue> + </replace> + + <move file="${debian.bundles.dest}/packetlogging.jar" + tofile="${debian.bundles.common.dest}/packetlogging.jar"/> + <replace file="${debian.bundles.dest}/../lib/felix.client.run.properties" + token="reference:file:sc-bundles/packetlogging.jar"> + <replacevalue>reference:file:/usr/share/jitsi-common/packetlogging.jar</replacevalue> + </replace> + + <move file="${debian.bundles.dest}/resourcemanager.jar" + tofile="${debian.bundles.common.dest}/resourcemanager.jar"/> + <replace file="${debian.bundles.dest}/../lib/felix.client.run.properties" + token="reference:file:sc-bundles/resourcemanager.jar"> + <replacevalue>reference:file:/usr/share/jitsi-common/resourcemanager.jar</replacevalue> + </replace> + + <move file="${debian.bundles.dest}/ui-service.jar" + tofile="${debian.bundles.common.dest}/ui-service.jar"/> + <replace file="${debian.bundles.dest}/../lib/felix.client.run.properties" + token="reference:file:sc-bundles/ui-service.jar"> + <replacevalue>reference:file:/usr/share/jitsi-common/ui-service.jar</replacevalue> + </replace> + </target> </project> diff --git a/resources/install/debian/control-src.tmpl b/resources/install/debian/control-src.tmpl index c6ec0f1..04c40fe 100644 --- a/resources/install/debian/control-src.tmpl +++ b/resources/install/debian/control-src.tmpl @@ -11,7 +11,6 @@ Build-Depends: debhelper (>= 9), javahelper, ant-optional, ant-contrib-cpptasks, ant-contrib, - maven, autotools-dev, libjitsi, libjitsi-jni, @@ -73,6 +72,7 @@ Package: _PACKAGE_NAME_ Architecture: all Depends: ${misc:Depends}, _PACKAGE_NAME_-jni (>= ${source:Version}), + _PACKAGE_NAME_-common (>= ${source:Version}), libjitsi (>= 415-0), libjitsi-jni (>= 415-0), default-jre | java6-runtime, @@ -80,7 +80,6 @@ Depends: ${misc:Depends}, libhttpcore-java, liblog4j1.2-java, libjmdns-java, - libdnsjava-java, libmac-widgets-java, libfelix-main-java, libfelix-framework-java, @@ -91,10 +90,7 @@ Depends: ${misc:Depends}, libcommons-lang3-java, liblaf-widget-java, libdbus-java, - libxpp3-java, - libjzlib-java, libbcprov-java, - libbcpkix-java, libweupnp-java, libjna-java, libjgoodies-forms-java, @@ -120,3 +116,15 @@ Description: _APP_NAME_ JNI library Native binaries used to render the video and detect network configuration changes. Binaries for audio codecs like opus and g722. Global shortcuts, notifications and hid devices control. + +Package: _PACKAGE_NAME_-common +Section: libs +Architecture: all +Depends: ${misc:Depends}, ${shlibs:Depends}, + libdnsjava-java, + libxpp3-java, + libjzlib-java, + libbcpkix-java +Description: _APP_NAME_ JNI library + These are the common files for _APP_NAME_ the Java VoIP + and Instant Messaging client. diff --git a/resources/install/debian/copyright b/resources/install/debian/copyright index bb2a999..8c4b26f 100644 --- a/resources/install/debian/copyright +++ b/resources/install/debian/copyright @@ -95,12 +95,6 @@ Copyright: 1999-2006 Ross Bencina and Phil Burk License: MIT -Files: lib/src/sdes4j/* -Copyright: - 2011 University of Applied Sciences Northwestern Switzerland (FHNW) - 2011 School of Engineering Institute of Mobile and Distributed Systems (IMVS) -License: LGPL-2.1 - Files: lib/src/smack_src_3_2_2/* Copyright: 2002-2008 Jive Software diff --git a/resources/install/debian/jitsi.sh.tmpl b/resources/install/debian/jitsi.sh.tmpl index 877b32b..de159db 100644 --- a/resources/install/debian/jitsi.sh.tmpl +++ b/resources/install/debian/jitsi.sh.tmpl @@ -28,8 +28,9 @@ fi javabin=`which java` SCDIR=/usr/share/_PACKAGE_NAME_ +JITSI_COMMON_DIR=/usr/share/_PACKAGE_NAME_-common LIBPATH=$SCDIR/lib -CLASSPATH=/usr/share/java/org.apache.felix.framework.jar:/usr/share/java/org.apache.felix.main.jar:$SCDIR/sc-bundles/sc-launcher.jar:$SCDIR/sc-bundles/util.jar/launchutils.jar:$LIBPATH +CLASSPATH=/usr/share/java/org.apache.felix.framework.jar:/usr/share/java/org.apache.felix.main.jar:$SCDIR/sc-bundles/sc-launcher.jar:$JITSI_COMMON_DIR/util.jar/launchutils.jar:$LIBPATH FELIX_CONFIG=$LIBPATH/felix.client.run.properties LOG_CONFIG=$LIBPATH/logging.properties COMMAND="$javabin $CLIENTARGS -classpath $CLASSPATH -Djna.library.path=/usr/lib/jni -Dfelix.config.properties=file:$FELIX_CONFIG -Djava.util.logging.config.file=$LOG_CONFIG $SPLASH_ARG net.java.sip.communicator.launcher.SIPCommunicator" diff --git a/resources/install/debian/package.install.tmpl b/resources/install/debian/package.install.tmpl index 954b303..d1b9787 100644 --- a/resources/install/debian/package.install.tmpl +++ b/resources/install/debian/package.install.tmpl @@ -1,9 +1,9 @@ -debian/_PACKAGE_NAME_-32.xpm usr/share/pixmaps/ -debian/_PACKAGE_NAME_-16.xpm usr/share/pixmaps/ -debian/_PACKAGE_NAME_.svg usr/share/pixmaps/ -debian/_PACKAGE_NAME_.desktop usr/share/applications/ -resources/install/logging.properties usr/share/_PACKAGE_NAME_/lib/ -lib/felix.client.run.properties usr/share/_PACKAGE_NAME_/lib/ -lib/jitsi-defaults.properties usr/share/_PACKAGE_NAME_/lib/ +debian/_PACKAGE_NAME_-32.xpm usr/share/pixmaps +debian/_PACKAGE_NAME_-16.xpm usr/share/pixmaps +debian/_PACKAGE_NAME_.svg usr/share/pixmaps +debian/_PACKAGE_NAME_.desktop usr/share/applications +resources/install/logging.properties usr/share/_PACKAGE_NAME_/lib +lib/felix.client.run.properties usr/share/_PACKAGE_NAME_/lib +lib/jitsi-defaults.properties usr/share/_PACKAGE_NAME_/lib sc-bundles/*.jar usr/share/_PACKAGE_NAME_/sc-bundles debian/sh/_PACKAGE_NAME_ usr/bin diff --git a/resources/install/debian/rules.tmpl b/resources/install/debian/rules.tmpl index 5f393c3..a960b7d 100755 --- a/resources/install/debian/rules.tmpl +++ b/resources/install/debian/rules.tmpl @@ -21,7 +21,7 @@ override_dh_install-indep: # make and install the debian specific bundles # use the prebuild and installed bundles to extract/modify and use the # exising debian java packages - $(ANT) -file build.xml -Ddebian.bundles.dest=debian/$(PACKAGE_NAME)/usr/share/$(PACKAGE_NAME)/sc-bundles deb-bundle-jna deb-bundle-util deb-bundle-sysactivitynotifications deb-bundle-swing-ui deb-bundle-json deb-bundle-smacklib deb-bundle-jmdnslib deb-bundle-desktoputil deb-bundle-bouncycastle deb-bundle-plugin-accountinfo deb-bundle-commons-lang deb-bundle-hsqldb deb-libjitsi-deps deb-bundle-httpmime + $(ANT) -file build.xml -Ddebian.bundles.dest=debian/$(PACKAGE_NAME)/usr/share/$(PACKAGE_NAME)/sc-bundles -Ddebian.bundles.common.dest=debian/$(PACKAGE_NAME)-common/usr/share/$(PACKAGE_NAME)-common deb-bundle-jna deb-bundle-util deb-bundle-sysactivitynotifications deb-bundle-swing-ui deb-bundle-json deb-bundle-smacklib deb-bundle-jmdnslib deb-bundle-desktoputil deb-bundle-bouncycastle deb-bundle-plugin-accountinfo deb-bundle-commons-lang deb-bundle-hsqldb deb-libjitsi-deps deb-bundle-httpmime deb-bundle-common override_dh_install-arch: ifeq ($(DEB_HOST_ARCH),amd64) diff --git a/resources/install/rpm/SPECS/build-jitsi-rpm.sh b/resources/install/rpm/SPECS/build-jitsi-rpm.sh index 932df3d..f501d51 100755 --- a/resources/install/rpm/SPECS/build-jitsi-rpm.sh +++ b/resources/install/rpm/SPECS/build-jitsi-rpm.sh @@ -1,17 +1,15 @@ -#!/bin/bash -x +#!/bin/bash -xe SCRIPT_DIR="$(dirname "$(readlink -f "$0")")" +cd $SCRIPT_DIR #exec > "${0%.*}.log" 2>&1 -#exec -x - -if [[ "$1" == "--help" || "$1" == "-h" || "$1" == "-?" || $# -lt 2 ]]; then - echo "Usage $0 VERSION BUILD_NUMBER" +if [[ "$1" == "--help" || "$1" == "-h" || "$1" == "-?" || $# -lt 1 ]]; then + echo "Usage $0 BUILD_NUMBER" exit 1 fi -version=$1 -buildNumber=$2 +buildNumber=$1 # Deletes everything but the newest files matching the specified pattern clean_oldies() { @@ -26,13 +24,18 @@ clean_oldies() { ls -t $pattern | tail -$tailCount | xargs rm -f } -cd $SCRIPT_DIR/SOURCES +cd SOURCES + +[[ ! -d jitsi ]] && git clone https://github.com/jitsi/jitsi.git -[[ ! -d jitsi ]] && git clone https://github.com/jitsi/jitsi cd jitsi git stash git pull --rebase -git stash pop +git stash pop || true + +VERSION_MAJOR=$(grep 'public static final int VERSION_MAJOR = ' src/net/java/sip/communicator/impl/version/VersionImpl.java | awk '{print $7}' | awk -F ';' '{print $1}') +VERSION_MINOR=$(grep 'public static final int VERSION_MINOR = ' src/net/java/sip/communicator/impl/version/VersionImpl.java | awk '{print $7}' | awk -F ';' '{print $1}') +version=$VERSION_MAJOR.$VERSION_MINOR echo "Creating zip file" cd $SCRIPT_DIR/SOURCES diff --git a/resources/install/rpm/SPECS/jitsi.spec b/resources/install/rpm/SPECS/jitsi.spec index a106e84..05acbdb 100644 --- a/resources/install/rpm/SPECS/jitsi.spec +++ b/resources/install/rpm/SPECS/jitsi.spec @@ -1,19 +1,21 @@ Name: jitsi -Version: 2.3 -Release: 4831 +Version: 2.5 +Release: 5267 Summary: Jitsi - Open Source Video Calls and Chat -Packager: Pavel Tankov <ptankov@bluejimp.com> +Packager: Damian Minkov <damencho@jitsi.org> Group: Applications/Internet License: GNU Lesser General Public License URL: https://www.jitsi.org -Source0: http://download.jitsi.org/jitsi/nightly/src/jitsi-src-2.3-4831.zip +Source0: http://download.jitsi.org/jitsi/nightly/src/%{name}-src-%{version}-%{release}.zip BuildRoot: %{_topdir}/buildroot AutoReqProv: no BuildRequires: java-devel >= 0:1.6 BuildRequires: ant +BuildRequires: ant-nodeps BuildRequires: gzip +BuildRequires: git-core Requires: java >= 0:1.6 @@ -28,7 +30,7 @@ Yahoo! and many other useful features. %setup -q -n jitsi %build -ant -Dlabel=4831 rebuild +ant -Dlabel=%{release} rebuild %install [ "$(readlink -f "$RPM_BUILD_ROOT")" != "/" ] && rm -rf $RPM_BUILD_ROOT @@ -56,6 +58,7 @@ gzip $RPM_BUILD_ROOT/usr/share/man/man1/jitsi.1 # copy the launcher script cp resources/install/debian/jitsi.sh.tmpl $RPM_BUILD_ROOT/usr/bin/jitsi sed -i -e "s/_PACKAGE_NAME_/jitsi/" $RPM_BUILD_ROOT/usr/bin/jitsi +sed -i -e "s/-common/\/sc-bundles/" $RPM_BUILD_ROOT/usr/bin/jitsi # no more libaoss #sed -i -e "s@export LD_PRELOAD=/usr/lib/libaoss.so@export LD_PRELOAD=/usr/lib/libaoss.so.0@" $RPM_BUILD_ROOT/usr/bin/sip-communicator @@ -125,6 +128,10 @@ sed -i -e "s/\/launchutils.jar//" $RPM_BUILD_ROOT/usr/bin/jitsi %doc %{_mandir}/man*/* %changelog +* Tue Jul 29 2014 poma <poma@gmail.com> +- Repair jitsi.spec in regard to jitsi.sh.tmpl commit 4064c28, + and build-jitsi-rpm.sh for the build on Fedora. + * Fri Sep 13 2013 Pavel Tankov <ptankov@bluejimp.com> - Now depends on java >= 0:1.6. - Changed the info to conform with the description on the website. diff --git a/resources/install/windows/DefaultOverridesProps.wxi.template b/resources/install/windows/DefaultOverridesProps.wxi.template index 222bd64..d4f6557 100644 --- a/resources/install/windows/DefaultOverridesProps.wxi.template +++ b/resources/install/windows/DefaultOverridesProps.wxi.template @@ -8,6 +8,30 @@ -->
<Fragment>
<ComponentGroup Id="ComponentGroup_DefaultOverrides">
+ <Component
+ Id="ComponentGroup_DefaultOverrides_Disable_Updates_Check"
+ Directory="@@lib"
+ Guid="F09D26F0-402F-4CC1-AD28-9D88B9316AC1"
+ Win64="$(var.Win64)">
+ <Condition><![CDATA[DISABLE_UPDATES = 1 OR CREATE_DISABLE_UPDATES_CHECK = 1]]></Condition>
+ <IniFile
+ Id="DefaultOverrides_DisableUpdatesCheck"
+ Action="addLine"
+ Directory="@@lib"
+ Name="jitsi-default-overrides.properties"
+ Section="#dummy"
+ Key="net.java.sip.communicator.plugin.updatechecker.ENABLED"
+ Value="false"
+ />
+ <RegistryValue
+ Key="Software\Microsoft\@APP_NAME@"
+ KeyPath="yes"
+ Name="DisableUpdatesCheck"
+ Root="HKCU"
+ Type="integer"
+ Value="1" />
+ <CreateFolder/>
+ </Component>
<Component
Id="ComponentGroup_DefaultOverrides_Provisioning_Method"
Directory="@@lib"
diff --git a/resources/install/windows/en-us.wxl b/resources/install/windows/en-us.wxl index c64ea72..d248f3b 100644 --- a/resources/install/windows/en-us.wxl +++ b/resources/install/windows/en-us.wxl @@ -18,6 +18,8 @@ <String Id="ShortcutsAndRegistryDlg_CreateAutoStart" Overridable="yes">&Auto-start when computer restarts or reboots</String>
<String Id="ShortcutsAndRegistryDlg_AssociateProtocols" Overridable="yes">&Associate Protocols</String>
<String Id="ShortcutsAndRegistryDlg_DefaultIMApp" Overridable="yes">M&ake [ProductName] the default Instant Messaging Provider (Outlook integration)</String>
+ <String Id="ShortcutsAndRegistryDlg_DisableUpdates" Overridable="yes">&Disable check for updates on startup</String>
+ <String Id="ShortcutsAndRegistryDlg_VariousSettings" Overridable="yes">&Various Settings</String>
<String Id="WelcomeText1" Overridable="yes"><![CDATA[@WelcomeText1@]]></String>
<String Id="WelcomeText2" Overridable="yes"><![CDATA[@WelcomeText2@]]></String>
diff --git a/resources/install/windows/fr-fr.wxl b/resources/install/windows/fr-fr.wxl index 76f7da7..4dcf621 100644 --- a/resources/install/windows/fr-fr.wxl +++ b/resources/install/windows/fr-fr.wxl @@ -18,6 +18,8 @@ <String Id="ShortcutsAndRegistryDlg_CreateAutoStart" Overridable="yes">Lancer automatiquement quand l’ordinateur démarre</String>
<String Id="ShortcutsAndRegistryDlg_AssociateProtocols" Overridable="yes">&Protocoles associés</String>
<String Id="ShortcutsAndRegistryDlg_DefaultIMApp" Overridable="yes">M&ake [ProductName] the default Instant Messaging Provider (Outlook integration)</String>
+ <String Id="ShortcutsAndRegistryDlg_DisableUpdates" Overridable="yes">&Disable check for updates on startup</String>
+ <String Id="ShortcutsAndRegistryDlg_VariousSettings" Overridable="yes">&Various Settings</String>
<String Id="WelcomeText1" Overridable="yes"><![CDATA[Ce logiciel est developpé par la communauté de [ProductName] ]]></String>
<String Id="WelcomeText2" Overridable="yes"><![CDATA[Découvrir notre site : @APP_WEB@]]></String>
diff --git a/resources/install/windows/installer-windows.wxs b/resources/install/windows/installer-windows.wxs index 1e31d2e..3f4f07b 100644 --- a/resources/install/windows/installer-windows.wxs +++ b/resources/install/windows/installer-windows.wxs @@ -193,15 +193,18 @@ <Control Id="Description" Type="Text" X="25" Y="23" Width="280" Height="15" Transparent="yes" NoPrefix="yes" Text="!(loc.ShortcutsAndRegistryDlgDescription)" />
<Control Id="BannerLine" Type="Line" X="0" Y="44" Width="370" Height="0" />
- <Control Id="ShortcutGroup" Type="GroupBox" X="20" Y="60" Width="330" Height="90" Text="!(loc.ShortcutsAndRegistryDlg_CreateShortcuts)" />
- <Control Id="StartMenuShortcutCheckBox" Type="CheckBox" X="25" Y="75" Width="320" Height="15" Property="CREATE_START_MENU_SHORTCUT" CheckBoxValue="1" Text="!(loc.ShortcutsAndRegistryDlg_CreateStartMenu)" />
- <Control Id="DesktopShortcutCheckBox" Type="CheckBox" X="25" Y="90" Width="320" Height="15" Property="CREATE_DESKTOP_SHORTCUT" CheckBoxValue="1" Text="!(loc.ShortcutsAndRegistryDlg_CreateDesktop)" />
- <Control Id="StartupShortcutCheckBox" Type="CheckBox" X="25" Y="105" Width="320" Height="15" Property="HAS_STARTUP_REGISTRY" CheckBoxValue="1" Text="!(loc.ShortcutsAndRegistryDlg_CreateAutoStart)" />
- <Control Id="DefaultIMApplicationCheckBox" Type="CheckBox" X="25" Y="120" Width="320" Height="25" Property="SET_DEFAULT_IM_APP" CheckBoxValue="1" Text="!(loc.ShortcutsAndRegistryDlg_DefaultIMApp)" />
+ <Control Id="ShortcutGroup" Type="GroupBox" X="20" Y="50" Width="330" Height="50" Text="!(loc.ShortcutsAndRegistryDlg_CreateShortcuts)" />
+ <Control Id="StartMenuShortcutCheckBox" Type="CheckBox" X="25" Y="65" Width="320" Height="15" Property="CREATE_START_MENU_SHORTCUT" CheckBoxValue="1" Text="!(loc.ShortcutsAndRegistryDlg_CreateStartMenu)" />
+ <Control Id="DesktopShortcutCheckBox" Type="CheckBox" X="25" Y="80" Width="320" Height="15" Property="CREATE_DESKTOP_SHORTCUT" CheckBoxValue="1" Text="!(loc.ShortcutsAndRegistryDlg_CreateDesktop)" />
- <Control Id="RegistryGroup" Type="GroupBox" X="20" Y="155" Width="330" Height="50" Text="!(loc.ShortcutsAndRegistryDlg_AssociateProtocols)" />
- <Control Id="SipRegistryEntriesCheckBox" Type="CheckBox" X="25" Y="170" Width="320" Height="15" Property="CREATE_SIP_REGISTRY_ENTRIES" CheckBoxValue="1" Text="&SIP" />
- <Control Id="XmppRegistryEntriesCheckBox" Type="CheckBox" X="25" Y="185" Width="320" Height="15" Property="CREATE_XMPP_REGISTRY_ENTRIES" CheckBoxValue="1" Text="&XMPP" />
+ <Control Id="VeriousGroup" Type="GroupBox" X="20" Y="105" Width="330" Height="75" Text="!(loc.ShortcutsAndRegistryDlg_VariousSettings)" />
+ <Control Id="StartupShortcutCheckBox" Type="CheckBox" X="25" Y="120" Width="320" Height="15" Property="HAS_STARTUP_REGISTRY" CheckBoxValue="1" Text="!(loc.ShortcutsAndRegistryDlg_CreateAutoStart)" />
+ <Control Id="DisableUpdatesCheckCheckBox" Type="CheckBox" X="25" Y="135" Width="320" Height="15" Property="CREATE_DISABLE_UPDATES_CHECK" CheckBoxValue="1" Text="!(loc.ShortcutsAndRegistryDlg_DisableUpdates)" />
+ <Control Id="DefaultIMApplicationCheckBox" Type="CheckBox" X="25" Y="150" Width="320" Height="25" Property="SET_DEFAULT_IM_APP" CheckBoxValue="1" Text="!(loc.ShortcutsAndRegistryDlg_DefaultIMApp)" />
+
+ <Control Id="RegistryGroup" Type="GroupBox" X="20" Y="185" Width="330" Height="45" Text="!(loc.ShortcutsAndRegistryDlg_AssociateProtocols)" />
+ <Control Id="SipRegistryEntriesCheckBox" Type="CheckBox" X="25" Y="200" Width="320" Height="15" Property="CREATE_SIP_REGISTRY_ENTRIES" CheckBoxValue="1" Text="&SIP" />
+ <Control Id="XmppRegistryEntriesCheckBox" Type="CheckBox" X="25" Y="215" Width="320" Height="15" Property="CREATE_XMPP_REGISTRY_ENTRIES" CheckBoxValue="1" Text="&XMPP" />
<Control Id="BottomLine" Type="Line" X="0" Y="234" Width="370" Height="0" />
@@ -294,6 +297,12 @@ <Custom Action="UnsetCREATE_STARTUP_REGISTRY" After="SetINSTALLDIR">
<![CDATA[NOT HAS_STARTUP_REGISTRY AND NOT (HAS_STARTUP_REGISTRY = "#1")]]>
</Custom>
+ <Custom Action="SetCREATE_DISABLE_UPDATES_CHECK" After="SetINSTALLDIR">
+ <![CDATA[HAS_DISABLE_UPDATES_CHECK_REGISTRY = "#1"]]>
+ </Custom>
+ <Custom Action="UnsetCREATE_DISABLE_UPDATES_CHECK" After="SetINSTALLDIR">
+ <![CDATA[NOT HAS_DISABLE_UPDATES_CHECK_REGISTRY]]>
+ </Custom>
<?ifdef JRESetup ?>
<Custom Action="SetWIXUI_EXITDIALOGOPTIONALCHECKBOXTEXT" After="AppSearch">
@@ -334,6 +343,14 @@ Property="CREATE_STARTUP_REGISTRY"
Value="1" />
<CustomAction
+ Id="SetCREATE_DISABLE_UPDATES_CHECK"
+ Property="CREATE_DISABLE_UPDATES_CHECK"
+ Value="1" />
+<CustomAction
+ Id="UnsetCREATE_DISABLE_UPDATES_CHECK"
+ Property="CREATE_DISABLE_UPDATES_CHECK"
+ Value="0" />
+<CustomAction
Id="SetINSTALLDIR"
Property="INSTALLDIR"
Value="[SIP_COMMUNICATOR_AUTOUPDATE_INSTALLDIR]" />
@@ -400,6 +417,12 @@ <Custom Action="UnsetCREATE_STARTUP_REGISTRY" After="SetINSTALLDIR">
<![CDATA[NOT HAS_STARTUP_REGISTRY AND NOT (HAS_STARTUP_REGISTRY = "#1")]]>
</Custom>
+ <Custom Action="SetCREATE_DISABLE_UPDATES_CHECK" After="SetINSTALLDIR">
+ <![CDATA[HAS_DISABLE_UPDATES_CHECK_REGISTRY AND HAS_DISABLE_UPDATES_CHECK_REGISTRY = "#1"]]>
+ </Custom>
+ <Custom Action="UnsetCREATE_DISABLE_UPDATES_CHECK" After="SetINSTALLDIR">
+ <![CDATA[NOT HAS_DISABLE_UPDATES_CHECK_REGISTRY]]>
+ </Custom>
<?ifdef JRESetup ?>
<Custom Action="SetWIXUI_EXITDIALOGOPTIONALCHECKBOXTEXT" After="AppSearch">
@@ -443,6 +466,14 @@ <SetProperty Id="HAS_STARTUP_REGISTRY" After="AppSearch" Value="[HAS_STARTUP_SHORTCUT]">
HAS_STARTUP_SHORTCUT
</SetProperty>
+<Property Id="HAS_DISABLE_UPDATES_CHECK_REGISTRY" Value="#0">
+ <RegistrySearch
+ Id="RegistrySearch_HasDisableUpdatesCheckRegistry"
+ Key="Software\Microsoft\@APP_NAME@"
+ Name="DisableUpdatesCheck"
+ Root="HKCU"
+ Type="raw" />
+</Property>
<Property Id="IS_DEFAULT_IM_APP">
<RegistrySearch
Id="RegistrySearch_IsDefaultIMApp"
diff --git a/resources/languages/resources.properties b/resources/languages/resources.properties index 8ba6d1b..72562eb 100644 --- a/resources/languages/resources.properties +++ b/resources/languages/resources.properties @@ -720,23 +720,24 @@ identity cannot<br> be automatically verified. \ Do you want to continue connecting?<br><br> \ For more information, click "Show Certificate".</html> service.gui.CONTINUE_ANYWAY=Continue anyway -service.gui.CERT_INFO_ISSUED_TO=<html><b>Issued To</b></html> +service.gui.CERT_INFO_CHAIN=Certificate Chain: +service.gui.CERT_INFO_ISSUED_TO=Issued To service.gui.CERT_INFO_CN=Common Name: service.gui.CERT_INFO_O=Organization: service.gui.CERT_INFO_C=Country Name: service.gui.CERT_INFO_ST=State or Province Name: service.gui.CERT_INFO_L=Locality Name: -service.gui.CERT_INFO_ISSUED_BY=<html><b>Issued By</b></html> +service.gui.CERT_INFO_ISSUED_BY=Issued By service.gui.CERT_INFO_OU=Organizational Unit: -service.gui.CERT_INFO_VALIDITY=<html><b>Validity</b></html> +service.gui.CERT_INFO_VALIDITY=Validity service.gui.CERT_INFO_ISSUED_ON=Issued On: service.gui.CERT_INFO_EXPIRES_ON=Expires On: -service.gui.CERT_INFO_FINGERPRINTS=<html><b>Fingerprints</b></html> -service.gui.CERT_INFO_CERT_DETAILS=<html><b>Certificate Info</b></html> +service.gui.CERT_INFO_FINGERPRINTS=Fingerprints +service.gui.CERT_INFO_CERT_DETAILS=Certificate Info service.gui.CERT_INFO_SER_NUM=Serial Number: service.gui.CERT_INFO_VER=Version: service.gui.CERT_INFO_SIGN_ALG=Signature Algorithm: -service.gui.CERT_INFO_PUB_KEY_INFO=<html><b>Public Key Info</b></html> +service.gui.CERT_INFO_PUB_KEY_INFO=Public Key Info service.gui.CERT_INFO_ALG=Algorithm: service.gui.CERT_INFO_PUB_KEY=Public Key: service.gui.CERT_INFO_KEY_BYTES_PRINT={0} bytes: {1} diff --git a/resources/languages/resources_es.properties b/resources/languages/resources_es.properties index bc6981b..b712598 100644 --- a/resources/languages/resources_es.properties +++ b/resources/languages/resources_es.properties @@ -35,6 +35,7 @@ service.gui.ADD=&Agregar service.gui.ADD_ACCOUNT=Agregar cuenta service.gui.ADD_CONTACT=&Agregar contacto service.gui.ADD_AUTHORIZED_CONTACT=Agregar {0} a su lista de contactos +service.gui.ADD_CONTACT_TO_CONTACTLIST=Agregar contacto a su lista de contactos service.gui.ADD_CONTACT_TO=&Agregar contacto a service.gui.ADD_CONTACT_ERROR=Error al agregar contacto con identificador: {0} service.gui.ADD_CONTACT_ERROR_TITLE=Error al agregar contacto @@ -56,6 +57,7 @@ service.gui.ADMINISTRATOR=administrador service.gui.ADVANCED=&Avanzado service.gui.ALL=&Todos service.gui.ALL_CONTACTS=&Todos los contactos +service.gui.ALTERNATE_ADDRESS=Dirección alterna service.gui.APPLY=&Aplicar service.gui.ARE_CALLING={0} está llamando... service.gui.ARE_NOW=Usted es {0} @@ -73,6 +75,7 @@ service.gui.AUTHORIZATION_RESPONSE=Respuesta de la autorización service.gui.AWAY_STATUS=Ausente service.gui.EXTENDED_AWAY_STATUS=Ausencia extendida service.gui.BAN=&Bloquear +service.gui.BANNED=vetado service.gui.BAN_FAILED=Falló el bloqueo service.gui.BAN_FAILED_GENERAL_ERROR=Fallo al bloquear a {0}. Ocurrió un error general en el servidor. service.gui.BAN_FAILED_NOT_ALLOWED=Fallo al bloquear a {0}. Ni el propietario o el administrador de la sala pueden ser bloqueados. @@ -85,6 +88,7 @@ service.gui.CALL=Llamar service.gui.CALL_CONTACT=Llamar al contacto service.gui.CALL_FAILED=Falló la llamada service.gui.CALL_HISTORY_TOOL_TIP=Presione aquà para ver historial +service.gui.CALL_HISTORY_GROUP_NAME=Registro de llamadas service.gui.CALL_VIA=Llamar usando: service.gui.CALL_NAME_OR_NUMBER=Introduzca nombre o número service.gui.CALL_NOT_SUPPORTING_PARTICIPANT=Esta llamada solo soporta participantes desde la red {0} y de su cuenta {1}. {2} no contiene ninguna dirección para esta red o cuenta. @@ -110,10 +114,13 @@ service.gui.CHAT_ROOM_CONFIGURATION=Configuración de la sala {0} service.gui.CHAT_ROOM_CONFIGURATION_FAILED=No se pudo obtener la configuración de la sala de charlas {0}. service.gui.CHAT_ROOM_CONFIGURATION_FORBIDDEN=No se pudo obtener la configuración de sala de chat {0}. Sólo los propietarios de la sala de chat pueden ver y cambiar la configuración. service.gui.CHAT_ROOM_CONFIGURATION_SUBMIT_FAILED=Ocurrió un error mientras se enviaba la configuración de la sala {0}. +service.gui.CHAT_ROOM_CONFIGURATION_MEMBERS_EDIT_TITLE=Editar lista de miembros +service.gui.CHAT_ROOM_CONFIGURATION_MEMBERS_EDIT_DESCRIPTION=Los miembros de este chat están en la lista de la derecha. Esos miembros serán los únicos permitidos cuando el chat sea "sólo-miembros". service.gui.CHAT_ROOM_USER_JOINED=se ha conectado a {0} service.gui.CHAT_ROOM_USER_LEFT=ha abandonado {0} service.gui.CHAT_ROOM_USER_KICKED=ha sido expulsado de {0} service.gui.CHAT_ROOM_USER_QUIT=ha cerrado su sesión {0} +service.gui.CHAT_ROOM_SEND_MSG_FORBIDDEN=El Envió de mensajes esta prohibido (revocado) service.gui.CHAT_ROOM_SAVE_BUTTON_TOOLTIP=Guardar la sala de chat para uso posterior service.gui.CHAT_ROOM_REMOVE_BUTTON_TOOLTIP=Eliminar la sala seleccionada de la lista de salas guardadas service.gui.CHAT_ROOM_NAME=Nombre de la sala de charlas @@ -132,6 +139,7 @@ service.gui.CHAT_ROOM_REQUIRES_PASSWORD=La sala {0} ha solicitado contraseña. service.gui.CHAT_ROOMS=Salas de charla service.gui.CHAT_ROOM=Sala de chat service.gui.CHAT_ROOM_SUBJECT_CHANGED={0} ha cambiado el asunto a {1} +service.gui.CHAT_ROOM_ALTERNATE_ADDRESS=Puede continuar la conversación en la siguiente sala de charlas: {0} service.gui.CHOOSE_CONTACT=Elegir contacto service.gui.CHOOSE_NUMBER=Elija número service.gui.CHOOSE_ACCOUNT=Por favor, seleccione una de las cuentas mostradas. @@ -190,6 +198,8 @@ service.gui.DO_NOT_SHOW_AGAIN=No mostrar este mensaje de nuevo service.gui.DOWNLOAD_NOW=&Descargar ahora service.gui.DRAG_FOR_SHARING=Arrastre hasta aquà lo que desea compartir... service.gui.DURATION=duración +service.gui.DESTROY_CHATROOM=Destruir sala de charlas +service.gui.DESTROY_MESSAGE=Para informar a otros participantes, por favor ingrese el motivo y una dirección de la sala de charlas alternativa para que se unan. service.gui.EDIT=&Editar service.gui.EDITED_AT=editado {0} service.gui.EMAIL=Correo @@ -282,6 +292,7 @@ service.gui.INSERT_SMILEY=Insertar emoticono service.gui.INCOMING_CALL=Llamada entrante de: {0} service.gui.INCOMING_CALL_STATUS=Llamada Entrante service.gui.INSTANT_MESSAGINGS=IMs +service.gui.IM=MI service.gui.INITIATING_CALL_STATUS=Iniciando llamada service.gui.INVITATION=Texto de la invitación service.gui.INVITATION_RECEIVED=Invitación recibida @@ -428,6 +439,7 @@ service.gui.PUT_OFF_HOLD=Quitar pausa service.gui.PUT_ON_HOLD=Poner en pausa service.gui.QUIT=&Salir service.gui.READY=Preparado +service.gui.RECENT_MESSAGES=Conversaciones recientes service.gui.REASON=Razón service.gui.RECEIVED={0} recibido service.gui.RECONNECTION_LIMIT_EXCEEDED=Ha desconectado y reconectado al servidor muy rápido. La cuenta: Usuario {0}, Servidor {1} ha sido temporalmente deshabilitada y tendrá que esperar unos instantes antes de volver a intentar la conexión. @@ -628,6 +640,11 @@ service.gui.callinfo.IS_CONFERENCE_FOCUS=Enfocar conferencia service.gui.callinfo.IS_DEFAULT_ENCRYPTED=Cifrado activado service.gui.callinfo.CALL_TRANSPORT=Señalización de transporte de llamadas service.gui.callinfo.CALL_DURATION=Duración de la llamada +service.gui.callinfo.TLS_PROTOCOL=Protocolo TLS +service.gui.callinfo.TLS_CIPHER_SUITE=Suite de cifrado TLS +service.gui.callinfo.TLS_SERVER_CERTIFICATE_CHAIN=Cadena del certificado del servidor TLS +service.gui.callinfo.TLS_CERTIFICATE_CONTENT=El contenido del certificado del servidor TLS se muestra a continuación. +service.gui.callinfo.VIEW_CERTIFICATE=Ver Certificado service.gui.callinfo.CODEC=Códec / Frecuencia service.gui.callinfo.NA=N.D. service.gui.callinfo.VIDEO_SIZE=Tamaño de video @@ -750,6 +767,8 @@ service.gui.avatar.imagepicker.WEBCAM_ERROR=Error en cámara web service.gui.security.encryption.required=¡Cifrado requerido! +service.protocol.ICE_FAILED=No se pudo establecer una conexión (falló ICE y no se encontró relé) + # impl.protocol.ssh #Contact Details Seperator(must not be part of contact data stored as persistent # data) @@ -823,8 +842,12 @@ plugin.addrbook.ADDRESS_BOOKS=Libreta de direcciones plugin.addrbook.ENABLE_MACOSX_ADDRESSBOOK=Activar búsqueda en la Libreta de Direcciones de MacOSX plugin.addrbook.ENABLE_MICROSOFT_OUTLOOK=Activar búsqueda en Microsoft Outlook plugin.addrbook.DESCRIPTION=Si se encuentra activado, al teclear en el campo de búsqueda de la lista de contactos, se buscará en la libreta de direcciones de su sistema y todos los contactos que coincidan se mostrarán en su lista de contactos. +plugin.addrbook.DEFAULT_IM_APP=Hacer a Jitsi el Proveedor de MensajerÃa Instantánea por defecto (Integración con Outlook) plugin.addrbook.PREFIX=Especifique un prefijo para el número de teléfono plugin.addrbook.PREFIX_EXAMPLE=Ej: 00 +plugin.addrbook.OUTLOOK_IS_NOT_DEFAULT_MAIL_CLIENT_TITLE=Error accediendo a sus contactos de Microsoft Outlook. +plugin.addrbook.OUTLOOK_IS_NOT_DEFAULT_MAIL_CLIENT={0} actualmente no puede acceder a sus contactos de Microsoft Outlook, porque Outlook no es su aplicación de correo por defecto. +plugin.addrbook.MAKE_OUTLOOK_DEFAULT_MAIL_CLIENT=Hacer a Outlook su cliente de correo por defecto # Google Contacts impl.googlecontacts.CONFIG_FORM_TITLE=Contactos de Google @@ -864,6 +887,7 @@ plugin.accountinfo.EMAIL=E-mail: plugin.accountinfo.WORK_EMAIL=E-Mail laboral: plugin.accountinfo.PHONE=Teléfono: plugin.accountinfo.WORK_PHONE=Teléfono laboral: +plugin.accountinfo.MOBILE_PHONE=Teléfono Móvil: plugin.accountinfo.ORGANIZATION=Nombre de la organización: plugin.accountinfo.JOB_TITLE=Puesto: plugin.accountinfo.ABOUT_ME=Información sobre mÃ: @@ -955,6 +979,7 @@ plugin.generalconfig.ERROR_PORT_NUMBER=Puerto erróneo plugin.generalconfig.CHECK_FOR_UPDATES=Comprobar actualizaciones al iniciar plugin.generalconfig.STARTUP_CONFIG=Iniciar plugin.generalconfig.LEAVE_CHATROOM_ON_WINDOW_CLOSE=Abandonar las salas de charlas al cerrar la ventana +plugin.generalconfig.SHOW_RECENT_MESSAGES=Mostrar las conversaciones recientes (depende del historial) plugin.generalconfig.REMOVE_SPECIAL_PHONE_SYMBOLS=Eliminar sÃmbolos especiales antes de llamar a números de teléfono plugin.generalconfig.ACCEPT_PHONE_NUMBER_WITH_ALPHA_CHARS=Convertir letras a números de teléfono plugin.generalconfig.ACCEPT_PHONE_NUMBER_WITH_ALPHA_CHARS_EXAMPLE=ejemplo. +1-800-MYPHONE -> +1-800-694663 @@ -1200,6 +1225,9 @@ plugin.updatechecker.DIALOG_NOUPDATE=Versión actualizada. plugin.updatechecker.DIALOG_NOUPDATE_TITLE=No hay actualizaciones plugin.updatechecker.DIALOG_MISSING_UPDATE=Falta el Instalador de actualizaciones. +# usersearch +plugin.usersearch.USER_SEARCH=Búscar usuario + # whiteboard plugin.whiteboard.TITLE=Pizarra digital [Beta] plugin.whiteboard.MENU_ITEM=Pizarra Digital diff --git a/resources/languages/resources_ru.properties b/resources/languages/resources_ru.properties index eec28e2..3cb363b 100644 --- a/resources/languages/resources_ru.properties +++ b/resources/languages/resources_ru.properties @@ -30,47 +30,52 @@ service.gui.ACCEPT=&ПринÑÑ‚ÑŒ service.gui.ACCOUNT=Ðккаунт service.gui.ACCOUNT_ME=Я service.gui.ACCOUNT_REGISTRATION_WIZARD=МаÑтер региÑтрации учетных запиÑей -service.gui.ACCOUNTS=Ðккаунты +service.gui.ACCOUNTS=Учётные запиÑи service.gui.ADD=&Добавить service.gui.ADD_ACCOUNT=Добавить аккаунт service.gui.ADD_CONTACT=&Добавить контакт -service.gui.ADD_AUTHORIZED_CONTACT=Добавить {0} в ÑпиÑок контактов +service.gui.ADD_AUTHORIZED_CONTACT=Добавить {0} в ваш ÑпиÑок контактов +service.gui.ADD_CONTACT_TO_CONTACTLIST=Добавить контакт в ваш ÑпиÑок контактов service.gui.ADD_CONTACT_TO=&Добавить контакт к service.gui.ADD_CONTACT_ERROR=Ðе удалоÑÑŒ добавить контакт: {0} service.gui.ADD_CONTACT_ERROR_TITLE=Ошибка при добавлении контакта service.gui.ADD_CONTACT_EXIST_ERROR=Контакт {0} уже ÑущеÑтвует в ÑпиÑке контактов. service.gui.ADD_CONTACT_NETWORK_ERROR=Сервер не ответил на Ð·Ð°Ð¿Ñ€Ð¾Ñ Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¸Ñ ÐºÐ¾Ð½Ñ‚Ð°ÐºÑ‚Ð°: {0}. -service.gui.ADD_CONTACT_NOT_SUPPORTED=Ðе удалоÑÑŒ добавить контакт: {0}. ÐžÐ¿ÐµÑ€Ð°Ñ†Ð¸Ñ Ð½Ðµ поддерживаетÑÑ. -service.gui.ADD_CONTACT_IDENTIFIER=Введите идентификатор контакта, который желаете добавить. +service.gui.ADD_CONTACT_NOT_SUPPORTED=Ðе удалоÑÑŒ добавить контакт Ñ Ð¸Ð´ÐµÐ½Ñ‚Ð¸Ñ„Ð¸ÐºÐ°Ñ‚Ð¾Ñ€Ð¾Ð¼: {0}. ÐžÐ¿ÐµÑ€Ð°Ñ†Ð¸Ñ Ð½Ðµ поддерживаетÑÑ. +service.gui.ADD_CONTACT_IDENTIFIER=Ð’ поле ниже введите идентификатор контакта который вы желаете добавить. service.gui.ADD_CONTACT_WIZARD=МаÑтер Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¸Ñ ÐºÐ¾Ð½Ñ‚Ð°ÐºÑ‚Ð¾Ð² service.gui.ADD_CONTACT_NOT_CONNECTED=Ð’Ñ‹ должны быть подключены Ð´Ð»Ñ Ñ‚Ð¾Ð³Ð¾, чтобы добавить контакт. ПожалуйÑта, выполните вход и попробуйте Ñнова. -service.gui.ADD_GROUP_LOCAL_ERROR=Ðе удалоÑÑŒ добавить группу: {0}. Произошёл Ñбой операции ввода-вывода. +service.gui.ADD_GROUP_LOCAL_ERROR=Ðе удалоÑÑŒ добавить группу Ñ Ð¸Ð¼ÐµÐ½ÐµÐ¼: {0}. Сбой произошёл во Ð²Ñ€ÐµÐ¼Ñ Ð¾Ð¿ÐµÑ€Ð°Ñ†Ð¸Ð¸ ввода-вывода. service.gui.ADD_GROUP_EXIST_ERROR=Группа {0} уже ÑущеÑтвует в ÑпиÑке контактов. ПожалуйÑта, выберите другое имÑ. -service.gui.ADD_GROUP_NET_ERROR=Ðе удалоÑÑŒ добавить группу: {0}. Произошла ÑÐµÑ‚ÐµÐ²Ð°Ñ Ð¾ÑˆÐ¸Ð±ÐºÐ°. ПожалуйÑта, проверьте ваше Ñетевое подключение и попробуйте Ñнова. +service.gui.ADD_GROUP_NET_ERROR=Ðе удалоÑÑŒ добавить группу Ñ Ð¸Ð¼ÐµÐ½ÐµÐ¼: {0}. Сбой произошёл по причине отказа Ñети. ПожалуйÑта, проверьте ваше Ñетевое подключение и попробуйте Ñнова. service.gui.ADD_GROUP_ERROR=Ðе удалоÑÑŒ добавить группу: {0}. service.gui.ADD_GROUP_EMPTY_NAME=Ð˜Ð¼Ñ Ð³Ñ€ÑƒÐ¿Ð¿Ñ‹ не может быть пуÑтым. service.gui.ADD_GROUP=Создать группу service.gui.ADD_SUBCONTACT=&Добавить дополнительный контакт +service.gui.ADDRESS=ÐÐ´Ñ€ÐµÑ service.gui.ADMINISTRATOR=админиÑтратор service.gui.ADVANCED=&РаÑширенные service.gui.ALL=&Ð’Ñе service.gui.ALL_CONTACTS=&Ð’Ñе контакты +service.gui.ALTERNATE_ADDRESS=Ðльтернативный Ð°Ð´Ñ€ÐµÑ service.gui.APPLY=&Применить -service.gui.ARE_CALLING=вызывает... +service.gui.ARE_CALLING={0} вызывает... service.gui.ARE_NOW=Ð’Ñ‹ ÑÐµÐ¹Ñ‡Ð°Ñ {0} service.gui.AT=Ð²Ñ€ÐµÐ¼Ñ service.gui.AUTHORIZE=&Ðвторизовать -service.gui.AUTHORIZATION_ACCEPTED=ÑобеÑедник принÑл Ð·Ð°Ð¿Ñ€Ð¾Ñ Ð½Ð° авторизацию. +service.gui.AUTHORIZATION_ACCEPTED={0} ÑобеÑедник принÑл Ð·Ð°Ð¿Ñ€Ð¾Ñ Ð½Ð° авторизацию. service.gui.AUTHENTICATION_FAILED=Проверка подлинноÑти Ð´Ð»Ñ {0} не удалаÑÑŒ. Введённый пароль неверен. service.gui.AUTHENTICATION_REQUESTED=Запрошена проверка подлинноÑти service.gui.AUTHENTICATION_REQUESTED_SERVER=Сервер {0} запроÑил проверку подлинноÑти. -service.gui.AUTHENTICATION_REJECTED=ÑобеÑедник отверг Ð·Ð°Ð¿Ñ€Ð¾Ñ Ð½Ð° авторизацию. -service.gui.AUTHENTICATION_WINDOW_TITLE=Ð˜Ð´ÐµÐ½Ñ‚Ð¸Ñ„Ð¸ÐºÐ°Ñ†Ð¸Ñ {0} +service.gui.AUTHENTICATION_REJECTED={0} ÑобеÑедник отверг Ð·Ð°Ð¿Ñ€Ð¾Ñ Ð½Ð° авторизацию. +service.gui.AUTHENTICATION_WINDOW_TITLE={0} Ð°Ð²Ñ‚Ð¾Ñ€Ð¸Ð·Ð°Ñ†Ð¸Ñ service.gui.AUTHORIZATION_REQUESTED=Запрошено разрешение на доÑтуп service.gui.AUTHORIZATION_REQUESTED_INFO=Контакт {0} запроÑил вашу авторизацию. service.gui.AUTHORIZATION_RESPONSE=Ответ на авторизацию service.gui.AWAY_STATUS=Отошёл +service.gui.EXTENDED_AWAY_STATUS=Давно отÑутÑтвую service.gui.BAN=&Заблокировать +service.gui.BANNED=забанен service.gui.BAN_FAILED=Ðе удалоÑÑŒ заблокировать service.gui.BAN_FAILED_GENERAL_ERROR=Ðе удалоÑÑŒ заблокировать {0}. ÐžÐ±Ñ‰Ð°Ñ Ð¾ÑˆÐ¸Ð±ÐºÐ° Ñервера. service.gui.BAN_FAILED_NOT_ALLOWED=Ðе удалоÑÑŒ заблокировать {0}. Владелец и админиÑтратор конференции не могут быть заблокированы. @@ -78,15 +83,19 @@ service.gui.BAN_FAILED_NOT_ENOUGH_PERMISSIONS=Ðе удалоÑÑŒ заблоки service.gui.BRB_MESSAGE=Ð’ данный момент Ñ Ð¾Ñ‚ÑутÑтвую, но Ñ Ð²ÐµÑ€Ð½ÑƒÑÑŒ. service.gui.BROWSE=ПроÑмотреть service.gui.BUSY_MESSAGE=Извините, но Ñ ÑÐµÐ¹Ñ‡Ð°Ñ Ð·Ð°Ð½ÑÑ‚. -service.gui.BUSY_STATUS=ЗанÑÑ‚ +service.gui.BUSY_STATUS=ЗанÑто service.gui.CALL=Вызов service.gui.CALL_CONTACT=Позвонить контакту service.gui.CALL_FAILED=Звонок не удалÑÑ service.gui.CALL_HISTORY_TOOL_TIP=Ðажмите, чтобы проÑмотреть иÑторию звонков +service.gui.CALL_HISTORY_GROUP_NAME=ИÑÑ‚Ð¾Ñ€Ð¸Ñ Ð²Ñ‹Ð·Ð¾Ð²Ð¾Ð² service.gui.CALL_VIA=Позвонить через: service.gui.CALL_NAME_OR_NUMBER=Введите Ð¸Ð¼Ñ Ð¸Ð»Ð¸ номер -service.gui.CALL_NOT_SUPPORTING_PARTICIPANT=Ðтот звонок поддерживает только учаÑтников из Ñети {0} и вашего {1} аккаунта. {2} не Ñодержит никаких адреÑов Ð´Ð»Ñ Ñтой Ñети или аккаунта. +service.gui.CALL_NOT_SUPPORTING_PARTICIPANT=Ðтот звонок поддерживает только учаÑтников из Ñети {0} и вашего {1} аккаунта. {2} не Ñодержит адреÑов Ð´Ð»Ñ Ñтой Ñети или аккаунта. service.gui.CALL_WITH=Ðбонент +service.gui.CALL_NO_AUDIO_DEVICE=Ð’Ñ‹ не выбрали ни одного аудиоуÑтройÑтва. +service.gui.CALL_NO_AUDIO_CODEC=У Ð²Ð°Ñ Ð½Ðµ уÑтановлены аудиокодеки. +service.gui.CALL_NO_DEVICE_CODECS_Q=Хотите продолжить вызов? service.gui.CANCEL=&Отмена service.gui.CHAT=Чат service.gui.CHANGE_FONT=Изменить шрифт @@ -95,16 +104,24 @@ service.gui.CHANGE_ROOM_SUBJECT_LABEL=Ð’ поле ниже вы можете вРservice.gui.CHANGE_NICK=Изменить ник service.gui.CHANGE_NICKNAME=Изменить ник... service.gui.CHANGE_NICKNAME_LABEL=Ð’ поле ниже вы можете ввеÑти ваш новый ник. -service.gui.CHANGE_VIDEO_QUALITY=Изменить качеÑтво входÑщего видео +service.gui.CHANGE_NICKNAME_ERROR=Ðе удалоÑÑŒ изменить ник +service.gui.CHANGE_NICKNAME_CONFLICT_ERROR=Такое Ð¸Ð¼Ñ ÑƒÐ¶Ðµ ÑущеÑтвует +service.gui.CHANGE_VIDEO_QUALITY=Изменить качеÑтво передаваемого видео +service.gui.CHAT_CONFERENCE_LABEL=ÐšÐ¾Ð½Ñ„ÐµÑ€ÐµÐ½Ñ†Ð¸Ñ +service.gui.CHAT_CONFERENCE_ITEM_LABEL={0} ÐºÐ¾Ð½Ñ„ÐµÑ€ÐµÐ½Ñ†Ð¸Ñ service.gui.CHAT_ROOM_ALREADY_JOINED=ÐšÐ¾Ð½Ñ„ÐµÑ€ÐµÐ½Ñ†Ð¸Ñ {0} уже подключена. -service.gui.CHAT_ROOM_CONFIGURATION=ÐšÐ¾Ð½Ñ„Ð¸Ð³ÑƒÑ€Ð°Ñ†Ð¸Ñ ÐºÐ¾Ð½Ñ„ÐµÑ€ÐµÐ½Ñ†Ð¸Ð¸ {0} +service.gui.CHAT_ROOM_CONFIGURATION=ÐšÐ¾Ð½Ñ„Ð¸Ð³ÑƒÑ€Ð°Ñ†Ð¸Ñ ÐºÐ¾Ð¼Ð½Ð°Ñ‚Ñ‹ {0} service.gui.CHAT_ROOM_CONFIGURATION_FAILED=Ðе удалоÑÑŒ открыть наÑтройки конференции {0}. +service.gui.CHAT_ROOM_CONFIGURATION_FORBIDDEN=Ðе удалоÑÑŒ отобразить конфигурацию комнаты {0}. Только владелец комнаты может увидеть или изменить конфигурацию. service.gui.CHAT_ROOM_CONFIGURATION_SUBMIT_FAILED=Произошла ошибка во Ð²Ñ€ÐµÐ¼Ñ Ð¿Ñ€Ð¸Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ ÐºÐ¾Ð½Ñ„Ð¸Ð³ÑƒÑ€Ð°Ñ†Ð¸Ð¸ конференции {0}. +service.gui.CHAT_ROOM_CONFIGURATION_MEMBERS_EDIT_TITLE=Редактировать ÑпиÑок учаÑтников service.gui.CHAT_ROOM_USER_JOINED=подключилÑÑ Ðº {0} service.gui.CHAT_ROOM_USER_LEFT=покинул {0} service.gui.CHAT_ROOM_USER_KICKED=был иÑключён из {0} service.gui.CHAT_ROOM_USER_QUIT=вышел из {0} +service.gui.CHAT_ROOM_REMOVE_BUTTON_TOOLTIP=Удалить выбранную комнату из ÑпиÑка Ñохранённых service.gui.CHAT_ROOM_NAME=Ð˜Ð¼Ñ ÐºÐ¾Ð½Ñ„ÐµÑ€ÐµÐ½Ñ†Ð¸Ð¸ +service.gui.CLEAR_CUSTOM_MESSAGES=ОчиÑтка пользовательÑких Ñообщений service.gui.ROOM_NAME=ÐšÐ¾Ð½Ñ„ÐµÑ€ÐµÐ½Ñ†Ð¸Ñ service.gui.AUTOJOIN=ÐвтоматичеÑкий вход service.gui.CHANGE_PASSWORD=Сменить пароль @@ -117,10 +134,12 @@ service.gui.CHAT_ROOM_OPTIONS=ÐаÑтройки конференции service.gui.CHAT_ROOM_REGISTRATION_REQUIRED=ÐšÐ¾Ð½Ñ„ÐµÑ€ÐµÐ½Ñ†Ð¸Ñ {0} требует региÑтрации Ð´Ð»Ñ Ð²Ñ…Ð¾Ð´Ð°. service.gui.CHAT_ROOM_REQUIRES_PASSWORD=ÐšÐ¾Ð½Ñ„ÐµÑ€ÐµÐ½Ñ†Ð¸Ñ {0} запроÑила пароль. service.gui.CHAT_ROOMS=Конференции -service.gui.CHAT_ROOM=Конференции +service.gui.CHAT_ROOM=Комната service.gui.CHAT_ROOM_SUBJECT_CHANGED={0} изменил тему на {1} service.gui.CHOOSE_CONTACT=Выберите контакт service.gui.CHOOSE_ACCOUNT=ПожалуйÑта, выберите один из указанных контактов. +service.gui.CITY=Город +service.gui.COUNTRY=Страна service.gui.SHOW_MORE_TOOLTIP=Ðажмите Ð´Ð»Ñ Ð¿Ð¾Ð´Ñ€Ð¾Ð±Ð½Ð¾Ñтей service.gui.CLEAR=ОчиÑтить service.gui.CLOSE=За&крыть @@ -146,16 +165,19 @@ service.gui.CONTACTS=Контакты service.gui.COPY=&Копировать service.gui.COPY_LINK=Копировать &ÑÑылку service.gui.CREATE=С&оздать +servoce.gui.CREATE_CALL_FAILED=Ðе удалоÑÑŒ Ñовершить звонок. service.gui.CREATE_CHAT_ROOM=&Создать конференцию... service.gui.CREATE_CHAT_ROOM_ERROR=Ðе удалоÑÑŒ Ñоздать конференцию {0}. service.gui.CREATE_CHAT_ROOM_WIZARD=МаÑтер ÑÐ¾Ð·Ð´Ð°Ð½Ð¸Ñ ÐºÐ¾Ð½Ñ„ÐµÑ€ÐµÐ½Ñ†Ð¸Ð¹ service.gui.CREATE_CONFERENCE_CALL=&Создать многопользовательÑкий звонок... service.gui.CREATE_CONFERENCE_CHAT=&Создать многопользовательÑкий чат... service.gui.CREATE_GROUP=&Создать группу... -service.gui.CREATE_GROUP_NAME=Ð’ поле ниже введите Ð¸Ð¼Ñ Ð³Ñ€ÑƒÐ¿Ð¿Ñ‹, которую хотите Ñоздать. +service.gui.CREATE_GROUP_NAME=Ð’ поле ниже введите Ð¸Ð¼Ñ Ð³Ñ€ÑƒÐ¿Ð¿Ñ‹, которую вы хотите Ñоздать. service.gui.CREATE_FIRST_GROUP_WIZARD=Ваш ÑпиÑок контактов не Ñодержит ни одной группы. ПожалуйÑта, Ñначала Ñоздайте группу (Файл/Создать группу). service.gui.CREATE_VIDEO_BRIDGE=Создать &видео-моÑÑ‚... service.gui.CREATE_VIDEO_BRIDGE_MENU=Создать &видеомоÑÑ‚ +service.gui.CREATE_JOIN_VIDEO_CONFERENCE=Создать/ПриÑоединитьÑÑ Ðº видео конференции +service.gui.CREATE_VIDEO_CONFERENCE=Создать новую видео конференцию Ð´Ð»Ñ Ñтой комнаты service.gui.CONTACT_INFO_NOT_SUPPORTED=Данный контакт не поддерживает Ñетевую контактную информацию service.gui.CUT=Ð’&ырезать service.gui.DATE=Дата @@ -164,17 +186,19 @@ service.gui.DENY=&Отклонить service.gui.DESKTOP_SHARING_WARNING=<b>Ð’Ñ‹ уверены, что хотите предоÑтавить доÑтуп к вашему Ñкрану?</b> <br> Ðажатие OK позволит абонентам, учаÑтвующим в разговоре, видеть Ñодержимое вашего Ñкрана. service.gui.DIALPAD=Ðомеронабиратель service.gui.DISPLAY_NAME=Отображаемое Ð¸Ð¼Ñ -service.gui.DISCONNECTED_STATUS=Разъединено +service.gui.DISCONNECTED_STATUS=Отключено service.gui.DND_STATUS=Ðе беÑпокоить service.gui.DO_NOT_ASK_AGAIN=Ðе Ñпрашивать Ñнова service.gui.DO_NOT_SHOW_AGAIN=Ðе показывать Ñто Ñообщение Ñнова service.gui.DOWNLOAD_NOW=&Загрузить ÑÐµÐ¹Ñ‡Ð°Ñ -service.gui.DRAG_FOR_SHARING=ПеренеÑите Ñюда Ð´Ð»Ñ ÑовмеÑтного доÑтупа... +service.gui.DRAG_FOR_SHARING=ПеремеÑтите Ñюда Ð´Ð»Ñ Ð¿Ñ€ÐµÐ´Ð¾ÑÑ‚Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð¾Ð±Ñ‰ÐµÐ³Ð¾ доÑтупа... service.gui.DURATION=длительноÑÑ‚ÑŒ +service.gui.DESTROY_CHATROOM=Удалить комнату +service.gui.DESTROY_MESSAGE=Сообщите другим учаÑтникам причину и Ð°Ð´Ñ€ÐµÑ Ð°Ð»ÑŒÑ‚ÐµÑ€Ð½Ð°Ñ‚Ð¸Ð²Ð½Ð¾Ð¹ комнаты Ð´Ð»Ñ Ð¿Ñ€Ð¸ÑоединениÑ. service.gui.EDIT=&Правка service.gui.EDITED_AT=отредактировано {0} -service.gui.EMAIL=Ðлектронный Ñщик: -service.gui.EMAILS=Ðлектронный Ñщик: +service.gui.EMAIL=ÐÐ»ÐµÐºÑ‚Ñ€Ð¾Ð½Ð½Ð°Ñ Ð¿Ð¾Ñ‡Ñ‚Ð° +service.gui.EMAILS=ПиÑьма service.gui.EMPTY_HISTORY=&ОчиÑтить иÑторию service.gui.ENABLE_DESKTOP_REMOTE_CONTROL=Включить управление удаленным рабочим Ñтолом service.gui.ENABLE_TYPING_NOTIFICATIONS=Сообщать другим, когда вы пишете им (поÑылать активноÑÑ‚ÑŒ чата) @@ -210,7 +234,7 @@ service.gui.FILE_TRANSFER_NOT_SUPPORTED=Контакт, выбранный ваРservice.gui.FILE_TRANSFER_PREPARING=Подготавливаю передачу файла Ð´Ð»Ñ {0}. ПожалуйÑта подождите... service.gui.FILE_TRANSFER_REQUEST_RECIEVED={0} делитÑÑ Ñ„Ð°Ð¹Ð»Ð¾Ð¼ Ñ Ð²Ð°Ð¼Ð¸. service.gui.FILE_DOES_NOT_EXIST=Указанный файл не найден. Он был удалён или перемещён. -service.gui.FILE_OPEN_FAILED=Ðе удалоÑÑŒ открыть файл. Он был удалён или перемещён. +service.gui.FILE_OPEN_FAILED=Ðе удалоÑÑŒ открыть файл. Он мог быть удалён или перемещён. service.gui.FILE_OPEN_NOT_SUPPORTED=ÐžÐ¿ÐµÑ€Ð°Ñ†Ð¸Ñ Ð¾Ñ‚ÐºÑ€Ñ‹Ñ‚Ð¸Ñ Ñ„Ð°Ð¹Ð»Ð° не поддерживаетÑÑ Ñ‚ÐµÐºÑƒÑ‰ÐµÐ¹ верÑией Jitsi. service.gui.FILE_OPEN_NO_PERMISSION=Ð’Ñ‹ не имеете доÑтаточных прав Ð´Ð»Ñ Ð¾Ñ‚ÐºÑ€Ñ‹Ñ‚Ð¸Ñ Ñ„Ð°Ð¹Ð»Ð°. ПожалуйÑта, проверьте ваши права на чтение и попробуйте Ñнова. service.gui.FILE_OPEN_NO_APPLICATION=Мы не Ñмогли найти Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð°ÑÑоциированного Ñ Ð´Ð°Ð½Ð½Ñ‹Ð¼ типом файла. @@ -227,6 +251,7 @@ service.gui.FONT_ITALIC=КурÑив service.gui.FONT_SIZE=Размер service.gui.FONT_STYLE=Стиль service.gui.FONT_UNDERLINE=Подчеркивание +service.gui.FROM={0} из {1} service.gui.GRANT_OWNERSHIP=Добавить к владельцам... service.gui.GRANT_ADMIN=Добавить к админиÑтраторам... service.gui.GRANT_MODERATOR=Добавить к модераторам @@ -241,7 +266,14 @@ service.gui.HIDE_OFFLINE_CONTACTS=Скрыть контакты не в Ñети service.gui.HIDE_MAIN_WINDOW=<DIV>Ðажатие креÑтика в углу окошка не завершит приложение, а только <BR> ÑпрÑчет его. ЕÑли желаете завершить приложение, выберите Файл/Выйти.</DIV> service.gui.HISTORY=&ИÑÑ‚Ð¾Ñ€Ð¸Ñ service.gui.HISTORY_CONTACT=ИÑÑ‚Ð¾Ñ€Ð¸Ñ - {0} -service.gui.HOME=Домашний +service.gui.HISTORY_TOGGLE_PER_CONTACT=Выключить иÑторию Ð´Ð»Ñ Ñтого контакта +service.gui.HISTORY_ERASE_PER_CONTACT=Стереть вÑÑŽ иÑторию контакта +service.gui.HISTORY_ERASE_PER_CHATROOM=Стереть вÑÑŽ иÑторию комнаты +service.gui.HISTORY_ERASE_ALL=Стереть вÑÑŽ иÑторию в {0} +service.gui.HISTORY_REMOVE_PER_CONTACT_WARNING=ДейÑтвительно окончательно уничтожить вÑе локально Ñохраненные ÑÐ¾Ð¾Ð±Ñ‰ÐµÐ½Ð¸Ñ {0}? +service.gui.HISTORY_REMOVE_ALL_WARNING=ДейÑтвительно окончательно уничтожить вÑе локально Ñохраненные ÑообщениÑ? +service.gui.HISTORY_REMOVE_ERROR=Ошибка ÑƒÐ´Ð°Ð»ÐµÐ½Ð¸Ñ Ð»Ð¾ÐºÐ°Ð»ÑŒÐ½Ð¾ Ñохраненных Ñообщений. +service.gui.HOME=Домой service.gui.HOME_PAGE=ДомашнÑÑ Ñтраница service.gui.HOUR=Ð’Ñ€ÐµÐ¼Ñ service.gui.ICE=ICE @@ -250,6 +282,8 @@ service.gui.IGNORE=&Игнорировать service.gui.INSERT_SMILEY=Ð’Ñтавить Ñмайлик service.gui.INCOMING_CALL=ВходÑщий звонок от: {0} service.gui.INCOMING_CALL_STATUS=ВходÑщий звонок +service.gui.INSTANT_MESSAGINGS=IMs +service.gui.IM=IM service.gui.INITIATING_CALL_STATUS=ОÑущеÑтвление вызова service.gui.INVITATION=ТекÑÑ‚ Ð¿Ñ€Ð¸Ð³Ð»Ð°ÑˆÐµÐ½Ð¸Ñ service.gui.INVITATION_RECEIVED=Приглашение принÑто @@ -261,26 +295,28 @@ service.gui.INVITE_CONTACT_TO_CHAT=ПриглаÑить контакты в ча service.gui.INVITE_CONTACT_TO_CALL=ПриглаÑить контакты к звонку service.gui.INVITE_CONTACT_TO_VIDEO_BRIDGE=ПриглаÑить контакты в видеомоÑÑ‚ service.gui.INVITE_REASON=Причина Ð¿Ñ€Ð¸Ð³Ð»Ð°ÑˆÐµÐ½Ð¸Ñ -service.gui.IS_CALLING=звонит... +service.gui.IS_CALLING={0} звонит... service.gui.IS_NOW={0} теперь {1} -service.gui.JITSI_WARNING=SIP Communicator был переименован в Jitsi.<br/>Загружайте Jitsi, еÑли Ð’Ñ‹ хотите иÑпользовать новую верÑию программы.<br/><br/>ПриноÑим Ñвои Ð¸Ð·Ð²Ð¸Ð½ÐµÐ½Ð¸Ñ Ð·Ð° возможные причиненные неудобÑтва. С уважением,<br/><br/>Команда разработчиков Jitsi +service.gui.JITSI_WARNING=SIP Communicator был переименован в Jitsi.<br/>ЕÑли Ð’Ñ‹ хотите иÑпользовать новую верÑию программы, пожалуйÑта загружайте Jitsi.<br/><br/>ПриноÑим Ñвои Ð¸Ð·Ð²Ð¸Ð½ÐµÐ½Ð¸Ñ Ð·Ð° возможные причиненные неудобÑтва.<br/><br/>Команда разработчиков Jitsi service.gui.JITSI_WARNING_TITLE=SIP Communicator теперь Ñтал Jitsi service.gui.JOIN=&Войти service.gui.JOIN_AS=Ð’&ойти как service.gui.CLOSE_CHAT_ROOM_DIALOG=З&акрыть +service.gui.JOB_TITLE=ДолжноÑÑ‚ÑŒ service.gui.JOIN_CHAT_ROOM=&Войти в конференцию... service.gui.JOIN_CHAT_ROOM_TITLE=Войти в конференцию service.gui.JOIN_CHAT_ROOM_NAME=ПожалуйÑта, введите Ð¸Ð¼Ñ ÐºÐ¾Ð½Ñ„ÐµÑ€ÐµÐ½Ñ†Ð¸Ð¸, в которую хотите войти. service.gui.JOIN_CHAT_ROOM_WIZARD=МаÑтер приÑÐ¾ÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ñ Ðº конференции +service.gui.JOIN_AUTOMATICALLY=ПриÑоединÑÑ‚ÑŒÑÑ Ð°Ð²Ñ‚Ð¾Ð¼Ð°Ñ‚Ð¸Ñ‡ÐµÑки service.gui.KICK=&Выгнать service.gui.KICK_FAILED=Ðе удалоÑÑŒ выгнать service.gui.KICK_FAILED_GENERAL_ERROR=Ðе удалоÑÑŒ выгнать {0}. Произошла Ð¾Ð±Ñ‰Ð°Ñ Ð¾ÑˆÐ¸Ð±ÐºÐ° Ñервера. service.gui.KICK_FAILED_NOT_ALLOWED=Ðе удалоÑÑŒ выгнать {0}. Владелец и админиÑтратор конференции не может быть выгнан. service.gui.KICK_FAILED_NOT_ENOUGH_PERMISSIONS=Ðе удалоÑÑŒ выгнать {0}. У Ð²Ð°Ñ Ð½ÐµÑ‚ на Ñто прав. service.gui.LAST=ПоÑледний -service.gui.LAST_NAME=ФамилиÑ: +service.gui.LAST_NAME=Ð¤Ð°Ð¼Ð¸Ð»Ð¸Ñ service.gui.LEAVE=&Покинуть -service.gui.LIMIT_REACHED_FOR_IP=У Ð²Ð°Ñ Ñлишком много региÑтраций Ñ Ð»Ð¾ÐºÐ°Ð»ÑŒÐ½Ð¾Ð³Ð¾ IP-адреÑа. Сервер {0} не позволÑет больше региÑтраций. +service.gui.LIMIT_REACHED_FOR_IP=У Ð²Ð°Ñ Ñлишком много региÑтраций Ñ Ð»Ð¾ÐºÐ°Ð»ÑŒÐ½Ð¾Ð³Ð¾ IP адреÑа и Ñервер {0} не позволÑет больше региÑтраций. service.gui.LIST=ПоÑледний service.gui.LOADING_ROOMS=Загружаю конференции... service.gui.LOADING=Загрузка... @@ -298,10 +334,10 @@ service.gui.MISSED_CALLS_TOOL_TIP=Пропущенные вызовы от: service.gui.MISSED_CALLS_MORE_TOOL_TIP= и {0} больше service.gui.MODERATOR=модератор service.gui.MORE=ПоÑмотреть больше -service.gui.MORE_LABEL=ПеремеÑтить +service.gui.MORE_LABEL=Еще service.gui.MOVE=ПеремеÑтить service.gui.MOVE_SUBCONTACT=П&еремеÑтить контакт -service.gui.MOVE_SUBCONTACT_MSG=Выберите контакт или группу, куда хотите перемеÑтить выбранный контакт. +service.gui.MOVE_SUBCONTACT_MSG=Выберите контакт или группу в которые Ð’Ñ‹ бы хотели перемеÑтить выбранный контакт. service.gui.MOVE_SUBCONTACT_FAILED=Контакт, который вы выбрали такой же как \n иÑточник. ПожалуйÑта, выберите другой контакт! service.gui.MOVE_SUBCONTACT_QUESTION=Ð’Ñ‹ уверенны, что желаете перемеÑтить {0} в {1}? service.gui.MOVE_TO_GROUP=&ПеремеÑтить в группу @@ -309,17 +345,19 @@ service.gui.MOVE_CONTACT=ПеремеÑтить контакт service.gui.MOVE_CONTACT_ERROR=&Контакт не может быть перемещён service.gui.MSG_DELIVERY_FAILURE=Сообщение выше не может быть доÑтавлено service.gui.MSG_DELIVERY_NOT_SUPPORTED=ИÑпользуемый вами протокол не поддерживает offline-ÑообщениÑ. Ð’Ñ‹ можете попробовать ÑвÑзатьÑÑ Ñ {0} через другой протокол или подождать пока он/она не подключатÑÑ Ðº Ñети. -service.gui.MSG_DELIVERY_INTERNAL_ERROR=Произошла внутреннÑÑ Ð¾ÑˆÐ¸Ð±ÐºÐ° приложениÑ. ПожалуйÑта, Ñообщите о ней Ñюда: http://www.jitsi.org/index.php/Development/BugsAndIssues. -service.gui.MSG_DELIVERY_ERROR=Ðе Ñмог доÑтавить Ñообщение. +service.gui.MSG_DELIVERY_INTERNAL_ERROR=Произошла внутреннÑÑ Ð¾ÑˆÐ¸Ð±ÐºÐ° приложениÑ. Возможно Ñто баг. ПожалуйÑта, Ñообщите о ней Ñюда: https://jitsi.org/Development/BugsAndIssues. +service.gui.MSG_DELIVERY_ERROR=Ðе удалоÑÑŒ доÑтавить Ñообщение. service.gui.MSG_DELIVERY_UNKNOWN_ERROR=Произошла неизвеÑÑ‚Ð½Ð°Ñ Ð¾ÑˆÐ¸Ð±ÐºÐ° во Ð²Ñ€ÐµÐ¼Ñ Ð´Ð¾Ñтавки вашего ÑообщениÑ. service.gui.MSG_NOT_DELIVERED=Произошла ÑÐµÑ‚ÐµÐ²Ð°Ñ Ð¾ÑˆÐ¸Ð±ÐºÐ°. ПожалуйÑта, проверьте вашу Ñетевую конфигурацию и попробуйте Ñнова. service.gui.MSG_NOT_POSSIBLE=Обмен ÑообщениÑми невозможен Ð´Ð»Ñ Ð´Ð°Ð½Ð½Ð¾Ð³Ð¾ контакта (не поддерживаетÑÑ Ð¿Ñ€Ð¾Ñ‚Ð¾ÐºÐ¾Ð»Ð¾Ð¼) service.gui.MSG_RECEIVED={0} напиÑал service.gui.MSG_SEND_CONNECTION_PROBLEM=Ð’Ñ‹ должны быть подключены к Ñети, чтобы иметь возможноÑÑ‚ÑŒ отправлÑÑ‚ÑŒ ÑообщениÑ. service.gui.MULTIPLE_LOGINS=Ð’Ñ‹ подключены больше одного раза к тому же аккаунту. Следующий аккаунт: Ð˜Ð¼Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ: {0}, Ð˜Ð¼Ñ Ñервера: {1} в данный момент отключён. +service.gui.MY_CHAT_ROOMS=Добавить комнату +service.gui.MY_CHAT_ROOMS_TITLE=Добавить комнату service.gui.MUTE=Отключить звук service.gui.MUTUALLY_ON_HOLD_STATUS=Ð’ ожидании -service.gui.NAME=ДейÑтвие +service.gui.NAME=Ð˜Ð¼Ñ service.gui.NETWORK=Сеть service.gui.NETWORK_FAILURE=Сбой Ñети service.gui.NEXT=&Следующий @@ -327,7 +365,8 @@ service.gui.NEW_ACCOUNT=Добавить новую учетную запиÑÑŒ. service.gui.NEW_MESSAGE=Ðовое Ñообщение service.gui.NEW_NAME=Ðовое Ð¸Ð¼Ñ service.gui.NEW_STATUS_MESSAGE=Ðовый ÑÑ‚Ð°Ñ‚ÑƒÑ ÑÐ¾Ð¾Ð±Ñ‰ÐµÐ½Ð¸Ñ -service.gui.NICKNAME=Ðик: +service.gui.NEW_STATUS_MESSAGE_SAVE=Сохранить ÑобÑтвенное Ñообщение +service.gui.NICKNAME=Ðик service.gui.NO=Ðет service.gui.NONE=Ðет service.gui.NO_CAMERA_AVAILABLE=Камера не подключена @@ -339,6 +378,7 @@ service.gui.NO_CONTACTS_FOUND=СоответÑтвующие контакты н service.gui.NO_CONTACTS_FOUND_SHORT=СоответÑтвующие контакты не найдены. service.gui.NO_MESSAGE=Ðет Ñообщений service.gui.NO_GROUP_CHAT_ACCOUNT_AVAILABLE=Ðе обнаружены аккаунты Ñ Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶ÐºÐ¾Ð¹ многопользовательÑкого чата. ПоÑетите jitsi.org Ð´Ð»Ñ Ð¿Ð¾Ð»ÑƒÑ‡ÐµÐ½Ð¸Ñ Ð±Ð¾Ð»ÐµÐµ подробной информации о том какие протоколы поддерживает многопользовательÑкий чат. +service.gui.NO_ONLINE_CONFERENCING_ACCOUNT=Ðккаунт не поддерживает конференции. Проверьте https://jitsi.org Ð´Ð»Ñ Ð¿Ð¾Ð»ÑƒÑ‡ÐµÐ½Ð¸Ñ Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ð¸ о протоколах Ñ Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶ÐºÐ¾Ð¹ конференций. service.gui.NO_ONLINE_TELEPHONY_ACCOUNT=По крайней мере один SIP Ðккаунт необходим Ð´Ð»Ñ Ñ‚Ð¾Ð³Ð¾, чтобы Ñделать звонок. Войдите в один из ваших SIP аккаунтов и повторите попытку. service.gui.NOT_AUTHORIZED=Ðе авторизован service.gui.NON_EMPTY_CHAT_WINDOW_CLOSE=Ð’ Ñтом чате еÑÑ‚ÑŒ не отправленное Ñообщение. Ð’Ñ‹ уверены, что хотите закрыть Ñтот чат? @@ -354,15 +394,22 @@ service.gui.OPEN_FILE_FROM_IMAGE=Дважды щелкните, чтобы отРservice.gui.OPEN_FOLDER=Открыть папку service.gui.OPEN_IN_BROWSER=Открыть в &браузере service.gui.OPTIONS=Опции +service.gui.OPEN_AUTOMATICALLY=Открыть комнату автоматичеÑки в Ñлучае +service.gui.OPEN_ON_IMPORTANT_MESSAGE=Открывать только Ð´Ð»Ñ Ð²Ð°Ð¶Ð½Ñ‹Ñ… Ñообщений service.gui.OR=или service.gui.OR_ENTER_PHONE_NUMBER=Или введите номер телефона здеÑÑŒ... -service.gui.ORGANIZATION=ОрганизациÑ: +service.gui.ORGANIZATION=ÐžÑ€Ð³Ð°Ð½Ð¸Ð·Ð°Ñ†Ð¸Ñ +service.gui.OTHER=Другое service.gui.OWNER=владелец комнаты +service.gui.ON_MOBILE_TOOLTIP=(на мобильный) service.gui.PASSWORD=Пароль service.gui.PASSWORD_CHANGE_FAILURE=Ðе удалоÑÑŒ изменить пароль service.gui.PASSWORD_CHANGE_SUCCESS=МаÑтер-пароль уÑпешно изменен service.gui.PASTE=&Ð’Ñтавить +service.gui.PERSONAL=Личное service.gui.PORT=Порт +service.gui.POSTAL_CODE=Почтовый Ð¸Ð½Ð´ÐµÐºÑ +service.gui.PREFERENCES=Параметры service.gui.PREFIX=ÐŸÑ€ÐµÑ„Ð¸ÐºÑ service.gui.PRESENCE=ПриÑутÑтвие service.gui.PRESS_ENTER_FOR_SUGGESTIONS='Enter' Ð´Ð»Ñ Ð¿Ñ€ÐµÐ´Ð»Ð¾Ð¶ÐµÐ½Ð¸Ð¹ @@ -371,13 +418,15 @@ service.gui.PREVIOUS=Предыдущий service.gui.PREVIOUS_TOOLTIP=Обзор Ñтарых разговоров service.gui.PRINT=&Печать service.gui.PROACTIVE_NOTIFICATION=пишет Ñообщение +service.gui.PROBLEMS_ENCOUNTERED=Ð’ÑтречающиеÑÑ Ð¿Ñ€Ð¾Ð±Ð»ÐµÐ¼Ñ‹ service.gui.PROTOCOL=Протокол service.gui.PUT_OFF_HOLD=СнÑÑ‚ÑŒ Ñ ÑƒÐ´ÐµÑ€Ð¶Ð°Ð½Ð¸Ñ service.gui.PUT_ON_HOLD=ПоÑтавить на удержание service.gui.QUIT=&Выйти service.gui.READY=Готово +service.gui.RECENT_MESSAGES=ПоÑледние разговоры service.gui.REASON=Причина -service.gui.RECONNECTION_LIMIT_EXCEEDED=Ð’Ñ‹ были отключены и подключены к Ñерверу Ñлишком быÑтро. Ðккаунт: Ð˜Ð¼Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ: {0}, Ñервер: {1} временно заблокирован. Подождите 3 минуты, прежде чем пытатьÑÑ Ð²Ð¾Ð¹Ñ‚Ð¸ Ñнова. +service.gui.RECONNECTION_LIMIT_EXCEEDED=Ð’Ñ‹ были отключены и подключены к Ñерверу Ñлишком быÑтро. Следующий аккаунт: Ð˜Ð¼Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ: {0}, Сервер: {1} временно заблокирован и придетÑÑ Ð½ÐµÐ¼Ð½Ð¾Ð³Ð¾ подождать, прежде чем пробовать войти Ñнова. service.gui.RE_REQUEST_AUTHORIZATION=Ð—Ð°Ð¿Ñ€Ð¾Ñ Ð¿Ð¾Ð²Ñ‚Ð¾Ñ€Ð½Ð¾Ð¹ авторизации service.gui.REFERRED_STATUS=Переведен service.gui.REJECT=&Отклонить @@ -427,13 +476,17 @@ service.gui.SEND_FILE=Отправить &файл service.gui.SELECT_CONTACT_SUPPORTING_INFO=Ð˜Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð¾Ð± Ñтом контакте отÑутÑтвует. service.gui.SEND_MESSAGE=&Отправить Ñообщение service.gui.SEND_AS_SMS=Отправить как SMS +service.gui.SEND_PRIVATE_MESSAGE=Отправить личное Ñообщение service.gui.SEND_SMS=Отправить SMS service.gui.SEND_SMS_DETAILS=Помните, что вам нужно ввеÑти номер телефона в международном формате, например, Ð½Ð°Ñ‡Ð¸Ð½Ð°Ñ Ñ +7 Ð´Ð»Ñ Ð Ð¾ÑÑии, +78001112233 service.gui.SEND_SMS_NOT_SUPPORTED=Выбранный протокол не поддерживает SMS Ñообщений. +service.gui.SMS=СМС service.gui.SEND_VIA=Отправить по service.gui.SENT=поÑланный +service.gui.SERVER_CHAT_ROOMS=Сервер комнаты service.gui.SET_GLOBAL_STATUS=УÑтановить глобальный ÑÑ‚Ð°Ñ‚ÑƒÑ service.gui.SET_STATUS_MESSAGE=УÑтановить ÑÑ‚Ð°Ñ‚ÑƒÑ ÑÐ¾Ð¾Ð±Ñ‰ÐµÐ½Ð¸Ñ +service.gui.SET_SUBJECT=Задать тему service.gui.SETTINGS=&Опции service.gui.SHARE_DESKTOP=&Открыть рабочий Ñтол service.gui.SHARE_DESKTOP_WITH_CONTACT=Открыть рабочий Ñтол контакту @@ -457,6 +510,7 @@ service.gui.STATUS_CHANGE_GENERAL_ERROR=Ðе удалоÑÑŒ изменить ÑÑ service.gui.STATUS_CHANGE_NETWORK_FAILURE=Ðе удалоÑÑŒ изменить ÑÑ‚Ð°Ñ‚ÑƒÑ ÑƒÑ‡ÐµÑ‚Ð½Ð¾Ð¹ запиÑи: Ð¸Ð¼Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ: {0}, Ð¸Ð¼Ñ Ñервера: {1}, в ÑвÑзи Ñ Ð½ÐµÐ¿Ð¾Ð»Ð°Ð´ÐºÐ°Ð¼Ð¸ в работе Ñети. service.gui.STATUS_MESSAGE_INFO=Ð’ облаÑти ниже вы можете задать новое Ñообщение вашего ÑтатуÑа. service.gui.STOP_SHARING=Прекратить общий доÑтуп +service.gui.STREET=Улица service.gui.SUBJECT=Тема service.gui.SUMMARY=Сводка service.gui.TELEPHONY=Ð¢ÐµÐ»ÐµÑ„Ð¾Ð½Ð¸Ñ @@ -474,19 +528,23 @@ service.gui.UNMUTE=Включить звук service.gui.USER_IDENTIFIER=Идентификатор пользователÑ: service.gui.USER_EXISTS_ERROR=Ðтот пользователь уже ÑущеÑтвует в выбранной Ñети. ПожалуйÑта, выберите другого Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ð¸Ð»Ð¸ Ñеть. service.gui.USERNAME_NULL=ПожалуйÑта, заполните Ñвое Ð¸Ð¼Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ð¸ пароль. +service.gui.WEBPAGE=Открыть веб Ñтраницу service.gui.ACCOUNT_CREATION_FAILED=Мы не Ñмогли Ñоздать учетную запиÑÑŒ из-за Ñледующей ошибки: {0} service.gui.UNKNOWN=ÐеизвеÑтный пользователь service.gui.UNKNOWN_STATUS=ÐеизвеÑтное ÑоÑтоÑние service.gui.UNREGISTERED_MESSAGE=Ðе удаетÑÑ Ð¿Ð¾Ð´ÐºÐ»ÑŽÑ‡Ð¸Ñ‚ÑŒ Ñледующие учетные запиÑи: Ð˜Ð¼Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ: {0}, Ð¸Ð¼Ñ Ñервера: {1}. Ð’ наÑтоÑщее Ð²Ñ€ÐµÐ¼Ñ Ð’Ñ‹ в автономном режиме. service.gui.USE_PROVISIONING=ИÑпользовать автонаÑтройку -service.gui.VALUE=Значение: +service.gui.VALUE=Значение service.gui.VIDEO_CALL=&Видеовызов +service.gui.VIA=через service.gui.VIA_SMS=Через SMS service.gui.VIEW=&Показать service.gui.VIEW_HISTORY=Показать &иÑторию service.gui.VIEW_SMILEYS=Показать &Ñмайлы service.gui.VIEW_TOOLBAR=Показать &тулбар service.gui.VIEW_SIMPLE_CHAT_THEME=ПроÑтой вид чата +service.gui.VOICEMAIL_NEW_URGENT_OLD_RECEIVED={0} новых ({1} важных) и {2} Ñтарых Ñообщений +service.gui.VOICEMAIL_NEW_URGENT_RECEIVED={0} новых ({1} Ñрочных) Ñообщений service.gui.VOICEMAIL_NEW_OLD_RECEIVED={0} новых и {1} Ñтарых Ñообщений service.gui.VOICEMAIL_NEW_RECEIVED={0} новых Ñообщений service.gui.VOICEMAIL_OLD_RECEIVED={0} Ñтарых Ñообщений @@ -512,7 +570,7 @@ service.gui.NEW=Ðовый service.gui.ENTER_FULL_SCREEN_TOOL_TIP=Развернуть на веÑÑŒ Ñкран service.gui.EXIT_FULL_SCREEN_TOOL_TIP=Выйти из полноÑкранного режима service.gui.HOLD_BUTTON_TOOL_TIP=Удержание разговора -service.gui.MUTE_BUTTON_TOOL_TIP=Выключить микрофон. Удерживайте кнопку Ð´Ð»Ñ Ð½Ð°Ñтройки громкоÑти микрофона +service.gui.MUTE_BUTTON_TOOL_TIP=Выключить микрофон или удерживайте кнопку Ð´Ð»Ñ Ð½Ð°Ñтройки громкоÑти микрофона service.gui.RECORD_BUTTON_TOOL_TIP=ЗапиÑÑŒ разговора service.gui.LOCAL_VIDEO_BUTTON_TOOL_TIP=Включить видеоÑвÑзь service.gui.SHOW_LOCAL_VIDEO_BUTTON_TOOL_TIP=Показать/Ñкрыть Ñвое видео @@ -528,14 +586,16 @@ service.gui.UPDATE=Обновить service.gui.MOBILE_PHONE=Мобильный service.gui.VIDEO_PHONE=Видеовызовы service.gui.WORK_PHONE=Рабочий -service.gui.PHONE=Телефон: -service.gui.PHONES=Телефон: +service.gui.PHONE=Телефон +service.gui.PHONES=Телефон +service.gui.EDIT_NOT_SUPPORTED=Редактирование Ñтой учетной запиÑи не поддерживаетÑÑ +service.gui.SHOW_PREVIEW=(показать превью) service.gui.ZID_NAME_SET=Ð˜Ð¼Ñ ZRTP идентификатора: service.gui.ZID_NAME_NOT_SET=Ðе задано Ð¸Ð¼Ñ ZRTP идентификатора. service.gui.ZID_NAME_BUTTON=Ðажмите Ð´Ð»Ñ ÑƒÑтановки имени ZRTP идентификатора. service.gui.ZID_NAME_DIALOG=Изменение имени ZRTP идентификатора -service.gui.ZID_NAME_UNEXPECTED=<html>ZRTP идентификатор не Ñовпадает Ñ Ñохраненным.<br><b>Сравните проверочные Ñлова Ñ ÑобеÑедником!</b><br>Отредактируйте ZRTP идентификатор и Ñохраните его, только еÑли проверочные Ñлова Ñовпадают.</html> +service.gui.ZID_NAME_UNEXPECTED=<html>ZRTP идентификатор не Ñовпадает Ñ Ñохраненным.<br><b>Сравните проверочные Ñлова Ñ ÑобеÑедником!</b><br>Отредактируйте ZRP идентификатор и Ñохраните его, только еÑли проверочные Ñлова Ñовпадают.</html> service.gui.JANUARY=Янв service.gui.FEBRUARY=Фев @@ -558,6 +618,8 @@ service.gui.callinfo.IS_CONFERENCE_FOCUS=ÐšÐ¾Ð½Ñ„ÐµÑ€ÐµÐ½Ñ†Ð¸Ñ service.gui.callinfo.IS_DEFAULT_ENCRYPTED=Шифрование включено service.gui.callinfo.CALL_TRANSPORT=ТранÑпорт Ñигнализации service.gui.callinfo.CALL_DURATION=ДлительноÑÑ‚ÑŒ вызова +service.gui.callinfo.TLS_PROTOCOL=Протокол TLS +service.gui.callinfo.VIEW_CERTIFICATE=ПроÑмотр Ñертификата service.gui.callinfo.CODEC=Кодек / ЧаÑтота service.gui.callinfo.NA=N.A. service.gui.callinfo.VIDEO_SIZE=Разрешение видео @@ -595,10 +657,10 @@ service.gui.callinfo.DISCARDED_TOTAL=Ð’Ñего отброшенных Ð¿Ð°ÐºÐµÑ service.gui.ALWAYS_TRUST=Ð’Ñегда доверÑÑ‚ÑŒ Ñтому Ñертификату service.gui.CERT_DIALOG_TITLE=Проверить Ñертификат -service.gui.CERT_DIALOG_DESCRIPTION_TXT=<html>{0} не может проверить подлинноÑÑ‚ÑŒ Ñервера при подключении к<br><b>{1}</b>.<br><br>Сертификат не ÑвлÑетÑÑ Ð´Ð¾Ð²ÐµÑ€ÐµÐ½Ð½Ñ‹Ð¼. Ðто означает, что Ñервер не может быть автоматичеÑки проверен.<br><br> Ð”Ð»Ñ Ð¿Ð¾Ð»ÑƒÑ‡ÐµÐ½Ð¸Ñ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ð¾Ð¹ информации, нажмите кнопку "Показать Ñертификат".<br><br>Ð’Ñ‹ хотите продолжить подключение?</html> -service.gui.CERT_DIALOG_DESCRIPTION_TXT_NOHOST=<html>{0} не может проверить подлинноÑÑ‚ÑŒ Ñертификата Ñервера<br><br>Сертификат не ÑвлÑетÑÑ Ð´Ð¾Ð²ÐµÑ€ÐµÐ½Ð½Ñ‹Ð¼. Ðто означает, что Ñервер не может быть автоматичеÑки проверен.<br><br> Ð”Ð»Ñ Ð¿Ð¾Ð»ÑƒÑ‡ÐµÐ½Ð¸Ñ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ð¾Ð¹ информации, нажмите кнопку "Показать Ñертификат".<br><br>Ð’Ñ‹ хотите продолжить подключение?</html> -service.gui.CERT_DIALOG_CLIENT_DESCRIPTION_TXT=<html>{0} не может проверить подлинноÑÑ‚ÑŒ клиента<br><br>Сертификат не ÑвлÑетÑÑ Ð´Ð¾Ð²ÐµÑ€ÐµÐ½Ð½Ñ‹Ð¼. Ðто означает, что клиент не может быть автоматичеÑки проверен.<br><br> Ð”Ð»Ñ Ð¿Ð¾Ð»ÑƒÑ‡ÐµÐ½Ð¸Ñ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ð¾Ð¹ информации, нажмите кнопку "Показать Ñертификат".<br><br>Ð’Ñ‹ хотите принÑÑ‚ÑŒ подключение?</html> -service.gui.CERT_DIALOG_PEER_DESCRIPTION_TXT=<html>{0} не может проверить подлинноÑÑ‚ÑŒ клиента {1}<br><br>Сертификат не ÑвлÑетÑÑ Ð´Ð¾Ð²ÐµÑ€ÐµÐ½Ð½Ñ‹Ð¼. Ðто означает, что клиент не может быть автоматичеÑки проверен.<br><br> Ð”Ð»Ñ Ð¿Ð¾Ð»ÑƒÑ‡ÐµÐ½Ð¸Ñ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ð¾Ð¹ информации, нажмите кнопку "Показать Ñертификат".<br><br>Ð’Ñ‹ хотите продолжить подключение?</html> +service.gui.CERT_DIALOG_DESCRIPTION_TXT=<html>{0} не может проверить подлинноÑÑ‚ÑŒ Ñервера при подключении к<br><b>{1}</b>.<br><br>Сертификат не ÑвлÑетÑÑ Ð´Ð¾Ð²ÐµÑ€ÐµÐ½Ð½Ñ‹Ð¼, Ñто означает, что Ñервер не может быть автоматичеÑки проверен.<br><br>Ð’Ñ‹ хотите продолжить подключение?<br> Ð”Ð»Ñ Ð¿Ð¾Ð»ÑƒÑ‡ÐµÐ½Ð¸Ñ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ð¾Ð¹ информации, нажмите кнопку "Показать Ñертификат".</html> +service.gui.CERT_DIALOG_DESCRIPTION_TXT_NOHOST=<html>{0} не может проверить подлинноÑÑ‚ÑŒ Ñертификата Ñервера.<br><br>Сертификат не ÑвлÑетÑÑ Ð´Ð¾Ð²ÐµÑ€ÐµÐ½Ð½Ñ‹Ð¼. Ðто означает, что Ñервер не<br> может быть автоматичеÑки проверен.Ð’Ñ‹ хотите продолжить подключение?<br><br> Ð”Ð»Ñ Ð¿Ð¾Ð»ÑƒÑ‡ÐµÐ½Ð¸Ñ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ð¾Ð¹ информации, нажмите кнопку "Показать Ñертификат".</html> +service.gui.CERT_DIALOG_CLIENT_DESCRIPTION_TXT=<html>{0} не может проверить подлинноÑÑ‚ÑŒ клиента.<br><br> Сертификат не ÑвлÑетÑÑ Ð´Ð¾Ð²ÐµÑ€ÐµÐ½Ð½Ñ‹Ð¼, Ñто означает, что клиент не<br> может быть автоматичеÑки проверен. Ð’Ñ‹ хотите принÑÑ‚ÑŒ подключение?<br><br> Ð”Ð»Ñ Ð¿Ð¾Ð»ÑƒÑ‡ÐµÐ½Ð¸Ñ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ð¾Ð¹ информации, нажмите кнопку "Показать Ñертификат".</html> +service.gui.CERT_DIALOG_PEER_DESCRIPTION_TXT=<html>{0} не может проверить подлинноÑÑ‚ÑŒ клиента {1}.<br><br> Сертификат не ÑвлÑетÑÑ Ð´Ð¾Ð²ÐµÑ€ÐµÐ½Ð½Ñ‹Ð¼, Ñто означает, что клиент не<br> может быть автоматичеÑки проверен. Ð’Ñ‹ хотите продолжить подключение?<br><br> Ð”Ð»Ñ Ð¿Ð¾Ð»ÑƒÑ‡ÐµÐ½Ð¸Ñ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ð¾Ð¹ информации, нажмите кнопку "Показать Ñертификат".</html> service.gui.CONTINUE_ANYWAY=Ð’Ñе равно продолжить service.gui.CERT_INFO_ISSUED_TO=<html><b>Кому выдан</b></html> service.gui.CERT_INFO_CN=Ð˜Ð¼Ñ Ñертификата: @@ -647,7 +709,7 @@ service.gui.security.SECURE_VIDEO=Видеопоток защищен service.gui.security.VIDEO_NOT_SECURED=Видеопоток не защищен service.gui.security.NO_VIDEO=Ðет видео service.gui.security.CIPHER=Шифр: {0} -service.gui.security.CALL_SECURED_TOOLTIP=Разговор защищен. +service.gui.security.CALL_SECURED_TOOLTIP=Разговор защищен. Ð”Ð»Ñ Ð¿Ð¾Ð»ÑƒÑ‡ÐµÐ½Ð¸Ñ Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ð¸ нажмите Ñюда. service.gui.security.CALL_NOT_SECURED_TOOLTIP=Разговор не защищен. service.gui.security.CALL_SECURED_COMPARE_TOOLTIP=Ðажмите здеÑÑŒ, чтобы Ñверить ключ Ñ ÑобеÑедником. service.gui.security.COMPARE_WITH_PARTNER=Сверьте ключ Ñ ÑобеÑедником и нажмите замочек Ð´Ð»Ñ Ð¿Ð¾Ð´Ñ‚Ð²ÐµÑ€Ð¶Ð´ÐµÐ½Ð¸Ñ. @@ -675,6 +737,7 @@ service.gui.avatar.imagepicker.WEBCAM_ERROR=Ошибка вебкамеры service.gui.security.encryption.required=ТребуетÑÑ ÑˆÐ¸Ñ„Ñ€Ð¾Ð²Ð°Ð½Ð¸Ðµ! + # impl.protocol.ssh #Contact Details Seperator(must not be part of contact data stored as persistent # data) @@ -688,7 +751,7 @@ impl.protocol.sip.XCAP_ERROR_UNAUTHORIZED=Ðеверное Ð¸Ð¼Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð² impl.systray.SET_STATUS=УÑтановить ÑÑ‚Ð°Ñ‚ÑƒÑ impl.systray.FAILED_TO_OPEN_ADD_CONTACT_DIALOG=Ðе удалоÑÑŒ открыть диалоговое окно "Добавить контакт". impl.systray.POPUP_MESSAGE_HANDLER=Уведомление на панели задач Windows -impl.swingnotification.POPUP_MESSAGE_HANDLER=Ð’Ñтроенное уведомление {0} +impl.swingnotification.POPUP_MESSAGE_HANDLER={0} вÑплывающих Ñообщений impl.growlnotification.POPUP_MESSAGE_HANDLER=Звуковое уведомление impl.galagonotification.POPUP_MESSAGE_HANDLER=Ð£Ð²ÐµÐ´Ð¾Ð¼Ð»ÐµÐ½Ð¸Ñ Ñ€Ð°Ð±Ð¾Ñ‡ÐµÐ³Ð¾ Ñтола freedesktop.org @@ -700,6 +763,10 @@ impl.gui.main.account.DUMMY_PROTOCOL_DESCRIPTION=выберите Ñеть # LDAP impl.ldap.CONFIG_FORM_TITLE=ÐаÑтройка LDAP +impl.ldap.GENERAL=Общие +impl.ldap.FIELDS=ÐŸÐ¾Ð»Ñ +impl.ldap.QUERY=Ð—Ð°Ð¿Ñ€Ð¾Ñ +impl.ldap.QUERY_DEFAULT=Создать автоматичеÑки impl.ldap.NEW=Ðовый impl.ldap.EDIT=изменить impl.ldap.REMOVE=Удалить @@ -739,9 +806,11 @@ impl.ldap.PHONE_PREFIX_EXAMPLE=Ðапример: +7 plugin.addrbook.ADDRESS_BOOKS=ÐдреÑÐ½Ð°Ñ ÐºÐ½Ð¸Ð³Ð° plugin.addrbook.ENABLE_MACOSX_ADDRESSBOOK=Включить поиÑк в адреÑной книге MacOSX plugin.addrbook.ENABLE_MICROSOFT_OUTLOOK=Включить поиÑк контактов в Microsoft Outlook -plugin.addrbook.DESCRIPTION=ЕÑли включено, будет производитьÑÑ Ð¿Ð¾Ð¸Ñк в ÑиÑтемной адреÑной книге. Ð’Ñе ÑоответÑтвующие контакты из адреÑной книги поÑвÑÑ‚ÑÑ Ð² вашем ÑпиÑке контактов. +plugin.addrbook.DESCRIPTION=ЕÑли включено, будет производитьÑÑ Ð¿Ð¾Ð¸Ñк в ÑиÑтемной адреÑной книге и вÑе ÑоответÑтвующие контакты из адреÑной книги поÑвÑÑ‚ÑÑ Ð² вашем ÑпиÑке контактов. +plugin.addrbook.DEFAULT_IM_APP=Сделать Jitsi клиентом Ð´Ð»Ñ Ð¼Ð³Ð½Ð¾Ð²ÐµÐ½Ð½Ð¾Ð³Ð¾ обмена ÑообщениÑми по умолчанию (Ð˜Ð½Ñ‚ÐµÐ³Ñ€Ð°Ñ†Ð¸Ñ Ñ Outlook) plugin.addrbook.PREFIX=Телефонный Ð¿Ñ€ÐµÑ„Ð¸ÐºÑ plugin.addrbook.PREFIX_EXAMPLE=Ðапример: +7 +plugin.addrbook.MAKE_OUTLOOK_DEFAULT_MAIL_CLIENT=Сделать Outlook почтовым клиентом по умолчанию # Google Contacts impl.googlecontacts.CONFIG_FORM_TITLE=Контакты Google @@ -761,17 +830,30 @@ impl.googlecontacts.WRONG_CREDENTIALS=Ðеверные данные Ð´Ð»Ñ Ð°ÐºÐ plugin.accountinfo.TITLE=Ð˜Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð¾Ð± аккаунте plugin.accountinfo.EXTENDED=РаÑширенные plugin.accountinfo.NOT_SUPPORTED=Ð˜Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð¾Ð± аккаунте отÑутÑтвует. -plugin.accountinfo.DISPLAY_NAME=Отображаемое Ð¸Ð¼Ñ +plugin.accountinfo.SELECT_ACCOUNT=Выберите учётную запиÑÑŒ: +plugin.accountinfo.DISPLAY_NAME=Отображаемое имÑ: plugin.accountinfo.FIRST_NAME=ИмÑ: plugin.accountinfo.MIDDLE_NAME=ОтчеÑтво: plugin.accountinfo.LAST_NAME=ФамилиÑ: plugin.accountinfo.NICKNAME=Ðик: +plugin.accountinfo.URL=URL: plugin.accountinfo.AGE=ВозраÑÑ‚: plugin.accountinfo.BDAY=Дата рождениÑ: plugin.accountinfo.GENDER=Пол: +plugin.accountinfo.STREET=ÐдреÑ: +plugin.accountinfo.CITY=Город: +plugin.accountinfo.REGION=ОблаÑÑ‚ÑŒ: +plugin.accountinfo.POST=Почтовый индекÑ: plugin.accountinfo.EMAIL=Ðлектронный Ñщик: plugin.accountinfo.PHONE=Телефон: +plugin.accountinfo.MOBILE_PHONE=Мобильный телефон: +plugin.accountinfo.ORGANIZATION=ОрганизациÑ: +plugin.accountinfo.JOB_TITLE=ДолжноÑÑ‚ÑŒ: +plugin.accountinfo.ABOUT_ME=Обо мне: +plugin.accountinfo.ABOUT_ME_MAX_CHARACTERS=200 plugin.accountinfo.USER_PICTURES=Фотографии Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ +plugin.accountinfo.GLOBAL_ICON=ИÑпользовать общий значок +plugin.accountinfo.LOCAL_ICON=ИÑпользовать Ñледующий значок: plugin.accountinfo.CHANGE=Изменить plugin.accountinfo.ONLY_MESSAGE=Только ÑÐ¾Ð¾Ð±Ñ‰ÐµÐ½Ð¸Ñ @@ -797,8 +879,8 @@ plugin.branding.ABOUT_WINDOW_TITLE=О Ð½Ð°Ñ {0} plugin.branding.LOGO_MESSAGE=Open Source VoIP && Обмен мгновенными ÑообщениÑми plugin.branding.LOADING=Загрузка plugin.branding.ABOUT_MENU_ENTRY=&О программе -plugin.branding.WELCOME_MESSAGE=<DIV color={0}>{1} в наÑтоÑщее Ð²Ñ€ÐµÐ¼Ñ Ð² Ñтадии активной разработки. ВерÑиÑ, Ð·Ð°Ð¿ÑƒÑ‰ÐµÐ½Ð½Ð°Ñ Ð²Ð°Ð¼Ð¸, ÑкÑÐ¿ÐµÑ€Ð¸Ð¼ÐµÐ½Ñ‚Ð°Ð»ÑŒÐ½Ð°Ñ Ð¸ может работать не так как вы ожидаете. ПожалуйÑта, обратитеÑÑŒ к {2} Ð´Ð»Ñ Ð¿Ð¾Ð»ÑƒÑ‡ÐµÐ½Ð¸Ñ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ð¾Ð¹ информации.</DIV> -plugin.branding.COPYRIGHT=<DIV><font size=3 color={0}>(c)2003-2012 Copyright <b>jitsi.org</b>. Ð’Ñе права защищены. ПоÑетите <a href="http://jitsi.org">http://jitsi.org</a>.</font></DIV> +plugin.branding.WELCOME_MESSAGE=<DIV color={0}>{1} в наÑтоÑщее Ð²Ñ€ÐµÐ¼Ñ Ð² Ñтадии активной разработки. ВерÑиÑ, Ð·Ð°Ð¿ÑƒÑ‰ÐµÐ½Ð½Ð°Ñ Ð²Ð°Ð¼Ð¸, ÑкÑÐ¿ÐµÑ€Ð¸Ð¼ÐµÐ½Ñ‚Ð°Ð»ÑŒÐ½Ð°Ñ Ð¸ может работать ÐЕ ТÐК как вы ожидаете. ПожалуйÑта, обратитеÑÑŒ к {2} Ð´Ð»Ñ Ð¿Ð¾Ð»ÑƒÑ‡ÐµÐ½Ð¸Ñ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ð¾Ð¹ информации.</DIV> +plugin.branding.COPYRIGHT=<DIV><font size=3 color={0}>(c)2003-2013 Copyright <b>jitsi.org</b>. Ð’Ñе права защищены. ПоÑетите <a href="https://jitsi.org">https://jitsi.org</a>.</font></DIV> plugin.branding.LICENSE=<DIV color={0}><b>Jitsi</b> раÑпроÑтранÑетÑÑ Ð¿Ð¾ лицензии LGPL (<a href="http://www.gnu.org">http://www.gnu.org</a>).</DIV> # Dict protocol @@ -810,7 +892,7 @@ plugin.dictaccregwizz.NO_MATCH=Ðет Ñовпадений plugin.dictaccregwizz.MATCH_RESULT=Определений Ð´Ð»Ñ "{0}" не найдено, может быть, вы имеете в виду:\n plugin.dictaccregwizz.INVALID_DATABASE=Текущего ÑÐ»Ð¾Ð²Ð°Ñ€Ñ "{0}" не ÑущеÑтвует на Ñервере. plugin.dictaccregwizz.INVALID_STRATEGY=ÐынешнÑÑ ÑÑ‚Ñ€Ð°Ñ‚ÐµÐ³Ð¸Ñ Ð¾Ñ‚ÑутÑтвует на Ñервере. -plugin.dictaccregwizz.PROTOCOL_NAME=DICT +plugin.dictaccregwizz.PROTOCOL_NAME=Dict plugin.dictaccregwizz.PROTOCOL_DESCRIPTION=DICT протокол plugin.dictaccregwizz.HOST=ХоÑÑ‚ plugin.dictaccregwizz.SERVER_INFO=Ð˜Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð¾ Ñервере @@ -836,6 +918,7 @@ plugin.facebookaccregwizz.USERNAME_AND_PASSWORD=Ð˜Ð¼Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ # generalconfig plugin.generalconfig.AUTO_START=ÐвтоматичеÑкий запуÑк {0} при загрузке компьютера +plugin.generalconfig.CHATALERTS_ON_MESSAGE=ИÑпользовать панель задач / облаÑÑ‚ÑŒ уведомлений Ð´Ð»Ñ Ð²Ñ…Ð¾Ð´Ñщих звонков и Ñообщений plugin.generalconfig.GROUP_CHAT_MESSAGES=Группировать текÑтовые чаты в одном окне plugin.generalconfig.LOG_HISTORY=ИÑÑ‚Ð¾Ñ€Ð¸Ñ Ñ‡Ð°Ñ‚Ð° plugin.generalconfig.SHOW_HISTORY=Показывать @@ -847,6 +930,7 @@ plugin.generalconfig.TRANSPARENCY=ПрозрачноÑÑ‚ÑŒ plugin.generalconfig.ENABLE_TRANSPARENCY=Включить прозрачноÑÑ‚ÑŒ plugin.generalconfig.DEFAULT_LANGUAGE=Язык интерфейÑа plugin.generalconfig.DEFAULT_LANGUAGE_RESTART_WARN=Ð˜Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð²ÑтупÑÑ‚ в Ñилу при Ñледующем запуÑке Jitsi. +plugin.generalconfig.DEFAULT_LANGUAGE_TRANSLATED={0}% переведено plugin.generalconfig.SIP_CLIENT_PORT=Порт SIP plugin.generalconfig.SIP_CLIENT_SECURE_PORT=БезопаÑный порт SIP plugin.generalconfig.SIP_SSL_PROTOCOLS=Разрешенные протоколы SSL/TLS @@ -856,12 +940,12 @@ plugin.generalconfig.STARTUP_CONFIG=ЗапуÑк plugin.generalconfig.LEAVE_CHATROOM_ON_WINDOW_CLOSE=Сообщить о выходе из чата при закрытии окна plugin.generalconfig.REMOVE_SPECIAL_PHONE_SYMBOLS=Удалить Ñпециальные Ñимволы из телефонного номера, прежде чем Ñделать вызов plugin.generalconfig.ACCEPT_PHONE_NUMBER_WITH_ALPHA_CHARS=Преобразовывать буквы в цифры телефонного номера -plugin.generalconfig.ACCEPT_PHONE_NUMBER_WITH_ALPHA_CHARS_EXAMPLE=например, +1-800-MYPHONE преобразуетÑÑ Ð² +1-800-694663 +plugin.generalconfig.ACCEPT_PHONE_NUMBER_WITH_ALPHA_CHARS_EXAMPLE=напр. +1-800-MYPHONE преобразуетÑÑ Ð² +1-800-694663 plugin.generalconfig.SIP_CALL_CONFIG=SIP plugin.generalconfig.OPUS_CONFIG=Кодек Opus plugin.generalconfig.OPUS_USE_DTX=ИÑпользовать DTX: plugin.generalconfig.OPUS_USE_FEC=ИÑпользовать Inband FEC: -plugin.generalconfig.SILK_CONFIG=SILK +plugin.generalconfig.SILK_CONFIG=Silk plugin.generalconfig.SILK_USE_FEC=ИÑпользовать Inband FEC: plugin.generalconfig.SILK_ALWAYS_ASSUME_PACKET_LOSS=Ð’Ñегда учитывать потери пакетов: plugin.generalconfig.SILK_SAT=Порог голоÑовой активноÑти (0-1): @@ -876,7 +960,7 @@ plugin.gibberishaccregwizz.USERNAME_AND_PASSWORD=Ð˜Ð´ÐµÐ½Ñ‚Ð¸Ñ„Ð¸ÐºÐ°Ñ†Ð¸Ñ # icqaccregwizz plugin.icqaccregwizz.PROTOCOL_NAME=ICQ -plugin.icqaccregwizz.PROTOCOL_DESCRIPTION=Протокол ICQ +plugin.icqaccregwizz.PROTOCOL_DESCRIPTION=AOL ICQ протокол plugin.icqaccregwizz.USERNAME=Ðомер ICQ: plugin.icqaccregwizz.REGISTER_NEW_ACCOUNT_TEXT=Ð’ Ñлучае, еÑли вы не имеете учетной запиÑи ICQ, нажмите на Ñту кнопку, чтобы Ñоздать новую. plugin.icqaccregwizz.REGISTER_NEW_ACCOUNT=РегиÑÑ‚Ñ€Ð°Ñ†Ð¸Ñ Ð½Ð¾Ð²Ð¾Ð¹ учетной запиÑи @@ -915,7 +999,7 @@ plugin.jabberaccregwizz.RESOURCE=РеÑÑƒÑ€Ñ plugin.jabberaccregwizz.AUTORESOURCE=ÐвтоматичеÑкое Ñоздание реÑурÑа plugin.jabberaccregwizz.PRIORITY=Приоритет plugin.jabberaccregwizz.XMPP_ERROR=Ошибка XMPP -plugin.jabberaccregwizz.UNKNOWN_XMPP_ERROR=ÐеизвеÑÑ‚Ð½Ð°Ñ Ð¾ÑˆÐ¸Ð±ÐºÐ° XMPP. УбедитеÑÑŒ, что Ð¸Ð¼Ñ Ñервера, ÑвлÑетÑÑ Ð¿Ñ€Ð°Ð²Ð¸Ð»ÑŒÐ½Ñ‹Ð¼. +plugin.jabberaccregwizz.UNKNOWN_XMPP_ERROR=ÐеизвеÑÑ‚Ð½Ð°Ñ Ð¾ÑˆÐ¸Ð±ÐºÐ° XMPP ({0)}. УбедитеÑÑŒ, что Ð¸Ð¼Ñ Ñервера, ÑвлÑетÑÑ Ð¿Ñ€Ð°Ð²Ð¸Ð»ÑŒÐ½Ñ‹Ð¼. plugin.jabberaccregwizz.NOT_SAME_PASSWORD=Пароли не Ñовпадают. plugin.jabberaccregwizz.OVERRIDE_SERVER_DEFAULT_OPTIONS=Переопределить параметры Ñервера по умолчанию plugin.jabberaccregwizz.ADVANCED_OPTIONS=Дополнительные параметры @@ -952,9 +1036,9 @@ plugin.jabberaccregwizz.NEW_PASSWORD_CONFIRM=Повторите пароль plugin.jabberaccregwizz.PORT_FIELD_INVALID=ПожалуйÑта, необходимо указать верный порт Ð´Ð»Ñ Ð¿Ñ€Ð¾Ð´Ð¾Ð»Ð¶ÐµÐ½Ð¸Ñ. plugin.jabberaccregwizz.HAS_TO_BE_LOGGED_IN=Ð”Ð»Ñ Ñмены Ð¿Ð°Ñ€Ð¾Ð»Ñ Ð½ÐµÐ¾Ð±Ñ…Ð¾Ð´Ð¸Ð¼Ð¾ выполнить вход на Ñервер. plugin.jabberaccregwizz.PASSWORD_EMPTY=Пароль пуÑтой. -plugin.jabberaccregwizz.TLS_REQUIRED=Соединение не зашифровано! Пароль не будет изменен. +plugin.jabberaccregwizz.TLS_REQUIRED=Соединение не иÑпользует TLS, пароль не будет изменен. plugin.jabberaccregwizz.PASSWORD_CHANGED=Пароль уÑпешно изменен -plugin.jabberaccregwizz.SERVER_NOT_SUPPORT_PASSWORD_CHANGE=Ваш Ñервер не поддерживает изменение паролÑ. +plugin.jabberaccregwizz.SERVER_NOT_SUPPORT_PASSWORD_CHANGE=Ваш XMPP Ñервер не поддерживает изменение паролÑ. plugin.jabberaccregwizz.PASSWORD_NOT_STORED=Пароль был изменен на Ñервере, но локальные наÑтройки обновлены не были plugin.jabberaccregwizz.ENTER_NEW_PASSWORD=ПожалуйÑта, введите Ваш новый пароль в оба полÑ: plugin.jabberaccregwizz.OVERRIDE_ENCODINGS=Переопределить глобальные наÑтройки кодеков @@ -1020,6 +1104,7 @@ plugin.sipaccregwizz.KEEP_ALIVE=Поддерживать активным plugin.sipaccregwizz.KEEP_ALIVE_METHOD=Метод поддержки plugin.sipaccregwizz.KEEP_ALIVE_INTERVAL=Интервал Ð¿ÐµÑ€ÐµÐ¿Ð¾Ð´ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ plugin.sipaccregwizz.KEEP_ALIVE_INTERVAL_INFO=От 1 до 3600 Ñекунд +plugin.sipaccregwizz.DTMF=DTMF plugin.sipaccregwizz.DTMF_METHOD=Метод DTMF plugin.sipaccregwizz.DTMF_AUTO=ÐвтоматичеÑки выбирать между RTP и Inband (нет SIP INFO) plugin.sipaccregwizz.DTMF_RTP=RTP (RFC2833 / RFC4733) @@ -1045,7 +1130,7 @@ plugin.sipaccregwizz.MWI=Ð˜Ð½Ð´Ð¸ÐºÐ°Ñ†Ð¸Ñ Ð½Ð°Ð»Ð¸Ñ‡Ð¸Ñ Ñообщений (M plugin.sipaccregwizz.VOICEMAIL_URI=URI голоÑовой почты plugin.sipaccregwizz.VOICEMAIL_CHECK_URI=URI Ð´Ð»Ñ Ð¿Ñ€Ð¾Ð²ÐµÑ€ÐºÐ¸ ГП plugin.sipaccregwizz.NOT_SAME_PASSWORD=Пароли не Ñовпадают. -plugin.sipaccregwizz.NO_CERTIFICATE=<нет> (иÑпользовать обычную проверку подлинноÑти) +plugin.sipaccregwizz.NO_CERTIFICATE=<none> (иÑпользовать обычную проверку подлинноÑти) plugin.sipaccregwizz.SAVP_OPTION=ИÑпользование RTP/SAVP plugin.sipaccregwizz.SAVP_OPTION_0=Выключено (иÑпользовать только RTP/AVP) plugin.sipaccregwizz.SAVP_OPTION_1=ОбÑзательно (предлагать и принимать только RTP/SAVP) @@ -1076,9 +1161,10 @@ plugin.sshaccregwizz.ACCOUNT_DETAILS=Ð˜Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð¾Ð± учетной з # status update plugin.autoaway.AUTO_STATUS=Ðвто отÑуÑтвие plugin.autoaway.ENABLE_CHANGE_STATUS=Изменить ÑтатуÑ, когда отошел -plugin.autoaway.AWAY_MINUTES=КоличеÑтво минут до перехода в режим ''Ðет на меÑте'': +plugin.autoaway.AWAY_MINUTES=Минут до Ð¿ÐµÑ€ÐµÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ Ð² ''Ðет на меÑте'': # updatechecker +plugin.updatechecker.DIALOG_TITLE=УÑтановить Ð¾Ð±Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ plugin.updatechecker.DIALOG_MESSAGE=<html>ÐÐ¾Ð²Ð°Ñ Ð²ÐµÑ€ÑÐ¸Ñ {0} доÑтупна Ð´Ð»Ñ ÑкачиваниÑ. plugin.updatechecker.DIALOG_MESSAGE_2=<br>{0} ({1}): <br> plugin.updatechecker.BUTTON_DOWNLOAD=Скачать @@ -1089,6 +1175,9 @@ plugin.updatechecker.DIALOG_NOUPDATE=Ваша верÑÐ¸Ñ ÑвлÑетÑÑ Ð°Ðº plugin.updatechecker.DIALOG_NOUPDATE_TITLE=Ðет новой верÑии plugin.updatechecker.DIALOG_MISSING_UPDATE=Обновление уÑтановщика не удалоÑÑŒ. +# usersearch +plugin.usersearch.USER_SEARCH=ПоиÑк пользователей + # whiteboard plugin.whiteboard.TITLE=ДоÑка риÑÐ¾Ð²Ð°Ð½Ð¸Ñ [Beta] plugin.whiteboard.MENU_ITEM=ДоÑка риÑÐ¾Ð²Ð°Ð½Ð¸Ñ @@ -1117,7 +1206,7 @@ plugin.whiteboard.PROPERTIES=СвойÑтва # yahoo accregwizz plugin.yahooaccregwizz.PROTOCOL_NAME=Yahoo! -plugin.yahooaccregwizz.PROTOCOL_DESCRIPTION=Протокол Yahoo. +plugin.yahooaccregwizz.PROTOCOL_DESCRIPTION=Протокол Ð´Ð»Ñ Ð¿Ð¾Ð´ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ Ð¸ Ð¾Ð±Ñ‰ÐµÐ½Ð¸Ñ Ð½Ð° Yahoo! Service. plugin.yahooaccregwizz.USERNAME=Ð˜Ð¼Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ: plugin.yahooaccregwizz.USERID_AND_PASSWORD=ID и пароль @@ -1129,13 +1218,13 @@ plugin.zeroaccregwizz.LAST_NAME=ФамилиÑ: plugin.zeroaccregwizz.EMAIL=Ðлектронный Ñщик: plugin.zeroaccregwizz.REMEMBER_CONTACTS=Запомнить Bonjour контакты? plugin.zeroaccregwizz.USERID_AND_PASSWORD=ID и пароль -plugin.zeroaccregwizz.USERID=Идентификатор Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ +plugin.zeroaccregwizz.USERID=ПользовательÑкий ID # gtalk accregwizz plugin.googletalkaccregwizz.PROTOCOL_NAME=Google Talk plugin.googletalkaccregwizz.PROTOCOL_DESCRIPTION=Протокол Google Talk plugin.googletalkaccregwizz.USERNAME=Google Talk Ð¸Ð¼Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ -plugin.googletalkaccregwizz.REGISTER_NEW_ACCOUNT_TEXT=Ð’ Ñлучае, еÑли у Ð²Ð°Ñ Ð½ÐµÑ‚ учетной запиÑи Google Talk, нажмите на Ñту кнопку, чтобы Ñоздать новую. +plugin.googletalkaccregwizz.REGISTER_NEW_ACCOUNT_TEXT=Ð’ Ñлучае, еÑли у Ð²Ð°Ñ Ð½ÐµÑ‚ учетной запиÑи Google Talk,</br> нажмите на Ñту кнопку, чтобы Ñоздать новую. plugin.googletalkaccregwizz.NEW_ACCOUNT_TITLE=Создание новой учетной запиÑи Google Talk # iptel accregwizz @@ -1188,6 +1277,7 @@ plugin.keybindings.globalchooser.SHORTCUT_PRIMARY=Сочетание ÐºÐ»Ð°Ð²Ð¸Ñ plugin.keybindings.globalchooser.SHORTCUT_SECOND=Дополнительно plugin.keybindings.globalchooser.PRESS_BTN=Ðажмите Ð´Ð»Ñ Ð½Ð°Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ ÑÐ¾Ñ‡ÐµÑ‚Ð°Ð½Ð¸Ñ ÐºÐ»Ð°Ð²Ð¸Ñˆ plugin.keybindings.globalchooser.PRESS_BTN_DOWN=Ожидание +plugin.keybindings.globalchooser.PUSH_TO_TALK=Push to talk plugin.keybindings.globalchooser.ENABLE_SPECIAL=Включить обнаружение Ñпециальных клавиш plugin.keybindings.PLUGIN_NAME=Ð¡Ð¾Ñ‡ÐµÑ‚Ð°Ð½Ð¸Ñ ÐºÐ»Ð°Ð²Ð¸Ñˆ plugin.keybindings.CHAT=Чат @@ -1249,6 +1339,7 @@ plugin.notificationconfig.event.DTMFTone.9=DTMF тон 9 plugin.notificationconfig.event.DTMFTone.*=DTMF тон * plugin.notificationconfig.event.DTMFTone.#=DTMF тон # plugin.notificationconfig.event.DeviceConfigurationChanged=ИзменилаÑÑŒ ÐºÐ¾Ð½Ñ„Ð¸Ð³ÑƒÑ€Ð°Ñ†Ð¸Ñ ÑƒÑтройÑтва +plugin.notificationconfig.event.NewSelectedDevice=Выбрано новое уÑтройÑтво # ZRTP Securing impl.media.security.WARNING_NO_RS_MATCH=<html>Ðет доÑтупного Ñохранённого общего ключа.<br/><b>РекомендуетÑÑ SAS проверка</b></html> @@ -1299,7 +1390,11 @@ impl.media.configform.VIDEO_MORE_SETTINGS=Дополнительно impl.media.configform.VIDEO_RESOLUTION=Разрешение видео impl.media.configform.VIDEO_FRAME_RATE=КоличеÑтво кадров (в Ñек.) impl.media.configform.VIDEO_RESET=Ð¡Ð±Ñ€Ð¾Ñ Ð½Ð°Ñтроек -impl.media.configform.AUDIO_DEVICE_CONFIG_MANAGMENT_CLICK=Ðажмите Ð´Ð»Ñ Ð½Ð°Ñтройки уÑтройÑтва +impl.media.configform.AUDIO_DEVICE_SELECTED_AUDIO_IN=Выбрано новое уÑтройÑтво Ð´Ð»Ñ Ð²Ð²Ð¾Ð´Ð° звука: +impl.media.configform.AUDIO_DEVICE_SELECTED_AUDIO_OUT=Выбрано новое уÑтройÑтво Ð´Ð»Ñ Ð²Ñ‹Ð²Ð¾Ð´Ð° звука: +impl.media.configform.AUDIO_DEVICE_SELECTED_AUDIO_NOTIFICATIONS=Выбрано новое уÑтройÑтво Ð´Ð»Ñ Ð¾Ð¿Ð¾Ð²ÐµÑ‰ÐµÐ½Ð¸Ð¹: +impl.media.configform.VIDEO_DEVICE_SELECTED=Выбрано новое уÑтройÑтво Ð´Ð»Ñ Ð²Ð¸Ð´ÐµÐ¾: +impl.media.configform.AUDIO_DEVICE_CONFIG_MANAGMENT_CLICK=Ðажмите Ð´Ð»Ñ Ð½Ð°Ñтройки уÑтройÑтв impl.neomedia.configform.AUDIO=Ðудио impl.neomedia.configform.VIDEO=Видео @@ -1307,10 +1402,12 @@ impl.neomedia.configform.VIDEO=Видео impl.neomedia.configform.H264=H.264 impl.neomedia.configform.H264.defaultProfile=Профиль Ð´Ð»Ñ ÐºÐ¾Ð´Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ: impl.neomedia.configform.H264.defaultProfile.baseline=Базовый +impl.neomedia.configform.H264.defaultProfile.high=Ð’Ñ‹Ñокое impl.neomedia.configform.H264.defaultProfile.main=ОÑновной impl.neomedia.configform.H264.preferredKeyFrameRequester=Метод запроÑа ключевых кадров: impl.neomedia.configform.H264.preferredKeyFrameRequester.rtcp=RTCP impl.neomedia.configform.H264.preferredKeyFrameRequester.signaling=Ð¡Ð¸Ð³Ð½Ð°Ð»Ð¸Ð·Ð°Ñ†Ð¸Ñ +impl.neomedia.configform.H264.preset=ПредуÑтановки кодеков # The callrecordingconfig plugin was never really committed into trunk and its # ConfigurationForm was actually put in the neomedia bundle. @@ -1362,27 +1459,34 @@ plugin.securityconfig.masterpassword.MP_INPUT=ПожалуйÑта введитРplugin.otr.menu.TITLE=Шифрование plugin.otr.menu.START_OTR=Ðачать приватный разговор plugin.otr.menu.END_OTR=Закончить приватный разговор -plugin.otr.menu.LOADING_OTR=Ðачать приватный разговор +plugin.otr.menu.LOADING_OTR=Ðачать приватный разговор... plugin.otr.menu.TIMED_OUT=Ðачать приватный разговор plugin.otr.menu.REFRESH_OTR=Обновить приватный разговор plugin.otr.menu.AUTHENTICATE_BUDDY=Проверка ÑобеÑедника plugin.otr.menu.WHATS_THIS=О технологии -plugin.otr.menu.CB_AUTO=ÐвтоматичеÑки включать шифрование Ñообщений -plugin.otr.menu.CB_AUTO_ALL=ÐвтоматичеÑки включать шифрование Ñообщений +plugin.otr.menu.CB_AUTO=ÐвтоматичеÑки включать шифрование Ñообщений Ñ {0} +plugin.otr.menu.CB_AUTO_ALL=ÐвтоматичеÑки включать шифрование Ñообщений Ð´Ð»Ñ Ð²Ñех контактов plugin.otr.menu.CB_ENABLE=Включить шифрование Ñообщений plugin.otr.menu.CB_REQUIRE=Требовать шифрование Ñообщений plugin.otr.menu.CB_RESET=Ð¡Ð±Ñ€Ð¾Ñ -plugin.otr.menu.OTR_TOOLTIP=Шифровать перепиÑку +plugin.otr.menu.OTR_TOOLTIP=Шифрование перепиÑки OTR +plugin.otr.authbuddydialog.AUTHENTICATION_METHOD=Как бы вы хотели проходить авторизацию? +plugin.otr.authbuddydialog.AUTHENTICATION_METHOD_QUESTION=Ð’Ð¾Ð¿Ñ€Ð¾Ñ Ð´Ð»Ñ Ð°Ð²Ñ‚Ð¾Ñ€Ð¸Ð·Ð°Ñ†Ð¸Ð¸ +plugin.otr.authbuddydialog.AUTHENTICATION_METHOD_FINGERPRINT=ÐÐ²Ñ‚Ð¾Ñ€Ð¸Ð·Ð°Ñ†Ð¸Ñ Ð¿Ð¾ отпечатку plugin.otr.authbuddydialog.LOCAL_FINGERPRINT=Ваш ключ, {0}: {1} plugin.otr.authbuddydialog.REMOTE_FINGERPRINT=Ключ ÑобеÑедника {0}: {1} +plugin.otr.authbuddydialog.QUESTION_INIT=Введите Ñвой вопроÑ: +plugin.otr.authbuddydialog.ANSWER=Введите Ñвой ответ (Ñ ÑƒÑ‡ÐµÑ‚Ð¾Ð¼ региÑтра): plugin.otr.authbuddydialog.CANCEL=Отмена plugin.otr.authbuddydialog.HELP=Помощь plugin.otr.authbuddydialog.TITLE=Проверка ÑобеÑедника plugin.otr.authbuddydialog.AUTHENTICATE_BUDDY=Подтверждение -plugin.otr.authbuddydialog.I_HAVE=Я +plugin.otr.authbuddydialog.I_HAVE=ЕÑÑ‚ÑŒ plugin.otr.authbuddydialog.I_HAVE_NOT=Я не plugin.otr.authbuddydialog.VERIFY_ACTION=подтверждаю, что Ñто дейÑтвительно правильный ключ Ð´Ð»Ñ {0}. plugin.otr.authbuddydialog.FINGERPRINT_CHECK=ПожалуйÑта, введите уникальный код, полученный от {0}. +plugin.otr.smpprogressdialog.AUTHENTICATION_SUCCESS=Проверка прошла уÑпешно! +plugin.otr.smpprogressdialog.AUTHENTICATION_FAIL=Сбой проверки подлинноÑти! plugin.otr.configform.MY_PRIVATE_KEYS=СобÑтвенные ключи plugin.otr.configform.KNOWN_FINGERPRINTS=ИзвеÑтные ключи plugin.otr.configform.CB_AUTO=ÐвтоматичеÑки включать шифрование Ñообщений @@ -1398,11 +1502,12 @@ plugin.otr.configform.COLUMN_NAME_CONTACT=Контакт plugin.otr.configform.COLUMN_NAME_VERIFIED_STATUS=Проверен plugin.otr.configform.COLUMN_VALUE_VERIFIED_TRUE=Да plugin.otr.configform.COLUMN_VALUE_VERIFIED_FALSE=Ðет -plugin.otr.activator.unverifiedsessionwarning=Внимание! {0} ÑвÑзываетÑÑ Ñ Ð’Ð°Ð¼Ð¸ Ñ Ð½ÐµÐ´Ð¾Ð²ÐµÑ€ÐµÐ½Ð½Ð¾Ð³Ð¾ компьютера. Ð’Ñ‹ должны <A href="jitsi://{1}/{2}?{3}">проверить подлинноÑÑ‚ÑŒ ÑобеÑедника {0}</a>. +plugin.otr.activator.unverifiedsessionwarning={0} ÑвÑзываетÑÑ Ñ Ð’Ð°Ð¼Ð¸ Ñ Ð½ÐµÐ´Ð¾Ð²ÐµÑ€ÐµÐ½Ð½Ð¾Ð³Ð¾ компьютера. Ð’Ñ‹ должны <A href="jitsi://{1}/{2}?{3}">проверить подлинноÑÑ‚ÑŒ ÑобеÑедника {0}</a>. plugin.otr.activator.unverifiedsessionstared=<b>Ðепроверенный</b> приватный разговор Ñ {0} началÑÑ. plugin.otr.activator.sessionstared=Приватный разговор Ñ {0} началÑÑ. plugin.otr.activator.sessionfinished={0} закончил приватный разговор Ñ Ð’Ð°Ð¼Ð¸. Ð’Ñ‹ должны Ñделать то же Ñамое. plugin.otr.activator.sessionlost=Приватный разговор Ñ {0} закончен. +plugin.otr.activator.unreadablemsgreceived={0} отправил нечитаемое шифрованное Ñообщение. # global proxy plugin plugin.globalproxy.GLOBAL_PROXY_CONFIG=ПрокÑи-Ñервер @@ -1412,8 +1517,10 @@ plugin.globalproxy.PROXY_PORT=Порт plugin.globalproxy.PROXY_USERNAME=Ð˜Ð¼Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ plugin.globalproxy.PROXY_PASSWORD=Пароль plugin.globalproxy.DESCRIPTION={0} будет иÑпользовать перечиÑленные параметры прокÑи-Ñервера Ð´Ð»Ñ Ð²Ñех Ñетей при Ñледующем подключении. \nПоддержка прокÑи в наÑтоÑщее Ð²Ñ€ÐµÐ¼Ñ ÑкÑÐ¿ÐµÑ€Ð¸Ð¼ÐµÐ½Ñ‚Ð°Ð»ÑŒÐ½Ð°Ñ Ð¸ работает только Ñ Ð½ÐµÐºÐ¾Ñ‚Ð¾Ñ€Ñ‹Ð¼Ð¸ протоколами. Смотрите таблицу ниже Ð´Ð»Ñ Ð±Ð¾Ð»ÐµÐµ подробной информации: -plugin.globalproxy.PROTOCOL_SUPPORT=<html><table><tralign="center"><td></td><td>SOCKS4/5</td><td>SOCKS4/5+Auth</td><td>HTTP</td><td>HTTP+Auth</td></tr><tralign="center"><td>Yahoo!</td><td>+</td><td>+</td><td>-</td><td>-</td></tr><tralign="center"><td>MSN</td><td>+</td><td>+</td><td>-</td><td>-</td></tr><tralign="center"><td>XMPP</td><td>+</td><td>+</td><td>+</td><td>+</td></tr><tralign="center"><td>ICQ/AIM</td><td>+</td><td>+</td><td>+</td><td>+</td></tr></table></html> +plugin.globalproxy.PROTOCOL_SUPPORT=<html><table> <tr><td></td><td> SOSCKS4/5 </td><td> SOSCKS4/5+Auth </td><td> HTTP </td><td> HTTP+Auth </td></tr><tr><td>Yahoo!</td><td>+</td><td>+</td><td>-</td><td>-</td></tr><tr><td>MSN</td><td>+</td><td>+</td><td>-</td><td>-</td></tr><tr><td>XMPP</td><td>+</td><td>+</td><td>+</td><td>+</td></tr><tr><td>ICQ/AIM</td><td>+</td><td>+</td><td>+</td><td>+</td></tr></table></html> #plugin.globalproxy.PROTOCOL_SUPPORT +plugin.globalproxy.FWD_DNS_ADDR=ÐÐ´Ñ€ÐµÑ Ñервера DNS Proxy +plugin.globalproxy.FWD_DNS_PORT=Порт Ñервера DNS Proxy # plugin reconnect plugin.reconnectplugin.CONNECTION_FAILED_MSG=Ðе удалоÑÑŒ Ñоединение Ð´Ð»Ñ Ñледующего аккаунта:\nÐ˜Ð¼Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ: {0}, Ð˜Ð¼Ñ Ñервера: {1}.\nПожалуйÑта, проверьте ваше Ñетевое подключение или ÑвÑжитеÑÑŒ Ñ Ð°Ð´Ð¼Ð¸Ð½Ð¸Ñтратором. @@ -1431,7 +1538,7 @@ plugin.chatconfig.spellcheck.TITLE=Проверка правопиÑÐ°Ð½Ð¸Ñ #provisioning plugin plugin.provisioning.PROVISIONING=ÐвтонаÑтройка -plugin.provisioning.ENABLE_DISABLE=Включить автонаÑтройку +plugin.provisioning.ENABLE_DISABLE=ÐвтоматичеÑкое обнаружение адреÑа автонаÑтройки plugin.provisioning.AUTO=ÐвтоматичеÑкое обнаружение адреÑа автонаÑтройки plugin.provisioning.DHCP=DHCP plugin.provisioning.DNS=DNS @@ -1447,6 +1554,7 @@ plugin.provisioning.CREDENTIALS=Ð£Ñ‡ÐµÑ‚Ð½Ð°Ñ Ð·Ð°Ð¿Ð¸ÑÑŒ Ð´Ð»Ñ Ð°Ð²Ñ‚Ð¾Ð½Ð°Ñ plugin.provisioning.REMOVE_CREDENTIALS_MESSAGE=Ð’Ñ‹ дейÑтвительно хотите ÑброÑить пароль Ð´Ð»Ñ Ð°Ð²Ñ‚Ð¾Ð½Ð°Ñтройки? plugin.provisioning.PROV_FAILED=ÐвтонаÑтройка не удалаÑÑŒ plugin.provisioning.PROV_FAILED_MSG=<html>ÐвтонаÑтройка не удалаÑÑŒ. {0}! <br>ПожалуйÑта, попробуйте позже или ÑвÑжитеÑÑŒ Ñ Ð°Ð´Ð¼Ð¸Ð½Ð¸Ñтратором.</html> +plugin.provisioning.FORGET_PASSWORD=Ð¡Ð±Ñ€Ð¾Ñ Ñохраненных паролей # packet logging service plugin.loggingutils.PACKET_LOGGING_CONFIG=Протоколирование @@ -1540,7 +1648,7 @@ plugin.certconfig.KEYSTORE_PASSWORD=Пароль plugin.certconfig.INCOMPLETE=Ð’Ñе Ð¿Ð¾Ð»Ñ Ð´Ð¾Ð»Ð¶Ð½Ñ‹ быть заполнены plugin.certconfig.SHOW_CERT_EXCEPTION=Ðе удаетÑÑ Ð¾Ñ‚Ð¾Ð±Ñ€Ð°Ð·Ð¸Ñ‚ÑŒ Ñертификат ({0}). plugin.certconfig.KEYSTORE_EXCEPTION=Ðе удаетÑÑ Ð·Ð°Ð³Ñ€ÑƒÐ·Ð¸Ñ‚ÑŒ хранилище ключей ({0}). -plugin.certconfig.FILE_TYPE_DESCRIPTION=Хранилище Ñертификатов (PKCS#11 .dll, PKCS#12 .p12, Java .ks) +plugin.certconfig.FILE_TYPE_DESCRIPTION=Хранилище Ñертификатов (PKCS#11 Module, PKCS#12 files, Java ks Keystore) plugin.certconfig.ALIAS_LOAD_EXCEPTION=Ðе удаетÑÑ Ð¿Ð¾Ð»ÑƒÑ‡Ð¸Ñ‚ÑŒ пÑевдонимы из хранилища ключей ({0}). plugin.certconfig.INVALID_KEYSTORE_TYPE=Выбранный тип хранилища ключей неверен ({0}). plugin.certconfig.BROWSE_KEYSTORE=Открыть хранилище ключей @@ -1549,7 +1657,12 @@ plugin.certconfig.BROWSE_KEYSTORE=Открыть хранилище ключей plugin.phonenumbercontactsource.DISPLAY_NAME=Телефонные номера # properties editor +plugin.propertieseditor.TITLE=Редактор ÑвойÑтв +plugin.propertieseditor.NEW_PROPERTY_TITLE=Добавить ÑвойÑтво +plugin.propertieseditor.CHECK_BOX=Показать Ñто предупреждение в Ñледующий раз +plugin.propertieseditor.IM_AWARE=Я оÑознаю риÑк #Thunderbird address book plugin +plugin.thunderbird.CONFIG_FORM_TITLE=Thunderbird plugin.thunderbird.ENABLED=Ðктивен -plugin.thunderbird.PHONE_PREFIX=Телефонный Ð¿Ñ€ÐµÑ„Ð¸ÐºÑ +plugin.thunderbird.PHONE_PREFIX=Телефонный префикÑ: diff --git a/src/net/java/sip/communicator/impl/contactlist/MclStorageManager.java b/src/net/java/sip/communicator/impl/contactlist/MclStorageManager.java index ae89f00..0183ae3 100644 --- a/src/net/java/sip/communicator/impl/contactlist/MclStorageManager.java +++ b/src/net/java/sip/communicator/impl/contactlist/MclStorageManager.java @@ -1265,6 +1265,11 @@ public class MclStorageManager */ public void metaContactAdded(MetaContactEvent evt) { + // if the parent group is not persistent, do not do anything + // cause its missing in xml + if(!evt.getParentGroup().isPersistent()) + return; + Element parentGroupNode = findMetaContactGroupNode(evt.getParentGroup().getMetaUID()); diff --git a/src/net/java/sip/communicator/impl/credentialsstorage/CredentialsStorageServiceImpl.java b/src/net/java/sip/communicator/impl/credentialsstorage/CredentialsStorageServiceImpl.java index d567449..87bbfc2 100644 --- a/src/net/java/sip/communicator/impl/credentialsstorage/CredentialsStorageServiceImpl.java +++ b/src/net/java/sip/communicator/impl/credentialsstorage/CredentialsStorageServiceImpl.java @@ -10,6 +10,7 @@ import java.util.*; import net.java.sip.communicator.service.credentialsstorage.*; import net.java.sip.communicator.util.*; +import net.java.sip.communicator.util.Base64; // disambiguation import org.jitsi.service.configuration.*; import org.osgi.framework.*; diff --git a/src/net/java/sip/communicator/impl/gui/main/call/CallPanel.java b/src/net/java/sip/communicator/impl/gui/main/call/CallPanel.java index 0b84eee..51fc669 100644 --- a/src/net/java/sip/communicator/impl/gui/main/call/CallPanel.java +++ b/src/net/java/sip/communicator/impl/gui/main/call/CallPanel.java @@ -1674,7 +1674,7 @@ public class CallPanel settingsPanel.add(recordButton); if (showHideVideoButton != null) settingsPanel.add(showHideVideoButton); - if (mergeButton != null) + if (transferCallButton != null) settingsPanel.add(transferCallButton); if (videoButton != null) settingsPanel.add(videoButton); diff --git a/src/net/java/sip/communicator/impl/gui/main/call/OneToOneCallPanel.java b/src/net/java/sip/communicator/impl/gui/main/call/OneToOneCallPanel.java index 582a114..a32b70f 100644 --- a/src/net/java/sip/communicator/impl/gui/main/call/OneToOneCallPanel.java +++ b/src/net/java/sip/communicator/impl/gui/main/call/OneToOneCallPanel.java @@ -118,7 +118,14 @@ public class OneToOneCallPanel addCallPeerPanel(callPeer, uiVideoHandler); - setPreferredSize(new Dimension(400, 400)); + int preferredHeight = 400; + if(GuiActivator.getConfigurationService().getBoolean( + OneToOneCallPeerPanel.HIDE_PLACEHOLDER_PIC_PROP, + false)) + { + preferredHeight = 128; + } + setPreferredSize(new Dimension(400, preferredHeight)); setTransferHandler(new CallTransferHandler(call)); this.callContainer.addPropertyChangeListener( @@ -457,4 +464,4 @@ public class OneToOneCallPanel { callContainer.updateHoldButtonState(); } -}
\ No newline at end of file +} diff --git a/src/net/java/sip/communicator/impl/gui/main/call/OneToOneCallPeerPanel.java b/src/net/java/sip/communicator/impl/gui/main/call/OneToOneCallPeerPanel.java index a0d9df7..39bd9ba 100644 --- a/src/net/java/sip/communicator/impl/gui/main/call/OneToOneCallPeerPanel.java +++ b/src/net/java/sip/communicator/impl/gui/main/call/OneToOneCallPeerPanel.java @@ -61,6 +61,13 @@ public class OneToOneCallPeerPanel private static final long serialVersionUID = 0L; /** + * Property to disable showing the dummy picture for the peer when no + * streams present. + */ + public static final String HIDE_PLACEHOLDER_PIC_PROP + = "net.java.sip.communicator.impl.gui.main.call.HIDE_PLACEHOLDER_PIC"; + + /** * The <tt>CallPeer</tt>, which is rendered in this panel. */ private final CallPeer callPeer; @@ -277,7 +284,15 @@ public class OneToOneCallPeerPanel detailsChangeListener); securityPanel = SecurityPanel.create(this, callPeer, null); - photoLabel = new JLabel(getPhotoLabelIcon()); + ImageIcon icon = getPhotoLabelIcon(); + if(icon != null) + { + photoLabel = new JLabel(icon); + } + else + { + photoLabel = new JLabel(); + } center = createCenter(); statusBar = createStatusBar(); @@ -346,13 +361,28 @@ public class OneToOneCallPeerPanel } /** + * Set size of the {@link #photoLabel} + */ + private void sizePhotoLabel() + { + if(photoLabel.getIcon() != null) + { + photoLabel.setPreferredSize(new Dimension(90, 90)); + } + else + { + photoLabel.setPreferredSize(new Dimension(0, 0)); + } + } + + /** * Creates the <tt>Component</tt> hierarchy of the central area of this * <tt>CallPeerPanel</tt> which displays the photo of the <tt>CallPeer</tt> * or the video if any. */ private VideoContainer createCenter() { - photoLabel.setPreferredSize(new Dimension(90, 90)); + sizePhotoLabel(); return createVideoContainer(photoLabel); } @@ -585,6 +615,22 @@ public class OneToOneCallPeerPanel } /** + * Tests a provided boolean property name, returning false if it should be + * hidden. + * + * @param componentHidePropertyName the name of the boolean property to + * check. + * @return false if the component should be hidden, true otherwise. + * + */ + private boolean isComponentEnabled(String componentHidePropertyName) + { + return !GuiActivator.getConfigurationService().getBoolean( + componentHidePropertyName, + false); + } + + /** * Gets the <tt>Icon</tt> to be displayed in {@link #photoLabel}. * * @return the <tt>Icon</tt> to be displayed in {@link #photoLabel} @@ -592,7 +638,7 @@ public class OneToOneCallPeerPanel private ImageIcon getPhotoLabelIcon() { return - (peerImage == null) + (peerImage == null && isComponentEnabled(HIDE_PLACEHOLDER_PIC_PROP)) ? new ImageIcon( ImageLoader.getImage(ImageLoader.DEFAULT_USER_PHOTO)) : peerImage; @@ -677,10 +723,18 @@ public class OneToOneCallPeerPanel if(peerImage == null) { - photoLabel.setIcon( - new ImageIcon( - ImageLoader.getImage( - ImageLoader.DEFAULT_USER_PHOTO))); + if(isComponentEnabled(HIDE_PLACEHOLDER_PIC_PROP)) + { + photoLabel.setIcon( + new ImageIcon( + ImageLoader.getImage( + ImageLoader.DEFAULT_USER_PHOTO))); + } + else + { + photoLabel.setIcon(null); + } + sizePhotoLabel(); } } @@ -1108,6 +1162,7 @@ public class OneToOneCallPeerPanel public void run() { photoLabel.setIcon(peerImage); + sizePhotoLabel(); photoLabel.repaint(); } }); @@ -1115,6 +1170,7 @@ public class OneToOneCallPeerPanel else { photoLabel.setIcon(peerImage); + sizePhotoLabel(); photoLabel.repaint(); } } @@ -1582,4 +1638,4 @@ public class OneToOneCallPeerPanel this.interested = value; } } -}
\ No newline at end of file +} diff --git a/src/net/java/sip/communicator/impl/gui/main/call/RecordButton.java b/src/net/java/sip/communicator/impl/gui/main/call/RecordButton.java index 856322e..8d0ad91 100644 --- a/src/net/java/sip/communicator/impl/gui/main/call/RecordButton.java +++ b/src/net/java/sip/communicator/impl/gui/main/call/RecordButton.java @@ -442,8 +442,14 @@ public class RecordButton 0, callFilename.lastIndexOf('.')); } + String configuredFormat + = configuration.getString(Recorder.FORMAT); callFormat - = SoundFileUtils.DEFAULT_CALL_RECORDING_FORMAT; + = (configuredFormat != null + && configuredFormat.length() != 0) + ? configuredFormat + : SoundFileUtils.DEFAULT_CALL_RECORDING_FORMAT; + callFilename += '.' + callFormat; } configuration.setProperty(Recorder.FORMAT, callFormat); diff --git a/src/net/java/sip/communicator/impl/gui/main/presence/AccountStatusPanel.java b/src/net/java/sip/communicator/impl/gui/main/presence/AccountStatusPanel.java index 6e80b2f..dc7a5dd 100644 --- a/src/net/java/sip/communicator/impl/gui/main/presence/AccountStatusPanel.java +++ b/src/net/java/sip/communicator/impl/gui/main/presence/AccountStatusPanel.java @@ -60,12 +60,12 @@ public class AccountStatusPanel /** * The desired height of the avatar. */ - private static final int AVATAR_ICON_HEIGHT = 40; + private static final int AVATAR_ICON_HEIGHT = 50; /** * The desired width of the avatar. */ - private static final int AVATAR_ICON_WIDTH = 40; + private static final int AVATAR_ICON_WIDTH = 50; /** * The image object storing the avatar. @@ -123,6 +123,18 @@ public class AccountStatusPanel private final PluginContainer mainToolbarPluginContainer; /** + * When setting global status message, the message will be displayed in this + * label. + */ + private final JLabel statusMessageLabel = new JLabel(); + + /** + * This is the panel that contains display name, status message, status + * selector box and plugins. + */ + private final TransparentPanel rightPanel = new TransparentPanel(); + + /** * Creates an instance of <tt>AccountStatusPanel</tt> by specifying the * main window, where this panel is added. */ @@ -144,7 +156,7 @@ public class AccountStatusPanel accountNameLabel.getFont().deriveFont(12f)); accountNameLabel.setOpaque(false); - statusComboBox = new GlobalStatusSelectorBox(); + statusComboBox = new GlobalStatusSelectorBox(this); // Align status combo box with account name field. statusComboBox.setBorder(BorderFactory.createEmptyBorder(0, 0, 0, 0)); @@ -163,9 +175,14 @@ public class AccountStatusPanel statusToolsPanel.add(toolbarPluginPanel, BorderLayout.EAST); - TransparentPanel rightPanel = new TransparentPanel(); + statusMessageLabel.setFont( + statusMessageLabel.getFont().deriveFont(9f)); + statusMessageLabel.setForeground(Color.GRAY); + + rightPanel.setLayout(new BorderLayout(0, 0)); rightPanel.add(accountNameLabel, BorderLayout.NORTH); + rightPanel.add(statusMessageLabel, BorderLayout.CENTER); rightPanel.add(statusToolsPanel, BorderLayout.SOUTH); this.add(accountImageLabel, BorderLayout.WEST); @@ -197,6 +214,24 @@ public class AccountStatusPanel } /** + * Updates status message. + * @param text + */ + void setStatusMessage(String text) + { + if(text == null) + { + statusMessageLabel.setText(""); + rightPanel.setBorder(BorderFactory.createEmptyBorder(5, 0, 5, 0)); + } + else + { + rightPanel.setBorder(null); + statusMessageLabel.setText(text); + } + } + + /** * Adds the account given by <tt>protocolProvider</tt> in the contained * status combo box. * @param protocolProvider the <tt>ProtocolProviderService</tt> diff --git a/src/net/java/sip/communicator/impl/gui/main/presence/GlobalStatusSelectorBox.java b/src/net/java/sip/communicator/impl/gui/main/presence/GlobalStatusSelectorBox.java index 8b8d889..ee6e029 100644 --- a/src/net/java/sip/communicator/impl/gui/main/presence/GlobalStatusSelectorBox.java +++ b/src/net/java/sip/communicator/impl/gui/main/presence/GlobalStatusSelectorBox.java @@ -87,12 +87,19 @@ public class GlobalStatusSelectorBox private final GlobalStatusMessageMenu globalStatusMessageMenu; /** + * The parent panel that creates us. + */ + private final AccountStatusPanel accountStatusPanel; + + /** * Creates an instance of <tt>SimpleStatusSelectorBox</tt>. */ - public GlobalStatusSelectorBox() + public GlobalStatusSelectorBox(AccountStatusPanel accountStatusPanel) { super(); + this.accountStatusPanel = accountStatusPanel; + JLabel titleLabel = new JLabel(GuiActivator.getResources() .getI18NString("service.gui.SET_GLOBAL_STATUS")); titleLabel.setBorder(BorderFactory.createEmptyBorder(0, 5, 0, 0)); @@ -156,10 +163,12 @@ public class GlobalStatusSelectorBox this.setToolTipText("<html><b>" + GuiActivator.getResources() .getI18NString("service.gui.SET_GLOBAL_STATUS") + "</b></html>"); + accountStatusPanel.setStatusMessage(null); } else { this.setToolTipText("<html><b>" + message + "</b></html>"); + accountStatusPanel.setStatusMessage(message); } } diff --git a/src/net/java/sip/communicator/impl/libjitsi/libjitsi.manifest.mf b/src/net/java/sip/communicator/impl/libjitsi/libjitsi.manifest.mf index 81986fc..e7a3ff1 100644 --- a/src/net/java/sip/communicator/impl/libjitsi/libjitsi.manifest.mf +++ b/src/net/java/sip/communicator/impl/libjitsi/libjitsi.manifest.mf @@ -56,7 +56,9 @@ Import-Package: apple.awt, javax.xml.transform.dom, javax.xml.transform.stream, org.bouncycastle.asn1, + org.bouncycastle.asn1.bsi, org.bouncycastle.asn1.cryptopro, + org.bouncycastle.asn1.eac, org.bouncycastle.asn1.nist, org.bouncycastle.asn1.oiw, org.bouncycastle.asn1.pkcs, diff --git a/src/net/java/sip/communicator/impl/protocol/jabber/extensions/colibri/ColibriConferenceIQ.java b/src/net/java/sip/communicator/impl/protocol/jabber/extensions/colibri/ColibriConferenceIQ.java index 60b7153..fcd467a 100644 --- a/src/net/java/sip/communicator/impl/protocol/jabber/extensions/colibri/ColibriConferenceIQ.java +++ b/src/net/java/sip/communicator/impl/protocol/jabber/extensions/colibri/ColibriConferenceIQ.java @@ -64,6 +64,13 @@ public class ColibriConferenceIQ */ public Recording recording = null; + private RTCPTerminationStrategy rtcpTerminationStrategy = null; + + /** + * The list of <tt>Endpoint</tt>s included into this <tt>conference</tt> IQ. + */ + private final List<Endpoint> endpoints = new LinkedList<Endpoint>(); + /** Initializes a new <tt>ColibriConferenceIQ</tt> instance. */ public ColibriConferenceIQ() { @@ -141,6 +148,10 @@ public class ColibriConferenceIQ content.toXML(xml); if (recording != null) recording.toXML(xml); + + if (rtcpTerminationStrategy != null) + rtcpTerminationStrategy.toXML(xml); + xml.append("</").append(ELEMENT_NAME).append('>'); } return xml.toString(); @@ -253,6 +264,35 @@ public class ColibriConferenceIQ this.id = id; } + public RTCPTerminationStrategy getRTCPTerminationStrategy() + { + return rtcpTerminationStrategy; + } + + public void setRTCPTerminationStrategy(RTCPTerminationStrategy rtcpTerminationStrategy) + { + this.rtcpTerminationStrategy = rtcpTerminationStrategy; + } + + /** + * Returns the list of <tt>Endpoint</tt>s included in this + * <tt>ColibriConferenceIQ</tt>. + * @return the list of <tt>Endpoint</tt>s included in this + * <tt>ColibriConferenceIQ</tt>. + */ + public List<Endpoint> getEndpoints() + { + return Collections.unmodifiableList(endpoints); + } + + /** + * Add an <tt>Endpoint</tt> to this <tt>ColibriConferenceIQ</tt>. + * @param endpoint the <tt>Endpoint</tt> to add. + */ + public void addEndpoint(Endpoint endpoint) + { + endpoints.add(endpoint); + } /** * Class contains common code for both <tt>Channel</tt> and * <tt>SctpConnection</tt> IQ classes. @@ -515,6 +555,33 @@ public class ColibriConferenceIQ } } + public static class RTCPTerminationStrategy + { + + public static final String ELEMENT_NAME = "rtcp-termination-strategy"; + public static final String NAME_ATTR_NAME = "name"; + + private String name; + + public void setName(String name) + { + this.name = name; + } + + public String getName() + { + return name; + } + + public void toXML(StringBuilder xml) + { + xml.append('<').append(ELEMENT_NAME); + xml.append(' ').append(NAME_ATTR_NAME).append("='") + .append(name).append('\''); + xml.append("/>"); + } + } + /** * Represents a <tt>channel</tt> included into a <tt>content</tt> of a Jitsi * Videobridge <tt>conference</tt> IQ. @@ -1597,4 +1664,83 @@ public class ColibriConferenceIQ xml.append("/>"); } } + + /** + * Represents an 'endpoint' element. + */ + public static class Endpoint + { + /** + * The name of the 'endpoint' element. + */ + public static final String ELEMENT_NAME = "endpoint"; + + /** + * The name of the 'id' attribute. + */ + public static final String ID_ATTR_NAME = "id"; + + /** + * The name of the 'displayname' attribute. + */ + public static final String DISPLAYNAME_ATTR_NAME = "displayname"; + + /** + * The 'id' of this <tt>Endpoint</tt>. + */ + private String id; + + /** + * The 'display name' of this <tt>Endpoint</tt>. + */ + private String displayName; + + /** + * Initializes a new <tt>Endpoint</tt> with the given ID and display + * name. + * @param id the ID. + * @param displayName the display name. + */ + public Endpoint(String id, String displayName) + { + this.id = id; + this.displayName = displayName; + } + + /** + * Sets the ID of this <tt>Endpoint</tt>. + * @param id the ID to set. + */ + public void setId(String id) + { + this.id = id; + } + + /** + * Returns the ID of this <tt>Endpoint</tt>. + * @return the ID of this <tt>Endpoint</tt>. + */ + public String getId() + { + return id; + } + + /** + * Sets the display name of this <tt>Endpoint</tt>. + * @param displayName the display name to set. + */ + public void setDisplayName(String displayName) + { + this.displayName = displayName; + } + + /** + * Returns the display name of this <tt>Endpoint</tt>. + * @return the display name of this <tt>Endpoint</tt>. + */ + public String getDisplayName() + { + return displayName; + } + } } diff --git a/src/net/java/sip/communicator/impl/protocol/jabber/extensions/colibri/ColibriIQProvider.java b/src/net/java/sip/communicator/impl/protocol/jabber/extensions/colibri/ColibriIQProvider.java index ec1c182..d5b2d37 100644 --- a/src/net/java/sip/communicator/impl/protocol/jabber/extensions/colibri/ColibriIQProvider.java +++ b/src/net/java/sip/communicator/impl/protocol/jabber/extensions/colibri/ColibriIQProvider.java @@ -158,9 +158,12 @@ public class ColibriIQProvider boolean done = false; ColibriConferenceIQ.Channel channel = null; + ColibriConferenceIQ.RTCPTerminationStrategy rtcpTerminationStrategy + = null; ColibriConferenceIQ.SctpConnection sctpConnection = null; ColibriConferenceIQ.Content content = null; ColibriConferenceIQ.Recording recording = null; + ColibriConferenceIQ.Endpoint conferenceEndpoint = null; StringBuilder ssrc = null; while (!done) @@ -187,6 +190,12 @@ public class ColibriIQProvider content.addSctpConnection(sctpConnection); sctpConnection = null; } + else if (ColibriConferenceIQ.Endpoint.ELEMENT_NAME + .equals(name)) + { + conference.addEndpoint(conferenceEndpoint); + conferenceEndpoint = null; + } else if (ColibriConferenceIQ.Channel.SSRC_ELEMENT_NAME .equals(name)) { @@ -215,6 +224,13 @@ public class ColibriIQProvider conference.addContent(content); content = null; } + else if (ColibriConferenceIQ.RTCPTerminationStrategy + .ELEMENT_NAME.equals(name)) + { + conference.setRTCPTerminationStrategy( + rtcpTerminationStrategy); + rtcpTerminationStrategy = null; + } else if (ColibriConferenceIQ.Recording.ELEMENT_NAME.equals( name)) { @@ -336,6 +352,24 @@ public class ColibriIQProvider if ((rtpPort != null) && (rtpPort.length() != 0)) channel.setRTPPort(Integer.parseInt(rtpPort)); } + else if (ColibriConferenceIQ.RTCPTerminationStrategy + .ELEMENT_NAME.equals(name)) + { + rtcpTerminationStrategy = + new ColibriConferenceIQ.RTCPTerminationStrategy(); + + // name + String strategyName + = parser.getAttributeValue( + "", + ColibriConferenceIQ.RTCPTerminationStrategy + .NAME_ATTR_NAME); + + if ((strategyName != null) + && (strategyName.length() != 0)) + rtcpTerminationStrategy.setName(strategyName); + + } else if (ColibriConferenceIQ.Channel.SSRC_ELEMENT_NAME .equals(name)) { @@ -428,6 +462,25 @@ public class ColibriIQProvider if (!StringUtils.isNullOrEmpty(expire)) sctpConnection.setExpire(Integer.parseInt(expire)); } + else if (ColibriConferenceIQ.Endpoint.ELEMENT_NAME + .equals(name)) + { + String id + = parser.getAttributeValue( + "", + ColibriConferenceIQ.Endpoint.ID_ATTR_NAME); + + String endpointName + = parser.getAttributeValue( + "", + ColibriConferenceIQ.Endpoint + .DISPLAYNAME_ATTR_NAME); + + conferenceEndpoint + = new ColibriConferenceIQ.Endpoint(id, + endpointName); + + } else if (channel != null || sctpConnection != null) { String peName = null; diff --git a/src/net/java/sip/communicator/impl/protocol/jabber/extensions/colibri/ColibriStatsExtension.java b/src/net/java/sip/communicator/impl/protocol/jabber/extensions/colibri/ColibriStatsExtension.java new file mode 100644 index 0000000..ef23bb6 --- /dev/null +++ b/src/net/java/sip/communicator/impl/protocol/jabber/extensions/colibri/ColibriStatsExtension.java @@ -0,0 +1,160 @@ +/* + * Jitsi, the OpenSource Java VoIP and Instant Messaging client. + * + * Distributable under LGPL license. + * See terms of license at gnu.org. + */ +package net.java.sip.communicator.impl.protocol.jabber.extensions.colibri; + +import java.util.*; + +import net.java.sip.communicator.impl.protocol.jabber.extensions.*; + +import org.jivesoftware.smack.packet.*; +import org.jivesoftware.smack.util.*; + +/** + * Implements the Jitsi Videobridge <tt>stats</tt> extension within the + * COnferencing with LIghtweight BRIdging that will provide various statistics. + * + * @author Hristo Terezov + */ +public class ColibriStatsExtension + extends AbstractPacketExtension +{ + + /** + * The XML element name of the Jitsi Videobridge <tt>stats</tt> extension. + */ + public static final String ELEMENT_NAME = "stats"; + + /** + * The XML COnferencing with LIghtweight BRIdging namespace of the Jitsi + * Videobridge <tt>stats</tt> extension. + */ + public static final String NAMESPACE + = "http://jitsi.org/protocol/colibri"; + + /** + * Constructs new <tt>ColibriStatsExtension</tt> + */ + public ColibriStatsExtension() { + super(NAMESPACE, ELEMENT_NAME); + + } + + /** + * Adds stat extension. + * @param stat the stat to be added + */ + public void addStat(Stat stat) + { + addChildExtension(stat); + } + + @Override + public List<? extends PacketExtension> getChildExtensions() + { + return Collections.unmodifiableList(super.getChildExtensions()); + } + + public static class Stat implements PacketExtension + { + /** + * The XML element name of a <tt>content</tt> of a Jitsi Videobridge + * <tt>stats</tt> IQ. + */ + public static final String ELEMENT_NAME = "stat"; + + /** + * The XML name of the <tt>name</tt> attribute of a <tt>stat</tt> of + * a <tt>stats</tt> IQ which represents the <tt>name</tt> property + * of the statistic. + */ + public static final String NAME_ATTR_NAME = "name"; + + /** + * The XML name of the <tt>name</tt> attribute of a <tt>stat</tt> of + * a <tt>stats</tt> IQ which represents the <tt>value</tt> property + * of the statistic. + */ + public static final String VALUE_ATTR_NAME = "value"; + + /** + * The name attribute value. + */ + private String name; + + /** + * The value attribute value. + */ + private Object value; + + public Stat() { } + + /** + * Constructs new <tt>Stat</tt> by given name and value. + * @param name the name + * @param value the value + */ + public Stat(String name, Object value) + { + this.setName(name); + this.setValue(value); + } + + /** + * @return the name + */ + public String getName() + { + return name; + } + + /** + * @param name the name to set + */ + public void setName(String name) + { + this.name = name; + } + + /** + * @return the value + */ + public Object getValue() + { + return value; + } + + /** + * @param value the value to set + */ + public void setValue(Object value) + { + this.value = value; + } + + public String toXML() + { + if(name == null || value == null) + return ""; + + return "<" + ELEMENT_NAME + " " + NAME_ATTR_NAME + "='" + + StringUtils.escapeForXML(getName()) + "' " + VALUE_ATTR_NAME + + "='" + StringUtils.escapeForXML(getValue().toString()) + "' />"; + } + + @Override + public String getElementName() + { + return ELEMENT_NAME; + } + + @Override + public String getNamespace() + { + return NAMESPACE; + } + } +} diff --git a/src/net/java/sip/communicator/impl/protocol/jabber/extensions/jingle/IceUdpTransportPacketExtension.java b/src/net/java/sip/communicator/impl/protocol/jabber/extensions/jingle/IceUdpTransportPacketExtension.java index f09fcaf..3ebb576 100644 --- a/src/net/java/sip/communicator/impl/protocol/jabber/extensions/jingle/IceUdpTransportPacketExtension.java +++ b/src/net/java/sip/communicator/impl/protocol/jabber/extensions/jingle/IceUdpTransportPacketExtension.java @@ -232,7 +232,24 @@ public class IceUdpTransportPacketExtension else if(childExtension instanceof CandidatePacketExtension) addCandidate((CandidatePacketExtension) childExtension); - else if (childExtension instanceof DtlsFingerprintPacketExtension) + else super.addChildExtension(childExtension); } + + /** + * Checks whether an 'rtcp-mux' extension has been added to this + * <tt>IceUdpTransportPacketExtension</tt>. + * @return <tt>true</tt> if this <tt>IceUdpTransportPacketExtension</tt> + * has a child with the 'rtcp-mux' name. + */ + public boolean isRtcpMux() + { + for (PacketExtension packetExtension : getChildExtensions()) + { + if (RtcpmuxPacketExtension.ELEMENT_NAME + .equals(packetExtension.getElementName())) + return true; + } + return false; + } } diff --git a/src/net/java/sip/communicator/impl/protocol/jabber/extensions/jingle/JingleIQProvider.java b/src/net/java/sip/communicator/impl/protocol/jabber/extensions/jingle/JingleIQProvider.java index 4cefe8f..bc46b8f 100644 --- a/src/net/java/sip/communicator/impl/protocol/jabber/extensions/jingle/JingleIQProvider.java +++ b/src/net/java/sip/communicator/impl/protocol/jabber/extensions/jingle/JingleIQProvider.java @@ -156,6 +156,13 @@ public class JingleIQProvider implements IQProvider ConferenceDescriptionPacketExtension.NAMESPACE, new DefaultPacketExtensionProvider<CallIdPacketExtension>( CallIdPacketExtension.class)); + + //rtcp-mux + providerManager.addExtensionProvider( + RtcpmuxPacketExtension.ELEMENT_NAME, + IceUdpTransportPacketExtension.NAMESPACE, + new DefaultPacketExtensionProvider<RtcpmuxPacketExtension>( + RtcpmuxPacketExtension.class)); } /** diff --git a/src/net/java/sip/communicator/impl/protocol/jabber/extensions/jingle/RtcpmuxPacketExtension.java b/src/net/java/sip/communicator/impl/protocol/jabber/extensions/jingle/RtcpmuxPacketExtension.java new file mode 100644 index 0000000..21577ee --- /dev/null +++ b/src/net/java/sip/communicator/impl/protocol/jabber/extensions/jingle/RtcpmuxPacketExtension.java @@ -0,0 +1,31 @@ +/* + * Jitsi, the OpenSource Java VoIP and Instant Messaging client. + * + * Distributable under LGPL license. + * See terms of license at gnu.org. + */ +package net.java.sip.communicator.impl.protocol.jabber.extensions.jingle; + +import net.java.sip.communicator.impl.protocol.jabber.extensions.*; + +/** + * An 'rtcp-mux' extension. + * @author Boris Grozev + */ +public class RtcpmuxPacketExtension + extends AbstractPacketExtension +{ + /** + * The name of the "encryption" element. + */ + public static final String ELEMENT_NAME = "rtcp-mux"; + + /** + * Creates a new instance of <tt>RtcpmuxPacketExtension</tt>. + */ + public RtcpmuxPacketExtension() + { + super(null, ELEMENT_NAME); + } +} + diff --git a/src/net/java/sip/communicator/impl/protocol/jabber/sasl/SASLDigestMD5Mechanism.java b/src/net/java/sip/communicator/impl/protocol/jabber/sasl/SASLDigestMD5Mechanism.java index 56ea029..e390389 100644 --- a/src/net/java/sip/communicator/impl/protocol/jabber/sasl/SASLDigestMD5Mechanism.java +++ b/src/net/java/sip/communicator/impl/protocol/jabber/sasl/SASLDigestMD5Mechanism.java @@ -13,7 +13,7 @@ import javax.security.auth.callback.*; import javax.security.sasl.*; import org.jivesoftware.smack.*; -import org.jivesoftware.smack.util.*; +import org.jivesoftware.smack.util.Base64; // disambiguation /** * Creates our custom SASLDigestMD5Mechanism with some changes in order diff --git a/src/net/java/sip/communicator/impl/protocol/mock/MockContact.java b/src/net/java/sip/communicator/impl/protocol/mock/MockContact.java index a2bb441..bb5ab80 100644 --- a/src/net/java/sip/communicator/impl/protocol/mock/MockContact.java +++ b/src/net/java/sip/communicator/impl/protocol/mock/MockContact.java @@ -294,4 +294,9 @@ public class MockContact { return null; } + + public void setPersistent(boolean isPersistent) + { + this.isPersistent = isPersistent; + } } diff --git a/src/net/java/sip/communicator/impl/protocol/mock/MockContactGroup.java b/src/net/java/sip/communicator/impl/protocol/mock/MockContactGroup.java index 4287cc6..f1352ae 100644 --- a/src/net/java/sip/communicator/impl/protocol/mock/MockContactGroup.java +++ b/src/net/java/sip/communicator/impl/protocol/mock/MockContactGroup.java @@ -495,5 +495,9 @@ public class MockContactGroup return true; } + public void setPersistent(boolean isPersistent) + { + this.isPersistent = isPersistent; + } } diff --git a/src/net/java/sip/communicator/impl/protocol/mock/MockPersistentPresenceOperationSet.java b/src/net/java/sip/communicator/impl/protocol/mock/MockPersistentPresenceOperationSet.java index dcccdc7..b8371fd 100644 --- a/src/net/java/sip/communicator/impl/protocol/mock/MockPersistentPresenceOperationSet.java +++ b/src/net/java/sip/communicator/impl/protocol/mock/MockPersistentPresenceOperationSet.java @@ -529,4 +529,72 @@ public class MockPersistentPresenceOperationSet return newGroup; } + + /** + * Creates a non persistent contact for the specified id. This would + * also create (if necessary) a group for volatile contacts. + * @param id the address of the contact to create. + * @return the newly created volatile <tt>MockContact</tt> + */ + public MockContact createVolatileContact( + String id) + { + MockContact newVolatileContact + = new MockContact(id, parentProvider); + newVolatileContact.setResolved(false); + newVolatileContact.setPersistent(false); + + //Check whether a volatile group already exists and if not create + //one + MockContactGroup theVolatileGroup = getNonPersistentGroup(); + + //if the parent group is null then add necessary create the group + if (theVolatileGroup == null) + { + theVolatileGroup = new MockContactGroup( + "Not-In-Contactlist", + parentProvider); + theVolatileGroup.setResolved(false); + theVolatileGroup.setPersistent(false); + + theVolatileGroup.addContact(newVolatileContact); + + this.contactListRoot.addSubgroup(theVolatileGroup); + + fireServerStoredGroupEvent(theVolatileGroup + , ServerStoredGroupEvent.GROUP_CREATED_EVENT); + } + else + { + theVolatileGroup.addContact(newVolatileContact); + + fireSubscriptionEvent( + newVolatileContact, + theVolatileGroup, + SubscriptionEvent.SUBSCRIPTION_CREATED); + } + + return newVolatileContact; + } + + /** + * Returns the volatile group that we use when creating volatile contacts. + * + * @return MockContactGroup + */ + public MockContactGroup getNonPersistentGroup() + { + String groupName = "Not-In-Contactlist"; + + for (int i = 0; i < contactListRoot.countSubgroups(); i++) + { + MockContactGroup gr = + (MockContactGroup)contactListRoot.getGroup(i); + + if(!gr.isPersistent() && gr.getGroupName().equals(groupName)) + return gr; + } + + return null; + } } diff --git a/src/net/java/sip/communicator/impl/protocol/sip/CallPeerMediaHandlerSipImpl.java b/src/net/java/sip/communicator/impl/protocol/sip/CallPeerMediaHandlerSipImpl.java index 2ca7d83..6f6b980 100644 --- a/src/net/java/sip/communicator/impl/protocol/sip/CallPeerMediaHandlerSipImpl.java +++ b/src/net/java/sip/communicator/impl/protocol/sip/CallPeerMediaHandlerSipImpl.java @@ -21,6 +21,7 @@ import org.jitsi.service.configuration.*; import org.jitsi.service.neomedia.*; import org.jitsi.service.neomedia.device.*; import org.jitsi.service.neomedia.format.*; +import org.jitsi.service.neomedia.rtp.*; import ch.imvs.sdes4j.srtp.*; @@ -244,21 +245,46 @@ public class CallPeerMediaHandlerSipImpl try { - // If we have a video preset, let's send info about the - // desired frame rate. - if (mediaType.equals(MediaType.VIDEO) - && (receiveQualityPreset != null)) + switch (mediaType) { - // doing only int frame rate for now - int frameRate - = (int) receiveQualityPreset.getFameRate(); + case AUDIO: + /* + * Let the remote peer know that we support RTCP XR + * in general and VoIP Metrics Report Block in + * particular. + */ + String rtcpxr + = md.getAttribute( + RTCPExtendedReport.SDP_ATTRIBUTE); - if (frameRate > 0) + if (rtcpxr == null) { md.setAttribute( - "framerate", - String.valueOf(frameRate)); + RTCPExtendedReport.SDP_ATTRIBUTE, + RTCPExtendedReport + .VoIPMetricsReportBlock + .SDP_PARAMETER); + } + break; + case VIDEO: + // If we have a video preset, let's send info about + // the desired frame rate. + if (receiveQualityPreset != null) + { + // doing only int frame rate for now + int frameRate + = (int) receiveQualityPreset.getFameRate(); + + if (frameRate > 0) + { + md.setAttribute( + "framerate", + String.valueOf(frameRate)); + } } + break; + default: + break; } } catch(SdpException e) @@ -708,6 +734,44 @@ public class CallPeerMediaHandlerSipImpl md, mediaDescription); + // RTCP XR + String rtcpxr; + + try + { + /* + * We support the receiving of RTCP XR so we will answer the + * offer of the remote peer. + */ + rtcpxr + = mediaDescription.getAttribute( + RTCPExtendedReport.SDP_ATTRIBUTE); + if (rtcpxr != null) + { + /* + * However, we support the receiving and sending of VoIP + * Metrics Report Block only. + */ + if (rtcpxr.contains( + RTCPExtendedReport.VoIPMetricsReportBlock + .SDP_PARAMETER)) + { + rtcpxr + = RTCPExtendedReport.VoIPMetricsReportBlock + .SDP_PARAMETER; + } + else + { + rtcpxr = ""; + } + md.setAttribute(RTCPExtendedReport.SDP_ATTRIBUTE, rtcpxr); + } + } + catch (SdpException se) + { + rtcpxr = null; + } + // create the corresponding stream... MediaFormat fmt = findMediaFormat( @@ -733,8 +797,19 @@ public class CallPeerMediaHandlerSipImpl } } - initStream(connector, dev, fmt, target, direction, rtpExtensions, - masterStream); + MediaStream stream + = initStream( + connector, + dev, + fmt, + target, + direction, + rtpExtensions, + masterStream); + + // RTCP XR + if (stream != null) + stream.setProperty(RTCPExtendedReport.SDP_ATTRIBUTE, rtcpxr); // create the answer description answerDescriptions.add(md); @@ -1471,14 +1546,33 @@ public class CallPeerMediaHandlerSipImpl } // create the corresponding stream... - initStream( - connector, - dev, - supportedFormats.get(0), - target, - direction, - rtpExtensions, - masterStream); + MediaStream stream + = initStream( + connector, + dev, + supportedFormats.get(0), + target, + direction, + rtpExtensions, + masterStream); + + // RTCP XR + if (stream != null) + { + String rtcpxr; + + try + { + rtcpxr + = mediaDescription.getAttribute( + RTCPExtendedReport.SDP_ATTRIBUTE); + } + catch (SdpException se) + { + rtcpxr = null; + } + stream.setProperty(RTCPExtendedReport.SDP_ATTRIBUTE, rtcpxr); + } } } diff --git a/src/net/java/sip/communicator/impl/protocol/sip/ServerStoredContactListSipImpl.java b/src/net/java/sip/communicator/impl/protocol/sip/ServerStoredContactListSipImpl.java index 659f5db..112a95b 100644 --- a/src/net/java/sip/communicator/impl/protocol/sip/ServerStoredContactListSipImpl.java +++ b/src/net/java/sip/communicator/impl/protocol/sip/ServerStoredContactListSipImpl.java @@ -23,6 +23,7 @@ import net.java.sip.communicator.service.protocol.*; import net.java.sip.communicator.service.protocol.ServerStoredDetails.ImageDetail; import net.java.sip.communicator.service.protocol.event.*; import net.java.sip.communicator.util.*; +import net.java.sip.communicator.util.Base64; // disambiguation import org.jitsi.util.xml.XMLUtils; import org.w3c.dom.*; diff --git a/src/net/java/sip/communicator/impl/protocol/sip/sdp/SdpUtils.java b/src/net/java/sip/communicator/impl/protocol/sip/sdp/SdpUtils.java index 1bf5bc1..fd53672 100644 --- a/src/net/java/sip/communicator/impl/protocol/sip/sdp/SdpUtils.java +++ b/src/net/java/sip/communicator/impl/protocol/sip/sdp/SdpUtils.java @@ -273,7 +273,7 @@ public class SdpUtils else { //if rtpmap was null, check whether we have previously registered - //the type in our dynamiyc payload type registry. and if that's + //the type in our dynamic payload type registry. and if that's //the case return it. MediaFormat fmt = ptRegistry.findFormat(payloadType); if (fmt != null) @@ -290,6 +290,12 @@ public class SdpUtils if (advp != null) advancedAttrMap = parseAdvancedAttributes(advp); + // Many implementations use opus as "opus/48000", while the specification + // mandates "opus/48000/2". Our upper layers only support 2 channels, so + // we patch it here. + if ("opus".equals(encoding)) + numChannels = 2; + //now create the format. MediaFormat format = SipActivator.getMediaService().getFormatFactory() diff --git a/src/net/java/sip/communicator/impl/protocol/ssh/ContactSSHImpl.java b/src/net/java/sip/communicator/impl/protocol/ssh/ContactSSHImpl.java index e0fae1d..714e27b 100644 --- a/src/net/java/sip/communicator/impl/protocol/ssh/ContactSSHImpl.java +++ b/src/net/java/sip/communicator/impl/protocol/ssh/ContactSSHImpl.java @@ -14,10 +14,11 @@ import java.io.*; import java.util.*; import net.java.sip.communicator.service.protocol.*; -import net.java.sip.communicator.util.*; +import net.java.sip.communicator.util.Base64; // disambiguation import net.java.sip.communicator.util.Logger; import com.jcraft.jsch.*; +// disambiguation /** * A Contact of SSH Type diff --git a/src/net/java/sip/communicator/plugin/desktoputil/FramedImageWithMenu.java b/src/net/java/sip/communicator/plugin/desktoputil/FramedImageWithMenu.java index 4262e3b..683d8bd 100644 --- a/src/net/java/sip/communicator/plugin/desktoputil/FramedImageWithMenu.java +++ b/src/net/java/sip/communicator/plugin/desktoputil/FramedImageWithMenu.java @@ -51,7 +51,6 @@ public class FramedImageWithMenu /** * Creates the component. - * @param mainFrame the parent frame. * @param imageIcon the image icon to show as default one. * @param width width of component. * @param height height of component. diff --git a/src/net/java/sip/communicator/plugin/desktoputil/VerifyCertificateDialogImpl.java b/src/net/java/sip/communicator/plugin/desktoputil/VerifyCertificateDialogImpl.java index 62415b5..ed09959 100644 --- a/src/net/java/sip/communicator/plugin/desktoputil/VerifyCertificateDialogImpl.java +++ b/src/net/java/sip/communicator/plugin/desktoputil/VerifyCertificateDialogImpl.java @@ -11,6 +11,7 @@ import java.awt.event.*; import java.security.cert.*; import javax.swing.*; +import javax.swing.border.*; import net.java.sip.communicator.service.certificate.*; import net.java.sip.communicator.util.*; @@ -51,9 +52,9 @@ class VerifyCertificateDialogImpl private static final int MAX_MSG_PANE_HEIGHT = 800; /** - * The certificate to show. + * The certificates to show. */ - Certificate cert; + Certificate[] certs; /** * A text that describes why the verification failed. @@ -110,8 +111,7 @@ class VerifyCertificateDialogImpl R.getI18NString("service.gui.CERT_DIALOG_TITLE")); setModal(true); - // for now shows only the first certificate from the chain - this.cert = certs[0]; + this.certs = certs; this.message = message; setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE); @@ -224,34 +224,11 @@ class VerifyCertificateDialogImpl return; } - certPanel.setLayout(new BorderLayout()); + certPanel.setLayout(new BorderLayout(5, 5)); + certPanel.setBorder(new EmptyBorder(10, 10, 10, 10)); certPanel.add(alwaysTrustCheckBox, BorderLayout.NORTH); - Component certInfoPane = null; - if(cert instanceof X509Certificate) - { - certInfoPane = new X509CertificatePanel((X509Certificate)cert); - } - else - { - JTextArea textArea = new JTextArea(); - textArea.setOpaque(false); - textArea.setEditable(false); - textArea.setText(cert.toString()); - certInfoPane = textArea; - } - - final JScrollPane certScroll = new JScrollPane(certInfoPane); - certScroll.setPreferredSize(new Dimension(300, 300)); - certPanel.add(certScroll, BorderLayout.CENTER); - - SwingUtilities.invokeLater(new Runnable() - { - public void run() - { - certScroll.getVerticalScrollBar().setValue(0); - } - }); + certPanel.add(new X509CertificatePanel(certs), BorderLayout.CENTER); certButton.setText(R.getI18NString("service.gui.HIDE_CERT")); diff --git a/src/net/java/sip/communicator/plugin/desktoputil/ViewCertificateFrame.java b/src/net/java/sip/communicator/plugin/desktoputil/ViewCertificateFrame.java index 3c6bf33..943a204 100644 --- a/src/net/java/sip/communicator/plugin/desktoputil/ViewCertificateFrame.java +++ b/src/net/java/sip/communicator/plugin/desktoputil/ViewCertificateFrame.java @@ -39,9 +39,9 @@ public class ViewCertificateFrame private static final int MAX_MSG_PANE_HEIGHT = 800; /** - * The certificate to show. + * The certificates to show. */ - Certificate cert; + Certificate[] certs; /** * A text that describes why the verification failed. @@ -74,8 +74,7 @@ public class ViewCertificateFrame setTitle(title != null ? title : R.getI18NString("service.gui.CERT_DIALOG_TITLE")); - // for now shows only the first certificate from the chain - this.cert = certs[0]; + this.certs = certs; this.message = message; setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE); @@ -123,31 +122,8 @@ public class ViewCertificateFrame this.getContentPane().add(contentPane, BorderLayout.CENTER); - Component certInfoPane; - if(cert instanceof X509Certificate) - { - certInfoPane = new X509CertificatePanel((X509Certificate)cert); - } - else - { - JTextArea textArea = new JTextArea(); - textArea.setOpaque(false); - textArea.setEditable(false); - textArea.setText(cert.toString()); - certInfoPane = textArea; - } - - final JScrollPane certScroll = new JScrollPane(certInfoPane); - certScroll.setPreferredSize(new Dimension(300, 600)); - certPanel.add(certScroll, BorderLayout.CENTER); - - SwingUtilities.invokeLater(new Runnable() - { - public void run() - { - certScroll.getVerticalScrollBar().setValue(0); - } - }); + certPanel.add(new X509CertificatePanel(certs), BorderLayout.CENTER); + setPreferredSize(null); pack(); diff --git a/src/net/java/sip/communicator/plugin/desktoputil/X509CertificatePanel.java b/src/net/java/sip/communicator/plugin/desktoputil/X509CertificatePanel.java index dde05a4..ff48651 100644 --- a/src/net/java/sip/communicator/plugin/desktoputil/X509CertificatePanel.java +++ b/src/net/java/sip/communicator/plugin/desktoputil/X509CertificatePanel.java @@ -9,14 +9,18 @@ package net.java.sip.communicator.plugin.desktoputil; import java.awt.*;
import java.security.*;
import java.security.cert.*;
+import java.security.cert.Certificate;
import java.security.interfaces.*;
-import java.text.*;
import java.util.*;
import javax.naming.*;
import javax.naming.ldap.*;
import javax.security.auth.x500.*;
import javax.swing.*;
+import javax.swing.border.*;
+import javax.swing.event.*;
+import javax.swing.text.*;
+import javax.swing.tree.*;
import org.jitsi.service.resources.*;
@@ -28,42 +32,171 @@ public class X509CertificatePanel {
private static final long serialVersionUID = -8368302061995971947L;
+ private final JEditorPane infoTextPane = new JEditorPane();
+
+ private final ResourceManagementService R
+ = DesktopUtilActivator.getResources();
+
/**
- * Constructs a X509 certificate panel.
+ * Constructs a X509 certificate panel from a single certificate.
+ * If a chain is available instead use the second constructor.
+ * This constructor is kept for backwards compatibility and for convenience
+ * when there is only one certificate of interest.
*
* @param certificate <tt>X509Certificate</tt> object
*/
- public X509CertificatePanel(X509Certificate certificate)
+ public X509CertificatePanel(Certificate certificate)
+ {
+ this(new Certificate[]
+ {
+ certificate
+ });
+ }
+
+ /**
+ * Constructs a X509 certificate panel.
+ *
+ * @param certificates <tt>X509Certificate</tt> objects
+ */
+ public X509CertificatePanel(Certificate[] certificates)
{
- ResourceManagementService R = DesktopUtilActivator.getResources();
- DateFormat dateFormatter
- = DateFormat.getDateInstance(DateFormat.MEDIUM);
+ setLayout(new BorderLayout(5, 5));
+
+ // Certificate chain list
+ TransparentPanel topPanel = new TransparentPanel(new BorderLayout());
+ topPanel.add(new JLabel("<html><body><b>"
+ + R.getI18NString("service.gui.CERT_INFO_CHAIN")
+ + "</b></body></html>"), BorderLayout.NORTH);
+
+ DefaultMutableTreeNode top = new DefaultMutableTreeNode();
+ DefaultMutableTreeNode previous = top;
+ for (int i = certificates.length - 1; i >= 0; i--)
+ {
+ Certificate cert = certificates[i];
+ DefaultMutableTreeNode next = new DefaultMutableTreeNode(cert);
+ previous.add(next);
+ previous = next;
+ }
+ JTree tree = new JTree(top);
+ tree.setBorder(new BevelBorder(BevelBorder.LOWERED));
+ tree.setRootVisible(false);
+ tree.setExpandsSelectedPaths(true);
+ tree.getSelectionModel().setSelectionMode(
+ TreeSelectionModel.SINGLE_TREE_SELECTION);
+ tree.setCellRenderer(new DefaultTreeCellRenderer()
+ {
+
+ @Override
+ public Component getTreeCellRendererComponent(JTree tree,
+ Object value, boolean sel, boolean expanded, boolean leaf,
+ int row, boolean hasFocus)
+ {
+ JLabel component = (JLabel) super.getTreeCellRendererComponent(
+ tree, value, sel, expanded, leaf, row, hasFocus);
+ if (value instanceof DefaultMutableTreeNode)
+ {
+ Object o = ((DefaultMutableTreeNode) value).getUserObject();
+ if (o instanceof X509Certificate)
+ {
+ component.setText(
+ getSimplifiedName((X509Certificate) o));
+ }
+ else
+ {
+ // We don't know how to represent this certificate type,
+ // let's use the first 20 characters
+ String text = o.toString();
+ if (text.length() > 20)
+ {
+ text = text.substring(0, 20);
+ }
+ component.setText(text);
+ }
+ }
+ return component;
+ }
+
+ });
+ tree.getSelectionModel().addTreeSelectionListener(
+ new TreeSelectionListener()
+ {
+
+ @Override
+ public void valueChanged(TreeSelectionEvent e)
+ {
+ valueChangedPerformed(e);
+ }
+ });
+ tree.setSelectionPath(new TreePath(((
+ (DefaultTreeModel)tree.getModel()).getPathToRoot(previous))));
+ topPanel.add(tree, BorderLayout.CENTER);
+
+ add(topPanel, BorderLayout.NORTH);
+
+ // Certificate details pane
+ Caret caret = infoTextPane.getCaret();
+ if (caret instanceof DefaultCaret)
+ {
+ ((DefaultCaret) caret).setUpdatePolicy(DefaultCaret.NEVER_UPDATE);
+ }
- Insets valueInsets = new Insets(2,10,0,0);
- Insets titleInsets = new Insets(10,5,0,0);
+ /*
+ * Make JEditorPane respect our default font because we will be using it
+ * to just display text.
+ */
+ infoTextPane.putClientProperty(
+ JEditorPane.HONOR_DISPLAY_PROPERTIES,
+ true);
+
+ infoTextPane.setOpaque(false);
+ infoTextPane.setEditable(false);
+ infoTextPane.setContentType("text/html");
+ infoTextPane.setText(toString(certificates[0]));
+
+ final JScrollPane certScroll = new JScrollPane(infoTextPane);
+ certScroll.setPreferredSize(new Dimension(300, 500));
+ add(certScroll, BorderLayout.CENTER);
+ }
- setLayout(new GridBagLayout());
+ /**
+ * Creates a String representation of the given object.
+ * @param certificate to print
+ * @return the String representation
+ */
+ private String toString(Object certificate)
+ {
+ final StringBuilder sb = new StringBuilder();
+ sb.append("<html><body>\n");
- int currentRow = 0;
+ if (certificate instanceof X509Certificate)
+ {
+ renderX509(sb, (X509Certificate) certificate);
+ }
+ else
+ {
+ sb.append("<pre>\n");
+ sb.append(certificate.toString());
+ sb.append("</pre>\n");
+ }
- GridBagConstraints constraints = new GridBagConstraints();
- constraints.anchor = GridBagConstraints.WEST;
- constraints.fill = GridBagConstraints.HORIZONTAL;
- constraints.insets = new Insets(2,5,0,0);
- constraints.gridx = 0;
- constraints.weightx = 0;
- constraints.weighty = 0;
- constraints.gridy = currentRow++;
+ sb.append("</body></html>");
+ return sb.toString();
+ }
+ /**
+ * Appends an HTML representation of the given X509Certificate.
+ * @param sb StringBuilder to append to
+ * @param certificate to print
+ */
+ private void renderX509(StringBuilder sb, X509Certificate certificate)
+ {
X500Principal issuer = certificate.getIssuerX500Principal();
X500Principal subject = certificate.getSubjectX500Principal();
- add(new JLabel(
- R.getI18NString("service.gui.CERT_INFO_ISSUED_TO")),
- constraints);
+ sb.append("<table cellspacing='1' cellpadding='1'>\n");
// subject
- constraints.insets = valueInsets;
+ addTitle(sb, R.getI18NString("service.gui.CERT_INFO_ISSUED_TO"));
try
{
for(Rdn name : new LdapName(subject.getName()).getRdns())
@@ -75,47 +208,31 @@ public class X509CertificatePanel if ((lbl == null) || ("!" + lblKey + "!").equals(lbl))
lbl = nameType;
- constraints.gridy = currentRow++;
- constraints.gridx = 0;
- add(new JLabel(lbl), constraints);
-
+ final String value;
Object nameValue = name.getValue();
if (nameValue instanceof byte[])
{
byte[] nameValueAsByteArray = (byte[]) nameValue;
- lbl
+ value
= getHex(nameValueAsByteArray) + " ("
+ new String(nameValueAsByteArray) + ")";
}
else
- lbl = nameValue.toString();
+ value = nameValue.toString();
- constraints.gridx = 1;
- add(new JLabel(lbl), constraints);
+ addField(sb, lbl, value);
}
}
catch (InvalidNameException ine)
{
- constraints.gridy = currentRow++;
- add(new JLabel(
- R.getI18NString("service.gui.CERT_INFO_CN")),
- constraints);
- constraints.gridx = 1;
- add(
- new JLabel(subject.getName()),
- constraints);
+ addField(sb, R.getI18NString("service.gui.CERT_INFO_CN"),
+ subject.getName());
}
// issuer
- constraints.gridy = currentRow++;
- constraints.gridx = 0;
- constraints.insets = titleInsets;
- add(new JLabel(
- R.getI18NString("service.gui.CERT_INFO_ISSUED_BY")),
- constraints);
- constraints.insets = valueInsets;
+ addTitle(sb, R.getI18NString("service.gui.CERT_INFO_ISSUED_BY"));
try
{
for(Rdn name : new LdapName(issuer.getName()).getRdns())
@@ -127,268 +244,133 @@ public class X509CertificatePanel if ((lbl == null) || ("!" + lblKey + "!").equals(lbl))
lbl = nameType;
- constraints.gridy = currentRow++;
- constraints.gridx = 0;
- constraints.gridx = 0;
- add(new JLabel(lbl), constraints);
-
+ final String value;
Object nameValue = name.getValue();
if (nameValue instanceof byte[])
{
byte[] nameValueAsByteArray = (byte[]) nameValue;
- lbl
+ value
= getHex(nameValueAsByteArray) + " ("
+ new String(nameValueAsByteArray) + ")";
}
else
- lbl = nameValue.toString();
+ value = nameValue.toString();
- constraints.gridx = 1;
- add(new JLabel(lbl), constraints);
+ addField(sb, lbl, value);
}
}
catch (InvalidNameException ine)
{
- constraints.gridy = currentRow++;
- add(new JLabel(
- R.getI18NString("service.gui.CERT_INFO_CN")),
- constraints);
- constraints.gridx = 1;
- add(
- new JLabel(issuer.getName()),
- constraints);
+ addField(sb, R.getI18NString("service.gui.CERT_INFO_CN"),
+ issuer.getName());
}
// validity
- constraints.gridy = currentRow++;
- constraints.gridx = 0;
- constraints.insets = titleInsets;
- add(new JLabel(
- R.getI18NString("service.gui.CERT_INFO_VALIDITY")),
- constraints);
- constraints.insets = valueInsets;
-
- constraints.gridy = currentRow++;
- constraints.gridx = 0;
- add(new JLabel(
- R.getI18NString("service.gui.CERT_INFO_ISSUED_ON")),
- constraints);
- constraints.gridx = 1;
- add(
- new JLabel(dateFormatter.format(certificate.getNotBefore())),
- constraints);
-
- constraints.gridy = currentRow++;
- constraints.gridx = 0;
- add(new JLabel(
- R.getI18NString("service.gui.CERT_INFO_EXPIRES_ON")),
- constraints);
- constraints.gridx = 1;
- add(
- new JLabel(dateFormatter.format(certificate.getNotAfter())),
- constraints);
-
- constraints.gridy = currentRow++;
- constraints.gridx = 0;
- constraints.insets = titleInsets;
- add(new JLabel(
- R.getI18NString("service.gui.CERT_INFO_FINGERPRINTS")),
- constraints);
- constraints.insets = valueInsets;
+ addTitle(sb, R.getI18NString("service.gui.CERT_INFO_VALIDITY"));
+ addField(sb, R.getI18NString("service.gui.CERT_INFO_ISSUED_ON"),
+ certificate.getNotBefore().toString());
+ addField(sb, R.getI18NString("service.gui.CERT_INFO_EXPIRES_ON"),
+ certificate.getNotAfter().toString());
+ addTitle(sb, R.getI18NString("service.gui.CERT_INFO_FINGERPRINTS"));
try
{
String sha1String = getThumbprint(certificate, "SHA1");
String md5String = getThumbprint(certificate, "MD5");
- JTextArea sha1Area = new JTextArea(sha1String);
- sha1Area.setLineWrap(false);
- sha1Area.setOpaque(false);
- sha1Area.setWrapStyleWord(true);
- sha1Area.setEditable(false);
-
- constraints.gridy = currentRow++;
- constraints.gridx = 0;
- add(new JLabel("SHA1:"),
- constraints);
-
- constraints.gridx = 1;
- add(
- sha1Area,
- constraints);
-
- constraints.gridy = currentRow++;
- constraints.gridx = 0;
- add(new JLabel("MD5:"),
- constraints);
-
- JTextArea md5Area = new JTextArea(md5String);
- md5Area.setLineWrap(false);
- md5Area.setOpaque(false);
- md5Area.setWrapStyleWord(true);
- md5Area.setEditable(false);
-
- constraints.gridx = 1;
- add(
- md5Area,
- constraints);
+ addField(sb, "SHA1:", sha1String);
+ addField(sb, "MD5:", md5String);
}
- catch (Exception e)
+ catch (CertificateException e)
{
// do nothing as we cannot show this value
}
- constraints.gridy = currentRow++;
- constraints.gridx = 0;
- constraints.insets = titleInsets;
- add(new JLabel(
- R.getI18NString("service.gui.CERT_INFO_CERT_DETAILS")),
- constraints);
- constraints.insets = valueInsets;
-
- constraints.gridy = currentRow++;
- constraints.gridx = 0;
- add(new JLabel(
- R.getI18NString("service.gui.CERT_INFO_SER_NUM")),
- constraints);
- constraints.gridx = 1;
- add(
- new JLabel(certificate.getSerialNumber().toString()),
- constraints);
-
- constraints.gridy = currentRow++;
- constraints.gridx = 0;
- add(new JLabel(
- R.getI18NString("service.gui.CERT_INFO_VER")),
- constraints);
- constraints.gridx = 1;
- add(
- new JLabel(String.valueOf(certificate.getVersion())),
- constraints);
-
- constraints.gridy = currentRow++;
- constraints.gridx = 0;
- add(new JLabel(
- R.getI18NString("service.gui.CERT_INFO_SIGN_ALG")),
- constraints);
- constraints.gridx = 1;
- add(
- new JLabel(String.valueOf(certificate.getSigAlgName())),
- constraints);
-
- constraints.gridy = currentRow++;
- constraints.gridx = 0;
- constraints.insets = titleInsets;
- add(new JLabel(
- R.getI18NString("service.gui.CERT_INFO_PUB_KEY_INFO")),
- constraints);
- constraints.insets = valueInsets;
-
- constraints.gridy = currentRow++;
- constraints.gridx = 0;
- add(new JLabel(
- R.getI18NString("service.gui.CERT_INFO_ALG")),
- constraints);
- constraints.gridx = 1;
- add(
- new JLabel(certificate.getPublicKey().getAlgorithm()),
- constraints);
+ addTitle(sb, R.getI18NString("service.gui.CERT_INFO_CERT_DETAILS"));
+
+ addField(sb, R.getI18NString("service.gui.CERT_INFO_SER_NUM"),
+ certificate.getSerialNumber().toString());
+
+ addField(sb, R.getI18NString("service.gui.CERT_INFO_VER"),
+ String.valueOf(certificate.getVersion()));
+
+ addField(sb, R.getI18NString("service.gui.CERT_INFO_SIGN_ALG"),
+ String.valueOf(certificate.getSigAlgName()));
+
+ addTitle(sb, R.getI18NString("service.gui.CERT_INFO_PUB_KEY_INFO"));
+
+ addField(sb, R.getI18NString("service.gui.CERT_INFO_ALG"),
+ certificate.getPublicKey().getAlgorithm());
if(certificate.getPublicKey().getAlgorithm().equals("RSA"))
{
RSAPublicKey key = (RSAPublicKey)certificate.getPublicKey();
- constraints.gridy = currentRow++;
- constraints.gridx = 0;
- add(new JLabel(
- R.getI18NString("service.gui.CERT_INFO_PUB_KEY")),
- constraints);
-
- JTextArea pubkeyArea = new JTextArea(
+ addField(sb, R.getI18NString("service.gui.CERT_INFO_PUB_KEY"),
R.getI18NString(
"service.gui.CERT_INFO_KEY_BYTES_PRINT",
new String[]{
String.valueOf(key.getModulus().toByteArray().length-1),
key.getModulus().toString(16)
}));
- pubkeyArea.setLineWrap(false);
- pubkeyArea.setOpaque(false);
- pubkeyArea.setWrapStyleWord(true);
- pubkeyArea.setEditable(false);
-
- constraints.gridx = 1;
- add(
- pubkeyArea,
- constraints);
-
- constraints.gridy = currentRow++;
- constraints.gridx = 0;
- add(new JLabel(
- R.getI18NString("service.gui.CERT_INFO_EXP")),
- constraints);
- constraints.gridx = 1;
- add(
- new JLabel(key.getPublicExponent().toString()),
- constraints);
-
- constraints.gridy = currentRow++;
- constraints.gridx = 0;
- add(new JLabel(
- R.getI18NString("service.gui.CERT_INFO_KEY_SIZE")),
- constraints);
- constraints.gridx = 1;
- add(
- new JLabel(R.getI18NString(
+
+ addField(sb, R.getI18NString("service.gui.CERT_INFO_EXP"),
+ key.getPublicExponent().toString());
+
+ addField(sb, R.getI18NString("service.gui.CERT_INFO_KEY_SIZE"),
+ R.getI18NString(
"service.gui.CERT_INFO_KEY_BITS_PRINT",
new String[]{
- String.valueOf(key.getModulus().bitLength())})),
- constraints);
+ String.valueOf(key.getModulus().bitLength())}));
}
else if(certificate.getPublicKey().getAlgorithm().equals("DSA"))
{
DSAPublicKey key =
(DSAPublicKey)certificate.getPublicKey();
- constraints.gridy = currentRow++;
- constraints.gridx = 0;
- add(new JLabel("Y:"), constraints);
-
- JTextArea yArea = new JTextArea(key.getY().toString(16));
- yArea.setLineWrap(false);
- yArea.setOpaque(false);
- yArea.setWrapStyleWord(true);
- yArea.setEditable(false);
-
- constraints.gridx = 1;
- add(
- yArea,
- constraints);
+ addField(sb, "Y:", key.getY().toString(16));
}
- constraints.gridy = currentRow++;
- constraints.gridx = 0;
- add(new JLabel(
- R.getI18NString("service.gui.CERT_INFO_SIGN")),
- constraints);
-
- JTextArea signArea = new JTextArea(
+ addField(sb, R.getI18NString("service.gui.CERT_INFO_SIGN"),
R.getI18NString(
"service.gui.CERT_INFO_KEY_BYTES_PRINT",
new String[]{
String.valueOf(certificate.getSignature().length),
getHex(certificate.getSignature())
}));
- signArea.setLineWrap(false);
- signArea.setOpaque(false);
- signArea.setWrapStyleWord(true);
- signArea.setEditable(false);
-
- constraints.gridx = 1;
- add(
- signArea,
- constraints);
+
+ sb.append("</table>\n");
+ }
+
+ /**
+ * Add a title.
+ *
+ * @param sb StringBuilder to append to
+ * @param title to print
+ */
+ private void addTitle(StringBuilder sb, String title)
+ {
+ sb.append("<tr><td colspan='2'")
+ .append(" style='margin-top: 5pt; white-space: nowrap'><p><b>")
+ .append(title).append("</b></p></td></tr>\n");
+ }
+
+ /**
+ * Add a field.
+ * @param sb StringBuilder to append to
+ * @param field name of the certificate field
+ * @param value to print
+ */
+ private void addField(StringBuilder sb, String field, String value)
+ {
+ sb.append("<tr>")
+ .append("<td style='margin-left: 5pt; margin-right: 25pt;")
+ .append(" white-space: nowrap'>")
+ .append(field).append("</td>")
+ .append("<td>").append(value).append("</td>")
+ .append("</tr>\n");
}
/**
@@ -450,4 +432,62 @@ public class X509CertificatePanel }
return sb.toString();
}
+
+ /**
+ * Construct a "simplified name" based on the subject DN from the
+ * certificate. The purpose is to have something shorter to display in the
+ * list. The name used is one of the following DN parts, if
+ * available, otherwise the complete DN:
+ * 'CN', 'OU' or else 'O'.
+ * @param cert to read subject DN from
+ * @return the simplified name
+ */
+ private static String getSimplifiedName(X509Certificate cert)
+ {
+ final HashMap<String, String> parts = new HashMap<String, String>();
+ try
+ {
+ for (Rdn name : new LdapName(
+ cert.getSubjectX500Principal().getName()).getRdns())
+ {
+ if (name.getType() != null && name.getValue() != null)
+ {
+ parts.put(name.getType(), name.getValue().toString());
+ }
+ }
+ }
+ catch (InvalidNameException ignored) // NOPMD
+ {
+ }
+
+ String result = parts.get("CN");
+ if (result == null)
+ {
+ result = parts.get("OU");
+ }
+ if (result == null)
+ {
+ result = parts.get("O");
+ }
+ if (result == null)
+ {
+ result = cert.getSubjectX500Principal().getName();
+ }
+ return result;
+ }
+
+ /**
+ * Called when the selection changed in the tree.
+ * Loads the selected certificate.
+ * @param e the event
+ */
+ private void valueChangedPerformed(TreeSelectionEvent e)
+ {
+ Object o = e.getNewLeadSelectionPath().getLastPathComponent();
+ if (o instanceof DefaultMutableTreeNode)
+ {
+ DefaultMutableTreeNode node = (DefaultMutableTreeNode) o;
+ infoTextPane.setText(toString(node.getUserObject()));
+ }
+ }
}
diff --git a/src/net/java/sip/communicator/plugin/desktoputil/presence/GlobalStatusMessageMenu.java b/src/net/java/sip/communicator/plugin/desktoputil/presence/GlobalStatusMessageMenu.java index 7710157..ab160e7 100644 --- a/src/net/java/sip/communicator/plugin/desktoputil/presence/GlobalStatusMessageMenu.java +++ b/src/net/java/sip/communicator/plugin/desktoputil/presence/GlobalStatusMessageMenu.java @@ -127,7 +127,8 @@ public class GlobalStatusMessageMenu = protocolProvider.getOperationSet( OperationSetPresence.class); - if(presenceOpSet == null) + if(presenceOpSet == null + || !protocolProvider.isRegistered()) continue; presenceOpSet.publishPresenceStatus( diff --git a/src/net/java/sip/communicator/plugin/otr/OtrActivator.java b/src/net/java/sip/communicator/plugin/otr/OtrActivator.java index e69d9cf..6908778 100644 --- a/src/net/java/sip/communicator/plugin/otr/OtrActivator.java +++ b/src/net/java/sip/communicator/plugin/otr/OtrActivator.java @@ -428,8 +428,12 @@ public class OtrActivator // Unregister transformation layer. // start listening for newly register or removed protocol providers bundleContext.removeServiceListener(this); - bundleContext.removeServiceListener(scOtrEngine); - bundleContext.removeServiceListener(otrContactManager); + + if(scOtrEngine != null) + bundleContext.removeServiceListener(scOtrEngine); + + if(otrContactManager != null) + bundleContext.removeServiceListener(otrContactManager); ServiceReference[] protocolProviderRefs; try diff --git a/src/net/java/sip/communicator/plugin/otr/OtrConfigurator.java b/src/net/java/sip/communicator/plugin/otr/OtrConfigurator.java index a4c47e4..e4b91e8 100644 --- a/src/net/java/sip/communicator/plugin/otr/OtrConfigurator.java +++ b/src/net/java/sip/communicator/plugin/otr/OtrConfigurator.java @@ -8,7 +8,7 @@ package net.java.sip.communicator.plugin.otr; import java.util.*;
-import org.bouncycastle.util.encoders.*;
+import org.bouncycastle.util.encoders.Base64; // disambiguation
import org.jitsi.service.configuration.*;
/**
diff --git a/src/net/java/sip/communicator/service/protocol/AccountManager.java b/src/net/java/sip/communicator/service/protocol/AccountManager.java index 07baed3..6cf7c5b 100644 --- a/src/net/java/sip/communicator/service/protocol/AccountManager.java +++ b/src/net/java/sip/communicator/service/protocol/AccountManager.java @@ -11,6 +11,7 @@ import java.util.*; import net.java.sip.communicator.service.credentialsstorage.*;
import net.java.sip.communicator.service.protocol.event.*;
import net.java.sip.communicator.util.*;
+import net.java.sip.communicator.util.Base64; // disambiguation
import org.jitsi.service.configuration.*;
import org.osgi.framework.*;
diff --git a/test/net/java/sip/communicator/slick/contactlist/TestMetaContactList.java b/test/net/java/sip/communicator/slick/contactlist/TestMetaContactList.java index 1a1d27e..f9344bf 100644 --- a/test/net/java/sip/communicator/slick/contactlist/TestMetaContactList.java +++ b/test/net/java/sip/communicator/slick/contactlist/TestMetaContactList.java @@ -476,6 +476,13 @@ public class TestMetaContactList assertEquals("Source meta contact." , newMetaContact, evt.getSourceMetaContact()); + MclSlickFixture.mockPresOpSet.createVolatileContact( + newSubscriptionName + "1"); + MclSlickFixture.mockPresOpSet.createVolatileContact( + newSubscriptionName + "2"); + // and now clear volatile + MclSlickFixture.mockPresOpSet.removeServerStoredContactGroup( + MclSlickFixture.mockPresOpSet.getNonPersistentGroup()); } diff --git a/test/net/java/sip/communicator/slick/protocol/sip/TestOperationSetServerStoredInfo.java b/test/net/java/sip/communicator/slick/protocol/sip/TestOperationSetServerStoredInfo.java index f419881..2136f37 100644 --- a/test/net/java/sip/communicator/slick/protocol/sip/TestOperationSetServerStoredInfo.java +++ b/test/net/java/sip/communicator/slick/protocol/sip/TestOperationSetServerStoredInfo.java @@ -16,7 +16,7 @@ import net.java.sip.communicator.impl.protocol.sip.*; import net.java.sip.communicator.impl.protocol.sip.xcap.*; import net.java.sip.communicator.impl.protocol.sip.xcap.model.prescontent.*; import net.java.sip.communicator.service.protocol.*; -import net.java.sip.communicator.util.*; +import net.java.sip.communicator.util.Base64; // disambiguation /** * Testing of the user and account info. Tests for reading, adding, removing, diff --git a/test/net/java/sip/communicator/slick/slickless/util/TestBase64.java b/test/net/java/sip/communicator/slick/slickless/util/TestBase64.java index 20d1fa6..7133651 100644 --- a/test/net/java/sip/communicator/slick/slickless/util/TestBase64.java +++ b/test/net/java/sip/communicator/slick/slickless/util/TestBase64.java @@ -9,7 +9,7 @@ package net.java.sip.communicator.slick.slickless.util; import java.util.*; import junit.framework.*; -import net.java.sip.communicator.util.*; +import net.java.sip.communicator.util.Base64; // disambiguation /** * Tests the methods of the Base64 class. |