Compare commits

..

598 commits

Author SHA1 Message Date
mj
94dd3be54f Merge pull request #423 from TiagoDanin-Forks/README
README: Fix Markdown
2017-10-17 07:52:34 +02:00
Tiago Danin
0e0958753c README: Fix Markdown 2017-10-15 19:01:24 -03:00
mj
5876c98f8a Merge pull request #422 from unansweredocd/add-remove-session-in-faq
Add remove old session info to README
2017-10-15 21:23:31 +02:00
Sam Form
d286c1f338 use the more common purple directory 2017-10-15 20:52:24 +02:00
Sam Form
a54c4e7dd2 add info on how to clean the telegram-purple directory to deal with revoked sessions 2017-10-15 20:07:03 +02:00
Ben Wiederhake
7aa6874074 Update nsi file to reflect changes in po/LINGUAS 2017-04-10 22:54:08 +02:00
Ben Wiederhake
065e0b7ac9 Silence warnings about bad .po files
Sadly, Transifex doesn't seem to acknowledge that the generated files
are bad.  Also, I don't want to introduce any infrastructure to
fix the files every time after I download them.
So they stay broken, and the warnings must be silenced.
Sadly, this means that future warnings will get ignored, too.
Let's hope this won't go too bad.
2017-04-10 22:17:54 +02:00
mjentsch
6fd109bfca Increase version to 1.3.1 2017-04-09 13:48:52 +02:00
Ben Wiederhake
ada2c9aa1f AppStream: import translations from Transifex. Thanks to samant! 2017-03-13 23:36:27 +01:00
Ben Wiederhake
42c9ea8a3a AppStream: fix target order
Ahh, right, thankyou make, for reminding me that 'all' isn't actually
any automagically chosen target that is chosen when no target has been
specified.  No, instead, the first target is chosen.
And not just any target!  Only the first non-templated target is chosen,
so in this case: po/telegram-purple.metainfo.xml.pot .

However, in our case that's utterly pointless, so 'all' needs to
be on top again.  I should have known there was an important reason.
2017-03-13 23:35:59 +01:00
Ben Wiederhake
2ffa9e176a Import translations from Transifex. Thanks to eischmann, raven, savant! 2017-03-13 23:30:39 +01:00
mjentsch
77d50c3ae1 Merge branch 'EionRobb-group-typing-notifications' into dev-1.4.0
Merges pull request #359
2017-03-13 22:32:15 +01:00
mjentsch
ea0efaeab7 Merge branch 'dev-1.4.0' of https://github.com/majn/telegram-purple into dev-1.4.0 2017-03-13 22:28:38 +01:00
mjentsch
942e7c6244 Include autoloading for all types of documents and improve document captions 2017-03-13 22:28:10 +01:00
mjentsch
72151e7cbd Increase default file size download threshold
Far too many files are bigger than 8mb, we need a more pleasant default behavior
2017-03-13 21:56:49 +01:00
Eion Robb
0446ca2b9b Support typing notifications using the group-typing-notifications plugin
See https://github.com/EionRobb/pidgin-groupchat-typing-notifications
2017-03-13 22:27:01 +13:00
Ben Wiederhake
653eb902ce Import tgl updates 2017-03-06 22:01:07 +01:00
mjentsch
ab5b444e26 code style 2017-03-06 20:13:45 +01:00
mjentsch
014145c8ee Include libtgl crash and c++ compilation fixes 2017-03-02 20:34:02 +01:00
mjentsch
1cb22c9df1 Fix debug message 2017-03-02 20:24:33 +01:00
mjentsch
5a59dc100c Include pull request #302 by EionRobb 2017-03-02 20:23:17 +01:00
Ben Wiederhake
1842756995 Import plugin translations from Transifex. Thanks to all translators!
Also removed outdated HOWTO.md; and deprecated pt_BR,
as it fell below the 75% mark.
2017-02-27 11:47:10 +01:00
Ben Wiederhake
ea697f1cc7 Import AppStream translations from Transifex. Thanks to all translators! 2017-02-27 10:57:41 +01:00
Samuel Vandamme
20c78ce94c Added missing dependencies for Debian/Ubuntu 2017-02-24 22:30:37 +01:00
mjentsch
c0210af0b9 Fix crash on joining non-existing chat 2017-02-11 12:51:33 +01:00
mjentsch
aa3e220738 Increase version of OSX SDK for Adium bundle 2017-02-11 12:51:33 +01:00
mjentsch
4980fa460c Fix crash on duplicated peer name in peer tree 2017-02-11 12:51:33 +01:00
Ben Wiederhake
d8a040b5d5 tgl patch for OpenSSL variant 2017-01-22 22:09:04 +01:00
Ben Wiederhake
c5929af862 Merge branch 'master' into dev-1.4.0 2017-01-22 22:07:52 +01:00
mj
766335c34d Update README.md 2017-01-16 12:18:34 +01:00
mj
2ca2c46807 Merge pull request #342 from redsn0w0/patch-1
Update README.md
2017-01-16 10:54:59 +01:00
redsn0w
6234a65228 Update README.md
Fixed the telegram group invite link.
2017-01-14 12:15:44 +01:00
Ben Wiederhake
f45ed4572a Print some info when running into 'Sending message failed' errors
Related to #339
2017-01-09 18:22:17 +01:00
Ben Wiederhake
5de79c45a6 Merge branch 'master' into dev-1.4.0 2017-01-09 17:42:44 +01:00
mj
c52854ae51 Fix group chat link 2017-01-02 15:15:30 +01:00
mj
1dc5e2ba46 Merge pull request #334 from stefan2904/patch-1
updated readme to telegram-adium-1.3.0
2016-12-13 08:05:24 +01:00
Stefan
345006633c updated readme to telegram-adium-1.3.0 2016-12-13 00:31:12 +01:00
Ben Wiederhake
bb215b59d3 Import translations form Transifex. Thanks to all translators!
I'm aware that the new PO files are fishy and throw a lot of warnings.
I've created a ticket with Transifex, as their new PO-generation routine
seems to be bug-ridden.

However, until they fix it, we have to use the ugly value for msgid "".
2016-11-28 01:09:43 +01:00
Ben Wiederhake
59ec18fe1b Merge branch 'dev-1.3.0' into dev-1.4.0 2016-11-27 23:53:54 +01:00
mjentsch
7744facaec Merge branch 'chat-kick-c' of https://github.com/EionRobb/telegram-purple into dev-1.4.0 2016-11-13 19:26:55 +01:00
Eion Robb
71276b109e Add support for a /kick command in chat rooms 2016-11-13 09:22:28 +13:00
mj
cd451723ef Update README.md
Update chat link
2016-10-29 19:09:01 +02:00
Ben Wiederhake
a904aa37da Enable stack smashing protection (#315)
Check "by example" whether `-fstack-protector-strong` is supported.
2016-10-13 16:02:37 +02:00
Alain
ab7dcb8ee6 Changed check if -fstack-protector-strong is supported 2016-10-13 15:41:22 +02:00
Alain
0d0a2cbbd7 Check if gcc >= 5.0 before enabling stack smashing protection 2016-10-13 13:48:06 +02:00
Alain
9d86bf2af6 Enhance security using stack protector and -D_FORTIFY_SOURCE 2016-10-13 12:38:07 +02:00
Ben Wiederhake
23864bf541 Only load photos for non-deleted users 2016-10-11 00:13:09 +02:00
Ben Wiederhake
5fea0dae38 Merge Pull Request #304 from EionRobb/patch-4 2016-09-04 21:54:16 +02:00
Ben Wiederhake
82a5cbbf5a Merge Pull Request #303 from EionRobb/patch-3 2016-09-04 21:53:56 +02:00
Ben Wiederhake
6f89e259df Update tgl (32-bit BN2ull) 2016-09-04 21:52:41 +02:00
Eion Robb
f4b47623cf Compile tgp-info on Windows 2016-09-02 20:52:39 +12:00
Eion Robb
8b46df36b6 tgl Windows Makefile no longer needs scheme version
This change was made a while ago in the Makefile.in but not brought through to the mingw Makefile
2016-09-02 20:51:34 +12:00
Ben Wiederhake
f75e3e9954 Produce new master-pot 2016-08-31 22:55:47 +02:00
Ben Wiederhake
b7283219c0 Makefile: remove superfluous indirection 2016-08-30 00:39:29 +02:00
Ben Wiederhake
80d3146ebb Fix tgl build (don't dep on xxd, don't create empty file)
Fixes #298.
2016-08-30 00:26:12 +02:00
Ben Wiederhake
150f0c48cc Only build required libraries 2016-08-22 22:38:31 +02:00
Ben Wiederhake
4d8995d565 Merge pull request #299 from ilario/master
README.md: add submodule update in Debian package build instructions
2016-08-19 21:48:11 +02:00
Ilario Gelmetti
1798a43d91 README.md: add submodule update in Debian package build instructions 2016-08-19 17:14:45 +02:00
Ben Wiederhake
0340e4f14b Fix description how to build Debian package 2016-08-08 10:53:04 +02:00
Ben Wiederhake
43e5f81683 build: properly clean up 2016-08-08 10:53:04 +02:00
Ben Wiederhake
be0d4cd299 build: proper recursion in make 2016-08-08 10:53:04 +02:00
Ben Wiederhake
de3100e6f2 Minor typos 2016-08-08 10:25:11 +02:00
mjentsch
bf837abf38 Update CHANGELOG 2016-08-08 00:57:04 +02:00
mjentsch
0926d27195 Fix dropped HTML messages
Remove ability to send bold and italic messages to quick-fix a bug that causes
messages with unknown formatting to be dropped by libtgl.
2016-08-08 00:03:19 +02:00
mjentsch
1c32a0ef9e Fix clang warnings. 2016-08-02 01:27:00 +02:00
Ben Wiederhake
99d684bf89 Check for error return values of tgl_init 2016-08-02 01:10:02 +02:00
Ben Wiederhake
f2431f3a3a Fix tgl for OpenSSL-mode 2016-08-02 00:40:41 +02:00
Ben Wiederhake
a6b2ea20e1 Update LINGUAS 2016-08-02 00:04:45 +02:00
Ben Wiederhake
e1242691d2 Comments shouldn't be printed 2016-08-02 00:04:45 +02:00
Ben Wiederhake
b15d0a3f86 Import from Transifex: updated translations. Thank you! 2016-08-02 00:04:45 +02:00
Ben Wiederhake
9a2c6a73ac Import intermediate translation 2016-08-02 00:04:45 +02:00
mjentsch
35faf09857 Merge important crash fixes in tgl 2016-08-01 23:57:13 +02:00
mjentsch
11631ace8b Merge branch 'master' of https://github.com/majn/telegram-purple into dev-1.3.0 2016-08-01 23:28:26 +02:00
mjentsch
7463ef080e Merge HTML href fix in libtgl 2016-07-22 21:05:45 +02:00
mjentsch
e926b216b6 Fix code style 2016-06-30 19:29:55 +02:00
mjentsch
6940278a51 Merge HTML fixes in libtgl 2016-04-10 18:27:21 +02:00
mjentsch
daeb7db701 Only fetch history for joined channels
Prevent loading history for non-joined channels that may occur when messages forwarded for non-joined channels are being fetched.
2016-04-03 17:16:13 +02:00
mjentsch
786394bb3e Fix history in Adium, store channel sequence as account options instead of the blist 2016-04-03 17:04:35 +02:00
mjentsch
01104c87d3 Disable style tags in Adium, not working with Telegram 2016-04-02 22:37:57 +02:00
mjentsch
413e449112 cleanup 2016-04-02 22:28:03 +02:00
mjentsch
5f7da0ab50 Fix use-after-free, improve forward messages 2016-04-02 22:00:08 +02:00
mjentsch
e73e247444 Auto-load audio, video and animated messages up to 8mb
Reduce the amount of annoying popup messages for file transfers. Don't do it for Adium, which doesn't support file-links for security reasons. Make the threshold configurable.
2016-04-02 21:58:08 +02:00
mjentsch
921db6bc5c Fix outgoing message handling 2016-03-28 01:12:35 +02:00
mjentsch
a35c6cdd3b Support sending code tags and improve inline image handling
Properly parse inline img tags in messages to support multiple inline messages in one message.
Adium: remove adium-specific code path and allow embedding markup in outgoing message
2016-03-27 03:00:23 +02:00
Eion Robb
7205b4df1b Update telegram-purple.c to say that the connection supports HTML messages 2016-03-27 03:00:23 +02:00
Eion Robb
952a41f1ed Update tgp-msg.c to flag outgoing messages as HTML 2016-03-27 03:00:23 +02:00
Ben Wiederhake
81f33055b5 Use constant instead of magic string 2016-03-23 16:32:07 +01:00
Ben Wiederhake
7103bf9bfe Remove unused file 2016-03-23 16:32:07 +01:00
Ben Wiederhake
e828fc36ef Allow out-of-vcs builds 2016-03-23 16:32:07 +01:00
Ben Wiederhake
70340d7b55 Extract script to generate origtar 2016-03-23 16:32:07 +01:00
Ben Wiederhake
7439a68b09 Extract script to generate commit.h 2016-03-23 16:32:07 +01:00
Ben Wiederhake
6684a75865 Include HACKING files
Closes #242 by keeping track of all requirements, rationals,
and approaches in a version-controlled file.
2016-03-23 16:32:07 +01:00
Ben Wiederhake
4de2a69ac1 Use correct repository 2016-03-23 16:31:10 +01:00
mjentsch
6a6bff563b Merge branch 'dev-1.3.0' of https://github.com/majn/telegram-purple into dev-1.3.0 2016-03-23 14:00:48 +01:00
mjentsch
c595e9ef14 Always load channel history on startup 2016-03-23 12:57:27 +01:00
mjentsch
236083e217 Fix coding guidelines 2016-03-23 12:49:16 +01:00
mjentsch
aa87311f6d Fix crash on deleted chat 2016-03-23 12:48:14 +01:00
mjentsch
236153cee7 Reduce the amount of needless read recipes being sent 2016-03-23 12:47:24 +01:00
mjentsch
dc9dac44ff Fix compiling Adium plugin 2016-03-23 12:46:29 +01:00
mjentsch
004f84b544 Experimental support for channel history
Fetch missing channel history, keep track of message IDs. Still broken in Adium.
2016-03-23 12:46:04 +01:00
mjentsch
a3341cb5cf Merge branch 'master' into dev-1.3.0 2016-03-20 17:18:37 +01:00
Ben Wiederhake
ee2a6fb740 Merge pull request #254 from rshadow/master
Fix README.md prerequires for deb
2016-03-17 11:21:07 +01:00
Roman V. Nikolaev
ff66ed2512 Fix README.md prerequires for deb 2016-03-17 01:10:35 +03:00
Ben Wiederhake
1388bc6ed7 Fix empty group handling
Fixes #203.
2016-03-11 15:06:35 +01:00
mjentsch
54cfce4df2 Bump version to 1.2.6 2016-03-11 13:10:14 +01:00
mjentsch
d020f9c32a Fix Adium bundle breaking on library version jumps
Link against the generic libpurple and glib bundled with Adium instead of the specific version number to avoid breakage on version updates.
2016-03-11 12:18:08 +01:00
mjentsch
3107a601eb Merge libtgl fix use-after-not-created for photos 2016-02-27 17:59:03 +01:00
mj
cb12fbf4f9 Update group chat link 2016-02-27 17:55:01 +01:00
mj
a0ecd0c66d Merge pull request #246 from khorben/khorben/configure-equals
Portability fix for POSIX shells
2016-02-24 10:28:45 +01:00
Pierre Pronchery
a61c9db881 Portability fix for POSIX shells
Only a handful of shells support the "==" comparison operator for
the "test" built-in. The standard, portable operator is "=" instead.
2016-02-24 03:39:01 +01:00
Ben Wiederhake
0c1623a8f6 Fix the system one more time
Closes #242. Hopefully.
2016-02-19 01:54:07 +01:00
Ben Wiederhake
d4f52a175c Generate and upload new potfile for 1.3.0 2016-02-18 21:41:59 +01:00
Ben Wiederhake
37438544df AppStream: auto-generate translated file 2016-02-18 21:41:59 +01:00
Ben Wiederhake
b45e494771 AppStream: import translations from transifex. Thank you all! 2016-02-18 21:41:59 +01:00
Ben Wiederhake
e5adfc1bd6 Let autogen.sh take care of the .nsi 2016-02-18 21:41:59 +01:00
Ben Wiederhake
5828496b52 Auto-generate .nsi via awk script
Fixes #195
2016-02-18 21:41:59 +01:00
Ben Wiederhake
1398ab1362 README.md: uniform orig-tarball generation 2016-02-18 21:41:59 +01:00
Ben Wiederhake
b30905ef41 Add safety belts when building .orig.tar.gz 2016-02-18 21:41:59 +01:00
Ben Wiederhake
f872bb9bc3 Create a .orig.tar.gz reproducibly
Where "reproducible" means:
Every execution on every machine will always
generate the exact same, bitwise identical result,
when at the same git commit.

Closes #100.
2016-02-18 21:41:59 +01:00
Ben Wiederhake
a00d1ee6c6 Update README.md for Debian installation 2016-02-18 21:41:59 +01:00
Ben Wiederhake
84f742de3a AppStream: add German language 2016-02-18 21:41:59 +01:00
Ben Wiederhake
26e5b2de9f Fix gitignore patterns for *.mo 2016-02-18 21:41:59 +01:00
Ben Wiederhake
8779215927 AppStream: allow for translations
Fixes #211
2016-02-18 21:41:59 +01:00
Ben Wiederhake
cc8873682a AppStream: Add bugtracker, fix XML
Note: I don't care what the header looks like.
I just want the diff between "with translation" and
"without translation" to be as small as possible.
2016-02-18 21:41:59 +01:00
Ben Wiederhake
9b4fa898a9 Reflow AppStream file 2016-02-18 21:41:59 +01:00
Ben Wiederhake
dd349ff7cb Fix typos and errors in strings 2016-02-18 21:41:59 +01:00
Ben Wiederhake
5c88b021af Clean up 'clean' target 2016-02-18 21:41:59 +01:00
Ben Wiederhake
f648686f1b Correctly build commit.h without complaining
The old version threw ugly warnings when commit.h didn't exist (ugh),
and it depended on ifneq, which I don't really like (second ugh).
2016-02-18 21:41:59 +01:00
mjentsch
4e3b913a9d Remove unneeded code 2016-02-17 20:53:20 +01:00
mjentsch
0a786049fc Fix auto-join and bookmarks in Adium
Fix a regression that was caused by automatically adding all chats to the blist. Adiums method for joining chats by name assumes that an existing chat in the blist means we already joined and not join the chat.
2016-02-17 20:52:45 +01:00
mjentsch
abbaad7a0c Support leaving channels and exporting channel invite links 2016-02-14 00:34:30 +01:00
mjentsch
496eb6328f Add hint for phone number 2016-02-10 23:23:54 +01:00
mjentsch
581e024254 Display chat and channel icons, refactor image loading code 2016-02-10 02:03:46 +01:00
mjentsch
1070b5a6e7 Cleanup and add a few notes 2016-02-07 18:23:12 +01:00
mjentsch
e8005883ab Display channels and supergroups in roomlist 2016-02-07 00:40:48 +01:00
mjentsch
fbe3a7fbba Support supergroups and displaying channel members
Change all channels to be chats instead of regular buddies and implement fetching channel memberships. Remove some unneeded code scraps from old channel handling.
2016-02-07 00:04:31 +01:00
mjentsch
4ef719cd3a Emphasize that just the contact will be deleted, not the dialogue list entry. 2016-01-25 23:23:34 +01:00
mjentsch
69acd90512 Support deleting contacts, handle deletions of chats and channels
When a user deletes a buddy list entry, ask if the chat or channel should be destroyed / left or the contact should be deleted. In many cases, deleting a buddy from the blist would have no effect, since the buddy would show up again on the next startup, which is most likely confusing to the user. Just destroying the chat or the channel is dangerous too, so ask for confirmation every time this happens to let the user choose what to do with that entry.
2016-01-25 00:59:56 +01:00
mjentsch
8100114319 Handle contacts added on different devices
Assure to add contacts, even when they are not in the dialog list. Refactor contact handling.
2016-01-25 00:51:33 +01:00
mjentsch
00b709e39f Display incoming read recipes for secret chats
Outgoing still don't work they aren't implemented in libtgl yet.
2016-01-24 22:16:20 +01:00
mjentsch
af70b22699 Handle group chats more intuitively
Remove all left chats from buddy list when selecting to auto-join chats and also make that option default.
2016-01-24 21:36:41 +01:00
mjentsch
660376b9df Remove all left chats
Use new TGLCF_LEFT instead of user count to determine left chats more reliably.
2016-01-24 21:29:48 +01:00
mjentsch
4e08542823 Change version back to 1.3.0 2016-01-24 21:23:35 +01:00
mjentsch
9edcd8f6e5 Fix run scheme in Adium 2016-01-24 21:19:59 +01:00
mjentsch
90a4286e90 Fix compilation error 2016-01-24 20:40:36 +01:00
mjentsch
ac1c748650 Merge branch 'master' into dev-1.3.0 2016-01-24 18:22:18 +01:00
mjentsch
df29bbcda1 Update bundle link 2016-01-24 16:17:10 +01:00
mjentsch
68b71dae70 Fix tgp version displayed as NULL in sessions
Set telegram-purple version in app data, to make the correct version
show up in the session dialogue.
2016-01-24 16:11:33 +01:00
mjentsch
9208d9b1e9 Show version in Adium Xtras
Until now the adium plugin version was only shown in the bundle info,
not inside Adium.
2016-01-24 15:41:15 +01:00
mjentsch
fc0b402d72 Increase version to 1.2.5 2016-01-24 15:17:54 +01:00
mjentsch
9cd264dea6 Still display the message when the chat info cannot be fetched
User objects will be allocated once they send a message that needs to be displayed, until then the users will just not show up in the user list of the chat.
2016-01-24 15:17:54 +01:00
mjentsch
739f2b7e46 Improve error handling a little more 2016-01-24 15:17:54 +01:00
mjentsch
1808ca4984 Automatically refresh revoked sessions and prompt for a new code 2016-01-24 15:17:54 +01:00
mjentsch
6a8760d5d3 Graceful error handling
Never kill process on issues, always log errors and write errors instead of failed messages.
2016-01-24 15:17:54 +01:00
mjentsch
625374fbc4 Include libtgl fix for channel messages 2016-01-24 15:17:54 +01:00
mj
65105dd11b Fix group chat link 2016-01-15 18:20:03 +01:00
mjentsch
6eee0c3c43 Use flags instead of users_num to check if a chat is already left 2016-01-12 23:53:49 +01:00
mj
2c74a733d5 Update chat link 2016-01-12 11:15:53 +01:00
mjentsch
9ad31b041a Update submodule branch to include all fixes 2016-01-10 02:12:27 +01:00
mjentsch
ff7300f6c9 Merge branch 'dev-1.2.5' into dev-1.3.0 2016-01-10 01:45:57 +01:00
mjentsch
d032f3a237 cleanup 2016-01-10 01:27:38 +01:00
mjentsch
d8fc5281ce Fix buddy icon refreshing and refactor user info and icon handling
Keep track of loaded pictures to refresh user pictures more reliably. Create new file tgp-info to contain all code related to user information and icons. Clean up the messy code for fetching user info and user pictures and provide a streamlined function in tg-info.
2016-01-10 01:27:38 +01:00
mjentsch
4438dcae0e Include libtgl fix for channel messages 2016-01-09 18:33:31 +01:00
Ben Wiederhake
8e3cebf165 Output commit in debug message on startup
Fixes #214.
2016-01-07 10:53:07 +01:00
Ben Wiederhake
dec3a260c4 Make tgl in appropriate place
Fixes #206.
2016-01-07 10:51:24 +01:00
Ben Wiederhake
a8cf6f88d0 Typos, email-addresses, trailing spaces 2016-01-07 10:51:24 +01:00
Ben Wiederhake
f4f058edb5 Add target noicon_install
This moves the feature #100 from the ./configure option to a make target,
which reduces the combinatory explosion of the ./configure options.
2016-01-07 10:51:24 +01:00
Ben Wiederhake
f958dfe2bc Re-order Makefile to be more sensible 2016-01-06 12:32:06 +01:00
Ben Wiederhake
1e78c9685c Merge branch 'master' into dev-1.3.0
Conflicts:
  rpm/purple-telegram.spec
  tgl
  tgp-ft.c
2016-01-06 12:30:35 +01:00
mj
cf851ad630 Remove Webupd8 PPA until it contains the hotfix 2016-01-06 10:59:46 +01:00
mj
4079aea8c0 Merge pull request #208 from tuxmaster/master
Fix appdata build for rpm.
2016-01-05 11:44:36 +01:00
tuxmaster
e4d04d990b Fix appdata build. 2016-01-05 07:01:14 +01:00
mj
7611afc323 Update README.md 2016-01-05 00:34:35 +01:00
mjentsch
94beda1419 Bump version in configure 2016-01-04 23:38:38 +01:00
mjentsch
10bac37b2c Fix xfer memory leak
Prevent leaking of cancelled xfers and stop warning messages for
"un-completed" file transfers when closing Adium.
2016-01-04 17:37:54 +01:00
mjentsch
c52d8811f3 Update version for hotfix 2016-01-04 17:37:54 +01:00
Ben Wiederhake
1cf511f526 Actually install the appdata file 2016-01-03 16:39:25 +01:00
mjentsch
66ef529edb Fix file transfer memory management 2016-01-03 00:29:53 +01:00
mjentsch
38b9e44a3e Fix crash on unknown messages 2016-01-02 19:56:58 +01:00
mj
0f10389a34 Update documentation for updates
Document how to handle changes in the .gitmodules configuration
2016-01-02 19:54:35 +01:00
Ben Wiederhake
a22204df13 Don't hardcode paths
Sometimes I'm really, really dumb.
2016-01-02 00:58:54 +01:00
Ben Wiederhake
d498c116ed Active logging on Travis 2016-01-02 00:58:54 +01:00
Ben Wiederhake
ef7a655dea Add new test with dummy frontend 2016-01-02 00:58:34 +01:00
Ben Wiederhake
0a349cc38e Fix name of test, fix clean target
Since this is a trivial change, [skip ci]
2016-01-02 00:22:17 +01:00
Ben Wiederhake
f41571934a Slim down combinations
Can't 'skip' this build: the .travis.yml still needs to be checked.
2016-01-02 00:22:17 +01:00
Ben Wiederhake
a0a03fe35e Include new test goals, integrate with Travis 2016-01-02 00:22:17 +01:00
Ben Wiederhake
7ce2d397b8 Implement very basic test.
This can only detect missing symbols or other severe failures.
2016-01-02 00:22:17 +01:00
Ben Wiederhake
cf121a5d59 Build all combinations 2016-01-02 00:22:17 +01:00
Ben Wiederhake
7d7f67f227 Build on trusty 2016-01-02 00:22:17 +01:00
Ben Wiederhake
2d4c06883f gcrypt20 not available in U12.04.5 2016-01-02 00:22:17 +01:00
Ben Wiederhake
9d8db69aad Broken submodule support, need to mention apt-get explicitely 2016-01-02 00:22:17 +01:00
Ben Wiederhake
fbba265512 First version for Travis 2016-01-02 00:22:17 +01:00
Ben Wiederhake
be4f5877c4 Fix compilation error 2016-01-02 00:22:17 +01:00
Ben Wiederhake
26669c8a6c Remove private files 2016-01-02 00:22:17 +01:00
Ben Wiederhake
39177beff9 Refresh/harden .gitignore-files 2016-01-02 00:22:17 +01:00
mjentsch
97f26e9b24 Merge branch 'master' into dev-1.3.0 2016-01-02 00:09:57 +01:00
mj
5b11831e3f Update README.md 2016-01-02 00:04:06 +01:00
mj
d42d647dfe Update README.md 2016-01-01 23:49:30 +01:00
matj
ffca726ca1 Fix compilation with openssl 2015-12-31 16:33:18 +01:00
mjentsch
603f19f641 Fix compilation
Do the libgcrypt check to assure that all necessary flags are included,
and clean up configure.ac a bit.
2015-12-31 16:33:18 +01:00
Ben Wiederhake
be49bdc66b fixup! Introduce --disable-gcrypt flag 2015-12-31 16:33:18 +01:00
mjentsch
a846ef03b0 Revert "Revert "Introduce --disable-gcrypt flag""
This reverts commit 893bb3369c.
2015-12-31 16:31:16 +01:00
mjentsch
893bb3369c Revert "Introduce --disable-gcrypt flag"
This reverts commit 89c27afac1.
2015-12-31 00:14:02 +01:00
mjentsch
eee367bdb0 update readme 2015-12-30 20:30:11 +01:00
mjentsch
edd86b60e2 Allow sending "cleartext" img tags in Adium
Adium does not use <img> tags for outgoing inline pictures in messages,
but initalizes a file transfer on its own. Additionally, they also don't
escape outgoing user-entered HTML, which means we must not search for outgoing HTML
<img> tags when using Adium, otherwise we would skip actual message
content.
2015-12-30 17:52:25 +01:00
mjentsch
3b3a4eafc2 Merge branch 'dev-1.2.3' into dev-1.3.0 2015-12-30 16:32:28 +01:00
Ben Wiederhake
ad921e866a Care about Windows packaging -- possibly broken 2015-12-30 15:19:43 +01:00
Ben Wiederhake
f1078f2d3a Add proper copyright headers 2015-12-30 15:04:18 +01:00
Ben Wiederhake
89c27afac1 Introduce --disable-gcrypt flag 2015-12-30 14:34:44 +01:00
Eion Robb
b48f7645d6 Update telegram-base.c
Fix whitespace nightmare
2015-12-30 14:34:44 +01:00
Eion Robb
0d7e8923c5 Remove the need for gcrypt in telegram-purple
Use libpurple's own SHA1 implementation
2015-12-30 14:34:44 +01:00
Ben Wiederhake
86f7fe0b9a Import from Transifex: New translations. Thank you! 2015-12-30 14:33:35 +01:00
Ben Wiederhake
5b275a6abb Read po/LINGUAS only in one place 2015-12-30 14:17:42 +01:00
mjentsch
c536cf0aec Ask if secret chats should be accepted by default 2015-12-29 23:47:12 +01:00
mjentsch
c0f3020884 Fix group chats auto-initialized in wrong group 2015-12-29 22:18:11 +01:00
mjentsch
3994fcdcff Assure that the tgl makefile is always updated after configure 2015-12-29 19:50:36 +01:00
mjentsch
085e14287f Make gettext dependency optional 2015-12-29 18:11:29 +01:00
mjentsch
f3091e7e51 Merge remote-tracking branch 'origin/master' into dev-1.2.3 2015-12-29 17:19:13 +01:00
mjentsch
67f9ba830c Bump version to 1.2.3 2015-12-29 17:03:18 +01:00
mjentsch
46485a08c3 Remove redundant code
Existance of print_name is already assured in the check above.
2015-12-29 15:28:57 +01:00
mjentsch
838e08a0e8 Fix coding guidelines 2015-12-29 14:33:03 +01:00
mjentsch
6cadb04fbd Fix glib log errors on joining chats and clean up code 2015-12-29 14:32:13 +01:00
mjentsch
67bc9cea92 Remove testing / debugging code 2015-12-29 12:27:21 +01:00
mjentsch
fc9a7ebb2e cleanup 2015-12-29 12:20:06 +01:00
mjentsch
b2541f14d4 Fix user alias not updated on name changes 2015-12-28 17:49:34 +01:00
mjentsch
c921a91b42 Fix RPC calls failing for users with Umlauts in Adium
Fix issue with name normalization by assuring that the id/name lookup always uses composed strings. Remove the now-unused function in the Adium bundle.
2015-12-28 17:46:39 +01:00
mjentsch
8fed82cc75 Fix writing messages to deleted buddies and cleanup
Do not depend on buddy list entries when looking up the ID from the user name, by maintaining a bi-directional mapping ID <-> username. Rename functions to make them more evident as something that operatos on the lookup. Cleanup blist functions by implementating generic iterator function over account buddies.
2015-12-28 17:44:49 +01:00
Ben Wiederhake
855e6fc04e Fix ${LOCALES} in Makefile 2015-12-26 11:22:57 +01:00
Ben Wiederhake
07a27e1edc Add Ben's email address 2015-12-26 11:20:22 +01:00
mjentsch
37c43ac830 Fix double free 2015-12-21 01:35:26 +01:00
mjentsch
877eb1ac04 Fix compilation with gcc 2015-12-20 21:52:56 +01:00
mjentsch
c099d49f41 Do not display read recipes for non-user messages 2015-12-20 15:57:22 +01:00
mjentsch
b828460886 Merge branch 'dev-1.2.3' into dev-1.3.0 2015-12-19 22:02:54 +01:00
mjentsch
65c96cae5a Fix secret chats not being properly canceled 2015-12-19 02:25:04 +01:00
mjentsch
00bf713c43 Fix secret chat not being removed when the other peer ends it 2015-12-19 02:25:04 +01:00
mjentsch
f2fd8a981b coding style 2015-12-19 02:25:04 +01:00
mjentsch
88d3963929 Fix compiler warning
Remove unused function
2015-12-18 23:09:12 +01:00
mjentsch
91a4c3b845 Fix use after free 2015-12-18 23:03:31 +01:00
mjentsch
b85fc85322 Fix auto-joining chats 2015-12-18 22:59:51 +01:00
Ben Wiederhake
233e6c2811 Generate and upload new potfile for 1.3.0 2015-12-18 13:51:54 +01:00
mj
ab75ad61d5 Update README.md
Include more info about submitting bug reports
2015-12-17 00:20:06 +01:00
mjentsch
ccf28caa8c Adium: Fix adding contacts with non-ascii names to buddy list 2015-12-16 22:37:53 +01:00
mj
aa237bed79 Update README.md 2015-12-15 12:26:30 +01:00
mj
b818752acc Merge pull request #181 from tuxmaster/dev-1.3.0
Prepare for 1.3.0
2015-12-13 13:42:52 +01:00
mjentsch
de17ccb982 Fix trailing whitespace on users without a last name 2015-12-13 01:10:13 +01:00
mjentsch
f681aa21e2 Fix adium bundle not loading 2015-12-13 01:10:13 +01:00
mj
935dea734b Merge pull request #172 from dequis/timer-delete-warnings
timer_alarm: Set fd to -1 to avoid warnings on tgl_timer_delete
2015-12-12 14:37:41 +01:00
mjentsch
9f34c13384 Fix reconnect failing
Fail complete connection when a reconnect to the main data center fails.
2015-12-12 00:55:21 +01:00
mjentsch
ce442eef22 Fix including libgcrypt in Adium bundle 2015-12-12 00:55:21 +01:00
mj
63e006c97c Merge pull request #180 from tuxmaster/dev-1.2.3
Prepare rpm for 1.2.3
2015-12-10 12:32:48 +01:00
tuxmaster
b61131c7e1 Prepare for 1.3.0 2015-12-10 12:30:31 +01:00
tuxmaster
261a1e5f54 Prepare rpm for 1.2.3 2015-12-10 12:28:11 +01:00
mjentsch
97e295ddde Fix format warning 2015-12-10 11:56:48 +01:00
mjentsch
18c2539f75 Fix regressions: chat actions not available for chats 2015-12-09 01:08:45 +01:00
mjentsch
de72552309 Ignore the file containing the current commit hash 2015-12-08 11:24:56 +01:00
mjentsch
b1fb7e500c Improve logging of peer flags 2015-12-08 11:24:01 +01:00
mjentsch
c8befa2c9e Display correct display time for special chats
Bug was introduced a few commits earlier in the test branch during refactoring.
2015-12-07 23:45:15 +01:00
mjentsch
85e7f17e65 Display newly added channels as online 2015-12-07 23:39:53 +01:00
mjentsch
618cbf7001 Handle channel photo updates and channel deletions
Change channel photo on update, delete channels from blist when leaving.
2015-12-07 23:15:17 +01:00
mjentsch
d1d03da879 Create a channel that is created in other clients during the session 2015-12-07 22:28:09 +01:00
mjentsch
60d6b3c8e5 Improve error handling when sending to non-ready secret chats 2015-12-07 00:32:54 +01:00
mjentsch
bab470cf1f Support posting documents to channels 2015-12-07 00:27:16 +01:00
mjentsch
350bdad82e Improve error handling for channels 2015-12-07 00:26:21 +01:00
mjentsch
5bd31bdae0 Add basic channel support 2015-12-06 23:46:09 +01:00
mjentsch
498f87eff5 Remove code duplication 2015-12-06 22:57:50 +01:00
mjentsch
a1f49d4748 Translate plugin description and update version/authors 2015-12-06 22:20:01 +01:00
mjentsch
5d6f9f35bb Remove migration for translated group names
Keep it maintainable and non-intrusive, the affected users can easily move the buddies into the new chat.
2015-12-06 22:04:54 +01:00
mjentsch
b2194b6a5d Translate group names 2015-12-06 20:38:06 +01:00
mjentsch
51e7d211fe Improve logging 2015-12-06 19:21:58 +01:00
mj
22cd6f071b Update README.md 2015-12-06 17:24:28 +01:00
mjentsch
7a6792ff04 Update copyright strings
Add current year where its left out, add missing authors and remove authors without any contributions in that file.
2015-12-05 20:40:08 +01:00
mjentsch
0bb5b0121d Make gettext dependency optional 2015-12-05 20:31:08 +01:00
mjentsch
53c6b384ec Clean up comments in Makefile.in 2015-12-05 16:56:40 +01:00
mjentsch
7d5722462f Display git commit in commit.h 2015-12-05 16:55:03 +01:00
mjentsch
b2845e41aa Clean up code
Order update callbacks just like in libtgl.h
2015-12-05 12:31:18 +01:00
mjentsch
fc1863cca9 Remove (now) unused function declaration. 2015-12-05 11:27:54 +01:00
mjentsch
9019ee1038 Comment-out unused function 2015-12-05 10:48:31 +01:00
mjentsch
eebd337929 Upgrade libtgl that supports layer 42 2015-12-03 23:16:28 +01:00
mjentsch
3670c41f41 Push partial implementation of displaying forwarded messages 2015-12-03 21:31:00 +01:00
dequis
3236a31551 timer_alarm: Set fd to -1 to avoid warnings on tgl_timer_delete
Warnings like this:

GLib-CRITICAL **: Source ID N was not found when attempting to remove it
2015-12-01 21:06:23 -03:00
mjentsch
41b4fd1792 Fix accepting secret chats from buddies not in the buddy list 2015-12-01 21:57:11 +01:00
mjentsch
a412ae2c19 Prevent frightening "directory could not be deleted" error
If an image is not found its filename will be NULL, which will cause build_filename to just return path of the tmp dir. When passing a directory to set_file_contents, it will attempt to unlink it (as the file already exists), but fail doing do, since unlink doesn't work on directories. This will still cause a scary warning message about "not being able to delete the tmp directory", which is now no longer printed.
2015-12-01 21:00:32 +01:00
mjentsch
2c21b59445 Fix memory leak 2015-12-01 20:55:14 +01:00
mjentsch
3016781b52 Clean up dialog list code and improve logging 2015-12-01 20:44:33 +01:00
mjentsch
b3d538de8a Improve error handling 2015-12-01 18:09:39 +01:00
mjentsch
8845f32454 Update AUTHORS 2015-11-29 22:07:16 +01:00
mjentsch
b3d09c1565 Fix redundant message when users are leaving chats
Do not display an extended reason when a user leaves on its own. Such a message makes only sense when a user is removed by somebody else.
2015-11-29 14:41:31 +01:00
mjentsch
202772ed78 Improve robustness against name changes 2015-11-29 13:11:48 +01:00
mjentsch
5502824ac4 Clean up, refactoring and fix coding guidelines 2015-11-28 20:17:47 +01:00
mjentsch
5ae6bdde82 Update authors 2015-11-28 15:02:23 +01:00
mjentsch
2a1a2d2167 Fix Adium compilation
Remove lodepng complation instruction from xcode project.
2015-11-28 14:55:11 +01:00
mjentsch
65fdf2802c Remove "sync all" option that doesn't have any effect
When migrating to libtgl-internal authentication code it became impossible to define the "tgl_do_get_difference" options, which
makes it impossible to fetch past history on first login. As this option used to fetch the whole history since the "beginning of time",
it wasn't a viable option anyways, so removing it was necessary sooner or later. An action to fetch past history for
conversations / chats / globally on demand will be added in the future to make up for this.
2015-11-28 14:54:11 +01:00
mjentsch
5428b39547 Fix messages not being marked as read despite sending responses or typing 2015-11-28 02:33:50 +01:00
mjentsch
bf70a184e1 Cleanup and coding guidelines 2015-11-28 02:14:31 +01:00
mjentsch
601440004a Fix read recipes only sent on next incoming message / read recipe 2015-11-28 02:14:31 +01:00
Ben Wiederhake
18a4d51b94 Upload new potfile 2015-11-26 08:23:25 +01:00
Ben Wiederhake
b44a218b22 Clean up strings 2015-11-26 08:23:25 +01:00
Ben Wiederhake
00cd867f6c Import potfile from transifex
This commit should be dated 2015-10-20 00:14:21
2015-11-26 08:23:25 +01:00
Ben Wiederhake
d2a3a7dc6f Fix autogen issue (symbol was not properly exported) 2015-11-26 08:23:25 +01:00
Ben Wiederhake
b5521b1688 Polish some more 2015-11-26 08:23:25 +01:00
Ben Wiederhake
7812603dee Fix typo 2015-11-26 08:23:25 +01:00
Ben Wiederhake
77317fb99f Add plural support
Fixes #139.
2015-11-26 08:23:25 +01:00
Ben Wiederhake
954ed6048b Clarify messages, use 'please' where appropriate 2015-11-26 08:23:25 +01:00
Ben Wiederhake
f53f13592a Disable unused feature 2015-11-26 08:21:09 +01:00
Ben Wiederhake
669880ab4d Fix color channels: TGA uses BGRA, not RGBA 2015-11-25 20:32:31 +01:00
Ben Wiederhake
8d8f299aec Drop LodePNG 2015-11-25 20:32:31 +01:00
Ben Wiederhake
98221ec036 Implement basic raw-to-tga conversion 2015-11-25 20:32:31 +01:00
Ben Wiederhake
2f467a2591 Fix missing inclusion 2015-11-25 20:31:44 +01:00
mjentsch
e10c548dd1 Fix compilation of plugin 2015-11-25 11:31:07 +01:00
mjentsch
a7be036a05 Remove unused commented-out code 2015-11-23 11:47:29 +01:00
mjentsch
04bc03bebf Clean up the include mess
Keep all libtgl and telegram-purple includes in telegram-purple.h to prevent duplication of all those includes. Remove redundant includes.
2015-11-23 03:06:30 +01:00
mjentsch
9ee84e73a2 Remove unneeded class includes in Adium plugin 2015-11-23 02:56:41 +01:00
mjentsch
a11c8da4fa Remove unneded unix-specific includes 2015-11-23 02:55:44 +01:00
mjentsch
05131d999e Remove code duplication 2015-11-23 01:33:20 +01:00
mjentsch
23507c0303 Fix compilation 2015-11-23 00:44:52 +01:00
mjentsch
643a30faa7 Do not rely on g_utf_8_substring length checking, it doesn't always do it 2015-11-23 00:37:23 +01:00
mjentsch
9a166cbc8b Cleanup and coding guidelines 2015-11-21 22:43:16 +01:00
mjentsch
72070e0016 Fix potential segfault 2015-11-21 22:42:07 +01:00
mjentsch
3cc0a832a9 Remove dead code and unused functions 2015-11-21 22:21:00 +01:00
mjentsch
f094319519 Fix typos 2015-11-21 22:20:38 +01:00
mjentsch
2d90f3ea03 More cleanup and refactoring 2015-11-21 22:14:57 +01:00
mjentsch
553b10dee5 Fix compilation 2015-11-21 18:54:33 +01:00
mjentsch
e5e58d0c2f Fix compiler error in MinGW 2015-11-21 16:31:15 +01:00
mjentsch
602edc8b5f Cleanup and coding guidelines 2015-11-21 16:30:50 +01:00
mjentsch
a44600a0ac Fix static analysis warning 2015-11-21 16:24:17 +01:00
mjentsch
c7a855a62c Do not rely on g_utf_8_substring length checking, it doesn't always do it 2015-11-21 16:23:46 +01:00
mjentsch
1a428ed80a Do not needlessly enable pfs anymore 2015-11-21 09:48:02 +01:00
mjentsch
05fc97381f Cleanup and slightly improve labels 2015-11-21 09:47:33 +01:00
mjentsch
5d52fce666 Fix compilation on Unix 2015-11-21 09:42:53 +01:00
mj
6cfeeb4835 Merge pull request #159 from tuxmaster/master
Fix rpm spec file.
2015-11-21 09:27:22 +01:00
mjentsch
2fc4f53831 Merge branch 'EionRobb-beta4' into cleanup-requests 2015-11-21 01:14:36 +01:00
mjentsch
0b0dbfd25e Merge branch 'beta4' of https://github.com/EionRobb/telegram-purple into EionRobb-beta4 2015-11-21 01:14:06 +01:00
mjentsch
09339c7785 Update adium bundle to 1.2.2 2015-11-21 00:39:14 +01:00
mjentsch
b10dc45bfc Fix secret chat duplication issue 2015-11-21 00:28:29 +01:00
mjentsch
dc27b1ec03 Display secret chat once its ready 2015-11-21 00:18:08 +01:00
mjentsch
0826bcad76 Improve logging messages for peer updates 2015-11-21 00:14:52 +01:00
mjentsch
97f619b1d0 Fix crash 2015-11-21 00:13:58 +01:00
tuxmaster
2e3951f5a5 Add missing space. 2015-11-18 15:05:10 +01:00
tuxmaster
f7b01583fc Add required version for libgcrypt. 2015-11-18 15:03:40 +01:00
mjentsch
81cf092554 Fix adding foreign buddy
Fix user info and user status not being correctly fetched.
2015-11-18 01:19:40 +01:00
tuxmaster
2f5c70b04b -Fix date for rpm spec file. 2015-11-17 18:53:09 +01:00
mjentsch
b721e8d217 Fix secret chats being duplicated on login 2015-11-16 16:15:20 +01:00
mjentsch
85df0e0bcd Fix status not updated for all buddies 2015-11-16 15:48:30 +01:00
mjentsch
6e210b8417 Improve comments and logging messages 2015-11-16 15:47:32 +01:00
mjentsch
8ee4f680c2 Fix own name being added to the buddy list 2015-11-16 15:43:32 +01:00
mjentsch
a77adfaf0d Fix offline messages being received on wrong conversations
Fix buddy messages are being received before buddy list was initialized, by changing the state to CONNECTED
on "logged in" event and not on "ready".
2015-11-16 15:41:51 +01:00
mjentsch
b6dd5adad7 Implement create / change password requests. 2015-11-16 10:05:03 +01:00
mjentsch
87225d7098 Fix sign in dialogue and clean up password prompt
Use purple_input_request with the masked bit set, instead of needlessly creating a request with generic fields. Implement correct sign in dialogue only queries for first and last name.
2015-11-16 10:04:41 +01:00
mjentsch
58b7f8c7f9 Coding style 2015-11-15 14:55:36 +01:00
mjentsch
e3d67dd47f Add missing string translations 2015-11-15 14:54:12 +01:00
mjentsch
4b68797f89 Remove pointless "create chat" confirmation dialogue 2015-11-15 14:51:40 +01:00
mjentsch
f89f3fd71a Remove code duplication in sign-in procedures
Use the new libtgl request_values callback to query inputs from the user instead
of implementing the sign-in methods manually.
2015-11-15 14:04:00 +01:00
mjentsch
6fce2cf8fa Fix sign in not starting for new accounts 2015-11-14 14:28:10 +01:00
mj
3a9f1e2cfe Merge pull request #145 from Sesivany/master
Adding AppData file
2015-11-13 23:40:27 +01:00
mjentsch
57a76fdabd Fix confusing comment 2015-11-13 22:50:26 +01:00
mjentsch
5dcf2687ca Update changelog 2015-11-12 22:22:48 +01:00
mjentsch
82971299a7 Do not write to secret file when reading a secret chat from it 2015-11-12 21:14:12 +01:00
mjentsch
9aa597edfc Include merge of "secret chat fix" pull request. 2015-11-12 21:14:12 +01:00
mjentsch
50c4b2ead7 Allow passing configure flags to libtgl subproject
Pass compiler and linker flags down to libtgl Makefile, when calling configure.
2015-11-12 21:14:12 +01:00
mjentsch
13fb3a74c6 Fix segfault on closing down
TLS now frees itself when calling tgl_free_all, adapt to this change.
2015-11-12 21:14:12 +01:00
mjentsch
90b4e3b5b5 Fix secret chat name and fingerprint
Correctly initialize secret chat fingerprint and print name when loading the chats from the secret file.
2015-11-12 21:14:12 +01:00
mjentsch
3fe025e877 Improve secret chat robustness.
Do not crash when removing secret chats and the print_name is not set
anymore.
2015-11-12 21:14:11 +01:00
mjentsch
f7bcbe8851 Update tgl version 2015-11-12 21:14:11 +01:00
Ben Wiederhake
f1d7a67a4b Import from Transifex: uk. Thank you! 2015-11-01 21:47:21 +01:00
mjentsch
23b357fac3 Fix read recipes not being sent when users leave or join chats 2015-11-01 19:11:22 +01:00
mjentsch
cb0bbe5b1c cleanup 2015-10-31 21:49:56 +01:00
mjentsch
4c32efddc2 Do not crash when opening / hovering over unmigrated buddies 2015-10-31 21:46:54 +01:00
mjentsch
46b5fa25b9 Do not brick secret chats when sending documents
At least make sure to cancel _all_ file transfers to encrypted chats, until the secret chat file transfer issue is properly fixed.
2015-10-31 21:46:20 +01:00
mjentsch
42543706b4 Remove "Start secret chat ..." action from secret chats 2015-10-31 20:38:56 +01:00
mjentsch
e3892cab16 Fix leaving and removing chats again 2015-10-31 20:34:47 +01:00
mjentsch
81b64d7542 Fix "crashes" on name changes
Do not assume that a name for each ID can only be set once anymore.
Remove assertion that names always exist, return 0 instead and propagate
error handling to the calling function.
2015-10-31 20:09:31 +01:00
mjentsch
87278f6742 Merge branch 'tuxmaster-beta4-2' into beta4 2015-10-30 19:16:55 +01:00
mjentsch
e90c7aa0f8 Merge branch 'beta4' of https://github.com/tuxmaster/telegram-purple into tuxmaster-beta4-2 2015-10-30 19:16:34 +01:00
mjentsch
895c8dc14f Merge branch 'beta4' of https://github.com/majn/telegram-purple into beta4 2015-10-30 19:03:55 +01:00
Eion Robb
6e78b51527 Missed a couple more binary file open()s 2015-10-25 15:32:03 +13:00
Eion Robb
7f64b57461 Set binary flag on open() calls so that windows doesn't terminate files early 2015-10-25 15:22:34 +13:00
Eion Robb
ed2f9d527c Add a make installer option that builds an exe installer using NSIS 2015-10-24 19:17:29 +13:00
Eion Robb
fde3af9f4c Add mingw Makefile/config's 2015-10-24 12:31:11 +13:00
Eion Robb
5a0ee5b22e Enable PFS
Seems to be the only way to trigger all the events loop in libtgl
2015-10-24 11:21:18 +13:00
Eion Robb
a8bad2e361 Use send()/recv() on sockets
and apply it to the right branch this time
2015-10-24 11:11:42 +13:00
Ben Wiederhake
70acb337cf Merge branch 'master' into develop
Conflicts:
	README.md
2015-10-22 11:35:42 +02:00
Eion Robb
8562eb342c Allow compiling on Windows 2015-10-22 21:41:37 +13:00
mj
6bc8fb49e2 Update README.md 2015-10-21 10:51:00 +02:00
mj
ddb94969dd Update README.md
Add note about missing Windows support.
2015-10-21 10:49:56 +02:00
Ben Wiederhake
75e1efdb86 Use https where possible 2015-10-20 18:36:27 +02:00
Ben Wiederhake
31768d1e4d Use new lodepng version 2015-10-20 18:28:11 +02:00
Ben Wiederhake
af3d14bec0 Import from Transifex: fr, pt_BR, ru. Thank you all!
See previous commit for 'ru'.
2015-10-20 18:25:05 +02:00
Ben Wiederhake
3edab136cd Update translations due to previous commit 2015-10-20 18:22:33 +02:00
Ben Wiederhake
a155d4b41c Update translation strings, positions, and Transifex 2015-10-20 18:22:33 +02:00
Ben Wiederhake
59d9cc88a9 Fix autogen incompatibility
Also, only regenerate the parts that actually have changed.
2015-10-20 18:22:04 +02:00
Matthias Jentsch
b8e73f819c Fix compilation errors and warning when disbaling libwebp 2015-10-20 14:15:50 +02:00
Matthias Jentsch
ee9626e6da Merge remote-tracking branch 'wiederhake/beta4' into beta4 2015-10-20 12:38:40 +02:00
Jiri Eischmann
8ece7fcccc Fixing license in the appdata file 2015-10-20 00:16:41 +02:00
Matthias Jentsch
728da04d3c Try to fix failing reconnect after hibernate 2015-10-19 19:05:50 +02:00
mjentsch
b98b742c14 Fix Adium reconnect after hibernate and not disconnecting properly 2015-10-18 21:18:12 +02:00
Jiri Eischmann
5a72023848 Adding AppData file 2015-10-18 18:42:29 +02:00
majn
3824eae025 Fix empty file in pidgin after transfer
Fetch local filename before calling purple_xfer_end to avoid that the local filename contains bogus.
2015-10-18 01:21:18 +02:00
mjentsch
c2873d2e3f Fix libgcrypt check
Use a libgcrypt check that will only succeed with a version >= 1.6.0.
2015-10-17 23:49:41 +02:00
mjentsch
d43f4f0d64 Use better names 2015-10-17 23:11:15 +02:00
mjentsch
bd7662aaeb Do not crash when displaying the tooltip of an old user 2015-10-17 21:18:42 +02:00
mjentsch
306273d4c4 Merge branch 'beta4-human-reable-user-names' into beta4 2015-10-17 18:09:42 +02:00
mjentsch
9f96be976d clearer function names 2015-10-17 14:51:09 +02:00
mjentsch
df5a168a1f Remove unneeded and confusing messages 2015-10-17 00:26:00 +02:00
mjentsch
5c76324b78 cleanup 2015-10-17 00:00:25 +02:00
mjentsch
5f2da4b4fc Avoid nullpointer dereference when purple requests actions on deleted telegram secret chats 2015-10-16 23:32:49 +02:00
mjentsch
3f2f557284 Use clearer names for name and id resolution functions and clean up 2015-10-16 22:45:21 +02:00
Ben Wiederhake
4e43a6208a Import from Transifex: es_AR, pl, sq. Thank you all! 2015-10-16 00:42:08 +02:00
mjentsch
a2fc31cda7 Fix service message formatting in Adium
Adium drops MESSAGE_SYSTEM flags in serv_got_im, directly write to the conversation in case the message contains such a flag.
2015-10-16 00:33:23 +02:00
mjentsch
afa650cfc1 Fix messages in secret chats not showing notifications in Adium
Secret chat messages are always unread, do not set MESSAGE_DELAYED.
2015-10-16 00:28:36 +02:00
mjentsch
76e6c2a4ad Never drop unread messages, even when they are older than the history threshold 2015-10-16 00:24:00 +02:00
mjentsch
adeacb7c42 Remove flag that is no longer used in update_buddy 2015-10-16 00:15:37 +02:00
mjentsch
b25eeb6951 Cleanup and coding style 2015-10-16 00:14:36 +02:00
mjentsch
a3a35eb7ff Do not drop history or break conversations when buddy print name changes
Do not update blist buddy names, but set an alias instead to prevent breaking conversations or loosing history. Instead, keep the first print name as permanent user name
and set the alias on all buddy name changes. When interacting with purple always use the original buddy name stored in the blist instead of the print name provided by libpurple.
This allows both, meaningful names in group chats and permanent identifiers in the buddy list, while still propagating names changes to the interface.
2015-10-16 00:08:24 +02:00
tuxmaster
96f689ca1c - Use the better pkconfig for build requires.
- Add translations.
- Switch to libgcrypt from openssl.
- Modify Readme for the new requirements of the build for Fedora.
2015-10-14 15:28:00 +02:00
Ben Wiederhake
56445b4821 Fix annoying 'missing config.h' error. 2015-10-14 01:15:14 +02:00
Ben Wiederhake
512c052cdc Add Makefile targets local_{,un}install. 2015-10-14 01:15:14 +02:00
Ben Wiederhake
b9a1ab23be Allow loading alternative pubkey from local, as a fallback. 2015-10-14 01:15:14 +02:00
Ben Wiederhake
829b9f996f Mark static function as static. 2015-10-14 01:15:14 +02:00
Ben Wiederhake
f444ae0866 Fix *install* targets.
Fixes #47 by removing the feature, as it seems that nobody uses it.
If you would like to see a feature like this again, please open a new
bug and reference either this commit or issue #47.
2015-10-14 01:15:14 +02:00
Ben Wiederhake
d83d1df00d Add option --disable-icons.
Closes #100.
2015-10-14 01:15:14 +02:00
Hugues Morisset
ada7a5018f Add build package build step in README 2015-10-14 01:15:14 +02:00
Ben Wiederhake
029c1eece3 Rebasing mistake. Sorry. 2015-10-12 19:58:48 +02:00
Ben Wiederhake
7c6831ee93 Include latest translations to demo. 2015-10-12 19:09:46 +02:00
Ben Wiederhake
c1888926df Dumb typos. Sorry. 2015-10-12 18:48:56 +02:00
Ben Wiederhake
d923ed1130 Beautify and fix strings (part 2/2). 2015-10-12 18:40:21 +02:00
Ben Wiederhake
65336849fb Beautify and fix strings (part 1/2). 2015-10-12 13:27:46 +02:00
mjentsch
cf8f4da2fb Assure that buddy names and images are being updated correctly 2015-10-11 23:51:40 +02:00
mjentsch
7813cedb06 Update Adium package to new user management
Add new files to xcode project, remove now useless "workaround" for setting chat participant aliases, set user ids to case insensitivity so normalization doesn't break the plaintext usernames.
2015-10-11 14:38:56 +02:00
mjentsch
365f7b1da1 Provide utility function for printing system messages in all chat types 2015-10-11 14:19:37 +02:00
mjentsch
61597e9101 Remove manual "group" creation, use blist utility function instead 2015-10-11 14:18:42 +02:00
mjentsch
527f16985d Remove dead code 2015-10-11 14:17:47 +02:00
mjentsch
4eeb7f73c9 Overhaul username handling
Use print names instead of ids as usernames, to fix problems with "useless" user ids showing up for unknown users and in group chats. Remove workarounds like "Telegram Foreign" needed to temporarily store user names for alias resolution.
2015-10-11 14:17:24 +02:00
Ben Wiederhake
ab762710e4 Add notice that installation on Debian will eventually become easier 2015-10-09 09:29:47 +02:00
Ben Wiederhake
cac87f92b8 Fix sticker resizing.
So far, a sticker of size 1028x1028 would have been resized to 128x128,
even though the maximum was set to 256x256.
This fix introduces a different way of resizing, which means that any dimension
of length >256 will result =256.

Also, I factored out the maximum size, so maybe we can make this an option in the future.
2015-10-08 17:44:12 +02:00
Ben Wiederhake
e26416bc49 Standardize password prompt. 2015-10-08 12:59:17 +02:00
Ben Wiederhake
7f9c8122b0 Make 'clean' a recursive target. 2015-10-08 00:03:32 +02:00
Ben Wiederhake
0dc2c750ae Fix typo.
Beleive it or not, credits for discovering this typo go to
...
lintian.

This thing is a hell of a tool. Thank you, lintian developers.
2015-10-07 23:54:55 +02:00
Ben Wiederhake
7a7480ae9d Ensure that local directories exist.
Fixes #47.
2015-10-07 22:54:00 +02:00
Ben Wiederhake
f3acef6737 Fix a few unimportant memory leaks. 2015-10-07 22:07:56 +02:00
Ben Wiederhake
ed9505400d Remove dead code. 2015-10-07 22:07:56 +02:00
Ben Wiederhake
6e7e9ce862 Fix translations to be at least passable. 2015-10-07 22:07:56 +02:00
Ben Wiederhake
d96002ac97 Fix support for install. 2015-10-07 22:07:56 +02:00
Ben Wiederhake
d0bbd773fc Fix ordering of autoheader/autoconf.
Running autoconf when config.h.in is missing yields warnings,
so don't do that.
2015-10-07 22:07:56 +02:00
Ben Wiederhake
d1d6865a0a Remove superfluous -lm flag. 2015-10-07 22:07:56 +02:00
mjentsch
7f3cf7c58f Bump version to 1.2.2 2015-10-07 21:52:35 +02:00
mjentsch
fe3bc9e3fc Update tgl version 2015-10-07 14:16:40 +02:00
mjentsch
e557e72ab4 Update version in README 2015-10-07 14:16:18 +02:00
mjentsch
7838f242ae Coding style 2015-10-07 03:28:37 +02:00
mjentsch
6caed24f0d Integrate libgcrypt header in config.h.in 2015-10-07 03:23:09 +02:00
mjentsch
27c69851eb Ignore compiled translation catalogs 2015-10-07 03:19:28 +02:00
mjentsch
86ec16e73d Update translation HOWTO 2015-10-07 03:18:34 +02:00
mjentsch
6be41aa18b Add even more missing translation strings 2015-10-07 03:06:08 +02:00
mjentsch
94c24a1120 Add German locale 2015-10-07 02:09:38 +02:00
mjentsch
7bc5ac54da Fix configure script
Remove intltool checks failing because of missing po/Makefile.in and just check for msgfmt instead.
2015-10-07 02:07:23 +02:00
mjentsch
8a0e43d128 Use package name as gettext package name 2015-10-07 01:41:21 +02:00
mjentsch
6d16be5238 Support installing/uninstalling the localizations 2015-10-07 01:38:17 +02:00
mjentsch
2abe43cd96 Fix plugin init function
Change include order to not fail PURPLE_PLUGIN_INIT.
2015-10-07 01:30:28 +02:00
mjentsch
6a465b24a1 Fix broken inclusion of gettext translation 2015-10-06 21:45:26 +02:00
mjentsch
688f628890 Consolidate user messages 2015-10-06 19:23:07 +02:00
mjentsch
ffef370ae1 Translate a few more left-out strings 2015-10-06 14:37:12 +02:00
mjentsch
b297944650 Add skeletons for translation catalogs 2015-10-06 14:37:12 +02:00
mjentsch
8009b8c0ac Translate strings in telegram-purple 2015-10-06 14:37:12 +02:00
mjentsch
08168c6339 Include translation functions and restructure includes 2015-10-06 14:28:13 +02:00
mjentsch
a91a6ab304 Add translation-related stuff to configure.ac 2015-10-06 14:26:40 +02:00
mjentsch
f0b0550cf8 Support message mentions
Display mentions like messages that contain the user nick in Pidgin.
2015-10-06 13:45:59 +02:00
mjentsch
ba8d9cf378 Fix compilation when not using libwebp 2015-10-05 13:01:17 +02:00
mjentsch
f8cf133c06 Use libgcrypt in Adium plugin 2015-10-05 12:02:00 +02:00
mjentsch
a7043fd5cc Update README 2015-10-05 12:00:53 +02:00
mjentsch
63f7edc2f9 Update tgl vers. and set gitmodule to test branch 2015-10-05 11:36:31 +02:00
mjentsch
1e8513909d Merge remote-tracking branch 'tuxmaer/pull_request' into beta4 2015-10-05 00:13:29 +02:00
Ben Wiederhake
7ad9a0a45c Fix inclusion type. 2015-10-04 17:51:49 +02:00
Ben Wiederhake
b469af3582 Make tgl_timer_insert robust against double insertion 2015-10-04 17:51:49 +02:00
Ben Wiederhake
6dc58df1c2 Fix overcleaning. 2015-10-04 17:51:49 +02:00
Ben Wiederhake
7ab7f4126e Avoid the PEM issue. 2015-10-04 17:51:49 +02:00
Ben Wiederhake
57e6a777d9 Build telegram-purple and libtgl without OpenSSL (skip when bisecting).
This version still tries to load a PEM file, although libtgl
--disable-openssl does not support it. Since there are several
ways to resolve it, this switch away from OpenSSL and its solution
should be different commits.
2015-10-04 17:51:49 +02:00
Ben Wiederhake
47bd4b2b33 Use new API, fix build system. 2015-10-04 17:51:49 +02:00
mjentsch
858177626c Update README
Add documentation about telepathy-haze and third party repositories
2015-10-03 02:18:27 +02:00
mjentsch
f4755bd65b Update XCode project to include new files and update SDK version to 10.11 2015-10-03 02:12:58 +02:00
mjentsch
5064acaaf9 Cleanup an coding guidelines 2015-10-03 02:12:58 +02:00
mjentsch
4c576524e4 Move requests into separate file 2015-10-03 02:12:58 +02:00
mj
3a53dd8540 Merge pull request #129 from BenWiederhake/master
Create files for copyright management (non-specific to Debian)
2015-10-03 02:12:03 +02:00
Hugues Morisset
9529f44802 Add COPYING file 2015-10-02 23:17:18 +02:00
Hugues Morisset
6d730f4610 Add AUTHORS file 2015-10-02 23:17:18 +02:00
tuxmaster
aa7a8d43f6 - Aktualisieren temporär entfernt. 2015-09-30 12:59:36 +02:00
tuxmaster
ba790edb64 - remove unneeded requirements from rpm spec file
- remove source code fix from rpm spec file
- fix source code permissions
2015-09-30 12:53:59 +02:00
tuxmaster
9a4216e170 - Hilfsprogramm zum syncron halten 2015-09-30 10:32:13 +02:00
mjentsch
8c6e4e6079 Update spec file 2015-09-17 20:24:28 +02:00
mjentsch
586268424a Merge branch 'fix-group-participant-aliases' 2015-09-17 20:06:18 +02:00
mj
4ffb777496 Merge pull request #118 from shlomif/remove-executable-bit-from-source-files
Remove executable bit
2015-09-17 10:39:24 +02:00
mjentsch
04df0afa95 Fix segfaults when adding chat 2015-09-17 00:00:53 +02:00
mjentsch
95664e1358 Better input validation in adium chat print name callback 2015-09-16 23:52:46 +02:00
Shlomi Fish
f6f01c848f Remove executable bit 2015-09-16 17:48:56 +03:00
mj
973e209e2c Merge pull request #117 from shlomif/shlomif-fix-typos
Fix spelling/grammar/etc. errors
2015-09-16 16:46:51 +02:00
Shlomi Fish
be5bbbc682 Add missing comma 2015-09-16 17:37:28 +03:00
Shlomi Fish
b334efc5c8 Fix a misphrasing 2015-09-16 17:36:13 +03:00
Shlomi Fish
5762d48339 Fix a misphrasing 2015-09-16 17:33:56 +03:00
Shlomi Fish
f9960c1f6e Fix misphrasing 2015-09-16 17:33:26 +03:00
Shlomi Fish
562df1ad7c Fix misphrasing 2015-09-16 17:32:31 +03:00
Shlomi Fish
37f86fda7e Fix misphrasing 2015-09-16 17:31:49 +03:00
Shlomi Fish
6afe244757 Correct “mail” to “E-mail” 2015-09-16 17:29:15 +03:00
Shlomi Fish
00658a322a Fix a misphrasing 2015-09-16 17:28:28 +03:00
Shlomi Fish
6fca984210 Fix typo - "these" 2015-09-16 17:27:05 +03:00
Shlomi Fish
54094572d0 Fix typo - "prebuilt" 2015-09-16 17:26:33 +03:00
Shlomi Fish
10e9d17121 Fix a typo - 'requires' 2015-09-16 17:24:56 +03:00
Shlomi Fish
4da40ecbc1 Fix a double phrase 2015-09-16 17:23:15 +03:00
mjentsch
470f3fd5cb Fix joining by roomlist when setting an alias 2015-09-14 23:40:26 +02:00
mjentsch
50367783db Do not display outgoing captioned images in group chats twice 2015-09-14 22:03:36 +02:00
mjentsch
32161b1558 Revert "Fix auto joining chats on connection"
This reverts commit fa9b331b39.
2015-09-13 22:24:22 +02:00
mjentsch
114dedcdc9 Do not add deleted users to buddy list and clean up a bit 2015-09-13 15:50:16 +02:00
mjentsch
cf536552b5 Bump version and update README 2015-09-12 23:29:47 +02:00
mjentsch
fa9b331b39 Fix auto joining chats on connection
Only set the connection status to online when all chat info was fetched,
to avoid annoying chat creation requests on startup.
2015-09-12 22:38:28 +02:00
mjentsch
4341bf0804 Fix showing joining chats by roomlist 2015-09-12 22:23:24 +02:00
mjentsch
dac0632ab1 Coding style and cleanup 2015-09-12 22:22:40 +02:00
mjentsch
c3f48b9835 Don't automatically add all chats to the buddy list
This should fix issue where left chats show up in the blist and cannot be removed anymore and broken Adium bookmarks.
This patch should make the whole chat handling much more native to libpurple, in which chats are added through the chatlist,
the join-chat window or automatically when incoming messages are received. Add a new option "Add chats to buddy list" in
case anyone wants the old behavior.
2015-09-12 22:21:27 +02:00
mjentsch
ce51b0bb68 Provide chat info defaults to allow joining chats from roomlist 2015-09-12 12:34:23 +02:00
mjentsch
665f27c279 Add missing account type check to adium signal handler 2015-09-11 22:55:46 +02:00
mjentsch
1004a4005d Fix user names not being displayed in group chats
Add users to temporary group "Telegram Foreign", to assure that the user
alias is always known to Pidgin. Don't store this group permanently but
drop it when closing.
2015-09-11 21:35:27 +02:00
mjentsch
66a1536d4b Fix segfault when receiving msg_send_done callback without a message
cherry-picks 936c541361 from branch
fix-group-participant-aliases
2015-09-08 22:40:38 +02:00
mjentsch
0c06c63dc8 Fix support for old glib versions 2015-09-08 22:28:24 +02:00
mjentsch
d9ca1c0f51 coding style 2015-09-08 22:17:43 +02:00
mjentsch
4670e3ede4 Don't add contacts when adding new buddy
The user should be able to just add buddies to the buddy list without any further side effects, especially
considering you now need to add any user not in the dialog list if you want him to show up.
2015-09-08 22:16:53 +02:00
mjentsch
a43aa8de42 Prevent flood warnings #2
Only get every chat info exactly once to avoid stalling of the incoming message queue through flood warnings.
2015-09-08 22:13:37 +02:00
mjentsch
e82fef3826 Prevent flood warnings
Only load user info on first start when the user actually has a pic to display.
2015-09-08 22:09:15 +02:00
mjentsch
546bcdc760 cleanup 2015-09-08 22:07:27 +02:00
mjentsch
de131bd3cc Fix bug that caused dialog list to not be loaded 2015-09-08 21:06:12 +02:00
mjentsch
5d187216cf Only get user info for dialogs that actually have a photo 2015-09-08 19:27:58 +02:00
Matthias Jentsch
2d7d1016a8 Better input validation for phone numbers 2015-09-08 17:06:57 +02:00
mjentsch
936c541361 Fix segfault when receiving msg_send_done callback without a message 2015-09-08 17:06:56 +02:00
mjentsch
ff2df0861b Add users in bulk to generate better join-messages in Finch 2015-09-08 17:06:56 +02:00
mjentsch
e665729ee2 Do not remove contact when deleting buddy list node, this is not obvious to the user 2015-09-08 17:06:56 +02:00
mjentsch
31c1037e4d Small fixes and cleanup 2015-09-08 17:06:56 +02:00
mjentsch
3dfb1ac17e Make sure to clear users when leaving chat with non-pidgin clients 2015-09-08 17:06:56 +02:00
mjentsch
ccc6dab512 fix input validation 2015-09-08 17:06:56 +02:00
mjentsch
620d4d5b8b Fix issue that caused newly created chats to not open 2015-09-08 17:06:56 +02:00
mjentsch
a5cef7dcaa Add support for roomlists 2015-09-08 17:06:56 +02:00
mjentsch
888cffffc1 Improve group chat management
Load full chat info lazily, prevents useless network request and should fix issues with delays through flood errors when handling big amounts of user chats. Handle chat participant deletions and additions correctly and only touch the user list when it is actually updated, this should fix some issues with printing annoying messages in Finch and users not showing up in the buddy list in certain situations. Only add chats to buddy list that are actively joined or receive incoming message, which should help keeping the buddy list more tidy when using much chats.
2015-09-08 17:06:56 +02:00
mjentsch
592b31e8c8 Cleanup 2015-09-08 17:06:55 +02:00
mjentsch
abd316a659 Support leaving and deleting chats 2015-09-08 17:06:55 +02:00
mjentsch
791b048eb1 Fix crash in Adium when exporting a non-existing chats link 2015-09-08 17:06:55 +02:00
mjentsch
6dd94bc3bc Fix certain chats now showing up when opening through Adium dialougue. 2015-09-08 17:06:55 +02:00
mjentsch
6ad121bb88 Fix segfault 2015-09-08 17:06:55 +02:00
mjentsch
f79897ec8e Fix chat participant names in Adium
first attempt, probably might cause issues with concurrency...
2015-09-08 17:06:55 +02:00
mjentsch
644416aa89 Display user aliases of users not in the buddy list in group chats 2015-09-08 17:06:55 +02:00
mj
b0ac19fc5f Merge pull request #111 from tuxmaster/master
- Fix rpmlint errors in the spec file.
2015-09-05 11:14:09 +02:00
tuxmaster
4509ccacb7 - Fix rpmlint errors in the spec file. 2015-09-02 17:00:30 +02:00
mjentsch
f770abce19 Include RPM-fix by tuxmaster 2015-09-01 00:21:03 +02:00
mjentsch
f6691e0c63 Update telegram-adium version and depend on 1.5.10 2015-08-30 21:58:09 +02:00
mjentsch
227fe399bb Don't break config window in telegram-adium 2015-08-30 21:58:09 +02:00
mj
c4a17ca0b5 Merge pull request #107 from flocke/master
Some minor build improvements
2015-08-30 21:10:32 +02:00
Jakob Nixdorf
75a9b56ddb Use pkg-config found in configure in make. 2015-08-29 18:37:02 +02:00
Jakob Nixdorf
3fbe1079bc Set the 'ar' command as variable in Makefile.tgl
Allows the location of the ar binary to be changed by passing the argument AR=/path/to/ar to make.
2015-08-29 18:33:28 +02:00
mjentsch
f10b683fc9 Merge branch 'final' 2015-08-29 17:33:03 +02:00
mjentsch
31afb76895 Update README 2015-08-29 17:31:38 +02:00
mjentsch
8e87c16c75 Update own user-name properly 2015-08-29 14:22:32 +02:00
mjentsch
8a80eeccae Remove network logging temporarily 2015-08-29 13:44:26 +02:00
mjentsch
793b1fc0fb Disable defective set_buddy_icon temporarily 2015-08-29 12:57:16 +02:00
mjentsch
2b15603685 Always add secret chats to buddy list
Active secret chats should always show up in the buddy list, since there's the only endpoint for a conversation.
2015-08-29 12:56:36 +02:00
mjentsch
973f236abc Fix OSM geo link formatting when using a different locale 2015-08-28 20:55:31 +02:00
mjentsch
b6136a6a9c Fix sending animated pictures by inline image 2015-08-28 00:03:33 +02:00
mjentsch
1a8172e922 Fix issue that caused sending captioned images to fail in Pidgin 2015-08-27 23:40:08 +02:00
mjentsch
ee48642232 Change module source to my own fork until it is merged 2015-08-26 23:41:33 +02:00
mjentsch
2e7bd3e3c6 Update README 2015-08-25 23:02:23 +02:00
mjentsch
153762c5af Bump version 2015-08-25 21:58:58 +02:00
mjentsch
70b03b969c Try to fix secret chat corruption 2015-08-25 21:54:15 +02:00
mjentsch
5e65a6675c Fix compilation 2015-08-22 13:42:44 +02:00
mjentsch
8af1991bc8 Update libtgl and fix receiving file transfers of audio and video documents 2015-08-22 13:34:53 +02:00
mjentsch
b5198b3184 Clean up and update README 2015-08-22 13:13:19 +02:00
mjentsch
f5ec7f3e80 Rework buddy list handling
Only add buddies that are on the dialogue list or were explicitly added by the user, to prevent adding non-related users that are now allocated due to protocol updates.
2015-08-22 13:07:11 +02:00
mjentsch
9f71a73632 Remove makefile as dependency from XCode project, only caused trouble 2015-08-22 12:27:34 +02:00
mjentsch
0b95f05da0 Update libtgl 2015-08-16 21:35:43 +02:00
mj
ba868f7f24 Merge pull request #97 from surrim/dnf
using fedora's dnf instead of deprecated yum
2015-08-04 17:41:22 +02:00
surrim
c0b6329b71 using fedora's dnf instead of deprecated yum 2015-08-04 15:20:57 +02:00
mjentsch
4b96e3cb34 Do not display notifications and sounds for messages that were already read on other devices
This should make receiving message history a little less annoying when not using the client for a long time, while still getting the full history in your log.
2015-08-02 19:52:30 +02:00
mjentsch
dc5bc8d039 Improve error handling 2015-08-01 23:34:00 +02:00
mjentsch
8ebd970fbc Escape webpage messages properly 2015-07-31 12:53:24 +02:00
mjentsch
dd6031900e Cleanup 2015-07-30 21:49:13 +02:00
mjentsch
ea12251897 Fix chat creation 2015-07-30 21:46:03 +02:00
mjentsch
7be7fb12f4 Fix video and audio file names 2015-07-30 21:02:22 +02:00
mjentsch
e8ceb21e64 Revise media message handling
This should fix many seg faults and make media handling more consistent.
2015-07-30 11:45:50 +02:00
mjentsch
f810ac5b94 Update user list in chats properly 2015-07-28 21:28:28 +02:00
mjentsch
54c6f4d519 fix bug 2015-07-24 14:28:18 +02:00
mjentsch
254293bc2c Display new chats after creation 2015-07-24 14:27:20 +02:00
mjentsch
61cddd1340 Support for joining chats by invite link 2015-07-24 14:26:13 +02:00
mjentsch
287ace46a4 Support autocompletion in chat creation windows
Offer several autocompletion fields instead of a list of users in Adium and Pidgin.
2015-07-24 14:25:05 +02:00
mjentsch
3a2af54fad Coding style 2015-07-19 16:16:21 +02:00
mjentsch
c5b98eccb2 Increase dialog list limit to ensure that we always get old chats 2015-07-19 16:15:30 +02:00
mjentsch
a4c5bca05f Support creating chat invitation links 2015-07-19 15:18:59 +02:00
mjentsch
e14b681d6e Fix segfault 2015-07-19 15:07:27 +02:00
mjentsch
747c214dcd Support creating new chats
Offer creating a new chat when trying to join a non-existing chat and
add user choice dialogue...
2015-07-18 03:00:11 +02:00
mjentsch
5a06970c23 Hotfix when one DC is not available 2015-07-12 23:01:04 +02:00
mjentsch
c7898c7596 Support image captions 2015-07-11 19:50:55 +02:00
mjentsch
01e7f8da2b Improve printing geo positions 2015-07-11 19:50:32 +02:00
mjentsch
cd1e8d8020 Mask password in settings ... 2015-07-11 19:35:07 +02:00
mjentsch
47812f2f72 Improve string sanitation in fallback chat 2015-07-11 19:34:19 +02:00
mjentsch
8f790253a7 Improve geo position link and support printing venues 2015-07-11 18:31:03 +02:00
mjentsch
ed1f91123e remove unused functions and clean up 2015-07-11 17:44:49 +02:00
mjentsch
51064e06b4 Update tgl version 2015-07-11 17:41:50 +02:00
mjentsch
5588de63f0 Fix logging 2015-06-15 21:04:58 +02:00
120 changed files with 17132 additions and 10411 deletions

24
.gitignore vendored
View file

@ -1,13 +1,11 @@
*.o
*.so
tg/
auto/
autom4te.cache/
config.h
config.h.in~
dep/
libs/
bin/
config.log
config.status
Makefile
/objs/
/autom4te.cache/
/config.h
*~
/dep/
/libs/
/bin/
/config.log
/config.status
/Makefile
/commit.h

3
.gitmodules vendored
View file

@ -1,3 +1,4 @@
[submodule "tgl"]
path = tgl
url = https://github.com/vysheng/tgl
branch = test
url = https://github.com/majn/tgl

48
.travis.yml Normal file
View file

@ -0,0 +1,48 @@
language: c
# Select Trusty Tahr.
sudo: required
dist: trusty
# Travis' git submodule support is ... broken? half-broken? Maybe intentional?
git:
submodules: false
depth: 3
before_install:
- git submodule update --init --recursive
- sudo apt-get update -qq
- sudo apt-get install -qq libssl-dev libgcrypt20-dev libpurple-dev libwebp-dev
script:
- ./configure $CONFIGURE_FLAGS
- make -j2
- make check
compiler:
- clang
- gcc
env:
# Try to be nice to the builder
- CONFIGURE_FLAGS=""
- CONFIGURE_FLAGS="--disable-gcrypt"
- CONFIGURE_FLAGS=" --disable-libwebp"
# - CONFIGURE_FLAGS="--disable-gcrypt --disable-libwebp"
- CONFIGURE_FLAGS=" --disable-translation"
# - CONFIGURE_FLAGS="--disable-gcrypt --disable-translation"
# - CONFIGURE_FLAGS=" --disable-libwebp --disable-translation"
- CONFIGURE_FLAGS="--disable-gcrypt --disable-libwebp --disable-translation"
matrix:
# Be even nicer by excluding half of the combinations
exclude:
- compiler: clang
env: CONFIGURE_FLAGS=""
- compiler: gcc
env: CONFIGURE_FLAGS="--disable-gcrypt"
- compiler: clang
env: CONFIGURE_FLAGS=" --disable-libwebp"
# - compiler: XXX
# env: CONFIGURE_FLAGS="--disable-gcrypt --disable-libwebp"
- compiler: gcc
env: CONFIGURE_FLAGS=" --disable-translation"
# - compiler: clang
# env: CONFIGURE_FLAGS="--disable-gcrypt --disable-translation"
# - compiler: gcc
# env: CONFIGURE_FLAGS=" --disable-libwebp --disable-translation"
- compiler: clang
env: CONFIGURE_FLAGS="--disable-gcrypt --disable-libwebp --disable-translation"

4
AUTHORS Normal file
View file

@ -0,0 +1,4 @@
Matthias Jentsch <mtthsjntsch@gmail.com>
Ben Wiederhake <Ben.Wiederhake@gmail.com>
Vitaly Valtman <vvaltman@aurum>
Christopher Althaus <althaus.christopher@gmail.com>

45
AppStream/Makefile Normal file
View file

@ -0,0 +1,45 @@
# This file is part of telegram-purple
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA
#
# Copyright Ben Wiederhake 2016
# This file is NOT meant for inclusion into the main Makefile.
LOCALES=$(shell cat po/LINGUAS)
LOCALE_MOS=$(addprefix po/,$(addsuffix .mo,$(LOCALES)))
# Hardcoded, since this should only be run on very few machines anyway,
# which are expected to have msgfmt on their $PATH
MSGFMT_PATH=msgfmt
all: translate
po/%.mo: po/%.po
${MSGFMT_PATH} -cf -o $@ $<
po/telegram-purple.metainfo.xml.pot: telegram-purple.metainfo.untranslated.xml as-metainfo.its
itstool -i as-metainfo.its -o $@ $<
# CAREFUL WHEN EDITING!
# "-j raw.xml *.mo" must be the last options!
telegram-purple.metainfo.xml: as-metainfo.its telegram-purple.metainfo.untranslated.xml $(LOCALE_MOS) po/LINGUAS
itstool -i as-metainfo.its -o $@ \
-j telegram-purple.metainfo.untranslated.xml $(LOCALE_MOS)
.PHONY: potfile
potfile: po/telegram-purple.metainfo.xml.pot
.PHONY: translate
translate: telegram-purple.metainfo.xml

23
AppStream/as-metainfo.its Normal file
View file

@ -0,0 +1,23 @@
<!-- Copyright © 2012-2015 Matthias Klumpp.
This material may only be distributed subject to the terms and
conditions set forth in the GNU Free Documentation License (GFDL),
V1.2 with no invariant sections or later (the latest version is
presently available at http://www.gnu.org/licenses/fdl.txt).
This file bases on the "Quickstart Translation using itstool":
http://www.freedesktop.org/software/appstream/docs/sect-Quickstart-Translation.html
The copyright for the base transformer was found at:
http://www.freedesktop.org/software/appstream/docs/index.html
-->
<its:rules
xmlns:its="http://www.w3.org/2005/11/its"
version="1.0">
<its:translateRule translate="no" selector="/component"/>
<its:translateRule translate="yes"
selector="/component/name |
/component/summary |
/component/description |
/component/screenshots/screenshot/caption |
/component/developer_name"/>
</its:rules>

1
AppStream/po/.gitignore vendored Normal file
View file

@ -0,0 +1 @@
/*.mo

12
AppStream/po/LINGUAS Normal file
View file

@ -0,0 +1,12 @@
bg
cs_CZ
de_DE
es
es_AR
fr
it_IT
nl
pl_PL
ru_RU
sq
uk

25
AppStream/po/bg.po Normal file
View file

@ -0,0 +1,25 @@
#
# Translators:
# Любомир Василев, 2016
msgid ""
msgstr ""
"Project-Id-Version: telegram-purple\n"
"POT-Creation-Date: 2016-01-07 23:23+0100\n"
"PO-Revision-Date: 2016-10-19 14:07+0000\n"
"Last-Translator: Любомир Василев\n"
"Language-Team: Bulgarian (http://www.transifex.com/telegram-purple-developers/telegram-purple/language/bg/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: bg\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#. (itstool) path: component/name
#: telegram-purple.metainfo.untranslated.xml:9
msgid "Telegram"
msgstr "Telegram"
#. (itstool) path: component/summary
#: telegram-purple.metainfo.untranslated.xml:10
msgid "A plugin that adds support for Telegram"
msgstr "Добавка, която добавя поддръжка на Telegram"

25
AppStream/po/cs_CZ.po Normal file
View file

@ -0,0 +1,25 @@
#
# Translators:
# Jan Breuer <j123b567@jaybee.cz>, 2016
msgid ""
msgstr ""
"Project-Id-Version: telegram-purple\n"
"POT-Creation-Date: 2016-01-07 23:23+0100\n"
"PO-Revision-Date: 2016-02-18 14:45+0000\n"
"Last-Translator: Jan Breuer <j123b567@jaybee.cz>\n"
"Language-Team: Czech (Czech Republic) (http://www.transifex.com/telegram-purple-developers/telegram-purple/language/cs_CZ/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: cs_CZ\n"
"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
#. (itstool) path: component/name
#: telegram-purple.metainfo.untranslated.xml:9
msgid "Telegram"
msgstr "Telegram"
#. (itstool) path: component/summary
#: telegram-purple.metainfo.untranslated.xml:10
msgid "A plugin that adds support for Telegram"
msgstr "Zásuvný modul, který přidá podporu pro Telegram"

25
AppStream/po/de_DE.po Normal file
View file

@ -0,0 +1,25 @@
#
# Translators:
# Ben Wiederhake <BenWiederhake.GitHub@gmx.de>, 2016
msgid ""
msgstr ""
"Project-Id-Version: telegram-purple\n"
"POT-Creation-Date: 2016-01-07 23:23+0100\n"
"PO-Revision-Date: 2016-01-09 13:14+0000\n"
"Last-Translator: Ben Wiederhake <BenWiederhake.GitHub@gmx.de>\n"
"Language-Team: German (Germany) (http://www.transifex.com/telegram-purple-developers/telegram-purple/language/de_DE/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: de_DE\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#. (itstool) path: component/name
#: telegram-purple.metainfo.untranslated.xml:9
msgid "Telegram"
msgstr "Telegram"
#. (itstool) path: component/summary
#: telegram-purple.metainfo.untranslated.xml:10
msgid "A plugin that adds support for Telegram"
msgstr "Plugin zur Unterstützung von Telegram"

25
AppStream/po/es.po Normal file
View file

@ -0,0 +1,25 @@
#
# Translators:
# aguador <aguador@openmailbox.org>, 2017
msgid ""
msgstr ""
"Project-Id-Version: telegram-purple\n"
"POT-Creation-Date: 2016-01-07 23:23+0100\n"
"PO-Revision-Date: 2017-02-27 09:08+0000\n"
"Last-Translator: aguador <aguador@openmailbox.org>\n"
"Language-Team: Spanish (http://www.transifex.com/telegram-purple-developers/telegram-purple/language/es/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: es\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#. (itstool) path: component/name
#: telegram-purple.metainfo.untranslated.xml:9
msgid "Telegram"
msgstr "Telegram"
#. (itstool) path: component/summary
#: telegram-purple.metainfo.untranslated.xml:10
msgid "A plugin that adds support for Telegram"
msgstr "Un plugin que añade soporte para Telegram"

25
AppStream/po/es_AR.po Normal file
View file

@ -0,0 +1,25 @@
#
# Translators:
# KNTRO <kntro@msn.com>, 2016
msgid ""
msgstr ""
"Project-Id-Version: telegram-purple\n"
"POT-Creation-Date: 2016-01-07 23:23+0100\n"
"PO-Revision-Date: 2016-10-08 19:37+0000\n"
"Last-Translator: KNTRO <kntro@msn.com>\n"
"Language-Team: Spanish (Argentina) (http://www.transifex.com/telegram-purple-developers/telegram-purple/language/es_AR/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: es_AR\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#. (itstool) path: component/name
#: telegram-purple.metainfo.untranslated.xml:9
msgid "Telegram"
msgstr "Telegram"
#. (itstool) path: component/summary
#: telegram-purple.metainfo.untranslated.xml:10
msgid "A plugin that adds support for Telegram"
msgstr "Un plugin que agrega soporte para Telegram"

25
AppStream/po/fr.po Normal file
View file

@ -0,0 +1,25 @@
#
# Translators:
# Javier Sixto, 2016
msgid ""
msgstr ""
"Project-Id-Version: telegram-purple\n"
"POT-Creation-Date: 2016-01-07 23:23+0100\n"
"PO-Revision-Date: 2016-04-14 19:51+0000\n"
"Last-Translator: Javier Sixto\n"
"Language-Team: French (http://www.transifex.com/telegram-purple-developers/telegram-purple/language/fr/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: fr\n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
#. (itstool) path: component/name
#: telegram-purple.metainfo.untranslated.xml:9
msgid "Telegram"
msgstr "Telegram"
#. (itstool) path: component/summary
#: telegram-purple.metainfo.untranslated.xml:10
msgid "A plugin that adds support for Telegram"
msgstr "Une extension qui ajoute le support pour Telegram"

25
AppStream/po/it_IT.po Normal file
View file

@ -0,0 +1,25 @@
#
# Translators:
# Giuseppe Pignataro (Fasbyte01) <rogepix@gmail.com>, 2016
msgid ""
msgstr ""
"Project-Id-Version: telegram-purple\n"
"POT-Creation-Date: 2016-01-07 23:23+0100\n"
"PO-Revision-Date: 2017-02-27 09:08+0000\n"
"Last-Translator: Giuseppe Pignataro (Fasbyte01) <rogepix@gmail.com>\n"
"Language-Team: Italian (Italy) (http://www.transifex.com/telegram-purple-developers/telegram-purple/language/it_IT/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: it_IT\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#. (itstool) path: component/name
#: telegram-purple.metainfo.untranslated.xml:9
msgid "Telegram"
msgstr "Telegram"
#. (itstool) path: component/summary
#: telegram-purple.metainfo.untranslated.xml:10
msgid "A plugin that adds support for Telegram"
msgstr "Un plugin che aggiunge il supporto per Telegram"

25
AppStream/po/nl.po Normal file
View file

@ -0,0 +1,25 @@
#
# Translators:
# justin [notsupplied] <inactive+justin50@transifex.com>, 2016
msgid ""
msgstr ""
"Project-Id-Version: telegram-purple\n"
"POT-Creation-Date: 2016-01-07 23:23+0100\n"
"PO-Revision-Date: 2016-10-19 17:56+0000\n"
"Last-Translator: justin [notsupplied] <inactive+justin50@transifex.com>\n"
"Language-Team: Dutch (http://www.transifex.com/telegram-purple-developers/telegram-purple/language/nl/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: nl\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#. (itstool) path: component/name
#: telegram-purple.metainfo.untranslated.xml:9
msgid "Telegram"
msgstr "Telegram"
#. (itstool) path: component/summary
#: telegram-purple.metainfo.untranslated.xml:10
msgid "A plugin that adds support for Telegram"
msgstr "Een plug-in die ondersteuning voor Telegram toevoegt"

25
AppStream/po/pl_PL.po Normal file
View file

@ -0,0 +1,25 @@
#
# Translators:
# Piotr Drąg <piotrdrag@gmail.com>, 2016
msgid ""
msgstr ""
"Project-Id-Version: telegram-purple\n"
"POT-Creation-Date: 2016-01-07 23:23+0100\n"
"PO-Revision-Date: 2017-02-27 09:08+0000\n"
"Last-Translator: Piotr Drąg <piotrdrag@gmail.com>\n"
"Language-Team: Polish (Poland) (http://www.transifex.com/telegram-purple-developers/telegram-purple/language/pl_PL/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: pl_PL\n"
"Plural-Forms: nplurals=4; plural=(n==1 ? 0 : (n%10>=2 && n%10<=4) && (n%100<12 || n%100>=14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && n%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);\n"
#. (itstool) path: component/name
#: telegram-purple.metainfo.untranslated.xml:9
msgid "Telegram"
msgstr "Telegram"
#. (itstool) path: component/summary
#: telegram-purple.metainfo.untranslated.xml:10
msgid "A plugin that adds support for Telegram"
msgstr "Wtyczka dodająca obsługę protokołu Telegram"

25
AppStream/po/ru_RU.po Normal file
View file

@ -0,0 +1,25 @@
#
# Translators:
# Vladimir <TurbaVladimir@yandex.ru>, 2016
msgid ""
msgstr ""
"Project-Id-Version: telegram-purple\n"
"POT-Creation-Date: 2016-01-07 23:23+0100\n"
"PO-Revision-Date: 2016-02-18 14:45+0000\n"
"Last-Translator: Vladimir <TurbaVladimir@yandex.ru>\n"
"Language-Team: Russian (Russia) (http://www.transifex.com/telegram-purple-developers/telegram-purple/language/ru_RU/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: ru_RU\n"
"Plural-Forms: nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n%100>=11 && n%100<=14)? 2 : 3);\n"
#. (itstool) path: component/name
#: telegram-purple.metainfo.untranslated.xml:9
msgid "Telegram"
msgstr "Telegram"
#. (itstool) path: component/summary
#: telegram-purple.metainfo.untranslated.xml:10
msgid "A plugin that adds support for Telegram"
msgstr "Плагин, добавляющий поддержку Telegram"

25
AppStream/po/sq.po Normal file
View file

@ -0,0 +1,25 @@
#
# Translators:
# Besnik <besnik@programeshqip.org>, 2016
msgid ""
msgstr ""
"Project-Id-Version: telegram-purple\n"
"POT-Creation-Date: 2016-01-07 23:23+0100\n"
"PO-Revision-Date: 2016-02-18 14:45+0000\n"
"Last-Translator: Besnik <besnik@programeshqip.org>\n"
"Language-Team: Albanian (http://www.transifex.com/telegram-purple-developers/telegram-purple/language/sq/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: sq\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#. (itstool) path: component/name
#: telegram-purple.metainfo.untranslated.xml:9
msgid "Telegram"
msgstr "Telegram"
#. (itstool) path: component/summary
#: telegram-purple.metainfo.untranslated.xml:10
msgid "A plugin that adds support for Telegram"
msgstr "Një shtojcë që shton mbulim për Telegram-in"

View file

@ -0,0 +1,21 @@
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"POT-Creation-Date: 2016-01-07 23:23+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
#. (itstool) path: component/name
#: telegram-purple.metainfo.untranslated.xml:9
msgid "Telegram"
msgstr ""
#. (itstool) path: component/summary
#: telegram-purple.metainfo.untranslated.xml:10
msgid "A plugin that adds support for Telegram"
msgstr ""

25
AppStream/po/uk.po Normal file
View file

@ -0,0 +1,25 @@
#
# Translators:
# Самохвалов Антон <samant.ua@mail.ru>, 2017
msgid ""
msgstr ""
"Project-Id-Version: telegram-purple\n"
"POT-Creation-Date: 2016-01-07 23:23+0100\n"
"PO-Revision-Date: 2017-03-04 06:36+0000\n"
"Last-Translator: Самохвалов Антон <samant.ua@mail.ru>\n"
"Language-Team: Ukrainian (http://www.transifex.com/telegram-purple-developers/telegram-purple/language/uk/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: uk\n"
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
#. (itstool) path: component/name
#: telegram-purple.metainfo.untranslated.xml:9
msgid "Telegram"
msgstr "Телеграм"
#. (itstool) path: component/summary
#: telegram-purple.metainfo.untranslated.xml:10
msgid "A plugin that adds support for Telegram"
msgstr "Плагін, що додає підтримку у Телеграм"

View file

@ -0,0 +1,16 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright 2015 Jiri Eischmann <eischmann@redhat.com>
It is very important that this file does *not* receive any
Invariant Sections as per GFDL.
-->
<component type="addon">
<id>telegram-purple</id>
<extends>pidgin.desktop</extends>
<name>Telegram</name>
<summary>A plugin that adds support for Telegram</summary>
<url type="homepage">https://github.com/majn/telegram-purple</url>
<url type="bugtracker">https://github.com/majn/telegram-purple/issues/</url>
<metadata_license>GFDL-1.3</metadata_license>
<project_license>GPL-2.0+</project_license>
<update_contact>eischmann_at_redhat.com</update_contact>
</component>

View file

@ -0,0 +1,40 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright 2015 Jiri Eischmann <eischmann@redhat.com>
It is very important that this file does *not* receive any
Invariant Sections as per GFDL.
-->
<component type="addon">
<id>telegram-purple</id>
<extends>pidgin.desktop</extends>
<name>Telegram</name>
<name xml:lang="bg">Telegram</name>
<name xml:lang="cs-CZ">Telegram</name>
<name xml:lang="de-DE">Telegram</name>
<name xml:lang="es">Telegram</name>
<name xml:lang="es-AR">Telegram</name>
<name xml:lang="fr">Telegram</name>
<name xml:lang="it-IT">Telegram</name>
<name xml:lang="nl">Telegram</name>
<name xml:lang="pl-PL">Telegram</name>
<name xml:lang="ru-RU">Telegram</name>
<name xml:lang="sq">Telegram</name>
<name xml:lang="uk">Телеграм</name>
<summary>A plugin that adds support for Telegram</summary>
<summary xml:lang="bg">Добавка, която добавя поддръжка на Telegram</summary>
<summary xml:lang="cs-CZ">Zásuvný modul, který přidá podporu pro Telegram</summary>
<summary xml:lang="de-DE">Plugin zur Unterstützung von Telegram</summary>
<summary xml:lang="es">Un plugin que añade soporte para Telegram</summary>
<summary xml:lang="es-AR">Un plugin que agrega soporte para Telegram</summary>
<summary xml:lang="fr">Une extension qui ajoute le support pour Telegram</summary>
<summary xml:lang="it-IT">Un plugin che aggiunge il supporto per Telegram</summary>
<summary xml:lang="nl">Een plug-in die ondersteuning voor Telegram toevoegt</summary>
<summary xml:lang="pl-PL">Wtyczka dodająca obsługę protokołu Telegram</summary>
<summary xml:lang="ru-RU">Плагин, добавляющий поддержку Telegram</summary>
<summary xml:lang="sq">Një shtojcë që shton mbulim për Telegram-in</summary>
<summary xml:lang="uk">Плагін, що додає підтримку у Телеграм</summary>
<url type="homepage">https://github.com/majn/telegram-purple</url>
<url type="bugtracker">https://github.com/majn/telegram-purple/issues/</url>
<metadata_license>GFDL-1.3</metadata_license>
<project_license>GPL-2.0+</project_license>
<update_contact>eischmann_at_redhat.com</update_contact>
</component>

View file

@ -1,6 +1,105 @@
Changelog
---------
##### 1.3.1
- Stability improvements
- Support auto-loading for documents
- Add support for "typing" in group chats (using group-typing-notifications plugin)
- Add support for /kick command in group chats
##### 1.3.0
- channel/supergroup support
- support sending code tags in markdown "backtick" format (see README for example)
- reduce amount of file-transfer popups in Pidgin, auto-load media in the background
- fix stability issues for the win32 build
- fix multiple crashes in libtgl
##### 1.2.6
- Include libtgl bugfix "use-after-not-created for photos"
- Fix Adium bundle version incompatibillity for newest version
##### 1.2.5
- Include libtgl fix to prevent crashes on certain channel messages
- Improve error handling to be more graceful
##### 1.2.4
- Fix crash on unknown media type
- Fix crash on logout after cancelling a file transfer
##### 1.2.3
- Build: Allow compilation on Windows #52 Thanks Eion!
- Build: Drop dependency on LodePNG, Thanks Ben!
- Build: Gettext is now optional
- Fix issue that prevented to send messages to deleted users in certain cases (#174)
- Fix own user being added to the buddy list in certain cases
- Fix that read recipes of own messages are being displayed (#139)
- Fix encoding inconsistencies with Unicode characters (#177)
- Fix auto-joining for chats (#179)
- Fix client not reconnecting anymore under certain circumstances (#173)
- Fix crash on compat-verification (PullRequest #183)
- Remove pointless "create chat" confirmation dialogue
- Improve logging messages
- Always send read recipes when the user is typing or sending a message
- Improve translation and user messages (#139)
- Use native password prompts (Adium)
##### 1.2.2
- fix some licensing issues by not depending on OpenSSL any longer (thanks Ben!)
- add tons of translations (thanks to anyone helping!)
- fix issue that caused empty files
- fix pidgin not reconnecting after hibernation
- fix adium not reconnecting after hibernation
- fix secret chat fingerprint not being displayed after restart
- fix secret chat name not being displayed after restart
##### 1.2.1
##### Bugfixes
- Fix buggy group chat handling
* Assure that foreign users are always listed by their full name instead of the user ID
* Don't automatically add group chats to buddy list to prevent incompatibillities with some libpurple clients
* Fix issue that caused the buddy list to not be correctly updated on joining / leaving participants
* Fix an issue that caused the user list to be printed on every group chat message in Finch
- Fetch chat information lazily to reduce traffic and prevent flood errors
- Improve input validation for phone numbers
###### Features
- Support leaving chats
- Implement the roomlist-API to allow listing of all active chats
##### Version 1.2.0 (Beta 3)
##### Bugfixes
- Fix error in incoming message handling that caused segmentation faults
- Fix failing audio and video transfers
- Mark messages read on other devices as 'deferred' to avoid needless notifications
- Improved buddy list handling (should avoid "unknown" contacts popping up)
- Many small issues (see commit history)
- Fix issues that caused audio and video downloads to not have a proper file ending
- Fix issue that caused very old unused chats to not be available
###### Features
- Allow creation of new group chats
- Allow joining chats by invite link
- Allow exporting chats by invite link
- Support displaying and sending GIFs
- Support joining chats by invite link
##### Version 1.1.0 (Beta 2)

339
COPYING Normal file
View file

@ -0,0 +1,339 @@
GNU GENERAL PUBLIC LICENSE
Version 2, June 1991
Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
Preamble
The licenses for most software are designed to take away your
freedom to share and change it. By contrast, the GNU General Public
License is intended to guarantee your freedom to share and change free
software--to make sure the software is free for all its users. This
General Public License applies to most of the Free Software
Foundation's software and to any other program whose authors commit to
using it. (Some other Free Software Foundation software is covered by
the GNU Lesser General Public License instead.) You can apply it to
your programs, too.
When we speak of free software, we are referring to freedom, not
price. Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
this service if you wish), that you receive source code or can get it
if you want it, that you can change the software or use pieces of it
in new free programs; and that you know you can do these things.
To protect your rights, we need to make restrictions that forbid
anyone to deny you these rights or to ask you to surrender the rights.
These restrictions translate to certain responsibilities for you if you
distribute copies of the software, or if you modify it.
For example, if you distribute copies of such a program, whether
gratis or for a fee, you must give the recipients all the rights that
you have. You must make sure that they, too, receive or can get the
source code. And you must show them these terms so they know their
rights.
We protect your rights with two steps: (1) copyright the software, and
(2) offer you this license which gives you legal permission to copy,
distribute and/or modify the software.
Also, for each author's protection and ours, we want to make certain
that everyone understands that there is no warranty for this free
software. If the software is modified by someone else and passed on, we
want its recipients to know that what they have is not the original, so
that any problems introduced by others will not reflect on the original
authors' reputations.
Finally, any free program is threatened constantly by software
patents. We wish to avoid the danger that redistributors of a free
program will individually obtain patent licenses, in effect making the
program proprietary. To prevent this, we have made it clear that any
patent must be licensed for everyone's free use or not licensed at all.
The precise terms and conditions for copying, distribution and
modification follow.
GNU GENERAL PUBLIC LICENSE
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
0. This License applies to any program or other work which contains
a notice placed by the copyright holder saying it may be distributed
under the terms of this General Public License. The "Program", below,
refers to any such program or work, and a "work based on the Program"
means either the Program or any derivative work under copyright law:
that is to say, a work containing the Program or a portion of it,
either verbatim or with modifications and/or translated into another
language. (Hereinafter, translation is included without limitation in
the term "modification".) Each licensee is addressed as "you".
Activities other than copying, distribution and modification are not
covered by this License; they are outside its scope. The act of
running the Program is not restricted, and the output from the Program
is covered only if its contents constitute a work based on the
Program (independent of having been made by running the Program).
Whether that is true depends on what the Program does.
1. You may copy and distribute verbatim copies of the Program's
source code as you receive it, in any medium, provided that you
conspicuously and appropriately publish on each copy an appropriate
copyright notice and disclaimer of warranty; keep intact all the
notices that refer to this License and to the absence of any warranty;
and give any other recipients of the Program a copy of this License
along with the Program.
You may charge a fee for the physical act of transferring a copy, and
you may at your option offer warranty protection in exchange for a fee.
2. You may modify your copy or copies of the Program or any portion
of it, thus forming a work based on the Program, and copy and
distribute such modifications or work under the terms of Section 1
above, provided that you also meet all of these conditions:
a) You must cause the modified files to carry prominent notices
stating that you changed the files and the date of any change.
b) You must cause any work that you distribute or publish, that in
whole or in part contains or is derived from the Program or any
part thereof, to be licensed as a whole at no charge to all third
parties under the terms of this License.
c) If the modified program normally reads commands interactively
when run, you must cause it, when started running for such
interactive use in the most ordinary way, to print or display an
announcement including an appropriate copyright notice and a
notice that there is no warranty (or else, saying that you provide
a warranty) and that users may redistribute the program under
these conditions, and telling the user how to view a copy of this
License. (Exception: if the Program itself is interactive but
does not normally print such an announcement, your work based on
the Program is not required to print an announcement.)
These requirements apply to the modified work as a whole. If
identifiable sections of that work are not derived from the Program,
and can be reasonably considered independent and separate works in
themselves, then this License, and its terms, do not apply to those
sections when you distribute them as separate works. But when you
distribute the same sections as part of a whole which is a work based
on the Program, the distribution of the whole must be on the terms of
this License, whose permissions for other licensees extend to the
entire whole, and thus to each and every part regardless of who wrote it.
Thus, it is not the intent of this section to claim rights or contest
your rights to work written entirely by you; rather, the intent is to
exercise the right to control the distribution of derivative or
collective works based on the Program.
In addition, mere aggregation of another work not based on the Program
with the Program (or with a work based on the Program) on a volume of
a storage or distribution medium does not bring the other work under
the scope of this License.
3. You may copy and distribute the Program (or a work based on it,
under Section 2) in object code or executable form under the terms of
Sections 1 and 2 above provided that you also do one of the following:
a) Accompany it with the complete corresponding machine-readable
source code, which must be distributed under the terms of Sections
1 and 2 above on a medium customarily used for software interchange; or,
b) Accompany it with a written offer, valid for at least three
years, to give any third party, for a charge no more than your
cost of physically performing source distribution, a complete
machine-readable copy of the corresponding source code, to be
distributed under the terms of Sections 1 and 2 above on a medium
customarily used for software interchange; or,
c) Accompany it with the information you received as to the offer
to distribute corresponding source code. (This alternative is
allowed only for noncommercial distribution and only if you
received the program in object code or executable form with such
an offer, in accord with Subsection b above.)
The source code for a work means the preferred form of the work for
making modifications to it. For an executable work, complete source
code means all the source code for all modules it contains, plus any
associated interface definition files, plus the scripts used to
control compilation and installation of the executable. However, as a
special exception, the source code distributed need not include
anything that is normally distributed (in either source or binary
form) with the major components (compiler, kernel, and so on) of the
operating system on which the executable runs, unless that component
itself accompanies the executable.
If distribution of executable or object code is made by offering
access to copy from a designated place, then offering equivalent
access to copy the source code from the same place counts as
distribution of the source code, even though third parties are not
compelled to copy the source along with the object code.
4. You may not copy, modify, sublicense, or distribute the Program
except as expressly provided under this License. Any attempt
otherwise to copy, modify, sublicense or distribute the Program is
void, and will automatically terminate your rights under this License.
However, parties who have received copies, or rights, from you under
this License will not have their licenses terminated so long as such
parties remain in full compliance.
5. You are not required to accept this License, since you have not
signed it. However, nothing else grants you permission to modify or
distribute the Program or its derivative works. These actions are
prohibited by law if you do not accept this License. Therefore, by
modifying or distributing the Program (or any work based on the
Program), you indicate your acceptance of this License to do so, and
all its terms and conditions for copying, distributing or modifying
the Program or works based on it.
6. Each time you redistribute the Program (or any work based on the
Program), the recipient automatically receives a license from the
original licensor to copy, distribute or modify the Program subject to
these terms and conditions. You may not impose any further
restrictions on the recipients' exercise of the rights granted herein.
You are not responsible for enforcing compliance by third parties to
this License.
7. If, as a consequence of a court judgment or allegation of patent
infringement or for any other reason (not limited to patent issues),
conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License. If you cannot
distribute so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you
may not distribute the Program at all. For example, if a patent
license would not permit royalty-free redistribution of the Program by
all those who receive copies directly or indirectly through you, then
the only way you could satisfy both it and this License would be to
refrain entirely from distribution of the Program.
If any portion of this section is held invalid or unenforceable under
any particular circumstance, the balance of the section is intended to
apply and the section as a whole is intended to apply in other
circumstances.
It is not the purpose of this section to induce you to infringe any
patents or other property right claims or to contest validity of any
such claims; this section has the sole purpose of protecting the
integrity of the free software distribution system, which is
implemented by public license practices. Many people have made
generous contributions to the wide range of software distributed
through that system in reliance on consistent application of that
system; it is up to the author/donor to decide if he or she is willing
to distribute software through any other system and a licensee cannot
impose that choice.
This section is intended to make thoroughly clear what is believed to
be a consequence of the rest of this License.
8. If the distribution and/or use of the Program is restricted in
certain countries either by patents or by copyrighted interfaces, the
original copyright holder who places the Program under this License
may add an explicit geographical distribution limitation excluding
those countries, so that distribution is permitted only in or among
countries not thus excluded. In such case, this License incorporates
the limitation as if written in the body of this License.
9. The Free Software Foundation may publish revised and/or new versions
of the General Public License from time to time. Such new versions will
be similar in spirit to the present version, but may differ in detail to
address new problems or concerns.
Each version is given a distinguishing version number. If the Program
specifies a version number of this License which applies to it and "any
later version", you have the option of following the terms and conditions
either of that version or of any later version published by the Free
Software Foundation. If the Program does not specify a version number of
this License, you may choose any version ever published by the Free Software
Foundation.
10. If you wish to incorporate parts of the Program into other free
programs whose distribution conditions are different, write to the author
to ask for permission. For software which is copyrighted by the Free
Software Foundation, write to the Free Software Foundation; we sometimes
make exceptions for this. Our decision will be guided by the two goals
of preserving the free status of all derivatives of our free software and
of promoting the sharing and reuse of software generally.
NO WARRANTY
11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
REPAIR OR CORRECTION.
12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
POSSIBILITY OF SUCH DAMAGES.
END OF TERMS AND CONDITIONS
How to Apply These Terms to Your New Programs
If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these terms.
To do so, attach the following notices to the program. It is safest
to attach them to the start of each source file to most effectively
convey the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is found.
<one line to give the program's name and a brief idea of what it does.>
Copyright (C) <year> <name of author>
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License along
with this program; if not, write to the Free Software Foundation, Inc.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
Also add information on how to contact you by electronic and paper mail.
If the program is interactive, make it output a short notice like this
when it starts in an interactive mode:
Gnomovision version 69, Copyright (C) year name of author
Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
This is free software, and you are welcome to redistribute it
under certain conditions; type `show c' for details.
The hypothetical commands `show w' and `show c' should show the appropriate
parts of the General Public License. Of course, the commands you use may
be called something other than `show w' and `show c'; they could even be
mouse-clicks or menu items--whatever suits your program.
You should also get your employer (if you work as a programmer) or your
school, if any, to sign a "copyright disclaimer" for the program, if
necessary. Here is a sample; alter the names:
Yoyodyne, Inc., hereby disclaims all copyright interest in the program
`Gnomovision' (which makes passes at compilers) written by James Hacker.
<signature of Ty Coon>, 1 April 1989
Ty Coon, President of Vice
This General Public License does not permit incorporating your program into
proprietary programs. If your program is a subroutine library, you may
consider it more useful to permit linking proprietary applications with the
library. If this is what you want to do, use the GNU Lesser General
Public License instead of this License.

38
HACKING.BUILD.md Normal file
View file

@ -0,0 +1,38 @@
# Hacking on the build system
This list was previously maintained as [issue #242](https://github.com/majn/telegram-purple/issues/242), until we realized that this needs proper version-control. (Duh!)
## Exhaustive list of requirements on the build system:
1. `commit.h` must change whenever it disagrees with the current git commit
1. `commit.h` must not change whenever it agrees with the current git commit
1. Must call `cd tgl && ./configure` with appropriate options whenever `tgl/Makefile` is missing, or notices that `./configure` was run. ("Too often" is acceptable as long as `make && make` isn't violated.)
1. Must call `make -C tgl` whenever this might have any effect. ("Too often" is acceptable as long as `make && make` isn't violated.)
1. Any changes due to `make -C tgl` must cause all necessary rebuilds in telegram-purple during the same invocation of make. ("Too often" is acceptable as long as `make && make` isn't violated.)
1. If `tgl/Makefile.in` is missing, explain that we need submodules, and stop.
1. `make -j12` must work fine
1. Must support out-of-CVS builds.
## While ensuring that:
- Must not `-include tgl/Makefile` as it doesn't really support that, and I'm not going to try and convince @vysheng to do that. Also, it's too fragile. You know how he ticks.
- `make && make` must not create any files in the second run (otherwise, `sudo make install` would become hairy)
- Compatibility with other makes
## Approach:
- `commit.h` is a regular file which depends on a .PHONY target `commit`. Building `commit.h` *only* touches `commit.h` if necessary and possible. (=> 1, 2, half of 8)
- Have a target `tgl/Makefile` which depends on `Makefile`. (=> 3)
- The central target `${PRPL_LIBNAME}` shall depend on the .PHONY `submade`, which depends on `tgl/Makefile`, and essentially executes `make -C tgl`. (=> 4, time constraint of 5)
- All objects of telegram-purple depend on `tgl/libs/libtgl.a`. Rationale: if `tgl/libs/libtgl.a` stays the same, then nothing in tgl changed. If `tgl/libs/libtgl.a` changes, then due to lots of black preprocessor magic within tgl, it can't be safely determined which, if any, objects of telegram-purple can be re-used. Also, if tgl got recompiled (~ 1 minute), then tgp can be recompiled, too (~ 5 seconds). (=> dependency constraint of 5)
- Let `tgl/Makefile` depend on `tgl/Makefile.in`, and put the warning into the rule for the latter. (=> 6)
- The above already implies a dependency DAG that is completely known to make; except at one point: let `tgl/libs/libtgl.a` depend on `submade`, without any own code. Now make ensure thread-safety on it's own. (=> 7)
- Bundle commit.h into the origtar (=> other half of 8)
## Side effects:
- Should be ultimately robust. Then again, that's what I thought about the last few attempts, and they didn't last long.
- This reduces the number of .PHONYs drastically, making it easier to read, and making it easier to prove that `make && make` doesn't change anything.
- Even though `submade` should trigger once and only once, this can handle multiple invocations just fine, too.
- All files dependent on `commit.h` need to be mentioned explicitly as dependents in the Makefile. This is ugly, but (as far as I can see) unavoidable. Thankfully, any errors here will get detected by automated testing.
- We currently use only one GNU make specific extension. See https://github.com/majn/telegram-purple/issues/137#issuecomment-167970054

20
HACKING.md Normal file
View file

@ -0,0 +1,20 @@
# Contributing
This is Open Source Software. We realized that we didn't pass the Patch Test
## What to contribute
Here's a few places to start:
- Report any bugs you find.
- No, seriously! Most of the bugs don't even get reported, or the reporter only writes "Doesn't work for me" and then vanishes.
- ["help wanted" issues](https://github.com/majn/telegram-purple/issues?utf8=%E2%9C%93&q=is%3Aopen+is%3Aissue+label%3A%22help+wanted%22+-label%3A%22in-pipeline%22), especially automated testing
- ["secret chat" issues](https://github.com/majn/telegram-purple/issues?utf8=%E2%9C%93&q=is%3Aopen+is%3Aissue+label%3A%22secret+chats%22+-label%3A%22in-pipeline%22+)
- Portability (especially endianness) of tgl (external project)
- [Issues of tgl](https://github.com/vysheng/tgl/issues) -- lots and lots of false or obsolete reports
- Slim down the size of the generated files in `tgl/auto`, as this currently dominates the build time. Yuk!
- Make sure that the libpurple-devs don't break libpurple any further.
## How to contribute
Write [an issue](https://github.com/majn/telegram-purple/issues/new), shoot us a mail (scrape the address from the git history), or contact us in dev chat (changing URL, see README for that).

View file

@ -1,41 +1,74 @@
srcdir=@srcdir@
# This file is part of telegram-purple
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA
#
# Copyright Matthias Jentsch, Vitaly Valtman, Christopher Althaus, Markus Endres 2014-2015
CFLAGS=@CFLAGS@ @PURPLE_CFLAGS@ @DEFS@ -Wall -Wextra -Wno-deprecated-declarations -Wno-unused-parameter -I${srcdir} -I. -fno-strict-aliasing -fPIC
LDFLAGS=@LDFLAGS@ @OPENSSL_LDFLAGS@ @PURPLE_LIBS@ @LIBS@ -lcrypto -rdynamic -ggdb
CPPFLAGS=@CPPFLAGS@ -DFLAGS
COMPILE_FLAGS=${CFLAGS} ${CPPFLAGS}
LINK_FLAGS=${LDFLAGS}
srcdir=@srcdir@
prefix=@prefix@
datarootdir=@datarootdir@
localedir=@localedir@
gettext_package=@GETTEXT_PACKAGE@
CFLAGS=@CFLAGS@ @PURPLE_CFLAGS@ @DEFS@ -DENABLE_NLS -DLOCALEDIR='"$(localedir)"' -Wall -Wextra -Wno-deprecated-declarations -Wno-unused-parameter -I${srcdir} -I. -fno-strict-aliasing -fPIC -D_FORTIFY_SOURCE=2
LDFLAGS=@LDFLAGS@ @OPENSSL_LIBS@ @PURPLE_LIBS@ @LIBS@ -rdynamic -ggdb
DIR_PERM=0755
FILE_PERM=0644
CC=@CC@
PKG_CONFIG=@PKG_CONFIG@
MSGFMT_PATH=@MSGFMT_PATH@
# Check if -fstack-protector-strong is supported before enabling it
SPUNSUPPORTED = $(shell $(CC) -fstack-protector-strong 2>&1 | grep -c 'stack-protector-strong')
ifeq "$(SPUNSUPPORTED)" "0"
CFLAGS += -fstack-protector-strong
endif
DEP=dep
AUTO=auto
EXE=bin
OBJ=objs
LIB=libs
DIR_LIST=${DEP} ${AUTO} ${EXE} ${OBJ} ${LIB} ${DEP}/auto ${OBJ}/auto ${DEP}/lodepng ${OBJ}/lodepng
DIR_LIST=${DEP} ${EXE} ${OBJ}
PLUGIN_OBJECTS=${OBJ}/tgp-net.o ${OBJ}/tgp-timers.o ${OBJ}/msglog.o ${OBJ}/telegram-base.o ${OBJ}/telegram-purple.o ${OBJ}/tgp-2prpl.o ${OBJ}/tgp-structs.o ${OBJ}/tgp-utils.o ${OBJ}/tgp-chat.o ${OBJ}/tgp-ft.o ${OBJ}/tgp-msg.o ${OBJ}/lodepng/lodepng.o
PLUGIN_OBJECTS=${OBJ}/tgp-net.o ${OBJ}/tgp-timers.o ${OBJ}/msglog.o ${OBJ}/telegram-base.o ${OBJ}/telegram-purple.o ${OBJ}/tgp-2prpl.o ${OBJ}/tgp-structs.o ${OBJ}/tgp-utils.o ${OBJ}/tgp-chat.o ${OBJ}/tgp-ft.o ${OBJ}/tgp-msg.o ${OBJ}/tgp-request.o ${OBJ}/tgp-blist.o ${OBJ}/tgp-info.o
ALL_OBJS=${PLUGIN_OBJECTS}
ifdef MSGFMT_PATH
LOCALES=$(shell cat po/LINGUAS)
LOCALE_MOS=$(addprefix po/,$(addsuffix .mo,$(LOCALES)))
endif
.SUFFIXES:
.SUFFIXES: .c .h .o
PRPL_NAME=telegram-purple.so
PRPL_LIBNAME=${EXE}/${PRPL_NAME}
all: ${PRPL_LIBNAME}
all: ${PRPL_LIBNAME} $(LOCALE_MOS)
PLUGIN_DIR_PURPLE=$(shell pkg-config --variable=plugindir purple)
DATA_ROOT_DIR_PURPLE=$(shell pkg-config --variable=datarootdir purple)
PLUGIN_DIR_PURPLE=$(shell ${PKG_CONFIG} --variable=plugindir purple)
DATA_ROOT_DIR_PURPLE=$(shell ${PKG_CONFIG} --variable=datarootdir purple)
CRYPTO_FLAG=@CRYPTO_FLAG@
include ${srcdir}/Makefile.tl-parser
include ${srcdir}/Makefile.tgl
### == 'Magic' targets and infrastructure. == ###
# Here be dragons! See https://github.com/majn/telegram-purple/issues/242
# For the full list of requirements, goals, and rationale.
.PHONY: create_dirs
create_dirs: ${DIR_LIST}
create_dirs_and_headers: ${DIR_LIST} ${AUTO}/auto-skip.h ${AUTO}/auto-fetch.h ${AUTO}/auto-store.h ${AUTO}/auto-types.h
${DIR_LIST}:
@test -d $@ || mkdir -p $@
@ -44,48 +77,119 @@ DEPENDENCE=$(subst ${OBJ}/,${DEP}/,$(patsubst %.o,%.d,${ALL_OBJS}))
DEPENDENCE_LIST=${DEPENDENCE}
-include ${DEPENDENCE_LIST}
tgl/Makefile.in:
@echo "tgl/Makefile.in not found. Maybe you need to 'git submodule update --init --recursive' ?" && exit 1
${PLUGIN_OBJECTS}: ${OBJ}/%.o: ${srcdir}/%.c | create_dirs_and_headers
echo $@ && ${CC} ${CFLAGS} ${CPPFLAGS} -I ${srcdir}/tgl -I ${srcdir}/lodepng -c -MP -MD -MF ${DEP}/$*.d -MQ ${OBJ}/$*.o -o $@ $<
tgl/Makefile: tgl/Makefile.in Makefile
cd tgl && ./configure -q ${CRYPTO_FLAG} --disable-extf CFLAGS="@CFLAGS@" LDFLAGS="@LDFLAGS@"
${PRPL_LIBNAME}: ${PLUGIN_OBJECTS} ${LIB}/libtgl.a | create_dirs
tgl/libs/libtgl.a: tgl/Makefile
+${MAKE} -C tgl libs/libtgl.a
.PHONY: commit
commit:
# The *commands* for commit.h shall always be executed, but the
# *file* commit.h should only be considered to have changed in rare cases.
GIT_COMMIT=$(shell git rev-parse HEAD | cut -c1-10)
commit.h: commit
@./commit.h.gen
# Ugly, but necessary, because otherwise commit.h would not get generated:
test/loadtest.c: commit.h
# Ugly, but necessary, because otherwise commit.h would not get generated:
telegram-purple.c: commit.h
### == 'Normal' build. == ###
${PLUGIN_OBJECTS}: ${OBJ}/%.o: ${srcdir}/%.c tgl/libs/libtgl.a | create_dirs
echo $@ && ${CC} ${CFLAGS} ${CPPFLAGS} -I ${srcdir}/tgl -c -MP -MD -MF ${DEP}/$*.d -MQ ${OBJ}/$*.o -o $@ $<
po/%.mo: po/%.po
${MSGFMT_PATH} -cf -o $@ $< >/dev/null 2>&1
${PRPL_LIBNAME}: ${PLUGIN_OBJECTS} tgl/libs/libtgl.a | create_dirs
${CC} -shared -o $@ $^ ${LDFLAGS}
### == noicon_{,un}install targets. Use only if you know that you don't need icons. Note that pidgin uses those files. == ###
.PHONY: plugin
plugin: $(PRPL_LIBNAME)
.PHONY: strip
strip: $(PRPL_LIBNAME)
$(STRIP) --strip-unneeded $(PRPL_LIBNAME)
.PHONY: install
install: $(PRPL_LIBNAME)
.PHONY: noicon_install
noicon_install: $(PRPL_LIBNAME) $(LOCALE_MOS)
mkdir -m $(DIR_PERM) -p $(DESTDIR)$(PLUGIN_DIR_PURPLE)
install -m $(FILE_PERM) $(PRPL_LIBNAME) $(DESTDIR)$(PLUGIN_DIR_PURPLE)/$(PRPL_NAME)
mkdir -m $(DIR_PERM) -p $(DESTDIR)/etc/telegram-purple
install -m $(FILE_PERM) tg-server.pub $(DESTDIR)/etc/telegram-purple/server.pub
install -m $(FILE_PERM) tg-server.tglpub $(DESTDIR)/etc/telegram-purple/server.tglpub
# Assume that the user does not use AppStream if she doesn't want icons
@for lang in $(LOCALES); do \
mkdir -p $(DESTDIR)$(localedir)/$$lang/LC_MESSAGES; \
echo "installing po/$$lang.mo to $(DESTDIR)$(localedir)/$$lang/LC_MESSAGES/$(gettext_package).mo"; \
install -m $(FILE_PERM) po/$$lang.mo $(DESTDIR)$(localedir)/$$lang/LC_MESSAGES/$(gettext_package).mo; \
done
.PHONY: noicon_uninstall
noicon_uninstall:
rm -f $(DESTDIR)$(PLUGIN_DIR_PURPLE)/$(PRPL_NAME)
rm -f $(DESTDIR)/etc/telegram-purple/server.pub # TODO: Remove this in later versions
rm -f $(DESTDIR)/etc/telegram-purple/server.tglpub
# TODO: Delete all installed .mo's, no matter what LINGUAS says.
@for lang in $(LOCALES); do \
echo "removing $(localedir)/$$lang/LC_MESSAGES/$(gettext_package).mo"; \
rm -f $(localedir)/$$lang/LC_MESSAGES/$(gettext_package).mo; \
done
### == Main {,un}install targets. This should satisfy most needs. == ###
.PHONY: install
install: noicon_install
mkdir -m $(DIR_PERM) -p $(DESTDIR)$(DATA_ROOT_DIR_PURPLE)/pixmaps/pidgin/protocols/16
install -m $(FILE_PERM) imgs/telegram16.png $(DESTDIR)$(DATA_ROOT_DIR_PURPLE)/pixmaps/pidgin/protocols/16/telegram.png
mkdir -m $(DIR_PERM) -p $(DESTDIR)$(DATA_ROOT_DIR_PURPLE)/pixmaps/pidgin/protocols/22
install -m $(FILE_PERM) imgs/telegram22.png $(DESTDIR)$(DATA_ROOT_DIR_PURPLE)/pixmaps/pidgin/protocols/22/telegram.png
mkdir -m $(DIR_PERM) -p $(DESTDIR)$(DATA_ROOT_DIR_PURPLE)/pixmaps/pidgin/protocols/48
install -m $(FILE_PERM) imgs/telegram48.png $(DESTDIR)$(DATA_ROOT_DIR_PURPLE)/pixmaps/pidgin/protocols/48/telegram.png
.PHONY: local_install
local_install:
install $(PRPL_LIBNAME) ${HOME}/.purple/plugins/$(PRPL_NAME)
mkdir -m $(DIR_PERM) -p $(DESTDIR)$(datarootdir)/appdata
install -m $(FILE_PERM) AppStream/telegram-purple.metainfo.xml $(DESTDIR)$(datarootdir)/appdata/telegram-purple.metainfo.xml
.PHONY: uninstall
uninstall:
rm -f $(DESTDIR)$(PLUGIN_DIR_PURPLE)/$(PRPL_NAME)
rm -f $(DESTDIR)/etc/telegram-purple/server.pub
uninstall: noicon_uninstall
rm -f $(DESTDIR)$(DATA_ROOT_DIR_PURPLE)/pixmaps/pidgin/protocols/16/telegram.png
rm -f $(DESTDIR)$(DATA_ROOT_DIR_PURPLE)/pixmaps/pidgin/protocols/22/telegram.png
rm -f $(DESTDIR)$(DATA_ROOT_DIR_PURPLE)/pixmaps/pidgin/protocols/48/telegram.png
rm -f ${HOME}/.purple/plugins/$(PRPL_NAME)
rm -f $(DESTDIR)$(datarootdir)/appdata/telegram-purple.metainfo.xml
### == The local_{,un}install targets, in case you're not root. == ###
.PHONY: local_install
local_install:
mkdir -m $(DIR_PERM) -p $(DESTDIR)$(HOME)/.purple/plugins
install -m $(FILE_PERM) $(PRPL_LIBNAME) $(DESTDIR)$(HOME)/.purple/plugins/$(PRPL_NAME)
# See telegram-base.c, function get_user_pk_path for justification:
mkdir -m $(DIR_PERM) -p $(DESTDIR)$(HOME)/.purple/telegram-purple
install -m $(FILE_PERM) tg-server.tglpub $(DESTDIR)$(HOME)/.purple/telegram-purple/server.tglpub
.PHONY: local_uninstall
local_uninstall:
rm -f $(DESTDIR)$(HOME)/.purple/plugins/$(PRPL_NAME)
rm -f $(DESTDIR)$(HOME)/.purple/telegram-purple/server.tglpub
### == Handling and maintenance. Subject to rapid change, shouldn't be used in scripts. == ###
.PHONY: plugin
plugin: $(PRPL_LIBNAME)
.PHONY: strip
strip: $(PRPL_LIBNAME)
$(STRIP) --strip-unneeded $(PRPL_LIBNAME)
.PHONY: build-nsi
build-nsi: telegram-purple.nsi.awk telegram-purple.nsi.awk-in
awk -f telegram-purple.nsi.awk telegram-purple.nsi.awk-in > telegram-purple.nsi
.PHONY: run
run:
@ -95,6 +199,36 @@ run:
debug: install
ddd pidgin
clean:
rm -rf ${DIR_LIST} *.so *.a *.o telegram config.log config.status $(PRPL_C_OBJS) $(PRPL_LIBNAME) > /dev/null || echo "all clean"
DIST_ERR_MSG="Working directory is not git clean.\
Run 'git status' to show what files are causing this.\
Please note that 'make dist' packages the state in git, not the one on your disk."
SUBMOD_ERR_MSG="Couldn't find tgl/tl-parser/tl-parser.c\
Are all submodules properly initialized and updated?"
# Not PHONY
.git:
@echo "Not in a git folder. Features that require git are disabled."; exit 1
.PHONY: check-clean
check-clean: .git
@test "x" = x"`git status --porcelain`" || (echo ${DIST_ERR_MSG}; exit 1)
@test -r tgl/tl-parser/.git || (echo ${SUBMOD_ERR_MSG}; exit 1)
# Feel free to remove the "check-clean" dependency if you know what you're doing.
.PHONY: dist
dist: check-clean commit.h .git create_dirs
./gen-origtar
### == Cleaning in various flavors == ###
.PHONY: clean-here
clean-here:
rm -rf ${DIR_LIST} $(PRPL_LIBNAME) po/*.mo autom4te.cache AppStream/po/*.mo
-include test/Makefile
.PHONY: clean
clean: clean-here clean-test tgl/Makefile
+${MAKE} -C tgl clean

173
Makefile.mingw Normal file
View file

@ -0,0 +1,173 @@
# This file is part of telegram-purple
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA
#
# Copyright Matthias Jentsch, Vitaly Valtman, Christopher Althaus, Markus Endres, Eion Robb 2014-2015
srcdir=.
gettext_package=telegram-purple
PURPLE_VERSION = 2.10.11
PIDGIN_TREE_TOP := ../pidgin-$(PURPLE_VERSION)
WIN32_DEV_TOP = $(PIDGIN_TREE_TOP)/../win32-dev
MAKENSIS ?= "$(PROGRAMFILES)/NSIS/makensis.exe"
PLUGIN_VERSION ?= 1.2.2
GMSGFMT ?= $(WIN32_DEV_TOP)/gettext-0.17/bin/msgfmt
CFLAGS=-I$(WIN32_DEV_TOP)/libgcrypt-1.6.3/include -I$(WIN32_DEV_TOP)/libgpg-error-1.12-2/include -I$(WIN32_DEV_TOP)/glib-2.28.8/include -I$(WIN32_DEV_TOP)/glib-2.28.8/include/glib-2.0 -I$(WIN32_DEV_TOP)/glib-2.28.8/lib/glib-2.0/include -I$(PIDGIN_TREE_TOP)/libpurple -I$(WIN32_DEV_TOP)/libwebp-0.4.3-1/include -DHAVE_CONFIG_H -DENABLE_NLS -DPACKAGE_VERSION='"$(PLUGIN_VERSION)"' -Wall -Wextra -Werror -Wno-deprecated-declarations -Wno-unused-parameter -I${srcdir} -I. -fno-strict-aliasing
LDFLAGS=-L$(WIN32_DEV_TOP)/libgcrypt-1.6.3/lib -L$(WIN32_DEV_TOP)/libwebp-0.4.3-1/lib -L$(WIN32_DEV_TOP)/gettext-0.18/bin -L$(PIDGIN_TREE_TOP)/libpurple -L$(WIN32_DEV_TOP)/glib-2.28.8/lib -lpurple -lintl -lglib-2.0 -lwebp -lz -lgcrypt -Wl,--export-all-symbols -ggdb -lws2_32 -static-libgcc
DIR_PERM=0755
FILE_PERM=0644
CC = $(WIN32_DEV_TOP)/mingw/bin/gcc
PKG_CONFIG=
DEP=dep
EXE=bin
OBJ=objs
LIB=libs
DIR_LIST=${DEP} ${EXE} ${OBJ} ${LIB} ${DEP}/lodepng ${OBJ}/lodepng
PLUGIN_OBJECTS=${OBJ}/tgp-net.o ${OBJ}/tgp-timers.o ${OBJ}/msglog.o ${OBJ}/telegram-base.o ${OBJ}/telegram-purple.o ${OBJ}/tgp-2prpl.o ${OBJ}/tgp-structs.o ${OBJ}/tgp-utils.o ${OBJ}/tgp-chat.o ${OBJ}/tgp-ft.o ${OBJ}/tgp-msg.o ${OBJ}/tgp-request.o ${OBJ}/tgp-blist.o ${OBJ}/lodepng/lodepng.o
ALL_OBJS=${PLUGIN_OBJECTS} ${OBJ}/tgp-info.o
LOCALES=$(patsubst %.po, %.mo, $(wildcard po/*.po))
.SUFFIXES:
.SUFFIXES: .c .h .o
PRPL_NAME=libtelegram.dll
PRPL_LIBNAME=${EXE}/${PRPL_NAME}
all: ${PRPL_LIBNAME} ${LOCALES}
PLUGIN_DIR_PURPLE="$(PROGRAMFILES)/Pidgin/plugins"
DATA_ROOT_DIR_PURPLE="$(PROGRAMFILES)/Pidgin"
COPY_ICONS=yes
localedir=$(DATA_ROOT_DIR_PURPLE)/locale
create_dirs: ${DIR_LIST}
${DIR_LIST}:
@test -d $@ || mkdir -p $@
DEPENDENCE=$(subst ${OBJ}/,${DEP}/,$(patsubst %.o,%.d,${ALL_OBJS}))
DEPENDENCE_LIST=${DEPENDENCE}
-include ${DEPENDENCE_LIST}
# The dependency on tgl/libs/libtgl.a ensures that "make -C tgl" was called,
# and most importantly: It ensures that all automatic headers exist.
${PLUGIN_OBJECTS}: ${OBJ}/%.o: ${srcdir}/%.c ${LIB}/libtgl.a | create_dirs
echo $@ && ${CC} ${CFLAGS} ${CPPFLAGS} -I ${srcdir}/tgl -I ${srcdir}/lodepng -c -MP -MD -MF ${DEP}/$*.d -MQ ${OBJ}/$*.o -o $@ $<
tgl/Makefile.mingw: ${srcdir}/Makefile.tgl.mingw
cp $< $@
tgl/libs/libtgl.a: tgl/Makefile.mingw
+make -C tgl -f Makefile.mingw
tgl/config.h: ${srcdir}/config.h.tgl.mingw
cp $< $@
config.h: ${srcdir}/config.h.mingw
cp $< $@
po/%.mo: po/%.po
$(GMSGFMT) -cf -o $@ $<
${LIB}/libtgl.a: tgl/libs/libtgl.a | create_dirs
cp $< $@
${PRPL_LIBNAME}: ${PLUGIN_OBJECTS} ${LIB}/libtgl.a | create_dirs
${CC} -shared -o $@ $^ ${LDFLAGS}
.PHONY: plugin
plugin: $(PRPL_LIBNAME)
.PHONY: strip
strip: $(PRPL_LIBNAME)
$(STRIP) --strip-unneeded $(PRPL_LIBNAME)
.PHONY: install
install: $(PRPL_LIBNAME) $(LOCALES)
mkdir -m $(DIR_PERM) -p $(PLUGIN_DIR_PURPLE)
install -m $(FILE_PERM) $(PRPL_LIBNAME) $(PLUGIN_DIR_PURPLE)/$(PRPL_NAME)
install -m $(FILE_PERM) tg-server.tglpub $(DATA_ROOT_DIR_PURPLE)/server.tglpub
ifeq ($(COPY_ICONS),no)
@echo "Not copying icons due to configure-option --disable-icons."
@echo " If you're using Finch, Empathy, or Telepathy, then this is a good idea."
@echo " If you're using Pidgin, then this is a bad idea."
@echo " If you're using Adium, read the README.md: You're using the wrong build system!"
else
mkdir -m $(DIR_PERM) -p $(DATA_ROOT_DIR_PURPLE)/pixmaps/pidgin/protocols/16
install -m $(FILE_PERM) imgs/telegram16.png $(DATA_ROOT_DIR_PURPLE)/pixmaps/pidgin/protocols/16/telegram.png
mkdir -m $(DIR_PERM) -p $(DATA_ROOT_DIR_PURPLE)/pixmaps/pidgin/protocols/22
install -m $(FILE_PERM) imgs/telegram22.png $(DATA_ROOT_DIR_PURPLE)/pixmaps/pidgin/protocols/22/telegram.png
mkdir -m $(DIR_PERM) -p $(DATA_ROOT_DIR_PURPLE)/pixmaps/pidgin/protocols/48
install -m $(FILE_PERM) imgs/telegram48.png $(DATA_ROOT_DIR_PURPLE)/pixmaps/pidgin/protocols/48/telegram.png
endif
@for lang in $(shell cat po/LINGUAS); do \
mkdir -p $(localedir)/$$lang/LC_MESSAGES; \
echo "installing po/$$lang.mo to $(localedir)/$$lang/LC_MESSAGES/$(gettext_package).mo"; \
install -m $(FILE_PERM) po/$$lang.mo $(localedir)/$$lang/LC_MESSAGES/$(gettext_package).mo; \
done
.PHONY: uninstall
uninstall:
rm -f $(PLUGIN_DIR_PURPLE)/$(PRPL_NAME)
rm -f $(DATA_ROOT_DIR_PURPLE)/server.tglpub
rm -f $(DATA_ROOT_DIR_PURPLE)/pixmaps/pidgin/protocols/16/telegram.png
rm -f $(DATA_ROOT_DIR_PURPLE)/pixmaps/pidgin/protocols/22/telegram.png
rm -f $(DATA_ROOT_DIR_PURPLE)/pixmaps/pidgin/protocols/48/telegram.png
# TODO: Delete all installed .mo's, no matter what LINGUAS says.
@for lang in $(shell cat po/LINGUAS); do \
echo "removing $(localedir)/$$lang/LC_MESSAGES/$(gettext_package).mo"; \
rm -f $(localedir)/$$lang/LC_MESSAGES/$(gettext_package).mo; \
done
.PHONY: local_install
local_install:
mkdir -m $(DIR_PERM) -p $(DESTDIR)$(HOME)/.purple/plugins
install -m $(FILE_PERM) $(PRPL_LIBNAME) $(DESTDIR)$(HOME)/.purple/plugins/$(PRPL_NAME)
# See telegram-base.c, function get_user_pk_path for justification:
mkdir -m $(DIR_PERM) -p $(DESTDIR)$(HOME)/.purple/telegram-purple
install -m $(FILE_PERM) tg-server.tglpub $(DESTDIR)$(HOME)/.purple/telegram-purple/server.tglpub
.PHONY: local_uninstall
local_uninstall:
rm -f $(DESTDIR)$(HOME)/.purple/plugins/$(PRPL_NAME)
rm -f $(DESTDIR)$(HOME)/.purple/telegram-purple/server.tglpub
.PHONY: run
run:
pidgin -d | grep 'telegram\|plugin\|proxy'
.PHONY: debug
debug: install
ddd pidgin
.PHONY: clean-here
clean-here:
rm -rf ${DIR_LIST} $(PRPL_C_OBJS) $(PRPL_LIBNAME) po/*.mo
.PHONY: clean
clean: clean-here tgl/Makefile.mingw
+make -C tgl -f Makefile.mingw clean
.PHONY: installer
installer: telegram-purple.nsi $(PRPL_LIBNAME) $(LOCALES)
$(MAKENSIS) -DPLUGIN_VERSION="$(PLUGIN_VERSION)" -DPRPL_NAME="$(PRPL_NAME)" -DWIN32_DEV_TOP="$(WIN32_DEV_TOP)" telegram-purple.nsi

View file

@ -1,54 +0,0 @@
TGL_OBJECTS=${OBJ}/mtproto-common.o ${OBJ}/mtproto-client.o ${OBJ}/queries.o ${OBJ}/structures.o ${OBJ}/binlog.o ${OBJ}/tgl.o ${OBJ}/updates.o ${OBJ}/tg-mime-types.o ${OBJ}/mtproto-utils.o
TGL_OBJECTS_AUTO=${OBJ}/auto/auto-skip.o ${OBJ}/auto/auto-fetch.o ${OBJ}/auto/auto-store.o ${OBJ}/auto/auto-autocomplete.o ${OBJ}/auto/auto-types.o ${OBJ}/auto/auto-fetch-ds.o ${OBJ}/auto/auto-free-ds.o ${OBJ}/auto/auto-store-ds.o ${OBJ}/auto/auto-print-ds.o
TLD_OBJECTS=${OBJ}/dump-tl-file.o
GENERATE_OBJECTS=${OBJ}/generate.o
TGL_COMMON_OBJECTS=${OBJ}/tools.o
TGL_OBJ_C=${GENERATE_OBJECTS} ${TGL_COMMON_OBJECTS} ${TGL_OBJECTS} ${TLD_OBJECTS}
.SUFFIXES:
.SUFFIXES: .c .h .o
dump-tl: ${EXE}/dump-tl-file
${TGL_OBJECTS}: ${AUTO}/constants.h ${AUTO}/auto-skip.h ${AUTO}/auto-fetch.h ${AUTO}/auto-store.h ${AUTO}/auto-autocomplete.h ${AUTO}/auto-types.h ${AUTO}/auto-fetch-ds.h ${AUTO}/auto-free-ds.h ${AUTO}/auto-store-ds.h ${AUTO}/auto-print-ds.h
${TGL_OBJ_C}: ${OBJ}/%.o: ${srcdir}/tgl/%.c | create_dirs
${CC} ${INCLUDE} ${COMPILE_FLAGS} -iquote ${srcdir}/tgl -c -MP -MD -MF ${DEP}/$*.d -MQ ${OBJ}/$*.o -o $@ $<
${TGL_OBJECTS_AUTO}: ${OBJ}/auto/%.o: ${AUTO}/%.c | create_dirs
${CC} ${INCLUDE} ${COMPILE_FLAGS} -iquote ${srcdir}/tgl -c -MP -MD -MF ${DEP}/$*.d -MQ ${OBJ}/$*.o -o $@ $<
#${OBJ}/auto/auto.o: ${AUTO}/auto.c
# ${CC} ${INCLUDE} ${COMPILE_FLAGS} -iquote ${srcdir}/tgl -c -MP -MD -MF ${DEP}/auto/auto.d -MQ ${OBJ}/auto/auto.o -o $@ $<
${LIB}/libtgl.a: ${TGL_OBJECTS} ${TGL_COMMON_OBJECTS} ${TGL_OBJECTS_AUTO}
rm -f $@ && ar ruv $@ $^
${EXE}/generate: ${GENERATE_OBJECTS} ${TGL_COMMON_OBJECTS}
${CC} ${GENERATE_OBJECTS} ${TGL_COMMON_OBJECTS} ${LINK_FLAGS} -o $@
${AUTO}/scheme.tlo: ${AUTO}/scheme.tl ${EXE}/tl-parser
${EXE}/tl-parser -e $@ ${AUTO}/scheme.tl
${AUTO}/scheme.tl: ${srcdir}/tgl/scheme.tl ${srcdir}/tgl/encrypted_scheme.tl ${srcdir}/tgl/binlog.tl ${srcdir}/tgl/append.tl ${srcdir}/tgl/mtproto.tl | ${AUTO}
cat $^ > $@
${AUTO}/scheme2.tl: ${AUTO}/scheme.tl ${EXE}/tl-parser
${EXE}/tl-parser -E ${AUTO}/scheme.tl 2> $@ || ( cat $@ && rm $@ && false )
${AUTO}/auto-%.c: ${AUTO}/scheme.tlo ${EXE}/generate auto/constants.h ${AUTO}/auto-%.h | create_dirs_and_headers
${EXE}/generate -g $(patsubst ${AUTO}/auto-%.c,%,$@) ${AUTO}/scheme.tlo > $@ || rm $@
${AUTO}/auto-%.h: ${AUTO}/scheme.tlo ${EXE}/generate
${EXE}/generate -g $(patsubst ${AUTO}/auto-%.h,%-header,$@) ${AUTO}/scheme.tlo > $@ || rm $@
${AUTO}/constants.h: ${AUTO}/scheme2.tl ${srcdir}/tgl/gen_constants_h.awk
awk -f ${srcdir}/tgl/gen_constants_h.awk < $< > $@
${EXE}/dump-tl-file: ${OBJ}/auto/auto.o ${TLD_OBJECTS}
${CC} ${OBJ}/auto/auto.o ${TLD_OBJECTS} ${LINK_FLAGS} -o $@

116
Makefile.tgl.mingw Normal file
View file

@ -0,0 +1,116 @@
# This file is part of telegram-purple
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA
#
# Copyright Matthias Jentsch, Vitaly Valtman, Christopher Althaus, Markus Endres, Eion Robb 2014-2015
srcdir=.
WIN32_DEV_TOP ?= ../../win32-dev
CFLAGS=-I$(WIN32_DEV_TOP)/libgcrypt-1.6.3/include -I$(WIN32_DEV_TOP)/libgpg-error-1.12-2/include -I$(WIN32_DEV_TOP)/glib-2.28.8/include -DHAVE_CONFIG_H
LDFLAGS=-L$(WIN32_DEV_TOP)/libgcrypt-1.6.3/lib -I$(WIN32_DEV_TOP)/libgpg-error-1.12-2/lib -L$(WIN32_DEV_TOP)/libwebp-0.4.3-1/lib -L$(WIN32_DEV_TOP)/glib-2.28.8/lib -lwebp -lz -lgcrypt -Wl,--export-all-symbols -ggdb
CPPFLAGS=
DEFS=-DHAVE_CONFIG_H
COMPILE_FLAGS=${CFLAGS} ${CPFLAGS} ${CPPFLAGS} ${DEFS} -Wall -Wextra -Werror -Wno-deprecated-declarations -fno-strict-aliasing -fno-omit-frame-pointer -ggdb -Wno-unused-parameter
EXTRA_LIBS=-lz -lgcrypt
LOCAL_LDFLAGS=-ggdb ${EXTRA_LIBS}
LINK_FLAGS=${LDFLAGS} ${LOCAL_LDFLAGS}
DEP=dep
AUTO=auto
OBJ=objs
LIB=libs
EXE=bin
DIR_LIST=${DEP} ${DEP}/crypto ${AUTO} ${EXE} ${OBJ} ${OBJ}/crypto ${LIB} ${DEP}/auto ${OBJ}/auto
LIB_LIST=${LIB}/libtgl.a ${LIB}/libtgl.dll
TGL_OBJECTS=${OBJ}/mtproto-common.o ${OBJ}/mtproto-client.o ${OBJ}/mtproto-key.o ${OBJ}/queries.o ${OBJ}/structures.o ${OBJ}/binlog.o ${OBJ}/tgl.o ${OBJ}/updates.o ${OBJ}/tg-mime-types.o ${OBJ}/mtproto-utils.o ${OBJ}/crypto/bn_openssl.o ${OBJ}/crypto/bn_altern.o ${OBJ}/crypto/rsa_pem_openssl.o ${OBJ}/crypto/rsa_pem_altern.o ${OBJ}/crypto/md5_openssl.o ${OBJ}/crypto/md5_altern.o ${OBJ}/crypto/sha_openssl.o ${OBJ}/crypto/sha_altern.o ${OBJ}/crypto/aes_openssl.o ${OBJ}/crypto/aes_altern.o
TGL_OBJECTS_AUTO=${OBJ}/auto/auto-skip.o ${OBJ}/auto/auto-fetch.o ${OBJ}/auto/auto-store.o ${OBJ}/auto/auto-autocomplete.o ${OBJ}/auto/auto-types.o ${OBJ}/auto/auto-fetch-ds.o ${OBJ}/auto/auto-free-ds.o ${OBJ}/auto/auto-store-ds.o ${OBJ}/auto/auto-print-ds.o
TLD_OBJECTS=${OBJ}/dump-tl-file.o
GENERATE_OBJECTS=${OBJ}/generate.o
COMMON_OBJECTS=${OBJ}/tools.o ${OBJ}/crypto/rand_openssl.o ${OBJ}/crypto/rand_altern.o ${OBJ}/crypto/err_openssl.o ${OBJ}/crypto/err_altern.o
OBJ_C=${GENERATE_OBJECTS} ${COMMON_OBJECTS} ${TGL_OBJECTS} ${TLD_OBJECTS}
DEPENDENCE=$(subst ${OBJ}/,${DEP}/,$(patsubst %.o,%.d,${OBJ_C}))
DEPENDENCE_LIST=${DEPENDENCE}
INCLUDE=-I. -I${srcdir}
CC=$(WIN32_DEV_TOP)/mingw/bin/gcc
.SUFFIXES:
.SUFFIXES: .c .h .o
all: ${LIB_LIST}
create_dirs_and_headers: ${DIR_LIST} ${AUTO}/auto-skip.h ${AUTO}/auto-fetch.h ${AUTO}/auto-store.h ${AUTO}/auto-autocomplete.h ${AUTO}/auto-types.h
create_dirs: ${DIR_LIST}
dump-tl: ${EXE}/dump-tl-file
#include ${srcdir}/Makefile.tl-parser
${DIR_LIST}:
@test -d $@ || mkdir -p $@
-include ${DEPENDENCE_LIST}
${TGL_OBJECTS}: ${AUTO}/constants.h ${AUTO}/auto-skip.h ${AUTO}/auto-fetch.h ${AUTO}/auto-store.h ${AUTO}/auto-autocomplete.h ${AUTO}/auto-types.h ${AUTO}/auto-fetch-ds.h ${AUTO}/auto-free-ds.h ${AUTO}/auto-store-ds.h ${AUTO}/auto-print-ds.h
${OBJ_C}: ${OBJ}/%.o: ${srcdir}/%.c | create_dirs
${CC} ${INCLUDE} ${COMPILE_FLAGS} -c -MP -MD -MF ${DEP}/$*.d -MQ ${OBJ}/$*.o -o $@ $<
${TGL_OBJECTS_AUTO}: ${OBJ}/auto/%.o: ${AUTO}/%.c | create_dirs
${CC} ${INCLUDE} ${COMPILE_FLAGS} -iquote ${srcdir}/tgl -c -MP -MD -MF ${DEP}/$*.d -MQ ${OBJ}/$*.o -o $@ $<
${LIB}/libtgl.a: ${TGL_OBJECTS} ${COMMON_OBJECTS} ${TGL_OBJECTS_AUTO}
rm -f $@ && ar ruv $@ $^
${LIB}/libtgl.dll: ${TGL_OBJECTS} ${COMMON_OBJECTS} ${TGL_OBJECTS_AUTO}
${CC} -shared -o $@ $^ ${LINK_FLAGS}
${EXE}/generate: ${GENERATE_OBJECTS} ${COMMON_OBJECTS}
${CC} ${GENERATE_OBJECTS} ${COMMON_OBJECTS} ${LINK_FLAGS} -o $@
${AUTO}/scheme.tlo: ${AUTO}/scheme.tl ${EXE}/tl-parser
${EXE}/tl-parser -e $@ ${AUTO}/scheme.tl
${AUTO}/scheme.tl: ${srcdir}/scheme.tl ${srcdir}/encrypted_scheme.tl ${srcdir}/binlog.tl ${srcdir}/mtproto.tl ${srcdir}/append.tl | ${AUTO}
cat $^ > $@
${AUTO}/scheme2.tl: ${AUTO}/scheme.tl ${EXE}/tl-parser
${EXE}/tl-parser -E ${AUTO}/scheme.tl 2> $@ || ( cat $@ && rm $@ && false )
${AUTO}/auto.c: ${AUTO}/scheme.tlo ${EXE}/generate
${EXE}/generate ${AUTO}/scheme.tlo > $@
${AUTO}/auto-%.c: ${AUTO}/scheme.tlo ${EXE}/generate auto/constants.h ${AUTO}/auto-%.h | create_dirs_and_headers
${EXE}/generate -g $(patsubst ${AUTO}/auto-%.c,%,$@) ${AUTO}/scheme.tlo > $@ || ( rm $@ && false )
${AUTO}/auto-%.h: ${AUTO}/scheme.tlo ${EXE}/generate
${EXE}/generate -g $(patsubst ${AUTO}/auto-%.h,%-header,$@) ${AUTO}/scheme.tlo > $@ || ( rm $@ && false )
${AUTO}/constants.h: ${AUTO}/scheme2.tl ${srcdir}/gen_constants_h.awk
awk -f ${srcdir}/gen_constants_h.awk < $< > $@
${EXE}/dump-tl-file: ${OBJ}/auto/auto.o ${TLD_OBJECTS}
${CC} ${OBJ}/auto/auto.o ${TLD_OBJECTS} ${LINK_FLAGS} -o $@
clean:
rm -rf ${DIR_LIST}

View file

@ -1,9 +0,0 @@
TL_PARSER_OBJECTS=${OBJ}/tl-parser.o ${OBJ}/tlc.o ${OBJ}/crc32.o
ALL_OBJS+=${TL_PARSER_OBJS}
${TL_PARSER_OBJECTS}: ${OBJ}/%.o: ${srcdir}/tgl/tl-parser/%.c | create_dirs
${CC} ${INCLUDE} ${COMPILE_FLAGS} -iquote ${srcdir}/tgl/tl-parser -c -MP -MD -MF ${DEP}/$*.d -MQ ${OBJ}/$*.o -o $@ $<
${EXE}/tl-parser: ${TL_PARSER_OBJECTS}
${CC} $^ ${LINK_FLAGS} -o $@

280
README.md
View file

@ -1,25 +1,56 @@
Telegram-Purple (Beta)
===============
Telegram-Purple Unofficial (Beta)
=================================
Telegram-purple is a Libpurple plugin that adds support for the Telegram messenger.
Telegram-purple is a Libpurple protocol plugin that adds support for the Telegram messenger.
I keep getting many questions about this plugin in my E-mail, so I've created a [telegram group chat](https://goo.gl/VudXys) for
telegram-purple related discussions or questions.
Installation
------------
If you are just interested in using the plugin you probably want to use one of the following binary distributions. Please note that I do not control most of those package sources and the version may lag behind.
If your platform is not supported or you want to contribute by testing or development, scroll down to "Building form Source".
Beta 2
------
#### OSX (Adium)
- update to libtgl 2
- support two-factor authentication
- improve sticker support
- add option to control message read recipes
- many bugfixes
1. Download and execute the [Telegram-Adium bundle] (https://github.com/majn/telegram-purple/releases/download/v1.3.0/telegram-adium-1.3.0.AdiumLibpurplePlugin.zip)
2. Restart Adium
#### Windows
Eion Robb provides a binary for Windows users:
1. Download and execute the setup from http://eion.robbmob.com/telegram/
2. Restart Pidgin
#### Fedora (22, 23)
The package is available in the Fedora 22 and 23 testing repositories:
dnf config-manager --set-enabled updates-testing
dnf install purple-telegram
If you migrate from an older version, the Telegram authentication files have been moved to .purple/telegram-purple. If you want to keep your old secret chats, please copy it manually from ~/.telegram-purple, otherwise you will be prompted for a new SMS code.
#### Arch Linux (AUR)
Build
-----
https://aur.archlinux.org/packages/telegram-purple/
Below, you will find instructions on how to build the libpurple protocol plugin. If you just want to use the plugin in Adium, [download precompiled packages here.](https://github.com/majn/telegram-purple/releases).
#### Debian
At the time of writing, the package hasn't been accepted yet.
Please first check if it's already available to you: `sudo apt-get install telegram-purple`
If this doesn't work because the package doesn't exist (yet), please build it from source.
Building From Source
--------------------
Below, you will find the instructions for how to build the libpurple protocol plugin from source.
#### 1. Clone
@ -30,26 +61,50 @@ This repository has submodules, so you need to clone recursively.
cd telegram-purple
#### 1b. Cloning if you're a packager
If you are unsure about whether you need this, then you are not a
packager and don't have any use for this.
If you need an "orig-tarball", it can be generated by `make dist`. Note
that this automatically generates an appropriate version number like
`1.2.4-58-g8e3cebf`. You can truncate the git suffix (`-g8e3cebf`). If
the `-58` part exists, it means that you're using a development
version, which is probably not what you want. If you still want to
package this, please leave the commit number (i.e., `58`) intact, as
this indicates that this version is in fact much further than just
`1.2.4`.
#### 2. Fetch all dependencies
##### Fedora
sudo yum install gcc openssl-devel glib2-devel libpurple-devel libwebp-devel
sudo dnf install gcc gettext libgcrypt-devel libwebp-devel libpurple-devel zlib-devel
###### Debian / Ubuntu
##### Debian / Ubuntu
sudo apt-get install libssl-dev libglib2.0-dev libpurple-dev libwebp-dev
We are working on a Debian package! Please first check if it's already available to you: `sudo apt-get install telegram-purple`
If the above works, then you should stop here: It is now installed.
If the above fails: Don't worry, just continue building it by yourself. Next you need to install these dependencies:
sudo apt-get install libgcrypt20-dev libpurple-dev libwebp-dev gettext build-essential
###### OpenSUSE
##### OpenSUSE
sudo zypper install gcc glib glib-devel libpurple libpurple-devel zlib-devel openssl libopenssl-devel libwebp-devel
sudo zypper install gcc glib glib-devel libpurple libpurple-devel zlib-devel libwebp-devel
And the development files for gcrypt, probably `gcrypt-devel` or something. (FIXME)
#### 3. Compile and install
If libwebp is not available, you can disable sticker support by calling ./configure --disable-libweb instead.
Please note that this is usually not necessary.
./configure
make
@ -59,10 +114,11 @@ If libwebp is not available, you can disable sticker support by calling ./config
Pulling Updates
---------------
This repository contains submodules and just a simple pull won't be enough to update all submodule files. Pull new changes with:
This repository contains submodules, and a simple pull just won't be enough to update all the submodules files. Pull new changes with:
git pull
git submodule sync # just in case the configuration has changed
git submodule update --recursive
@ -71,25 +127,31 @@ Usage
#### First Login
The username is your current phone number, including your full country prefix. For Germany, this would be '+49', resulting in a user name like '+49151123456'. Telegram will verify your phone number by sending you a code via sms. You will be prompted for this code, once that happens.
The username is your current phone number, including your full country prefix. For Germany, this would be '+49', resulting in a user name like '+49151123456'. Telegram will verify your phone number by sending you a code via SMS. You will be prompted for this code, once that happens.
#### Buddy List
Like in the official Telegram apps, the displayed buddy list consists of all active conversations.
##### Foreign Users
Foreign users, like for example people you only know through a group chat but never had any conversation with, will not be part of your buddy list by default. You can add those users to the buddy list by clicking on "Add contact..." in the users context menu.
#### Using secret chats
You can use Telegram secret chats with this plugin, they will show up as a new buddy with a '!' in front of the buddy name.
One caveat of secret chats in Telegram is that they can only have one endpoint, this is a limitation of the protocol. This means that if you create a secret chat in Pidgin you will not be able to use that chat on your phone. You will be asked whether to accept each secret chat, so you can always choose to accept the chat on a different device if you want. You can set a default behavior for dealing with secret chats (Accept or Decline) in the account settings if you don't want that prompt to appear every time.
One caveat of secret chats in Telegram is that they can only have one endpoint, this is a limitation of the protocol. This means that if you create a secret chat in Pidgin you will not be able to use that chat on your phone. You will be asked whether to accept each secret chat, so you can always choose to accept the chat on a different device if you want. You can set a default behavior for dealing with secret chats (Accept or Decline) in the account settings, if you don't want that prompt to appear every time.
Self destructive messages will be ignored, since I don't know any way to delete them from the conversation and the history.
##### Confirming the key authenticity
Click on the buddy in the buddy list and click on "Show Info" to visualize the key fingerprint.
![Confirm key authenticity](http://h2079792.stratoserver.net/telegram-purple/res/key.png)
Click on the buddy in the buddy list and click on "Show Info" to visualize the key fingerprint.
##### Initiate secret chats
To initiate a secret chat from Pidgin, click on a Buddy in the Buddy List and hit ``Start Secret Chat''
To initiate a secret chat from Pidgin, click on a Buddy in the Buddy List and hit "Start Secret Chat"
##### Deleting secret chats
@ -102,34 +164,164 @@ The Telegram phone applications for iOS and Android make use of standardized Uni
does not display those smileys natively, but you can install a custom smiley theme like (https://github.com/stv0g/unicode-emoji) or (https://github.com/VxJasonxV/emoji-for-pidgin) and activate it under Settings > Themes > Smiley Theme.
Troubleshooting
---------------
#### Code-Tags
If you encounter problems running this plugin and you have updated from an older version,
deleting your old user-data might be helpful. WARNING: This will require you to enter a new authentication
code and delete all your secret chat keys.
Since 1.3.0 it is possible to write messages in monospaced fonts using the markdown backtick syntax.
To clean all your user files run:
##### Example
``` if (true) {
// do smth
}```
make purge
##### Result
if (true) {
// do smth
}
Building the Adium Plugin
-------------------------
Compiling with XCode is a little bit problematic, since it requries you to compile Adium first to get the necessary framework files. My advice is to just use the [prebuild bundle](https://github.com/majn/telegram-purple/releases), but if you really want to do it, follow those steps.
Compiling with XCode is a little bit problematic, since it requires you to compile Adium first to get the necessary framework files. My advice is to just use the [prebuilt bundle](https://github.com/majn/telegram-purple/releases), but if you really want to do it, follow these steps:
1. Get the Adium source, compile it with XCode and copy the build output into telegram-adium/Frameworks/Adium. It should contain at least Adium.framework, AdiumLibpurple.framework and AIUitilies.framework
2. Open the Adium source code, go to ./Frameworks and copy libglib.framework and libpurple.framework into telegram-adium/Frameworks/Adium
3. Build the tgl submodule and delete libtgl.so from libs/ (it should only contain libtgl.a)
4. Install libwebp with homebrew, move into copy it into your project
4. Install libwebp, libgcrypt and gnupg with homebrew:
brew install webp
cp /usr/local/Cellar/webp/0.4.3/lib/libwebp.a ./telegram-adium/Frameworks/
brew install webp
brew install libgcrypt libgpg-error
5. Build the XCode-Project and execute the created bundle
5. If you already downloaded libwebp/libgcrypt in previous builds make sure that the binaries are up-to-date
brew update
brew upgrade webp libgcrypt
6. Install with homebrew and move it into the appropriate directory so that XCode can find them. Note that the versions might differ, use the one that is
mkdir -p ./telegram-adium/Frameworks/Adium
cp /usr/local/Cellar/webp/0.4.3/lib/libwebp.a ./telegram-adium/Frameworks
cp /usr/local/Cellar/libgcrypt/1.6.4/lib/libgcrypt.20.dylib ./telegram-adium/Frameworks/Adium
cp /usr/local/Cellar/libgpg-error/1.20_1/lib/libgpg-error.0.dylib ./telegram-adium/Frameworks/Adium
7. Update the paths in the dylibs, to assure that the resulting binary will load them form within the bundle.
cd ./telegram-adium/Frameworks/Adium
install_name_tool -id "@loader_path/../Resources/libgcrypt.20.dylib" ./libgcrypt.20.dylib
install_name_tool -id "@loader_path/../Resources/libgpg-error.0.dylib" ./libgpg-error.0.dylib
install_name_tool -change "/usr/local/lib/libgpg-error.0.dylib" "@loader_path/../Resources/libgpg-error.0.dylib" ./libgcrypt.20.dylib
7. Build the XCode-Project and execute the created bundle
Building the Debian Package
---------------------------
If you just need a `.deb`, simply do:
sudo apt-get install debhelper
git checkout debian-master
git submodule update --recursive
fakeroot ./debian/rules binary
And you're done! The `.deb` is in the directory at which you started.
To show some info about it, try this:
dpkg --info telegram-purple_*.deb
`debian-master` always points to a version that was submitted to Debian. (Note that this doesn't exist yet, as we haven't released to Debian yet.)
`debian-develop` is the candidate for the next submission.
#### Debian Maintainers ####
If you're a maintainer (if you're not sure, then you aren't a
maintainer), you need to produce a lot more files than that.
Here's how you can generate a `.orig.tar.gz`:
make dist
Note that these are incompatible with the old `debian/genorigtar.sh`
tarballs, and can't be made compatible easily. If you need the tarball
from "back then", see the documentation there.
This command requires the original tar to exist (and will fail otherwise,
although the error message will be misleading) will build all further files,
specifically `.debian.tar.xz`, `.dsc`, `.deb`, and `.changes`:
dpkg-buildpackage
For the upload, you should use `pbuilder` and similar to build the package
in a more minimalistic environment. That covers the official part of the work-flow.
Of course, you can call small parts of the build process directly, in order to avoid
overhead like rebuilding. For example, if you only need the `.debian.tar.xz`
and `.dsc` files, do this:
make dist
false # Move tar to parent directory, by hand
dpkg-source -b .
Discussion / Help
-----------------
#### Custom pubkeys
As we want to avoid OpenSSL, it has become necessary to replace the PEM file format. This means that if you use a custom pubkey (which you really REALLY shouldn't be doing), you have to adapt, sorry.
We no longer ship `tg-server.pub` (old format), but instead `tg-server.tglpub` (new format). If you have a `.pub` and want to continue using telegram-purple, please use this (hopefully highly portable) tool: [pem2bignum](https://github.com/BenWiederhake/pem2bignum)
You can also write your own conversion tool if you prefer. The format is really simple:
1. `e`, the public exponent, encoded as big endian 32 bit fixed length (e.g. `0x00 01 00 01` for 65537)
2. `n_len`, the length of `n` in bytes, encoded as big endian 32 bit fixed length (e.g. `0x00 00 01 00` for a 2048-bit = 256-byte key)
3. `n_raw`, the raw modulus, encoded as big endian, using the previously indicated length (e.g. `0xC1 50 02 3E [248 bytes omitted] 21 79 25 1F` in the case of telegram's public RSA key.)
If you are interested in developing a non-OpenSSL-licensed converter, look into [insane-triangle-banana](https://github.com/BenWiederhake/insane-triangle-banana).
FAQ
---
- I receive pictures in a chat, but they aren't showing up
* A: Make sure that you don't have a plugin like "Conversation Colors" that strips HTML from messages and removes the pictures.
- I receive RPC_CALL_FAIL_401: SESSION REVOKED
* A: This basically means your session has been terminated but the program
doesn't handle terminated sessions properly yet. You have to clean the
~/.purple/telegram-purple/$PHONENUMBER directory to fix this issue.
For Arch Linux users that use Bitlbee you can find this directory in
`/var/lib/bitlbee/purple/telegram-purple/`
#### Group chat
Telegram group chat for telegram-purple or libtgl related discussions or questions:
- https://goo.gl/VudXys
Submitting Bug Reports
----------------------
**IMPORTANT**: if you report bugs PLEASE make sure to always **include as much information as possible**. This should always include **at least the telegram-purple version and (if possible) commit**, where you got telegram-purple from (Source build, package repository, etc.), the Pidgin version (if you use a different messenger please state that too!) and your OS Version.
If you describe some issue please be as precise as possible. Descriptions like "XY doesn't work" will not help me. Describe what you are doing what kind of issue you are experiencing: "If I click on X, Y happens, but instead I would expect Z to happen".
For error reports please include the application logs. To get Pidgin to print a log, [start it from command line, specifying the -d option](https://developer.pidgin.im/wiki/GetABacktrace#TheEasyWay). **ATTENTION**: This log will contain personal information like your phone number, message content or contact or chat names. If you plan on uploading it somewhere public mask those entries in the log.
Bug reports regarding crashes should include a backtrace if possible, there is extended documentation available on [how to get a backtrace for crashes](https://developer.pidgin.im/wiki/GetABacktrace)
Empathy / libtelepathy
----------------------
Empathy doesn't natively support libpurple plugins since its based on libtelepathy, but there is a compatibillity layer called telepathy-haze that can be used to execute libpurple
plugins. This means that you can basically run this plugin thanks to telepathy-haze but you will usually get less features and worse usability compared to real libpurple clients. If you use Empathy (or anything else based on libtelepathy) I recommend [telepathy-morse](https://projects.kde.org/projects/playground/network/telepathy/telepathy-morse/repository) which is a connection manager written specifically for your messenger.
Authors
-------
@ -138,18 +330,10 @@ Telegram-Purple was written by:
- Matthias Jentsch <mtthsjntsch@gmail.com>
- Vitaly Valtman
- Ben Wiederhake <Ben.Wiederhake@gmail.com>
- Christopher Althaus <althaus.christopher@gmail.com>
- Markus Endres <endresma45241@th-nuernberg.de>
Acknowledgements
----------------
This software is based on the library [Libtgl](https://github.com/vysheng/tgl), which was written by Vitaly Valtman <mail@vysheng.ru> and others, see (http://github.com/vysheng/tgl)
For PNG rendering, it includes the [lodepng library](http://lodev.org/lodepng/).
This product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit. (http://www.openssl.org/)
This product includes cryptographic software written by Eric Young (eay@cryptsoft.com)
This software is based on the library [Libtgl](https://github.com/vysheng/tgl), which was written by Vitaly Valtman <mail@vysheng.ru> and others, see (https://github.com/vysheng/tgl/)

16
autogen.sh Executable file
View file

@ -0,0 +1,16 @@
#!/bin/sh
set -e
autoreconf
(
cd po
export XGETTEXT="xgettext -kP_:1,2"
intltool-update --pot
## Translations are managed at https://www.transifex.com/telegram-purple-developers/telegram-purple/
## To update the .po files, download it from there, since intltool, msginit, and transifex produce slightly different files, and I'd like to avoid gigantic git diffs that only change indentation or similar things.
)
test -r Makefile || (echo "Autoreconf didn't create Makefile?!"; exit 1)
make --quiet build-nsi

45
commit.h.gen Executable file
View file

@ -0,0 +1,45 @@
#!/bin/sh
# This file is part of telegram-purple
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA
#
# Copyright Matthias Jentsch, Ben Wiederhake 2016
set -e
if ! (command -v git && git status) >/dev/null 2>&1
then
if test -r commit.h
then
echo "No git available. Assuming everything is up-to-date."
exit 0
else
echo >&2 "No git available. Can't reconstruct commit.h"
exit 1
fi
fi
GIT_COMMIT=`git rev-parse HEAD | cut -c1-10`
if grep -scq "${GIT_COMMIT}" commit.h
then
echo "commit.h is up-to-date"
else
echo "Refresh commit.h"
echo "#ifndef GIT_COMMIT" > commit.h
echo "# define GIT_COMMIT \"${GIT_COMMIT}\"" >> commit.h
echo "#endif" >> commit.h
fi

View file

@ -1,5 +1,8 @@
/* config.h.in. Generated from configure.ac by autoheader. */
/* Define the gettext package to be used */
#undef GETTEXT_PACKAGE
/* Define to 1 if you have the <arpa/inet.h> header file. */
#undef HAVE_ARPA_INET_H
@ -9,8 +12,8 @@
/* Define to 1 if you have the <inttypes.h> header file. */
#undef HAVE_INTTYPES_H
/* Define to 1 if you have the `m' library (-lm). */
#undef HAVE_LIBM
/* Define to 1 if you have the `gcrypt' library (-lgcrypt). */
#undef HAVE_LIBGCRYPT
/* Define to 1 if you have the `rt' library (-lrt). */
#undef HAVE_LIBRT

116
config.h.mingw Normal file
View file

@ -0,0 +1,116 @@
# This file is part of telegram-purple
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA
#
# Copyright Matthias Jentsch, Vitaly Valtman, Christopher Althaus, Markus Endres, Eion Robb 2014-2015
/* config.h. Generated from config.h.in by configure. */
/* config.h.in. Generated from configure.ac by autoheader. */
/* Define the gettext package to be used */
#define GETTEXT_PACKAGE "telegram-purple"
#define ENABLE_NLS 1
/* Define to 1 if you have the <arpa/inet.h> header file. */
/* #undef HAVE_ARPA_INET_H */
/* Define to 1 if you have the <fcntl.h> header file. */
#define HAVE_FCNTL_H 1
/* Define to 1 if you have the <inttypes.h> header file. */
#define HAVE_INTTYPES_H 1
/* Define to 1 if you have the `gcrypt' library (-lgcrypt). */
#define HAVE_LIBGCRYPT 1
/* Define to 1 if you have the `rt' library (-lrt). */
/* #undef HAVE_LIBRT */
/* Define to 1 if you have the `webp' library (-lwebp). */
#define HAVE_LIBWEBP 1
/* Define to 1 if you have `z' library (-lz) */
#define HAVE_LIBZ 1
/* Define to 1 if your system has a GNU libc compatible `malloc' function, and
to 0 otherwise. */
#define HAVE_MALLOC 1
/* Define to 1 if you have the <memory.h> header file. */
#define HAVE_MEMORY_H 1
/* Define to 1 if you have the `memset' function. */
#define HAVE_MEMSET 1
/* Define to 1 if you have the <netdb.h> header file. */
/* #undef HAVE_NETDB_H */
/* Define to 1 if you have the <netinet/in.h> header file. */
/* #undef HAVE_NETINET_IN_H */
/* Define to 1 if you have the <stdint.h> header file. */
#define HAVE_STDINT_H 1
/* Define to 1 if you have the <stdlib.h> header file. */
#define HAVE_STDLIB_H 1
/* Define to 1 if you have the `strdup' function. */
#define HAVE_STRDUP 1
/* Define to 1 if you have the <strings.h> header file. */
#define HAVE_STRINGS_H 1
/* Define to 1 if you have the <string.h> header file. */
#define HAVE_STRING_H 1
/* Define to 1 if you have the <sys/socket.h> header file. */
/* #undef HAVE_SYS_SOCKET_H */
/* Define to 1 if you have the <sys/stat.h> header file. */
#define HAVE_SYS_STAT_H 1
/* Define to 1 if you have the <sys/time.h> header file. */
#define HAVE_SYS_TIME_H 1
/* Define to 1 if you have the <sys/types.h> header file. */
#define HAVE_SYS_TYPES_H 1
/* Define to 1 if you have the <unistd.h> header file. */
#define HAVE_UNISTD_H 1
/* Define to the address where bug reports for this package should be sent. */
#define PACKAGE_BUGREPORT ""
/* Define to the full name of this package. */
#define PACKAGE_NAME "telegram-purple"
/* Define to the full name and version of this package. */
#define PACKAGE_STRING PACKAGE_NAME " " PACKAGE_VERSION
/* Define to the one symbol short name of this package. */
#define PACKAGE_TARNAME PACKAGE_NAME
/* Define to the home page for this package. */
#define PACKAGE_URL ""
/* Define to 1 if you have the ANSI C header files. */
#define STDC_HEADERS 1
/* Define to rpl_malloc if the replacement function should be used. */
/* #undef malloc */
/* Define to `unsigned int' if <sys/types.h> does not define. */
/* #undef size_t */

185
config.h.tgl.mingw Normal file
View file

@ -0,0 +1,185 @@
# This file is part of telegram-purple
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA
#
# Copyright Matthias Jentsch, Vitaly Valtman, Christopher Althaus, Markus Endres, Eion Robb 2014-2015
/* config.h. Generated from config.h.in by configure. */
/* config.h.in. Generated from configure.ac by autoheader. */
/* disable extf queries */
/* #undef DISABLE_EXTF */
/* Use libevent v1 */
/* #undef EVENT_V1 */
/* Use libevent v2 */
/* #undef EVENT_V2 */
/* Define to 1 if you have the `alarm' function. */
#define HAVE_ALARM 1
/* Define to 1 if you have the <arpa/inet.h> header file. */
/* #undef HAVE_ARPA_INET_H */
/* Define to 1 if you have the `endpwent' function. */
/* #undef HAVE_ENDPWENT */
/* Define to 1 if you have the <execinfo.h> header file. */
/* #undef HAVE_EXECINFO_H */
/* Define to 1 if you have the <fcntl.h> header file. */
#define HAVE_FCNTL_H 1
/* Define to 1 if you have the <inttypes.h> header file. */
#define HAVE_INTTYPES_H 1
/* Define to 1 if you have the `event' library (-levent). */
/* #undef HAVE_LIBEVENT */
/* Define to 1 if you have the `gcrypt' library (-lgcrypt). */
#define HAVE_LIBGCRYPT 1
/* Define to 1 if you have `z' library (-lz) */
#define HAVE_LIBZ 1
/* Define to 1 if you have the <mach/mach.h> header file. */
/* #undef HAVE_MACH_MACH_H */
/* Define to 1 if your system has a GNU libc compatible `malloc' function, and
to 0 otherwise. */
#define HAVE_MALLOC 1
/* Define to 1 if you have the <malloc.h> header file. */
#define HAVE_MALLOC_H 1
/* Define to 1 if you have the `memmove' function. */
#define HAVE_MEMMOVE 1
/* Define to 1 if you have the <memory.h> header file. */
#define HAVE_MEMORY_H 1
/* Define to 1 if you have the `memset' function. */
#define HAVE_MEMSET 1
/* Define to 1 if you have the `mkdir' function. */
#define HAVE_MKDIR 1
/* Define to 1 if you have the <netdb.h> header file. */
/* #undef HAVE_NETDB_H */
/* Define to 1 if you have the <netinet/in.h> header file. */
/* #undef HAVE_NETINET_IN_H */
/* Define to 1 if your system has a GNU libc compatible `realloc' function,
and to 0 otherwise. */
#define HAVE_REALLOC 1
/* Define to 1 if you have the `select' function. */
/* #undef HAVE_SELECT */
/* Define to 1 if you have the `socket' function. */
/* #undef HAVE_SOCKET */
/* Define to 1 if you have the <stdint.h> header file. */
#define HAVE_STDINT_H 1
/* Define to 1 if you have the <stdlib.h> header file. */
#define HAVE_STDLIB_H 1
/* Define to 1 if you have the `strdup' function. */
#define HAVE_STRDUP 1
/* Define to 1 if you have the <strings.h> header file. */
#define HAVE_STRINGS_H 1
/* Define to 1 if you have the <string.h> header file. */
#define HAVE_STRING_H 1
/* Define to 1 if you have the `strndup' function. */
/* #undef HAVE_STRNDUP */
/* Define to 1 if you have the <sys/file.h> header file. */
#define HAVE_SYS_FILE_H 1
/* Define to 1 if you have the <sys/socket.h> header file. */
/* #undef HAVE_SYS_SOCKET_H */
/* Define to 1 if you have the <sys/stat.h> header file. */
#define HAVE_SYS_STAT_H 1
/* Define to 1 if you have the <sys/types.h> header file. */
#define HAVE_SYS_TYPES_H 1
/* Define to 1 if you have the <termios.h> header file. */
/* #undef HAVE_TERMIOS_H */
/* Define to 1 if you have the `uname' function. */
/* #undef HAVE_UNAME */
/* Define to 1 if you have the <unistd.h> header file. */
#define HAVE_UNISTD_H 1
/* Define to 1 if the system has the `__builtin_bswap32' built-in function */
#define HAVE___BUILTIN_BSWAP32 1
/* Define to the address where bug reports for this package should be sent. */
#define PACKAGE_BUGREPORT ""
/* Define to the full name of this package. */
#define PACKAGE_NAME "telegram-cli"
/* Define to the full name and version of this package. */
#define PACKAGE_STRING "telegram-cli 1.0"
/* Define to the one symbol short name of this package. */
#define PACKAGE_TARNAME "telegram-cli"
/* Define to the home page for this package. */
#define PACKAGE_URL ""
/* Define to the version of this package. */
#define PACKAGE_VERSION "1.0"
/* Define to 1 if you have the ANSI C header files. */
#define STDC_HEADERS 1
/* avoid OpenSSL entirely, use libgcrypt instead (this can't read *.pub files,
though.) */
#define TGL_AVOID_OPENSSL 1
/* fixed for correct valgrind work */
/* #undef VALGRIND_FIXES */
/* Define to `int' if <sys/types.h> doesn't define. */
#define gid_t int
/* Define to `__inline__' or `__inline' if that's what the C compiler
calls it, or to nothing if 'inline' is not supported under any name. */
#ifndef __cplusplus
/* #undef inline */
#endif
/* Define to rpl_malloc if the replacement function should be used. */
/* #undef malloc */
/* Define to rpl_realloc if the replacement function should be used. */
/* #undef realloc */
/* Define to `unsigned int' if <sys/types.h> does not define. */
/* #undef size_t */
/* Define to `int' if <sys/types.h> doesn't define. */
#define uid_t int

308
configure vendored
View file

@ -1,6 +1,6 @@
#! /bin/sh
# Guess values for system-dependent variables and create Makefiles.
# Generated by GNU Autoconf 2.69 for telegram-purple 1.1.0.
# Generated by GNU Autoconf 2.69 for telegram-purple 1.3.1.
#
#
# Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc.
@ -577,8 +577,8 @@ MAKEFLAGS=
# Identity of this package.
PACKAGE_NAME='telegram-purple'
PACKAGE_TARNAME='telegram-purple'
PACKAGE_VERSION='1.1.0'
PACKAGE_STRING='telegram-purple 1.1.0'
PACKAGE_VERSION='1.3.1'
PACKAGE_STRING='telegram-purple 1.3.1'
PACKAGE_BUGREPORT=''
PACKAGE_URL=''
@ -620,6 +620,9 @@ ac_includes_default="\
#endif"
ac_subst_vars='LTLIBOBJS
GETTEXT_PACKAGE
MSGFMT_PATH
CHECK_GETTEXT
PURPLE_CPPFLAGS
LIBOBJS
PURPLE_LIBS
@ -633,6 +636,7 @@ OPENSSL_LDFLAGS
OPENSSL_LIBS
OPENSSL_INCLUDES
PKG_CONFIG
CRYPTO_FLAG
INSTALL_DATA
INSTALL_SCRIPT
INSTALL_PROGRAM
@ -684,9 +688,12 @@ SHELL'
ac_subst_files=''
ac_user_opts='
enable_option_checking
enable_gcrypt
with_openssl
with_zlib
enable_libwebp
enable_icons
enable_translation
'
ac_precious_vars='build_alias
host_alias
@ -1242,7 +1249,7 @@ if test "$ac_init_help" = "long"; then
# Omit some internal or obsolete options to make the list less imposing.
# This message is too long to be a string in the A/UX 3.1 sh.
cat <<_ACEOF
\`configure' configures telegram-purple 1.1.0 to adapt to many kinds of systems.
\`configure' configures telegram-purple 1.3.1 to adapt to many kinds of systems.
Usage: $0 [OPTION]... [VAR=VALUE]...
@ -1303,7 +1310,7 @@ fi
if test -n "$ac_init_help"; then
case $ac_init_help in
short | recursive ) echo "Configuration of telegram-purple 1.1.0:";;
short | recursive ) echo "Configuration of telegram-purple 1.3.1:";;
esac
cat <<\_ACEOF
@ -1311,8 +1318,13 @@ Optional Features:
--disable-option-checking ignore unrecognized --enable/--with options
--disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no)
--enable-FEATURE[=ARG] include FEATURE [ARG=yes]
--disable-gcrypt Disable gcrypt, use OpenSSL instead. DO NOT
DISTRIBUTE BINARIES!
--disable-libwebp Disable libwebp, stickers won't be displayed in the
chat
--disable-icons Unsupported option. Use 'make noicon_install'
instead.
--disable-translation Disable gettext translation
Optional Packages:
--with-PACKAGE[=ARG] use PACKAGE [ARG=yes]
@ -1406,7 +1418,7 @@ fi
test -n "$ac_init_help" && exit $ac_status
if $ac_init_version; then
cat <<\_ACEOF
telegram-purple configure 1.1.0
telegram-purple configure 1.3.1
generated by GNU Autoconf 2.69
Copyright (C) 2012 Free Software Foundation, Inc.
@ -1825,7 +1837,7 @@ cat >config.log <<_ACEOF
This file contains any messages produced by compilers while
running configure, to aid debugging if configure makes a mistake.
It was created by telegram-purple $as_me 1.1.0, which was
It was created by telegram-purple $as_me 1.3.1, which was
generated by GNU Autoconf 2.69. Invocation command line was
$ $0 $@
@ -2321,6 +2333,92 @@ ac_config_headers="$ac_config_headers config.h"
# pkg.m4 - Macros to locate and utilise pkg-config. -*- Autoconf -*-
# serial 1 (pkg-config-0.24)
#
# Copyright © 2004 Scott James Remnant <scott@netsplit.com>.
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#
# As a special exception to the GNU General Public License, if you
# distribute this file as part of a program that contains a
# configuration script generated by Autoconf, you may include it under
# the same distribution terms that you use for the rest of that program.
# PKG_PROG_PKG_CONFIG([MIN-VERSION])
# ----------------------------------
# PKG_PROG_PKG_CONFIG
# PKG_CHECK_EXISTS(MODULES, [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND])
#
# Check to see whether a particular set of modules exists. Similar
# to PKG_CHECK_MODULES(), but does not set variables or print errors.
#
# Please remember that m4 expands AC_REQUIRE([PKG_PROG_PKG_CONFIG])
# only at the first occurence in configure.ac, so if the first place
# it's called might be skipped (such as if it is within an "if", you
# have to call PKG_CHECK_EXISTS manually
# --------------------------------------------------------------
# _PKG_CONFIG([VARIABLE], [COMMAND], [MODULES])
# ---------------------------------------------
# _PKG_CONFIG
# _PKG_SHORT_ERRORS_SUPPORTED
# -----------------------------
# _PKG_SHORT_ERRORS_SUPPORTED
# PKG_CHECK_MODULES(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND],
# [ACTION-IF-NOT-FOUND])
#
#
# Note that if there is a possibility the first call to
# PKG_CHECK_MODULES might not happen, you should be sure to include an
# explicit call to PKG_PROG_PKG_CONFIG in your configure.ac
#
#
# --------------------------------------------------------------
# PKG_CHECK_MODULES
# PKG_INSTALLDIR(DIRECTORY)
# -------------------------
# Substitutes the variable pkgconfigdir as the location where a module
# should install pkg-config .pc files. By default the directory is
# $libdir/pkgconfig, but the default can be changed by passing
# DIRECTORY. The user can override through the --with-pkgconfigdir
# parameter.
# PKG_NOARCH_INSTALLDIR(DIRECTORY)
# -------------------------
# Substitutes the variable noarch_pkgconfigdir as the location where a
# module should install arch-independent pkg-config .pc files. By
# default the directory is $datadir/pkgconfig, but the default can be
# changed by passing DIRECTORY. The user can override through the
# --with-noarch-pkgconfigdir parameter.
# PKG_CHECK_VAR(VARIABLE, MODULE, CONFIG-VARIABLE,
# [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND])
# -------------------------------------------
# Retrieves the value of the pkg-config variable for the given module.
# PKG_CHECK_VAR
# Checks for programs.
ac_ext=c
@ -3236,51 +3334,6 @@ test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for sqrt in -lm" >&5
$as_echo_n "checking for sqrt in -lm... " >&6; }
if ${ac_cv_lib_m_sqrt+:} false; then :
$as_echo_n "(cached) " >&6
else
ac_check_lib_save_LIBS=$LIBS
LIBS="-lm $LIBS"
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
/* Override any GCC internal prototype to avoid an error.
Use char because int might match the return type of a GCC
builtin and then its argument prototype would still apply. */
#ifdef __cplusplus
extern "C"
#endif
char sqrt ();
int
main ()
{
return sqrt ();
;
return 0;
}
_ACEOF
if ac_fn_c_try_link "$LINENO"; then :
ac_cv_lib_m_sqrt=yes
else
ac_cv_lib_m_sqrt=no
fi
rm -f core conftest.err conftest.$ac_objext \
conftest$ac_exeext conftest.$ac_ext
LIBS=$ac_check_lib_save_LIBS
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_m_sqrt" >&5
$as_echo "$ac_cv_lib_m_sqrt" >&6; }
if test "x$ac_cv_lib_m_sqrt" = xyes; then :
cat >>confdefs.h <<_ACEOF
#define HAVE_LIBM 1
_ACEOF
LIBS="-lm $LIBS"
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for clock_gettime in -lrt" >&5
$as_echo_n "checking for clock_gettime in -lrt... " >&6; }
if ${ac_cv_lib_rt_clock_gettime+:} false; then :
@ -3327,6 +3380,71 @@ _ACEOF
fi
# Check whether --enable-gcrypt was given.
if test "${enable_gcrypt+set}" = set; then :
enableval=$enable_gcrypt;
fi
if test "x$enable_gcrypt" != "xno"; then :
# Even though tgl/configure will do this too, still call our own libgcrypt check to assure that -lgcrypt is added to our makefile
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for gcry_mpi_snatch in -lgcrypt" >&5
$as_echo_n "checking for gcry_mpi_snatch in -lgcrypt... " >&6; }
if ${ac_cv_lib_gcrypt_gcry_mpi_snatch+:} false; then :
$as_echo_n "(cached) " >&6
else
ac_check_lib_save_LIBS=$LIBS
LIBS="-lgcrypt $LIBS"
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
/* Override any GCC internal prototype to avoid an error.
Use char because int might match the return type of a GCC
builtin and then its argument prototype would still apply. */
#ifdef __cplusplus
extern "C"
#endif
char gcry_mpi_snatch ();
int
main ()
{
return gcry_mpi_snatch ();
;
return 0;
}
_ACEOF
if ac_fn_c_try_link "$LINENO"; then :
ac_cv_lib_gcrypt_gcry_mpi_snatch=yes
else
ac_cv_lib_gcrypt_gcry_mpi_snatch=no
fi
rm -f core conftest.err conftest.$ac_objext \
conftest$ac_exeext conftest.$ac_ext
LIBS=$ac_check_lib_save_LIBS
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_gcrypt_gcry_mpi_snatch" >&5
$as_echo "$ac_cv_lib_gcrypt_gcry_mpi_snatch" >&6; }
if test "x$ac_cv_lib_gcrypt_gcry_mpi_snatch" = xyes; then :
cat >>confdefs.h <<_ACEOF
#define HAVE_LIBGCRYPT 1
_ACEOF
LIBS="-lgcrypt $LIBS"
else
echo "no libgcrypt >= 1.60 found. If its not available try --disable-gcrypt to link against openssl, but in that case YOU MAY NOT REDISTRIBUTE THE BINARY due to licensing restrictions."
exit -1
fi
CRYPTO_FLAG=--disable-openssl
else
found=false
# Check whether --with-openssl was given.
@ -3464,7 +3582,7 @@ else
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
$as_echo "no" >&6; }
as_fn_error $? "No openssl found" "$LINENO" 5
No openssl found.
fi
rm -f core conftest.err conftest.$ac_objext \
@ -3477,6 +3595,10 @@ rm -f core conftest.err conftest.$ac_objext \
fi
ac_ext=c
ac_cpp='$CPP $CPPFLAGS'
ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
@ -4227,7 +4349,8 @@ if test "${enable_libwebp+set}" = set; then :
enableval=$enable_libwebp;
fi
if test "x$enable_libwebp" != "xno"; then :
if test "x$enable_libwebp" != "xno"; then :
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: enabled" >&5
$as_echo "enabled" >&6; }
@ -4279,6 +4402,17 @@ else
fi
fi
# Check whether --enable-icons was given.
if test "${enable_icons+set}" = set; then :
enableval=$enable_icons;
fi
if test "x$enable_icons" == "xno"; then :
as_fn_error $? "--disable-icons is now obsolete. Please use 'make noicon_install' for the same effect." "$LINENO" 5
fi
# Checks for header files.
@ -4394,6 +4528,68 @@ done
# Check whether --enable-translation was given.
if test "${enable_translation+set}" = set; then :
enableval=$enable_translation;
fi
if test "x$enable_translation" != "xno"; then :
# Extract the first word of "msgfmt", so it can be a program name with args.
set dummy msgfmt; ac_word=$2
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
$as_echo_n "checking for $ac_word... " >&6; }
if ${ac_cv_prog_CHECK_GETTEXT+:} false; then :
$as_echo_n "(cached) " >&6
else
if test -n "$CHECK_GETTEXT"; then
ac_cv_prog_CHECK_GETTEXT="$CHECK_GETTEXT" # Let the user override the test.
else
as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH
do
IFS=$as_save_IFS
test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do
if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
ac_cv_prog_CHECK_GETTEXT=""yes""
$as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2
fi
done
done
IFS=$as_save_IFS
test -z "$ac_cv_prog_CHECK_GETTEXT" && ac_cv_prog_CHECK_GETTEXT=""no""
fi
fi
CHECK_GETTEXT=$ac_cv_prog_CHECK_GETTEXT
if test -n "$CHECK_GETTEXT"; then
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CHECK_GETTEXT" >&5
$as_echo "$CHECK_GETTEXT" >&6; }
else
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
$as_echo "no" >&6; }
fi
if test x"$CHECK_GETTEXT" != x"yes" ; then
as_fn_error $? "no gettext found, use --disable-translation if you dont need it." "$LINENO" 5
fi
MSGFMT_PATH=$(which msgfmt)
fi
# Define the domain name for the translated words
GETTEXT_PACKAGE=$PACKAGE_NAME
cat >>confdefs.h <<_ACEOF
#define GETTEXT_PACKAGE "$GETTEXT_PACKAGE"
_ACEOF
ac_config_files="$ac_config_files Makefile"
cat >confcache <<\_ACEOF
@ -4902,7 +5098,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
# report actual input values of CONFIG_FILES etc. instead of their
# values after options handling.
ac_log="
This file was extended by telegram-purple $as_me 1.1.0, which was
This file was extended by telegram-purple $as_me 1.3.1, which was
generated by GNU Autoconf 2.69. Invocation command line was
CONFIG_FILES = $CONFIG_FILES
@ -4964,7 +5160,7 @@ _ACEOF
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
ac_cs_version="\\
telegram-purple config.status 1.1.0
telegram-purple config.status 1.3.1
configured by $0, generated by GNU Autoconf 2.69,
with options \\"\$ac_cs_config\\"

View file

@ -1,33 +1,73 @@
# This file is part of telegram-purple
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA
#
# Copyright Matthias Jentsch, Vitaly Valtman, Christopher Althaus, Markus Endres 2014-2015
# -*- Autoconf -*-
# Process this file with autoconf to produce a configure script.
AC_PREREQ([2.69])
AC_INIT([telegram-purple], [1.1.0])
AC_INIT([telegram-purple], [1.3.1])
AC_CONFIG_SRCDIR([config.h.in])
AC_CONFIG_HEADERS([config.h])
m4_include([m4_ax_check_openssl.m4])
m4_include([m4_ax_check_zlib.m4])
m4_include([m4_ax_pkg_config.m4])
# Checks for programs.
AC_PROG_CC
AC_PROG_INSTALL
AC_CHECK_LIB([m], [sqrt])
AC_CHECK_LIB([rt], [clock_gettime])
AX_CHECK_OPENSSL(,[AC_MSG_ERROR([No openssl found])])
AC_ARG_ENABLE([gcrypt],
AS_HELP_STRING([--disable-gcrypt], [Disable gcrypt, use OpenSSL instead. DO NOT DISTRIBUTE BINARIES!]))
AS_IF([test "x$enable_gcrypt" != "xno"], [
# Even though tgl/configure will do this too, still call our own libgcrypt check to assure that -lgcrypt is added to our makefile
AC_CHECK_LIB([gcrypt], [gcry_mpi_snatch], [], [
echo "no libgcrypt >= 1.60 found. If its not available try --disable-gcrypt to link against openssl, but in that case YOU MAY NOT REDISTRIBUTE THE BINARY due to licensing restrictions."
exit -1
])
AC_SUBST([CRYPTO_FLAG], [--disable-openssl])
], [
AX_CHECK_OPENSSL([], [No openssl found.])
])
AX_CHECK_ZLIB(, [AC_MSG_ERROR([No zlib found])])
PKG_CHECK_MODULES([PURPLE], [purple], )
PKG_CHECK_MODULES([PURPLE], [purple])
AC_MSG_CHECKING([for libwebp])
AC_ARG_ENABLE([libwebp],
AS_HELP_STRING([--disable-libwebp], [Disable libwebp, stickers won't be displayed in the chat]))
AS_IF([test "x$enable_libwebp" != "xno"], [
AS_IF([test "x$enable_libwebp" != "xno"], [
AC_MSG_RESULT([enabled])
AC_CHECK_LIB([webp], [WebPDecodeRGBA], [], [AC_MSG_ERROR([no libwebp found, try --disable-libwebp, but stickers won't be displayed in the chat])])
])
AC_ARG_ENABLE([icons],
AS_HELP_STRING([--disable-icons], [Unsupported option. Use 'make noicon_install' instead.]))
AS_IF([test "x$enable_icons" == "xno"], [
AC_MSG_ERROR([--disable-icons is now obsolete. Please use 'make noicon_install' for the same effect.])
])
# Checks for header files.
AC_CHECK_HEADERS([arpa/inet.h fcntl.h netdb.h netinet/in.h stdlib.h string.h sys/socket.h sys/time.h unistd.h])
@ -42,5 +82,20 @@ AC_SUBST(PURPLE_CFLAGS)
AC_SUBST(PURPLE_CPPFLAGS)
AC_SUBST(PURPLE_LIBS)
AC_ARG_ENABLE([translation],
AS_HELP_STRING([--disable-translation], [Disable gettext translation]))
AS_IF([test "x$enable_translation" != "xno"], [
AC_CHECK_PROG(CHECK_GETTEXT, msgfmt, "yes", "no", $PATH)
if test x"$CHECK_GETTEXT" != x"yes" ; then
AC_MSG_ERROR([no gettext found, use --disable-translation if you dont need it.])
fi
AC_SUBST(MSGFMT_PATH, $(which msgfmt))
])
# Define the domain name for the translated words
GETTEXT_PACKAGE=$PACKAGE_NAME
AC_SUBST(GETTEXT_PACKAGE)
AC_DEFINE_UNQUOTED(GETTEXT_PACKAGE, ["$GETTEXT_PACKAGE"], [Define the gettext package to be used])
AC_CONFIG_FILES([Makefile])
AC_OUTPUT

53
gen-origtar Executable file
View file

@ -0,0 +1,53 @@
#!/bin/sh
# This file is part of telegram-purple
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA
#
# Copyright Matthias Jentsch, Ben Wiederhake 2016
set -e
# -- Cleanup possibly left-over artifacts
rm -f bin/tgl_tl-parser.tar bin/tgl.tar bin/commit.h.tar bin/result.tar bin/result.tar.gz
# -- Create parts
# Abuse the "bin" dir for temporary files.
( cd tgl/tl-parser && git archive --prefix=telegram-purple/tgl/tl-parser/ --output=../../bin/tgl_tl-parser.tar HEAD )
( cd tgl && git archive --prefix=telegram-purple/tgl/ --output=../bin/tgl.tar HEAD )
git archive --prefix=telegram-purple/ --output=bin/result.tar HEAD
# This is a lot of options. Here's why.
# --sort --mtime --owner --group => be reproducible (same commit produces binarily identical files)
# --transform => be in the same "tar-folder" as the rest
# (absence of --numeric-ids) => have identical behavior as git-archive
# --mode=664 => have identical behavior as git-archive
# http://www.gelato.unsw.edu.au/archives/git/0701/36326.html
# This is hacky. TODO: Find a better way to unify permissions.
tar --sort=name --mtime="1970-01-01 00:00Z" --owner=root --group=root --transform s%^%telegram-purple/% --mode=664 -cf bin/commit.h.tar commit.h
# -- Concatenate it all
tar --concatenate -f bin/result.tar bin/tgl.tar
tar --concatenate -f bin/result.tar bin/tgl_tl-parser.tar
tar --concatenate -f bin/result.tar bin/commit.h.tar
gzip -n bin/result.tar
# -- Determine name and move
TARNAME="telegram-purple_`git describe --tags | sed s/^v// `.orig.tar.gz"
# "mv -f" means "overwrite, if necessary"
echo mv -f bin/result.tar.gz $TARNAME
mv -f bin/result.tar.gz $TARNAME
# -- Cleanup (never fail)
rm -f bin/tgl_tl-parser.tar bin/tgl.tar bin/commit.h.tar bin/result.tar bin/result.tar.gz || true

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

214
m4_ax_pkg_config.m4 Normal file
View file

@ -0,0 +1,214 @@
# pkg.m4 - Macros to locate and utilise pkg-config. -*- Autoconf -*-
# serial 1 (pkg-config-0.24)
#
# Copyright © 2004 Scott James Remnant <scott@netsplit.com>.
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#
# As a special exception to the GNU General Public License, if you
# distribute this file as part of a program that contains a
# configuration script generated by Autoconf, you may include it under
# the same distribution terms that you use for the rest of that program.
# PKG_PROG_PKG_CONFIG([MIN-VERSION])
# ----------------------------------
AC_DEFUN([PKG_PROG_PKG_CONFIG],
[m4_pattern_forbid([^_?PKG_[A-Z_]+$])
m4_pattern_allow([^PKG_CONFIG(_(PATH|LIBDIR|SYSROOT_DIR|ALLOW_SYSTEM_(CFLAGS|LIBS)))?$])
m4_pattern_allow([^PKG_CONFIG_(DISABLE_UNINSTALLED|TOP_BUILD_DIR|DEBUG_SPEW)$])
AC_ARG_VAR([PKG_CONFIG], [path to pkg-config utility])
AC_ARG_VAR([PKG_CONFIG_PATH], [directories to add to pkg-config's search path])
AC_ARG_VAR([PKG_CONFIG_LIBDIR], [path overriding pkg-config's built-in search path])
if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then
AC_PATH_TOOL([PKG_CONFIG], [pkg-config])
fi
if test -n "$PKG_CONFIG"; then
_pkg_min_version=m4_default([$1], [0.9.0])
AC_MSG_CHECKING([pkg-config is at least version $_pkg_min_version])
if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then
AC_MSG_RESULT([yes])
else
AC_MSG_RESULT([no])
PKG_CONFIG=""
fi
fi[]dnl
])# PKG_PROG_PKG_CONFIG
# PKG_CHECK_EXISTS(MODULES, [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND])
#
# Check to see whether a particular set of modules exists. Similar
# to PKG_CHECK_MODULES(), but does not set variables or print errors.
#
# Please remember that m4 expands AC_REQUIRE([PKG_PROG_PKG_CONFIG])
# only at the first occurence in configure.ac, so if the first place
# it's called might be skipped (such as if it is within an "if", you
# have to call PKG_CHECK_EXISTS manually
# --------------------------------------------------------------
AC_DEFUN([PKG_CHECK_EXISTS],
[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl
if test -n "$PKG_CONFIG" && \
AC_RUN_LOG([$PKG_CONFIG --exists --print-errors "$1"]); then
m4_default([$2], [:])
m4_ifvaln([$3], [else
$3])dnl
fi])
# _PKG_CONFIG([VARIABLE], [COMMAND], [MODULES])
# ---------------------------------------------
m4_define([_PKG_CONFIG],
[if test -n "$$1"; then
pkg_cv_[]$1="$$1"
elif test -n "$PKG_CONFIG"; then
PKG_CHECK_EXISTS([$3],
[pkg_cv_[]$1=`$PKG_CONFIG --[]$2 "$3" 2>/dev/null`
test "x$?" != "x0" && pkg_failed=yes ],
[pkg_failed=yes])
else
pkg_failed=untried
fi[]dnl
])# _PKG_CONFIG
# _PKG_SHORT_ERRORS_SUPPORTED
# -----------------------------
AC_DEFUN([_PKG_SHORT_ERRORS_SUPPORTED],
[AC_REQUIRE([PKG_PROG_PKG_CONFIG])
if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
_pkg_short_errors_supported=yes
else
_pkg_short_errors_supported=no
fi[]dnl
])# _PKG_SHORT_ERRORS_SUPPORTED
# PKG_CHECK_MODULES(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND],
# [ACTION-IF-NOT-FOUND])
#
#
# Note that if there is a possibility the first call to
# PKG_CHECK_MODULES might not happen, you should be sure to include an
# explicit call to PKG_PROG_PKG_CONFIG in your configure.ac
#
#
# --------------------------------------------------------------
AC_DEFUN([PKG_CHECK_MODULES],
[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl
AC_ARG_VAR([$1][_CFLAGS], [C compiler flags for $1, overriding pkg-config])dnl
AC_ARG_VAR([$1][_LIBS], [linker flags for $1, overriding pkg-config])dnl
pkg_failed=no
AC_MSG_CHECKING([for $1])
_PKG_CONFIG([$1][_CFLAGS], [cflags], [$2])
_PKG_CONFIG([$1][_LIBS], [libs], [$2])
m4_define([_PKG_TEXT], [Alternatively, you may set the environment variables $1[]_CFLAGS
and $1[]_LIBS to avoid the need to call pkg-config.
See the pkg-config man page for more details.])
if test $pkg_failed = yes; then
AC_MSG_RESULT([no])
_PKG_SHORT_ERRORS_SUPPORTED
if test $_pkg_short_errors_supported = yes; then
$1[]_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "$2" 2>&1`
else
$1[]_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "$2" 2>&1`
fi
# Put the nasty error message in config.log where it belongs
echo "$$1[]_PKG_ERRORS" >&AS_MESSAGE_LOG_FD
m4_default([$4], [AC_MSG_ERROR(
[Package requirements ($2) were not met:
$$1_PKG_ERRORS
Consider adjusting the PKG_CONFIG_PATH environment variable if you
installed software in a non-standard prefix.
_PKG_TEXT])[]dnl
])
elif test $pkg_failed = untried; then
AC_MSG_RESULT([no])
m4_default([$4], [AC_MSG_FAILURE(
[The pkg-config script could not be found or is too old. Make sure it
is in your PATH or set the PKG_CONFIG environment variable to the full
path to pkg-config.
_PKG_TEXT
To get pkg-config, see <http://pkg-config.freedesktop.org/>.])[]dnl
])
else
$1[]_CFLAGS=$pkg_cv_[]$1[]_CFLAGS
$1[]_LIBS=$pkg_cv_[]$1[]_LIBS
AC_MSG_RESULT([yes])
$3
fi[]dnl
])# PKG_CHECK_MODULES
# PKG_INSTALLDIR(DIRECTORY)
# -------------------------
# Substitutes the variable pkgconfigdir as the location where a module
# should install pkg-config .pc files. By default the directory is
# $libdir/pkgconfig, but the default can be changed by passing
# DIRECTORY. The user can override through the --with-pkgconfigdir
# parameter.
AC_DEFUN([PKG_INSTALLDIR],
[m4_pushdef([pkg_default], [m4_default([$1], ['${libdir}/pkgconfig'])])
m4_pushdef([pkg_description],
[pkg-config installation directory @<:@]pkg_default[@:>@])
AC_ARG_WITH([pkgconfigdir],
[AS_HELP_STRING([--with-pkgconfigdir], pkg_description)],,
[with_pkgconfigdir=]pkg_default)
AC_SUBST([pkgconfigdir], [$with_pkgconfigdir])
m4_popdef([pkg_default])
m4_popdef([pkg_description])
]) dnl PKG_INSTALLDIR
# PKG_NOARCH_INSTALLDIR(DIRECTORY)
# -------------------------
# Substitutes the variable noarch_pkgconfigdir as the location where a
# module should install arch-independent pkg-config .pc files. By
# default the directory is $datadir/pkgconfig, but the default can be
# changed by passing DIRECTORY. The user can override through the
# --with-noarch-pkgconfigdir parameter.
AC_DEFUN([PKG_NOARCH_INSTALLDIR],
[m4_pushdef([pkg_default], [m4_default([$1], ['${datadir}/pkgconfig'])])
m4_pushdef([pkg_description],
[pkg-config arch-independent installation directory @<:@]pkg_default[@:>@])
AC_ARG_WITH([noarch-pkgconfigdir],
[AS_HELP_STRING([--with-noarch-pkgconfigdir], pkg_description)],,
[with_noarch_pkgconfigdir=]pkg_default)
AC_SUBST([noarch_pkgconfigdir], [$with_noarch_pkgconfigdir])
m4_popdef([pkg_default])
m4_popdef([pkg_description])
]) dnl PKG_NOARCH_INSTALLDIR
# PKG_CHECK_VAR(VARIABLE, MODULE, CONFIG-VARIABLE,
# [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND])
# -------------------------------------------
# Retrieves the value of the pkg-config variable for the given module.
AC_DEFUN([PKG_CHECK_VAR],
[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl
AC_ARG_VAR([$1], [value of $3 for $2, overriding pkg-config])dnl
_PKG_CONFIG([$1], [variable="][$3]["], [$2])
AS_VAR_COPY([$1], [pkg_cv_][$1])
AS_VAR_IF([$1], [""], [$5], [$4])dnl
])# PKG_CHECK_VAR

View file

@ -1 +0,0 @@
tgl/mime.types

View file

@ -19,7 +19,6 @@
*/
#include <stdio.h>
#include <stdarg.h>
#include <debug.h>
#include "telegram-purple.h"
/*
@ -73,3 +72,101 @@ void fatal(const char* format, ...) {
info ("\n");
}
const char *print_flags (const char **names, int len, unsigned flags) {
static char *text = NULL;
if (text) {
g_free (text);
text = NULL;
}
int i;
for (i = 0; i < len; i ++) {
if (flags & 1) {
char *new;
if (text) {
new = g_strconcat (text, " ", names[i], NULL);
g_free (text);
} else {
new = g_strdup (names[i]);
}
text = new;
}
flags >>= 1;
}
return (const char*)text;
}
const char *print_flags_peer (unsigned flags) {
const char *names[] = {
"CREATED",
"HAS_PHOTO",
"DELETED",
"OFFICIAL",
"KICKED",
"ADMIN",
"CREATOR",
"LEFT",
"DEACTIVATED"
};
return print_flags (names, 9, flags);
}
const char *print_flags_channel (unsigned flags) {
static char *text;
if (text) {
g_free (text);
text = NULL;
}
const char *names[] = {
"BROADCAST",
"EDITOR",
"MODERATOR",
"MEGAGROUP"
};
text = g_strdup (print_flags_peer (flags));
char *old = text;
text = g_strconcat (text, " ", print_flags (names, 4, flags >> 16), NULL);
g_free (old);
return text;
}
const char *print_flags_user (unsigned flags) {
static char *text;
if (text) {
g_free (text);
text = NULL;
}
const char *names[] = {
"CONTACT",
"MUTUAL_CONTACT",
"BLOCKED",
"SELF",
"BOT"
};
text = g_strdup (print_flags_peer (flags));
char *old = text;
text = g_strconcat (text, " ", print_flags (names, 5, flags >> 16), NULL);
g_free (old);
return text;
}
const char *print_flags_update (unsigned flags) {
const char *names[] = {
"CREATED",
"DELETED",
"PHONE",
"CONTACT",
"PHOTO",
"BLOCKED",
"REAL_NAME",
"NAME",
"REQUESTED",
"WORKING",
"FLAGS",
"TITLE",
"ADMIN",
"MEMBERS",
"ACCESS_HASH",
"USERNAME"
};
return print_flags (names, 16, flags);
}

View file

@ -24,4 +24,7 @@ void info(const char* format, ...);
void warning(const char* format, ...);
void failure(const char* format, ...);
void fatal(const char* format, ...);
const char *print_flags_update (unsigned update);
const char *print_flags_channel (unsigned flags);
const char *print_flags_peer (unsigned flags);
const char *print_flags_user (unsigned flags);

1
po/.gitignore vendored Normal file
View file

@ -0,0 +1 @@
/*.mo

11
po/LINGUAS Normal file
View file

@ -0,0 +1,11 @@
bg
cs_CZ
de_DE
es_AR
fr
it_IT
nl
pl_PL
ru_RU
sq
uk

6
po/LINGUAS.BAD Normal file
View file

@ -0,0 +1,6 @@
# This file lists translations that are too bad or incomplete for installation.
# If you would like to improve the state of this, please see the translation page:
# https://www.transifex.com/telegram-purple-developers/telegram-purple/
da # < 55% complete
pt_BR # < 75% complete

11
po/POTFILES.in Normal file
View file

@ -0,0 +1,11 @@
# List of source files containing translatable strings.
telegram-base.c
telegram-purple.c
tgp-2prpl.c
tgp-msg.c
tgp-net.c
tgp-request.c
tgp-utils.c
tgp-chat.c

614
po/bg.po Normal file
View file

@ -0,0 +1,614 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-08-31 22:53+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: Любомир Василев <lyubomirv@abv.bg>, 2016\n"
"Language-Team: Bulgarian (https://www.transifex.com/telegram-purple-developers/teams/53149/bg/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=CHARSET\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: bg\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: ../telegram-base.c:500
msgid "Couldn't create group"
msgstr "Неуспешно създаване на група"
#: ../telegram-base.c:501
msgid "Please select at least one other user."
msgstr "Моля, изберете поне един друг потребител:"
#: ../telegram-base.c:555
msgid "Query Failed"
msgstr "Заявката беше неуспешна"
#: ../telegram-purple.c:162
msgid "Secret chat ready."
msgstr "Тайният разговор е готов."
#: ../telegram-purple.c:170
msgid "Secret chat terminated."
msgstr "Тайният разговор беше приключен."
#: ../telegram-purple.c:182
msgid "Telegram"
msgstr "Telegram"
#: ../telegram-purple.c:229
msgid "Message marked as read."
msgstr "Съобщението е отбелязано като прочетено."
#: ../telegram-purple.c:339
#, c-format
msgid "Invite link: %s"
msgstr "Връзка за покана: %s"
#. FIXME: Can TGLCHF_MODERATOR export links?
#: ../telegram-purple.c:350
msgid "Creating chat link failed"
msgstr "Създаването на връзка беше неуспешно"
#: ../telegram-purple.c:351
msgid "You need to be admin of the group to do that."
msgstr "Само администраторите на групата могат да правят това."
#: ../telegram-purple.c:416
msgid "Chat joined"
msgstr "Присъединихте се към разговора"
#: ../telegram-purple.c:417
msgid "Chat added to list of chat rooms."
msgstr "Разговорът беше добавен към списъка от стаи за разговори."
#: ../telegram-purple.c:443
msgid "Start secret chat..."
msgstr "Започване на таен разговор…"
#. Generate Public Link
#: ../telegram-purple.c:450
msgid "Invite users by link..."
msgstr "Покана на потребители чрез връзка…"
#. Delete self from chat
#: ../telegram-purple.c:458
msgid "Delete and exit..."
msgstr "Изтриване и изход…"
#: ../telegram-purple.c:546
#, c-format
msgid "Unable to sign on as %s: file (public key) not found."
msgstr "Неуспешно вписване като %s: файлът (публичният ключ) не беше открит."
#: ../telegram-purple.c:550
#, c-format
msgid ""
"Make sure telegram-purple is installed properly,\n"
"including the .tglpub file.\n"
"If you're running SELinux (e.g. when using Tails),\n"
"try 'make local_install', or simply copy\n"
"%1$s to %2$s."
msgstr ""
"Уверете се, че „telegram-purple“ е инсталирано правилно,\n"
"включително файлът „.tglpub“.\n"
"Ако използвате SELinux (наприбер при използване на „Tails“),\n"
"опитайте „make local_install“ или просто копирайте\n"
"%1$s в %2$s."
#: ../telegram-purple.c:572
#, c-format
msgid ""
"Unable to sign on as %s: problem in the underlying library 'tgl'. Please "
"submit a bug report with the debug log."
msgstr ""
"Неуспешно вписване като %s: има проблем с вътрешната библиотека „tgl“. Моля,"
" изпратете доклад за грешката, заедно с журнала."
#: ../telegram-purple.c:576
msgid "Problem in tgl"
msgstr "Проблем в „tgl“"
#. TRANSLATORS: Please fill in your own prefix!
#: ../telegram-purple.c:584
#, c-format
msgid ""
"Unable to sign on as %s: phone number lacks country prefix. Numbers must "
"start with the full international prefix code, e.g. +1 for USA."
msgstr ""
"Неуспешно вписване като %s: телефонният код не съдържа код на страната. "
"Номерата трябва да започват с пълния международен телефонен код на страната,"
" например +359 за България."
#: ../telegram-purple.c:589
msgid "Incomplete phone number"
msgstr "Непълен телефонен номер"
#: ../telegram-purple.c:642
msgid "Secret chat was already deleted"
msgstr "Тайният разговор вече е изтрит"
#: ../telegram-purple.c:644
msgid "Secret chat is not ready"
msgstr "Тайният разговор не е готов"
#: ../telegram-purple.c:652
msgid "Only the creator of a channel can post messages."
msgstr "Само създателят на канала може да публикува съобщения."
#: ../telegram-purple.c:695
msgid "Cannot invite buddy to chat"
msgstr "Неуспешно канене на приятел в разговора"
#: ../telegram-purple.c:696
msgid "Specified user does not exist."
msgstr "Посоченият потребител не съществува."
#: ../telegram-purple.c:709
msgid "phone no. (+ country prefix)"
msgstr "тел. номер (+ код на страната)"
#. Login
#: ../telegram-purple.c:817
msgid "Password (two factor authentication)"
msgstr "Парола (двустепенно удостоверяване)"
#: ../telegram-purple.c:822
msgid ""
"Fallback SMS verification\n"
"(Helps when not using Pidgin and you aren't being prompted for the code)"
msgstr ""
"Резервно удостоверяване чрез КС\n"
"(Помага, когато не използвате „Pidgin“ и от Вас не се изисква кода)"
#: ../telegram-purple.c:828
msgid "always"
msgstr "винаги"
#: ../telegram-purple.c:829
msgid "never"
msgstr "никога"
#: ../telegram-purple.c:830
msgid "ask"
msgstr "питане всеки път"
#: ../telegram-purple.c:832
msgid "Accept secret chats"
msgstr "Приемане на тайни разговори"
#: ../telegram-purple.c:836
msgid "Display buddies offline after (days)"
msgstr "Показване на приятелите извън линия след (брой дни)"
#: ../telegram-purple.c:840
msgid ""
"Don't fetch history older than (days)\n"
"(0 for unlimited)"
msgstr ""
"Да не се изтегля историята, по-стара от (брой дни)\n"
"(0 = неограничено)"
#. Media
#: ../telegram-purple.c:845
msgid "Autoload media size (kb)"
msgstr "Размер за авто. зареждане на медийни файлове (кбит)"
#. Chats
#: ../telegram-purple.c:850
msgid "Add all group chats to buddy list"
msgstr "Добавяне на всички групови разговори в списъка с приятели"
#. Read notifications
#: ../telegram-purple.c:855
msgid "Display notices of receipt"
msgstr "Показване на уведомления за получаване"
#: ../telegram-purple.c:859
msgid "Send notices of receipt when present"
msgstr "Изпращане на уведомления за получаване при присъствие"
#: ../telegram-purple.c:884
msgid "Telegram Protocol Plugin."
msgstr "Добавка за протокола „Telegram“."
#: ../tgp-msg.c:58
#, c-format
msgid "%2$s created chat %1$s."
msgstr "%2$s създаде разговор %1$s."
#: ../tgp-msg.c:61
#, c-format
msgid "%2$s changed title to %1$s."
msgstr "%2$s промени заглавието на „%1$s“."
#: ../tgp-msg.c:64
#, c-format
msgid "%s changed photo."
msgstr "%s промени снимката си."
#: ../tgp-msg.c:67
#, c-format
msgid "%s deleted photo."
msgstr "%s изтри снимка."
#: ../tgp-msg.c:75
#, c-format
msgid "%1$s added user %2$s by link."
msgstr "%1$s добави потребителя %2$s чрез връзка."
#: ../tgp-msg.c:90
#, c-format
msgid "%2$s added user %1$s."
msgstr "%2$s добави потребителя %1$s."
#: ../tgp-msg.c:114 ../tgp-msg.c:131
#, c-format
msgid "%2$s deleted user %1$s."
msgstr "%2$s изтри потребителя %1$s."
#: ../tgp-msg.c:138
#, c-format
msgid "%2$s set self destruction timer to %1$d second."
msgid_plural "%2$s set self destruction timer to %1$d seconds."
msgstr[0] "%2$s настрои брояч за самоунищожение на %1$d секунда."
msgstr[1] "%2$s настрои брояч за самоунищожение на %1$d секунди."
#: ../tgp-msg.c:144
#, c-format
msgid "%2$s marked %1$d message read."
msgid_plural "%2$s marked %1$d messages read."
msgstr[0] "%2$s отбеляза %1$d съобщение като прочетено."
msgstr[1] "%2$s отбеляза %1$d съобщения като прочетени."
#: ../tgp-msg.c:150
#, c-format
msgid "%2$s deleted %1$d message."
msgid_plural "%2$s deleted %1$d messages."
msgstr[0] "%2$s изтри %1$d съобщение."
msgstr[1] "%2$s изтри %1$d съобщения."
#: ../tgp-msg.c:156
#, c-format
msgid "%2$s made a screenshot of %1$d message."
msgid_plural "%2$s made a screenshot of %1$d messages."
msgstr[0] "%2$s направи снимка на %1$d съобщение."
msgstr[1] "%2$s направи снимка на %1$d съобщения."
#: ../tgp-msg.c:162
#, c-format
msgid "Channel %1$s created"
msgstr "Каналът „%1$s“ беше създаден"
#. FIXME: check if this makes sense
#: ../tgp-msg.c:165 ../tgp-chat.c:124 ../tgp-chat.c:576
msgid "Telegram Channels"
msgstr "Канали в Telegram"
#: ../tgp-msg.c:191
msgid "Sending message failed."
msgstr "Неуспешно изпращане на съобщението."
#: ../tgp-msg.c:253
msgid "Sending image failed."
msgstr "Неуспешно изпращане на изображениео."
#: ../tgp-msg.c:417
#, c-format
msgid "%s sent a sticker."
msgstr "%s изпрати стикер."
#: ../tgp-msg.c:463
msgid "failed loading message"
msgstr "неуспешно зареждане на съобщение"
#: ../tgp-msg.c:498
msgid "[animation]"
msgstr "[анимация]"
#: ../tgp-msg.c:515
msgid "[audio]"
msgstr "[звук]"
#: ../tgp-msg.c:515
msgid "[video]"
msgstr "[видео]"
#: ../tgp-msg.c:604
#, c-format
msgid "<b>Forwarded message from: %s</b><br>%s"
msgstr "<b>Препратено съобщение от: %s</b><br>%s"
#. FIXME: sometimes users aren't part of the response when receiving a
#. forwarded message
#: ../tgp-msg.c:607
#, c-format
msgid "<b>Forwarded message:</b><br>%s"
msgstr "<b>Препратено съобщение:</b><br>%s"
#: ../tgp-msg.c:720
msgid "loading document or picture failed"
msgstr "неуспешно зареждане на документ или изображение"
#: ../tgp-net.c:281
msgid "Cannot connect to main server"
msgstr "Неуспешно свързване с главния сървър"
#: ../tgp-net.c:322
msgid "Cannot connect to server: Ping timeout."
msgstr "Неуспешно свързване със сървъра. Изтече времето за изчакване."
#: ../tgp-net.c:365
msgid "Lost connection to the server..."
msgstr "Връзката със сървъра беше прекъсната…"
#: ../tgp-request.c:51
msgid ""
"Telegram wants to verify your identity. Please enter the login code that you"
" have received via SMS."
msgstr ""
"Telegram иска да потвърди самоличността Ви. Моля, въведете кода за влизане, "
"който трябва да сте получили чрез КС."
#: ../tgp-request.c:54
msgid "Login code"
msgstr "Код за влизане"
#: ../tgp-request.c:54
msgid "Enter login code"
msgstr "Въведете кода за влизане"
#: ../tgp-request.c:54
msgid "the code"
msgstr "кодът"
#: ../tgp-request.c:54 ../tgp-request.c:104 ../tgp-request.c:198
#: ../tgp-request.c:233 ../tgp-request.c:263
msgid "OK"
msgstr "Добре"
#: ../tgp-request.c:55 ../tgp-request.c:104 ../tgp-request.c:123
#: ../tgp-request.c:199 ../tgp-request.c:234 ../tgp-request.c:264
msgid "Cancel"
msgstr "Отказ"
#: ../tgp-request.c:95
msgid "Registration"
msgstr "Регистрация"
#: ../tgp-request.c:96
msgid "First name"
msgstr "Собствено име"
#: ../tgp-request.c:99
msgid "Last name"
msgstr "Фамилия"
#: ../tgp-request.c:103
msgid "Register"
msgstr "Регистриране"
#: ../tgp-request.c:103
msgid "Please register your phone number."
msgstr "Моля, регистрирайте телефонния си номер"
#. purple_request API not available
#: ../tgp-request.c:108
msgid ""
"Phone number is not registered. Please register your phone on a different "
"client."
msgstr ""
"Телефонният номер не е регистриран. Моля, регистрирайте телефона си чрез "
"друг клиент."
#: ../tgp-request.c:110
msgid "Not registered"
msgstr "Нерегистриран"
#: ../tgp-request.c:122
msgid "Password needed"
msgstr "Нужна е парола"
#: ../tgp-request.c:122
msgid "Enter password for two factor authentication"
msgstr "Въведете парола за двустепенно удостоверяване"
#: ../tgp-request.c:123
msgid "Ok"
msgstr "Добре"
#: ../tgp-request.c:125
msgid ""
"No password set for two factor authentication. Please enter it in the "
"extended settings."
msgstr ""
"Няма зададена парола за двустепенно удостоверяване. Моля, въведете я в "
"разширените настройки."
#: ../tgp-request.c:127
msgid "Password invalid"
msgstr "Паролата е грешна"
#: ../tgp-request.c:150
#, c-format
msgid "Accept secret chat '%s' on this device?"
msgstr "Приемане на тайния разговор „%s“ на това устройство?"
#: ../tgp-request.c:151
msgid "Secret chat"
msgstr "Таен разговор"
#: ../tgp-request.c:151
msgid ""
"Secret chats can only have one end point. If you accept a secret chat on "
"this device, its messages will not be available anywhere else. If you "
"decline, you can still accept the chat on other devices."
msgstr ""
"Тайните разговори могат да се провеждат само на едно устройство. Ако "
"приемете таен разговор на това устройство, той няма да бъде достъпен никъде "
"другаде. Ако откажете, ще можете да го приемете на друго устройство."
#: ../tgp-request.c:182
msgid ""
"Invite at least one additional user by specifying\n"
" their full name (autocompletion available).\n"
"You can add more users once the chat was created."
msgstr ""
"Поканете поне още един потребител, като посочите\n"
" пълното му име (разполагате с авт. допълване).\n"
"Можете да добавите повече потребители и след началото на разговора."
#: ../tgp-request.c:185 ../tgp-request.c:189 ../tgp-request.c:193
msgid "Username"
msgstr "Потребителско име"
#: ../tgp-request.c:198
msgid "Create group chat"
msgstr "Създаване на групов разговор"
#: ../tgp-request.c:198
msgid "Invite users"
msgstr "Канене на потребители"
#: ../tgp-request.c:217 ../tgp-request.c:232
msgid "Change password"
msgstr "Промяна на паролата"
#: ../tgp-request.c:219
msgid "Current"
msgstr "Текуща"
#: ../tgp-request.c:223 ../tgp-request.c:253
msgid "Password"
msgstr "Парола"
#: ../tgp-request.c:227 ../tgp-request.c:257
msgid "Confirm"
msgstr "Потвърждаване"
#: ../tgp-request.c:251 ../tgp-request.c:262
msgid "New password"
msgstr "Нова парола"
#. if we arrive here for the second time the specified phone number is not
#. valid. We do not
#. ask for the phone number directly, cause in that case the account would
#. still be created
#. named with the invalid phone number, even though the login will work
#: ../tgp-request.c:300
msgid "Invalid phone number"
msgstr "Грешен телефонен номер"
#: ../tgp-request.c:301
msgid ""
"Please enter only numbers in the international phone number format, a leading + following by the country prefix and the phone number.\n"
"Do not use any other special chars."
msgstr ""
"Моля, въвеждайте само цифри във формата за международен телефонен номер: знака +, следван от кода на страната и телефонния номер.\n"
"Не използвайте други специални знаци."
#: ../tgp-request.c:370
msgid "Leave Chat"
msgstr "Напускане на разговора"
#: ../tgp-request.c:372
msgid "Do you want to leave this chat permantently?"
msgstr "Наистина ли искате да напуснете този разговор завинаги?"
#: ../tgp-request.c:377
msgid "Abort Secret Chat"
msgstr "Край на тайния разговор"
#: ../tgp-request.c:379
msgid "Do you want to terminate this secret chat permantently?"
msgstr "Наистина ли искате да прекратите този таен разговор завинаги?"
#: ../tgp-request.c:384
msgid "Delete Contact"
msgstr "Изтриване на контакта"
#: ../tgp-request.c:386
msgid "Do you want to remove this user from your global contact list?"
msgstr ""
"Наистина ли искате да премахнете този потребител от общия си списък с "
"контакти?"
#: ../tgp-request.c:401
msgid "Leave Channel"
msgstr "Напускане на канала"
#: ../tgp-request.c:403
msgid "Do you want to leave this channel?"
msgstr "Наистина ли искате да напуснете този канал?"
#. This should be the language's timestamp format. This is preceded by a
#. colon.
#: ../tgp-utils.c:27
msgid "%d.%m.%Y %H:%M"
msgstr "%d.%m.%Y %H:%M"
#. This is preceded by a colon.
#: ../tgp-utils.c:48
msgid "recently"
msgstr "наскоро"
#. This is preceded by a colon.
#: ../tgp-utils.c:52
msgid "last week"
msgstr "последната седмица"
#. This is preceded by a colon.
#: ../tgp-utils.c:56
msgid "last month"
msgstr "последния месец"
#. This is preceded by a colon. It refers to a point on time.
#: ../tgp-utils.c:60
msgid "unknown"
msgstr "неизвестно"
#: ../tgp-chat.c:108 ../tgp-chat.c:582
msgid "Telegram Chats"
msgstr "Разговори в Telegram"
#: ../tgp-chat.c:113
msgid "You have already left this chat."
msgstr "Вече сте напуснали този разговор"
#: ../tgp-chat.c:224
msgid "Subject:"
msgstr "Тема:"
#: ../tgp-chat.c:230
msgid "Invite link:"
msgstr "Връзка за покана:"
#: ../tgp-chat.c:236
msgid "Chat ID:"
msgstr "Ид. на разговора:"
#: ../tgp-chat.c:342
msgid "Supergroup"
msgstr "Надгрупа"
#: ../tgp-chat.c:342
msgid "Channel"
msgstr "Канал"
#: ../tgp-chat.c:345
msgid "Group"
msgstr "Група"
#: ../tgp-chat.c:367
msgid "Users in chat"
msgstr "Потребители в разговора"
#: ../tgp-chat.c:370
msgid "Type"
msgstr "Вид"

616
po/cs_CZ.po Normal file
View file

@ -0,0 +1,616 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-08-31 22:53+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: Jiri Eischmann <jiri@eischmann.cz>, 2017\n"
"Language-Team: Czech (Czech Republic) (https://www.transifex.com/telegram-purple-developers/teams/53149/cs_CZ/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=CHARSET\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: cs_CZ\n"
"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
#: ../telegram-base.c:500
msgid "Couldn't create group"
msgstr "Nelze vytvořit skupinu"
#: ../telegram-base.c:501
msgid "Please select at least one other user."
msgstr "Prosím vyberte alespoň jednoho dalšího uživatele."
#: ../telegram-base.c:555
msgid "Query Failed"
msgstr "Dotaz selhal"
#: ../telegram-purple.c:162
msgid "Secret chat ready."
msgstr "Tajný chat připraven."
#: ../telegram-purple.c:170
msgid "Secret chat terminated."
msgstr "Tajný chat ukončen."
#: ../telegram-purple.c:182
msgid "Telegram"
msgstr "Telegram"
#: ../telegram-purple.c:229
msgid "Message marked as read."
msgstr "Zpráva označena jako přečtená."
#: ../telegram-purple.c:339
#, c-format
msgid "Invite link: %s"
msgstr "Odkaz pozvánky: %s"
#. FIXME: Can TGLCHF_MODERATOR export links?
#: ../telegram-purple.c:350
msgid "Creating chat link failed"
msgstr "Vytváření odkazu pro chat selhalo"
#: ../telegram-purple.c:351
msgid "You need to be admin of the group to do that."
msgstr "K tomuto úkonu potřebujete být administrátorem skupiny."
#: ../telegram-purple.c:416
msgid "Chat joined"
msgstr "Připojeno k chatu"
#: ../telegram-purple.c:417
msgid "Chat added to list of chat rooms."
msgstr "Chat přidán do seznamu chatovacích místností"
#: ../telegram-purple.c:443
msgid "Start secret chat..."
msgstr "Začít tajný chat..."
#. Generate Public Link
#: ../telegram-purple.c:450
msgid "Invite users by link..."
msgstr "Pozvat uživatele odkazem..."
#. Delete self from chat
#: ../telegram-purple.c:458
msgid "Delete and exit..."
msgstr "Smazat a ukončit..."
#: ../telegram-purple.c:546
#, c-format
msgid "Unable to sign on as %s: file (public key) not found."
msgstr "Nelze se přihlásit jako %s: soubor (veřejný klíč) nenalezen."
#: ../telegram-purple.c:550
#, c-format
msgid ""
"Make sure telegram-purple is installed properly,\n"
"including the .tglpub file.\n"
"If you're running SELinux (e.g. when using Tails),\n"
"try 'make local_install', or simply copy\n"
"%1$s to %2$s."
msgstr ""
"Ověřte, jestli je telegram-purple nainstalován správně\n"
"včetně souboru .tglpub.\n"
"Pokud používáte SELinux (například při použití Tails),\n"
"zkuste 'make local_install', nebo jen nakopírujte\n"
"%1$s do %2$s."
#: ../telegram-purple.c:572
#, c-format
msgid ""
"Unable to sign on as %s: problem in the underlying library 'tgl'. Please "
"submit a bug report with the debug log."
msgstr ""
"Nelze se přihlásit jako %s: problém v použité knihovně \"tgl\". Prosím "
"nahlaste chybu včetně chybového protokolu."
#: ../telegram-purple.c:576
msgid "Problem in tgl"
msgstr "Problém v tgl"
#. TRANSLATORS: Please fill in your own prefix!
#: ../telegram-purple.c:584
#, c-format
msgid ""
"Unable to sign on as %s: phone number lacks country prefix. Numbers must "
"start with the full international prefix code, e.g. +1 for USA."
msgstr ""
"Nelze se přihlásit jako %s: telefonnímu číslu chybí předčíslí země. Čísla "
"musí začínat s plným mezinárodním předčíslím, např. +420 pro Českou "
"republiku."
#: ../telegram-purple.c:589
msgid "Incomplete phone number"
msgstr "Nekompletní telefonní číslo"
#: ../telegram-purple.c:642
msgid "Secret chat was already deleted"
msgstr "Tajný chat byl již smazán"
#: ../telegram-purple.c:644
msgid "Secret chat is not ready"
msgstr "Tajný chat není připraven"
#: ../telegram-purple.c:652
msgid "Only the creator of a channel can post messages."
msgstr "Pouze tvůrce kanálu může zasílat zprávy."
#: ../telegram-purple.c:695
msgid "Cannot invite buddy to chat"
msgstr "Nelze pozvat kamaráda do chatu"
#: ../telegram-purple.c:696
msgid "Specified user does not exist."
msgstr "Zadaný uživatel neexistuje."
#: ../telegram-purple.c:709
msgid "phone no. (+ country prefix)"
msgstr "telefonní číslo (+ předčíslí země)"
#. Login
#: ../telegram-purple.c:817
msgid "Password (two factor authentication)"
msgstr "Heslo (dvoufaktorová autentizace)"
#: ../telegram-purple.c:822
msgid ""
"Fallback SMS verification\n"
"(Helps when not using Pidgin and you aren't being prompted for the code)"
msgstr ""
"Záložní ověřovací SMS\n"
"(Pomáhá, když nepoužíváte Pidgin a nejste vyzváni k zadání kódu)"
#: ../telegram-purple.c:828
msgid "always"
msgstr "vždy"
#: ../telegram-purple.c:829
msgid "never"
msgstr "nikdy"
#: ../telegram-purple.c:830
msgid "ask"
msgstr "zeptat se"
#: ../telegram-purple.c:832
msgid "Accept secret chats"
msgstr "Přijímat tajné chaty"
#: ../telegram-purple.c:836
msgid "Display buddies offline after (days)"
msgstr "Zobrazit odpojené kamarády po (dny)"
#: ../telegram-purple.c:840
msgid ""
"Don't fetch history older than (days)\n"
"(0 for unlimited)"
msgstr ""
"Nestahovat historii starší než (dny)\n"
"(0 pro neomezeně)"
#. Media
#: ../telegram-purple.c:845
msgid "Autoload media size (kb)"
msgstr "Velikost automaticky nahraných médií (kb)"
#. Chats
#: ../telegram-purple.c:850
msgid "Add all group chats to buddy list"
msgstr "Přidat všechny chatovací skupiny do seznamu kamarádů"
#. Read notifications
#: ../telegram-purple.c:855
msgid "Display notices of receipt"
msgstr "Zobrazit oznámení o doručení"
#: ../telegram-purple.c:859
msgid "Send notices of receipt when present"
msgstr "V přítomnosti zasílat oznámení o doručení"
#: ../telegram-purple.c:884
msgid "Telegram Protocol Plugin."
msgstr "Zásuvný modul protokolu Telegram."
#: ../tgp-msg.c:58
#, c-format
msgid "%2$s created chat %1$s."
msgstr "%2$s vytvořil(a) chat %1$s."
#: ../tgp-msg.c:61
#, c-format
msgid "%2$s changed title to %1$s."
msgstr "%2$s změnil(a) titulek na %1$s."
#: ../tgp-msg.c:64
#, c-format
msgid "%s changed photo."
msgstr "%s změnil(a) fotografii."
#: ../tgp-msg.c:67
#, c-format
msgid "%s deleted photo."
msgstr "%s smazal(a) fotografii."
#: ../tgp-msg.c:75
#, c-format
msgid "%1$s added user %2$s by link."
msgstr "%1$s přidal(a) uživatele %2$s odkazem."
#: ../tgp-msg.c:90
#, c-format
msgid "%2$s added user %1$s."
msgstr "%2$s přidal(a) uživatele %1$s."
#: ../tgp-msg.c:114 ../tgp-msg.c:131
#, c-format
msgid "%2$s deleted user %1$s."
msgstr "%2$s smazal(a) uživatele %1$s."
#: ../tgp-msg.c:138
#, c-format
msgid "%2$s set self destruction timer to %1$d second."
msgid_plural "%2$s set self destruction timer to %1$d seconds."
msgstr[0] "%2$s nastavil(a) sebedestrukční časovač na %1$d sekundu."
msgstr[1] "%2$s nastavil(a) sebedestrukční časovač na %1$d sekundy."
msgstr[2] "%2$s nastavil(a) sebedestrukční časovač na %1$d sekund."
#: ../tgp-msg.c:144
#, c-format
msgid "%2$s marked %1$d message read."
msgid_plural "%2$s marked %1$d messages read."
msgstr[0] "%2$s označil(a) %1$d zprávu jako přečtenou."
msgstr[1] "%2$s označil(a) %1$d zprávy jako přečtené."
msgstr[2] "%2$s označil(a) %1$d zpráv jako přečtené."
#: ../tgp-msg.c:150
#, c-format
msgid "%2$s deleted %1$d message."
msgid_plural "%2$s deleted %1$d messages."
msgstr[0] "%2$s smazal(a) %1$d zprávu."
msgstr[1] "%2$s smazal(a) %1$d zprávy."
msgstr[2] "%2$s smazal(a) %1$d zpráv."
#: ../tgp-msg.c:156
#, c-format
msgid "%2$s made a screenshot of %1$d message."
msgid_plural "%2$s made a screenshot of %1$d messages."
msgstr[0] "%2$s vytvořil(a) screenshot %1$d zprávy."
msgstr[1] "%2$s vytvořil(a) screenshot %1$d zpráv."
msgstr[2] "%2$s vytvořil(a) screenshot %1$d zpráv."
#: ../tgp-msg.c:162
#, c-format
msgid "Channel %1$s created"
msgstr "Kanál %1$s vytvořen"
#. FIXME: check if this makes sense
#: ../tgp-msg.c:165 ../tgp-chat.c:124 ../tgp-chat.c:576
msgid "Telegram Channels"
msgstr "Kanály Telegramu"
#: ../tgp-msg.c:191
msgid "Sending message failed."
msgstr "Odeslání zprávy selhalo."
#: ../tgp-msg.c:253
msgid "Sending image failed."
msgstr "Odeslání obrázku selhalo."
#: ../tgp-msg.c:417
#, c-format
msgid "%s sent a sticker."
msgstr "%s odeslal nálepku."
#: ../tgp-msg.c:463
msgid "failed loading message"
msgstr "selhalo načítání zprávy"
#: ../tgp-msg.c:498
msgid "[animation]"
msgstr "[animace]"
#: ../tgp-msg.c:515
msgid "[audio]"
msgstr "[audio]"
#: ../tgp-msg.c:515
msgid "[video]"
msgstr "[video]"
#: ../tgp-msg.c:604
#, c-format
msgid "<b>Forwarded message from: %s</b><br>%s"
msgstr "<b>Zpráva přeposlaná od:%s</b><br>%s"
#. FIXME: sometimes users aren't part of the response when receiving a
#. forwarded message
#: ../tgp-msg.c:607
#, c-format
msgid "<b>Forwarded message:</b><br>%s"
msgstr "<b>Přeposlaná zpráva:</b><br>%s"
#: ../tgp-msg.c:720
msgid "loading document or picture failed"
msgstr "nahrávání dokumentu nebo obrázku sehlalo"
#: ../tgp-net.c:281
msgid "Cannot connect to main server"
msgstr "Nelze se připojit k hlavnímu serveru"
#: ../tgp-net.c:322
msgid "Cannot connect to server: Ping timeout."
msgstr "Nelze se připojit k serveru: Vypršel časový limit pingu"
#: ../tgp-net.c:365
msgid "Lost connection to the server..."
msgstr "Ztraceno spojení se serverem..."
#: ../tgp-request.c:51
msgid ""
"Telegram wants to verify your identity. Please enter the login code that you"
" have received via SMS."
msgstr ""
"Telegram potřebuje ověřit identitu. Prosím zadejte přihlašovací kód, který "
"jste obdrželi v SMS."
#: ../tgp-request.c:54
msgid "Login code"
msgstr "Přihlašovací kód"
#: ../tgp-request.c:54
msgid "Enter login code"
msgstr "Zadejte přihlašovací kód"
#: ../tgp-request.c:54
msgid "the code"
msgstr "kód"
#: ../tgp-request.c:54 ../tgp-request.c:104 ../tgp-request.c:198
#: ../tgp-request.c:233 ../tgp-request.c:263
msgid "OK"
msgstr "OK"
#: ../tgp-request.c:55 ../tgp-request.c:104 ../tgp-request.c:123
#: ../tgp-request.c:199 ../tgp-request.c:234 ../tgp-request.c:264
msgid "Cancel"
msgstr "Zrušit"
#: ../tgp-request.c:95
msgid "Registration"
msgstr "Registrace"
#: ../tgp-request.c:96
msgid "First name"
msgstr "Jméno"
#: ../tgp-request.c:99
msgid "Last name"
msgstr "Příjmení"
#: ../tgp-request.c:103
msgid "Register"
msgstr "Registrovat"
#: ../tgp-request.c:103
msgid "Please register your phone number."
msgstr "Prosím zaregistrujte své telefonní číslo."
#. purple_request API not available
#: ../tgp-request.c:108
msgid ""
"Phone number is not registered. Please register your phone on a different "
"client."
msgstr ""
"Telefonní číslo není zaregistrované. Prosím zaregistrujte své telefonní "
"číslo v jiné aplikaci."
#: ../tgp-request.c:110
msgid "Not registered"
msgstr "Neregistrován"
#: ../tgp-request.c:122
msgid "Password needed"
msgstr "Vyžadováno heslo"
#: ../tgp-request.c:122
msgid "Enter password for two factor authentication"
msgstr "Zadejte heslo pro dvoufaktorovou autentizaci"
#: ../tgp-request.c:123
msgid "Ok"
msgstr "Ok"
#: ../tgp-request.c:125
msgid ""
"No password set for two factor authentication. Please enter it in the "
"extended settings."
msgstr ""
"Není zadáno heslo pro dvoufaktorovou autentizaci. Prosím zadejte jej v "
"pokročilém nastavení."
#: ../tgp-request.c:127
msgid "Password invalid"
msgstr "Neplatné heslo"
#: ../tgp-request.c:150
#, c-format
msgid "Accept secret chat '%s' on this device?"
msgstr "Přijmout tajný chat '%s' na tomto zařízení?"
#: ../tgp-request.c:151
msgid "Secret chat"
msgstr "Tajný chat"
#: ../tgp-request.c:151
msgid ""
"Secret chats can only have one end point. If you accept a secret chat on "
"this device, its messages will not be available anywhere else. If you "
"decline, you can still accept the chat on other devices."
msgstr ""
"Tajný chat může mít pouze jeden koncový bod. Pokud přijmete tajný chat na "
"tomto zařízení, zprávy nebudou dostupné nikde jinde. Pokud odmítnete, můžete"
" stále přijmout chat na jiném zařízení."
#: ../tgp-request.c:182
msgid ""
"Invite at least one additional user by specifying\n"
" their full name (autocompletion available).\n"
"You can add more users once the chat was created."
msgstr ""
"Pozvěte minimálně jednoho dalšího uživatele tím,\n"
"že zadáte jeho celé jméno (automatické doplňování dostupné).\n"
"Můžete přidat více uživatelů po té, co je chat vytvořen."
#: ../tgp-request.c:185 ../tgp-request.c:189 ../tgp-request.c:193
msgid "Username"
msgstr "Uživatelské jméno"
#: ../tgp-request.c:198
msgid "Create group chat"
msgstr "Vytvořit skupinový chat"
#: ../tgp-request.c:198
msgid "Invite users"
msgstr "Pozvat uživatele"
#: ../tgp-request.c:217 ../tgp-request.c:232
msgid "Change password"
msgstr "Změnit heslo"
#: ../tgp-request.c:219
msgid "Current"
msgstr "Aktuální"
#: ../tgp-request.c:223 ../tgp-request.c:253
msgid "Password"
msgstr "Heslo"
#: ../tgp-request.c:227 ../tgp-request.c:257
msgid "Confirm"
msgstr "Potvrdit"
#: ../tgp-request.c:251 ../tgp-request.c:262
msgid "New password"
msgstr "Nové heslo"
#. if we arrive here for the second time the specified phone number is not
#. valid. We do not
#. ask for the phone number directly, cause in that case the account would
#. still be created
#. named with the invalid phone number, even though the login will work
#: ../tgp-request.c:300
msgid "Invalid phone number"
msgstr "Neplatné telefonní číslo"
#: ../tgp-request.c:301
msgid ""
"Please enter only numbers in the international phone number format, a leading + following by the country prefix and the phone number.\n"
"Do not use any other special chars."
msgstr ""
"Prosím zadejte pouze čísla v mezinárodním telefonním formátu, počáteční + následované mezinárodním předčíslím a telefonním číslem.\n"
"Nepoužívejte žádné jiné speciální znaky."
#: ../tgp-request.c:370
msgid "Leave Chat"
msgstr "Opustit chat"
#: ../tgp-request.c:372
msgid "Do you want to leave this chat permantently?"
msgstr "Chcete tento chat opustit trvale?"
#: ../tgp-request.c:377
msgid "Abort Secret Chat"
msgstr "Ukončit tajný chat"
#: ../tgp-request.c:379
msgid "Do you want to terminate this secret chat permantently?"
msgstr "Chcete ukončit tento tajný chat trvale?"
#: ../tgp-request.c:384
msgid "Delete Contact"
msgstr "Smazat kontant"
#: ../tgp-request.c:386
msgid "Do you want to remove this user from your global contact list?"
msgstr "Chcete tohoto uživatele odstranit ze seznamu kontaktů?"
#: ../tgp-request.c:401
msgid "Leave Channel"
msgstr "Opustit kanál"
#: ../tgp-request.c:403
msgid "Do you want to leave this channel?"
msgstr "Chcete opustit tento kanál?"
#. This should be the language's timestamp format. This is preceded by a
#. colon.
#: ../tgp-utils.c:27
msgid "%d.%m.%Y %H:%M"
msgstr "%d.%m.%Y %H:%M"
#. This is preceded by a colon.
#: ../tgp-utils.c:48
msgid "recently"
msgstr "nedávno"
#. This is preceded by a colon.
#: ../tgp-utils.c:52
msgid "last week"
msgstr "poslední týden"
#. This is preceded by a colon.
#: ../tgp-utils.c:56
msgid "last month"
msgstr "poslední měsíc"
#. This is preceded by a colon. It refers to a point on time.
#: ../tgp-utils.c:60
msgid "unknown"
msgstr "neznámé"
#: ../tgp-chat.c:108 ../tgp-chat.c:582
msgid "Telegram Chats"
msgstr "Chaty Telegramu"
#: ../tgp-chat.c:113
msgid "You have already left this chat."
msgstr "Již jste tento chat opistili."
#: ../tgp-chat.c:224
msgid "Subject:"
msgstr "Předmět:"
#: ../tgp-chat.c:230
msgid "Invite link:"
msgstr "Odkaz pozvánky:"
#: ../tgp-chat.c:236
msgid "Chat ID:"
msgstr "ID Chatu:"
#: ../tgp-chat.c:342
msgid "Supergroup"
msgstr "Superskupina"
#: ../tgp-chat.c:342
msgid "Channel"
msgstr "Kanál"
#: ../tgp-chat.c:345
msgid "Group"
msgstr "Skupina"
#: ../tgp-chat.c:367
msgid "Users in chat"
msgstr "Uživatelé v chatu"
#: ../tgp-chat.c:370
msgid "Type"
msgstr "Typ"

588
po/da.po Normal file
View file

@ -0,0 +1,588 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-08-31 22:53+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: TitanusEramius <titanus@aptget.dk>, 2016\n"
"Language-Team: Danish (https://www.transifex.com/telegram-purple-developers/teams/53149/da/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=CHARSET\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: da\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: ../telegram-base.c:500
msgid "Couldn't create group"
msgstr "Kunne ikke lave gruppe"
#: ../telegram-base.c:501
msgid "Please select at least one other user."
msgstr "Vælg mindst én anden bruger."
#: ../telegram-base.c:555
msgid "Query Failed"
msgstr "Forespørgsel fejlede"
#: ../telegram-purple.c:162
msgid "Secret chat ready."
msgstr "Hemmelig chat klar."
#: ../telegram-purple.c:170
msgid "Secret chat terminated."
msgstr "Hemmelig chat afsluttet."
#: ../telegram-purple.c:182
msgid "Telegram"
msgstr "Telegram"
#: ../telegram-purple.c:229
msgid "Message marked as read."
msgstr "Besked markeret som læst."
#: ../telegram-purple.c:339
#, c-format
msgid "Invite link: %s"
msgstr "Invitationslink: %s"
#. FIXME: Can TGLCHF_MODERATOR export links?
#: ../telegram-purple.c:350
msgid "Creating chat link failed"
msgstr "Oprettelse af chatlink fejlede"
#: ../telegram-purple.c:351
msgid "You need to be admin of the group to do that."
msgstr ""
#: ../telegram-purple.c:416
msgid "Chat joined"
msgstr "Chat tilsluttet"
#: ../telegram-purple.c:417
msgid "Chat added to list of chat rooms."
msgstr "Chat tilføjet listen af chatrum."
#: ../telegram-purple.c:443
msgid "Start secret chat..."
msgstr "Start hemmelig chat..."
#. Generate Public Link
#: ../telegram-purple.c:450
msgid "Invite users by link..."
msgstr "Invitér brugere med link..."
#. Delete self from chat
#: ../telegram-purple.c:458
msgid "Delete and exit..."
msgstr "Slet og afslut..."
#: ../telegram-purple.c:546
#, c-format
msgid "Unable to sign on as %s: file (public key) not found."
msgstr ""
#: ../telegram-purple.c:550
#, c-format
msgid ""
"Make sure telegram-purple is installed properly,\n"
"including the .tglpub file.\n"
"If you're running SELinux (e.g. when using Tails),\n"
"try 'make local_install', or simply copy\n"
"%1$s to %2$s."
msgstr ""
#: ../telegram-purple.c:572
#, c-format
msgid ""
"Unable to sign on as %s: problem in the underlying library 'tgl'. Please "
"submit a bug report with the debug log."
msgstr ""
#: ../telegram-purple.c:576
msgid "Problem in tgl"
msgstr "Problem i tgl"
#. TRANSLATORS: Please fill in your own prefix!
#: ../telegram-purple.c:584
#, c-format
msgid ""
"Unable to sign on as %s: phone number lacks country prefix. Numbers must "
"start with the full international prefix code, e.g. +1 for USA."
msgstr ""
#: ../telegram-purple.c:589
msgid "Incomplete phone number"
msgstr "Ugyldigt telefonnummer"
#: ../telegram-purple.c:642
msgid "Secret chat was already deleted"
msgstr "Hemmelig chat er allerede slettet"
#: ../telegram-purple.c:644
msgid "Secret chat is not ready"
msgstr "Hemmelig chat er ikke klar"
#: ../telegram-purple.c:652
msgid "Only the creator of a channel can post messages."
msgstr "Kun den der opretter en kanal kan skrive beskeder."
#: ../telegram-purple.c:695
msgid "Cannot invite buddy to chat"
msgstr "Kan ikke invitere ven til chat"
#: ../telegram-purple.c:696
msgid "Specified user does not exist."
msgstr "Angivet bruger eksisterer ikke."
#: ../telegram-purple.c:709
msgid "phone no. (+ country prefix)"
msgstr "Telefon nr. (+ landekode)"
#. Login
#: ../telegram-purple.c:817
msgid "Password (two factor authentication)"
msgstr "Kodeord (to-vejs godkendelse)"
#: ../telegram-purple.c:822
msgid ""
"Fallback SMS verification\n"
"(Helps when not using Pidgin and you aren't being prompted for the code)"
msgstr ""
#: ../telegram-purple.c:828
msgid "always"
msgstr "altid"
#: ../telegram-purple.c:829
msgid "never"
msgstr "aldrig"
#: ../telegram-purple.c:830
msgid "ask"
msgstr "spørg"
#: ../telegram-purple.c:832
msgid "Accept secret chats"
msgstr "Acceptér hemmelige chats"
#: ../telegram-purple.c:836
msgid "Display buddies offline after (days)"
msgstr "Vis venner som offline efter (dage)"
#: ../telegram-purple.c:840
msgid ""
"Don't fetch history older than (days)\n"
"(0 for unlimited)"
msgstr ""
"Hent ikke historie ældre end (dage)\n"
"(0 for ubegrænset)"
#. Media
#: ../telegram-purple.c:845
msgid "Autoload media size (kb)"
msgstr ""
#. Chats
#: ../telegram-purple.c:850
msgid "Add all group chats to buddy list"
msgstr ""
#. Read notifications
#: ../telegram-purple.c:855
msgid "Display notices of receipt"
msgstr "Vis modtagelseskvittering"
#: ../telegram-purple.c:859
msgid "Send notices of receipt when present"
msgstr ""
#: ../telegram-purple.c:884
msgid "Telegram Protocol Plugin."
msgstr ""
#: ../tgp-msg.c:58
#, c-format
msgid "%2$s created chat %1$s."
msgstr "%2$s oprettede chat %1$s."
#: ../tgp-msg.c:61
#, c-format
msgid "%2$s changed title to %1$s."
msgstr "%2$s ændrede titel til %1$s."
#: ../tgp-msg.c:64
#, c-format
msgid "%s changed photo."
msgstr "%s ændrede foto."
#: ../tgp-msg.c:67
#, c-format
msgid "%s deleted photo."
msgstr "%s slettede foto."
#: ../tgp-msg.c:75
#, c-format
msgid "%1$s added user %2$s by link."
msgstr "%1$s tilføjede bruger %2$s med link."
#: ../tgp-msg.c:90
#, c-format
msgid "%2$s added user %1$s."
msgstr "%2$s tilføjede bruger %1$s."
#: ../tgp-msg.c:114 ../tgp-msg.c:131
#, c-format
msgid "%2$s deleted user %1$s."
msgstr "%2$s slettede bruger %1$s."
#: ../tgp-msg.c:138
#, c-format
msgid "%2$s set self destruction timer to %1$d second."
msgid_plural "%2$s set self destruction timer to %1$d seconds."
msgstr[0] ""
msgstr[1] ""
#: ../tgp-msg.c:144
#, c-format
msgid "%2$s marked %1$d message read."
msgid_plural "%2$s marked %1$d messages read."
msgstr[0] ""
msgstr[1] ""
#: ../tgp-msg.c:150
#, c-format
msgid "%2$s deleted %1$d message."
msgid_plural "%2$s deleted %1$d messages."
msgstr[0] ""
msgstr[1] ""
#: ../tgp-msg.c:156
#, c-format
msgid "%2$s made a screenshot of %1$d message."
msgid_plural "%2$s made a screenshot of %1$d messages."
msgstr[0] ""
msgstr[1] ""
#: ../tgp-msg.c:162
#, c-format
msgid "Channel %1$s created"
msgstr ""
#. FIXME: check if this makes sense
#: ../tgp-msg.c:165 ../tgp-chat.c:124 ../tgp-chat.c:576
msgid "Telegram Channels"
msgstr ""
#: ../tgp-msg.c:191
msgid "Sending message failed."
msgstr ""
#: ../tgp-msg.c:253
msgid "Sending image failed."
msgstr "Afsendelse af billede fejlede."
#: ../tgp-msg.c:417
#, c-format
msgid "%s sent a sticker."
msgstr ""
#: ../tgp-msg.c:463
msgid "failed loading message"
msgstr ""
#: ../tgp-msg.c:498
msgid "[animation]"
msgstr ""
#: ../tgp-msg.c:515
msgid "[audio]"
msgstr ""
#: ../tgp-msg.c:515
msgid "[video]"
msgstr ""
#: ../tgp-msg.c:604
#, c-format
msgid "<b>Forwarded message from: %s</b><br>%s"
msgstr ""
#. FIXME: sometimes users aren't part of the response when receiving a
#. forwarded message
#: ../tgp-msg.c:607
#, c-format
msgid "<b>Forwarded message:</b><br>%s"
msgstr ""
#: ../tgp-msg.c:720
msgid "loading document or picture failed"
msgstr ""
#: ../tgp-net.c:281
msgid "Cannot connect to main server"
msgstr ""
#: ../tgp-net.c:322
msgid "Cannot connect to server: Ping timeout."
msgstr ""
#: ../tgp-net.c:365
msgid "Lost connection to the server..."
msgstr ""
#: ../tgp-request.c:51
msgid ""
"Telegram wants to verify your identity. Please enter the login code that you"
" have received via SMS."
msgstr ""
#: ../tgp-request.c:54
msgid "Login code"
msgstr "Log ind kode"
#: ../tgp-request.c:54
msgid "Enter login code"
msgstr "Indtast log ind kode"
#: ../tgp-request.c:54
msgid "the code"
msgstr "koden"
#: ../tgp-request.c:54 ../tgp-request.c:104 ../tgp-request.c:198
#: ../tgp-request.c:233 ../tgp-request.c:263
msgid "OK"
msgstr "OK"
#: ../tgp-request.c:55 ../tgp-request.c:104 ../tgp-request.c:123
#: ../tgp-request.c:199 ../tgp-request.c:234 ../tgp-request.c:264
msgid "Cancel"
msgstr "Afbryd"
#: ../tgp-request.c:95
msgid "Registration"
msgstr "Registrering"
#: ../tgp-request.c:96
msgid "First name"
msgstr "Fornavn"
#: ../tgp-request.c:99
msgid "Last name"
msgstr "Efternavn"
#: ../tgp-request.c:103
msgid "Register"
msgstr "Registrér"
#: ../tgp-request.c:103
msgid "Please register your phone number."
msgstr "Registrér venligst dit telefonnummer"
#. purple_request API not available
#: ../tgp-request.c:108
msgid ""
"Phone number is not registered. Please register your phone on a different "
"client."
msgstr ""
#: ../tgp-request.c:110
msgid "Not registered"
msgstr ""
#: ../tgp-request.c:122
msgid "Password needed"
msgstr ""
#: ../tgp-request.c:122
msgid "Enter password for two factor authentication"
msgstr "Indtast kodeord til to-vejs godkendelse"
#: ../tgp-request.c:123
msgid "Ok"
msgstr ""
#: ../tgp-request.c:125
msgid ""
"No password set for two factor authentication. Please enter it in the "
"extended settings."
msgstr ""
"Intet kodeord sat til to-vejs godkendelse. Indtast det venligst i de "
"udvidede indstillinger."
#: ../tgp-request.c:127
msgid "Password invalid"
msgstr "Ugyldigt kodeord"
#: ../tgp-request.c:150
#, c-format
msgid "Accept secret chat '%s' on this device?"
msgstr ""
#: ../tgp-request.c:151
msgid "Secret chat"
msgstr ""
#: ../tgp-request.c:151
msgid ""
"Secret chats can only have one end point. If you accept a secret chat on "
"this device, its messages will not be available anywhere else. If you "
"decline, you can still accept the chat on other devices."
msgstr ""
#: ../tgp-request.c:182
msgid ""
"Invite at least one additional user by specifying\n"
" their full name (autocompletion available).\n"
"You can add more users once the chat was created."
msgstr ""
#: ../tgp-request.c:185 ../tgp-request.c:189 ../tgp-request.c:193
msgid "Username"
msgstr "Brugernavn"
#: ../tgp-request.c:198
msgid "Create group chat"
msgstr "Lav gruppechat"
#: ../tgp-request.c:198
msgid "Invite users"
msgstr "Invitér brugere"
#: ../tgp-request.c:217 ../tgp-request.c:232
msgid "Change password"
msgstr ""
#: ../tgp-request.c:219
msgid "Current"
msgstr ""
#: ../tgp-request.c:223 ../tgp-request.c:253
msgid "Password"
msgstr "Kodeord"
#: ../tgp-request.c:227 ../tgp-request.c:257
msgid "Confirm"
msgstr ""
#: ../tgp-request.c:251 ../tgp-request.c:262
msgid "New password"
msgstr ""
#. if we arrive here for the second time the specified phone number is not
#. valid. We do not
#. ask for the phone number directly, cause in that case the account would
#. still be created
#. named with the invalid phone number, even though the login will work
#: ../tgp-request.c:300
msgid "Invalid phone number"
msgstr "Ugyldigt telefonnummer"
#: ../tgp-request.c:301
msgid ""
"Please enter only numbers in the international phone number format, a leading + following by the country prefix and the phone number.\n"
"Do not use any other special chars."
msgstr ""
#: ../tgp-request.c:370
msgid "Leave Chat"
msgstr ""
#: ../tgp-request.c:372
msgid "Do you want to leave this chat permantently?"
msgstr ""
#: ../tgp-request.c:377
msgid "Abort Secret Chat"
msgstr ""
#: ../tgp-request.c:379
msgid "Do you want to terminate this secret chat permantently?"
msgstr ""
#: ../tgp-request.c:384
msgid "Delete Contact"
msgstr ""
#: ../tgp-request.c:386
msgid "Do you want to remove this user from your global contact list?"
msgstr ""
#: ../tgp-request.c:401
msgid "Leave Channel"
msgstr ""
#: ../tgp-request.c:403
msgid "Do you want to leave this channel?"
msgstr ""
#. This should be the language's timestamp format. This is preceded by a
#. colon.
#: ../tgp-utils.c:27
msgid "%d.%m.%Y %H:%M"
msgstr "%d.%m.%Y %H:%M"
#. This is preceded by a colon.
#: ../tgp-utils.c:48
msgid "recently"
msgstr "for nyligt"
#. This is preceded by a colon.
#: ../tgp-utils.c:52
msgid "last week"
msgstr "sidste uge"
#. This is preceded by a colon.
#: ../tgp-utils.c:56
msgid "last month"
msgstr "sidste måned"
#. This is preceded by a colon. It refers to a point on time.
#: ../tgp-utils.c:60
msgid "unknown"
msgstr "ukendt"
#: ../tgp-chat.c:108 ../tgp-chat.c:582
msgid "Telegram Chats"
msgstr ""
#: ../tgp-chat.c:113
msgid "You have already left this chat."
msgstr "Du har allerede forladt denne chat."
#: ../tgp-chat.c:224
msgid "Subject:"
msgstr "Emne:"
#: ../tgp-chat.c:230
msgid "Invite link:"
msgstr "Invitationslink:"
#: ../tgp-chat.c:236
msgid "Chat ID:"
msgstr "Chat ID:"
#: ../tgp-chat.c:342
msgid "Supergroup"
msgstr ""
#: ../tgp-chat.c:342
msgid "Channel"
msgstr ""
#: ../tgp-chat.c:345
msgid "Group"
msgstr ""
#: ../tgp-chat.c:367
msgid "Users in chat"
msgstr ""
#: ../tgp-chat.c:370
msgid "Type"
msgstr ""

617
po/de_DE.po Normal file
View file

@ -0,0 +1,617 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-08-31 22:53+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: Ben Wiederhake <BenWiederhake.GitHub@gmx.de>, 2016\n"
"Language-Team: German (Germany) (https://www.transifex.com/telegram-purple-developers/teams/53149/de_DE/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=CHARSET\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: de_DE\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: ../telegram-base.c:500
msgid "Couldn't create group"
msgstr "Konnte Gruppe nicht erstellen."
#: ../telegram-base.c:501
msgid "Please select at least one other user."
msgstr "Wählen Sie mindestens einen weiteren Benutzer."
#: ../telegram-base.c:555
msgid "Query Failed"
msgstr "Anfrage fehlgeschlagen"
#: ../telegram-purple.c:162
msgid "Secret chat ready."
msgstr "Geheimer Chat ist bereit."
#: ../telegram-purple.c:170
msgid "Secret chat terminated."
msgstr "Geheimer Chat wurde beendet."
#: ../telegram-purple.c:182
msgid "Telegram"
msgstr "Telegram"
#: ../telegram-purple.c:229
msgid "Message marked as read."
msgstr "Nachricht als gelesen markiert."
#: ../telegram-purple.c:339
#, c-format
msgid "Invite link: %s"
msgstr "Einladungslink: %s"
#. FIXME: Can TGLCHF_MODERATOR export links?
#: ../telegram-purple.c:350
msgid "Creating chat link failed"
msgstr "Konnte keinen Link zum Chat erstellen"
#: ../telegram-purple.c:351
msgid "You need to be admin of the group to do that."
msgstr "Sie müssen Gruppenadmin sein, um das zu tun."
#: ../telegram-purple.c:416
msgid "Chat joined"
msgstr "Chat beigetreten"
#: ../telegram-purple.c:417
msgid "Chat added to list of chat rooms."
msgstr "Chat der Liste von Chat-Räumen hinzugefügt."
#: ../telegram-purple.c:443
msgid "Start secret chat..."
msgstr "Beginne geheimen Chat ..."
#. Generate Public Link
#: ../telegram-purple.c:450
msgid "Invite users by link..."
msgstr "Nutzer per Link einladen ..."
#. Delete self from chat
#: ../telegram-purple.c:458
msgid "Delete and exit..."
msgstr "Löschen und verlassen ..."
#: ../telegram-purple.c:546
#, c-format
msgid "Unable to sign on as %s: file (public key) not found."
msgstr ""
"Konnte nicht als %s einloggen: Datei (öffentlichen Schlüssel) nicht gefunden"
#: ../telegram-purple.c:550
#, c-format
msgid ""
"Make sure telegram-purple is installed properly,\n"
"including the .tglpub file.\n"
"If you're running SELinux (e.g. when using Tails),\n"
"try 'make local_install', or simply copy\n"
"%1$s to %2$s."
msgstr ""
"Stellen Sie eine korrekte Installation sicher,\n"
"inklusive der .tglpub-Datei.\n"
"Falls Sie SELinux benutzen (z.B. innerhalb von Tails),\n"
"versuchen Sie 'make local_install', oder kopieren Sie einfach\n"
"%1$s nach %2$s."
#: ../telegram-purple.c:572
#, c-format
msgid ""
"Unable to sign on as %s: problem in the underlying library 'tgl'. Please "
"submit a bug report with the debug log."
msgstr ""
"Konnte nicht als %s einloggen: Problem in der Bibliothek 'tgl'. Bitte "
"erstelle einen Bigreport mit Debug-Log."
#: ../telegram-purple.c:576
msgid "Problem in tgl"
msgstr "Problem in tgl"
#. TRANSLATORS: Please fill in your own prefix!
#: ../telegram-purple.c:584
#, c-format
msgid ""
"Unable to sign on as %s: phone number lacks country prefix. Numbers must "
"start with the full international prefix code, e.g. +1 for USA."
msgstr ""
"Konnte nicht als %s einloggen: Telefonnummer hat kein Präfix. Telefonnummern"
" müssen mit dem vollen internationalen Präfix-Code starten, z.B. +49 für "
"Deutschland."
#: ../telegram-purple.c:589
msgid "Incomplete phone number"
msgstr "Unvollständige Telefonnummer"
#: ../telegram-purple.c:642
msgid "Secret chat was already deleted"
msgstr "Geheimer Chat wurde bereits gelöscht."
#: ../telegram-purple.c:644
msgid "Secret chat is not ready"
msgstr "Geheimer Chat ist noch nicht bereit."
#: ../telegram-purple.c:652
msgid "Only the creator of a channel can post messages."
msgstr "Nur der Ersteller eines Kanals kann Nachrichten senden."
#: ../telegram-purple.c:695
msgid "Cannot invite buddy to chat"
msgstr "Kann den Freund nicht zum Chat einladen"
#: ../telegram-purple.c:696
msgid "Specified user does not exist."
msgstr "Angegebener Benutzer existiert nicht."
#: ../telegram-purple.c:709
msgid "phone no. (+ country prefix)"
msgstr "Telefonnummer (+ Länder-Präfix)"
#. Login
#: ../telegram-purple.c:817
msgid "Password (two factor authentication)"
msgstr "Passwort (Zwei-Faktor-Authentifizierung)"
#: ../telegram-purple.c:822
msgid ""
"Fallback SMS verification\n"
"(Helps when not using Pidgin and you aren't being prompted for the code)"
msgstr ""
"Ausweich SMS-Verifizierung\n"
"(Hilfreich wenn Sie nicht Pidgin verwenden, und die Frage\n"
"nach dem SMS-Code aus bleibt)"
#: ../telegram-purple.c:828
msgid "always"
msgstr "immer"
#: ../telegram-purple.c:829
msgid "never"
msgstr "nie"
#: ../telegram-purple.c:830
msgid "ask"
msgstr "nachfragen"
#: ../telegram-purple.c:832
msgid "Accept secret chats"
msgstr "Geheime Chats akzeptieren"
#: ../telegram-purple.c:836
msgid "Display buddies offline after (days)"
msgstr "Freunde als offline anzeigen nach (Tage)"
#: ../telegram-purple.c:840
msgid ""
"Don't fetch history older than (days)\n"
"(0 for unlimited)"
msgstr ""
"Abrufen des Verlaufs begrenzen auf (Tage)\n"
"(0 für unbegrenzt)"
#. Media
#: ../telegram-purple.c:845
msgid "Autoload media size (kb)"
msgstr "Lade automatisch ab Größe (KB)"
#. Chats
#: ../telegram-purple.c:850
msgid "Add all group chats to buddy list"
msgstr "Alle Gruppenchats in die Freundesliste einfügen"
#. Read notifications
#: ../telegram-purple.c:855
msgid "Display notices of receipt"
msgstr "Empfangsbestätigungen anzeigen"
#: ../telegram-purple.c:859
msgid "Send notices of receipt when present"
msgstr "Empfangsbestätigungen senden wenn anwesend"
#: ../telegram-purple.c:884
msgid "Telegram Protocol Plugin."
msgstr "Plugin für das Telegram Protokoll."
#: ../tgp-msg.c:58
#, c-format
msgid "%2$s created chat %1$s."
msgstr "%2$s hat den Chat %1$s erstellt."
#: ../tgp-msg.c:61
#, c-format
msgid "%2$s changed title to %1$s."
msgstr "%2$s hat den Titel zu %1$s geändert."
#: ../tgp-msg.c:64
#, c-format
msgid "%s changed photo."
msgstr "%s hat das Photo geändert."
#: ../tgp-msg.c:67
#, c-format
msgid "%s deleted photo."
msgstr "%s hat das Photo gelöscht."
#: ../tgp-msg.c:75
#, c-format
msgid "%1$s added user %2$s by link."
msgstr "%1$s fügte Benutzer %2$s per Link hinzu."
#: ../tgp-msg.c:90
#, c-format
msgid "%2$s added user %1$s."
msgstr "%2$s hat den Nutzer %1$s hinzufügt."
#: ../tgp-msg.c:114 ../tgp-msg.c:131
#, c-format
msgid "%2$s deleted user %1$s."
msgstr "%2$s entfernte Benutzer %1$s."
#: ../tgp-msg.c:138
#, c-format
msgid "%2$s set self destruction timer to %1$d second."
msgid_plural "%2$s set self destruction timer to %1$d seconds."
msgstr[0] "%2$s setzte Selbstzerstörungs-Timer auf %1$d Sekunde."
msgstr[1] "%2$s setzte Selbstzerstörungs-Timer auf %1$d Sekunden."
#: ../tgp-msg.c:144
#, c-format
msgid "%2$s marked %1$d message read."
msgid_plural "%2$s marked %1$d messages read."
msgstr[0] "%2$s markierte %1$d Nachricht als gelesen."
msgstr[1] "%2$s markierte %1$d Nachrichten als gelesen."
#: ../tgp-msg.c:150
#, c-format
msgid "%2$s deleted %1$d message."
msgid_plural "%2$s deleted %1$d messages."
msgstr[0] "%2$s entfernte %1$d Nachricht."
msgstr[1] "%2$s entfernte %1$d Nachrichten."
#: ../tgp-msg.c:156
#, c-format
msgid "%2$s made a screenshot of %1$d message."
msgid_plural "%2$s made a screenshot of %1$d messages."
msgstr[0] "%2$s machte einen Screenshot von %1$d Nachricht."
msgstr[1] "%2$s machte einen Screenshot von %1$d Nachrichten."
#: ../tgp-msg.c:162
#, c-format
msgid "Channel %1$s created"
msgstr "Kanal %1$s erstellt"
#. FIXME: check if this makes sense
#: ../tgp-msg.c:165 ../tgp-chat.c:124 ../tgp-chat.c:576
msgid "Telegram Channels"
msgstr "Telegram Kanäle"
#: ../tgp-msg.c:191
msgid "Sending message failed."
msgstr "Absenden der Nachricht fehlgeschlagen."
#: ../tgp-msg.c:253
msgid "Sending image failed."
msgstr "Absenden des Bilds fehlgeschlagen."
#: ../tgp-msg.c:417
#, c-format
msgid "%s sent a sticker."
msgstr "%s hat einen Sticker gesendet."
#: ../tgp-msg.c:463
msgid "failed loading message"
msgstr "konnte Nachricht nicht laden."
#: ../tgp-msg.c:498
msgid "[animation]"
msgstr "[Animation]"
#: ../tgp-msg.c:515
msgid "[audio]"
msgstr "[Audio]"
#: ../tgp-msg.c:515
msgid "[video]"
msgstr "[Video]"
#: ../tgp-msg.c:604
#, c-format
msgid "<b>Forwarded message from: %s</b><br>%s"
msgstr "<b>Weitergeleitet von: %s</b> %s"
#. FIXME: sometimes users aren't part of the response when receiving a
#. forwarded message
#: ../tgp-msg.c:607
#, c-format
msgid "<b>Forwarded message:</b><br>%s"
msgstr "<b>Weitergeleitete Nachricht:</b> %s"
#: ../tgp-msg.c:720
msgid "loading document or picture failed"
msgstr "konnte Dokument oder Datei nicht laden"
#: ../tgp-net.c:281
msgid "Cannot connect to main server"
msgstr "Keine Verbindung zum Haupt-Server"
#: ../tgp-net.c:322
msgid "Cannot connect to server: Ping timeout."
msgstr "Keine Verbindung zum Server: Zeitüberschreitung"
#: ../tgp-net.c:365
msgid "Lost connection to the server..."
msgstr "Verbindung zum Server verloren ..."
#: ../tgp-request.c:51
msgid ""
"Telegram wants to verify your identity. Please enter the login code that you"
" have received via SMS."
msgstr ""
"Telegram möchte Ihre Identität prüfen. Bitte geben Sie den Login-Code ein, "
"den Sie per SMS erhalten haben."
#: ../tgp-request.c:54
msgid "Login code"
msgstr "Login-Code"
#: ../tgp-request.c:54
msgid "Enter login code"
msgstr "Login-Code eingeben"
#: ../tgp-request.c:54
msgid "the code"
msgstr "der Login-Code"
#: ../tgp-request.c:54 ../tgp-request.c:104 ../tgp-request.c:198
#: ../tgp-request.c:233 ../tgp-request.c:263
msgid "OK"
msgstr "Ok"
#: ../tgp-request.c:55 ../tgp-request.c:104 ../tgp-request.c:123
#: ../tgp-request.c:199 ../tgp-request.c:234 ../tgp-request.c:264
msgid "Cancel"
msgstr "Abbrechen"
#: ../tgp-request.c:95
msgid "Registration"
msgstr "Anmeldung"
#: ../tgp-request.c:96
msgid "First name"
msgstr "Vorname"
#: ../tgp-request.c:99
msgid "Last name"
msgstr "Nachname"
#: ../tgp-request.c:103
msgid "Register"
msgstr "Anmelden"
#: ../tgp-request.c:103
msgid "Please register your phone number."
msgstr "Bitte registriere deine Telefonnummer."
#. purple_request API not available
#: ../tgp-request.c:108
msgid ""
"Phone number is not registered. Please register your phone on a different "
"client."
msgstr ""
"Telefonnummer wurde noch nicht bei Telegram registriert. Bitte registrieren "
"Sie Ihre Telefonnummer mit einem anderen Client."
#: ../tgp-request.c:110
msgid "Not registered"
msgstr "Nicht registriert"
#: ../tgp-request.c:122
msgid "Password needed"
msgstr "Passwort benötigt"
#: ../tgp-request.c:122
msgid "Enter password for two factor authentication"
msgstr "Passwort für die Zwei-Faktor-Authentifizierung angeben"
#: ../tgp-request.c:123
msgid "Ok"
msgstr "Ok"
#: ../tgp-request.c:125
msgid ""
"No password set for two factor authentication. Please enter it in the "
"extended settings."
msgstr ""
"Kein Passwort für die Zwei-Faktor-Authentifizierung gesetzt, bitte\n"
"spezifizieren Sie dies in den erweiterten Einstellungen."
#: ../tgp-request.c:127
msgid "Password invalid"
msgstr "Passwort ungültig"
#: ../tgp-request.c:150
#, c-format
msgid "Accept secret chat '%s' on this device?"
msgstr "Geheimen Chat '%s' auf diesem Gerät akzeptieren?"
#: ../tgp-request.c:151
msgid "Secret chat"
msgstr "Geheimer Chat"
#: ../tgp-request.c:151
msgid ""
"Secret chats can only have one end point. If you accept a secret chat on "
"this device, its messages will not be available anywhere else. If you "
"decline, you can still accept the chat on other devices."
msgstr ""
"Geheime Chats können nur einen Endpunkt haben. Wenn du den geheimen Chat auf"
" diesem Geräte akzeptierst werden die Nachrichten nirgendwo anders verfügbar"
" sein. Wenn du ablehnst kannst du den Chat immernoch auf anderen Geräten "
"akzeptieren."
#: ../tgp-request.c:182
msgid ""
"Invite at least one additional user by specifying\n"
" their full name (autocompletion available).\n"
"You can add more users once the chat was created."
msgstr ""
"Lade noch mindestens einen zusätzlichen Benutzer\n"
"durch Eingabe des vollständigen Namens ein\n"
"(Autovervollständigung verfügbar).\n"
"Sie können später weitere Nutzer einladen, sobald\n"
"der Chat erstellt wurde."
#: ../tgp-request.c:185 ../tgp-request.c:189 ../tgp-request.c:193
msgid "Username"
msgstr "Benutzername"
#: ../tgp-request.c:198
msgid "Create group chat"
msgstr "Gruppenchat erstellen"
#: ../tgp-request.c:198
msgid "Invite users"
msgstr "Benutzer einladen"
#: ../tgp-request.c:217 ../tgp-request.c:232
msgid "Change password"
msgstr "Passwort ändern"
#: ../tgp-request.c:219
msgid "Current"
msgstr "Momentan"
#: ../tgp-request.c:223 ../tgp-request.c:253
msgid "Password"
msgstr "Passwort"
#: ../tgp-request.c:227 ../tgp-request.c:257
msgid "Confirm"
msgstr "Bestätigen"
#: ../tgp-request.c:251 ../tgp-request.c:262
msgid "New password"
msgstr "Neues Passwort"
#. if we arrive here for the second time the specified phone number is not
#. valid. We do not
#. ask for the phone number directly, cause in that case the account would
#. still be created
#. named with the invalid phone number, even though the login will work
#: ../tgp-request.c:300
msgid "Invalid phone number"
msgstr "Ungültige Telefonnummer"
#: ../tgp-request.c:301
msgid ""
"Please enter only numbers in the international phone number format, a leading + following by the country prefix and the phone number.\n"
"Do not use any other special chars."
msgstr ""
"Bitte geben Sie Telefonnummern im internationalen Format ein, bestehend aus einem führenden + gefolgt vom Länderpräfix\n"
"und der Rufnummer. Verwenden Sie keine anderen Sonderzeichen."
#: ../tgp-request.c:370
msgid "Leave Chat"
msgstr "Chat verlassen"
#: ../tgp-request.c:372
msgid "Do you want to leave this chat permantently?"
msgstr "Möchten Sie diesen Chat dauerhaft verlassen?"
#: ../tgp-request.c:377
msgid "Abort Secret Chat"
msgstr "Geheimen Chat abbrechen"
#: ../tgp-request.c:379
msgid "Do you want to terminate this secret chat permantently?"
msgstr "Möchten Sie diesen geheimen Chat dauerhaft verlassen?"
#: ../tgp-request.c:384
msgid "Delete Contact"
msgstr "Kontakt löschen"
#: ../tgp-request.c:386
msgid "Do you want to remove this user from your global contact list?"
msgstr "Möchten Sie diesen Kontakt global löschen?"
#: ../tgp-request.c:401
msgid "Leave Channel"
msgstr "Kanal verlassen"
#: ../tgp-request.c:403
msgid "Do you want to leave this channel?"
msgstr "Möchten Sie diesen Kanal dauerhaft verlassen?"
#. This should be the language's timestamp format. This is preceded by a
#. colon.
#: ../tgp-utils.c:27
msgid "%d.%m.%Y %H:%M"
msgstr "%d.%m.%Y %H:%M"
#. This is preceded by a colon.
#: ../tgp-utils.c:48
msgid "recently"
msgstr "Kürzlich"
#. This is preceded by a colon.
#: ../tgp-utils.c:52
msgid "last week"
msgstr "Letzte Woche"
#. This is preceded by a colon.
#: ../tgp-utils.c:56
msgid "last month"
msgstr "Letzten Monat"
#. This is preceded by a colon. It refers to a point on time.
#: ../tgp-utils.c:60
msgid "unknown"
msgstr "Unbekannt"
#: ../tgp-chat.c:108 ../tgp-chat.c:582
msgid "Telegram Chats"
msgstr "Telegram Unterhaltugen"
#: ../tgp-chat.c:113
msgid "You have already left this chat."
msgstr "Du hast diesen Chat bereits verlassen."
#: ../tgp-chat.c:224
msgid "Subject:"
msgstr "Thema:"
#: ../tgp-chat.c:230
msgid "Invite link:"
msgstr "Einladungslink:"
#: ../tgp-chat.c:236
msgid "Chat ID:"
msgstr "Chat ID:"
#: ../tgp-chat.c:342
msgid "Supergroup"
msgstr "Über-Gruppe"
#: ../tgp-chat.c:342
msgid "Channel"
msgstr "Kanal"
#: ../tgp-chat.c:345
msgid "Group"
msgstr "Gruppe"
#: ../tgp-chat.c:367
msgid "Users in chat"
msgstr "Benutzer im Chat"
#: ../tgp-chat.c:370
msgid "Type"
msgstr "Typ"

615
po/es.po Normal file
View file

@ -0,0 +1,615 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-08-31 22:53+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: aguador <aguador@openmailbox.org>, 2017\n"
"Language-Team: Spanish (https://www.transifex.com/telegram-purple-developers/teams/53149/es/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=CHARSET\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: es\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: ../telegram-base.c:500
msgid "Couldn't create group"
msgstr "No se pudo crear el grupo"
#: ../telegram-base.c:501
msgid "Please select at least one other user."
msgstr "Por favor, seleccioná al menos otro usuario."
#: ../telegram-base.c:555
msgid "Query Failed"
msgstr "Falló la consulta"
#: ../telegram-purple.c:162
msgid "Secret chat ready."
msgstr "Conversación secreta lista."
#: ../telegram-purple.c:170
msgid "Secret chat terminated."
msgstr "Finalizó la conversación secreta."
#: ../telegram-purple.c:182
msgid "Telegram"
msgstr "Telegram"
#: ../telegram-purple.c:229
msgid "Message marked as read."
msgstr "Mensaje marcado como leído."
#: ../telegram-purple.c:339
#, c-format
msgid "Invite link: %s"
msgstr "Enlace de invitación: %s"
#. FIXME: Can TGLCHF_MODERATOR export links?
#: ../telegram-purple.c:350
msgid "Creating chat link failed"
msgstr "Falló la creación del enlace de converesación"
#: ../telegram-purple.c:351
msgid "You need to be admin of the group to do that."
msgstr "Necesite ser administrador del grupo para hacer eso."
#: ../telegram-purple.c:416
msgid "Chat joined"
msgstr "Unido a la conversación"
#: ../telegram-purple.c:417
msgid "Chat added to list of chat rooms."
msgstr "Conversación agregada a la lista de salas de conversaciones."
#: ../telegram-purple.c:443
msgid "Start secret chat..."
msgstr "Iniciar conversación secreta..."
#. Generate Public Link
#: ../telegram-purple.c:450
msgid "Invite users by link..."
msgstr "Invitar a usuarios por enlace..."
#. Delete self from chat
#: ../telegram-purple.c:458
msgid "Delete and exit..."
msgstr "Eliminar y salir..."
#: ../telegram-purple.c:546
#, c-format
msgid "Unable to sign on as %s: file (public key) not found."
msgstr ""
"No se pudo iniciar sesión como %s: no se encontró el archivo (clave "
"pública)."
#: ../telegram-purple.c:550
#, c-format
msgid ""
"Make sure telegram-purple is installed properly,\n"
"including the .tglpub file.\n"
"If you're running SELinux (e.g. when using Tails),\n"
"try 'make local_install', or simply copy\n"
"%1$s to %2$s."
msgstr ""
"Asegurarse de que telegram-purple está instalado apropiadamente,\n"
"incluyendo el archivo .tglpub.\n"
"Si esta ejecutando SELinux (por ejemplo, al usar Tails),\n"
"intente probar 'make local_install', o simplemente copie\n"
"%1$s a %2$s."
#: ../telegram-purple.c:572
#, c-format
msgid ""
"Unable to sign on as %s: problem in the underlying library 'tgl'. Please "
"submit a bug report with the debug log."
msgstr ""
"No se pudo iniciar sesión como %s: problema con la biblioteca 'tgl'. Por "
"favor, envíe un informe de error con el registro de depuración."
#: ../telegram-purple.c:576
msgid "Problem in tgl"
msgstr "Problema en tgl"
#. TRANSLATORS: Please fill in your own prefix!
#: ../telegram-purple.c:584
#, c-format
msgid ""
"Unable to sign on as %s: phone number lacks country prefix. Numbers must "
"start with the full international prefix code, e.g. +1 for USA."
msgstr ""
"No se pudo iniciar sesión como %s: al número de teléfono le falta el prefijo"
" del país. Los números deben comenzar con el código de prefijo "
"internacional, por ejemplo: +34 para España."
#: ../telegram-purple.c:589
msgid "Incomplete phone number"
msgstr "Número de teléfono incompleto"
#: ../telegram-purple.c:642
msgid "Secret chat was already deleted"
msgstr "Ya se eliminó la conversación secreta"
#: ../telegram-purple.c:644
msgid "Secret chat is not ready"
msgstr "La conversación secreta no está lista"
#: ../telegram-purple.c:652
msgid "Only the creator of a channel can post messages."
msgstr "Sólo el creador de un canal puede publicar mensajes."
#: ../telegram-purple.c:695
msgid "Cannot invite buddy to chat"
msgstr "No se pudo invitar al contacto a la conversación"
#: ../telegram-purple.c:696
msgid "Specified user does not exist."
msgstr "El usuario especificado no existe."
#: ../telegram-purple.c:709
msgid "phone no. (+ country prefix)"
msgstr "Núm. tlf. (+ prefijo país)"
#. Login
#: ../telegram-purple.c:817
msgid "Password (two factor authentication)"
msgstr "Contraseña (autenticación de dos pasos)"
#: ../telegram-purple.c:822
msgid ""
"Fallback SMS verification\n"
"(Helps when not using Pidgin and you aren't being prompted for the code)"
msgstr ""
"Verificación por mensaje de texto\n"
"(Sirve para cuando no está usando Pidgin y no se le pido el código)"
#: ../telegram-purple.c:828
msgid "always"
msgstr "siempre"
#: ../telegram-purple.c:829
msgid "never"
msgstr "nunca"
#: ../telegram-purple.c:830
msgid "ask"
msgstr "pedir"
#: ../telegram-purple.c:832
msgid "Accept secret chats"
msgstr "Aceptar conversaciones secretas"
#: ../telegram-purple.c:836
msgid "Display buddies offline after (days)"
msgstr "Mostrar contactos desconectados después de (días)"
#: ../telegram-purple.c:840
msgid ""
"Don't fetch history older than (days)\n"
"(0 for unlimited)"
msgstr ""
"No recuperar el historial anterior a (días)\n"
"(introducir '0' para no aplicar límites)"
#. Media
#: ../telegram-purple.c:845
msgid "Autoload media size (kb)"
msgstr "Tamaño del medio de carga automático (kb)"
#. Chats
#: ../telegram-purple.c:850
msgid "Add all group chats to buddy list"
msgstr "Agregar todas las conversaciones grupales a la lista del contacto"
#. Read notifications
#: ../telegram-purple.c:855
msgid "Display notices of receipt"
msgstr "Mostrar acuses de recibo"
#: ../telegram-purple.c:859
msgid "Send notices of receipt when present"
msgstr "Enviar acuses de recibo al estar presente"
#: ../telegram-purple.c:884
msgid "Telegram Protocol Plugin."
msgstr "Plugin de protocolo de Telegram."
#: ../tgp-msg.c:58
#, c-format
msgid "%2$s created chat %1$s."
msgstr "%2$s creó la conversación %1$s."
#: ../tgp-msg.c:61
#, c-format
msgid "%2$s changed title to %1$s."
msgstr "%2$s cambió el título a %1$s."
#: ../tgp-msg.c:64
#, c-format
msgid "%s changed photo."
msgstr "%s cambió la foto."
#: ../tgp-msg.c:67
#, c-format
msgid "%s deleted photo."
msgstr "%s eliminó la foto."
#: ../tgp-msg.c:75
#, c-format
msgid "%1$s added user %2$s by link."
msgstr "%1$s agregó al usuario %2$s mediante un enlace."
#: ../tgp-msg.c:90
#, c-format
msgid "%2$s added user %1$s."
msgstr "%2$s agregó al usuario %1$s."
#: ../tgp-msg.c:114 ../tgp-msg.c:131
#, c-format
msgid "%2$s deleted user %1$s."
msgstr "%2$s eliminó al usuario %1$s."
#: ../tgp-msg.c:138
#, c-format
msgid "%2$s set self destruction timer to %1$d second."
msgid_plural "%2$s set self destruction timer to %1$d seconds."
msgstr[0] "%2$s estableció un temporizador autodestructivo a %1$d segundo."
msgstr[1] "%2$s estableció un temporizador autodestructivo a %1$d segundos."
#: ../tgp-msg.c:144
#, c-format
msgid "%2$s marked %1$d message read."
msgid_plural "%2$s marked %1$d messages read."
msgstr[0] "%2$s marcó %1$d mensaje como leído."
msgstr[1] "%2$s marcó %1$d mensajes como leídos."
#: ../tgp-msg.c:150
#, c-format
msgid "%2$s deleted %1$d message."
msgid_plural "%2$s deleted %1$d messages."
msgstr[0] "%2$s eliminó %1$d mensaje."
msgstr[1] "%2$s eliminó %1$d mensajes."
#: ../tgp-msg.c:156
#, c-format
msgid "%2$s made a screenshot of %1$d message."
msgid_plural "%2$s made a screenshot of %1$d messages."
msgstr[0] "%2$s tomó una captura de pantalla de %1$d mensaje."
msgstr[1] "%2$s tomó una captura de pantalla de %1$d mensajes."
#: ../tgp-msg.c:162
#, c-format
msgid "Channel %1$s created"
msgstr "Canal %1$s creado"
#. FIXME: check if this makes sense
#: ../tgp-msg.c:165 ../tgp-chat.c:124 ../tgp-chat.c:576
msgid "Telegram Channels"
msgstr "Canales de Telegram"
#: ../tgp-msg.c:191
msgid "Sending message failed."
msgstr "Falló el envío de mensajes."
#: ../tgp-msg.c:253
msgid "Sending image failed."
msgstr "Falló el envío de imágenes."
#: ../tgp-msg.c:417
#, c-format
msgid "%s sent a sticker."
msgstr "%s envió un sticker."
#: ../tgp-msg.c:463
msgid "failed loading message"
msgstr "falló la carga del mensaje"
#: ../tgp-msg.c:498
msgid "[animation]"
msgstr "[animación]"
#: ../tgp-msg.c:515
msgid "[audio]"
msgstr "[audio]"
#: ../tgp-msg.c:515
msgid "[video]"
msgstr "[vídeo]"
#: ../tgp-msg.c:604
#, c-format
msgid "<b>Forwarded message from: %s</b><br>%s"
msgstr "<b>Mensaje reenviado de: %s</b><br>%s"
#. FIXME: sometimes users aren't part of the response when receiving a
#. forwarded message
#: ../tgp-msg.c:607
#, c-format
msgid "<b>Forwarded message:</b><br>%s"
msgstr "<b>Mensaje reenviado:</b><br>%s"
#: ../tgp-msg.c:720
msgid "loading document or picture failed"
msgstr "falló la carga del documento o imagen"
#: ../tgp-net.c:281
msgid "Cannot connect to main server"
msgstr "No se puede conectar al servidor principal"
#: ../tgp-net.c:322
msgid "Cannot connect to server: Ping timeout."
msgstr "No se puede conectar al servidor: tiempo de espera agotado."
#: ../tgp-net.c:365
msgid "Lost connection to the server..."
msgstr "Se perdió la conexión con el servidor..."
#: ../tgp-request.c:51
msgid ""
"Telegram wants to verify your identity. Please enter the login code that you"
" have received via SMS."
msgstr ""
"Telegram quiere verificar su identidad. Por favor, introduce el código que "
"recibió en un mensaje de texto."
#: ../tgp-request.c:54
msgid "Login code"
msgstr "Código de inicio de sesión"
#: ../tgp-request.c:54
msgid "Enter login code"
msgstr "Intoducir código de inicio de sesión"
#: ../tgp-request.c:54
msgid "the code"
msgstr "el código"
#: ../tgp-request.c:54 ../tgp-request.c:104 ../tgp-request.c:198
#: ../tgp-request.c:233 ../tgp-request.c:263
msgid "OK"
msgstr "Aceptar"
#: ../tgp-request.c:55 ../tgp-request.c:104 ../tgp-request.c:123
#: ../tgp-request.c:199 ../tgp-request.c:234 ../tgp-request.c:264
msgid "Cancel"
msgstr "Cancelar"
#: ../tgp-request.c:95
msgid "Registration"
msgstr "Registro"
#: ../tgp-request.c:96
msgid "First name"
msgstr "Nombre"
#: ../tgp-request.c:99
msgid "Last name"
msgstr "Apellido"
#: ../tgp-request.c:103
msgid "Register"
msgstr "Registrar"
#: ../tgp-request.c:103
msgid "Please register your phone number."
msgstr "Por favor, registre su número de teléfono."
#. purple_request API not available
#: ../tgp-request.c:108
msgid ""
"Phone number is not registered. Please register your phone on a different "
"client."
msgstr ""
"No se registró el número de teléfono. Por favor, registre su teléfono en un "
"cliente diferente."
#: ../tgp-request.c:110
msgid "Not registered"
msgstr "No registrado"
#: ../tgp-request.c:122
msgid "Password needed"
msgstr "Se necesita la contraseña"
#: ../tgp-request.c:122
msgid "Enter password for two factor authentication"
msgstr "Introducir contraseña para la autenticación de dos pasos"
#: ../tgp-request.c:123
msgid "Ok"
msgstr "Aceptar"
#: ../tgp-request.c:125
msgid ""
"No password set for two factor authentication. Please enter it in the "
"extended settings."
msgstr ""
"No se estableció contraseña para la autenticación de dos pasos. Por favor, "
"introdúcela en la configuración extendida."
#: ../tgp-request.c:127
msgid "Password invalid"
msgstr "Contraseña no válida"
#: ../tgp-request.c:150
#, c-format
msgid "Accept secret chat '%s' on this device?"
msgstr "¿Acepte la conversación secreta '%s' en este dispositivo?"
#: ../tgp-request.c:151
msgid "Secret chat"
msgstr "Conversación secreta"
#: ../tgp-request.c:151
msgid ""
"Secret chats can only have one end point. If you accept a secret chat on "
"this device, its messages will not be available anywhere else. If you "
"decline, you can still accept the chat on other devices."
msgstr ""
"Las conversaciones secretas son uno a uno. Si acepte una conversación "
"secreta en este dispositivo, la misma no estará disponible en ningún otro "
"lado. Si decline, pueda aceptar la conversación en otro dispositivo."
#: ../tgp-request.c:182
msgid ""
"Invite at least one additional user by specifying\n"
" their full name (autocompletion available).\n"
"You can add more users once the chat was created."
msgstr ""
"Invite al menos a un usuario más especificando\n"
"su nombre completo (disponible autocompletado).\n"
"Pueda agregar más usuarios una vez que se cree la conversación."
#: ../tgp-request.c:185 ../tgp-request.c:189 ../tgp-request.c:193
msgid "Username"
msgstr "Nombre de usuario"
#: ../tgp-request.c:198
msgid "Create group chat"
msgstr "Crear conversación grupal"
#: ../tgp-request.c:198
msgid "Invite users"
msgstr "Invitar a los usuarios"
#: ../tgp-request.c:217 ../tgp-request.c:232
msgid "Change password"
msgstr "Cambiar contraseña"
#: ../tgp-request.c:219
msgid "Current"
msgstr "Actual"
#: ../tgp-request.c:223 ../tgp-request.c:253
msgid "Password"
msgstr "Contraseña"
#: ../tgp-request.c:227 ../tgp-request.c:257
msgid "Confirm"
msgstr "Confirmar"
#: ../tgp-request.c:251 ../tgp-request.c:262
msgid "New password"
msgstr "Nueva contraseña"
#. if we arrive here for the second time the specified phone number is not
#. valid. We do not
#. ask for the phone number directly, cause in that case the account would
#. still be created
#. named with the invalid phone number, even though the login will work
#: ../tgp-request.c:300
msgid "Invalid phone number"
msgstr "Número de teléfono no válido"
#: ../tgp-request.c:301
msgid ""
"Please enter only numbers in the international phone number format, a leading + following by the country prefix and the phone number.\n"
"Do not use any other special chars."
msgstr ""
"Por favor, introduce sólo números en el formato de números de teléfono internacional, con el signo '+' seguido del código de país [más prefijo para el acceso a la red celular, si corresponde] y el número de teléfono.\n"
"No use ningún otro carácter."
#: ../tgp-request.c:370
msgid "Leave Chat"
msgstr "Abandonar conversación"
#: ../tgp-request.c:372
msgid "Do you want to leave this chat permantently?"
msgstr "¿Querés abandonar esta conversación permanentemente?"
#: ../tgp-request.c:377
msgid "Abort Secret Chat"
msgstr "Cancelar conversación secreta"
#: ../tgp-request.c:379
msgid "Do you want to terminate this secret chat permantently?"
msgstr ""
"¿Esté seguro que quiere eliminar esta conversación secreta permanentemente?"
#: ../tgp-request.c:384
msgid "Delete Contact"
msgstr "Eliminar contacto"
#: ../tgp-request.c:386
msgid "Do you want to remove this user from your global contact list?"
msgstr "¿Quiere quitar este usuario de su lista global de contactos?"
#: ../tgp-request.c:401
msgid "Leave Channel"
msgstr "Abandonar canal"
#: ../tgp-request.c:403
msgid "Do you want to leave this channel?"
msgstr "¿Quiere abandonar este canal?"
#. This should be the language's timestamp format. This is preceded by a
#. colon.
#: ../tgp-utils.c:27
msgid "%d.%m.%Y %H:%M"
msgstr "%d.%m.%Y - %H:%M"
#. This is preceded by a colon.
#: ../tgp-utils.c:48
msgid "recently"
msgstr "recientemente"
#. This is preceded by a colon.
#: ../tgp-utils.c:52
msgid "last week"
msgstr "la semana pasada"
#. This is preceded by a colon.
#: ../tgp-utils.c:56
msgid "last month"
msgstr "el mes pasado"
#. This is preceded by a colon. It refers to a point on time.
#: ../tgp-utils.c:60
msgid "unknown"
msgstr "desconocido"
#: ../tgp-chat.c:108 ../tgp-chat.c:582
msgid "Telegram Chats"
msgstr "Conversaciones de Telegram"
#: ../tgp-chat.c:113
msgid "You have already left this chat."
msgstr "Ya ha abandonado esta conversación."
#: ../tgp-chat.c:224
msgid "Subject:"
msgstr "Asunto:"
#: ../tgp-chat.c:230
msgid "Invite link:"
msgstr "Enlace de invitación:"
#: ../tgp-chat.c:236
msgid "Chat ID:"
msgstr "Identificación de conversación:"
#: ../tgp-chat.c:342
msgid "Supergroup"
msgstr "Súpergrupo"
#: ../tgp-chat.c:342
msgid "Channel"
msgstr "Canal"
#: ../tgp-chat.c:345
msgid "Group"
msgstr "Grupo"
#: ../tgp-chat.c:367
msgid "Users in chat"
msgstr "Usuarios en la conversación"
#: ../tgp-chat.c:370
msgid "Type"
msgstr "Tipo"

616
po/es_AR.po Normal file
View file

@ -0,0 +1,616 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-08-31 22:53+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: KNTRO <kntro@msn.com>, 2016\n"
"Language-Team: Spanish (Argentina) (https://www.transifex.com/telegram-purple-developers/teams/53149/es_AR/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=CHARSET\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: es_AR\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: ../telegram-base.c:500
msgid "Couldn't create group"
msgstr "No se pudo crear el grupo"
#: ../telegram-base.c:501
msgid "Please select at least one other user."
msgstr "Por favor, seleccioná al menos otro usuario."
#: ../telegram-base.c:555
msgid "Query Failed"
msgstr "Falló la consulta"
#: ../telegram-purple.c:162
msgid "Secret chat ready."
msgstr "Conversación secreta lista."
#: ../telegram-purple.c:170
msgid "Secret chat terminated."
msgstr "Finalizó la conversación secreta."
#: ../telegram-purple.c:182
msgid "Telegram"
msgstr "Telegram"
#: ../telegram-purple.c:229
msgid "Message marked as read."
msgstr "Mensaje marcado como leído."
#: ../telegram-purple.c:339
#, c-format
msgid "Invite link: %s"
msgstr "Enlace de invitación: %s"
#. FIXME: Can TGLCHF_MODERATOR export links?
#: ../telegram-purple.c:350
msgid "Creating chat link failed"
msgstr "Falló la creación del enlace de conversación"
#: ../telegram-purple.c:351
msgid "You need to be admin of the group to do that."
msgstr "Necesitás ser administrador del grupo para hacer eso."
#: ../telegram-purple.c:416
msgid "Chat joined"
msgstr "Unido a la conversación"
#: ../telegram-purple.c:417
msgid "Chat added to list of chat rooms."
msgstr "Conversación agregada a la lista de salas de conversaciones."
#: ../telegram-purple.c:443
msgid "Start secret chat..."
msgstr "Iniciar conversación secreta..."
#. Generate Public Link
#: ../telegram-purple.c:450
msgid "Invite users by link..."
msgstr "Invitar a usuarios por enlace..."
#. Delete self from chat
#: ../telegram-purple.c:458
msgid "Delete and exit..."
msgstr "Eliminar y salir..."
#: ../telegram-purple.c:546
#, c-format
msgid "Unable to sign on as %s: file (public key) not found."
msgstr ""
"No se pudo iniciar sesión como %s: no se encontró el archivo (clave "
"pública)."
#: ../telegram-purple.c:550
#, c-format
msgid ""
"Make sure telegram-purple is installed properly,\n"
"including the .tglpub file.\n"
"If you're running SELinux (e.g. when using Tails),\n"
"try 'make local_install', or simply copy\n"
"%1$s to %2$s."
msgstr ""
"Asegurate de que telegram-purple está instalado apropiadamente,\n"
"incluyendo el archivo .tglpub.\n"
"Si estás ejecutando SELinux (por ejemplo, al usar Tails),\n"
"intentá probar \"make local:_install\", o simplemente copiá\n"
"%1$s a %2$s."
#: ../telegram-purple.c:572
#, c-format
msgid ""
"Unable to sign on as %s: problem in the underlying library 'tgl'. Please "
"submit a bug report with the debug log."
msgstr ""
"No se pudo iniciar sesión como %s: hay un problema con la biblioteca "
"\"tgl\". Por favor, enviá un informe de errores con el registro de "
"depuración."
#: ../telegram-purple.c:576
msgid "Problem in tgl"
msgstr "Problema en tgl"
#. TRANSLATORS: Please fill in your own prefix!
#: ../telegram-purple.c:584
#, c-format
msgid ""
"Unable to sign on as %s: phone number lacks country prefix. Numbers must "
"start with the full international prefix code, e.g. +1 for USA."
msgstr ""
"No se pudo iniciar sesión como %s: al número de teléfono le falta el prefijo"
" del país. Los números deben comenzar con el código de prefijo "
"internacional, por ejemplo: +54 para Argentina."
#: ../telegram-purple.c:589
msgid "Incomplete phone number"
msgstr "Número de teléfono incompleto"
#: ../telegram-purple.c:642
msgid "Secret chat was already deleted"
msgstr "Ya se eliminó la conversación secreta"
#: ../telegram-purple.c:644
msgid "Secret chat is not ready"
msgstr "La conversación secreta no está lista"
#: ../telegram-purple.c:652
msgid "Only the creator of a channel can post messages."
msgstr "Sólo el creador de un canal puede publicar mensajes."
#: ../telegram-purple.c:695
msgid "Cannot invite buddy to chat"
msgstr "No se pudo invitar al contacto a la conversación"
#: ../telegram-purple.c:696
msgid "Specified user does not exist."
msgstr "El usuario especificado no existe."
#: ../telegram-purple.c:709
msgid "phone no. (+ country prefix)"
msgstr "Número de teléfono (+ prefijo de país)"
#. Login
#: ../telegram-purple.c:817
msgid "Password (two factor authentication)"
msgstr "Contraseña (autenticación de 2 pasos)"
#: ../telegram-purple.c:822
msgid ""
"Fallback SMS verification\n"
"(Helps when not using Pidgin and you aren't being prompted for the code)"
msgstr ""
"Verificación por mensaje de texto\n"
"(Sirve para cuando no estás usando Pidgin y no se te pide el código)"
#: ../telegram-purple.c:828
msgid "always"
msgstr "siempre"
#: ../telegram-purple.c:829
msgid "never"
msgstr "nunca"
#: ../telegram-purple.c:830
msgid "ask"
msgstr "preguntar"
#: ../telegram-purple.c:832
msgid "Accept secret chats"
msgstr "Aceptar conversaciones secretas"
#: ../telegram-purple.c:836
msgid "Display buddies offline after (days)"
msgstr "Mostrar contactos desconectados después de (días)"
#: ../telegram-purple.c:840
msgid ""
"Don't fetch history older than (days)\n"
"(0 for unlimited)"
msgstr ""
"No recuperar el historial anterior a (días)\n"
"(ingresá \"0\" para no aplicar límites)"
#. Media
#: ../telegram-purple.c:845
msgid "Autoload media size (kb)"
msgstr "Tamaño de medio de descarga automática (kb)"
#. Chats
#: ../telegram-purple.c:850
msgid "Add all group chats to buddy list"
msgstr "Agregar todas las conversaciones grupales a la lista del contacto"
#. Read notifications
#: ../telegram-purple.c:855
msgid "Display notices of receipt"
msgstr "Mostrar acuses de recibo"
#: ../telegram-purple.c:859
msgid "Send notices of receipt when present"
msgstr "Enviar acuses de recibo al estar presente"
#: ../telegram-purple.c:884
msgid "Telegram Protocol Plugin."
msgstr "Plugin de protocolo de Telegram."
#: ../tgp-msg.c:58
#, c-format
msgid "%2$s created chat %1$s."
msgstr "%2$s creó la conversación %1$s."
#: ../tgp-msg.c:61
#, c-format
msgid "%2$s changed title to %1$s."
msgstr "%2$s cambió el título a %1$s."
#: ../tgp-msg.c:64
#, c-format
msgid "%s changed photo."
msgstr "%s cambió la foto."
#: ../tgp-msg.c:67
#, c-format
msgid "%s deleted photo."
msgstr "%s eliminó la foto."
#: ../tgp-msg.c:75
#, c-format
msgid "%1$s added user %2$s by link."
msgstr "%1$s agregó al usuario %2$s mediante un enlace."
#: ../tgp-msg.c:90
#, c-format
msgid "%2$s added user %1$s."
msgstr "%2$s agregó al usuario %1$s."
#: ../tgp-msg.c:114 ../tgp-msg.c:131
#, c-format
msgid "%2$s deleted user %1$s."
msgstr "%2$s eliminó al usuario %1$s."
#: ../tgp-msg.c:138
#, c-format
msgid "%2$s set self destruction timer to %1$d second."
msgid_plural "%2$s set self destruction timer to %1$d seconds."
msgstr[0] "%2$s estableció un contador autodestructivo a %1$d segundo."
msgstr[1] "%2$s estableció un contador autodestructivo a %1$d segundos."
#: ../tgp-msg.c:144
#, c-format
msgid "%2$s marked %1$d message read."
msgid_plural "%2$s marked %1$d messages read."
msgstr[0] "%2$s marcó %1$d mensaje como leído."
msgstr[1] "%2$s marcó %1$d mensajes como leídos."
#: ../tgp-msg.c:150
#, c-format
msgid "%2$s deleted %1$d message."
msgid_plural "%2$s deleted %1$d messages."
msgstr[0] "%2$s eliminó %1$d mensaje."
msgstr[1] "%2$s eliminó %1$d mensajes."
#: ../tgp-msg.c:156
#, c-format
msgid "%2$s made a screenshot of %1$d message."
msgid_plural "%2$s made a screenshot of %1$d messages."
msgstr[0] "%2$s tomó una captura de pantalla de %1$d mensaje."
msgstr[1] "%2$s tomó una captura de pantalla de %1$d mensajes."
#: ../tgp-msg.c:162
#, c-format
msgid "Channel %1$s created"
msgstr "Canal %1$s creado"
#. FIXME: check if this makes sense
#: ../tgp-msg.c:165 ../tgp-chat.c:124 ../tgp-chat.c:576
msgid "Telegram Channels"
msgstr "Canales de Telegram"
#: ../tgp-msg.c:191
msgid "Sending message failed."
msgstr "Falló el envío de mensajes."
#: ../tgp-msg.c:253
msgid "Sending image failed."
msgstr "Falló el envío de imágenes."
#: ../tgp-msg.c:417
#, c-format
msgid "%s sent a sticker."
msgstr "%s envió un sticker."
#: ../tgp-msg.c:463
msgid "failed loading message"
msgstr "falló la carga del mensaje"
#: ../tgp-msg.c:498
msgid "[animation]"
msgstr "[animación]"
#: ../tgp-msg.c:515
msgid "[audio]"
msgstr "[audio]"
#: ../tgp-msg.c:515
msgid "[video]"
msgstr "[video]"
#: ../tgp-msg.c:604
#, c-format
msgid "<b>Forwarded message from: %s</b><br>%s"
msgstr "<b>Mensaje reenviado de: %s</b><br>%s"
#. FIXME: sometimes users aren't part of the response when receiving a
#. forwarded message
#: ../tgp-msg.c:607
#, c-format
msgid "<b>Forwarded message:</b><br>%s"
msgstr "<b>Mensaje reenviado:</b><br>%s"
#: ../tgp-msg.c:720
msgid "loading document or picture failed"
msgstr "falló la carga del documento o imagen"
#: ../tgp-net.c:281
msgid "Cannot connect to main server"
msgstr "No se puede conectar al servidor principal"
#: ../tgp-net.c:322
msgid "Cannot connect to server: Ping timeout."
msgstr "No se puede conectar al servidor: tiempo de respuesta agotado."
#: ../tgp-net.c:365
msgid "Lost connection to the server..."
msgstr "Se perdió la conexión con el servidor..."
#: ../tgp-request.c:51
msgid ""
"Telegram wants to verify your identity. Please enter the login code that you"
" have received via SMS."
msgstr ""
"Telegram quiere verificar tu identidad. Por favor, ingresá el código que "
"recibiste en un mensaje de texto."
#: ../tgp-request.c:54
msgid "Login code"
msgstr "Código de inicio de sesión"
#: ../tgp-request.c:54
msgid "Enter login code"
msgstr "Ingresar código de inicio de sesión"
#: ../tgp-request.c:54
msgid "the code"
msgstr "el código"
#: ../tgp-request.c:54 ../tgp-request.c:104 ../tgp-request.c:198
#: ../tgp-request.c:233 ../tgp-request.c:263
msgid "OK"
msgstr "Aceptar"
#: ../tgp-request.c:55 ../tgp-request.c:104 ../tgp-request.c:123
#: ../tgp-request.c:199 ../tgp-request.c:234 ../tgp-request.c:264
msgid "Cancel"
msgstr "Cancelar"
#: ../tgp-request.c:95
msgid "Registration"
msgstr "Registro"
#: ../tgp-request.c:96
msgid "First name"
msgstr "Nombre"
#: ../tgp-request.c:99
msgid "Last name"
msgstr "Apellido"
#: ../tgp-request.c:103
msgid "Register"
msgstr "Registrar"
#: ../tgp-request.c:103
msgid "Please register your phone number."
msgstr "Por favor, registrá tu número de teléfono."
#. purple_request API not available
#: ../tgp-request.c:108
msgid ""
"Phone number is not registered. Please register your phone on a different "
"client."
msgstr ""
"No se registró el número de teléfono. Por favor, registrá tu teléfono en un "
"cliente diferente."
#: ../tgp-request.c:110
msgid "Not registered"
msgstr "No registrado"
#: ../tgp-request.c:122
msgid "Password needed"
msgstr "Se necesita la contraseña"
#: ../tgp-request.c:122
msgid "Enter password for two factor authentication"
msgstr "Ingresar contraseña para la autenticación de 2 pasos"
#: ../tgp-request.c:123
msgid "Ok"
msgstr "Aceptar"
#: ../tgp-request.c:125
msgid ""
"No password set for two factor authentication. Please enter it in the "
"extended settings."
msgstr ""
"No se estableció contraseña para la autenticación de 2 pasos. Por favor, "
"ingresala en la configuración extendida."
#: ../tgp-request.c:127
msgid "Password invalid"
msgstr "Contraseña no válida"
#: ../tgp-request.c:150
#, c-format
msgid "Accept secret chat '%s' on this device?"
msgstr "¿Aceptás la conversación secreta \"%s\" en este dispositivo?"
#: ../tgp-request.c:151
msgid "Secret chat"
msgstr "Conversación secreta"
#: ../tgp-request.c:151
msgid ""
"Secret chats can only have one end point. If you accept a secret chat on "
"this device, its messages will not be available anywhere else. If you "
"decline, you can still accept the chat on other devices."
msgstr ""
"Las conversaciones secretas son uno a uno. Si aceptás una conversación "
"secreta en este dispositivo, la misma no estará disponible en ningún otro "
"lado. Si declinás, podés aceptar la conversación en otro dispositivo."
#: ../tgp-request.c:182
msgid ""
"Invite at least one additional user by specifying\n"
" their full name (autocompletion available).\n"
"You can add more users once the chat was created."
msgstr ""
"Invitá al menos a un usuario más especificando\n"
"su nombre completo (disponible autocompletado).\n"
"Podés agregar más usuarios una vez que se cree la conversación."
#: ../tgp-request.c:185 ../tgp-request.c:189 ../tgp-request.c:193
msgid "Username"
msgstr "Nombre de usuario"
#: ../tgp-request.c:198
msgid "Create group chat"
msgstr "Crear conversación grupal"
#: ../tgp-request.c:198
msgid "Invite users"
msgstr "Invitar a usuarios"
#: ../tgp-request.c:217 ../tgp-request.c:232
msgid "Change password"
msgstr "Cambiar contraseña"
#: ../tgp-request.c:219
msgid "Current"
msgstr "Actual"
#: ../tgp-request.c:223 ../tgp-request.c:253
msgid "Password"
msgstr "Contraseña"
#: ../tgp-request.c:227 ../tgp-request.c:257
msgid "Confirm"
msgstr "Confirmar"
#: ../tgp-request.c:251 ../tgp-request.c:262
msgid "New password"
msgstr "Nueva contraseña"
#. if we arrive here for the second time the specified phone number is not
#. valid. We do not
#. ask for the phone number directly, cause in that case the account would
#. still be created
#. named with the invalid phone number, even though the login will work
#: ../tgp-request.c:300
msgid "Invalid phone number"
msgstr "Número de teléfono no válido"
#: ../tgp-request.c:301
msgid ""
"Please enter only numbers in the international phone number format, a leading + following by the country prefix and the phone number.\n"
"Do not use any other special chars."
msgstr ""
"Por favor, ingresá sólo números en el formato de números de teléfono internacional, con el signo \"+\" seguido del código de país [más prefijo para el acceso a la red celular, si corresponde] y el número de teléfono.\n"
"No usés ningún otro caracter."
#: ../tgp-request.c:370
msgid "Leave Chat"
msgstr "Abandonar conversación"
#: ../tgp-request.c:372
msgid "Do you want to leave this chat permantently?"
msgstr "¿Querés abandonar esta conversación permanentemente?"
#: ../tgp-request.c:377
msgid "Abort Secret Chat"
msgstr "Cancelar conversación secreta"
#: ../tgp-request.c:379
msgid "Do you want to terminate this secret chat permantently?"
msgstr ""
"¿Estás seguro que querés eliminar esta conversación secreta permanentemente?"
#: ../tgp-request.c:384
msgid "Delete Contact"
msgstr "Eliminar contacto"
#: ../tgp-request.c:386
msgid "Do you want to remove this user from your global contact list?"
msgstr "¿Querés quitar este usuario de tu lista global de contactos?"
#: ../tgp-request.c:401
msgid "Leave Channel"
msgstr "Abandonar canal"
#: ../tgp-request.c:403
msgid "Do you want to leave this channel?"
msgstr "¿Querés abandonar este canal?"
#. This should be the language's timestamp format. This is preceded by a
#. colon.
#: ../tgp-utils.c:27
msgid "%d.%m.%Y %H:%M"
msgstr "%Y.%m.%d - %H:%M"
#. This is preceded by a colon.
#: ../tgp-utils.c:48
msgid "recently"
msgstr "recientemente"
#. This is preceded by a colon.
#: ../tgp-utils.c:52
msgid "last week"
msgstr "la semana pasada"
#. This is preceded by a colon.
#: ../tgp-utils.c:56
msgid "last month"
msgstr "el mes pasado"
#. This is preceded by a colon. It refers to a point on time.
#: ../tgp-utils.c:60
msgid "unknown"
msgstr "[desconocido]"
#: ../tgp-chat.c:108 ../tgp-chat.c:582
msgid "Telegram Chats"
msgstr "Conversaciones de Telegram"
#: ../tgp-chat.c:113
msgid "You have already left this chat."
msgstr "Ya abandonaste esta conversación."
#: ../tgp-chat.c:224
msgid "Subject:"
msgstr "Asunto:"
#: ../tgp-chat.c:230
msgid "Invite link:"
msgstr "Enlace de invitación:"
#: ../tgp-chat.c:236
msgid "Chat ID:"
msgstr "Identificación de conversación:"
#: ../tgp-chat.c:342
msgid "Supergroup"
msgstr "Súpergrupo"
#: ../tgp-chat.c:342
msgid "Channel"
msgstr "Canal"
#: ../tgp-chat.c:345
msgid "Group"
msgstr "Grupo"
#: ../tgp-chat.c:367
msgid "Users in chat"
msgstr "Usuarios en la conversación"
#: ../tgp-chat.c:370
msgid "Type"
msgstr "Tipo"

615
po/fr.po Normal file
View file

@ -0,0 +1,615 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-08-31 22:53+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: kekh <tukhnet@gmail.com>, 2016\n"
"Language-Team: French (https://www.transifex.com/telegram-purple-developers/teams/53149/fr/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=CHARSET\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: fr\n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
#: ../telegram-base.c:500
msgid "Couldn't create group"
msgstr "N'a pas pu créer le groupe"
#: ../telegram-base.c:501
msgid "Please select at least one other user."
msgstr "Veuillez sélectionner au moins un autre utilisateur."
#: ../telegram-base.c:555
msgid "Query Failed"
msgstr "Requête échouée"
#: ../telegram-purple.c:162
msgid "Secret chat ready."
msgstr "Conversation secrète prête."
#: ../telegram-purple.c:170
msgid "Secret chat terminated."
msgstr "Conversation secrète terminée."
#: ../telegram-purple.c:182
msgid "Telegram"
msgstr "Telegram"
#: ../telegram-purple.c:229
msgid "Message marked as read."
msgstr "Message marqué comme lu."
#: ../telegram-purple.c:339
#, c-format
msgid "Invite link: %s"
msgstr "Lien d'invitation : %s"
#. FIXME: Can TGLCHF_MODERATOR export links?
#: ../telegram-purple.c:350
msgid "Creating chat link failed"
msgstr "Création du lien d'invitation échouée"
#: ../telegram-purple.c:351
msgid "You need to be admin of the group to do that."
msgstr "Vous devez être administrateur du groupe pour faire cela."
#: ../telegram-purple.c:416
msgid "Chat joined"
msgstr "Conversation atteinte."
#: ../telegram-purple.c:417
msgid "Chat added to list of chat rooms."
msgstr "Conversation ajoutée dans la liste des conversations."
#: ../telegram-purple.c:443
msgid "Start secret chat..."
msgstr "Commencer une conversation secrète..."
#. Generate Public Link
#: ../telegram-purple.c:450
msgid "Invite users by link..."
msgstr "Inviter des utilisateurs avec un lien..."
#. Delete self from chat
#: ../telegram-purple.c:458
msgid "Delete and exit..."
msgstr "Supprimer et quitter..."
#: ../telegram-purple.c:546
#, c-format
msgid "Unable to sign on as %s: file (public key) not found."
msgstr ""
"Impossible de se connecter comme %s : fichier de clé publique manquant."
#: ../telegram-purple.c:550
#, c-format
msgid ""
"Make sure telegram-purple is installed properly,\n"
"including the .tglpub file.\n"
"If you're running SELinux (e.g. when using Tails),\n"
"try 'make local_install', or simply copy\n"
"%1$s to %2$s."
msgstr ""
"Soyez sûr que telegram-purple est installé proprement,\n"
"particulièrement le fichier .tglpub.\n"
"Si vous avez SELinux (ex: En utilisant Tails),\n"
"essayez 'make local_install', ou copiez simplement\n"
"%1$s dans %2$s."
#: ../telegram-purple.c:572
#, c-format
msgid ""
"Unable to sign on as %s: problem in the underlying library 'tgl'. Please "
"submit a bug report with the debug log."
msgstr ""
"Impossible de s'identifier comme %s : Problème avec la librairie sous-"
"jacente 'tgl'. Veuillez svp soumettre un rapport de bug incluant des "
"informations de débug."
#: ../telegram-purple.c:576
msgid "Problem in tgl"
msgstr "Problème relatif à Tgl"
#. TRANSLATORS: Please fill in your own prefix!
#: ../telegram-purple.c:584
#, c-format
msgid ""
"Unable to sign on as %s: phone number lacks country prefix. Numbers must "
"start with the full international prefix code, e.g. +1 for USA."
msgstr ""
"Impossible de se connecter avec %s : le préfixe de pays est manquant. Le "
"numéro de téléphone doit commencer avec le numéro de préfixe international, "
"ex: +33 pour la France."
#: ../telegram-purple.c:589
msgid "Incomplete phone number"
msgstr "Numéro de téléphone incomplet"
#: ../telegram-purple.c:642
msgid "Secret chat was already deleted"
msgstr "Conversation secrète déjà supprimée."
#: ../telegram-purple.c:644
msgid "Secret chat is not ready"
msgstr "Conversation secrète non prête"
#: ../telegram-purple.c:652
msgid "Only the creator of a channel can post messages."
msgstr "Seul le créateur du canal peut publier des messages"
#: ../telegram-purple.c:695
msgid "Cannot invite buddy to chat"
msgstr "Impossible d'ajouter le contact à la conversation"
#: ../telegram-purple.c:696
msgid "Specified user does not exist."
msgstr "L'utilisateur spécifié n'existe pas."
#: ../telegram-purple.c:709
msgid "phone no. (+ country prefix)"
msgstr "n° téléphone (+ préfixe pays)"
#. Login
#: ../telegram-purple.c:817
msgid "Password (two factor authentication)"
msgstr "Mot de passe (authentification à deux facteurs)"
#: ../telegram-purple.c:822
msgid ""
"Fallback SMS verification\n"
"(Helps when not using Pidgin and you aren't being prompted for the code)"
msgstr ""
"Vérification par SMS\n"
"(Cela aide si vous nutilisez pas Pidgin et que vous n'êtes pas notifié pour le code)"
#: ../telegram-purple.c:828
msgid "always"
msgstr "toujours"
#: ../telegram-purple.c:829
msgid "never"
msgstr "jamais"
#: ../telegram-purple.c:830
msgid "ask"
msgstr "demander"
#: ../telegram-purple.c:832
msgid "Accept secret chats"
msgstr "Accepter la conversation secrète"
#: ../telegram-purple.c:836
msgid "Display buddies offline after (days)"
msgstr "Afficher les contacts déconnectés après (jours)"
#: ../telegram-purple.c:840
msgid ""
"Don't fetch history older than (days)\n"
"(0 for unlimited)"
msgstr ""
"Ne pas récupérer l'historique plus vieux que (jours)\n"
"(0 pour infinie)"
#. Media
#: ../telegram-purple.c:845
msgid "Autoload media size (kb)"
msgstr "Taille max. chargement auto. des médias (Kb)"
#. Chats
#: ../telegram-purple.c:850
msgid "Add all group chats to buddy list"
msgstr "Ajouter tous les membres de la conversation dans la liste de contact"
#. Read notifications
#: ../telegram-purple.c:855
msgid "Display notices of receipt"
msgstr "Afficher les notifications de réception"
#: ../telegram-purple.c:859
msgid "Send notices of receipt when present"
msgstr "Envoyer des notifications de réception quand vous êtes présent."
#: ../telegram-purple.c:884
msgid "Telegram Protocol Plugin."
msgstr "Extension Protocole Telegram"
#: ../tgp-msg.c:58
#, c-format
msgid "%2$s created chat %1$s."
msgstr "%2$s a créé la conversation %1$s."
#: ../tgp-msg.c:61
#, c-format
msgid "%2$s changed title to %1$s."
msgstr "%2$s a changé le titre pour %1$s."
#: ../tgp-msg.c:64
#, c-format
msgid "%s changed photo."
msgstr "%s a changé sa photo."
#: ../tgp-msg.c:67
#, c-format
msgid "%s deleted photo."
msgstr "%s a supprimé la photo."
#: ../tgp-msg.c:75
#, c-format
msgid "%1$s added user %2$s by link."
msgstr "%1$s a ajouté l'utilisateur %2$s avec un lien."
#: ../tgp-msg.c:90
#, c-format
msgid "%2$s added user %1$s."
msgstr "%2$s a ajouté l'utilisateur %1$s."
#: ../tgp-msg.c:114 ../tgp-msg.c:131
#, c-format
msgid "%2$s deleted user %1$s."
msgstr "%2$s a supprimé l'utilisateur %1$s."
#: ../tgp-msg.c:138
#, c-format
msgid "%2$s set self destruction timer to %1$d second."
msgid_plural "%2$s set self destruction timer to %1$d seconds."
msgstr[0] "%2$s a mis le compte a rebours d'auto destruction à %1$d secondes."
msgstr[1] "%2$s a mis le compte à rebours d'auto destruction à %1$d secondes."
#: ../tgp-msg.c:144
#, c-format
msgid "%2$s marked %1$d message read."
msgid_plural "%2$s marked %1$d messages read."
msgstr[0] "%2$s a marqué les messages de %1$d lu."
msgstr[1] "%2$s a marqué les messages de %1$d lus."
#: ../tgp-msg.c:150
#, c-format
msgid "%2$s deleted %1$d message."
msgid_plural "%2$s deleted %1$d messages."
msgstr[0] "%2$s a supprimé les messages de %1$d."
msgstr[1] "%2$s a supprimé les messages de %1$d."
#: ../tgp-msg.c:156
#, c-format
msgid "%2$s made a screenshot of %1$d message."
msgid_plural "%2$s made a screenshot of %1$d messages."
msgstr[0] "%2$s a pris un copie d'écran des messages de %1$d."
msgstr[1] "%2$s a pris une copie d'écran des messages de %1$d."
#: ../tgp-msg.c:162
#, c-format
msgid "Channel %1$s created"
msgstr "Canal %1$s créé"
#. FIXME: check if this makes sense
#: ../tgp-msg.c:165 ../tgp-chat.c:124 ../tgp-chat.c:576
msgid "Telegram Channels"
msgstr "Canaux Telegram"
#: ../tgp-msg.c:191
msgid "Sending message failed."
msgstr "L'envoi du message a échoué."
#: ../tgp-msg.c:253
msgid "Sending image failed."
msgstr "L'envoi de l'image a échoué."
#: ../tgp-msg.c:417
#, c-format
msgid "%s sent a sticker."
msgstr "%s a envoyé un sticker."
#: ../tgp-msg.c:463
msgid "failed loading message"
msgstr "échec au chargement du message"
#: ../tgp-msg.c:498
msgid "[animation]"
msgstr "[animation]"
#: ../tgp-msg.c:515
msgid "[audio]"
msgstr "[audio]"
#: ../tgp-msg.c:515
msgid "[video]"
msgstr "[video]"
#: ../tgp-msg.c:604
#, c-format
msgid "<b>Forwarded message from: %s</b><br>%s"
msgstr "<b>Message transféré depuis : %s</b><br>%s"
#. FIXME: sometimes users aren't part of the response when receiving a
#. forwarded message
#: ../tgp-msg.c:607
#, c-format
msgid "<b>Forwarded message:</b><br>%s"
msgstr "<b>Message transféré :</b><br>%s"
#: ../tgp-msg.c:720
msgid "loading document or picture failed"
msgstr "échec au chargement du document ou de l'image"
#: ../tgp-net.c:281
msgid "Cannot connect to main server"
msgstr "Impossible de se connecter au serveur principal"
#: ../tgp-net.c:322
msgid "Cannot connect to server: Ping timeout."
msgstr "Impossible de se connecter avec le serveur : Délai d'attente dépassé."
#: ../tgp-net.c:365
msgid "Lost connection to the server..."
msgstr "Connexion au serveur perdue..."
#: ../tgp-request.c:51
msgid ""
"Telegram wants to verify your identity. Please enter the login code that you"
" have received via SMS."
msgstr ""
"Telegram veut vérifier votre identité, Entrez le code que vous avez reçu par"
" SMS."
#: ../tgp-request.c:54
msgid "Login code"
msgstr "Code de connexion"
#: ../tgp-request.c:54
msgid "Enter login code"
msgstr "Entrez le code de connexion"
#: ../tgp-request.c:54
msgid "the code"
msgstr "le code"
#: ../tgp-request.c:54 ../tgp-request.c:104 ../tgp-request.c:198
#: ../tgp-request.c:233 ../tgp-request.c:263
msgid "OK"
msgstr "OK"
#: ../tgp-request.c:55 ../tgp-request.c:104 ../tgp-request.c:123
#: ../tgp-request.c:199 ../tgp-request.c:234 ../tgp-request.c:264
msgid "Cancel"
msgstr "Annuler"
#: ../tgp-request.c:95
msgid "Registration"
msgstr "Enregistrement"
#: ../tgp-request.c:96
msgid "First name"
msgstr "Prénom"
#: ../tgp-request.c:99
msgid "Last name"
msgstr "Nom de famille"
#: ../tgp-request.c:103
msgid "Register"
msgstr "Enregistrer"
#: ../tgp-request.c:103
msgid "Please register your phone number."
msgstr "Enregistrez votre numéro de téléphone."
#. purple_request API not available
#: ../tgp-request.c:108
msgid ""
"Phone number is not registered. Please register your phone on a different "
"client."
msgstr ""
"Numéro de téléphone non enregistré. Enregistrez un numéro de téléphone sur "
"un appareil différent."
#: ../tgp-request.c:110
msgid "Not registered"
msgstr "Non enregistré"
#: ../tgp-request.c:122
msgid "Password needed"
msgstr "Besoin du mot de passe"
#: ../tgp-request.c:122
msgid "Enter password for two factor authentication"
msgstr "Entrez le mot de passe pour l'authentification à deux facteurs"
#: ../tgp-request.c:123
msgid "Ok"
msgstr "Ok"
#: ../tgp-request.c:125
msgid ""
"No password set for two factor authentication. Please enter it in the "
"extended settings."
msgstr ""
"Pas de mot de passe à deux facteurs spécifié. Entrez-en un dans la "
"configuration étendue."
#: ../tgp-request.c:127
msgid "Password invalid"
msgstr "Mot de passe invalide"
#: ../tgp-request.c:150
#, c-format
msgid "Accept secret chat '%s' on this device?"
msgstr "Accepter la conversation secrète %s sur cet appareil ?"
#: ../tgp-request.c:151
msgid "Secret chat"
msgstr "Conversation secrète"
#: ../tgp-request.c:151
msgid ""
"Secret chats can only have one end point. If you accept a secret chat on "
"this device, its messages will not be available anywhere else. If you "
"decline, you can still accept the chat on other devices."
msgstr ""
"Les conversations secrètes ne peuvent être vues que sur un seul appareil. Si"
" vous acceptez la conversation secrète sur cet appareil, elle ne sera pas "
"disponible ailleurs. Si vous refusez, vous pourrez toujours accepter cette "
"conversation sur un autre appareil."
#: ../tgp-request.c:182
msgid ""
"Invite at least one additional user by specifying\n"
" their full name (autocompletion available).\n"
"You can add more users once the chat was created."
msgstr ""
"Invitez au moins un autre utilisateur (auto-complétion disponible).\n"
"Vous pouvez ajouter plus d'utilisateurs une fois la conversation créée."
#: ../tgp-request.c:185 ../tgp-request.c:189 ../tgp-request.c:193
msgid "Username"
msgstr "Nom d'utilisateur"
#: ../tgp-request.c:198
msgid "Create group chat"
msgstr "Créer une conversation de groupe"
#: ../tgp-request.c:198
msgid "Invite users"
msgstr "Inviter des utilisateurs"
#: ../tgp-request.c:217 ../tgp-request.c:232
msgid "Change password"
msgstr "Changer le mot de passe"
#: ../tgp-request.c:219
msgid "Current"
msgstr "Courrant"
#: ../tgp-request.c:223 ../tgp-request.c:253
msgid "Password"
msgstr "Mot de passe"
#: ../tgp-request.c:227 ../tgp-request.c:257
msgid "Confirm"
msgstr "Confirmer"
#: ../tgp-request.c:251 ../tgp-request.c:262
msgid "New password"
msgstr "Nouveau mot de passe"
#. if we arrive here for the second time the specified phone number is not
#. valid. We do not
#. ask for the phone number directly, cause in that case the account would
#. still be created
#. named with the invalid phone number, even though the login will work
#: ../tgp-request.c:300
msgid "Invalid phone number"
msgstr "Numéro de téléphone invalide"
#: ../tgp-request.c:301
msgid ""
"Please enter only numbers in the international phone number format, a leading + following by the country prefix and the phone number.\n"
"Do not use any other special chars."
msgstr ""
"Entrez seulement des numéros dans le champs pour le numéro international, un + suivi du préfixe de pays et du numéro de téléphone.\n"
"N'utilisez aucun autre caractère spécial."
#: ../tgp-request.c:370
msgid "Leave Chat"
msgstr "Quitter la conversation"
#: ../tgp-request.c:372
msgid "Do you want to leave this chat permantently?"
msgstr "Voulez-vous quitter cette discussion définitivement ?"
#: ../tgp-request.c:377
msgid "Abort Secret Chat"
msgstr "Abandonner la conversation secrète"
#: ../tgp-request.c:379
msgid "Do you want to terminate this secret chat permantently?"
msgstr "Voulez-vous clore cette conversation définitivement ?"
#: ../tgp-request.c:384
msgid "Delete Contact"
msgstr "Supprimer ce contact"
#: ../tgp-request.c:386
msgid "Do you want to remove this user from your global contact list?"
msgstr ""
"Voulez-vous supprimer cet utilisateur de votre liste de contacts globale ?"
#: ../tgp-request.c:401
msgid "Leave Channel"
msgstr "Quitter le canal"
#: ../tgp-request.c:403
msgid "Do you want to leave this channel?"
msgstr "Voulez-vous quitter ce canal ?"
#. This should be the language's timestamp format. This is preceded by a
#. colon.
#: ../tgp-utils.c:27
msgid "%d.%m.%Y %H:%M"
msgstr "%d.%m.%Y %H:%M"
#. This is preceded by a colon.
#: ../tgp-utils.c:48
msgid "recently"
msgstr "récemment"
#. This is preceded by a colon.
#: ../tgp-utils.c:52
msgid "last week"
msgstr "semaine précédente"
#. This is preceded by a colon.
#: ../tgp-utils.c:56
msgid "last month"
msgstr "mois précédent"
#. This is preceded by a colon. It refers to a point on time.
#: ../tgp-utils.c:60
msgid "unknown"
msgstr "inconnue"
#: ../tgp-chat.c:108 ../tgp-chat.c:582
msgid "Telegram Chats"
msgstr "Conversations de Telegram"
#: ../tgp-chat.c:113
msgid "You have already left this chat."
msgstr "Vous avez déjà quitté cette conversation."
#: ../tgp-chat.c:224
msgid "Subject:"
msgstr "Sujet :"
#: ../tgp-chat.c:230
msgid "Invite link:"
msgstr "Lien d'invitation :"
#: ../tgp-chat.c:236
msgid "Chat ID:"
msgstr "Chat ID :"
#: ../tgp-chat.c:342
msgid "Supergroup"
msgstr "Supergroup"
#: ../tgp-chat.c:342
msgid "Channel"
msgstr "Canal"
#: ../tgp-chat.c:345
msgid "Group"
msgstr "Groupe"
#: ../tgp-chat.c:367
msgid "Users in chat"
msgstr "Utilisateurs dans la conversation"
#: ../tgp-chat.c:370
msgid "Type"
msgstr "Type"

613
po/it_IT.po Normal file
View file

@ -0,0 +1,613 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-08-31 22:53+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: Giuseppe Pignataro (Fasbyte01) <rogepix@gmail.com>, 2017\n"
"Language-Team: Italian (Italy) (https://www.transifex.com/telegram-purple-developers/teams/53149/it_IT/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=CHARSET\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: it_IT\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: ../telegram-base.c:500
msgid "Couldn't create group"
msgstr "Impossibile creare un gruppo"
#: ../telegram-base.c:501
msgid "Please select at least one other user."
msgstr "Seleziona almeno un altro utente"
#: ../telegram-base.c:555
msgid "Query Failed"
msgstr "Richiesta fallita"
#: ../telegram-purple.c:162
msgid "Secret chat ready."
msgstr "Chat segreta pronta."
#: ../telegram-purple.c:170
msgid "Secret chat terminated."
msgstr "Chat segreta terminata."
#: ../telegram-purple.c:182
msgid "Telegram"
msgstr "Telegram"
#: ../telegram-purple.c:229
msgid "Message marked as read."
msgstr "Messaggio contrassegnato come letto."
#: ../telegram-purple.c:339
#, c-format
msgid "Invite link: %s"
msgstr "Link d'invito: %s"
#. FIXME: Can TGLCHF_MODERATOR export links?
#: ../telegram-purple.c:350
msgid "Creating chat link failed"
msgstr "Creazione del link della chat fallito"
#: ../telegram-purple.c:351
msgid "You need to be admin of the group to do that."
msgstr "Devi essere admin del gruppo per eseguire questa operazione."
#: ../telegram-purple.c:416
msgid "Chat joined"
msgstr "Entrato nella chat"
#: ../telegram-purple.c:417
msgid "Chat added to list of chat rooms."
msgstr "Chat aggiunta alla lista delle chat rooms"
#: ../telegram-purple.c:443
msgid "Start secret chat..."
msgstr "Inizia chat segreta..."
#. Generate Public Link
#: ../telegram-purple.c:450
msgid "Invite users by link..."
msgstr "Invita utenti tramite link..."
#. Delete self from chat
#: ../telegram-purple.c:458
msgid "Delete and exit..."
msgstr "Elimina ed esci..."
#: ../telegram-purple.c:546
#, c-format
msgid "Unable to sign on as %s: file (public key) not found."
msgstr "Impossibile accedere come %s: file (chiave pubblica) non trovato."
#: ../telegram-purple.c:550
#, c-format
msgid ""
"Make sure telegram-purple is installed properly,\n"
"including the .tglpub file.\n"
"If you're running SELinux (e.g. when using Tails),\n"
"try 'make local_install', or simply copy\n"
"%1$s to %2$s."
msgstr ""
"Assicurati che telegram-purple sia installato correttamente,\n"
"includendo il file .tglpub.\n"
"Se hai avviato SELinux (p.e. quando si usa Tails),\n"
"prova 'make local_install', o semplicemente copia\n"
"%1$s a %2$s."
#: ../telegram-purple.c:572
#, c-format
msgid ""
"Unable to sign on as %s: problem in the underlying library 'tgl'. Please "
"submit a bug report with the debug log."
msgstr ""
"Impossibile entrare come %s: problema con la libreria 'tgl'. Invia un bug "
"report con il log di debug."
#: ../telegram-purple.c:576
msgid "Problem in tgl"
msgstr "Problema in tgl"
#. TRANSLATORS: Please fill in your own prefix!
#: ../telegram-purple.c:584
#, c-format
msgid ""
"Unable to sign on as %s: phone number lacks country prefix. Numbers must "
"start with the full international prefix code, e.g. +1 for USA."
msgstr ""
"Impossibile accedere come %s: il numero telefonico manca del prefisso "
"internazionale.I numeri devono iniziare con il prefisso internazionale "
"completo, p.e. +39 per Italia."
#: ../telegram-purple.c:589
msgid "Incomplete phone number"
msgstr "Numero di telefono incompleto"
#: ../telegram-purple.c:642
msgid "Secret chat was already deleted"
msgstr "La chat segreta è già stata eliminata"
#: ../telegram-purple.c:644
msgid "Secret chat is not ready"
msgstr "La chat segreta non è pronta"
#: ../telegram-purple.c:652
msgid "Only the creator of a channel can post messages."
msgstr "Solo il creatore di un canale può postare messaggi."
#: ../telegram-purple.c:695
msgid "Cannot invite buddy to chat"
msgstr "Impossibile invitare il contatto alla chat."
#: ../telegram-purple.c:696
msgid "Specified user does not exist."
msgstr "L'utente specificato non esiste."
#: ../telegram-purple.c:709
msgid "phone no. (+ country prefix)"
msgstr "num. telefono ( + prefisso internazionale)"
#. Login
#: ../telegram-purple.c:817
msgid "Password (two factor authentication)"
msgstr "Password (autenticazione a due fattori)"
#: ../telegram-purple.c:822
msgid ""
"Fallback SMS verification\n"
"(Helps when not using Pidgin and you aren't being prompted for the code)"
msgstr ""
"Verifica via SMS di scorta.\n"
"(Aiuta quando non si usa Pidgin e non viene richiesto il codice)"
#: ../telegram-purple.c:828
msgid "always"
msgstr "sempre"
#: ../telegram-purple.c:829
msgid "never"
msgstr "mai"
#: ../telegram-purple.c:830
msgid "ask"
msgstr "chiedi"
#: ../telegram-purple.c:832
msgid "Accept secret chats"
msgstr "Accetta chat segrete"
#: ../telegram-purple.c:836
msgid "Display buddies offline after (days)"
msgstr "Mostra utenti offline dopo (giorni)"
#: ../telegram-purple.c:840
msgid ""
"Don't fetch history older than (days)\n"
"(0 for unlimited)"
msgstr ""
"Non recuperare la cronologia meno recente che (giorni)\n"
"(0 per illimitato)"
#. Media
#: ../telegram-purple.c:845
msgid "Autoload media size (kb)"
msgstr "Grandezza media autocaricato (kb)"
#. Chats
#: ../telegram-purple.c:850
msgid "Add all group chats to buddy list"
msgstr "Aggiungi tutte le chat di gruppo alla lista contatti"
#. Read notifications
#: ../telegram-purple.c:855
msgid "Display notices of receipt"
msgstr "Mostra notifiche di ricezione"
#: ../telegram-purple.c:859
msgid "Send notices of receipt when present"
msgstr "Invia notifiche di ricezione quando presente"
#: ../telegram-purple.c:884
msgid "Telegram Protocol Plugin."
msgstr "Plugin di protocollo Telegram"
#: ../tgp-msg.c:58
#, c-format
msgid "%2$s created chat %1$s."
msgstr "%2$s ha creato la chat %1$s."
#: ../tgp-msg.c:61
#, c-format
msgid "%2$s changed title to %1$s."
msgstr "%2$s ha cambiato titolo a %1$s."
#: ../tgp-msg.c:64
#, c-format
msgid "%s changed photo."
msgstr "%s ha cambiato la foto."
#: ../tgp-msg.c:67
#, c-format
msgid "%s deleted photo."
msgstr "%s ha cancellato la foto."
#: ../tgp-msg.c:75
#, c-format
msgid "%1$s added user %2$s by link."
msgstr "%1$s ha aggiunto l'utente %2$s tramite link."
#: ../tgp-msg.c:90
#, c-format
msgid "%2$s added user %1$s."
msgstr "%2$s ha aggiunto l'utente %1$s."
#: ../tgp-msg.c:114 ../tgp-msg.c:131
#, c-format
msgid "%2$s deleted user %1$s."
msgstr "%2$s ha eliminato l'utente %1$s."
#: ../tgp-msg.c:138
#, c-format
msgid "%2$s set self destruction timer to %1$d second."
msgid_plural "%2$s set self destruction timer to %1$d seconds."
msgstr[0] "%2$s ha impostato il timer di autodistruzione a %1$d secondi."
msgstr[1] "%2$s ha impostato il timer di autodistruzione a %1$d secondi."
#: ../tgp-msg.c:144
#, c-format
msgid "%2$s marked %1$d message read."
msgid_plural "%2$s marked %1$d messages read."
msgstr[0] "%2$s ha contrassegnato come letti i messaggi %1$d "
msgstr[1] "%2$s ha contrassegnato come letti i messaggi %1$d "
#: ../tgp-msg.c:150
#, c-format
msgid "%2$s deleted %1$d message."
msgid_plural "%2$s deleted %1$d messages."
msgstr[0] "%2$s ha cancellato %1$d messaggi."
msgstr[1] "%2$s ha cancellato %1$d messaggi."
#: ../tgp-msg.c:156
#, c-format
msgid "%2$s made a screenshot of %1$d message."
msgid_plural "%2$s made a screenshot of %1$d messages."
msgstr[0] "%2$s ha creato una immagine dello schermo dei messaggi %1$d."
msgstr[1] "%2$s ha creato una immagine dello schermo dei messaggi %1$d."
#: ../tgp-msg.c:162
#, c-format
msgid "Channel %1$s created"
msgstr "Canale %1$s creato"
#. FIXME: check if this makes sense
#: ../tgp-msg.c:165 ../tgp-chat.c:124 ../tgp-chat.c:576
msgid "Telegram Channels"
msgstr "Canali Telegram"
#: ../tgp-msg.c:191
msgid "Sending message failed."
msgstr "Invio immagine fallito."
#: ../tgp-msg.c:253
msgid "Sending image failed."
msgstr "Invio immagine fallito."
#: ../tgp-msg.c:417
#, c-format
msgid "%s sent a sticker."
msgstr "%s ha inviato uno sticker."
#: ../tgp-msg.c:463
msgid "failed loading message"
msgstr "caricamento del messaggio fallito"
#: ../tgp-msg.c:498
msgid "[animation]"
msgstr "[animazione]"
#: ../tgp-msg.c:515
msgid "[audio]"
msgstr "[audio]"
#: ../tgp-msg.c:515
msgid "[video]"
msgstr "[video]"
#: ../tgp-msg.c:604
#, c-format
msgid "<b>Forwarded message from: %s</b><br>%s"
msgstr "<b>Messaggio inoltrato da: %s</b><br>%s"
#. FIXME: sometimes users aren't part of the response when receiving a
#. forwarded message
#: ../tgp-msg.c:607
#, c-format
msgid "<b>Forwarded message:</b><br>%s"
msgstr "<b>Messaggio inoltrato:</b><br>%s"
#: ../tgp-msg.c:720
msgid "loading document or picture failed"
msgstr "caricamento del documento o della foto fallito"
#: ../tgp-net.c:281
msgid "Cannot connect to main server"
msgstr "Impossibile connettersi col server"
#: ../tgp-net.c:322
msgid "Cannot connect to server: Ping timeout."
msgstr "Impossibile connettersi al server: Ping timeout."
#: ../tgp-net.c:365
msgid "Lost connection to the server..."
msgstr "Connessione al server fallita..."
#: ../tgp-request.c:51
msgid ""
"Telegram wants to verify your identity. Please enter the login code that you"
" have received via SMS."
msgstr ""
"Telegram vuole verificare la tua identità, Prego inserisci il codice "
"ricevuto via SMS."
#: ../tgp-request.c:54
msgid "Login code"
msgstr "Codice di accesso (login)"
#: ../tgp-request.c:54
msgid "Enter login code"
msgstr "Inserire codice d'accesso (login)"
#: ../tgp-request.c:54
msgid "the code"
msgstr "il codice"
#: ../tgp-request.c:54 ../tgp-request.c:104 ../tgp-request.c:198
#: ../tgp-request.c:233 ../tgp-request.c:263
msgid "OK"
msgstr "OK"
#: ../tgp-request.c:55 ../tgp-request.c:104 ../tgp-request.c:123
#: ../tgp-request.c:199 ../tgp-request.c:234 ../tgp-request.c:264
msgid "Cancel"
msgstr "Annulla"
#: ../tgp-request.c:95
msgid "Registration"
msgstr "Registrazione"
#: ../tgp-request.c:96
msgid "First name"
msgstr "Nome"
#: ../tgp-request.c:99
msgid "Last name"
msgstr "Cognome"
#: ../tgp-request.c:103
msgid "Register"
msgstr "Registrati"
#: ../tgp-request.c:103
msgid "Please register your phone number."
msgstr "Per favore registra il tuo numero di telefono."
#. purple_request API not available
#: ../tgp-request.c:108
msgid ""
"Phone number is not registered. Please register your phone on a different "
"client."
msgstr ""
"Numero telefonico non registrato. Per favore registra il tuo numero "
"telefonico con un client differente."
#: ../tgp-request.c:110
msgid "Not registered"
msgstr "Non registrato"
#: ../tgp-request.c:122
msgid "Password needed"
msgstr "Password necessaria"
#: ../tgp-request.c:122
msgid "Enter password for two factor authentication"
msgstr "Inserire password per autenticazione a due fattori"
#: ../tgp-request.c:123
msgid "Ok"
msgstr "Ok"
#: ../tgp-request.c:125
msgid ""
"No password set for two factor authentication. Please enter it in the "
"extended settings."
msgstr ""
"Nessuna password impostata per l'autenticazione a due fattori.Prego "
"impostarla nelle impostazioni estese"
#: ../tgp-request.c:127
msgid "Password invalid"
msgstr "Password non valida"
#: ../tgp-request.c:150
#, c-format
msgid "Accept secret chat '%s' on this device?"
msgstr "Accetti la Chat Segreta '%s'?"
#: ../tgp-request.c:151
msgid "Secret chat"
msgstr "Chat Segreta"
#: ../tgp-request.c:151
msgid ""
"Secret chats can only have one end point. If you accept a secret chat on "
"this device, its messages will not be available anywhere else. If you "
"decline, you can still accept the chat on other devices."
msgstr ""
"Le Chat Segrete possono avere un solo punto terminale. Se accetti la chat "
"segreta su questo dispositivo, i messaggi dentro di essa non saranno "
"disponibili da nessun altra parte. Se declini, potrai accettare la chat su "
"altri dispositivi."
#: ../tgp-request.c:182
msgid ""
"Invite at least one additional user by specifying\n"
" their full name (autocompletion available).\n"
"You can add more users once the chat was created."
msgstr ""
"Invita almeno un altro utente specificando\n"
" il suo nome completo (autocompletamento disponibile).\n"
"Puoi aggiungere più utenti una volta che la chat è stata creata."
#: ../tgp-request.c:185 ../tgp-request.c:189 ../tgp-request.c:193
msgid "Username"
msgstr "Nome utente"
#: ../tgp-request.c:198
msgid "Create group chat"
msgstr "Crea chat di gruppo"
#: ../tgp-request.c:198
msgid "Invite users"
msgstr "Invita utenti"
#: ../tgp-request.c:217 ../tgp-request.c:232
msgid "Change password"
msgstr "Cambia password"
#: ../tgp-request.c:219
msgid "Current"
msgstr "Corrente"
#: ../tgp-request.c:223 ../tgp-request.c:253
msgid "Password"
msgstr "Password"
#: ../tgp-request.c:227 ../tgp-request.c:257
msgid "Confirm"
msgstr "Conferma"
#: ../tgp-request.c:251 ../tgp-request.c:262
msgid "New password"
msgstr "Nuova password"
#. if we arrive here for the second time the specified phone number is not
#. valid. We do not
#. ask for the phone number directly, cause in that case the account would
#. still be created
#. named with the invalid phone number, even though the login will work
#: ../tgp-request.c:300
msgid "Invalid phone number"
msgstr "Numero di telefono non valido"
#: ../tgp-request.c:301
msgid ""
"Please enter only numbers in the international phone number format, a leading + following by the country prefix and the phone number.\n"
"Do not use any other special chars."
msgstr ""
"Inserire solo numeri nel formato telefonico internazionale, un + iniziale, seguito dal prefisso internazionale e al numero telefonico completo. \n"
"Non usare altri caratteri speciali."
#: ../tgp-request.c:370
msgid "Leave Chat"
msgstr "Lascia chat"
#: ../tgp-request.c:372
msgid "Do you want to leave this chat permantently?"
msgstr "Vuoi lasciare questa chat in modo permanente?"
#: ../tgp-request.c:377
msgid "Abort Secret Chat"
msgstr "Annulla Chat Segreta"
#: ../tgp-request.c:379
msgid "Do you want to terminate this secret chat permantently?"
msgstr "Vuoi terminare questa chat segreta in modo permanente?"
#: ../tgp-request.c:384
msgid "Delete Contact"
msgstr "Elimina contatto"
#: ../tgp-request.c:386
msgid "Do you want to remove this user from your global contact list?"
msgstr "Vuoi rimuovere questo utente dal tuo elenco dei contatti globale?"
#: ../tgp-request.c:401
msgid "Leave Channel"
msgstr "Lascia il canale"
#: ../tgp-request.c:403
msgid "Do you want to leave this channel?"
msgstr "Vuoi lasciare questo canale?"
#. This should be the language's timestamp format. This is preceded by a
#. colon.
#: ../tgp-utils.c:27
msgid "%d.%m.%Y %H:%M"
msgstr "%d.%m.%Y %H:%M"
#. This is preceded by a colon.
#: ../tgp-utils.c:48
msgid "recently"
msgstr "recentemente"
#. This is preceded by a colon.
#: ../tgp-utils.c:52
msgid "last week"
msgstr "ultima settimana"
#. This is preceded by a colon.
#: ../tgp-utils.c:56
msgid "last month"
msgstr "ultimo mese"
#. This is preceded by a colon. It refers to a point on time.
#: ../tgp-utils.c:60
msgid "unknown"
msgstr "sconosciuto"
#: ../tgp-chat.c:108 ../tgp-chat.c:582
msgid "Telegram Chats"
msgstr "Chat di Telegram"
#: ../tgp-chat.c:113
msgid "You have already left this chat."
msgstr "Hai già lasciato questa chat."
#: ../tgp-chat.c:224
msgid "Subject:"
msgstr "Oggetto:"
#: ../tgp-chat.c:230
msgid "Invite link:"
msgstr "Link d'invito:"
#: ../tgp-chat.c:236
msgid "Chat ID:"
msgstr "ID chat:"
#: ../tgp-chat.c:342
msgid "Supergroup"
msgstr "Supergruppo"
#: ../tgp-chat.c:342
msgid "Channel"
msgstr "Canale"
#: ../tgp-chat.c:345
msgid "Group"
msgstr "Gruppo"
#: ../tgp-chat.c:367
msgid "Users in chat"
msgstr "Utenti in chat."
#: ../tgp-chat.c:370
msgid "Type"
msgstr "Tipo"

613
po/nl.po Normal file
View file

@ -0,0 +1,613 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-08-31 22:53+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: justin [notsupplied] <inactive+justin50@transifex.com>, 2016\n"
"Language-Team: Dutch (https://www.transifex.com/telegram-purple-developers/teams/53149/nl/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=CHARSET\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: nl\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: ../telegram-base.c:500
msgid "Couldn't create group"
msgstr "Kon groep niet aanmaken"
#: ../telegram-base.c:501
msgid "Please select at least one other user."
msgstr "Selecteer minimaal één andere gebruiker."
#: ../telegram-base.c:555
msgid "Query Failed"
msgstr "Zoekopdracht mislukt"
#: ../telegram-purple.c:162
msgid "Secret chat ready."
msgstr "Geheime chat gereed."
#: ../telegram-purple.c:170
msgid "Secret chat terminated."
msgstr "Geheime chat beëindigd."
#: ../telegram-purple.c:182
msgid "Telegram"
msgstr "Telegram"
#: ../telegram-purple.c:229
msgid "Message marked as read."
msgstr "Bericht gemarkeerd als gelezen."
#: ../telegram-purple.c:339
#, c-format
msgid "Invite link: %s"
msgstr "Uitnodigingkoppeling: %s"
#. FIXME: Can TGLCHF_MODERATOR export links?
#: ../telegram-purple.c:350
msgid "Creating chat link failed"
msgstr "Chatkoppeling aanmaken mislukt"
#: ../telegram-purple.c:351
msgid "You need to be admin of the group to do that."
msgstr "U moet administrator van de groep zijn om dat te kunnen doen."
#: ../telegram-purple.c:416
msgid "Chat joined"
msgstr "Bij chat binnengekomen"
#: ../telegram-purple.c:417
msgid "Chat added to list of chat rooms."
msgstr "Chat toegevoegd aan de chatruimtelijst."
#: ../telegram-purple.c:443
msgid "Start secret chat..."
msgstr "Geheime chat starten..."
#. Generate Public Link
#: ../telegram-purple.c:450
msgid "Invite users by link..."
msgstr "Gebruikers met koppeling uitnodigen..."
#. Delete self from chat
#: ../telegram-purple.c:458
msgid "Delete and exit..."
msgstr "Verwijderen en afsluiten..."
#: ../telegram-purple.c:546
#, c-format
msgid "Unable to sign on as %s: file (public key) not found."
msgstr "Kan niet aanmelden als %s: (publieke sleutel) niet gevonden."
#: ../telegram-purple.c:550
#, c-format
msgid ""
"Make sure telegram-purple is installed properly,\n"
"including the .tglpub file.\n"
"If you're running SELinux (e.g. when using Tails),\n"
"try 'make local_install', or simply copy\n"
"%1$s to %2$s."
msgstr ""
"Zorg ervoor dat telegram-purple juist is \n"
"geïnstalleerd, alsmede het .tglpub-bestand.\n"
"Als u SELinux uitvoert (bijv. bij gebruik van Tails),\n"
"probeer make local_install, of kopieer simpelweg\n"
"%1$s naar %2$s."
#: ../telegram-purple.c:572
#, c-format
msgid ""
"Unable to sign on as %s: problem in the underlying library 'tgl'. Please "
"submit a bug report with the debug log."
msgstr ""
"Kon niet aanmelden als %s: probleem in de onderliggende bibliotheek tgl. "
"Verstuur alstublieft een foutenrapport met het debuglogboek."
#: ../telegram-purple.c:576
msgid "Problem in tgl"
msgstr "Probleem in tgl"
#. TRANSLATORS: Please fill in your own prefix!
#: ../telegram-purple.c:584
#, c-format
msgid ""
"Unable to sign on as %s: phone number lacks country prefix. Numbers must "
"start with the full international prefix code, e.g. +1 for USA."
msgstr ""
"Kon niet aanmelden als %s: landnummer ontbreekt in telefoonnummer. Nummers "
"moeten starten met het volledige internationale landnummer, bijvoorbeeld +31"
" voor Nederland."
#: ../telegram-purple.c:589
msgid "Incomplete phone number"
msgstr "Onvolledig telefoonnummer"
#: ../telegram-purple.c:642
msgid "Secret chat was already deleted"
msgstr "Geheime chat was al verwijderd"
#: ../telegram-purple.c:644
msgid "Secret chat is not ready"
msgstr "Geheime chat is niet gereed"
#: ../telegram-purple.c:652
msgid "Only the creator of a channel can post messages."
msgstr "Alleen de maker van een kanaal kan berichten plaatsen."
#: ../telegram-purple.c:695
msgid "Cannot invite buddy to chat"
msgstr "Kan vriend niet uitnodigen om te chatten"
#: ../telegram-purple.c:696
msgid "Specified user does not exist."
msgstr "Opgegeven gebruiker bestaat niet."
#: ../telegram-purple.c:709
msgid "phone no. (+ country prefix)"
msgstr "telefoonnummer (+ landnummer)"
#. Login
#: ../telegram-purple.c:817
msgid "Password (two factor authentication)"
msgstr "Wachtwoord (authentificatie in twee stappen)"
#: ../telegram-purple.c:822
msgid ""
"Fallback SMS verification\n"
"(Helps when not using Pidgin and you aren't being prompted for the code)"
msgstr ""
"SMS-verificatie om op terug te vallen\n"
"(Helpt wanneer u Pidgin niet gebruikt en niet wordt gevraagd om de code)"
#: ../telegram-purple.c:828
msgid "always"
msgstr "altijd"
#: ../telegram-purple.c:829
msgid "never"
msgstr "nooit"
#: ../telegram-purple.c:830
msgid "ask"
msgstr "vragen"
#: ../telegram-purple.c:832
msgid "Accept secret chats"
msgstr "Geheime chats accepteren"
#: ../telegram-purple.c:836
msgid "Display buddies offline after (days)"
msgstr "Vrienden offline weergeven na (dagen)"
#: ../telegram-purple.c:840
msgid ""
"Don't fetch history older than (days)\n"
"(0 for unlimited)"
msgstr ""
"Geschiedenis niet ophalen voor ouder\n"
"dan (dagen) (0 voor oneindig)"
#. Media
#: ../telegram-purple.c:845
msgid "Autoload media size (kb)"
msgstr "Mediagrootte automatisch laden (kb)"
#. Chats
#: ../telegram-purple.c:850
msgid "Add all group chats to buddy list"
msgstr "Alle groepschats aan de vriendenlijst toevoegen"
#. Read notifications
#: ../telegram-purple.c:855
msgid "Display notices of receipt"
msgstr "Ontvangstmeldingen tonen"
#: ../telegram-purple.c:859
msgid "Send notices of receipt when present"
msgstr "Ontvangstmeldingen versturen indien aanwezig"
#: ../telegram-purple.c:884
msgid "Telegram Protocol Plugin."
msgstr "Telegram-protocol-plug-in."
#: ../tgp-msg.c:58
#, c-format
msgid "%2$s created chat %1$s."
msgstr "%2$s heeft geheime chat %1$s aangemaakt."
#: ../tgp-msg.c:61
#, c-format
msgid "%2$s changed title to %1$s."
msgstr "%2$s heeft titel naar %1$s gewijzigd."
#: ../tgp-msg.c:64
#, c-format
msgid "%s changed photo."
msgstr "%s heeft foto gewijzigd."
#: ../tgp-msg.c:67
#, c-format
msgid "%s deleted photo."
msgstr "%s heeft foto verwijderd."
#: ../tgp-msg.c:75
#, c-format
msgid "%1$s added user %2$s by link."
msgstr "%1$s heeft gebruiker %2$s toegevoegd met koppeling."
#: ../tgp-msg.c:90
#, c-format
msgid "%2$s added user %1$s."
msgstr "%2$s heeft gebruiker %1$s toegevoegd."
#: ../tgp-msg.c:114 ../tgp-msg.c:131
#, c-format
msgid "%2$s deleted user %1$s."
msgstr "%2$s heeft gebruiker %1$s verwijderd."
#: ../tgp-msg.c:138
#, c-format
msgid "%2$s set self destruction timer to %1$d second."
msgid_plural "%2$s set self destruction timer to %1$d seconds."
msgstr[0] "%2$s heeft zelfvernietigingstimer ingesteld op %1$d seconde."
msgstr[1] "%2$s heeft zelfvernietigingstimer ingesteld op %1$d seconden."
#: ../tgp-msg.c:144
#, c-format
msgid "%2$s marked %1$d message read."
msgid_plural "%2$s marked %1$d messages read."
msgstr[0] "%2$s heeft %1$d bericht als gelezen gemarkeerd."
msgstr[1] "%2$s heeft %1$d berichten als gelezen gemarkeerd."
#: ../tgp-msg.c:150
#, c-format
msgid "%2$s deleted %1$d message."
msgid_plural "%2$s deleted %1$d messages."
msgstr[0] "%2$s heeft %1$d bericht verwijderd."
msgstr[1] "%2$s heeft %1$d berichten verwijderd."
#: ../tgp-msg.c:156
#, c-format
msgid "%2$s made a screenshot of %1$d message."
msgid_plural "%2$s made a screenshot of %1$d messages."
msgstr[0] "%2$s heeft een schermafdruk gemaakt van %1$d bericht."
msgstr[1] "%2$s heeft een schermafdruk gemaakt van %1$d berichten."
#: ../tgp-msg.c:162
#, c-format
msgid "Channel %1$s created"
msgstr "Kanaal %1$s aangemaakt"
#. FIXME: check if this makes sense
#: ../tgp-msg.c:165 ../tgp-chat.c:124 ../tgp-chat.c:576
msgid "Telegram Channels"
msgstr "Telegram-kanalen"
#: ../tgp-msg.c:191
msgid "Sending message failed."
msgstr "Bericht versturen mislukt."
#: ../tgp-msg.c:253
msgid "Sending image failed."
msgstr "Afbeelding versturen mislukt."
#: ../tgp-msg.c:417
#, c-format
msgid "%s sent a sticker."
msgstr "%s heeft een sticker verzonden."
#: ../tgp-msg.c:463
msgid "failed loading message"
msgstr "bericht laden mislukt"
#: ../tgp-msg.c:498
msgid "[animation]"
msgstr "[animatie]"
#: ../tgp-msg.c:515
msgid "[audio]"
msgstr "[audio]"
#: ../tgp-msg.c:515
msgid "[video]"
msgstr "[video]"
#: ../tgp-msg.c:604
#, c-format
msgid "<b>Forwarded message from: %s</b><br>%s"
msgstr "<b>Doorgestuurd bericht van: %s</b><br>%s"
#. FIXME: sometimes users aren't part of the response when receiving a
#. forwarded message
#: ../tgp-msg.c:607
#, c-format
msgid "<b>Forwarded message:</b><br>%s"
msgstr "<b>Doorgestuurd bericht:</b><br>%s"
#: ../tgp-msg.c:720
msgid "loading document or picture failed"
msgstr "document of foto laden mislukt"
#: ../tgp-net.c:281
msgid "Cannot connect to main server"
msgstr "Kan niet verbinden met hoofdserver"
#: ../tgp-net.c:322
msgid "Cannot connect to server: Ping timeout."
msgstr "Kan niet verbinden met server: ping-timeout"
#: ../tgp-net.c:365
msgid "Lost connection to the server..."
msgstr "Verbinding met de server verloren..."
#: ../tgp-request.c:51
msgid ""
"Telegram wants to verify your identity. Please enter the login code that you"
" have received via SMS."
msgstr ""
"Telegram wil uw identiteit graag controleren. Voer de inlogcode in die u per"
" SMS heeft ontvangen."
#: ../tgp-request.c:54
msgid "Login code"
msgstr "Inlogcode"
#: ../tgp-request.c:54
msgid "Enter login code"
msgstr "Inlogcode invoeren"
#: ../tgp-request.c:54
msgid "the code"
msgstr "de code"
#: ../tgp-request.c:54 ../tgp-request.c:104 ../tgp-request.c:198
#: ../tgp-request.c:233 ../tgp-request.c:263
msgid "OK"
msgstr "Ok"
#: ../tgp-request.c:55 ../tgp-request.c:104 ../tgp-request.c:123
#: ../tgp-request.c:199 ../tgp-request.c:234 ../tgp-request.c:264
msgid "Cancel"
msgstr "Annuleren"
#: ../tgp-request.c:95
msgid "Registration"
msgstr "Registratie"
#: ../tgp-request.c:96
msgid "First name"
msgstr "Voornaam"
#: ../tgp-request.c:99
msgid "Last name"
msgstr "Achternaam"
#: ../tgp-request.c:103
msgid "Register"
msgstr "Registreren"
#: ../tgp-request.c:103
msgid "Please register your phone number."
msgstr "Registreer uw telefoonnummer."
#. purple_request API not available
#: ../tgp-request.c:108
msgid ""
"Phone number is not registered. Please register your phone on a different "
"client."
msgstr ""
"Uw telefoonnummer is niet geregistreerd. Registreer uw telefoon op een ander"
" apparaat."
#: ../tgp-request.c:110
msgid "Not registered"
msgstr "Niet geregistreerd"
#: ../tgp-request.c:122
msgid "Password needed"
msgstr "Wachtwoord benodigd"
#: ../tgp-request.c:122
msgid "Enter password for two factor authentication"
msgstr "Wachtwoord invoeren voor authentificatie in twee stappen"
#: ../tgp-request.c:123
msgid "Ok"
msgstr "Ok"
#: ../tgp-request.c:125
msgid ""
"No password set for two factor authentication. Please enter it in the "
"extended settings."
msgstr ""
"Geen wachtwoord ingesteld voor authentificatie in twee stappen. Voer deze in"
" bij de uitgebreide instellingen."
#: ../tgp-request.c:127
msgid "Password invalid"
msgstr "Wachtwoord ongeldig"
#: ../tgp-request.c:150
#, c-format
msgid "Accept secret chat '%s' on this device?"
msgstr "Geheime chat %s op dit apparaat accepteren?"
#: ../tgp-request.c:151
msgid "Secret chat"
msgstr "Geheime chat"
#: ../tgp-request.c:151
msgid ""
"Secret chats can only have one end point. If you accept a secret chat on "
"this device, its messages will not be available anywhere else. If you "
"decline, you can still accept the chat on other devices."
msgstr ""
"Geheime chat kunnen slechts één afleverpunt bevatten. Als u een geheime chat"
" op dit apparaat accepteert kunt u deze berichten nergens anders bekijken. "
"Als u weigert kunt u de chat nog steeds op andere apparaten accepteren."
#: ../tgp-request.c:182
msgid ""
"Invite at least one additional user by specifying\n"
" their full name (autocompletion available).\n"
"You can add more users once the chat was created."
msgstr ""
"Nodig minimaal één andere gebruiker uit door\n"
" volledige namen op te geven (automatisch \n"
"aanvullen is beschikbaar). U kunt meer gebruikers\n"
"toevoegen als de chat aangemaakt is."
#: ../tgp-request.c:185 ../tgp-request.c:189 ../tgp-request.c:193
msgid "Username"
msgstr "Gebruikersnaam"
#: ../tgp-request.c:198
msgid "Create group chat"
msgstr "Groepschat aanmaken"
#: ../tgp-request.c:198
msgid "Invite users"
msgstr "Gebruikers uitnodigen"
#: ../tgp-request.c:217 ../tgp-request.c:232
msgid "Change password"
msgstr "Wachtwoord wijzigen"
#: ../tgp-request.c:219
msgid "Current"
msgstr "Huidig"
#: ../tgp-request.c:223 ../tgp-request.c:253
msgid "Password"
msgstr "Wachtwoord"
#: ../tgp-request.c:227 ../tgp-request.c:257
msgid "Confirm"
msgstr "Bevestigen"
#: ../tgp-request.c:251 ../tgp-request.c:262
msgid "New password"
msgstr "Nieuw wachtwoord"
#. if we arrive here for the second time the specified phone number is not
#. valid. We do not
#. ask for the phone number directly, cause in that case the account would
#. still be created
#. named with the invalid phone number, even though the login will work
#: ../tgp-request.c:300
msgid "Invalid phone number"
msgstr "Onvolledig telefoonnummer"
#: ../tgp-request.c:301
msgid ""
"Please enter only numbers in the international phone number format, a leading + following by the country prefix and the phone number.\n"
"Do not use any other special chars."
msgstr ""
"Voer alleen cijfers in in het internationale telefoonnummerformaat, dus om te beginnen een + gevolgd door het landnummer en het telefoonnummer.\n"
"Gebruik geen andere speciale tekens."
#: ../tgp-request.c:370
msgid "Leave Chat"
msgstr "Chat verlaten"
#: ../tgp-request.c:372
msgid "Do you want to leave this chat permantently?"
msgstr "Wilt u deze chat permanent verlaten?"
#: ../tgp-request.c:377
msgid "Abort Secret Chat"
msgstr "Geheime chat beëindigen"
#: ../tgp-request.c:379
msgid "Do you want to terminate this secret chat permantently?"
msgstr "Wilt u deze geheime chat permanent beëindigen?"
#: ../tgp-request.c:384
msgid "Delete Contact"
msgstr "Contact verwijderen"
#: ../tgp-request.c:386
msgid "Do you want to remove this user from your global contact list?"
msgstr "Wil u deze gebruiker uit uw algemene contactenlijst verwijderen?"
#: ../tgp-request.c:401
msgid "Leave Channel"
msgstr "Kanaal verlaten"
#: ../tgp-request.c:403
msgid "Do you want to leave this channel?"
msgstr "Wilt u dit kanaal verlaten?"
#. This should be the language's timestamp format. This is preceded by a
#. colon.
#: ../tgp-utils.c:27
msgid "%d.%m.%Y %H:%M"
msgstr "%d-%m-%Y %H:%M"
#. This is preceded by a colon.
#: ../tgp-utils.c:48
msgid "recently"
msgstr "recent"
#. This is preceded by a colon.
#: ../tgp-utils.c:52
msgid "last week"
msgstr "afgelopen week"
#. This is preceded by a colon.
#: ../tgp-utils.c:56
msgid "last month"
msgstr "afgelopen maand"
#. This is preceded by a colon. It refers to a point on time.
#: ../tgp-utils.c:60
msgid "unknown"
msgstr "onbekend"
#: ../tgp-chat.c:108 ../tgp-chat.c:582
msgid "Telegram Chats"
msgstr "Telegram-chats"
#: ../tgp-chat.c:113
msgid "You have already left this chat."
msgstr "U heeft dit kanaal al verlaten."
#: ../tgp-chat.c:224
msgid "Subject:"
msgstr "Onderwerp:"
#: ../tgp-chat.c:230
msgid "Invite link:"
msgstr "Uitnodigingskoppeling:"
#: ../tgp-chat.c:236
msgid "Chat ID:"
msgstr "Chat-ID:"
#: ../tgp-chat.c:342
msgid "Supergroup"
msgstr "Supergroep"
#: ../tgp-chat.c:342
msgid "Channel"
msgstr "Kanaal"
#: ../tgp-chat.c:345
msgid "Group"
msgstr "Groep"
#: ../tgp-chat.c:367
msgid "Users in chat"
msgstr "Gebruikers in chat"
#: ../tgp-chat.c:370
msgid "Type"
msgstr "Soort"

623
po/pl_PL.po Normal file
View file

@ -0,0 +1,623 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-08-31 22:53+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: Piotr Drąg <piotrdrag@gmail.com>, 2016\n"
"Language-Team: Polish (Poland) (https://www.transifex.com/telegram-purple-developers/teams/53149/pl_PL/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=CHARSET\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: pl_PL\n"
"Plural-Forms: nplurals=4; plural=(n==1 ? 0 : (n%10>=2 && n%10<=4) && (n%100<12 || n%100>=14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && n%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);\n"
#: ../telegram-base.c:500
msgid "Couldn't create group"
msgstr "Nie można utworzyć grupy"
#: ../telegram-base.c:501
msgid "Please select at least one other user."
msgstr "Należy wybrać co najmniej jednego użytkownika."
#: ../telegram-base.c:555
msgid "Query Failed"
msgstr "Zapytanie się nie powiodło"
#: ../telegram-purple.c:162
msgid "Secret chat ready."
msgstr "Tajna rozmowa jest gotowa."
#: ../telegram-purple.c:170
msgid "Secret chat terminated."
msgstr "Zakończono tajną rozmowę."
#: ../telegram-purple.c:182
msgid "Telegram"
msgstr "Telegram"
#: ../telegram-purple.c:229
msgid "Message marked as read."
msgstr "Oznaczono wiadomość jako przeczytaną."
#: ../telegram-purple.c:339
#, c-format
msgid "Invite link: %s"
msgstr "Odnośnik do zaproszenia: %s"
#. FIXME: Can TGLCHF_MODERATOR export links?
#: ../telegram-purple.c:350
msgid "Creating chat link failed"
msgstr "Utworzenie odnośnika do rozmowy się nie powiodło"
#: ../telegram-purple.c:351
msgid "You need to be admin of the group to do that."
msgstr "Należy być administratorem grupy, aby to zrobić."
#: ../telegram-purple.c:416
msgid "Chat joined"
msgstr "Dołączono do rozmowy"
#: ../telegram-purple.c:417
msgid "Chat added to list of chat rooms."
msgstr "Dodano rozmowę do listy pokojów rozmów."
#: ../telegram-purple.c:443
msgid "Start secret chat..."
msgstr "Rozpocznij tajną rozmowę…"
#. Generate Public Link
#: ../telegram-purple.c:450
msgid "Invite users by link..."
msgstr "Zaproś użytkowników przez odnośnik…"
#. Delete self from chat
#: ../telegram-purple.c:458
msgid "Delete and exit..."
msgstr "Usuń i wyjdź…"
#: ../telegram-purple.c:546
#, c-format
msgid "Unable to sign on as %s: file (public key) not found."
msgstr ""
"Nie można zalogować jako %s: nie odnaleziono pliku (klucza publicznego)."
#: ../telegram-purple.c:550
#, c-format
msgid ""
"Make sure telegram-purple is installed properly,\n"
"including the .tglpub file.\n"
"If you're running SELinux (e.g. when using Tails),\n"
"try 'make local_install', or simply copy\n"
"%1$s to %2$s."
msgstr ""
"Proszę się upewnić, że telegram-purple jest poprawnie zainstalowane,\n"
"w tym plik .tglpub.\n"
"Jeśli używany jest SELinux (np. podczas używania Tails),\n"
"to proszę spróbować polecenia „make local_install” lub po prostu skopiować\n"
"%1$s do %2$s."
#: ../telegram-purple.c:572
#, c-format
msgid ""
"Unable to sign on as %s: problem in the underlying library 'tgl'. Please "
"submit a bug report with the debug log."
msgstr ""
"Nie można zalogować jako %s: problem w bibliotece „tgl”. Proszę zgłosić błąd"
" z dziennikiem debugowania."
#: ../telegram-purple.c:576
msgid "Problem in tgl"
msgstr "Problem w bibliotece tgl"
#. TRANSLATORS: Please fill in your own prefix!
#: ../telegram-purple.c:584
#, c-format
msgid ""
"Unable to sign on as %s: phone number lacks country prefix. Numbers must "
"start with the full international prefix code, e.g. +1 for USA."
msgstr ""
"Nie można zalogować jako %s: numer telefonu nie ma przedrostka kraju. Numery"
" muszą zaczynać się od pełnego międzynarodowego przedrostka, np. +48 dla "
"Polski."
#: ../telegram-purple.c:589
msgid "Incomplete phone number"
msgstr "Niepełny numer telefonu"
#: ../telegram-purple.c:642
msgid "Secret chat was already deleted"
msgstr "Już usunięto tajną rozmowę"
#: ../telegram-purple.c:644
msgid "Secret chat is not ready"
msgstr "Tajna rozmowa nie jest gotowa"
#: ../telegram-purple.c:652
msgid "Only the creator of a channel can post messages."
msgstr "Tylko twórca kanału może wysyłać wiadomości."
#: ../telegram-purple.c:695
msgid "Cannot invite buddy to chat"
msgstr "Nie można zaprosić znajomego do rozmowy"
#: ../telegram-purple.c:696
msgid "Specified user does not exist."
msgstr "Podany użytkownik nie istnieje."
#: ../telegram-purple.c:709
msgid "phone no. (+ country prefix)"
msgstr "numer telefonu (+ przedrostek kraju)"
#. Login
#: ../telegram-purple.c:817
msgid "Password (two factor authentication)"
msgstr "Hasło (uwierzytelnianie dwustopniowe)"
#: ../telegram-purple.c:822
msgid ""
"Fallback SMS verification\n"
"(Helps when not using Pidgin and you aren't being prompted for the code)"
msgstr ""
"Zapasowa weryfikacja przez SMS\n"
"(Pomaga w przypadkach, kiedy nie jest używany program Pidgin i użytkownik nie jest pytany o kod)"
#: ../telegram-purple.c:828
msgid "always"
msgstr "zawsze"
#: ../telegram-purple.c:829
msgid "never"
msgstr "nigdy"
#: ../telegram-purple.c:830
msgid "ask"
msgstr "pytanie"
#: ../telegram-purple.c:832
msgid "Accept secret chats"
msgstr "Odbieranie tajnych rozmów"
#: ../telegram-purple.c:836
msgid "Display buddies offline after (days)"
msgstr "Wyświetlanie znajomych jako w trybie offline po (w dniach)"
#: ../telegram-purple.c:840
msgid ""
"Don't fetch history older than (days)\n"
"(0 for unlimited)"
msgstr ""
"Bez pobierania historii starszej niż (w dniach)\n"
"(0 oznacza brak ograniczenia)"
#. Media
#: ../telegram-purple.c:845
msgid "Autoload media size (kb)"
msgstr "Rozmiar automatycznie wczytywanych multimediów (w kilobajtach)"
#. Chats
#: ../telegram-purple.c:850
msgid "Add all group chats to buddy list"
msgstr "Dodawanie wszystkich rozmów grupowych do listy znajomych"
#. Read notifications
#: ../telegram-purple.c:855
msgid "Display notices of receipt"
msgstr "Wyświetlanie powiadomień o odebraniu"
#: ../telegram-purple.c:859
msgid "Send notices of receipt when present"
msgstr "Wysyłanie powiadomień o odebraniu podczas obecności"
#: ../telegram-purple.c:884
msgid "Telegram Protocol Plugin."
msgstr "Wtyczka protokołu Telegram."
#: ../tgp-msg.c:58
#, c-format
msgid "%2$s created chat %1$s."
msgstr "Użytkownik %2$s utworzył rozmowę %1$s."
#: ../tgp-msg.c:61
#, c-format
msgid "%2$s changed title to %1$s."
msgstr "Użytkownik %2$s zmienił tytuł na %1$s."
#: ../tgp-msg.c:64
#, c-format
msgid "%s changed photo."
msgstr "Użytkownik %s zmienił zdjęcie."
#: ../tgp-msg.c:67
#, c-format
msgid "%s deleted photo."
msgstr "Użytkownik %s usunął zdjęcie."
#: ../tgp-msg.c:75
#, c-format
msgid "%1$s added user %2$s by link."
msgstr "Użytkownik %1$s dodał użytkownika %2$s przez odnośnik."
#: ../tgp-msg.c:90
#, c-format
msgid "%2$s added user %1$s."
msgstr "Użytkownik %2$s dodał użytkownika %1$s."
#: ../tgp-msg.c:114 ../tgp-msg.c:131
#, c-format
msgid "%2$s deleted user %1$s."
msgstr "Użytkownik %2$s usunął użytkownika %1$s."
#: ../tgp-msg.c:138
#, c-format
msgid "%2$s set self destruction timer to %1$d second."
msgid_plural "%2$s set self destruction timer to %1$d seconds."
msgstr[0] "Użytkownik %2$s ustawił czas samozniszczenia na %1$d sekundę."
msgstr[1] "Użytkownik %2$s ustawił czas samozniszczenia na %1$d sekundy."
msgstr[2] "Użytkownik %2$s ustawił czas samozniszczenia na %1$d sekund."
msgstr[3] "Użytkownik %2$s ustawił czas samozniszczenia na %1$d sekund."
#: ../tgp-msg.c:144
#, c-format
msgid "%2$s marked %1$d message read."
msgid_plural "%2$s marked %1$d messages read."
msgstr[0] "Użytkownik %2$s oznaczył %1$d wiadomość jako przeczytaną."
msgstr[1] "Użytkownik %2$s oznaczył %1$d wiadomości jako przeczytane."
msgstr[2] "Użytkownik %2$s oznaczył %1$d wiadomości jako przeczytane."
msgstr[3] "Użytkownik %2$s oznaczył %1$d wiadomości jako przeczytane."
#: ../tgp-msg.c:150
#, c-format
msgid "%2$s deleted %1$d message."
msgid_plural "%2$s deleted %1$d messages."
msgstr[0] "Użytkownik %2$s usunął %1$d wiadomość."
msgstr[1] "Użytkownik %2$s usunął %1$d wiadomości."
msgstr[2] "Użytkownik %2$s usunął %1$d wiadomości."
msgstr[3] "Użytkownik %2$s usunął %1$d wiadomości."
#: ../tgp-msg.c:156
#, c-format
msgid "%2$s made a screenshot of %1$d message."
msgid_plural "%2$s made a screenshot of %1$d messages."
msgstr[0] "Użytkownik %2$s utworzył zrzut ekranu %1$d wiadomości."
msgstr[1] "Użytkownik %2$s utworzył zrzut ekranu %1$d wiadomości."
msgstr[2] "Użytkownik %2$s utworzył zrzut ekranu %1$d wiadomości."
msgstr[3] "Użytkownik %2$s utworzył zrzut ekranu %1$d wiadomości."
#: ../tgp-msg.c:162
#, c-format
msgid "Channel %1$s created"
msgstr "Utworzono kanał %1$s"
#. FIXME: check if this makes sense
#: ../tgp-msg.c:165 ../tgp-chat.c:124 ../tgp-chat.c:576
msgid "Telegram Channels"
msgstr "Kanały Telegram"
#: ../tgp-msg.c:191
msgid "Sending message failed."
msgstr "Wysłanie wiadomości się nie powiodło."
#: ../tgp-msg.c:253
msgid "Sending image failed."
msgstr "Wysłanie obrazu się nie powiodło."
#: ../tgp-msg.c:417
#, c-format
msgid "%s sent a sticker."
msgstr "Użytkownik %s wysłał naklejkę."
#: ../tgp-msg.c:463
msgid "failed loading message"
msgstr "wczytanie wiadomości się nie powiodło"
#: ../tgp-msg.c:498
msgid "[animation]"
msgstr "[animacja]"
#: ../tgp-msg.c:515
msgid "[audio]"
msgstr "[dźwięk]"
#: ../tgp-msg.c:515
msgid "[video]"
msgstr "[film]"
#: ../tgp-msg.c:604
#, c-format
msgid "<b>Forwarded message from: %s</b><br>%s"
msgstr "<b>Przekazana wiadomość od: %s</b><br>%s"
#. FIXME: sometimes users aren't part of the response when receiving a
#. forwarded message
#: ../tgp-msg.c:607
#, c-format
msgid "<b>Forwarded message:</b><br>%s"
msgstr "<b>Przekazana wiadomość:</b><br>%s"
#: ../tgp-msg.c:720
msgid "loading document or picture failed"
msgstr "wczytywanie dokumentu lub obrazu się nie powiodło"
#: ../tgp-net.c:281
msgid "Cannot connect to main server"
msgstr "Nie można połączyć z głównym serwerem"
#: ../tgp-net.c:322
msgid "Cannot connect to server: Ping timeout."
msgstr ""
"Nie można połączyć z serwerem: przekroczono czas oczekiwania na odpowiedź."
#: ../tgp-net.c:365
msgid "Lost connection to the server..."
msgstr "Utracono połączenie z serwerem…"
#: ../tgp-request.c:51
msgid ""
"Telegram wants to verify your identity. Please enter the login code that you"
" have received via SMS."
msgstr ""
"Usługa Telegram musi zweryfikować tożsamość użytkownika. Proszę podać kod "
"logowania otrzymany w wiadomości SMS."
#: ../tgp-request.c:54
msgid "Login code"
msgstr "Kod logowania"
#: ../tgp-request.c:54
msgid "Enter login code"
msgstr "Proszę podać kod logowania"
#: ../tgp-request.c:54
msgid "the code"
msgstr "kod"
#: ../tgp-request.c:54 ../tgp-request.c:104 ../tgp-request.c:198
#: ../tgp-request.c:233 ../tgp-request.c:263
msgid "OK"
msgstr "OK"
#: ../tgp-request.c:55 ../tgp-request.c:104 ../tgp-request.c:123
#: ../tgp-request.c:199 ../tgp-request.c:234 ../tgp-request.c:264
msgid "Cancel"
msgstr "Anuluj"
#: ../tgp-request.c:95
msgid "Registration"
msgstr "Rejestracja"
#: ../tgp-request.c:96
msgid "First name"
msgstr "Imię"
#: ../tgp-request.c:99
msgid "Last name"
msgstr "Nazwisko"
#: ../tgp-request.c:103
msgid "Register"
msgstr "Zarejestruj"
#: ../tgp-request.c:103
msgid "Please register your phone number."
msgstr "Proszę zarejestrować numer telefonu."
#. purple_request API not available
#: ../tgp-request.c:108
msgid ""
"Phone number is not registered. Please register your phone on a different "
"client."
msgstr ""
"Numer telefonu nie jest zarejestrowany. Proszę go zarejestrować w innym "
"kliencie."
#: ../tgp-request.c:110
msgid "Not registered"
msgstr "Niezarejestrowany"
#: ../tgp-request.c:122
msgid "Password needed"
msgstr "Wymagane jest hasło"
#: ../tgp-request.c:122
msgid "Enter password for two factor authentication"
msgstr "Proszę podać hasło dla uwierzytelniania dwustopniowego"
#: ../tgp-request.c:123
msgid "Ok"
msgstr "OK"
#: ../tgp-request.c:125
msgid ""
"No password set for two factor authentication. Please enter it in the "
"extended settings."
msgstr ""
"Nie ustawiono hasła dla uwierzytelniania dwustopniowego. Proszę podać je w "
"rozszerzonych ustawieniach."
#: ../tgp-request.c:127
msgid "Password invalid"
msgstr "Nieprawidłowe hasło"
#: ../tgp-request.c:150
#, c-format
msgid "Accept secret chat '%s' on this device?"
msgstr "Odebrać tajną rozmowę „%s” na tym urządzeniu?"
#: ../tgp-request.c:151
msgid "Secret chat"
msgstr "Tajna rozmowa"
#: ../tgp-request.c:151
msgid ""
"Secret chats can only have one end point. If you accept a secret chat on "
"this device, its messages will not be available anywhere else. If you "
"decline, you can still accept the chat on other devices."
msgstr ""
"Tajne rozmowy mogą mieć tylko jeden punkt wyjściowy. Jeśli tajna rozmowa "
"zostanie odebrana na tym urządzeniu, to jej wiadomości nie będą dostępne "
"nigdzie indziej. Jeśli zostanie odrzucona, to nadal można ją odebrać na "
"innych urządzeniach."
#: ../tgp-request.c:182
msgid ""
"Invite at least one additional user by specifying\n"
" their full name (autocompletion available).\n"
"You can add more users once the chat was created."
msgstr ""
"Należy zaprosić co najmniej jednego użytkownika podając\n"
"jego imię i nazwisko (automatyczne uzupełnianie jest dostępne).\n"
"Można dodać więcej użytkowników po utworzeniu rozmowy."
#: ../tgp-request.c:185 ../tgp-request.c:189 ../tgp-request.c:193
msgid "Username"
msgstr "Nazwa użytkownika"
#: ../tgp-request.c:198
msgid "Create group chat"
msgstr "Utwórz rozmowę grupową"
#: ../tgp-request.c:198
msgid "Invite users"
msgstr "Zaproś użytkowników"
#: ../tgp-request.c:217 ../tgp-request.c:232
msgid "Change password"
msgstr "Zmień hasło"
#: ../tgp-request.c:219
msgid "Current"
msgstr "Bieżące"
#: ../tgp-request.c:223 ../tgp-request.c:253
msgid "Password"
msgstr "Hasło"
#: ../tgp-request.c:227 ../tgp-request.c:257
msgid "Confirm"
msgstr "Potwierdzenie"
#: ../tgp-request.c:251 ../tgp-request.c:262
msgid "New password"
msgstr "Nowe hasło"
#. if we arrive here for the second time the specified phone number is not
#. valid. We do not
#. ask for the phone number directly, cause in that case the account would
#. still be created
#. named with the invalid phone number, even though the login will work
#: ../tgp-request.c:300
msgid "Invalid phone number"
msgstr "Nieprawidłowy numer telefonu"
#: ../tgp-request.c:301
msgid ""
"Please enter only numbers in the international phone number format, a leading + following by the country prefix and the phone number.\n"
"Do not use any other special chars."
msgstr ""
"Proszę podać tylko numery w międzynarodowym formacie numerów telefonu, czyli + z przedrostkiem kraju i numer telefonu.\n"
"Nie należy używać innych znaków specjalnych."
#: ../tgp-request.c:370
msgid "Leave Chat"
msgstr "Opuść rozmowę"
#: ../tgp-request.c:372
msgid "Do you want to leave this chat permantently?"
msgstr "Trwale opuścić tę rozmowę?"
#: ../tgp-request.c:377
msgid "Abort Secret Chat"
msgstr "Przerwij tajną rozmowę"
#: ../tgp-request.c:379
msgid "Do you want to terminate this secret chat permantently?"
msgstr "Trwale zakończyć tę tajną rozmowę?"
#: ../tgp-request.c:384
msgid "Delete Contact"
msgstr "Usuń kontakt"
#: ../tgp-request.c:386
msgid "Do you want to remove this user from your global contact list?"
msgstr "Usunąć tego użytkownika z globalnej listy kontaktów?"
#: ../tgp-request.c:401
msgid "Leave Channel"
msgstr "Opuść kanał"
#: ../tgp-request.c:403
msgid "Do you want to leave this channel?"
msgstr "Opuścić ten kanał?"
#. This should be the language's timestamp format. This is preceded by a
#. colon.
#: ../tgp-utils.c:27
msgid "%d.%m.%Y %H:%M"
msgstr "%d.%m.%Y %H%M"
#. This is preceded by a colon.
#: ../tgp-utils.c:48
msgid "recently"
msgstr "niedawno"
#. This is preceded by a colon.
#: ../tgp-utils.c:52
msgid "last week"
msgstr "ostatni tydzień"
#. This is preceded by a colon.
#: ../tgp-utils.c:56
msgid "last month"
msgstr "ostatni miesiąc"
#. This is preceded by a colon. It refers to a point on time.
#: ../tgp-utils.c:60
msgid "unknown"
msgstr "nieznane"
#: ../tgp-chat.c:108 ../tgp-chat.c:582
msgid "Telegram Chats"
msgstr "Rozmowy Telegram"
#: ../tgp-chat.c:113
msgid "You have already left this chat."
msgstr "Już opuszczoną tę rozmowę."
#: ../tgp-chat.c:224
msgid "Subject:"
msgstr "Temat:"
#: ../tgp-chat.c:230
msgid "Invite link:"
msgstr "Odnośnik do zaproszenia:"
#: ../tgp-chat.c:236
msgid "Chat ID:"
msgstr "Identyfikator rozmowy:"
#: ../tgp-chat.c:342
msgid "Supergroup"
msgstr "Supergrupa"
#: ../tgp-chat.c:342
msgid "Channel"
msgstr "Kanał"
#: ../tgp-chat.c:345
msgid "Group"
msgstr "Grupa"
#: ../tgp-chat.c:367
msgid "Users in chat"
msgstr "Użytkownicy w rozmowie"
#: ../tgp-chat.c:370
msgid "Type"
msgstr "Typ"

608
po/pt_BR.po Normal file
View file

@ -0,0 +1,608 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-08-31 22:53+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: Ben Wiederhake <BenWiederhake.GitHub@gmx.de>, 2016\n"
"Language-Team: Portuguese (Brazil) (https://www.transifex.com/telegram-purple-developers/teams/53149/pt_BR/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=CHARSET\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: pt_BR\n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
#: ../telegram-base.c:500
msgid "Couldn't create group"
msgstr "Não foi possível criar o grupo"
#: ../telegram-base.c:501
msgid "Please select at least one other user."
msgstr "Por favor, selecione pelo menos 1 usuário."
#: ../telegram-base.c:555
msgid "Query Failed"
msgstr "Falha na fila"
#: ../telegram-purple.c:162
msgid "Secret chat ready."
msgstr "Conversa secreta pronta"
#: ../telegram-purple.c:170
msgid "Secret chat terminated."
msgstr "Conversa secreta terminada."
#: ../telegram-purple.c:182
msgid "Telegram"
msgstr ""
#: ../telegram-purple.c:229
msgid "Message marked as read."
msgstr "Mensagem marcada como \"lida\"."
#: ../telegram-purple.c:339
#, c-format
msgid "Invite link: %s"
msgstr "Link de convite: %s"
#. FIXME: Can TGLCHF_MODERATOR export links?
#: ../telegram-purple.c:350
msgid "Creating chat link failed"
msgstr "Falha na criação do link para a conversa"
#: ../telegram-purple.c:351
msgid "You need to be admin of the group to do that."
msgstr "Você precisa ser Administrador do grupo para fazer isso"
#: ../telegram-purple.c:416
msgid "Chat joined"
msgstr "Entrou na conversa"
#: ../telegram-purple.c:417
msgid "Chat added to list of chat rooms."
msgstr "Conversa adicionada a listas de salas de conversa"
#: ../telegram-purple.c:443
msgid "Start secret chat..."
msgstr "Começar conversa secreta..."
#. Generate Public Link
#: ../telegram-purple.c:450
msgid "Invite users by link..."
msgstr "Convidar usuários pelo link..."
#. Delete self from chat
#: ../telegram-purple.c:458
msgid "Delete and exit..."
msgstr "Deletar e sair..."
#: ../telegram-purple.c:546
#, c-format
msgid "Unable to sign on as %s: file (public key) not found."
msgstr ""
#: ../telegram-purple.c:550
#, c-format
msgid ""
"Make sure telegram-purple is installed properly,\n"
"including the .tglpub file.\n"
"If you're running SELinux (e.g. when using Tails),\n"
"try 'make local_install', or simply copy\n"
"%1$s to %2$s."
msgstr ""
"Tenha certeza que o telegram-purple está devidamente instalado,\n"
"incluindo o arquivo .tglpub.\n"
"Se vocês estiver rodando SELinux (por exemplo: quando usa o Tails),\n"
"tente fazer uma \"instalação local\", ou simplesmente compie\n"
"%1$s para %2$s."
#: ../telegram-purple.c:572
#, c-format
msgid ""
"Unable to sign on as %s: problem in the underlying library 'tgl'. Please "
"submit a bug report with the debug log."
msgstr ""
#: ../telegram-purple.c:576
msgid "Problem in tgl"
msgstr ""
#. TRANSLATORS: Please fill in your own prefix!
#: ../telegram-purple.c:584
#, c-format
msgid ""
"Unable to sign on as %s: phone number lacks country prefix. Numbers must "
"start with the full international prefix code, e.g. +1 for USA."
msgstr ""
#: ../telegram-purple.c:589
msgid "Incomplete phone number"
msgstr "Número de telefone inválido"
#: ../telegram-purple.c:642
msgid "Secret chat was already deleted"
msgstr ""
#: ../telegram-purple.c:644
msgid "Secret chat is not ready"
msgstr ""
#: ../telegram-purple.c:652
msgid "Only the creator of a channel can post messages."
msgstr ""
#: ../telegram-purple.c:695
msgid "Cannot invite buddy to chat"
msgstr "Não foi possível convidar o amigo para a conversa"
#: ../telegram-purple.c:696
msgid "Specified user does not exist."
msgstr "O usuário especificado não existe."
#: ../telegram-purple.c:709
msgid "phone no. (+ country prefix)"
msgstr ""
#. Login
#: ../telegram-purple.c:817
msgid "Password (two factor authentication)"
msgstr "Senha (dois processos de autenticação)"
#: ../telegram-purple.c:822
msgid ""
"Fallback SMS verification\n"
"(Helps when not using Pidgin and you aren't being prompted for the code)"
msgstr ""
"Retorno de verificaçao via SMS\n"
"(Ajuda quando não estiver usando o Pidgin e não é apresentado a janela com o código)"
#: ../telegram-purple.c:828
msgid "always"
msgstr "sempre"
#: ../telegram-purple.c:829
msgid "never"
msgstr "nunca"
#: ../telegram-purple.c:830
msgid "ask"
msgstr "pergunta"
#: ../telegram-purple.c:832
msgid "Accept secret chats"
msgstr "Aceitar conversa secrete"
#: ../telegram-purple.c:836
msgid "Display buddies offline after (days)"
msgstr "Mostrar período que os amigos estão offline (dias)"
#: ../telegram-purple.c:840
msgid ""
"Don't fetch history older than (days)\n"
"(0 for unlimited)"
msgstr ""
"Não trazer históricos mais velhos que (dias)\n"
"(0 para não limitar)"
#. Media
#: ../telegram-purple.c:845
msgid "Autoload media size (kb)"
msgstr ""
#. Chats
#: ../telegram-purple.c:850
msgid "Add all group chats to buddy list"
msgstr "Adicinar todos os grupos de conversa a lista de amigos"
#. Read notifications
#: ../telegram-purple.c:855
msgid "Display notices of receipt"
msgstr "Mostrar avisos de recebimento"
#: ../telegram-purple.c:859
msgid "Send notices of receipt when present"
msgstr "Mandar avisos de recebimento quando estiver online"
#: ../telegram-purple.c:884
msgid "Telegram Protocol Plugin."
msgstr ""
#: ../tgp-msg.c:58
#, c-format
msgid "%2$s created chat %1$s."
msgstr "%2$s criouo a conversa %1$s."
#: ../tgp-msg.c:61
#, c-format
msgid "%2$s changed title to %1$s."
msgstr "%2$s mudou o assunto para %1$s,"
#: ../tgp-msg.c:64
#, c-format
msgid "%s changed photo."
msgstr "%s mudou a foto."
#: ../tgp-msg.c:67
#, c-format
msgid "%s deleted photo."
msgstr "%s deletou a foto."
#: ../tgp-msg.c:75
#, c-format
msgid "%1$s added user %2$s by link."
msgstr "%1$s adicionou o usuário %2$s por link."
#: ../tgp-msg.c:90
#, c-format
msgid "%2$s added user %1$s."
msgstr "%2$s adicionou o usuário %1$s."
#: ../tgp-msg.c:114 ../tgp-msg.c:131
#, c-format
msgid "%2$s deleted user %1$s."
msgstr "%2$s reoveu o usuário %1$s"
#: ../tgp-msg.c:138
#, c-format
msgid "%2$s set self destruction timer to %1$d second."
msgid_plural "%2$s set self destruction timer to %1$d seconds."
msgstr[0] "%2$s tempo para auto destruição configurado para %1$d segundos."
msgstr[1] "%2$s tempo para auto destruição configurado para %1$d segundos."
#: ../tgp-msg.c:144
#, c-format
msgid "%2$s marked %1$d message read."
msgid_plural "%2$s marked %1$d messages read."
msgstr[0] "%2$s marcou %1$d mensagens como lidas."
msgstr[1] "%2$s marcou %1$d mensagens como lidas."
#: ../tgp-msg.c:150
#, c-format
msgid "%2$s deleted %1$d message."
msgid_plural "%2$s deleted %1$d messages."
msgstr[0] "%2$s deletou %1$d mensagens."
msgstr[1] "%2$s deletou %1$d mensagens."
#: ../tgp-msg.c:156
#, c-format
msgid "%2$s made a screenshot of %1$d message."
msgid_plural "%2$s made a screenshot of %1$d messages."
msgstr[0] "%2$s capturou a tela de %1$d mensagens."
msgstr[1] "%2$s capturou a tela de %1$d mensagens."
#: ../tgp-msg.c:162
#, c-format
msgid "Channel %1$s created"
msgstr ""
#. FIXME: check if this makes sense
#: ../tgp-msg.c:165 ../tgp-chat.c:124 ../tgp-chat.c:576
msgid "Telegram Channels"
msgstr ""
#: ../tgp-msg.c:191
msgid "Sending message failed."
msgstr "Envio de imagem falhou."
#: ../tgp-msg.c:253
msgid "Sending image failed."
msgstr "Envio de imagem falhou."
#: ../tgp-msg.c:417
#, c-format
msgid "%s sent a sticker."
msgstr "%s enviou um adesivo."
#: ../tgp-msg.c:463
msgid "failed loading message"
msgstr ""
#: ../tgp-msg.c:498
msgid "[animation]"
msgstr ""
#: ../tgp-msg.c:515
msgid "[audio]"
msgstr ""
#: ../tgp-msg.c:515
msgid "[video]"
msgstr ""
#: ../tgp-msg.c:604
#, c-format
msgid "<b>Forwarded message from: %s</b><br>%s"
msgstr ""
#. FIXME: sometimes users aren't part of the response when receiving a
#. forwarded message
#: ../tgp-msg.c:607
#, c-format
msgid "<b>Forwarded message:</b><br>%s"
msgstr ""
#: ../tgp-msg.c:720
msgid "loading document or picture failed"
msgstr ""
#: ../tgp-net.c:281
msgid "Cannot connect to main server"
msgstr "Não pode se conectar no servidor principal"
#: ../tgp-net.c:322
msgid "Cannot connect to server: Ping timeout."
msgstr "Não pode se conectar no servidor: Ping timeout."
#: ../tgp-net.c:365
msgid "Lost connection to the server..."
msgstr "Conexão com o servidor foi perdida..."
#: ../tgp-request.c:51
msgid ""
"Telegram wants to verify your identity. Please enter the login code that you"
" have received via SMS."
msgstr ""
"Telegram quer confirmar sua identidade. Por favor insira o código recebido "
"por SMS."
#: ../tgp-request.c:54
msgid "Login code"
msgstr "Código de login"
#: ../tgp-request.c:54
msgid "Enter login code"
msgstr "Insira o código de login"
#: ../tgp-request.c:54
msgid "the code"
msgstr "o código"
#: ../tgp-request.c:54 ../tgp-request.c:104 ../tgp-request.c:198
#: ../tgp-request.c:233 ../tgp-request.c:263
msgid "OK"
msgstr "OK"
#: ../tgp-request.c:55 ../tgp-request.c:104 ../tgp-request.c:123
#: ../tgp-request.c:199 ../tgp-request.c:234 ../tgp-request.c:264
msgid "Cancel"
msgstr "Cancelar"
#: ../tgp-request.c:95
msgid "Registration"
msgstr "Registrar"
#: ../tgp-request.c:96
msgid "First name"
msgstr "Primeiro nome"
#: ../tgp-request.c:99
msgid "Last name"
msgstr "Último nome"
#: ../tgp-request.c:103
msgid "Register"
msgstr "Registrar"
#: ../tgp-request.c:103
msgid "Please register your phone number."
msgstr "Por favor registre seu número de telefone."
#. purple_request API not available
#: ../tgp-request.c:108
msgid ""
"Phone number is not registered. Please register your phone on a different "
"client."
msgstr ""
"Número de telefone não registrado. Por favor registre seu número de telefone"
" com um cliente diferente."
#: ../tgp-request.c:110
msgid "Not registered"
msgstr "Não Registrado"
#: ../tgp-request.c:122
msgid "Password needed"
msgstr "Senha necessária"
#: ../tgp-request.c:122
msgid "Enter password for two factor authentication"
msgstr "Insira a senha para o processo de autenticação dupla"
#: ../tgp-request.c:123
msgid "Ok"
msgstr "OK"
#: ../tgp-request.c:125
msgid ""
"No password set for two factor authentication. Please enter it in the "
"extended settings."
msgstr ""
"Não há senha configurado para o processo de autenticação dupla. Por favor "
"insira nas configurações expandidas."
#: ../tgp-request.c:127
msgid "Password invalid"
msgstr "Senha inválida."
#: ../tgp-request.c:150
#, c-format
msgid "Accept secret chat '%s' on this device?"
msgstr "Aceitar conversa Secreta '%s'?"
#: ../tgp-request.c:151
msgid "Secret chat"
msgstr "Conversa Secreta"
#: ../tgp-request.c:151
msgid ""
"Secret chats can only have one end point. If you accept a secret chat on "
"this device, its messages will not be available anywhere else. If you "
"decline, you can still accept the chat on other devices."
msgstr ""
"Conversas secretas podem ocorrer em apenas um local. Se você aceitar uma "
"conversa secreta nesse dispositivo, essas mensagens não estarão disponíveis "
"em nenhum outro local. Se você rejeitar, pode aceitar a conversa em outros "
"dispositivos."
#: ../tgp-request.c:182
msgid ""
"Invite at least one additional user by specifying\n"
" their full name (autocompletion available).\n"
"You can add more users once the chat was created."
msgstr ""
"Convidar ao menos mais um usuário\n"
"pelo nome completo (autocompletar disponível).\n"
"Você pode adicionar mais usuários depois que a conversa for criada."
#: ../tgp-request.c:185 ../tgp-request.c:189 ../tgp-request.c:193
msgid "Username"
msgstr "Nome de usuário"
#: ../tgp-request.c:198
msgid "Create group chat"
msgstr "Criar conversa em grupo"
#: ../tgp-request.c:198
msgid "Invite users"
msgstr "Convidar usuários"
#: ../tgp-request.c:217 ../tgp-request.c:232
msgid "Change password"
msgstr "Mudar senha"
#: ../tgp-request.c:219
msgid "Current"
msgstr "Atual"
#: ../tgp-request.c:223 ../tgp-request.c:253
msgid "Password"
msgstr "Senha"
#: ../tgp-request.c:227 ../tgp-request.c:257
msgid "Confirm"
msgstr "Confirma"
#: ../tgp-request.c:251 ../tgp-request.c:262
msgid "New password"
msgstr "Nova senha"
#. if we arrive here for the second time the specified phone number is not
#. valid. We do not
#. ask for the phone number directly, cause in that case the account would
#. still be created
#. named with the invalid phone number, even though the login will work
#: ../tgp-request.c:300
msgid "Invalid phone number"
msgstr "Número de telefone inválido"
#: ../tgp-request.c:301
msgid ""
"Please enter only numbers in the international phone number format, a leading + following by the country prefix and the phone number.\n"
"Do not use any other special chars."
msgstr ""
"Por favor insira apenas número no formato de número telefônico internacional, começando com + seguido pelo código do país e o número do telefone.\n"
"Não use caractéres especiais."
#: ../tgp-request.c:370
msgid "Leave Chat"
msgstr ""
#: ../tgp-request.c:372
msgid "Do you want to leave this chat permantently?"
msgstr ""
#: ../tgp-request.c:377
msgid "Abort Secret Chat"
msgstr ""
#: ../tgp-request.c:379
msgid "Do you want to terminate this secret chat permantently?"
msgstr ""
#: ../tgp-request.c:384
msgid "Delete Contact"
msgstr ""
#: ../tgp-request.c:386
msgid "Do you want to remove this user from your global contact list?"
msgstr ""
#: ../tgp-request.c:401
msgid "Leave Channel"
msgstr ""
#: ../tgp-request.c:403
msgid "Do you want to leave this channel?"
msgstr ""
#. This should be the language's timestamp format. This is preceded by a
#. colon.
#: ../tgp-utils.c:27
msgid "%d.%m.%Y %H:%M"
msgstr "%d.%m.%Y %H:%M"
#. This is preceded by a colon.
#: ../tgp-utils.c:48
msgid "recently"
msgstr "recentemente"
#. This is preceded by a colon.
#: ../tgp-utils.c:52
msgid "last week"
msgstr "semana passada"
#. This is preceded by a colon.
#: ../tgp-utils.c:56
msgid "last month"
msgstr "mês passado"
#. This is preceded by a colon. It refers to a point on time.
#: ../tgp-utils.c:60
msgid "unknown"
msgstr "desconhecido"
#: ../tgp-chat.c:108 ../tgp-chat.c:582
msgid "Telegram Chats"
msgstr ""
#: ../tgp-chat.c:113
msgid "You have already left this chat."
msgstr "Você já saiu dessa conversa."
#: ../tgp-chat.c:224
msgid "Subject:"
msgstr "Assunto:"
#: ../tgp-chat.c:230
msgid "Invite link:"
msgstr "Link do convite:"
#: ../tgp-chat.c:236
msgid "Chat ID:"
msgstr "Identificação da conversa:"
#: ../tgp-chat.c:342
msgid "Supergroup"
msgstr ""
#: ../tgp-chat.c:342
msgid "Channel"
msgstr ""
#: ../tgp-chat.c:345
msgid "Group"
msgstr ""
#: ../tgp-chat.c:367
msgid "Users in chat"
msgstr "Usuários no chat."
#: ../tgp-chat.c:370
msgid "Type"
msgstr ""

619
po/ru_RU.po Normal file
View file

@ -0,0 +1,619 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-08-31 22:53+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: SergeyDjam <djam5@ya.ru>, 2016\n"
"Language-Team: Russian (Russia) (https://www.transifex.com/telegram-purple-developers/teams/53149/ru_RU/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=CHARSET\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: ru_RU\n"
"Plural-Forms: nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n%100>=11 && n%100<=14)? 2 : 3);\n"
#: ../telegram-base.c:500
msgid "Couldn't create group"
msgstr "Не удалось создать группу"
#: ../telegram-base.c:501
msgid "Please select at least one other user."
msgstr "Пожалуйста, выберите хотя бы одного другого пользователя."
#: ../telegram-base.c:555
msgid "Query Failed"
msgstr "Ошибка запроса"
#: ../telegram-purple.c:162
msgid "Secret chat ready."
msgstr "Секретный чат готов."
#: ../telegram-purple.c:170
msgid "Secret chat terminated."
msgstr "Защищенный чат завершен"
#: ../telegram-purple.c:182
msgid "Telegram"
msgstr "Telegram"
#: ../telegram-purple.c:229
msgid "Message marked as read."
msgstr "Сообщение помечено как прочитанное"
#: ../telegram-purple.c:339
#, c-format
msgid "Invite link: %s"
msgstr "Пригласительная ссылка: %s"
#. FIXME: Can TGLCHF_MODERATOR export links?
#: ../telegram-purple.c:350
msgid "Creating chat link failed"
msgstr "Не удалось создать ссылку чата"
#: ../telegram-purple.c:351
msgid "You need to be admin of the group to do that."
msgstr "Вы должны быть администратором группы, чтобы сделать это."
#: ../telegram-purple.c:416
msgid "Chat joined"
msgstr "Присоединился к чату"
#: ../telegram-purple.c:417
msgid "Chat added to list of chat rooms."
msgstr "Чат добавлен в список чатов."
#: ../telegram-purple.c:443
msgid "Start secret chat..."
msgstr "Начать секретный чат…"
#. Generate Public Link
#: ../telegram-purple.c:450
msgid "Invite users by link..."
msgstr "Пригласить пользователей по ссылке..."
#. Delete self from chat
#: ../telegram-purple.c:458
msgid "Delete and exit..."
msgstr "Удалить и выйти..."
#: ../telegram-purple.c:546
#, c-format
msgid "Unable to sign on as %s: file (public key) not found."
msgstr "Не удается войти как %s: файл (публичный ключ) не найден."
#: ../telegram-purple.c:550
#, c-format
msgid ""
"Make sure telegram-purple is installed properly,\n"
"including the .tglpub file.\n"
"If you're running SELinux (e.g. when using Tails),\n"
"try 'make local_install', or simply copy\n"
"%1$s to %2$s."
msgstr ""
"Убедитесь, что telegram-purple установлен правильно,\n"
"включая .tglpub файл.\n"
"Если вы используете SELinux (например при использовании Tails),\n"
"попробуйте 'make local_install', или просто скопируйте\n"
"%1$s в %2$s."
#: ../telegram-purple.c:572
#, c-format
msgid ""
"Unable to sign on as %s: problem in the underlying library 'tgl'. Please "
"submit a bug report with the debug log."
msgstr ""
#: ../telegram-purple.c:576
msgid "Problem in tgl"
msgstr "Проблема в tgl"
#. TRANSLATORS: Please fill in your own prefix!
#: ../telegram-purple.c:584
#, c-format
msgid ""
"Unable to sign on as %s: phone number lacks country prefix. Numbers must "
"start with the full international prefix code, e.g. +1 for USA."
msgstr ""
"Не удалось войти как %s: номер телефона не содержит кода страны. Номера "
"должны начинаться с международного кода, +7 для России."
#: ../telegram-purple.c:589
msgid "Incomplete phone number"
msgstr "Неполный номер телефона"
#: ../telegram-purple.c:642
msgid "Secret chat was already deleted"
msgstr "Секретный чат уже был удален"
#: ../telegram-purple.c:644
msgid "Secret chat is not ready"
msgstr "Секретный чат не готов"
#: ../telegram-purple.c:652
msgid "Only the creator of a channel can post messages."
msgstr "Только создатель канала может отправлять сообщения."
#: ../telegram-purple.c:695
msgid "Cannot invite buddy to chat"
msgstr "Не могу пригласить пользователя в чат"
#: ../telegram-purple.c:696
msgid "Specified user does not exist."
msgstr "Указанный пользователь не существует."
#: ../telegram-purple.c:709
msgid "phone no. (+ country prefix)"
msgstr "номер телефона. (+ префикс страны)"
#. Login
#: ../telegram-purple.c:817
msgid "Password (two factor authentication)"
msgstr "Пароль (двухфакторная аутентификация) "
#: ../telegram-purple.c:822
msgid ""
"Fallback SMS verification\n"
"(Helps when not using Pidgin and you aren't being prompted for the code)"
msgstr ""
"Альтернативная СМС верификация\n"
"(Помогает когда не используется pidgin и вас не просило ввести код)"
#: ../telegram-purple.c:828
msgid "always"
msgstr "всегда"
#: ../telegram-purple.c:829
msgid "never"
msgstr "никогда"
#: ../telegram-purple.c:830
msgid "ask"
msgstr "Спрашивать"
#: ../telegram-purple.c:832
msgid "Accept secret chats"
msgstr "Присоединится к защищенным чатам"
#: ../telegram-purple.c:836
msgid "Display buddies offline after (days)"
msgstr "Показывать друзей оффлайн через(дней)"
#: ../telegram-purple.c:840
msgid ""
"Don't fetch history older than (days)\n"
"(0 for unlimited)"
msgstr ""
"Не загружать историю старше N дней\n"
"(0 без ограничений)"
#. Media
#: ../telegram-purple.c:845
msgid "Autoload media size (kb)"
msgstr ""
#. Chats
#: ../telegram-purple.c:850
msgid "Add all group chats to buddy list"
msgstr "Добавить все групповые чаты в контактлист"
#. Read notifications
#: ../telegram-purple.c:855
msgid "Display notices of receipt"
msgstr "Показать уведомления о получении"
#: ../telegram-purple.c:859
msgid "Send notices of receipt when present"
msgstr "Показать уведомления о получении"
#: ../telegram-purple.c:884
msgid "Telegram Protocol Plugin."
msgstr "Telegram Protocol Плагин."
#: ../tgp-msg.c:58
#, c-format
msgid "%2$s created chat %1$s."
msgstr "%2$s создан чат %1$s."
#: ../tgp-msg.c:61
#, c-format
msgid "%2$s changed title to %1$s."
msgstr "%2$s название изменено на %1$s."
#: ../tgp-msg.c:64
#, c-format
msgid "%s changed photo."
msgstr "%s фото изменено."
#: ../tgp-msg.c:67
#, c-format
msgid "%s deleted photo."
msgstr "%s фото удалено."
#: ../tgp-msg.c:75
#, c-format
msgid "%1$s added user %2$s by link."
msgstr "%1$s пользователи добавлены %2$s по ссылке"
#: ../tgp-msg.c:90
#, c-format
msgid "%2$s added user %1$s."
msgstr "%2$s пользователь добавлен %1$s."
#: ../tgp-msg.c:114 ../tgp-msg.c:131
#, c-format
msgid "%2$s deleted user %1$s."
msgstr "%2$s пользователи удалены %1$s."
#: ../tgp-msg.c:138
#, c-format
msgid "%2$s set self destruction timer to %1$d second."
msgid_plural "%2$s set self destruction timer to %1$d seconds."
msgstr[0] "%2$s установил таймер самоуничтожения на %1$d секунду."
msgstr[1] "%2$s установил таймер самоуничтожения на %1$d секунды."
msgstr[2] "%2$s установил таймер самоуничтожения на %1$d секунд."
msgstr[3] "%2$s установил таймер самоуничтожения на %1$d секунд."
#: ../tgp-msg.c:144
#, c-format
msgid "%2$s marked %1$d message read."
msgid_plural "%2$s marked %1$d messages read."
msgstr[0] "%2$s пометил %1$d сообщение прочитанными."
msgstr[1] "%2$s пометил %1$d сообщения прочитанными."
msgstr[2] "%2$s пометил %1$d сообщений прочитанными."
msgstr[3] "%2$s пометил %1$d сообщений прочитанными."
#: ../tgp-msg.c:150
#, c-format
msgid "%2$s deleted %1$d message."
msgid_plural "%2$s deleted %1$d messages."
msgstr[0] "%2$s удалил %1$d сообщение."
msgstr[1] "%2$s удалил %1$d сообщения."
msgstr[2] "%2$s удалил %1$d сообщений."
msgstr[3] "%2$s удалил %1$d сообщений."
#: ../tgp-msg.c:156
#, c-format
msgid "%2$s made a screenshot of %1$d message."
msgid_plural "%2$s made a screenshot of %1$d messages."
msgstr[0] "%2$s сделал скриншот %1$d сообщения."
msgstr[1] "%2$s сделал скриншот %1$d сообщений."
msgstr[2] "%2$s сделал скриншот %1$d сообщений."
msgstr[3] "%2$s сделал скриншот %1$d сообщений."
#: ../tgp-msg.c:162
#, c-format
msgid "Channel %1$s created"
msgstr "Канал %1$s создан"
#. FIXME: check if this makes sense
#: ../tgp-msg.c:165 ../tgp-chat.c:124 ../tgp-chat.c:576
msgid "Telegram Channels"
msgstr "Telegram Каналы"
#: ../tgp-msg.c:191
msgid "Sending message failed."
msgstr "Отправка сообщения не удалась."
#: ../tgp-msg.c:253
msgid "Sending image failed."
msgstr "Ошибка при отправке изображения."
#: ../tgp-msg.c:417
#, c-format
msgid "%s sent a sticker."
msgstr "%s отправил стикер."
#: ../tgp-msg.c:463
msgid "failed loading message"
msgstr "не удалось загрузить сообщения"
#: ../tgp-msg.c:498
msgid "[animation]"
msgstr "[анимация]"
#: ../tgp-msg.c:515
msgid "[audio]"
msgstr "[аудио]"
#: ../tgp-msg.c:515
msgid "[video]"
msgstr "[видео]"
#: ../tgp-msg.c:604
#, c-format
msgid "<b>Forwarded message from: %s</b><br>%s"
msgstr ""
#. FIXME: sometimes users aren't part of the response when receiving a
#. forwarded message
#: ../tgp-msg.c:607
#, c-format
msgid "<b>Forwarded message:</b><br>%s"
msgstr ""
#: ../tgp-msg.c:720
msgid "loading document or picture failed"
msgstr "загрузка документа или изображения не удалась"
#: ../tgp-net.c:281
msgid "Cannot connect to main server"
msgstr "Не удается подключится к главному серверу"
#: ../tgp-net.c:322
msgid "Cannot connect to server: Ping timeout."
msgstr "Не удается подключиться к серверу: пинг тайм-аут."
#: ../tgp-net.c:365
msgid "Lost connection to the server..."
msgstr "Потеряно соединение с сервером..."
#: ../tgp-request.c:51
msgid ""
"Telegram wants to verify your identity. Please enter the login code that you"
" have received via SMS."
msgstr ""
"Telegram хочет проверить вашу личность. Пожалуйста введите код, полученный "
"вами через СМС."
#: ../tgp-request.c:54
msgid "Login code"
msgstr "Код входа"
#: ../tgp-request.c:54
msgid "Enter login code"
msgstr "Введите код входа"
#: ../tgp-request.c:54
msgid "the code"
msgstr "код"
#: ../tgp-request.c:54 ../tgp-request.c:104 ../tgp-request.c:198
#: ../tgp-request.c:233 ../tgp-request.c:263
msgid "OK"
msgstr "Подтвердить"
#: ../tgp-request.c:55 ../tgp-request.c:104 ../tgp-request.c:123
#: ../tgp-request.c:199 ../tgp-request.c:234 ../tgp-request.c:264
msgid "Cancel"
msgstr "Отмена"
#: ../tgp-request.c:95
msgid "Registration"
msgstr "Регистрация"
#: ../tgp-request.c:96
msgid "First name"
msgstr "Имя"
#: ../tgp-request.c:99
msgid "Last name"
msgstr "Фамилия"
#: ../tgp-request.c:103
msgid "Register"
msgstr "Зарегистрирован"
#: ../tgp-request.c:103
msgid "Please register your phone number."
msgstr "Пожалуйста, зарегистрируйте свой номер телефона."
#. purple_request API not available
#: ../tgp-request.c:108
msgid ""
"Phone number is not registered. Please register your phone on a different "
"client."
msgstr ""
"Номер телефона не зарегистрирован. Пожалуйста зарегистрируйте ваш телефон в "
"другом клиенте."
#: ../tgp-request.c:110
msgid "Not registered"
msgstr "Не зарегистрирован"
#: ../tgp-request.c:122
msgid "Password needed"
msgstr "Необходим пароль"
#: ../tgp-request.c:122
msgid "Enter password for two factor authentication"
msgstr "Введите пароль для двухфакторной аутентификации"
#: ../tgp-request.c:123
msgid "Ok"
msgstr "Ок"
#: ../tgp-request.c:125
msgid ""
"No password set for two factor authentication. Please enter it in the "
"extended settings."
msgstr ""
"Не указан пароль для двухфакторной аутентификации. Пожалуйста введите его в "
"расширенных настройках."
#: ../tgp-request.c:127
msgid "Password invalid"
msgstr "Неверный пароль"
#: ../tgp-request.c:150
#, c-format
msgid "Accept secret chat '%s' on this device?"
msgstr "Присоединится к секретному чату '%s' на этом устройстве?"
#: ../tgp-request.c:151
msgid "Secret chat"
msgstr "Секретный чат"
#: ../tgp-request.c:151
msgid ""
"Secret chats can only have one end point. If you accept a secret chat on "
"this device, its messages will not be available anywhere else. If you "
"decline, you can still accept the chat on other devices."
msgstr ""
"Секретные чаты могут иметь только одну конечную точку. Если вы подтвердите "
"секретный чат на этом устройстве, то его сообщения будут недоступны нигде "
"больше. Если вы отклоните, то вы сможете принять этот чат на других "
"устройствах."
#: ../tgp-request.c:182
msgid ""
"Invite at least one additional user by specifying\n"
" their full name (autocompletion available).\n"
"You can add more users once the chat was created."
msgstr ""
"Пригласите хотя бы одного дополнительного пользователя, указав их полные имена (автодополнение доступно).\n"
"Вы можете добавить больше пользователей после создания чата."
#: ../tgp-request.c:185 ../tgp-request.c:189 ../tgp-request.c:193
msgid "Username"
msgstr "Пользователь"
#: ../tgp-request.c:198
msgid "Create group chat"
msgstr "Создать групповой чат"
#: ../tgp-request.c:198
msgid "Invite users"
msgstr "Приглашенные собеседники"
#: ../tgp-request.c:217 ../tgp-request.c:232
msgid "Change password"
msgstr "Сменить пароль"
#: ../tgp-request.c:219
msgid "Current"
msgstr "Текущий"
#: ../tgp-request.c:223 ../tgp-request.c:253
msgid "Password"
msgstr "Пароль"
#: ../tgp-request.c:227 ../tgp-request.c:257
msgid "Confirm"
msgstr "Подтвердить"
#: ../tgp-request.c:251 ../tgp-request.c:262
msgid "New password"
msgstr "Новый пароль"
#. if we arrive here for the second time the specified phone number is not
#. valid. We do not
#. ask for the phone number directly, cause in that case the account would
#. still be created
#. named with the invalid phone number, even though the login will work
#: ../tgp-request.c:300
msgid "Invalid phone number"
msgstr "Неправильный номер телефона"
#: ../tgp-request.c:301
msgid ""
"Please enter only numbers in the international phone number format, a leading + following by the country prefix and the phone number.\n"
"Do not use any other special chars."
msgstr ""
"Пожалуйста, введите только цифры в международном формате телефонного номера. Начиная с +, префикса страны и заканчивая телефонным номером. \n"
"Не используйте никакие другие специальные символы."
#: ../tgp-request.c:370
msgid "Leave Chat"
msgstr "Покинуть Чат"
#: ../tgp-request.c:372
msgid "Do you want to leave this chat permantently?"
msgstr "Вы хотите покинуть этот чат навсегда?"
#: ../tgp-request.c:377
msgid "Abort Secret Chat"
msgstr "Отменить Секретный Чат"
#: ../tgp-request.c:379
msgid "Do you want to terminate this secret chat permantently?"
msgstr "Вы хотите отменить этот чат навсегда?"
#: ../tgp-request.c:384
msgid "Delete Contact"
msgstr "Удалить Контакт"
#: ../tgp-request.c:386
msgid "Do you want to remove this user from your global contact list?"
msgstr ""
"Вы хотите удалить этого пользователья из вашего глобального списка контактов"
" навсегда?"
#: ../tgp-request.c:401
msgid "Leave Channel"
msgstr "Покинуть Канал"
#: ../tgp-request.c:403
msgid "Do you want to leave this channel?"
msgstr "Вы хотите покинуть этот канал?"
#. This should be the language's timestamp format. This is preceded by a
#. colon.
#: ../tgp-utils.c:27
msgid "%d.%m.%Y %H:%M"
msgstr "%d.%m.%Y %H:%M"
#. This is preceded by a colon.
#: ../tgp-utils.c:48
msgid "recently"
msgstr "недавно"
#. This is preceded by a colon.
#: ../tgp-utils.c:52
msgid "last week"
msgstr "последняя неделя"
#. This is preceded by a colon.
#: ../tgp-utils.c:56
msgid "last month"
msgstr "последний месяц"
#. This is preceded by a colon. It refers to a point on time.
#: ../tgp-utils.c:60
msgid "unknown"
msgstr "неизвестно"
#: ../tgp-chat.c:108 ../tgp-chat.c:582
msgid "Telegram Chats"
msgstr "Telegram Чаты"
#: ../tgp-chat.c:113
msgid "You have already left this chat."
msgstr "Вы уже покинули этот чат."
#: ../tgp-chat.c:224
msgid "Subject:"
msgstr "Заголовок:"
#: ../tgp-chat.c:230
msgid "Invite link:"
msgstr "Пригласительная ссылка:"
#: ../tgp-chat.c:236
msgid "Chat ID:"
msgstr "Чат ID:"
#: ../tgp-chat.c:342
msgid "Supergroup"
msgstr "Супергруппа"
#: ../tgp-chat.c:342
msgid "Channel"
msgstr "Канал"
#: ../tgp-chat.c:345
msgid "Group"
msgstr "Группа"
#: ../tgp-chat.c:367
msgid "Users in chat"
msgstr "Пользователи в чате"
#: ../tgp-chat.c:370
msgid "Type"
msgstr ""

614
po/sq.po Normal file
View file

@ -0,0 +1,614 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-08-31 22:53+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: Besnik <besnik@programeshqip.org>, 2016\n"
"Language-Team: Albanian (https://www.transifex.com/telegram-purple-developers/teams/53149/sq/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=CHARSET\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: sq\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: ../telegram-base.c:500
msgid "Couldn't create group"
msgstr "Su krijua dot grup"
#: ../telegram-base.c:501
msgid "Please select at least one other user."
msgstr "Ju lutemi, përzgjidhni të paktën një përdorues tjetër."
#: ../telegram-base.c:555
msgid "Query Failed"
msgstr "Kërkesa Dështoi"
#: ../telegram-purple.c:162
msgid "Secret chat ready."
msgstr "Fjalosje e fshehtë gati."
#: ../telegram-purple.c:170
msgid "Secret chat terminated."
msgstr "Fjalosja e fshehtë përfundoi."
#: ../telegram-purple.c:182
msgid "Telegram"
msgstr "Telegram"
#: ../telegram-purple.c:229
msgid "Message marked as read."
msgstr "Mesazh i shënuar si i lexuar."
#: ../telegram-purple.c:339
#, c-format
msgid "Invite link: %s"
msgstr "Lidhje ftese: %s"
#. FIXME: Can TGLCHF_MODERATOR export links?
#: ../telegram-purple.c:350
msgid "Creating chat link failed"
msgstr "Krijimi i lidhjes së fjalosjes dështoi"
#: ../telegram-purple.c:351
msgid "You need to be admin of the group to do that."
msgstr "Lypset të jeni përgjegjës grupi që të bëni këtë."
#: ../telegram-purple.c:416
msgid "Chat joined"
msgstr "U hy në fjalosje"
#: ../telegram-purple.c:417
msgid "Chat added to list of chat rooms."
msgstr "Fjalosja u shtua te listë dhomash fjalosjeje."
#: ../telegram-purple.c:443
msgid "Start secret chat..."
msgstr "Filloni fjalosje të fshehtë..."
#. Generate Public Link
#: ../telegram-purple.c:450
msgid "Invite users by link..."
msgstr "Ftoni përdorues përmes lidhjesh..."
#. Delete self from chat
#: ../telegram-purple.c:458
msgid "Delete and exit..."
msgstr "Fshije dhe dil..."
#: ../telegram-purple.c:546
#, c-format
msgid "Unable to sign on as %s: file (public key) not found."
msgstr "Sarrin të bëhet hyrja si %s: su gjet kartelë (kyç publik)."
#: ../telegram-purple.c:550
#, c-format
msgid ""
"Make sure telegram-purple is installed properly,\n"
"including the .tglpub file.\n"
"If you're running SELinux (e.g. when using Tails),\n"
"try 'make local_install', or simply copy\n"
"%1$s to %2$s."
msgstr ""
"Sigurohuni që telegram-purple është instaluar si duhet,\n"
"përfshi këtu kartelën .tglpub.\n"
"Nëse xhironi SELinux (p.sh. kur përdorni Tails),\n"
"provoni 'make local_install', ose thjesht kopjoni\n"
"%1$s te %2$s."
#: ../telegram-purple.c:572
#, c-format
msgid ""
"Unable to sign on as %s: problem in the underlying library 'tgl'. Please "
"submit a bug report with the debug log."
msgstr ""
"Sarrihet të hyhet si %s: problem në librarinë përkatëse 'tgl'. Ju lutemi, "
"parashtroni një njoftim të metash të shoqëruar nga regjistrimi i "
"diagnostikimit."
#: ../telegram-purple.c:576
msgid "Problem in tgl"
msgstr "Problem në tgl"
#. TRANSLATORS: Please fill in your own prefix!
#: ../telegram-purple.c:584
#, c-format
msgid ""
"Unable to sign on as %s: phone number lacks country prefix. Numbers must "
"start with the full international prefix code, e.g. +1 for USA."
msgstr ""
"I pazoti të hyjë si %s: numrit të telefonit i mungon prefiksi i vendit. "
"Numrat duhet të fillojnë me kodin e plotë prefiksi ndërkombëtar, p.sh. +355 "
"për Shqipërinë."
#: ../telegram-purple.c:589
msgid "Incomplete phone number"
msgstr "Numër telefoni jo i plotë"
#: ../telegram-purple.c:642
msgid "Secret chat was already deleted"
msgstr "Fjalosja e fshehtë qe fshirë tashmë"
#: ../telegram-purple.c:644
msgid "Secret chat is not ready"
msgstr "Fjalosja e fshehtë sështë gati"
#: ../telegram-purple.c:652
msgid "Only the creator of a channel can post messages."
msgstr "Mesazhe mund të postojë vetëm krijuesi i një kanali."
#: ../telegram-purple.c:695
msgid "Cannot invite buddy to chat"
msgstr "Sftohet dot shok në fjalosje"
#: ../telegram-purple.c:696
msgid "Specified user does not exist."
msgstr "Përdoruesi i treguar nuk ekziston."
#: ../telegram-purple.c:709
msgid "phone no. (+ country prefix)"
msgstr "nr. telefoni (+ prefiks vendi)"
#. Login
#: ../telegram-purple.c:817
msgid "Password (two factor authentication)"
msgstr "Fjalëkalim (mirëfilltësim dyfaktorësh)"
#: ../telegram-purple.c:822
msgid ""
"Fallback SMS verification\n"
"(Helps when not using Pidgin and you aren't being prompted for the code)"
msgstr ""
"Kalim vetvetiu për verfikime SMS\n"
"(I dobishëm kur spërdoret Pidgin-i dhe nuk ju kërkohet kod)"
#: ../telegram-purple.c:828
msgid "always"
msgstr "përherë"
#: ../telegram-purple.c:829
msgid "never"
msgstr "kurrë"
#: ../telegram-purple.c:830
msgid "ask"
msgstr "pyet"
#: ../telegram-purple.c:832
msgid "Accept secret chats"
msgstr "Prano fjalosje të fshehta"
#: ../telegram-purple.c:836
msgid "Display buddies offline after (days)"
msgstr "Shfaqi shokët si jo të lidhur pas (ditësh)"
#: ../telegram-purple.c:840
msgid ""
"Don't fetch history older than (days)\n"
"(0 for unlimited)"
msgstr ""
"Mos sill historik më të vjetë se (ditë)\n"
"(0 për pa kufizim)"
#. Media
#: ../telegram-purple.c:845
msgid "Autoload media size (kb)"
msgstr "Madhësi media që vetëluhet (kb)"
#. Chats
#: ../telegram-purple.c:850
msgid "Add all group chats to buddy list"
msgstr "Shtoji krejt fjalosjet e grupit te lista e shokëve"
#. Read notifications
#: ../telegram-purple.c:855
msgid "Display notices of receipt"
msgstr "Shfaq njoftime dëftese"
#: ../telegram-purple.c:859
msgid "Send notices of receipt when present"
msgstr "Dërgo njoftime dëftese kur ka"
#: ../telegram-purple.c:884
msgid "Telegram Protocol Plugin."
msgstr "Shtojcë Protokolli Telegram."
#: ../tgp-msg.c:58
#, c-format
msgid "%2$s created chat %1$s."
msgstr "%2$s krijoi fjalosjen %1$s."
#: ../tgp-msg.c:61
#, c-format
msgid "%2$s changed title to %1$s."
msgstr "%2$s ndryshoi titullin te %1$s."
#: ../tgp-msg.c:64
#, c-format
msgid "%s changed photo."
msgstr "%s ndryshoi foton."
#: ../tgp-msg.c:67
#, c-format
msgid "%s deleted photo."
msgstr "%s fshiu foton."
#: ../tgp-msg.c:75
#, c-format
msgid "%1$s added user %2$s by link."
msgstr "%1$s shtoi përdoruesin %2$s përmes lidhjeje."
#: ../tgp-msg.c:90
#, c-format
msgid "%2$s added user %1$s."
msgstr "%2$s shtoi përdoruesin %1$s."
#: ../tgp-msg.c:114 ../tgp-msg.c:131
#, c-format
msgid "%2$s deleted user %1$s."
msgstr "%2$s fshiu përdoruesin %1$s."
#: ../tgp-msg.c:138
#, c-format
msgid "%2$s set self destruction timer to %1$d second."
msgid_plural "%2$s set self destruction timer to %1$d seconds."
msgstr[0] "%2$s e vendosi kohëmatësin e vetëshkatërrimit në %1$d sekondë."
msgstr[1] "%2$s e vendosi kohëmatësin e vetëshkatërrimit në %1$d sekonda."
#: ../tgp-msg.c:144
#, c-format
msgid "%2$s marked %1$d message read."
msgid_plural "%2$s marked %1$d messages read."
msgstr[0] "%2$s shënoi %1$d mesazh si të lexuar."
msgstr[1] "%2$s shënoi %1$d mesazhe si të lexuar."
#: ../tgp-msg.c:150
#, c-format
msgid "%2$s deleted %1$d message."
msgid_plural "%2$s deleted %1$d messages."
msgstr[0] "%2$s fshiu %1$d mesazh."
msgstr[1] "%2$s fshiu %1$d mesazhe."
#: ../tgp-msg.c:156
#, c-format
msgid "%2$s made a screenshot of %1$d message."
msgid_plural "%2$s made a screenshot of %1$d messages."
msgstr[0] "%2$s bëri një foto ekrani të %1$d mesazhi."
msgstr[1] "%2$s bëri një foto ekrani të %1$d mesazheve."
#: ../tgp-msg.c:162
#, c-format
msgid "Channel %1$s created"
msgstr "Kanali %1$s u krijua"
#. FIXME: check if this makes sense
#: ../tgp-msg.c:165 ../tgp-chat.c:124 ../tgp-chat.c:576
msgid "Telegram Channels"
msgstr "Kanale Telegram-i"
#: ../tgp-msg.c:191
msgid "Sending message failed."
msgstr "Dërgimi i mesazhit dështoi."
#: ../tgp-msg.c:253
msgid "Sending image failed."
msgstr "Dërgimi i figurës dështoi."
#: ../tgp-msg.c:417
#, c-format
msgid "%s sent a sticker."
msgstr "%s dërgoi një ngjitëse."
#: ../tgp-msg.c:463
msgid "failed loading message"
msgstr "dështoi në ngarkim mesazhi"
#: ../tgp-msg.c:498
msgid "[animation]"
msgstr "[animacion]"
#: ../tgp-msg.c:515
msgid "[audio]"
msgstr "[audio]"
#: ../tgp-msg.c:515
msgid "[video]"
msgstr "[video]"
#: ../tgp-msg.c:604
#, c-format
msgid "<b>Forwarded message from: %s</b><br>%s"
msgstr "<b>Mesazh i përcjellë nga: %s</b><br>%s"
#. FIXME: sometimes users aren't part of the response when receiving a
#. forwarded message
#: ../tgp-msg.c:607
#, c-format
msgid "<b>Forwarded message:</b><br>%s"
msgstr "<b>Mesazh i përcjellë:</b><br>%s"
#: ../tgp-msg.c:720
msgid "loading document or picture failed"
msgstr "Ngarkimi i dokumentit ose fotos dështoi"
#: ../tgp-net.c:281
msgid "Cannot connect to main server"
msgstr "Slidhet dot te shërbyesi kryesor"
#: ../tgp-net.c:322
msgid "Cannot connect to server: Ping timeout."
msgstr "Slidhet dot te shërbyesi: Ping-ut i mbaroi koha."
#: ../tgp-net.c:365
msgid "Lost connection to the server..."
msgstr "Humbi lidhja me shërbyesin..."
#: ../tgp-request.c:51
msgid ""
"Telegram wants to verify your identity. Please enter the login code that you"
" have received via SMS."
msgstr ""
"Telegram-i dëshiron të verifikojë identitetin tuaj. Ju lutemi, jepni kodin e"
" hyrjes që keni marrë përmes SMS-je."
#: ../tgp-request.c:54
msgid "Login code"
msgstr "Kod hyrjeje"
#: ../tgp-request.c:54
msgid "Enter login code"
msgstr "Jepni kodin e hyrjes postar"
#: ../tgp-request.c:54
msgid "the code"
msgstr "kodi"
#: ../tgp-request.c:54 ../tgp-request.c:104 ../tgp-request.c:198
#: ../tgp-request.c:233 ../tgp-request.c:263
msgid "OK"
msgstr "OK"
#: ../tgp-request.c:55 ../tgp-request.c:104 ../tgp-request.c:123
#: ../tgp-request.c:199 ../tgp-request.c:234 ../tgp-request.c:264
msgid "Cancel"
msgstr "Anuloje"
#: ../tgp-request.c:95
msgid "Registration"
msgstr "Regjistrim"
#: ../tgp-request.c:96
msgid "First name"
msgstr "Emër"
#: ../tgp-request.c:99
msgid "Last name"
msgstr "Mbiemër"
#: ../tgp-request.c:103
msgid "Register"
msgstr "Regjistrohuni"
#: ../tgp-request.c:103
msgid "Please register your phone number."
msgstr "Ju lutemi, regjistroni numrin tuaj të telefonit."
#. purple_request API not available
#: ../tgp-request.c:108
msgid ""
"Phone number is not registered. Please register your phone on a different "
"client."
msgstr ""
"Numri i telefonit sështë i regjistruar. Ju lutemi, regjistroni telefonin "
"tuaj me një klient tjetër."
#: ../tgp-request.c:110
msgid "Not registered"
msgstr "I paregjistruar"
#: ../tgp-request.c:122
msgid "Password needed"
msgstr "Lypset fjalëkalim"
#: ../tgp-request.c:122
msgid "Enter password for two factor authentication"
msgstr "Jepni fjalëkalim për mirëfilltësim dyfaktorësh"
#: ../tgp-request.c:123
msgid "Ok"
msgstr "Ok"
#: ../tgp-request.c:125
msgid ""
"No password set for two factor authentication. Please enter it in the "
"extended settings."
msgstr ""
"Pa fjalëkalim të caktuar, për mirëfilltësim dyfaktorësh. Ju lutemi, jepeni "
"te rregullimet e thelluara."
#: ../tgp-request.c:127
msgid "Password invalid"
msgstr "Fjalëkalim i pavlefshëm"
#: ../tgp-request.c:150
#, c-format
msgid "Accept secret chat '%s' on this device?"
msgstr "Të pranohet fjalosja e fshehtë '%s' në këtë pajisje?"
#: ../tgp-request.c:151
msgid "Secret chat"
msgstr "Fjalosje e fshehtë"
#: ../tgp-request.c:151
msgid ""
"Secret chats can only have one end point. If you accept a secret chat on "
"this device, its messages will not be available anywhere else. If you "
"decline, you can still accept the chat on other devices."
msgstr ""
"Fjalosjet e fshehta mund të kenë vetëm një pikë marrjeje. Nëse pranoni një "
"fjalosje të fshehtë në këtë pajisje, mesazhet e saj nuk do të jenë të "
"dukshme gjetiu. Nëse nuk e pranoni, mund ta pranoni fjalosjen në pajisje të "
"tjera."
#: ../tgp-request.c:182
msgid ""
"Invite at least one additional user by specifying\n"
" their full name (autocompletion available).\n"
"You can add more users once the chat was created."
msgstr ""
"Ftoni të paktën një përdorues shtesë duke dhënë\n"
" emrat e tyre të plotë (mund të përdoret vetëplotësimi).\n"
"Pasi fjalosja të jetë krijuar, mund të shtoni më tepër përdorues."
#: ../tgp-request.c:185 ../tgp-request.c:189 ../tgp-request.c:193
msgid "Username"
msgstr "Emër përdoruesi"
#: ../tgp-request.c:198
msgid "Create group chat"
msgstr "Krijoni fjalosje grupi"
#: ../tgp-request.c:198
msgid "Invite users"
msgstr "Ftoni përdorues"
#: ../tgp-request.c:217 ../tgp-request.c:232
msgid "Change password"
msgstr "Ndryshoni fjalëkalimin"
#: ../tgp-request.c:219
msgid "Current"
msgstr "I tanishmi"
#: ../tgp-request.c:223 ../tgp-request.c:253
msgid "Password"
msgstr "Fjalëkalim"
#: ../tgp-request.c:227 ../tgp-request.c:257
msgid "Confirm"
msgstr "Ripohojeni"
#: ../tgp-request.c:251 ../tgp-request.c:262
msgid "New password"
msgstr "Fjalëkalimi i ri"
#. if we arrive here for the second time the specified phone number is not
#. valid. We do not
#. ask for the phone number directly, cause in that case the account would
#. still be created
#. named with the invalid phone number, even though the login will work
#: ../tgp-request.c:300
msgid "Invalid phone number"
msgstr "Numër telefoni i pavlefshëm"
#: ../tgp-request.c:301
msgid ""
"Please enter only numbers in the international phone number format, a leading + following by the country prefix and the phone number.\n"
"Do not use any other special chars."
msgstr ""
"Ju lutemi, jepni vetëm numra në formatin për numra telefonash ndërkombëtarë, një + paraprijës të ndjekur nga prefiksi i vendit dhe numri i telefonit.\n"
"Mos përdorni shenja të tjera speciale."
#: ../tgp-request.c:370
msgid "Leave Chat"
msgstr "Braktise Fjalosjen"
#: ../tgp-request.c:372
msgid "Do you want to leave this chat permantently?"
msgstr "Doni të dilni përgjithmonë nga kjo fjalosje?"
#: ../tgp-request.c:377
msgid "Abort Secret Chat"
msgstr "Ndërprite Fjalosjen e Fshehtë"
#: ../tgp-request.c:379
msgid "Do you want to terminate this secret chat permantently?"
msgstr "Doni ta përfundoni përgjithmonë këtë fjalosje të fshehtë?"
#: ../tgp-request.c:384
msgid "Delete Contact"
msgstr "Fshije Kontaktin"
#: ../tgp-request.c:386
msgid "Do you want to remove this user from your global contact list?"
msgstr "Doni të hiqet ky përdorues prej listës suaj globale të kontakteve?"
#: ../tgp-request.c:401
msgid "Leave Channel"
msgstr "Braktise Kanalin"
#: ../tgp-request.c:403
msgid "Do you want to leave this channel?"
msgstr "Doni ta braktisni këtë kanal?"
#. This should be the language's timestamp format. This is preceded by a
#. colon.
#: ../tgp-utils.c:27
msgid "%d.%m.%Y %H:%M"
msgstr "%d.%m.%Y %H:%M"
#. This is preceded by a colon.
#: ../tgp-utils.c:48
msgid "recently"
msgstr "së fundi"
#. This is preceded by a colon.
#: ../tgp-utils.c:52
msgid "last week"
msgstr "javën e fundit"
#. This is preceded by a colon.
#: ../tgp-utils.c:56
msgid "last month"
msgstr "muajin e fundit"
#. This is preceded by a colon. It refers to a point on time.
#: ../tgp-utils.c:60
msgid "unknown"
msgstr "e panjohur"
#: ../tgp-chat.c:108 ../tgp-chat.c:582
msgid "Telegram Chats"
msgstr "Fjalosje Telegram-i"
#: ../tgp-chat.c:113
msgid "You have already left this chat."
msgstr "E keni lëndë tashmë këtë fjalosje."
#: ../tgp-chat.c:224
msgid "Subject:"
msgstr "Subjekt:"
#: ../tgp-chat.c:230
msgid "Invite link:"
msgstr "Lidhje ftese:"
#: ../tgp-chat.c:236
msgid "Chat ID:"
msgstr "ID Fjalosjeje:"
#: ../tgp-chat.c:342
msgid "Supergroup"
msgstr "Supergrup"
#: ../tgp-chat.c:342
msgid "Channel"
msgstr "Kanal"
#: ../tgp-chat.c:345
msgid "Group"
msgstr "Grup"
#: ../tgp-chat.c:367
msgid "Users in chat"
msgstr "Përdorues në fjalosje"
#: ../tgp-chat.c:370
msgid "Type"
msgstr "Lloj"

581
po/telegram-purple.pot Normal file
View file

@ -0,0 +1,581 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-08-31 22:53+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"Language: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=CHARSET\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n"
#: ../telegram-base.c:500
msgid "Couldn't create group"
msgstr ""
#: ../telegram-base.c:501
msgid "Please select at least one other user."
msgstr ""
#: ../telegram-base.c:555
msgid "Query Failed"
msgstr ""
#: ../telegram-purple.c:162
msgid "Secret chat ready."
msgstr ""
#: ../telegram-purple.c:170
msgid "Secret chat terminated."
msgstr ""
#: ../telegram-purple.c:182
msgid "Telegram"
msgstr ""
#: ../telegram-purple.c:229
msgid "Message marked as read."
msgstr ""
#: ../telegram-purple.c:339
#, c-format
msgid "Invite link: %s"
msgstr ""
#. FIXME: Can TGLCHF_MODERATOR export links?
#: ../telegram-purple.c:350
msgid "Creating chat link failed"
msgstr ""
#: ../telegram-purple.c:351
msgid "You need to be admin of the group to do that."
msgstr ""
#: ../telegram-purple.c:416
msgid "Chat joined"
msgstr ""
#: ../telegram-purple.c:417
msgid "Chat added to list of chat rooms."
msgstr ""
#: ../telegram-purple.c:443
msgid "Start secret chat..."
msgstr ""
#. Generate Public Link
#: ../telegram-purple.c:450
msgid "Invite users by link..."
msgstr ""
#. Delete self from chat
#: ../telegram-purple.c:458
msgid "Delete and exit..."
msgstr ""
#: ../telegram-purple.c:546
#, c-format
msgid "Unable to sign on as %s: file (public key) not found."
msgstr ""
#: ../telegram-purple.c:550
#, c-format
msgid ""
"Make sure telegram-purple is installed properly,\n"
"including the .tglpub file.\n"
"If you're running SELinux (e.g. when using Tails),\n"
"try 'make local_install', or simply copy\n"
"%1$s to %2$s."
msgstr ""
#: ../telegram-purple.c:572
#, c-format
msgid ""
"Unable to sign on as %s: problem in the underlying library 'tgl'. Please "
"submit a bug report with the debug log."
msgstr ""
#: ../telegram-purple.c:576
msgid "Problem in tgl"
msgstr ""
#. TRANSLATORS: Please fill in your own prefix!
#: ../telegram-purple.c:584
#, c-format
msgid ""
"Unable to sign on as %s: phone number lacks country prefix. Numbers must "
"start with the full international prefix code, e.g. +1 for USA."
msgstr ""
#: ../telegram-purple.c:589
msgid "Incomplete phone number"
msgstr ""
#: ../telegram-purple.c:642
msgid "Secret chat was already deleted"
msgstr ""
#: ../telegram-purple.c:644
msgid "Secret chat is not ready"
msgstr ""
#: ../telegram-purple.c:652
msgid "Only the creator of a channel can post messages."
msgstr ""
#: ../telegram-purple.c:695
msgid "Cannot invite buddy to chat"
msgstr ""
#: ../telegram-purple.c:696
msgid "Specified user does not exist."
msgstr ""
#: ../telegram-purple.c:709
msgid "phone no. (+ country prefix)"
msgstr ""
#. Login
#: ../telegram-purple.c:817
msgid "Password (two factor authentication)"
msgstr ""
#: ../telegram-purple.c:822
msgid ""
"Fallback SMS verification\n"
"(Helps when not using Pidgin and you aren't being prompted for the code)"
msgstr ""
#: ../telegram-purple.c:828
msgid "always"
msgstr ""
#: ../telegram-purple.c:829
msgid "never"
msgstr ""
#: ../telegram-purple.c:830
msgid "ask"
msgstr ""
#: ../telegram-purple.c:832
msgid "Accept secret chats"
msgstr ""
#: ../telegram-purple.c:836
msgid "Display buddies offline after (days)"
msgstr ""
#: ../telegram-purple.c:840
msgid ""
"Don't fetch history older than (days)\n"
"(0 for unlimited)"
msgstr ""
#. Media
#: ../telegram-purple.c:845
msgid "Autoload media size (kb)"
msgstr ""
#. Chats
#: ../telegram-purple.c:850
msgid "Add all group chats to buddy list"
msgstr ""
#. Read notifications
#: ../telegram-purple.c:855
msgid "Display notices of receipt"
msgstr ""
#: ../telegram-purple.c:859
msgid "Send notices of receipt when present"
msgstr ""
#: ../telegram-purple.c:884
msgid "Telegram Protocol Plugin."
msgstr ""
#: ../tgp-msg.c:58
#, c-format
msgid "%2$s created chat %1$s."
msgstr ""
#: ../tgp-msg.c:61
#, c-format
msgid "%2$s changed title to %1$s."
msgstr ""
#: ../tgp-msg.c:64
#, c-format
msgid "%s changed photo."
msgstr ""
#: ../tgp-msg.c:67
#, c-format
msgid "%s deleted photo."
msgstr ""
#: ../tgp-msg.c:75
#, c-format
msgid "%1$s added user %2$s by link."
msgstr ""
#: ../tgp-msg.c:90
#, c-format
msgid "%2$s added user %1$s."
msgstr ""
#: ../tgp-msg.c:114 ../tgp-msg.c:131
#, c-format
msgid "%2$s deleted user %1$s."
msgstr ""
#: ../tgp-msg.c:138
#, c-format
msgid "%2$s set self destruction timer to %1$d second."
msgid_plural "%2$s set self destruction timer to %1$d seconds."
msgstr[0] ""
msgstr[1] ""
#: ../tgp-msg.c:144
#, c-format
msgid "%2$s marked %1$d message read."
msgid_plural "%2$s marked %1$d messages read."
msgstr[0] ""
msgstr[1] ""
#: ../tgp-msg.c:150
#, c-format
msgid "%2$s deleted %1$d message."
msgid_plural "%2$s deleted %1$d messages."
msgstr[0] ""
msgstr[1] ""
#: ../tgp-msg.c:156
#, c-format
msgid "%2$s made a screenshot of %1$d message."
msgid_plural "%2$s made a screenshot of %1$d messages."
msgstr[0] ""
msgstr[1] ""
#: ../tgp-msg.c:162
#, c-format
msgid "Channel %1$s created"
msgstr ""
#. FIXME: check if this makes sense
#: ../tgp-msg.c:165 ../tgp-chat.c:124 ../tgp-chat.c:576
msgid "Telegram Channels"
msgstr ""
#: ../tgp-msg.c:191
msgid "Sending message failed."
msgstr ""
#: ../tgp-msg.c:253
msgid "Sending image failed."
msgstr ""
#: ../tgp-msg.c:417
#, c-format
msgid "%s sent a sticker."
msgstr ""
#: ../tgp-msg.c:463
msgid "failed loading message"
msgstr ""
#: ../tgp-msg.c:498
msgid "[animation]"
msgstr ""
#: ../tgp-msg.c:515
msgid "[audio]"
msgstr ""
#: ../tgp-msg.c:515
msgid "[video]"
msgstr ""
#: ../tgp-msg.c:604
#, c-format
msgid "<b>Forwarded message from: %s</b><br>%s"
msgstr ""
#. FIXME: sometimes users aren't part of the response when receiving a forwarded message
#: ../tgp-msg.c:607
#, c-format
msgid "<b>Forwarded message:</b><br>%s"
msgstr ""
#: ../tgp-msg.c:720
msgid "loading document or picture failed"
msgstr ""
#: ../tgp-net.c:281
msgid "Cannot connect to main server"
msgstr ""
#: ../tgp-net.c:322
msgid "Cannot connect to server: Ping timeout."
msgstr ""
#: ../tgp-net.c:365
msgid "Lost connection to the server..."
msgstr ""
#: ../tgp-request.c:51
msgid ""
"Telegram wants to verify your identity. Please enter the login code that you "
"have received via SMS."
msgstr ""
#: ../tgp-request.c:54
msgid "Login code"
msgstr ""
#: ../tgp-request.c:54
msgid "Enter login code"
msgstr ""
#: ../tgp-request.c:54
msgid "the code"
msgstr ""
#: ../tgp-request.c:54 ../tgp-request.c:104 ../tgp-request.c:198
#: ../tgp-request.c:233 ../tgp-request.c:263
msgid "OK"
msgstr ""
#: ../tgp-request.c:55 ../tgp-request.c:104 ../tgp-request.c:123
#: ../tgp-request.c:199 ../tgp-request.c:234 ../tgp-request.c:264
msgid "Cancel"
msgstr ""
#: ../tgp-request.c:95
msgid "Registration"
msgstr ""
#: ../tgp-request.c:96
msgid "First name"
msgstr ""
#: ../tgp-request.c:99
msgid "Last name"
msgstr ""
#: ../tgp-request.c:103
msgid "Register"
msgstr ""
#: ../tgp-request.c:103
msgid "Please register your phone number."
msgstr ""
#. purple_request API not available
#: ../tgp-request.c:108
msgid ""
"Phone number is not registered. Please register your phone on a different "
"client."
msgstr ""
#: ../tgp-request.c:110
msgid "Not registered"
msgstr ""
#: ../tgp-request.c:122
msgid "Password needed"
msgstr ""
#: ../tgp-request.c:122
msgid "Enter password for two factor authentication"
msgstr ""
#: ../tgp-request.c:123
msgid "Ok"
msgstr ""
#: ../tgp-request.c:125
msgid ""
"No password set for two factor authentication. Please enter it in the "
"extended settings."
msgstr ""
#: ../tgp-request.c:127
msgid "Password invalid"
msgstr ""
#: ../tgp-request.c:150
#, c-format
msgid "Accept secret chat '%s' on this device?"
msgstr ""
#: ../tgp-request.c:151
msgid "Secret chat"
msgstr ""
#: ../tgp-request.c:151
msgid ""
"Secret chats can only have one end point. If you accept a secret chat on "
"this device, its messages will not be available anywhere else. If you "
"decline, you can still accept the chat on other devices."
msgstr ""
#: ../tgp-request.c:182
msgid ""
"Invite at least one additional user by specifying\n"
" their full name (autocompletion available).\n"
"You can add more users once the chat was created."
msgstr ""
#: ../tgp-request.c:185 ../tgp-request.c:189 ../tgp-request.c:193
msgid "Username"
msgstr ""
#: ../tgp-request.c:198
msgid "Create group chat"
msgstr ""
#: ../tgp-request.c:198
msgid "Invite users"
msgstr ""
#: ../tgp-request.c:217 ../tgp-request.c:232
msgid "Change password"
msgstr ""
#: ../tgp-request.c:219
msgid "Current"
msgstr ""
#: ../tgp-request.c:223 ../tgp-request.c:253
msgid "Password"
msgstr ""
#: ../tgp-request.c:227 ../tgp-request.c:257
msgid "Confirm"
msgstr ""
#: ../tgp-request.c:251 ../tgp-request.c:262
msgid "New password"
msgstr ""
#. if we arrive here for the second time the specified phone number is not valid. We do not
#. ask for the phone number directly, cause in that case the account would still be created
#. named with the invalid phone number, even though the login will work
#: ../tgp-request.c:300
msgid "Invalid phone number"
msgstr ""
#: ../tgp-request.c:301
msgid ""
"Please enter only numbers in the international phone number format, a "
"leading + following by the country prefix and the phone number.\n"
"Do not use any other special chars."
msgstr ""
#: ../tgp-request.c:370
msgid "Leave Chat"
msgstr ""
#: ../tgp-request.c:372
msgid "Do you want to leave this chat permantently?"
msgstr ""
#: ../tgp-request.c:377
msgid "Abort Secret Chat"
msgstr ""
#: ../tgp-request.c:379
msgid "Do you want to terminate this secret chat permantently?"
msgstr ""
#: ../tgp-request.c:384
msgid "Delete Contact"
msgstr ""
#: ../tgp-request.c:386
msgid "Do you want to remove this user from your global contact list?"
msgstr ""
#: ../tgp-request.c:401
msgid "Leave Channel"
msgstr ""
#: ../tgp-request.c:403
msgid "Do you want to leave this channel?"
msgstr ""
#. This should be the language's timestamp format. This is preceded by a colon.
#: ../tgp-utils.c:27
msgid "%d.%m.%Y %H:%M"
msgstr ""
#. This is preceded by a colon.
#: ../tgp-utils.c:48
msgid "recently"
msgstr ""
#. This is preceded by a colon.
#: ../tgp-utils.c:52
msgid "last week"
msgstr ""
#. This is preceded by a colon.
#: ../tgp-utils.c:56
msgid "last month"
msgstr ""
#. This is preceded by a colon. It refers to a point on time.
#: ../tgp-utils.c:60
msgid "unknown"
msgstr ""
#: ../tgp-chat.c:108 ../tgp-chat.c:582
msgid "Telegram Chats"
msgstr ""
#: ../tgp-chat.c:113
msgid "You have already left this chat."
msgstr ""
#: ../tgp-chat.c:224
msgid "Subject:"
msgstr ""
#: ../tgp-chat.c:230
msgid "Invite link:"
msgstr ""
#: ../tgp-chat.c:236
msgid "Chat ID:"
msgstr ""
#: ../tgp-chat.c:342
msgid "Supergroup"
msgstr ""
#: ../tgp-chat.c:342
msgid "Channel"
msgstr ""
#: ../tgp-chat.c:345
msgid "Group"
msgstr ""
#: ../tgp-chat.c:367
msgid "Users in chat"
msgstr ""
#: ../tgp-chat.c:370
msgid "Type"
msgstr ""

616
po/uk.po Normal file
View file

@ -0,0 +1,616 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-08-31 22:53+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: Самохвалов Антон <samant.ua@mail.ru>, 2017\n"
"Language-Team: Ukrainian (https://www.transifex.com/telegram-purple-developers/teams/53149/uk/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=CHARSET\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: uk\n"
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
#: ../telegram-base.c:500
msgid "Couldn't create group"
msgstr "Не вдається створити групу"
#: ../telegram-base.c:501
msgid "Please select at least one other user."
msgstr "Будь ласка, виберіть ще хоча б одного іншого користувача"
#: ../telegram-base.c:555
msgid "Query Failed"
msgstr "Запит не вдався"
#: ../telegram-purple.c:162
msgid "Secret chat ready."
msgstr "Таємний чат готовий."
#: ../telegram-purple.c:170
msgid "Secret chat terminated."
msgstr "Таємний чат перерваний."
#: ../telegram-purple.c:182
msgid "Telegram"
msgstr "Telegram"
#: ../telegram-purple.c:229
msgid "Message marked as read."
msgstr "Повідомлення помічено як прочитане."
#: ../telegram-purple.c:339
#, c-format
msgid "Invite link: %s"
msgstr "Адреса для запрошення: %s"
#. FIXME: Can TGLCHF_MODERATOR export links?
#: ../telegram-purple.c:350
msgid "Creating chat link failed"
msgstr "Створення посилання на чат не вдалося"
#: ../telegram-purple.c:351
msgid "You need to be admin of the group to do that."
msgstr "Для цього ви маєте бути адміном групи."
#: ../telegram-purple.c:416
msgid "Chat joined"
msgstr "Чат підключений"
#: ../telegram-purple.c:417
msgid "Chat added to list of chat rooms."
msgstr "Чат доданий до списку чат-кімнат"
#: ../telegram-purple.c:443
msgid "Start secret chat..."
msgstr "Запустити таємний чат..."
#. Generate Public Link
#: ../telegram-purple.c:450
msgid "Invite users by link..."
msgstr "Запросити користувачів посиланням..."
#. Delete self from chat
#: ../telegram-purple.c:458
msgid "Delete and exit..."
msgstr "Видалити та вийти..."
#: ../telegram-purple.c:546
#, c-format
msgid "Unable to sign on as %s: file (public key) not found."
msgstr "Не вдалося увійти як %s: не знайдений файл (публічний ключ)."
#: ../telegram-purple.c:550
#, c-format
msgid ""
"Make sure telegram-purple is installed properly,\n"
"including the .tglpub file.\n"
"If you're running SELinux (e.g. when using Tails),\n"
"try 'make local_install', or simply copy\n"
"%1$s to %2$s."
msgstr ""
"Переконайтесь, що telegram-purple встановлено вірно,\n"
"в тому числі файл .tglpub.\n"
"Якщо ви запускаєте SELinux (напр., використовуючи Tails),\n"
"спробуйте 'make local_install', чи просто скопіюйте\n"
"%1$s до %2$s."
#: ../telegram-purple.c:572
#, c-format
msgid ""
"Unable to sign on as %s: problem in the underlying library 'tgl'. Please "
"submit a bug report with the debug log."
msgstr ""
"Не вдається увійти як %s: проблема в існуючій бібліотеці 'tgl'. Будь ласка, "
"відправте звіт про помилку в журнал помилок."
#: ../telegram-purple.c:576
msgid "Problem in tgl"
msgstr "Проблема в tgl"
#. TRANSLATORS: Please fill in your own prefix!
#: ../telegram-purple.c:584
#, c-format
msgid ""
"Unable to sign on as %s: phone number lacks country prefix. Numbers must "
"start with the full international prefix code, e.g. +1 for USA."
msgstr ""
"Не вдалось зайти як %s: в номері телефону не вистачає префікса країни. "
"Номери повинні починатись з повного міжнародного префіксу-коду, напр., +38 "
"для України."
#: ../telegram-purple.c:589
msgid "Incomplete phone number"
msgstr "Неповноцінний номер телефону"
#: ../telegram-purple.c:642
msgid "Secret chat was already deleted"
msgstr "Таємний чат вже видалений."
#: ../telegram-purple.c:644
msgid "Secret chat is not ready"
msgstr "Таємний чат не готовий."
#: ../telegram-purple.c:652
msgid "Only the creator of a channel can post messages."
msgstr "Писати повідомлення може тільки автор каналу."
#: ../telegram-purple.c:695
msgid "Cannot invite buddy to chat"
msgstr "Не вдається запросити друга в чат"
#: ../telegram-purple.c:696
msgid "Specified user does not exist."
msgstr "Такого користувача немає."
#: ../telegram-purple.c:709
msgid "phone no. (+ country prefix)"
msgstr "№ телефону (+ код країни)"
#. Login
#: ../telegram-purple.c:817
msgid "Password (two factor authentication)"
msgstr "Пароль (двух-факторна аутентифікація)"
#: ../telegram-purple.c:822
msgid ""
"Fallback SMS verification\n"
"(Helps when not using Pidgin and you aren't being prompted for the code)"
msgstr ""
"Резервна SMS-перевірка\n"
"(Допомагає, коли ви не використовуєте Піджин, і вас не запрошено до кодування)"
#: ../telegram-purple.c:828
msgid "always"
msgstr "завжди"
#: ../telegram-purple.c:829
msgid "never"
msgstr "ніколи"
#: ../telegram-purple.c:830
msgid "ask"
msgstr "запитати"
#: ../telegram-purple.c:832
msgid "Accept secret chats"
msgstr "Приймати таємні чати"
#: ../telegram-purple.c:836
msgid "Display buddies offline after (days)"
msgstr "Відображати друзів, що оффлайн (днів)"
#: ../telegram-purple.c:840
msgid ""
"Don't fetch history older than (days)\n"
"(0 for unlimited)"
msgstr ""
"Не піднімати історію, старшу за (днів)\n"
"(піднімати усю - 0)"
#. Media
#: ../telegram-purple.c:845
msgid "Autoload media size (kb)"
msgstr "Автозавантаження розміру медіа (кб)"
#. Chats
#: ../telegram-purple.c:850
msgid "Add all group chats to buddy list"
msgstr "Додати усі групові чати в список контактів"
#. Read notifications
#: ../telegram-purple.c:855
msgid "Display notices of receipt"
msgstr "Показувати повідомлення про отримання"
#: ../telegram-purple.c:859
msgid "Send notices of receipt when present"
msgstr "Відправляти повідомлення про отримання, якщо воно є"
#: ../telegram-purple.c:884
msgid "Telegram Protocol Plugin."
msgstr "Плагін Протоколу Telegram"
#: ../tgp-msg.c:58
#, c-format
msgid "%2$s created chat %1$s."
msgstr "%2$s створив чат %1$s."
#: ../tgp-msg.c:61
#, c-format
msgid "%2$s changed title to %1$s."
msgstr "%2$s змінив назву на %1$s."
#: ../tgp-msg.c:64
#, c-format
msgid "%s changed photo."
msgstr "%s змінив фото."
#: ../tgp-msg.c:67
#, c-format
msgid "%s deleted photo."
msgstr "%s видалив фото."
#: ../tgp-msg.c:75
#, c-format
msgid "%1$s added user %2$s by link."
msgstr "%1$s додав %2$s за посиланням."
#: ../tgp-msg.c:90
#, c-format
msgid "%2$s added user %1$s."
msgstr "%2$s додав користувача %1$s."
#: ../tgp-msg.c:114 ../tgp-msg.c:131
#, c-format
msgid "%2$s deleted user %1$s."
msgstr "%2$s видалив користувача %1$s."
#: ../tgp-msg.c:138
#, c-format
msgid "%2$s set self destruction timer to %1$d second."
msgid_plural "%2$s set self destruction timer to %1$d seconds."
msgstr[0] "%2$s встановив таймер самознищення на %1$d секунду."
msgstr[1] "%2$s встановив таймер самознищення на %1$d секунди."
msgstr[2] "%2$s встановив таймер самознищення на %1$d секунд."
#: ../tgp-msg.c:144
#, c-format
msgid "%2$s marked %1$d message read."
msgid_plural "%2$s marked %1$d messages read."
msgstr[0] "%2$s помітив %1$d повідомлення як прочитане."
msgstr[1] "%2$s помітив %1$d повідомлення як прочитані."
msgstr[2] "%2$s помітив %1$d повідомленнь як прочитані."
#: ../tgp-msg.c:150
#, c-format
msgid "%2$s deleted %1$d message."
msgid_plural "%2$s deleted %1$d messages."
msgstr[0] "%2$s видалив %1$d повідомлення."
msgstr[1] "%2$s видалив %1$d повідомлення."
msgstr[2] "%2$s видалив %1$d повідомленнь."
#: ../tgp-msg.c:156
#, c-format
msgid "%2$s made a screenshot of %1$d message."
msgid_plural "%2$s made a screenshot of %1$d messages."
msgstr[0] "%2$s зробив скріншот %1$d повідомлення."
msgstr[1] "%2$s зробив скріншот %1$d повідомлень."
msgstr[2] "%2$s зробив скріншот %1$d повідомленнь."
#: ../tgp-msg.c:162
#, c-format
msgid "Channel %1$s created"
msgstr "Канал %1$s створений"
#. FIXME: check if this makes sense
#: ../tgp-msg.c:165 ../tgp-chat.c:124 ../tgp-chat.c:576
msgid "Telegram Channels"
msgstr "Канали Telegram"
#: ../tgp-msg.c:191
msgid "Sending message failed."
msgstr "Відправка повідомлення не вдалась."
#: ../tgp-msg.c:253
msgid "Sending image failed."
msgstr "Відправка зображення не вдалася"
#: ../tgp-msg.c:417
#, c-format
msgid "%s sent a sticker."
msgstr "%s відправив липучку."
#: ../tgp-msg.c:463
msgid "failed loading message"
msgstr "не вдалось завантажити повідомлення"
#: ../tgp-msg.c:498
msgid "[animation]"
msgstr "[анімація]"
#: ../tgp-msg.c:515
msgid "[audio]"
msgstr "[аудіо]"
#: ../tgp-msg.c:515
msgid "[video]"
msgstr "[відео]"
#: ../tgp-msg.c:604
#, c-format
msgid "<b>Forwarded message from: %s</b><br>%s"
msgstr "<b>Перенаправлене повідомлення від %s</b><br>%s"
#. FIXME: sometimes users aren't part of the response when receiving a
#. forwarded message
#: ../tgp-msg.c:607
#, c-format
msgid "<b>Forwarded message:</b><br>%s"
msgstr "<b>Перенаправлене повідомлення:</b><br>%s"
#: ../tgp-msg.c:720
msgid "loading document or picture failed"
msgstr "завантаження документу чи картинки не вдалось"
#: ../tgp-net.c:281
msgid "Cannot connect to main server"
msgstr "Не вдається підключитись до головного сервера"
#: ../tgp-net.c:322
msgid "Cannot connect to server: Ping timeout."
msgstr "Не вдається підключитись до сервера: сервер не відповідає."
#: ../tgp-net.c:365
msgid "Lost connection to the server..."
msgstr "Зв'язок із сервером втрачений..."
#: ../tgp-request.c:51
msgid ""
"Telegram wants to verify your identity. Please enter the login code that you"
" have received via SMS."
msgstr ""
"Telegram хоче перевірити вашу особистість. Будь ласка, введіть логін, що "
"отримали по SMS."
#: ../tgp-request.c:54
msgid "Login code"
msgstr "Код входу"
#: ../tgp-request.c:54
msgid "Enter login code"
msgstr "Введіть код входу"
#: ../tgp-request.c:54
msgid "the code"
msgstr "код"
#: ../tgp-request.c:54 ../tgp-request.c:104 ../tgp-request.c:198
#: ../tgp-request.c:233 ../tgp-request.c:263
msgid "OK"
msgstr "ОК"
#: ../tgp-request.c:55 ../tgp-request.c:104 ../tgp-request.c:123
#: ../tgp-request.c:199 ../tgp-request.c:234 ../tgp-request.c:264
msgid "Cancel"
msgstr "Відміна"
#: ../tgp-request.c:95
msgid "Registration"
msgstr "Регістрація"
#: ../tgp-request.c:96
msgid "First name"
msgstr "Ім'я"
#: ../tgp-request.c:99
msgid "Last name"
msgstr "Прізвище"
#: ../tgp-request.c:103
msgid "Register"
msgstr "Зарегіструватись"
#: ../tgp-request.c:103
msgid "Please register your phone number."
msgstr "Будь ласка, зареєструйте ваш номер телефону."
#. purple_request API not available
#: ../tgp-request.c:108
msgid ""
"Phone number is not registered. Please register your phone on a different "
"client."
msgstr ""
"Номер телефону не зареєстрований. Будь ласка, зареєструйте ваш телефон на "
"іншого кліента."
#: ../tgp-request.c:110
msgid "Not registered"
msgstr "Не зареєстрований"
#: ../tgp-request.c:122
msgid "Password needed"
msgstr "Потрібен пароль"
#: ../tgp-request.c:122
msgid "Enter password for two factor authentication"
msgstr "Введіть пароль для двофакторної авторизації"
#: ../tgp-request.c:123
msgid "Ok"
msgstr "Гаразд"
#: ../tgp-request.c:125
msgid ""
"No password set for two factor authentication. Please enter it in the "
"extended settings."
msgstr ""
"Для двофакторної авторизації не встановлений пароль. Будь ласка, введіть "
"його в розширених настройках."
#: ../tgp-request.c:127
msgid "Password invalid"
msgstr "Пароль невірний"
#: ../tgp-request.c:150
#, c-format
msgid "Accept secret chat '%s' on this device?"
msgstr "Прийняти таємний чат '%s' на цьому пристрої?"
#: ../tgp-request.c:151
msgid "Secret chat"
msgstr "Таємний чат"
#: ../tgp-request.c:151
msgid ""
"Secret chats can only have one end point. If you accept a secret chat on "
"this device, its messages will not be available anywhere else. If you "
"decline, you can still accept the chat on other devices."
msgstr ""
"У таємного чата може бути тільки одна кінцева точка. Якщо ви приймаєте на "
"цьому пристрої таємний чат, його повідомлення будуть не будуть доступні з "
"інших місць. Якщо відмовитесь, то можете прийняти чат з інших пристроїв."
#: ../tgp-request.c:182
msgid ""
"Invite at least one additional user by specifying\n"
" their full name (autocompletion available).\n"
"You can add more users once the chat was created."
msgstr ""
"Запросіть щонайменше одного додаткового користувача вказанням його повного імені (автозавершення доступне).\n"
"Ви можете додати більше користувачів одразу після створення чата."
#: ../tgp-request.c:185 ../tgp-request.c:189 ../tgp-request.c:193
msgid "Username"
msgstr "Ім'я користувача"
#: ../tgp-request.c:198
msgid "Create group chat"
msgstr "Створити груповий чат"
#: ../tgp-request.c:198
msgid "Invite users"
msgstr "Запросити користувачів"
#: ../tgp-request.c:217 ../tgp-request.c:232
msgid "Change password"
msgstr "Змінити пароль"
#: ../tgp-request.c:219
msgid "Current"
msgstr "Поточний"
#: ../tgp-request.c:223 ../tgp-request.c:253
msgid "Password"
msgstr "Пароль"
#: ../tgp-request.c:227 ../tgp-request.c:257
msgid "Confirm"
msgstr "Підтвердити"
#: ../tgp-request.c:251 ../tgp-request.c:262
msgid "New password"
msgstr "Новий пароль"
#. if we arrive here for the second time the specified phone number is not
#. valid. We do not
#. ask for the phone number directly, cause in that case the account would
#. still be created
#. named with the invalid phone number, even though the login will work
#: ../tgp-request.c:300
msgid "Invalid phone number"
msgstr "Невірний номер телефону"
#: ../tgp-request.c:301
msgid ""
"Please enter only numbers in the international phone number format, a leading + following by the country prefix and the phone number.\n"
"Do not use any other special chars."
msgstr ""
"Будь ласка, введіть номер тільки цифри в міжнародному телефонному форматі. Значок +, потім код країни і номер абонента.\n"
"Не використовуйте інших символів."
#: ../tgp-request.c:370
msgid "Leave Chat"
msgstr "Покинути чат"
#: ../tgp-request.c:372
msgid "Do you want to leave this chat permantently?"
msgstr "Бажаєте надовго покинути цей таємний чат?"
#: ../tgp-request.c:377
msgid "Abort Secret Chat"
msgstr "Про таємний чат"
#: ../tgp-request.c:379
msgid "Do you want to terminate this secret chat permantently?"
msgstr "Бажаєте надовго перервати цей таємний чат?"
#: ../tgp-request.c:384
msgid "Delete Contact"
msgstr "Видалити контакт"
#: ../tgp-request.c:386
msgid "Do you want to remove this user from your global contact list?"
msgstr ""
"Бажаєте видалити цього користувача з вашого глобального списку контактів?"
#: ../tgp-request.c:401
msgid "Leave Channel"
msgstr "Покинути канал"
#: ../tgp-request.c:403
msgid "Do you want to leave this channel?"
msgstr "Бажаєте покинути цей канал?"
#. This should be the language's timestamp format. This is preceded by a
#. colon.
#: ../tgp-utils.c:27
msgid "%d.%m.%Y %H:%M"
msgstr "%d.%m.%Y %H:%M"
#. This is preceded by a colon.
#: ../tgp-utils.c:48
msgid "recently"
msgstr "нещодавно"
#. This is preceded by a colon.
#: ../tgp-utils.c:52
msgid "last week"
msgstr "на тому тижні"
#. This is preceded by a colon.
#: ../tgp-utils.c:56
msgid "last month"
msgstr "минулого місяця"
#. This is preceded by a colon. It refers to a point on time.
#: ../tgp-utils.c:60
msgid "unknown"
msgstr "невідомо"
#: ../tgp-chat.c:108 ../tgp-chat.c:582
msgid "Telegram Chats"
msgstr "Чати Telegram"
#: ../tgp-chat.c:113
msgid "You have already left this chat."
msgstr "Ви вже покинули цей чат."
#: ../tgp-chat.c:224
msgid "Subject:"
msgstr "Тема:"
#: ../tgp-chat.c:230
msgid "Invite link:"
msgstr "Посилання для запрошення:"
#: ../tgp-chat.c:236
msgid "Chat ID:"
msgstr "ID чата:"
#: ../tgp-chat.c:342
msgid "Supergroup"
msgstr "Супергрупа"
#: ../tgp-chat.c:342
msgid "Channel"
msgstr "Канал"
#: ../tgp-chat.c:345
msgid "Group"
msgstr "Група"
#: ../tgp-chat.c:367
msgid "Users in chat"
msgstr "Користувачі у чаті"
#: ../tgp-chat.c:370
msgid "Type"
msgstr "Тип"

View file

@ -1,16 +1,18 @@
Name: purple-telegram
Version: 1.0.1
Release: 1%{?dist}
Summary: Adds support for Telegram to Pidgin, Adium, Finch and other Libpurple based messengers
Group: Internet/Messaging
License: GPLv2+
URL: https://github.com/majn/telegram-purple
Source0: https://codeload.github.com/majn/telegram-purple/tar.gz/v%{version}.tar.gz
Name: purple-telegram
Version: 1.3.1
Release: 1%{?dist}
Summary: Adds support for Libpurple based messengers
Group: Applications/Internet
License: GPLv2+
URL: https://github.com/majn/telegram-purple
Source0: https://codeload.github.com/majn/telegram-purple/tar.gz/v%{version}.tar.gz
BuildRequires: openssl-devel,glib2-devel,libpurple-devel
Requires: openssl,glib2,libpurple
BuildRequires: gettext, libgcrypt-devel >= 1.6, pkgconfig(zlib), pkgconfig(purple), pkgconfig(libwebp)
BuildRequires: pkgconfig(appstream-glib)
%description
Adds support for Telegram to Pidgin, Adium, Finch
and other Libpurple based messengers.
%prep
%autosetup
@ -21,13 +23,47 @@ make %{?_smp_mflags}
%install
%make_install
chmod 755 %{buildroot}/%{_libdir}/purple-2/telegram-purple.so
%find_lang telegram-purple
%files
%doc
%check
appstream-util validate-relax --nonet %{buildroot}/%{_datadir}/appdata/telegram-purple.metainfo.xml
%files -f telegram-purple.lang
%doc README* CHANGELOG*
%{_libdir}/purple-2/telegram-purple.so
%{_sysconfdir}/telegram-purple/*
%config %{_sysconfdir}/telegram-purple/*
%{_datadir}/appdata/telegram-purple.metainfo.xml
%{_datadir}/pixmaps/pidgin/protocols/16/telegram.png
%{_datadir}/pixmaps/pidgin/protocols/22/telegram.png
%{_datadir}/pixmaps/pidgin/protocols/48/telegram.png
%changelog
* Sun Apr 9 2017 mjentsch 1.3.1-1
- Build for 1.3.1
* Thu Dec 10 2015 tuxmaster 1.3.0-1
- Build for 1.3.0
* Sat Jan 23 mjentsch 1.2.5-1
- build for 1.2.5
* Thu Dec 10 2015 tuxmaster 1.2.4-2
- Fix build for appdata.
* Thu Dec 10 2015 mjentsch 1.2.4-1
- build for 1.2.4
* Thu Dec 10 2015 tuxmaster 1.2.4-2
- Fix build for appdata.
* Wed Nov 18 2015 tuxmaster 1.2.2-3
- Add required version for libgcrypt.
* Wed Oct 14 2015 tuxmaster 1.2.2-2
- Use the better pkconfig for build requires.
- Add translations.
- Switch to libgcrypt from openssl.
* Wed Oct 07 2015 mjentsch 1.2.2-1
- update version to 1.2.2

View file

@ -1,2 +1,2 @@
telegram-adium.xcodeproj/project.xcworkspace/xcuserdata/
telegram-adium.xcodeproj/xcuserdata/matj.xcuserdatad/xcdebugger/
/telegram-adium.xcodeproj/project.xcworkspace/xcuserdata/
/telegram-adium.xcodeproj/xcuserdata/

View file

@ -17,10 +17,13 @@
*/
#import "TelegramAccount.h"
#import <libpurple/conversation.h>
#import "tgp-ft.h"
#import <Adium/ESFileTransfer.h>
#import <Adium/AIListContact.h>
#import "tgp-ft.h"
#import <Adium/AIMenuControllerProtocol.h>
#import <Adium/AIHTMLDecoder.h>
#import <AIUtilities/AIMenuAdditions.h>
#include "telegram-purple.h"
@ -46,6 +49,27 @@
return 443;
}
- (void)didConnect
{
[super didConnect];
[self purpleAccount];
// FIXME: Crashed after going online
// Storing chats in the blist breaks Adium bookmarks. Adium doesn't
// show those chats anyway, so we can just safely delete those.
PurpleBlistNode *node = purple_blist_get_root();
while (node) {
if (PURPLE_BLIST_NODE_IS_CHAT(node)) {
PurpleChat *ch = PURPLE_CHAT(node);
if (purple_chat_get_account(ch) == account) {
NSLog (@"Removing chat from blist: %s", ch->alias);
purple_blist_remove_chat (ch);
}
}
node = purple_blist_node_next (node, 0);
}
}
- (void)configurePurpleAccount
{
@ -70,12 +94,7 @@
[[self preferenceForKey:@"Telegram:"TGP_KEY_SEND_READ_NOTIFICATIONS
group:GROUP_ACCOUNT_STATUS]
boolValue]);
purple_account_set_bool (account, TGP_KEY_HISTORY_SYNC_ALL,
[[self preferenceForKey:@"Telegram:"TGP_KEY_HISTORY_SYNC_ALL
group:GROUP_ACCOUNT_STATUS]
boolValue]);
purple_account_set_int (account, TGP_KEY_HISTORY_RETRIEVAL_THRESHOLD,
[[self preferenceForKey:@"Telegram:"TGP_KEY_HISTORY_RETRIEVAL_THRESHOLD
group:GROUP_ACCOUNT_STATUS]
@ -87,6 +106,58 @@
intValue]);
}
#pragma mark Action Menu
-(NSMenu*)actionMenuForChat:(AIChat*)chat
{
NSArray *listObjects = nil;
AIListObject *listObject = nil;
if (listObjects.count) {
listObject = [listObjects objectAtIndex:0];
}
NSMenu *menu = [adium.menuController
contextualMenuWithLocations: [NSArray arrayWithObjects:
[NSNumber numberWithInteger: Context_GroupChat_Manage],
[NSNumber numberWithInteger: Context_Group_Manage],
[NSNumber numberWithInteger: Context_GroupChat_Action],
nil] forChat: chat];
[menu addItem:[NSMenuItem separatorItem]];
[menu addItemWithTitle:@"Invite users by link..."
target:self
action:@selector(addUserByLink)
keyEquivalent:@""
tag:0];
[menu addItemWithTitle:@"Delete and exit..."
target:self
action:@selector(deleteAndExit)
keyEquivalent:@""
tag:0];
return menu;
}
- (void)addUserByLink
{
connection_data *conn = purple_connection_get_protocol_data (purple_account_get_connection(account));
AIChat *chat = adium.interfaceController.activeChat;
if (chat) {
export_chat_link_by_name (conn->TLS, [chat.name UTF8String]);
}
}
- (void)deleteAndExit
{
connection_data *conn = purple_connection_get_protocol_data (purple_account_get_connection(account));
AIChat *chat = adium.interfaceController.activeChat;
if (chat) {
leave_and_delete_chat_by_name (conn->TLS, [chat.name UTF8String]);
}
}
#pragma mark File transfer
- (BOOL)canSendOfflineMessageToContact:(AIListContact *)inContact
{
return YES;
@ -112,4 +183,42 @@
[super cancelFileTransfer:fileTransfer];
}
- (NSString *)encodedAttributedString:(NSAttributedString *)inAttributedString forListObject:(AIListObject *)inListObject
{
static AIHTMLDecoder *htmlEncoder = nil;
if (!htmlEncoder) {
htmlEncoder = [[AIHTMLDecoder alloc] init];
[htmlEncoder setIncludesHeaders:NO];
[htmlEncoder setIncludesFontTags:NO];
[htmlEncoder setClosesFontTags:YES];
[htmlEncoder setIncludesStyleTags:NO];
[htmlEncoder setIncludesColorTags:NO];
[htmlEncoder setEncodesNonASCII:NO];
[htmlEncoder setPreservesAllSpaces:NO];
[htmlEncoder setUsesAttachmentTextEquivalents:YES];
}
return [htmlEncoder encodeHTML:inAttributedString imagesPath:nil];
}
#pragma mark Group Chats
/*!
* @brief Re-create the chat's join options.
*/
- (NSDictionary *)extractChatCreationDictionaryFromConversation:(PurpleConversation *)conv
{
connection_data *conn = purple_connection_get_protocol_data (purple_conversation_get_gc (conv));
const char *name = purple_conversation_get_name (conv);
tgl_peer_t *P = tgp_blist_lookup_peer_get (conn->TLS, purple_conversation_get_title (conv));
if (P) {
return [NSMutableDictionary dictionaryWithObjectsAndKeys:
[NSString stringWithFormat:@"%d", tgl_get_peer_id(P->id)], @"id",
[NSString stringWithUTF8String: name], @"subject",
nil];
}
return nil;
}
@end

View file

@ -1,14 +1,13 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="7706" systemVersion="14D136" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct">
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="9531" systemVersion="15C50" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct">
<dependencies>
<deployment identifier="macosx"/>
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="7706"/>
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="9531"/>
</dependencies>
<objects>
<customObject id="-2" userLabel="File's Owner" customClass="TelegramAccountViewController">
<connections>
<outlet property="checkbox_displayReadNotifications" destination="Tat-1e-jqI" id="1m9-1n-bKm"/>
<outlet property="checkbox_historySyncAll" destination="Qob-Rq-UJj" id="1dM-ig-DQa"/>
<outlet property="checkbox_sendReadNotifications" destination="4Xx-hY-Mzh" id="OMa-pG-ePd"/>
<outlet property="radio_Encryption" destination="RGC-Jo-M5e" id="gMv-Gj-Dyg"/>
<outlet property="textField_accountUID" destination="Mv3-b8-21b" id="Cxi-GZ-5oi"/>
@ -23,7 +22,7 @@
<customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/>
<customObject id="-3" userLabel="Application" customClass="NSObject"/>
<customView id="c22-O7-iKe" userLabel="Setup">
<rect key="frame" x="0.0" y="5" width="321" height="150"/>
<rect key="frame" x="0.0" y="0.0" width="321" height="150"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<subviews>
<textField verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="Mv3-b8-21b">
@ -81,11 +80,11 @@
<point key="canvasLocation" x="380.5" y="38"/>
</customView>
<customView id="DGa-mQ-g3C" userLabel="Options">
<rect key="frame" x="0.0" y="6" width="272" height="248"/>
<rect key="frame" x="0.0" y="0.0" width="272" height="206"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<subviews>
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="zRH-KJ-uvC" userLabel="Accept Secret Chats">
<rect key="frame" x="6" y="60" width="168" height="17"/>
<rect key="frame" x="6" y="52" width="168" height="17"/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="left" title="Ignore history older than" id="MSN-Hj-aRS">
<font key="font" metaFont="system"/>
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
@ -93,7 +92,7 @@
</textFieldCell>
</textField>
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="C4T-Hq-g5C" userLabel="Accept Secret Chats">
<rect key="frame" x="6" y="42" width="138" height="17"/>
<rect key="frame" x="6" y="0.0" width="138" height="17"/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="left" id="ARj-qB-Q5Z">
<font key="font" metaFont="system"/>
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
@ -101,7 +100,7 @@
</textFieldCell>
</textField>
<textField verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="gKj-Oj-qll">
<rect key="frame" x="176" y="55" width="49" height="22"/>
<rect key="frame" x="176" y="47" width="49" height="22"/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" state="on" borderStyle="bezel" drawsBackground="YES" id="lVr-43-iAS">
<numberFormatter key="formatter" formatterBehavior="default10_4" numberStyle="decimal" minimumIntegerDigits="1" maximumIntegerDigits="2000000000" maximumFractionDigits="3" id="tH1-pY-m7Q"/>
<font key="font" metaFont="system"/>
@ -110,9 +109,9 @@
</textFieldCell>
</textField>
<matrix verticalHuggingPriority="750" fixedFrame="YES" allowsEmptySelection="NO" autorecalculatesCellSize="YES" translatesAutoresizingMaskIntoConstraints="NO" id="RGC-Jo-M5e">
<rect key="frame" x="176" y="177" width="76" height="58"/>
<rect key="frame" x="176" y="135" width="76" height="58"/>
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
<size key="cellSize" width="66" height="18"/>
<size key="cellSize" width="65" height="18"/>
<size key="intercellSpacing" width="4" height="2"/>
<buttonCell key="prototype" type="radio" title="Radio" imagePosition="left" alignment="left" inset="2" id="XXf-7E-yhf">
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
@ -135,16 +134,16 @@
</column>
</cells>
</matrix>
<textField verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="sb8-oa-s84">
<rect key="frame" x="231" y="60" width="126" height="14"/>
<textField verticalHuggingPriority="750" fixedFrame="YES" preferredMaxLayoutWidth="122" translatesAutoresizingMaskIntoConstraints="NO" id="sb8-oa-s84">
<rect key="frame" x="231" y="52" width="126" height="14"/>
<textFieldCell key="cell" sendsActionOnEndEditing="YES" alignment="left" title="Days" id="cOl-DG-CvA">
<font key="font" metaFont="smallSystem"/>
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
<textField verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="EEO-n2-kS3">
<rect key="frame" x="6" y="45" width="126" height="14"/>
<textField verticalHuggingPriority="750" fixedFrame="YES" preferredMaxLayoutWidth="122" translatesAutoresizingMaskIntoConstraints="NO" id="EEO-n2-kS3">
<rect key="frame" x="6" y="37" width="126" height="14"/>
<textFieldCell key="cell" sendsActionOnEndEditing="YES" alignment="left" title="(0 days for unlimited)" id="TQS-UR-EnH">
<font key="font" metaFont="smallSystem"/>
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
@ -152,21 +151,14 @@
</textFieldCell>
</textField>
<button fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="4Xx-hY-Mzh">
<rect key="frame" x="6" y="117" width="251" height="24"/>
<rect key="frame" x="6" y="75" width="251" height="24"/>
<buttonCell key="cell" type="check" title="Send read notifications when present" bezelStyle="regularSquare" imagePosition="left" scrollable="YES" lineBreakMode="clipping" state="on" inset="2" id="vdV-Ig-yub">
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
<font key="font" metaFont="system"/>
</buttonCell>
</button>
<button fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="Qob-Rq-UJj">
<rect key="frame" x="6" y="90" width="213" height="18"/>
<buttonCell key="cell" type="check" title="Fetch past history on first login" bezelStyle="regularSquare" imagePosition="left" state="on" inset="2" id="uu6-Td-pzN">
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
<font key="font" metaFont="system"/>
</buttonCell>
</button>
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="4Mf-Qx-mrn" userLabel="Accept Secret Chats">
<rect key="frame" x="6" y="218" width="135" height="17"/>
<rect key="frame" x="6" y="176" width="135" height="17"/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" userInterfaceLayoutDirection="rightToLeft" alignment="left" title="Accept secret chats?" id="t4Q-j1-35n">
<font key="font" metaFont="system"/>
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
@ -174,7 +166,7 @@
</textFieldCell>
</textField>
<textField verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="Nvv-1I-L31">
<rect key="frame" x="176" y="20" width="49" height="22"/>
<rect key="frame" x="176" y="12" width="49" height="22"/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" state="on" borderStyle="bezel" drawsBackground="YES" id="Pm0-Jw-ayL">
<numberFormatter key="formatter" formatterBehavior="default10_4" numberStyle="decimal" minimumIntegerDigits="1" maximumIntegerDigits="2000000000" maximumFractionDigits="3" id="L9W-52-Xg9"/>
<font key="font" metaFont="system"/>
@ -183,15 +175,15 @@
</textFieldCell>
</textField>
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="m95-No-oJH" userLabel="Accept Secret Chats">
<rect key="frame" x="6" y="25" width="168" height="17"/>
<rect key="frame" x="6" y="17" width="168" height="17"/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" userInterfaceLayoutDirection="rightToLeft" alignment="left" title="Display users offline after" id="zJx-0I-fdw">
<font key="font" metaFont="system"/>
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
<textField verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="TaV-3x-dxE">
<rect key="frame" x="231" y="25" width="126" height="14"/>
<textField verticalHuggingPriority="750" fixedFrame="YES" preferredMaxLayoutWidth="122" translatesAutoresizingMaskIntoConstraints="NO" id="TaV-3x-dxE">
<rect key="frame" x="231" y="17" width="126" height="14"/>
<textFieldCell key="cell" sendsActionOnEndEditing="YES" alignment="left" title="Days" id="Aav-dA-OrQ">
<font key="font" metaFont="smallSystem"/>
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
@ -199,14 +191,14 @@
</textFieldCell>
</textField>
<button fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="Tat-1e-jqI">
<rect key="frame" x="6" y="147" width="178" height="24"/>
<rect key="frame" x="6" y="105" width="178" height="24"/>
<buttonCell key="cell" type="check" title="Display read notifications" bezelStyle="regularSquare" imagePosition="left" scrollable="YES" lineBreakMode="clipping" state="on" inset="2" id="l1g-r5-pNb">
<behavior key="behavior" changeContents="YES" doesNotDimImage="YES" lightByContents="YES"/>
<font key="font" metaFont="system"/>
</buttonCell>
</button>
</subviews>
<point key="canvasLocation" x="356" y="323"/>
<point key="canvasLocation" x="356" y="302"/>
</customView>
<userDefaultsController representsSharedInstance="YES" id="OjL-yD-9te"/>
</objects>

View file

@ -19,11 +19,6 @@
#import "TelegramAccountViewController.h"
#import "TelegramAccount.h"
#import <Adium/AIService.h>
#import <AIUtilities/AIStringFormatter.h>
#import <AIUtilities/AIAttributedStringAdditions.h>
#import <AIUtilities/AIPopUpButtonAdditions.h>DISPLAY
#include "telegram-purple.h"
@implementation TelegramAccountViewController
@ -49,12 +44,9 @@
[radio_Encryption selectCellAtRow:row column:0];
NSString *passwordTwoFactor = [account preferenceForKey:@"Telegram:"TGP_KEY_PASSWORD_TWO_FACTOR
group:GROUP_ACCOUNT_STATUS] ?: nil;
group:GROUP_ACCOUNT_STATUS] ?: @"";
[textField_password setStringValue:passwordTwoFactor];
id s = [account preferenceForKey:@"Telegram:"TGP_KEY_HISTORY_SYNC_ALL group:GROUP_ACCOUNT_STATUS];
[checkbox_historySyncAll setState:[s boolValue]];
id read = [account preferenceForKey:@"Telegram:"TGP_KEY_DISPLAY_READ_NOTIFICATIONS group:GROUP_ACCOUNT_STATUS];
[checkbox_displayReadNotifications setState:[read boolValue]];
@ -86,10 +78,6 @@
forKey:@"Telegram:"TGP_KEY_ACCEPT_SECRET_CHATS
group:GROUP_ACCOUNT_STATUS];
[account setPreference:[NSNumber numberWithBool:[checkbox_historySyncAll state]]
forKey:@"Telegram:"TGP_KEY_HISTORY_SYNC_ALL
group:GROUP_ACCOUNT_STATUS];
[account setPreference:[NSNumber numberWithBool:[checkbox_displayReadNotifications state]]
forKey:@"Telegram:"TGP_KEY_DISPLAY_READ_NOTIFICATIONS
group:GROUP_ACCOUNT_STATUS];

View file

@ -0,0 +1,28 @@
/**
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA
*
* Copyright Matthias Jentsch 2014-2015
*/
#import <Foundation/Foundation.h>
#include <tgl.h>
@interface TelegramAutocompletionDelegate : NSObject<NSTokenFieldDelegate> {
@private
struct tgl_state *TLS;
}
- (void)setTLS:(struct tgl_state *)TLS;
@end

View file

@ -0,0 +1,60 @@
/**
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA
*
* Copyright Matthias Jentsch 2014-2015
*/
#import "TelegramAutocompletionDelegate.h"
@implementation TelegramAutocompletionDelegate
- (NSArray *)tokenField:(NSTokenField *)tokenField
completionsForSubstring:(NSString *)substring
indexOfToken:(NSInteger)tokenIndex
indexOfSelectedItem:(NSInteger *)selectedIndex
{
NSMutableArray *matchingUsers = [NSMutableArray new];
const char *startsWith = [substring UTF8String];
if (TLS) {
int i = 0;
while (i != -1) {
char *R = NULL;
i = tgl_complete_user_list (TLS, i, startsWith, (int) strlen(startsWith), &R);
if (R) {
[matchingUsers addObject: [[NSString alloc] initWithUTF8String:R]];
}
}
}
return matchingUsers;
}
- (id)tokenField:(NSTokenField *)tokenField
representedObjectForEditingString:(NSString *)editingString
{
return nil;
}
- (NSString *)tokenField:(NSTokenField *)tokenField
displayStringForRepresentedObject:(id)representedObject
{
return nil;
}
- (void)setTLS:(struct tgl_state *)_TLS
{
TLS = _TLS;
}
@end

View file

@ -1,24 +1,28 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="6751" systemVersion="14C1514" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct">
<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="9060" systemVersion="15C50" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct">
<dependencies>
<deployment identifier="macosx"/>
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="6751"/>
<plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="9060"/>
</dependencies>
<objects>
<customObject id="-2" userLabel="File's Owner" customClass="TelegramJoinChatViewController">
<connections>
<outlet property="popupButton_existingChat" destination="vmH-Cu-psq" id="15U-eW-T0i"/>
<outlet property="textField_createChatName" destination="k91-zE-a20" id="AGg-hH-XJg"/>
<outlet property="textField_joinByLink" destination="Es2-Po-Hhy" id="zR1-oE-U47"/>
<outlet property="tokenField_createChatUsers" destination="ePS-oV-elo" id="gC2-bj-Lfw"/>
<outlet property="view" destination="c22-O7-iKe" id="4pN-H1-fp0"/>
</connections>
</customObject>
<customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/>
<customObject id="-3" userLabel="Application" customClass="NSObject"/>
<customView id="c22-O7-iKe">
<rect key="frame" x="0.0" y="0.0" width="267" height="46"/>
<rect key="frame" x="0.0" y="0.0" width="267" height="283"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
<subviews>
<popUpButton verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="vmH-Cu-psq">
<rect key="frame" x="92" y="10" width="158" height="26"/>
<rect key="frame" x="77" y="234" width="193" height="26"/>
<animations/>
<popUpButtonCell key="cell" type="push" bezelStyle="rounded" alignment="left" lineBreakMode="truncatingTail" borderStyle="borderAndBezel" imageScaling="proportionallyDown" inset="2" id="BgB-2f-ODq">
<behavior key="behavior" lightByBackground="YES" lightByGray="YES"/>
<font key="font" metaFont="menu"/>
@ -26,15 +30,102 @@
</popUpButtonCell>
</popUpButton>
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="qUU-2Z-89E">
<rect key="frame" x="-2" y="13" width="90" height="22"/>
<rect key="frame" x="-17" y="236" width="90" height="22"/>
<animations/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="right" title="Chats:" id="Muj-XM-wKR">
<font key="font" metaFont="system"/>
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="xKr-Pk-3H9">
<rect key="frame" x="-17" y="181" width="90" height="22"/>
<animations/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="right" title="URL:" id="xk2-6u-fhc">
<font key="font" metaFont="system"/>
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="5Y6-yq-7ij">
<rect key="frame" x="3" y="266" width="156" height="17"/>
<animations/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Existing Chat" id="p5e-BJ-qkk">
<font key="font" metaFont="systemBold"/>
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="EvQ-LK-kqY">
<rect key="frame" x="3" y="211" width="156" height="17"/>
<animations/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="Invite Link" id="Yqm-PU-A0k">
<font key="font" metaFont="systemBold"/>
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="S6h-IH-jYG">
<rect key="frame" x="3" y="156" width="156" height="17"/>
<animations/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="New Chat" id="My5-HH-wQ1">
<font key="font" metaFont="systemBold"/>
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
<textField verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="Es2-Po-Hhy">
<rect key="frame" x="79" y="181" width="188" height="22"/>
<animations/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" state="on" borderStyle="bezel" drawsBackground="YES" id="LNp-ss-QGh">
<font key="font" metaFont="system"/>
<color key="textColor" name="textColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="1cY-r0-Vto">
<rect key="frame" x="-17" y="96" width="90" height="22"/>
<animations/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="right" title="Users:" id="VJ5-Dw-l4u">
<font key="font" metaFont="system"/>
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
<textField horizontalHuggingPriority="251" verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="Wlx-74-lZm">
<rect key="frame" x="-17" y="126" width="90" height="22"/>
<animations/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" alignment="right" title="Name:" id="H32-jj-MND">
<font key="font" metaFont="system"/>
<color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
<textField verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="k91-zE-a20">
<rect key="frame" x="79" y="126" width="188" height="22"/>
<animations/>
<textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" selectable="YES" editable="YES" sendsActionOnEndEditing="YES" state="on" borderStyle="bezel" drawsBackground="YES" id="oC9-uP-Ndd">
<font key="font" metaFont="system"/>
<color key="textColor" name="textColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
</textFieldCell>
</textField>
<tokenField verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="ePS-oV-elo">
<rect key="frame" x="79" y="0.0" width="188" height="118"/>
<animations/>
<tokenFieldCell key="cell" selectable="YES" editable="YES" borderStyle="bezel" alignment="left" drawsBackground="YES" allowsEditingTextAttributes="YES" id="JI7-av-DMv">
<font key="font" metaFont="system"/>
<color key="textColor" name="controlTextColor" catalog="System" colorSpace="catalog"/>
<color key="backgroundColor" name="textBackgroundColor" catalog="System" colorSpace="catalog"/>
</tokenFieldCell>
<connections>
<outlet property="delegate" destination="PIL-cf-p9L" id="NwD-Tz-gJR"/>
</connections>
</tokenField>
</subviews>
<point key="canvasLocation" x="279.5" y="442"/>
<animations/>
<point key="canvasLocation" x="-111.5" y="-128.5"/>
</customView>
<customObject id="PIL-cf-p9L" customClass="TelegramAutocompletionDelegate"/>
</objects>
</document>

View file

@ -20,8 +20,11 @@
@class AIAccount, AICompletingTextField;
@interface TelegramJoinChatViewController : DCJoinChatViewController {
@interface TelegramJoinChatViewController : DCJoinChatViewController <NSTokenFieldDelegate> {
IBOutlet NSPopUpButton *popupButton_existingChat;
IBOutlet NSTextField *textField_joinByLink;
IBOutlet NSTextField *textField_createChatName;
IBOutlet NSTokenField *tokenField_createChatUsers;
}
@end

View file

@ -16,16 +16,13 @@
* Copyright Matthias Jentsch 2014-2015
*/
#include <tgl.h>
#include "TelegramJoinChatViewController.h"
#include "telegram-purple.h"
#include "tgp-structs.h"
#include "tgp-chat.h"
#include "TelegramJoinChatViewController.h"
#include "TelegramAutocompletionDelegate.h"
#import <Adium/AIContactControllerProtocol.h>
#import <AIUtilities/AICompletingTextField.h>
#import <Adium/AIListContact.h>
#import <Adium/AIWindowController.h>
#import <AdiumLibpurple/CBPurpleAccount.h>
@interface NSObject (JointChatViewDelegate)
@ -34,10 +31,19 @@
@implementation TelegramJoinChatViewController
static void tgl_peer_iterator_cb (tgl_peer_t *peer, void *extra) {
static void tgl_chat_iterator_cb (tgl_peer_t *peer, void *extra) {
NSMutableArray *A = (__bridge NSMutableArray *)(extra);
if (tgl_get_peer_type (peer->id) == TGL_PEER_CHAT) {
[A addObject: [NSValue valueWithPointer: peer]];
if (tgl_get_peer_type (peer->id) == TGL_PEER_CHAT && !(peer->chat.flags & TGLCF_LEFT)) {
[A addObject: [NSString stringWithUTF8String: peer->print_name]];
}
}
static void tgl_channel_iterator_cb (tgl_peer_t *peer, void *extra) {
NSMutableArray *A = (__bridge NSMutableArray *)(extra);
if (tgl_get_peer_type (peer->id) == TGL_PEER_CHANNEL && !(peer->channel.flags & TGLCHF_LEFT)) {
[A addObject: [NSString stringWithUTF8String: peer->print_name]];
}
}
@ -50,49 +56,64 @@ static void tgl_peer_iterator_cb (tgl_peer_t *peer, void *extra) {
if (gc && PURPLE_CONNECTION_IS_CONNECTED(gc)) {
connection_data *conn = purple_connection_get_protocol_data (gc);
// fetch all active chats and put them into the select box
[popupButton_existingChat removeAllItems];
NSMutableArray *a = [NSMutableArray new];
tgl_peer_iterator_ex (conn->TLS, tgl_peer_iterator_cb, (__bridge void *)(a));
NSMutableArray *chats = [NSMutableArray new];
NSMutableArray *leftChats = [NSMutableArray new];
for (NSValue *V in a) {
tgl_peer_t *P = [V pointerValue];
NSString *name = [[NSString alloc] initWithUTF8String:P->print_name];
if (chat_is_member (conn->TLS->our_id, &P->chat)) {
[chats addObject: name];
}
else {
[leftChats addObject: name];
}
tgl_peer_iterator_ex (conn->TLS, tgl_chat_iterator_cb, (__bridge void *)(chats));
tgl_peer_iterator_ex (conn->TLS, tgl_channel_iterator_cb, (__bridge void *)(chats));
[popupButton_existingChat
addItemsWithTitles: [chats sortedArrayUsingSelector:@selector(localizedCaseInsensitiveCompare:)]];
// provide the current TLS instance for access by the autocompletion
TelegramAutocompletionDelegate *D = [tokenField_createChatUsers delegate];
if (D != nil) {
[D setTLS:conn->TLS];
}
NSArray *sortedChats = [chats sortedArrayUsingComparator:^NSComparisonResult(id a, id b) {
return [(NSString*)a
compare:b
options:NSDiacriticInsensitiveSearch | NSCaseInsensitiveSearch];
}];
[popupButton_existingChat addItemsWithTitles: sortedChats];
// TODO: Display left chats with a grey font to indicate that those are no
// longer, but still allow the user to view the history
// [popupButton_existingChat addItemsWithTitles: leftChats];
}
}
- (void)joinChatWithAccount:(AIAccount *)inAccount
{
NSString *room = [[popupButton_existingChat selectedItem] title];
NSDictionary *chatCreationInfo = [NSDictionary
dictionaryWithObjectsAndKeys:room, @"subject", nil];
[self doJoinChatWithName:room
onAccount:inAccount
chatCreationInfo:chatCreationInfo
invitingContacts:@[]
withInvitationMessage:@""];
PurpleAccount *pa = [(CBPurpleAccount *)inAccount purpleAccount];
PurpleConnection *gc = purple_account_get_connection(pa);
if (gc && PURPLE_CONNECTION_IS_CONNECTED(gc)) {
connection_data *conn = purple_connection_get_protocol_data (gc);
// Join by link
NSString *link = [textField_joinByLink stringValue];
if ([link length]) {
import_chat_link (conn->TLS, [link UTF8String]);
return;
}
// Create a new chat with provided participants
NSString *createChatName = [textField_createChatName stringValue];
NSArray *tokens = [tokenField_createChatUsers objectValue];
if ([createChatName length] && [tokens count]) {
int i, cnt = (int)[tokens count];
const char **users = g_malloc(cnt * sizeof(char*));
for (i = 0; i < cnt; i++) {
users[i] = [tokens[i] UTF8String];
}
tgp_create_group_chat_by_usernames (conn->TLS, [createChatName UTF8String], users, i, TRUE);
g_free (users);
return;
}
// Pass the joining to the prpl
const char *name = [[[popupButton_existingChat selectedItem] title] UTF8String];
PurpleChat *purpleChat = purple_blist_find_chat (conn->pa, name);
if (purpleChat) {
serv_join_chat (conn->gc, purple_chat_get_components (purpleChat));
} else {
GHashTable *chatCreationInfo = g_hash_table_new_full (g_str_hash, g_str_equal, NULL, g_free);
g_hash_table_insert (chatCreationInfo, "subject", g_strdup (name));
serv_join_chat (conn->gc, chatCreationInfo);
g_hash_table_destroy (chatCreationInfo);
}
}
}
- (NSString *)nibName
@ -100,5 +121,4 @@ static void tgl_peer_iterator_cb (tgl_peer_t *peer, void *extra) {
return @"TelegramJoinChatView";
}
@end

View file

@ -20,10 +20,11 @@
# include "config.h"
#endif
#include "../commit.h"
#import "TelegramPlugin.h"
#import "TelegramService.h"
#import "telegram-purple.h"
#import <tgl.h>
extern void purple_init_telegram_plugin();
@ -31,9 +32,9 @@ extern void purple_init_telegram_plugin();
- (void) installPlugin
{
pk_path = [self getPkName];
purple_init_telegram_plugin();
[TelegramService registerService];
pk_path = [self getPkName];
purple_init_telegram_plugin();
[TelegramService registerService];
}
- (void) installLibpurplePlugin
@ -50,22 +51,22 @@ extern void purple_init_telegram_plugin();
- (NSString *)pluginAuthor
{
return @TG_AUTHOR;
return @PLUGIN_AUTHOR;
}
-(NSString *)pluginVersion
{
return @PACKAGE_VERSION;
return @PACKAGE_VERSION "\n\t\t\tcommit: " GIT_COMMIT "\n\t\t\tlibtgl: " TGL_VERSION;
}
-(NSString *)pluginDescription
{
return @TG_DESCRIPTION;
return @"Telegram Protocol Plugin";
}
-(char*)getPkName
{
const char* utf8String = (char *)[[[NSBundle bundleForClass: [self class]] pathForResource: @"tg-server" ofType: @"pub"] UTF8String];
const char* utf8String = (char *)[[[NSBundle bundleForClass: [self class]] pathForResource: @"tg-server" ofType: @"tglpub"] UTF8String];
size_t len = strlen(utf8String) + 1;
char *buf = malloc(len);
memcpy(buf, utf8String, len);

View file

@ -93,25 +93,28 @@
return NO;
}
- (AIServiceImportance)serviceImportance{
return AIServiceSecondary;
- (AIServiceImportance)serviceImportance
{
return AIServiceSecondary;
}
- (NSCharacterSet *)allowedCharacters{
return [[NSCharacterSet illegalCharacterSet] invertedSet];
}
- (NSCharacterSet *)allowedCharactersForAccountName
{
return ([NSCharacterSet characterSetWithCharactersInString: @"+1234567890"]);
return ([NSCharacterSet characterSetWithCharactersInString: @"+1234567890"]);
}
- (NSUInteger)allowedLengthForAccountName
{
return 16;
return 16;
}
- (BOOL)caseSensitive{
return NO;
- (BOOL)caseSensitive
{
return YES;
}
- (NSImage *)defaultServiceIconOfType:(AIServiceIconType)iconType
@ -131,7 +134,8 @@
return [[NSBundle bundleForClass:[self class]] pathForImageResource:@"telegram"];
}
- (void)registerStatuses {
- (void)registerStatuses
{
#define ADDSTATUS(name, type) \
[adium.statusController registerStatus:name \
withDescription:[adium.statusController localizedDescriptionForCoreStatusName:name] \
@ -144,4 +148,10 @@ ofType:type forService:self]
ADDSTATUS(STATUS_NAME_OFFLINE, AIOfflineStatusType);
}
- (NSString *)normalizeChatName:(NSString *)inChatName
{
// prevent Adium from normalizing chat names, which would break searching chats by user names
return inChatName;
}
@end

View file

@ -7,9 +7,9 @@
objects = {
/* Begin PBXBuildFile section */
33070C10341336CD4EC97534 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 33070D636377BD8BA47CBF63 /* InfoPlist.strings */; };
C40564871A7937C600A293B9 /* AdiumLibpurple.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C40564861A7937C600A293B9 /* AdiumLibpurple.framework */; };
C410948A19BB2D7D0083BF3F /* CoreFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C410948919BB2D7D0083BF3F /* CoreFoundation.framework */; };
C410949019BB2D7D0083BF3F /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = C410948E19BB2D7D0083BF3F /* InfoPlist.strings */; };
C410949B19BB337A0083BF3F /* TelegramPlugin.m in Sources */ = {isa = PBXBuildFile; fileRef = C410949A19BB337A0083BF3F /* TelegramPlugin.m */; };
C41D58411A16D88E00B22448 /* tgp-2prpl.c in Sources */ = {isa = PBXBuildFile; fileRef = C41D58401A16D88E00B22448 /* tgp-2prpl.c */; };
C425F9181A7069C300361AFC /* tgp-utils.c in Sources */ = {isa = PBXBuildFile; fileRef = C425F9161A7069C300361AFC /* tgp-utils.c */; };
@ -23,12 +23,13 @@
C438CE341A12C07800E1DA0F /* telegram-purple.c in Sources */ = {isa = PBXBuildFile; fileRef = C438CE2F1A12C07800E1DA0F /* telegram-purple.c */; };
C438CE351A12C07800E1DA0F /* tgp-net.c in Sources */ = {isa = PBXBuildFile; fileRef = C438CE301A12C07800E1DA0F /* tgp-net.c */; };
C438CE361A12C07800E1DA0F /* tgp-timers.c in Sources */ = {isa = PBXBuildFile; fileRef = C438CE311A12C07800E1DA0F /* tgp-timers.c */; };
C438CE3D1A12C15100E1DA0F /* tg-server.pub in Resources */ = {isa = PBXBuildFile; fileRef = C438CE3C1A12C15100E1DA0F /* tg-server.pub */; };
C448ADA71AB0789A001B7ECD /* tgp-msg.c in Sources */ = {isa = PBXBuildFile; fileRef = C448ADA61AB0789A001B7ECD /* tgp-msg.c */; };
C465FC211C0D0191001CCEE8 /* libgcrypt.20.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = C465FC1B1C0CF43A001CCEE8 /* libgcrypt.20.dylib */; };
C465FC231C0D01B5001CCEE8 /* libgcrypt.20.dylib in Resources */ = {isa = PBXBuildFile; fileRef = C465FC221C0D01B5001CCEE8 /* libgcrypt.20.dylib */; };
C466937819E703370036A108 /* AppKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C466937719E703370036A108 /* AppKit.framework */; };
C479A8021BB69C2100C153DF /* tgp-request.c in Sources */ = {isa = PBXBuildFile; fileRef = C479A8001BB69C2100C153DF /* tgp-request.c */; };
C4877C1819BB37EA006FA91F /* TelegramService.m in Sources */ = {isa = PBXBuildFile; fileRef = C4877C1719BB37EA006FA91F /* TelegramService.m */; };
C4877C1E19BB676B006FA91F /* TelegramAccount.m in Sources */ = {isa = PBXBuildFile; fileRef = C4877C1D19BB676B006FA91F /* TelegramAccount.m */; };
C487A17B1A792CF00044F135 /* libcrypto.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = C487A17A1A792CF00044F135 /* libcrypto.dylib */; };
C487A18C1A792E9B0044F135 /* Adium.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C487A1891A792E9B0044F135 /* Adium.framework */; };
C487A18E1A792E9B0044F135 /* AIUtilities.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C487A18B1A792E9B0044F135 /* AIUtilities.framework */; };
C487A1911A792EA50044F135 /* libglib.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C487A18F1A792EA50044F135 /* libglib.framework */; };
@ -40,29 +41,25 @@
C4B4BE371AB5FB5C0064AC17 /* TelegramJoinChatViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = C4B4BE351AB5FB5C0064AC17 /* TelegramJoinChatViewController.m */; };
C4B4BE391AB613950064AC17 /* TelegramJoinChatView.xib in Resources */ = {isa = PBXBuildFile; fileRef = C4B4BE381AB613950064AC17 /* TelegramJoinChatView.xib */; };
C4B57BF01B1598D4006997F4 /* libtgl.a in Frameworks */ = {isa = PBXBuildFile; fileRef = C4B57BEF1B1598D4006997F4 /* libtgl.a */; };
C4D819031A5C85FE0044CBA9 /* lodepng.c in Sources */ = {isa = PBXBuildFile; fileRef = C4D819011A5C85FE0044CBA9 /* lodepng.c */; };
C4D12DF01BC534CF00C0F6E1 /* tgp-blist.c in Sources */ = {isa = PBXBuildFile; fileRef = C4D12DEF1BC534CF00C0F6E1 /* tgp-blist.c */; };
C4D3EB5A1C3824C5003C895B /* tgp-info.c in Sources */ = {isa = PBXBuildFile; fileRef = C4D3EB581C3824C5003C895B /* tgp-info.c */; };
C4D432D81BC2783C00561667 /* tg-server.tglpub in Resources */ = {isa = PBXBuildFile; fileRef = C4D432D71BC2783C00561667 /* tg-server.tglpub */; };
C4D819061A5C862E0044CBA9 /* tgp-structs.c in Sources */ = {isa = PBXBuildFile; fileRef = C4D819041A5C862E0044CBA9 /* tgp-structs.c */; };
C4D9185B1C1C6B3900AECCA2 /* libgpg-error.0.dylib in Resources */ = {isa = PBXBuildFile; fileRef = C4D9185A1C1C6B3900AECCA2 /* libgpg-error.0.dylib */; };
C4D9185C1C1C6B9C00AECCA2 /* libgpg-error.0.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = C4D9185A1C1C6B3900AECCA2 /* libgpg-error.0.dylib */; };
C4E528111A8A907200C4B915 /* tgp-ft.c in Sources */ = {isa = PBXBuildFile; fileRef = C4E5280F1A8A907200C4B915 /* tgp-ft.c */; };
C4EA965A1B204C67006CBAD0 /* libwebp.a in Frameworks */ = {isa = PBXBuildFile; fileRef = C4EA96591B204C67006CBAD0 /* libwebp.a */; };
C4FFD0DC1B5FC48B00939D8A /* TelegramAutocompletionDelegate.h in Sources */ = {isa = PBXBuildFile; fileRef = C4FFD0DB1B5FC48B00939D8A /* TelegramAutocompletionDelegate.h */; };
C4FFD0DE1B5FC68400939D8A /* TelegramAutocompletionDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = C4FFD0DD1B5FC68400939D8A /* TelegramAutocompletionDelegate.m */; };
/* End PBXBuildFile section */
/* Begin PBXContainerItemProxy section */
C4B57BF51B160EA6006997F4 /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = C410947E19BB2D7D0083BF3F /* Project object */;
proxyType = 1;
remoteGlobalIDString = C4B57BF11B160950006997F4;
remoteInfo = "telegram-purple";
};
/* End PBXContainerItemProxy section */
/* Begin PBXFileReference section */
33070918C1B3F67A227F6286 /* en */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = "<group>"; };
33070A9DBCF625AD9E07CE94 /* telegram-adium-Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.info; path = "telegram-adium-Info.plist"; sourceTree = "<group>"; };
33070CD59974365A33795EAF /* telegram-adium-Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "telegram-adium-Prefix.pch"; sourceTree = "<group>"; };
C40564861A7937C600A293B9 /* AdiumLibpurple.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AdiumLibpurple.framework; path = Frameworks/Adium/AdiumLibpurple.framework; sourceTree = "<group>"; };
C410948619BB2D7D0083BF3F /* telegram-adium.AdiumLibpurplePlugin */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "telegram-adium.AdiumLibpurplePlugin"; sourceTree = BUILT_PRODUCTS_DIR; };
C410948919BB2D7D0083BF3F /* CoreFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreFoundation.framework; path = System/Library/Frameworks/CoreFoundation.framework; sourceTree = SDKROOT; };
C410948D19BB2D7D0083BF3F /* telegram-adium-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "telegram-adium-Info.plist"; sourceTree = "<group>"; };
C410948F19BB2D7D0083BF3F /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = "<group>"; };
C410949119BB2D7D0083BF3F /* telegram-adium-Prefix.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "telegram-adium-Prefix.pch"; sourceTree = "<group>"; };
C410949919BB337A0083BF3F /* TelegramPlugin.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TelegramPlugin.h; sourceTree = "<group>"; };
C410949A19BB337A0083BF3F /* TelegramPlugin.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TelegramPlugin.m; sourceTree = "<group>"; };
C41D583F1A16D86A00B22448 /* tgp-2prpl.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "tgp-2prpl.h"; path = "../tgp-2prpl.h"; sourceTree = "<group>"; };
@ -89,19 +86,22 @@
C438CE3C1A12C15100E1DA0F /* tg-server.pub */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = "tg-server.pub"; path = "../tg-server.pub"; sourceTree = "<group>"; };
C448ADA61AB0789A001B7ECD /* tgp-msg.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = "tgp-msg.c"; path = "../tgp-msg.c"; sourceTree = "<group>"; };
C448ADA81AB078BB001B7ECD /* tgp-msg.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "tgp-msg.h"; path = "../tgp-msg.h"; sourceTree = "<group>"; };
C465FC1B1C0CF43A001CCEE8 /* libgcrypt.20.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libgcrypt.20.dylib; path = Frameworks/Adium/libgcrypt.20.dylib; sourceTree = "<group>"; };
C465FC221C0D01B5001CCEE8 /* libgcrypt.20.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libgcrypt.20.dylib; path = Frameworks/Adium/libgcrypt.20.dylib; sourceTree = "<group>"; };
C466937719E703370036A108 /* AppKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AppKit.framework; path = Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.8.sdk/System/Library/Frameworks/AppKit.framework; sourceTree = DEVELOPER_DIR; };
C479A7FE1BB1C95300C153DF /* libcrypto.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libcrypto.a; path = Frameworks/libcrypto.a; sourceTree = "<group>"; };
C479A8001BB69C2100C153DF /* tgp-request.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = "tgp-request.c"; path = "../tgp-request.c"; sourceTree = "<group>"; };
C479A8011BB69C2100C153DF /* tgp-request.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "tgp-request.h"; path = "../tgp-request.h"; sourceTree = "<group>"; };
C4877C1619BB37EA006FA91F /* TelegramService.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TelegramService.h; sourceTree = "<group>"; };
C4877C1719BB37EA006FA91F /* TelegramService.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TelegramService.m; sourceTree = "<group>"; };
C4877C1C19BB676B006FA91F /* TelegramAccount.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TelegramAccount.h; sourceTree = "<group>"; };
C4877C1D19BB676B006FA91F /* TelegramAccount.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TelegramAccount.m; sourceTree = "<group>"; };
C487A1781A792CD80044F135 /* libssl.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libssl.dylib; path = usr/lib/libssl.dylib; sourceTree = SDKROOT; };
C487A17A1A792CF00044F135 /* libcrypto.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libcrypto.dylib; path = usr/lib/libcrypto.dylib; sourceTree = SDKROOT; };
C487A1891A792E9B0044F135 /* Adium.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Adium.framework; path = Frameworks/Adium/Adium.framework; sourceTree = "<group>"; };
C487A18B1A792E9B0044F135 /* AIUtilities.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AIUtilities.framework; path = Frameworks/Adium/AIUtilities.framework; sourceTree = "<group>"; };
C487A18F1A792EA50044F135 /* libglib.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = libglib.framework; path = Frameworks/Adium/libglib.framework; sourceTree = "<group>"; };
C487A1901A792EA50044F135 /* libpurple.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = libpurple.framework; path = Frameworks/Adium/libpurple.framework; sourceTree = "<group>"; };
C49A915719BBC5C5001B3DC0 /* libz.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libz.dylib; path = usr/lib/libz.dylib; sourceTree = SDKROOT; };
C4A71A911B18DD9300AE2E2B /* Makefile.tgl */ = {isa = PBXFileReference; lastKnownFileType = text; name = Makefile.tgl; path = ../Makefile.tgl; sourceTree = "<group>"; };
C4B4BE2D1AB392F80064AC17 /* TelegramAccountView.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = TelegramAccountView.xib; sourceTree = "<group>"; };
C4B4BE2F1AB393800064AC17 /* TelegramAccountViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TelegramAccountViewController.m; sourceTree = "<group>"; };
C4B4BE301AB393800064AC17 /* TelegramAccountViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TelegramAccountViewController.h; sourceTree = "<group>"; };
@ -112,16 +112,21 @@
C4B57BE51B109E6D006997F4 /* README.md */ = {isa = PBXFileReference; lastKnownFileType = net.daringfireball.markdown; name = README.md; path = ../README.md; sourceTree = "<group>"; };
C4B57BE81B10D814006997F4 /* configure.ac */ = {isa = PBXFileReference; lastKnownFileType = text; name = configure.ac; path = ../configure.ac; sourceTree = "<group>"; };
C4B57BE91B10D822006997F4 /* Makefile.in */ = {isa = PBXFileReference; lastKnownFileType = text; name = Makefile.in; path = ../Makefile.in; sourceTree = "<group>"; };
C4B57BEC1B13B2C4006997F4 /* auto-types.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = "auto-types.h"; path = "../auto/auto-types.h"; sourceTree = "<group>"; };
C4B57BED1B1598BE006997F4 /* telegram-purple */ = {isa = PBXFileReference; lastKnownFileType = folder; name = "telegram-purple"; path = ..; sourceTree = "<group>"; };
C4B57BEF1B1598D4006997F4 /* libtgl.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libtgl.a; path = ../libs/libtgl.a; sourceTree = "<group>"; };
C4D819011A5C85FE0044CBA9 /* lodepng.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = lodepng.c; sourceTree = "<group>"; };
C4D819021A5C85FE0044CBA9 /* lodepng.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = lodepng.h; sourceTree = "<group>"; };
C4D12DEE1BC534CF00C0F6E1 /* tgp-blist.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "tgp-blist.h"; path = "../tgp-blist.h"; sourceTree = "<group>"; };
C4D12DEF1BC534CF00C0F6E1 /* tgp-blist.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = "tgp-blist.c"; path = "../tgp-blist.c"; sourceTree = "<group>"; };
C4D3EB581C3824C5003C895B /* tgp-info.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = "tgp-info.c"; path = "../tgp-info.c"; sourceTree = "<group>"; };
C4D3EB591C3824C5003C895B /* tgp-info.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "tgp-info.h"; path = "../tgp-info.h"; sourceTree = "<group>"; };
C4D432D71BC2783C00561667 /* tg-server.tglpub */ = {isa = PBXFileReference; lastKnownFileType = file; name = "tg-server.tglpub"; path = "../tg-server.tglpub"; sourceTree = "<group>"; };
C4D819041A5C862E0044CBA9 /* tgp-structs.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = "tgp-structs.c"; path = "../tgp-structs.c"; sourceTree = "<group>"; };
C4D819051A5C862E0044CBA9 /* tgp-structs.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "tgp-structs.h"; path = "../tgp-structs.h"; sourceTree = "<group>"; };
C4D9185A1C1C6B3900AECCA2 /* libgpg-error.0.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = "libgpg-error.0.dylib"; path = "Frameworks/Adium/libgpg-error.0.dylib"; sourceTree = "<group>"; };
C4E5280F1A8A907200C4B915 /* tgp-ft.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = "tgp-ft.c"; path = "../tgp-ft.c"; sourceTree = "<group>"; };
C4E528101A8A907200C4B915 /* tgp-ft.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = "tgp-ft.h"; path = "../tgp-ft.h"; sourceTree = "<group>"; };
C4EA96591B204C67006CBAD0 /* libwebp.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libwebp.a; path = Frameworks/libwebp.a; sourceTree = "<group>"; };
C4FFD0DB1B5FC48B00939D8A /* TelegramAutocompletionDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TelegramAutocompletionDelegate.h; sourceTree = "<group>"; };
C4FFD0DD1B5FC68400939D8A /* TelegramAutocompletionDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TelegramAutocompletionDelegate.m; sourceTree = "<group>"; };
/* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */
@ -129,6 +134,10 @@
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
C4D9185C1C1C6B9C00AECCA2 /* libgpg-error.0.dylib in Frameworks */,
C465FC211C0D0191001CCEE8 /* libgcrypt.20.dylib in Frameworks */,
C49A915819BBC5C5001B3DC0 /* libz.dylib in Frameworks */,
C466937819E703370036A108 /* AppKit.framework in Frameworks */,
C4B57BF01B1598D4006997F4 /* libtgl.a in Frameworks */,
C4EA965A1B204C67006CBAD0 /* libwebp.a in Frameworks */,
C40564871A7937C600A293B9 /* AdiumLibpurple.framework in Frameworks */,
@ -136,9 +145,6 @@
C487A18E1A792E9B0044F135 /* AIUtilities.framework in Frameworks */,
C487A1911A792EA50044F135 /* libglib.framework in Frameworks */,
C487A1921A792EA50044F135 /* libpurple.framework in Frameworks */,
C487A17B1A792CF00044F135 /* libcrypto.dylib in Frameworks */,
C466937819E703370036A108 /* AppKit.framework in Frameworks */,
C49A915819BBC5C5001B3DC0 /* libz.dylib in Frameworks */,
C410948A19BB2D7D0083BF3F /* CoreFoundation.framework in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
@ -146,9 +152,29 @@
/* End PBXFrameworksBuildPhase section */
/* Begin PBXGroup section */
330704C72BA03B848124B6F7 /* telegram-adium */ = {
isa = PBXGroup;
children = (
3307063DD9566C77D08006F9 /* Supporting Files */,
);
path = "telegram-adium";
sourceTree = "<group>";
};
3307063DD9566C77D08006F9 /* Supporting Files */ = {
isa = PBXGroup;
children = (
33070A9DBCF625AD9E07CE94 /* telegram-adium-Info.plist */,
33070D636377BD8BA47CBF63 /* InfoPlist.strings */,
33070CD59974365A33795EAF /* telegram-adium-Prefix.pch */,
);
name = "Supporting Files";
sourceTree = "<group>";
};
C410947D19BB2D7D0083BF3F = {
isa = PBXGroup;
children = (
C4FFD0DB1B5FC48B00939D8A /* TelegramAutocompletionDelegate.h */,
C4FFD0DD1B5FC68400939D8A /* TelegramAutocompletionDelegate.m */,
C4B4BE321AB4536F0064AC17 /* PurpleDefaultsTelegram.plist */,
C438CE251A12BEAF00E1DA0F /* telegram22.png */,
C438CE231A12BEAF00E1DA0F /* telegram.png */,
@ -162,15 +188,15 @@
C4877C1D19BB676B006FA91F /* TelegramAccount.m */,
C4B4BE361AB5FB5C0064AC17 /* TelegramJoinChatViewController.h */,
C4B4BE351AB5FB5C0064AC17 /* TelegramJoinChatViewController.m */,
C4B4BE2F1AB393800064AC17 /* TelegramAccountViewController.m */,
C4B4BE381AB613950064AC17 /* TelegramJoinChatView.xib */,
C4B4BE301AB393800064AC17 /* TelegramAccountViewController.h */,
C4B4BE2F1AB393800064AC17 /* TelegramAccountViewController.m */,
C4B4BE2D1AB392F80064AC17 /* TelegramAccountView.xib */,
C465FC221C0D01B5001CCEE8 /* libgcrypt.20.dylib */,
C4D9185A1C1C6B3900AECCA2 /* libgpg-error.0.dylib */,
C4BF990319BB8B200038D507 /* telegram-purple */,
C410948B19BB2D7D0083BF3F /* telegram-adium */,
C410948819BB2D7D0083BF3F /* Frameworks */,
C410948719BB2D7D0083BF3F /* Products */,
C4D819001A5C85FE0044CBA9 /* lodepng */,
C4877C2919BB6D22006FA91F /* Resources */,
);
sourceTree = "<group>";
@ -186,6 +212,8 @@
C410948819BB2D7D0083BF3F /* Frameworks */ = {
isa = PBXGroup;
children = (
C465FC1B1C0CF43A001CCEE8 /* libgcrypt.20.dylib */,
C479A7FE1BB1C95300C153DF /* libcrypto.a */,
C4B57BEF1B1598D4006997F4 /* libtgl.a */,
C4EA96591B204C67006CBAD0 /* libwebp.a */,
C4B57BED1B1598BE006997F4 /* telegram-purple */,
@ -194,7 +222,6 @@
C487A1901A792EA50044F135 /* libpurple.framework */,
C487A1891A792E9B0044F135 /* Adium.framework */,
C487A18B1A792E9B0044F135 /* AIUtilities.framework */,
C487A17A1A792CF00044F135 /* libcrypto.dylib */,
C49A915719BBC5C5001B3DC0 /* libz.dylib */,
C487A1781A792CD80044F135 /* libssl.dylib */,
C438CE2B1A12BF3400E1DA0F /* libtgl.a */,
@ -204,24 +231,6 @@
name = Frameworks;
sourceTree = "<group>";
};
C410948B19BB2D7D0083BF3F /* telegram-adium */ = {
isa = PBXGroup;
children = (
C410948C19BB2D7D0083BF3F /* Supporting Files */,
);
path = "telegram-adium";
sourceTree = "<group>";
};
C410948C19BB2D7D0083BF3F /* Supporting Files */ = {
isa = PBXGroup;
children = (
C410948D19BB2D7D0083BF3F /* telegram-adium-Info.plist */,
C410948E19BB2D7D0083BF3F /* InfoPlist.strings */,
C410949119BB2D7D0083BF3F /* telegram-adium-Prefix.pch */,
);
name = "Supporting Files";
sourceTree = "<group>";
};
C4877C2919BB6D22006FA91F /* Resources */ = {
isa = PBXGroup;
children = (
@ -233,10 +242,10 @@
C4BF990319BB8B200038D507 /* telegram-purple */ = {
isa = PBXGroup;
children = (
C4D432D71BC2783C00561667 /* tg-server.tglpub */,
C4B57BE81B10D814006997F4 /* configure.ac */,
C4B57BE91B10D822006997F4 /* Makefile.in */,
C4B57BE51B109E6D006997F4 /* README.md */,
C4A71A911B18DD9300AE2E2B /* Makefile.tgl */,
C425F9161A7069C300361AFC /* tgp-utils.c */,
C425F9171A7069C300361AFC /* tgp-utils.h */,
C4D819041A5C862E0044CBA9 /* tgp-structs.c */,
@ -258,41 +267,20 @@
C431EB7B1A76C737006521CB /* tgp-chat.c */,
C431EB7C1A76C737006521CB /* tgp-chat.h */,
C4E5280F1A8A907200C4B915 /* tgp-ft.c */,
C4B57BEC1B13B2C4006997F4 /* auto-types.h */,
C4E528101A8A907200C4B915 /* tgp-ft.h */,
C479A8001BB69C2100C153DF /* tgp-request.c */,
C479A8011BB69C2100C153DF /* tgp-request.h */,
C4D12DEE1BC534CF00C0F6E1 /* tgp-blist.h */,
C4D12DEF1BC534CF00C0F6E1 /* tgp-blist.c */,
C4D3EB591C3824C5003C895B /* tgp-info.h */,
C4D3EB581C3824C5003C895B /* tgp-info.c */,
330704C72BA03B848124B6F7 /* telegram-adium */,
);
name = "telegram-purple";
sourceTree = "<group>";
};
C4D819001A5C85FE0044CBA9 /* lodepng */ = {
isa = PBXGroup;
children = (
C4D819011A5C85FE0044CBA9 /* lodepng.c */,
C4D819021A5C85FE0044CBA9 /* lodepng.h */,
);
name = lodepng;
path = ../lodepng;
sourceTree = "<group>";
};
/* End PBXGroup section */
/* Begin PBXLegacyTarget section */
C4B57BF11B160950006997F4 /* telegram-purple */ = {
isa = PBXLegacyTarget;
buildArgumentsString = "$(ACTION)";
buildConfigurationList = C4B57BF21B160951006997F4 /* Build configuration list for PBXLegacyTarget "telegram-purple" */;
buildPhases = (
);
buildToolPath = /usr/bin/make;
buildWorkingDirectory = "$(PROJECT_DIR)/../";
dependencies = (
);
name = "telegram-purple";
passBuildSettingsInEnvironment = 0;
productName = "telegram-purple";
};
/* End PBXLegacyTarget section */
/* Begin PBXNativeTarget section */
C410948519BB2D7D0083BF3F /* telegram-adium */ = {
isa = PBXNativeTarget;
@ -301,11 +289,11 @@
C410948219BB2D7D0083BF3F /* Sources */,
C410948319BB2D7D0083BF3F /* Frameworks */,
C410948419BB2D7D0083BF3F /* Resources */,
C4C325A11C91BD230020D32E /* ShellScript */,
);
buildRules = (
);
dependencies = (
C4B57BF61B160EA6006997F4 /* PBXTargetDependency */,
);
name = "telegram-adium";
productName = "telegram-adium";
@ -320,11 +308,6 @@
attributes = {
LastUpgradeCheck = 0510;
ORGANIZATIONNAME = "Matthias Jentsch";
TargetAttributes = {
C4B57BF11B160950006997F4 = {
CreatedOnToolsVersion = 6.3.2;
};
};
};
buildConfigurationList = C410948119BB2D7D0083BF3F /* Build configuration list for PBXProject "telegram-adium" */;
compatibilityVersion = "Xcode 3.2";
@ -339,7 +322,6 @@
projectRoot = "";
targets = (
C410948519BB2D7D0083BF3F /* telegram-adium */,
C4B57BF11B160950006997F4 /* telegram-purple */,
);
};
/* End PBXProject section */
@ -349,60 +331,74 @@
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
C4D9185B1C1C6B3900AECCA2 /* libgpg-error.0.dylib in Resources */,
C465FC231C0D01B5001CCEE8 /* libgcrypt.20.dylib in Resources */,
C4D432D81BC2783C00561667 /* tg-server.tglpub in Resources */,
C438CE271A12BEAF00E1DA0F /* telegram.png in Resources */,
C4B4BE391AB613950064AC17 /* TelegramJoinChatView.xib in Resources */,
C4B4BE2E1AB392F80064AC17 /* TelegramAccountView.xib in Resources */,
C438CE281A12BEAF00E1DA0F /* telegram16.png in Resources */,
C438CE291A12BEAF00E1DA0F /* telegram22.png in Resources */,
C438CE2A1A12BEAF00E1DA0F /* telegram48.png in Resources */,
C410949019BB2D7D0083BF3F /* InfoPlist.strings in Resources */,
C438CE3D1A12C15100E1DA0F /* tg-server.pub in Resources */,
C4B4BE331AB4536F0064AC17 /* PurpleDefaultsTelegram.plist in Resources */,
33070C10341336CD4EC97534 /* InfoPlist.strings in Resources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXResourcesBuildPhase section */
/* Begin PBXShellScriptBuildPhase section */
C4C325A11C91BD230020D32E /* ShellScript */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
);
inputPaths = (
);
outputPaths = (
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
shellScript = "install_name_tool -change \"@executable_path/../Frameworks/libglib.framework/Versions/2.38.1/libglib\" \"@executable_path/../Frameworks/libglib.framework/libglib\" \"$TARGET_BUILD_DIR/$PRODUCT_NAME.$WRAPPER_EXTENSION/Contents/MacOS/$PRODUCT_NAME\"\ninstall_name_tool -change \"@executable_path/../Frameworks/libpurple.framework/Versions/2.10.7rd8d96a636413/libpurple\" \"@executable_path/../Frameworks/libpurple.framework/libpurple\" \"$TARGET_BUILD_DIR/$PRODUCT_NAME.$WRAPPER_EXTENSION/Contents/MacOS/$PRODUCT_NAME\"\n";
};
/* End PBXShellScriptBuildPhase section */
/* Begin PBXSourcesBuildPhase section */
C410948219BB2D7D0083BF3F /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
C4FFD0DC1B5FC48B00939D8A /* TelegramAutocompletionDelegate.h in Sources */,
C438CE321A12C07800E1DA0F /* msglog.c in Sources */,
C438CE351A12C07800E1DA0F /* tgp-net.c in Sources */,
C438CE331A12C07800E1DA0F /* telegram-base.c in Sources */,
C4B4BE371AB5FB5C0064AC17 /* TelegramJoinChatViewController.m in Sources */,
C438CE341A12C07800E1DA0F /* telegram-purple.c in Sources */,
C4877C1819BB37EA006FA91F /* TelegramService.m in Sources */,
C4D12DF01BC534CF00C0F6E1 /* tgp-blist.c in Sources */,
C448ADA71AB0789A001B7ECD /* tgp-msg.c in Sources */,
C4FFD0DE1B5FC68400939D8A /* TelegramAutocompletionDelegate.m in Sources */,
C4E528111A8A907200C4B915 /* tgp-ft.c in Sources */,
C438CE361A12C07800E1DA0F /* tgp-timers.c in Sources */,
C410949B19BB337A0083BF3F /* TelegramPlugin.m in Sources */,
C4B4BE311AB393800064AC17 /* TelegramAccountViewController.m in Sources */,
C4877C1E19BB676B006FA91F /* TelegramAccount.m in Sources */,
C41D58411A16D88E00B22448 /* tgp-2prpl.c in Sources */,
C479A8021BB69C2100C153DF /* tgp-request.c in Sources */,
C425F9181A7069C300361AFC /* tgp-utils.c in Sources */,
C4D819031A5C85FE0044CBA9 /* lodepng.c in Sources */,
C4D819061A5C862E0044CBA9 /* tgp-structs.c in Sources */,
C431EB7D1A76C737006521CB /* tgp-chat.c in Sources */,
C4D3EB5A1C3824C5003C895B /* tgp-info.c in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXSourcesBuildPhase section */
/* Begin PBXTargetDependency section */
C4B57BF61B160EA6006997F4 /* PBXTargetDependency */ = {
isa = PBXTargetDependency;
target = C4B57BF11B160950006997F4 /* telegram-purple */;
targetProxy = C4B57BF51B160EA6006997F4 /* PBXContainerItemProxy */;
};
/* End PBXTargetDependency section */
/* Begin PBXVariantGroup section */
C410948E19BB2D7D0083BF3F /* InfoPlist.strings */ = {
33070D636377BD8BA47CBF63 /* InfoPlist.strings */ = {
isa = PBXVariantGroup;
children = (
C410948F19BB2D7D0083BF3F /* en */,
33070918C1B3F67A227F6286 /* en */,
);
name = InfoPlist.strings;
sourceTree = "<group>";
@ -445,9 +441,9 @@
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
MACOSX_DEPLOYMENT_TARGET = 10.8;
MACOSX_DEPLOYMENT_TARGET = 10.11;
ONLY_ACTIVE_ARCH = YES;
SDKROOT = macosx10.8;
SDKROOT = macosx10.12;
};
name = Debug;
};
@ -484,8 +480,8 @@
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
MACOSX_DEPLOYMENT_TARGET = 10.8;
SDKROOT = macosx10.8;
MACOSX_DEPLOYMENT_TARGET = 10.11;
SDKROOT = macosx10.12;
};
name = Release;
};
@ -517,13 +513,14 @@
INSTALL_PATH = "$(HOME)/Library/Application Support/Adium 2.0/PlugIns/";
LIBRARY_SEARCH_PATHS = (
"$(inherited)",
"$(PROJECT_DIR)/../libs",
"$(PROJECT_DIR)/../tgl/libs",
"$(PROJECT_DIR)",
"$(PROJECT_DIR)/Frameworks",
"$(PROJECT_DIR)/Frameworks/Adium",
);
OTHER_CFLAGS = "-DPURPLE_STATIC_PRPL";
PRODUCT_NAME = "$(TARGET_NAME)";
SDKROOT = macosx10.8;
SDKROOT = macosx10.12;
WRAPPER_EXTENSION = AdiumLibpurplePlugin;
};
name = Debug;
@ -556,55 +553,17 @@
INSTALL_PATH = "$(HOME)/Library/Application Support/Adium 2.0/PlugIns/";
LIBRARY_SEARCH_PATHS = (
"$(PROJECT_DIR)",
"$(PROJECT_DIR)/../libs",
/usr/local/lib,
"$(PROJECT_DIR)/../tgl/libs",
"$(PROJECT_DIR)/Frameworks",
"$(PROJECT_DIR)/Frameworks/Adium",
);
OTHER_CFLAGS = "-DPURPLE_STATIC_PRPL";
PRODUCT_NAME = "$(TARGET_NAME)";
SDKROOT = macosx10.8;
SDKROOT = macosx10.12;
WRAPPER_EXTENSION = AdiumLibpurplePlugin;
};
name = Release;
};
C4B57BF31B160951006997F4 /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
CLANG_WARN_UNREACHABLE_CODE = YES;
DEBUGGING_SYMBOLS = YES;
DEBUG_INFORMATION_FORMAT = dwarf;
ENABLE_STRICT_OBJC_MSGSEND = YES;
GCC_GENERATE_DEBUGGING_SYMBOLS = YES;
GCC_NO_COMMON_BLOCKS = YES;
GCC_OPTIMIZATION_LEVEL = 0;
GCC_PREPROCESSOR_DEFINITIONS = (
"DEBUG=1",
"$(inherited)",
);
MACOSX_DEPLOYMENT_TARGET = 10.10;
MTL_ENABLE_DEBUG_INFO = YES;
OTHER_CFLAGS = "";
OTHER_LDFLAGS = "";
PRODUCT_NAME = "$(TARGET_NAME)";
SDKROOT = macosx;
};
name = Debug;
};
C4B57BF41B160951006997F4 /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
CLANG_WARN_UNREACHABLE_CODE = YES;
ENABLE_STRICT_OBJC_MSGSEND = YES;
GCC_NO_COMMON_BLOCKS = YES;
MACOSX_DEPLOYMENT_TARGET = 10.10;
MTL_ENABLE_DEBUG_INFO = NO;
OTHER_CFLAGS = "";
OTHER_LDFLAGS = "";
PRODUCT_NAME = "$(TARGET_NAME)";
SDKROOT = macosx;
};
name = Release;
};
/* End XCBuildConfiguration section */
/* Begin XCConfigurationList section */
@ -626,15 +585,6 @@
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Debug;
};
C4B57BF21B160951006997F4 /* Build configuration list for PBXLegacyTarget "telegram-purple" */ = {
isa = XCConfigurationList;
buildConfigurations = (
C4B57BF31B160951006997F4 /* Debug */,
C4B57BF41B160951006997F4 /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Debug;
};
/* End XCConfigurationList section */
};
rootObject = C410947E19BB2D7D0083BF3F /* Project object */;

View file

@ -0,0 +1,44 @@
{
"DVTSourceControlWorkspaceBlueprintPrimaryRemoteRepositoryKey" : "41D8FEA2FB3AAB94D0D4027A64957635038B427E",
"DVTSourceControlWorkspaceBlueprintWorkingCopyRepositoryLocationsKey" : {
},
"DVTSourceControlWorkspaceBlueprintWorkingCopyStatesKey" : {
"32693D74F7AAA18802B0105461C73E1FD01CF3A3" : 0,
"2BAF9F6AF710B4D765F611851696219A50533669" : 0,
"41D8FEA2FB3AAB94D0D4027A64957635038B427E" : 0,
"78234520DB6A5DE1B463A6198C9122A9D1A44221" : 0
},
"DVTSourceControlWorkspaceBlueprintIdentifierKey" : "1C5A3335-4726-410A-8E70-801C8879E269",
"DVTSourceControlWorkspaceBlueprintWorkingCopyPathsKey" : {
"32693D74F7AAA18802B0105461C73E1FD01CF3A3" : "telegram-purple\/tgl\/",
"2BAF9F6AF710B4D765F611851696219A50533669" : "tg\/",
"41D8FEA2FB3AAB94D0D4027A64957635038B427E" : "telegram-purple\/",
"78234520DB6A5DE1B463A6198C9122A9D1A44221" : "telegram-purple\/tgl\/tl-parser\/"
},
"DVTSourceControlWorkspaceBlueprintNameKey" : "telegram-adium",
"DVTSourceControlWorkspaceBlueprintVersion" : 204,
"DVTSourceControlWorkspaceBlueprintRelativePathToProjectKey" : "telegram-adium\/telegram-adium.xcodeproj",
"DVTSourceControlWorkspaceBlueprintRemoteRepositoriesKey" : [
{
"DVTSourceControlWorkspaceBlueprintRemoteRepositoryURLKey" : "https:\/\/github.com\/vysheng\/tg",
"DVTSourceControlWorkspaceBlueprintRemoteRepositorySystemKey" : "com.apple.dt.Xcode.sourcecontrol.Git",
"DVTSourceControlWorkspaceBlueprintRemoteRepositoryIdentifierKey" : "2BAF9F6AF710B4D765F611851696219A50533669"
},
{
"DVTSourceControlWorkspaceBlueprintRemoteRepositoryURLKey" : "https:\/\/github.com\/vysheng\/tgl",
"DVTSourceControlWorkspaceBlueprintRemoteRepositorySystemKey" : "com.apple.dt.Xcode.sourcecontrol.Git",
"DVTSourceControlWorkspaceBlueprintRemoteRepositoryIdentifierKey" : "32693D74F7AAA18802B0105461C73E1FD01CF3A3"
},
{
"DVTSourceControlWorkspaceBlueprintRemoteRepositoryURLKey" : "https:\/\/github.com\/majn\/telegram-purple.git",
"DVTSourceControlWorkspaceBlueprintRemoteRepositorySystemKey" : "com.apple.dt.Xcode.sourcecontrol.Git",
"DVTSourceControlWorkspaceBlueprintRemoteRepositoryIdentifierKey" : "41D8FEA2FB3AAB94D0D4027A64957635038B427E"
},
{
"DVTSourceControlWorkspaceBlueprintRemoteRepositoryURLKey" : "https:\/\/github.com\/vysheng\/tl-parser",
"DVTSourceControlWorkspaceBlueprintRemoteRepositorySystemKey" : "com.apple.dt.Xcode.sourcecontrol.Git",
"DVTSourceControlWorkspaceBlueprintRemoteRepositoryIdentifierKey" : "78234520DB6A5DE1B463A6198C9122A9D1A44221"
}
]
}

View file

@ -23,21 +23,24 @@
</BuildActionEntries>
</BuildAction>
<TestAction
buildConfiguration = "Debug"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
shouldUseLaunchSchemeArgsEnv = "YES"
buildConfiguration = "Debug">
shouldUseLaunchSchemeArgsEnv = "YES">
<Testables>
</Testables>
<AdditionalOptions>
</AdditionalOptions>
</TestAction>
<LaunchAction
buildConfiguration = "Debug"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
launchStyle = "0"
useCustomWorkingDirectory = "NO"
buildConfiguration = "Debug"
ignoresPersistentStateOnLaunch = "NO"
debugDocumentVersioning = "YES"
debugServiceExtension = "internal"
allowLocationSimulation = "YES">
<PathRunnable
runnableDebuggingMode = "0"
@ -57,10 +60,10 @@
</AdditionalOptions>
</LaunchAction>
<ProfileAction
buildConfiguration = "Release"
shouldUseLaunchSchemeArgsEnv = "YES"
savedToolIdentifier = ""
useCustomWorkingDirectory = "NO"
buildConfiguration = "Release"
debugDocumentVersioning = "YES">
</ProfileAction>
<AnalyzeAction

View file

@ -23,21 +23,24 @@
</BuildActionEntries>
</BuildAction>
<TestAction
buildConfiguration = "Debug"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
shouldUseLaunchSchemeArgsEnv = "YES"
buildConfiguration = "Debug">
shouldUseLaunchSchemeArgsEnv = "YES">
<Testables>
</Testables>
<AdditionalOptions>
</AdditionalOptions>
</TestAction>
<LaunchAction
buildConfiguration = "Debug"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
launchStyle = "0"
useCustomWorkingDirectory = "NO"
buildConfiguration = "Debug"
ignoresPersistentStateOnLaunch = "NO"
debugDocumentVersioning = "YES"
debugServiceExtension = "internal"
allowLocationSimulation = "YES">
<MacroExpansion>
<BuildableReference
@ -52,10 +55,10 @@
</AdditionalOptions>
</LaunchAction>
<ProfileAction
buildConfiguration = "Release"
shouldUseLaunchSchemeArgsEnv = "YES"
savedToolIdentifier = ""
useCustomWorkingDirectory = "NO"
buildConfiguration = "Release"
debugDocumentVersioning = "YES">
<MacroExpansion>
<BuildableReference

View file

@ -23,23 +23,27 @@
</BuildActionEntries>
</BuildAction>
<TestAction
buildConfiguration = "Release"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
shouldUseLaunchSchemeArgsEnv = "YES"
buildConfiguration = "Release">
shouldUseLaunchSchemeArgsEnv = "YES">
<Testables>
</Testables>
<AdditionalOptions>
</AdditionalOptions>
</TestAction>
<LaunchAction
buildConfiguration = "Release"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
launchStyle = "0"
useCustomWorkingDirectory = "NO"
buildConfiguration = "Release"
ignoresPersistentStateOnLaunch = "NO"
debugDocumentVersioning = "YES"
debugServiceExtension = "internal"
allowLocationSimulation = "YES">
<PathRunnable
runnableDebuggingMode = "0"
FilePath = "/Applications/Adium.app">
</PathRunnable>
<MacroExpansion>
@ -55,10 +59,10 @@
</AdditionalOptions>
</LaunchAction>
<ProfileAction
buildConfiguration = "Release"
shouldUseLaunchSchemeArgsEnv = "YES"
savedToolIdentifier = ""
useCustomWorkingDirectory = "NO"
buildConfiguration = "Release"
debugDocumentVersioning = "YES">
</ProfileAction>
<AnalyzeAction

View file

@ -1,39 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>SchemeUserState</key>
<dict>
<key>telegram-adium.xcscheme</key>
<dict>
<key>orderHint</key>
<integer>0</integer>
</dict>
<key>telegram-purple.xcscheme</key>
<dict>
<key>orderHint</key>
<integer>2</integer>
</dict>
<key>telegrma-adium Release.xcscheme</key>
<dict>
<key>isShown</key>
<false/>
<key>orderHint</key>
<integer>1</integer>
</dict>
</dict>
<key>SuppressBuildableAutocreation</key>
<dict>
<key>C410948519BB2D7D0083BF3F</key>
<dict>
<key>primary</key>
<true/>
</dict>
<key>C4B57BF11B160950006997F4</key>
<dict>
<key>primary</key>
<true/>
</dict>
</dict>
</dict>
</plist>

View file

@ -3,7 +3,7 @@
<plist version="1.0">
<dict>
<key>AIMinimumAdiumVersionRequirement</key>
<string>1.4</string>
<string>1.5.10</string>
<key>CFBundleDevelopmentRegion</key>
<string>English</string>
<key>CFBundleExecutable</key>
@ -19,11 +19,11 @@
<key>CFBundlePackageType</key>
<string>BNDL</string>
<key>CFBundleShortVersionString</key>
<string>1.1.0</string>
<string>1.3.1</string>
<key>CFBundleSignature</key>
<string>AdIM</string>
<key>CFBundleVersion</key>
<string>1</string>
<string>1.3.1</string>
<key>CFPlugInDynamicRegisterFunction</key>
<string></string>
<key>CFPlugInDynamicRegistration</key>
@ -43,7 +43,7 @@
<key>CFPlugInUnloadFunction</key>
<string></string>
<key>NSHumanReadableCopyright</key>
<string>Copyright © 2014 Matthias Jentsch.</string>
<string>Copyright © 2014-2017 Matthias Jentsch.</string>
<key>NSPrincipalClass</key>
<string>TelegramPlugin</string>
</dict>

View file

@ -15,46 +15,93 @@
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA
Copyright Matthias Jentsch, Vitaly Valtman, Christopher Althaus, Markus Endres 2014-2015
Copyright Matthias Jentsch, Vitaly Valtman, Ben Wiederhake, Christopher Althaus 2014-2015
*/
#define _GNU_SOURCE
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdio.h>
#include <assert.h>
#include <tgl.h>
#include <tgl-binlog.h>
#include <tgl-methods-in.h>
#include <glib.h>
#include <request.h>
#include <openssl/sha.h>
#include <cipher.h>
#include "telegram-base.h"
#include "telegram-purple.h"
#include "msglog.h"
#include "tgp-2prpl.h"
#include "tgp-structs.h"
#include "tgp-utils.h"
#include "lodepng/lodepng.h"
#define _(m) m
// O_BINARY exists on windows and must be defined, but doesn't exist on unix-based systems
#ifndef O_BINARY
#define O_BINARY 0
#endif
#define DC_SERIALIZED_MAGIC 0x868aa81d
#define STATE_FILE_MAGIC 0x28949a93
#define SECRET_CHAT_FILE_MAGIC 0x37a1988a
static gboolean read_ui32 (int fd, unsigned int *ret) {
typedef char check_int_size[(sizeof (int) >= 4) ? 1 : -1];
(void) sizeof (check_int_size);
unsigned char buf[4];
if (4 != read (fd, buf, 4)) {
return 0;
}
// Ugly but works.
*ret = 0;
*ret |= buf[0];
*ret <<= 8;
*ret |= buf[1];
*ret <<= 8;
*ret |= buf[2];
*ret <<= 8;
*ret |= buf[3];
return 1;
}
int read_pubkey_file (const char *name, struct rsa_pubkey *dst) {
// Just to make sure nobody reads garbage.
dst->e = 0;
dst->n_len = 0;
dst->n_raw = NULL;
int pubkey_fd = open (name, O_RDONLY | O_BINARY);
if (pubkey_fd < 0) {
return 0;
}
unsigned int e;
unsigned int n_len;
if (!read_ui32 (pubkey_fd, &e) || !read_ui32 (pubkey_fd, &n_len) // Ensure successful reads
|| n_len < 128 || n_len > 1024 || e < 5) { // Ensure (at least remotely) sane parameters.
close (pubkey_fd);
return 0;
}
unsigned char *n_raw = malloc (n_len);
if (!n_raw) {
close (pubkey_fd);
return 0;
}
gint readret;
readret = read (pubkey_fd, n_raw, n_len);
if (readret <= 0 || (n_len != (guint) readret)) {
free (n_raw);
close (pubkey_fd);
return 0;
}
close (pubkey_fd);
dst->e = e;
dst->n_len = n_len;
dst->n_raw = n_raw;
info ("read pubkey file: n_len=%u e=%u", n_len, e);
return 1;
}
void read_state_file (struct tgl_state *TLS) {
char *name = 0;
if (asprintf (&name, "%s/%s", TLS->base_path, "state") < 0) {
return;
}
name = g_strdup_printf("%s/%s", TLS->base_path, "state");
int state_file_fd = open (name, O_CREAT | O_RDWR, 0600);
int state_file_fd = open (name, O_CREAT | O_RDWR | O_BINARY, 0600);
free (name);
if (state_file_fd < 0) {
@ -78,6 +125,7 @@ void read_state_file (struct tgl_state *TLS) {
bl_do_set_pts (TLS, pts);
bl_do_set_qts (TLS, qts);
bl_do_set_date (TLS, date);
info ("read state file: seq=%d pts=%d qts=%d date=%d", seq, pts, qts, date);
}
void write_state_file (struct tgl_state *TLS) {
@ -88,11 +136,9 @@ void write_state_file (struct tgl_state *TLS) {
wseq = TLS->seq; wpts = TLS->pts; wqts = TLS->qts; wdate = TLS->date;
char *name = 0;
if (asprintf (&name, "%s/%s", TLS->base_path, "state") < 0) {
return;
}
name = g_strdup_printf("%s/%s", TLS->base_path, "state");
int state_file_fd = open (name, O_CREAT | O_RDWR, 0600);
int state_file_fd = open (name, O_CREAT | O_RDWR | O_BINARY, 0600);
free (name);
if (state_file_fd < 0) {
@ -106,7 +152,8 @@ void write_state_file (struct tgl_state *TLS) {
x[4] = wseq;
x[5] = wdate;
assert (write (state_file_fd, x, 24) == 24);
close (state_file_fd);
close (state_file_fd);
info ("wrote state file: wpts=%d wqts=%d wseq=%d wdate=%d", wpts, wqts, wseq, wdate);
}
static gboolean write_files_gw (gpointer data) {
@ -140,20 +187,18 @@ void write_dc (struct tgl_dc *DC, void *extra) {
assert (DC->flags & TGLDCF_LOGGED_IN);
assert (write (auth_file_fd, &DC->port, 4) == 4);
int l = strlen (DC->ip);
assert (write (auth_file_fd, &DC->options[0]->port, 4) == 4);
int l = strlen (DC->options[0]->ip);
assert (write (auth_file_fd, &l, 4) == 4);
assert (write (auth_file_fd, DC->ip, l) == l);
assert (write (auth_file_fd, DC->options[0]->ip, l) == l);
assert (write (auth_file_fd, &DC->auth_key_id, 8) == 8);
assert (write (auth_file_fd, DC->auth_key, 256) == 256);
}
void write_auth_file (struct tgl_state *TLS) {
char *name = 0;
if (asprintf (&name, "%s/%s", TLS->base_path, "auth") < 0) {
return;
}
int auth_file_fd = open (name, O_CREAT | O_RDWR, 0600);
name = g_strdup_printf("%s/%s", TLS->base_path, "auth");
int auth_file_fd = open (name, O_CREAT | O_RDWR | O_BINARY, 0600);
free (name);
if (auth_file_fd < 0) { return; }
int x = DC_SERIALIZED_MAGIC;
@ -165,6 +210,7 @@ void write_auth_file (struct tgl_state *TLS) {
assert (write (auth_file_fd, &TLS->our_id, 4) == 4);
close (auth_file_fd);
info ("wrote auth file: magic=%d max_dc_num=%d dc_working_num=%d", x, TLS->max_dc_num, TLS->dc_working_num);
}
void read_dc (struct tgl_state *TLS, int auth_file_fd, int id, unsigned ver) {
@ -182,45 +228,43 @@ void read_dc (struct tgl_state *TLS, int auth_file_fd, int id, unsigned ver) {
assert (read (auth_file_fd, &auth_key_id, 8) == 8);
assert (read (auth_file_fd, auth_key, 256) == 256);
bl_do_dc_option (TLS, id, "DC", 2, ip, l, port);
bl_do_dc_option (TLS, 0, id, "DC", 2, ip, l, port);
bl_do_set_auth_key (TLS, id, auth_key);
bl_do_dc_signed (TLS, id);
debug ("read dc: id=%d", id);
}
int error_if_val_false (struct tgl_state *TLS, int val, const char *cause, const char *msg) {
if (!val) {
int tgp_error_if_false (struct tgl_state *TLS, int val, const char *cause, const char *msg) {
if (! val) {
connection_data *conn = TLS->ev_base;
purple_connection_error_reason (conn->gc, PURPLE_CONNECTION_ERROR_AUTHENTICATION_FAILED, msg);
purple_notify_message (_telegram_protocol, PURPLE_NOTIFY_MSG_ERROR,
cause, msg, NULL, NULL, NULL);
purple_notify_message (_telegram_protocol, PURPLE_NOTIFY_MSG_ERROR, cause, msg, NULL, NULL, NULL);
return TRUE;
}
return 0;
}
void empty_auth_file (struct tgl_state *TLS) {
info ("initializing empty auth file");
if (TLS->test_mode) {
bl_do_dc_option (TLS, 1, "", 0, TG_SERVER_TEST_1, strlen (TG_SERVER_TEST_1), 443);
bl_do_dc_option (TLS, 2, "", 0, TG_SERVER_TEST_2, strlen (TG_SERVER_TEST_2), 443);
bl_do_dc_option (TLS, 3, "", 0, TG_SERVER_TEST_3, strlen (TG_SERVER_TEST_3), 443);
bl_do_dc_option (TLS, 0, 1, "", 0, TG_SERVER_TEST_1, strlen (TG_SERVER_TEST_1), 443);
bl_do_dc_option (TLS, 0, 2, "", 0, TG_SERVER_TEST_2, strlen (TG_SERVER_TEST_2), 443);
bl_do_dc_option (TLS, 0, 3, "", 0, TG_SERVER_TEST_3, strlen (TG_SERVER_TEST_3), 443);
bl_do_set_working_dc (TLS, TG_SERVER_TEST_DEFAULT);
} else {
bl_do_dc_option (TLS, 1, "", 0, TG_SERVER_1, strlen (TG_SERVER_1), 443);
bl_do_dc_option (TLS, 2, "", 0, TG_SERVER_2, strlen (TG_SERVER_2), 443);
bl_do_dc_option (TLS, 3, "", 0, TG_SERVER_3, strlen (TG_SERVER_3), 443);
bl_do_dc_option (TLS, 4, "", 0, TG_SERVER_4, strlen (TG_SERVER_4), 443);
bl_do_dc_option (TLS, 5, "", 0, TG_SERVER_5, strlen (TG_SERVER_5), 443);
bl_do_dc_option (TLS, 0, 1, "", 0, TG_SERVER_1, strlen (TG_SERVER_1), 443);
bl_do_dc_option (TLS, 0, 2, "", 0, TG_SERVER_2, strlen (TG_SERVER_2), 443);
bl_do_dc_option (TLS, 0, 3, "", 0, TG_SERVER_3, strlen (TG_SERVER_3), 443);
bl_do_dc_option (TLS, 0, 4, "", 0, TG_SERVER_4, strlen (TG_SERVER_4), 443);
bl_do_dc_option (TLS, 0, 5, "", 0, TG_SERVER_5, strlen (TG_SERVER_5), 443);
bl_do_set_working_dc (TLS, TG_SERVER_DEFAULT);
}
}
void read_auth_file (struct tgl_state *TLS) {
char *name = 0;
if (asprintf (&name, "%s/%s", TLS->base_path, "auth") < 0) {
return;
}
int auth_file_fd = open (name, O_CREAT | O_RDWR, 0600);
name = g_strdup_printf("%s/%s", TLS->base_path, "auth");
int auth_file_fd = open (name, O_CREAT | O_RDWR | O_BINARY, 0600);
free (name);
if (auth_file_fd < 0) {
empty_auth_file (TLS);
@ -254,12 +298,12 @@ void read_auth_file (struct tgl_state *TLS) {
assert (!l);
}
if (our_id) {
bl_do_set_our_id (TLS, our_id);
bl_do_set_our_id (TLS, TGL_MK_USER (our_id));
}
close (auth_file_fd);
info ("read auth file: dcs=%d dc_working_num=%d our_id=%d", x, dc_working_num, our_id);
}
void write_secret_chat (tgl_peer_t *_P, void *extra) {
struct tgl_secret_chat *P = (void *)_P;
if (tgl_get_peer_type (P->id) != TGL_PEER_ENCR_CHAT) { return; }
@ -286,14 +330,13 @@ void write_secret_chat (tgl_peer_t *_P, void *extra) {
assert (write (fd, &P->in_seq_no, 4) == 4);
assert (write (fd, &P->last_in_seq_no, 4) == 4);
assert (write (fd, &P->out_seq_no, 4) == 4);
debug ("wrote secret chat: %s, state=%d, in_seq_no=%d, out_seq_no=%d", P->print_name, P->state, P->in_seq_no, P->out_seq_no);
}
void write_secret_chat_file (struct tgl_state *TLS) {
char *name = 0;
if (asprintf (&name, "%s/%s", TLS->base_path, "secret") < 0) {
return;
}
int secret_chat_fd = open (name, O_CREAT | O_RDWR, 0600);
name = g_strdup_printf("%s/%s", TLS->base_path, "secret");
int secret_chat_fd = open (name, O_CREAT | O_RDWR | O_BINARY, 0600);
free (name);
assert (secret_chat_fd >= 0);
int x = SECRET_CHAT_FILE_MAGIC;
@ -311,6 +354,7 @@ void write_secret_chat_file (struct tgl_state *TLS) {
lseek (secret_chat_fd, 8, SEEK_SET);
assert (write (secret_chat_fd, &y[1], 4) == 4);
close (secret_chat_fd);
info ("wrote secret chat file: %d chats written.", y[1]);
}
void read_secret_chat (struct tgl_state *TLS, int fd, int v) {
@ -321,7 +365,7 @@ void read_secret_chat (struct tgl_state *TLS, int fd, int v) {
static unsigned char sha[20];
assert (read (fd, &id, 4) == 4);
assert (read (fd, &l, 4) == 4);
assert (l > 0 && l < 1000);
assert (l > 0 && l < 999);
assert (read (fd, s, l) == l);
assert (read (fd, &user_id, 4) == 4);
assert (read (fd, &admin_id, 4) == 4);
@ -335,7 +379,11 @@ void read_secret_chat (struct tgl_state *TLS, int fd, int v) {
if (v >= 2) {
assert (read (fd, sha, 20) == 20);
} else {
SHA1 ((void *)key, 256, sha);
PurpleCipher *sha1_cipher = purple_ciphers_find_cipher("sha1");
PurpleCipherContext *sha1_ctx = purple_cipher_context_new(sha1_cipher, NULL);
purple_cipher_context_append(sha1_ctx, key, 256);
purple_cipher_context_digest(sha1_ctx, 20, sha, NULL);
purple_cipher_context_destroy(sha1_ctx);
}
int in_seq_no = 0, out_seq_no = 0, last_in_seq_no = 0;
if (v >= 1) {
@ -343,22 +391,20 @@ void read_secret_chat (struct tgl_state *TLS, int fd, int v) {
assert (read (fd, &last_in_seq_no, 4) == 4);
assert (read (fd, &out_seq_no, 4) == 4);
}
bl_do_encr_chat_new (TLS, id,
&access_hash, &date, &admin_id, &user_id,
key, NULL, sha, &state, &ttl, &layer,
&in_seq_no, &last_in_seq_no, &out_seq_no,
&key_fingerprint, TGLECF_CREATE | TGLECF_CREATED
);
s[l] = '\0';
debug ("read secret chat: %s, state=%d, in_seq_no=%d, last_in_seq_no=%d, out_seq_no=%d",
s, state, in_seq_no, last_in_seq_no, out_seq_no);
bl_do_encr_chat (TLS, id, &access_hash, &date, &admin_id, &user_id, key, NULL, sha, &state, &ttl,
&layer, &in_seq_no, &last_in_seq_no, &out_seq_no, &key_fingerprint, TGLECF_CREATE | TGLECF_CREATED,
s, l);
}
void read_secret_chat_file (struct tgl_state *TLS) {
char *name = 0;
if (asprintf (&name, "%s/%s", TLS->base_path, "secret") < 0) {
return;
}
name = g_strdup_printf("%s/%s", TLS->base_path, "secret");
int secret_chat_fd = open (name, O_RDWR, 0600);
int secret_chat_fd = open (name, O_RDWR | O_BINARY, 0600);
free (name);
if (secret_chat_fd < 0) { return; }
@ -371,13 +417,15 @@ void read_secret_chat_file (struct tgl_state *TLS) {
assert (v == 0 || v == 1 || v == 2); // version
assert (read (secret_chat_fd, &x, 4) == 4);
assert (x >= 0);
int cnt = x;
while (x -- > 0) {
read_secret_chat (TLS, secret_chat_fd, v);
}
close (secret_chat_fd);
info ("read secret chat file: %d chats read", cnt);
}
gchar *get_config_dir (struct tgl_state *TLS, char const *username) {
gchar *get_config_dir (char const *username) {
gchar *dir = g_strconcat (purple_user_dir(), G_DIR_SEPARATOR_S, config_dir,
G_DIR_SEPARATOR_S, username, NULL);
@ -392,6 +440,20 @@ gchar *get_config_dir (struct tgl_state *TLS, char const *username) {
return dir;
}
gchar *get_user_pk_path () {
/*
This can't be conditional on whether or not we're using telepathy, because
then we would need to make sure that `make local_install` also knows about
that location. So we *always* use ${HOME}/.purple/telegram-purple,
even when the other files aren't in this folder.
Note that this is only visible when using Telepathy/Empathy with
local_install, which should be kinda rare anyway (use telepathy-morse!).
*/
return g_strconcat (g_get_home_dir(), G_DIR_SEPARATOR_S, ".purple",
G_DIR_SEPARATOR_S, "telegram-purple",
G_DIR_SEPARATOR_S, user_pk_filename, NULL);
}
gchar *get_download_dir (struct tgl_state *TLS) {
assert (TLS->base_path);
static gchar *dir;
@ -403,271 +465,42 @@ gchar *get_download_dir (struct tgl_state *TLS) {
return dir;
}
void assert_file_exists (PurpleConnection *gc, const char *filepath, const char *format) {
if (!g_file_test (filepath, G_FILE_TEST_EXISTS)) {
gchar *msg = g_strdup_printf (format, filepath);
purple_connection_error_reason (gc, PURPLE_CONNECTION_ERROR_CERT_OTHER_ERROR, msg);
g_free (msg);
return;
}
}
void telegram_export_authorization (struct tgl_state *TLS);
void export_auth_callback (struct tgl_state *TLS, void *extra, int success) {
if (!error_if_val_false(TLS, success, "Login Canceled", "Authentication export failed.")) {
telegram_export_authorization (TLS);
}
}
void telegram_export_authorization (struct tgl_state *TLS) {
int i;
for (i = 0; i <= TLS->max_dc_num; i++) if (TLS->DC_list[i] && !tgl_signed_dc (TLS, TLS->DC_list[i])) {
debug ("tgl_do_export_auth(%d)", i);
tgl_do_export_auth (TLS, i, export_auth_callback, (void*)(long)TLS->DC_list[i]);
return;
}
write_auth_file (TLS);
on_ready (TLS);
}
static void request_code (struct tgl_state *TLS);
static void request_name_and_code (struct tgl_state *TLS);
static void code_receive_result (struct tgl_state *TLS, void *extra, int success, struct tgl_user *U) {
void write_secret_chat_gw (struct tgl_state *TLS, void *extra, int success, struct tgl_secret_chat *_) {
if (!success) {
debug ("Bad code...");
request_code (TLS);
} else {
telegram_export_authorization (TLS);
}
}
static void code_auth_receive_result (struct tgl_state *TLS, void *extra, int success, struct tgl_user *U) {
if (!success) {
debug ("Bad code...");
request_name_and_code (TLS);
} else {
telegram_export_authorization (TLS);
}
}
void request_code_entered (gpointer data, const gchar *code) {
struct tgl_state *TLS = data;
connection_data *conn = TLS->ev_base;
char const *username = purple_account_get_username(conn->pa);
tgl_do_send_code_result (TLS, username, (int)strlen (username), conn->hash,
(int)strlen (conn->hash), code, (int)strlen (code),
code_receive_result, 0);
}
static void request_code_canceled (gpointer data) {
struct tgl_state *TLS = data;
connection_data *conn = TLS->ev_base;
purple_connection_error_reason(conn->gc,
PURPLE_CONNECTION_ERROR_AUTHENTICATION_FAILED, "registration canceled");
}
static void request_code (struct tgl_state *TLS) {
debug ("Client is not registered, registering...");
connection_data *conn = TLS->ev_base;
int compat = purple_account_get_bool (tg_get_acc(TLS), "compat-verification", 0);
if (compat || ! purple_request_input (conn->gc, "Telegram Code", "Enter Telegram Code",
"Telegram wants to verify your identity, please enter the code, that you have received via SMS.",
NULL, 0, 0, "code", "OK", G_CALLBACK(request_code_entered), "Cancel",
G_CALLBACK(request_code_canceled), conn->pa, NULL, NULL, TLS)) {
// purple request API is not available, so we create a new conversation (the Telegram system
// account "7770000") to prompt the user for the code
conn->in_fallback_chat = 1;
purple_connection_set_state (conn->gc, PURPLE_CONNECTED);
PurpleConversation *conv = purple_conversation_new (PURPLE_CONV_TYPE_IM, conn->pa, "777000");
purple_conversation_write (conv, "777000", "What is your SMS verification code?",
PURPLE_MESSAGE_RECV | PURPLE_MESSAGE_SYSTEM, 0);
}
}
static void request_name_code_entered (PurpleConnection* gc, PurpleRequestFields* fields) {
connection_data *conn = purple_connection_get_protocol_data(gc);
struct tgl_state *TLS = conn->TLS;
char const *username = purple_account_get_username(conn->pa);
const char* first = purple_request_fields_get_string(fields, "first_name");
const char* last = purple_request_fields_get_string(fields, "last_name");
const char* code = purple_request_fields_get_string(fields, "code");
if (!first || !last || !code) {
request_name_and_code (TLS);
tgp_notify_on_error_gw (TLS, NULL, success);
return;
}
tgl_do_send_code_result_auth(TLS, username, (int)strlen(username), conn->hash,
(int)strlen (conn->hash), code, (int)strlen (code), first,
(int)strlen (first), last, (int)strlen (last),
code_auth_receive_result, NULL);
}
static void request_name_and_code (struct tgl_state *TLS) {
debug ("Phone is not registered, registering...");
connection_data *conn = TLS->ev_base;
PurpleRequestFields* fields = purple_request_fields_new();
PurpleRequestField* field = 0;
PurpleRequestFieldGroup* group = purple_request_field_group_new("Registration");
field = purple_request_field_string_new("first_name", "First Name", "", 0);
purple_request_field_group_add_field(group, field);
field = purple_request_field_string_new("last_name", "Last Name", "", 0);
purple_request_field_group_add_field(group, field);
purple_request_fields_add_group(fields, group);
group = purple_request_field_group_new("Authorization");
field = purple_request_field_string_new("code", "Telegram Code", "", 0);
purple_request_field_group_add_field(group, field);
purple_request_fields_add_group(fields, group);
if (!purple_request_fields (conn->gc, "Register", "Please register your phone number.", NULL, fields, "Ok",
G_CALLBACK( request_name_code_entered ), "Cancel", NULL, conn->pa, NULL, NULL, conn->gc)) {
// purple_request API not available
const char *error = "Phone number is not registered, please register your phone on a different client.";
purple_connection_error_reason (conn->gc, PURPLE_CONNECTION_ERROR_AUTHENTICATION_FAILED, error);
purple_notify_error(_telegram_protocol, "Not Registered", "Not Registered", error);
}
}
static void request_password_entered (struct request_password_data *data, PurpleRequestFields* fields) {
const char* pass = purple_request_fields_get_string (fields, "password");
data->callback (data->TLS, pass, data->arg);
free (data);
}
void request_password (struct tgl_state *TLS,
void (*callback)(struct tgl_state *TLS, const char *string, void *arg),
void *arg) {
connection_data *conn = TLS->ev_base;
struct request_password_data *data = malloc (sizeof(struct request_password_data));
data->TLS = TLS;
data->arg = arg;
data->callback = callback;
PurpleRequestFields* fields = purple_request_fields_new();
PurpleRequestField* field = NULL;
PurpleRequestFieldGroup* group = purple_request_field_group_new ("");
field = purple_request_field_string_new ("password", "Password", "", 0);
purple_request_field_string_set_masked (field, TRUE);
purple_request_field_group_add_field (group, field);
purple_request_fields_add_group (fields, group);
if (!purple_request_fields (conn->gc, "Password needed", "Enter password for two factor authentication",
NULL, fields, "Ok", G_CALLBACK(request_password_entered), "Cancel", NULL, conn->pa,
NULL, NULL, data)) {
const char *error = "No password for two factor authentication, enter it in extended settings.";
purple_connection_error_reason (conn->gc, PURPLE_CONNECTION_ERROR_AUTHENTICATION_FAILED, error);
purple_notify_error (_telegram_protocol, "Password invalid", "Password invalid", error);
}
}
void write_secret_chat_gw (struct tgl_state *TLS, void *extra, int success, struct tgl_secret_chat *E) {
if (!success) { return; }
write_secret_chat_file (TLS);
}
static void accept_secret_chat_cb (gpointer _data, const gchar *code) {
struct accept_secret_chat_data *data = _data;
tgl_do_accept_encr_chat_request (data->TLS, data->U, write_secret_chat_gw, 0);
g_free (data);
}
static void decline_secret_chat_cb (gpointer _data, const gchar *code) {
struct accept_secret_chat_data *data = _data;
bl_do_encr_chat_delete (data->TLS, data->U);
purple_blist_remove_buddy (p2tgl_buddy_find(data->TLS, data->U->id));
g_free (data);
}
void request_accept_secret_chat (struct tgl_state *TLS, struct tgl_secret_chat *U) {
connection_data *conn = TLS->ev_base;
PurpleBuddy *who = p2tgl_buddy_find (TLS, TGL_MK_USER (U->user_id));
struct accept_secret_chat_data *data = g_new (struct accept_secret_chat_data, 1);
data->TLS = TLS;
data->U = U;
gchar *message = g_strdup_printf ("Accept Secret Chat '%s'?", U->print_name);
purple_request_accept_cancel (conn->gc, "Secret Chat", message, "Secret chats can only have one "
"end point. If you accept a secret chat on this device, its messages will "
"not be available anywhere else. If you decline, you can accept"
" the chat on other devices.", 0, conn->pa, who->name, NULL, data,
G_CALLBACK(accept_secret_chat_cb), G_CALLBACK(decline_secret_chat_cb));
g_free (message);
}
static void sign_in_callback (struct tgl_state *TLS, void *extra, int success, int registered, const char *mhash) {
connection_data *conn = TLS->ev_base;
if (!error_if_val_false (TLS, success, "Invalid phone number",
"Please enter only numbers in the international phone number format, "
"a leading + following by the country prefix and the phone number.\n"
"Do not use any other special chars.")) {
conn->hash = strdup (mhash);
if (registered) {
request_code (TLS);
void tgp_create_group_chat_by_usernames (struct tgl_state *TLS, const char *title, const char **users,
int num_users, int use_print_names) {
tgl_peer_id_t ids[num_users + 1];
int i, j = 0;
ids[j++] = TLS->our_id;
for (i = 0; i < num_users; i++) if (str_not_empty (users[i])) {
tgl_peer_t *P = NULL;
if (use_print_names) {
// used by Adium autocompletion that is based on print_names
P = tgl_peer_get_by_name (TLS, users[i]);
} else {
request_name_and_code (TLS);
P = tgp_blist_lookup_peer_get (TLS, users[i]);
}
if (P && tgl_get_peer_id (P->id) != tgl_get_peer_id (TLS->our_id)) {
debug ("Adding %s: %d", P->print_name, tgl_get_peer_id (P->id));
ids[j++] = P->id;
} else {
debug ("User %s not found in peer list", users[j]);
}
}
}
static void telegram_send_sms (struct tgl_state *TLS) {
if (tgl_signed_dc (TLS, TLS->DC_working)) {
telegram_export_authorization (TLS);
return;
}
connection_data *conn = TLS->ev_base;
char const *username = purple_account_get_username(conn->pa);
tgl_do_send_code (TLS, username, (int) strlen(username), sign_in_callback, NULL);
}
static int all_authorized (struct tgl_state *TLS) {
int i;
for (i = 0; i <= TLS->max_dc_num; i++) if (TLS->DC_list[i]) {
if (!tgl_authorized_dc (TLS, TLS->DC_list[i])) {
return 0;
}
}
return 1;
}
static int check_all_authorized (gpointer arg) {
struct tgl_state *TLS = arg;
if (all_authorized (TLS)) {
((connection_data *)TLS->ev_base)->login_timer = 0;
telegram_send_sms (TLS);
return FALSE;
if (j > 1) {
tgl_do_create_group_chat (TLS, j, ids, title, (int) strlen(title),
tgp_notify_on_error_gw, g_strdup (title));
} else {
return TRUE;
purple_notify_message (_telegram_protocol, PURPLE_NOTIFY_MSG_INFO, _("Couldn't create group"),
_("Please select at least one other user."), NULL, NULL, NULL);
}
}
void telegram_login (struct tgl_state *TLS) {
connection_data *conn = TLS->ev_base;
read_auth_file (TLS);
read_state_file (TLS);
read_secret_chat_file (TLS);
if (all_authorized (TLS)) {
telegram_send_sms (TLS);
return;
}
conn->login_timer = purple_timeout_add (100, check_all_authorized, TLS);
}
/**
* This function generates a png image to visualize the sha1 key from an encrypted chat.
@ -692,7 +525,7 @@ int tgp_visualize_key (struct tgl_state *TLS, unsigned char* sha1_key) {
int offset = bitpointer / 8;
int shiftOffset = bitpointer % 8;
int val = sha1_key[offset + 3] << 24 | sha1_key[offset + 2] << 16 | sha1_key[offset + 1] << 8 | sha1_key[offset];
idx = abs((val >> shiftOffset) & 3) % 4;
idx = abs ((val >> shiftOffset) & 3) % 4;
bitpointer += 2;
unsigned offset_x = x * 4 * (img_size / 8);
for (i = 0; i < img_size / 8; i++)
@ -701,23 +534,27 @@ int tgp_visualize_key (struct tgl_state *TLS, unsigned char* sha1_key) {
for (j = 0; j < img_size / 8; j++)
{
unsigned off_x = offset_x + j * 4;
image[off_y + off_x + 0] = (colors[idx] >> 16) & 0xFF;
image[off_y + off_x + 0] = colors[idx] & 0xFF;
image[off_y + off_x + 1] = (colors[idx] >> 8) & 0xFF;
image[off_y + off_x + 2] = colors[idx] & 0xFF;
image[off_y + off_x + 2] = (colors[idx] >> 16) & 0xFF;
image[off_y + off_x + 3] = 0xFF;
}
}
}
}
unsigned char* png;
size_t pngsize;
unsigned error = lodepng_encode32(&png, &pngsize, image, img_size, img_size);
int imgStoreId = -1;
if(!error)
{
imgStoreId = purple_imgstore_add_with_id (png, pngsize, NULL);
used_images_add ((connection_data*)TLS->ev_base, imgStoreId);
}
g_free(image);
int imgStoreId = p2tgl_imgstore_add_with_id_raw(image, img_size, img_size);
used_images_add ((connection_data*)TLS->ev_base, imgStoreId);
g_free (image);
return imgStoreId;
}
void tgp_notify_on_error_gw (struct tgl_state *TLS, void *extra, int success) {
if (!success) {
char *errormsg = g_strdup_printf ("%d: %s", TLS->error_code, TLS->error);
failure (errormsg);
purple_notify_message (_telegram_protocol, PURPLE_NOTIFY_MSG_ERROR, _("Query Failed"),
errormsg, NULL, NULL, NULL);
g_free (errormsg);
return;
}
}

View file

@ -15,19 +15,21 @@
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA
Copyright Matthias Jentsch, Vitaly Valtman, Christopher Althaus, Markus Endres 2014-2015
Copyright Matthias Jentsch, Vitaly Valtman, Christopher Althaus, Ben Wiederhake 2014-2015
*/
#ifndef __TELEGRAM_BASE_H__
#define __TELEGRAM_BASE_H__
#include "telegram-purple.h"
struct request_password_data {
struct tgl_state *TLS;
void (*callback)(struct tgl_state *TLS, const char *string, void *arg);
void *arg;
struct rsa_pubkey {
unsigned int e;
unsigned int n_len;
unsigned char *n_raw;
};
gboolean read_pubkey_file (const char *name, struct rsa_pubkey *dst);
void read_state_file (struct tgl_state *TLS);
void read_auth_file (struct tgl_state *TLS);
void write_auth_file (struct tgl_state *TLS);
@ -37,16 +39,14 @@ void read_secret_chat_file (struct tgl_state *TLS);
void write_secret_chat_file (struct tgl_state *TLS);
void write_secret_chat_gw (struct tgl_state *TLS, void *extra, int success, struct tgl_secret_chat *E);
void telegram_login (struct tgl_state *TLS);
void request_code_entered (gpointer data, const gchar *code);
void request_password (struct tgl_state *TLS, void (*callback)(struct tgl_state *TLS, const char *string, void *arg), void *arg);
void request_accept_secret_chat (struct tgl_state *TLS, struct tgl_secret_chat *U);
gchar *get_config_dir (struct tgl_state *TLS, char const *username);
gchar *get_config_dir (char const *username);
gchar *get_user_pk_path ();
gchar *get_download_dir (struct tgl_state *TLS);
void assert_file_exists (PurpleConnection *gc, const char *filepath, const char *format);
int tgp_visualize_key(struct tgl_state *TLS, unsigned char* sha1_key);
int tgp_visualize_key (struct tgl_state *TLS, unsigned char* sha1_key);
void tgp_create_group_chat_by_usernames (struct tgl_state *TLS, const char *title,
const char *users[], int num_users, int print_names);
void tgp_notify_on_error_gw (struct tgl_state *TLS, void *extra, int success);
int tgp_error_if_false (struct tgl_state *TLS, int val, const char *cause, const char *msg);
#endif

1188
telegram-purple.c Executable file → Normal file

File diff suppressed because it is too large Load diff

View file

@ -15,30 +15,61 @@
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA
Copyright Matthias Jentsch, Vitaly Valtman, Christopher Althaus, Markus Endres 2014-2015
Copyright Matthias Jentsch, Vitaly Valtman, Christopher Althaus, Ben Wiederhake 2014-2015
*/
#ifndef __TG_PURPLE_H__
#define __TG_PURPLE_H__
#ifdef HAVE_CONFIG_H
# include "config.h"
#endif
// Define macros for gettext translation, ENABLE_NLS should be set if configure has detected
// libintl.h. If this is not the case a dummy macro is defined to bypass the translation functions
#ifdef ENABLE_NLS
# include <glib/gi18n-lib.h>
# define P_(Singular,Plural,N) ((char *) g_dngettext (GETTEXT_PACKAGE, Singular, Plural, N))
#else
# define _(String) String
# define P_(Singular,Plural,N) Plural
# define N_(String) String
# define gettext(String) String
#endif
#include <tgl.h>
#include <tgl-binlog.h>
#include <tgl-queries.h>
#include <tgl-structures.h>
#include <glib.h>
#include <purple.h>
#include "telegram-base.h"
#include "tgp-blist.h"
#include "tgp-structs.h"
#include "tgp-2prpl.h"
#include "tgp-net.h"
#include "tgp-timers.h"
#include "tgp-utils.h"
#include "tgp-chat.h"
#include "tgp-ft.h"
#include "tgp-msg.h"
#include "tgp-request.h"
#include "tgp-info.h"
#include "msglog.h"
#define PLUGIN_ID "prpl-telegram"
#define TG_AUTHOR "Matthias Jentsch <mtthsjntsch@gmail.com>, Vitaly Valtman, Christopher Althaus <althaus.christopher@gmail.com>, Markus Endres <endresma45241@th-nuernberg.de>. Based on libtgl by Vitaly Valtman."
#define TG_DESCRIPTION "Telegram protocol."
#define TG_BUILD "12"
#define PLUGIN_AUTHOR "Matthias Jentsch <mtthsjntsch@gmail.com>\n\t\t\tVitaly Valtman\n\t\t\tBen Wiederhake\n\t\t\tChristopher Althaus <althaus.christopher@gmail.com>"
#include <notify.h>
#include <plugin.h>
#include <version.h>
#include <account.h>
#include <connection.h>
#define TGP_APP_HASH "99428c722d0ed59b9cd844e4577cb4bb"
#define TGP_APP_ID 16154
#define TGP_MAX_MSG_SIZE 4096
#define TGP_DEFAULT_MAX_MSG_SPLIT_COUNT 4
#define TGP_DEFAULT_MEDIA_SIZE 32768
#define TGP_KEY_MEDIA_SIZE "media-size-threshold"
#define TGP_KEY_PASSWORD_TWO_FACTOR "password-two-factor"
#define TGP_DEFAULT_ACCEPT_SECRET_CHATS "ask"
@ -50,8 +81,8 @@
#define TGP_DEFAULT_HISTORY_RETRIEVAL_THRESHOLD 14
#define TGP_KEY_HISTORY_RETRIEVAL_THRESHOLD "history-retrieve-days"
#define TGP_KEY_HISTORY_SYNC_ALL "history-sync-all"
#define TGP_DEFAULT_HISTORY_SYNC_ALL FALSE
#define TGP_DEFAULT_JOIN_GROUP_CHATS TRUE
#define TGP_KEY_JOIN_GROUP_CHATS "auto-join-group-chats"
#define TGP_DEFAULT_DISPLAY_READ_NOTIFICATIONS FALSE
#define TGP_KEY_DISPLAY_READ_NOTIFICATIONS "display-read-notifications"
@ -59,10 +90,21 @@
#define TGP_DEFAULT_SEND_READ_NOTIFICATIONS TRUE
#define TGP_KEY_SEND_READ_NOTIFICATIONS "send-read-notifications"
void on_chat_get_info (struct tgl_state *TLS, void *extra, int success, struct tgl_chat *C);
void on_ready (struct tgl_state *TLS);
#define TGP_DEFAULT_CHANNEL_MEMBERS 500
#define TGP_KEY_CHANNEL_MEMBERS "channel-member-count"
#define TGP_KEY_RESET_AUTH "reset-authorization"
#define TGP_CHANNEL_HISTORY_LIMIT 500
extern const char *pk_path;
extern const char *user_pk_filename;
extern const char *config_dir;
extern PurplePlugin *_telegram_protocol;
void import_chat_link (struct tgl_state *TLS, const char *link);
void export_chat_link_by_name (struct tgl_state *TLS, const char *name);
void leave_and_delete_chat (struct tgl_state *TLS, tgl_peer_t *P);
void leave_and_delete_chat_by_name (struct tgl_state *TLS, const char *name);
void channel_load_photo (struct tgl_state *TLS, void *extra, int success, struct tgl_channel *C);
#endif

130
telegram-purple.nsi Normal file
View file

@ -0,0 +1,130 @@
; This file is part of telegram-purple
;
; This program is free software; you can redistribute it and/or modify
; it under the terms of the GNU General Public License as published by
; the Free Software Foundation; either version 2 of the License, or
; (at your option) any later version.
;
; This program is distributed in the hope that it will be useful,
; but WITHOUT ANY WARRANTY; without even the implied warranty of
; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
; GNU General Public License for more details.
;
; You should have received a copy of the GNU General Public License
; along with this program; if not, write to the Free Software
; Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA
;
; Copyright Matthias Jentsch, Eion Robb 2014-2015
; Script based on the Skype4Pidgin and Off-the-Record Messaging NSI files
SetCompress off
; todo: SetBrandingImage
; HM NIS Edit Wizard helper defines
!define PRODUCT_NAME "telegram-purple"
!define PRODUCT_VERSION "${PLUGIN_VERSION}"
!define PRODUCT_PUBLISHER "The telegram-purple team"
!define PRODUCT_WEB_SITE "https://github.com/majn/telegram-purple"
!define PRODUCT_UNINST_KEY "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_NAME}"
!define PRODUCT_UNINST_ROOT_KEY "HKLM"
; MUI 1.67 compatible ------
!include "MUI.nsh"
; MUI Settings
!define MUI_ABORTWARNING
!define MUI_ICON "${NSISDIR}\Contrib\Graphics\Icons\modern-install.ico"
!define MUI_UNICON "${NSISDIR}\Contrib\Graphics\Icons\modern-uninstall.ico"
; Welcome page
!insertmacro MUI_PAGE_WELCOME
; License page
!insertmacro MUI_PAGE_LICENSE "COPYING"
; Instfiles page
!insertmacro MUI_PAGE_INSTFILES
!define MUI_FINISHPAGE_RUN
!define MUI_FINISHPAGE_RUN_TEXT "Run Pidgin"
!define MUI_FINISHPAGE_RUN_FUNCTION "RunPidgin"
!insertmacro MUI_PAGE_FINISH
; Uninstaller pages
;!insertmacro MUI_UNPAGE_INSTFILES
; Language files
!insertmacro MUI_LANGUAGE "English"
; MUI end ------
Name "${PRODUCT_NAME} ${PRODUCT_VERSION}"
OutFile "${PRODUCT_NAME}-${PRODUCT_VERSION}.exe"
Var "PidginDir"
ShowInstDetails show
ShowUnInstDetails show
Section "MainSection" SEC01
;Check for pidgin installation
Call GetPidginInstPath
SetOverwrite try
SetOutPath "$PidginDir\pixmaps\pidgin"
File "/oname=protocols\16\telegram.png" "imgs\telegram16.png"
File "/oname=protocols\22\telegram.png" "imgs\telegram22.png"
File "/oname=protocols\48\telegram.png" "imgs\telegram48.png"
SetOverwrite try
copy:
ClearErrors
Delete "$PidginDir\plugins\${PRPL_NAME}"
IfErrors dllbusy
SetOutPath "$PidginDir\plugins"
File "bin\${PRPL_NAME}"
Goto after_copy
dllbusy:
MessageBox MB_RETRYCANCEL "${PRPL_NAME} is busy. Please close Pidgin (including tray icon) and try again" IDCANCEL cancel
Goto copy
cancel:
Abort "Installation of telegram-purple aborted"
after_copy:
SetOutPath "$PidginDir\locale"
File /nonfatal "/oname=bg\LC_MESSAGES\telegram-purple.mo" "po\bg.mo"
File /nonfatal "/oname=cs_CZ\LC_MESSAGES\telegram-purple.mo" "po\cs_CZ.mo"
File /nonfatal "/oname=de_DE\LC_MESSAGES\telegram-purple.mo" "po\de_DE.mo"
File /nonfatal "/oname=es_AR\LC_MESSAGES\telegram-purple.mo" "po\es_AR.mo"
File /nonfatal "/oname=fr\LC_MESSAGES\telegram-purple.mo" "po\fr.mo"
File /nonfatal "/oname=it_IT\LC_MESSAGES\telegram-purple.mo" "po\it_IT.mo"
File /nonfatal "/oname=nl\LC_MESSAGES\telegram-purple.mo" "po\nl.mo"
File /nonfatal "/oname=pl_PL\LC_MESSAGES\telegram-purple.mo" "po\pl_PL.mo"
File /nonfatal "/oname=ru_RU\LC_MESSAGES\telegram-purple.mo" "po\ru_RU.mo"
File /nonfatal "/oname=sq\LC_MESSAGES\telegram-purple.mo" "po\sq.mo"
File /nonfatal "/oname=uk\LC_MESSAGES\telegram-purple.mo" "po\uk.mo"
SetOutPath "$PidginDir"
File "/oname=server.tglpub" "tg-server.tglpub"
File "${WIN32_DEV_TOP}\libgpg-error-1.12-2\bin\libgpg-error-0.dll"
File "${WIN32_DEV_TOP}\libgcrypt-1.6.3\bin\libgcrypt-20.dll"
File "${WIN32_DEV_TOP}\libwebp-0.4.3-1\bin\libwebp-5.dll"
File "${WIN32_DEV_TOP}\mingw\bin\libgcc_s_sjlj-1.dll"
SectionEnd
Function GetPidginInstPath
Push $0
ReadRegStr $0 HKLM "Software\pidgin" ""
IfFileExists "$0\pidgin.exe" cont
ReadRegStr $0 HKCU "Software\pidgin" ""
IfFileExists "$0\pidgin.exe" cont
MessageBox MB_OK|MB_ICONINFORMATION "Failed to find Pidgin installation."
Abort "Failed to find Pidgin installation. Please install Pidgin first."
cont:
StrCpy $PidginDir $0
FunctionEnd
Function RunPidgin
ExecShell "" "$PidginDir\pidgin.exe"
FunctionEnd

14
telegram-purple.nsi.awk Normal file
View file

@ -0,0 +1,14 @@
{
if (match($0,"%")) {
do {
prev=lang;
getline lang<"po/LINGUAS";
l=$0;
gsub("%",lang,l);
if (prev!=lang) {print l}
} while (prev!=lang);
close("po/LINGUAS")
} else {
print $0
}
}

120
telegram-purple.nsi.awk-in Normal file
View file

@ -0,0 +1,120 @@
; This file is part of telegram-purple
;
; This program is free software; you can redistribute it and/or modify
; it under the terms of the GNU General Public License as published by
; the Free Software Foundation; either version 2 of the License, or
; (at your option) any later version.
;
; This program is distributed in the hope that it will be useful,
; but WITHOUT ANY WARRANTY; without even the implied warranty of
; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
; GNU General Public License for more details.
;
; You should have received a copy of the GNU General Public License
; along with this program; if not, write to the Free Software
; Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA
;
; Copyright Matthias Jentsch, Eion Robb 2014-2015
; Script based on the Skype4Pidgin and Off-the-Record Messaging NSI files
SetCompress off
; todo: SetBrandingImage
; HM NIS Edit Wizard helper defines
!define PRODUCT_NAME "telegram-purple"
!define PRODUCT_VERSION "${PLUGIN_VERSION}"
!define PRODUCT_PUBLISHER "The telegram-purple team"
!define PRODUCT_WEB_SITE "https://github.com/majn/telegram-purple"
!define PRODUCT_UNINST_KEY "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_NAME}"
!define PRODUCT_UNINST_ROOT_KEY "HKLM"
; MUI 1.67 compatible ------
!include "MUI.nsh"
; MUI Settings
!define MUI_ABORTWARNING
!define MUI_ICON "${NSISDIR}\Contrib\Graphics\Icons\modern-install.ico"
!define MUI_UNICON "${NSISDIR}\Contrib\Graphics\Icons\modern-uninstall.ico"
; Welcome page
!insertmacro MUI_PAGE_WELCOME
; License page
!insertmacro MUI_PAGE_LICENSE "COPYING"
; Instfiles page
!insertmacro MUI_PAGE_INSTFILES
!define MUI_FINISHPAGE_RUN
!define MUI_FINISHPAGE_RUN_TEXT "Run Pidgin"
!define MUI_FINISHPAGE_RUN_FUNCTION "RunPidgin"
!insertmacro MUI_PAGE_FINISH
; Uninstaller pages
;!insertmacro MUI_UNPAGE_INSTFILES
; Language files
!insertmacro MUI_LANGUAGE "English"
; MUI end ------
Name "${PRODUCT_NAME} ${PRODUCT_VERSION}"
OutFile "${PRODUCT_NAME}-${PRODUCT_VERSION}.exe"
Var "PidginDir"
ShowInstDetails show
ShowUnInstDetails show
Section "MainSection" SEC01
;Check for pidgin installation
Call GetPidginInstPath
SetOverwrite try
SetOutPath "$PidginDir\pixmaps\pidgin"
File "/oname=protocols\16\telegram.png" "imgs\telegram16.png"
File "/oname=protocols\22\telegram.png" "imgs\telegram22.png"
File "/oname=protocols\48\telegram.png" "imgs\telegram48.png"
SetOverwrite try
copy:
ClearErrors
Delete "$PidginDir\plugins\${PRPL_NAME}"
IfErrors dllbusy
SetOutPath "$PidginDir\plugins"
File "bin\${PRPL_NAME}"
Goto after_copy
dllbusy:
MessageBox MB_RETRYCANCEL "${PRPL_NAME} is busy. Please close Pidgin (including tray icon) and try again" IDCANCEL cancel
Goto copy
cancel:
Abort "Installation of telegram-purple aborted"
after_copy:
SetOutPath "$PidginDir\locale"
File /nonfatal "/oname=%\LC_MESSAGES\telegram-purple.mo" "po\%.mo"
SetOutPath "$PidginDir"
File "/oname=server.tglpub" "tg-server.tglpub"
File "${WIN32_DEV_TOP}\libgpg-error-1.12-2\bin\libgpg-error-0.dll"
File "${WIN32_DEV_TOP}\libgcrypt-1.6.3\bin\libgcrypt-20.dll"
File "${WIN32_DEV_TOP}\libwebp-0.4.3-1\bin\libwebp-5.dll"
File "${WIN32_DEV_TOP}\mingw\bin\libgcc_s_sjlj-1.dll"
SectionEnd
Function GetPidginInstPath
Push $0
ReadRegStr $0 HKLM "Software\pidgin" ""
IfFileExists "$0\pidgin.exe" cont
ReadRegStr $0 HKCU "Software\pidgin" ""
IfFileExists "$0\pidgin.exe" cont
MessageBox MB_OK|MB_ICONINFORMATION "Failed to find Pidgin installation."
Abort "Failed to find Pidgin installation. Please install Pidgin first."
cont:
StrCpy $PidginDir $0
FunctionEnd
Function RunPidgin
ExecShell "" "$PidginDir\pidgin.exe"
FunctionEnd

2
test/.gitignore vendored Normal file
View file

@ -0,0 +1,2 @@
/bin
/tmp

25
test/Makefile Normal file
View file

@ -0,0 +1,25 @@
PLUGIN_TESTS:=probetest loadtest
PLUGIN_TEST_BINS:=$(addprefix test/bin/,${PLUGIN_TESTS})
test/bin:
mkdir -p $@
test/tmp/%:
mkdir -p $@
test/bin/%: test/%.c test/bin bin/telegram-purple.so
${CC} ${CFLAGS} ${CPPFLAGS} -I ${srcdir}/tgl -o $@ $< ${LDFLAGS}
.PHONY: ${PLUGIN_TESTS}
${PLUGIN_TESTS}: %: test/bin/% test/tmp/user
$< bin/telegram-purple.so
.PHONY: check
check: ${PLUGIN_TESTS} test/tmp/user
.PHONY: recheck
recheck: clean-test check
.PHONY: clean-test
clean-test:
rm -rf test/bin test/tmp

286
test/loadtest.c Normal file
View file

@ -0,0 +1,286 @@
/*
This file is part of telegram-purple
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA
Copyright Ben Wiederhake 2016, Purple developers 2007-2015
Derived from the nullclient.c example at
https://github.com/Tasssadar/libpurple/blob/master/example/nullclient.c
*/
#include <assert.h>
#include <stdio.h>
#include <unistd.h>
#include <glib.h>
#include <purple.h>
#include <signal.h>
#include <string.h>
#include "../commit.h"
#include "../telegram-purple.h"
// The following eventloop functions are used in both pidgin and purple-text. If your application uses glib mainloop, you can safely use this verbatim.
#define PURPLE_GLIB_READ_COND (G_IO_IN | G_IO_HUP | G_IO_ERR)
#define PURPLE_GLIB_WRITE_COND (G_IO_OUT | G_IO_HUP | G_IO_ERR | G_IO_NVAL)
typedef struct TdfGLibIOClosure {
PurpleInputFunction function;
guint result;
gpointer data;
} TdfGLibIOClosure;
typedef struct TdfAccountRequestInfo {
PurpleAccountRequestType type;
PurpleAccount *account;
void *ui_handle;
char *user;
gpointer userdata;
PurpleAccountRequestAuthorizationCb auth_cb;
PurpleAccountRequestAuthorizationCb deny_cb;
guint ref;
} TdfAccountRequestInfo;
static void tdf_glib_io_destroy (gpointer data) {
g_free (data);
}
static gboolean tdf_glib_io_invoke (GIOChannel *source, GIOCondition condition, gpointer data) {
TdfGLibIOClosure *closure = data;
PurpleInputCondition purple_cond = 0;
if (condition & PURPLE_GLIB_READ_COND)
purple_cond |= PURPLE_INPUT_READ;
if (condition & PURPLE_GLIB_WRITE_COND)
purple_cond |= PURPLE_INPUT_WRITE;
closure->function (closure->data, g_io_channel_unix_get_fd (source), purple_cond);
return TRUE;
}
static guint tdf_glib_input_add (gint fd, PurpleInputCondition condition, PurpleInputFunction function, gpointer data) {
TdfGLibIOClosure *closure = g_new0(TdfGLibIOClosure, 1);
GIOChannel *channel;
GIOCondition cond = 0;
closure->function = function;
closure->data = data;
if (condition & PURPLE_INPUT_READ)
cond |= PURPLE_GLIB_READ_COND;
if (condition & PURPLE_INPUT_WRITE)
cond |= PURPLE_GLIB_WRITE_COND;
channel = g_io_channel_unix_new (fd);
closure->result = g_io_add_watch_full (channel, G_PRIORITY_DEFAULT, cond, tdf_glib_io_invoke, closure, tdf_glib_io_destroy);
g_io_channel_unref (channel);
return closure->result;
}
static PurpleEventLoopUiOps tdf_glib_eventloop_ops = {
g_timeout_add,
g_source_remove,
tdf_glib_input_add,
g_source_remove,
NULL,
#if GLIB_CHECK_VERSION(2,14,0)
g_timeout_add_seconds,
#else
NULL,
#endif
// padding
NULL,
NULL,
NULL
};
// End of the eventloop functions.
static PurpleConnectionUiOps connection_uiops = {
NULL, // connect_progress
NULL, // connected
NULL, // disconnected
NULL, // notice
NULL, // report_disconnect
NULL, // network_connected
NULL, // network_disconnected
NULL, // report_disconnect_reason
// padding
NULL,
NULL,
NULL
};
static void tdf_init (void) {
// This should initialize the UI components for all the modules.
purple_connections_set_ui_ops (&connection_uiops);
}
static PurpleCoreUiOps tdf_core_uiops = {
NULL,
NULL,
tdf_init,
NULL,
// padding
NULL,
NULL,
NULL,
NULL
};
PurplePlugin *tgp = NULL;
static void display_search_paths (GList *elem) {
printf ("Search paths:");
for (; elem; elem = elem->next) {
printf (" %s", (char *)elem->data);
}
printf ("\n");
}
static void tdf_inject_plugin (void) {
printf ("Injecting our module into purple_plugins_* ...\n");
purple_plugins_init ();
GList *search_paths = purple_plugins_get_search_paths ();
assert (!search_paths->prev && !search_paths->next && search_paths->data);
GList *new_paths = g_list_append (search_paths, g_strdup ("bin/"));
assert (new_paths == search_paths);
// Load "my" path before the default.
assert (search_paths->next && search_paths->next->data);
{
// swap(search_paths->data, search_paths->next->data);
gchar* tmp = search_paths->data;
search_paths->data = search_paths->next->data;
search_paths->next->data = tmp;
}
}
gboolean tdf_is_in_ci (void) {
gchar* envvar = getenv ("CONTINUOUS_INTEGRATION");
return envvar && g_str_equal ("true", envvar);
}
static void init_libpurple (void) {
// Set a custom user directory (optional)
purple_util_set_user_dir ("test/tmp/user");
// We *do* want debugging. However, this is just too much noise.
// Then again, this doesn't hurt if Travis does it. Query the environment to check whether we're in CI or not.
purple_debug_set_enabled (tdf_is_in_ci ());
/* Set the core-uiops, which is used to
* - initialize the ui specific preferences.
* - initialize the debug ui.
* - initialize the ui components for all the modules.
* - uninitialize the ui components for all the modules when the core terminates.
*/
purple_core_set_ui_ops (&tdf_core_uiops);
// Set the uiops for the eventloop. Since our client is glib-based, you can safely copy this verbatim. */
purple_eventloop_set_ui_ops (&tdf_glib_eventloop_ops);
tdf_inject_plugin ();
display_search_paths (purple_plugins_get_search_paths ());
// Now that all the essential stuff has been set, let's try to init the core.
printf ("Enter purple_core_init ...\n");
if (!purple_core_init ("tgp-dummy")) {
// Initializing the core failed. Terminate.
fprintf (stderr, "libpurple initialization failed. Abort.\n");
abort ();
}
printf ("Core initialized.\n");
// Create and load the buddylist.
purple_set_blist (purple_blist_new ());
// Find our plugin
printf ("Checking version:\n");
tgp = purple_plugins_find_with_id (PLUGIN_ID);
if (!tgp) {
printf ("Huh! Can't find plugin! Expected ID \"" PLUGIN_ID "\"");
abort ();
}
// Make sure we loaded the correct plugin
printf ("This is what we loaded:\n\t\t\tversion: %s\n", tgp->info->version);
gchar *pos = g_strrstr (tgp->info->version, "commit: " GIT_COMMIT);
if (pos == NULL) {
printf ("This is the wrong version, we built for commit %s. Abort!\n", GIT_COMMIT);
abort ();
} else {
printf ("Looks like the right version, because we also expected commit %s.\n", GIT_COMMIT);
}
}
//static void signed_on (PurpleConnection *gc) {
// PurpleAccount *account = purple_connection_get_account (gc);
// printf("Account connected: \"%s\" (%s)\n", purple_account_get_username(account), purple_account_get_protocol_id(account));
//}
//
//static void received_im_msg (PurpleAccount *account, char *sender, char *message, PurpleConversation *conv, PurpleMessageFlags flags) {
// if (conv==NULL) {
// conv = purple_conversation_new(PURPLE_CONV_TYPE_IM, account, sender);
// }
//
// printf("(%s) %s (%s): %s\n", purple_utf8_strftime("%H:%M:%S", NULL), sender, purple_conversation_get_name(conv), message);
//}
//
//static void connect_to_signals(void)
//{
//
// static int handle;
//
// purple_signal_connect(purple_connections_get_handle(), "signed-on", &handle,
// PURPLE_CALLBACK(signed_on), NULL);
//
// purple_signal_connect(purple_conversations_get_handle(), "received-im-msg", &handle,
// PURPLE_CALLBACK(received_im_msg), NULL);
//
//}
int main(int argc, char *argv[])
{
printf ("Running loadtest on %s.\n", argv[1]);
GMainLoop *loop = g_main_loop_new(NULL, FALSE);
/* libpurple's built-in DNS resolution forks processes to perform
* blocking lookups without blocking the main process. It does not
* handle SIGCHLD itself, so if the UI does not you quickly get an army
* of zombie subprocesses marching around.
*/
signal(SIGCHLD, SIG_IGN);
printf ("Enter init_libpurple\n");
init_libpurple ();
printf ("libpurple %s initialized.\n", purple_core_get_version());
// Since we do not yet do anything useful, simply terminate after a few seconds.
purple_timeout_add (2000, purple_core_quit_cb, NULL);
g_timeout_add (4000, (GSourceFunc)g_main_loop_quit, loop);
// connect_to_signals();
// PurpleAccount *account = purple_account_new("YOUR_IM_ACCOUNTS_USERNAME_HERE", "prpl-IM_NETWORK_HERE"); //this could be prpl-aim, prpl-yahoo, prpl-msn, prpl-icq, etc.
// purple_account_set_password(account, "YOUR_IM_ACCOUNTS_PASSWORD_HERE");
// purple_accounts_add(account);
// purple_account_set_enabled(account, UI_ID, TRUE);
g_main_loop_run (loop);
return 0;
}

46
test/probetest.c Normal file
View file

@ -0,0 +1,46 @@
/*
This file is part of telegram-purple
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA
Copyright Ben Wiederhake 2016
*/
#include <assert.h>
#include <stdio.h>
#include <purple.h>
// Just try to probe (pre-load) the plugin. If that's successful, then probably a lot of stuff works.
int main (int argc, char **argv) {
assert(argc == 2);
printf ("Running probetest on %s.\n", argv[1]);
PurplePlugin *tgp = purple_plugin_probe (argv[1]);
if (!tgp) {
printf ("Looks like there was a problem! Aborting.\n");
return 1;
}
printf ("Looks good. Here's what I can read:\n");
PurplePluginInfo *info = tgp->info;
#define BLURB(x) printf (#x " = %s\n", info->x);
BLURB(id)
BLURB(name)
BLURB(version)
BLURB(summary)
BLURB(description)
BLURB(author)
BLURB(homepage)
return 0;
}

View file

@ -1,8 +0,0 @@
-----BEGIN RSA PUBLIC KEY-----
MIIBCgKCAQEAwVACPi9w23mF3tBkdZz+zwrzKOaaQdr01vAbU4E1pvkfj4sqDsm6
lyDONS789sVoD/xCS9Y0hkkC3gtL1tSfTlgCMOOul9lcixlEKzwKENj1Yz/s7daS
an9tqw3bfUV/nqgbhGX81v/+7RFAEd+RwFnK7a+XYl9sluzHRyVVaTTveB2GazTw
Efzk2DWgkBluml8OREmvfraX3bkHZJTKX4EQSjBbbdJ2ZXIsRrYOXfaA+xayEGB+
8hdlLmAjbCVfaigxX0CDqWeR1yFL9kwd9P0NsZRPsmoqVwMbMu7mStFai6aIhc3n
Slv8kg9qv1m6XHVQY3PnEw+QQtqSIXklHwIDAQAB
-----END RSA PUBLIC KEY-----

BIN
tg-server.tglpub Normal file

Binary file not shown.

2
tgl

@ -1 +1 @@
Subproject commit 195b2bcccdefd63282654c4d827315a48b677f97
Subproject commit 3ce5b5d856e537fe4693a99c26b5d17f7200f674

View file

@ -15,44 +15,52 @@
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA
Copyright Matthias Jentsch 2014
Copyright Matthias Jentsch, Ben Wiederhake 2014-2015
*/
#ifdef HAVE_CONFIG_H
#include "config.h"
#endif
#include "telegram-purple.h"
#ifdef HAVE_LIBWEBP
#include <webp/decode.h>
#include "lodepng/lodepng.h"
#endif
#include "telegram-purple.h"
#include "tgp-2prpl.h"
#include "tgp-structs.h"
#include "telegram-purple.h"
#include "tgp-utils.h"
#include "telegram-base.h"
#include <server.h>
#include <tgl.h>
#include <msglog.h>
#include <assert.h>
PurpleAccount *tg_get_acc (struct tgl_state *TLS) {
return (PurpleAccount *) ((connection_data *)TLS->ev_base)->pa;
PurpleAccount *tls_get_pa (struct tgl_state *TLS) {
return tls_get_data (TLS)->pa;
}
PurpleConnection *tg_get_conn (struct tgl_state *TLS) {
return (PurpleConnection *) ((connection_data *)TLS->ev_base)->gc;
PurpleConnection *tls_get_conn (struct tgl_state *TLS) {
return tls_get_data (TLS)->gc;
}
char *p2tgl_strdup_id (tgl_peer_id_t user) {
return g_strdup_printf("%d", tgl_get_peer_id(user));
connection_data *tls_get_data (struct tgl_state *TLS) {
return TLS->ev_base;
}
gchar *p2tgl_strdup_alias (tgl_peer_t *user) {
return g_strdup (user->print_name);
int tls_get_media_threshold (struct tgl_state *TLS) {
return purple_account_get_int (tls_get_pa (TLS),
TGP_KEY_MEDIA_SIZE, TGP_DEFAULT_MEDIA_SIZE) << 10;
}
connection_data *gc_get_data (PurpleConnection *gc) {
return purple_connection_get_protocol_data (gc);
}
struct tgl_state *gc_get_tls (PurpleConnection *gc) {
return ((connection_data *)purple_connection_get_protocol_data (gc))->TLS;
}
connection_data *pa_get_data (PurpleAccount *pa) {
return purple_connection_get_protocol_data (purple_account_get_connection (pa));
}
connection_data *pbn_get_data (PurpleBlistNode *node) {
if (PURPLE_BLIST_NODE_IS_CHAT (node)) {
return pa_get_data (purple_chat_get_account ((PurpleChat *) node));
}
if (PURPLE_BLIST_NODE_IS_BUDDY (node)) {
return pa_get_data (purple_buddy_get_account ((PurpleBuddy *) node));
}
return NULL;
}
int p2tgl_status_is_present (PurpleStatus *status) {
@ -60,373 +68,87 @@ int p2tgl_status_is_present (PurpleStatus *status) {
return !(strcmp (name, "unavailable") == 0 || strcmp (name, "away") == 0);
}
int p2tgl_send_notifications (PurpleAccount *acct) {
int ret = purple_account_get_bool (acct, TGP_KEY_SEND_READ_NOTIFICATIONS, TGP_DEFAULT_SEND_READ_NOTIFICATIONS);
debug ("sending notifications: %d", ret);
return ret;
}
/*
Disclaimer: I stole this function from davidgfnet's whatsapp plugin, all
credit for it goes to him
@see: https://github.com/davidgfnet/whatsapp-purple
*/
static PurpleChat *blist_find_chat_by_hasht_cond (PurpleConnection *gc,
int (*fn)(GHashTable *hasht, void *data), void *data) {
PurpleAccount *account = purple_connection_get_account(gc);
PurpleBlistNode *node = purple_blist_get_root();
GHashTable *hasht;
while (node) {
if (PURPLE_BLIST_NODE_IS_CHAT(node)) {
PurpleChat *ch = PURPLE_CHAT(node);
if (purple_chat_get_account(ch) == account) {
hasht = purple_chat_get_components(ch);
if (fn(hasht, data))
return ch;
}
void tgp_chat_got_in (struct tgl_state *TLS, tgl_peer_t *chat, tgl_peer_id_t from, const char *message,
int flags, time_t when) {
g_return_if_fail(chat);
if (tgp_chat_show (TLS, chat)) {
// channel messages in non-megagroups are always sent by the channel itself
if (tgl_get_peer_type (chat->id) == TGL_PEER_CHANNEL && !(chat->channel.flags & TGLCHF_MEGAGROUP)) {
from = chat->id;
}
node = purple_blist_node_next(node, 0);
serv_got_chat_in (tls_get_conn (TLS), tgl_get_peer_id (chat->id), tgp_blist_lookup_purple_name (TLS, from),
flags, message, when);
} else {
g_warn_if_reached();
}
return NULL;
}
static int hasht_cmp_id(GHashTable *hasht, void *data) {
gpointer id = g_hash_table_lookup(hasht, "id");
if (!id || !data) {
return 0;
}
return !strcmp(id, ((char *)data));
}
PurpleConversation *p2tgl_got_joined_chat (struct tgl_state *TLS, struct tgl_chat *chat) {
connection_data *conn = TLS->ev_base;
gchar *alias = p2tgl_strdup_alias ((tgl_peer_t *)chat);
PurpleConversation *conv = serv_got_joined_chat (conn->gc, tgl_get_peer_id(chat->id), alias);
g_free(alias);
return conv;
}
void p2tgl_got_chat_left (struct tgl_state *TLS, tgl_peer_id_t chat) {
serv_got_chat_left(tg_get_conn(TLS), tgl_get_peer_id(chat));
}
void p2tgl_got_chat_in (struct tgl_state *TLS, tgl_peer_id_t chat, tgl_peer_id_t who,
const char *message, int flags, time_t when) {
char *name = p2tgl_strdup_id (who);
serv_got_chat_in (tg_get_conn(TLS), tgl_get_peer_id (chat), name, flags, message, when);
g_free (name);
}
void p2tgl_got_alias (struct tgl_state *TLS, tgl_peer_id_t who, const char *alias) {
char *name = p2tgl_strdup_id(who);
serv_got_alias(tg_get_conn(TLS), name, alias);
g_free (name);
}
void p2tgl_got_im (struct tgl_state *TLS, tgl_peer_id_t who, const char *msg, int flags, time_t when) {
char *name = p2tgl_strdup_id(who);
serv_got_im(tg_get_conn(TLS), name, msg,flags, when);
g_free (name);
}
void p2tgl_conversation_write (PurpleConversation *conv, tgl_peer_id_t who, const char *message, int flags, int date) {
char *name = p2tgl_strdup_id (who);
purple_conversation_write (conv, name, message, flags, date);
g_free (name);
}
void p2tgl_conv_im_write (PurpleConversation *conv, tgl_peer_id_t who, const char *message, int flags, int date) {
char *name = p2tgl_strdup_id (who);
purple_conv_im_write(purple_conversation_get_im_data(conv), name, message, flags, date);
g_free (name);
}
void p2tgl_got_im_combo (struct tgl_state *TLS, tgl_peer_id_t who, const char *msg, int flags, time_t when) {
connection_data *conn = TLS->ev_base;
/*
Outgoing messages are not well supported in different libpurple clients,
p2tgl_conv_im_write should have the best among different versions. Unfortunately
this causes buggy formatting in Adium, so we don't use this workaround in that case.
if (flags & PURPLE_MESSAGE_SYSTEM) {
tgp_msg_special_out (TLS, msg, who, flags & PURPLE_MESSAGE_NO_LOG);
return;
}
/*
Outgoing messages are not well supported in different libpurple clients,
purple_conv_im_write should have the best among different versions. Unfortunately
this causes buggy formatting in Adium, so we don't use this workaround in that case.
NOTE: Outgoing messages will not work in Adium <= 1.6.0, there is no way to print outgoing
messages in those versions at all.
*/
NOTE: Outgoing messages will not work in Adium <= 1.6.0, there is no way to print outgoing
messages in those versions at all.
*/
#ifndef __ADIUM_
if (flags & PURPLE_MESSAGE_SEND) {
PurpleConversation *conv = p2tgl_find_conversation_with_account (TLS, who);
if (!conv) {
conv = p2tgl_conversation_new(TLS, who);
conv = purple_conversation_new (PURPLE_CONV_TYPE_IM, tls_get_pa (TLS),
tgp_blist_lookup_purple_name (TLS, who));
}
p2tgl_conv_im_write (conv, who, msg, PURPLE_MESSAGE_SEND, when);
purple_conv_im_write (purple_conversation_get_im_data (conv), tgp_blist_lookup_purple_name (TLS, who),
msg, PURPLE_MESSAGE_SEND, when);
return;
}
#endif
p2tgl_got_im (TLS, who, msg, flags, when);
}
void p2tgl_got_typing (struct tgl_state *TLS, tgl_peer_id_t user, int timeout) {
char *who = g_strdup_printf("%d", tgl_get_peer_id(user));
serv_got_typing(tg_get_conn(TLS), who, timeout, PURPLE_TYPING);
g_free(who);
}
PurpleBuddy *p2tgl_buddy_find (struct tgl_state *TLS, tgl_peer_id_t user) {
gchar *name = p2tgl_strdup_id(user);
PurpleBuddy *b = purple_find_buddy (tg_get_acc(TLS), name);
g_free (name);
return b;
serv_got_im (conn->gc, tgp_blist_lookup_purple_name (TLS, who), msg, flags, when);
}
PurpleConversation *p2tgl_find_conversation_with_account (struct tgl_state *TLS, tgl_peer_id_t peer) {
int type = PURPLE_CONV_TYPE_IM;
if (tgl_get_peer_type (peer) == TGL_PEER_CHAT) {
if (tgl_get_peer_type (peer) == TGL_PEER_CHAT || tgl_get_peer_type (peer) == TGL_PEER_CHANNEL) {
type = PURPLE_CONV_TYPE_CHAT;
}
char *who = g_strdup_printf("%d", tgl_get_peer_id(peer));
PurpleConversation *conv = purple_find_conversation_with_account (type, who, tg_get_acc(TLS));
g_free (who);
PurpleConversation *conv = purple_find_conversation_with_account (type,
tgp_blist_lookup_purple_name (TLS, peer), tls_get_pa (TLS));
return conv;
}
PurpleConversation *p2tgl_conversation_new (struct tgl_state *TLS, tgl_peer_id_t who) {
int type = tgl_get_peer_type (who) == TGL_PEER_CHAT ? PURPLE_CONV_TYPE_CHAT : PURPLE_CONV_TYPE_IM;
char *name = p2tgl_strdup_id (who);
PurpleConversation *conv = purple_conversation_new(type, tg_get_acc(TLS), name);
g_free (name);
return conv;
}
PurpleBuddy *p2tgl_buddy_new (struct tgl_state *TLS, tgl_peer_t *user) {
char *alias = p2tgl_strdup_alias (user);
char *name = p2tgl_strdup_id (user->id);
PurpleBuddy *b = purple_buddy_new (tg_get_acc(TLS), name, alias);
g_free (alias);
g_free (name);
return b;
}
PurpleBuddy *p2tgl_buddy_update (struct tgl_state *TLS, tgl_peer_t *user, unsigned flags) {
PurpleBuddy *b = p2tgl_buddy_find (TLS, user->id);
if (!b) {
b = p2tgl_buddy_new (TLS, user);
}
if (flags & (TGL_UPDATE_NAME | TGL_UPDATE_REAL_NAME | TGL_UPDATE_USERNAME)) {
debug ("Update username for id%d (name %s %s)", tgl_get_peer_id (user->id), user->user.first_name, user->user.last_name);
char *alias = p2tgl_strdup_alias (user);
purple_blist_alias_buddy(b, alias);
g_free (alias);
}
return b;
}
void p2tgl_prpl_got_set_status_mobile (struct tgl_state *TLS, tgl_peer_id_t user) {
char *name = p2tgl_strdup_id (user);
purple_prpl_got_user_status (tg_get_acc(TLS), name, "mobile", NULL);
g_free (name);
}
void p2tgl_prpl_got_set_status_offline (struct tgl_state *TLS, tgl_peer_id_t user) {
char *name = p2tgl_strdup_id (user);
purple_prpl_got_user_status (tg_get_acc(TLS), name, "offline", NULL);
g_free (name);
}
void p2tgl_prpl_got_set_status_online (struct tgl_state *TLS, tgl_peer_id_t user) {
char *name = p2tgl_strdup_id (user);
purple_prpl_got_user_status (tg_get_acc(TLS), name, "available", NULL);
g_free (name);
}
void p2tgl_prpl_got_user_status (struct tgl_state *TLS, tgl_peer_id_t user, struct tgl_user_status *status) {
connection_data *data = TLS->ev_base;
if (status->online == 1) {
p2tgl_prpl_got_set_status_online (TLS, user);
purple_prpl_got_user_status (tls_get_pa (TLS), tgp_blist_lookup_purple_name (TLS, user), "available", NULL);
} else {
debug ("%d: when=%d", user.id, status->when);
if (tgp_time_n_days_ago (purple_account_get_int (data->pa, "inactive-days-offline", TGP_DEFAULT_INACTIVE_DAYS_OFFLINE)) > status->when && status->when) {
debug ("%d: when=%d", tgl_get_peer_id (user), status->when);
if (tgp_time_n_days_ago (
purple_account_get_int (data->pa, TGP_KEY_INACTIVE_DAYS_OFFLINE, TGP_DEFAULT_INACTIVE_DAYS_OFFLINE)) > status->when && status->when) {
debug ("offline");
p2tgl_prpl_got_set_status_offline (TLS, user);
}
else {
purple_prpl_got_user_status (tls_get_pa (TLS), tgp_blist_lookup_purple_name (TLS, user), "offline", NULL);
} else {
debug ("mobile");
p2tgl_prpl_got_set_status_mobile (TLS, user);
purple_prpl_got_user_status (tls_get_pa (TLS), tgp_blist_lookup_purple_name (TLS, user), "mobile", NULL);
}
}
}
PurpleChat *p2tgl_blist_find_chat(struct tgl_state *TLS, tgl_peer_id_t chat) {
char *name = p2tgl_strdup_id(chat);
PurpleChat *c = purple_blist_find_chat(tg_get_acc(TLS), name);
g_free (name);
return c;
}
PurpleChat *p2tgl_chat_new (struct tgl_state *TLS, struct tgl_chat *chat) {
gchar *admin = g_strdup_printf("%d", chat->admin_id);
gchar *title = g_strdup(chat->print_title);
gchar *name = p2tgl_strdup_id (chat->id);
GHashTable *ht = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, g_free);
g_hash_table_insert(ht, g_strdup("subject"), title);
g_hash_table_insert(ht, g_strdup("id"), name);
g_hash_table_insert(ht, g_strdup("owner"), admin);
PurpleChat *C = purple_chat_new(tg_get_acc(TLS), chat->title, ht);
return C;
}
PurpleChat *p2tgl_chat_find (struct tgl_state *TLS, tgl_peer_id_t id) {
char *name = p2tgl_strdup_id(id);
PurpleChat *c = blist_find_chat_by_hasht_cond(tg_get_conn(TLS), hasht_cmp_id, name);
g_free(name);
return c;
}
void p2tgl_conv_add_user (PurpleConversation *conv, struct tgl_chat_user user, char *message, int flags, int new_arrival) {
PurpleConvChat *cdata = purple_conversation_get_chat_data(conv);
char *name = g_strdup_printf("%d", user.user_id);
purple_conv_chat_add_user(cdata, name, message, flags, new_arrival);
g_free(name);
}
void p2tgl_connection_set_display_name(struct tgl_state *TLS, tgl_peer_t *user) {
char *name = p2tgl_strdup_alias(user);
purple_connection_set_display_name(tg_get_conn(TLS), name);
g_free(name);
}
void *p2tgl_notify_userinfo(struct tgl_state *TLS, tgl_peer_id_t user, PurpleNotifyUserInfo *user_info, PurpleNotifyCloseCallback cb, gpointer user_data) {
char *name = p2tgl_strdup_id(user);
void *handle = 0;
handle = purple_notify_userinfo(tg_get_conn(TLS), name, user_info, cb, user_data);
g_free(name);
g_free(user_info);
return handle;
}
void p2tgl_blist_alias_buddy (PurpleBuddy *buddy, struct tgl_user *user) {
char *name = p2tgl_strdup_alias ((tgl_peer_t *) user);
purple_blist_alias_buddy (buddy, name);
g_free(name);
}
PurpleNotifyUserInfo *p2tgl_notify_user_info_new (struct tgl_user *U) {
PurpleNotifyUserInfo *info = purple_notify_user_info_new();
if (str_not_empty(U->first_name) && str_not_empty(U->last_name)) {
purple_notify_user_info_add_pair (info, "First name", U->first_name);
purple_notify_user_info_add_pair (info, "Last name", U->last_name);
} else {
purple_notify_user_info_add_pair (info, "Name", U->print_name);
}
if (str_not_empty (U->username)) {
purple_notify_user_info_add_pair (info, "Username", U->username);
}
char *status = tgp_format_user_status (&U->status);
purple_notify_user_info_add_pair (info, "Last seen", status);
g_free (status);
if (str_not_empty (U->phone)) {
char *phone = g_strdup_printf("+%s", U->phone);
purple_notify_user_info_add_pair (info, "Phone", phone);
g_free (phone);
}
return info;
}
PurpleNotifyUserInfo *p2tgl_notify_encrypted_chat_info_new (struct tgl_state *TLS,
struct tgl_secret_chat *secret, struct tgl_user *U) {
PurpleNotifyUserInfo *info = p2tgl_notify_user_info_new (U);
if (secret->state == sc_waiting) {
purple_notify_user_info_add_pair (info, "", "Waiting for user to get online ...");
return info;
}
const char *ttl_key = "Self destructiom timer";
if (secret->ttl) {
char *ttl = g_strdup_printf ("%d", secret->ttl);
purple_notify_user_info_add_pair (info, ttl_key, ttl);
g_free (ttl);
} else {
purple_notify_user_info_add_pair (info, ttl_key, "Off");
}
if (secret->first_key_sha[0]) {
int sha1key_store_id = tgp_visualize_key (TLS, secret->first_key_sha);
if (sha1key_store_id != -1) {
char *ident_icon = format_img_full (sha1key_store_id);
purple_notify_user_info_add_pair (info, "Secret key", ident_icon);
g_free(ident_icon);
}
}
return info;
}
PurpleNotifyUserInfo *p2tgl_notify_peer_info_new (struct tgl_state *TLS, tgl_peer_t *P) {
switch (tgl_get_peer_type (P->id)) {
case TGL_PEER_ENCR_CHAT: {
struct tgl_secret_chat *chat = &P->encr_chat;
tgl_peer_t *partner = tgp_encr_chat_get_partner (TLS, chat);
return p2tgl_notify_encrypted_chat_info_new (TLS, chat, &partner->user);
break;
}
case TGL_PEER_USER:
return p2tgl_notify_user_info_new (&P->user);
break;
default:
return purple_notify_user_info_new ();
}
void p2tgl_conv_add_user (struct tgl_state *TLS, PurpleConversation *conv, int user, char *message, int flags,
int new_arrival) {
const char *name = tgp_blist_lookup_purple_name (TLS, TGL_MK_USER (user));
g_return_if_fail (name);
purple_conv_chat_add_user (purple_conversation_get_chat_data (conv), name, message, flags, new_arrival);
}
int p2tgl_imgstore_add_with_id (const char* filename) {
@ -439,9 +161,36 @@ int p2tgl_imgstore_add_with_id (const char* filename) {
return id;
}
int p2tgl_imgstore_add_with_id_raw (const unsigned char *raw_bgra, unsigned width, unsigned height) {
// Heavily inspired by: https://github.com/EionRobb/pidgin-opensteamworks/blob/master/libsteamworks.cpp#L113
const unsigned char tga_header[] = {
// No ID; no color map; uncompressed true color
0,0,2,
// No color map metadata
0,0,0,0,0,
// No offsets
0,0,0,0,
// Dimensions
width&0xFF,(width/256)&0xFF,height&0xFF,(height/256)&0xFF,
// 32 bits per pixel
32,
// "Origin in upper left-hand corner"
32};
// Will be owned by libpurple imgstore, which uses glib functions for managing memory
const unsigned tga_len = sizeof(tga_header) + width * height * 4;
unsigned char *tga = g_malloc(tga_len);
memcpy(tga, tga_header, sizeof(tga_header));
// From the documentation: "The 4 byte entry contains 1 byte each of blue, green, red, and attribute."
memcpy(tga + sizeof(tga_header), raw_bgra, width * height * 4);
return purple_imgstore_add_with_id (tga, tga_len, NULL);
}
#ifdef HAVE_LIBWEBP
static const int MAX_W = 256;
static const int MAX_H = 256;
int p2tgl_imgstore_add_with_id_webp (const char *filename) {
const uint8_t *data = NULL;
size_t len;
GError *err = NULL;
@ -451,22 +200,35 @@ int p2tgl_imgstore_add_with_id_webp (const char *filename) {
// downscale oversized sticker images displayed in chat, otherwise it would harm readabillity
WebPDecoderConfig config;
WebPInitDecoderConfig (&config);
if (! WebPGetFeatures(data, len, &config.input) == VP8_STATUS_OK) {
if (WebPGetFeatures(data, len, &config.input) != VP8_STATUS_OK) {
warning ("error reading webp bitstream: %s", filename);
g_free ((gchar *)data);
return 0;
}
int H = config.input.height;
int W = config.input.width;
while (H > 256 || W > 256) {
H /= 2;
W /= 2;
config.options.use_scaling = 0;
config.options.scaled_width = config.input.width;
config.options.scaled_height = config.input.height;
if (config.options.scaled_width > MAX_W || config.options.scaled_height > MAX_H) {
const float max_scale_width = MAX_W * 1.0f / config.options.scaled_width;
const float max_scale_height = MAX_H * 1.0f / config.options.scaled_height;
if (max_scale_width < max_scale_height) {
// => the width is most limiting
config.options.scaled_width = MAX_W;
// Can't use ' *= ', because we need to do the multiplication in float
// (or double), and only THEN cast back to int.
config.options.scaled_height = (int) (config.options.scaled_height * max_scale_width);
} else {
// => the height is most limiting
config.options.scaled_height = MAX_H;
// Can't use ' *= ', because we need to do the multiplication in float
// (or double), and only THEN cast back to int.
config.options.scaled_width = (int) (config.options.scaled_width * max_scale_height);
}
config.options.use_scaling = 1;
}
config.options.use_scaling = 1;
config.options.scaled_width = W;
config.options.scaled_height = H;
config.output.colorspace = MODE_RGBA;
if (! WebPDecode(data, len, &config) == VP8_STATUS_OK) {
config.output.colorspace = MODE_BGRA;
if (WebPDecode(data, len, &config) != VP8_STATUS_OK) {
warning ("error decoding webp: %s", filename);
g_free ((gchar *)data);
return 0;
@ -474,35 +236,9 @@ int p2tgl_imgstore_add_with_id_webp (const char *filename) {
g_free ((gchar *)data);
const uint8_t *decoded = config.output.u.RGBA.rgba;
// convert to png
unsigned char* png = NULL;
size_t pnglen;
unsigned error = lodepng_encode32 (&png, &pnglen, decoded, config.options.scaled_width, config.options.scaled_height);
// convert and add
int imgStoreId = p2tgl_imgstore_add_with_id_raw(decoded, config.options.scaled_width, config.options.scaled_height);
WebPFreeDecBuffer (&config.output);
if (error) {
warning ("error encoding webp as png: %s", filename);
return 0;
}
// will be owned by libpurple imgstore, which uses glib functions for managing memory
void *pngdub = g_memdup (png, (guint)pnglen);
free (png);
int imgStoreId = purple_imgstore_add_with_id (pngdub, pnglen, NULL);
return imgStoreId;
}
#endif
void p2tgl_buddy_icons_set_for_user (PurpleAccount *pa, tgl_peer_id_t *id, const char* filename) {
char *who = g_strdup_printf("%d", tgl_get_peer_id(*id));
gchar *data = NULL;
size_t len;
GError *err = NULL;
g_file_get_contents (filename, &data, &len, &err);
purple_buddy_icons_set_for_user (pa, who, data, len, NULL);
g_free (who);
}

Some files were not shown because too many files have changed in this diff Show more