...
 
Commits (420)
[flake8]
ignore =
exclude = .git,__pycache__,.gitlab
max-complexity = 15
builtins=_
\ No newline at end of file
......@@ -7,6 +7,7 @@ syntax: glob
*.pyc
*.pyo
*~
*#
autom4te.cache
data/org.gajim.Gajim.appdata.xml
data/org.gajim.Gajim.desktop
......@@ -19,11 +20,13 @@ po/stamp-it
stamp-h1
Makefile
__pycache__/
.mypy_cache/
build/
dist/
gajim.egg-info/
src/gtk/
win/_build_root
.vscode
syntax: regexp
^config\.*
......
before_script:
- sudo apt-get update -qq && sudo apt-get install -y -qq libtool pkg-config python3-openssl gir1.2-gtk-3.0 python3-gi python3-nbxmpp-nightly pylint3
- sudo apt-get update -qq && sudo apt-get install -y -qq libtool pkg-config gir1.2-gtk-3.0 python3-gi python3-cairo
- sudo apt-get build-dep -y -qq gajim-default-nightly
stages:
- test
- build
run-test:
run-tests:
stage: test
script:
- python3 setup.py test_nogui
- rm -rf civenv-master
- virtualenv --system-site-packages civenv
- . ./civenv/bin/activate
- pip3 install mypy
- pip3 install nbxmpp
- pip3 install pylint==2.1.1
- mypy gajim
- scripts/dev/pylint-ci.sh --jobs=2 gajim
- python3 setup.py test -s test.no_gui
- deactivate
- rm -rf civenv-master
run-pylint:
run-appdata:
stage: test
script:
- pylint3 --additional-builtins=_ --disable=all --enable=E0001,E0011,E0012,E0100,E0101,E0102,E0103,E0104,E0105,E0106,E0107,E0108,E0202,E0221,E0222,E0235,E0501,E0502,E0503,E0602,E0603,E0604,E0701,E0702,E1001,E1002,E1003,E1004,E1111,E1120,E1121,E1122,E1123,E1124,E1125,E1200,E1201,E1205,E1206,E1300,E1301,E1302,E1303,E1304,E1305,E1306,E1310,E1700,E1701,W0102 gajim
- appstream-util validate data/org.gajim.Gajim.appdata.xml.in
run-build:
stage: build
......@@ -44,4 +54,4 @@ run-build:
name: "gajim-default-$CI_COMMIT_REF_NAME-$CI_COMMIT_SHA"
expire_in: 1 week
paths:
- gajim-default-2???-??-??.tar.gz
- gajim-default-$CI_COMMIT_REF_NAME-$CI_COMMIT_SHA.tar.gz
Gajim 1.1.3 (24 April 2019)
New
* Add a mobile phone indicator to the chat window
* Rework HTTPUpload dialog
* Add a "paste as quote" option to the message input
Bug fixes
* #8822 Fix memory leak when using spell checker
* #9514 Fix jingle filetransfers not working in some circumstances
* #9573 Dont leak DNS query when connecting over proxy
* #9578 Determine Windows version more reliably
* #9622 Fix an error while quitting Gajim
* #9633 Fix an error while sending a file
* #9637 Restore window size correctly on wayland
* #9660 GPG Agent setting is ignored
* #9645 Make zeroconf IPV6 compatible
* Improve dark theme colors
* Fix access to GnuPG keys
* Use UUID4 item ids for pubsub posts
* Dont send invalid show values
* Windows: Dont override format region settings
* Various smaller improvements
Gajim 1.1.2 (15 January 2019)
Bug fixes
* #9518 Windows: Pressing "^" yields "^^"
* #9522 Windows: Switching keyboard layouts leads to a crash
* #9525 Windows/Mac: Links are not clickable in the About dialog
* #9535 Jingle Audio: Update codecs
* #9537 DiscoveryWindow: Fix bookmarking a group chat
* DBus: Correctly raise NewMessage signal
* Clicking on tray notifications does not open the chat
Gajim 1.1.1 (23 December 2018)
Bug fixes
* #8362 DBus: Incorrect unread message count
* #9427 Placeholder not cleared if pasting text into message input
* #9444 Determine the delay timestamp correctly when using mam:1
* #9453 Fix opening links inside the group chat subject (MacOS/Windows)
* #9465 Allow the full range of possible nicknames in group chats
* #9067 Gajim crashes when receiving xhtml messages
* #9096 Error when clicking on a subscription notification
* #9446 Chatstate error in MUC conversation
* #9471 Conversation Textview: Error on key press
* #9472 Handle presences without from attr correctly
* #9473 Error when creating a new group chat
* #9491 Identify group chat subject changes correctly
* #9496 Error on MUC roster selection change
* Determine soundplayer correctly on unix systems
* In some circumstances plugins could not be deleted
* Show correct contact status on tabs
* Dont answer group chat receipt requests
* Fix receipts for private messages
* Pressing the back button in the Accounts window leads to an error
* Better handle not available keyring backends
* Dont show incorrect contact on private messages
* Join group chat menu is disabled when there are no bookmarks
* Error on start chat menu action
* Error when opening sign-in/out notification
* Copying text does not work with different keyboard layouts
Gajim 1.1.0 (06 November 2018)
New
* Remove support for XEP-0091
Bug fixes
* #8968 Windows: Gajim loads DLLs from wrong location
* #9322 Error when adding contact
* #9357 Acquire sleep inhibtor correctly after sleep
* #9385 Ignore invalid bookmarks
* #9386 Discovery: Browsing nodes without identity
* #9393 Error when parsing invalid timestamps
* #9398 Error on jingle file transfer
Gajim 1.0.99.1 (07 October 2018)
New
* Implement XEP-0398
* MUC: Set Threshold for requesting history
* Show icon for unencrypted messages
* Support more media players for broadcasting the current tune
* Windows: Add a debug logging switch in preferences
* Preferences: enable/disable dark theme
* Preferences: enable/disable the MUC subject beeing shown on join
* Preferences: enable/disable ascii emoji conversion
Bug fixes
* #9198 Creating new MUCs with captial letters is not possible
* #9210 Error when clicking on new message indicator
* #9280 Inviting users to a MUC causes error
* #9301 Error when opening service discovery window
* #9309 Error when clicking on a groupchat invite notification
* #9311 Error when requesting server info
* #9117 Windows UAC changes status not available
* #9324 No menus/dialogs on Win7
* #9326 IPV6 Connection problem on Win10
* #9334 Joining big MUCs takes very long
* #9339 Error caused by remote_control
Gajim 1.0.99 (19 August 2018)
New
......@@ -19,16 +130,16 @@ Gajim 1.0.99 (19 August 2018)
Bug fixes
* 8658 Translation doesnt work on Windows
* 8750 Increase time frame for duplicate search in MUCs
* 9138 Translation in Flatpak does not work
* 9140 Error when clicking on the notification of an incoming message
* 9159 Wrong form type when responding to a voice request
* 9069 Send cancel IQ if muc configuration is aborted
* 9167 Flatpak fails to determine locale settings
* 9171 Gajim requests vcard multiple times
* 9198 Creating new MUCs with capital letters is not possible
* 9211 Punycode and Unicode with Internationalized Domain Names
* #8658 Translation doesnt work on Windows
* #8750 Increase time frame for duplicate search in MUCs
* #9138 Translation in Flatpak does not work
* #9140 Error when clicking on the notification of an incoming message
* #9159 Wrong form type when responding to a voice request
* #9069 Send cancel IQ if muc configuration is aborted
* #9167 Flatpak fails to determine locale settings
* #9171 Gajim requests vcard multiple times
* #9198 Creating new MUCs with capital letters is not possible
* #9211 Punycode and Unicode with Internationalized Domain Names
Other changes
......@@ -50,9 +161,9 @@ Gajim 1.0.3 (20 May 2018)
Bugs fixed:
* 8296 Fix errors on roster updates after stream management resume
* 9106 Convert font weight from pango to css values
* 9124 Bring ChatControl to front when notification is clicked
* #8296 Fix errors on roster updates after stream management resume
* #9106 Convert font weight from pango to css values
* #9124 Bring ChatControl to front when notification is clicked
* Set no-store hint on groupchat chatstates
* Dont show OOB uri if message body is the same
......@@ -66,26 +177,26 @@ Gajim 1.0.2 (30 April 2018)
Bugs fixed:
* 7879 Server name is rejected for group chat bookmarks
* 8964 setup.py install misses some files if used with "--skip-build"
* 9017 Password was sometimes stored in plaintext
* 9022 Dont show error when receiving invalid avatars
* 9031 Windows: Always hide roster window on X
* 9038 No License in About dialog
* 9039 Encode filenames before sending
* 9044 Catch invalid IQ stanzas and log them
* 9049 XMPP logo in "Add New Contact" window instead Gajim logo
* 9050 Mark some strings as translatable
* 9054 Error on file send completion
* 9055 Removing a bookmark causes error
* 9057 Avatar is deleted when updating vCard
* 9065 Account label isn't change in tooltip of notification area icon
* 9066 Placeholder text does't disappear
* 9068 Missing pulseaudio in Flatpak image
* 9070 Fix History Manager search
* 9074 Proxy comobobox in accounts/connections doesn't get update after ManageProxies
* 9094 problem receiving file
* 9101 Notification never autohides in gnome
* #7879 Server name is rejected for group chat bookmarks
* #8964 setup.py install misses some files if used with "--skip-build"
* #9017 Password was sometimes stored in plaintext
* #9022 Dont show error when receiving invalid avatars
* #9031 Windows: Always hide roster window on X
* #9038 No License in About dialog
* #9039 Encode filenames before sending
* #9044 Catch invalid IQ stanzas and log them
* #9049 XMPP logo in "Add New Contact" window instead Gajim logo
* #9050 Mark some strings as translatable
* #9054 Error on file send completion
* #9055 Removing a bookmark causes error
* #9057 Avatar is deleted when updating vCard
* #9065 Account label isn't change in tooltip of notification area icon
* #9066 Placeholder text does't disappear
* #9068 Missing pulseaudio in Flatpak image
* #9070 Fix History Manager search
* #9074 Proxy comobobox in accounts/connections doesn't get update after ManageProxies
* #9094 problem receiving file
* #9101 Notification never autohides in gnome
* Correctly reload Plugins
* Save history export with utf8 encoding
......
......@@ -7,17 +7,17 @@
- python3-gi
- python3-gi-cairo
- gir1.2-gtk-3.0 (>=3.22)
- python3-nbxmpp
- python3-nbxmpp (>=0.6.9,<0.7.0)
- python3-openssl (>=0.14)
- python3-cssutils (>=1.0.2)
- python3-keyring
- python3-precis-i18n
### Optional Runtime Requirements
- python3-pil (pillow) for support of webp avatars
- python3-gnupg to enable GPG encryption
- For zeroconf (bonjour) you need python3-dbus
- For zeroconf you need python3-dbus on Linux or [pybonjour](https://dev.gajim.org/lovetox/pybonjour-python3) on Windows/macOS
- gir1.2-gspell-1 and hunspell-LANG where lang is your locale eg. en, fr etc
- gir1.2-secret-1 for GNOME Keyring or KDE support as password storage
- D-Bus running to have gajim-remote working
......@@ -25,7 +25,6 @@
- gir1.2-gupnpigd-1.0 for better NAT traversing
- gir1.2-networkmanager-1.0 for network lose detection
- gir1.2-geoclue-2.0 for sharing your location
- python3-idna and python3-precis-i18n for correctly parsing JIDs
### Compile-time Requirements
......@@ -87,7 +86,7 @@ Execute gajim with --verbose
That is all, **enjoy**!
(C) 2003-2018
(C) 2003-2019
The Gajim Team
[https://gajim.org](https://gajim.org)
......
......@@ -10,7 +10,7 @@ environment:
branches:
only:
- master
- gajim_1.1
clone_depth: 1
......@@ -18,8 +18,9 @@ clone_depth: 1
# - ps: iex ((new-object net.webclient).DownloadString('https://raw.githubusercontent.com/appveyor/ci/master/scripts/enable-rdp.ps1'))
build_script:
- C:\msys64\usr\bin\pacman -Syu --needed --noconfirm --ask=20
- C:\msys64\usr\bin\pacman -Su --needed --noconfirm
- del C:\Windows\System32\libssl-*.dll C:\Windows\system32\libcrypto-*.dll
- del C:\Windows\SysWOW64\libssl-*.dll C:\Windows\SysWOW64\libcrypto-*.dll
- C:\msys64\usr\bin\pacman -Syuu --needed --noconfirm --noprogressbar --overwrite \\*
- ps: |
$env:TIME_STRING=(get-date -UFormat "%Y-%m-%d").ToString()
$env:BUILDROOT="C:\msys64\home\appveyor\gajim\win\_build_root"
......@@ -31,8 +32,8 @@ build_script:
bash "git clone C:/projects/gajim C:/msys64/home/appveyor/gajim"
bash "C:/msys64/home/appveyor/gajim/win/build.sh $($env:MSYS_ARCH)"
Push-AppveyorArtifact "$($env:BUILDROOT)/Gajim.exe" -FileName "Gajim-Master-$($env:ARCH)-$($env:TIME_STRING).exe"
Push-AppveyorArtifact "$($env:BUILDROOT)/Gajim-Portable.exe" -FileName "Gajim-Portable-Master-$($env:ARCH)-$($env:TIME_STRING).exe"
Push-AppveyorArtifact "$($env:BUILDROOT)/Gajim.exe" -FileName "Gajim-1.1.3-$($env:ARCH)-$($env:TIME_STRING).exe"
Push-AppveyorArtifact "$($env:BUILDROOT)/Gajim-Portable.exe" -FileName "Gajim-Portable-1.1.3-$($env:ARCH)-$($env:TIME_STRING).exe"
# on_finish:
# - ps: $blockRdp = $true; iex ((new-object net.webclient).DownloadString('https://raw.githubusercontent.com/appveyor/ci/master/scripts/enable-rdp.ps1'))
......
......@@ -46,7 +46,7 @@ and
.Pa THANKS ,
for a complete list.
.Sh COPYRIGHT
Copyright (C) 2003-2018 Gajim Team
Copyright (C) 2003-2019 Gajim Team
.Pp
.Nm
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; version 3 only.
......
......@@ -89,7 +89,7 @@ and
.Pa THANKS ,
for a complete list.
.Sh COPYRIGHT
Copyright (C) 2003-2018 Gajim Team
Copyright (C) 2003-2019 Gajim Team
.Pp
.Nm
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; version 3 only.
......
......@@ -93,7 +93,7 @@ and
with contributions and patches merged from many individuals around the world.
See the About Dialog for a complete list.
.Sh COPYRIGHT
Copyright (C) 2003-2018 Gajim Team
Copyright (C) 2003-2019 Gajim Team
.Pp
.Nm
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; version 3 only.
......
......@@ -7,32 +7,37 @@
<metadata_license>CC-BY-SA-3.0</metadata_license>
<project_license>GPL-3.0</project_license>
<name>Gajim</name>
<summary>A GTK+ Jabber client</summary>
<summary>A GTK+ XMPP client</summary>
<description>
<p>Gajim is a chat client to be used with Jabber.org, Live Journal Talk,
Nimbuzz, Ovi, Talkonaut, and thousands of other services
run by companies and ISPs, and volunteers around the world.
<p>Gajim aims to be an easy to use and fully-featured XMPP client.
With Gajim you can chat through various XMPP services of your choice
(e.g. Jabber.org) as well as transports (e.g. Facebook, IRC).
</p>
<p>If you have a few accounts on different servers, if you want to be in
contact with your friends and family all the time, then Gajim is for you.
<p>Just chat with your friends or family, easily share pictures and
thoughts or discuss the news with your groups.
</p>
<p>Gajim integrates well with your other devices: just chat and see what's
been said on your mobile device.
</p>
<p>Features:</p>
<ul>
<li>Tabbed chat window and single window modes</li>
<li>Group chat support (with Multi-User Chat protocol), invitation, chat to group chat transformation</li>
<li>Emoticons, avatars, PEP (user activity, mood and tune)</li>
<li>Audio / video conferences</li>
<li>File transfer, room bookmarks</li>
<li>Metacontacts support</li>
<li>Trayicon, speller, extended chat history functionalities</li>
<li>TLS, GPG and End-To-End encryption support</li>
<li>Transport registration support</li>
<li>Service discovery including nodes, user search</li>
<li>Wikipedia, dictionary and search engine lookup</li>
<li>Multiple accounts support</li>
<li>XML console interface</li>
<li>Link local (bonjour / zeroconf), BOSH</li>
<li>Other features via plugins </li>
<li>Never miss a message, keep all your chat clients synchronized</li>
<li>Invite friends to group chats or join one</li>
<li>Easily send pictures, videos or other files to friends and groups</li>
<li>Chat securely with End-to-End encryption via OMEMO or PGP</li>
<li>Use your favorite emoticons, set your own profile picture</li>
<li>Keep and manage all your chat history</li>
<li>Organize your chats with tabs</li>
<li>Automatic spell-checking for your messages</li>
<li>Connect to other Messengers via Transports (Facebook, IRC, ...)</li>
<li>Lookup things on Wikipedia, dictionaries or other search engines directly from the chat window</li>
<li>Set your activity, tune, and mood to show your friends how you are feeling</li>
<li>Support for multiple accounts</li>
<li>Group multiple contacts from one friend to a single Meta-Contact</li>
<li>XML console to see what's happening on the protocol layer</li>
<li>Serverless messaging (Bonjour/Zeroconf), BOSH</li>
<li>Support for service discovery including nodes and search for users</li>
<li>Even more features via plugins</li>
</ul>
</description>
<categories>
......@@ -43,7 +48,7 @@
</categories>
<screenshots>
<screenshot type="default">
<image>https://gajim.org/imgs/gajim_roster.png</image>
<image>https://gajim.org/imgs/gajim_single_window_mode.png</image>
<caption>Roster, list of contacts</caption>
</screenshot>
<screenshot>
......@@ -69,7 +74,7 @@
<url type="homepage">https://gajim.org/</url>
<url type="bugtracker">https://dev.gajim.org/gajim/gajim</url>
<url type="faq">https://dev.gajim.org/gajim/gajim/wikis/help/gajimfaq</url>
<url type="help">https://dev.gajim.org/gajim/gajim/wikis/help/home</url>
<url type="help">https://dev.gajim.org/gajim/gajim/wikis/help/Help</url>
<url type="donation">https://gajim.org/dev.php#donate</url>
<url type="translate">https://dev.gajim.org/gajim/gajim/wikis/development/DevTranslate</url>
<translation type="gettext">gajim</translation>
......@@ -96,6 +101,10 @@
<content_attribute id="money-gambling">none</content_attribute>
</content_rating>
<releases>
<release version="1.1.3" date="2019-04-23" />
<release version="1.1.2" date="2019-01-15" />
<release version="1.1.1" date="2018-12-23" />
<release version="1.1.0" date="2018-11-06" />
<release version="1.0.3" date="2018-05-20" />
<release version="1.0.2" date="2018-04-30" />
<release version="1.0.1" date="2018-04-01" />
......
......@@ -13,3 +13,14 @@ StartupWMClass=Gajim
Terminal=false
Type=Application
MimeType=x-scheme-handler/xmpp;
Actions=StartChat;ShowNextPendingEvent;
[Desktop Action StartChat]
Exec=gajim --start-chat
Name=Start a new chat
Icon=org.gajim.Gajim
[Desktop Action ShowNextPendingEvent]
Exec=gajim --show-next-pending-event
Name=Show next pending event
Icon=org.gajim.Gajim
[epydoc]
# Information about the project.
name: Gajim
url: http://gajim.org
verbosity: 3
imports: yes
redundant-details: yes
docformat: restructuredtext
# top: gajim
# The list of modules to document. Modules can be named using
# dotted names, module filenames, or package directory names.
# This option may be repeated.
modules: gajim/* test/*
# Write html output to the directory "apidocs"
#output: pdf
output: html
target: doc/apidocs/
# Include all automatically generated graphs. These graphs are
# generated using Graphviz dot.
graph: all
dotpath: /usr/bin/dot
graph-font: Sans
graph-font-size: 10
......@@ -23,9 +23,9 @@ Replace install path `~/Gajim/gajim_flatpak` with an install path of your choice
*Note: Remove `--user` if you want a system-wide installation.*
1. `flatpak --user remote-add --from gnome https://sdk.gnome.org/gnome.flatpakrepo`
2. `flatpak --user install gnome org.gnome.Platform//3.28`
3. `flatpak --user install gnome org.gnome.Sdk//3.28`
4. `flatpak-builder --repo=gajim_flatpak_repo ~/Gajim/gajim_flatpak ~/Gajim/org.gajim.Gajim.json`
2. `flatpak --user install gnome org.gnome.Platform//3.30`
3. `flatpak --user install gnome org.gnome.Sdk//3.30`
4. `flatpak-builder --repo=gajim_flatpak_repo ~/Gajim/gajim_flatpak ~/Gajim/flatpak/org.gajim.Gajim.yaml`
5. `flatpak --user remote-add --no-gpg-verify gajim_flatpak_repo gajim_flatpak_repo`
6. `flatpak --user install gajim_flatpak_repo org.gajim.Gajim`
7. `flatpak run org.gajim.Gajim`
......@@ -51,7 +51,7 @@ In this example, we use `git` to update the repository. You can also download th
### Install and update Gajim
1. `flatpak-builder --repo=gajim_flatpak_repo ~/Gajim/gajim_flatpak ~/Gajim/org.gajim.Gajim.json`
1. `flatpak-builder --repo=gajim_flatpak_repo ~/Gajim/gajim_flatpak ~/Gajim/flatpak/org.gajim.Gajim.yaml`
2. `flatpak --user update`
3. `flatpak run org.gajim.Gajim`
......
app-id: org.gajim.Gajim
runtime: org.gnome.Platform
runtime-version: 3.30
sdk: org.gnome.Sdk
command: gajim
finish-args:
- --share=ipc
- --share=network
- --socket=fallback-x11
- --socket=wayland
- --socket=pulseaudio
- --system-talk-name=org.freedesktop.GeoClue2
- --system-talk-name=org.freedesktop.login1
- --talk-name=org.gnome.ScreenSaver
- --talk-name=org.mpris.MediaPlayer2.*
# Keyring
- --talk-name=org.freedesktop.secrets
# dconf
- --filesystem=xdg-run/dconf
- --filesystem=~/.config/dconf:ro
- --talk-name=ca.desrt.dconf
- --env=DCONF_USER_CONFIG_DIR=.config/dconf
# GnuPG
- --filesystem=~/.gnupg
# extensions
- --env=PYTHONPATH=/app/plugins/lib/python3.7/site-packages
add-extensions:
org.gajim.Gajim.Plugin:
directory: plugins
merge-dirs: lib/python3.7/site-packages
subdirectories: true
no-autodownload: true
autodelete: true
cleanup:
- '/bin/easy*'
- /include
- /lib/debug
- /lib/pkgconfig
- /lib/python2.7
- /share/aclocal
- /share/doc
- /share/gtk-doc
- /share/man
- '*.a'
- '*.la'
modules:
- name: python3-pycparser
buildsystem: simple
build-commands:
- pip3 install --prefix=/app .
sources:
- type: archive
url: https://files.pythonhosted.org/packages/68/9e/49196946aee219aead1290e00d1e7fdeab8567783e83e1b9ab5585e6206a/pycparser-2.19.tar.gz
sha256: a988718abfad80b6b157acce7bf130a30876d27603738ac39f140993246b25b3
- name: python3-cffi
buildsystem: simple
build-commands:
- pip3 install --prefix=/app .
sources:
- type: archive
url: https://files.pythonhosted.org/packages/64/7c/27367b38e6cc3e1f49f193deb761fe75cda9f95da37b67b422e62281fcac/cffi-1.12.2.tar.gz
sha256: e113878a446c6228669144ae8a56e268c91b7f1fafae927adc4879d9849e0ea7
- name: python3-asn1crypto
buildsystem: simple
build-commands:
- pip3 install --prefix=/app asn1crypto-0.24.0-py2.py3-none-any.whl
sources:
- type: file
url: https://pypi.python.org/packages/ea/cd/35485615f45f30a510576f1a56d1e0a7ad7bd8ab5ed7cdc600ef7cd06222/asn1crypto-0.24.0-py2.py3-none-any.whl
sha256: 2f1adbb7546ed199e3c90ef23ec95c5cf3585bac7d11fb7eb562a3fe89c64e87
- name: python3-idna
buildsystem: simple
build-commands:
- pip3 install --prefix=/app idna-2.8-py2.py3-none-any.whl
sources:
- type: file
url: https://files.pythonhosted.org/packages/14/2c/cd551d81dbe15200be1cf41cd03869a46fe7226e7450af7a6545bfc474c9/idna-2.8-py2.py3-none-any.whl
sha256: ea8b7f6188e6fa117537c3df7da9fc686d485087abf6ac197f9c46432f7e4a3c
- name: python3-cryptography
buildsystem: simple
build-commands:
- pip3 install --prefix=/app .
sources:
- type: archive
url: https://files.pythonhosted.org/packages/07/ca/bc827c5e55918ad223d59d299fff92f3563476c3b00d0a9157d9c0217449/cryptography-2.6.1.tar.gz
sha256: 26c821cbeb683facb966045e2064303029d572a87ee69ca5a1bf54bf55f93ca6
- name: python3-pyopenssl
buildsystem: simple
build-commands:
- pip3 install --prefix=/app pyOpenSSL-19.0.0-py2.py3-none-any.whl
sources:
- type: file
url: https://files.pythonhosted.org/packages/01/c8/ceb170d81bd3941cbeb9940fc6cc2ef2ca4288d0ca8929ea4db5905d904d/pyOpenSSL-19.0.0-py2.py3-none-any.whl
sha256: c727930ad54b10fc157015014b666f2d8b41f70c0d03e83ab67624fd3dd5d1e6
- name: python3-dbus-python
build-options:
env:
PYTHON_VERSION: '3'
sources:
- type: archive
url: https://files.pythonhosted.org/packages/3f/e7/4edb582d1ffd5ac3c84188deea32e960b5c8c0fe1da56ce70224f85ce542/dbus-python-1.2.8.tar.gz
sha256: abf12bbb765e300bf8e2a1b2f32f85949eab06998dbda127952c31cb63957b6f
- name: python3-jeepney
buildsystem: simple
build-commands:
- pip3 install --prefix=/app jeepney-0.4-py3-none-any.whl
sources:
- type: file
url: https://files.pythonhosted.org/packages/2b/f7/ff23b9b59534f501d47c327576aadda59da5b83d76ff837e6075bc325b9f/jeepney-0.4-py3-none-any.whl
sha256: f6f8b1428403b4afad04b6b82f9ab9fc426c253d7504c9031c41712a2c01dc74
- name: python3-secretstorage
buildsystem: simple
build-commands:
- pip3 install --prefix=/app SecretStorage-3.1.1-py3-none-any.whl
sources:
- type: file
url: https://files.pythonhosted.org/packages/82/59/cb226752e20d83598d7fdcabd7819570b0329a61db07cfbdd21b2ef546e3/SecretStorage-3.1.1-py3-none-any.whl
sha256: 7a119fb52a88e398dbb22a4b3eb39b779bfbace7e4153b7bc6e5954d86282a8a
- name: python3-entrypoints
buildsystem: simple
build-commands:
- pip3 install --prefix=/app entrypoints-0.3-py2.py3-none-any.whl
sources:
- type: file
url: https://files.pythonhosted.org/packages/ac/c6/44694103f8c221443ee6b0041f69e2740d89a25641e62fb4f2ee568f2f9c/entrypoints-0.3-py2.py3-none-any.whl
sha256: 589f874b313739ad35be6e0cd7efde2a4e9b6fea91edcc34e58ecbb8dbe56d19
- name: python3-keyring
buildsystem: simple
build-commands:
- pip3 install --prefix=/app keyring-18.0.0-py2.py3-none-any.whl
cleanup:
- /bin
sources:
- type: file
url: https://files.pythonhosted.org/packages/a1/28/0058032477bfdf2003e605d175629963759220661615443e20711446bfa7/keyring-18.0.0-py2.py3-none-any.whl
sha256: ca33f5ccc542b9ffaa196ee9a33488069e5e7eac77d5b81969f8a3ce74d0230c
- name: python3-cssutils
buildsystem: simple
build-commands:
- pip3 install --prefix=/app cssutils-1.0.2-py3-none-any.whl
cleanup:
- /bin
sources:
- type: file
url: https://files.pythonhosted.org/packages/6b/15/a9fb9010f58d1c55dd0b7779db2334feb9a572d407024f39a60f44293861/cssutils-1.0.2-py3-none-any.whl
sha256: c74dbe19c92f5052774eadb15136263548dd013250f1ed1027988e7fef125c8d
- name: python3-precis_i18n
buildsystem: simple
build-commands:
- pip3 install --prefix=/app precis_i18n-1.0.0-py3-none-any.whl
sources:
- type: file
url: https://files.pythonhosted.org/packages/08/9d/d32f1b7c6d280c82a786b629ba89bd9e3e8409b9e23a7309f76a78e46971/precis_i18n-1.0.0-py3-none-any.whl
sha256: f6942bbffec698d0d7e30c42f589f3f6da13e723d047997d0761a41facf2986f
- name: gspell
cleanup:
- /bin
sources:
- type: archive
url: https://download.gnome.org/sources/gspell/1.8/gspell-1.8.1.tar.xz
sha256: 819a1d23c7603000e73f5e738bdd284342e0cd345fb0c7650999c31ec741bbe5
- name: python3-nbxmpp
buildsystem: simple
build-commands:
- pip3 install --prefix=/app .
sources:
- type: archive
url: https://files.pythonhosted.org/packages/d6/01/34b2a441926780f26edd21490158afe0eb76beae4efbb6bc4d3323eae69a/nbxmpp-0.6.10.tar.gz
sha256: cd73417777e4847fdd8d0d96c7cafc606952edbd2b9d52a2a72bb2aaa04d08ef
- name: gajim
buildsystem: simple
build-commands:
- pip3 install --prefix=/app .
- touch /app/share/run-as-flatpak
sources:
- type: git
url: https://dev.gajim.org/gajim/gajim.git
branch: gajim_1.1
post-install:
- install -d /app/plugins
import os
import subprocess
__version__ = "1.0.3"
__version__ = "1.1.3"
IS_FLATPAK = False
if os.path.exists('/app/share/run-as-flatpak'):
......
# -*- coding: utf-8 -*-
## src/adhoc_commands.py
##
## Copyright (C) 2006 Nikos Kouremenos <kourem AT gmail.com>
## Copyright (C) 2006-2007 Tomasz Melcer <liori AT exroot.org>
## Copyright (C) 2006-2014 Yann Leboulanger <asterix AT lagaule.org>
## Copyright (C) 2008 Jonathan Schleifer <js-gajim AT webkeks.org>
## Stephan Erb <steve-e AT h3c.de>
##
## This file is part of Gajim.
##
## Gajim 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; version 3 only.
##
## Gajim 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 Gajim. If not, see <http://www.gnu.org/licenses/>.
##
# Copyright (C) 2006 Nikos Kouremenos <kourem AT gmail.com>
# Copyright (C) 2006-2007 Tomasz Melcer <liori AT exroot.org>
# Copyright (C) 2006-2014 Yann Leboulanger <asterix AT lagaule.org>
# Copyright (C) 2008 Jonathan Schleifer <js-gajim AT webkeks.org>
# Stephan Erb <steve-e AT h3c.de>
#
# This file is part of Gajim.
#
# Gajim 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; version 3 only.
#
# Gajim 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 Gajim. If not, see <http://www.gnu.org/licenses/>.
# FIXME: think if we need caching command list. it may be wrong if there will
# be entities that often change the list, it may be slow to fetch it every time
from gi.repository import Gtk
import nbxmpp
from gajim.common import app
from gajim.common.i18n import _
from gajim.common.modules import dataforms
from gajim.common import ged
from gajim import gtkgui_helpers
from gajim.gtk import HigDialog
from gajim import dataforms_widget
from gajim.gtk.dialogs import HigDialog
class CommandWindow:
"""
......@@ -64,6 +62,7 @@ class CommandWindow:
self.stage_back_button_cb = None
self.stage_forward_button_cb = None
self.stage_execute_button_cb = None
self.stage_finish_button_cb = None
self.stage_close_button_cb = None
self.stage_restart_button_cb = None
self.stage_window_delete_cb = None
......@@ -239,7 +238,7 @@ class CommandWindow:
# close old stage
self.stage_finish()
assert len(self.commandlist)>0
assert self.commandlist
self.stages_notebook.set_current_page(
self.stages_notebook.page_num(self.command_list_stage_vbox))
......@@ -408,7 +407,7 @@ class CommandWindow:
self.commandnode = command.getAttr('node')
if command.getTag('x'):
self.dataform = dataforms.ExtendForm(node=command.getTag('x'))
self.dataform = dataforms.extend_form(node=command.getTag('x'))
self.data_form_widget.set_sensitive(True)
try:
......
#
# Copyright (C) 2017 Philipp Hörist <philipp AT hoerist.com>
#
# This file is part of Gajim.
......@@ -15,31 +14,36 @@
# You should have received a copy of the GNU General Public License
# along with Gajim. If not, see <http://www.gnu.org/licenses/>.
from gi.repository import Gtk
from gi.repository import Gdk
from gajim.common import app
from gajim.common import helpers
from gajim.common.app import interface
from gajim.common.exceptions import GajimGeneralException
from gajim import config
from gajim import dialogs
from gajim.gtk import shortcuts_window
from gajim.accounts_window import AccountsWindow
import gajim.plugins.gui
from gajim import disco
import gajim.plugins.gui
from gajim.gtk.dialogs import ShortcutsWindow
from gajim.gtk.history_sync import HistorySyncAssistant
from gajim.gtk.server_info import ServerInfoDialog
from gajim.gtk.mam_preferences import MamPreferences
from gajim.gtk.preferences import Preferences
from gajim.gtk import JoinGroupchatWindow
from gajim.gtk import StartChatDialog
from gajim.gtk import AddNewContactWindow
from gajim.gtk import SingleMessageWindow
from gajim.gtk import XMLConsoleWindow
from gajim.gtk import AboutDialog
from gajim.gtk import PrivacyListsWindow
from gajim.gtk import ManageBookmarksWindow
from gajim.gtk import FeaturesDialog
from gajim.gtk import AccountCreationWizard
from gajim.gtk import HistoryWindow
from gajim.gtk.join_groupchat import JoinGroupchatWindow
from gajim.gtk.start_chat import StartChatDialog
from gajim.gtk.add_contact import AddNewContactWindow
from gajim.gtk.single_message import SingleMessageWindow
from gajim.gtk.xml_console import XMLConsoleWindow
from gajim.gtk.about import AboutDialog
from gajim.gtk.privacy_list import PrivacyListsWindow
from gajim.gtk.bookmarks import ManageBookmarksWindow
from gajim.gtk.features import FeaturesDialog
from gajim.gtk.account_wizard import AccountCreationWizard
from gajim.gtk.history import HistoryWindow
from gajim.gtk.accounts import AccountsWindow
# General Actions
......@@ -131,24 +135,29 @@ def on_service_disco(action, param):
pass
def on_join_gc(action, param):
account = None
def on_join_gc(_action, param):
account, jid = None, None
if param is None:
if not app.get_connected_accounts():
return
else:
account = param.get_string()
account, jid = param.get_strv()
if not jid:
jid = None
window = app.get_app_window(JoinGroupchatWindow)
if window is None:
JoinGroupchatWindow(account, None)
JoinGroupchatWindow(account, jid)
else:
window.present()
def on_add_contact(action, param):
window = app.get_app_window(AddNewContactWindow)
def on_add_contact(_action, param):
account, jid = param.get_strv()
if not jid:
jid = None
window = app.get_app_window(AddNewContactWindow, account)
if window is None:
AddNewContactWindow(param.get_string())
AddNewContactWindow(account, jid)
else:
window.present()
......@@ -282,7 +291,7 @@ def on_faq(action, param):
def on_keyboard_shortcuts(action, param):
shortcuts_window.show(app.app.get_active_window())
ShortcutsWindow()
def on_features(action, param):
......@@ -338,3 +347,25 @@ def show_next_pending_event(action, param):
if not event:
return
app.interface.handle_event(account, jid, event.type_)
def open_link(_action, param):
kind, link = param.get_strv()
helpers.launch_browser_mailer(kind, link)
def copy_link(_action, param):
text = param.get_string()
clip = Gtk.Clipboard.get(Gdk.SELECTION_CLIPBOARD)
clip.set_text(text, -1)
def start_chat(_action, param):
account, jid = param.get_strv()
app.interface.new_chat_from_jid(account, jid)
def join_groupchat(_action, param):
account, jid = param.get_strv()
room_jid = jid.split('?')[0]
app.interface.join_gc_minimal(account, room_jid)
This diff is collapsed.
# -*- coding:utf-8 -*-
## src/atom_window.py
##
## Copyright (C) 2006 Tomasz Melcer <liori AT exroot.org>
## Copyright (C) 2006-2014 Yann Leboulanger <asterix AT lagaule.org>
## Copyright (C) 2007 Nikos Kouremenos <kourem AT gmail.com>
## Copyright (C) 2008 Jonathan Schleifer <js-gajim AT webkeks.org>
##
## This file is part of Gajim.
##
## Gajim 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; version 3 only.
##
## Gajim 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 Gajim. If not, see <http://www.gnu.org/licenses/>.
##
# Copyright (C) 2006 Tomasz Melcer <liori AT exroot.org>
# Copyright (C) 2006-2014 Yann Leboulanger <asterix AT lagaule.org>
# Copyright (C) 2007 Nikos Kouremenos <kourem AT gmail.com>
# Copyright (C) 2008 Jonathan Schleifer <js-gajim AT webkeks.org>
#
# This file is part of Gajim.
#
# Gajim 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; version 3 only.
#
# Gajim 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 Gajim. If not, see <http://www.gnu.org/licenses/>.
from typing import List # pylint: disable=unused-import
from typing import Any # pylint: disable=unused-import
from gi.repository import Gdk
from gi.repository import GLib
from gajim import gtkgui_helpers
from gajim.common import helpers
from gajim.common import i18n
from gajim.common.i18n import _
from gajim import gtkgui_helpers
class AtomWindow:
window = None
entries = []
entries = [] # type: List[Any]
@classmethod
def newAtomEntry(cls, entry):
......@@ -53,7 +53,7 @@ class AtomWindow:
"""
Create new window... only if we have anything to show
"""
assert len(self.__class__.entries)
assert self.__class__.entries
self.entry = None # the entry actually displayed
......@@ -77,7 +77,7 @@ class AtomWindow:
"""
Get next entry from the queue and display it in the window
"""
assert len(self.__class__.entries)>0
assert self.__class__.entries
newentry = self.__class__.entries.pop(0)
......
# -*- coding:utf-8 -*-
## src/cell_renderer_image.py
##
## Copyright (C) 2003-2014 Yann Leboulanger <asterix AT lagaule.org>
## Copyright (C) 2005 Vincent Hanquez <tab AT snarc.org>
## Copyright (C) 2005-2007 Nikos Kouremenos <kourem AT gmail.com>
## Copyright (C) 2006 Travis Shirk <travis AT pobox.com>
##
## This file is part of Gajim.
##
## Gajim 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; version 3 only.
##
## Gajim 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 Gajim. If not, see <http://www.gnu.org/licenses/>.
##
# Copyright (C) 2003-2014 Yann Leboulanger <asterix AT lagaule.org>
# Copyright (C) 2005 Vincent Hanquez <tab AT snarc.org>
# Copyright (C) 2005-2007 Nikos Kouremenos <kourem AT gmail.com>
# Copyright (C) 2006 Travis Shirk <travis AT pobox.com>
#
# This file is part of Gajim.
#
# Gajim 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; version 3 only.
#
# Gajim 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 Gajim. If not, see <http://www.gnu.org/licenses/>.
from gi.repository import GLib
from gi.repository import Gtk
......@@ -46,11 +42,11 @@ class CellRendererImage(Gtk.CellRendererPixbuf):
def do_get_property(self, pspec):
return getattr(self, pspec.name)
def do_activate(event, widget, path, bg_area, cell_area, flags):
def do_activate(self, *args, **kwargs):
"""Renderers cannot be activated; always return True."""
return True
def do_editing_started(event, widget, path, fb_area, cell_area, flags):
def do_editing_started(self, *args, **kwargs):
"""Renderers cannot be edited; always return None."""
return None
......
This diff is collapsed.
This diff is collapsed.
......@@ -31,88 +31,105 @@ to automatic discovery and dispatching, also features manual control
over the process.
"""
from typing import Any # pylint: disable=unused-import
from typing import Dict # pylint: disable=unused-import
from gajim.command_system.tools import remove
COMMANDS = {}
CONTAINERS = {}
COMMANDS = {} # type: Dict[Any, Any]
CONTAINERS = {} # type: Dict[Any, Any]
def add_host(host):
CONTAINERS[host] = []
def remove_host(host):
remove(CONTAINERS, host)
def add_container(container):
for host in container.HOSTS:
CONTAINERS[host].append(container)
def remove_container(container):
for host in container.HOSTS:
remove(CONTAINERS[host], container)
def add_commands(container):
commands = COMMANDS.setdefault(container, {})
for command in traverse_commands(container):
for name in command.names:
commands[name] = command
def remove_commands(container):
remove(COMMANDS, container)
def traverse_commands(container):
for name in dir(container):
attribute = getattr(container, name)
if is_command(attribute):
yield attribute
def is_command(attribute):
from gajim.command_system.framework import Command
return isinstance(attribute, Command)
def is_root(namespace):
metaclass = namespace.get("__metaclass__", None)
if not metaclass:
return False
return issubclass(metaclass, Dispatchable)
def get_command(host, name):
for container in CONTAINERS[host]:
command = COMMANDS[container].get(name)
if command:
return command
def list_commands(host):
for container in CONTAINERS[host]:
commands = COMMANDS[container]
for name, command in commands.items():
yield name, command
class Dispatchable(type):
def __init__(self, name, bases, namespace):
parents = super(Dispatchable, self)
class Dispatchable(type):
# pylint: disable=no-value-for-parameter
def __init__(cls, name, bases, namespace):
parents = super(Dispatchable, cls)
parents.__init__(name, bases, namespace)
if not is_root(namespace):
self.dispatch()
cls.dispatch()
def dispatch(cls):
if cls.AUTOMATIC:
cls.enable()
def dispatch(self):
if self.AUTOMATIC:
self.enable()
class Host(Dispatchable):
def enable(self):
add_host(self)
def enable(cls):
add_host(cls)
def disable(cls):
remove_host(cls)
def disable(self):
remove_host(self)
class Container(Dispatchable):
def enable(self):
add_container(self)
add_commands(self)
def enable(cls):
add_container(cls)
add_commands(cls)
def disable(self):
remove_commands(self)
remove_container(self)
def disable(cls):
remove_commands(cls)
remove_container(cls)
......@@ -55,7 +55,7 @@ class CommandContainer(metaclass=Container):
"""
__metaclass__ = Container
class CommandProcessor(object):
class CommandProcessor:
"""
Command processor is an immediate command emitter. It does not
participate in the dispatching process directly, but must define a
......@@ -75,6 +75,7 @@ class CommandProcessor(object):
Try to process text as a command. Returns True if it has been
processed as a command and False otherwise.
"""
# pylint: disable=assignment-from-no-return
prefix = text.startswith(self.COMMAND_PREFIX)
length = len(text) > len(self.COMMAND_PREFIX)
if not (prefix and length):
......@@ -95,17 +96,17 @@ class CommandProcessor(object):
return True
def execute_command(self, name, arguments):
command = self.get_command(name)
cmd = self.get_command(name)
args, opts = parse_arguments(arguments) if arguments else ([], [])
args, kwargs = adapt_arguments(command, arguments, args, opts)
args, kwargs = adapt_arguments(cmd, arguments, args, opts)
if self.command_preprocessor(command, name, arguments, args, kwargs):
if self.command_preprocessor(cmd, name, arguments, args, kwargs):
return
value = command(self, *args, **kwargs)
self.command_postprocessor(command, name, arguments, args, kwargs, value)
value = cmd(self, *args, **kwargs)
self.command_postprocessor(cmd, name, arguments, args, kwargs, value)
def command_preprocessor(self, command, name, arguments, args, kwargs):
def command_preprocessor(self, cmd, name, arguments, args, kwargs):
"""
Redefine this method in the subclass to execute custom code
before command gets executed.
......@@ -115,7 +116,7 @@ class CommandProcessor(object):
"""
pass
def command_postprocessor(self, command, name, arguments, args, kwargs, value):
def command_postprocessor(self, cmd, name, arguments, args, kwargs, value):
"""
Redefine this method in the subclass to execute custom code
after command gets executed.
......@@ -134,17 +135,17 @@ class CommandProcessor(object):
pass
def get_command(self, name):
command = get_command(self.COMMAND_HOST, name)
if not command:
cmd = get_command(self.COMMAND_HOST, name)
if not cmd:
raise NoCommandError("Command does not exist", name=name)
return command
return cmd
def list_commands(self):
commands = list_commands(self.COMMAND_HOST)
commands = dict(commands)
return sorted<