updated branch to upstream/master
8
.gitignore
vendored
Normal file
@ -0,0 +1,8 @@
|
||||
/RetroShare.pro.user
|
||||
*.o
|
||||
moc_*.cpp
|
||||
qrc_*.cpp
|
||||
ui_*.h
|
||||
Makefile.*
|
||||
*~
|
||||
Thumbs.db
|
69
.travis.yml
Normal file
@ -0,0 +1,69 @@
|
||||
language: cpp
|
||||
|
||||
compiler:
|
||||
- gcc
|
||||
|
||||
before_install:
|
||||
- echo $LANG
|
||||
- echo $LC_ALL
|
||||
- sudo apt-get update
|
||||
- sudo apt-get install build-essential checkinstall cmake g++ git libavcodec-dev libavformat-dev libbz2-dev libcurl4-openssl-dev libdc1394-22-dev libglib2.0-dev libcv-dev libopencv-highgui-dev libhighgui-dev
|
||||
- sudo apt-get install libgnome-keyring-dev libgstreamer-plugins-base0.10-dev libgstreamer0.10-dev libjasper-dev libjpeg-dev libmicrohttpd-dev libopencv-dev libprotobuf-dev libqt4-dev
|
||||
- sudo apt-get install libspeex-dev libspeexdsp-dev libsqlite3-dev libssl-dev libswscale-dev
|
||||
- sudo apt-get install libtbb-dev libtiff4-dev libupnp-dev libv4l-dev libxine-dev libxslt1-dev libxss-dev make pkg-config protobuf-compiler python-dev python-numpy subversion git yasm qtmobility-dev
|
||||
# - if [ $TRAVIS_OS_NAME == linux ]; then sudo apt-get update && sudo apt-get install -y llvm-3.4 llvm-3.4-dev; fi
|
||||
# - rvm use $RVM --install --binary --fuzzy
|
||||
# - gem update --system
|
||||
# - gem --version
|
||||
|
||||
env:
|
||||
global:
|
||||
# The next declaration is the encrypted COVERITY_SCAN_TOKEN, created
|
||||
# via the "travis encrypt" command using the project repo's public key
|
||||
- secure: "auwuhxelaMriNaXzT8I03xrh1s+STicNyNToOWFCAYKxkWWQ4WeaCO6kRDmQrejhizMUILGU+s4FrWTEhDsviftGAF86EgzxxbSBfsHHAP4t2C0pcXX8/WxEoh1IrUs7iGCIpl7O2cvWqGidc20ROeptSEd1uQgkHnn14D9A2YmXf8g52PzqivKkb6HKfkVTPdmNJkMBT5eDtEw6DIk+DvnvRo6b6uanvVAKS9CBwXOdA3rLzaD9bz0LrdL9X1CNoTkGROyez0Lsc4zTr70id2Xfp1MMmJAV6hgQy+iwE37wRyrxJf3dkh5SUAAMUC9Xnvh/iBKNQKdQGhj2WGcV7GZV9k6u9DA1w2H0kcrwt9KHUXdhEQ67yr6Boa9ZFwdDb5VIOtC6iHAoDZXharHhiuxi0K/bCtwNAajrMjBCm9mWhEKvtoxUUYxAJajhJkkO3ERaOU3zHE+06esDzGozd2YOEH8a74HhYy4xvhR05Yj00hAWLS2kIaUITiqmBf6Yuh5XwH7KCDcapxF59ROWqyicdwtbfWpvN8IvFuGKyxYuEfoT8WxZ4lZpo4Q9CrTB7gedJYJxYNfZE/okWoFBb4cpPI94PHo3DZPR7lVyQ60RNyeR0nOeqf8NW8cBT1G4jw3u1LEyAdyvup+54aALw0DCVyoDojSXB8s+AlQG2JE="
|
||||
|
||||
addons:
|
||||
coverity_scan:
|
||||
project:
|
||||
name: "RetroShare/RetroShare"
|
||||
description: "RetroShare Build submitted via Travis CI"
|
||||
build_command_prepend: "qmake CONFIG+=NO_SQLCIPHER; make clean"
|
||||
build_command: "make -j 4"
|
||||
branch_pattern: coverity_scan
|
||||
|
||||
before_script:
|
||||
- qmake CONFIG+=NO_SQLCIPHER
|
||||
|
||||
#script: make
|
||||
script: if [ "${COVERITY_SCAN_BRANCH}" != 1 ]; then make ; fi
|
||||
|
||||
|
||||
#after_success:
|
||||
# - if [ $TRAVIS_BRANCH == $TRAVIS_TAG ]; then rake deploy; fi
|
||||
|
||||
#branches:
|
||||
# only:
|
||||
# - master
|
||||
# - travis
|
||||
|
||||
notifications:
|
||||
email: false
|
||||
irc:
|
||||
channels:
|
||||
- "chat.freenode.net#retroshare"
|
||||
template:
|
||||
- "%{repository}/%{branch} (%{commit} - %{author}): %{build_url}: %{message}"
|
||||
- "Message: %{commit_message}"
|
||||
- "Commit details: %{compare_url}"
|
||||
# webhooks:
|
||||
# urls:
|
||||
# - https://webhooks.gitter.im/e/9502afd22ca6c8e85fb3
|
||||
# on_success: change
|
||||
# on_failure: always
|
||||
# on_start: always
|
||||
|
||||
#env:
|
||||
# - RVM=2.0.0 LANG="en_US.UTF-8"
|
||||
|
||||
os:
|
||||
- linux
|
120
README.md
Normal file
@ -0,0 +1,120 @@
|
||||
RetroShare
|
||||
==============================
|
||||
RetroShare is a decentralized, private and secure commmunication and sharing platform. RetroShare provides filesharing, chat, messages, forums and channels.
|
||||
|
||||
Compilation on Linux
|
||||
----------------------------
|
||||
|
||||
1. Install package dependencies:
|
||||
* Debian/Ubuntu
|
||||
```bash
|
||||
sudo apt-get install libglib2.0-dev libupnp-dev qt4-dev-tools \
|
||||
libqt4-dev libssl-dev libxss-dev libgnome-keyring-dev libbz2-dev \
|
||||
libqt4-opengl-dev libqtmultimediakit1 qtmobility-dev \
|
||||
libspeex-dev libspeexdsp-dev libxslt1-dev libcurl4-openssl-dev \
|
||||
libopencv-dev tcl8.5 libmicrohttpd-dev
|
||||
```
|
||||
* openSUSE
|
||||
```bash
|
||||
sudo zypper install gcc-c++ libqt4-devel libgnome-keyring-devel \
|
||||
glib2-devel speex-devel libssh-devel protobuf-devel libcurl-devel \
|
||||
libxml2-devel libxslt-devel sqlcipher-devel libmicrohttpd-devel \
|
||||
opencv-devel speexdsp-devel libupnp-devel
|
||||
```
|
||||
* Arch Linux
|
||||
```bash
|
||||
pacman -S base-devel libgnome-keyring libmicrohttpd libupnp libxslt \
|
||||
libxss opencv qt4 speex sqlcipher
|
||||
```
|
||||
|
||||
2. Checkout the source code
|
||||
```bash
|
||||
mkdir ~/retroshare
|
||||
cd ~/retroshare
|
||||
git clone https://github.com/RetroShare/RetroShare.git trunk
|
||||
```
|
||||
|
||||
3. Compile
|
||||
```bash
|
||||
cd trunk
|
||||
qmake CONFIG+=debug
|
||||
make
|
||||
```
|
||||
|
||||
4. Install
|
||||
```bash
|
||||
sudo make install
|
||||
```
|
||||
|
||||
The executables produced will be:
|
||||
|
||||
/usr/bin/RetroShare06
|
||||
/usr/bin/RetroShare06-nogui
|
||||
|
||||
Compile only retroshare-nogui
|
||||
-----------------------------
|
||||
If you want to run RetroShare on a server and don’t need the gui and plugins,
|
||||
you can run the following commands to only compile/install the nogui version:
|
||||
|
||||
```bash
|
||||
qmake
|
||||
make retroshare-nogui
|
||||
sudo make retroshare-nogui-install_subtargets
|
||||
```
|
||||
|
||||
For packagers
|
||||
-------------
|
||||
Packagers can use PREFIX and LIB\_DIR to customize the installation paths:
|
||||
```bash
|
||||
qmake PREFIX=/usr LIB_DIR=/usr/lib64 "CONFIG-=debug" "CONFIG+=release"
|
||||
make
|
||||
make INSTALL_ROOT=${PKGDIR} install
|
||||
```
|
||||
|
||||
If libsqlcipher is not available as a package
|
||||
---------------------------------------------
|
||||
|
||||
You need to place sqlcipher so that the hierarchy is:
|
||||
|
||||
retroshare
|
||||
|
|
||||
+--- trunk
|
||||
|
|
||||
+--- lib
|
||||
|
|
||||
+---- sqlcipher
|
||||
```bash
|
||||
mkdir lib
|
||||
cd lib
|
||||
git clone git://github.com/sqlcipher/sqlcipher.git
|
||||
cd sqlcipher
|
||||
./configure --enable-tempstore=yes CFLAGS="-DSQLITE_HAS_CODEC" LDFLAGS="-lcrypto"
|
||||
make
|
||||
cd ..
|
||||
```
|
||||
|
||||
Using retroshare-nogui & webUI
|
||||
------------------------------
|
||||
|
||||
The webUI needs to be enabled as a parameter option in retroshare-nogui:
|
||||
|
||||
```bash
|
||||
./retroshare-nogui --webinterface 9090 --docroot /usr/share/RetroShare06/webui/
|
||||
```
|
||||
|
||||
The webUI is only accessible on localhost:9090 (unless you canged that
|
||||
option in the GUI). It is advised to keep it that way so that your RS
|
||||
cannot be controlled using an untrusted connection.
|
||||
|
||||
To access your web UI from a distance, just open a SSH tunnel on it:
|
||||
|
||||
```bash
|
||||
distant_machine:~/ > ssh rs_host -L 9090:localhost:9090 -N
|
||||
```
|
||||
|
||||
"rs_host" is the machine running retroshare-nogui. Then on the distant machine, access your webUI on
|
||||
|
||||
|
||||
http://localhost:9090
|
||||
|
||||
That also works with a retroshare GUI of course.
|
67
README.txt
@ -1,67 +0,0 @@
|
||||
To compile:
|
||||
|
||||
- install the package dependencies. On ubuntu:
|
||||
# sudo apt-get install libglib2.0-dev libupnp-dev qt4-dev-tools \
|
||||
libqt4-dev libssl-dev libxss-dev libgnome-keyring-dev libbz2-dev \
|
||||
libqt4-opengl-dev libqtmultimediakit1 qtmobility-dev \
|
||||
libspeex-dev libspeexdsp-dev libxslt1-dev libprotobuf-dev \
|
||||
protobuf-compiler cmake libcurl4-openssl-dev
|
||||
|
||||
- create project directory (e.g. ~/retroshare) and check out the source code
|
||||
# mkdir ~/retroshare
|
||||
# cd ~/retroshare && svn co svn://svn.code.sf.net/p/retroshare/code/trunk trunk
|
||||
|
||||
- create a new directory named lib
|
||||
# mkdir lib
|
||||
|
||||
- get source code for libssh-0.5.4, unzip it, and create build directory (if needed)
|
||||
|
||||
# cd lib
|
||||
# wget http://git.libssh.org/projects/libssh.git/snapshot/libssh-libssh-0.6.4.zip
|
||||
# tar zxvf libssh-0.6.4.tar.gz
|
||||
# cd libssh-0.6.4
|
||||
# mkdir build
|
||||
# cd build
|
||||
# cmake -DWITH_STATIC_LIB=ON -DWITH_GSSAPI=OFF ..
|
||||
# make
|
||||
# cd ../../..
|
||||
|
||||
- get source code for sqlcipher, and build it (only needed for GXS)
|
||||
|
||||
# cd lib
|
||||
# git clone git://github.com/sqlcipher/sqlcipher.git
|
||||
# cd sqlcipher
|
||||
# ./configure --enable-tempstore=yes CFLAGS="-DSQLITE_HAS_CODEC" \
|
||||
LDFLAGS="-lcrypto"
|
||||
# make
|
||||
# cd ..
|
||||
|
||||
- go to your svn base directory
|
||||
# cd trunk
|
||||
# qmake CONFIG=release
|
||||
# make -j 4
|
||||
|
||||
=> the executable produced will be
|
||||
trunk/retroshare-gui/src/Retroshare
|
||||
trunk/retroshare-nogui/src/retroshare-nogui
|
||||
|
||||
- to use the SSH RS server (nogui):
|
||||
|
||||
# ssh-keygen -t rsa -f rs_ssh_host_rsa_key # this makes a RSA
|
||||
# ./retroshare-nogui -G # generates a login+passwd hash for the RSA key used.
|
||||
# ./retroshare-nogui -S 7022 -U[SSLid] -P [Passwd hash]
|
||||
|
||||
- to connect from a remote place to the server by SSH:
|
||||
|
||||
# ssh -T -p 7022 [user]@[host]
|
||||
|
||||
and use the command line interface to control your RS instance.
|
||||
|
||||
List of non backward compatible changes for V0.6:
|
||||
================================================
|
||||
|
||||
- in rscertificate.cc, enable V_06_USE_CHECKSUM
|
||||
- in p3charservice, remove all usage of _deprecated items
|
||||
- turn file transfer into a service. Will break item IDs, but cleanup and
|
||||
simplify lots of code.
|
||||
|
@ -1,13 +1,37 @@
|
||||
!include("retroshare.pri"): error("Could not include file retroshare.pri")
|
||||
|
||||
TEMPLATE = subdirs
|
||||
|
||||
CONFIG += ordered
|
||||
|
||||
SUBDIRS += \
|
||||
openpgpsdk/src/openpgpsdk.pro \
|
||||
supportlibs/pegmarkdown/pegmarkdown.pro \
|
||||
libbitdht/src/libbitdht.pro \
|
||||
libretroshare/src/libretroshare.pro \
|
||||
libresapi/src/libresapi.pro \
|
||||
retroshare-gui/src/retroshare-gui.pro \
|
||||
retroshare-nogui/src/retroshare-nogui.pro \
|
||||
plugins/plugins.pro
|
||||
openpgpsdk \
|
||||
libbitdht \
|
||||
libretroshare \
|
||||
libresapi \
|
||||
pegmarkdown \
|
||||
retroshare_gui \
|
||||
retroshare_nogui \
|
||||
plugins
|
||||
|
||||
openpgpsdk.file = openpgpsdk/src/openpgpsdk.pro
|
||||
|
||||
libbitdht.file = libbitdht/src/libbitdht.pro
|
||||
|
||||
libretroshare.file = libretroshare/src/libretroshare.pro
|
||||
libretroshare.depends = openpgpsdk libbitdht
|
||||
|
||||
libresapi.file = libresapi/src/libresapi.pro
|
||||
libresapi.depends = libretroshare
|
||||
|
||||
pegmarkdown.file = supportlibs/pegmarkdown/pegmarkdown.pro
|
||||
|
||||
retroshare_gui.file = retroshare-gui/src/retroshare-gui.pro
|
||||
retroshare_gui.depends = libretroshare libresapi pegmarkdown
|
||||
retroshare_gui.target = retroshare-gui
|
||||
|
||||
retroshare_nogui.file = retroshare-nogui/src/retroshare-nogui.pro
|
||||
retroshare_nogui.depends = libretroshare libresapi
|
||||
retroshare_nogui.target = retroshare-nogui
|
||||
|
||||
plugins.file = plugins/plugins.pro
|
||||
plugins.depends = retroshare_gui
|
||||
plugins.target = plugins
|
||||
|
2
TODO.txt
@ -63,7 +63,7 @@ GUI
|
||||
0013 [ ] new design, new icons, minimal UI (from purplehaze420) comment: use webui as base for minimal ui
|
||||
cyril: we cannot change everything now. But purplehaze420 said he would provide a consistent set of icons. That would be great.
|
||||
|
||||
0014 [ ] go to Settings -> Permissions: wait for scrollbars to appear go back to any other setting (e.g. Notify): the page now
|
||||
0014 [X] go to Settings -> Permissions: wait for scrollbars to appear go back to any other setting (e.g. Notify): the page now
|
||||
needs the same space as the permission matrix (happens on windows + linux; can be "fixed" by closing and reopen the setting window)
|
||||
(from sehraf)
|
||||
|
||||
|
@ -1,10 +1,8 @@
|
||||
set QTDIR=C:\Qt\4.8.6
|
||||
set MINGW=C:\MinGW
|
||||
set GIT=C:\Program Files\Git
|
||||
|
||||
set PATH=%QTDIR%\bin;%MINGW%\bin;%PATH%
|
||||
|
||||
"C:\Program Files\TortoiseSVN\bin\SubWCRev" . libretroshare\src\retroshare\rsversion.in libretroshare\src\retroshare\rsversion.h
|
||||
"C:\Program Files\TortoiseSVN\bin\SubWCRev" . retroshare-gui\src\retroshare.in retroshare-gui\src\retroshare.nsi
|
||||
set PATH=%QTDIR%\bin;%MINGW%\bin;%GIT%\bin;%PATH%
|
||||
|
||||
|
||||
@echo off
|
||||
@ -65,12 +63,19 @@ qmake openpgpsdk.pro
|
||||
|
||||
mingw32-make
|
||||
|
||||
cd ..\..\libresapi\src
|
||||
|
||||
if not %clean%x==x mingw32-make clean
|
||||
|
||||
qmake libresapi.pro
|
||||
|
||||
mingw32-make %%a
|
||||
|
||||
cd ..\..\libretroshare\src
|
||||
|
||||
if not %clean%x==x mingw32-make clean
|
||||
|
||||
qmake libretroshare.pro
|
||||
qmake libretroshare.pro "CONFIG+=version_detail_bash_script"
|
||||
|
||||
mingw32-make %%a
|
||||
|
||||
@ -97,7 +102,7 @@ cd ..\..\retroshare-gui\src
|
||||
|
||||
if not %clean%x==x mingw32-make clean
|
||||
|
||||
qmake retroshare-gui.pro
|
||||
qmake retroshare-gui.pro "CONFIG+=version_detail_bash_script"
|
||||
|
||||
mingw32-make %%a
|
||||
|
||||
|
@ -1,4 +1,232 @@
|
||||
retroshare06 (0.6.0-0.XXXXXX~YYYYYY) YYYYYY; urgency=low
|
||||
retroshare06 (0.6.0-1.XXXXXX~YYYYYY) YYYYYY; urgency=low
|
||||
|
||||
a276986 ( ) Merge pull request #60 from PhenomRetroShare/Fix_AllowChatTextFormatOption
|
||||
88a6931 (GUI ) Allow Chat Text Format Option working.
|
||||
0b5b20d ( ) Merge pull request #59 from AsamK/qmake_improvements
|
||||
0409dd8 ( ) Merge pull request #58 from AsamK/debian_make_install
|
||||
21e99cf (Packaging ) Use explicit dependencies instead of CONFIG += ordered
|
||||
f002310 (Packaging ) Remove libpegmarkdown from win32 retroshare-nogui build
|
||||
2337b46 (Packaging ) Specify plugins as plugins to qmake
|
||||
ecb5d93 (GUI ) changed default color for the system chat bubble
|
||||
d51b4b2 (Packaging ) Adapt debian/ubuntu package files to use "make install"
|
||||
c07bef3 (GUI ) Fixed Create Lobby Dialog's window size
|
||||
a45de1d (Chat ) Merge pull request #57 from csoler/v0.6-SignedLobbies
|
||||
40bffc3 (Chat ) fixed last GUI bugs for authed lobbies
|
||||
6d01461 (Chat ) fixed a few GUI bits for non anonymous chat lobbies
|
||||
627dcc0 (Forums ) Merge pull request #50 from chozabu/forum_additions
|
||||
7270ba9 (Chat ) Merge pull request #56 from AsamK/distant_chat_history
|
||||
5dad168 (Chat ) Implement history for distant chat
|
||||
d7531b3 ( ) Merge pull request #54 from cavebeat/coverity
|
||||
9240512 ( ) Merge pull request #55 from AsamK/install_stylesheets
|
||||
622e942 (GUI ) Remove Thumbs.db files and add to .gitignore
|
||||
699213a (Packaging ) Load chat styles also from DATA_DIR/stylesheets
|
||||
66ba687 (Packaging ) Install qss and chat styles
|
||||
4d7f92e (GXS/NXS ) Removed unnecessary select of groups in RsGxsNetService::locked_genReqGrpTransaction.
|
||||
753846b (GXS/SQL ) Added count of requests and results to debug output in RsDataService::retrieveGxsGrpMetaData
|
||||
d118a13 (GXS/NXS ) Fixed adding of empty group id to notify when removing a group.
|
||||
4cc1df3 (GXS/NXS ) Ignore updates of not existing groups in RsGenExchange::processGrpMask. Solves: "Error code: no such column: su
|
||||
d8aa712 (Packaging ) travis/coverity tokens updated
|
||||
6e1a8fa ( ) Merge pull request #21 from AsamK/lobby_history
|
||||
040b4fb (Chat ) implemented gp-authed lobbies. Still needs some GUI
|
||||
b8459b3 ( ) Merge pull request #44 from AsamK/improve_qmake
|
||||
c622ca0 (Packaging ) Issue compile error if DATA_DIR is not set
|
||||
ef499cd ( ) Merge pull request #46 from PhenomRetroShare/Fix_ChatWidgetSearchTextThreshold
|
||||
668394d ( ) Merge pull request #47 from PhenomRetroShare/AddHTML_TextOptimization_0.6
|
||||
6ba2f68 ( ) Merge pull request #45 from PhenomRetroShare/Fix_ChatWidgetLastCursorFormatting
|
||||
1736ad8 ( ) Merge pull request #11 from cavebeat/coverity_scan
|
||||
a39663d ( ) Merge branch 'master' of https://github.com/RetroShare/RetroShare
|
||||
17af892 (GUI ) set a default minimum column header size for comments.
|
||||
c29ae55 (Code cleaning ) Merge pull request #38 from cavebeat/rm_linkscloud
|
||||
1a1a2aa (GXS/NXS ) Lowered update of server sync TS from 10 seconds to 60 seconds.
|
||||
641a433 (GUI ) Fixed filter in FriendList.
|
||||
217c9b9 ( ) Merge branch 'master' of https://github.com/RetroShare/RetroShare
|
||||
9d65b08 (GUI ) set default background color for system messages at private chat window
|
||||
da66ac5 (GXS ) GxsGroupFrameDialog: Fixed restore of active group tree item when subscrube/unsubscribe a group.
|
||||
185220b (GUI ) enable customisation of columns in forum thread widget
|
||||
389f2f0 (GXS/SQL ) Removed delete of message files in RsDataService::resetDataStore.
|
||||
836b866 ( ) Merge pull request #37 from sehraf/pr-friendlist_import_export-V2
|
||||
5aaf3e6 (Packaging ) Move data dir from build_scripts/ to root and adapt RedHat build files
|
||||
4dbffe0 ( ) Merge pull request #48 from PhenomRetroShare/AddRetroShareLinkOpenFileWhenExists
|
||||
5c67941 ( ) Update README.md
|
||||
5ae5d76 (Packaging ) Make file names consistent with packaging
|
||||
91e19fc (Packaging ) Disable installing of headers and libretroshare.a
|
||||
d4a36ed (Packaging ) Make data and plugin directory configurable at compile time
|
||||
6b7a6e2 (Packaging ) Make RS installable with "make install"
|
||||
fa54fce ( ) Merge pull request #49 from heini/redhat_build
|
||||
1fcae61 (GXS/SQL ) Removed static defines for column numbers in RsDataService and replaced it with members. Initialized members wh
|
||||
531ce34 ( ) Merge branch 'master' into AddRetroShareLinkOpenFileWhenExists
|
||||
860292d ( ) Merge branch 'master' into AddHTML_TextOptimization_0.6
|
||||
70b9c45 ( ) Merge branch 'master' into Fix_ChatWidgetSearchTextThreshold
|
||||
79fb8df ( ) Merge branch 'master' into Fix_ChatWidgetLastCursorFormatting
|
||||
e9aa4ff ( ) Merge pull request #3 from chozabu/copy_version_info_button
|
||||
d1deef0 (GUI ) fixed new lines in certificate string
|
||||
7bd41e9 ( ) Merge pull request #4 from chozabu/grouter_stats_basic_names
|
||||
7fe46ed (Packaging ) Provide RedHat family packaging script.
|
||||
f30ed24 (GXS/SQL ) Moved gxs data from files into database - Added update to RsDataService - Added new table "DATABASE_RELEASE" to
|
||||
b1aae2d ( ) Merge branch 'master' into AddRetroShareLinkOpenFileWhenExists
|
||||
0234734 (GUI ) When the file in the link already exists, RS open it.
|
||||
791fb78 (GUI ) renaming details and details2 for better clarification
|
||||
ad499e6 (GUI ) renamed 'pubkey' to 'certificate' and removed empty location names
|
||||
6893c58 ( ) Merge pull request #42 from cavebeat/comma
|
||||
c66de1c (Packaging ) fixed comma in README for debian
|
||||
f58e347 ( ) Merge pull request #23 from AsamK/patch-1
|
||||
326a330 (GUI ) Fix ChatWidget last cursor formatting. To test it, search a text that will be colored a end. New messages lose
|
||||
c44afc0 ( ) Merge branch 'master' into Fix_ChatWidgetSearchTextThreshold
|
||||
b1fd290 ( ) Merge branch 'master' into AddHTML_TextOptimization_0.6
|
||||
eb4313f ( ) merge before commit
|
||||
58d29c3 (Bug fix ) fixed error message in pqissl::cansend()
|
||||
5c97010 (GUI ) Fix ChatWidget search text label threshold.
|
||||
5a32cca (Packaging ) README: Fix executable name
|
||||
339558f (Packaging ) Update and rename README.txt to README.md
|
||||
6ac107a (GXS/SQL ) Added method "tableExist" to RetroDb.
|
||||
3665238 (GXS/SQL ) Added new methods for transaction to RetroDb.
|
||||
4309642 ( ) merging before commit
|
||||
58c70ca ( ) moved [not] operator inside parenthesis. Does not change anything except improving readability
|
||||
dea7c77 (Global router ) fixed missing removal of deleted data causing a crash when large messages cause an error in Global Router
|
||||
334ddf8 (GUI ) Enabled sort by columns other than name combined with sort by state in FriendList.
|
||||
176c3ab (GUI ) FriendSelectionWidget: - Added sort by state - Moved buttons "All"/"None" into context menu
|
||||
4923c47 (GUI ) RSTreeWidget: - Added possibility to add own actions to header context menu - Added resort of items
|
||||
02775c6 (GUI ) Add HTML Text Optimization by exporting styles.
|
||||
1d9e398 (Code cleaning ) removed LinksCloud LinksCloud has been replaced by Posted and is hosted for archiving reasons in https://github
|
||||
04a1c10 (GUI ) fixed UTF-8 group names
|
||||
941959c (GUI ) conversion from QSettings to XML
|
||||
48c3eed (Packaging ) Removed "CONFIG += console" for Windows release build.
|
||||
3b40f0e (GUI ) FriendList: - Show information of the "best" ssl item on the gpg item only when the gpg item is not expanded. -
|
||||
42bbf76 (GUI ) fixed display of software revision in main window (patch from ASmith)
|
||||
80d765e (GUI ) small fix
|
||||
3634981 (GUI ) added import/export friendlist
|
||||
4d7f733 (Packaging ) fixed bug in git parameter in packaging script
|
||||
9734f32 (Packaging ) updated ubuntu changelog. improved ubuntu packaging script
|
||||
|
||||
-- Cyril Soler <csoler@users.sourceforge.net> Sun, 16 Aug 2015 20:00:00 +0100
|
||||
|
||||
retroshare06 (0.6.0-1.20150816~9734f32a) trusty; urgency=low
|
||||
|
||||
f6b830d (branch merging) Merge pull request #35 from hunbernd/chat-fix
|
||||
16859a1 (GUI ) Fix: chatlobby toaster not working
|
||||
2e08dde (Bug fix ) additional check for pqissl::sockfd before using it (patch from Jenster)
|
||||
384e7ba (GXS ) Reworked processing of requests in RsGxsDataAccess to prevent freezes of the gui.
|
||||
4a50a62 (Git management) Merge branch 'master' of https://github.com/RetroShare/RetroShare
|
||||
6eccd57 (Git management) merging before commit
|
||||
3084d2a (Debug info ) improved security message in console for whitelisted peers
|
||||
0402e53 (GUI ) Fix: empty line duplication bug
|
||||
4095d9d (GXS ) Switched retrieve of posts in GxsMessageFramePostWidget from "requestMsgRelatedInfo" to "requestMsgInfo".
|
||||
b1101ed (GXS ) Prevent selecting data from the database in RsGxsNetService::syncWithPeers without online friends.
|
||||
3731617 (Debug info ) Fixed typo in debug output.
|
||||
e667071 (GUI ) Moved IP Filter Widgets into Tabs
|
||||
caa97cc (GXS ) Added database name to the debug output in RsDataService.
|
||||
2a6b623 (GXS ) Added extended debug outputs of times in RsDataService.
|
||||
7472f81 (Git management) Merge branch 'master' of https://github.com/RetroShare/RetroShare
|
||||
9d291aa (GUI ) update windows build scripts changed gxs id icon for linked with profile.
|
||||
a765016 (GUI ) Moved column show/hide from context menu of the tree to the context menu of the header in IdDialog.
|
||||
e73e68d (GUI ) Reduced the size of the status icon on the avatar image in FriendList.
|
||||
442ec23 (GXS ) Added index in database for column grpId in table MESSAGES.
|
||||
b8edb75 (GXS ) Optimized SELECT creation in RetroDb::sqlQuery
|
||||
ab538c6 (GXS ) Avoid error messages "table already exists" in RsDataService::initialise by using "IF NOT EXISTS"
|
||||
783465b (GUI ) forget to commit this, for the Search Filter DHT IPs
|
||||
13e77fb (Bugs ) Merge pull request #19 from sehraf/pr-fix_crash_on_shutdown
|
||||
9d0b066 (Bugs ) Fixed hide offline friends in ServicePermissionsPage
|
||||
c919786 (GUI ) Fixed typo. Updated english translation.
|
||||
d5c95c4 (GUI ) Fixed layout of the ServicePermissionsPage
|
||||
9265145 (GUI ) Updated english translation
|
||||
87f2e6d (GUI ) FriendList: - Removed avatar column, state column. Added combined avatar and status icon
|
||||
ec67ee0 (VOIP ) added graph display of instantly required bandwidth for VOIP, in preparation to chosing new
|
||||
video codec. GUI layout
|
||||
d5c33f5 (Packaging ) fixed windows build script
|
||||
c168765 (GUI ) Added tab for the DHT TreeWidgets for better view Added a search Filter for DHT IP addresses
|
||||
48bb8b4 (Git management) sequel to 6b2ed2fb2d84d7e48b15fa917aa4eb8015922d15
|
||||
fabc3a3 (Git management) added some rules to .gitignore
|
||||
168eb45 (Debug info ) removed debug info about missing keys; added debug info about deserialization checking of string
|
||||
311358b (Git management) merged changes from master
|
||||
a87adb8 (Debug info ) improved README file
|
||||
51ab1fc (Debug info ) updated readme file
|
||||
43db562 (Packaging ) Fixed build script for Windows installer
|
||||
789df68 (Packaging ) Added update of version information for Windows build - Added template file version.html.in - Removed RS_BUILD_NUM
|
||||
1412dc6 (Packaging ) Removed utopic, added new ppa name
|
||||
|
||||
-- Cyril Soler <csoler@users.sourceforge.net> Sun, 16 Aug 2015 20:00:00 +0100
|
||||
|
||||
retroshare06 (0.6.0-1.20150802.34ec6dfd~precise) precise; urgency=low
|
||||
|
||||
GUI
|
||||
- improved filtering method against lol bombs. Thx to ConcernedCitizen for pointing this out
|
||||
- fix #21 typo "defaut" instead of "default" in switch statement in RSGraphWidget (patch from Chozabu)
|
||||
- moved all bw graph files in statistics. Removed outqueue info widget. Created new cpp files to host the bw graph code.
|
||||
Started minimal UI to display bw information. The goal is t
|
||||
- fixed position of scaled/highlighted nodes in node graph (patch from Chozabu)
|
||||
- fixed a few bugs in statistics GUI. Still misses names and proper curve display
|
||||
- Enabled Messenger Window in system tray icon.
|
||||
- Fixed overlay icon (star) for tray icon.
|
||||
- fixed up various places in the GUI for high DPI screens (new icons and icon qrc file generation script, font-size based widgets, etc)
|
||||
- disable update of group messages for IdService since it is unused and takes some bandwidth
|
||||
- fixed typo in server page "127.0.01"
|
||||
- Added stylesheet to plugins.
|
||||
- Moved fix font from GenCertDialog to qss (Modified patch from Henry). Added defaults to ui without style sheet
|
||||
- Fixed typo in string (Patch from Henry).
|
||||
- Added customize of columns to RSTreeWidget.
|
||||
- added back functionality to choose DL directory for each channel
|
||||
- Removed generate of channel messages.
|
||||
- FriendList: - Added customize of columns with RSTreeWidget. - Reduced display menu.
|
||||
- Optimized fill of forums when modifying the read state.
|
||||
- Fixed compile with Qt 5
|
||||
- Added disable/enable of GxsIdDetails process. Disabled GxsIdDetails process when filling gxs id's in forums.
|
||||
- Optimized load of forums by moving the avatar handling for the tooltip to the tooltip creation.
|
||||
|
||||
|
||||
added correct image file for finished transfers
|
||||
|
||||
- added correct image file for finished transfers
|
||||
|
||||
Backend / Coverity bug fixes
|
||||
- removed old function entry to collect outqueue stats.
|
||||
- removed unused method for OutQueue statistics; improved BW curve display; fixed a few display bugs
|
||||
- Added missing initialization in - pqissl - pqissludp - PeerConnectStateBox - RsTlvBanListEntry - RsServer
|
||||
TcpStream - PGPCertificateInfo - peerConnectAddress - AudioInputConfig
|
||||
- Fixed usage of member _thread_id in RsMutex
|
||||
- Removed unused member from ProfileManager.
|
||||
- Added missing restore of ostream format (std::dec) in rschatitems.cc.
|
||||
- Added missing restore of ostream format (std::dec) in CreateLobbyDialog::createLobby.
|
||||
- Fixed crash in ChatMsgItem::removeItem when "mParent == NULL".
|
||||
- Added missing restore of ostream format (std::dec) in p3ServiceServer::sendItem.
|
||||
- Fixed crash in ChatLobbyUserNotify::subMenuClicked when using "Remove All" of the chat lobby notifier.
|
||||
- Fixed possible crash in DetailsDialog::setFileHash by checking return value of dynamic_cast.
|
||||
- Fixed possible crash in ftServer::receiveTurtleData by checking return value of dynamic_cast.
|
||||
- Fixed possible crash in ftServer::handleIncoming by checking return value of dynamic_cast.
|
||||
- Fixed possible crash in ServiceControlSerialiser by checking return value of dynamic_cast.
|
||||
- Fixed possible crash in RsFileTransferSerialiser by checking return value of dynamic_cast.
|
||||
- Fixed possible crash in ChatLobbyDialog::init by checking return value of dynamic_cast.
|
||||
- Fixed possible crash in RsGRouterSerialiser by checking return value of dynamic_cast.
|
||||
- added basic functions to collect bandwidth info in pqistreamer both ways; added a sorting method in BWGraphSource
|
||||
to create curves from extracted BW info. Still not yet functiona
|
||||
- Fixed possible crash in RsGxsIdSerialiser by checking return value of dynamic_cast.
|
||||
- Fixed possible crash in p3GRouter by checking return value of dynamic_cast.
|
||||
- Removed dead code from ImHistoryBrowser::fillItem.
|
||||
- Removed potentially unintentional integer overflow in NxsBandwidthRecorder::recordEvent.
|
||||
- Added initialize of RsGxsChannelPost members.
|
||||
- fixed potential integer problem in image de-serialization (reported by HM)
|
||||
- Added initialize of RsVOIPPingItem members
|
||||
- fixed potential integer problems in de-serialization of different TLV items (patch from Henry)
|
||||
|
||||
Plugins
|
||||
- fix #20 crash on shutdown with plugins enabled. Settings window did leak plugin config pages (patch from hunbernd)
|
||||
|
||||
WebUI
|
||||
- allow only whitelisted link protocols to prevent javascript in links
|
||||
- improved error message in webui: show full path of file if read failed
|
||||
- make link detection work if the message ends with </a>
|
||||
- added chat
|
||||
- fix serialisation of floating point numbers in SuperEasyJSON for german locale. JSON expects decimal points, but german locale used comma.
|
||||
|
||||
GXS IDs
|
||||
- added additional key checking for IDs received during distant chat DH handshake
|
||||
- added methods to check public/private keys for consistent fingerprint and content. Should be later used to check GXS keys when they arrive from neighbor nodes.
|
||||
|
||||
Distant chat
|
||||
- Added check of function parameter to DistantChatService::handleRecvDHPublicKey.
|
||||
|
||||
-- Cyril Soler <csoler@users.sourceforge.net> Sun, 02 Aug 2015 16:00:00 +0100
|
||||
|
||||
retroshare06 (0.6.0-0.8551~precise) precise; urgency=low
|
||||
|
||||
GUI
|
||||
|
||||
|
@ -1,11 +1,11 @@
|
||||
#!/bin/sh
|
||||
|
||||
rm -f ./libssh-0.5.4.tar.gz.*
|
||||
rm -f ./retroshare06_0.6.0-0.*_source.build
|
||||
rm -f ./retroshare06_0.6.0-0.*_source.changes
|
||||
rm -f ./retroshare06_0.6.0-0.*.tar.gz
|
||||
rm -f ./retroshare06_0.6.0-0.*.diff.gz
|
||||
rm -f ./retroshare06_0.6.0-0.*.dsc
|
||||
rm -f ./retroshare06_0.6.0-1.*_source.build
|
||||
rm -f ./retroshare06_0.6.0-1.*_source.changes
|
||||
rm -f ./retroshare06_0.6.0-1.*.tar.gz
|
||||
rm -f ./retroshare06_0.6.0-1.*.diff.gz
|
||||
rm -f ./retroshare06_0.6.0-1.*.dsc
|
||||
rm -f *.upload
|
||||
|
||||
rm -f *~
|
||||
|
@ -2,7 +2,7 @@ Source: retroshare06
|
||||
Section: devel
|
||||
Priority: standard
|
||||
Maintainer: Cyril Soler <csoler@users.sourceforge.net>
|
||||
Build-Depends: debhelper (>= 7), libglib2.0-dev, libupnp-dev, qt4-dev-tools, libqt4-dev, libssl-dev, libxss-dev, libgnome-keyring-dev, libbz2-dev, libqt4-opengl-dev, libqtmultimediakit1, qtmobility-dev, libspeex-dev, libspeexdsp-dev, libxslt1-dev, cmake, libcurl4-openssl-dev, libcv-dev, libopencv-core-dev, libopencv-contrib-dev, libhighgui-dev, tcl8.5, libsqlcipher-dev, libmicrohttpd-dev
|
||||
Build-Depends: debhelper (>= 7), libglib2.0-dev, libupnp-dev, qt4-dev-tools, libqt4-dev, libssl-dev, libxss-dev, libgnome-keyring-dev, libbz2-dev, libqt4-opengl-dev, libqtmultimediakit1, qtmobility-dev, libspeex-dev, libspeexdsp-dev, libxslt1-dev, cmake, libcurl4-openssl-dev, libcv-dev, libopencv-core-dev, libopencv-contrib-dev, libhighgui-dev, tcl8.5, libsqlcipher-dev, libmicrohttpd-dev, libavcodec-dev
|
||||
Standards-Version: 3.9.3
|
||||
Homepage: http://retroshare.sourceforge.net
|
||||
|
||||
|
@ -2,7 +2,7 @@ Source: retroshare06
|
||||
Section: devel
|
||||
Priority: standard
|
||||
Maintainer: Cyril Soler <csoler@users.sourceforge.net>
|
||||
Build-Depends: debhelper (>= 7), libglib2.0-dev, libupnp-dev, qt4-dev-tools, libqt4-dev, libssl-dev, libxss-dev, libgnome-keyring-dev, libbz2-dev, libqt4-opengl-dev, libqt4-multimedia, libspeex-dev, libspeexdsp-dev, libxslt1-dev, cmake, libcurl4-openssl-dev, libcv-dev, libcvaux-dev, libhighgui-dev, tcl8.5, libmicrohttpd-dev, libsqlite3-dev
|
||||
Build-Depends: debhelper (>= 7), libglib2.0-dev, libupnp-dev, qt4-dev-tools, libqt4-dev, libssl-dev, libxss-dev, libgnome-keyring-dev, libbz2-dev, libqt4-opengl-dev, libqt4-multimedia, libspeex-dev, libspeexdsp-dev, libxslt1-dev, cmake, libcurl4-openssl-dev, libcv-dev, libcvaux-dev, libhighgui-dev, tcl8.5, libmicrohttpd-dev, libsqlite3-dev, libavcodec-dev
|
||||
Standards-Version: 3.9.3
|
||||
Homepage: http://retroshare.sourceforge.net
|
||||
|
||||
|
@ -2,7 +2,7 @@ Source: retroshare
|
||||
Section: devel
|
||||
Priority: standard
|
||||
Maintainer: Cyril Soler <csoler@users.sourceforge.net>
|
||||
Build-Depends: debhelper (>= 7), libglib2.0-dev, libupnp-dev, qt4-dev-tools, libqt4-dev, libssl-dev, libxss-dev, libgnome-keyring-dev, libbz2-dev, libqt4-opengl-dev, libspeex-dev, libspeexdsp-dev, libxslt1-dev, libprotobuf-dev, protobuf-compiler, cmake, libcurl4-openssl-dev
|
||||
Build-Depends: debhelper (>= 7), libglib2.0-dev, libupnp-dev, qt4-dev-tools, libqt4-dev, libssl-dev, libxss-dev, libgnome-keyring-dev, libbz2-dev, libqt4-opengl-dev, libspeex-dev, libspeexdsp-dev, libxslt1-dev, libprotobuf-dev, protobuf-compiler, cmake, libcurl4-openssl-dev, libavcodec-dev
|
||||
Standards-Version: 3.9.1
|
||||
Homepage: http://retroshare.sourceforge.net
|
||||
|
||||
|
@ -2,7 +2,7 @@ Source: retroshare06
|
||||
Section: devel
|
||||
Priority: standard
|
||||
Maintainer: Cyril Soler <csoler@users.sourceforge.net>
|
||||
Build-Depends: debhelper (>= 7), libglib2.0-dev, libupnp-dev, qt4-dev-tools, libqt4-dev, libssl-dev, libxss-dev, libgnome-keyring-dev, libbz2-dev, libqt4-opengl-dev, libqtmultimediakit1, qtmobility-dev, libspeex-dev, libspeexdsp-dev, libxslt1-dev, cmake, libcurl4-openssl-dev, libopencv-dev, tcl8.5, libsqlcipher-dev, libmicrohttpd-dev
|
||||
Build-Depends: debhelper (>= 7), libglib2.0-dev, libupnp-dev, qt4-dev-tools, libqt4-dev, libssl-dev, libxss-dev, libgnome-keyring-dev, libbz2-dev, libqt4-opengl-dev, libqtmultimediakit1, qtmobility-dev, libspeex-dev, libspeexdsp-dev, libxslt1-dev, cmake, libcurl4-openssl-dev, libopencv-dev, tcl8.5, libsqlcipher-dev, libmicrohttpd-dev, libavcodec-dev
|
||||
Standards-Version: 3.9.3
|
||||
Homepage: http://retroshare.sourceforge.net
|
||||
|
||||
|
@ -1,10 +0,0 @@
|
||||
usr/bin
|
||||
usr/sbin
|
||||
usr/share/pixmaps
|
||||
usr/share/applications/
|
||||
usr/share/RetroShare06/
|
||||
usr/share/RetroShare06/webui/
|
||||
usr/share/RetroShare06/sounds/
|
||||
usr/share/icons/hicolor/24x24/apps/
|
||||
usr/share/icons/hicolor/48x48/apps/
|
||||
usr/share/icons/hicolor/64x64/apps/
|
@ -1,2 +1 @@
|
||||
usr/lib/retroshare/extensions6/libFeedReader.so
|
||||
|
||||
debian/tmp/usr/lib/retroshare/extensions6/libFeedReader.so*
|
||||
|
@ -1,6 +1,3 @@
|
||||
usr/bin
|
||||
usr/bin/RetroShare-nogui
|
||||
usr/share
|
||||
usr/share/RetroShare
|
||||
usr/share/RetroShare/bdboot.txt
|
||||
|
||||
debian/tmp/usr/bin/RetroShare06-nogui
|
||||
debian/tmp/usr/share/RetroShare06/bdboot.txt
|
||||
debian/tmp/usr/share/RetroShare06/webui/*
|
||||
|
@ -1,2 +1 @@
|
||||
usr/lib/retroshare/extensions6/libVOIP.so
|
||||
|
||||
debian/tmp/usr/lib/retroshare/extensions6/libVOIP.so*
|
||||
|
@ -1,10 +1,6 @@
|
||||
usr/share/applications/retroshare.desktop
|
||||
usr/share/pixmaps/retroshare.xpm
|
||||
usr/share/RetroShare/bdboot.txt
|
||||
usr/share/icons/hicolor/48x48/apps/retroshare.png
|
||||
usr/share/icons/hicolor/24x24/apps/retroshare.png
|
||||
usr/share/icons/hicolor/64x64/apps/retroshare.png
|
||||
usr/bin
|
||||
usr/bin/RetroShare
|
||||
usr/bin/RetroShare-nogui
|
||||
|
||||
debian/tmp/usr/bin/RetroShare06
|
||||
debian/tmp/usr/bin/RetroShare06-nogui
|
||||
debian/tmp/usr/share/applications/retroshare06.desktop
|
||||
debian/tmp/usr/share/icons/hicolor/*
|
||||
debian/tmp/usr/share/pixmaps/retroshare06.xpm
|
||||
debian/tmp/usr/share/RetroShare06/*
|
||||
|
@ -1,14 +1,14 @@
|
||||
#!/usr/bin/make -f
|
||||
|
||||
builddir:
|
||||
mkdir -p builddir
|
||||
|
||||
builddir/Makefile: builddir
|
||||
configure: configure-stamp
|
||||
configure-stamp:
|
||||
dh_testdir
|
||||
cd src && qmake-qt4 "CONFIG-=debug" "CONFIG+=release" PREFIX=/usr LIB_DIR=/usr/lib RetroShare.pro
|
||||
touch $@
|
||||
|
||||
build: build-stamp
|
||||
|
||||
build-stamp: builddir/Makefile
|
||||
build: build-stamp
|
||||
build-stamp: configure-stamp
|
||||
dh_testdir
|
||||
# Add here commands to compile the package.
|
||||
# cd libssh-0.6.4 && mkdir -p build && cd build && cmake -DWITH_STATIC_LIB=ON .. && make
|
||||
@ -17,68 +17,24 @@ build-stamp: builddir/Makefile
|
||||
# cp -r libssh-0.6.4 lib/
|
||||
#cp -r sqlcipher lib/
|
||||
#cd src/rsctrl/src && make
|
||||
cd src && qmake-qt4 CONFIG=release RetroShare.pro && make
|
||||
cd src && $(MAKE)
|
||||
touch $@
|
||||
|
||||
clean:
|
||||
dh_testdir
|
||||
dh_testroot
|
||||
rm -f build-stamp
|
||||
rm -f configure-stamp build-stamp
|
||||
# Add here commands to clean up after the build process.
|
||||
rm -rf builddir
|
||||
[ ! -f src/Makefile ] || (cd src && $(MAKE) distclean)
|
||||
dh_clean
|
||||
|
||||
install: build
|
||||
dh_testdir
|
||||
dh_testroot
|
||||
dh_clean -k
|
||||
dh_installdirs
|
||||
install -D -m 644 src/data/retroshare.desktop $(CURDIR)/debian/retroshare06/usr/share/applications/retroshare06.desktop
|
||||
install -D -m 644 src/data/24x24/retroshare.png $(CURDIR)/debian/retroshare06/usr/share/icons/hicolor/24x24/apps/retroshare06.png
|
||||
install -D -m 644 src/data/48x48/retroshare.png $(CURDIR)/debian/retroshare06/usr/share/icons/hicolor/48x48/apps/retroshare06.png
|
||||
install -D -m 644 src/data/64x64/retroshare.png $(CURDIR)/debian/retroshare06/usr/share/icons/hicolor/64x64/apps/retroshare06.png
|
||||
install -D -m 644 src/data/retroshare.xpm $(CURDIR)/debian/retroshare06/usr/share/pixmaps/retroshare06.xpm
|
||||
install -D -m 644 src/plugins/VOIP/libVOIP.so.1.0.0 $(CURDIR)/debian/retroshare06-voip-plugin/usr/lib/retroshare/extensions6/libVOIP.so
|
||||
install -D -m 644 src/plugins/FeedReader/libFeedReader.so.1.0.0 $(CURDIR)/debian/retroshare06-feedreader-plugin/usr/lib/retroshare/extensions6/libFeedReader.so
|
||||
install -D -m 644 src/libbitdht/src/bitdht/bdboot.txt $(CURDIR)/debian/retroshare06-nogui/usr/share/RetroShare06/bdboot.txt
|
||||
install -D -m 644 src/libbitdht/src/bitdht/bdboot.txt $(CURDIR)/debian/retroshare06/usr/share/RetroShare06/bdboot.txt
|
||||
install -D -m 755 src/retroshare-nogui/src/retroshare-nogui $(CURDIR)/debian/retroshare06-nogui/usr/bin/RetroShare06-nogui
|
||||
install -D -m 755 src/retroshare-nogui/src/retroshare-nogui $(CURDIR)/debian/retroshare06/usr/bin/RetroShare06-nogui
|
||||
install -D -m 755 src/retroshare-gui/src/RetroShare $(CURDIR)/debian/retroshare06/usr/bin/RetroShare06
|
||||
install -D -m 644 src/libresapi/src/webfiles/JSXTransformer.js $(CURDIR)/debian/retroshare06/usr/share/RetroShare06/webui/JSXTransformer.js
|
||||
install -D -m 644 src/libresapi/src/webfiles/RsApi.js $(CURDIR)/debian/retroshare06/usr/share/RetroShare06/webui/RsApi.js
|
||||
install -D -m 644 src/libresapi/src/webfiles/RsXHRConnection.js $(CURDIR)/debian/retroshare06/usr/share/RetroShare06/webui/RsXHRConnection.js
|
||||
install -D -m 644 src/libresapi/src/webfiles/green-black.css $(CURDIR)/debian/retroshare06/usr/share/RetroShare06/webui/green-black.css
|
||||
install -D -m 644 src/libresapi/src/webfiles/gui.jsx $(CURDIR)/debian/retroshare06/usr/share/RetroShare06/webui/gui.jsx
|
||||
install -D -m 644 src/libresapi/src/webfiles/index.html $(CURDIR)/debian/retroshare06/usr/share/RetroShare06/webui/index.html
|
||||
install -D -m 644 src/libresapi/src/webfiles/react.js $(CURDIR)/debian/retroshare06/usr/share/RetroShare06/webui/react.js
|
||||
install -D -m 644 src/retroshare-gui/src/gui/images/logo/logo_splash.png $(CURDIR)/debian/retroshare06/usr/share/RetroShare06/webui/img/logo_splash.png
|
||||
install -D -m 644 src/libresapi/src/webfiles/JSXTransformer.js $(CURDIR)/debian/retroshare06-nogui/usr/share/RetroShare06/webui/JSXTransformer.js
|
||||
install -D -m 644 src/libresapi/src/webfiles/RsApi.js $(CURDIR)/debian/retroshare06-nogui/usr/share/RetroShare06/webui/RsApi.js
|
||||
install -D -m 644 src/libresapi/src/webfiles/RsXHRConnection.js $(CURDIR)/debian/retroshare06-nogui/usr/share/RetroShare06/webui/RsXHRConnection.js
|
||||
install -D -m 644 src/libresapi/src/webfiles/green-black.css $(CURDIR)/debian/retroshare06-nogui/usr/share/RetroShare06/webui/green-black.css
|
||||
install -D -m 644 src/libresapi/src/webfiles/gui.jsx $(CURDIR)/debian/retroshare06-nogui/usr/share/RetroShare06/webui/gui.jsx
|
||||
install -D -m 644 src/libresapi/src/webfiles/index.html $(CURDIR)/debian/retroshare06-nogui/usr/share/RetroShare06/webui/index.html
|
||||
install -D -m 644 src/libresapi/src/webfiles/react.js $(CURDIR)/debian/retroshare06-nogui/usr/share/RetroShare06/webui/react.js
|
||||
install -D -m 644 src/retroshare-gui/src/gui/images/logo/logo_splash.png $(CURDIR)/debian/retroshare06-nogui/usr/share/RetroShare06/webui/img/logo_splash.png
|
||||
install -D -m 644 src/retroshare-gui/src/sounds/alert.wav $(CURDIR)/debian/retroshare06/usr/share/RetroShare06/sounds/alert.wav
|
||||
install -D -m 644 src/retroshare-gui/src/sounds/chat1.wav $(CURDIR)/debian/retroshare06/usr/share/RetroShare06/sounds/chat1.wav
|
||||
install -D -m 644 src/retroshare-gui/src/sounds/chat2.wav $(CURDIR)/debian/retroshare06/usr/share/RetroShare06/sounds/chat2.wav
|
||||
install -D -m 644 src/retroshare-gui/src/sounds/file.wav $(CURDIR)/debian/retroshare06/usr/share/RetroShare06/sounds/file.wav
|
||||
install -D -m 644 src/retroshare-gui/src/sounds/ft_complete.wav $(CURDIR)/debian/retroshare06/usr/share/RetroShare06/sounds/ft_complete.wav
|
||||
install -D -m 644 src/retroshare-gui/src/sounds/ft_incoming.wav $(CURDIR)/debian/retroshare06/usr/share/RetroShare06/sounds/ft_incoming.wav
|
||||
install -D -m 644 src/retroshare-gui/src/sounds/incomingchat.wav $(CURDIR)/debian/retroshare06/usr/share/RetroShare06/sounds/incomingchat.wav
|
||||
install -D -m 644 src/retroshare-gui/src/sounds/notify.wav $(CURDIR)/debian/retroshare06/usr/share/RetroShare06/sounds/notify.wav
|
||||
install -D -m 644 src/retroshare-gui/src/sounds/offline.wav $(CURDIR)/debian/retroshare06/usr/share/RetroShare06/sounds/offline.wav
|
||||
install -D -m 644 src/retroshare-gui/src/sounds/online1.wav $(CURDIR)/debian/retroshare06/usr/share/RetroShare06/sounds/online1.wav
|
||||
install -D -m 644 src/retroshare-gui/src/sounds/online2.wav $(CURDIR)/debian/retroshare06/usr/share/RetroShare06/sounds/online2.wav
|
||||
install -D -m 644 src/retroshare-gui/src/sounds/receive.wav $(CURDIR)/debian/retroshare06/usr/share/RetroShare06/sounds/receive.wav
|
||||
install -D -m 644 src/retroshare-gui/src/sounds/send1.wav $(CURDIR)/debian/retroshare06/usr/share/RetroShare06/sounds/send1.wav
|
||||
install -D -m 644 src/retroshare-gui/src/sounds/send2.wav $(CURDIR)/debian/retroshare06/usr/share/RetroShare06/sounds/send2.wav
|
||||
install -D -m 644 src/retroshare-gui/src/sounds/startup.wav $(CURDIR)/debian/retroshare06/usr/share/RetroShare06/sounds/startup.wav
|
||||
#dh_installdirs
|
||||
cd src && $(MAKE) INSTALL_ROOT=$(CURDIR)/debian/tmp install
|
||||
|
||||
# Add here commands to install the package into debian/your_appname
|
||||
# cd builddir && $(MAKE) INSTALL_ROOT=$(CURDIR)/debian/$(APPNAME) install
|
||||
# Build architecture-independent files here.
|
||||
binary-indep: build install
|
||||
# We have nothing to do by default.
|
||||
@ -87,9 +43,10 @@ binary-indep: build install
|
||||
binary-arch: build install
|
||||
dh_testdir
|
||||
dh_testroot
|
||||
dh_installdocs
|
||||
dh_installexamples
|
||||
dh_installman
|
||||
dh_install --list-missing
|
||||
#dh_installdocs
|
||||
#dh_installexamples
|
||||
#dh_installman
|
||||
dh_link
|
||||
dh_strip
|
||||
dh_compress
|
||||
@ -102,4 +59,3 @@ binary-arch: build install
|
||||
|
||||
binary: binary-indep binary-arch
|
||||
.PHONY: build clean binary-indep binary-arch binary install configure
|
||||
|
||||
|
@ -2,12 +2,12 @@
|
||||
|
||||
###################### PARAMETERS ####################
|
||||
version="0.6.0"
|
||||
svnpath="svn://csoler@svn.code.sf.net/p/retroshare/code/"
|
||||
gitpath="https://github.com/RetroShare/RetroShare.git"
|
||||
workdir=retroshare06-${version}
|
||||
#bubba3="Y" # comment out to compile for bubba3
|
||||
######################################################
|
||||
|
||||
echo This script is going to build the debian source package for RetroShare, from the SVN repository.
|
||||
echo This script is going to build the debian source package for RetroShare, from the Git repository.
|
||||
|
||||
if test -d "${workdir}" ; then
|
||||
echo Removing the ${workdir} directory...
|
||||
@ -15,14 +15,15 @@ if test -d "${workdir}" ; then
|
||||
fi
|
||||
|
||||
# Parse options
|
||||
svnrev=""
|
||||
rev=""
|
||||
dist=""
|
||||
# This is the key for "Cyril Soler <csoler@sourceforge.net>"
|
||||
gpgkey="C737CA98"
|
||||
gpgkey="0932399B"
|
||||
|
||||
while [ ${#} -gt 0 ]; do
|
||||
case ${1} in
|
||||
"-rev") shift
|
||||
svnrev=${1}
|
||||
rev=${1}
|
||||
shift
|
||||
;;
|
||||
"-distribution") shift
|
||||
@ -46,46 +47,52 @@ while [ ${#} -gt 0 ]; do
|
||||
done
|
||||
|
||||
if test "${dist}" = "" ; then
|
||||
dist="precise trusty utopic vivid"
|
||||
dist="precise trusty vivid"
|
||||
fi
|
||||
|
||||
echo Attempting to get revision number...
|
||||
ccount=`git rev-list --count --all`
|
||||
ccount=`expr $ccount + 8613 - 8267`
|
||||
|
||||
date=`git log --pretty=format:"%ai" | head -1 | cut -d\ -f1 | sed -e s/-//g`
|
||||
time=`git log --pretty=format:"%aD" | head -1 | cut -d\ -f5 | sed -e s/://g`
|
||||
hhsh=`git log --pretty=format:"%H" | head -1 | cut -c1-8`
|
||||
|
||||
rev=${date}.${hhsh}
|
||||
|
||||
echo " "Using PGP key id : ${gpgkey}
|
||||
echo " "Using distributions: ${dist}
|
||||
echo " "Using svn : ${rev}
|
||||
|
||||
echo Updating SVN...
|
||||
svn update
|
||||
|
||||
if test "${svnrev}" = "" ; then
|
||||
echo Attempting to get SVN revision number...
|
||||
svnrev=`svn info|awk '/^Revision:/ {print $NF}'`
|
||||
else
|
||||
echo SVN number has been provided. Forcing update.
|
||||
fi
|
||||
echo " "Commit count : ${ccount}
|
||||
echo " "Date : ${date}
|
||||
echo " "Time : ${time}
|
||||
echo " "Hash : ${hhsh}
|
||||
echo " "Using revision : ${rev}
|
||||
|
||||
echo Done.
|
||||
version="${version}"."${svnrev}"
|
||||
version="${version}"."${rev}"
|
||||
echo Got version number ${version}.
|
||||
echo Please check that the changelog is up to date.
|
||||
echo Hit ENTER if this is correct. Otherwise hit Ctrl+C
|
||||
read tmp
|
||||
|
||||
packages="."
|
||||
|
||||
echo SVN number is ${svnrev}
|
||||
echo Version is ${version}
|
||||
|
||||
echo Extracting base archive...
|
||||
|
||||
mkdir -p ${workdir}/src
|
||||
cp -r data ${workdir}/src/
|
||||
cp -r debian ${workdir}/debian
|
||||
|
||||
echo Checking out latest snapshot...
|
||||
cd ${workdir}/src
|
||||
svn co -r${svnrev} ${svnpath}/trunk/ .
|
||||
git clone --depth 1 https://github.com/RetroShare/RetroShare.git .
|
||||
cd -
|
||||
|
||||
if ! test -d ${workdir}/src/libretroshare/; then
|
||||
echo Git clone failed.
|
||||
exit
|
||||
fi
|
||||
|
||||
#cp -r data ${workdir}/src/
|
||||
cp -r debian ${workdir}/debian
|
||||
|
||||
#svn co -r${rev} ${svnpath}/trunk/ .
|
||||
|
||||
# VOIP tweak
|
||||
cp ${workdir}/src/retroshare-gui/src/gui/chat/PopupChatDialog.ui ${workdir}/src/plugins/VOIP/gui/PopupChatDialog.ui
|
||||
|
||||
@ -107,16 +114,18 @@ cd ${workdir}
|
||||
echo Setting version numbers...
|
||||
|
||||
# setup version numbers
|
||||
sed -e "s%RS_REVISION_NUMBER.*%RS_REVISION_NUMBER ${svnrev}%" src/libretroshare/src/retroshare/rsversion.in > src/libretroshare/src/retroshare/rsversion.h
|
||||
sed -e "s%RS_REVISION_NUMBER.*%RS_REVISION_NUMBER 0x${hhsh}%" src/libretroshare/src/retroshare/rsversion.in > src/libretroshare/src/retroshare/rsversion.h
|
||||
|
||||
# Various cleaning
|
||||
echo Cleaning...
|
||||
find . -depth -name ".svn" -a -type d -exec rm -rf {} \; # remove all svn repositories
|
||||
|
||||
\rm -rf src/.git
|
||||
#find . -depth -name ".svn" -a -type d -exec rm -rf {} \; # remove all svn repositories
|
||||
|
||||
echo Calling debuild...
|
||||
for i in ${dist}; do
|
||||
echo copying changelog for ${i}
|
||||
sed -e s/XXXXXX/"${svnrev}"/g -e s/YYYYYY/"${i}"/g ../changelog > debian/changelog
|
||||
sed -e s/XXXXXX/"${rev}"/g -e s/YYYYYY/"${i}"/g ../changelog > debian/changelog
|
||||
|
||||
if test "${i}" = "lucid" ; then
|
||||
cp ../control.ubuntu_lucid debian/control
|
||||
|
@ -1,3 +1,2 @@
|
||||
#!/bin/sh
|
||||
Apply dput ppa:csoler-users/retroshare-snapshots retroshare_0.5.5#.changes
|
||||
Apply dput ppa:csoler-users/retroshare-unstable retroshare06_0.6.0-0.#.changes
|
||||
Apply dput ppa:retroshare/unstable retroshare06_0.6.0-1.#.changes
|
||||
|
14
build_scripts/RedHat+Fedora/00Readme
Normal file
@ -0,0 +1,14 @@
|
||||
This is the build directory for RPM based Linux distributions like RedHat
|
||||
Enterprise Linux and compatible distributions (CentOS, Oracle Linux, ...) or
|
||||
Fedora.
|
||||
|
||||
To create an RPM package (as well as Source RPM) for your distribution, just
|
||||
run the makePackages.sh script found in this directory, like so:
|
||||
|
||||
./makepackages.sh
|
||||
|
||||
The script needs the rpmbuild command, which is part of the rpm-build package.
|
||||
|
||||
In case any build dependency is missing, the rpmbuild command will fail. Just
|
||||
install the missing package(s) and restart the script (Hint: all needed
|
||||
packages are listed in the provided retroshare06.spec file.)
|
9
build_scripts/RedHat+Fedora/data/retroshare.desktop
Normal file
@ -0,0 +1,9 @@
|
||||
[Desktop Entry]
|
||||
Version=1.0
|
||||
Name=RetroShare06
|
||||
Comment=Securely share files with your friends
|
||||
Exec=/usr/bin/RetroShare06
|
||||
Icon=/usr/share/pixmaps/retroshare06.xpm
|
||||
Terminal=false
|
||||
Type=Application
|
||||
Categories=Network;P2P;
|
85
build_scripts/RedHat+Fedora/makePackages.sh
Executable file
@ -0,0 +1,85 @@
|
||||
#!/bin/bash
|
||||
|
||||
###################### PARAMETERS ####################
|
||||
VERSION="0.6.0"
|
||||
######################################################
|
||||
dirs -c
|
||||
|
||||
echo "This script is going to build the RedHat family source package for RetroShare, from a clone of the GitHub repository."
|
||||
|
||||
# Parse options
|
||||
while [[ ${#} > 0 ]]
|
||||
do
|
||||
case ${1} in
|
||||
"-h") shift
|
||||
echo "Package building script for RedHat family distributions"
|
||||
echo "Usage:"
|
||||
echo " ${0}"
|
||||
exit 1
|
||||
;;
|
||||
"*") echo "Unknown option"
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
GITROOT=$(git rev-parse --show-toplevel)
|
||||
DATE=$(git log --pretty=format:"%ai" | head -1 | cut -d\ -f1 | sed -e s/-//g)
|
||||
HASH=$(git log --pretty=format:"%H" | head -1 | cut -c1-8)
|
||||
REV=${DATE}.${HASH}
|
||||
FULL_VERSION=${VERSION}.${REV}
|
||||
|
||||
echo "Using version number: ${VERSION}"
|
||||
echo "Using revision: ${REV}"
|
||||
echo "Hit ENTER if this is correct. Otherwise hit Ctrl+C"
|
||||
read tmp
|
||||
|
||||
WORKDIR="retroshare06-${FULL_VERSION}"
|
||||
|
||||
if [[ -d ${WORKDIR} ]]
|
||||
then
|
||||
echo "Removing the directory ${WORKDIR}..."
|
||||
rm -rf ${WORKDIR}
|
||||
fi
|
||||
mkdir -p ${WORKDIR}/src
|
||||
|
||||
echo "Copying sources into workdir..."
|
||||
rsync -rc --exclude build_scripts ${GITROOT}/* ${WORKDIR}/src
|
||||
rsync -rc --copy-links data ${WORKDIR}/src
|
||||
pushd ${WORKDIR} >/dev/null
|
||||
|
||||
# Cloning sqlcipher
|
||||
echo "Cloning sqlcipher repository..."
|
||||
mkdir lib
|
||||
pushd lib >/dev/null
|
||||
git clone https://github.com/sqlcipher/sqlcipher.git
|
||||
pushd sqlcipher >/dev/null
|
||||
git checkout v3.3.1
|
||||
rm -rf .git
|
||||
popd >/dev/null
|
||||
popd >/dev/null
|
||||
|
||||
# VOIP tweak
|
||||
cp src/retroshare-gui/src/gui/chat/PopupChatDialog.ui src/plugins/VOIP/gui/PopupChatDialog.ui
|
||||
|
||||
# cleaning up protobof generated files
|
||||
rm -f src/retroshare-nogui/src/rpc/proto/gencc/*.pb.h
|
||||
rm -f src/retroshare-nogui/src/rpc/proto/gencc/*.pb.cc
|
||||
|
||||
# setup version numbers
|
||||
echo "Setting version numbers..."
|
||||
sed -e "s%RS_REVISION_NUMBER.*%RS_REVISION_NUMBER 0x${HASH}%" src/libretroshare/src/retroshare/rsversion.in >src/libretroshare/src/retroshare/rsversion.h
|
||||
popd >/dev/null
|
||||
|
||||
echo "Creating RPMs..."
|
||||
[[ -d rpm-build/rpm ]] || mkdir -p rpm-build/rpm
|
||||
pushd rpm-build/rpm >/dev/null
|
||||
for DIR in BUILD RPMS SOURCES SPECS SRPMS
|
||||
do
|
||||
[[ -d ${DIR} ]] || mkdir ${DIR}
|
||||
done
|
||||
popd >/dev/null
|
||||
tar -zcf rpm-build/rpm/SOURCES/${WORKDIR}.tar.gz ${WORKDIR}
|
||||
rpmbuild --define="%rev ${REV}" --define="%_usrsrc $PWD/rpm-build" --define="%_topdir %{_usrsrc}/rpm" -ba retroshare06.spec
|
||||
rm -rf ${WORKDIR}
|
||||
exit 0
|
99
build_scripts/RedHat+Fedora/retroshare06.spec
Normal file
@ -0,0 +1,99 @@
|
||||
Summary: Secure communication with friends
|
||||
Name: retroshare06
|
||||
Version: 0.6.0.%{rev}
|
||||
Release: 1%{?dist}
|
||||
License: GPLv3
|
||||
Group: Productivity/Networking/Other
|
||||
URL: http://retroshare.sourceforge.net/
|
||||
Source0: %{name}-%{version}.tar.gz
|
||||
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root
|
||||
Requires: qt-x11
|
||||
BuildRequires: gcc-c++ qt-devel desktop-file-utils libgnome-keyring-devel glib2-devel libssh-devel protobuf-devel libcurl-devel libxml2-devel libxslt-devel openssl-devel libXScrnSaver-devel libupnp-devel bzip2-devel libmicrohttpd-devel
|
||||
# This is because of sqlcipher:
|
||||
BuildRequires: tcl
|
||||
|
||||
%description
|
||||
RetroShare is a decentralized, private and secure commmunication and sharing platform. RetroShare provides filesharing, chat, messages, forums and channels.
|
||||
|
||||
Authors:
|
||||
see http://retroshare.sourceforge.net/team.html
|
||||
|
||||
%package nogui
|
||||
Summary: RetroShare cli client
|
||||
Group: Productivity/Network/Other
|
||||
Requires: openssl
|
||||
Conflicts: %name = %{version}
|
||||
|
||||
%description nogui
|
||||
This is the command-line client for RetroShare network. This client can be contacted and talked-to using SSL. Clients exist for portable devices running e.g. Android.
|
||||
|
||||
%package voip-plugin
|
||||
Summary: RetroShare VOIP plugin
|
||||
Group: Productivity/Networking/Other
|
||||
Requires: %name = %{version}
|
||||
BuildRequires: opencv-devel speex-devel
|
||||
%if 0%{?fedora} >= 22
|
||||
BuildRequires: speexdsp-devel
|
||||
%endif
|
||||
|
||||
%description voip-plugin
|
||||
This package provides a plugin for RetroShare, a secured Friend-to-Friend communication platform. The plugin adds voice-over-IP functionality to the private chat window. Both friends chatting together need the plugin installed to be able to talk together.
|
||||
|
||||
%package feedreader-plugin
|
||||
Summary: RetroShare FeedReader plugin
|
||||
Group: Productivity/Networking/Other
|
||||
Requires: %name = %{version}
|
||||
|
||||
%description feedreader-plugin
|
||||
This package provides a plugin for RetroShare, a secured Friend-to-Friend communication platform. The plugin adds a RSS feed reader tab to retroshare.
|
||||
|
||||
%prep
|
||||
%setup -q
|
||||
|
||||
%build
|
||||
cd lib/sqlcipher
|
||||
./configure --disable-shared --enable-static --enable-tempstore=yes CFLAGS="-DSQLITE_HAS_CODEC" LDFLAGS="-lcrypto"
|
||||
make
|
||||
cd -
|
||||
cd src
|
||||
qmake-qt4 "CONFIG-=debug" "CONFIG+=release" PREFIX=%{_prefix} LIB_DIR=%{_libdir} RetroShare.pro
|
||||
make
|
||||
cd -
|
||||
|
||||
%install
|
||||
rm -rf $RPM_BUILD_ROOT
|
||||
cd src
|
||||
make INSTALL_ROOT=$RPM_BUILD_ROOT install
|
||||
#menu
|
||||
desktop-file-validate $RPM_BUILD_ROOT%{_datadir}/applications/retroshare06.desktop
|
||||
|
||||
%clean
|
||||
rm -rf $RPM_BUILD_ROOT
|
||||
|
||||
%files
|
||||
%defattr(-,root,root,-)
|
||||
%{_bindir}/RetroShare06
|
||||
%defattr(644, root, root)
|
||||
%{_datadir}/pixmaps/%{name}.xpm
|
||||
%{_datadir}/icons/hicolor
|
||||
%{_datadir}/applications/%{name}.desktop
|
||||
%{_datadir}/RetroShare06
|
||||
|
||||
%files nogui
|
||||
%defattr(-, root, root)
|
||||
%{_bindir}/RetroShare06-nogui
|
||||
%defattr(644, root, root)
|
||||
%{_datadir}/RetroShare06
|
||||
|
||||
%files voip-plugin
|
||||
%defattr(-, root, root)
|
||||
%{_libdir}/retroshare/extensions6/libVOIP.so*
|
||||
|
||||
%files feedreader-plugin
|
||||
%defattr(-, root, root)
|
||||
%{_libdir}/retroshare/extensions6/libFeedReader.so*
|
||||
|
||||
%changelog
|
||||
* Sat Apr 4 2015 Heini <noreply@nowhere.net> -
|
||||
- Initial build.
|
||||
|
43
build_scripts/Windows/GetRsVersion.bat
Normal file
@ -0,0 +1,43 @@
|
||||
@:: Usage:
|
||||
@:: call GetRsVersion.bat Define Variable
|
||||
|
||||
@setlocal
|
||||
@echo off
|
||||
|
||||
set Define=%~1
|
||||
if "%Define%"=="" (
|
||||
echo.
|
||||
echo Parameter error
|
||||
endlocal
|
||||
exit /B1
|
||||
)
|
||||
|
||||
set Variable=%~2
|
||||
if "%Variable%"=="" (
|
||||
echo.
|
||||
echo Parameter error
|
||||
endlocal
|
||||
exit /B1
|
||||
)
|
||||
|
||||
set Result=
|
||||
set VersionFile="%~dp0..\..\libretroshare\src\retroshare\rsversion.h"
|
||||
|
||||
if not exist "%VersionFile%" (
|
||||
echo.
|
||||
echo Version file doesn't exist.
|
||||
echo %VersionFile%
|
||||
endlocal
|
||||
exit /B1
|
||||
)
|
||||
|
||||
for /F "usebackq tokens=1,2,3" %%A in (%VersionFile%) do (
|
||||
if "%%A"=="#define" (
|
||||
if "%%B"=="%Define%" (
|
||||
set Result=%%~C
|
||||
)
|
||||
)
|
||||
)
|
||||
|
||||
endlocal & set %Variable%=%Result%
|
||||
exit /B 0
|
@ -24,32 +24,27 @@ if "%MinGWDir%" NEQ "" set NSIS_PARAM=%NSIS_PARAM% /DMINGWDIR="%MinGWDir%"
|
||||
if "%OutDir%" NEQ "" set NSIS_PARAM=%NSIS_PARAM% /DOUTDIR="%OutDir%"
|
||||
|
||||
:: Scan version from source
|
||||
set Revision=
|
||||
set BuildAdd=
|
||||
set VersionFile="%SourceDir%\libretroshare\src\retroshare\rsversion.h"
|
||||
call "%~dp0GetRsVersion.bat" RS_REVISION_STRING Revision
|
||||
if errorlevel 1 goto exit
|
||||
call "%~dp0GetRsVersion.bat" RS_BUILD_NUMBER_ADD BuildAdd
|
||||
if errorlevel 1 goto exit
|
||||
|
||||
if not exist "%VersionFile%" (
|
||||
if "%Revision%"=="" (
|
||||
echo.
|
||||
echo Version file doesn't exist.
|
||||
echo Version not found in
|
||||
echo %VersionFile%
|
||||
goto :exit
|
||||
goto exit
|
||||
)
|
||||
|
||||
for /F "usebackq tokens=1,2,3" %%A in (%VersionFile%) do (
|
||||
if "%%A"=="#define" (
|
||||
if "%%B"=="RS_BUILD_NUMBER_ADD" (
|
||||
set BuildAdd=%%~C
|
||||
)
|
||||
)
|
||||
)
|
||||
|
||||
if "%BuildAdd%"=="" (
|
||||
echo.
|
||||
echo Version not found in
|
||||
echo %VersionFile%
|
||||
goto :exit
|
||||
goto exit
|
||||
)
|
||||
|
||||
set NSIS_PARAM=%NSIS_PARAM% /DBUILDADD=%BuildAdd%
|
||||
set NSIS_PARAM=%NSIS_PARAM% /DREVISION=%Revision% /DBUILDADD=%BuildAdd%
|
||||
|
||||
:: Create installer
|
||||
"%NSIS_EXE%" %NSIS_PARAM% "%~dp0retroshare.nsi"
|
||||
|
@ -39,10 +39,10 @@
|
||||
!endif
|
||||
|
||||
# Get version from executable
|
||||
!GetDllVersion "${RELEASEDIR}\retroshare-gui\src\release\RetroShare.exe" VERSION_
|
||||
!GetDllVersion "${RELEASEDIR}\retroshare-gui\src\release\RetroShare06.exe" VERSION_
|
||||
|
||||
!define VERSION ${VERSION_1}.${VERSION_2}.${VERSION_3}${BUILDADD}
|
||||
!define REVISION ${VERSION_4}
|
||||
;!define REVISION ${VERSION_4}
|
||||
|
||||
# Check version
|
||||
!ifndef REVISION
|
||||
@ -53,6 +53,9 @@
|
||||
!error "REVISION is not defined"
|
||||
!endif
|
||||
|
||||
# Date
|
||||
!define /date Date "%Y%m%d"
|
||||
|
||||
# Application name and version
|
||||
!define APPNAME "RetroShare"
|
||||
!define APPNAMEANDVERSION "${APPNAME} ${VERSION}"
|
||||
@ -68,7 +71,7 @@
|
||||
# Main Install settings
|
||||
Name "${APPNAMEANDVERSION}"
|
||||
InstallDirRegKey HKLM "Software\${APPNAME}" ""
|
||||
OutFile "${OUTDIR_}RetroShare_${VERSION}_${REVISION}_setup.exe"
|
||||
OutFile "${OUTDIR_}RetroShare-${VERSION}-${Date}-${REVISION}-setup.exe"
|
||||
BrandingText "${APPNAMEANDVERSION}"
|
||||
RequestExecutionlevel highest
|
||||
# Use compression
|
||||
@ -172,8 +175,8 @@ Section $(Section_Main) Section_Main
|
||||
|
||||
; Main binaries
|
||||
SetOutPath "$INSTDIR"
|
||||
File "${RELEASEDIR}\retroshare-gui\src\release\RetroShare.exe"
|
||||
File "${RELEASEDIR}\retroshare-nogui\src\release\retroshare-nogui.exe"
|
||||
File /oname=RetroShare.exe "${RELEASEDIR}\retroshare-gui\src\release\RetroShare06.exe"
|
||||
File /oname=retroshare-nogui.exe "${RELEASEDIR}\retroshare-nogui\src\release\RetroShare06-nogui.exe"
|
||||
|
||||
; Qt binaries
|
||||
File "${QTDIR}\bin\QtCore4.dll"
|
||||
|
Before Width: | Height: | Size: 9.6 KiB After Width: | Height: | Size: 9.6 KiB |
Before Width: | Height: | Size: 1.5 KiB After Width: | Height: | Size: 1.5 KiB |
Before Width: | Height: | Size: 3.2 KiB After Width: | Height: | Size: 3.2 KiB |
Before Width: | Height: | Size: 4.3 KiB After Width: | Height: | Size: 4.3 KiB |
@ -1,3 +1,5 @@
|
||||
!include("../../retroshare.pri"): error("Could not include file ../../retroshare.pri")
|
||||
|
||||
TEMPLATE = lib
|
||||
CONFIG += staticlib
|
||||
CONFIG -= qt
|
||||
@ -37,6 +39,13 @@ linux-g++-64 {
|
||||
OBJECTS_DIR = temp/linux-g++-64/obj
|
||||
}
|
||||
|
||||
unix {
|
||||
data_files.path = "$${DATA_DIR}"
|
||||
data_files.files = bitdht/bdboot.txt
|
||||
INSTALLS += data_files
|
||||
}
|
||||
|
||||
|
||||
#################### Cross compilation for windows under Linux ####################
|
||||
|
||||
win32-x-g++ {
|
||||
|
@ -225,6 +225,7 @@ public:
|
||||
ApiServerMainModules(ResourceRouter& router, StateTokenServer* sts, const RsPlugInInterfaces &ifaces):
|
||||
mPeersHandler(sts, ifaces.mNotify, ifaces.mPeers, ifaces.mMsgs),
|
||||
mIdentityHandler(ifaces.mIdentity),
|
||||
mForumHandler(ifaces.mGxsForums),
|
||||
mServiceControlHandler(rsServiceControl), // TODO: don't use global variable here
|
||||
mFileSearchHandler(sts, ifaces.mNotify, ifaces.mTurtle, ifaces.mFiles),
|
||||
mTransfersHandler(sts, ifaces.mFiles),
|
||||
@ -238,6 +239,8 @@ public:
|
||||
&PeersHandler::handleRequest);
|
||||
router.addResourceHandler("identity", dynamic_cast<ResourceRouter*>(&mIdentityHandler),
|
||||
&IdentityHandler::handleRequest);
|
||||
router.addResourceHandler("forums", dynamic_cast<ResourceRouter*>(&mForumHandler),
|
||||
&ForumHandler::handleRequest);
|
||||
router.addResourceHandler("servicecontrol", dynamic_cast<ResourceRouter*>(&mServiceControlHandler),
|
||||
&ServiceControlHandler::handleRequest);
|
||||
router.addResourceHandler("filesearch", dynamic_cast<ResourceRouter*>(&mFileSearchHandler),
|
||||
@ -250,6 +253,7 @@ public:
|
||||
|
||||
PeersHandler mPeersHandler;
|
||||
IdentityHandler mIdentityHandler;
|
||||
ForumHandler mForumHandler;
|
||||
ServiceControlHandler mServiceControlHandler;
|
||||
FileSearchHandler mFileSearchHandler;
|
||||
TransfersHandler mTransfersHandler;
|
||||
|
@ -5,6 +5,7 @@
|
||||
#include "ApiTypes.h"
|
||||
#include "PeersHandler.h"
|
||||
#include "IdentityHandler.h"
|
||||
#include "ForumHandler.h"
|
||||
#include "ServiceControlHandler.h"
|
||||
#include "StateTokenServer.h"
|
||||
#include "FileSearchHandler.h"
|
||||
|
148
libresapi/src/api/ForumHandler.cpp
Normal file
@ -0,0 +1,148 @@
|
||||
#include "ForumHandler.h"
|
||||
|
||||
#include <retroshare/rsgxsforums.h>
|
||||
#include <time.h>
|
||||
|
||||
#include "Operators.h"
|
||||
#include "ApiTypes.h"
|
||||
#include "GxsResponseTask.h"
|
||||
#ifndef WINDOWS_SYS
|
||||
#include "unistd.h"
|
||||
#endif
|
||||
|
||||
namespace resource_api
|
||||
{
|
||||
ForumHandler::ForumHandler(RsGxsForums* forums):
|
||||
mRsGxsForums(forums)
|
||||
{
|
||||
addResourceHandler("*", this, &ForumHandler::handleWildcard);
|
||||
}
|
||||
|
||||
void ForumHandler::handleWildcard(Request &req, Response &resp)
|
||||
{
|
||||
bool ok = true;
|
||||
if(!req.mPath.empty())
|
||||
{
|
||||
std::string str = req.mPath.top();
|
||||
req.mPath.pop();
|
||||
if(str != "")
|
||||
{
|
||||
//assume we have a groupID
|
||||
RsGxsGroupId grpId(str);
|
||||
std::list<RsGxsGroupId> groupIds;
|
||||
groupIds.push_back(grpId);
|
||||
|
||||
uint32_t token;
|
||||
RsTokReqOptions opts;
|
||||
opts.mReqType = GXS_REQUEST_TYPE_MSG_DATA;
|
||||
mRsGxsForums->getTokenService()->requestMsgInfo(token, RS_TOKREQ_ANSTYPE_DATA, opts, groupIds);
|
||||
|
||||
time_t start = time(NULL);
|
||||
while((mRsGxsForums->getTokenService()->requestStatus(token) != RsTokenService::GXS_REQUEST_V2_STATUS_COMPLETE)
|
||||
&&(mRsGxsForums->getTokenService()->requestStatus(token) != RsTokenService::GXS_REQUEST_V2_STATUS_FAILED)
|
||||
&&((time(NULL) < (start+10)))
|
||||
)
|
||||
{
|
||||
#ifdef WINDOWS_SYS
|
||||
Sleep(500);
|
||||
#else
|
||||
usleep(500*1000) ;
|
||||
#endif
|
||||
}
|
||||
|
||||
if(mRsGxsForums->getTokenService()->requestStatus(token) == RsTokenService::GXS_REQUEST_V2_STATUS_COMPLETE)
|
||||
{
|
||||
std::vector<RsGxsForumMsg> grps;
|
||||
ok &= mRsGxsForums->getMsgData(token, grps);
|
||||
for(std::vector<RsGxsForumMsg>::iterator vit = grps.begin(); vit != grps.end(); vit++)
|
||||
{
|
||||
RsGxsForumMsg& grp = *vit;
|
||||
KeyValueReference<RsGxsGroupId> group_id("group_id", grp.mMeta.mGroupId);
|
||||
resp.mDataStream.getStreamToMember()
|
||||
<< group_id
|
||||
<< makeKeyValueReference("name", grp.mMeta.mMsgName)
|
||||
<< makeKeyValueReference("id", grp.mMeta.mMsgId)
|
||||
<< makeKeyValueReference("parent_id", grp.mMeta.mParentId)
|
||||
<< makeKeyValueReference("author_id", grp.mMeta.mAuthorId)
|
||||
<< makeKeyValueReference("orig_msg_id", grp.mMeta.mOrigMsgId)
|
||||
<< makeKeyValueReference("thread_id", grp.mMeta.mThreadId)
|
||||
<< makeKeyValueReference("message", grp.mMsg);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
ok = false;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
// no more path element
|
||||
RsTokReqOptions opts;
|
||||
opts.mReqType = GXS_REQUEST_TYPE_GROUP_DATA;
|
||||
uint32_t token;
|
||||
mRsGxsForums->getTokenService()->requestGroupInfo(token, RS_TOKREQ_ANSTYPE_DATA, opts);
|
||||
|
||||
time_t start = time(NULL);
|
||||
while((mRsGxsForums->getTokenService()->requestStatus(token) != RsTokenService::GXS_REQUEST_V2_STATUS_COMPLETE)
|
||||
&&(mRsGxsForums->getTokenService()->requestStatus(token) != RsTokenService::GXS_REQUEST_V2_STATUS_FAILED)
|
||||
&&((time(NULL) < (start+10)))
|
||||
)
|
||||
{
|
||||
#ifdef WINDOWS_SYS
|
||||
Sleep(500);
|
||||
#else
|
||||
usleep(500*1000) ;
|
||||
#endif
|
||||
}
|
||||
if(mRsGxsForums->getTokenService()->requestStatus(token) == RsTokenService::GXS_REQUEST_V2_STATUS_COMPLETE)
|
||||
{
|
||||
std::vector<RsGxsForumGroup> grps;
|
||||
ok &= mRsGxsForums->getGroupData(token, grps);
|
||||
for(std::vector<RsGxsForumGroup>::iterator vit = grps.begin(); vit != grps.end(); vit++)
|
||||
{
|
||||
RsGxsForumGroup& grp = *vit;
|
||||
KeyValueReference<RsGxsGroupId> id("id", grp.mMeta.mGroupId);
|
||||
KeyValueReference<uint32_t> vis_msg("visible_msg_count", grp.mMeta.mVisibleMsgCount);
|
||||
//KeyValueReference<RsPgpId> pgp_id("pgp_id",grp.mPgpId );
|
||||
// not very happy about this, i think the flags should stay hidden in rsidentities
|
||||
bool own = (grp.mMeta.mSubscribeFlags & GXS_SERV::GROUP_SUBSCRIBE_ADMIN);
|
||||
bool pgp_linked = (grp.mMeta.mGroupFlags & RSGXSID_GROUPFLAG_REALID);
|
||||
bool subscribed = IS_GROUP_SUBSCRIBED(grp.mMeta.mSubscribeFlags);
|
||||
resp.mDataStream.getStreamToMember()
|
||||
<< id
|
||||
//<< pgp_id
|
||||
<< makeKeyValueReference("name", grp.mMeta.mGroupName)
|
||||
//<< makeKeyValueReference("last_post", grp.mMeta.mLastPost)
|
||||
<< makeKeyValueReference("pop", grp.mMeta.mPop)
|
||||
//<< makeKeyValueReference("publish_ts", grp.mMeta.mPublishTs)
|
||||
<< vis_msg
|
||||
<< makeKeyValueReference("group_status", grp.mMeta.mGroupStatus)
|
||||
<< makeKeyValueReference("author_id", grp.mMeta.mAuthorId)
|
||||
<< makeKeyValueReference("parent_grp_id", grp.mMeta.mParentGrpId)
|
||||
<< makeKeyValueReference("description", grp.mDescription)
|
||||
<< makeKeyValueReference("own", own)
|
||||
<< makeKeyValueReference("subscribed", subscribed)
|
||||
<< makeKeyValueReference("pgp_linked", pgp_linked);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
ok = false;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if(ok)
|
||||
{
|
||||
resp.setOk();
|
||||
}
|
||||
else
|
||||
{
|
||||
resp.setFail();
|
||||
}
|
||||
}
|
||||
|
||||
} // namespace resource_api
|
20
libresapi/src/api/ForumHandler.h
Normal file
@ -0,0 +1,20 @@
|
||||
#ifndef FORUMHANDLER_H
|
||||
#define FORUMHANDLER_H
|
||||
|
||||
#include "ResourceRouter.h"
|
||||
|
||||
class RsGxsForums;
|
||||
|
||||
namespace resource_api
|
||||
{
|
||||
|
||||
class ForumHandler : public ResourceRouter
|
||||
{
|
||||
public:
|
||||
ForumHandler(RsGxsForums* forums);
|
||||
private:
|
||||
RsGxsForums* mRsGxsForums;
|
||||
void handleWildcard(Request& req, Response& resp);
|
||||
};
|
||||
} // namespace resource_api
|
||||
#endif // FORUMHANDLER_H
|
@ -1,3 +1,5 @@
|
||||
!include("../../retroshare.pri"): error("Could not include file ../../retroshare.pri")
|
||||
|
||||
TEMPLATE = lib
|
||||
CONFIG += staticlib
|
||||
CONFIG -= qt
|
||||
@ -8,6 +10,16 @@ CONFIG += libmicrohttpd
|
||||
|
||||
INCLUDEPATH += ../../libretroshare/src
|
||||
|
||||
unix {
|
||||
webui_files.path = "$${DATA_DIR}/webui"
|
||||
webui_files.files = webfiles/*
|
||||
INSTALLS += webui_files
|
||||
|
||||
webui_img_files.path = "$${DATA_DIR}/webui/img"
|
||||
webui_img_files.files = ../../retroshare-gui/src/gui/images/logo/logo_splash.png
|
||||
INSTALLS += webui_img_files
|
||||
}
|
||||
|
||||
win32{
|
||||
DEFINES *= WINDOWS_SYS
|
||||
INCLUDEPATH += $$PWD/../../../libs/include
|
||||
@ -29,6 +41,7 @@ SOURCES += \
|
||||
api/PeersHandler.cpp \
|
||||
api/Operators.cpp \
|
||||
api/IdentityHandler.cpp \
|
||||
api/ForumHandler.cpp \
|
||||
api/ServiceControlHandler.cpp \
|
||||
api/StateTokenServer.cpp \
|
||||
api/GxsResponseTask.cpp \
|
||||
@ -49,6 +62,7 @@ HEADERS += \
|
||||
api/PeersHandler.h \
|
||||
api/Operators.h \
|
||||
api/IdentityHandler.h \
|
||||
api/ForumHandler.h \
|
||||
api/ServiceControlHandler.h \
|
||||
api/GxsMetaOperators.h \
|
||||
api/StateTokenServer.h \
|
||||
|
@ -1019,8 +1019,8 @@ bool DistantChatService::getDistantChatStatus(const RsGxsId& gxs_id,uint32_t& st
|
||||
{
|
||||
status = it->second.status ;
|
||||
|
||||
if(from_gxs_id != NULL)
|
||||
*from_gxs_id = it->second.own_gxs_id ;
|
||||
if(from_gxs_id != NULL)
|
||||
*from_gxs_id = it->second.own_gxs_id ;
|
||||
|
||||
return true ;
|
||||
}
|
||||
|
@ -46,7 +46,7 @@ static const time_t CONNECTION_CHALLENGE_MAX_MSG_AGE = 30 ; // maximum age o
|
||||
static const int CONNECTION_CHALLENGE_MIN_DELAY = 15 ; // sends a connection at most every 15 seconds
|
||||
static const int LOBBY_CACHE_CLEANING_PERIOD = 10 ; // clean lobby caches every 10 secs (remove old messages)
|
||||
|
||||
static const time_t MAX_KEEP_MSG_RECORD = 1200 ; // keep msg record for 1200 secs max.
|
||||
static const time_t MAX_KEEP_MSG_RECORD = 1200 ; // keep msg record for 1200 secs max.
|
||||
static const time_t MAX_KEEP_INACTIVE_NICKNAME = 180 ; // keep inactive nicknames for 3 mn max.
|
||||
static const time_t MAX_DELAY_BETWEEN_LOBBY_KEEP_ALIVE = 120 ; // send keep alive packet every 2 minutes.
|
||||
static const time_t MAX_KEEP_PUBLIC_LOBBY_RECORD = 60 ; // keep inactive lobbies records for 60 secs max.
|
||||
@ -57,11 +57,11 @@ static const uint32_t MAX_ALLOWED_LOBBIES_IN_LIST_WARNING = 50 ;
|
||||
static const uint32_t MAX_MESSAGES_PER_SECONDS_NUMBER = 5 ; // max number of messages from a given peer in a window for duration below
|
||||
static const uint32_t MAX_MESSAGES_PER_SECONDS_PERIOD = 10 ; // duration window for max number of messages before messages get dropped.
|
||||
|
||||
#define IS_PUBLIC_LOBBY(flags) (flags & RS_CHAT_LOBBY_FLAGS_PUBLIC )
|
||||
#define IS_ANONYMOUS_LOBBY(flags) (flags & RS_CHAT_LOBBY_FLAGS_ANONYMOUS)
|
||||
#define IS_CONNEXION_CHALLENGE(flags) (flags & RS_CHAT_LOBBY_FLAGS_CHALLENGE)
|
||||
#define IS_PUBLIC_LOBBY(flags) (flags & RS_CHAT_LOBBY_FLAGS_PUBLIC )
|
||||
#define IS_PGP_SIGNED_LOBBY(flags) (flags & RS_CHAT_LOBBY_FLAGS_PGP_SIGNED)
|
||||
#define IS_CONNEXION_CHALLENGE(flags) (flags & RS_CHAT_LOBBY_FLAGS_CHALLENGE )
|
||||
|
||||
#define EXTRACT_PRIVACY_FLAGS(flags) (ChatLobbyFlags(flags.toUInt32()) & RS_CHAT_LOBBY_FLAGS_PUBLIC)
|
||||
#define EXTRACT_PRIVACY_FLAGS(flags) (ChatLobbyFlags(flags.toUInt32()) * (RS_CHAT_LOBBY_FLAGS_PUBLIC | RS_CHAT_LOBBY_FLAGS_PGP_SIGNED))
|
||||
|
||||
DistributedChatService::DistributedChatService(uint32_t serv_type,p3ServiceControl *sc,p3HistoryMgr *hm, RsGixs *is)
|
||||
: mServType(serv_type),mDistributedChatMtx("Distributed Chat"), mServControl(sc), mHistMgr(hm),mGixs(is)
|
||||
@ -144,7 +144,37 @@ bool DistributedChatService::handleRecvChatLobbyMsgItem(RsChatMsgItem *ci)
|
||||
std::cerr << std::endl;
|
||||
return false;
|
||||
}
|
||||
|
||||
ChatLobbyFlags fl ;
|
||||
|
||||
// delete items that are not for us, as early as possible.
|
||||
{
|
||||
RsStackMutex stack(mDistributedChatMtx); /********** STACK LOCKED MTX ******/
|
||||
|
||||
// send upward for display
|
||||
|
||||
std::map<ChatLobbyId,ChatLobbyEntry>::const_iterator it = _chat_lobbys.find(cli->lobby_id) ;
|
||||
|
||||
if(it == _chat_lobbys.end())
|
||||
{
|
||||
#ifdef DEBUG_CHAT_LOBBIES
|
||||
std::cerr << "Chatlobby for id " << std::hex << item->lobby_id << " has no record. Dropping the msg." << std::dec << std::endl;
|
||||
#endif
|
||||
return false;
|
||||
}
|
||||
fl = it->second.lobby_flags ;
|
||||
}
|
||||
if(IS_PGP_SIGNED_LOBBY(fl))
|
||||
{
|
||||
RsIdentityDetails details;
|
||||
|
||||
if(!rsIdentity->getIdDetails(cli->signature.keyId,details) || !details.mPgpKnown)
|
||||
{
|
||||
std::cerr << "(WW) Received a lobby msg/item that is not PGP-authed (id=" << cli->signature.keyId << "), whereas the lobby flags require it. Rejecting!" << std::endl;
|
||||
|
||||
return false ;
|
||||
}
|
||||
}
|
||||
if(!bounceLobbyObject(cli,cli->PeerId())) // forwards the message to friends, keeps track of subscribers, etc.
|
||||
return false;
|
||||
|
||||
@ -157,7 +187,7 @@ bool DistributedChatService::handleRecvChatLobbyMsgItem(RsChatMsgItem *ci)
|
||||
//name = cli->nick;
|
||||
//popupChatFlag = RS_POPUP_CHATLOBBY;
|
||||
|
||||
RsServer::notify()->AddPopupMessage(RS_POPUP_CHATLOBBY, cli->signature.keyId.toStdString(), cli->nick, cli->message); /* notify private chat message */
|
||||
RsServer::notify()->AddPopupMessage(RS_POPUP_CHATLOBBY, virtual_peer_id.toStdString(), cli->signature.keyId.toStdString(), cli->message); /* notify private chat message */
|
||||
|
||||
return true ;
|
||||
}
|
||||
@ -181,33 +211,34 @@ bool DistributedChatService::checkSignature(RsChatLobbyBouncingObject *obj,const
|
||||
std::cerr << " signature id: " << obj->signature.keyId << std::endl;
|
||||
#endif
|
||||
|
||||
if(!obj->serialise_signed_part(memory,size))
|
||||
{
|
||||
std::cerr << " (EE) Cannot serialise message item. " << std::endl;
|
||||
return false ;
|
||||
}
|
||||
if(!obj->serialise_signed_part(memory,size))
|
||||
{
|
||||
std::cerr << " (EE) Cannot serialise message item. " << std::endl;
|
||||
return false ;
|
||||
}
|
||||
|
||||
uint32_t error_status ;
|
||||
uint32_t error_status ;
|
||||
|
||||
if(!mGixs->validateData(memory,obj->signed_serial_size(),obj->signature,false,error_status))
|
||||
{
|
||||
bool res = false ;
|
||||
if(!mGixs->validateData(memory,obj->signed_serial_size(),obj->signature,false,error_status))
|
||||
{
|
||||
bool res = false ;
|
||||
|
||||
switch(error_status)
|
||||
{
|
||||
case RsGixs::RS_GIXS_ERROR_KEY_NOT_AVAILABLE:
|
||||
switch(error_status)
|
||||
{
|
||||
case RsGixs::RS_GIXS_ERROR_KEY_NOT_AVAILABLE:
|
||||
#ifdef DEBUG_CHAT_LOBBIES
|
||||
std::cerr << "(WW) Key is not is cache. Cannot verify." << std::endl;
|
||||
std::cerr << "(WW) Key is not is cache. Cannot verify." << std::endl;
|
||||
#endif
|
||||
res =true ;
|
||||
break ;
|
||||
case RsGixs::RS_GIXS_ERROR_SIGNATURE_MISMATCH: std::cerr << "(EE) Signature mismatch. Spoofing/MITM?." << std::endl;
|
||||
res =false ;
|
||||
break ;
|
||||
default: break ;
|
||||
}
|
||||
return res;
|
||||
}
|
||||
res =true ;
|
||||
break ;
|
||||
case RsGixs::RS_GIXS_ERROR_SIGNATURE_MISMATCH: std::cerr << "(EE) Signature mismatch. Spoofing/MITM?." << std::endl;
|
||||
res =false ;
|
||||
break ;
|
||||
default: break ;
|
||||
}
|
||||
return res;
|
||||
}
|
||||
|
||||
|
||||
#ifdef DEBUG_CHAT_LOBBIES
|
||||
std::cerr << " signature: CHECKS" << std::endl;
|
||||
@ -249,11 +280,11 @@ void DistributedChatService::locked_printDebugInfo() const
|
||||
{
|
||||
std::cerr << " Lobby id\t\t: " << std::hex << it->first << std::dec << std::endl;
|
||||
std::cerr << " Lobby name\t\t: " << it->second.lobby_name << std::endl;
|
||||
std::cerr << " Lobby topic\t\t: " << it->second.lobby_topic << std::endl;
|
||||
std::cerr << " nick name\t\t: " << it->second.gxs_id << std::endl;
|
||||
std::cerr << " Lobby type\t\t: " << ((IS_PUBLIC_LOBBY(it->second.lobby_flags))?"Public":"Private") << std::endl;
|
||||
std::cerr << " Lobby policy\t\t: " << ((IS_ANONYMOUS_LOBBY(it->second.lobby_flags))?"Unsigned":"Signature required") << std::endl;
|
||||
std::cerr << " Lobby peer id\t: " << it->second.virtual_peer_id << std::endl;
|
||||
std::cerr << " Lobby topic\t\t: " << it->second.lobby_topic << std::endl;
|
||||
std::cerr << " nick name\t\t: " << it->second.gxs_id << std::endl;
|
||||
std::cerr << " Lobby type\t\t: " << ((IS_PUBLIC_LOBBY(it->second.lobby_flags))?"Public":"Private") << std::endl;
|
||||
std::cerr << " Lobby security\t\t: " << ((IS_PGP_SIGNED_LOBBY(it->second.lobby_flags))?"PGP-signed IDs required":"Anon IDs accepted") << std::endl;
|
||||
std::cerr << " Lobby peer id\t: " << it->second.virtual_peer_id << std::endl;
|
||||
std::cerr << " Challenge count\t: " << it->second.connexion_challenge_count << std::endl;
|
||||
std::cerr << " Last activity\t: " << now - it->second.last_activity << " seconds ago." << std::endl;
|
||||
std::cerr << " Cached messages\t: " << it->second.msg_cache.size() << std::endl;
|
||||
@ -268,7 +299,7 @@ void DistributedChatService::locked_printDebugInfo() const
|
||||
|
||||
std::cerr << " Participating nick names: " << std::endl;
|
||||
|
||||
for(std::map<RsGxsId,time_t>::const_iterator it2(it->second.gxs_ids.begin());it2!=it->second.gxs_ids.end();++it2)
|
||||
for(std::map<RsGxsId,time_t>::const_iterator it2(it->second.gxs_ids.begin());it2!=it->second.gxs_ids.end();++it2)
|
||||
std::cerr << " " << it2->first << ": " << now - it2->second << " secs ago" << std::endl;
|
||||
|
||||
}
|
||||
@ -446,7 +477,7 @@ void DistributedChatService::handleRecvChatLobbyListRequest(RsChatLobbyListReque
|
||||
info.name = it->second.lobby_name ;
|
||||
info.topic = it->second.lobby_topic ;
|
||||
info.count = it->second.gxs_ids.size() ;
|
||||
info.flags = it->second.lobby_flags ;
|
||||
info.flags = ChatLobbyFlags(EXTRACT_PRIVACY_FLAGS(it->second.lobby_flags)) ;
|
||||
|
||||
item->lobbies.push_back(info) ;
|
||||
}
|
||||
@ -496,7 +527,7 @@ void DistributedChatService::handleRecvChatLobbyList(RsChatLobbyListItem *item)
|
||||
rec.total_number_of_peers = std::max(rec.total_number_of_peers,item->lobbies[i].count) ;
|
||||
|
||||
rec.last_report_time = now ;
|
||||
rec.lobby_flags = item->lobbies[i].flags ;
|
||||
rec.lobby_flags = EXTRACT_PRIVACY_FLAGS(item->lobbies[i].flags) ;
|
||||
|
||||
std::map<ChatLobbyId,ChatLobbyFlags>::const_iterator it(_known_lobbies_flags.find(item->lobbies[i].id)) ;
|
||||
|
||||
@ -596,19 +627,24 @@ void DistributedChatService::addTimeShiftStatistics(int D)
|
||||
|
||||
void DistributedChatService::handleRecvChatLobbyEventItem(RsChatLobbyEventItem *item)
|
||||
{
|
||||
ChatLobbyFlags fl ;
|
||||
|
||||
// delete items that are not for us, as early as possible.
|
||||
{
|
||||
RsStackMutex stack(mDistributedChatMtx); /********** STACK LOCKED MTX ******/
|
||||
|
||||
// send upward for display
|
||||
|
||||
if(_chat_lobbys.find(item->lobby_id) == _chat_lobbys.end())
|
||||
std::map<ChatLobbyId,ChatLobbyEntry>::const_iterator it = _chat_lobbys.find(item->lobby_id) ;
|
||||
|
||||
if(it == _chat_lobbys.end())
|
||||
{
|
||||
#ifdef DEBUG_CHAT_LOBBIES
|
||||
std::cerr << "Chatlobby for id " << std::hex << item->lobby_id << " has no record. Dropping the msg." << std::dec << std::endl;
|
||||
#endif
|
||||
return ;
|
||||
}
|
||||
fl = it->second.lobby_flags ;
|
||||
}
|
||||
|
||||
|
||||
@ -624,7 +660,18 @@ void DistributedChatService::handleRecvChatLobbyEventItem(RsChatLobbyEventItem *
|
||||
std::cerr << std::endl;
|
||||
return ;
|
||||
}
|
||||
|
||||
if(IS_PGP_SIGNED_LOBBY(fl))
|
||||
{
|
||||
RsIdentityDetails details;
|
||||
|
||||
if(!rsIdentity->getIdDetails(item->signature.keyId,details) || !details.mPgpKnown)
|
||||
{
|
||||
std::cerr << "(WW) Received a lobby msg/item that is not PGP-authed (ID=" << item->signature.keyId << "), whereas the lobby flags require it. Rejecting!" << std::endl;
|
||||
|
||||
return ;
|
||||
}
|
||||
}
|
||||
addTimeShiftStatistics((int)now - (int)item->sendTime) ;
|
||||
|
||||
if(now+100 > (time_t) item->sendTime + MAX_KEEP_MSG_RECORD) // the message is older than the max cache keep minus 100 seconds ! It's too old, and is going to make an echo!
|
||||
@ -912,10 +959,8 @@ bool DistributedChatService::locked_initLobbyBouncableObject(const ChatLobbyId&
|
||||
|
||||
// now sign the object, if the lobby expects it
|
||||
|
||||
if(!IS_ANONYMOUS_LOBBY(lobby.lobby_flags))
|
||||
{
|
||||
uint32_t size = item.signed_serial_size() ;
|
||||
unsigned char *memory = (unsigned char *)malloc(size) ;
|
||||
RsTemporaryMemory memory(size) ;
|
||||
|
||||
if(!item.serialise_signed_part(memory,size))
|
||||
{
|
||||
@ -934,12 +979,9 @@ bool DistributedChatService::locked_initLobbyBouncableObject(const ChatLobbyId&
|
||||
default: std::cerr << "(EE) Cannot sign item: unknown error" << std::endl;
|
||||
break ;
|
||||
}
|
||||
free(memory) ;
|
||||
return false ;
|
||||
}
|
||||
|
||||
|
||||
|
||||
#ifdef DEBUG_CHAT_LOBBIES
|
||||
std::cerr << " signature done." << std::endl;
|
||||
|
||||
@ -953,8 +995,6 @@ bool DistributedChatService::locked_initLobbyBouncableObject(const ChatLobbyId&
|
||||
std::cerr << " Item dump:" << std::endl;
|
||||
item.print(std::cerr,2) ;
|
||||
#endif
|
||||
free(memory) ;
|
||||
}
|
||||
|
||||
return true ;
|
||||
}
|
||||
|
@ -587,7 +587,8 @@ RsGRouterAbstractMsgItem *GRouterDataInfo::addDataChunk(RsGRouterTransactionChun
|
||||
std::cerr << " ERROR: chunk numbering is wrong. Dropping." << std::endl;
|
||||
delete chunk ;
|
||||
delete incoming_data_buffer ;
|
||||
return NULL;
|
||||
incoming_data_buffer = NULL ;
|
||||
return NULL;
|
||||
}
|
||||
incoming_data_buffer->chunk_data = (uint8_t*)realloc((uint8_t*)incoming_data_buffer->chunk_data,incoming_data_buffer->chunk_size + chunk->chunk_size) ;
|
||||
memcpy(&incoming_data_buffer->chunk_data[incoming_data_buffer->chunk_size],chunk->chunk_data,chunk->chunk_size) ;
|
||||
|
@ -29,15 +29,6 @@
|
||||
#include "gxs/rsgds.h"
|
||||
#include "util/retrodb.h"
|
||||
|
||||
class MsgOffset
|
||||
{
|
||||
public:
|
||||
|
||||
MsgOffset() : msgOffset(0), msgLen(0) {}
|
||||
RsGxsMessageId msgId;
|
||||
uint32_t msgOffset, msgLen;
|
||||
};
|
||||
|
||||
class MsgUpdate
|
||||
{
|
||||
public:
|
||||
@ -233,8 +224,9 @@ private:
|
||||
/*!
|
||||
* Creates an sql database and its associated file
|
||||
* also creates the message and groups table
|
||||
* @param isNewDatabase is new database
|
||||
*/
|
||||
void initialise();
|
||||
void initialise(bool isNewDatabase);
|
||||
|
||||
/*!
|
||||
* Remove entries for data base
|
||||
@ -243,34 +235,99 @@ private:
|
||||
bool locked_removeMessageEntries(const GxsMsgReq& msgIds);
|
||||
bool locked_removeGroupEntries(const std::vector<RsGxsGroupId>& grpIds);
|
||||
|
||||
typedef std::map<RsGxsGroupId, std::vector<MsgUpdate> > MsgUpdates;
|
||||
private:
|
||||
/*!
|
||||
* Start release update
|
||||
* @param release
|
||||
* @return true/false
|
||||
*/
|
||||
bool startReleaseUpdate(int release);
|
||||
|
||||
/*!
|
||||
* Update messages entries with new values
|
||||
* @param msgIds
|
||||
* @param cv contains values to update message entries with
|
||||
* Finish release update
|
||||
* @param release
|
||||
* @param result
|
||||
* @return true/false
|
||||
*/
|
||||
bool locked_updateMessageEntries(const MsgUpdates& updates);
|
||||
|
||||
|
||||
private:
|
||||
|
||||
void locked_getMessageOffsets(const RsGxsGroupId& grpId, std::vector<MsgOffset>& msgOffsets);
|
||||
bool finishReleaseUpdate(int release, bool result);
|
||||
|
||||
private:
|
||||
|
||||
RsMutex mDbMutex;
|
||||
|
||||
std::list<std::string> msgColumns;
|
||||
std::list<std::string> msgMetaColumns;
|
||||
std::list<std::string> mMsgOffSetColumns;
|
||||
std::list<std::string> mMsgColumns;
|
||||
std::list<std::string> mMsgMetaColumns;
|
||||
std::list<std::string> mMsgIdColumn;
|
||||
|
||||
std::list<std::string> grpColumns;
|
||||
std::list<std::string> grpMetaColumns;
|
||||
std::list<std::string> grpIdColumn;
|
||||
std::list<std::string> mGrpColumns;
|
||||
std::list<std::string> mGrpMetaColumns;
|
||||
std::list<std::string> mGrpIdColumn;
|
||||
|
||||
std::string mServiceDir, mDbName;
|
||||
// Message meta column
|
||||
int mColMsgMeta_GrpId;
|
||||
int mColMsgMeta_TimeStamp;
|
||||
int mColMsgMeta_NxsFlags;
|
||||
int mColMsgMeta_SignSet;
|
||||
int mColMsgMeta_NxsIdentity;
|
||||
int mColMsgMeta_NxsHash;
|
||||
int mColMsgMeta_MsgId;
|
||||
int mColMsgMeta_OrigMsgId;
|
||||
int mColMsgMeta_MsgStatus;
|
||||
int mColMsgMeta_ChildTs;
|
||||
int mColMsgMeta_MsgParentId;
|
||||
int mColMsgMeta_MsgThreadId;
|
||||
int mColMsgMeta_Name;
|
||||
int mColMsgMeta_NxsServString;
|
||||
int mColMsgMeta_RecvTs;
|
||||
int mColMsgMeta_NxsDataLen;
|
||||
|
||||
// Message columns
|
||||
int mColMsg_GrpId;
|
||||
int mColMsg_NxsData;
|
||||
int mColMsg_MetaData;
|
||||
int mColMsg_MsgId;
|
||||
|
||||
// Group meta columns
|
||||
int mColGrpMeta_GrpId;
|
||||
int mColGrpMeta_TimeStamp;
|
||||
int mColGrpMeta_NxsFlags;
|
||||
// int mColGrpMeta_SignSet;
|
||||
int mColGrpMeta_NxsIdentity;
|
||||
int mColGrpMeta_NxsHash;
|
||||
int mColGrpMeta_KeySet;
|
||||
int mColGrpMeta_SubscrFlag;
|
||||
int mColGrpMeta_Pop;
|
||||
int mColGrpMeta_MsgCount;
|
||||
int mColGrpMeta_Status;
|
||||
int mColGrpMeta_Name;
|
||||
int mColGrpMeta_LastPost;
|
||||
int mColGrpMeta_OrigGrpId;
|
||||
int mColGrpMeta_ServString;
|
||||
int mColGrpMeta_SignFlags;
|
||||
int mColGrpMeta_CircleId;
|
||||
int mColGrpMeta_CircleType;
|
||||
int mColGrpMeta_InternCircle;
|
||||
int mColGrpMeta_Originator;
|
||||
int mColGrpMeta_AuthenFlags;
|
||||
int mColGrpMeta_ParentGrpId;
|
||||
int mColGrpMeta_RecvTs;
|
||||
int mColGrpMeta_RepCutoff;
|
||||
int mColGrpMeta_NxsDataLen;
|
||||
|
||||
// Group columns
|
||||
int mColGrp_GrpId;
|
||||
int mColGrp_NxsData;
|
||||
int mColGrp_MetaData;
|
||||
|
||||
// Group id columns
|
||||
int mColGrpId_GrpId;
|
||||
|
||||
// Msg id columns
|
||||
int mColMsgId_MsgId;
|
||||
|
||||
std::string mServiceDir;
|
||||
std::string mDbName;
|
||||
std::string mDbPath;
|
||||
uint16_t mServType;
|
||||
|
||||
RetroDb* mDb;
|
||||
|
@ -908,7 +908,7 @@ int RsGenExchange::validateGrp(RsNxsGrp* grp)
|
||||
PrivacyBitPos pos = GRP_OPTION_BITS;
|
||||
|
||||
// Check required permissions, and allow them to sign it - if they want too - as well!
|
||||
if (!(metaData.mAuthorId.isNull()) || checkAuthenFlag(pos, author_flag))
|
||||
if ((!metaData.mAuthorId.isNull()) || checkAuthenFlag(pos, author_flag))
|
||||
{
|
||||
needIdentitySign = true;
|
||||
std::cerr << "Needs Identity sign! (Service Flags)";
|
||||
@ -1718,7 +1718,7 @@ void RsGenExchange::processGrpMetaChanges()
|
||||
// process mask
|
||||
bool ok = processGrpMask(g.grpId, g.val);
|
||||
|
||||
ok &= mDataStore->updateGroupMetaData(g) == 1;
|
||||
ok = ok && (mDataStore->updateGroupMetaData(g) == 1);
|
||||
|
||||
if(ok)
|
||||
{
|
||||
@ -1761,6 +1761,12 @@ bool RsGenExchange::processGrpMask(const RsGxsGroupId& grpId, ContentValue &grpC
|
||||
if((mit = grpMetaMap.find(grpId)) != grpMetaMap.end())
|
||||
{
|
||||
grpMeta = mit->second;
|
||||
if (!grpMeta)
|
||||
{
|
||||
std::cerr << "RsGenExchange::processGrpMask() Ignore update for not existing grp id " << grpId.toStdString();
|
||||
std::cerr << std::endl;
|
||||
return false;
|
||||
}
|
||||
ok = true;
|
||||
}
|
||||
|
||||
@ -2090,7 +2096,7 @@ void RsGenExchange::processGroupDelete()
|
||||
gprIds.push_back(groupId);
|
||||
mDataStore->removeGroups(gprIds);
|
||||
toNotify.insert(std::make_pair(
|
||||
token, GrpNote(true, RsGxsGroupId())));
|
||||
token, GrpNote(true, groupId)));
|
||||
}
|
||||
|
||||
|
||||
|
@ -59,7 +59,7 @@
|
||||
const uint8_t RsTokenService::GXS_REQUEST_V2_STATUS_FINISHED_INCOMPLETE = 3;
|
||||
const uint8_t RsTokenService::GXS_REQUEST_V2_STATUS_COMPLETE = 4;
|
||||
const uint8_t RsTokenService::GXS_REQUEST_V2_STATUS_DONE = 5; // ONCE ALL DATA RETRIEVED.
|
||||
|
||||
const uint8_t RsTokenService::GXS_REQUEST_V2_STATUS_CANCELLED = 6;
|
||||
|
||||
/***********
|
||||
* #define DATA_DEBUG 1
|
||||
@ -367,13 +367,19 @@ uint32_t RsGxsDataAccess::requestStatus(uint32_t token)
|
||||
return status;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
bool RsGxsDataAccess::cancelRequest(const uint32_t& token)
|
||||
{
|
||||
return clearRequest(token);
|
||||
RsStackMutex stack(mDataMutex); /****** LOCKED *****/
|
||||
|
||||
GxsRequest* req = locked_retrieveRequest(token);
|
||||
if (!req)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
req->status = GXS_REQUEST_V2_STATUS_CANCELLED;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool RsGxsDataAccess::clearRequest(const uint32_t& token)
|
||||
@ -389,7 +395,7 @@ bool RsGxsDataAccess::clearRequest(const uint32_t& token)
|
||||
}
|
||||
|
||||
delete it->second;
|
||||
mRequests.erase(it->first);
|
||||
mRequests.erase(it);
|
||||
|
||||
return true;
|
||||
}
|
||||
@ -707,7 +713,6 @@ bool RsGxsDataAccess::getGroupList(const uint32_t& token, std::list<RsGxsGroupId
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
GxsRequest* RsGxsDataAccess::locked_retrieveRequest(const uint32_t& token)
|
||||
{
|
||||
|
||||
@ -722,15 +727,84 @@ GxsRequest* RsGxsDataAccess::locked_retrieveRequest(const uint32_t& token)
|
||||
|
||||
void RsGxsDataAccess::processRequests()
|
||||
{
|
||||
|
||||
std::list<uint32_t> toClear;
|
||||
std::list<uint32_t>::iterator cit;
|
||||
time_t now = time(NULL);
|
||||
std::map<uint32_t, GxsRequest*>::iterator it;
|
||||
|
||||
{
|
||||
RsStackMutex stack(mDataMutex); /******* LOCKED *******/
|
||||
|
||||
std::map<uint32_t, GxsRequest*>::iterator it;
|
||||
// process status of the requests
|
||||
for (it = mRequests.begin(); it != mRequests.end(); ++it)
|
||||
{
|
||||
GxsRequest* req = it->second;
|
||||
|
||||
switch (req->status)
|
||||
{
|
||||
case GXS_REQUEST_V2_STATUS_PENDING:
|
||||
// process request later
|
||||
break;
|
||||
case GXS_REQUEST_V2_STATUS_PARTIAL:
|
||||
// should not happen
|
||||
req->status = GXS_REQUEST_V2_STATUS_COMPLETE;
|
||||
break;
|
||||
case GXS_REQUEST_V2_STATUS_DONE:
|
||||
#ifdef DATA_DEBUG
|
||||
std::cerr << "RsGxsDataAccess::processrequests() Clearing Done Request Token: " << req->token;
|
||||
std::cerr << std::endl;
|
||||
#endif
|
||||
toClear.push_back(req->token);
|
||||
break;
|
||||
case GXS_REQUEST_V2_STATUS_CANCELLED:
|
||||
#ifdef DATA_DEBUG
|
||||
std::cerr << "RsGxsDataAccess::processrequests() Clearing Cancelled Request Token: " << req->token;
|
||||
std::cerr << std::endl;
|
||||
#endif
|
||||
toClear.push_back(req->token);
|
||||
break;
|
||||
default:
|
||||
if (now - req->reqTime > MAX_REQUEST_AGE)
|
||||
{
|
||||
#ifdef DATA_DEBUG
|
||||
std::cerr << "RsGxsDataAccess::processrequests() Clearing Old Request Token: " << req->token;
|
||||
std::cerr << std::endl;
|
||||
#endif
|
||||
toClear.push_back(req->token);
|
||||
}
|
||||
}
|
||||
}
|
||||
} // END OF MUTEX.
|
||||
|
||||
// clear requests
|
||||
std::list<uint32_t>::iterator cit;
|
||||
for (cit = toClear.begin(); cit != toClear.end(); ++cit)
|
||||
{
|
||||
clearRequest(*cit);
|
||||
}
|
||||
|
||||
// process requests
|
||||
while (true)
|
||||
{
|
||||
GxsRequest* req = NULL;
|
||||
{
|
||||
RsStackMutex stack(mDataMutex); /******* LOCKED *******/
|
||||
|
||||
// get the first pending request
|
||||
for (it = mRequests.begin(); it != mRequests.end(); ++it)
|
||||
{
|
||||
GxsRequest* reqCheck = it->second;
|
||||
if (reqCheck->status == GXS_REQUEST_V2_STATUS_PENDING)
|
||||
{
|
||||
req = reqCheck;
|
||||
req->status = GXS_REQUEST_V2_STATUS_PARTIAL;
|
||||
break;
|
||||
}
|
||||
}
|
||||
} // END OF MUTEX.
|
||||
|
||||
if (!req) {
|
||||
break;
|
||||
}
|
||||
|
||||
GroupMetaReq* gmr;
|
||||
GroupDataReq* gdr;
|
||||
@ -739,101 +813,69 @@ void RsGxsDataAccess::processRequests()
|
||||
MsgMetaReq* mmr;
|
||||
MsgDataReq* mdr;
|
||||
MsgIdReq* mir;
|
||||
MsgRelatedInfoReq* mri;
|
||||
GroupStatisticRequest* gsr;
|
||||
ServiceStatisticRequest* ssr;
|
||||
MsgRelatedInfoReq* mri;
|
||||
GroupStatisticRequest* gsr;
|
||||
ServiceStatisticRequest* ssr;
|
||||
|
||||
for(it = mRequests.begin(); it != mRequests.end(); ++it)
|
||||
#ifdef DATA_DEBUG
|
||||
std::cerr << "RsGxsDataAccess::processRequests() Processing Token: " << req->token << " Status: "
|
||||
<< req->status << " ReqType: " << req->reqType << " Age: "
|
||||
<< now - req->reqTime << std::endl;
|
||||
#endif
|
||||
|
||||
/* PROCESS REQUEST! */
|
||||
bool ok = false;
|
||||
|
||||
if((gmr = dynamic_cast<GroupMetaReq*>(req)) != NULL)
|
||||
{
|
||||
|
||||
GxsRequest* req = it->second;
|
||||
if (req->status == GXS_REQUEST_V2_STATUS_PENDING)
|
||||
{
|
||||
#ifdef DATA_DEBUG
|
||||
std::cerr << "RsGxsDataAccess::processRequests() Processing Token: " << req->token << " Status: "
|
||||
<< req->status << " ReqType: " << req->reqType << " Age: "
|
||||
<< now - req->reqTime << std::endl;
|
||||
#endif
|
||||
|
||||
req->status = GXS_REQUEST_V2_STATUS_PARTIAL;
|
||||
|
||||
/* PROCESS REQUEST! */
|
||||
|
||||
if((gmr = dynamic_cast<GroupMetaReq*>(req)) != NULL)
|
||||
{
|
||||
getGroupSummary(gmr);
|
||||
}
|
||||
else if((gdr = dynamic_cast<GroupDataReq*>(req)) != NULL)
|
||||
{
|
||||
getGroupData(gdr);
|
||||
}
|
||||
else if((gir = dynamic_cast<GroupIdReq*>(req)) != NULL)
|
||||
{
|
||||
getGroupList(gir);
|
||||
}
|
||||
else if((mmr = dynamic_cast<MsgMetaReq*>(req)) != NULL)
|
||||
{
|
||||
getMsgSummary(mmr);
|
||||
}
|
||||
else if((mdr = dynamic_cast<MsgDataReq*>(req)) != NULL)
|
||||
{
|
||||
getMsgData(mdr);
|
||||
}
|
||||
else if((mir = dynamic_cast<MsgIdReq*>(req)) != NULL)
|
||||
{
|
||||
getMsgList(mir);
|
||||
}
|
||||
else if((mri = dynamic_cast<MsgRelatedInfoReq*>(req)) != NULL)
|
||||
{
|
||||
getMsgRelatedInfo(mri);
|
||||
}
|
||||
else if((gsr = dynamic_cast<GroupStatisticRequest*>(req)) != NULL)
|
||||
{
|
||||
getGroupStatistic(gsr);
|
||||
}
|
||||
else if((ssr = dynamic_cast<ServiceStatisticRequest*>(req)) != NULL)
|
||||
{
|
||||
getServiceStatistic(ssr);
|
||||
}
|
||||
else
|
||||
{
|
||||
std::cerr << "RsGxsDataAccess::processRequests() Failed to process request, token: "
|
||||
<< req->token << std::endl;
|
||||
|
||||
req->status = GXS_REQUEST_V2_STATUS_FAILED;
|
||||
}
|
||||
}
|
||||
else if (req->status == GXS_REQUEST_V2_STATUS_PARTIAL)
|
||||
{
|
||||
req->status = GXS_REQUEST_V2_STATUS_COMPLETE;
|
||||
}
|
||||
else if (req->status == GXS_REQUEST_V2_STATUS_DONE)
|
||||
{
|
||||
#ifdef DATA_DEBUG
|
||||
std::cerr << "RsGxsDataAccess::processrequests() Clearing Done Request Token: "
|
||||
<< req->token;
|
||||
std::cerr << std::endl;
|
||||
#endif
|
||||
toClear.push_back(req->token);
|
||||
}
|
||||
else if (now - req->reqTime > MAX_REQUEST_AGE)
|
||||
{
|
||||
#ifdef DATA_DEBUG
|
||||
std::cerr << "RsGxsDataAccess::processrequests() Clearing Old Request Token: " << req->token;
|
||||
std::cerr << std::endl;
|
||||
#endif
|
||||
toClear.push_back(req->token);
|
||||
}
|
||||
ok = getGroupSummary(gmr);
|
||||
}
|
||||
else if((gdr = dynamic_cast<GroupDataReq*>(req)) != NULL)
|
||||
{
|
||||
ok = getGroupData(gdr);
|
||||
}
|
||||
else if((gir = dynamic_cast<GroupIdReq*>(req)) != NULL)
|
||||
{
|
||||
ok = getGroupList(gir);
|
||||
}
|
||||
else if((mmr = dynamic_cast<MsgMetaReq*>(req)) != NULL)
|
||||
{
|
||||
ok = getMsgSummary(mmr);
|
||||
}
|
||||
else if((mdr = dynamic_cast<MsgDataReq*>(req)) != NULL)
|
||||
{
|
||||
ok = getMsgData(mdr);
|
||||
}
|
||||
else if((mir = dynamic_cast<MsgIdReq*>(req)) != NULL)
|
||||
{
|
||||
ok = getMsgList(mir);
|
||||
}
|
||||
else if((mri = dynamic_cast<MsgRelatedInfoReq*>(req)) != NULL)
|
||||
{
|
||||
ok = getMsgRelatedInfo(mri);
|
||||
}
|
||||
else if((gsr = dynamic_cast<GroupStatisticRequest*>(req)) != NULL)
|
||||
{
|
||||
ok = getGroupStatistic(gsr);
|
||||
}
|
||||
else if((ssr = dynamic_cast<ServiceStatisticRequest*>(req)) != NULL)
|
||||
{
|
||||
ok = getServiceStatistic(ssr);
|
||||
}
|
||||
else
|
||||
{
|
||||
std::cerr << "RsGxsDataAccess::processRequests() Failed to process request, token: "
|
||||
<< req->token << std::endl;
|
||||
}
|
||||
|
||||
} // END OF MUTEX.
|
||||
|
||||
for(cit = toClear.begin(); cit != toClear.end(); ++cit)
|
||||
{
|
||||
clearRequest(*cit);
|
||||
{
|
||||
RsStackMutex stack(mDataMutex); /******* LOCKED *******/
|
||||
if (req->status == GXS_REQUEST_V2_STATUS_PARTIAL)
|
||||
{
|
||||
req->status = ok ? GXS_REQUEST_V2_STATUS_COMPLETE : GXS_REQUEST_V2_STATUS_FAILED;
|
||||
}
|
||||
} // END OF MUTEX.
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
bool RsGxsDataAccess::getGroupStatistic(const uint32_t &token, GxsGroupStatistic &grpStatistic)
|
||||
@ -1719,7 +1761,7 @@ bool RsGxsDataAccess::checkRequestStatus(const uint32_t& token,
|
||||
|
||||
GxsRequest* req = locked_retrieveRequest(token);
|
||||
|
||||
if(req == NULL)
|
||||
if (req == NULL || req->status == GXS_REQUEST_V2_STATUS_CANCELLED)
|
||||
return false;
|
||||
|
||||
anstype = req->ansType;
|
||||
|
@ -235,6 +235,10 @@ void RsGxsNetService::syncWithPeers()
|
||||
|
||||
std::set<RsPeerId> peers;
|
||||
mNetMgr->getOnlineList(mServiceInfo.mServiceType, peers);
|
||||
if (peers.empty()) {
|
||||
// nothing to do
|
||||
return;
|
||||
}
|
||||
|
||||
std::set<RsPeerId>::iterator sit = peers.begin();
|
||||
|
||||
@ -1160,7 +1164,7 @@ void RsGxsNetService::data_tick()
|
||||
//Start waiting as nothing to do in runup
|
||||
usleep((int) (timeDelta * 1000 * 1000)); // timeDelta sec
|
||||
|
||||
if(mUpdateCounter >= 20)
|
||||
if(mUpdateCounter >= 120) // 60 seconds
|
||||
{
|
||||
updateServerSyncTS();
|
||||
mUpdateCounter = 0;
|
||||
@ -2156,6 +2160,9 @@ void RsGxsNetService::locked_genReqGrpTransaction(NxsTransaction* tr)
|
||||
std::cerr << "locked_genReqGrpTransaction(): " << std::endl;
|
||||
#endif
|
||||
|
||||
std::map<RsGxsGroupId, RsGxsGrpMetaData*> grpMetaMap;
|
||||
std::map<RsGxsGroupId, RsGxsGrpMetaData*>::const_iterator metaIter;
|
||||
|
||||
std::list<RsNxsSyncGrpItem*> grpItemL;
|
||||
std::list<RsNxsItem*>::iterator lit = tr->mItems.begin();
|
||||
|
||||
@ -2165,6 +2172,7 @@ void RsGxsNetService::locked_genReqGrpTransaction(NxsTransaction* tr)
|
||||
if(item)
|
||||
{
|
||||
grpItemL.push_back(item);
|
||||
grpMetaMap[item->grpId] = NULL;
|
||||
}else
|
||||
{
|
||||
#ifdef NXS_NET_DEBUG
|
||||
@ -2174,8 +2182,11 @@ void RsGxsNetService::locked_genReqGrpTransaction(NxsTransaction* tr)
|
||||
}
|
||||
}
|
||||
|
||||
std::map<RsGxsGroupId, RsGxsGrpMetaData*> grpMetaMap;
|
||||
std::map<RsGxsGroupId, RsGxsGrpMetaData*>::const_iterator metaIter;
|
||||
if (grpItemL.empty())
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
mDataStore->retrieveGxsGrpMetaData(grpMetaMap);
|
||||
|
||||
// now do compare and add loop
|
||||
@ -2195,7 +2206,7 @@ void RsGxsNetService::locked_genReqGrpTransaction(NxsTransaction* tr)
|
||||
metaIter = grpMetaMap.find(grpId);
|
||||
bool haveItem = false;
|
||||
bool latestVersion = false;
|
||||
if (metaIter != grpMetaMap.end())
|
||||
if (metaIter != grpMetaMap.end() && metaIter->second)
|
||||
{
|
||||
haveItem = true;
|
||||
latestVersion = grpSyncItem->publishTs > metaIter->second->mPublishTs;
|
||||
|
@ -1,12 +1,16 @@
|
||||
!include("../../retroshare.pri"): error("Could not include file ../../retroshare.pri")
|
||||
|
||||
TEMPLATE = lib
|
||||
CONFIG += staticlib bitdht
|
||||
CONFIG += create_prl
|
||||
CONFIG -= qt
|
||||
TARGET = retroshare
|
||||
TARGET_PRL = libretroshare
|
||||
|
||||
|
||||
#GXS Stuff.
|
||||
# This should be disabled for releases until further notice.
|
||||
CONFIG += gxs debug
|
||||
CONFIG += gxs
|
||||
|
||||
#CONFIG += dsdv
|
||||
|
||||
@ -19,7 +23,6 @@ profiling {
|
||||
#QMAKE_CFLAGS += -Werror
|
||||
#QMAKE_CXXFLAGS += -Werror
|
||||
|
||||
CONFIG += debug
|
||||
debug {
|
||||
# DEFINES *= DEBUG
|
||||
# DEFINES *= OPENDHT_DEBUG DHT_DEBUG CONN_DEBUG DEBUG_UDP_SORTER P3DISC_DEBUG DEBUG_UDP_LAYER FT_DEBUG EXTADDRSEARCH_DEBUG
|
||||
@ -81,6 +84,8 @@ SOURCES += tcponudp/udppeer.cc \
|
||||
# The next line is for compliance with debian packages. Keep it!
|
||||
INCLUDEPATH += ../libbitdht
|
||||
DEFINES *= RS_USE_BITDHT
|
||||
PRE_TARGETDEPS *= ../../libbitdht/src/lib/libbitdht.a
|
||||
LIBS += ../../libbitdht/src/lib/libbitdht.a
|
||||
}
|
||||
|
||||
|
||||
@ -120,10 +125,6 @@ HEADERS += $$PUBLIC_HEADERS
|
||||
|
||||
################################# Linux ##########################################
|
||||
linux-* {
|
||||
isEmpty(PREFIX) { PREFIX = /usr }
|
||||
isEmpty(INC_DIR) { INC_DIR = $${PREFIX}/include/retroshare/ }
|
||||
isEmpty(LIB_DIR) { LIB_DIR = $${PREFIX}/lib/ }
|
||||
|
||||
# These two lines fixe compilation on ubuntu natty. Probably a ubuntu packaging error.
|
||||
INCLUDEPATH += $$system(pkg-config --cflags glib-2.0 | sed -e "s/-I//g")
|
||||
|
||||
@ -140,27 +141,25 @@ linux-* {
|
||||
DEPENDPATH += . $${SSL_DIR} $${UPNP_DIR}
|
||||
INCLUDEPATH += . $${SSL_DIR} $${UPNP_DIR}
|
||||
|
||||
# where to put the shared library itself
|
||||
target.path = $$LIB_DIR
|
||||
INSTALLS *= target
|
||||
|
||||
SQLCIPHER_OK = $$system(pkg-config --exists sqlcipher && echo yes)
|
||||
isEmpty(SQLCIPHER_OK) {
|
||||
# We need a explicit path here, to force using the home version of sqlite3 that really encrypts the database.
|
||||
!exists(../../../lib/sqlcipher/.libs/libsqlcipher.a) {
|
||||
message(libsqlcipher.a not found. Compilation will not use SQLCIPER. Database will be unencrypted.)
|
||||
DEFINES *= NO_SQLCIPHER
|
||||
contains(CONFIG, NO_SQLCIPHER) {
|
||||
DEFINES *= NO_SQLCIPHER
|
||||
LIBS *= -lsqlite3
|
||||
} else {
|
||||
SQLCIPHER_OK = $$system(pkg-config --exists sqlcipher && echo yes)
|
||||
isEmpty(SQLCIPHER_OK) {
|
||||
# We need a explicit path here, to force using the home version of sqlite3 that really encrypts the database.
|
||||
exists(../../../lib/sqlcipher/.libs/libsqlcipher.a) {
|
||||
LIBS += ../../../lib/sqlcipher/.libs/libsqlcipher.a
|
||||
DEPENDPATH += ../../../lib/
|
||||
INCLUDEPATH += ../../../lib/
|
||||
} else {
|
||||
error("libsqlcipher is not installed and libsqlcipher.a not found. SQLCIPHER is necessary for encrypted database, to build with unencrypted database, run: qmake CONFIG+=NO_SQLCIPHER")
|
||||
}
|
||||
} else {
|
||||
DEPENDPATH += ../../../lib/
|
||||
INCLUDEPATH += ../../../lib/
|
||||
LIBS *= -lsqlcipher
|
||||
}
|
||||
}
|
||||
|
||||
# where to put the librarys interface
|
||||
include_rsiface.path = $${INC_DIR}
|
||||
include_rsiface.files = $$PUBLIC_HEADERS
|
||||
INSTALLS += include_rsiface
|
||||
|
||||
#CONFIG += version_detail_bash_script
|
||||
|
||||
|
||||
@ -179,6 +178,22 @@ linux-* {
|
||||
DEFINES *= UBUNTU
|
||||
INCLUDEPATH += /usr/include/glib-2.0/ /usr/lib/glib-2.0/include
|
||||
LIBS *= -lgnome-keyring
|
||||
LIBS *= -lssl -lupnp -lixml
|
||||
LIBS *= -lcrypto -lz -lpthread
|
||||
}
|
||||
|
||||
unix {
|
||||
DEFINES *= LIB_DIR=\"\\\"$${LIB_DIR}\\\"\"
|
||||
DEFINES *= DATA_DIR=\"\\\"$${DATA_DIR}\\\"\"
|
||||
|
||||
## where to put the librarys interface
|
||||
#include_rsiface.path = "$${INC_DIR}"
|
||||
#include_rsiface.files = $$PUBLIC_HEADERS
|
||||
#INSTALLS += include_rsiface
|
||||
|
||||
## where to put the shared library itself
|
||||
#target.path = "$$LIB_DIR"
|
||||
#INSTALLS *= target
|
||||
}
|
||||
|
||||
linux-g++ {
|
||||
@ -190,9 +205,16 @@ linux-g++-64 {
|
||||
}
|
||||
|
||||
version_detail_bash_script {
|
||||
QMAKE_EXTRA_TARGETS += write_version_detail
|
||||
PRE_TARGETDEPS = write_version_detail
|
||||
write_version_detail.commands = ./version_detail.sh
|
||||
linux-* {
|
||||
QMAKE_EXTRA_TARGETS += write_version_detail
|
||||
PRE_TARGETDEPS = write_version_detail
|
||||
write_version_detail.commands = ./version_detail.sh
|
||||
}
|
||||
win32 {
|
||||
QMAKE_EXTRA_TARGETS += write_version_detail
|
||||
PRE_TARGETDEPS = write_version_detail
|
||||
write_version_detail.commands = $$PWD/version_detail.bat
|
||||
}
|
||||
}
|
||||
|
||||
#################### Cross compilation for windows under Linux ####################
|
||||
@ -318,6 +340,10 @@ openbsd-* {
|
||||
|
||||
################################### COMMON stuff ##################################
|
||||
|
||||
# openpgpsdk
|
||||
PRE_TARGETDEPS *= ../../openpgpsdk/src/lib/libops.a
|
||||
LIBS *= ../../openpgpsdk/src/lib/libops.a -lbz2
|
||||
|
||||
HEADERS += dbase/cachestrapper.h \
|
||||
dbase/fimonitor.h \
|
||||
dbase/findex.h \
|
||||
@ -477,6 +503,7 @@ HEADERS += util/folderiterator.h \
|
||||
util/rsmemcache.h \
|
||||
util/rstickevent.h \
|
||||
util/rsrecogn.h \
|
||||
util/rsscopetimer.h
|
||||
|
||||
SOURCES += dbase/cachestrapper.cc \
|
||||
dbase/fimonitor.cc \
|
||||
@ -626,6 +653,7 @@ SOURCES += util/folderiterator.cc \
|
||||
util/rsrandom.cc \
|
||||
util/rstickevent.cc \
|
||||
util/rsrecogn.cc \
|
||||
util/rsscopetimer.cc
|
||||
|
||||
|
||||
upnp_miniupnpc {
|
||||
|
@ -1,13 +1,12 @@
|
||||
set QTDIR=C:\Qt\4.8.6
|
||||
set MINGW=C:\MinGW
|
||||
set GIT=C:\Program Files\Git
|
||||
|
||||
set PATH=%QTDIR%\bin;%MINGW%\bin;%PATH%
|
||||
set PATH=%QTDIR%\bin;%MINGW%\bin;;%GIT%\bin;%PATH%
|
||||
|
||||
"c:\Program Files\TortoiseSVN\bin\SubWCRev" . retroshare\rsversion.in retroshare\rsversion.h
|
||||
mingw32-make clean
|
||||
|
||||
mingw32-make clean
|
||||
|
||||
qmake libretroshare.pro
|
||||
qmake libretroshare.pro "CONFIG+=version_detail_bash_script"
|
||||
|
||||
mingw32-make
|
||||
|
||||
|
@ -99,7 +99,17 @@ void p3HistoryMgr::addMessage(const ChatMessage& cm)
|
||||
enabled = true;
|
||||
}
|
||||
|
||||
// not handled: private distant chat
|
||||
if (cm.chat_id.isGxsId() && mPrivateEnable == true) {
|
||||
if (cm.incoming) {
|
||||
peerName = cm.chat_id.toGxsId().toStdString();
|
||||
} else {
|
||||
uint32_t status;
|
||||
RsGxsId from_gxs_id;
|
||||
if (rsMsgs->getDistantChatStatus(cm.chat_id.toGxsId(), status, &from_gxs_id))
|
||||
peerName = from_gxs_id.toStdString();
|
||||
}
|
||||
enabled = true;
|
||||
}
|
||||
|
||||
if(enabled == false)
|
||||
return;
|
||||
@ -115,11 +125,6 @@ void p3HistoryMgr::addMessage(const ChatMessage& cm)
|
||||
item->sendTime = cm.sendTime;
|
||||
item->recvTime = cm.recvTime;
|
||||
|
||||
if (cm.chat_id.isLobbyId()) {
|
||||
// disable save to disc for chat lobbies until they are saved
|
||||
item->saveToDisc = false;
|
||||
}
|
||||
|
||||
item->message = cm.msg ;
|
||||
//librs::util::ConvertUtf16ToUtf8(chatItem->message, item->message);
|
||||
|
||||
@ -392,7 +397,10 @@ bool p3HistoryMgr::chatIdToVirtualPeerId(ChatId chat_id, RsPeerId &peer_id)
|
||||
return true;
|
||||
}
|
||||
|
||||
// not handled: private distant chat
|
||||
if (chat_id.isGxsId()) {
|
||||
peer_id = RsPeerId(chat_id.toGxsId());
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
@ -428,6 +436,9 @@ bool p3HistoryMgr::getMessages(const ChatId &chatId, std::list<HistoryMsg> &msgs
|
||||
if (chatId.isLobbyId() && mLobbyEnable == true) {
|
||||
enabled = true;
|
||||
}
|
||||
if (chatId.isGxsId() && mPrivateEnable == true) {
|
||||
enabled = true;
|
||||
}
|
||||
|
||||
if(enabled == false)
|
||||
return false;
|
||||
|
@ -1322,7 +1322,9 @@ int pqissl::Authorise_SSL_Connection()
|
||||
|
||||
if(!rsBanList->isAddressAccepted(remote_addr,checking_flags,&check_result))
|
||||
{
|
||||
std::cerr << "(SS) connection attempt from banned IP address " << sockaddr_storage_iptostring(remote_addr) << ". Refusing it. Reason: " << check_result << ". Attack??" << std::endl;
|
||||
std::cerr << "(SS) refusing connection attempt from IP address " << sockaddr_storage_iptostring(remote_addr) << ". Reason: " <<
|
||||
((check_result == RSBANLIST_CHECK_RESULT_NOT_WHITELISTED)?"not whitelisted (peer requires whitelist)":"blacklisted") << std::endl;
|
||||
|
||||
RsServer::notify()->AddFeedItem(RS_FEED_ITEM_SEC_IP_BLACKLISTED, PeerId().toStdString(), sockaddr_storage_iptostring(remote_addr), "", "", check_result);
|
||||
reset_locked();
|
||||
return 0 ;
|
||||
@ -1825,6 +1827,12 @@ bool pqissl::moretoread(uint32_t usec)
|
||||
}
|
||||
#endif
|
||||
|
||||
if(sockfd == -1)
|
||||
{
|
||||
std::cerr << "pqissl::moretoread(): socket is invalid or closed." << std::endl;
|
||||
return 0 ;
|
||||
}
|
||||
|
||||
fd_set ReadFDs, WriteFDs, ExceptFDs;
|
||||
FD_ZERO(&ReadFDs);
|
||||
FD_ZERO(&WriteFDs);
|
||||
@ -1887,6 +1895,12 @@ bool pqissl::cansend(uint32_t usec)
|
||||
"pqissl::cansend() polling socket!");
|
||||
#endif
|
||||
|
||||
if(sockfd == -1)
|
||||
{
|
||||
std::cerr << "pqissl::cansend(): socket is invalid or closed." << std::endl;
|
||||
return 0 ;
|
||||
}
|
||||
|
||||
// Interestingly - This code might be portable....
|
||||
|
||||
fd_set ReadFDs, WriteFDs, ExceptFDs;
|
||||
|
0
libretroshare/src/retroshare/rsexpr.h
Executable file → Normal file
@ -28,6 +28,7 @@ template<int n> class t_RsFlags32
|
||||
|
||||
inline t_RsFlags32<n> operator| (const t_RsFlags32<n>& f) const { return t_RsFlags32<n>(_bits | f._bits) ; }
|
||||
inline t_RsFlags32<n> operator^ (const t_RsFlags32<n>& f) const { return t_RsFlags32<n>(_bits ^ f._bits) ; }
|
||||
inline t_RsFlags32<n> operator* (const t_RsFlags32<n>& f) const { return t_RsFlags32<n>(_bits & f._bits) ; }
|
||||
|
||||
inline bool operator!=(const t_RsFlags32<n>& f) const { return _bits != f._bits ; }
|
||||
inline bool operator==(const t_RsFlags32<n>& f) const { return _bits == f._bits ; }
|
||||
|
@ -90,9 +90,10 @@
|
||||
#define RS_CHAT_TYPE_DISTANT 4
|
||||
|
||||
const ChatLobbyFlags RS_CHAT_LOBBY_FLAGS_AUTO_SUBSCRIBE( 0x00000001 ) ;
|
||||
const ChatLobbyFlags RS_CHAT_LOBBY_FLAGS_ANONYMOUS ( 0x00000002 ) ;
|
||||
const ChatLobbyFlags RS_CHAT_LOBBY_FLAGS_deprecated ( 0x00000002 ) ;
|
||||
const ChatLobbyFlags RS_CHAT_LOBBY_FLAGS_PUBLIC ( 0x00000004 ) ;
|
||||
const ChatLobbyFlags RS_CHAT_LOBBY_FLAGS_CHALLENGE ( 0x00000008 ) ;
|
||||
const ChatLobbyFlags RS_CHAT_LOBBY_FLAGS_PGP_SIGNED ( 0x00000010 ) ; // requires the signing ID to be PGP-linked. Avoids anonymous crap.
|
||||
|
||||
typedef uint64_t ChatLobbyId ;
|
||||
typedef uint64_t ChatLobbyMsgId ;
|
||||
|
@ -121,6 +121,7 @@ public:
|
||||
static const uint8_t GXS_REQUEST_V2_STATUS_FINISHED_INCOMPLETE;
|
||||
static const uint8_t GXS_REQUEST_V2_STATUS_COMPLETE;
|
||||
static const uint8_t GXS_REQUEST_V2_STATUS_DONE; // ONCE ALL DATA RETRIEVED.
|
||||
static const uint8_t GXS_REQUEST_V2_STATUS_CANCELLED;
|
||||
|
||||
public:
|
||||
|
||||
|
@ -2,4 +2,11 @@
|
||||
#define RS_MINOR_VERSION 6
|
||||
#define RS_BUILD_NUMBER 0
|
||||
#define RS_BUILD_NUMBER_ADD "x" // <-- do we need this?
|
||||
#define RS_REVISION_NUMBER 0001
|
||||
|
||||
// The revision number should be the 4 first bytes of the git revision hash, which is obtained using:
|
||||
// git log --pretty="%H" | head -1 | cut -c1-8
|
||||
//
|
||||
// Do not forget the 0x, since the RS_REVISION_NUMBER should be an integer.
|
||||
//
|
||||
#define RS_REVISION_STRING "01234567"
|
||||
#define RS_REVISION_NUMBER 0x01234567
|
||||
|
@ -2,4 +2,11 @@
|
||||
#define RS_MINOR_VERSION 6
|
||||
#define RS_BUILD_NUMBER 0
|
||||
#define RS_BUILD_NUMBER_ADD "x" // <-- do we need this?
|
||||
#define RS_REVISION_NUMBER $WCREV$
|
||||
|
||||
// The revision number should be the 4 first bytes of the git revision hash, which is obtained using:
|
||||
// git log --pretty="%H" | head -1 | cut -c1-8
|
||||
//
|
||||
// Do not forget the 0x, since the RS_REVISION_NUMBER should be an integer.
|
||||
//
|
||||
#define RS_REVISION_STRING "$REV$"
|
||||
#define RS_REVISION_NUMBER 0x$REV$
|
||||
|
@ -781,9 +781,12 @@ static bool checkAccount(std::string accountdir, AccountDetails &account,std::ma
|
||||
std::cerr << "getRetroshareDataDirectory() BSD: " << dataDirectory;
|
||||
|
||||
#else
|
||||
/* For Linux, we have a fixed standard data directory */
|
||||
dataDirectory = "/usr/share/RetroShare06";
|
||||
std::cerr << "getRetroshareDataDirectory() Linux: " << dataDirectory;
|
||||
/* For Linux, the data directory is set in libretroshare.pro */
|
||||
#ifndef DATA_DIR
|
||||
#error DATA_DIR variable not set. Cannot compile.
|
||||
#endif
|
||||
dataDirectory = DATA_DIR;
|
||||
std::cerr << "getRetroshareDataDirectory() Linux: " << dataDirectory << std::endl;
|
||||
|
||||
#endif
|
||||
#else
|
||||
|
@ -1251,7 +1251,7 @@ int RsServer::StartupRetroShare()
|
||||
std::vector<std::string> plugins_directories ;
|
||||
|
||||
#ifndef WINDOWS_SYS
|
||||
plugins_directories.push_back(std::string("/usr/lib/retroshare/extensions6/")) ;
|
||||
plugins_directories.push_back(std::string(LIB_DIR) + "/retroshare/extensions6/") ;
|
||||
#endif
|
||||
std::string extensions_dir = rsAccounts->PathBaseDirectory() + "/extensions6/" ;
|
||||
plugins_directories.push_back(extensions_dir) ;
|
||||
|
@ -602,6 +602,11 @@ bool GetTlvString(void *data, uint32_t size, uint32_t *offset,
|
||||
in = std::string(strdata, strsize);
|
||||
}
|
||||
|
||||
#ifdef TLV_BASE_DEBUG
|
||||
if(type == TLV_TYPE_STR_MSG)
|
||||
std::cerr << "Checking string \"" << in << "\"" << std::endl;
|
||||
#endif
|
||||
|
||||
// Check for string content. We want to avoid possible lol bombs as soon as possible.
|
||||
|
||||
static const int number_of_suspiscious_strings = 4 ;
|
||||
|
@ -649,7 +649,6 @@ bool RsTlvKeySignatureSet::GetTlv(void *data, uint32_t size, uint32_t *offset)
|
||||
|
||||
/* get the next type */
|
||||
uint16_t tlvsubtype = GetTlvType( &(((uint8_t *) data)[*offset]) );
|
||||
SignType currType;
|
||||
|
||||
switch(tlvsubtype)
|
||||
{
|
||||
@ -659,16 +658,13 @@ bool RsTlvKeySignatureSet::GetTlv(void *data, uint32_t size, uint32_t *offset)
|
||||
ok &= sign.GetTlv(data, size, offset);
|
||||
if (ok)
|
||||
{
|
||||
keySignSet[currType] = sign;
|
||||
keySignSet[sign_type] = sign;
|
||||
}
|
||||
}
|
||||
break;
|
||||
case TLV_TYPE_KEYSIGNATURETYPE:
|
||||
{
|
||||
ok = GetTlvUInt32(data, size, offset, TLV_TYPE_KEYSIGNATURETYPE, &sign_type);
|
||||
|
||||
if(ok)
|
||||
currType = sign_type;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
|
@ -718,7 +718,9 @@ bool p3IdService::validateData(const uint8_t *data,uint32_t data_size,const RsTl
|
||||
|
||||
if(signature_key.keyData.bin_data == NULL)
|
||||
{
|
||||
#ifdef DEBUG_IDS
|
||||
std::cerr << "(EE) Cannot validate signature for unknown key " << signature.keyId << std::endl;
|
||||
#endif
|
||||
signing_error = RS_GIXS_ERROR_KEY_NOT_AVAILABLE ;
|
||||
return false;
|
||||
}
|
||||
|
@ -1,2 +0,0 @@
|
||||
@echo off
|
||||
"D:\Programme\TortoiseSVN\bin\SubWCRev" . util\rsversion.in util\rsversion.h
|
@ -183,12 +183,11 @@ RetroCursor* RetroDb::sqlQuery(const std::string& tableName, const std::list<std
|
||||
std::list<std::string>::const_iterator it = columns.begin();
|
||||
|
||||
for(; it != columns.end(); ++it){
|
||||
columnSelection += *it;
|
||||
|
||||
++it;
|
||||
if(it != columns.end())
|
||||
if (it != columns.begin()) {
|
||||
columnSelection += ",";
|
||||
--it;
|
||||
}
|
||||
|
||||
columnSelection += *it;
|
||||
}
|
||||
|
||||
// construct query
|
||||
@ -265,6 +264,32 @@ std::string RetroDb::getKey() const
|
||||
return mKey;
|
||||
}
|
||||
|
||||
bool RetroDb::beginTransaction()
|
||||
{
|
||||
if (!isOpen()) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return execSQL("BEGIN;");
|
||||
}
|
||||
|
||||
bool RetroDb::commitTransaction()
|
||||
{
|
||||
if (!isOpen()) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return execSQL("COMMIT;");
|
||||
}
|
||||
bool RetroDb::rollbackTransaction()
|
||||
{
|
||||
if (!isOpen()) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return execSQL("ROLLBACK;");
|
||||
}
|
||||
|
||||
bool RetroDb::execSQL_bind(const std::string &query, std::list<RetroBind*> ¶mBindings){
|
||||
|
||||
// prepare statement
|
||||
@ -532,6 +557,43 @@ bool RetroDb::sqlUpdate(const std::string &tableName, std::string whereClause, c
|
||||
return execSQL_bind(sqlQuery, paramBindings);
|
||||
}
|
||||
|
||||
bool RetroDb::tableExists(const std::string &tableName)
|
||||
{
|
||||
if (!isOpen()) {
|
||||
return false;
|
||||
}
|
||||
|
||||
std::string sqlQuery = "PRAGMA table_info(" + tableName + ");";
|
||||
|
||||
bool result = false;
|
||||
sqlite3_stmt* stmt = NULL;
|
||||
|
||||
int rc = sqlite3_prepare_v2(mDb, sqlQuery.c_str(), sqlQuery.length(), &stmt, NULL);
|
||||
if (rc == SQLITE_OK) {
|
||||
rc = sqlite3_step(stmt);
|
||||
switch (rc) {
|
||||
case SQLITE_ROW:
|
||||
result = true;
|
||||
break;
|
||||
case SQLITE_DONE:
|
||||
break;
|
||||
default:
|
||||
std::cerr << "RetroDb::tableExists(): Error executing statement (code: " << rc << ")"
|
||||
<< std::endl;
|
||||
return false;
|
||||
}
|
||||
} else {
|
||||
std::cerr << "RetroDb::tableExists(): Error preparing statement\n";
|
||||
std::cerr << "Error code: " << sqlite3_errmsg(mDb)
|
||||
<< std::endl;
|
||||
}
|
||||
|
||||
if (stmt) {
|
||||
sqlite3_finalize(stmt);
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
/********************** RetroCursor ************************/
|
||||
|
||||
|
@ -38,8 +38,6 @@
|
||||
|
||||
#include "contentvalue.h"
|
||||
|
||||
|
||||
|
||||
class RetroCursor;
|
||||
|
||||
/*!
|
||||
@ -90,7 +88,23 @@ public:
|
||||
/* modifying db */
|
||||
public:
|
||||
|
||||
/*!
|
||||
* Start transaction
|
||||
* @return true/false
|
||||
*/
|
||||
bool beginTransaction();
|
||||
|
||||
/*!
|
||||
* Commit transaction
|
||||
* @return true/false
|
||||
*/
|
||||
bool commitTransaction();
|
||||
|
||||
/*!
|
||||
* Rollback transaction
|
||||
* @return true/false
|
||||
*/
|
||||
bool rollbackTransaction();
|
||||
|
||||
/*!
|
||||
* To a make query which do not return a result \n
|
||||
@ -153,22 +167,13 @@ public:
|
||||
*/
|
||||
void vacuum();
|
||||
|
||||
|
||||
/*!
|
||||
* Build the "VALUE" part of an insertiong sql query
|
||||
* @param parameter contains place holder query
|
||||
* @param paramBindings
|
||||
* Check if table exist in database
|
||||
* @param tableName table to check
|
||||
* @return true/false
|
||||
*/
|
||||
void buildInsertQueryValue(const std::map<std::string, uint8_t> keyMap, const ContentValue& cv,
|
||||
std::string& parameter, std::list<RetroBind*>& paramBindings);
|
||||
bool tableExists(const std::string& tableName);
|
||||
|
||||
/*!
|
||||
* Build the "VALUE" part of an insertiong sql query
|
||||
* @param parameter contains place holder query
|
||||
* @param paramBindings
|
||||
*/
|
||||
void buildUpdateQueryValue(const std::map<std::string, uint8_t> keyMap, const ContentValue& cv,
|
||||
std::string& parameter, std::list<RetroBind*>& paramBindings);
|
||||
public:
|
||||
|
||||
static const int OPEN_READONLY;
|
||||
@ -179,6 +184,22 @@ private:
|
||||
|
||||
bool execSQL_bind(const std::string &query, std::list<RetroBind*>& blobs);
|
||||
|
||||
/*!
|
||||
* Build the "VALUE" part of an insertiong sql query
|
||||
* @param parameter contains place holder query
|
||||
* @param paramBindings
|
||||
*/
|
||||
void buildInsertQueryValue(const std::map<std::string, uint8_t> keyMap, const ContentValue& cv,
|
||||
std::string& parameter, std::list<RetroBind*>& paramBindings);
|
||||
|
||||
/*!
|
||||
* Build the "VALUE" part of an insertiong sql query
|
||||
* @param parameter contains place holder query
|
||||
* @param paramBindings
|
||||
*/
|
||||
void buildUpdateQueryValue(const std::map<std::string, uint8_t> keyMap, const ContentValue& cv,
|
||||
std::string& parameter, std::list<RetroBind*>& paramBindings);
|
||||
|
||||
private:
|
||||
|
||||
sqlite3* mDb;
|
||||
|
59
libretroshare/src/util/rsscopetimer.cc
Normal file
@ -0,0 +1,59 @@
|
||||
/*
|
||||
* libretroshare/src/util: rsscopetimer.cc
|
||||
*
|
||||
* 3P/PQI network interface for RetroShare.
|
||||
*
|
||||
* Copyright 2013- by Cyril Soler
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Library General Public
|
||||
* License Version 2 as published by the Free Software Foundation.
|
||||
*
|
||||
* This library 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
|
||||
* Library General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Library General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
|
||||
* USA.
|
||||
*
|
||||
* Please report all bugs and problems to "retroshare@lunamutt.com".
|
||||
*
|
||||
*/
|
||||
|
||||
#include <iostream>
|
||||
#include <sys/time.h>
|
||||
#include "rsscopetimer.h"
|
||||
|
||||
RsScopeTimer::RsScopeTimer(const std::string& name)
|
||||
{
|
||||
_name = name ;
|
||||
start();
|
||||
}
|
||||
|
||||
RsScopeTimer::~RsScopeTimer()
|
||||
{
|
||||
if (!_name.empty())
|
||||
{
|
||||
std::cerr << "Time for \"" << _name << "\": " << duration() << std::endl;
|
||||
}
|
||||
}
|
||||
|
||||
double RsScopeTimer::currentTime()
|
||||
{
|
||||
timeval tv ;
|
||||
gettimeofday(&tv,NULL) ;
|
||||
return (tv.tv_sec % 10000) + tv.tv_usec/1000000.0f ; // the %1000 is here to allow double precision to cover the decimals.
|
||||
}
|
||||
|
||||
void RsScopeTimer::start()
|
||||
{
|
||||
_seconds = currentTime();
|
||||
}
|
||||
|
||||
double RsScopeTimer::duration()
|
||||
{
|
||||
return currentTime() - _seconds;
|
||||
}
|
@ -31,29 +31,22 @@
|
||||
// callToMeasure() ;
|
||||
// }
|
||||
//
|
||||
#include <sys/time.h>
|
||||
|
||||
#include <string>
|
||||
|
||||
class RsScopeTimer
|
||||
{
|
||||
public:
|
||||
RsScopeTimer(const std::string& name)
|
||||
{
|
||||
timeval tv ;
|
||||
gettimeofday(&tv,NULL) ;
|
||||
_seconds = (tv.tv_sec % 10000) + tv.tv_usec/1000000.0f ; // the %1000 is here to allow double precision to cover the decimals.
|
||||
_name = name ;
|
||||
}
|
||||
public:
|
||||
RsScopeTimer(const std::string& name);
|
||||
~RsScopeTimer();
|
||||
|
||||
~RsScopeTimer()
|
||||
{
|
||||
timeval tv ;
|
||||
gettimeofday(&tv,NULL) ;
|
||||
double ss = (tv.tv_sec % 10000) + tv.tv_usec/1000000.0f ;
|
||||
void start();
|
||||
double duration();
|
||||
|
||||
std::cerr << "Time for \"" << _name << "\": " << ss - _seconds << std::endl;
|
||||
}
|
||||
private:
|
||||
double currentTime();
|
||||
|
||||
private:
|
||||
std::string _name ;
|
||||
double _seconds ;
|
||||
private:
|
||||
std::string _name ;
|
||||
double _seconds ;
|
||||
};
|
||||
|
@ -12,7 +12,7 @@
|
||||
std::string RsUtil::retroshareVersion()
|
||||
{
|
||||
std::string version;
|
||||
rs_sprintf(version, "%d.%d.%d%s Revision %d", RS_MAJOR_VERSION, RS_MINOR_VERSION, RS_BUILD_NUMBER, RS_BUILD_NUMBER_ADD, RS_REVISION_NUMBER);
|
||||
rs_sprintf(version, "%d.%d.%d%s Revision %08x", RS_MAJOR_VERSION, RS_MINOR_VERSION, RS_BUILD_NUMBER, RS_BUILD_NUMBER_ADD, RS_REVISION_NUMBER);
|
||||
|
||||
return version;
|
||||
}
|
||||
|
48
libretroshare/src/version_detail.bat
Normal file
@ -0,0 +1,48 @@
|
||||
@echo off
|
||||
|
||||
setlocal enabledelayedexpansion
|
||||
|
||||
:: Search git in PATH
|
||||
set GitPath=
|
||||
for %%P in ("%PATH:;=" "%") do (
|
||||
if exist "%%~P.\git.exe" (
|
||||
set GitPath=%%~P
|
||||
goto found_git
|
||||
)
|
||||
)
|
||||
|
||||
:found_git
|
||||
if "%GitPath%"=="" (
|
||||
echo git not found in PATH. Version update cancelled.
|
||||
endlocal
|
||||
exit /B 0
|
||||
)
|
||||
|
||||
echo Update version
|
||||
|
||||
:: Retrieve git information
|
||||
set RsHash=
|
||||
|
||||
pushd "%~dp0"
|
||||
for /f "tokens=1*" %%A in ('"git log --pretty=format:"%%H" --max-count=1"') do set RsHash=%%A
|
||||
popd
|
||||
|
||||
if "%RsHash%"=="" (
|
||||
echo Git hash not found.
|
||||
endlocal
|
||||
exit /B 1
|
||||
)
|
||||
|
||||
:: Create file
|
||||
set InFile=%~dp0retroshare\rsversion.in
|
||||
set OutFile=%~dp0retroshare\rsversion.h
|
||||
if exist "%OutFile%" del /Q "%OutFile%"
|
||||
|
||||
for /f "tokens=* delims= " %%a in (%InFile%) do (
|
||||
set line=%%a
|
||||
set line=!line:$REV$=%RsHash:~0,8%!
|
||||
echo !line!>>"%OutFile%"
|
||||
)
|
||||
|
||||
endlocal
|
||||
exit /B 0
|
@ -5,24 +5,24 @@ set +e
|
||||
|
||||
if ( git log -n 1 &> /dev/null); then
|
||||
#retrieve git information
|
||||
version="git : $(git status | grep branch | cut -c 13-) $(git log -n 1 | grep commit | cut -c 8-)"
|
||||
version="$(git log --pretty=format:"%H" | head -1 | cut -c1-8)"
|
||||
fi
|
||||
|
||||
if ( git log -n 1 | grep svn &> /dev/null); then
|
||||
#retrieve git svn information
|
||||
version="${version} svn : $(git log -n 1 | awk '/svn/ {print $2}' | head -1 | sed 's/.*@//')"
|
||||
elif ( git log -n 10 | grep svn &> /dev/null); then
|
||||
#retrieve git svn information
|
||||
version="${version} svn closest version : $(git log -n 10 | awk '/svn/ {print $2}' | head -1 | sed 's/.*@//')"
|
||||
fi
|
||||
# if ( git log -n 1 | grep svn &> /dev/null); then
|
||||
# #retrieve git svn information
|
||||
# version="${version} svn : $(git log -n 1 | awk '/svn/ {print $2}' | head -1 | sed 's/.*@//')"
|
||||
# elif ( git log -n 10 | grep svn &> /dev/null); then
|
||||
# #retrieve git svn information
|
||||
# version="${version} svn closest version : $(git log -n 10 | awk '/svn/ {print $2}' | head -1 | sed 's/.*@//')"
|
||||
# fi
|
||||
|
||||
if ( svn info &> /dev/null); then
|
||||
version=$(svn info | awk '/^Revision:/ {print $NF}')
|
||||
fi
|
||||
# if ( svn info &> /dev/null); then
|
||||
# version=$(svn info | awk '/^Revision:/ {print $NF}')
|
||||
# fi
|
||||
|
||||
if [[ ${version} != '' ]]; then
|
||||
echo "Writing version to retroshare/rsversion.h : ${version}"
|
||||
sed -e "s%RS_REVISION_NUMBER.*%RS_REVISION_NUMBER ${version}%" retroshare/rsversion.in >retroshare/rsversion.h
|
||||
sed -e "s%RS_REVISION_NUMBER.*%RS_REVISION_NUMBER 0x${version}%" retroshare/rsversion.in >retroshare/rsversion.h
|
||||
fi
|
||||
echo "script version_detail.sh finished normally"
|
||||
exit 0
|
||||
|
@ -1,8 +1,10 @@
|
||||
!include("../../retroshare.pri"): error("Could not include file ../../retroshare.pri")
|
||||
|
||||
TEMPLATE = lib
|
||||
win32 {
|
||||
CONFIG += staticlib
|
||||
macx {
|
||||
CONFIG = staticlib
|
||||
} else {
|
||||
CONFIG = staticlib debug
|
||||
CONFIG += staticlib
|
||||
}
|
||||
|
||||
DEFINES *= OPENSSL_NO_IDEA
|
||||
|
@ -1,8 +1,16 @@
|
||||
!include("../../retroshare.pri"): error("Could not include file ../../retroshare.pri")
|
||||
|
||||
TEMPLATE = lib
|
||||
CONFIG *= plugin
|
||||
|
||||
DEPENDPATH += ../../libretroshare/src/ ../../retroshare-gui/src/
|
||||
INCLUDEPATH += ../../libretroshare/src/ ../../retroshare-gui/src/
|
||||
|
||||
unix {
|
||||
target.path = "$${LIB_DIR}/retroshare/extensions6"
|
||||
INSTALLS += target
|
||||
}
|
||||
|
||||
linux-g++ {
|
||||
LIBS *= -ldl
|
||||
}
|
||||
@ -20,6 +28,9 @@ win32 {
|
||||
QMAKE_CFLAGS += -Wextra
|
||||
QMAKE_CXXFLAGS += -Wextra
|
||||
|
||||
# solve linker warnings because of the order of the libraries
|
||||
QMAKE_LFLAGS += -Wl,--start-group
|
||||
|
||||
OBJECTS_DIR = temp/obj
|
||||
MOC_DIR = temp/moc
|
||||
RCC_DIR = temp/qrc
|
||||
|
@ -92,8 +92,7 @@ linux-* {
|
||||
win32 {
|
||||
DEFINES += CURL_STATICLIB LIBXML_STATIC LIBXSLT_STATIC LIBEXSLT_STATIC
|
||||
|
||||
# Change order of the libraries
|
||||
LIBS = -lcurl -lxml2 -lz -lxslt -lws2_32 -lwldap32 -lssl -lcrypto -lgdi32 -lwsock32 $${LIBS}
|
||||
LIBS += -lcurl -lxml2 -lz -lxslt -lws2_32 -lwldap32 -lssl -lcrypto
|
||||
}
|
||||
|
||||
openbsd-* {
|
||||
|
@ -1,122 +0,0 @@
|
||||
/****************************************************************
|
||||
* RetroShare is distributed under the following license:
|
||||
*
|
||||
* Copyright (C) 2008 Robert Fernie
|
||||
*
|
||||
* 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.
|
||||
****************************************************************/
|
||||
|
||||
#include <gui/common/vmessagebox.h>
|
||||
|
||||
#include "AddLinksDialog.h"
|
||||
//#include <gui/RetroShareLink.h>
|
||||
#include "rsrank.h"
|
||||
|
||||
/* Images for context menu icons */
|
||||
#define IMAGE_EXPORTFRIEND ":/images/exportpeers_16x16.png"
|
||||
#define IMAGE_GREAT ":/images/filerating5.png"
|
||||
#define IMAGE_GOOD ":/images/filerating4.png"
|
||||
#define IMAGE_OK ":/images/filerating3.png"
|
||||
#define IMAGE_SUX ":/images/filerating2.png"
|
||||
#define IMAGE_BADLINK ":/images/filerating1.png"
|
||||
|
||||
/** Constructor */
|
||||
AddLinksDialog::AddLinksDialog(QString url, QWidget *parent)
|
||||
: QDialog(parent)
|
||||
{
|
||||
/* Invoke the Qt Designer generated object setup routine */
|
||||
ui.setupUi(this);
|
||||
|
||||
ui.headerFrame->setHeaderImage(QPixmap(":/images/irkick.png"));
|
||||
ui.headerFrame->setHeaderText(tr("Add Link to Cloud"));
|
||||
|
||||
setAttribute ( Qt::WA_DeleteOnClose, true );
|
||||
|
||||
/* add button */
|
||||
connect(ui.addLinkButton, SIGNAL(clicked()), this, SLOT(addLinkComment()));
|
||||
connect(ui.closepushButton, SIGNAL(clicked()), this, SLOT(close()));
|
||||
|
||||
connect( ui.anonBox, SIGNAL( stateChanged ( int ) ), this, SLOT( load ( void ) ) );
|
||||
|
||||
ui.linkLineEdit->setText(url);
|
||||
|
||||
// RetroShareLink link(url);
|
||||
|
||||
// if(link.valid() && link.type() == RetroShareLink::TYPE_FILE)
|
||||
// ui.titleLineEdit->setText(link.name());
|
||||
// else
|
||||
ui.titleLineEdit->setText(tr("New Link"));
|
||||
|
||||
load();
|
||||
}
|
||||
|
||||
int AddLinksDialog::IndexToScore(int index)
|
||||
{
|
||||
if ((index == -1) || (index > 4))
|
||||
return 0;
|
||||
int score = 2 - index;
|
||||
return score;
|
||||
}
|
||||
|
||||
void AddLinksDialog::addLinkComment()
|
||||
{
|
||||
/* get the title / link / comment */
|
||||
QString title = ui.titleLineEdit->text();
|
||||
QString link = ui.linkLineEdit->text();
|
||||
QString comment = ui.linkTextEdit->toPlainText();
|
||||
int32_t score = AddLinksDialog::IndexToScore(ui.scoreBox->currentIndex());
|
||||
|
||||
if ((link == "") || (title == ""))
|
||||
{
|
||||
QMessageBox::warning(NULL, tr("Add Link Failure"), tr("Missing Link and/or Title"), QMessageBox::Ok);
|
||||
/* can't do anything */
|
||||
return;
|
||||
}
|
||||
|
||||
/* add it either way */
|
||||
if (ui.anonBox->isChecked())
|
||||
{
|
||||
rsRanks->anonRankMsg("", link.toStdWString(), title.toStdWString());
|
||||
}
|
||||
else
|
||||
{
|
||||
rsRanks->newRankMsg(link.toStdWString(),
|
||||
title.toStdWString(),
|
||||
comment.toStdWString(), score);
|
||||
}
|
||||
|
||||
close();
|
||||
}
|
||||
|
||||
void AddLinksDialog::load()
|
||||
{
|
||||
if (ui.anonBox->isChecked())
|
||||
{
|
||||
|
||||
/* disable comment + score */
|
||||
ui.scoreBox->setEnabled(false);
|
||||
ui.linkTextEdit->setEnabled(false);
|
||||
|
||||
/* done! */
|
||||
return;
|
||||
}
|
||||
else
|
||||
{
|
||||
/* enable comment + score */
|
||||
ui.scoreBox->setEnabled(true);
|
||||
ui.linkTextEdit->setEnabled(true);
|
||||
}
|
||||
}
|
@ -1,48 +0,0 @@
|
||||
/****************************************************************
|
||||
* RetroShare GUI is distributed under the following license:
|
||||
*
|
||||
* Copyright (C) 2008 Robert Fernie
|
||||
*
|
||||
* 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.
|
||||
****************************************************************/
|
||||
|
||||
#ifndef _ADDLINKS_DIALOG_H
|
||||
#define _ADDLINKS_DIALOG_H
|
||||
|
||||
#include "ui_AddLinksDialog.h"
|
||||
|
||||
class AddLinksDialog : public QDialog
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
/** Default Constructor */
|
||||
AddLinksDialog(QString url, QWidget *parent = 0);
|
||||
/** Default Destructor */
|
||||
|
||||
static int IndexToScore(int index);
|
||||
|
||||
public slots:
|
||||
void addLinkComment();
|
||||
|
||||
void load();
|
||||
|
||||
private:
|
||||
/** Qt Designer generated object */
|
||||
Ui::AddLinksDialog ui;
|
||||
};
|
||||
|
||||
#endif
|
@ -1,244 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<ui version="4.0">
|
||||
<class>AddLinksDialog</class>
|
||||
<widget class="QDialog" name="AddLinksDialog">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>614</width>
|
||||
<height>415</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
<string>Add Link</string>
|
||||
</property>
|
||||
<property name="windowIcon">
|
||||
<iconset resource="../../retroshare-gui/src/gui/images.qrc">
|
||||
<normaloff>:/images/rstray3.png</normaloff>:/images/rstray3.png</iconset>
|
||||
</property>
|
||||
<layout class="QGridLayout" name="gridLayout_2">
|
||||
<property name="margin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="spacing">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<item row="0" column="0" colspan="4">
|
||||
<widget class="HeaderFrame" name="headerFrame">
|
||||
<property name="frameShape">
|
||||
<enum>QFrame::NoFrame</enum>
|
||||
</property>
|
||||
<property name="frameShadow">
|
||||
<enum>QFrame::Raised</enum>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="0" colspan="4">
|
||||
<widget class="QFrame" name="frame_2">
|
||||
<property name="frameShape">
|
||||
<enum>QFrame::NoFrame</enum>
|
||||
</property>
|
||||
<property name="frameShadow">
|
||||
<enum>QFrame::Raised</enum>
|
||||
</property>
|
||||
<layout class="QGridLayout" name="gridLayout_5">
|
||||
<item row="1" column="1">
|
||||
<widget class="QPushButton" name="closepushButton">
|
||||
<property name="text">
|
||||
<string>Cancel</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="2">
|
||||
<widget class="QPushButton" name="addLinkButton">
|
||||
<property name="text">
|
||||
<string>Add Link</string>
|
||||
</property>
|
||||
<property name="autoDefault">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="default">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="0">
|
||||
<spacer name="horizontalSpacer">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>375</width>
|
||||
<height>20</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
<item row="0" column="0" colspan="3">
|
||||
<widget class="QGroupBox" name="groupBox">
|
||||
<property name="title">
|
||||
<string>Add a new Link</string>
|
||||
</property>
|
||||
<layout class="QGridLayout" name="gridLayout">
|
||||
<property name="spacing">
|
||||
<number>1</number>
|
||||
</property>
|
||||
<item row="0" column="0">
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_3">
|
||||
<item>
|
||||
<layout class="QVBoxLayout" name="verticalLayout_2">
|
||||
<item>
|
||||
<widget class="QLabel" name="label_6">
|
||||
<property name="text">
|
||||
<string>Title:</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLabel" name="label_7">
|
||||
<property name="text">
|
||||
<string>Url:</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item>
|
||||
<layout class="QVBoxLayout" name="verticalLayout">
|
||||
<item>
|
||||
<widget class="QLineEdit" name="titleLineEdit"/>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLineEdit" name="linkLineEdit">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Expanding" vsizetype="Fixed">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item row="1" column="0">
|
||||
<widget class="QFrame" name="buttonFrame">
|
||||
<property name="maximumSize">
|
||||
<size>
|
||||
<width>16777215</width>
|
||||
<height>40</height>
|
||||
</size>
|
||||
</property>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_2">
|
||||
<item>
|
||||
<widget class="QCheckBox" name="anonBox">
|
||||
<property name="text">
|
||||
<string>Add Anonymous Link</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QComboBox" name="scoreBox">
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>+2 Great!</string>
|
||||
</property>
|
||||
<property name="icon">
|
||||
<iconset resource="../../retroshare-gui/src/gui/images.qrc">
|
||||
<normaloff>:/images/filerating5.png</normaloff>:/images/filerating5.png</iconset>
|
||||
</property>
|
||||
</item>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>+1 Good</string>
|
||||
</property>
|
||||
<property name="icon">
|
||||
<iconset resource="../../retroshare-gui/src/gui/images.qrc">
|
||||
<normaloff>:/images/filerating4.png</normaloff>:/images/filerating4.png</iconset>
|
||||
</property>
|
||||
</item>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>0 Okay</string>
|
||||
</property>
|
||||
<property name="icon">
|
||||
<iconset resource="../../retroshare-gui/src/gui/images.qrc">
|
||||
<normaloff>:/images/filerating3.png</normaloff>:/images/filerating3.png</iconset>
|
||||
</property>
|
||||
</item>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>-1 Sux</string>
|
||||
</property>
|
||||
<property name="icon">
|
||||
<iconset resource="../../retroshare-gui/src/gui/images.qrc">
|
||||
<normaloff>:/images/filerating2.png</normaloff>:/images/filerating2.png</iconset>
|
||||
</property>
|
||||
</item>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>-2 Bad Link</string>
|
||||
</property>
|
||||
<property name="icon">
|
||||
<iconset resource="../../retroshare-gui/src/gui/images.qrc">
|
||||
<normaloff>:/images/filerating1.png</normaloff>:/images/filerating1.png</iconset>
|
||||
</property>
|
||||
</item>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<spacer name="horizontalSpacer_2">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>299</width>
|
||||
<height>20</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="2" column="0">
|
||||
<widget class="QTextEdit" name="linkTextEdit">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Expanding" vsizetype="Preferred">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="maximumSize">
|
||||
<size>
|
||||
<width>16777215</width>
|
||||
<height>16777215</height>
|
||||
</size>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
<customwidgets>
|
||||
<customwidget>
|
||||
<class>HeaderFrame</class>
|
||||
<extends>QFrame</extends>
|
||||
<header>gui/common/HeaderFrame.h</header>
|
||||
<container>1</container>
|
||||
</customwidget>
|
||||
</customwidgets>
|
||||
<resources>
|
||||
<include location="../../retroshare-gui/src/gui/images.qrc"/>
|
||||
</resources>
|
||||
<connections/>
|
||||
</ui>
|
@ -1,37 +0,0 @@
|
||||
!include("../Common/retroshare_plugin.pri"): error("Could not include file ../Common/retroshare_plugin.pri")
|
||||
|
||||
CONFIG += qt uic qrc resources
|
||||
|
||||
greaterThan(QT_MAJOR_VERSION, 4) {
|
||||
# Qt 5
|
||||
QT += widgets
|
||||
}
|
||||
|
||||
SOURCES = p3ranking.cc LinksDialog.cpp rsrankitems.cc AddLinksDialog.cpp LinksCloudPlugin.cpp
|
||||
HEADERS = rsrank.h p3ranking.h LinksDialog.h rsrankitems.h AddLinksDialog.h LinksCloudPlugin.h
|
||||
FORMS = LinksDialog.ui AddLinksDialog.ui
|
||||
|
||||
TARGET = LinksCloud
|
||||
|
||||
RESOURCES = LinksCloud_images.qrc lang/LinksCloud_lang.qrc
|
||||
|
||||
TRANSLATIONS += \
|
||||
lang/LinksCloud_ca_ES.ts \
|
||||
lang/LinksCloud_cs.ts \
|
||||
lang/LinksCloud_da.ts \
|
||||
lang/LinksCloud_de.ts \
|
||||
lang/LinksCloud_el.ts \
|
||||
lang/LinksCloud_en.ts \
|
||||
lang/LinksCloud_es.ts \
|
||||
lang/LinksCloud_fi.ts \
|
||||
lang/LinksCloud_fr.ts \
|
||||
lang/LinksCloud_hu.ts \
|
||||
lang/LinksCloud_it.ts \
|
||||
lang/LinksCloud_ja_JP.ts \
|
||||
lang/LinksCloud_ko.ts \
|
||||
lang/LinksCloud_nl.ts \
|
||||
lang/LinksCloud_pl.ts \
|
||||
lang/LinksCloud_ru.ts \
|
||||
lang/LinksCloud_sv.ts \
|
||||
lang/LinksCloud_tr.ts \
|
||||
lang/LinksCloud_zh_CN.ts
|
@ -1,117 +0,0 @@
|
||||
#include <retroshare/rsplugin.h>
|
||||
#include <util/rsversion.h>
|
||||
#include <QTranslator>
|
||||
|
||||
#include "LinksCloudPlugin.h"
|
||||
#include "LinksDialog.h"
|
||||
|
||||
static void *inited = new LinksCloudPlugin() ;
|
||||
|
||||
extern "C" {
|
||||
void *RETROSHARE_PLUGIN_provide()
|
||||
{
|
||||
static LinksCloudPlugin *p = new LinksCloudPlugin() ;
|
||||
|
||||
return (void*)p ;
|
||||
}
|
||||
// This symbol contains the svn revision number grabbed from the executable.
|
||||
// It will be tested by RS to load the plugin automatically, since it is safe to load plugins
|
||||
// with same revision numbers, assuming that the revision numbers are up-to-date.
|
||||
//
|
||||
uint32_t RETROSHARE_PLUGIN_revision = SVN_REVISION_NUMBER ;
|
||||
|
||||
// This symbol contains the svn revision number grabbed from the executable.
|
||||
// It will be tested by RS to load the plugin automatically, since it is safe to load plugins
|
||||
// with same revision numbers, assuming that the revision numbers are up-to-date.
|
||||
//
|
||||
uint32_t RETROSHARE_PLUGIN_api = RS_PLUGIN_API_VERSION ;
|
||||
}
|
||||
|
||||
#define IMAGE_LINKS ":/images/irkick.png"
|
||||
|
||||
void LinksCloudPlugin::getPluginVersion(int& major,int& minor,int& svn_rev) const
|
||||
{
|
||||
major = 5 ;
|
||||
minor = 4 ;
|
||||
svn_rev = SVN_REVISION_NUMBER ;
|
||||
}
|
||||
|
||||
LinksCloudPlugin::LinksCloudPlugin()
|
||||
{
|
||||
mRanking = NULL ;
|
||||
mainpage = NULL ;
|
||||
mIcon = NULL ;
|
||||
mPlugInHandler = NULL;
|
||||
mPeers = NULL;
|
||||
mFiles = NULL;
|
||||
}
|
||||
|
||||
void LinksCloudPlugin::setInterfaces(RsPlugInInterfaces &interfaces){
|
||||
|
||||
mPeers = interfaces.mPeers;
|
||||
mFiles = interfaces.mFiles;
|
||||
}
|
||||
|
||||
MainPage *LinksCloudPlugin::qt_page() const
|
||||
{
|
||||
if(mainpage == NULL)
|
||||
mainpage = new LinksDialog(mPeers, mFiles) ;
|
||||
|
||||
return mainpage ;
|
||||
}
|
||||
|
||||
RsCacheService *LinksCloudPlugin::rs_cache_service() const
|
||||
{
|
||||
if(mRanking == NULL)
|
||||
{
|
||||
mRanking = new p3Ranking(mPlugInHandler) ; // , 3600 * 24 * 30 * 6); // 6 Months
|
||||
rsRanks = mRanking ;
|
||||
}
|
||||
|
||||
return mRanking ;
|
||||
}
|
||||
|
||||
void LinksCloudPlugin::setPlugInHandler(RsPluginHandler *pgHandler){
|
||||
mPlugInHandler = pgHandler;
|
||||
|
||||
}
|
||||
|
||||
QIcon *LinksCloudPlugin::qt_icon() const
|
||||
{
|
||||
if(mIcon == NULL)
|
||||
{
|
||||
Q_INIT_RESOURCE(LinksCloud_images) ;
|
||||
|
||||
mIcon = new QIcon(IMAGE_LINKS) ;
|
||||
}
|
||||
|
||||
return mIcon ;
|
||||
}
|
||||
|
||||
std::string LinksCloudPlugin::getShortPluginDescription() const
|
||||
{
|
||||
return QApplication::translate("LinksCloudPlugin", "This plugin provides a set of cached links, and a voting system to promote them.").toUtf8().constData();
|
||||
}
|
||||
|
||||
std::string LinksCloudPlugin::getPluginName() const
|
||||
{
|
||||
return QApplication::translate("LinksCloudPlugin", "LinksCloud").toUtf8().constData();
|
||||
}
|
||||
|
||||
QTranslator* LinksCloudPlugin::qt_translator(QApplication */*app*/, const QString& languageCode, const QString& externalDir) const
|
||||
{
|
||||
if (languageCode == "en") {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
QTranslator* translator = new QTranslator();
|
||||
|
||||
if (translator->load(externalDir + "/LinksCloud_" + languageCode + ".qm")) {
|
||||
return translator;
|
||||
} else if (translator->load(":/lang/LinksCloud_" + languageCode + ".qm")) {
|
||||
return translator;
|
||||
}
|
||||
|
||||
delete(translator);
|
||||
return NULL;
|
||||
}
|
@ -1,35 +0,0 @@
|
||||
#pragma once
|
||||
|
||||
#include <retroshare/rsplugin.h>
|
||||
#include <retroshare-gui/mainpage.h>
|
||||
#include "p3ranking.h"
|
||||
|
||||
class LinksCloudPlugin: public RsPlugin
|
||||
{
|
||||
public:
|
||||
LinksCloudPlugin() ;
|
||||
virtual ~LinksCloudPlugin() {}
|
||||
|
||||
virtual RsCacheService *rs_cache_service() const ;
|
||||
virtual MainPage *qt_page() const ;
|
||||
virtual QIcon *qt_icon() const ;
|
||||
virtual uint16_t rs_service_id() const { return RS_SERVICE_TYPE_RANK ; }
|
||||
virtual QTranslator *qt_translator(QApplication *app, const QString& languageCode, const QString& externalDir) const;
|
||||
|
||||
virtual void getPluginVersion(int& major,int& minor,int& svn_rev) const ;
|
||||
virtual void setPlugInHandler(RsPluginHandler *pgHandler);
|
||||
|
||||
virtual std::string configurationFileName() const { return std::string() ; }
|
||||
|
||||
virtual std::string getShortPluginDescription() const ;
|
||||
virtual std::string getPluginName() const;
|
||||
virtual void setInterfaces(RsPlugInInterfaces& interfaces);
|
||||
private:
|
||||
mutable p3Ranking *mRanking ;
|
||||
mutable RsPluginHandler *mPlugInHandler;
|
||||
mutable RsFiles* mFiles;
|
||||
mutable RsPeers* mPeers;
|
||||
mutable MainPage* mainpage ;
|
||||
mutable QIcon* mIcon ;
|
||||
};
|
||||
|
@ -1,5 +0,0 @@
|
||||
<RCC>
|
||||
<qresource prefix="/" >
|
||||
<file>images/irkick.png</file>
|
||||
</qresource>
|
||||
</RCC>
|
@ -1,994 +0,0 @@
|
||||
/****************************************************************
|
||||
* RetroShare is distributed under the following license:
|
||||
*
|
||||
* Copyright (C) 2008 Robert Fernie
|
||||
*
|
||||
* 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.
|
||||
****************************************************************/
|
||||
|
||||
#include <QMenu>
|
||||
#include <QTimer>
|
||||
#include <QMessageBox>
|
||||
#include <QDateTime>
|
||||
#include <QDesktopServices>
|
||||
#include "LinksDialog.h"
|
||||
#include <gui/RetroShareLink.h>
|
||||
#include "AddLinksDialog.h"
|
||||
#include "rsrank.h"
|
||||
#include "util/QtVersion.h"
|
||||
|
||||
#include <sstream>
|
||||
|
||||
|
||||
/* Images for context menu icons */
|
||||
#define IMAGE_EXPORTFRIEND ":/images/exportpeers_16x16.png"
|
||||
#define IMAGE_GREAT ":/images/filerating5.png"
|
||||
#define IMAGE_GOOD ":/images/filerating4.png"
|
||||
#define IMAGE_OK ":/images/filerating3.png"
|
||||
#define IMAGE_SUX ":/images/filerating2.png"
|
||||
#define IMAGE_BADLINK ":/images/filerating1.png"
|
||||
#define IMAGE_NOCOMMENTRATING ":/images/filerating0.png"
|
||||
#define IMAGE_DOWNLOAD ":/images/download16.png"
|
||||
|
||||
/******
|
||||
* #define LINKS_DEBUG 1
|
||||
*****/
|
||||
|
||||
/** Constructor */
|
||||
LinksDialog::LinksDialog(RsPeers *peers, RsFiles *files, QWidget *parent)
|
||||
: MainPage(parent), mPeers(peers), mFiles(files)
|
||||
{
|
||||
/* Invoke the Qt Designer generated object setup routine */
|
||||
ui.setupUi(this);
|
||||
|
||||
connect( ui.linkTreeWidget, SIGNAL( customContextMenuRequested( QPoint ) ), this, SLOT( linkTreeWidgetCostumPopupMenu( QPoint ) ) );
|
||||
|
||||
|
||||
/* link combos */
|
||||
connect( ui.rankComboBox, SIGNAL( currentIndexChanged( int ) ), this, SLOT( changedSortRank( int ) ) );
|
||||
connect( ui.periodComboBox, SIGNAL( currentIndexChanged( int ) ), this, SLOT( changedSortPeriod( int ) ) );
|
||||
connect( ui.fromComboBox, SIGNAL( currentIndexChanged( int ) ), this, SLOT( changedSortFrom( int ) ) );
|
||||
connect( ui.topComboBox, SIGNAL( currentIndexChanged( int ) ), this, SLOT( changedSortTop( int ) ) );
|
||||
|
||||
/* add button */
|
||||
connect( ui.addButton, SIGNAL( clicked( void ) ), this, SLOT( addLinkComment( void ) ) );
|
||||
connect( ui.expandButton, SIGNAL( clicked( void ) ), this, SLOT( toggleWindows( void ) ) );
|
||||
|
||||
connect( ui.addToolButton, SIGNAL( clicked( ) ), this, SLOT( addNewLink( ) ) );
|
||||
|
||||
connect( ui.linkTreeWidget, SIGNAL( currentItemChanged ( QTreeWidgetItem *, QTreeWidgetItem * ) ),
|
||||
this, SLOT( changedItem ( QTreeWidgetItem *, QTreeWidgetItem * ) ) );
|
||||
|
||||
connect( ui.linkTreeWidget, SIGNAL( itemDoubleClicked ( QTreeWidgetItem *, int ) ),
|
||||
this, SLOT( openLink ( QTreeWidgetItem *, int ) ) );
|
||||
|
||||
connect( ui.anonBox, SIGNAL( stateChanged ( int ) ), this, SLOT( checkAnon ( void ) ) );
|
||||
|
||||
mStart = 0;
|
||||
|
||||
|
||||
/* Set header resize modes and initial section sizes */
|
||||
QHeaderView * _header = ui.linkTreeWidget->header () ;
|
||||
QHeaderView_setSectionResizeMode(_header, 0, QHeaderView::Interactive);
|
||||
QHeaderView_setSectionResizeMode(_header, 1, QHeaderView::Interactive);
|
||||
QHeaderView_setSectionResizeMode(_header, 2, QHeaderView::Interactive);
|
||||
|
||||
_header->resizeSection ( 0, 400 );
|
||||
_header->resizeSection ( 1, 60 );
|
||||
_header->resizeSection ( 2, 150 );
|
||||
|
||||
ui.linkTreeWidget->setSortingEnabled(true);
|
||||
|
||||
ui.linklabel->setMinimumWidth(20);
|
||||
|
||||
|
||||
/* Set a GUI update timer - much cleaner than
|
||||
* doing everything through the notify agent
|
||||
*/
|
||||
|
||||
QTimer *timer = new QTimer(this);
|
||||
timer->connect(timer, SIGNAL(timeout()), this, SLOT(checkUpdate()));
|
||||
timer->start(1000);
|
||||
}
|
||||
|
||||
void LinksDialog::checkUpdate()
|
||||
{
|
||||
/* update */
|
||||
if (!rsRanks)
|
||||
{
|
||||
std::cerr << " rsRanks = 0 !!!!" << std::endl;
|
||||
return;
|
||||
}
|
||||
|
||||
if (rsRanks->updated())
|
||||
{
|
||||
#ifdef LINKS_DEBUG
|
||||
std::cerr << " rsRanks was updated -> redraw()" << std::endl;
|
||||
#endif
|
||||
updateLinks();
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
void LinksDialog::linkTreeWidgetCostumPopupMenu( QPoint point )
|
||||
{
|
||||
|
||||
QMenu contextMnu( this );
|
||||
|
||||
QAction *voteupAct = new QAction(QIcon(IMAGE_EXPORTFRIEND), tr( "Share Link Anonymously" ), &contextMnu );
|
||||
connect( voteupAct , SIGNAL( triggered() ), this, SLOT( voteup_anon() ) );
|
||||
|
||||
|
||||
QMenu *voteMenu = new QMenu( tr("Vote on Link"), &contextMnu );
|
||||
voteMenu->setIcon(QIcon(IMAGE_EXPORTFRIEND));
|
||||
|
||||
QAction *vote_p2 = new QAction( QIcon(IMAGE_GREAT), tr("+2 Great!"), &contextMnu );
|
||||
connect( vote_p2 , SIGNAL( triggered() ), this, SLOT( voteup_p2() ) );
|
||||
voteMenu->addAction(vote_p2);
|
||||
QAction *vote_p1 = new QAction( QIcon(IMAGE_GOOD), tr("+1 Good"), &contextMnu );
|
||||
connect( vote_p1 , SIGNAL( triggered() ), this, SLOT( voteup_p1() ) );
|
||||
voteMenu->addAction(vote_p1);
|
||||
QAction *vote_p0 = new QAction( QIcon(IMAGE_OK), tr("0 Okay"), &contextMnu );
|
||||
connect( vote_p0 , SIGNAL( triggered() ), this, SLOT( voteup_p0() ) );
|
||||
voteMenu->addAction(vote_p0);
|
||||
QAction *vote_m1 = new QAction( QIcon(IMAGE_SUX), tr("-1 Sux"), &contextMnu );
|
||||
connect( vote_m1 , SIGNAL( triggered() ), this, SLOT( voteup_m1() ) );
|
||||
voteMenu->addAction(vote_m1);
|
||||
QAction *vote_m2 = new QAction( QIcon(IMAGE_BADLINK), tr("-2 Bad Link"), &contextMnu );
|
||||
connect( vote_m2 , SIGNAL( triggered() ), this, SLOT( voteup_m2() ) );
|
||||
voteMenu->addAction(vote_m2);
|
||||
|
||||
QAction *downloadAct = new QAction(QIcon(IMAGE_DOWNLOAD), tr("Download"), &contextMnu);
|
||||
connect(downloadAct, SIGNAL(triggered()), this, SLOT(downloadSelected()));
|
||||
|
||||
contextMnu.addAction(voteupAct);
|
||||
contextMnu.addSeparator();
|
||||
contextMnu.addMenu(voteMenu);
|
||||
contextMnu.addSeparator();
|
||||
contextMnu.addAction(downloadAct);
|
||||
|
||||
contextMnu.exec(ui.linkTreeWidget->viewport()->mapToGlobal(point));
|
||||
}
|
||||
|
||||
void LinksDialog::changedSortRank( int index )
|
||||
{
|
||||
/* update */
|
||||
if (!rsRanks)
|
||||
return;
|
||||
|
||||
/* translate */
|
||||
uint32_t type = 0;
|
||||
switch (index)
|
||||
{
|
||||
case 1:
|
||||
type = RS_RANK_TIME;
|
||||
break;
|
||||
case 2:
|
||||
type = RS_RANK_SCORE;
|
||||
break;
|
||||
default:
|
||||
case 0:
|
||||
type = RS_RANK_ALG;
|
||||
break;
|
||||
}
|
||||
|
||||
if (type)
|
||||
{
|
||||
rsRanks->setSortMethod(type);
|
||||
}
|
||||
updateLinks();
|
||||
}
|
||||
|
||||
void LinksDialog::changedSortPeriod( int index )
|
||||
{
|
||||
/* update */
|
||||
if (!rsRanks)
|
||||
return;
|
||||
|
||||
/* translate */
|
||||
uint32_t period = 0;
|
||||
switch (index)
|
||||
{
|
||||
case 1:
|
||||
period = 60 * 60 * 24 * 7; /* WEEK */
|
||||
break;
|
||||
case 2:
|
||||
period = 60 * 60 * 24; /* DAY */
|
||||
break;
|
||||
default:
|
||||
case 0:
|
||||
period = 60 * 60 * 24 * 30; /* MONTH */
|
||||
break;
|
||||
}
|
||||
|
||||
if (period)
|
||||
{
|
||||
rsRanks->setSortPeriod(period);
|
||||
}
|
||||
updateLinks();
|
||||
}
|
||||
|
||||
void LinksDialog::changedSortFrom( int index )
|
||||
{
|
||||
/* update */
|
||||
if (!rsRanks)
|
||||
return;
|
||||
|
||||
std::list<std::string> peers;
|
||||
|
||||
/* translate */
|
||||
switch (index)
|
||||
{
|
||||
default:
|
||||
case 0:
|
||||
break;
|
||||
case 1:
|
||||
peers.push_back(mPeers->getOwnId());
|
||||
break;
|
||||
}
|
||||
|
||||
if (peers.size() < 1)
|
||||
{
|
||||
rsRanks->clearPeerFilter();
|
||||
}
|
||||
else
|
||||
{
|
||||
rsRanks->setPeerFilter(peers);
|
||||
}
|
||||
updateLinks();
|
||||
}
|
||||
|
||||
#define ENTRIES_PER_BLOCK 100
|
||||
|
||||
void LinksDialog::changedSortTop( int index )
|
||||
{
|
||||
/* update */
|
||||
if (!rsRanks)
|
||||
return;
|
||||
|
||||
std::list<std::string> peers;
|
||||
|
||||
/* translate */
|
||||
switch (index)
|
||||
{
|
||||
default:
|
||||
case 0:
|
||||
mStart = 0;
|
||||
break;
|
||||
case 1:
|
||||
mStart = 1 * ENTRIES_PER_BLOCK;
|
||||
break;
|
||||
case 2:
|
||||
mStart = 2 * ENTRIES_PER_BLOCK;
|
||||
break;
|
||||
case 3:
|
||||
mStart = 3 * ENTRIES_PER_BLOCK;
|
||||
break;
|
||||
case 4:
|
||||
mStart = 4 * ENTRIES_PER_BLOCK;
|
||||
break;
|
||||
case 5:
|
||||
mStart = -1;
|
||||
break;
|
||||
}
|
||||
updateLinks();
|
||||
}
|
||||
|
||||
|
||||
/* get the list of Links from the RsRanks. */
|
||||
void LinksDialog::updateLinks()
|
||||
{
|
||||
|
||||
std::list<std::string> rids;
|
||||
std::list<std::string>::iterator rit;
|
||||
std::list<RsRankComment>::iterator cit;
|
||||
|
||||
#ifdef LINKS_DEBUG
|
||||
std::cerr << "LinksDialog::updateLinks()" << std::endl;
|
||||
#endif
|
||||
|
||||
/* Work out the number/entries to show */
|
||||
uint32_t count = rsRanks->getRankingsCount();
|
||||
uint32_t start;
|
||||
|
||||
uint32_t entries = ENTRIES_PER_BLOCK;
|
||||
if (count < entries)
|
||||
{
|
||||
entries = count;
|
||||
}
|
||||
|
||||
if (mStart == -1)
|
||||
{
|
||||
/* backwards */
|
||||
start = count-entries;
|
||||
}
|
||||
else
|
||||
{
|
||||
start = mStart;
|
||||
if (start + entries > count)
|
||||
{
|
||||
start = count - entries;
|
||||
}
|
||||
}
|
||||
|
||||
/* get a link to the table */
|
||||
QTreeWidget *linkWidget = ui.linkTreeWidget;
|
||||
QList<QTreeWidgetItem *> items;
|
||||
|
||||
rsRanks->getRankings(start, entries, rids);
|
||||
float maxRank = rsRanks->getMaxRank();
|
||||
|
||||
for(rit = rids.begin(); rit != rids.end(); rit++)
|
||||
{
|
||||
RsRankDetails detail;
|
||||
if (!rsRanks->getRankDetails(*rit, detail))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
/* create items */
|
||||
QTreeWidgetItem *item = new QTreeWidgetItem((QTreeWidget*)0);
|
||||
|
||||
/* (0) Title */
|
||||
{
|
||||
item -> setText(0, QString::fromStdWString(detail.title));
|
||||
item -> setSizeHint(0, QSize( 20,20 ) );
|
||||
|
||||
/* Bold and bigger */
|
||||
/*QFont font = item->font(0);
|
||||
font.setBold(true);
|
||||
font.setPointSize(font.pointSize() + 2);
|
||||
item->setFont(0, font);*/
|
||||
}
|
||||
|
||||
/* (1) Rank */
|
||||
{
|
||||
std::ostringstream out;
|
||||
out << 100 * (detail.rank / (maxRank + 0.01));
|
||||
item -> setText(1, QString::fromStdString(out.str()));
|
||||
item -> setSizeHint(1, QSize( 20,20 ) );
|
||||
|
||||
/* Bold and bigger */
|
||||
/*QFont font = item->font(1);
|
||||
font.setBold(true);
|
||||
font.setPointSize(font.pointSize() + 2);
|
||||
item->setFont(1, font);*/
|
||||
}
|
||||
|
||||
/* (2) Link */
|
||||
{
|
||||
item -> setText(2, QString::fromStdWString(detail.link));
|
||||
item -> setSizeHint(2, QSize( 20,20 ) );
|
||||
|
||||
/* Bold and bigger */
|
||||
/*QFont font = item->font(2);
|
||||
font.setBold(true);
|
||||
font.setPointSize(font.pointSize() + 2);
|
||||
item->setFont(2, font);*/
|
||||
}
|
||||
|
||||
/* (3) Date */
|
||||
/*{
|
||||
QDateTime qtime;
|
||||
qtime.setTime_t(it->lastPost);
|
||||
QString timestamp = qtime.toString("yyyy-MM-dd hh:mm:ss");
|
||||
item -> setText(3, timestamp);
|
||||
}*/
|
||||
|
||||
|
||||
/* (4) rid */
|
||||
item -> setText(4, QString::fromStdString(detail.rid));
|
||||
|
||||
|
||||
/* add children */
|
||||
int i = 0;
|
||||
for(cit = detail.comments.begin();
|
||||
cit != detail.comments.end(); cit++, i++)
|
||||
{
|
||||
/* create items */
|
||||
QTreeWidgetItem *child = new QTreeWidgetItem((QTreeWidget*)0);
|
||||
|
||||
QString commentText;
|
||||
QString peerScore;
|
||||
if (cit->score > 1)
|
||||
{
|
||||
peerScore = "[+2] ";
|
||||
child -> setIcon(0,(QIcon(IMAGE_GREAT)));
|
||||
item -> setIcon(0,(QIcon(IMAGE_GREAT)));
|
||||
//peerScore = "[+2 Great Link] ";
|
||||
}
|
||||
else if (cit->score == 1)
|
||||
{
|
||||
peerScore = "[+1] ";
|
||||
child -> setIcon(0,(QIcon(IMAGE_GOOD)));
|
||||
item -> setIcon(0,(QIcon(IMAGE_GOOD)));
|
||||
//peerScore = "[+1 Good] ";
|
||||
}
|
||||
else if (cit->score == 0)
|
||||
{
|
||||
peerScore = "[+0] ";
|
||||
child -> setIcon(0,(QIcon(IMAGE_OK)));
|
||||
item -> setIcon(0,(QIcon(IMAGE_OK)));
|
||||
//peerScore = "[+0 Okay] ";
|
||||
}
|
||||
else if (cit->score == -1)
|
||||
{
|
||||
peerScore = "[-1] ";
|
||||
child -> setIcon(0,(QIcon(IMAGE_SUX)));
|
||||
item -> setIcon(0,(QIcon(IMAGE_SUX)));
|
||||
//peerScore = "[-1 Not Worth It] ";
|
||||
}
|
||||
else //if (cit->score < -1)
|
||||
{
|
||||
peerScore = "[-2 BAD] ";
|
||||
child -> setIcon(0,(QIcon(IMAGE_BADLINK)));
|
||||
item -> setIcon(0,(QIcon(IMAGE_BADLINK)));
|
||||
//peerScore = "[-2 BAD Link] ";
|
||||
}
|
||||
|
||||
/* (0) Comment */
|
||||
if (cit->comment != L"")
|
||||
{
|
||||
commentText = peerScore + QString::fromStdWString(cit->comment);
|
||||
}
|
||||
else
|
||||
{
|
||||
commentText = peerScore + "No Comment";
|
||||
}
|
||||
child -> setText(0, commentText);
|
||||
|
||||
/* (2) Peer / Date */
|
||||
{
|
||||
QDateTime qtime;
|
||||
qtime.setTime_t(cit->timestamp);
|
||||
QString timestamp = qtime.toString("yyyy-MM-dd hh:mm:ss");
|
||||
|
||||
QString peerLabel = QString::fromStdString(mPeers->getPeerName(cit->id));
|
||||
if (peerLabel == "")
|
||||
{
|
||||
peerLabel = "<";
|
||||
peerLabel += QString::fromStdString(cit->id);
|
||||
peerLabel += ">";
|
||||
}
|
||||
peerLabel += " ";
|
||||
|
||||
peerLabel += timestamp;
|
||||
child -> setText(2, peerLabel);
|
||||
|
||||
}
|
||||
|
||||
/* (4) Id */
|
||||
child -> setText(4, QString::fromStdString(cit->id));
|
||||
|
||||
if (i % 2 == 1)
|
||||
{
|
||||
/* set to light gray background */
|
||||
child->setBackground(0,QBrush(Qt::lightGray));
|
||||
child->setBackground(1,QBrush(Qt::lightGray));
|
||||
child->setBackground(2,QBrush(Qt::lightGray));
|
||||
}
|
||||
|
||||
/* push to items */
|
||||
item->addChild(child);
|
||||
}
|
||||
|
||||
/* add to the list */
|
||||
items.append(item);
|
||||
}
|
||||
|
||||
/* remove old items */
|
||||
linkWidget->clear();
|
||||
linkWidget->setColumnCount(3);
|
||||
|
||||
/* add the items in! */
|
||||
linkWidget->insertTopLevelItems(0, items);
|
||||
|
||||
linkWidget->update(); /* update display */
|
||||
|
||||
|
||||
}
|
||||
|
||||
void LinksDialog::openLink ( QTreeWidgetItem * item, int )
|
||||
{
|
||||
#ifdef LINKS_DEBUG
|
||||
std::cerr << "LinksDialog::openLink()" << std::endl;
|
||||
#endif
|
||||
|
||||
/* work out the ids */
|
||||
if (!item)
|
||||
{
|
||||
|
||||
#ifdef LINKS_DEBUG
|
||||
std::cerr << "LinksDialog::openLink() Failed Item" << std::endl;
|
||||
#endif
|
||||
return;
|
||||
}
|
||||
|
||||
std::string rid;
|
||||
std::string pid;
|
||||
|
||||
QTreeWidgetItem *parent = item->parent();
|
||||
if (parent)
|
||||
{
|
||||
/* a child comment -> ignore double click */
|
||||
#ifdef LINKS_DEBUG
|
||||
std::cerr << "LinksDialog::openLink() Failed Child" << std::endl;
|
||||
#endif
|
||||
return;
|
||||
}
|
||||
|
||||
#ifdef LINKS_DEBUG
|
||||
std::cerr << "LinksDialog::openLink() " << (item->text(2)).toStdString() << std::endl;
|
||||
#endif
|
||||
/* open a browser */
|
||||
QUrl url(item->text(2));
|
||||
QDesktopServices::openUrl ( url );
|
||||
|
||||
/* close expansion */
|
||||
bool state = item->isExpanded();
|
||||
item->setExpanded(!state);
|
||||
}
|
||||
|
||||
void LinksDialog::changedItem(QTreeWidgetItem *curr, QTreeWidgetItem *)
|
||||
{
|
||||
/* work out the ids */
|
||||
if (!curr)
|
||||
{
|
||||
updateComments("", "");
|
||||
return;
|
||||
}
|
||||
|
||||
std::string rid;
|
||||
std::string pid;
|
||||
|
||||
QTreeWidgetItem *parent = curr->parent();
|
||||
if (parent)
|
||||
{
|
||||
rid = (parent->text(4)).toStdString();
|
||||
pid = (curr->text(4)).toStdString();
|
||||
|
||||
#ifdef LINKS_DEBUG
|
||||
std::cerr << "LinksDialog::changedItem() Rid: " << rid << " Pid: " << pid;
|
||||
std::cerr << std::endl;
|
||||
#endif
|
||||
|
||||
updateComments(rid, pid);
|
||||
}
|
||||
else
|
||||
{
|
||||
rid = (curr->text(4)).toStdString();
|
||||
|
||||
#ifdef LINKS_DEBUG
|
||||
std::cerr << "LinksDialog::changedItem() Rid: " << rid << " Pid: NULL";
|
||||
std::cerr << std::endl;
|
||||
#endif
|
||||
|
||||
updateComments(rid, "");
|
||||
}
|
||||
}
|
||||
|
||||
void LinksDialog::checkAnon()
|
||||
{
|
||||
changedItem(ui.linkTreeWidget->currentItem(), NULL);
|
||||
}
|
||||
|
||||
|
||||
int IndexToScore(int index)
|
||||
{
|
||||
if ((index == -1) || (index > 4))
|
||||
return 0;
|
||||
int score = 2 - index;
|
||||
return score;
|
||||
}
|
||||
|
||||
int ScoreToIndex(int score)
|
||||
{
|
||||
if ((score < -2) || (score > 2))
|
||||
return 2;
|
||||
int index = 2 - score;
|
||||
return index;
|
||||
}
|
||||
|
||||
|
||||
/* get the list of Links from the RsRanks. */
|
||||
void LinksDialog::updateComments(std::string rid, std::string )
|
||||
{
|
||||
std::list<RsRankComment>::iterator cit;
|
||||
|
||||
|
||||
if (ui.anonBox->isChecked())
|
||||
{
|
||||
/* empty everything */
|
||||
ui.titleLineEdit->setText("");
|
||||
ui.linkLineEdit->setText("");
|
||||
ui.linkTextEdit->setText("");
|
||||
ui.scoreBox->setCurrentIndex(ScoreToIndex(0));
|
||||
mLinkId = rid; /* must be set for Context Menu */
|
||||
|
||||
/* disable comment + score */
|
||||
ui.scoreBox->setEnabled(false);
|
||||
ui.linkTextEdit->setEnabled(false);
|
||||
|
||||
/* done! */
|
||||
return;
|
||||
}
|
||||
else
|
||||
{
|
||||
/* enable comment + score */
|
||||
ui.scoreBox->setEnabled(true);
|
||||
ui.linkTextEdit->setEnabled(true);
|
||||
}
|
||||
|
||||
|
||||
RsRankDetails detail;
|
||||
if ((rid == "") || (!rsRanks->getRankDetails(rid, detail)))
|
||||
{
|
||||
/* clear it up */
|
||||
ui.titleLineEdit->setText("");
|
||||
ui.linkLineEdit->setText("");
|
||||
ui.linkTextEdit->setText("");
|
||||
ui.scoreBox->setCurrentIndex(ScoreToIndex(0));
|
||||
mLinkId = rid;
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
/* set Link details */
|
||||
ui.titleLineEdit->setText(QString::fromStdWString(detail.title));
|
||||
ui.linkLineEdit->setText(QString::fromStdWString(detail.link));
|
||||
ui.linklabel->setText("<a href='" + QString::fromStdWString(detail.link) + "'> " + QString::fromStdWString(detail.link) +"</a>");
|
||||
|
||||
|
||||
if (mLinkId == rid)
|
||||
{
|
||||
/* leave comments */
|
||||
//ui.linkTextEdit->setText("");
|
||||
return;
|
||||
}
|
||||
|
||||
mLinkId = rid;
|
||||
|
||||
/* Add your text to the comment */
|
||||
std::string ownId = mPeers->getOwnId();
|
||||
|
||||
for(cit = detail.comments.begin(); cit != detail.comments.end(); cit++)
|
||||
{
|
||||
if (cit->id == ownId)
|
||||
break;
|
||||
}
|
||||
|
||||
if (cit != detail.comments.end())
|
||||
{
|
||||
QString comment = QString::fromStdWString(cit->comment);
|
||||
ui.linkTextEdit->setText(comment);
|
||||
ui.scoreBox->setCurrentIndex(ScoreToIndex(cit->score));
|
||||
}
|
||||
else
|
||||
{
|
||||
ui.linkTextEdit->setText("");
|
||||
ui.scoreBox->setCurrentIndex(ScoreToIndex(0));
|
||||
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
void LinksDialog::addLinkComment( void )
|
||||
{
|
||||
/* get the title / link / comment */
|
||||
QString title = ui.titleLineEdit->text();
|
||||
QString link = ui.linkLineEdit->text();
|
||||
QString comment = ui.linkTextEdit->toPlainText();
|
||||
int32_t score = IndexToScore(ui.scoreBox->currentIndex());
|
||||
|
||||
if ((mLinkId == "") || (ui.anonBox->isChecked()))
|
||||
{
|
||||
if ((link == "") || (title == ""))
|
||||
{
|
||||
QMessageBox::warning ( NULL, tr("Add Link Failure"), tr("Missing Link and/or Title"), QMessageBox::Ok);
|
||||
/* can't do anything */
|
||||
return;
|
||||
}
|
||||
|
||||
/* add it either way */
|
||||
if (ui.anonBox->isChecked())
|
||||
{
|
||||
rsRanks->anonRankMsg("", link.toStdWString(), title.toStdWString());
|
||||
}
|
||||
else
|
||||
{
|
||||
rsRanks->newRankMsg(
|
||||
link.toStdWString(),
|
||||
title.toStdWString(),
|
||||
comment.toStdWString(), score);
|
||||
}
|
||||
|
||||
updateLinks();
|
||||
return;
|
||||
}
|
||||
|
||||
/* get existing details */
|
||||
|
||||
RsRankDetails detail;
|
||||
if (!rsRanks->getRankDetails(mLinkId, detail))
|
||||
{
|
||||
/* strange error! */
|
||||
QMessageBox::warning ( NULL, tr("Add Link Failure"), tr("Missing Link Data"), QMessageBox::Ok);
|
||||
return;
|
||||
}
|
||||
|
||||
if (link.toStdWString() == detail.link) /* same link! - we can add a comment */
|
||||
{
|
||||
if (comment == "") /* no comment! */
|
||||
{
|
||||
QMessageBox::warning ( NULL, tr("Add Link Failure"), tr("Missing Comment"), QMessageBox::Ok);
|
||||
return;
|
||||
}
|
||||
|
||||
rsRanks->updateComment(mLinkId,
|
||||
comment.toStdWString(),
|
||||
score);
|
||||
}
|
||||
else
|
||||
{
|
||||
QMessageBox::StandardButton sb = QMessageBox::Yes;
|
||||
|
||||
if ((title.toStdWString() == detail.title) /* same title! - wrong */
|
||||
|| (title == ""))
|
||||
{
|
||||
sb = QMessageBox::question ( NULL, tr("Link Title Not Changed"), tr("Do you want to continue?"), (QMessageBox::Yes | QMessageBox::No));
|
||||
}
|
||||
|
||||
/* add Link! */
|
||||
if (sb == QMessageBox::Yes)
|
||||
{
|
||||
rsRanks->newRankMsg(
|
||||
link.toStdWString(),
|
||||
title.toStdWString(),
|
||||
comment.toStdWString(),
|
||||
score);
|
||||
}
|
||||
}
|
||||
updateLinks();
|
||||
return;
|
||||
}
|
||||
|
||||
void LinksDialog::toggleWindows( void )
|
||||
{
|
||||
/* if msg header visible -> hide by changing splitter
|
||||
*/
|
||||
|
||||
QList<int> sizeList = ui.msgSplitter->sizes();
|
||||
QList<int>::iterator it;
|
||||
|
||||
int listSize = 0;
|
||||
int msgSize = 0;
|
||||
int i = 0;
|
||||
|
||||
for(it = sizeList.begin(); it != sizeList.end(); it++, i++)
|
||||
{
|
||||
if (i == 0)
|
||||
{
|
||||
listSize = (*it);
|
||||
}
|
||||
else if (i == 1)
|
||||
{
|
||||
msgSize = (*it);
|
||||
}
|
||||
}
|
||||
|
||||
int totalSize = listSize + msgSize;
|
||||
|
||||
bool toShrink = true;
|
||||
if (msgSize < (int) totalSize / 10)
|
||||
{
|
||||
toShrink = false;
|
||||
}
|
||||
|
||||
QList<int> newSizeList;
|
||||
if (toShrink)
|
||||
{
|
||||
newSizeList.push_back(totalSize);
|
||||
newSizeList.push_back(0);
|
||||
ui.expandButton->setIcon(QIcon(QString(":/images/edit_add24.png")));
|
||||
ui.expandButton->setToolTip(tr("Expand"));
|
||||
}
|
||||
else
|
||||
{
|
||||
newSizeList.push_back(totalSize * 3/4);
|
||||
newSizeList.push_back(totalSize * 1/4);
|
||||
ui.expandButton->setIcon(QIcon(QString(":/images/edit_remove24.png")));
|
||||
ui.expandButton->setToolTip(tr("Hide"));
|
||||
}
|
||||
|
||||
ui.msgSplitter->setSizes(newSizeList);
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
QTreeWidgetItem *LinksDialog::getCurrentLine()
|
||||
{
|
||||
/* get the current, and extract the Id */
|
||||
|
||||
/* get a link to the table */
|
||||
QTreeWidget *peerWidget = ui.linkTreeWidget;
|
||||
QTreeWidgetItem *item = peerWidget -> currentItem();
|
||||
if (!item)
|
||||
{
|
||||
#ifdef LINKS_DEBUG
|
||||
std::cerr << "Invalid Current Item" << std::endl;
|
||||
#endif
|
||||
return NULL;
|
||||
}
|
||||
|
||||
#ifdef LINKS_DEBUG
|
||||
/* Display the columns of this item. */
|
||||
std::ostringstream out;
|
||||
out << "CurrentPeerItem: " << std::endl;
|
||||
|
||||
for(int i = 1; i < 6; i++)
|
||||
{
|
||||
QString txt = item -> text(i);
|
||||
out << "\t" << i << ":" << txt.toStdString() << std::endl;
|
||||
}
|
||||
std::cerr << out.str();
|
||||
#endif
|
||||
|
||||
return item;
|
||||
}
|
||||
|
||||
void LinksDialog::voteup_anon()
|
||||
{
|
||||
//QTreeWidgetItem *c = getCurrentLine();
|
||||
|
||||
if (mLinkId == "")
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
RsRankDetails detail;
|
||||
if (!rsRanks->getRankDetails(mLinkId, detail))
|
||||
{
|
||||
/* not there! */
|
||||
return;
|
||||
}
|
||||
|
||||
QString link = QString::fromStdWString(detail.link);
|
||||
#ifdef LINKS_DEBUG
|
||||
std::cerr << "LinksDialog::voteup_anon() : " << link.toStdString() << std::endl;
|
||||
#endif
|
||||
// need a proper anon sharing option.
|
||||
rsRanks->anonRankMsg(mLinkId, detail.link, detail.title);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
void LinksDialog::voteup_score(int score)
|
||||
{
|
||||
if (mLinkId == "")
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
RsRankDetails detail;
|
||||
if (!rsRanks->getRankDetails(mLinkId, detail))
|
||||
{
|
||||
/* not there! */
|
||||
return;
|
||||
}
|
||||
|
||||
QString link = QString::fromStdWString(detail.link);
|
||||
std::wstring comment;
|
||||
#ifdef LINKS_DEBUG
|
||||
std::cerr << "LinksDialog::voteup_score() : " << link.toStdString() << std::endl;
|
||||
#endif
|
||||
|
||||
|
||||
std::list<RsRankComment>::iterator cit;
|
||||
/* Add your text to the comment */
|
||||
std::string ownId = mPeers->getOwnId();
|
||||
|
||||
for(cit = detail.comments.begin(); cit != detail.comments.end(); cit++)
|
||||
{
|
||||
if (cit->id == ownId)
|
||||
break;
|
||||
}
|
||||
|
||||
if (cit != detail.comments.end())
|
||||
{
|
||||
comment = cit->comment;
|
||||
}
|
||||
|
||||
rsRanks->updateComment(mLinkId, comment, score);
|
||||
}
|
||||
|
||||
|
||||
void LinksDialog::voteup_p2()
|
||||
{
|
||||
voteup_score(2);
|
||||
}
|
||||
|
||||
void LinksDialog::voteup_p1()
|
||||
{
|
||||
voteup_score(1);
|
||||
}
|
||||
|
||||
void LinksDialog::voteup_p0()
|
||||
{
|
||||
voteup_score(0);
|
||||
}
|
||||
|
||||
void LinksDialog::voteup_m1()
|
||||
{
|
||||
voteup_score(-1);
|
||||
}
|
||||
|
||||
void LinksDialog::voteup_m2()
|
||||
{
|
||||
voteup_score(-2);
|
||||
}
|
||||
|
||||
void LinksDialog::downloadSelected()
|
||||
{
|
||||
if (mLinkId == "")
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
RsRankDetails detail;
|
||||
if (!rsRanks->getRankDetails(mLinkId, detail))
|
||||
{
|
||||
/* not there! */
|
||||
return;
|
||||
}
|
||||
|
||||
QString link = QString::fromStdWString(detail.link);
|
||||
std::wstring comment;
|
||||
#ifdef LINKS_DEBUG
|
||||
std::cerr << "LinksDialog::downloadSelected() : " << link.toStdString() << std::endl;
|
||||
#endif
|
||||
|
||||
//RetroShareLink rslink(QString::fromStdWString(detail.link));
|
||||
|
||||
//if(!rslink.valid() || rslink.type() != RetroShareLink::TYPE_FILE)
|
||||
//{
|
||||
// QMessageBox::critical(NULL,"Badly formed link","This link is badly formed. Can't parse/use it. This is a bug. Please contact the developers.") ;
|
||||
// return ;
|
||||
// }
|
||||
|
||||
/* retrieve all peers id for this file */
|
||||
// FileInfo info;
|
||||
// rsFiles->FileDetails(rslink.hash().toStdString(), 0, info);
|
||||
|
||||
// std::list<std::string> srcIds;
|
||||
// std::list<TransferInfo>::iterator pit;
|
||||
// for (pit = info.peers.begin(); pit != info.peers.end(); pit ++)
|
||||
// srcIds.push_back(pit->peerId);
|
||||
|
||||
// rsFiles->FileRequest(rslink.name().toStdString(), rslink.hash().toStdString(), rslink.size(), "", 0, srcIds);
|
||||
}
|
||||
|
||||
void LinksDialog::addNewLink()
|
||||
{
|
||||
|
||||
AddLinksDialog *nAddLinksDialog = new AddLinksDialog("");
|
||||
|
||||
nAddLinksDialog->show();
|
||||
|
||||
/* window will destroy itself! */
|
||||
}
|
@ -1,97 +0,0 @@
|
||||
/****************************************************************
|
||||
* RetroShare GUI is distributed under the following license:
|
||||
*
|
||||
* Copyright (C) 2008 Robert Fernie
|
||||
*
|
||||
* 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.
|
||||
****************************************************************/
|
||||
|
||||
#ifndef _LINKS_DIALOG_H
|
||||
#define _LINKS_DIALOG_H
|
||||
|
||||
#include <retroshare-gui/mainpage.h>
|
||||
#include <retroshare/rsfiles.h>
|
||||
#include <retroshare/rspeers.h>
|
||||
#include "ui_LinksDialog.h"
|
||||
|
||||
|
||||
class LinksDialog : public MainPage
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
/** Default Constructor */
|
||||
LinksDialog(RsPeers* peers, RsFiles* files, QWidget *parent = 0);
|
||||
/** Default Destructor */
|
||||
|
||||
void insertExample();
|
||||
|
||||
private slots:
|
||||
/** Create the context popup menu and it's submenus */
|
||||
void linkTreeWidgetCostumPopupMenu( QPoint point );
|
||||
|
||||
void voteup_anon();
|
||||
void voteup_score(int score);
|
||||
void voteup_p2();
|
||||
void voteup_p1();
|
||||
void voteup_p0();
|
||||
void voteup_m1();
|
||||
void voteup_m2();
|
||||
void downloadSelected();
|
||||
|
||||
void changedSortRank( int index );
|
||||
void changedSortPeriod( int index );
|
||||
void changedSortFrom( int index );
|
||||
void changedSortTop( int index );
|
||||
|
||||
void updateLinks();
|
||||
void addLinkComment( void );
|
||||
void toggleWindows( void );
|
||||
|
||||
void openLink ( QTreeWidgetItem * item, int column );
|
||||
void changedItem(QTreeWidgetItem *curr, QTreeWidgetItem *prev);
|
||||
void checkAnon();
|
||||
|
||||
void checkUpdate();
|
||||
|
||||
void addNewLink();
|
||||
|
||||
private:
|
||||
|
||||
void updateComments(std::string rid, std::string pid);
|
||||
|
||||
int mStart; /* start of rank list */
|
||||
std::string mLinkId;
|
||||
|
||||
/* Worker Functions */
|
||||
/* (1) Update Display */
|
||||
|
||||
/* (2) Utility Fns */
|
||||
QTreeWidgetItem *getCurrentLine();
|
||||
|
||||
QTreeWidget *exampletreeWidget;
|
||||
|
||||
// gui interface
|
||||
RsPeers* mPeers;
|
||||
RsFiles* mFiles;
|
||||
|
||||
|
||||
/** Qt Designer generated object */
|
||||
Ui::LinksDialog ui;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
@ -1,572 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<ui version="4.0">
|
||||
<class>LinksDialog</class>
|
||||
<widget class="QWidget" name="LinksDialog">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>738</width>
|
||||
<height>583</height>
|
||||
</rect>
|
||||
</property>
|
||||
<layout class="QGridLayout">
|
||||
<property name="horizontalSpacing">
|
||||
<number>6</number>
|
||||
</property>
|
||||
<property name="verticalSpacing">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<item row="1" column="0" colspan="3">
|
||||
<widget class="QSplitter" name="msgSplitter">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Preferred" vsizetype="Expanding">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="orientation">
|
||||
<enum>Qt::Vertical</enum>
|
||||
</property>
|
||||
<widget class="QWidget" name="layoutWidget">
|
||||
<layout class="QGridLayout">
|
||||
<item row="0" column="0" colspan="13">
|
||||
<widget class="QTreeWidget" name="linkTreeWidget">
|
||||
<property name="contextMenuPolicy">
|
||||
<enum>Qt::CustomContextMenu</enum>
|
||||
</property>
|
||||
<column>
|
||||
<property name="text">
|
||||
<string>Title / Comment</string>
|
||||
</property>
|
||||
</column>
|
||||
<column>
|
||||
<property name="text">
|
||||
<string>Score</string>
|
||||
</property>
|
||||
</column>
|
||||
<column>
|
||||
<property name="text">
|
||||
<string>Peer / Link</string>
|
||||
</property>
|
||||
</column>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="3" column="0">
|
||||
<widget class="QPushButton" name="expandButton">
|
||||
<property name="text">
|
||||
<string/>
|
||||
</property>
|
||||
<property name="icon">
|
||||
<iconset resource="../../retroshare-gui/src/gui/images.qrc">
|
||||
<normaloff>:/images/edit_remove24.png</normaloff>:/images/edit_remove24.png</iconset>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="3" column="1">
|
||||
<spacer>
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>16</width>
|
||||
<height>20</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
<item row="3" column="2">
|
||||
<widget class="QLabel" name="label">
|
||||
<property name="font">
|
||||
<font>
|
||||
<weight>75</weight>
|
||||
<bold>true</bold>
|
||||
</font>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Sort by</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="3" column="3">
|
||||
<widget class="QComboBox" name="rankComboBox">
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>Combo</string>
|
||||
</property>
|
||||
</item>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>Time</string>
|
||||
</property>
|
||||
<property name="icon">
|
||||
<iconset resource="../../retroshare-gui/src/gui/images.qrc">
|
||||
<normaloff>:/images/kalarm.png</normaloff>:/images/kalarm.png</iconset>
|
||||
</property>
|
||||
</item>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>Ranking</string>
|
||||
</property>
|
||||
<property name="icon">
|
||||
<iconset resource="../../retroshare-gui/src/gui/images.qrc">
|
||||
<normaloff>:/images/records.png</normaloff>:/images/records.png</iconset>
|
||||
</property>
|
||||
</item>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="3" column="4">
|
||||
<spacer>
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>16</width>
|
||||
<height>20</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
<item row="3" column="5">
|
||||
<widget class="QLabel" name="label_2">
|
||||
<property name="font">
|
||||
<font>
|
||||
<weight>75</weight>
|
||||
<bold>true</bold>
|
||||
</font>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>In last</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="3" column="6">
|
||||
<widget class="QComboBox" name="periodComboBox">
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>Month</string>
|
||||
</property>
|
||||
<property name="icon">
|
||||
<iconset resource="../../retroshare-gui/src/gui/images.qrc">
|
||||
<normaloff>:/images/view_calendar_month.png</normaloff>:/images/view_calendar_month.png</iconset>
|
||||
</property>
|
||||
</item>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>Week</string>
|
||||
</property>
|
||||
<property name="icon">
|
||||
<iconset resource="../../retroshare-gui/src/gui/images.qrc">
|
||||
<normaloff>:/images/view_calendar_week.png</normaloff>:/images/view_calendar_week.png</iconset>
|
||||
</property>
|
||||
</item>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>Day</string>
|
||||
</property>
|
||||
<property name="icon">
|
||||
<iconset resource="../../retroshare-gui/src/gui/images.qrc">
|
||||
<normaloff>:/images/view_calendar_day.png</normaloff>:/images/view_calendar_day.png</iconset>
|
||||
</property>
|
||||
</item>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="3" column="7">
|
||||
<spacer>
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>16</width>
|
||||
<height>20</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
<item row="3" column="8">
|
||||
<widget class="QLabel" name="label_3">
|
||||
<property name="font">
|
||||
<font>
|
||||
<weight>75</weight>
|
||||
<bold>true</bold>
|
||||
</font>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>From</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="3" column="9">
|
||||
<widget class="QComboBox" name="fromComboBox">
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>All Peers</string>
|
||||
</property>
|
||||
<property name="icon">
|
||||
<iconset resource="../../retroshare-gui/src/gui/images.qrc">
|
||||
<normaloff>:/images/user/friends24.png</normaloff>:/images/user/friends24.png</iconset>
|
||||
</property>
|
||||
</item>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>Own Links</string>
|
||||
</property>
|
||||
<property name="icon">
|
||||
<iconset resource="../../retroshare-gui/src/gui/images.qrc">
|
||||
<normaloff>:/images/user/identity16.png</normaloff>:/images/user/identity16.png</iconset>
|
||||
</property>
|
||||
</item>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="3" column="10">
|
||||
<spacer>
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>16</width>
|
||||
<height>20</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
<item row="3" column="11">
|
||||
<widget class="QLabel" name="label_5">
|
||||
<property name="font">
|
||||
<font>
|
||||
<weight>75</weight>
|
||||
<bold>true</bold>
|
||||
</font>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Show</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="3" column="12">
|
||||
<widget class="QComboBox" name="topComboBox">
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>Top 100</string>
|
||||
</property>
|
||||
<property name="icon">
|
||||
<iconset resource="../../retroshare-gui/src/gui/images.qrc">
|
||||
<normaloff>:/images/records.png</normaloff>:/images/records.png</iconset>
|
||||
</property>
|
||||
</item>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>101-200</string>
|
||||
</property>
|
||||
</item>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>201-300</string>
|
||||
</property>
|
||||
</item>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>301-400</string>
|
||||
</property>
|
||||
</item>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>401-500</string>
|
||||
</property>
|
||||
</item>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>Bottom 100</string>
|
||||
</property>
|
||||
</item>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="1" colspan="12">
|
||||
<widget class="QLabel" name="linklabel">
|
||||
<property name="styleSheet">
|
||||
<string notr="true">QLabel{border: 2px solid #CCCCCC;
|
||||
border-radius: 10px;
|
||||
background: white;
|
||||
padding:2}</string>
|
||||
</property>
|
||||
<property name="openExternalLinks">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="textInteractionFlags">
|
||||
<set>Qt::LinksAccessibleByKeyboard|Qt::LinksAccessibleByMouse|Qt::TextBrowserInteraction|Qt::TextSelectableByKeyboard|Qt::TextSelectableByMouse</set>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="0">
|
||||
<widget class="QLabel" name="label_9">
|
||||
<property name="font">
|
||||
<font>
|
||||
<weight>75</weight>
|
||||
<bold>true</bold>
|
||||
</font>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Link:</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
<widget class="QWidget" name="layoutWidget_1">
|
||||
<layout class="QVBoxLayout">
|
||||
<item>
|
||||
<layout class="QHBoxLayout">
|
||||
<item>
|
||||
<spacer>
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>311</width>
|
||||
<height>32</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QCheckBox" name="anonBox">
|
||||
<property name="font">
|
||||
<font>
|
||||
<weight>50</weight>
|
||||
<bold>false</bold>
|
||||
</font>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Add Anonymous Link</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QPushButton" name="addButton">
|
||||
<property name="text">
|
||||
<string>Add Link/Comment</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item>
|
||||
<layout class="QHBoxLayout">
|
||||
<item>
|
||||
<widget class="QLabel" name="label_6">
|
||||
<property name="text">
|
||||
<string>Title:</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLineEdit" name="titleLineEdit">
|
||||
<property name="styleSheet">
|
||||
<string notr="true">QLineEdit{border: 2px solid #CCCCCC;
|
||||
border-radius: 10px;
|
||||
background: white;}</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLabel" name="label_8">
|
||||
<property name="text">
|
||||
<string>Score:</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QComboBox" name="scoreBox">
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>+2 Great!</string>
|
||||
</property>
|
||||
<property name="icon">
|
||||
<iconset resource="../../retroshare-gui/src/gui/images.qrc">
|
||||
<normaloff>:/images/filerating5.png</normaloff>:/images/filerating5.png</iconset>
|
||||
</property>
|
||||
</item>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>+1 Good</string>
|
||||
</property>
|
||||
<property name="icon">
|
||||
<iconset resource="../../retroshare-gui/src/gui/images.qrc">
|
||||
<normaloff>:/images/filerating4.png</normaloff>:/images/filerating4.png</iconset>
|
||||
</property>
|
||||
</item>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>0 Okay</string>
|
||||
</property>
|
||||
<property name="icon">
|
||||
<iconset resource="../../retroshare-gui/src/gui/images.qrc">
|
||||
<normaloff>:/images/filerating3.png</normaloff>:/images/filerating3.png</iconset>
|
||||
</property>
|
||||
</item>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>-1 Sux</string>
|
||||
</property>
|
||||
<property name="icon">
|
||||
<iconset resource="../../retroshare-gui/src/gui/images.qrc">
|
||||
<normaloff>:/images/filerating2.png</normaloff>:/images/filerating2.png</iconset>
|
||||
</property>
|
||||
</item>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>-2 Bad Link</string>
|
||||
</property>
|
||||
<property name="icon">
|
||||
<iconset resource="../../retroshare-gui/src/gui/images.qrc">
|
||||
<normaloff>:/images/filerating1.png</normaloff>:/images/filerating1.png</iconset>
|
||||
</property>
|
||||
</item>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item>
|
||||
<layout class="QHBoxLayout">
|
||||
<item>
|
||||
<widget class="QLabel" name="label_7">
|
||||
<property name="text">
|
||||
<string>Url:</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLineEdit" name="linkLineEdit">
|
||||
<property name="styleSheet">
|
||||
<string notr="true">QLineEdit{border: 2px solid #CCCCCC;
|
||||
border-radius: 10px;
|
||||
background: white;}</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QTextEdit" name="linkTextEdit">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Expanding" vsizetype="Preferred">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="maximumSize">
|
||||
<size>
|
||||
<width>16777215</width>
|
||||
<height>16777215</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="styleSheet">
|
||||
<string notr="true">QTextEdit{border: 2px solid #CCCCCC;
|
||||
border-radius: 10px;
|
||||
background: white;}</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="0" colspan="3">
|
||||
<widget class="QFrame" name="titleBarFrame">
|
||||
<property name="maximumSize">
|
||||
<size>
|
||||
<width>16777215</width>
|
||||
<height>32</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="frameShape">
|
||||
<enum>QFrame::StyledPanel</enum>
|
||||
</property>
|
||||
<property name="frameShadow">
|
||||
<enum>QFrame::Raised</enum>
|
||||
</property>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout">
|
||||
<property name="margin">
|
||||
<number>2</number>
|
||||
</property>
|
||||
<item>
|
||||
<widget class="QLabel" name="titleBarPixmap">
|
||||
<property name="maximumSize">
|
||||
<size>
|
||||
<width>24</width>
|
||||
<height>24</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string/>
|
||||
</property>
|
||||
<property name="pixmap">
|
||||
<pixmap resource="linksCloud_images.qrc">:/images/irkick.png</pixmap>
|
||||
</property>
|
||||
<property name="scaledContents">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLabel" name="titleBarLabel">
|
||||
<property name="font">
|
||||
<font>
|
||||
<weight>75</weight>
|
||||
<bold>true</bold>
|
||||
</font>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Links Cloud</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<spacer name="horizontalSpacer">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>596</width>
|
||||
<height>15</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QToolButton" name="addToolButton">
|
||||
<property name="text">
|
||||
<string>Add new link</string>
|
||||
</property>
|
||||
<property name="icon">
|
||||
<iconset resource="../../retroshare-gui/src/gui/images.qrc">
|
||||
<normaloff>:/images/edit_add24.png</normaloff>:/images/edit_add24.png</iconset>
|
||||
</property>
|
||||
<property name="iconSize">
|
||||
<size>
|
||||
<width>24</width>
|
||||
<height>16</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="autoRaise">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
<resources>
|
||||
<include location="linksCloud_images.qrc"/>
|
||||
<include location="../../retroshare-gui/src/gui/images.qrc"/>
|
||||
</resources>
|
||||
<connections/>
|
||||
</ui>
|
Before Width: | Height: | Size: 2.2 KiB |
@ -1,329 +0,0 @@
|
||||
<?xml version="1.0" ?><!DOCTYPE TS><TS language="ca_ES" version="2.0">
|
||||
<context>
|
||||
<name>AddLinksDialog</name>
|
||||
<message>
|
||||
<location filename="../AddLinksDialog.ui" line="14"/>
|
||||
<location filename="../AddLinksDialog.ui" line="56"/>
|
||||
<source>Add Link</source>
|
||||
<translation>Afegir enllaç</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../AddLinksDialog.ui" line="49"/>
|
||||
<source>Cancel</source>
|
||||
<translation>Cancel·la</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../AddLinksDialog.ui" line="82"/>
|
||||
<source>Add a new Link</source>
|
||||
<translation>Afegir un nou enllaç</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../AddLinksDialog.ui" line="95"/>
|
||||
<source>Title:</source>
|
||||
<translation>Títol:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../AddLinksDialog.ui" line="102"/>
|
||||
<source>Url:</source>
|
||||
<translation>URL:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../AddLinksDialog.ui" line="139"/>
|
||||
<source>Add Anonymous Link</source>
|
||||
<translation>Afegir enllaç anònim</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../AddLinksDialog.ui" line="147"/>
|
||||
<source>+2 Great!</source>
|
||||
<translation>+2 Fantàstic!</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../AddLinksDialog.ui" line="156"/>
|
||||
<source>+1 Good</source>
|
||||
<translation>+1 Molt bo</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../AddLinksDialog.ui" line="165"/>
|
||||
<source>0 Okay</source>
|
||||
<translation>0 Està bé</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../AddLinksDialog.ui" line="174"/>
|
||||
<source>-1 Sux</source>
|
||||
<translation>-1 És dolent</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../AddLinksDialog.ui" line="183"/>
|
||||
<source>-2 Bad Link</source>
|
||||
<translation>-2 Enllaç dolent</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../AddLinksDialog.cpp" line="44"/>
|
||||
<source>Add Link to Cloud</source>
|
||||
<translation>Afegir enllaç al núvol</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../AddLinksDialog.cpp" line="61"/>
|
||||
<source>New Link</source>
|
||||
<translation>Nou enllaç</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../AddLinksDialog.cpp" line="89"/>
|
||||
<source>Add Link Failure</source>
|
||||
<translation>Afegir enllaç que falla</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../AddLinksDialog.cpp" line="89"/>
|
||||
<source>Missing Link and/or Title</source>
|
||||
<translation>Enllaç i/o títol perdut</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>LinksCloudPlugin</name>
|
||||
<message>
|
||||
<location filename="../LinksCloudPlugin.cpp" line="93"/>
|
||||
<source>This plugin provides a set of cached links, and a voting system to promote them.</source>
|
||||
<translation>Aquest complement proporciona un conjunt d'enllaços en cau i un sistema de votar-los i promocionar-los.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksCloudPlugin.cpp" line="98"/>
|
||||
<source>LinksCloud</source>
|
||||
<translation>NúvolEnllaços</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>LinksDialog</name>
|
||||
<message>
|
||||
<location filename="../LinksDialog.ui" line="45"/>
|
||||
<source>Title / Comment</source>
|
||||
<translation>Títol / Comentari</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.ui" line="50"/>
|
||||
<source>Score</source>
|
||||
<translation>Puntuació</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.ui" line="55"/>
|
||||
<source>Peer / Link</source>
|
||||
<translation>Contacte / Enllaç</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.ui" line="93"/>
|
||||
<source>Sort by</source>
|
||||
<translation>Ordenat per</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.ui" line="101"/>
|
||||
<source>Combo</source>
|
||||
<translation>Combinació</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.ui" line="106"/>
|
||||
<source>Time</source>
|
||||
<translation>Temps</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.ui" line="115"/>
|
||||
<source>Ranking</source>
|
||||
<translation>Classificació</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.ui" line="146"/>
|
||||
<source>In last</source>
|
||||
<translation>En l'últim</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.ui" line="154"/>
|
||||
<source>Month</source>
|
||||
<translation>Mes</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.ui" line="163"/>
|
||||
<source>Week</source>
|
||||
<translation>Setmana</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.ui" line="172"/>
|
||||
<source>Day</source>
|
||||
<translation>Dia</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.ui" line="203"/>
|
||||
<source>From</source>
|
||||
<translation>Des de</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.ui" line="211"/>
|
||||
<source>All Peers</source>
|
||||
<translation>Tots els contactes</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.ui" line="220"/>
|
||||
<source>Own Links</source>
|
||||
<translation>Enllaços propis</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.ui" line="251"/>
|
||||
<source>Show</source>
|
||||
<translation>Mostra</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.ui" line="259"/>
|
||||
<source>Top 100</source>
|
||||
<translation>Top 100</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.ui" line="268"/>
|
||||
<source>101-200</source>
|
||||
<translation>101-200</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.ui" line="273"/>
|
||||
<source>201-300</source>
|
||||
<translation>201-300</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.ui" line="278"/>
|
||||
<source>301-400</source>
|
||||
<translation>301-400</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.ui" line="283"/>
|
||||
<source>401-500</source>
|
||||
<translation>401-500</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.ui" line="288"/>
|
||||
<source>Bottom 100</source>
|
||||
<translation>Els últims 100</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.ui" line="318"/>
|
||||
<source>Link:</source>
|
||||
<translation>Enllaç:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.ui" line="350"/>
|
||||
<source>Add Anonymous Link</source>
|
||||
<translation>Afegir enllaç anònim</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.ui" line="357"/>
|
||||
<source>Add Link/Comment</source>
|
||||
<translation>Afegir Enllaç/Comentari</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.ui" line="368"/>
|
||||
<source>Title:</source>
|
||||
<translation>Títol:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.ui" line="384"/>
|
||||
<source>Score:</source>
|
||||
<translation>Puntuació:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.ui" line="392"/>
|
||||
<location filename="../LinksDialog.cpp" line="144"/>
|
||||
<source>+2 Great!</source>
|
||||
<translation>+2 Fantàstic!</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.ui" line="401"/>
|
||||
<location filename="../LinksDialog.cpp" line="147"/>
|
||||
<source>+1 Good</source>
|
||||
<translation>+1 Molt bo</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.ui" line="410"/>
|
||||
<location filename="../LinksDialog.cpp" line="150"/>
|
||||
<source>0 Okay</source>
|
||||
<translation>0 Està bé</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.ui" line="419"/>
|
||||
<location filename="../LinksDialog.cpp" line="153"/>
|
||||
<source>-1 Sux</source>
|
||||
<translation>-1 És dolent</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.ui" line="428"/>
|
||||
<location filename="../LinksDialog.cpp" line="156"/>
|
||||
<source>-2 Bad Link</source>
|
||||
<translation>-2 Enllaç dolent</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.ui" line="444"/>
|
||||
<source>Url:</source>
|
||||
<translation>URL:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.ui" line="531"/>
|
||||
<source>Links Cloud</source>
|
||||
<translation>Núvol d'enllaços</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.ui" line="551"/>
|
||||
<source>Add new link</source>
|
||||
<translation>Afegir nou enllaç</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.cpp" line="137"/>
|
||||
<source>Share Link Anonymously</source>
|
||||
<translation>Compartir enllaç anònimament</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.cpp" line="141"/>
|
||||
<source>Vote on Link</source>
|
||||
<translation>Votar un enllaç</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.cpp" line="160"/>
|
||||
<source>Download</source>
|
||||
<translation>Descarregar</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.cpp" line="707"/>
|
||||
<location filename="../LinksDialog.cpp" line="735"/>
|
||||
<location filename="../LinksDialog.cpp" line="743"/>
|
||||
<source>Add Link Failure</source>
|
||||
<translation>Afegir enllaç que falla</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.cpp" line="707"/>
|
||||
<source>Missing Link and/or Title</source>
|
||||
<translation>Enllaç i/o títol perdut</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.cpp" line="735"/>
|
||||
<source>Missing Link Data</source>
|
||||
<translation>Dades d'enllaç perdudes</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.cpp" line="743"/>
|
||||
<source>Missing Comment</source>
|
||||
<translation>Comentari perdut</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.cpp" line="758"/>
|
||||
<source>Link Title Not Changed</source>
|
||||
<translation>Títol d'enllaç no canviat</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.cpp" line="758"/>
|
||||
<source>Do you want to continue?</source>
|
||||
<translation>Vols continuar?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.cpp" line="813"/>
|
||||
<source>Expand</source>
|
||||
<translation>Ampliar</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.cpp" line="820"/>
|
||||
<source>Hide</source>
|
||||
<translation>Amagar</translation>
|
||||
</message>
|
||||
</context>
|
||||
</TS>
|
@ -1,329 +0,0 @@
|
||||
<?xml version="1.0" ?><!DOCTYPE TS><TS language="cs" version="2.0">
|
||||
<context>
|
||||
<name>AddLinksDialog</name>
|
||||
<message>
|
||||
<location filename="../AddLinksDialog.ui" line="14"/>
|
||||
<location filename="../AddLinksDialog.ui" line="56"/>
|
||||
<source>Add Link</source>
|
||||
<translation>Přidat odkaz</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../AddLinksDialog.ui" line="49"/>
|
||||
<source>Cancel</source>
|
||||
<translation>Zrušit</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../AddLinksDialog.ui" line="82"/>
|
||||
<source>Add a new Link</source>
|
||||
<translation>Přidat nový odkaz</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../AddLinksDialog.ui" line="95"/>
|
||||
<source>Title:</source>
|
||||
<translation>Titulek</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../AddLinksDialog.ui" line="102"/>
|
||||
<source>Url:</source>
|
||||
<translation>Url:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../AddLinksDialog.ui" line="139"/>
|
||||
<source>Add Anonymous Link</source>
|
||||
<translation>Přidat anonymní odkaz</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../AddLinksDialog.ui" line="147"/>
|
||||
<source>+2 Great!</source>
|
||||
<translation>+2 Výborný</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../AddLinksDialog.ui" line="156"/>
|
||||
<source>+1 Good</source>
|
||||
<translation>+1 Dobrý</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../AddLinksDialog.ui" line="165"/>
|
||||
<source>0 Okay</source>
|
||||
<translation>0 OK</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../AddLinksDialog.ui" line="174"/>
|
||||
<source>-1 Sux</source>
|
||||
<translation>-1 Špatný</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../AddLinksDialog.ui" line="183"/>
|
||||
<source>-2 Bad Link</source>
|
||||
<translation>-2 Špatný odkaz</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../AddLinksDialog.cpp" line="44"/>
|
||||
<source>Add Link to Cloud</source>
|
||||
<translation>Přidat odkaz do Cloudu</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../AddLinksDialog.cpp" line="61"/>
|
||||
<source>New Link</source>
|
||||
<translation>Nový odkaz</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../AddLinksDialog.cpp" line="89"/>
|
||||
<source>Add Link Failure</source>
|
||||
<translation>Přidání odkazu selhalo</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../AddLinksDialog.cpp" line="89"/>
|
||||
<source>Missing Link and/or Title</source>
|
||||
<translation>Chybí odkaz nebo titulek</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>LinksCloudPlugin</name>
|
||||
<message>
|
||||
<location filename="../LinksCloudPlugin.cpp" line="93"/>
|
||||
<source>This plugin provides a set of cached links, and a voting system to promote them.</source>
|
||||
<translation>Tento zásuvný modul poskytuje sadu mezipaměti odkazů, a hlasovací systém na jejich podporu</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksCloudPlugin.cpp" line="98"/>
|
||||
<source>LinksCloud</source>
|
||||
<translation>LinksCloud</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>LinksDialog</name>
|
||||
<message>
|
||||
<location filename="../LinksDialog.ui" line="45"/>
|
||||
<source>Title / Comment</source>
|
||||
<translation>Titulek / Komentáře</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.ui" line="50"/>
|
||||
<source>Score</source>
|
||||
<translation>Skóre</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.ui" line="55"/>
|
||||
<source>Peer / Link</source>
|
||||
<translation>Peer / Odkaz</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.ui" line="93"/>
|
||||
<source>Sort by</source>
|
||||
<translation>Seřadit podle</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.ui" line="101"/>
|
||||
<source>Combo</source>
|
||||
<translation>Dvojité</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.ui" line="106"/>
|
||||
<source>Time</source>
|
||||
<translation>Čas</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.ui" line="115"/>
|
||||
<source>Ranking</source>
|
||||
<translation>Žebříček</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.ui" line="146"/>
|
||||
<source>In last</source>
|
||||
<translation>Jako poslední</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.ui" line="154"/>
|
||||
<source>Month</source>
|
||||
<translation>Měsíc</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.ui" line="163"/>
|
||||
<source>Week</source>
|
||||
<translation>Týden</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.ui" line="172"/>
|
||||
<source>Day</source>
|
||||
<translation>Den</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.ui" line="203"/>
|
||||
<source>From</source>
|
||||
<translation>Od</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.ui" line="211"/>
|
||||
<source>All Peers</source>
|
||||
<translation>Všechny peery</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.ui" line="220"/>
|
||||
<source>Own Links</source>
|
||||
<translation>Naše odkazy</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.ui" line="251"/>
|
||||
<source>Show</source>
|
||||
<translation>Zobrazit</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.ui" line="259"/>
|
||||
<source>Top 100</source>
|
||||
<translation>Top 100</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.ui" line="268"/>
|
||||
<source>101-200</source>
|
||||
<translation>101-200</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.ui" line="273"/>
|
||||
<source>201-300</source>
|
||||
<translation>201-300</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.ui" line="278"/>
|
||||
<source>301-400</source>
|
||||
<translation>301-400</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.ui" line="283"/>
|
||||
<source>401-500</source>
|
||||
<translation>401-500</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.ui" line="288"/>
|
||||
<source>Bottom 100</source>
|
||||
<translation>Spodní 100</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.ui" line="318"/>
|
||||
<source>Link:</source>
|
||||
<translation>Odkaz:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.ui" line="350"/>
|
||||
<source>Add Anonymous Link</source>
|
||||
<translation>Přidat anonymní odkaz</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.ui" line="357"/>
|
||||
<source>Add Link/Comment</source>
|
||||
<translation>Přidat odkaz / komentář</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.ui" line="368"/>
|
||||
<source>Title:</source>
|
||||
<translation>Titulek:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.ui" line="384"/>
|
||||
<source>Score:</source>
|
||||
<translation>Skóre:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.ui" line="392"/>
|
||||
<location filename="../LinksDialog.cpp" line="144"/>
|
||||
<source>+2 Great!</source>
|
||||
<translation>+2 Výborný</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.ui" line="401"/>
|
||||
<location filename="../LinksDialog.cpp" line="147"/>
|
||||
<source>+1 Good</source>
|
||||
<translation>+1 Dobrý</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.ui" line="410"/>
|
||||
<location filename="../LinksDialog.cpp" line="150"/>
|
||||
<source>0 Okay</source>
|
||||
<translation>0 OK</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.ui" line="419"/>
|
||||
<location filename="../LinksDialog.cpp" line="153"/>
|
||||
<source>-1 Sux</source>
|
||||
<translation>-1 Špatný</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.ui" line="428"/>
|
||||
<location filename="../LinksDialog.cpp" line="156"/>
|
||||
<source>-2 Bad Link</source>
|
||||
<translation>-2 Špatný odkaz</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.ui" line="444"/>
|
||||
<source>Url:</source>
|
||||
<translation>Url:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.ui" line="531"/>
|
||||
<source>Links Cloud</source>
|
||||
<translation>Odkazový Cloud</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.ui" line="551"/>
|
||||
<source>Add new link</source>
|
||||
<translation>Přidat nový odkaz</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.cpp" line="137"/>
|
||||
<source>Share Link Anonymously</source>
|
||||
<translation>Sdílet odkaz anonymně</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.cpp" line="141"/>
|
||||
<source>Vote on Link</source>
|
||||
<translation>Volte na odkaze</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.cpp" line="160"/>
|
||||
<source>Download</source>
|
||||
<translation>Stáhnout</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.cpp" line="707"/>
|
||||
<location filename="../LinksDialog.cpp" line="735"/>
|
||||
<location filename="../LinksDialog.cpp" line="743"/>
|
||||
<source>Add Link Failure</source>
|
||||
<translation>Přidání odkazu selhalo</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.cpp" line="707"/>
|
||||
<source>Missing Link and/or Title</source>
|
||||
<translation>Chybí odkaz nebo titulek</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.cpp" line="735"/>
|
||||
<source>Missing Link Data</source>
|
||||
<translation>Chybějí odkazová data</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.cpp" line="743"/>
|
||||
<source>Missing Comment</source>
|
||||
<translation>Chybějící komentář</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.cpp" line="758"/>
|
||||
<source>Link Title Not Changed</source>
|
||||
<translation>Nebyl zadán titulek odkazu</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.cpp" line="758"/>
|
||||
<source>Do you want to continue?</source>
|
||||
<translation>Chcete pokračovat?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.cpp" line="813"/>
|
||||
<source>Expand</source>
|
||||
<translation>Rozbalit</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.cpp" line="820"/>
|
||||
<source>Hide</source>
|
||||
<translation>Skrýt</translation>
|
||||
</message>
|
||||
</context>
|
||||
</TS>
|
@ -1,329 +0,0 @@
|
||||
<?xml version="1.0" ?><!DOCTYPE TS><TS language="da" version="2.0">
|
||||
<context>
|
||||
<name>AddLinksDialog</name>
|
||||
<message>
|
||||
<location filename="../AddLinksDialog.ui" line="14"/>
|
||||
<location filename="../AddLinksDialog.ui" line="56"/>
|
||||
<source>Add Link</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../AddLinksDialog.ui" line="49"/>
|
||||
<source>Cancel</source>
|
||||
<translation>Annuller</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../AddLinksDialog.ui" line="82"/>
|
||||
<source>Add a new Link</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../AddLinksDialog.ui" line="95"/>
|
||||
<source>Title:</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../AddLinksDialog.ui" line="102"/>
|
||||
<source>Url:</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../AddLinksDialog.ui" line="139"/>
|
||||
<source>Add Anonymous Link</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../AddLinksDialog.ui" line="147"/>
|
||||
<source>+2 Great!</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../AddLinksDialog.ui" line="156"/>
|
||||
<source>+1 Good</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../AddLinksDialog.ui" line="165"/>
|
||||
<source>0 Okay</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../AddLinksDialog.ui" line="174"/>
|
||||
<source>-1 Sux</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../AddLinksDialog.ui" line="183"/>
|
||||
<source>-2 Bad Link</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../AddLinksDialog.cpp" line="44"/>
|
||||
<source>Add Link to Cloud</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../AddLinksDialog.cpp" line="61"/>
|
||||
<source>New Link</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../AddLinksDialog.cpp" line="89"/>
|
||||
<source>Add Link Failure</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../AddLinksDialog.cpp" line="89"/>
|
||||
<source>Missing Link and/or Title</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>LinksCloudPlugin</name>
|
||||
<message>
|
||||
<location filename="../LinksCloudPlugin.cpp" line="93"/>
|
||||
<source>This plugin provides a set of cached links, and a voting system to promote them.</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksCloudPlugin.cpp" line="98"/>
|
||||
<source>LinksCloud</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>LinksDialog</name>
|
||||
<message>
|
||||
<location filename="../LinksDialog.ui" line="45"/>
|
||||
<source>Title / Comment</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.ui" line="50"/>
|
||||
<source>Score</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.ui" line="55"/>
|
||||
<source>Peer / Link</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.ui" line="93"/>
|
||||
<source>Sort by</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.ui" line="101"/>
|
||||
<source>Combo</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.ui" line="106"/>
|
||||
<source>Time</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.ui" line="115"/>
|
||||
<source>Ranking</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.ui" line="146"/>
|
||||
<source>In last</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.ui" line="154"/>
|
||||
<source>Month</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.ui" line="163"/>
|
||||
<source>Week</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.ui" line="172"/>
|
||||
<source>Day</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.ui" line="203"/>
|
||||
<source>From</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.ui" line="211"/>
|
||||
<source>All Peers</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.ui" line="220"/>
|
||||
<source>Own Links</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.ui" line="251"/>
|
||||
<source>Show</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.ui" line="259"/>
|
||||
<source>Top 100</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.ui" line="268"/>
|
||||
<source>101-200</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.ui" line="273"/>
|
||||
<source>201-300</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.ui" line="278"/>
|
||||
<source>301-400</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.ui" line="283"/>
|
||||
<source>401-500</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.ui" line="288"/>
|
||||
<source>Bottom 100</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.ui" line="318"/>
|
||||
<source>Link:</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.ui" line="350"/>
|
||||
<source>Add Anonymous Link</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.ui" line="357"/>
|
||||
<source>Add Link/Comment</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.ui" line="368"/>
|
||||
<source>Title:</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.ui" line="384"/>
|
||||
<source>Score:</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.ui" line="392"/>
|
||||
<location filename="../LinksDialog.cpp" line="144"/>
|
||||
<source>+2 Great!</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.ui" line="401"/>
|
||||
<location filename="../LinksDialog.cpp" line="147"/>
|
||||
<source>+1 Good</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.ui" line="410"/>
|
||||
<location filename="../LinksDialog.cpp" line="150"/>
|
||||
<source>0 Okay</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.ui" line="419"/>
|
||||
<location filename="../LinksDialog.cpp" line="153"/>
|
||||
<source>-1 Sux</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.ui" line="428"/>
|
||||
<location filename="../LinksDialog.cpp" line="156"/>
|
||||
<source>-2 Bad Link</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.ui" line="444"/>
|
||||
<source>Url:</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.ui" line="531"/>
|
||||
<source>Links Cloud</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.ui" line="551"/>
|
||||
<source>Add new link</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.cpp" line="137"/>
|
||||
<source>Share Link Anonymously</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.cpp" line="141"/>
|
||||
<source>Vote on Link</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.cpp" line="160"/>
|
||||
<source>Download</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.cpp" line="707"/>
|
||||
<location filename="../LinksDialog.cpp" line="735"/>
|
||||
<location filename="../LinksDialog.cpp" line="743"/>
|
||||
<source>Add Link Failure</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.cpp" line="707"/>
|
||||
<source>Missing Link and/or Title</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.cpp" line="735"/>
|
||||
<source>Missing Link Data</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.cpp" line="743"/>
|
||||
<source>Missing Comment</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.cpp" line="758"/>
|
||||
<source>Link Title Not Changed</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.cpp" line="758"/>
|
||||
<source>Do you want to continue?</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.cpp" line="813"/>
|
||||
<source>Expand</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.cpp" line="820"/>
|
||||
<source>Hide</source>
|
||||
<translation type="unfinished"/>
|
||||
</message>
|
||||
</context>
|
||||
</TS>
|
@ -1,329 +0,0 @@
|
||||
<?xml version="1.0" ?><!DOCTYPE TS><TS language="de" version="2.0">
|
||||
<context>
|
||||
<name>AddLinksDialog</name>
|
||||
<message>
|
||||
<location filename="../AddLinksDialog.ui" line="14"/>
|
||||
<location filename="../AddLinksDialog.ui" line="56"/>
|
||||
<source>Add Link</source>
|
||||
<translation>Link hinzufügen</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../AddLinksDialog.ui" line="49"/>
|
||||
<source>Cancel</source>
|
||||
<translation>Abbrechen</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../AddLinksDialog.ui" line="82"/>
|
||||
<source>Add a new Link</source>
|
||||
<translation>Neuen Link hinzufügen</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../AddLinksDialog.ui" line="95"/>
|
||||
<source>Title:</source>
|
||||
<translation>Titel:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../AddLinksDialog.ui" line="102"/>
|
||||
<source>Url:</source>
|
||||
<translation>Url:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../AddLinksDialog.ui" line="139"/>
|
||||
<source>Add Anonymous Link</source>
|
||||
<translation>Anonym hinzufügen</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../AddLinksDialog.ui" line="147"/>
|
||||
<source>+2 Great!</source>
|
||||
<translation>+2 Großartig!</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../AddLinksDialog.ui" line="156"/>
|
||||
<source>+1 Good</source>
|
||||
<translation>+1 Gut</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../AddLinksDialog.ui" line="165"/>
|
||||
<source>0 Okay</source>
|
||||
<translation>0 In Ordnung</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../AddLinksDialog.ui" line="174"/>
|
||||
<source>-1 Sux</source>
|
||||
<translation>-1 Nervt</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../AddLinksDialog.ui" line="183"/>
|
||||
<source>-2 Bad Link</source>
|
||||
<translation>-2 Schlechter Link</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../AddLinksDialog.cpp" line="44"/>
|
||||
<source>Add Link to Cloud</source>
|
||||
<translation>Link zur Wolke hinzufügen</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../AddLinksDialog.cpp" line="61"/>
|
||||
<source>New Link</source>
|
||||
<translation>Neuer Link</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../AddLinksDialog.cpp" line="89"/>
|
||||
<source>Add Link Failure</source>
|
||||
<translation>Link hinzufügen fehlgeschlagen</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../AddLinksDialog.cpp" line="89"/>
|
||||
<source>Missing Link and/or Title</source>
|
||||
<translation>Titel und/oder Url fehlt</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>LinksCloudPlugin</name>
|
||||
<message>
|
||||
<location filename="../LinksCloudPlugin.cpp" line="93"/>
|
||||
<source>This plugin provides a set of cached links, and a voting system to promote them.</source>
|
||||
<translation>Dieses Plug-in stellt Links und ein Wahlsystem zur Verfügung, um sie zu verbreiten.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksCloudPlugin.cpp" line="98"/>
|
||||
<source>LinksCloud</source>
|
||||
<translation>Verknüpfungswolke</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>LinksDialog</name>
|
||||
<message>
|
||||
<location filename="../LinksDialog.ui" line="45"/>
|
||||
<source>Title / Comment</source>
|
||||
<translation>Titel / Kommentar</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.ui" line="50"/>
|
||||
<source>Score</source>
|
||||
<translation>Punkte</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.ui" line="55"/>
|
||||
<source>Peer / Link</source>
|
||||
<translation>Nachbar / Link</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.ui" line="93"/>
|
||||
<source>Sort by</source>
|
||||
<translation>Sortiere nach</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.ui" line="101"/>
|
||||
<source>Combo</source>
|
||||
<translation>Kombiniert</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.ui" line="106"/>
|
||||
<source>Time</source>
|
||||
<translation>Zeit</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.ui" line="115"/>
|
||||
<source>Ranking</source>
|
||||
<translation>Platzierung</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.ui" line="146"/>
|
||||
<source>In last</source>
|
||||
<translation>Im letzten</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.ui" line="154"/>
|
||||
<source>Month</source>
|
||||
<translation>Monat</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.ui" line="163"/>
|
||||
<source>Week</source>
|
||||
<translation>Woche</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.ui" line="172"/>
|
||||
<source>Day</source>
|
||||
<translation>Tag</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.ui" line="203"/>
|
||||
<source>From</source>
|
||||
<translation>Von</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.ui" line="211"/>
|
||||
<source>All Peers</source>
|
||||
<translation>Alle Nachbarn</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.ui" line="220"/>
|
||||
<source>Own Links</source>
|
||||
<translation>Eigene Links</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.ui" line="251"/>
|
||||
<source>Show</source>
|
||||
<translation>Zeige</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.ui" line="259"/>
|
||||
<source>Top 100</source>
|
||||
<translation>Top 100</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.ui" line="268"/>
|
||||
<source>101-200</source>
|
||||
<translation>101-200</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.ui" line="273"/>
|
||||
<source>201-300</source>
|
||||
<translation>201-300</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.ui" line="278"/>
|
||||
<source>301-400</source>
|
||||
<translation>301-400</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.ui" line="283"/>
|
||||
<source>401-500</source>
|
||||
<translation>401-500</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.ui" line="288"/>
|
||||
<source>Bottom 100</source>
|
||||
<translation>Letzten 100</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.ui" line="318"/>
|
||||
<source>Link:</source>
|
||||
<translation>Link:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.ui" line="350"/>
|
||||
<source>Add Anonymous Link</source>
|
||||
<translation>Anonym hinzufügen</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.ui" line="357"/>
|
||||
<source>Add Link/Comment</source>
|
||||
<translation>Link/Kommentar hinzufügen</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.ui" line="368"/>
|
||||
<source>Title:</source>
|
||||
<translation>Titel:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.ui" line="384"/>
|
||||
<source>Score:</source>
|
||||
<translation>Punkte:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.ui" line="392"/>
|
||||
<location filename="../LinksDialog.cpp" line="145"/>
|
||||
<source>+2 Great!</source>
|
||||
<translation>+2 Großartig!</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.ui" line="401"/>
|
||||
<location filename="../LinksDialog.cpp" line="148"/>
|
||||
<source>+1 Good</source>
|
||||
<translation>+1 Gut</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.ui" line="410"/>
|
||||
<location filename="../LinksDialog.cpp" line="151"/>
|
||||
<source>0 Okay</source>
|
||||
<translation>0 In Ordnung</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.ui" line="419"/>
|
||||
<location filename="../LinksDialog.cpp" line="154"/>
|
||||
<source>-1 Sux</source>
|
||||
<translation>-1 Nervt</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.ui" line="428"/>
|
||||
<location filename="../LinksDialog.cpp" line="157"/>
|
||||
<source>-2 Bad Link</source>
|
||||
<translation>-2 Schlechter Link</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.ui" line="444"/>
|
||||
<source>Url:</source>
|
||||
<translation>Url:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.ui" line="531"/>
|
||||
<source>Links Cloud</source>
|
||||
<translation>Verknüpfungswolke</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.ui" line="551"/>
|
||||
<source>Add new link</source>
|
||||
<translation>Neuen Link hinzufügen</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.cpp" line="138"/>
|
||||
<source>Share Link Anonymously</source>
|
||||
<translation>Link anonym verteilen</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.cpp" line="142"/>
|
||||
<source>Vote on Link</source>
|
||||
<translation>Stimme für Link</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.cpp" line="161"/>
|
||||
<source>Download</source>
|
||||
<translation>Herunterladen</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.cpp" line="708"/>
|
||||
<location filename="../LinksDialog.cpp" line="736"/>
|
||||
<location filename="../LinksDialog.cpp" line="744"/>
|
||||
<source>Add Link Failure</source>
|
||||
<translation>Link hinzufügen fehlgeschlagen</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.cpp" line="708"/>
|
||||
<source>Missing Link and/or Title</source>
|
||||
<translation>Fehlender Link und/oder Titel</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.cpp" line="736"/>
|
||||
<source>Missing Link Data</source>
|
||||
<translation>Fehlende Linkdaten</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.cpp" line="744"/>
|
||||
<source>Missing Comment</source>
|
||||
<translation>Fehlender Kommentar</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.cpp" line="759"/>
|
||||
<source>Link Title Not Changed</source>
|
||||
<translation>Linktitel nicht geändert</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.cpp" line="759"/>
|
||||
<source>Do you want to continue?</source>
|
||||
<translation>Willst du fortfahren?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.cpp" line="814"/>
|
||||
<source>Expand</source>
|
||||
<translation>Erweitern</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.cpp" line="821"/>
|
||||
<source>Hide</source>
|
||||
<translation>Verbergen</translation>
|
||||
</message>
|
||||
</context>
|
||||
</TS>
|
@ -1,329 +0,0 @@
|
||||
<?xml version="1.0" ?><!DOCTYPE TS><TS language="el" version="2.0">
|
||||
<context>
|
||||
<name>AddLinksDialog</name>
|
||||
<message>
|
||||
<location filename="../AddLinksDialog.ui" line="14"/>
|
||||
<location filename="../AddLinksDialog.ui" line="56"/>
|
||||
<source>Add Link</source>
|
||||
<translation>Προσθέστε σύνδεσμο</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../AddLinksDialog.ui" line="49"/>
|
||||
<source>Cancel</source>
|
||||
<translation>Διακοπη</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../AddLinksDialog.ui" line="82"/>
|
||||
<source>Add a new Link</source>
|
||||
<translation>Προσθέσετε ένα νέο σύνδεσμο</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../AddLinksDialog.ui" line="95"/>
|
||||
<source>Title:</source>
|
||||
<translation>Τίτλος:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../AddLinksDialog.ui" line="102"/>
|
||||
<source>Url:</source>
|
||||
<translation>URL:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../AddLinksDialog.ui" line="139"/>
|
||||
<source>Add Anonymous Link</source>
|
||||
<translation>Προσθέστε ανώνυμη σύνδεση</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../AddLinksDialog.ui" line="147"/>
|
||||
<source>+2 Great!</source>
|
||||
<translation>+2 Μεγάλη!</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../AddLinksDialog.ui" line="156"/>
|
||||
<source>+1 Good</source>
|
||||
<translation>+1 Καλή</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../AddLinksDialog.ui" line="165"/>
|
||||
<source>0 Okay</source>
|
||||
<translation>Εντάξει 0</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../AddLinksDialog.ui" line="174"/>
|
||||
<source>-1 Sux</source>
|
||||
<translation>-1 Sux</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../AddLinksDialog.ui" line="183"/>
|
||||
<source>-2 Bad Link</source>
|
||||
<translation>-2 Κακή σύνδεση</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../AddLinksDialog.cpp" line="44"/>
|
||||
<source>Add Link to Cloud</source>
|
||||
<translation>Προσθήκη συνδέσεων σε σύννεφο</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../AddLinksDialog.cpp" line="61"/>
|
||||
<source>New Link</source>
|
||||
<translation>Νέα σύνδεση</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../AddLinksDialog.cpp" line="89"/>
|
||||
<source>Add Link Failure</source>
|
||||
<translation>Προσθέστε αποτυχία σύνδεσης</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../AddLinksDialog.cpp" line="89"/>
|
||||
<source>Missing Link and/or Title</source>
|
||||
<translation>Συνδετικός κρίκος ή/και τίτλο</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>LinksCloudPlugin</name>
|
||||
<message>
|
||||
<location filename="../LinksCloudPlugin.cpp" line="93"/>
|
||||
<source>This plugin provides a set of cached links, and a voting system to promote them.</source>
|
||||
<translation>Αυτό το plugin παρέχει ένα σύνολο των προσωρινά αποθηκευμένων συνδέσεων, καθώς και ένα σύστημα ψηφοφορίας για την προώθηση τους.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksCloudPlugin.cpp" line="98"/>
|
||||
<source>LinksCloud</source>
|
||||
<translation>LinksCloud</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>LinksDialog</name>
|
||||
<message>
|
||||
<location filename="../LinksDialog.ui" line="45"/>
|
||||
<source>Title / Comment</source>
|
||||
<translation>Τίτλος / σχόλιο</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.ui" line="50"/>
|
||||
<source>Score</source>
|
||||
<translation>Σκορ</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.ui" line="55"/>
|
||||
<source>Peer / Link</source>
|
||||
<translation>Peer / Link</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.ui" line="93"/>
|
||||
<source>Sort by</source>
|
||||
<translation>Ταξινόμηση κατά</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.ui" line="101"/>
|
||||
<source>Combo</source>
|
||||
<translation>Combo</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.ui" line="106"/>
|
||||
<source>Time</source>
|
||||
<translation>Χρόνος</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.ui" line="115"/>
|
||||
<source>Ranking</source>
|
||||
<translation>Κατάταξη</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.ui" line="146"/>
|
||||
<source>In last</source>
|
||||
<translation>Στο τελευταίο</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.ui" line="154"/>
|
||||
<source>Month</source>
|
||||
<translation>Μήνα</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.ui" line="163"/>
|
||||
<source>Week</source>
|
||||
<translation>Εβδομάδα</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.ui" line="172"/>
|
||||
<source>Day</source>
|
||||
<translation>Ημέρα</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.ui" line="203"/>
|
||||
<source>From</source>
|
||||
<translation>Απο</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.ui" line="211"/>
|
||||
<source>All Peers</source>
|
||||
<translation>Όλοι οι φορείς</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.ui" line="220"/>
|
||||
<source>Own Links</source>
|
||||
<translation>Δικες σας συνδέσεις</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.ui" line="251"/>
|
||||
<source>Show</source>
|
||||
<translation>Εμφανιση</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.ui" line="259"/>
|
||||
<source>Top 100</source>
|
||||
<translation>Top 100</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.ui" line="268"/>
|
||||
<source>101-200</source>
|
||||
<translation>101-200</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.ui" line="273"/>
|
||||
<source>201-300</source>
|
||||
<translation>201-300</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.ui" line="278"/>
|
||||
<source>301-400</source>
|
||||
<translation>301-400</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.ui" line="283"/>
|
||||
<source>401-500</source>
|
||||
<translation>401-500</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.ui" line="288"/>
|
||||
<source>Bottom 100</source>
|
||||
<translation>Κάτω 100</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.ui" line="318"/>
|
||||
<source>Link:</source>
|
||||
<translation>Σύνδεση:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.ui" line="350"/>
|
||||
<source>Add Anonymous Link</source>
|
||||
<translation>Προσθέστε ανώνυμη σύνδεση</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.ui" line="357"/>
|
||||
<source>Add Link/Comment</source>
|
||||
<translation>Προσθέστε σύνδεσμο/σχόλιο</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.ui" line="368"/>
|
||||
<source>Title:</source>
|
||||
<translation>Τίτλος:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.ui" line="384"/>
|
||||
<source>Score:</source>
|
||||
<translation>Βαθμολογία:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.ui" line="392"/>
|
||||
<location filename="../LinksDialog.cpp" line="144"/>
|
||||
<source>+2 Great!</source>
|
||||
<translation>+2 Μεγάλη!</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.ui" line="401"/>
|
||||
<location filename="../LinksDialog.cpp" line="147"/>
|
||||
<source>+1 Good</source>
|
||||
<translation>+1 Καλή</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.ui" line="410"/>
|
||||
<location filename="../LinksDialog.cpp" line="150"/>
|
||||
<source>0 Okay</source>
|
||||
<translation>Εντάξει 0</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.ui" line="419"/>
|
||||
<location filename="../LinksDialog.cpp" line="153"/>
|
||||
<source>-1 Sux</source>
|
||||
<translation>-1 Sux</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.ui" line="428"/>
|
||||
<location filename="../LinksDialog.cpp" line="156"/>
|
||||
<source>-2 Bad Link</source>
|
||||
<translation>-2 Κακή σύνδεση</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.ui" line="444"/>
|
||||
<source>Url:</source>
|
||||
<translation>URL:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.ui" line="531"/>
|
||||
<source>Links Cloud</source>
|
||||
<translation>Συνδέσεις σύννεφο</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.ui" line="551"/>
|
||||
<source>Add new link</source>
|
||||
<translation>Προσθέστε νέα σύνδεση</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.cpp" line="137"/>
|
||||
<source>Share Link Anonymously</source>
|
||||
<translation>Μοιράσμα σύνδεσης ανώνυμα</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.cpp" line="141"/>
|
||||
<source>Vote on Link</source>
|
||||
<translation>Ψηφίσμα σύνδεσης</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.cpp" line="160"/>
|
||||
<source>Download</source>
|
||||
<translation>Λυψη</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.cpp" line="707"/>
|
||||
<location filename="../LinksDialog.cpp" line="735"/>
|
||||
<location filename="../LinksDialog.cpp" line="743"/>
|
||||
<source>Add Link Failure</source>
|
||||
<translation>Προσθέστε αποτυχία σύνδεσης</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.cpp" line="707"/>
|
||||
<source>Missing Link and/or Title</source>
|
||||
<translation>Συνδετικός κρίκος ή/και τίτλο</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.cpp" line="735"/>
|
||||
<source>Missing Link Data</source>
|
||||
<translation>Ελλείπουσα σύνδεση δεδομένων</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.cpp" line="743"/>
|
||||
<source>Missing Comment</source>
|
||||
<translation>Λείπει το σχόλιο</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.cpp" line="758"/>
|
||||
<source>Link Title Not Changed</source>
|
||||
<translation>Τίτλος συνδέσμου, δεν αλλάζει</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.cpp" line="758"/>
|
||||
<source>Do you want to continue?</source>
|
||||
<translation>Θέλετε να συνεχίσετε;</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.cpp" line="813"/>
|
||||
<source>Expand</source>
|
||||
<translation>Επεκταση</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.cpp" line="820"/>
|
||||
<source>Hide</source>
|
||||
<translation>Αποκρυψη</translation>
|
||||
</message>
|
||||
</context>
|
||||
</TS>
|
@ -1,331 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!DOCTYPE TS>
|
||||
<TS version="2.0" language="en_US">
|
||||
<context>
|
||||
<name>AddLinksDialog</name>
|
||||
<message>
|
||||
<location filename="../AddLinksDialog.ui" line="14"/>
|
||||
<location filename="../AddLinksDialog.ui" line="56"/>
|
||||
<source>Add Link</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../AddLinksDialog.ui" line="49"/>
|
||||
<source>Cancel</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../AddLinksDialog.ui" line="82"/>
|
||||
<source>Add a new Link</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../AddLinksDialog.ui" line="95"/>
|
||||
<source>Title:</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../AddLinksDialog.ui" line="102"/>
|
||||
<source>Url:</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../AddLinksDialog.ui" line="139"/>
|
||||
<source>Add Anonymous Link</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../AddLinksDialog.ui" line="147"/>
|
||||
<source>+2 Great!</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../AddLinksDialog.ui" line="156"/>
|
||||
<source>+1 Good</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../AddLinksDialog.ui" line="165"/>
|
||||
<source>0 Okay</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../AddLinksDialog.ui" line="174"/>
|
||||
<source>-1 Sux</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../AddLinksDialog.ui" line="183"/>
|
||||
<source>-2 Bad Link</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../AddLinksDialog.cpp" line="44"/>
|
||||
<source>Add Link to Cloud</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../AddLinksDialog.cpp" line="61"/>
|
||||
<source>New Link</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../AddLinksDialog.cpp" line="89"/>
|
||||
<source>Add Link Failure</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../AddLinksDialog.cpp" line="89"/>
|
||||
<source>Missing Link and/or Title</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>LinksCloudPlugin</name>
|
||||
<message>
|
||||
<location filename="../LinksCloudPlugin.cpp" line="93"/>
|
||||
<source>This plugin provides a set of cached links, and a voting system to promote them.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksCloudPlugin.cpp" line="98"/>
|
||||
<source>LinksCloud</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>LinksDialog</name>
|
||||
<message>
|
||||
<location filename="../LinksDialog.ui" line="45"/>
|
||||
<source>Title / Comment</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.ui" line="50"/>
|
||||
<source>Score</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.ui" line="55"/>
|
||||
<source>Peer / Link</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.ui" line="93"/>
|
||||
<source>Sort by</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.ui" line="101"/>
|
||||
<source>Combo</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.ui" line="106"/>
|
||||
<source>Time</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.ui" line="115"/>
|
||||
<source>Ranking</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.ui" line="146"/>
|
||||
<source>In last</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.ui" line="154"/>
|
||||
<source>Month</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.ui" line="163"/>
|
||||
<source>Week</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.ui" line="172"/>
|
||||
<source>Day</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.ui" line="203"/>
|
||||
<source>From</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.ui" line="211"/>
|
||||
<source>All Peers</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.ui" line="220"/>
|
||||
<source>Own Links</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.ui" line="251"/>
|
||||
<source>Show</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.ui" line="259"/>
|
||||
<source>Top 100</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.ui" line="268"/>
|
||||
<source>101-200</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.ui" line="273"/>
|
||||
<source>201-300</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.ui" line="278"/>
|
||||
<source>301-400</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.ui" line="283"/>
|
||||
<source>401-500</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.ui" line="288"/>
|
||||
<source>Bottom 100</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.ui" line="318"/>
|
||||
<source>Link:</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.ui" line="350"/>
|
||||
<source>Add Anonymous Link</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.ui" line="357"/>
|
||||
<source>Add Link/Comment</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.ui" line="368"/>
|
||||
<source>Title:</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.ui" line="384"/>
|
||||
<source>Score:</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.ui" line="392"/>
|
||||
<location filename="../LinksDialog.cpp" line="145"/>
|
||||
<source>+2 Great!</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.ui" line="401"/>
|
||||
<location filename="../LinksDialog.cpp" line="148"/>
|
||||
<source>+1 Good</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.ui" line="410"/>
|
||||
<location filename="../LinksDialog.cpp" line="151"/>
|
||||
<source>0 Okay</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.ui" line="419"/>
|
||||
<location filename="../LinksDialog.cpp" line="154"/>
|
||||
<source>-1 Sux</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.ui" line="428"/>
|
||||
<location filename="../LinksDialog.cpp" line="157"/>
|
||||
<source>-2 Bad Link</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.ui" line="444"/>
|
||||
<source>Url:</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.ui" line="531"/>
|
||||
<source>Links Cloud</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.ui" line="551"/>
|
||||
<source>Add new link</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.cpp" line="138"/>
|
||||
<source>Share Link Anonymously</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.cpp" line="142"/>
|
||||
<source>Vote on Link</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.cpp" line="161"/>
|
||||
<source>Download</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.cpp" line="708"/>
|
||||
<location filename="../LinksDialog.cpp" line="736"/>
|
||||
<location filename="../LinksDialog.cpp" line="744"/>
|
||||
<source>Add Link Failure</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.cpp" line="708"/>
|
||||
<source>Missing Link and/or Title</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.cpp" line="736"/>
|
||||
<source>Missing Link Data</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.cpp" line="744"/>
|
||||
<source>Missing Comment</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.cpp" line="759"/>
|
||||
<source>Link Title Not Changed</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.cpp" line="759"/>
|
||||
<source>Do you want to continue?</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.cpp" line="814"/>
|
||||
<source>Expand</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.cpp" line="821"/>
|
||||
<source>Hide</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
</TS>
|
@ -1,329 +0,0 @@
|
||||
<?xml version="1.0" ?><!DOCTYPE TS><TS language="es" version="2.0">
|
||||
<context>
|
||||
<name>AddLinksDialog</name>
|
||||
<message>
|
||||
<location filename="../AddLinksDialog.ui" line="14"/>
|
||||
<location filename="../AddLinksDialog.ui" line="56"/>
|
||||
<source>Add Link</source>
|
||||
<translation>Añadir enlace</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../AddLinksDialog.ui" line="49"/>
|
||||
<source>Cancel</source>
|
||||
<translation>Cancelar</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../AddLinksDialog.ui" line="82"/>
|
||||
<source>Add a new Link</source>
|
||||
<translation>Añadir un nuevo enlace</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../AddLinksDialog.ui" line="95"/>
|
||||
<source>Title:</source>
|
||||
<translation>Título:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../AddLinksDialog.ui" line="102"/>
|
||||
<source>Url:</source>
|
||||
<translation>Url:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../AddLinksDialog.ui" line="139"/>
|
||||
<source>Add Anonymous Link</source>
|
||||
<translation>Añadir enlace anónimo</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../AddLinksDialog.ui" line="147"/>
|
||||
<source>+2 Great!</source>
|
||||
<translation>+2 ¡Excelente!</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../AddLinksDialog.ui" line="156"/>
|
||||
<source>+1 Good</source>
|
||||
<translation>+1 Muy bueno</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../AddLinksDialog.ui" line="165"/>
|
||||
<source>0 Okay</source>
|
||||
<translation>0 Bueno</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../AddLinksDialog.ui" line="174"/>
|
||||
<source>-1 Sux</source>
|
||||
<translation>-1 Pésimo</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../AddLinksDialog.ui" line="183"/>
|
||||
<source>-2 Bad Link</source>
|
||||
<translation>-2 Enlace malo</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../AddLinksDialog.cpp" line="44"/>
|
||||
<source>Add Link to Cloud</source>
|
||||
<translation>Añadir enlace a la nube</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../AddLinksDialog.cpp" line="61"/>
|
||||
<source>New Link</source>
|
||||
<translation>Nuevo enlace</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../AddLinksDialog.cpp" line="89"/>
|
||||
<source>Add Link Failure</source>
|
||||
<translation>Añadir enlace fallido</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../AddLinksDialog.cpp" line="89"/>
|
||||
<source>Missing Link and/or Title</source>
|
||||
<translation>Enlace y/o título perdido</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>LinksCloudPlugin</name>
|
||||
<message>
|
||||
<location filename="../LinksCloudPlugin.cpp" line="93"/>
|
||||
<source>This plugin provides a set of cached links, and a voting system to promote them.</source>
|
||||
<translation>Este plugin proporciona un conjunto de enlaces en caché, y un sistema de votación para promoverlos.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksCloudPlugin.cpp" line="98"/>
|
||||
<source>LinksCloud</source>
|
||||
<translation>Enlace en la nube</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>LinksDialog</name>
|
||||
<message>
|
||||
<location filename="../LinksDialog.ui" line="45"/>
|
||||
<source>Title / Comment</source>
|
||||
<translation>Título / Comentario</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.ui" line="50"/>
|
||||
<source>Score</source>
|
||||
<translation>Puntuación</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.ui" line="55"/>
|
||||
<source>Peer / Link</source>
|
||||
<translation>Pares / Enlace</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.ui" line="93"/>
|
||||
<source>Sort by</source>
|
||||
<translation>Ordenar por</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.ui" line="101"/>
|
||||
<source>Combo</source>
|
||||
<translation>Combinar</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.ui" line="106"/>
|
||||
<source>Time</source>
|
||||
<translation>Hora</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.ui" line="115"/>
|
||||
<source>Ranking</source>
|
||||
<translation>Clasificación</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.ui" line="146"/>
|
||||
<source>In last</source>
|
||||
<translation>En la última</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.ui" line="154"/>
|
||||
<source>Month</source>
|
||||
<translation>Mes</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.ui" line="163"/>
|
||||
<source>Week</source>
|
||||
<translation>Semana</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.ui" line="172"/>
|
||||
<source>Day</source>
|
||||
<translation>Día</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.ui" line="203"/>
|
||||
<source>From</source>
|
||||
<translation>De</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.ui" line="211"/>
|
||||
<source>All Peers</source>
|
||||
<translation>Todos los pares</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.ui" line="220"/>
|
||||
<source>Own Links</source>
|
||||
<translation>Enlaces propios</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.ui" line="251"/>
|
||||
<source>Show</source>
|
||||
<translation>Mostrar</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.ui" line="259"/>
|
||||
<source>Top 100</source>
|
||||
<translation>Top 100</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.ui" line="268"/>
|
||||
<source>101-200</source>
|
||||
<translation>101-200</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.ui" line="273"/>
|
||||
<source>201-300</source>
|
||||
<translation>201-300</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.ui" line="278"/>
|
||||
<source>301-400</source>
|
||||
<translation>301-400</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.ui" line="283"/>
|
||||
<source>401-500</source>
|
||||
<translation>401-500</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.ui" line="288"/>
|
||||
<source>Bottom 100</source>
|
||||
<translation>Por debajo de 100</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.ui" line="318"/>
|
||||
<source>Link:</source>
|
||||
<translation>Enlace:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.ui" line="350"/>
|
||||
<source>Add Anonymous Link</source>
|
||||
<translation>Añadir enlace anónimo</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.ui" line="357"/>
|
||||
<source>Add Link/Comment</source>
|
||||
<translation>Añadir enlace/comentario</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.ui" line="368"/>
|
||||
<source>Title:</source>
|
||||
<translation>Título:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.ui" line="384"/>
|
||||
<source>Score:</source>
|
||||
<translation>Puntuación:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.ui" line="392"/>
|
||||
<location filename="../LinksDialog.cpp" line="144"/>
|
||||
<source>+2 Great!</source>
|
||||
<translation>+2 ¡Excelente!</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.ui" line="401"/>
|
||||
<location filename="../LinksDialog.cpp" line="147"/>
|
||||
<source>+1 Good</source>
|
||||
<translation>+1 Muy bueno</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.ui" line="410"/>
|
||||
<location filename="../LinksDialog.cpp" line="150"/>
|
||||
<source>0 Okay</source>
|
||||
<translation>0 Bueno</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.ui" line="419"/>
|
||||
<location filename="../LinksDialog.cpp" line="153"/>
|
||||
<source>-1 Sux</source>
|
||||
<translation>-1 Pésimo</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.ui" line="428"/>
|
||||
<location filename="../LinksDialog.cpp" line="156"/>
|
||||
<source>-2 Bad Link</source>
|
||||
<translation>-2 Enlace malo</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.ui" line="444"/>
|
||||
<source>Url:</source>
|
||||
<translation>Url:</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.ui" line="531"/>
|
||||
<source>Links Cloud</source>
|
||||
<translation>Enlaces en la nube</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.ui" line="551"/>
|
||||
<source>Add new link</source>
|
||||
<translation>Añadir nuevo enlace</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.cpp" line="137"/>
|
||||
<source>Share Link Anonymously</source>
|
||||
<translation>Compartir enlace anónimamente</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.cpp" line="141"/>
|
||||
<source>Vote on Link</source>
|
||||
<translation>Votar el enlace</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.cpp" line="160"/>
|
||||
<source>Download</source>
|
||||
<translation>Descargar</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.cpp" line="707"/>
|
||||
<location filename="../LinksDialog.cpp" line="735"/>
|
||||
<location filename="../LinksDialog.cpp" line="743"/>
|
||||
<source>Add Link Failure</source>
|
||||
<translation>Añadir enlace fallido</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.cpp" line="707"/>
|
||||
<source>Missing Link and/or Title</source>
|
||||
<translation>Enlace y/o título perdido</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.cpp" line="735"/>
|
||||
<source>Missing Link Data</source>
|
||||
<translation>Faltan los datos del enlace</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.cpp" line="743"/>
|
||||
<source>Missing Comment</source>
|
||||
<translation>Falta el comentario</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.cpp" line="758"/>
|
||||
<source>Link Title Not Changed</source>
|
||||
<translation>El título del enlace no ha cambiado</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.cpp" line="758"/>
|
||||
<source>Do you want to continue?</source>
|
||||
<translation>¿Desea continuar?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.cpp" line="813"/>
|
||||
<source>Expand</source>
|
||||
<translation>Expandir</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../LinksDialog.cpp" line="820"/>
|
||||
<source>Hide</source>
|
||||
<translation>Ocultar</translation>
|
||||
</message>
|
||||
</context>
|
||||
</TS>
|