From: Marcus Eggenberger Date: Tue, 24 Mar 2009 16:36:06 +0000 (+0100) Subject: Merge branch 'bufferviewoverlay' X-Git-Tag: 0.5-rc1~250 X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=commitdiff_plain;h=ab16c77fe03b73a863d9b52b11919bcbac903f58;hp=7de282e852c2b08c1cb166528a56eeef9d04e348 Merge branch 'bufferviewoverlay' Conflicts: src/client/client.cpp src/client/client.h --- diff --git a/CMakeLists.txt b/CMakeLists.txt index 00b4e661..6a2cf835 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -75,6 +75,15 @@ if(WIN32) set(EMBED_DATA ON) endif(WIN32) +# For static builds, arbitrary extra libs might need to be linked +# Define a comma-separated list here +# e.g. for pgsql, we need -DLINK_EXTRA=pq;crypt +set(LINK_EXTRA "" CACHE STRING "Semicolon-separated list of libraries to be linked") +if(LINK_EXTRA) + string(REPLACE "," ";" LINK_EXTRA ${LINK_EXTRA}) + link_libraries(${LINK_EXTRA}) +endif(LINK_EXTRA) + # Build Type # We need to make sure it's not empty # Supported: Release, RelWithDebugInfo, Debug, Debugfull @@ -253,8 +262,6 @@ if(WIN32) if(HAVE_SSL) link_libraries(${OPENSSL_LIBRARIES} libeay32MD) endif(HAVE_SSL) - - set(RC_WIN32 ../pics/win32.rc) # for app icons on windows endif(WIN32) if(STATIC) diff --git a/data/CMakeLists.txt b/data/CMakeLists.txt index 239e306f..7a1839f6 100644 --- a/data/CMakeLists.txt +++ b/data/CMakeLists.txt @@ -20,4 +20,9 @@ if(WANT_MONO OR WANT_QTCLIENT) else(EMBED_DATA) install(FILES networks.ini DESTINATION ${DATA_INSTALL_DIR}/quassel) endif(EMBED_DATA) + + if(NOT WIN32) + install(DIRECTORY scripts DESTINATION ${DATA_INSTALL_DIR}/quassel USE_SOURCE_PERMISSIONS) + endif(NOT WIN32) + endif(WANT_MONO OR WANT_QTCLIENT) diff --git a/data/scripts/inxi b/data/scripts/inxi new file mode 100755 index 00000000..30f9edda --- /dev/null +++ b/data/scripts/inxi @@ -0,0 +1,3447 @@ +#!/bin/bash +######################################################################## +#### Script Name: inxi +#### version: 1.0.8 +#### Date: 13 March 2009 +######################################################################## +#### SPECIAL THANKS +######################################################################## +#### Special thanks to all those in lsc for their tireless dedication +#### with helping test inxi modules +######################################################################## +#### ABOUT INXI +######################################################################## +#### inxi is a fork of infobash 3.02, the original bash sys info script by locsmif +#### As time permits functionality improvements and recoding will occur. +#### +#### inxi, the universal, portable, system info script for irc. +#### Tested with Irssi, Xchat, Konversation, BitchX, KSirc, ircII, +#### Gaim/Pidgin, Weechat, KVIrc and Kopete. +#### Original infobash author and copyright holder: +#### Copyright (C) 2005-2007 Michiel de Boer a.k.a. locsmif +#### inxi version: Copyright (C) 2008-9 Scott Rogers & Harald Hope +#### Further fixes (listed as known): Horst Tritremmel +#### Steven Barrett (aka: damentz) - usb audio patch; swap percent used patch +#### +#### Current script home page: http://techpatterns.com/forums/about1131.html +#### Script svn: http://code.google.com/p/inxi +#### +#### 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 3 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, see . +#### +#### If you don't understand what Free Software is, please read (or reread) +#### this page: http://www.gnu.org/philosophy/free-sw.html +######################################################################## +#### DEPENDENCIES +#### bash >=3.0(bash), df;readlink;stty;tr;uname;wc(coreutils), +#### gawk(gawk), grep(grep), hostname(hostname), lspci(pciutils), +#### ps;uptime(procps), glxinfo;xdpyinfo;xrandr(xbase-clients) +#### Also the proc filesystem should be present and mounted +#### +#### Apparently unpatched bash 3.0 has arrays broken; bug reports: +#### http://ftp.gnu.org/gnu/bash/bash-3.0-patches/bash30-008 +#### http://lists.gnu.org/archive/html/bug-bash/2004-08/msg00144.html +#### +#### Arrays work in bash 2.05b, but "egrep -m" does not +#### +#### RECOMMENDS (Needed to run certain features) +#### For local interfaces/IP test: ifconfig (in net-tools for Debian systems) +#### runlevel(sysvinit): to view current runlevel while not in X window system +#### Bash 3.1 for proper array use +######################################################################## +#### CONVENTIONS: +#### Indentation: TABS +#### Do not use `....`, those are totally non-reabable, use $(....) +#### Do not use one liner flow controls. The ONLY time you should use ; is in +#### this single case: if [[ condition ]];then (ie, never: [[ condition ]] && statement) +#### Note: [[ -n $something ]] - double brackets do not require quotes: "$something" for variables +#### Always use quotes, double or single, for all string values +#### +#### All new code/methods must be in a function. +#### For all boolean tests, use 'true' / 'false'. Do NOT use 0 or 1 unless +#### it's a function return. Avoid complicated tests in the if condition itself. +#### +#### For gawk: use always if ( num_of_cores > 1 ) { hanging { starter for all blocks +#### This lets us use one method for all gawk structures, including BEGIN/END, if, for, etc +#### +#### VARIABLE/FUNCTION NAMING: +#### All variables should explain what they are, except counters like i, j +#### All variables MUST be initialized / declared explicitly +####, globals UPPER CASE, at top of script, SOME_VARIABLE='' (words separated by _ ). +#### Locals always with: local some_variable= (lower case, words separated by _ ) +#### Locals that will be inherited by child functions: Some_Variable (so you know they are inherited) +#### and at the top of the function. +#### +#### Booleans should start with b_ or B_ and state clearly what is being tested +#### Arrays should start with a_ or A_ +#### All functions should follow standard naming, ie, verb adjective noun, get_cpu_data +#### +#### SPECIAL NOTES: +#### The color variable ${C2} must always be followed by a space unless you know what +#### character is going to be next for certain. Otherwise irc color codes can be accidentally +#### activated or altered. +#### +#### For native script konversation support (check distro for correct konvi scripts path): +#### ln -s /usr/share/apps/konversation/scripts/inxi +#### DCOP doesn't like \n, so avoid using it for most output unless required, as in error messages. +######################################################################## +#### Valuable Resources +#### awk arrays: http://www.math.utah.edu/docs/info/gawk_12.html +######################################################################## +#### TESTING FLAGS +#### inxi supports advanced testing triggers to do various things, using -! +#### -! 1 - triggers default B_TESTING_1='true' to trigger some test or other +#### -! 2 - triggers default B_TESTING_2='true' to trigger some test or other +#### -! 3 - triggers B_TESTING_1='true' and B_TESTING_2='true' +#### -! 10 - triggers an update from the primary dev download server instead of svn +#### -! 11 - triggers an update from svn branch one - if present, of course +#### -! 12 - triggers an update from svn branch two - if present, of course +#### -! 13 - triggers an update from svn branch three - if present, of course +#### -! 14 - triggers an update from svn branch four - if present, of course +#### -! - Triggers an update from whatever server you list. +######################################################################## +#### VARIABLES +######################################################################## + +## NOTE: we can use hwinfo if it's available in all systems, or most, to get +## a lot more data and verbosity levels going + +### Variable initializations: null values +CMDL_MAX='' +COLOR_SCHEME='' +COLOR_SCHEME_SET='' +IRC_CLIENT='' +IRC_CLIENT_VERSION='' + +### primary data array holders +A_AUDIO_DATA='' +A_CMDL='' +A_CPU_CORE_DATA='' +A_CPU_DATA='' +A_CPU_TYPE_PCNT_CCNT='' +A_DEBUG_BUFFER='' +A_GFX_CARD_DATA='' +A_GLX_DATA='' +A_HDD_DATA='' +A_INTERFACES_DATA='' +A_NETWORK_DATA='' +A_PARTITION_DATA='' +A_X_DATA='' + +### Boolean true/false globals +# flag to allow distro maintainers to turn off update features. If false, turns off +# -U and -! testing/advanced update options, as well as removing the -U help menu item +B_ALLOW_UPDATE='true' +# triggers full display of cpu flags +B_CPU_FLAGS_FULL='false' +# Debug flood override: make 'true' to allow long debug output +B_DEBUG_FLOOD='false' +# show extra output data +B_EXTRA_DATA='false' +B_SHOW_DISK='false' +# override certain errors due to currupted data +B_HANDLE_CORRUPT_DATA='false' +# Running in a shell? Defaults to false, and is determined later. +B_RUNNING_IN_SHELL='false' +# this sets the debug buffer +B_SCRIPT_UP='false' +# Show sound card data +B_SHOW_AUDIO='false' +B_SHOW_CPU='false' +# Show full hard disk output +B_SHOW_FULL_HDD='false' +B_SHOW_GRAPHICS='false' +# Set this to 'false' to avoid printing the hostname +B_SHOW_HOST='true' +B_SHOW_INFO='false' +B_SHOW_IP='false' +B_SHOW_LABELS='false' +B_SHOW_NETWORK='false' +# either -v > 3 or -P will show partitions +B_SHOW_PARTITIONS='false' +B_SHOW_PARTITIONS_FULL='false' +# triggers only short inxi output +B_SHOW_SHORT_OUTPUT='false' +B_SHOW_SYSTEM='false' +B_SHOW_UUIDS='false' +# triggers various debugging and new option testing +B_TESTING_1='false' +B_TESTING_2='false' +# Test for X running +B_X_RUNNING='false' + +### Directory/file exist flags; test as [[ $(boolean) ]] not [[ $boolean ]] +B_PROC='false' +B_CPUINFO='false' +B_MEMINFO='false' +B_ASOUND_CARDS='false' +B_ASOUND_VERSION='false' +B_BASH_ARRAY='false' +B_IFCONFIG='false' +B_LSB_DIR='false' +B_SCSI_DIR='false' +B_MODULES_DIR='false' # +B_MOUNTS_DIR='false' +B_PARTITIONS_DIR='false' # + +### Directory's used when present +DIR_CPUINFO='/proc/cpuinfo' +DIR_MEMINFO='/proc/meminfo' +DIR_ASOUND_DEVICE='/proc/asound/cards' +DIR_ASOUND_VERSION='/proc/asound/version' +DIR_LSB_RELEASE='/etc/lsb-release' +DIR_SCSI='/proc/scsi/scsi' +DIR_MODULES='/proc/modules' # +DIR_MOUNTS='/proc/mounts' +DIR_PARTITIONS='/proc/partitions' # +DIR_IFCONFIG='/sbin/ifconfig' + +### Variable initializations: constants +DCOPOBJ="default" +DEBUG=0 # Set debug levels from 1-10 +# Debug Buffer Index, index into a debug buffer storing debug messages until inxi is 'all up' +DEBUG_BUFFER_INDEX=0 +## note: the debugger rerouting to /dev/null has been moved to the end of the get_parameters function +## so -@[number] debug levels can be set if there is a failure, otherwise you can't even see the errors + +# Defaults to 2, make this 1 for normal, 0 for no colorcodes at all. Set to any other valid scheme you like. +# Same as runtime parameter. +DEFAULT_SCHEME=2 +# Default indentation level +INDENT=10 +# default to false, no konversation found, 1 is /cmd inxi start, 2 is native konvi script mode +KONVI=0 +# NO_CPU_COUNT=0 # Wether or not the string "dual" or similar is found in cpuinfo output. If so, avoid dups. +# This is a variable that controls how many parameters inxi will parse in a /proc//cmdline file before stopping. +PARAMETER_LIMIT=30 +SCHEME=0 # set default scheme +# SHOW_IRC=1 to avoid showing the irc client version number, or SHOW_IRC=0 to disable client information completely. +SHOW_IRC=2 +# Verbosity level defaults to 0, this can also be set with -v0, -v2, -v3, etc as a parameter. +VERBOSITY_LEVEL=0 +# Supported number of verbosity levels, including 0 +VERBOSITY_LEVELS=5 + +# Clear nullglob, because it creates unpredictable situations with IFS=$'\n' ARR=($VAR) IFS="$ORIGINAL_IFS" +# type constructs. Stuff like [rev a1] is now seen as a glob expansion pattern, and fails, and +# therefore results in nothing. Tricky as fuck. +shopt -u nullglob +## info on bash built in: $IFS - http://tldp.org/LDP/abs/html/internalvariables.html +# Backup the current Internal Field Separator +ORIGINAL_IFS="$IFS" +# These two determine separators in single line output, to force irc clients not to break off sections +SEP1='-' +SEP2='~' + +### Script names/paths +SCRIPT_NAME="inxi" +SCRIPT_PATH=$( dirname $0 ) +SCRIPT_VERSION_NUMBER=$( grep -im 1 'version:' $SCRIPT_PATH/$SCRIPT_NAME | gawk '{print $3}' ) +SCRIPT_DOWNLOAD='http://inxi.googlecode.com/svn/trunk/' +SCRIPT_DOWNLOAD_BRANCH_1='http://inxi.googlecode.com/svn/branches/one/' +SCRIPT_DOWNLOAD_BRANCH_2='http://inxi.googlecode.com/svn/branches/two/' +SCRIPT_DOWNLOAD_BRANCH_3='http://inxi.googlecode.com/svn/branches/three/' +SCRIPT_DOWNLOAD_BRANCH_4='http://inxi.googlecode.com/svn/branches/four/' +SCRIPT_DOWNLOAD_DEV='http://smxi.org/test/' +KONVI_CFG="konversation/scripts/$SCRIPT_NAME.conf" # relative path to $(kde-config --path data) + +### Script Localization +# Make sure every program speaks English. +LC_ALL="C" +export LC_ALL + +### Output Colors +# A more elegant way to have a scheme that doesn't print color codes (neither ANSI nor mIRC) at all. See below. +unset EMPTY +# DGREY BLACK RED DRED GREEN DGREEN YELLOW DYELLOW +ANSI_COLORS="       " +IRC_COLORS=" \x0314 \x0301 \x0304 \x0305 \x0309 \x0303 \x0308 \x0307" +# BLUE DBLUE MAGENTA DMAGENTA CYAN DCYAN WHITE GREY NORMAL +ANSI_COLORS="$ANSI_COLORS         " +IRC_COLORS=" $IRC_COLORS \x0312 \x0302 \x0313 \x0306 \x0311 \x0310 \x0300 \x0315 \x03" +#ANSI_COLORS=($ANSI_COLORS); IRC_COLORS=($IRC_COLORS) +A_COLORS_AVAILABLE=( DGREY BLACK RED DRED GREEN DGREEN YELLOW DYELLOW BLUE DBLUE MAGENTA DMAGENTA CYAN DCYAN WHITE GREY NORMAL ) +# See above for notes on EMPTY +A_COLOR_SCHEMES=( EMPTY,EMPTY,EMPTY NORMAL,NORMAL,NORMAL BLUE,NORMAL,NORMAL GREEN,YELLOW,NORMAL DYELLOW,NORMAL,NORMAL CYAN,BLUE,NORMAL RED,NORMAL,NORMAL GREEN,NORMAL,NORMAL YELLOW,NORMAL,NORMAL GREEN,DGREEN,NORMAL BLUE,RED,NORMAL BLUE,NORMAL,RED YELLOW,WHITE,GREEN BLUE,NORMAL,GREEN DCYAN,NORMAL,DMAGENTA ) +## Actual color variables +C1='' +C2='' +CN='' + +### Distro Data +# In cases of derived distros where the version file of the base distro can also be found under /etc, +# the derived distro's version file should go first. (Such as with Sabayon / Gentoo) +DISTROS_DERIVED="antix-version kanotix-version knoppix-version mandrake-release pardus-release sabayon-release sidux-version turbolinux-release zenwalk-version" +# debian_version excluded from DISTROS_PRIMARY so Debian can fall through to /etc/issue detection. Same goes for Ubuntu. +DISTROS_EXCLUDE_LIST="debian_version ubuntu_version" +DISTROS_PRIMARY="gentoo-release redhat-release slackware-version SuSE-release" +DISTROS_LSB_GOOD="mandrake-release mandriva-release mandrakelinux-release" +## Distros with known problems +# DSL (Bash 2.05b: grep -m doesn't work; arrays won't work) --> unusable output +# Puppy Linux 4.1.2 (Bash 3.0: arrays won't work) --> works partially + +### Bans Data +# Precede a banword with $'\2' to prevent it from being subject to automated escaping by the make_ban_lists routine +# $'\1' gets weird results : +# user@host $ ARR=($'\x01'"one two" three four); echo ${ARR[0]} | hd -v +# 00000000 01 01 6f 6e 65 20 74 77 6f 0a |..one two.| +A_NORMAL_BANS=( corporation communications gmbh technologies technology group $'\2'"\" ltd. $'\2'"\" inc. $'\2'\ co. "(tm)" "(r)" "®" $'\2'"\(rev ..\)" ) +A_CPU_BANS=( @ cpu deca 'dual core' dual-core 'tri core' tri-core 'quad core' quad-core ennea genuine hepta hexa multi octa penta 'processor' processor single triple $'\2'"[0-9.]+ *[MmGg][Hh][Zz]" ) +# after processing, the ban arrays will be put into these: +BAN_LIST_NORMAL='' +BAN_LIST_CPU='' + +### Source global config overrides +if [[ -s /etc/$SCRIPT_NAME.conf ]];then + source /etc/$SCRIPT_NAME.conf +fi +# Source user config overrides +if [[ -s $HOME/.$SCRIPT_NAME ]];then + source $HOME/.$SCRIPT_NAME +fi + +# WARNING: In the main part below (search for 'KONVI') +# there's a check for Konversation-specific config files. +# Any one of these can override the above if inxi is run +# from Konversation! + +######################################################################## +#### MAIN: Where it all begins +######################################################################## +main() +{ + # first init function must be set first for colors etc. Remember, no debugger + # stuff works on this function unless you set the debugging flag + # manually. Debugging flag -@ [number] will not work until get_parameters runs. + initialize_script_data + + ## this needs to run before the KONVI stuff is set below + get_start_client + + # Check for dependencies before running anything else except above functions + check_script_depends + check_script_suggested_apps + + # note: this only works if it's run from inside konversation as a script builtin or something + # only do this if inxi has been started as a konversation script, otherwise bypass this + if [[ $KONVI -eq 1 ]];then + DCPORT="$1" + DCSERVER="$2" + DCTARGET="$3" + shift 3 + # The section below is on request of Argonel from the Konversation developer team: + # it sources config files like $HOME/.kde/share/apps/konversation/scripts/inxi.conf + IFS=":" + for kde_config in $( kde-config --path data ) + do + if [[ -r ${kde_config}${KONVI_CFG} ]];then + source "${kde_config}${KONVI_CFG}" + break + fi + done + IFS="$ORIGINAL_IFS" + fi + ## leave this for debugging dcop stuff if we get that working + # print_screen_output "DCPORT: $DCPORT" + # print_screen_output "DCSERVER: $DCSERVER" + # print_screen_output "DCTARGET: $DCTARGET" + + # "$@" passes every parameter separately quoted, "$*" passes all parameters as one quoted parameter. + # must be here to allow debugger and other flags to be set. + get_parameters "$@" + + # If no colorscheme was set in the parameter handling routine, then set the default scheme + if [[ $COLOR_SCHEME_SET != 'true' ]];then + set_color_scheme "$DEFAULT_SCHEME" + fi + + # all the pre-start stuff is in place now + B_SCRIPT_UP='true' + script_debugger "Debugger: $SCRIPT_NAME is up and running..." + + # then create the output + print_it_out + + ## last steps + if [[ $B_RUNNING_IN_SHELL == 'true' && $SCHEME -gt 0 ]];then + echo -n "" + fi + + # weechat's executor plugin forced me to do this, and rightfully so, because else the exit code + # from the last command is taken.. + exit 0 +} + +#### ------------------------------------------------------------------- +#### basic tests: set script data, booleans, PATH +#### ------------------------------------------------------------------- + +# Set PATH data so we can access all programs as user. Set BAN lists. +# initialize some boleans, these directories are used throughout the script +# some apps are used for extended functions any directory used, should be +# checked here first. +initialize_script_data() +{ + local path='' sys_path='' added_path='' b_path_found='' + # Extra path variable to make execute failures less likely, merged below + local extra_paths="/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin" + + # Fallback paths put into $extra_paths; This might, among others, help on gentoo. + # Now, create a difference of $PATH and $extra_paths and add that to $PATH: + IFS=":" + for path in $extra_paths + do + b_path_found='false' + for sys_path in $PATH + do + if [[ $path == $sys_path ]];then + b_path_found='true' + fi + done + if [[ $b_path_found == 'false' ]];then + added_path="$added_path:$path" + fi + done + IFS="$ORIGINAL_IFS" + PATH="${PATH}${added_path}" + ##echo "PATH='$PATH'" + ##/bin/sh -c 'echo "PATH in subshell=\"$PATH\""' + + # Do this after sourcing of config overrides so user can customize banwords + BAN_LIST_NORMAL=$( make_ban_lists "${A_NORMAL_BANS[@]}" ) # Contrary to my previous belief, "${ARR[@]}" passes a quoted list, not one string + BAN_LIST_CPU=$( make_ban_lists "${A_CPU_BANS[@]}" ) + ##echo "BAN_LIST_NORMAL='$BAN_LIST_NORMAL'" + + # now set the script BOOLEANS for files required to run features + if [[ -d "/proc/" ]];then + B_PROC='true' + else + error_handler 6 + fi + + if [[ -e $DIR_CPUINFO ]]; then + B_CPUINFO='true' + fi + + if [[ -e $DIR_MEMINFO ]];then + B_MEMINFO='true' + fi + + if [[ -e $DIR_ASOUND_DEVICE ]];then + B_ASOUND_CARDS='true' + fi + + if [[ -e $DIR_ASOUND_VERSION ]];then + B_ASOUND_VERSION='true' + fi + + if [[ -f $DIR_LSB_RELEASE ]];then + B_LSB_DIR='true' + fi + + if [[ -e $DIR_SCSI ]];then + B_SCSI_DIR='true' + fi + + # lack of ifconfig will throw an error only upon it's usage + if [[ -x ifconfig ]]; then + B_IFCONFIG='true' + DIR_IFCONFIG='ifconfig' # change from full path to use $PATH + elif [[ -x $DIR_IFCONFIG ]];then + B_IFCONFIG='true' + else + A_INTERFACES_DATA=( "Interfaces tool requires missing app: $DIR_IFCONFIG" ) + fi + + if [[ -n $DISPLAY ]];then + B_X_RUNNING='true' + fi + + if [[ -e $DIR_MODULES ]];then + B_MODULES_DIR='true' + fi + + if [[ -e $DIR_MOUNTS ]];then + B_MOUNTS_DIR='true' + fi + + if [[ -e $DIR_PARTITIONS ]];then + B_PARTITIONS_DIR='true' + fi +} + +check_script_suggested_apps() +{ + local bash_array_test=( "one" "two" ) + + # check for array ability of bash, this is only good for the warning at this time + # the boolean could be used later + # bash version 2.05b is used in DSL + # bash version 3.0 is used in Puppy Linux + # versions older than 3.1 don't handle arrays + # distro's using below 2.05b are unknown, released in 2002 + if [[ ${bash_array_test[1]} -eq "two" ]];then + B_BASH_ARRAY='true' + else + script_debugger "Suggestion: update to Bash v3.1 for optimal inxi output" + fi +} + +# Determine if any of the absolutely necessary tools are absent +check_script_depends() +{ + local app_name='' app_data='' + # bc removed from deps for now + local depends="df free gawk grep hostname lspci ps readlink tr uname uptime wc" + + if [[ $B_X_RUNNING == 'true' ]];then + for app_name in xrandr xdpyinfo glxinfo + do + app_data=$( type -p $app_name ) + if [[ -z $app_data ]];then + script_debugger "Resuming in non X mode: $app_name not found in path" + B_X_RUNNING='false' + break + fi + done + fi + + app_name='' + + for app_name in $depends + do + app_data=$( type -p $app_name ) + if [[ -z $app_data ]];then + error_handler 5 "$app_name" + fi + done +} + +## note: this is now running inside each gawk sequence directly to avoid exiting gawk +## looping in bash through arrays, then re-entering gawk to clean up, then writing back to array +## in bash. For now I'll leave this here because there's still some interesting stuff to get re methods +# Enforce boilerplate and buzzword filters +# args: $1 - BAN_LIST_NORMAL/BAN_LIST_CPU; $2 - string to sanitize +sanitize_characters() +{ + # Cannot use strong quotes to unquote a string with pipes in it! + # bash will interpret the |'s as usual and try to run a subshell! + # Using weak quotes instead, or use '"..."' + echo "$2" | gawk " + BEGIN { + IGNORECASE=1 + } + { + gsub(/${!1}/,\"\") + gsub(/ [ ]+/,\" \") ## ([ ]+) with (space) + gsub(/^ +| +$/,\"\") ## (pipe char) with (nothing) + print ## prints (returns) cleaned input + }" +} + +# Filter boilerplate & buzzwords. +# args: $1 - quoted: "$@" array of ban terms +make_ban_lists() +{ + local ban_list='' + # Iterate over $@ + ## note: this is a weird, non-intuitive method, needs some documentation or rewriting + ## if you declare ban_string it stops working, have to read up on this + for ban_string + do + # echo "term=\"$ban_string\"" # >&2 + if [[ ${ban_string:0:1} = $'\2' ]];then + ban_list="${ban_list}${ban_list+|}${ban_string:1:${#ban_string}-1}" + else + # Automatically escapes [ ] ( ) . and + + ban_list="${ban_list}${ban_list+|}$( echo "$ban_string" | gawk '{ + gsub(/([\[\]+().])/,"\\\\&") + print + }' )" + fi + done + + echo "$ban_list" +} +# make_ban_lists "${A_CPU_BANS[@]}";exit + +# Set the colorscheme +# args: $1 = |<"none"> +set_color_scheme() +{ + local i='' script_colors='' color_codes='' + + if [[ $1 -ge ${#A_COLOR_SCHEMES[@]} ]];then + set -- 1 + fi + # Set a global variable to allow checking for chosen scheme later + SCHEME="$1" + if [[ $B_RUNNING_IN_SHELL == 'true' ]];then + color_codes=( $ANSI_COLORS ) + else + color_codes=( $IRC_COLORS ) + fi + for (( i=0; i < ${#A_COLORS_AVAILABLE[@]}; i++ )) + do + eval "${A_COLORS_AVAILABLE[i]}=\"${color_codes[i]}\"" + done + IFS="," + script_colors=( ${A_COLOR_SCHEMES[$1]} ) + IFS="$ORIGINAL_IFS" + # then assign the colors globally + C1="${!script_colors[0]}" + C2="${!script_colors[1]}" + CN="${!script_colors[2]}" + # ((COLOR_SCHEME++)) ## note: why is this? ## +} + +######################################################################## +#### UTILITY FUNCTIONS +######################################################################## + +#### ------------------------------------------------------------------- +#### error handler, debugger, script updater +#### ------------------------------------------------------------------- + +# Error handling +# args: $1 - error number; $2 - optional, extra information +error_handler() +{ + local error_message='' + + # assemble the error message + case $1 in + 2) error_message="large flood danger, debug buffer full!" + ;; + 3) error_message="unsupported color scheme number: $2" + ;; + 4) error_message="unsupported verbosity level: $2" + ;; + 5) error_message="dependency not met: $2 not found in path" + ;; + 6) error_message="/proc not found! Quitting..." + ;; + 7) error_message="One of the options you entered in your script parameters: $2\nIs not supported. For supported options, check the help menu: $SCRIPT_NAME -h" + ;; + 8) error_message="the self-updater failed, wget exited with error: $2.\nYou probably need to be root.\nHint, to make for easy updates without being root, do: chown $SCRIPT_PATH/$SCRIPT_NAME" + ;; + 9) error_message="unsupported debugging level: $2" + ;; + 10) + error_message="the alt download url you provided: $2\nappears to be wrong, download aborted. Please note, the url\nneeds to end in /, without $SCRIPT_NAME, like: http://yoursite.com/downloads/" + ;; + 11) + error_message="unsupported testing option argument: -! $2" + ;; + 12) + error_message="the svn branch download url: $2\nappears to be empty currently. Make sure there is an actual svn branch version\nactive before you try this again. Check http://code.google.com/p/inxi\nto verify the branch status." + ;; + *) error_message="error unknown: $@" + set -- 99 + ;; + esac + # then print it and exit + print_screen_output "Error $1: $error_message" + exit $1 +} + +# prior to script up set, pack the data into an array +# then we'll print it out later. +# args: $1 - $@ debugging string text +script_debugger() +{ + if [[ $B_SCRIPT_UP == 'true' ]];then + # only return if debugger is off and no pre start up errors have occured + if [[ $DEBUG -eq 0 && $DEBUG_BUFFER_INDEX -eq 0 ]];then + return 0 + # print out the stored debugging information if errors occured + elif [[ $DEBUG_BUFFER_INDEX -gt 0 ]];then + for (( DEBUG_BUFFER_INDEX=0; DEBUG_BUFFER_INDEX < ${#A_DEBUG_BUFFER[@]}; DEBUG_BUFFER_INDEX++ )) + do + print_screen_output "${A_DEBUG_BUFFER[$DEBUG_BUFFER_INDEX]}" + done + DEBUG_BUFFER_INDEX=0 + fi + # or print out normal debugger messages if debugger is on + if [[ $DEBUG -gt 0 ]];then + print_screen_output "$1" + fi + else + if [[ $B_DEBUG_FLOOD == 'true' && $DEBUG_BUFFER_INDEX -gt 10 ]];then + error_handler 2 + # this case stores the data for later printout, will print out only + # at B_SCRIPT_UP == 'true' if array index > 0 + else + A_DEBUG_BUFFER[$DEBUG_BUFFER_INDEX]="$1" + # increment count for next pre script up debugging error + (( DEBUG_BUFFER_INDEX++ )) + fi + fi +} + +# args: $1 - download url, not including file name; $2 - string to print out +# note that $1 must end in / to properly construct the url path +script_self_updater() +{ + local wget_error=0 + print_screen_output "Starting $SCRIPT_NAME self updater." + print_screen_output "Currently running $SCRIPT_NAME version number: $SCRIPT_VERSION_NUMBER" + print_screen_output "Updating $SCRIPT_NAME in $SCRIPT_PATH using $2 as download source..." + # first test if path is good, need to make sure it's good because we're -O overwriting file + wget -q --spider $1$SCRIPT_NAME || wget_error=$? + # then do the actual download + if [[ $wget_error -eq 0 ]];then + wget -q -O $SCRIPT_PATH/$SCRIPT_NAME $1$SCRIPT_NAME || wget_error=$? + if [[ $wget_error -eq 0 ]];then + SCRIPT_VERSION_NUMBER=$( grep -im 1 'version:' $SCRIPT_PATH/$SCRIPT_NAME | gawk '{print $3}' ) + print_screen_output "Successfully updated to $2 version: $SCRIPT_VERSION_NUMBER" + print_screen_output "To run the new version, just start $SCRIPT_NAME again." + exit 0 + fi + fi + # now run the error handlers on any wget failure + if [[ $wget_error -gt 0 ]];then + if [[ $2 == 'svn server' ]];then + error_handler 8 "$wget_error" + elif [[ $2 == 'alt server' ]];then + error_handler 10 "$1" + else + error_handler 12 "$1" + fi + fi +} + +#### ------------------------------------------------------------------- +#### print / output cleaners +#### ------------------------------------------------------------------- + +# inxi speaks through here. When run by Konversation script alias mode, uses DCOP +# for dcop to work, must use 'say' operator, AND colors must be evaluated by echo -e +# note: dcop does not seem able to handle \n so that's being stripped out and replaced with space. +print_screen_output() +{ + # the double quotes are needed to avoid losing whitespace in data when certain output types are used + local print_data="$( echo -e "$1" )" + + if [[ $DEBUG -gt 5 ]];then + if [[ $KONVI -eq 1 ]];then + # konvi doesn't seem to like \n characters, it just prints them literally + print_data="$( tr '\n' ' ' <<< "$print_data" )" + dcop "$DCPORT" "$DCOPOBJ" say "$DCSERVER" "$DCTARGET" "konvi='$KONVI' saying : '$print_data'" + elif [[ $KONVI -eq 2 ]];then + echo "konvi='$KONVI' saying : '$print_data'" + else + echo "printing out: '$print_data'" + fi + fi + + if [[ $KONVI -eq 1 ]];then + print_data="$( tr '\n' ' ' <<< "$print_data" )" + dcop "$DCPORT" "$DCOPOBJ" say "$DCSERVER" "$DCTARGET" "$print_data" + else + # the -n is needed to avoid double spacing of output in terminal + echo -ne "$print_data\n" + fi +} + +## this handles all verbose line construction with indentation/line starter +## args: $1 - null (, actually: " ") or line starter; $2 - line content +create_print_line() +{ + printf "${C1}%-${INDENT}s${C2} %s" "$1" "$2" +} + +# this removes newline and pipes. +# args: $1 - string to clean +remove_erroneous_chars() +{ + ## RS is input record separator + ## gsub is substitute; + gawk ' + BEGIN { + RS="" + } + { + gsub(/\n$/,"") ## (newline; end of string) with (nothing) + gsub(/\n/," "); ## (newline) with (space) + gsub(/^ *| *$/, "") ## (pipe char) with (nothing) + gsub(/ +/, " ") ## ( +) with (space) + gsub(/ [ ]+/, " ") ## ([ ]+) with (space) + gsub(/^ +| +$/, "") ## (pipe char) with (nothing) + printf $0 + }' "$1" ## prints (returns) cleaned input +} + +#### ------------------------------------------------------------------- +#### parameter handling, print usage functions. +#### ------------------------------------------------------------------- + +# Get the parameters. Note: standard options should be lower case, advanced or testing, upper +# args: $1 - full script startup args: $@ +get_parameters() +{ + local opt='' wget_test='' update_flags='U!:' + local use_short='true' # this is needed to trigger short output, every v/d/F/line trigger sets this false + + if [[ $B_ALLOW_UPDATE == 'false' ]];then + update_flags='' + fi + + # the short form only runs if no args output args are used + # no need to run through these if there are no args + if [[ -n $1 ]];then + while getopts Ac:CdDfFGhHiIlNpPSuv:Vx%@:${update_flags} opt + do + case $opt in + A) B_SHOW_AUDIO='true' + use_short='false' + ;; + c) if [[ -n $( egrep '^[0-9][0-9]?$' <<< $OPTARG ) ]];then + COLOR_SCHEME_SET='true' + ## note: not sure about this, you'd think user values should be overridden, but + ## we'll leave this for now + if [[ -z $COLOR_SCHEME ]];then + set_color_scheme "$OPTARG" + fi + else + error_handler 3 "$OPTARG" + fi + ;; + C) B_SHOW_CPU='true' + use_short='false' + ;; + d) VERBOSITY_LEVEL=1 + use_short='false' + ;; + D) B_SHOW_DISK='true' + use_short='false' + ;; + f) B_SHOW_CPU='true' + B_CPU_FLAGS_FULL='true' + use_short='false' + ;; + F) VERBOSITY_LEVEL=$VERBOSITY_LEVELS + B_EXTRA_DATA='true' + B_SHOW_DISK='true' + B_SHOW_PARTITIONS='true' + B_SHOW_AUDIO='true' + use_short='false' + ;; + G) B_SHOW_GRAPHICS='true' + use_short='false' + ;; + i) B_SHOW_IP='true' + B_SHOW_NETWORK='true' + use_short='false' + ;; + I) B_SHOW_INFO='true' + use_short='false' + ;; + l) B_SHOW_LABELS='true' + B_SHOW_PARTITIONS='true' + use_short='false' + ;; + N) B_SHOW_NETWORK='true' + use_short='false' + ;; + p) B_SHOW_PARTITIONS_FULL='true' + B_SHOW_PARTITIONS='true' + use_short='false' + ;; + P) B_SHOW_PARTITIONS='true' + use_short='false' + ;; + S) B_SHOW_SYSTEM='true' + use_short='false' + ;; + u) B_SHOW_UUIDS='true' + B_SHOW_PARTITIONS='true' + use_short='false' + ;; + v) if [[ -n $( egrep "^[0-9][0-9]?$" <<< $OPTARG ) && $OPTARG -le $VERBOSITY_LEVELS ]];then + VERBOSITY_LEVEL="$OPTARG" + if [[ $OPTARG -gt 0 ]];then + use_short='false' + fi + else + error_handler 4 "$OPTARG" + fi + ;; + U) script_self_updater "$SCRIPT_DOWNLOAD" 'svn server' + ;; + V) print_version_info + exit 0 + ;; + x) B_EXTRA_DATA='true' + ;; + h) show_options + exit 0 + ;; + H) show_options 'full' + exit 0 + ;; + ## debuggers and testing tools + %) B_HANDLE_CORRUPT_DATA='true' + ;; + @) if [[ -n $( egrep "^([1-9]|10)$" <<< $OPTARG ) ]];then + DEBUG=$OPTARG + exec 2>&1 + else + error_handler 9 "$OPTARG" + fi + ;; + !) # test for various supported methods + case $OPTARG in + 1) B_TESTING_1='true' + ;; + 2) B_TESTING_2='true' + ;; + 3) B_TESTING_1='true' + B_TESTING_2='true' + ;; + 10) + script_self_updater "$SCRIPT_DOWNLOAD_DEV" 'dev server' + ;; + 11) + script_self_updater "$SCRIPT_DOWNLOAD_BRANCH_1" 'svn: branch one server' + ;; + 12) + script_self_updater "$SCRIPT_DOWNLOAD_BRANCH_2" 'svn: branch two server' + ;; + 13) + script_self_updater "$SCRIPT_DOWNLOAD_BRANCH_3" 'svn: branch three server' + ;; + 14) + script_self_updater "$SCRIPT_DOWNLOAD_BRANCH_4" 'svn: branch four server' + ;; + http*) + script_self_updater "$OPTARG" 'alt server' + ;; + *) error_handler 11 "$OPTARG" + ;; + esac + ;; + *) error_handler 7 "$1" + ;; + esac + done + fi + ## this must occur here so you can use the debugging flag to show errors + ## Reroute all error messages to the bitbucket (if not debugging) + if [[ $DEBUG -eq 0 ]];then + exec 2>/dev/null + fi + #((DEBUG)) && exec 2>&1 # This is for debugging konversation + + # after all the args have been processed, if no long output args used, run short output + if [[ $use_short == 'true' ]];then + B_SHOW_SHORT_OUTPUT='true' + fi +} + +## print out help menu, not including Testing or Debugger stuff because it's not needed +show_options() +{ + local color_scheme_count=${#A_COLOR_SCHEMES[@]} + + print_screen_output "$SCRIPT_NAME supports the following options. You can combine them, or list them" + print_screen_output "one by one: Examples: $SCRIPT_NAME -v4 -c6 OR $SCRIPT_NAME -dDc 6" + print_screen_output "" + print_screen_output "If you start $SCRIPT_NAME with no arguments, it will show the short form." + print_screen_output "The following options if used without -d or -v will show just that complete line:" + print_screen_output "A,C,D,G,I,N,P,S - you can use these together to show just the lines you want to see." + print_screen_output "If you use them with a -v level (or -d), it will show the full output for that line " + print_screen_output "along with the output for the chosen verbosity level." + print_screen_output "- - - - - - - - - - - - - - - - - - - - - - - - - - - - -" + print_screen_output "Output Control Options:" + print_screen_output "-A Show audio/sound card information." + print_screen_output "-c Available color schemes. Scheme number is required." + print_screen_output " Supported schemes: 0-$color_scheme_count Example: $SCRIPT_NAME -c 11" + print_screen_output "-C Show full CPU output, including per CPU clockspeed." + print_screen_output "-d Default output verbosity level, same as: $SCRIPT_NAME -v 1" + print_screen_output "-D Show full hard disk info, not only model, ie: /dev/sda ST380817AS 80.0GB." + print_screen_output "-f Show all cpu flags used, not just the short list. Not shown with -F to avoid spamming." + print_screen_output "-F Show Full, all possible, output for $SCRIPT_NAME." + print_screen_output "-G Show graphic card information (+ glx driver and version for non free video drivers)." + print_screen_output "-i Show Wan IP address, and shows local interfaces (requires ifconfig network tool)." + print_screen_output " Not shown with -F for user security reasons, you shouldn't paste your local/wan IP." + print_screen_output "-I Show information: processes, uptime, memory, irc client, inxi version." + print_screen_output "-l Show partition labels. Default: short partition -P. For full -p output, use: -pl (or -plu)." + print_screen_output "-N Show network card information." + print_screen_output "-p Show full partition information (-P plus all other detected partitions)." + print_screen_output " If any of your partitions have spaces in their names, they will not show with -p" + print_screen_output "-P Show partition information (shows what -v4 would show, but without extra data)." + print_screen_output " Shows, if detected: / /boot /home /tmp /usr /var. Use -p for All partitions." + print_screen_output "-S Show system information: host name, kernel, distro" + print_screen_output "-u Show partition UUIDs. Default: short partition -P. For full -p output, use: -pu (or -plu)." + print_screen_output "-v Script verbosity levels. Verbosity level number is required." + print_screen_output " Supported levels: 0-${VERBOSITY_LEVELS} Example: $SCRIPT_NAME -v 4" + print_screen_output " 0 - short output, same as: $SCRIPT_NAME" + print_screen_output " 1 - basic verbose, same as: $SCRIPT_NAME -d" + print_screen_output " 2 - Also show networking card data" + print_screen_output " 3 - Also show hard disk names as detected." + print_screen_output " 4 - Also show partition size/filled data for (if present):/, /home, /var/, /boot" + print_screen_output " 5 - For multicore systems, also show per core clock speeds; shows audio card." + print_screen_output "-x Show extra data: bogomips on cpu; driver version (if available) for network/audio;" + print_screen_output " direct rendering status for Graphics. Only works with verbose or line output." + print_screen_output "" + print_screen_output "Additional Options:" + print_screen_output "-h - this help menu." + if [[ $B_ALLOW_UPDATE == 'true' ]];then + print_screen_output "-U Auto-update script. Note: if you installed as root, you" + print_screen_output " must be root to update, otherwise user is fine." + fi + print_screen_output "-V $SCRIPT_NAME version information. Prints information then exits." + print_screen_output "-% Overrides defective or corrupted data." + print_screen_output "-@ Triggers debugger output. Requires debugging level 1-10." + if [[ $1 == 'full' ]];then + print_screen_output "" + print_screen_output "Developer and Testing Options (Advanced):" + print_screen_output "-! 1 - Sets testing flag B_TESTING_1='true' to trigger testing condition 1." + print_screen_output "-! 2 - Sets testing flag B_TESTING_2='true' to trigger testing condition 2." + print_screen_output "-! 3 - Sets flags B_TESTING_1='true' and B_TESTING_2='true'." + print_screen_output "-! 10 - Triggers an update from the primary dev download server instead of svn." + print_screen_output "-! 11 - Triggers an update from svn branch one - if present, of course." + print_screen_output "-! 12 - Triggers an update from svn branch two - if present, of course." + print_screen_output "-! 13 - Triggers an update from svn branch three - if present, of course." + print_screen_output "-! 14 - Triggers an update from svn branch four - if present, of course." + print_screen_output "-! - Triggers an update from whatever server you list." + print_screen_output "" + fi + print_screen_output "" +} + +## print out version information for -V/--version +print_version_info() +{ + local last_modified=$( grep -im 1 'date:' $SCRIPT_PATH/$SCRIPT_NAME | gawk '{print $3,$4,$5}' ) + + print_screen_output "$SCRIPT_NAME - the universal, portable, system info script for irc." + print_screen_output "Version: $SCRIPT_VERSION_NUMBER" + print_screen_output "Script Last Modified: $last_modified" + print_screen_output "Script Location: $SCRIPT_PATH" + print_screen_output "" + print_screen_output "Tested with Irssi, Xchat, Konversation, BitchX, KSirc, ircII," + print_screen_output "Gaim/Pidgin, Weechat, KVIrc and Kopete." + print_screen_output "" + print_screen_output "This script is a fork of Infobash 3.02, which is:" + print_screen_output "Copyright (C) 2005-2007 Michiel de Boer a.k.a. locsmif" + print_screen_output "Subsequent changes and modifications (after Infobash 3.02) are:" + print_screen_output "Copyright (C) 2008-9 Scott Rogers, Harald Hope, aka trash80 & h2" + print_screen_output "" + print_screen_output "This program is free software; you can redistribute it and/or modify" + print_screen_output "it under the terms of the GNU General Public License as published by" + print_screen_output "the Free Software Foundation; either version 3 of the License, or" + print_screen_output "(at your option) any later version." +} + +######################################################################## +#### MAIN FUNCTIONS +######################################################################## + +#### ------------------------------------------------------------------- +#### initial startup stuff +#### ------------------------------------------------------------------- + +# Determine where inxi was run from, set IRC_CLIENT and IRC_CLIENT_VERSION +get_start_client() +{ + local irc_client_path='' irc_client_path_lower='' non_native_konvi='' i='' + local b_non_native_app='false' pppid='' app_working_name='' + + if tty >/dev/null;then + IRC_CLIENT='Shell' + unset IRC_CLIENT_VERSION + B_RUNNING_IN_SHELL='true' + elif [[ -n $PPID && -f /proc/$PPID/exe ]];then + irc_client_path=$( readlink /proc/$PPID/exe ) + irc_client_path_lower=$( tr '[:upper:]' '[:lower:]' <<< $irc_client_path ) + app_working_name=$( basename $irc_client_path_lower ) + # handles the xchat/sh/bash/dash cases, and the konversation/perl cases, where clients + # report themselves as perl or unknown shell. IE: when konversation starts inxi + # from inside itself, as a script, the parent is konversation/xchat, not perl/bash etc + # note: perl can report as: perl5.10.0, so it needs wildcard handling + case $app_working_name in + bash|dash|sh|perl*) # We want to know who wrapped it into the shell or perl. + pppid="$( ps -p $PPID -o ppid --no-headers | sed 's/ //g' )" + if [[ -n $pppid && -f /proc/$pppid/exe ]];then + irc_client_path="$( readlink /proc/$pppid/exe )" + irc_client_path_lower="$( tr '[:upper:]' '[:lower:]' <<< $irc_client_path )" + app_working_name=$( basename $irc_client_path_lower ) + b_non_native_app='true' + fi + ;; + esac + # replacing loose detection with tight detection, bugs will be handled with app names + # as they appear. + case $app_working_name in + irssi-text|irssi) + IRC_CLIENT_VERSION=" $( $irc_client_path -v | gawk 'NR == 1 { + print $2 + }' )" + IRC_CLIENT="Irssi" + ;; + konversation) + # this is necessary to avoid the dcop errors from starting inxi as a /cmd started script + if [[ $b_non_native_app == 'true' ]];then + KONVI=2 + else + KONVI=1 + fi + IRC_CLIENT_VERSION=" $( $irc_client_path -v | gawk ' + /Konversation:/ { + for ( i=2; i<=NF; i++ ) { + if (i == NF) { + print $i + } + else { + printf $i" " + } + } + exit + }' )" + + T=($IRC_CLIENT_VERSION) + if [[ ${T[0]} == *+* ]];then + # < Sho_> locsmif: The version numbers of SVN versions look like this: + # "+ #= 20090226)) + # Quassel IRC: v0.4.0 [+60] (git-22effe5) + # note: early < 0.4.1 quassels do not have -v + IRC_CLIENT_VERSION=" $( $irc_client_path -v 2>/dev/null | gawk -F ': ' ' + BEGIN { + IGNORECASE=1 + clientVersion="" + } + /Quassel IRC/ { + clientVersion = $2 + } + END { + # this handles pre 0.4.1 cases with no -v + if ( clientVersion == "" ) { + clientVersion = "(pre v0.4.1)" + } + print clientVersion + }' )" + # now handle primary, client, and core. quasselcore doesn't actually + # handle scripts with exec, but it's here just to be complete + case $app_working_name in + quassel) + IRC_CLIENT="Quassel [M]" + ;; + quasselclient) + IRC_CLIENT="Quassel" + ;; + quasselcore) + IRC_CLIENT="Quassel (core)" + ;; + esac + ;; + weechat-curses) + IRC_CLIENT_VERSION=" $( $irc_client_path -v ) " + IRC_CLIENT="Weechat" + ;; + kvirc) + IRC_CLIENT_VERSION=" $( $irc_client_path -v 2>&1 | gawk '{ + for ( i=2; i<=NF; i++) { + if ( i == NF ) { + print $i + } + else { + printf $i" " + } + } + exit + }' )" + IRC_CLIENT="KVIrc" + ;; + kopete) + IRC_CLIENT_VERSION=" $( kopete -v | gawk ' + /Kopete:/ { + print $2 + exit + }' )" + IRC_CLIENT="Kopete" + ;; + perl*|ksirc|dsirc) + unset IRC_CLIENT_VERSION + # KSirc is one of the possibilities now. KSirc is a wrapper around dsirc, a perl client + get_cmdline $PPID + for (( i=0; i <= $CMDL_MAX; i++ )) + do + case ${A_CMDL[i]} in + *dsirc*) + IRC_CLIENT="KSirc" + # Dynamic runpath detection is too complex with KSirc, because KSirc is started from + # kdeinit. /proc//exe is a link to /usr/bin/kdeinit + # with one parameter which contains parameters separated by spaces(??), first param being KSirc. + # Then, KSirc runs dsirc as the perl irc script and wraps around it. When /exec is executed, + # dsirc is the program that runs inxi, therefore that is the parent process that we see. + # You can imagine how hosed I am if I try to make inxi find out dynamically with which path + # KSirc was run by browsing up the process tree in /proc. That alone is straightjacket material. + # (KSirc sucks anyway ;) + IRC_CLIENT_VERSION=" $( ksirc -v | gawk ' + /KSirc:/ { + print $2 + exit + }' )" + break + ;; + esac + done + if [[ -z $IRC_CLIENT_VERSION ]];then + IRC_CLIENT="Unknown Perl client" + fi + ;; + bash|dash|sh) + unset IRC_CLIENT_VERSION + IRC_CLIENT="Shell wrapper" + ;; + *) + IRC_CLIENT="Unknown : ${irc_client_path##*/}" + unset IRC_CLIENT_VERSION + ;; + esac + if [[ $SHOW_IRC -lt 2 ]];then + unset IRC_CLIENT_VERSION + fi + else + IRC_CLIENT="PPID=\"$PPID\" - empty?" + unset IRC_CLIENT_VERSION + fi +} + +# Parse the null separated commandline under /proc//cmdline +# args: $1 - $PPID +get_cmdline() +{ + local i=0 ppid=$1 + + if [[ ! -e /proc/$ppid/cmdline ]];then + echo 0 + return + fi + ##print_screen_output "Marker" + ##print_screen_output "\$ppid='$ppid' -=- $(< /proc/$ppid/cmdline)" + unset A_CMDL + ## note: need to figure this one out, and ideally clean it up and make it readable + while read -d $'\0' L && [[ $i -lt 32 ]] + do + A_CMDL[i++]="$L" ## note: make sure this is valid - What does L mean? ## + done < /proc/$ppid/cmdline + ##print_screen_output "\$i='$i'" + if [[ $i -eq 0 ]];then + A_CMDL[0]=$(< /proc/$ppid/cmdline) + if [[ -n ${A_CMDL[0]} ]];then + i=1 + fi + fi + CMDL_MAX=$i +} + +#### ------------------------------------------------------------------- +#### get data types +#### ------------------------------------------------------------------- +## create array of sound cards installed on system, and if found, use asound data as well +get_audio_data() +{ + local i='' alsa_data='' alsa_driver='' device_count='' + local usb_proc_file='' array_count='' usb_id='' usb_data='' + + IFS=$'\n' + # this first step handles the drivers for cases where the second step fails to find one + device_count=$( echo "$Lspci_Data" | egrep -ic '(multimedia audio controller|audio device)' ) + if [[ $device_count -eq 1 ]] && [[ $B_ASOUND_CARDS == 'true' ]];then + alsa_driver=$( gawk -F ']: ' ' + BEGIN { + IGNORECASE=1 + } + # filtering out modems and usb devices like webcams, this might get a + # usb audio card as well, this will take some trial and error + $0 !~ /modem/ || $0 !~ /usb/ { + driver=gensub( /^(.+)( - )(.+)$/, "\\1", 1, $2 ) + gsub(/^ +| +$/,"",driver) + if ( driver != "" ){ + print driver + } + }' $DIR_ASOUND_DEVICE ) + fi + + # this is to safeguard against line breaks from results > 1, which if inserted into following + # array will create a false array entry. This is a hack, not a permanent solution. + alsa_driver=$( echo $alsa_driver ) + # now we'll build the main audio data, card name, driver, and port. If no driver is found, + # and if the first method above is not null, and one card is found, it will use that instead. + A_AUDIO_DATA=( $( echo "$Lspci_Data" | gawk -F ': ' -v alsaDriver="$alsa_driver" ' + BEGIN { + IGNORECASE=1 + } + /multimedia audio controller|audio device/ { + audioCard=gensub(/^[0-9a-f:.]+ [^:]+: (.+)$/,"\\1","g",$0) + # The doublequotes are necessary because of the pipes in the variable. + gsub(/'"$BAN_LIST_NORMAL"'/, "", audioCard) + gsub(/,/, " ", audioCard) + gsub(/^ +| +$/, "", audioCard) + gsub(/ [ \t]+/, " ", audioCard) + + cards[audioCard]++ + + # loop until you get to the end of the data block + while (getline && !/^$/) { + if (/driver in use/) { + drivers[audioCard] = drivers[audioCard] gensub(/(.*): (.*)/,"\\2","g",$0) "" + } + else if (/kernel modules:/) { + modules[audioCard] = modules[audioCard] gensub(/(.*): (.*)/,"\\2","g",$0) "" + } + else if (/I\/O/) { + portsTemp = gensub(/\t*I\/O ports at (.*) \[.*\]/,"\\1","g",$0) + ports[audioCard] = ports[audioCard] portsTemp " " + } + } + } + + END { + j=0 + for (i in cards) { + useDrivers="" + useModules="" + usePorts="" + if (cards[i]>1) { + a[j]=cards[i]"x "i + if (drivers[i] != "") { + useDrivers=drivers[i] + } + if (ports[i] != "") { + usePorts = ports[i] + } + if (modules[i] != "" ) { + useModules = modules[i] + } + } + else { + a[j]=i + # little trick here to try to catch the driver if there is + # only one card and it was null, from the first test of asound/cards + if (drivers[i] != "") { + useDrivers=drivers[i] + } + else if ( alsaDriver != "" ) { + useDrivers=alsaDriver + } + if (ports[i] != "") { + usePorts=ports[i] + } + if (modules[i] != "" ) { + useModules = modules[i] + } + } + # create array primary item for master array + print a[j] "," useDrivers "," usePorts "," useModules + j++ + } + }') ) + + # in case of failure of first check do this instead + if [[ ${#A_AUDIO_DATA[@]} -eq 0 ]] && [[ $B_ASOUND_CARDS == 'true' ]];then + A_AUDIO_DATA=( $( gawk -F ']: ' ' + BEGIN { + IGNORECASE=1 + } + $1 !~ /modem/ && $2 !~ /modem/ { + card=gensub( /^(.+)( - )(.+)$/, "\\3", 1, $2 ) + driver=gensub( /^(.+)( - )(.+)$/, "\\1", 1, $2 ) + if ( card != "" ){ + print card","driver + } + }' $DIR_ASOUND_DEVICE ) ) + fi + + # alsa usb detection by damentz + # for every sound card symlink in /proc/asound - display information about it + for usb_proc_file in /proc/asound/* + do + # if lsusb exists, the file is a symlink, and contains an important usb exclusive file: continue + if [[ -n $( which lsusb ) && -L $usb_proc_file && -e $usb_proc_file/usbid ]]; then + # send error messages of lsusb to /dev/null as it will display a bunch if not a super user + # also, find the contents of usbid in lsusb and print everything after the 7th word on the + # corresponding line. Finally, strip out commas as they will change the driver :) + usb_id=$( cat $usb_proc_file/usbid ) + usb_data=$( lsusb -v 2>/dev/null | grep "$usb_id" ) + usb_data=$( gawk '{ + gsub( /,/, " ", $0 ) + for( i=7; i <= NF; i++ ) { + printf( $i " " ) + } + }' <<< "$usb_data" ) + # this method is interesting, it shouldn't work but it does + #A_AUDIO_DATA=( "${A_AUDIO_DATA[@]}" "$usb_data,snd-usb-audio,," ) + # but until we learn why the above worked, I'm using this one, which is safer + if [[ -n $usb_data ]];then + array_count=${#A_AUDIO_DATA[@]} + A_AUDIO_DATA[$array_count]="$usb_data,snd-usb-audio,," + fi + fi + done + IFS="$ORIGINAL_IFS" + + # handle cases where card detection fails, like in PS3, where lspci gives no output, or headless boxes.. + if [[ ${#A_AUDIO_DATA[@]} -eq 0 ]];then + A_AUDIO_DATA[0]='Failed to Detect Sound Card!' + fi +} + +get_audio_alsa_data() +{ + local alsa_data='' + + # now we'll get the alsa data if the file exists + if [[ $B_ASOUND_VERSION == 'true' ]];then + alsa_data=$( gawk ' + BEGIN { + IGNORECASE=1 + } + # some alsa strings have the build date in (...) + # remove trailing . and remove possible second line if compiled by user + $0 !~ /compile/ { + gsub( "Driver | [(].*[)]|\.$","",$0 ) + gsub(/,/, " ", $0) + gsub(/^ +| +$/, "", $0) + gsub(/ [ \t]+/, " ", $0) + if ( $0 != "" ){ + print $0 + } + }' $DIR_ASOUND_VERSION ) + fi + echo "$alsa_data" +} + +## create A_CPU_CORE_DATA, currently with two values: integer core count; core string text +## return value cpu core count string, this helps resolve the multi redundant lines of old style output +get_cpu_core_count() +{ + if [[ $B_CPUINFO == 'true' ]]; then + # load the A_CPU_TYPE_PCNT_CCNT core data array + get_cpu_ht_multicore_smp_data + ## Because of the upcoming release of cpus with core counts over 6, a count of cores is given after Deca (10) + # count the number of processors given + local cpu_physical_count=${A_CPU_TYPE_PCNT_CCNT[1]} + local cpu_core_count=${A_CPU_TYPE_PCNT_CCNT[2]} + local cpu_type=${A_CPU_TYPE_PCNT_CCNT[0]} + + # match the numberic value to an alpha value + case $cpu_core_count in + 1) cpu_alpha_count='Single';; + 2) cpu_alpha_count='Dual';; + 3) cpu_alpha_count='Triple';; + 4) cpu_alpha_count='Quad';; + 5) cpu_alpha_count='Penta';; + 6) cpu_alpha_count='Hexa';; + 7) cpu_alpha_count='Hepta';; + 8) cpu_alpha_count='Octa';; + 9) cpu_alpha_count='Ennea';; + 10) cpu_alpha_count='Deca';; + *) cpu_alpha_count='Multi';; + esac + # create array, core count integer; core count string + # A_CPU_CORE_DATA=( "$cpu_core_count" "$cpu_alpha_count Core$cpu_type" ) + A_CPU_CORE_DATA=( "$cpu_physical_count" "$cpu_alpha_count" "$cpu_type" "$cpu_core_count" ) + fi +} + +## main cpu data collector +get_cpu_data() +{ + local i='' j='' cpu_array_nu='' a_cpu_working='' multi_cpu='' bits='' + + if [[ $B_CPUINFO == 'true' ]];then + IFS=$'\n' + A_CPU_DATA=( $( gawk -F': ' ' + BEGIN { + IGNORECASE=1 + } + # TAKE STRONGER NOTE: \t+ does NOT always work, MUST be [ \t]+ + # TAKE NOTE: \t+ will work for $DIR_CPUINFO, but SOME ARBITRARY FILE used for TESTING might contain SPACES! + # Therefore PATCH to use [ \t]+ when TESTING! + /^processor[ \t]+:/ { + nr = $NF + } + + /^model name|^cpu\t+:/ { + gsub(/'"$BAN_LIST_NORMAL"'/, "", $NF ) + gsub(/'"$BAN_LIST_CPU"'/, "", $NF ) + gsub(/,/, " ", $NF) + gsub(/^ +| +$/, "", $NF) + gsub(/ [ \t]+/, " ", $NF) + cpu[nr, "model"] = $NF + } + + /^cpu MHz|^clock\t+:/ { + if (!min) { + min = $NF + } + else { + if ($NF < min) { + min = $NF + } + } + + if ($NF > max) { + max = $NF + } + gsub(/MHZ/,"",$NF) ## clears out for cell cpu + gsub(/.00[0]+$/,".00",$NF) ## clears out excessive zeros + cpu[nr, "speed"] = $NF + } + + /^cache size/ { + cpu[nr, "cache"] = $NF + } + + /^flags/ { + cpu[nr, "flags"] = $NF + } + + /^bogomips/ { + cpu[nr, "bogomips"] = $NF + } + + /vendor_id/ { + gsub(/genuine|authentic/,"",$NF) + cpu[nr, "vendor"] = tolower( $NF ) + } + + END { + #if (!nr) { print ",,,"; exit } # <- should this be necessary or should bash handle that + for ( i = 0; i <= nr; i++ ) { + print cpu[i, "model"] "," cpu[i, "speed"] "," cpu[i, "cache"] "," cpu[i, "flags"] "," cpu[i, "bogomips"] "," cpu[nr, "vendor"] + } + if (!min) { + print "not found" + exit + } + if (min != max) { + printf("Min:%s%s Max:%s%s\n", min, "Mhz", max, "Mhz") + } + else { + printf("%s %s\n", max, "Mhz") + } + }' $DIR_CPUINFO ) ) + fi + + IFS="$ORIGINAL_IFS" +# echo getMainCpu: ${[@]} +} + +## this is for counting processors and finding HT types +get_cpu_ht_multicore_smp_data() +{ + # in /proc/cpuinfo + # if > 1 processor && processor id == core id then Hyperthreaded (HT) + # if > 1 processor && different processor ids then Multiple Processors (SMP) + # if > 1 processor && processor id != core id then Multi-Core Processors (MCP) + # if = 1 processor then single core/processor Uni-Processor (UP) + + if [[ $B_CPUINFO == 'true' ]]; then + A_CPU_TYPE_PCNT_CCNT=( $( + gawk ' + BEGIN { + FS=": " + IGNORECASE = 1 + core_count = 0 + i = 0 + index_temp = "" + num_of_cores = 0 + physical_cpu_count = 0 + processor_logical_count = 0 + processors = 1 + type = "UP" + } + # counts logical processors, both HT and physical + /^processor/ { + processor_logical_count = $NF + 1 + } + # counts physical cores (not used currently) + /^cpu cores/ { + num_of_cores = $NF + } + # array of physical cpus ids + /^physical/ { + a_physical_id[i] = $NF + } + # array of core ids + /^core id/ { + a_core_id[i] = $NF + i++ + } + END { + # look for the largest id number, and assign it + for ( j = 0; j < processor_logical_count; j++ ) { + if ( a_core_id[j] > core_count ) { + core_count = a_core_id[j] + } + } + core_count = core_count + 1 + # trick, set the index equal to value, if the same, it will overwrite + # this lets us create the actual array of true cpu physical ids + for ( j in a_physical_id ) { + index_temp = a_physical_id[j] + a_cpu_physical_working[index_temp] = a_physical_id[j] + } + # note that length() is a gawk >= 3.1.5 only method, better to do it manually + for ( j in a_cpu_physical_working ) { + ++physical_cpu_count + } + + # looking at logical processor counts over 1, which means either HT, SMP or MCP + # http://en.wikipedia.org/wiki/Symmetric_multiprocessing + if ( processor_logical_count > 1 ) { + if ( processor_logical_count > core_count && physical_cpu_count > 1 ) { + type = "SMP-HT" # could be Xeon/P4 HT dual cpu + } + else if ( processor_logical_count > core_count ) { + type = "HT" # this is more than likely a P4 w/HT or an Atom 270 + } + else { + type = "SMP" + } + } + # make sure to handle up cpus too + else { + core_count = 1 + physical_cpu_count = 1 + } + print type " " physical_cpu_count " " core_count + } + ' $DIR_CPUINFO + ) ) + fi +} + +# for more on distro id, please reference this python thread: http://bugs.python.org/issue1322 +## return distro name/id if found +get_distro_data() +{ + local i='' j='' distro='' distro_file='' a_distro_glob='' + + # get the wild carded array of release/version /etc files if present + shopt -s nullglob + cd /etc + a_distro_glob=(*[-_]{release,version}) + cd "$OLDPWD" + shopt -u nullglob + + if [[ ${#a_distro_glob[@]} -eq 1 ]];then + distro_file="${a_distro_glob}" + # use the file if it's in the known good lists + elif [[ ${#a_distro_glob[@]} -gt 1 ]];then + for i in $DISTROS_DERIVED $DISTROS_PRIMARY + do + # Only echo works with ${var[@]}, not print_screen_output() or script_debugger() + # This is a known bug, search for the word "strange" inside comments + # echo "i='$i' a_distro_glob[@]='${a_distro_glob[@]}'" + if [[ " ${a_distro_glob[@]} " == *" $i "* ]];then + # Now lets see if the distro file is in the known-good working-lsb-list + # if so, use lsb-release, if not, then just use the found file + # this is for only those distro's with self named release/version files + # because Mint does not use such, it must be done as below + ## this if statement requires the spaces and * as it is, else it won't work + ## + if [[ " $DISTROS_LSB_GOOD " == *" ${i} "* ]] && [[ $B_LSB_DIR == 'true' ]];then + distro_file='lsb-release' + else + distro_file="${i}" + fi + break + fi + done + fi + + # first test for the legacy antiX distro id file + if [[ -e /etc/antiX ]];then + distro="$( egrep -oi 'antix.*\.iso' <<< $( remove_erroneous_chars '/etc/antiX' ) | sed 's/\.iso//' )" + # this handles case where only one release/version file was found, and it's lsb-release. This would + # never apply for ubuntu or debian, which will filter down to the following conditions. In general + # if there's a specific distro release file available, that's to be preferred, but this is a good backup. + elif [[ $distro_file == 'lsb-release' ]];then + distro=$( get_distro_lsb_data ) + # then if the distro id file was found and it's not in the exluded primary distro file list, read it + elif [[ -n $distro_file && -s /etc/$distro_file && " $DISTROS_EXCLUDE_LIST " != *" $distro_file "* ]];then + distro=$( remove_erroneous_chars "/etc/$distro_file" ) + # otherwise try the default debian/ubuntu /etc/issue file + elif [[ -f /etc/issue ]];then + # lsb gives more manageable and accurate output than issue, but mint should use issue for now + # some bashism, boolean must be in parenthesis to work correctly, ie [[ $(boolean) ]] not [[ $boolean ]] + if [[ $B_LSB_DIR == 'true' ]] && [[ -z $( grep -i 'mint' /etc/issue ) ]];then + distro=$( get_distro_lsb_data ) + else + distro=$( gawk ' + BEGIN { + RS="" + } + { + gsub(/\\[a-z]/, "") + gsub(/,/, " ") + gsub(/^ +| +$/, "") + gsub(/ [ \t]+/, " ") + print + }' /etc/issue ) + fi + fi + + if [[ ${#distro} -gt 80 ]] && [[ $B_HANDLE_CORRUPT_DATA != 'true' ]];then + distro="${RED}/etc/${distro_file} corrupted, use -% to override${NORMAL}" + fi + ## note: would like to actually understand the method even if it's not used + # : ${distro:=Unknown distro o_O} + ## test for /etc/lsb-release as a backup in case of failure, in cases where > one version/release file + ## were found but the above resulted in null distro value + if [[ -z $distro ]] && [[ $B_LSB_DIR == 'true' ]];then + distro=$( get_distro_lsb_data ) + fi + ## finally, if all else has failed, give up + if [[ -z $distro ]];then + distro='Unknown distro o_O' + fi + + # this handles an arch bug where /etc/arch-release is empty and /etc/issue is corrupted + if [[ -n $( grep -i 'arch linux' <<< $distro ) ]];then + distro='Arch Linux' + fi + + echo "$distro" +} + +# args: $1 - optional, app, uses the app test, not being used now +get_distro_lsb_data() +{ + local distro='' + + if [[ $B_LSB_DIR == 'true' ]] && [[ $1 != 'app' ]];then + distro=$( gawk -F '=' ' + BEGIN { + IGNORECASE=1 + } + # note: adding the spacing directly to variable to make sure distro output is null if not found + /^DISTRIB_ID/ { + gsub(/^ +| +$/, "", $NF) + # this is needed because grep for "arch" is too loose to be safe + if ( $NF == "arch" ) { + distroId = "Arch Linux" + } + else if ( $NF != "n/a" ) { + distroId = $NF " " + } + } + /^DISTRIB_RELEASE/ { + gsub(/^ +| +$/, "", $NF) + if ( $NF != "n/a" ) { + distroRelease = $NF " " + } + } + /^DISTRIB_CODENAME/ { + gsub(/^ +| +$/, "", $NF) + if ( $NF != "n/a" ) { + distroCodename = $NF " " + } + } + END { + print distroId distroRelease distroCodename + }' $DIR_LSB_RELEASE ) + fi + # this is HORRIBLY slow, but I don't know why, it runs fast in shell +# if [[ -n $( which lsb_release ) && $1 == 'app' ]];then +# distro=$( echo "$( lsb_release -irc )" | gawk ' +# { IGNORECASE=1 } +# /^Distributor ID/ { +# gsub(/^ +| +$/, "", $NF) +# distroId = $NF +# } +# /^Release/ { +# gsub(/^ +| +$/, "", $NF) +# distroRelease = $NF +# } +# /^Codename/ { +# gsub(/^ +| +$/, "", $NF) +# distroCodename = $NF +# } +# END { +# print distroId " " distroRelease " (" distroCodename ")" +# }' ) +# fi + + echo $distro +} + +## create array of gfx cards installed on system +get_graphics_card_data() +{ + local i='' + + IFS=$'\n' + A_GFX_CARD_DATA=( $( echo "$Lspci_Data" | gawk -F': ' ' + BEGIN { + IGNORECASE=1 + } + /vga compatible controller/ { + gsub(/'"$BAN_LIST_NORMAL"'/, "", $NF) + gsub(/,/, " ", $NF) + gsub(/^ +| +$/, "", $NF) + gsub(/ [ \t]+/, " ", $NF) + print $NF + }' ) ) + IFS="$ORIGINAL_IFS" +# for (( i=0; i < ${#A_GFX_CARD_DATA[@]}; i++ )) +# do +# A_GFX_CARD_DATA[i]=$( sanitize_characters BAN_LIST_NORMAL "${A_GFX_CARD_DATA[i]}" ) +# done + # handle cases where card detection fails, like in PS3, where lspci gives no output, or headless boxes.. + if [[ ${#A_GFX_CARD_DATA[@]} -eq 0 ]];then + A_GFX_CARD_DATA[0]='Failed to Detect Video Card!' + fi + + # GFXMEM is UNUSED at the moment, because it shows AGP aperture size, which is not necessarily equal to GFX memory.. + # GFXMEM="size=[$(echo "$Lspci_Data" | gawk '/VGA/{while (!/^$/) {getline;if (/size=[0-9][0-9]*M/) {size2=gensub(/.*\[size=([0-9]+)M\].*/,"\\1","g",$0);if (size 1 cases of detections I guess + function join( arr, sep ) { + s="" + i=flag=0 + for ( i in arr ) { + if ( flag++ ) { + s = s sep + } + s = s i + } + return s + } + + BEGIN { + IGNORECASE=1 + } + /opengl renderer/ { + if ( $2 ~ /mesa/ ) { + # Allow all mesas +# if ( $2 ~ / r[3-9][0-9][0-9] / ) { + gsub(/'"$BAN_LIST_NORMAL"'/, "", $2) + a[$2] + # this counter failed in one case, a bug, and is not needed now +# f++ +# } + next + } + $2 && a[$2] + } + # dropping all conditions from this test to just show full mesa information + # there is a user case where not f and mesa apply, atom mobo + # /opengl version/ && ( f || $2 !~ /mesa/ ) { + /opengl version/ { + $2 && b[$2] + } + /direct rendering/ { + $2 && c[$2] + } + END { + printf( "%s\n%s\n%s\n", join( a, ", " ), join( b, ", " ), join( c, ", " ) ) + }' ) ) + IFS="$ORIGINAL_IFS" + + # GLXR=$(glxinfo | gawk -F ': ' 'BEGIN {IGNORECASE=1} /opengl renderer/ && $2 !~ /mesa/ {seen[$2]++} END {for (i in seen) {printf("%s ",i)}}') + # GLXV=$(glxinfo | gawk -F ': ' 'BEGIN {IGNORECASE=1} /opengl version/ && $2 !~ /mesa/ {seen[$2]++} END {for (i in seen) {printf("%s ",i)}}') + fi +} + +## return screen resolution / tty resolution +get_graphics_res_data() +{ + local screen_resolution='' + + if [[ $B_X_RUNNING == 'true' ]];then + # Added the two ?'s , because the resolution is now reported without spaces around the 'x', as in + # 1400x1050 instead of 1400 x 1050. Change as of X.org version 1.3.0 + screen_resolution=$( xrandr | gawk ' + /\*/ { + res[++m] = gensub(/^.* ([0-9]+) ?x ?([0-9]+)[_ ].* ([0-9\.]+)\*.*$/,"\\1x\\2@\\3hz","g",$0) + } + END { + for (n in res) { + if (res[n] ~ /^[[:digit:]]+x[[:digit:]]+/) { + line = line ? line ", " res[n] : res[n] + } + } + if (line) { + print(line) + } + }' ) + if [[ -z $screen_resolution ]];then + screen_resolution=$( xdpyinfo | gawk ' + /dimensions/ { + print $2 + }' ) + fi + else + screen_resolution=$( stty -F $( readlink /proc/$PPID/fd/0 ) size | gawk '{ print $2"x"$1 }' ) + fi + echo "$screen_resolution" +} + +## for possible future data, not currently used +get_graphics_agp_data() +{ + local agp_module='' + + if [[ B_MODULES_DIR == 'true' ]];then + ## not used currently + agp_module=$( gawk ' + /agp/ && !/agpgart/ && $3 > 0 { + print(gensub(/(.*)_agp.*/,"\\1","g",$1)) + }' $DIR_MODULES ) + fi +} + +## create array of x vendor/version data +get_graphics_x_data() +{ + local x_vendor='' x_version='' + + if [[ $B_X_RUNNING == 'true' ]];then + # X vendor and version detection. + x_vendor=$( xdpyinfo | gawk -F': +' ' + BEGIN { + IGNORECASE=1 + } + /vendor string/ { + gsub(/the|inc|foundation|project|corporation/, "", $2) + gsub(/,/, " ", $2) + gsub(/^ +| +$/, "", $2) + gsub(/ [ \t]+/, " ", $2) + print $2 + }' ) + + # new method added since radeon and X.org and the disappearance of version : ...etc + # Later on, the normal textual version string returned, e.g. like: X.Org version: 6.8.2 + # A failover mechanism is in place. (if $x_version is empty, the release number is parsed instead) + x_version=$( xdpyinfo | gawk '/version:/ { print $NF }' ) + if [[ -z $x_version ]];then + x_version=$(xdpyinfo | gawk -F': +' ' + BEGIN { + IGNORECASE=1 + } + /vendor release number/ { + gsub(/0+$/, "", $2) + gsub(/0+/, ".", $2) + print $2 + }' ) + fi + A_X_DATA[0]="$x_vendor" + A_X_DATA[1]="$x_version" + + #X -version 2>&1 | gawk '/^X Window System Version/ { print $5 }' + #This method could be used in the future to detect X when X is not running, + #however currently inxi ignores X checks when X is not found. + fi +} + +# this gets just the raw data, total space/percent used and disk/name/per disk capacity +get_hdd_data_basic() +{ + local hdd_used='' + + hdd_used=$( df --exclude-type=aufs --exclude-type=tmpfs --exclude-type=iso9660 | gawk ' + # also handles odd dm-1 type, from lvm + /^\/dev\/(mapper\/|[hs]d[a-z][0-9]+|dm[-]?[0-9]+)/ { + # this handles the case where the first item is too long + # and makes df wrap output to next line, so here we advance + # it to the next line for that single case + if ( NF < 5 && $0 !~ /.*\%/ ) { + getline + } + # if the first item caused a wrap, use one less than standard + # testing for the field with % in it, ie: 34%, then go down from there + # this also protects against cases where the mount point has a space in the + # file name, thus breaking going down from $NF directly. + if ( $4 ~ /.*\%/ ) { + used += $2 + } + # otherwise use standard + else if ( $5 ~ /.*\%/ ) { + used += $3 + } + # and if this is not detected, give up, we need user data to debug + else { + next + } + } + END { + print used + }' ) + + if [[ -z $hdd_used ]];then + hdd_used='na' + fi + + # create the initial array strings: + # disk-dev, capacity, name, usb or not + # final item is the total of the disk + IFS=$'\n' + + if [[ $B_PARTITIONS_DIR == 'true' ]];then + A_HDD_DATA=( $( + gawk -v hddused="$hdd_used" ' + /[hs]d[a-z]$/ { + driveSize = $(NF - 1)*1024/1000**3 + gsub(/,/, " ", driveSize) + gsub(/^ +| +$/, "", driveSize) + printf( $NF",%.1fGB,,\n", driveSize ) + } + # See http://lanana.org/docs/device-list/devices-2.6+.txt for major numbers used below + # $1 ~ /^(3|22|33|8)$/ && $2 % 16 == 0 { + # size += $3 + # } + # special case from this data: 8 0 156290904 sda + $1 ~ /^(3|22|33|8)$/ && $NF ~ /[hs]d[a-z]$/ && ( $2 % 16 == 0 || $2 % 16 == 8 ) { + size += $3 + } + + END { + size = size*1024/1000**3 # calculate size in GB size + workingUsed = hddused*1024/1000**3 # calculate workingUsed in GB used + # this handles a special case with livecds where no hdd_used is detected + if ( size > 0 && hddused == "na" ) { + size = sprintf( "%.1f", size ) + print size "GB,-" + } + else if ( size > 0 && workingUsed > 0 ) { + diskUsed = workingUsed*100/size # calculate used percentage + diskUsed = sprintf( "%.1f", diskUsed ) + size = sprintf( "%.1f", size ) + print size "GB," diskUsed "% used" + } + else { + print "NA,-" # print an empty array, this will be further handled in the print out function + } + }' $DIR_PARTITIONS + ) ) + fi + IFS="$ORIGINAL_IFS" +} + +## fills out the A_HDD_DATA array with disk names +get_hard_drive_data_advanced() +{ + local a_temp_working='' a_temp_scsi='' temp_holder='' temp_name='' i='' j='' + local sd_ls_by_id='' ls_disk_by_id='' + + ## check for all ide type drives, non libata, only do it if hdx is in array + if [[ -n $( egrep 'hd[a-z]' <<< ${A_HDD_DATA[@]} ) ]];then + # remember, we're using the last array item to store the total size of disks + for (( i=0; i < ${#A_HDD_DATA[@]} - 1; i++ )) + do + IFS="," + a_temp_working=( ${A_HDD_DATA[i]} ) + IFS="$ORIGINAL_IFS" + if [[ -n $( egrep '^hd[a-z]' <<< ${a_temp_working[0]} ) ]];then + if [[ -e /proc/ide/${a_temp_working[0]}/model ]];then + a_temp_working[2]="$( remove_erroneous_chars /proc/ide/${a_temp_working[0]}/model )" + else + a_temp_working[2]="Name n/a" + fi + # these loops are to easily extend the cpu array created in the awk script above with more fields per cpu. + for (( j=0; j < ${#a_temp_working[@]}; j++ )) + do + if [[ $j -gt 0 ]];then + A_HDD_DATA[i]="${A_HDD_DATA[i]},${a_temp_working[$j]}" + else + A_HDD_DATA[i]="${a_temp_working[$j]}" + fi + done + fi + done + fi + + ## then handle libata names + # first get the ata device names, put them into an array + IFS=$'\n' + if [[ $B_SCSI_DIR == 'true' ]]; then + a_temp_scsi=( $( gawk ' + BEGIN { + IGNORECASE=1 + } + /host/ { + getline a[$0] + getline b[$0] + } + END { + for (i in a) { + if (b[i] ~ / *type: *direct-access.*/) { + #c=gensub(/^ *vendor: (.+) +model: (.+) +rev: (.+)$/,"\\1 \\2 \\3","g",a[i]) + #c=gensub( /^ *vendor: (.+) +model: (.+) +rev:.*$/,"\\1 \\2","g",a[i] ) + # the vendor: string is useless, and is a bug, ATA is not a vendor for example + c=gensub( /^ *vendor: (.+) +model: (.+) +rev:.*$/, "\\2", "g", a[i] ) + gsub(/,/, " ", c) + gsub(/^ +| +$/, "", c) + gsub(/ [ \t]+/, " ", c) + #print a[i] + # we actually want this data, so leaving this off for now +# if (c ~ /\|\|memory stick|memory card/) { +# continue +# } + print c + } + } + }' $DIR_SCSI ) ) + fi + IFS="$ORIGINAL_IFS" + + ## then we'll loop through that array looking for matches. + if [[ -n $( egrep 'sd[a-z]' <<< ${A_HDD_DATA[@]} ) ]];then + # first pack the main ls variable so we don't have to keep using ls /dev... + ls_disk_by_id="$( ls -l /dev/disk/by-id )" + for (( i=0; i < ${#A_HDD_DATA[@]} - 1; i++ )) + do + if [[ -n $( egrep '^sd[a-z]' <<< ${A_HDD_DATA[$i]} ) ]];then + IFS="," + a_temp_working=( ${A_HDD_DATA[$i]} ) + IFS="$ORIGINAL_IFS" + if [[ ${#a_temp_scsi[@]} -gt 0 ]];then + for (( j=0; j < ${#a_temp_scsi[@]}; j++ )) + do + ## ok, ok, it's incomprehensible, search /dev/disk/by-id for a line that contains the + # discovered disk name AND ends with the correct identifier, sdx + # get rid of whitespace for some drive names and ids, and extra data after - in name + temp_name=$( tr ' ' '_' <<< ${a_temp_scsi[$j]} | cut -d '-' -f 1 ) + sd_ls_by_id=$( egrep -m1 ".*$temp_name.*${a_temp_working[0]}$" <<< "$ls_disk_by_id" ) + + if [[ -n $sd_ls_by_id ]];then + a_temp_working[2]=${a_temp_scsi[$j]} + if [[ -n $( grep 'usb-' <<< $sd_ls_by_id ) ]];then + a_temp_working[3]='USB' + fi + break + else + a_temp_working[2]="Name n/a" + fi + done + else + a_temp_working[2]="Name n/a" + fi + + # these loops are to easily extend the cpu array created in the awk script above with more fields per cpu. + for (( j=0; j < ${#a_temp_working[@]}; j++ )) + do + if [[ $j -gt 0 ]];then + A_HDD_DATA[i]="${A_HDD_DATA[i]},${a_temp_working[$j]}" + else + A_HDD_DATA[i]="${a_temp_working[$j]}" + fi + done + fi + done + unset ls_disk_by_id # and then let's dump the data we don't need + fi +} + +get_lspci_data() +{ + echo "$( lspci -v | gawk '{ + gsub(/\(prog-if[^)]*\)/,"") + print + }' )" +} + +## return memory used/installed +get_memory_data() +{ + local memory='' + + memory=$( gawk ' + /^MemTotal:/ { + tot = $2 + } + /^(MemFree|Buffers|Cached):/ { + notused+=$2 + } + END { + used = tot-notused + printf("%.1f/%.1fMB\n", used/1024, tot/1024) + }' $DIR_MEMINFO ) + + echo "$memory" +} + +# process and return module version data +get_module_version_number() +{ + local module_version='' + + if [[ -n $( which modinfo ) ]];then + module_version=$( modinfo $1 | gawk ' + BEGIN { + IGNORECASE=1 + } + /^version/ { + gsub(/,/, " ", $2) + gsub(/^ +| +$/, "", $2) + gsub(/ [ \t]+/, " ", $2) + print $2 + } + ' ) + fi + + echo "$module_version" +} + +## create array of network cards +get_networking_data() +{ + IFS=$'\n' + A_NETWORK_DATA=( $( echo "$Lspci_Data" | gawk ' + BEGIN { + IGNORECASE=1 + } + /^[0-9a-f:.]+ (ethernet|network) (controller|bridge)/ || /^[0-9a-f:.]+ [^:]+: .*(ethernet|network).*$/ { + nic=gensub(/^[0-9a-f:.]+ [^:]+: (.+)$/,"\\1","g",$0) + gsub(/realtek semiconductor/, "Realtek", nic) + gsub(/davicom semiconductor/, "Davicom", nic) + # The doublequotes are necessary because of the pipes in the variable. + gsub(/'"$BAN_LIST_NORMAL"'/, "", nic) + gsub(/,/, " ", nic) + gsub(/^ +| +$/, "", nic) + gsub(/ [ \t]+/, " ", nic) + + eth[nic]++ + while (getline && !/^$/) { + if (/I\/O/) { + ports[nic] = ports[nic] $4 " " + } + if (/driver in use/) { + drivers[nic] = drivers[nic] gensub(/(.*): (.*)/,"\\2","g",$0) "" + } + else if (/kernel modules/) { + modules[nic] = modules[nic] gensub(/(.*): (.*)/,"\\2","g",$0) "" + } + } + } + + END { + j=0 + for (i in eth) { + useDrivers="" + usePorts="" + useModules="" + if (eth[i]>1) { + a[j]=eth[i]"x "i + ## note: this loses the plural ports case, is it needed anyway? + if (ports[i] != "") { + usePorts=ports[i] + } + if (drivers[i] != "") { + useDrivers=drivers[i] + } + if (modules[i] != "" ) { + useModules = modules[i] + } + } + else { + a[j]=i + if (ports[i] != "") { + usePorts=ports[i] + } + if (drivers[i] != "") { + useDrivers=drivers[i] + } + if (modules[i] != "" ) { + useModules = modules[i] + } + } + # create array primary item for master array + print a[j] "," useDrivers "," usePorts "," useModules + j++ + } + }') ) + IFS="$ORIGINAL_IFS" +} + +get_networking_wan_ip_data() +{ + local ip='' + + # get ip using wget redirect to stdout. This is a clean, text only IP output url. + ip=$( wget -q -O - http://smxi.org/opt/ip.php | awk -F 'is: ' '{ + #gsub("\n","",$2") + print $2 + }' ) + + if [[ -z $ip ]];then + ip='None Detected!' + fi + echo "$ip" +} + +get_networking_local_ip_data() +{ + if [[ $B_IFCONFIG == 'true' ]];then + IFS=$'\n' + A_INTERFACES_DATA=( $( $DIR_IFCONFIG | gawk ' + BEGIN { + IGNORECASE=1 + } + $0 !~ /^lo/ { + # not clear on why inet is coming through, but this gets rid of it + # as first line item. + interface = $1 + gsub(/,/, " ", interface) + gsub(/^ +| +$/, "", interface) + gsub(/ [ \t]+/, " ", interface) + + aInterfaces[interface]++ + while (getline && !/^$/) { + if (/inet addr:/) { + ipAddresses[interface] = gensub( /addr:([0-9\.]+)/, "\\1", "g", $2 ) + } + } + } + + END { + j=0 + for (i in aInterfaces) { + useInterfaceIp = "" + a[j] = i + if (ipAddresses[i] != "") { + useInterfaceIp = ipAddresses[i] + } + # create array primary item for master array + # tested needed to avoid bad data from above, if null it is garbage + # this is the easiest way to handle junk I found, improve if you want + if ( useInterfaceIp != "" ) { + print a[j] "," useInterfaceIp + } + j++ + } + }') ) + IFS="$ORIGINAL_IFS" + fi +} + +get_partition_data() +{ + #local excluded_file_types='--exclude-type=aufs --exclude-type=tmpfs --exclude-type=iso9660' + # df doesn't seem to work in script with variables like at the command line + + IFS=$'\n' + # sample line: /dev/sda2 ext3 15G 8.9G 4.9G 65% /home + # $NF = partition name; $(NF - 4) = partition size; $(NF - 3) = used, in gB; $(NF - 1) = percent used + ## note: by subtracting from the last field number NF, we avoid a subtle issue with LVM df output, where if + ## the first field is too long, it will occupy its own line, this way we are getting only the needed data + A_PARTITION_DATA=( $( df -h -T --exclude-type=aufs --exclude-type=tmpfs --exclude-type=iso9660 | gawk ' + BEGIN { + IGNORECASE=1 + } + # this has to be nulled for every iteration so it does not retain value from last iteration + devBase="" + # this is required because below we are subtracting from NF, so it has to be > 4 + # the real issue is long file system names that force the wrap of df output: //fileserver/main + # but we still need to handle more dynamically long space containing file names, but later. + ( NF < 5 ) && ( $0 !~ /[0-9]+\%/ ) { + # set the dev location here for cases of wrapped output + if ( NF == 1 ){ + devBase=gensub( /^(\/dev\/)(.+)$/, "\\2", 1, $1 ) + } + getline + } + # this handles yet another fredforfaen special case where a mounted drive + # has the search string in its name + $NF ~ /^\/$|^\/boot$|^\/var$|^\/home$|^\/tmp$|^\/usr$/ { + print $NF "," $(NF - 4) "," $(NF - 3) "," $(NF - 1) ",main," devBase + } + # skip all these, including the first, header line. Use the --exclude-type + # to handle new filesystems types we do not want listed here + $NF !~ /^\/$|^\/boot$|^\/var$|^\/home$|^\/tmp$|^\/usr$|^filesystem/ { + # this is to avoid file systems with spaces in their names, that will make + # the test show the wrong data in each of the fields, if no x%, then do not use + # using 3 cases, first default, standard, 2nd, 3rd, handles one and two spaces in name + if ( $(NF - 1) ~ /[0-9]+\%/ ) { + print $NF "," $(NF - 4) "," $(NF - 3) "," $(NF - 1) ",secondary," devBase + } + # these two cases construct the space containing name + else if ( $(NF - 2) ~ /[0-9]+\%/ ) { + print $(NF - 1) " " $NF "," $(NF - 5) "," $(NF - 4) "," $(NF - 2) ",secondary," devBase + } + else if ( $(NF - 3) ~ /[0-9]+\%/ ) { + print $(NF - 2) " " $(NF - 1) " " $NF "," $(NF - 6) "," $(NF - 5) "," $(NF - 3) ",secondary," devBase + } + } + ' ) + # now add the swap partition data, don't want to show swap files, just partitions, + # though this can include /dev/ramzswap0. Note: you can also use /proc/swaps for this + # data, it's the same exact output as swapon -s + $( swapon -s | gawk ' + BEGIN { + swapCounter = 1 + } + /^\/dev/ { + size = sprintf( "%.2f", $3*1024/1000**3 ) + devBase = gensub( /^(\/dev\/)(.+)$/, "\\2", 1, $1 ) + used = sprintf( "%.2f", $4*1024/1000**3 ) + percentUsed = sprintf( "%.0f", ( $4/$3 )*100 ) + print "swap-" swapCounter "," size "GB," used "GB," percentUsed "\%,main," devBase + swapCounter = ++swapCounter + }' ) ) + IFS="$ORIGINAL_IFS" + + if [[ $B_SHOW_LABELS == 'true' || $B_SHOW_UUIDS == 'true' ]];then + get_partition_data_advanced + fi +} + +# first get the locations of the mount points for label/uuid detection +get_partition_data_advanced() +{ + local a_partition_working='' dev_partition_data='' + local dev_disk_label='' dev_disk_uuid='' dev_item='' dev_label='' dev_uuid='' + local mount_point='' + + if [[ -d /dev/disk/by-label ]];then + dev_disk_label="$( ls -l /dev/disk/by-label )" + fi + if [[ -d /dev/disk/by-uuid ]];then + dev_disk_uuid="$( ls -l /dev/disk/by-uuid )" + fi + + if [[ $B_MOUNTS_DIR == 'true' ]];then + for (( i=0; i < ${#A_PARTITION_DATA[@]}; i++ )) + do + IFS="," + a_partition_working=( ${A_PARTITION_DATA[i]} ) + IFS="$ORIGINAL_IFS" + # note: for swap this will already be set + if [[ -z ${a_partition_working[5]} ]];then + mount_point=$( sed 's|/|\\/|g' <<< ${a_partition_working[0]} ) + #echo mount_point $mount_point + dev_partition_data=$( gawk ' + BEGIN { + IGNORECASE = 1 + partition = "" + partTemp = "" + } + # trying to handle space in name +# gsub( /\\040/, " ", $0 ) + /[ \t]'$mount_point'[ \t]/ && $1 != "rootfs" { + # initialize the variables + label = "" + uuid = "" + + # slice out the /dev + partition=gensub( /^(\/dev\/)(.+)$/, "\\2", 1, $1 ) + # label and uuid can occur for root, set partition to null now + if ( partition ~ /by-label/ ) { + label=gensub( /^(\/dev\/disk\/by-label\/)(.+)$/, "\\2", 1, $1 ) + partition = "" + } + if ( partition ~ /by-uuid/ ) { + uuid=gensub( /^(\/dev\/disk\/by-uuid\/)(.+)$/, "\\2", 1, $1 ) + partition = "" + } + + # handle /dev/root for / id + if ( partition == "root" ) { + # if this works, great, otherwise, just set this to null values + partTemp="'$( readlink /dev/root 2>/dev/null )'" + if ( partTemp != "" ) { + if ( partTemp ~ /[hs]d[a-z][0-9]/ ) { + partition=gensub( /^(\/dev\/)(.+)$/, "\\2", 1, partTemp ) + } + else if ( partTemp ~ /by-uuid/ ) { + uuid=gensub( /^(\/dev\/disk\/by-uuid\/)(.+)$/, "\\2", 1, partTemp ) + partition="" # set null to let real location get discovered + } + else if ( partTemp ~ /by-label/ ) { + label=gensub( /^(\/dev\/disk\/by-label\/)(.+)$/, "\\2", 1, partTemp ) + partition="" # set null to let real location get discovered + } + } + else { + partition = "" + label = "" + uuid = "" + } + } + print partition "," label "," uuid + }' $DIR_MOUNTS ) + +# echo dev_partition_data: $dev_partition_data + # assemble everything we could get for dev/h/dx, label, and uuid + IFS="," + A_PARTITION_DATA[i]=${a_partition_working[0]}","${a_partition_working[1]}","${a_partition_working[2]}","${a_partition_working[3]}","${a_partition_working[4]}","$dev_partition_data + IFS="$ORIGINAL_IFS" + fi + ## now we're ready to proceed filling in the data + IFS="," + a_partition_working=( ${A_PARTITION_DATA[i]} ) + IFS="$ORIGINAL_IFS" + + dev_item=${a_partition_working[5]} + dev_label=${a_partition_working[6]} + dev_uuid=${a_partition_working[7]} + + # then if dev data/uuid is incomplete, try to get missing piece + # it's more likely we'll get a uuid than a label. But this should get the + # dev item set no matter what, so then we can get the rest of any missing data + # first we'll get the dev_item if it's missing + if [[ -n $dev_disk_uuid ]] && [[ -z $dev_item && -n $dev_uuid ]];then + dev_item=$( echo "$dev_disk_uuid" | gawk ' + /'$dev_uuid'/ { + item=gensub( /..\/..\/(.+)/, "\\1", 1, $NF ) + print item + }' ) + elif [[ -n $dev_disk_label ]] && [[ -z $dev_item && -n $dev_label ]];then + dev_item=$( echo "$dev_disk_label" | gawk ' + # first we need to change space x20 in by-label back to a real space + #gsub( /x20/, " ", $0 ) + # then we can see if the string is there + /'$dev_label'/ { + item=gensub( /..\/..\/(.+)/, "\\1", 1, $NF ) + print item + }' ) + fi + if [[ -n $dev_disk_uuid ]] && [[ -n $dev_item && -z $dev_uuid ]];then + dev_uuid=$( echo "$dev_disk_uuid" | gawk ' + /'$dev_item'$/ { + print $(NF - 2) + }' ) + fi + if [[ -n $dev_disk_label ]] && [[ -n $dev_item && -z $dev_label ]];then + dev_label=$( echo "$dev_disk_label" | gawk ' + /'$dev_item'/ { + print $(NF - 2) + }' ) + + fi + # assemble everything we could get for dev/h/dx, label, and uuid + IFS="," + A_PARTITION_DATA[i]=${a_partition_working[0]}","${a_partition_working[1]}","${a_partition_working[2]}","${a_partition_working[3]}","${a_partition_working[4]}","$dev_item","$dev_label","$dev_uuid + IFS="$ORIGINAL_IFS" + done + fi +} + +## return uptime string +get_uptime() +{ + ## note: removing gsub(/ /,"",a); to get get space back in there, goes right before print a + echo $( uptime | gawk '{ + a = gensub(/^.*up *([^,]*).*$/,"\\1","g",$0) + print a + }' ) +} + +#### ------------------------------------------------------------------- +#### special data handling for specific options and conditions +#### ------------------------------------------------------------------- + +## multiply the core count by the data to be calculated, bmips, cache +# args: $1 - string to handle; $2 - cpu count +calculate_multicore_data() +{ + local string_number=$1 string_data='' + + if [[ -n $( egrep -i '( mb| kb)' <<< $1 ) ]];then + string_data=" $( gawk '{print $2}' <<< $1 )" # add a space for output + string_number=$( gawk '{print $1}' <<< $1 ) + fi + # handle weird error cases where it's not a number + if [[ -n $( egrep '^[0-9\.,]+$' <<< $string_number ) ]];then + string_number=$( echo $string_number $2 | gawk '{ + total = $1*$2 + print total + }' ) + elif [[ $string_number == '' ]];then + string_number='Not Available' + else + # I believe that the above returns 'unknown' by default so no need for extra text + string_number="$string_number " + fi + echo "$string_number$string_data" +} + +# prints out shortened list of flags, the main ones of interest +# args: $1 - string of cpu flags to process +process_cpu_flags() +{ + local cpu_flags="$1" + + # nx = AMD stack protection extensions + # lm = Intel 64bit extensions + # sse, sse2, pni = sse1,2,3 gfx extensions + # svm = AMD pacifica virtualization extensions + # vmx = Intel IVT (vanderpool) virtualization extensions + cpu_flags=$( echo "$cpu_flags" | gawk ' + BEGIN { + RS=" " + ssel["sse"] = 1 + ssel["sse2"] = 2 + ssel["pni"] = 3 + sses[1] = "sse" + sses[2] = "sse2" + sses[3] = "sse3" + } + /^(nx|lm|svm|vmx)$/ { + if (s) { + s = s " " $0 + } + else { + s = $0 + } + } + /^(sse2?|pni)$/ { + if (ssel[$0] > sse) { + sse = ssel[$0] + } + } + END { + if (sse) { + if (s) { + s = sses[sse] " " s + } + else { + s = sses[sse] + } + } + print s + }' ) + + #grep -oE '\<(nx|lm|sse[0-9]?|pni|svm|vmx)\>' | tr '\n' ' ')) + if [[ -z $cpu_flags ]];then + cpu_flags="-" + fi + echo "$cpu_flags" +} + +#### ------------------------------------------------------------------- +#### print and processing of output data +#### ------------------------------------------------------------------- + +#### MASTER PRINT FUNCTION - triggers all line item print functions +## main function to print out, master for all sub print functions. +print_it_out() +{ + # note that print_it_out passes local variable values on to its children, + # and in some cases, their children, with Lspci_Data + local Lspci_Data='' # only for verbose + + if [[ $B_SHOW_SHORT_OUTPUT == 'true' ]];then + print_short_data + else + Lspci_Data="$( get_lspci_data )" + if [[ $VERBOSITY_LEVEL -ge 1 || $B_SHOW_SYSTEM == 'true' ]];then + print_system_data + fi + if [[ $VERBOSITY_LEVEL -ge 1 || $B_SHOW_CPU == 'true' ]];then + print_cpu_data + fi + if [[ $VERBOSITY_LEVEL -ge 1 || $B_SHOW_GRAPHICS == 'true' ]];then + print_gfx_data + fi + if [[ $VERBOSITY_LEVEL -ge 5 || $B_SHOW_AUDIO == 'true' ]];then + print_audio_data + fi + if [[ $VERBOSITY_LEVEL -ge 2 || $B_SHOW_NETWORK == 'true' ]];then + print_networking_data + fi + if [[ $VERBOSITY_LEVEL -ge 1 || $B_SHOW_DISK == 'true' ]];then + print_hard_disk_data + fi + if [[ $VERBOSITY_LEVEL -ge 4 || $B_SHOW_PARTITIONS == 'true' ]];then + print_partition_data + fi + if [[ $VERBOSITY_LEVEL -ge 1 || $B_SHOW_INFO == 'true' ]];then + print_info_data + fi + fi +} + +#### SHORT OUTPUT PRINT FUNCTION, ie, verbosity 0 +# all the get data stuff is loaded here to keep execution time down for single line print commands +# these will also be loaded in each relevant print function for long output +print_short_data() +{ + local current_kernel=$( uname -rm ) # | gawk '{print $1,$3,$(NF-1)}' ) + local processes="$(( $( ps aux | wc -l ) - 1 ))" + local short_data='' i='' b_background_black='false' + local memory=$( get_memory_data ) + local up_time="$( get_uptime )" + + # set A_CPU_CORE_DATA + get_cpu_core_count + local cpc_plural='' cpu_count_print='' model_plural='' + local cpu_physical_count=${A_CPU_CORE_DATA[0]} + local cpu_core_count=${A_CPU_CORE_DATA[3]} + local cpu_core_alpha=${A_CPU_CORE_DATA[1]} + local cpu_type=${A_CPU_CORE_DATA[2]} + + if [[ $cpu_physical_count -gt 1 ]];then + cpc_plural='(s)' + model_plural='s' + cpu_count_print="$cpu_physical_count " + fi + + local cpu_data_string="${cpu_count_print}${cpu_core_alpha} core" +# local cpu_core_count=${A_CPU_CORE_DATA[0]} + + # load A_HDD_DATA + get_hdd_data_basic + ## note: if hdd_model is declared prior to use, whatever string you want inserted will + ## be inserted first. In this case, it's desirable to print out (x) before each disk found. + local a_hdd_data_count=$(( ${#A_HDD_DATA[@]} - 1 )) + IFS="," + local a_hdd_basic_working=( ${A_HDD_DATA[$a_hdd_data_count]} ) + IFS="$ORIGINAL_IFS" + local hdd_capacity=${a_hdd_basic_working[0]} + local hdd_used=${a_hdd_basic_working[1]} + + # load A_CPU_DATA + get_cpu_data + + IFS="," + local a_cpu_working=(${A_CPU_DATA[0]}) + IFS="$ORIGINAL_IFS" + local cpu_model="${a_cpu_working[0]}" + ## assemble data for output + local cpu_clock="${a_cpu_working[1]}" # old CPU3 + # this gets that weird min/max final array item + local min_max_clock_nu=$(( ${#A_CPU_DATA[@]} - 1 )) + local min_max_clock=${A_CPU_DATA[$min_max_clock_nu]} + + #set_color_scheme 12 + if [[ $B_RUNNING_IN_SHELL == 'false' ]];then + for i in $C1 $C2 $CN + do + case "$i" in + "$GREEN"|"$WHITE"|"$YELLOW"|"$CYAN") + b_background_black='true' + ;; + esac + done + if [[ $b_background_black == 'true' ]];then + for i in C1 C2 CN + do + ## these need to be in quotes, don't know why + if [[ ${!i} == $NORMAL ]];then + declare $i="${!i}15,1" + else + declare $i="${!i},1" + fi + done + #C1="${C1},1"; C2="${C2},1"; CN="${CN},1" + fi + fi + short_data="${C1}CPU$cpc_plural${CN}[${C2}${SEP1}${cpu_data_string} ${cpu_model}$model_plural (${cpu_type}) clocked at ${min_max_clock}${SEP1}${CN}] ${C1}Kernel${CN}[${C2}${SEP1}${current_kernel}${SEP1}${CN}] ${C1}Up${CN}[${C2}${SEP1}${up_time}${SEP1}${CN}] ${C1}Mem${CN}[${C2}${SEP1}${memory}${SEP1}${CN}] ${C1}HDD${CN}[${C2}${SEP1}${hdd_capacity}($hdd_used)${SEP1}${CN}] ${C1}Procs${CN}[${C2}${SEP1}${processes}${SEP1}${CN}]" + + if [[ $SHOW_IRC -gt 0 ]];then + short_data="${short_data} ${C1}Client${CN}[${C2}${SEP1}${IRC_CLIENT}${IRC_CLIENT_VERSION}${SEP1}${CN}]" + fi + short_data="${short_data} ${C1}$SCRIPT_NAME${C2}${CN}[${C2}${SEP1}$SCRIPT_VERSION_NUMBER${SEP1}${CN}]" + if [[ $SCHEME -gt 0 ]];then + short_data="${short_data} $NORMAL" + fi + print_screen_output "$short_data" +} + +#### LINE ITEM PRINT FUNCTIONS + +# print sound card data +print_audio_data() +{ + local i='' card_one='Card-1 ' audio_data='' a_audio_data='' port_data='' + local a_audio_working='' alsa_driver='' alsa_data='' port_plural='' module_version='' + # set A_AUDIO_DATA and get alsa data + get_audio_data + alsa_data=$( get_audio_alsa_data ) + IFS="," + a_audio_working=(${A_AUDIO_DATA[0]}) + IFS="$ORIGINAL_IFS" + + if [[ -n ${A_AUDIO_DATA[@]} ]];then + # slightly complicated because 2nd array item could be the alsa data + if [[ ${#A_AUDIO_DATA[@]} -le 1 ]];then + card_one='Card ' + fi + +# if [[ -n ${a_audio_working[2]} ]];then +# port_data=" ${C1}at port${C2} ${a_audio_working[2]}" +# fi + # this should only trigger if the $DIR_ASOUND_DEVICE data is used, not lspci -nn + if [[ -n ${a_audio_working[3]} && $B_EXTRA_DATA == 'true' ]];then + module_version=$( print_module_version "${a_audio_working[3]}" ) + fi + if [[ -n ${a_audio_working[1]} ]];then + alsa_driver=" ${C1}driver${C2} ${a_audio_working[1]}$module_version" + fi + if [[ -n ${a_audio_working[2]} && $B_EXTRA_DATA == 'true' ]];then + if [[ $( wc -w <<< ${a_audio_working[2]} ) -gt 1 ]];then + port_plural='s' + fi + port_data=" ${C1}at port$port_plural${C2} ${a_audio_working[2]}" + fi + audio_data="${C1}$card_one${C2}${a_audio_working[0]}$alsa_driver$port_data" + audio_data=$( create_print_line "Audio:" "$audio_data" ) + print_screen_output "$audio_data" + i=0 ## loop starts with 1 by auto-increment so it only shows cards > 1 + while [[ -n ${A_AUDIO_DATA[++i]} ]] + do + IFS="," + a_audio_working=( ${A_AUDIO_DATA[i]} ) + IFS="$ORIGINAL_IFS" + port_data='' + alsa_driver='' + port_plural='' + module_version='' + if [[ -n ${a_audio_working[3]} && $B_EXTRA_DATA == 'true' ]];then + module_version=$( print_module_version "${a_audio_working[3]}" ) + fi + # we're testing for the presence of the 2nd array item here, which is the driver name + if [[ -n ${a_audio_working[1]} ]];then + alsa_driver="${C1}driver${C2} ${a_audio_working[1]}" + fi + if [[ -n ${a_audio_working[2]} && $B_EXTRA_DATA == 'true' ]];then + if [[ $( wc -w <<< ${a_audio_working[2]} ) -gt 1 ]];then + port_plural='s' + fi + port_data=" ${C1}at port$port_plural${C2} ${a_audio_working[2]}" + fi + if [[ -n ${a_audio_working[0]} ]];then + audio_data="${C1}Card-$(( $i + 1 )) ${C2}${a_audio_working[0]}$alsa_driver$port_data" + fi + if [[ -n $audio_data ]];then + audio_data=$( create_print_line " " "$audio_data" ) + print_screen_output "$audio_data" + fi + done + # alsa driver data only prints out if sound card data is found + if [[ -n $alsa_data ]];then + audio_data="${C1}Sound: ${C2}$alsa_data" + audio_data=$( create_print_line " " "$audio_data" ) + print_screen_output "$audio_data" + fi + fi +} + +print_cpu_data() +{ + local cpu_data='' i='' cpu_clock_speed='' cpu_multi_clock_data='' + local bmip_data='' cpu_cache='' cpu_vendor='' cpu_flags='' + + ##print_screen_output "A_CPU_DATA[0]=\"${A_CPU_DATA[0]}\"" + # Array A_CPU_DATA always has one extra element: max clockfreq found. + # that's why its count is one more than you'd think from cores/cpus alone + # load A_CPU_DATA + get_cpu_data + + IFS="," + local a_cpu_working=(${A_CPU_DATA[0]}) + IFS="$ORIGINAL_IFS" + local cpu_model="${a_cpu_working[0]}" + ## assemble data for output + local cpu_clock="${a_cpu_working[1]}" + + cpu_vendor=${a_cpu_working[5]} + + # set A_CPU_CORE_DATA + get_cpu_core_count + local cpc_plural='' cpu_count_print='' model_plural='' + local cpu_physical_count=${A_CPU_CORE_DATA[0]} + local cpu_core_count=${A_CPU_CORE_DATA[3]} + local cpu_core_alpha=${A_CPU_CORE_DATA[1]} + local cpu_type=${A_CPU_CORE_DATA[2]} + + if [[ $cpu_physical_count -gt 1 ]];then + cpc_plural='(s)' + cpu_count_print="$cpu_physical_count " + model_plural='s' + fi + + local cpu_data_string="${cpu_count_print}${cpu_core_alpha} core" + # Strange (and also some expected) behavior encountered. If print_screen_output() uses $1 + # as the parameter to output to the screen, then passing " ${ARR[@]} " + # will output only and first element of ARR. That "@" splits in elements and "*" _doesn't_, + # is to be expected. However, that text2 is consecutively truncated is somewhat strange, so take note. + # This has been confirmed by #bash on freenode. + # The above mentioned only emerges when using the debugging markers below + ## print_screen_output "a_cpu_working=\"***${a_cpu_working[@]} $hostName+++++++\"----------" + + if [[ -z ${a_cpu_working[2]} ]];then + a_cpu_working[2]="unknown" + fi + + cpu_data=$( create_print_line "CPU$cpc_plural:" "${C1}${cpu_data_string}${C2} ${a_cpu_working[0]}$model_plural (${cpu_type})" ) + if [[ $VERBOSITY_LEVEL -ge 3 || $B_SHOW_CPU == 'true' ]];then + # update for multicore, bogomips x core count. + if [[ $B_EXTRA_DATA == 'true' ]];then +# if [[ $cpu_vendor != 'intel' ]];then + bmip_data=$( calculate_multicore_data "${a_cpu_working[4]}" "$(( $cpu_core_count * $cpu_physical_count ))" ) +# else +# bmip_data="${a_cpu_working[4]}" +# fi + bmip_data=" ${C1}bmips${C2} $bmip_data" + fi + ## note: this handles how intel reports L2, total instead of per core like AMD does + # note that we need to multiply by number of actual cpus here to get true cache size + if [[ $cpu_vendor != 'intel' ]];then + cpu_cache=$( calculate_multicore_data "${a_cpu_working[2]}" "$(( $cpu_core_count * $cpu_physical_count ))" ) + else + cpu_cache=$( calculate_multicore_data "${a_cpu_working[2]}" "$cpu_physical_count" ) + fi + # only print shortened list + if [[ $B_CPU_FLAGS_FULL != 'true' ]];then + cpu_flags=$( process_cpu_flags "${a_cpu_working[3]}" ) + cpu_flags=" ${C1}flags${C2} ($cpu_flags)" + fi + cpu_data="$cpu_data${C2} ${C1}cache${C2} $cpu_cache$cpu_flags$bmip_data${CN}" + fi + # we don't this printing out extra line unless > 1 cpu core + if [[ ${#A_CPU_DATA[@]} -gt 2 ]] && [[ $B_SHOW_CPU == 'true' || $VERBOSITY_LEVEL -ge 5 ]];then + cpu_clock_speed='' # null < verbosity level 5 + else + cpu_data="$cpu_data ${C1}clocked at${C2} ${a_cpu_working[1]} MHz${CN}" + fi + + cpu_data="$cpu_data $cpu_clock_speed" + print_screen_output "$cpu_data" + + # we don't this printing out extra line unless > 1 cpu core + if [[ ${#A_CPU_DATA[@]} -gt 2 ]] && [[ $B_SHOW_CPU == 'true' || $VERBOSITY_LEVEL -ge 5 ]];then + for (( i=0; i < ${#A_CPU_DATA[@]}-1; i++ )) + do + IFS="," + a_cpu_working=(${A_CPU_DATA[i]}) + IFS="$ORIGINAL_IFS" + cpu_multi_clock_data="$cpu_multi_clock_data ${C1}($(( i + 1 )))${C2} ${a_cpu_working[1]} MHz${CN}" + if [[ $i -gt 10 ]];then + break + fi + done + if [[ -n $cpu_multi_clock_data ]];then + cpu_multi_clock_data=$( create_print_line " " "${C1}Clock Speeds:${C2}$cpu_multi_clock_data" ) + print_screen_output "$cpu_multi_clock_data" + fi + fi + if [[ $B_CPU_FLAGS_FULL == 'true' ]];then + print_cpu_flags_full "${a_cpu_working[3]}" + fi +} + +# takes list of all flags, split them and prints x per line +# args: $1 - cpu flag string +print_cpu_flags_full() +{ + local cpu_flags_full="$1" a_cpu_flags='' line_starter='' + local i=0 counter=0 max_length=18 max_length_add=18 flag='' flag_data='' + + # build the flag line array + for flag in $cpu_flags_full + do + a_cpu_flags[$counter]="${a_cpu_flags[$counter]}$flag " + if [[ $i -ge $max_length ]];then + (( counter++ )) + max_length=$(( $max_length + $max_length_add )) + fi + ((i++)) + done + # then print it out + for (( i=0; i < ${#a_cpu_flags[@]};i++ )) + do + if [[ $i -eq 0 ]];then + line_starter="${C1}CPU Flags${C2} " + else + line_starter='' + fi + flag_data=$( create_print_line " " "$line_starter${a_cpu_flags[$i]}" ) + print_screen_output "$flag_data" + done +} + +print_gfx_data() +{ + local gfx_data='' i='' card_one='Card ' + local screen_resolution="$( get_graphics_res_data )" + local b_is_mesa='false' + + # set A_GFX_CARD_DATA + get_graphics_card_data + # set A_X_DATA + get_graphics_x_data + local x_vendor=${A_X_DATA[0]} + local x_version=${A_X_DATA[1]} + # set A_GLX_DATA + get_graphics_glx_data + local glx_renderer="${A_GLX_DATA[0]}" + local glx_version="${A_GLX_DATA[1]}" + # this can contain a long No case debugging message, so it's being sliced off + # note: using grep -ioE '(No|Yes)' <<< ${A_GLX_DATA[2]} did not work in Arch, no idea why + local glx_direct_render=$( gawk '{ + print $1 + }' <<< "${A_GLX_DATA[2]}" ) + + if [[ ${#A_GFX_CARD_DATA[@]} -gt 1 ]];then + i=1 + while [[ -n ${A_GFX_CARD_DATA[i]} && $i -le 3 ]] + do + gfx_data=" ${C1}Card-$(($i+1))${C2} ${A_GFX_CARD_DATA[i]}" + ((i++)) + done + card_one='Card-1 ' + fi + gfx_data=$( create_print_line "Graphics:" "${C1}$card_one${C2}${A_GFX_CARD_DATA[0]}${gfx_data}" ) + + if [[ $B_X_RUNNING == 'true' ]];then + gfx_data="${gfx_data} ${C1}$x_vendor${C2} $x_version ${C1}Res${C2} ${screen_resolution}" + else + gfx_data="${gfx_data} ${C1} tty resolution ${CN}(${C2} ${screen_resolution} ${CN})" + fi + print_screen_output "$gfx_data" + +# if [[ -z $glx_renderer || -z $glx_version ]];then +# b_is_mesa='true' +# fi + + ## note: if glx render or version have no content, then mesa is true + # if [[ $B_X_RUNNING == 'true' ]] && [[ $b_is_mesa != 'true' ]];then + if [[ $B_X_RUNNING == 'true' ]];then + gfx_data=$( create_print_line " " "${C1}GLX Renderer${C2} ${glx_renderer} ${C1}GLX Version${C2} ${glx_version}${CN}" ) + if [[ $B_HANDLE_CORRUPT_DATA == 'true' || $B_EXTRA_DATA == 'true' ]];then + gfx_data="$gfx_data ${C1}Direct Rendering${C2} ${glx_direct_render}${CN}" + fi + print_screen_output "$gfx_data" + fi +} + +print_hard_disk_data() +{ + local hdd_data='' hdd_data_2='' a_hdd_working='' + local dev_data='' size_data='' hdd_model='' hdd_model_2='' hdd_model_3='' usb_data='' + + # load A_HDD_DATA + get_hdd_data_basic + ## note: if hdd_model is declared prior to use, whatever string you want inserted will + ## be inserted first. In this case, it's desirable to print out (x) before each disk found. + local a_hdd_data_count=$(( ${#A_HDD_DATA[@]} - 1 )) + IFS="," + local a_hdd_basic_working=( ${A_HDD_DATA[$a_hdd_data_count]} ) + IFS="$ORIGINAL_IFS" + local hdd_capacity=${a_hdd_basic_working[0]} + local hdd_used=${a_hdd_basic_working[1]} + + if [[ $VERBOSITY_LEVEL -ge 3 ]] || [[ $B_SHOW_DISK == 'true' ]];then + ## note: the output part of this should be in the print hdd data function, not here + get_hard_drive_data_advanced + for (( i=0; i < ${#A_HDD_DATA[@]} - 1; i++ )) + do + # this adds the (x) numbering in front of each disk found, and creates the full disk string + IFS="," + a_hdd_working=( ${A_HDD_DATA[i]} ) + IFS="$ORIGINAL_IFS" + if [[ $B_SHOW_DISK == 'true' ]];then + if [[ -n ${a_hdd_working[3]} ]];then + usb_data="${a_hdd_working[3]} " + else + usb_data='' + fi + dev_data="/dev/${a_hdd_working[0]} " + size_data=" ${a_hdd_working[1]}" + fi + # wrap to avoid long lines + + if [[ $i -gt 1 && $B_SHOW_DISK == 'true' ]] || [[ $i -gt 3 ]];then + hdd_model_2="${hdd_model_2}${hdd_model_2+${C1}$(($i+1)):${C2}} $usb_data$dev_data${a_hdd_working[2]}$size_data " + else + hdd_model="${hdd_model}${hdd_model+ ${C1}$(($i+1)):${C2}} $usb_data$dev_data${a_hdd_working[2]}$size_data" + fi + done + if [[ -z $hdd_model ]];then + hdd_model=' None Detected' + fi + if [[ -n $hdd_model_2 ]];then + hdd_data=$( create_print_line "Disks:" "${C1}HDD${C2} ${C1}Total Size:${C2} ${hdd_capacity} (${hdd_used})${hdd_model}" ) + hdd_data_2=$( create_print_line " " "${hdd_model_2}${CN}" ) + else + hdd_data=$( create_print_line "Disks:" "${C1}HDD${C2} ${C1}Total Size:${C2} ${hdd_capacity} (${hdd_used})${hdd_model}${CN}" ) + fi + else + hdd_data=$( create_print_line "Disks:" "${C1}HDD Total Size:${C2} ${hdd_capacity} (${hdd_used})${CN}" ) + fi + print_screen_output "$hdd_data" + if [[ -n $hdd_model_2 ]];then + print_screen_output "$hdd_data_2" + fi +} + +print_info_data() +{ + local suggested_app="runlevel" + local info_data='' + local runlvl='' + local memory="$( get_memory_data )" + local processes="$(( $( ps aux | wc -l ) - 1 ))" + local up_time="$( get_uptime )" + + # Some code could look superfluous but BitchX doesn't like lines not ending in a newline. F*&k that bitch! + # long_last=$( echo -ne "${C1}Processes${C2} ${processes}${CN} | ${C1}Uptime${C2} ${up_time}${CN} | ${C1}Memory${C2} ${MEM}${CN}" ) + info_data=$( create_print_line "Info:" "${C1}Processes${C2} ${processes} ${C1}Uptime${C2} ${up_time} ${C1}Memory${C2} ${memory}${CN}" ) + + # this only triggers if no X data is present + if [[ $B_X_RUNNING != 'true' ]];then + if [[ -e $suggested_app ]];then + runlvl="$( runlevel | gawk '{ print $2 }' )" + info_data="${info_data} ${C1}Runlevel${C2} ${runlvl}${CN}" + fi + fi + + if [[ $SHOW_IRC -gt 0 ]];then + info_data="${info_data} ${C1}Client${C2} ${IRC_CLIENT}${IRC_CLIENT_VERSION}${CN}" + fi + info_data="${info_data} ${C1}$SCRIPT_NAME${C2} $SCRIPT_VERSION_NUMBER${CN}" + + if [[ $SCHEME -gt 0 ]];then + info_data="${info_data} ${NORMAL}" + fi + print_screen_output "$info_data" +} + +# args: $1 - module name (could be > 1, so loop it ) +print_module_version() +{ + local module_versions='' module='' version='' + + for module in $1 + do + version=$( get_module_version_number $module ) + if [[ -n $version ]];then + module_versions="$module_versions $version" + fi + done + + if [[ -n $module_versions ]];then + echo " ${C1}v:${C2}$module_versions" + fi +} + +print_networking_data() +{ + local i='' card_one='Card-1' network_data='' a_network_working='' port_data='' driver_data='' + local card_string='' port_plural='' module_version='' + # set A_NETWORK_DATA + get_networking_data + + IFS="," + a_network_working=(${A_NETWORK_DATA[0]}) + IFS="$ORIGINAL_IFS" + + # will never be null because null is handled in get_network_data, but in case we change + # that leaving this test in place. + if [[ -n ${A_NETWORK_DATA[@]} ]];then + if [[ ${#A_NETWORK_DATA[@]} -le 1 ]];then + card_one='Card' + fi + if [[ -n ${a_network_working[3]} && $B_EXTRA_DATA == 'true' ]];then + module_version=$( print_module_version "${a_network_working[3]}" ) + fi + if [[ -n ${a_network_working[1]} ]];then + driver_data=" ${C1}driver${C2} ${a_network_working[1]}$module_version" + fi + if [[ -n ${a_network_working[2]} && $B_EXTRA_DATA == 'true' ]];then + if [[ $( wc -w <<< ${a_network_working[2]} ) -gt 1 ]];then + port_plural='s' + fi + port_data=" ${C1}at port$port_plural${C2} ${a_network_working[2]}" + fi + card_string='' + network_data="${C1}$card_one${C2} ${a_network_working[0]}$driver_data$port_data" + network_data=$( create_print_line "Network:" "$network_data" ) + print_screen_output "$network_data" + i=0 ## loop starts with 1 by auto-increment so it only shows cards > 1 + while [[ -n ${A_NETWORK_DATA[++i]} ]] + do + IFS="," + a_network_working=( ${A_NETWORK_DATA[i]} ) + IFS="$ORIGINAL_IFS" + port_data='' + driver_data='' + port_plural='' + module_version='' + if [[ -n ${a_network_working[3]} && $B_EXTRA_DATA == 'true' ]];then + module_version=$( print_module_version "${a_network_working[3]}" ) + fi + if [[ -n ${a_network_working[1]} ]];then + driver_data=" ${C1}driver${C2} ${a_network_working[1]}$module_version" + fi + if [[ -n ${a_network_working[2]} && $B_EXTRA_DATA == 'true' ]];then + if [[ $( wc -w <<< ${a_network_working[2]} ) -gt 1 ]];then + port_plural='s' + fi + port_data=" ${C1}at port$port_plural${C2} ${a_network_working[2]}" + fi + network_data="${C1}Card-$(( $i + 1 )) ${C2}${a_network_working[0]}$driver_data$port_data" + network_data=$( create_print_line " " "$network_data" ) + print_screen_output "$network_data" + done + fi + if [[ $B_SHOW_IP == 'true' ]];then + print_networking_ip_data + fi +} + +print_networking_ip_data() +{ + local ip=$( get_networking_wan_ip_data ) + local ip_data='' a_interfaces_working='' interfaces='' interfaces_2='' i='' + + # set A_INTERFACES_DATA + get_networking_local_ip_data + # first print output for wan ip line. Null is handled in the get function + ip_data=$( create_print_line " " "${C1}Wan IP:${C2} $ip" ) + + # then create the list of local interface/ip + interfaces=" ${C1}Interface:${C2}" + i=0 ## loop starts with 1 by auto-increment so it only shows cards > 1 + while [[ -n ${A_INTERFACES_DATA[i]} ]] + do + IFS="," + a_interfaces_working=(${A_INTERFACES_DATA[i]}) + IFS="$ORIGINAL_IFS" + if [[ $i -lt 3 ]];then + if [[ -n ${a_interfaces_working[0]} ]];then + interfaces="$interfaces ${C1}${a_interfaces_working[0]}${C2} ${a_interfaces_working[1]}" + fi + else + if [[ -n ${a_interfaces_working[0]} ]];then + # space on end here for lining up with line starter + interfaces_2="$interfaces_2${C1}${a_interfaces_working[0]}${C2} ${a_interfaces_working[1]} " + fi + fi + ((i++)) + done + print_screen_output "$ip_data$interfaces" + # then wrap it if needed + if [[ -n $interfaces_2 ]];then + interfaces_2=$( create_print_line " " "$interfaces_2" ) + print_screen_output "$interfaces_2" + fi +} + +print_partition_data() +{ + local a_partition_working='' partition_used='' partition_data='' + local counter=0 line_max=160 i=0 a_partition_data='' line_starter='' + local partitionIdClean='' part_dev='' full_dev='' part_label='' full_label='' + local part_uuid='' full_uuid='' dev_remote='' + + # this handles the different, shorter, irc colors strings embedded in variable data + if [[ $B_RUNNING_IN_SHELL != 'true' ]];then + line_max=130 + fi + # and no color string data at all + if [[ $SCHEME -eq 0 ]];then + line_max=75 + fi + if [[ $B_SHOW_LABELS == 'true' || $B_SHOW_UUIDS == 'true' ]];then + line_max=20 + fi + + # set A_PARTITION_DATA + get_partition_data + + for (( i=0; i < ${#A_PARTITION_DATA[@]}; i++ )) + do + IFS="," + a_partition_working=(${A_PARTITION_DATA[i]}) + IFS="$ORIGINAL_IFS" + full_label='' + full_uuid='' + if [[ $B_SHOW_PARTITIONS_FULL == 'true' ]] || [[ ${a_partition_working[4]} == 'main' ]];then + if [[ -n ${a_partition_working[2]} ]];then + partition_used=" ${C1}used:${C2} ${a_partition_working[2]} (${a_partition_working[3]})" + else + partition_used='' # reset partition used to null + fi + + # don't show user names in output + if [[ $B_SHOW_LABELS == 'true' || $B_SHOW_UUIDS == 'true' ]];then + if [[ -n ${a_partition_working[5]} ]];then + if [[ -z $( grep -E '(^//|:/)' <<< ${a_partition_working[5]} ) ]];then + part_dev="/dev/${a_partition_working[5]}" + dev_remote='dev' + else + part_dev="${a_partition_working[5]}" + dev_remote='remote' + fi + else + dev_remote='dev' + part_dev='N/A' + fi + full_dev=" ${C1}$dev_remote:${C2} $part_dev" + if [[ $B_SHOW_LABELS == 'true' && $dev_remote != 'remote' ]];then + if [[ -n ${a_partition_working[6]} ]];then + part_label="${a_partition_working[6]}" + else + part_label='N/A' + fi + full_label=" ${C1}label:${C2} $part_label" + fi + if [[ $B_SHOW_UUIDS == 'true' && $dev_remote != 'remote' ]];then + if [[ -n ${a_partition_working[7]} ]];then + part_uuid="${a_partition_working[7]}" + else + part_uuid='N/A' + fi + full_uuid=" ${C1}uuid:${C2} $part_uuid" + fi + fi + partitionIdClean=$( sed -r 's|/home/(.*)/(.*)|/home/##/\2|' <<< ${a_partition_working[0]} ) + # because these lines can vary widely, using dynamic length handling here + a_partition_data[$counter]="${a_partition_data[$counter]}${C1}ID:${C2}$partitionIdClean ${C1}size:${C2} ${a_partition_working[1]}$partition_used$full_dev$full_label$full_uuid " + + if [[ $( wc -c <<< ${a_partition_data[$counter]} ) -gt $line_max ]];then + ((counter++)) + fi + fi + done + # print out all lines, line starter on first line + for (( i=0; i < ${#a_partition_data[@]};i++ )) + do + if [[ $i -eq 0 ]];then + line_starter='Partition:' + else + line_starter=' ' + fi + partition_data=$( create_print_line "$line_starter" "${a_partition_data[$i]}" ) + print_screen_output "$partition_data" + done +} + +print_system_data() +{ + local system_data='' bits='' + local host_name=$( hostname ) + local current_kernel=$( uname -rm ) # | gawk '{print $1,$3,$(NF-1)}' ) + local distro="$( get_distro_data )" + # check for 64 bit first + if [[ -n $( uname -m | grep -o 'x86_64' ) ]];then + bits="(64 bit)" + else + bits="(32 bit)" + fi + + if [[ $B_SHOW_HOST == 'true' ]];then + system_data=$( create_print_line "System:" "${C1}Host${C2} $host_name ${C1}Kernel${C2}" ) + else + system_data=$( create_print_line "System:" "${C1}Kernel${C2}" ) + fi + system_data="$system_data $current_kernel $bits ${C1}Distro${C2} $distro" + print_screen_output "$system_data" +} + +######################################################################## +#### SCRIPT EXECUTION +######################################################################## + +main $@ ## From the End comes the Beginning + +## note: this EOF is needed for smxi handling, this is what triggers the full download ok +###**EOF**### diff --git a/data/scripts/mpris b/data/scripts/mpris new file mode 100755 index 00000000..28c9fe6f --- /dev/null +++ b/data/scripts/mpris @@ -0,0 +1,47 @@ +#!/usr/bin/env perl +# Copyright 2009 Sebastian Goth seezer@roath.org +# +# Simple script to read metadata from mpris compatible mediaplayers via dbus. +# +# Run it like this: +# mpris amarok +# +# The script fills all fields exported by the player's dbusinterface. +# They are defined here: http://wiki.xmms2.xmms.se/wiki/MPRIS_Metadata +# +# To see which fields are actually available from your player, +# call something like this from a terminal: +# +# qdbus org.mpris.amarok /Player GetMetadata +# or +# qdbus org.mpris.vlc /Player GetMetadata +# etc. +# +# Every field is available in the data hash 'd' via +# $d{"NAME_OF_FIELD"} +# To edit the output just change the marked line accordingly. + +use strict; +my %d; + +if($#ARGV < 0) { + print STDERR "Usage: $0 playername\n"; + exit 1; +} + +die "Please don't use any special characters in playername." if($ARGV[0] =~ /[^\w\d_-]/); + +open(IN,"qdbus org.mpris.".$ARGV[0]." /Player GetMetadata|") or die "Couldn't get dbus result."; +while() { + $d{$1} = $2 if(/^([^:]+):\s+([^\n]+)/); +} +close IN; + +if(keys(%d)) { + +## change the following line to fit your needs ## +print "I'm listening to ".$d{"title"}." by ".$d{"artist"}; +################################################# + +print "\n"; +} diff --git a/dev-notes/obsolete/INSTALL.Qtopia b/dev-notes/obsolete/INSTALL.Qtopia deleted file mode 100644 index f00e4537..00000000 --- a/dev-notes/obsolete/INSTALL.Qtopia +++ /dev/null @@ -1,23 +0,0 @@ -Quassel IRC Mobile Edition - Installation Notes -=============================================== - -NOTE: QuasselTopia is currently broken. You will not be able to compile it. - -We assume that you are familiar with application development on the -Greenphone (or other Qtopia devices), so we won't go into detail here. - -The project file and related resources for QuasselTopia are to be found -in qtopia-build/. Set up your development environment as usual (i.e. have -the appropriate tools in $PATH and so on), and then: - -cd qtopia-build -qtopiamake -make - -This will build the binary called 'quasseltopia' in the build -directory. Then use the gph script to build and deploy the package: - -gph -p -gph -i - -This should create a package and start installation on the Greenphone. diff --git a/dev-notes/obsolete/README.Qtopia b/dev-notes/obsolete/README.Qtopia deleted file mode 100644 index 1ec1e8ea..00000000 --- a/dev-notes/obsolete/README.Qtopia +++ /dev/null @@ -1,42 +0,0 @@ -Quassel IRC for Qtopia - Release Notes -====================================== - -NOTE: QuasselTopia is currently mostly broken even if it happens to build! - -We provide a Quassel IRC client that can be run on mobile devices running -Trolltech's Qtopia. The name of this client version has not yet been -determined; we like QuasselTopia, Quassel IRC Mobile Edition or maybe -something else. We'll call it QuasselTopia here. - -QuasselTopia has only been tested with the Trolltech Greenphone. We sort of -rely on its features being available, and we assume a screensize of 240x320. -Of course, QuasselTopia might well run on other Qtopia-enabled devices as -well; it's just not tested yet. We will eventually support general Qtopia -devices as well. - -Note that QuasselTopia is just the client; it can't do IRC by -itself. You'll need a Quassel core running on some server or PC for -the phone to connect to. - -In its current state, QuasselTopia cannot do much except for -connecting to a core and displaying the buffers you are in. Oh, and -chatting of course. But you cannot change any settings, create/edit -identities or networks, you can't even connect to a network from the -Greenphone. So in order to test QuasselTopia, it's a good idea to have -a desktop Quassel client connected at the same time, so that you can -do these things from your PC. - -QuasselTopia thus is in a very early state, merely a proof of concept -rather than something for day-to-day use. It shows already though that -a mobile Quassel version is feasible and usable, and QuasselTopia will -evolve together with the desktop version. - -We still hope you have fun! - -Please refer to INSTALL.Qtopia for installation information. - -Thanks, -~ The Quassel IRC Team - - (Manuel Nickschas, Marcus Eggenberger, Marco Genise) - \ No newline at end of file diff --git a/dev-notes/obsolete/builtin_cmds.obsolete.cpp b/dev-notes/obsolete/builtin_cmds.obsolete.cpp deleted file mode 100644 index 5a9acf68..00000000 --- a/dev-notes/obsolete/builtin_cmds.obsolete.cpp +++ /dev/null @@ -1,112 +0,0 @@ -/*************************************************************************** - * Copyright (C) 2005/06 by The Quassel Team * - * devel@quassel-irc.org * - * * - * This program is free software; you can redistribute it and/or modify * - * it under the terms of the GNU General Public License as published by * - * the Free Software Foundation; either version 2 of the License, or * - * (at your option) any later version. * - * * - * This program is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * - * GNU General Public License for more details. * - * * - * You should have received a copy of the GNU General Public License * - * along with this program; if not, write to the * - * Free Software Foundation, Inc., * - * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * - ***************************************************************************/ - -#error THIS CODE IS OBSOLETE! - -/* We are keeping this for further reference only. - * This method of defining server commands sucked, but at least we have a quite complete list - * of commands here. - */ - -/** This macro marks strings as translateable for Qt's linguist tools */ -#define _(str) QT_TR_NOOP(str) - - -/** Defines the message codes according to RFCs 1495/281x. - * Named commands have a negative enum value. - */ - -BuiltinCmd builtins[] = { - { CMD_ADMIN, "admin", _("Get information about the administrator of a server."), - _("[server]"), _("server: Server"), 0, 0 }, - { CMD_AME, "ame", "", "", "", 0, 0 }, - { CMD_AMSG, "amsg", _("Send message to all channels of all connected servers."), - _("message"), _("message: Message to send"), 0, 0 }, - { CMD_AWAY, "away", _("Toggle away status."), - _("[-all] [message]"), _(" -all: Toggle status on all connected servers\n" - "message: Away message (away status is removed if no message is given)"), 0, 0 }, - { CMD_BAN, "ban", _("Ban a nickname or hostmask."), - _("[channel] [nick [nick ...]]"), _("channel: Channel for ban (current of empty)\n" - " nick: Nickname or hostmask. If no nicknames are given, /ban displays the current banlist."), 0, 0 }, - { CMD_CTCP, "ctcp", _("Send a CTCP message (Client-To-Client Protocol)"), - _("target type [args]"), _("target: Nick or channel to send CTCP to\n" - " type: CTCP Type (e.g. VERSION, PING, CHAT...)\n" - " args: Arguments for CTCP"), 0, 0 }, - { CMD_CYCLE, "cycle", "", "", "", 0, 0 }, - { CMD_DEHALFOP, "dehalfop", "", "", "", 0, 0 }, - { CMD_DEOP, "deop", "", "", "", 0, 0 }, - { CMD_DEVOICE, "devoice", "", "", "", 0, 0 }, - { CMD_DIE, "die", "", "", "", 0, 0 }, - { CMD_ERROR, "error", "", "", "", 0, 0 }, - { CMD_HALFOP, "halfop", "", "", "", 0, 0 }, - { CMD_INFO, "info", "", "", "", 0, 0 }, - { CMD_INVITE, "invite", "", "", "", 0, 0 }, - { CMD_ISON, "ison", "", "", "", 0, 0 }, - { CMD_JOIN, "join", "", "", "", 0, 0 }, - { CMD_KICK, "kick", "", "", "", 0, 0 }, - { CMD_KICKBAN, "kickban", "", "", "", 0, 0 }, - { CMD_KILL, "kill", "", "", "", 0, 0 }, - { CMD_LINKS, "links", "", "", "", 0, 0 }, - { CMD_LIST, "list", "", "", "", 0, 0 }, - { CMD_LUSERS, "lusers", "", "", "", 0, 0 }, - { CMD_ME, "me", "", "", "", 0, 0 }, - { CMD_MODE, "mode", "", "", "", 0, 0 }, - { CMD_MOTD, "motd", "", "", "", 0, 0 }, - { CMD_MSG, "msg", "", "", "", 0, 0 }, - { CMD_NAMES, "names", "", "", "", 0, 0 }, - { CMD_NICK, "nick", "", "", "", 0, 0 }, - { CMD_NOTICE, "notice", _("Send notice message to user."), - _("nick message"), _(" nick: user to send notice to\n" - "message: text to send"), 0, 0 }, - { CMD_OP, "op", "", "", "", 0, 0 }, - { CMD_OPER, "oper", "", "", "", 0, 0 }, - { CMD_PART, "part", "", "", "", 0, 0 }, - { CMD_PING, "ping", _("Ping a server."), - _("server1 [server2]"), _("server1: Server to ping\nserver2: Forward ping to this server"), 0, 0 }, - { CMD_PONG, "pong", "", "", "", 0, 0 }, - { CMD_PRIVMSG, "privmsg", "", "", "", 0, 0 }, - { CMD_QUERY, "query", "", "", "", 0, 0 }, - { CMD_QUIT, "quit", "", "", "", 0, 0 }, - { CMD_QUOTE, "quote", "", "", "", 0, 0 }, - { CMD_REHASH, "rehash", "", "", "", 0, 0 }, - { CMD_RESTART, "restart", "", "", "", 0, 0 }, - { CMD_SERVICE, "service", "", "", "", 0, 0 }, - { CMD_SERVLIST, "servlist", "", "", "", 0, 0 }, - { CMD_SQUERY, "squery", "", "", "", 0, 0 }, - { CMD_SQUIT, "squit", "", "", "", 0, 0 }, - { CMD_STATS, "stats", "", "", "", 0, 0 }, - { CMD_SUMMON, "summon", "", "", "", 0, 0 }, - { CMD_TIME, "time", "", "", "", 0, 0 }, - { CMD_TOPIC, "topic", "", "", "", 0, 0 }, - { CMD_TRACE, "trace", "", "", "", 0, 0 }, - { CMD_UNBAN, "unban", "", "", "", 0, 0 }, - { CMD_USERHOST, "userhost", "", "", "", 0, 0 }, - { CMD_USERS, "users", "", "", "", 0, 0 }, - { CMD_VERSION, "version", "", "", "", 0, 0 }, - { CMD_VOICE, "voice", "", "", "", 0, 0 }, - { CMD_WALLOPS, "wallops", "", "", "", 0, 0 }, - { CMD_WHO, "who", "", "", "", 0, 0 }, - { CMD_WHOIS, "whois", "", "", "", 0, 0 }, - { CMD_WHOWAS, "whowas", "", "", "", 0, 0 }, - - { 0, 0, 0, 0, 0, 0, 0 } -}; - - diff --git a/dev-notes/obsolete/paulk-mainwindow.ui b/dev-notes/obsolete/paulk-mainwindow.ui deleted file mode 100644 index 81022bff..00000000 --- a/dev-notes/obsolete/paulk-mainwindow.ui +++ /dev/null @@ -1,310 +0,0 @@ - - MainWindow - - - - 0 - 0 - 644 - 566 - - - - MainWindow - - - - - - 60 - 80 - 112 - 329 - - - - - 5 - 5 - 0 - 0 - - - - All Nets - - - - - 9 - - - 6 - - - - - - All Nets - - - - - QuakeNet - - - - Status - - - - - Channels - - - - #quassel - - - - - #quadaver - - - - - #lolage - - - - - - Queries - - - - - DCC - - - - - - IrcNet - - - - Status - - - - - - - - - - - - - 0 - 0 - 644 - 28 - - - - - Extensions - - - - - About - - - - - Views - - - - - - Settings - - - - - Connection - - - - - - - - - - - - - QuakeNet - - - 1 - - - - - 9 - - - 6 - - - - - - QuakeNet - - - - - Status - - - - - Channels - - - - #quassel - - - - - #quadaver - - - - - #faecherstadt ohne AE.. doh - - - - - - - - - - - Qt::DefaultContextMenu - - - Qt::LeftToRight - - - false - - - Qt::Vertical - - - Qt::ToolButtonTextUnderIcon - - - 2 - - - - - - - - 5 - 5 - 0 - 0 - - - - IrcNet - - - 1 - - - - - 9 - - - 6 - - - - - - IrcNet - - - - - Status - - - - - Channels - - - - #quassel - - - - - #quadaver - - - - - #faecherstadt ohne AE.. doh - - - - - - - - - - - ../../../../screenshot.png - - - kickUser - - - - - setAway - - - - - All Nets - - - - - Nets - - - - - - diff --git a/dev-notes/obsolete/qtopia/bufferviewwidget.cpp b/dev-notes/obsolete/qtopia/bufferviewwidget.cpp deleted file mode 100644 index 4ee2c989..00000000 --- a/dev-notes/obsolete/qtopia/bufferviewwidget.cpp +++ /dev/null @@ -1,61 +0,0 @@ -/*************************************************************************** - * Copyright (C) 2005-08 by the Quassel Project * - * devel@quassel-irc.org * - * * - * 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) version 3. * - * * - * This program is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * - * GNU General Public License for more details. * - * * - * You should have received a copy of the GNU General Public License * - * along with this program; if not, write to the * - * Free Software Foundation, Inc., * - * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * - ***************************************************************************/ - -#include "bufferviewwidget.h" -#include "client.h" -#include "buffermodel.h" - - -BufferViewWidget::BufferViewWidget(QWidget *parent) : QDialog(parent) { - ui.setupUi(this); - setModal(true); - //setStyleSheet("background-color: rgb(220, 220, 255, 70%); color: rgb(0, 0, 0); font-size: 5pt;"); - //ui.tabWidget->tabBar()->setStyleSheet("font-size: 5pt;"); - - // get rid of the default tab page designer forces upon us :( - QWidget *w = ui.tabWidget->widget(0); - ui.tabWidget->removeTab(0); - delete w; - - addPage(tr("All"), BufferViewFilter::AllNets, QList()); - addPage(tr("Chans"), BufferViewFilter::AllNets|BufferViewFilter::NoQueries|BufferViewFilter::NoServers, QList()); - addPage(tr("Queries"), BufferViewFilter::AllNets|BufferViewFilter::NoChannels|BufferViewFilter::NoServers, QList()); - addPage(tr("Nets"), BufferViewFilter::AllNets|BufferViewFilter::NoChannels|BufferViewFilter::NoQueries, QList()); - - // this sometimes deadlocks, so we have to hide the dialog from the outside: - //connect(Client::bufferModel()->standardSelectionModel(), SIGNAL(currentChanged(const QModelIndex &, const QModelIndex &)), this, SLOT(accept())); -} - -BufferViewWidget::~BufferViewWidget() { - - -} - -void BufferViewWidget::addPage(const QString &title, const BufferViewFilter::Modes &mode, const QList &nets) { - BufferView *view = new BufferView(ui.tabWidget); - view->setStyleSheet("background-color: rgb(220, 220, 255, 70%); color: rgb(0, 0, 0); font-size: 5pt;"); - view->setFilteredModel(Client::bufferModel(), mode, nets); - Client::bufferModel()->synchronizeView(view); - ui.tabWidget->addTab(view, title); -} - -void BufferViewWidget::accept() { - QDialog::accept(); -} diff --git a/dev-notes/obsolete/qtopia/bufferviewwidget.h b/dev-notes/obsolete/qtopia/bufferviewwidget.h deleted file mode 100644 index 4aa0adf7..00000000 --- a/dev-notes/obsolete/qtopia/bufferviewwidget.h +++ /dev/null @@ -1,44 +0,0 @@ -/*************************************************************************** - * Copyright (C) 2005-08 by the Quassel Project * - * devel@quassel-irc.org * - * * - * 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) version 3. * - * * - * This program is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * - * GNU General Public License for more details. * - * * - * You should have received a copy of the GNU General Public License * - * along with this program; if not, write to the * - * Free Software Foundation, Inc., * - * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * - ***************************************************************************/ - -#ifndef _BUFFERVIEWWIDGET_H_ -#define _BUFFERVIEWWIDGET_H_ - -#include "ui_bufferviewwidget.h" - -#include "bufferview.h" - -class BufferViewWidget : public QDialog { - Q_OBJECT - - - public: - BufferViewWidget(QWidget *parent = 0); - virtual ~BufferViewWidget(); - - virtual void accept(); - - private: - void addPage(const QString &title, const BufferViewFilter::Modes &mode, const QList &nets); - Ui::BufferViewWidget ui; - -}; - -#endif diff --git a/dev-notes/obsolete/qtopia/chatline.cpp b/dev-notes/obsolete/qtopia/chatline.cpp deleted file mode 100644 index 0a709c03..00000000 --- a/dev-notes/obsolete/qtopia/chatline.cpp +++ /dev/null @@ -1,70 +0,0 @@ -/*************************************************************************** - * Copyright (C) 2005-08 by the Quassel Project * - * devel@quassel-irc.org * - * * - * 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) version 3. * - * * - * This program is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * - * GNU General Public License for more details. * - * * - * You should have received a copy of the GNU General Public License * - * along with this program; if not, write to the * - * Free Software Foundation, Inc., * - * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * - ***************************************************************************/ - -#include - -#include "chatline.h" -#include "qtopiaui.h" -#include "qtopiauistyle.h" - -ChatLine::ChatLine(Message msg) { - _styledSender = QtopiaUi::style()->styleString(msg.formattedSender()); - _styledContents = QtopiaUi::style()->styleString(msg.formattedText()); - _timestamp = msg.timestamp(); - _msgId = msg.msgId(); - _bufferInfo = msg.bufferInfo(); - - -} - -QString ChatLine::sender() const { - return _sender; -} - -QString ChatLine::text() const { - return _text; -} - -MsgId ChatLine::msgId() const { - return _msgId; -} - -BufferInfo ChatLine::bufferInfo() const { - return _bufferInfo; -} - -QDateTime ChatLine::timestamp() const { - return _timestamp; -} - -UiStyle::StyledText ChatLine::styledSender() const { - return _styledSender; -} - -UiStyle::StyledText ChatLine::styledContents() const { - return _styledContents; -} - - - -QString ChatLine::formattedToHtml(const QString &f) { - - return f; -} diff --git a/dev-notes/obsolete/qtopia/chatline.h b/dev-notes/obsolete/qtopia/chatline.h deleted file mode 100644 index bdaf7d41..00000000 --- a/dev-notes/obsolete/qtopia/chatline.h +++ /dev/null @@ -1,51 +0,0 @@ -/*************************************************************************** - * Copyright (C) 2005-08 by the Quassel Project * - * devel@quassel-irc.org * - * * - * 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) version 3. * - * * - * This program is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * - * GNU General Public License for more details. * - * * - * You should have received a copy of the GNU General Public License * - * along with this program; if not, write to the * - * Free Software Foundation, Inc., * - * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * - ***************************************************************************/ - -#ifndef _CHATLINE_H_ -#define _CHATLINE_H_ - -#include "quasselui.h" -#include "uistyle.h" - -class ChatLine : public AbstractUiMsg { - - public: - ChatLine(Message msg); - QString sender() const; - QString text() const; - MsgId msgId() const; - BufferInfo bufferInfo() const; - QDateTime timestamp() const; - - UiStyle::StyledText styledSender() const; - UiStyle::StyledText styledContents() const; - - private: - QString _sender, _text, _htmlSender, _htmlText, _htmlTimestamp; - UiStyle::StyledText _styledSender, _styledContents; - MsgId _msgId; - BufferInfo _bufferInfo; - QDateTime _timestamp; - - QString formattedToHtml(const QString &); - -}; - -#endif diff --git a/dev-notes/obsolete/qtopia/chatwidget.cpp b/dev-notes/obsolete/qtopia/chatwidget.cpp deleted file mode 100644 index b6950c64..00000000 --- a/dev-notes/obsolete/qtopia/chatwidget.cpp +++ /dev/null @@ -1,97 +0,0 @@ -/*************************************************************************** - * Copyright (C) 2005-08 by the Quassel Project * - * devel@quassel-irc.org * - * * - * 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) version 3. * - * * - * This program is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * - * GNU General Public License for more details. * - * * - * You should have received a copy of the GNU General Public License * - * along with this program; if not, write to the * - * Free Software Foundation, Inc., * - * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * - ***************************************************************************/ - -#include -#include -#include "chatwidget.h" - -ChatWidget::ChatWidget(QWidget *parent) : QTextEdit(parent), AbstractChatView() { - setStyleSheet("background-color: rgba(255, 255, 255, 60%)"); - setTextInteractionFlags(Qt::TextBrowserInteraction); -} - -void ChatWidget::setContents(const QList &lines) { - clear(); - QList list; - foreach(AbstractUiMsg *msg, lines) list << static_cast(msg); - appendChatLines(list); - -} - -void ChatWidget::prependMsg(AbstractUiMsg *msg) { - ChatLine *line = static_cast(msg); - Q_ASSERT(line); - prependChatLine(line); -} - -void ChatWidget::appendMsg(AbstractUiMsg *msg) { - ChatLine *line = static_cast(msg); - Q_ASSERT(line); - appendChatLine(line); -} - -void ChatWidget::appendChatLine(ChatLine *line) { - QTextCursor cursor = textCursor(); - moveCursor(QTextCursor::End); - if(!document()->isEmpty()) insertPlainText("\n"); - insertStyledText(line->styledSender()); - insertPlainText(" "); - insertStyledText(line->styledContents()); - setTextCursor(cursor); -} - -void ChatWidget::appendChatLines(QList list) { - foreach(ChatLine *line, list) { - appendChatLine(line); - } -} - -void ChatWidget::prependChatLine(ChatLine *line) { - QTextCursor cursor = textCursor(); - moveCursor(QTextCursor::Start); - bool flg = document()->isEmpty(); - insertStyledText(line->styledSender()); - insertPlainText(" "); - insertStyledText(line->styledContents()); - if(!flg) insertPlainText("\n"); - setTextCursor(cursor); -} - -void ChatWidget::prependChatLines(QList list) { - foreach(ChatLine *line, list) { - prependChatLine(line); - } -} - -void ChatWidget::insertChatLine(ChatLine *line) { - if(!document()->isEmpty()) insertPlainText("\n"); - insertStyledText(line->styledSender()); - insertPlainText(" "); - insertStyledText(line->styledContents()); -} - -void ChatWidget::insertStyledText(const QtopiaUiStyle::StyledText &stext) { - QTextCursor cursor = textCursor(); - foreach(QTextLayout::FormatRange format, stext.formatList) { - cursor.setCharFormat(format.format); - setTextCursor(cursor); - insertPlainText(stext.plainText.mid(format.start, format.length)); - } -} diff --git a/dev-notes/obsolete/qtopia/chatwidget.h b/dev-notes/obsolete/qtopia/chatwidget.h deleted file mode 100644 index 3e1b37ab..00000000 --- a/dev-notes/obsolete/qtopia/chatwidget.h +++ /dev/null @@ -1,53 +0,0 @@ -/*************************************************************************** - * Copyright (C) 2005-08 by the Quassel Project * - * devel@quassel-irc.org * - * * - * 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) version 3. * - * * - * This program is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * - * GNU General Public License for more details. * - * * - * You should have received a copy of the GNU General Public License * - * along with this program; if not, write to the * - * Free Software Foundation, Inc., * - * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * - ***************************************************************************/ - -#ifndef CHATWIDGET_H_ -#define CHATWIDGET_H_ - -#include - -#include "abstractbuffercontainer.h" -#include "chatline.h" -#include "qtopiauistyle.h" -#include "quasselui.h" - -class ChatWidget : public QTextEdit, public AbstractChatView { - Q_OBJECT - - public: - ChatWidget(QWidget *parent = 0); - - public slots: - void setContents(const QList &); - void appendMsg(AbstractUiMsg *); - void prependMsg(AbstractUiMsg *); - - void prependChatLine(ChatLine *); - void appendChatLine(ChatLine *); - void prependChatLines(QList); - void appendChatLines(QList); - - private: - void insertChatLine(ChatLine *); - void insertStyledText(const QtopiaUiStyle::StyledText &); - -}; - -#endif diff --git a/dev-notes/obsolete/qtopia/coreconnectdlg.cpp b/dev-notes/obsolete/qtopia/coreconnectdlg.cpp deleted file mode 100644 index 9f09d918..00000000 --- a/dev-notes/obsolete/qtopia/coreconnectdlg.cpp +++ /dev/null @@ -1,378 +0,0 @@ -/*************************************************************************** - * Copyright (C) 2005-08 by the Quassel Project * - * devel@quassel-irc.org * - * * - * 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) version 3. * - * * - * This program is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * - * GNU General Public License for more details. * - * * - * You should have received a copy of the GNU General Public License * - * along with this program; if not, write to the * - * Free Software Foundation, Inc., * - * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * - ***************************************************************************/ -#define DEVELMODE -#include -#include - -#include "coreconnectdlg.h" -#include "client.h" -#include "clientsettings.h" -#include "clientsyncer.h" -#include "global.h" - -CoreConnectDlg::CoreConnectDlg(QWidget *parent, bool /*doAutoConnect*/) : QDialog(parent) { - ui.setupUi(this); - - setAttribute(Qt::WA_DeleteOnClose); - setModal(true); - - clientSyncer = new ClientSyncer(this); - connect(clientSyncer, SIGNAL(socketStateChanged(QAbstractSocket::SocketState)),this, SLOT(initPhaseSocketState(QAbstractSocket::SocketState))); - connect(clientSyncer, SIGNAL(connectionError(const QString &)), this, SLOT(initPhaseError(const QString &))); - connect(clientSyncer, SIGNAL(connectionMsg(const QString &)), this, SLOT(initPhaseMsg(const QString &))); - connect(clientSyncer, SIGNAL(startLogin()), this, SLOT(startLogin())); - connect(clientSyncer, SIGNAL(loginFailed(const QString &)), this, SLOT(loginFailed(const QString &))); - connect(clientSyncer, SIGNAL(loginSuccess()), this, SLOT(startSync())); - //connect(clientSyncer, SIGNAL(startCoreSetup(const QVariantList &)), this, SLOT(startCoreConfig(const QVariantList &))); - - QMenu *menu = new QMenu(this); - newAccAction = new QAction(QIcon(":icon/new"), tr("New"), this); - delAccAction = new QAction(QIcon(":icon/trash"), tr("Delete"), this); - editAccAction = new QAction(QIcon(":icon/settings"), tr("Properties..."), this); - menu->addAction(newAccAction); - menu->addAction(delAccAction); - menu->addAction(editAccAction); - QSoftMenuBar::addMenuTo(this, menu); - QSoftMenuBar::setCancelEnabled(this, true); - ui.newAccount->setDefaultAction(newAccAction); - ui.delAccount->setDefaultAction(delAccAction); - ui.editAccount->setDefaultAction(editAccAction); - connect(newAccAction, SIGNAL(triggered()), this, SLOT(createAccount())); - connect(delAccAction, SIGNAL(triggered()), this, SLOT(removeAccount())); - connect(editAccAction, SIGNAL(triggered()), this, SLOT(editAccount())); - connect(ui.accountList, SIGNAL(itemSelectionChanged()), this, SLOT(setWidgetStates())); - connect(ui.doConnect, SIGNAL(clicked()), this, SLOT(doConnect())); - - ui.accountList->setSelectionMode(QAbstractItemView::SingleSelection); - ui.accountList->setSortingEnabled(true); - - CoreAccountSettings s; - AccountId lastacc = s.lastAccount(); - autoConnectAccount = s.autoConnectAccount(); - QListWidgetItem *currentItem = 0; - foreach(AccountId id, s.knownAccounts()) { - if(!id.isValid()) continue; - QVariantMap data = s.retrieveAccountData(id); - accounts[id] = data; - QListWidgetItem *item = new QListWidgetItem(data["AccountName"].toString(), ui.accountList); - item->setData(Qt::UserRole, QVariant::fromValue(id)); - if(id == lastacc) currentItem = item; - } - if(currentItem) ui.accountList->setCurrentItem(currentItem); - else ui.accountList->setCurrentRow(0); - setWidgetStates(); -#ifdef DEVELMODE - doConnect(); // shortcut for development -#endif -} - -CoreConnectDlg::~CoreConnectDlg() { - //qDebug() << "destroy"; -} - -void CoreConnectDlg::setWidgetStates() { - editAccAction->setEnabled(ui.accountList->selectedItems().count()); - delAccAction->setEnabled(ui.accountList->selectedItems().count()); - ui.doConnect->setEnabled(ui.accountList->selectedItems().count()); -} - -void CoreConnectDlg::createAccount() { - QStringList existing; - for(int i = 0; i < ui.accountList->count(); i++) existing << ui.accountList->item(i)->text(); - CoreAccountEditDlg dlg(0, QVariantMap(), existing, this); - if(dlg.exec() == QDialog::Accepted) { - // find free ID - AccountId id = accounts.count() + 1; - for(AccountId i = 1; i <= accounts.count(); i++) { - if(!accounts.keys().contains(i)) { - id = i; - break; - } - } - QVariantMap data = dlg.accountData(); - data["AccountId"] = QVariant::fromValue(id); - accounts[id] = data; - CoreAccountSettings s; - s.storeAccountData(id, data); - QListWidgetItem *item = new QListWidgetItem(data["AccountName"].toString(), ui.accountList); - item->setData(Qt::UserRole, QVariant::fromValue(id)); - ui.accountList->setCurrentItem(item); - } -} - -void CoreConnectDlg::editAccount() { - QStringList existing; - for(int i = 0; i < ui.accountList->count(); i++) existing << ui.accountList->item(i)->text(); - AccountId id = ui.accountList->currentItem()->data(Qt::UserRole).value(); - QVariantMap acct = accounts[id]; - CoreAccountEditDlg dlg(id, acct, existing, this); - if(dlg.exec() == QDialog::Accepted) { - QVariantMap data = dlg.accountData(); - ui.accountList->currentItem()->setText(data["AccountName"].toString()); - accounts[id] = data; - CoreAccountSettings s; - s.storeAccountData(id, data); - } -} - -void CoreConnectDlg::removeAccount() { - AccountId id = ui.accountList->currentItem()->data(Qt::UserRole).value(); - int ret = QMessageBox::question(this, tr("Remove Account Settings"), - tr("Do you really want to remove your local settings for this Quassel Core account?
" - "Note: This will not remove or change any data on the Core itself!"), - QMessageBox::Yes|QMessageBox::No, QMessageBox::No); - if(ret == QMessageBox::Yes) { - int idx = ui.accountList->currentRow(); - delete ui.accountList->takeItem(idx); - ui.accountList->setCurrentRow(qMin(idx, ui.accountList->count()-1)); - CoreAccountSettings s; - s.removeAccount(id); - setWidgetStates(); - } -} - -void CoreConnectDlg::doConnect() { - // save accounts - CoreAccountSettings s; - foreach(QVariantMap acct, accounts.values()) { - AccountId id = acct["AccountId"].value(); - if(acct.contains("Delete")) { - s.removeAccount(id); - } else { - s.storeAccountData(id, acct); - } - } - s.setAutoConnectAccount(autoConnectAccount); - - //ui.stackedWidget->setCurrentWidget(ui.loginPage); - account = ui.accountList->currentItem()->data(Qt::UserRole).value(); - accountData = accounts[account]; - s.setLastAccount(account); - - clientSyncer->connectToCore(accountData); -// qDebug() << "logging in " << accountData["User"].toString() << accountData["Password"].toString(); -// clientSyncer->loginToCore(accountData["User"].toString(), accountData["Password"].toString()); -// qDebug() << "logged in"; - //connectToCore(); - //if(!ui.accountList->selectedItems().count()) return; -// AccountSettings s; -// QVariantMap connInfo; // = s.value(acc, "AccountData").toMap(); - //connInfo["AccountName"] = acc; - - progressDlg = new CoreConnectProgressDlg(clientSyncer, this); - connect(progressDlg, SIGNAL(accepted()), this, SLOT(connectionSuccess())); - connect(progressDlg, SIGNAL(rejected()), this, SLOT(connectionFailure())); - progressDlg->showMaximized(); - // progressDlg->connectToCore(connInfo); -} - -void CoreConnectDlg::initPhaseError(const QString &error) { - qDebug() << "connection error:" << error; -} - -void CoreConnectDlg::initPhaseMsg(const QString &msg) { - -} - -void CoreConnectDlg::initPhaseSocketState(QAbstractSocket::SocketState state) { - /* - QString s; - QString host = accountData["Host"].toString(); - switch(state) { - case QAbstractSocket::UnconnectedState: s = tr("Not connected to %1.").arg(host); break; - case QAbstractSocket::HostLookupState: s = tr("Looking up %1...").arg(host); break; - case QAbstractSocket::ConnectingState: s = tr("Connecting to %1...").arg(host); break; - case QAbstractSocket::ConnectedState: s = tr("Connected to %1").arg(host); break; - default: s = tr("Unknown connection state to %1"); break; - } - ui.connectLabel->setText(s); - */ -} - -void CoreConnectDlg::restartPhaseNull() { - clientSyncer->disconnectFromCore(); -} - -/********************************************************* - * Phase Two: Login - *********************************************************/ - -void CoreConnectDlg::startLogin() { - clientSyncer->loginToCore(accountData["User"].toString(), accountData["Password"].toString()); -} - - -void CoreConnectDlg::loginFailed(const QString &error) { - -} - -void CoreConnectDlg::startSync() { - - -} - - -void CoreConnectDlg::connectionSuccess() { - /* - if(progressDlg->isConnected()) { - progressDlg->deleteLater(); - accept(); - } else { - connectionFailure(); - } - */ - accept(); -} - -void CoreConnectDlg::connectionFailure() { - progressDlg->deleteLater(); - Client::instance()->disconnectFromCore(); -} - -QVariant CoreConnectDlg::getCoreState() { -// return coreState; -} - - -/****************************************************************************************************/ - -CoreAccountEditDlg::CoreAccountEditDlg(AccountId id, const QVariantMap &acct, const QStringList &_existing, QWidget *parent) : QDialog(parent), account(acct) { - ui.setupUi(this); - setModal(true); - showMaximized(); - - existing = _existing; - account = acct; - if(id.isValid()) { - existing.removeAll(acct["AccountName"].toString()); - ui.hostEdit->setText(acct["Host"].toString()); - ui.port->setValue(acct["Port"].toUInt()); - ui.accountEdit->setText(acct["AccountName"].toString()); - ui.userEdit->setText(acct["User"].toString()); - ui.passwdEdit->setText(acct["Password"].toString()); - ui.hostEdit->setFocus(); - } else { - ui.port->setValue(Global::defaultPort); - ui.accountEdit->setFocus(); - setWindowTitle(tr("Add Core Account")); - } -} - -QVariantMap CoreAccountEditDlg::accountData() { - account["AccountName"] = ui.accountEdit->text().trimmed(); - account["Host"] = ui.hostEdit->text().trimmed(); - account["Port"] = ui.port->value(); - account["User"] = ui.userEdit->text(); - account["Password"] = ui.passwdEdit->text(); - return account; -} - -void CoreAccountEditDlg::accept() { - if(ui.userEdit->text().isEmpty() || ui.hostEdit->text().isEmpty() || ui.accountEdit->text().isEmpty()) { - int res = QMessageBox::warning(this, tr("Missing information"), - tr("Please enter all required information or discard changes to return to account selection."), - QMessageBox::Discard|QMessageBox::Retry); - if(res != QMessageBox::Retry) reject(); - return; - } - - if(existing.contains(ui.accountEdit->text())) { - int res = QMessageBox::warning(this, tr("Non-unique account name"), - tr("Account names need to be unique. Please enter a different name or discard all changes to " - "return to account selection."), - QMessageBox::Discard|QMessageBox::Retry); - if(res != QMessageBox::Retry) reject(); - ui.accountEdit->setSelection(0, ui.accountEdit->text().length()); - ui.accountEdit->setFocus(); - return; - } - QDialog::accept(); -} - -/********************************************************************************************/ - -CoreConnectProgressDlg::CoreConnectProgressDlg(ClientSyncer *clientSyncer, QDialog *parent) : QDialog(parent) { - ui.setupUi(this); - - setModal(true); - - connect(clientSyncer, SIGNAL(sessionProgress(quint32, quint32)), this, SLOT(coreSessionProgress(quint32, quint32))); - connect(clientSyncer, SIGNAL(networksProgress(quint32, quint32)), this, SLOT(coreNetworksProgress(quint32, quint32))); - connect(clientSyncer, SIGNAL(channelsProgress(quint32, quint32)), this, SLOT(coreChannelsProgress(quint32, quint32))); - connect(clientSyncer, SIGNAL(ircUsersProgress(quint32, quint32)), this, SLOT(coreIrcUsersProgress(quint32, quint32))); - connect(clientSyncer, SIGNAL(syncFinished()), this, SLOT(syncFinished())); - - ui.sessionProgress->setRange(0, 1); - ui.sessionProgress->setValue(0); - ui.networksProgress->setRange(0, 1); - ui.networksProgress->setValue(0); - ui.channelsProgress->setRange(0, 1); - ui.channelsProgress->setValue(0); - ui.ircUsersProgress->setRange(0, 1); - ui.ircUsersProgress->setValue(0); -} - -void CoreConnectProgressDlg::coreSessionProgress(quint32 val, quint32 max) { - ui.sessionProgress->setRange(0, max); - ui.sessionProgress->setValue(val); - -} - -void CoreConnectProgressDlg::coreNetworksProgress(quint32 val, quint32 max) { - if(max == 0) { - ui.networksProgress->setFormat("0/0"); - ui.networksProgress->setRange(0, 1); - ui.networksProgress->setValue(1); - } else { - ui.networksProgress->setFormat("%v/%m"); - ui.networksProgress->setRange(0, max); - ui.networksProgress->setValue(val); - } -} - -void CoreConnectProgressDlg::coreChannelsProgress(quint32 val, quint32 max) { - if(max == 0) { - ui.channelsProgress->setFormat("0/0"); - ui.channelsProgress->setRange(0, 1); - ui.channelsProgress->setValue(1); - } else { - ui.channelsProgress->setFormat("%v/%m"); - ui.channelsProgress->setRange(0, max); - ui.channelsProgress->setValue(val); - } -} - -void CoreConnectProgressDlg::coreIrcUsersProgress(quint32 val, quint32 max) { - if(max == 0) { - ui.ircUsersProgress->setFormat("0/0"); - ui.ircUsersProgress->setRange(0, 1); - ui.ircUsersProgress->setValue(1); - } else { - if(val % 100) return; - ui.ircUsersProgress->setFormat("%v/%m"); - ui.ircUsersProgress->setRange(0, max); - ui.ircUsersProgress->setValue(val); - } -} - -void CoreConnectProgressDlg::syncFinished() { - accept(); -} - diff --git a/dev-notes/obsolete/qtopia/coreconnectdlg.h b/dev-notes/obsolete/qtopia/coreconnectdlg.h deleted file mode 100644 index 36ce26f1..00000000 --- a/dev-notes/obsolete/qtopia/coreconnectdlg.h +++ /dev/null @@ -1,122 +0,0 @@ -/*************************************************************************** - * Copyright (C) 2005-08 by the Quassel Project * - * devel@quassel-irc.org * - * * - * 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) version 3. * - * * - * This program is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * - * GNU General Public License for more details. * - * * - * You should have received a copy of the GNU General Public License * - * along with this program; if not, write to the * - * Free Software Foundation, Inc., * - * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * - ***************************************************************************/ - -#ifndef _CORECONNECTDLG_H -#define _CORECONNECTDLG_H - -#include - -#include "types.h" - -#include "ui_coreconnectdlg.h" -#include "ui_coreconnectprogressdlg.h" -#include "ui_coreaccounteditdlg.h" - -class ClientSyncer; -class CoreConnectProgressDlg; - -class CoreConnectDlg : public QDialog { - Q_OBJECT - - public: - CoreConnectDlg(QWidget *parent = 0, bool doAutoConnect = false); - ~CoreConnectDlg(); - QVariant getCoreState(); - - private slots: - void createAccount(); - void removeAccount(); - void editAccount(); - void setWidgetStates(); - void doConnect(); - void connectionSuccess(); - void connectionFailure(); - - /*** Phase One: Connection ***/ - - void restartPhaseNull(); - void initPhaseError(const QString &error); - void initPhaseMsg(const QString &msg); - void initPhaseSocketState(QAbstractSocket::SocketState); - - /*** Phase Two: Login ***/ - void startLogin(); - void loginFailed(const QString &); - - /*** Phase Three: Sync ***/ - void startSync(); - - private: - Ui::CoreConnectDlg ui; - ClientSyncer *clientSyncer; - - AccountId autoConnectAccount; - QHash accounts; - QVariantMap accountData; - AccountId account; - - void editAccount(QString); - - QAction *newAccAction, *editAccAction, *delAccAction; - - CoreConnectProgressDlg *progressDlg; -}; - -class CoreAccountEditDlg : public QDialog { - Q_OBJECT - - public: - CoreAccountEditDlg(AccountId id, const QVariantMap &data, const QStringList &existing = QStringList(), QWidget *parent = 0); - QVariantMap accountData(); - - public slots: - void accept(); - - private slots: - - - private: - Ui::CoreAccountEditDlg ui; - QVariantMap account; - QStringList existing; - -}; - -class CoreConnectProgressDlg : public QDialog { - Q_OBJECT - - public: - CoreConnectProgressDlg(ClientSyncer *, QDialog *parent = 0); - - private slots: - - void syncFinished(); - - void coreSessionProgress(quint32, quint32); - void coreNetworksProgress(quint32, quint32); - void coreChannelsProgress(quint32, quint32); - void coreIrcUsersProgress(quint32, quint32); - - private: - Ui::CoreConnectProgressDlg ui; - -}; - -#endif diff --git a/dev-notes/obsolete/qtopia/mainwidget.cpp b/dev-notes/obsolete/qtopia/mainwidget.cpp deleted file mode 100644 index 45231956..00000000 --- a/dev-notes/obsolete/qtopia/mainwidget.cpp +++ /dev/null @@ -1,123 +0,0 @@ -/*************************************************************************** - * Copyright (C) 2005-08 by the Quassel Project * - * devel@quassel-irc.org * - * * - * 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) version 3. * - * * - * This program is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * - * GNU General Public License for more details. * - * * - * You should have received a copy of the GNU General Public License * - * along with this program; if not, write to the * - * Free Software Foundation, Inc., * - * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * - ***************************************************************************/ - -#include "mainwidget.h" - -#include "buffer.h" -#include "chatwidget.h" -#include "client.h" - -MainWidget::MainWidget(QWidget *parent) : AbstractBufferContainer(parent) { - ui.setupUi(this); - ui.inputLine->hide(); ui.topicBar->hide(); - connect(ui.inputLine, SIGNAL(sendText(const QString &)), this, SLOT(userInput(const QString &))); - connect(this, SIGNAL(userInput(BufferInfo, QString)), Client::instance(), SIGNAL(sendInput(BufferInfo, QString))); -} - -MainWidget::~MainWidget() { - - - -} - -AbstractChatView *MainWidget::createChatView(BufferId id) { - Q_UNUSED(id) - ChatWidget *widget = new ChatWidget(this); - AbstractChatView *chatView = static_cast(widget); // can't use dynamic_cast on some Qtopia devices - Q_ASSERT(chatView); - _chatViews[id] = widget; - ui.stack->addWidget(widget); - widget->setFocusProxy(this); - return chatView; -} - -void MainWidget::removeChatView(BufferId id) { - ChatWidget *view = _chatViews.value(id, 0); - if(!view) return; - ui.stack->removeWidget(view); - view->deleteLater(); -} - -void MainWidget::showChatView(BufferId id) { - if(id.isValid()) currentBufferInfo = Client::buffer(id)->bufferInfo(); - else currentBufferInfo = BufferInfo(); - ChatWidget *widget = _chatViews.value(id, 0); - if(!widget) ui.stack->setCurrentIndex(0); - else { - ui.stack->setCurrentWidget(widget); - ui.inputLine->show(); ui.topicBar->show(); - ui.inputLine->setFocus(); - } -} - - -/* -void MainWidget::setBuffer(Buffer *buf) { - - if(!buf) { - ui.stack->setCurrentIndex(0); - currentBuffer = 0; - return; - } - // TODO update topic if changed; handle status buffer display -// QString title = QString("%1 (%2): \"%3\"").arg(buf->bufferInfo().bufferName()).arg(buf->bufferInfo().networkName()).arg(buf->topic()); - QString title = "foobar"; - ui.topicBar->setContents(title); - - //ui.chatWidget->setStyleSheet("div { color: #777777; }"); - //ui.chatWidget->setHtml("" - // "
foo
bar
baz"); - //ui.chatWidget->moveCursor(QTextCursor::End); - //ui.chatWidget->insertHtml("
brumm
"); - - ChatWidget *chatWidget; - if(!chatWidgets.contains(buf)) { - chatWidget = new ChatWidget(this); - QList lines; - QList msgs = buf->contents(); - foreach(AbstractUiMsg *msg, msgs) { - lines.append((ChatLine *)(msg)); - } - chatWidget->setContents(lines); - connect(buf, SIGNAL(msgAppended(AbstractUiMsg *)), chatWidget, SLOT(appendMsg(AbstractUiMsg *))); - connect(buf, SIGNAL(msgPrepended(AbstractUiMsg *)), chatWidget, SLOT(prependMsg(AbstractUiMsg *))); - connect(buf, SIGNAL(topicSet(QString)), this, SLOT(setTopic(QString))); - //connect(buf, SIGNAL(ownNickSet(QString)), this, SLOT(setOwnNick(QString))); - ui.stack->addWidget(chatWidget); - chatWidgets.insert(buf, chatWidget); - chatWidget->setFocusProxy(ui.inputLine); - } else chatWidget = chatWidgets[buf]; - ui.inputLine->show(); ui.topicBar->show(); - ui.stack->setCurrentWidget(chatWidget); - ui.inputLine->setFocus(); - currentBuffer = buf; - -} -*/ - -void MainWidget::userInput(const QString &input) { - if(!currentBufferInfo.isValid()) return; - QStringList lines = input.split('\n', QString::SkipEmptyParts); - foreach(QString msg, lines) { - if(msg.isEmpty()) continue; - emit userInput(currentBufferInfo, msg); - } - ui.inputLine->clear(); -} diff --git a/dev-notes/obsolete/qtopia/mainwidget.h b/dev-notes/obsolete/qtopia/mainwidget.h deleted file mode 100644 index 0c83ea0e..00000000 --- a/dev-notes/obsolete/qtopia/mainwidget.h +++ /dev/null @@ -1,60 +0,0 @@ -/*************************************************************************** - * Copyright (C) 2005-08 by the Quassel Project * - * devel@quassel-irc.org * - * * - * 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) version 3. * - * * - * This program is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * - * GNU General Public License for more details. * - * * - * You should have received a copy of the GNU General Public License * - * along with this program; if not, write to the * - * Free Software Foundation, Inc., * - * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * - ***************************************************************************/ - -#ifndef _MAINWIDGET_H_ -#define _MAINWIDGET_H_ - -#include "ui_mainwidget.h" - -#include "abstractbuffercontainer.h" -#include "bufferinfo.h" - -class Buffer; -class ChatWidget; - -class MainWidget : public AbstractBufferContainer { - Q_OBJECT - - public: - MainWidget(QWidget *parent); - ~MainWidget(); - - signals: - void userInput(const BufferInfo &, const QString &); - - protected: - virtual AbstractChatView *createChatView(BufferId); - virtual void removeChatView(BufferId); - - protected slots: - virtual void showChatView(BufferId); - - private slots: - void userInput(const QString &); - - private: - Ui::MainWidget ui; - QHash _chatViews; - BufferInfo currentBufferInfo; - -}; - - -#endif diff --git a/dev-notes/obsolete/qtopia/nicklistwidget.cpp b/dev-notes/obsolete/qtopia/nicklistwidget.cpp deleted file mode 100644 index 5aa5c2dc..00000000 --- a/dev-notes/obsolete/qtopia/nicklistwidget.cpp +++ /dev/null @@ -1,84 +0,0 @@ -/*************************************************************************** - * Copyright (C) 2005-08 by the Quassel Project * - * devel@quassel-irc.org * - * * - * 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) version 3. * - * * - * This program is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * - * GNU General Public License for more details. * - * * - * You should have received a copy of the GNU General Public License * - * along with this program; if not, write to the * - * Free Software Foundation, Inc., * - * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * - ***************************************************************************/ - -#include "nicklistwidget.h" - -#include "buffer.h" -#include "nickview.h" - -// FIXME bring back nicks! - -NickListWidget::NickListWidget(QWidget *parent) : QDialog(parent) { - ui.setupUi(this); - setModal(true); - //setStyleSheet("background-color: rgba(220, 220, 255, 40%); color: rgb(0, 0, 0); font-size: 5pt;"); - - -} - -NickListWidget::~NickListWidget() { - - - -} - -void NickListWidget::setBuffer(BufferId id) { - if(!id.isValid()) { - ui.stackedWidget->setCurrentWidget(ui.emptyPage); - return; - } - /* - if(buf->bufferType() != Buffer::ChannelType) { - ui.stackedWidget->setCurrentWidget(ui.emptyPage); - } else { - if(nickViews.contains(buf)) { - ui.stackedWidget->setCurrentWidget(nickViews.value(buf)); - } else { - NickView *view = new NickView(this); - view->setModel(buf->nickModel()); - nickViews[buf] = view; - ui.stackedWidget->addWidget(view); - ui.stackedWidget->setCurrentWidget(view); - connect(buf, SIGNAL(destroyed(QObject *)), this, SLOT(bufferDestroyed(QObject *))); - } - } - */ -} - -void NickListWidget::reset() { - /* - foreach(NickView *view, nickViews.values()) { - ui.stackedWidget->removeWidget(view); - view->deleteLater(); - } - nickViews.clear(); - */ -} - -void NickListWidget::bufferDestroyed(QObject *buf) { - /* - if(nickViews.contains((Buffer *)buf)) { - NickView *view = nickViews.take((Buffer *)buf); - ui.stackedWidget->removeWidget(view); - view->deleteLater(); - } - */ -} - diff --git a/dev-notes/obsolete/qtopia/nicklistwidget.h b/dev-notes/obsolete/qtopia/nicklistwidget.h deleted file mode 100644 index 02ec4cbb..00000000 --- a/dev-notes/obsolete/qtopia/nicklistwidget.h +++ /dev/null @@ -1,52 +0,0 @@ -/*************************************************************************** - * Copyright (C) 2005-08 by the Quassel Project * - * devel@quassel-irc.org * - * * - * 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) version 3. * - * * - * This program is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * - * GNU General Public License for more details. * - * * - * You should have received a copy of the GNU General Public License * - * along with this program; if not, write to the * - * Free Software Foundation, Inc., * - * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * - ***************************************************************************/ - -#ifndef _NICKLISTWIDGET_H_ -#define _NICKLISTWIDGET_H_ - -#include - -#include "ui_nicklistwidget.h" - -class Buffer; -class BufferId; -class NickView; - -class NickListWidget : public QDialog { - Q_OBJECT - - public: - NickListWidget(QWidget *parent = 0); - ~NickListWidget(); - - public slots: - void setBuffer(BufferId); - void reset(); - - private slots: - void bufferDestroyed(QObject *); - - private: - Ui::NickListWidget ui; - QHash nickViews; - -}; - -#endif diff --git a/dev-notes/obsolete/qtopia/qtopiamainwin.cpp b/dev-notes/obsolete/qtopia/qtopiamainwin.cpp deleted file mode 100644 index b927e72f..00000000 --- a/dev-notes/obsolete/qtopia/qtopiamainwin.cpp +++ /dev/null @@ -1,176 +0,0 @@ -/*************************************************************************** - * Copyright (C) 2005-08 by the Quassel Project * - * devel@quassel-irc.org * - * * - * 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) version 3. * - * * - * This program is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * - * GNU General Public License for more details. * - * * - * You should have received a copy of the GNU General Public License * - * along with this program; if not, write to the * - * Free Software Foundation, Inc., * - * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * - ***************************************************************************/ - -#include "qtopiamainwin.h" - -#include "networkmodel.h" -#include "bufferviewwidget.h" -#include "nicklistwidget.h" -#include "chatline.h" -#include "clientbacklogmanager.h" -#include "coreconnectdlg.h" -#include "global.h" -#include "mainwidget.h" -#include "message.h" -#include "network.h" -#include "qtopiaui.h" -#include "signalproxy.h" - -#include "ui_aboutdlg.h" - -#include -#include - -// This constructor is the first thing to be called for a Qtopia app, so we do the init stuff -// here (rather than in a main.cpp). -QtopiaMainWin::QtopiaMainWin(QWidget *parent, Qt::WFlags flags) : QMainWindow(parent, flags) { - Global::registerMetaTypes(); - -#include "../../version.inc" - - Global::runMode = Global::ClientOnly; - Global::defaultPort = 4242; - Global::DEBUG = true; - - Network::setDefaultCodecForServer("ISO-8859-1"); - Network::setDefaultCodecForEncoding("UTF-8"); - Network::setDefaultCodecForDecoding("ISO-8859-15"); - - QCoreApplication::setOrganizationDomain("quassel-irc.org"); - QCoreApplication::setApplicationName("Quassel IRC"); - QCoreApplication::setOrganizationName("Quassel Project"); - - QtopiaUi *gui = new QtopiaUi(this); - Client::init(gui); - - setWindowTitle("Quassel IRC"); - setWindowIcon(QIcon(":icons/quassel-icon.png")); - setWindowIconText("Quassel IRC"); - - mainWidget = new MainWidget(this); - mainWidget->setModel(Client::bufferModel()); - mainWidget->setSelectionModel(Client::bufferModel()->standardSelectionModel()); - setCentralWidget(mainWidget); - - toolBar = new QToolBar(this); - toolBar->setIconSize(QSize(16, 16)); - toolBar->setWindowTitle(tr("Show Toolbar")); - addToolBar(toolBar); - - //bufferViewWidget = new BufferViewWidget(this); - bufferViewWidget = 0; // delayed creation to avoid QPainter warnings - nickListWidget = new NickListWidget(this); - - connect(mainWidget, SIGNAL(currentChanged(BufferId)), this, SLOT(showBuffer(BufferId))); - - setupActions(); - - init(); - //gui->init(); - -} - -// at this point, client is fully initialized -void QtopiaMainWin::init() { - showMaximized(); - CoreConnectDlg *dlg = new CoreConnectDlg(this); - //setCentralWidget(dlg); - dlg->showMaximized(); - dlg->exec(); -} - -QtopiaMainWin::~QtopiaMainWin() { - - -} - -void QtopiaMainWin::closeEvent(QCloseEvent *event) { -#ifndef DEVELMODE - QMessageBox *box = new QMessageBox(QMessageBox::Question, tr("Quit Quassel IRC?"), tr("Do you really want to quit Quassel IRC?"), - QMessageBox::Cancel, this); - QAbstractButton *quit = box->addButton(tr("Quit"), QMessageBox::AcceptRole); - box->exec(); - if(box->clickedButton() == quit) event->accept(); - else event->ignore(); - box->deleteLater(); -#else - event->accept(); -#endif -} - -void QtopiaMainWin::setupActions() { - showBuffersAction = toolBar->addAction(QIcon(":icon/options-hide"), tr("Show Buffers"), this, SLOT(showBufferView())); // FIXME provide real icon - showNicksAction = toolBar->addAction(QIcon(":icon/list"), tr("Show Nicks"), this, SLOT(showNickList())); - showNicksAction->setEnabled(false); - - QMenu *menu = new QMenu(this); - menu->addAction(showBuffersAction); - menu->addAction(showNicksAction); - menu->addSeparator(); - menu->addAction(toolBar->toggleViewAction()); - menu->addSeparator(); - menu->addAction(tr("About..."), this, SLOT(showAboutDlg())); - - QSoftMenuBar::addMenuTo(this, menu); -} - -void QtopiaMainWin::connectedToCore() { - foreach(BufferInfo id, Client::allBufferInfos()) { - Client::backlogManager()->requestBacklog(id.bufferId(), 500, -1); - } -} - -void QtopiaMainWin::disconnectedFromCore() { - - -} - -AbstractUiMsg *QtopiaMainWin::layoutMsg(const Message &msg) { - return new ChatLine(msg); - //return 0; -} - -void QtopiaMainWin::showBuffer(BufferId id) { - nickListWidget->setBuffer(id); - Buffer *b = Client::buffer(id); - //showNicksAction->setEnabled(b && b->bufferInfo().type() == BufferInfo::ChannelBuffer); FIXME enable again when we have a nicklist! - -} - -void QtopiaMainWin::showBufferView() { - if(!bufferViewWidget) { - bufferViewWidget = new BufferViewWidget(this); - connect(mainWidget, SIGNAL(currentChanged(BufferId)), bufferViewWidget, SLOT(accept())); - } - bufferViewWidget->showMaximized(); -} - -void QtopiaMainWin::showNickList() { - nickListWidget->showMaximized(); -} - -void QtopiaMainWin::showAboutDlg() { - QDialog *dlg = new QDialog(this); - dlg->setAttribute(Qt::WA_DeleteOnClose); - Ui::AboutDlg ui; - ui.setupUi(dlg); - dlg->showMaximized(); -} - diff --git a/dev-notes/obsolete/qtopia/qtopiamainwin.h b/dev-notes/obsolete/qtopia/qtopiamainwin.h deleted file mode 100644 index 1a59a584..00000000 --- a/dev-notes/obsolete/qtopia/qtopiamainwin.h +++ /dev/null @@ -1,72 +0,0 @@ -/*************************************************************************** - * Copyright (C) 2005-08 by the Quassel Project * - * devel@quassel-irc.org * - * * - * 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) version 3. * - * * - * This program is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * - * GNU General Public License for more details. * - * * - * You should have received a copy of the GNU General Public License * - * along with this program; if not, write to the * - * Free Software Foundation, Inc., * - * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * - ***************************************************************************/ - -#ifndef _QTOPIAMAINWIN_H_ -#define _QTOPIAMAINWIN_H_ - -#include - -#include "client.h" - -class BufferViewWidget; -class MainWidget; -class NickListWidget; - -class QtopiaMainWin : public QMainWindow { - Q_OBJECT - - public: - QtopiaMainWin(QWidget *parent = 0, Qt::WFlags f = 0); - ~QtopiaMainWin(); - - AbstractUiMsg *layoutMsg(const Message &); - - protected slots: - void connectedToCore(); - void disconnectedFromCore(); - - signals: - void connectToCore(const QVariantMap &connInfo); - void disconnectFromCore(); - void requestBacklog(BufferInfo, QVariant, QVariant); - - private slots: - void showBuffer(BufferId); - void showBufferView(); - void showNickList(); - void showAboutDlg(); - - protected: - void closeEvent(QCloseEvent *); - - private: - void init(); - void setupActions(); - - MainWidget *mainWidget; - QToolBar *toolBar; - QAction *showBuffersAction, *showNicksAction; - BufferViewWidget *bufferViewWidget; - NickListWidget *nickListWidget; - - friend class QtopiaUi; -}; - -#endif diff --git a/dev-notes/obsolete/qtopia/qtopiaui.cpp b/dev-notes/obsolete/qtopia/qtopiaui.cpp deleted file mode 100644 index fa856b49..00000000 --- a/dev-notes/obsolete/qtopia/qtopiaui.cpp +++ /dev/null @@ -1,59 +0,0 @@ -/*************************************************************************** - * Copyright (C) 2005-08 by the Quassel Project * - * devel@quassel-irc.org * - * * - * 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) version 3. * - * * - * This program is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * - * GNU General Public License for more details. * - * * - * You should have received a copy of the GNU General Public License * - * along with this program; if not, write to the * - * Free Software Foundation, Inc., * - * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * - ***************************************************************************/ - -#include "qtopiaui.h" -#include "qtopiamainwin.h" -#include "qtopiauistyle.h" - -QtopiaUiStyle *QtopiaUi::_style; - -QtopiaUi::QtopiaUi(QtopiaMainWin *mw) : AbstractUi(), mainWin(mw) { - _style = new QtopiaUiStyle(); - connect(mainWin, SIGNAL(connectToCore(const QVariantMap &)), this, SIGNAL(connectToCore(const QVariantMap &))); - connect(mainWin, SIGNAL(disconnectFromCore()), this, SIGNAL(disconnectFromCore())); - - -} - -QtopiaUi::~QtopiaUi() { - delete _style; - delete mainWin; - -} - -void QtopiaUi::init() { - -} - -QtopiaUiStyle *QtopiaUi::style() { - return _style; -} - -AbstractUiMsg *QtopiaUi::layoutMsg(const Message &msg) { - return mainWin->layoutMsg(msg); -} - -void QtopiaUi::connectedToCore() { - mainWin->connectedToCore(); -} - -void QtopiaUi::disconnectedFromCore() { - mainWin->disconnectedFromCore(); -} diff --git a/dev-notes/obsolete/qtopia/qtopiaui.h b/dev-notes/obsolete/qtopia/qtopiaui.h deleted file mode 100644 index f1629fdb..00000000 --- a/dev-notes/obsolete/qtopia/qtopiaui.h +++ /dev/null @@ -1,51 +0,0 @@ -/*************************************************************************** - * Copyright (C) 2005-08 by the Quassel Project * - * devel@quassel-irc.org * - * * - * 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) version 3. * - * * - * This program is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * - * GNU General Public License for more details. * - * * - * You should have received a copy of the GNU General Public License * - * along with this program; if not, write to the * - * Free Software Foundation, Inc., * - * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * - ***************************************************************************/ - -#ifndef _QTOPIAGUI_H_ -#define _QTOPIAGUI_H_ - -#include "quasselui.h" - -class QtopiaMainWin; -class QtopiaUiStyle; - -//! This class encapsulates Quassel's GUI for Qtopia. -class QtopiaUi : public AbstractUi { - Q_OBJECT - - public: - QtopiaUi(QtopiaMainWin *mainWin); - ~QtopiaUi(); - void init(); - AbstractUiMsg *layoutMsg(const Message &); - - static QtopiaUiStyle *style(); - - protected slots: - void connectedToCore(); - void disconnectedFromCore(); - - private: - QtopiaMainWin *mainWin; - static QtopiaUiStyle *_style; -}; - - -#endif diff --git a/dev-notes/obsolete/qtopia/qtopiauistyle.cpp b/dev-notes/obsolete/qtopia/qtopiauistyle.cpp deleted file mode 100644 index ba433dd8..00000000 --- a/dev-notes/obsolete/qtopia/qtopiauistyle.cpp +++ /dev/null @@ -1,115 +0,0 @@ -/*************************************************************************** - * Copyright (C) 2005-08 by the Quassel Project * - * devel@quassel-irc.org * - * * - * 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) version 3. * - * * - * This program is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * - * GNU General Public License for more details. * - * * - * You should have received a copy of the GNU General Public License * - * along with this program; if not, write to the * - * Free Software Foundation, Inc., * - * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * - ***************************************************************************/ - -#include "qtopiauistyle.h" -#include "settings.h" - -QtopiaUiStyle::QtopiaUiStyle() : UiStyle("QtopiaUiStyle") { - - QTextCharFormat def; - def.setForeground(QBrush("#000000")); - def.setFont(QFont("Verdana",5)); - setFormat(None, def, Settings::Default); - - // We need to just set our internal formats; everything else is done by the base class... - - // Internal message formats - - QTextCharFormat plainMsg; - plainMsg.setForeground(QBrush("#000000")); - setFormat(PlainMsg, plainMsg, Settings::Default); - - QTextCharFormat notice; - notice.setForeground(QBrush("#000080")); - setFormat(NoticeMsg, notice, Settings::Default); - - QTextCharFormat server; - server.setForeground(QBrush("#000080")); - setFormat(ServerMsg, server, Settings::Default); - - QTextCharFormat error; - error.setForeground(QBrush("#ff0000")); - setFormat(ErrorMsg, error, Settings::Default); - - QTextCharFormat join; - join.setForeground(QBrush("#008000")); - setFormat(JoinMsg, join, Settings::Default); - - QTextCharFormat part; - part.setForeground(QBrush("#ff0000")); - setFormat(PartMsg, part, Settings::Default); - - QTextCharFormat quit; - quit.setForeground(QBrush("#ff0000")); - setFormat(QuitMsg, quit, Settings::Default); - - QTextCharFormat kick; - kick.setForeground(QBrush("#ff0000")); - setFormat(KickMsg, kick, Settings::Default); - - QTextCharFormat nren; - nren.setForeground(QBrush("#6a5acd")); - setFormat(RenameMsg, nren, Settings::Default); - - QTextCharFormat mode; - mode.setForeground(QBrush("#4682b4")); - setFormat(ModeMsg, mode, Settings::Default); - - QTextCharFormat action; - action.setFontItalic(true); - action.setForeground(QBrush("#8b008b")); - setFormat(ActionMsg, action, Settings::Default); - - // Internal message element formats - QTextCharFormat ts; - ts.setForeground(QBrush("#808080")); - setFormat(Timestamp, ts, Settings::Default); - - QTextCharFormat sender; - sender.setAnchor(true); - sender.setForeground(QBrush("#000080")); - setFormat(Sender, sender, Settings::Default); - - QTextCharFormat nick; - nick.setAnchor(true); - nick.setFontWeight(QFont::Bold); - setFormat(Nick, nick, Settings::Default); - - QTextCharFormat hostmask; - hostmask.setFontItalic(true); - setFormat(Hostmask, hostmask, Settings::Default); - - QTextCharFormat channel; - channel.setAnchor(true); - channel.setFontWeight(QFont::Bold); - setFormat(ChannelName, channel, Settings::Default); - - QTextCharFormat flags; - flags.setFontWeight(QFont::Bold); - setFormat(ModeFlags, flags, Settings::Default); - - QTextCharFormat url; - url.setFontUnderline(true); - url.setAnchor(true); - setFormat(Url, url, Settings::Default); - -} - -QtopiaUiStyle::~QtopiaUiStyle() {} diff --git a/dev-notes/obsolete/qtopia/quasseltopia.desktop b/dev-notes/obsolete/qtopia/quasseltopia.desktop deleted file mode 100644 index e1ca46d4..00000000 --- a/dev-notes/obsolete/qtopia/quasseltopia.desktop +++ /dev/null @@ -1,10 +0,0 @@ -[Translation] -#File=example-nct -#Context=QuasselIRC - -[Desktop Entry] -Comment[]=A Next-Gen IRC Client -Exec=quasseltopia -Icon=/pics/quasselirc/qirc-icon.png -Type=Application -Name[]=QuasselTopia diff --git a/dev-notes/obsolete/qtopia/topicbar.cpp b/dev-notes/obsolete/qtopia/topicbar.cpp deleted file mode 100644 index 724817fa..00000000 --- a/dev-notes/obsolete/qtopia/topicbar.cpp +++ /dev/null @@ -1,129 +0,0 @@ -/*************************************************************************** - * Copyright (C) 2005-08 by the Quassel Project * - * devel@quassel-irc.org * - * * - * 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) version 3. * - * * - * This program is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * - * GNU General Public License for more details. * - * * - * You should have received a copy of the GNU General Public License * - * along with this program; if not, write to the * - * Free Software Foundation, Inc., * - * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * - ***************************************************************************/ - -#include - -#include "topicbar.h" -#include "client.h" - - -TopicBar::TopicBar(QWidget *parent) : QPushButton(parent) { - setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::Preferred); - - // Define the font and calculate the metrics for it - topicFont = font(); - topicFont.setPointSize(5); - - // frameWidth = style()->pixelMetric(QStyle::PM_ButtonMargin); // Nice idea, but Qtopia's buttons are just too large... - frameWidth = 3; // so we hardcode a more reasonable framewidth than 7 - setFixedHeight(QFontMetrics(topicFont).height() + 2*frameWidth); - - textWidth = 0; - fillText = " *** "; - oneshot = true; - timer = new QTimer(this); - timer->setInterval(25); - connect(timer, SIGNAL(timeout()), this, SLOT(updateOffset())); - connect(this, SIGNAL(clicked()), this, SLOT(startScrolling())); - - _model = Client::bufferModel(); - connect(_model, SIGNAL(dataChanged(QModelIndex, QModelIndex)), - this, SLOT(dataChanged(QModelIndex, QModelIndex))); - - _selectionModel = Client::bufferModel()->standardSelectionModel(); - connect(_selectionModel, SIGNAL(currentChanged(QModelIndex, QModelIndex)), - this, SLOT(currentChanged(QModelIndex, QModelIndex))); -} - -TopicBar::~TopicBar() { - - -} - -void TopicBar::currentChanged(const QModelIndex ¤t, const QModelIndex &previous) { - Q_UNUSED(previous); - setContents(current.sibling(current.row(), 1).data().toString()); -} - -void TopicBar::dataChanged(const QModelIndex &topLeft, const QModelIndex &bottomRight) { - QItemSelectionRange changedArea(topLeft, bottomRight); - QModelIndex currentTopicIndex = _selectionModel->currentIndex().sibling(_selectionModel->currentIndex().row(), 1); - if(changedArea.contains(currentTopicIndex)) - setContents(currentTopicIndex.data().toString()); -}; - -void TopicBar::resizeEvent(QResizeEvent *event) { - QPushButton::resizeEvent(event); - calcTextMetrics(); -} - -void TopicBar::calcTextMetrics() { - int w = width() - 2*frameWidth; - QRect boundingRect = QFontMetrics(topicFont).boundingRect(text); - textWidth = boundingRect.width(); - if(textWidth <= w) { - offset = 0; fillTextStart = -1; secondTextStart = -1; - displayText = text; - timer->stop(); - } else { - fillTextStart = textWidth; - boundingRect = QFontMetrics(topicFont).boundingRect(fillText); - secondTextStart = fillTextStart + boundingRect.width(); - displayText = QString("%1%2%1").arg(text).arg(fillText); - offset = 0; - //timer->start(); // uncomment this to get autoscroll rather than on-demand - } -} - -// TODO catch resizeEvent for scroll settings -void TopicBar::setContents(QString t, bool _oneshot) { - text = t; oneshot = _oneshot; - calcTextMetrics(); -} - -void TopicBar::paintEvent(QPaintEvent *event) { - QPushButton::paintEvent(event); - - QPainter painter(this); - painter.setFont(topicFont); - painter.setClipRect(frameWidth, frameWidth, rect().width() - 2*frameWidth, rect().height() - 2*frameWidth); - painter.drawText(QPoint(-offset + frameWidth, QFontMetrics(topicFont).ascent() + frameWidth), displayText); - -} - -void TopicBar::updateOffset() { - offset+=1; - if(offset >= secondTextStart) { - offset = 0; - if(oneshot) timer->stop(); // only scroll once! - } - update(); -} - -void TopicBar::startScrolling() { - if(displayText.length() > text.length()) { - //oneshot = false; - timer->start(); - } -} - -void TopicBar::stopScrolling() { - oneshot = true; -} diff --git a/dev-notes/obsolete/qtopia/topicbar.h b/dev-notes/obsolete/qtopia/topicbar.h deleted file mode 100644 index 9f00f53b..00000000 --- a/dev-notes/obsolete/qtopia/topicbar.h +++ /dev/null @@ -1,72 +0,0 @@ -/*************************************************************************** - * Copyright (C) 2005-08 by the Quassel Project * - * devel@quassel-irc.org * - * * - * 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) version 3. * - * * - * This program is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * - * GNU General Public License for more details. * - * * - * You should have received a copy of the GNU General Public License * - * along with this program; if not, write to the * - * Free Software Foundation, Inc., * - * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * - ***************************************************************************/ - -#ifndef TOPICBAR_H_ -#define TOPICBAR_H_ - -#include -#include - -#include "buffermodel.h" - -class QPixmap; -class QTimer; - -class TopicBar : public QPushButton { - Q_OBJECT - - public: - TopicBar(QWidget *parent = 0); - ~TopicBar(); - - public slots: - void setContents(QString text, bool oneshot = true); - void startScrolling(); - void stopScrolling(); - - protected: - virtual void paintEvent(QPaintEvent *event); - virtual void resizeEvent (QResizeEvent *event); - - - private slots: - void updateOffset(); - void dataChanged(const QModelIndex &, const QModelIndex &); - void currentChanged(const QModelIndex &, const QModelIndex &); - - private: - void calcTextMetrics(); - - BufferModel *_model; - QItemSelectionModel *_selectionModel; - - QTimer *timer; - int offset; - int fillTextStart, secondTextStart; - QString text, displayText; - QString fillText; - QFont topicFont; - int frameWidth; - int textWidth; - bool oneshot; -}; - - -#endif diff --git a/dev-notes/obsolete/qtopia/ui/aboutdlg.ui b/dev-notes/obsolete/qtopia/ui/aboutdlg.ui deleted file mode 100644 index 7caac93b..00000000 --- a/dev-notes/obsolete/qtopia/ui/aboutdlg.ui +++ /dev/null @@ -1,46 +0,0 @@ - - AboutDlg - - - - 0 - 0 - 240 - 271 - - - - About - - - - - - <html><head><meta name="qrichtext" content="1" /><style type="text/css"> -p, li { white-space: pre-wrap; } -</style></head><body style=" font-family:'Trebuchet MS'; font-size:10pt; font-weight:400; font-style:normal;"> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Quassel IRC</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:14pt; font-weight:600;"><span style=" font-size:8pt; font-weight:400;">mobile edition</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:5pt;"> </span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:5pt;">(C) 2005-2007 by</p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:5pt; font-weight:600;">The Quassel IRC Team</p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:5pt;">Manuel Nickschas</p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:5pt;">Marcus Eggenberger</p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:5pt;">Marco Genise</p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:5pt;"><span style=" font-size:4pt;"> </span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:5pt;">&lt;http://quassel-irc.org&gt;</p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:5pt;">&lt;devel@quassel-irc.org&gt;</p></body></html> - - - Qt::AlignCenter - - - true - - - - - - - - diff --git a/dev-notes/obsolete/qtopia/ui/bufferviewwidget.ui b/dev-notes/obsolete/qtopia/ui/bufferviewwidget.ui deleted file mode 100644 index c387cb09..00000000 --- a/dev-notes/obsolete/qtopia/ui/bufferviewwidget.ui +++ /dev/null @@ -1,39 +0,0 @@ - - BufferViewWidget - - - - 0 - 0 - 240 - 286 - - - - Select Buffer - - - - - - QTabWidget::South - - - QTabWidget::Rounded - - - 0 - - - - Tab 1 - - - - - - - - - - diff --git a/dev-notes/obsolete/qtopia/ui/coreaccounteditdlg.ui b/dev-notes/obsolete/qtopia/ui/coreaccounteditdlg.ui deleted file mode 100644 index edd642ee..00000000 --- a/dev-notes/obsolete/qtopia/ui/coreaccounteditdlg.ui +++ /dev/null @@ -1,120 +0,0 @@ - - CoreAccountEditDlg - - - - 0 - 0 - 193 - 241 - - - - Edit Core Account - - - - 6 - - - 9 - - - - - 0 - - - 6 - - - - - Port: - - - - - - - Host: - - - - - - - Password: - - - - - - - - - - - - - - - - Account: - - - - - - - QLineEdit::Password - - - - - - - 1024 - - - 65535 - - - 4242 - - - - - - - User: - - - - - - - - - Qt::Vertical - - - - 20 - 40 - - - - - - - - accountEdit - hostEdit - port - userEdit - passwdEdit - - - - diff --git a/dev-notes/obsolete/qtopia/ui/coreconnectdlg.ui b/dev-notes/obsolete/qtopia/ui/coreconnectdlg.ui deleted file mode 100644 index 330ad558..00000000 --- a/dev-notes/obsolete/qtopia/ui/coreconnectdlg.ui +++ /dev/null @@ -1,149 +0,0 @@ - - CoreConnectDlg - - - - 0 - 0 - 188 - 283 - - - - - 0 - 0 - 0 - 0 - - - - Select Core Account - - - - - - false - - - - 9 - - - 6 - - - - - Available Quassel Core accounts: - - - Qt::PlainText - - - true - - - - - - - 0 - - - 6 - - - - - - - - 0 - - - 6 - - - - - ... - - - - - - - ... - - - :/default/edit_remove.png - - - - - - - ... - - - :/default/edit.png - - - - - - - Qt::Vertical - - - - 20 - 40 - - - - - - - - - - - - Qt::Vertical - - - - 20 - 40 - - - - - - - - Connect - - - - - - - accountList - doConnect - newAccount - delAccount - editAccount - delAccount - editAccount - accountList - newAccount - - - - - - diff --git a/dev-notes/obsolete/qtopia/ui/coreconnectprogressdlg.ui b/dev-notes/obsolete/qtopia/ui/coreconnectprogressdlg.ui deleted file mode 100644 index 909f8227..00000000 --- a/dev-notes/obsolete/qtopia/ui/coreconnectprogressdlg.ui +++ /dev/null @@ -1,121 +0,0 @@ - - CoreConnectProgressDlg - - - - 0 - 0 - 168 - 212 - - - - Connection Progress - - - - - - Connecting to core... - - - Qt::AlignCenter - - - true - - - - - - - - - Session - - - - - - - 0 - - - Qt::Horizontal - - - %p% - - - - - - - Networks - - - - - - - 24 - - - %p% - - - - - - - Channels - - - - - - - 24 - - - %p% - - - - - - - Users - - - - - - - 24 - - - %p% - - - - - - - - - Qt::Vertical - - - - 138 - 51 - - - - - - - - - diff --git a/dev-notes/obsolete/qtopia/ui/editcoreacctdlg.ui b/dev-notes/obsolete/qtopia/ui/editcoreacctdlg.ui deleted file mode 100644 index 92207ea1..00000000 --- a/dev-notes/obsolete/qtopia/ui/editcoreacctdlg.ui +++ /dev/null @@ -1,120 +0,0 @@ - - EditCoreAcctDlg - - - - 0 - 0 - 193 - 241 - - - - Edit Core Account - - - - 9 - - - 6 - - - - - 0 - - - 6 - - - - - Port: - - - - - - - Host: - - - - - - - Password: - - - - - - - - - - - - - - - - Account: - - - - - - - QLineEdit::Password - - - - - - - 65535 - - - 1024 - - - 4242 - - - - - - - User: - - - - - - - - - Qt::Vertical - - - - 20 - 40 - - - - - - - - accountEdit - hostEdit - port - userEdit - passwdEdit - - - - diff --git a/dev-notes/obsolete/qtopia/ui/mainwidget.ui b/dev-notes/obsolete/qtopia/ui/mainwidget.ui deleted file mode 100644 index a4c192a7..00000000 --- a/dev-notes/obsolete/qtopia/ui/mainwidget.ui +++ /dev/null @@ -1,104 +0,0 @@ - - MainWidget - - - - 0 - 0 - 240 - 320 - - - - Form - - - - 0 - - - 0 - - - 0 - - - 0 - - - 0 - - - - - - 0 - 0 - - - - - 15 - - - - - - - - - - - 0 - - - - background-color: rgba(220, 220, 255, 40%) - - - - - - <html><head><meta name="qrichtext" content="1" /><style type="text/css"> -p, li { white-space: pre-wrap; } -</style></head><body style=" font-family:'Trebuchet MS'; font-size:10pt; font-weight:400; font-style:normal;"> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:29pt; color:#00008b;">Quassel IRC</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:29pt; color:#7fff00;"><span style=" font-size:10pt; color:#00008b;">mobile edition</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:29pt; color:#483d8b;"><span style=" font-size:6pt; color:#000000;">Chat comfortably. Anywhere.</span></p></body></html> - - - true - - - Qt::AlignCenter - - - - - - - - - - - - - - - TopicBar - QPushButton -
topicbar.h
-
- - InputLine - QLineEdit -
inputline.h
-
-
- - inputLine - topicBar - - - -
diff --git a/dev-notes/obsolete/qtopia/ui/nicklistwidget.ui b/dev-notes/obsolete/qtopia/ui/nicklistwidget.ui deleted file mode 100644 index 2287049d..00000000 --- a/dev-notes/obsolete/qtopia/ui/nicklistwidget.ui +++ /dev/null @@ -1,28 +0,0 @@ - - NickListWidget - - - - 0 - 0 - 240 - 285 - - - - Nicks in Channel - - - - - - 0 - - - - - - - - - diff --git a/i18n/quassel_cs.ts b/i18n/quassel_cs.ts index c77d97e7..8da8e37b 100644 --- a/i18n/quassel_cs.ts +++ b/i18n/quassel_cs.ts @@ -1,12 +1,13 @@ - + + Day changed to %1 - A dnes máme:%1 + A dnes máme: %1 @@ -200,7 +201,7 @@ p, li { white-space: pre-wrap; } Form - + @@ -1516,7 +1517,7 @@ p, li { white-space: pre-wrap; } <div style=color:red;>Connection to %1 failed!</div> - <div style=color:red;>Připojení k %1 selhalo!</div> + <div style=color:red;>Připojení k %1 selhalo!</div> @@ -1851,7 +1852,7 @@ SOME SPACE Evaluate! - + Posoudit! @@ -1872,47 +1873,47 @@ SOME SPACE Form - + Formulář Desktop Notification (via D-Bus) - + Oznamovaní (skrze D-Bus) Timeout: - + Časová prodleva: s - + Position hint: - + Pozice oznámení: px - + X: - + Y: - + Queue unread notifications - + Řadit nepřečtená oznámení @@ -2106,47 +2107,47 @@ SOME SPACE Behaviour - + Chování Highlight - + Zvýraznění this shouldn't be empty - + toto by nemělo být prázdné highlight rule - + Pravidla zvýraznění Form - + Formulář Custom Highlights - + Uživatelská zvýraznění RegEx - + Regulerní výraz CS - + Enable - + Povolit @@ -2161,27 +2162,27 @@ SOME SPACE Highlight Nicks - + Zvýrazňované přezdívky All nicks from identity - + VÅ¡echny přezdívky z identity Current nick - + Současnou None - + Žádnou Case sensitive - + Citlivý na velikost písma @@ -3264,7 +3265,7 @@ Proceeding will cause an unencrypted transfer of your SSL Key and SSL Certificat Form - + @@ -3319,7 +3320,7 @@ Proceeding will cause an unencrypted transfer of your SSL Key and SSL Certificat ... - ... + @@ -3334,7 +3335,7 @@ Proceeding will cause an unencrypted transfer of your SSL Key and SSL Certificat Perform - + Provést @@ -3360,7 +3361,7 @@ Note that Quassel IRC automatically rejoins channels, so /join will rarely be ne NickServ - + @@ -3453,7 +3454,7 @@ Unless you *really* know what you do, leave this as ISO-8859-1! s - + @@ -3463,7 +3464,7 @@ Unless you *really* know what you do, leave this as ISO-8859-1! Unlimited - + Neomezeně @@ -3625,7 +3626,7 @@ Unless you *really* know what you do, leave this as ISO-8859-1! Dialog - + @@ -3665,7 +3666,7 @@ Unless you *really* know what you do, leave this as ISO-8859-1! Do not change unless you're going to connect to a server not supporting SSLv3! - + Tuto hodnotu měňte pouze za předpokladu, že se připojujete k serveru nepodporujícímu SSLv3! @@ -3705,12 +3706,12 @@ Unless you *really* know what you do, leave this as ISO-8859-1! Proxy Host: - + Počítač: localhost - tento počítač (localhost) + localhost diff --git a/i18n/quassel_de.ts b/i18n/quassel_de.ts index 0d3c33dc..33994c23 100644 --- a/i18n/quassel_de.ts +++ b/i18n/quassel_de.ts @@ -19,7 +19,7 @@ <b>A modern, distributed IRC Client</b><br><br>&copy;2005-2008 by the Quassel Project<br><a href="http://quassel-irc.org">http://quassel-irc.org</a><br><a href="irc://irc.freenode.net/quassel">#quassel</a> on <a href="http://www.freenode.net">Freenode</a><br><br>Quassel IRC is dual-licensed under <a href="http://www.gnu.org/licenses/gpl-2.0.txt">GPLv2</a> and <a href="http://www.gnu.org/licenses/gpl-3.0.txt">GPLv3</a>.<br>Most icons are &copy; by the <a href="http://www.oxygen-icons.org">Oxygen Team</a> and used under the <a href="http://www.gnu.org/licenses/lgpl.html">LGPL</a>.<br><br>Please use <a href="http://bugs.quassel-irc.org">http://bugs.quassel-irc.org</a> to report bugs. - <b>A modern, distributed IRC Client</b><br><br>&copy;2005-2008 by the Quassel Project<br><a href="http://quassel-irc.org">http://quassel-irc.org</a><br><a href="irc://irc.freenode.net/quassel">#quassel</a> on <a href="http://www.freenode.net">Freenode</a><br><br>Quassel IRC is dual-licensed under <a href="http://www.gnu.org/licenses/gpl-2.0.txt">GPLv2</a> and <a href="http://www.gnu.org/licenses/gpl-3.0.txt">GPLv3</a>.<br>Most icons are &copy; by the <a href="http://www.oxygen-icons.org">Oxygen Team</a> and used under the <a href="http://www.gnu.org/licenses/lgpl.html">LGPL</a>.<br><br>Please use <a href="http://bugs.quassel-irc.org">http://bugs.quassel-irc.org</a> to report bugs. + <b>A modern, distributed IRC Client</b><br><br>&copy;2005-2008 by the Quassel Project<br><a href="http://quassel-irc.org">http://quassel-irc.org</a><br><a href="irc://irc.freenode.net/quassel">#quassel</a> on <a href="http://www.freenode.net">Freenode</a><br><br>Quassel IRC is dual-licensed under <a href="http://www.gnu.org/licenses/gpl-2.0.txt">GPLv2</a> and <a href="http://www.gnu.org/licenses/gpl-3.0.txt">GPLv3</a>.<br>Most icons are &copy; by the <a href="http://www.oxygen-icons.org">Oxygen Team</a> and used under the <a href="http://www.gnu.org/licenses/lgpl.html">LGPL</a>.<br><br>Please use <a href="http://bugs.quassel-irc.org">http://bugs.quassel-irc.org</a> to report bugs. @@ -37,12 +37,12 @@ Besonderer Dank geht an:<br><dl><dt><b>John "nox-Hand" Hand</b></dt><dd>für großartige Gestaltungsarbeit und das Quassel-Logo/-Symbol</dt><dt><b><a href="http://www.oxygen-icons.org">Das Oxygen-Team</a></b></dt><dd>für die Erstellungen der meisten anderen schnieken Symbole, die Sie in Quassel sehen</dd><dt><b><a href="http://www.trolltech.com">Trolltech</a></b></dt><dd>für die Erstellung von Qt und Qtopia und für die Förderung von Quasseltopia mit Greenphones und mehr</dd> - + About Quassel Über Quassel - + <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'DejaVu Sans'; font-size:15pt; font-weight:600; font-style:normal;"> @@ -53,7 +53,7 @@ p, li { white-space: pre-wrap; } <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Quassel IRC</p></body></html> - + <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'DejaVu Sans'; font-size:10pt; font-weight:600; font-style:normal;"> @@ -64,22 +64,22 @@ p, li { white-space: pre-wrap; } <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Version 0.2.0-pre, Build &gt;= 474 (2008-02-08)</p></body></html> - + &About &Über - + A&uthors A&utoren - + &Contributors &Unterstützer - + &Thanks To &Dank an @@ -91,16 +91,31 @@ p, li { white-space: pre-wrap; } Special thanks goes to:<br><dl><dt><b>John "nox" Hand</b></dt><dd>for great artwork and the Quassel logo/icon</dt><dt><b><a href="http://www.oxygen-icons.org">The Oxygen Team</a></b></dt><dd>for creating most of the other shiny icons you see throughout Quassel</dd><dt><b><a href="http://www.trolltech.com">Qt Software formerly known as Trolltech</a></b></dt><dd>for creating Qt and Qtopia, and for sponsoring development of QuasselTopia with Greenphones and more</dd><dt><b><a href="http://www.nokia.com">Nokia</a></b></dt><dd>for keeping Qt alive, and for sponsoring development of Quassel Mobile with N810s</dd> - Besonderen Dank geht an:<br><dl><dt><b>John "nox" Hand</b></dt><dd>für großartige künstlerische Leistung und das Quassel Icon</dt><dt><b><a href="http://www.oxygen-icons.org">Dem Oxygen- Team</a></b></dt><dd>für die meisten anderen Icons die in Quassel zu sehen sind</dd><dt><b><a href="http://www.trolltech.com">Qt Software (früher: Trolltech)</a></b></dt><dd>für Qt und Qtopia, und für die Unterstützung der Entwicklung von QuasselTopia auf Greenphones und mehr</dd><dt><b><a href="http://www.nokia.com">Nokia</a></b></dt><dd>für die Aufnahme von Qt und für die Unterstützung der Entwicklung von Quassel Mobile für das N810</dd> + Besonderen Dank geht an:<br><dl><dt><b>John "nox" Hand</b></dt><dd>für großartige künstlerische Leistung und das Quassel Icon</dt><dt><b><a href="http://www.oxygen-icons.org">Dem Oxygen- Team</a></b></dt><dd>für die meisten anderen Icons die in Quassel zu sehen sind</dd><dt><b><a href="http://www.trolltech.com">Qt Software (früher: Trolltech)</a></b></dt><dd>für Qt und Qtopia, und für die Unterstützung der Entwicklung von QuasselTopia auf Greenphones und mehr</dd><dt><b><a href="http://www.nokia.com">Nokia</a></b></dt><dd>für die Aufnahme von Qt und für die Unterstützung der Entwicklung von Quassel Mobile für das N810</dd> + + + + <b>A modern, distributed IRC Client</b><br><br>&copy;2005-2009 by the Quassel Project<br><a href="http://quassel-irc.org">http://quassel-irc.org</a><br><a href="irc://irc.freenode.net/quassel">#quassel</a> on <a href="http://www.freenode.net">Freenode</a><br><br>Quassel IRC is dual-licensed under <a href="http://www.gnu.org/licenses/gpl-2.0.txt">GPLv2</a> and <a href="http://www.gnu.org/licenses/gpl-3.0.txt">GPLv3</a>.<br>Most icons are &copy; by the <a href="http://www.oxygen-icons.org">Oxygen Team</a> and used under the <a href="http://www.gnu.org/licenses/lgpl.html">LGPL</a>.<br><br>Please use <a href="http://bugs.quassel-irc.org">http://bugs.quassel-irc.org</a> to report bugs. + <b>Ein moderner, dezentralisierter IRC-Client</b><br><br>&copy;2005-2009 durch das Quassel Project<br><a href="http://quassel-irc.org">http://quassel-irc.org</a><br><a href="irc://irc.freenode.net/quassel">#quassel</a> on <a href="http://www.freenode.net">Freenode</a><br><br>Quassel IRC ist dual-lizensiert <a href="http://www.gnu.org/licenses/gpl-2.0.txt">GPLv2</a> und <a href="http://www.gnu.org/licenses/gpl-3.0.txt">GPLv3</a>.<br>Die meisten der Icons sind &copy; durch das <a href="http://www.oxygen-icons.org">Oxygen Team</a> und werden unter der <a href="http://www.gnu.org/licenses/lgpl.html">LGPL</a> benutzt.<br><br>Bitte benutzen Sie <a href="http://bugs.quassel-irc.org">http://bugs.quassel-irc.org</a> um Fehler zu melden. + + + + Special thanks goes to:<br><dl><dt><img src=":/pics/quassel-eye.png">&nbsp;<b>John "nox" Hand</b></dt><dd>for the original Quassel icon - The All-Seeing Eye</dt><dt><img src=":/pics/oxygen.png">&nbsp;<b><a href="http://www.oxygen-icons.org">The Oxygen Team</a></b></dt><dd>for creating all the artwork you see throughout Quassel</dd><dt><img src=":/pics/qt-logo-32.png">&nbsp;<b><a href="http://www.trolltech.com">Qt Software formerly known as Trolltech</a></b></dt><dd>for creating Qt and Qtopia, and for sponsoring development of QuasselTopia with Greenphones and more</dd><dt><a href="http://www.nokia.com"><img src=":/pics/nokia.png"></a></b></dt><dd>for keeping Qt alive, and for sponsoring development of Quassel Mobile with N810s</dd> + Besonderen Dank geht an:<br><dl><dt><img src=":/pics/quassel-eye.png">&nbsp;<b>John "nox" Hand</b></dt><dd>für großartige künstlerische Leistung und das Quassel Icon</dt><dt><b><a href="http://www.oxygen-icons.org">Dem Oxygen- Team</a></b></dt><dd>für die meisten anderen Icons die in Quassel zu sehen sind</dd><dt><img src=":/pics/qt-logo-32.png">&nbsp;<b><a href="http://www.trolltech.com">Qt Software (früher: Trolltech)</a></b></dt><dd>für Qt und Qtopia, und für die Unterstützung der Entwicklung von QuasselTopia auf Greenphones und mehr</dd><dt><a href="http://www.nokia.com"><img src=":/pics/nokia.png"></a></b></dt><dd>für die Aufnahme von Qt und für die Unterstützung der Entwicklung von Quassel Mobile für das N810</dd> AbstractSqlStorage - + Installed Schema (version %1) is not up to date. Upgrading to version %2... Installiertes Datenbankschema (version %1) is nicht aktuell. Aktualisiere auf version %2... + + + Upgrade failed... + Upgrade fehlgeschlagen... + AliasesModel @@ -120,7 +135,7 @@ p, li { white-space: pre-wrap; } Behaviour - Verhalten + Verhalten @@ -142,63 +157,176 @@ p, li { white-space: pre-wrap; } Delete Löschen + + + Misc + Verschiedenes + AppearanceSettingsPage - + Appearance Erscheinungsbild General - Allgemein + Allgemein - + Form Formular Client style: - Client-Stil: + Client-Stil: Language: - Sprache: + Sprache: - + <Original> Note: needs client restart for full effect! - Hinweis: Erfordert Client-Neustart, damit sich alle Änderungen auswirken! + Hinweis: Erfordert Client-Neustart, damit sich alle Änderungen auswirken! - + <System Default> Misc: - Verschiedenes: + Verschiedenes: Show Web Previews - Vorschau von Weblinks aktivieren + Vorschau von Weblinks aktivieren Use Icons to represent away state of Users - Zeige Abwesenheitsstatus von Benutzern mit Hilfe von Icons an + Zeige Abwesenheitsstatus von Benutzern mit Hilfe von Icons an + + + + Client Style + Client-Stil + + + + Set application style + Anwendungsstil ändern + + + + Language + Sprache + + + + Set the application language. Requires restart! + Sprache für die Anwendung ändern. Erfordert Neustart! + + + + Fonts + Schriftarten + + + + Set font for the main chat window and the chat monitor + Schrift für das Chatfenster und den Chatmonitor auswählen + + + + Chat window: + Chatfenster: + + + + Font + Schrift + + + + Choose... + Wähle... + + + + Set font for channel and nick lists + Schrift für Kanal- und Nickliste auswählen + + + + Channel list: + Kanalliste:: + + + + Set font for the input line + Schrift für die Eingabezeile auswählen + + + + Input line: + Eingabezeile: + + + + Misc + Verschiedenes + + + + Show a website preview window when hovering the mouse over a web address + Zeige eine Webseitenvorschau beim Hovern mit der Maus über eine Webadresse + + + + Show previews of webpages on URL hover + Zeige Vorschauen von Webseiten beim Hovern über URLs + + + + Show status icons in channel and nick lists + Zeige Statusicons in der Kanal- und Nickliste + + + + Use icons in channel and nick lists + Benutze Icons in der Kanal- und Nickliste + + + + AwayLogView + + + Away Log + Abwesenheitslog + + + + Show Network Name + Zeige Netzwerkname + + + + Show Buffer Name + Zeige Fenstername @@ -206,7 +334,7 @@ p, li { white-space: pre-wrap; } Behaviour - Verhalten + Verhalten @@ -219,37 +347,37 @@ p, li { white-space: pre-wrap; } Formular - + Backlog Request Method: Methode für Verlaufanforderung: - + Fixed Amount per Buffer Fester Verlaufsspeicher pro Fenster - + Unread Messages per Buffer Ungelesene Nachrichten pro Fenster - + Global Unread Messages Globale ungelesene Nachrichten - + The simplest Requester. It fetches a fixed amount of lines for each buffer from the Backlog. Die einfachste Methode: Einen feste Anzahl Zeilen werden für jedes Fenster angefordert. - + amount of messages per buffer that are requested after the core connection has been established. Anzahl der Nachrichten pro Fenster, die nach dem Core-Verbindungsaufbau angefordert werden. - + Initial backlog amount: Anfängliche Verlaufsgröße: @@ -258,27 +386,27 @@ p, li { white-space: pre-wrap; } This requester fetches unread messages for each buffer individually. The amount of lines can be limited per buffer. You can also chose to fetch additional older chatlines to provide a better context. - Diese Methode fordert ungelesene Nachrichten für jedes Fenster individuell an. Die Anzahl Zeilen kann für jedes Fenster einzeln begrenzt werden. + Diese Methode fordert ungelesene Nachrichten für jedes Fenster individuell an. Die Anzahl Zeilen kann für jedes Fenster einzeln begrenzt werden. Sie können außerdem weitere ältere Chatzeilen anfordern. - + Maximum amount of messages to be fetched per buffer. Maximale Anzahl Nachrichten, die pro Fenster angefordert werden. - + Limit: Begrenzung: - + Amount of messages to be fetched in addition to the unread messages. The Limit does not apply here. Anzahl Nachrichten die zusätzlich zu den ungelesenen angefordert werden. Das Begrenzung wird hier nicht angewandt. - + Additional Messages: Zusätzliche Nachrichten: @@ -294,22 +422,22 @@ You can also chose to fetch additional older chatlines to provide a better conte Diese Methode fordert alle Nachrichten, die neuer als die älteste ungelesene Nachricht sind, an. - + Maximum amount of messages to be fetched over all buffers. Maximale Anzahl Nachrichten die für alle Fenster angefordert werden. - + Number of messages to be requested from the core when using scrolling up in the buffer view. Anzahl der Nachrichten, die beim Zurückscrollen angefordert werden. - + Dynamic backlog amount: Dynamische Verlaufsgröße: - + This requester fetches all messages newer than the oldest unread message for all buffers. Note: this requester is not recommended if you use hidden buffer or have inactive buffers (i.e.: no stale queries or channels). @@ -323,6 +451,50 @@ Nützlich um den Verlauf zu limitieren und um schnellstmöglich Nachrichten anzu Sie können außerdem weitere (ältere) Verlaufszeilen anfordern um den Kontext zu wahren. + + + Misc + Verschiedenes + + + + DynamicBacklogAmount + + + + + FixedBacklogAmount + + + + + This requester fetches unread messages for each buffer individually. The amount of lines can be limited per buffer. + +You can also choose to fetch additional older chatlines to provide a better context. + Diese Methode fordert ungelesene Nachrichten für jedes Fenster individuell an. Die Anzahl Zeilen kann für jedes Fenster einzeln begrenzt werden. + +Sie können außerdem weitere ältere Chatzeilen anfordern. + + + + PerBufferUnreadBacklogLimit + + + + + PerBufferUnreadBacklogAdditional + + + + + GlobalUnreadBacklogLimit + + + + + GlobalUnreadBacklogAdditional + + BufferItem @@ -372,7 +544,7 @@ Sie können außerdem weitere (ältere) Verlaufszeilen anfordern um den Kontext Abwesenheitsmeldung: %1 - + <p> %1 - %2 </p> @@ -485,12 +657,12 @@ Sie können außerdem weitere (ältere) Verlaufszeilen anfordern um den Kontext Tageswechsel - + Merge buffers permanently? Verbinde Fenster permanent? - + Do you want to merge the buffer "%1" permanently into buffer "%2"? This cannot be reversed! Wollen Sie das Fenster "%1" permanent mit dem Fenster "%2" verbinden? @@ -502,7 +674,7 @@ Diese Aktion kann nicht rückgängig gemacht werden! All Buffers - Alle Räume + Alle Räume @@ -518,30 +690,38 @@ Diese Aktion kann nicht rückgängig gemacht werden! Bitte geben Sie einen Namen für diese Ansicht ein: - + Add Buffer View Ansicht hinzufügen + + BufferViewFilter + + + Show / Hide buffers + Zeige/Verstecke Fenster + + BufferViewSettingsPage General - Allgemein + Allgemein - + Buffer Views Ansichten - + Delete Buffer View? Ansicht löschen? - + Do you really want to delete the buffer view "%1"? Wollen Sie dieses Fenster "%1" wirklich löschen? @@ -586,65 +766,77 @@ Diese Aktion kann nicht rückgängig gemacht werden! Puffer begrenzen auf: - + Status Buffers Statusfenster - + Channel Buffers Kanalpuffer - + Query Buffers Dialogpuffer - + Hide inactive Buffers Inaktive Puffer verstecken - + Add new Buffers automatically Neue Puffer automatisch hinzufügen - + Sort alphabetically Alphabetisch sortieren - + Minimum Activity: Aktivitätsminimum: - + No Activity Keine Aktivität - + Other Activity Andere Aktivitität - + New Message Neue Meldung - + Highlight Hervorhebung - + Preview: Vorschau: + + + Appearance + Erscheinungsbild + + + + This option is not available when all Networks are visible. +In this mode no separate status buffer is displayed. + Diese Option ist nicht verfügbar wenn alle Netzwerke sichtbar sind. +Keine separaten Statusfenster werden in diesem Modus angezeigt. + BufferViewWidget @@ -681,16 +873,6 @@ Diese Aktion kann nicht rückgängig gemacht werden! BufferWidget - - - <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> -<html><head><meta name="qrichtext" content="1" /><style type="text/css"> -p, li { white-space: pre-wrap; } -</style></head><body style=" font-family:'Trebuchet MS'; font-size:13pt; font-weight:400; font-style:normal;"> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><img src=":/pics/quassel-large.png" /><span style=" font-size:89pt; color:#00008b;">uassel IRC</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:49pt;"><span style=" font-size:22pt;">Chat comfortably. Anywhere.</span></p></body></html> - - Enlarge Chat View @@ -719,7 +901,7 @@ p, li { white-space: pre-wrap; } Ctrl+0 - Strg+0 + Strg+0 @@ -734,38 +916,43 @@ p, li { white-space: pre-wrap; } Zoom Original - Zoom zurücksetzen + Zoom zurücksetzen + + + + Actual Size + Derzeitige Größe ChannelBufferItem - + <b>Channel %1</b> <b>Kanal %1</b> - + <b>Users:</b> %1 <b>Benutzer:</b> %1 - + <b>Mode:</b> %1 <b>Modus:</b> %1 - + <b>Topic:</b> %1 <b>Thema:</b> %1 - + Not active <br /> Double-click to join Nicht aktiv <br /> Doppelklick zum Beitreten - + <p> %1 </p> <p> %1 </p> @@ -825,7 +1012,7 @@ p, li { white-space: pre-wrap; } General - Allgemein + Allgemein @@ -871,7 +1058,7 @@ p, li { white-space: pre-wrap; } <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Operation modes:</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-weight:600;"><span style=" font-weight:400; text-decoration: underline;">Opt-In:</span> <span style=" font-weight:400;">Only buffers on the right side are shown in chatmonitor</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" text-decoration: underline;">Opt-Out:</span> Buffers on the right side will be ignored in chatmonitor</p></body></html> - + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"><html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'DejaVu Sans'; font-size:9pt; font-weight:400; font-style:normal;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-weight:600;">Operation modes:</span></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-weight:600;"><span style=" font-weight:400; text-decoration: underline;">Opt-In:</span> <span style=" font-weight:400;">Lediglich Fenster auf der rechten Seite werden im Chatmonitor angezeigt</span></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" text-decoration: underline;">Opt-Out:</span> Fenster auf der rechten Seite werden im Chatmonitor ignoriert</p></body></html> @@ -903,6 +1090,11 @@ p, li { white-space: pre-wrap; } Show own messages Zeige eigene Nachrichten + + + Appearance + Erscheinungsbild + ChatMonitorView @@ -945,7 +1137,7 @@ p, li { white-space: pre-wrap; } ChatScene - + Copy Selection Auswahl kopieren @@ -986,15 +1178,20 @@ p, li { white-space: pre-wrap; } Client - + Identity already exists in client! Identität im Client schon vorhanden! + + + All Buffers + Alle Räume + ClientBacklogManager - + Processed %1 messages in %2 seconds. %1 Nachrichten in %2 Sekunden verarbeitet. @@ -1002,50 +1199,60 @@ p, li { white-space: pre-wrap; } ClientSyncer - + The Quassel Core you try to connect to is too old! Please consider upgrading. Der Quassel-Core, zu dem Sie eine Verbindung herzustellen versuchen, ist veraltet! Bitte ziehen Sie eine Aktualisierung in Betracht. - + <b>Invalid data received from core!</b><br>Disconnecting. <b>Ungültige Daten vom Core erhalten!</b><br>Verbindungsabbruch. Internal connections not yet supported. - Interne Verbindungen noch nicht unterstützt. + Interne Verbindungen noch nicht unterstützt. - + <b>This client is built without SSL Support!</b><br />Disable the usage of SSL in the account settings. <b>Dieser Client wurde ohne SSL-Unterstützung gebaut!</b><br />Schalten Sie die SSL-Benutzung in den Kontoeinstellungen ab. - + <b>The Quassel Core you are trying to connect to is too old!</b><br>Need at least core/client protocol v%1 to connect. <b>Der Quassel-Core, zu dem Sie eine Verbindung herzustellen versuchen, ist veraltet!</b><br>Benötige mindestens Core/Client-Protokoll v%1 zum Verbinden. - + <b>The Quassel Core you are trying to connect to does not support SSL!</b><br />If you want to connect anyways, disable the usage of SSL in the account settings. <b>Der Quassel-Core, zu dem Sie eine Verbindung herzustellen versuchen, unterstützt kein SSL!</b><br />Wenn Sie dennoch eine Verbindung herstellen wollen, schalten Sie die SSL-Benutzung in den Kontoeinstellungen ab. - + Logging in... Anmelden... + + + No Host to connect to specified. + Kein Host zum Verbinden festgelegt. + + + + Cert Digest changed! was: %1 + Zertifikat geändert! Vorher: %1 + ColorSettingsPage - + Appearance Erscheinungsbild - + Color settings Farben @@ -1067,438 +1274,666 @@ p, li { white-space: pre-wrap; } FG - VG + VG - + BG HG - + Use BG Benutze HG - + Default: Standard: - + Inactive: Inaktiv: - + Highlight: Hervorhebung: - + New Message: Neue Meldung: - + Other Activity: Andere Aktivität: - + Preview: Vorschau: - + 1 1 - + Chatview Chatansicht - + Server Activity Serveraktivität - + Foreground Vordergrund - + Background Hintergrund - + Error Message: Fehlermeldung: - + Notice Message: Notizmeldung: - + Plain Message: Einfache Meldung: - + Server Message: Servermeldung: - + Highlight Message: Highlight-Meldung: - + User Activity Benutzeraktivität - + Action Message: Aktionsmeldung: - + Join Message: Beitrittsmeldung: - + Kick Message: Rauswurfsmeldung: - + Mode Message: Modusmeldung: - + Part Message: Verlassensmeldung: - + Quit Message: Beendigungsmeldung: - + Rename Message: Umbenennungsmeldung: - + Message Meldung - + Timestamp: Zeitstempel: - + Sender: Absender: - + Nick: Spitzname: - + Hostmask: Rechnermaske: - + Channelname: Kanalname: - + Mode flags: Modusschalter: - + Url: Url: - + Mirc Color Codes Mirc-Farbkodierungen - + Color Codes Farbkodierungen - + Color 0: Farbe 0: - + Color 1: Farbe 1: - + Color 2: Farbe 2: - + Color 3: Farbe 3: - + Color 4: Farbe 4: - + Color 5: Farbe 5: - + Color 6: Farbe 6: - + Color 7: Farbe 7: - + Color 8: Farbe 8: - + Color 14: Farbe 14: - + Color 15: Farbe 15: - + Color 13: Farbe 13: - + Color 12: Farbe 12: - + Color 11: Farbe 11: - + Color 10: Farbe 10: - + Color 9: Farbe 9: - + Nickview Spitznamenansicht - + Nick status: Spitznamensstatus: - + Online: Angemeldet: - + Away: Abwesend: - + New Message Marker: Markierung für neue Nachrichten: + + + Enable + Einschalten + + + + Sender auto coloring: + Färbung der Absender: + ContentsChatItem - + Copy Link Address Linkadresse kopieren - Core + ContextMenuActionProvider - - Could not initialize any storage backend! Exiting... - Konnte keinen Speichermechanismus initialisieren! Beende... + + Connect + Verbinden - - Currently, Quassel only supports SQLite3. You need to build your -Qt library with the sqlite plugin enabled in order for quasselcore -to work. - Quassel unterstützt momentan ausschließlich SQLite3. -Die Qt-Bibliothek mit eingeschaltetem SQLite-Plugin -wird benötigt, damit der Quassel-Core funktioniert. + + Disconnect + Trenne Verbindung - - Calling restoreState() even though active sessions exist! - restoreState() aufgerufen, obwohl aktive Sitzungen vorhanden sind! + + Join + Beitreten - - Admin user or password not set. - Administrativbenutzer oder Passwort nicht gesetzt. + + Part + Verlassen - - Could not setup storage! - Speicher konnte nicht eingerichtet werden! + + Delete Buffer(s)... + Verlauf löschen... - - Creating admin user... - Erstelle Administrativbenutzer... + + Show Buffer + Fenster anzeigen - - Antique client trying to connect... refusing. - Antiquierter Client versucht zu verbinden... lehne ab. + + Joins + Joins - - <b>Your Quassel Client is too old!</b><br>This core needs at least client/core protocol version %1.<br>Please consider upgrading your client. - <b>Ihr Quassel-Client ist zu alt!</b><br>Dieser Core benötigt mindestens Client-/Core-Protokollversion %1.<br>Bitte ziehen Sie in Erwägung, Ihren Client zu aktualisieren. + + Parts + Parts - - Client %1 too old, rejecting. - Client %1 zu alt, lehne ab. + + Quits + Quits - - <b>Quassel Core Version %1</b><br>Built: %2<br>Up %3d%4h%5m (since %6) - <b>Quassel-Core Version %1</b><br>Erstellungsdatum: %2<br>Betriebsdauer: %3T%4S%5M (seit %6) + + Nick Changes + Spitznamenänderungen - - <b>Client not initialized!</b><br>You need to send an init message before trying to login. - <b>Client nicht initialisiert!</b><br>Sie müssen vor dem Anmeldungsversuch eine init-Meldung senden. + + Mode Changes + Modiänderungen - - Client %1 did not send an init message before trying to login, rejecting. - Client %1 hat vor dem Anmeldungsversuch keine init-Meldung gesendet, lehne ab. + + Day Changes + Tageswechsel - - <b>Invalid username or password!</b><br>The username/password combination you supplied could not be found in the database. - <b>Ungültiger Benutzername oder Passwort!</b><br>Die angegebene Benutzername/Passwort-Kombination konnte in der Datenbank nicht gefunden werden. + + Set as Default... + Als Standard setzen... - - Client %1 initialized and authenticated successfully as "%2" (UserId: %3). - Client %1 erfolgreich als "%2" (BenutzerId: %3) initialisiert und authentifiziert. + + Use Defaults... + Standardwerte benutzen... - - Non-authed client disconnected. - Nicht-authentifizierter Client getrennt. + + Join Channel... + Kanal beitreteten... - - Could not initialize session for client %1! - Konnte Sitzung für Client %1 nicht initialisieren! + + Start Query + Dialog starten - - Client connected from - Client verbunden von + + Show Query + Dialog anzeigen - - Client - Client + + Whois + Whois - - too old, rejecting. - zu alt, lehne ab. + + Version + Version - - Starting TLS for Client: - Starte TLS für Client: + + Time + Zeit - - did not send an init message before trying to login, rejecting. - hat vor dem Anmeldungsversuch keine init-Meldung gesendet, lehne ab. + + Ping + - - initialized and authenticated successfully as "%1" (UserId: %2). - initialisiert und erfolgreich als "%1" (BenutzerId: %2) authentifziert. + + Finger + - - Could not initialize session for client: - Konnte Sitzung für Client nicht erfolgreich initialisieren: + + Give Operator Status + Operator-Status geben - - Non-authed client disconnected. (socket allready destroyed) - Unauthentifizierter Client getrennt. (Socket bereits zerstört) + + Take Operator Status + Operator-Status nehmen - - Closing server for basic setup. - Beende Server für Setup. + + Give Voice + Voice geben + + + + Take Voice + Voice nehmen + + + + Kick From Channel + Aus Kanal werfen + + + + Ban From Channel + Vom Kanal bannen + + + + Kick && Ban + Rauswerfen und bannen + + + + Hide Buffer(s) Temporarily + Fenster temporär ausblenden + + + + Hide Buffer(s) Permanently + Fenster permanent ausblenden + + + + Show Channel List + Zeige Kanalliste + + + + Show Ignore List + Zeige Ignorieren-Liste + + + + Hide Events + Meldungen ausblenden + + + + CTCP + + + + + Actions + Aktionen + + + + Core + + + Could not initialize any storage backend! Exiting... + Konnte keinen Speichermechanismus initialisieren! Beende... + + + + Currently, Quassel only supports SQLite3. You need to build your +Qt library with the sqlite plugin enabled in order for quasselcore +to work. + Quassel unterstützt momentan ausschließlich SQLite3. +Die Qt-Bibliothek mit eingeschaltetem SQLite-Plugin +wird benötigt, damit der Quassel-Core funktioniert. + + + + Calling restoreState() even though active sessions exist! + restoreState() aufgerufen, obwohl aktive Sitzungen vorhanden sind! + + + + Admin user or password not set. + Administrativbenutzer oder Passwort nicht gesetzt. + + + + Could not setup storage! + Speicher konnte nicht eingerichtet werden! + + + + Creating admin user... + Erstelle Administrativbenutzer... + + + + Antique client trying to connect... refusing. + Antiquierter Client versucht zu verbinden... lehne ab. + + + + <b>Your Quassel Client is too old!</b><br>This core needs at least client/core protocol version %1.<br>Please consider upgrading your client. + <b>Ihr Quassel-Client ist zu alt!</b><br>Dieser Core benötigt mindestens Client-/Core-Protokollversion %1.<br>Bitte ziehen Sie in Erwägung, Ihren Client zu aktualisieren. + + + + Client %1 too old, rejecting. + Client %1 zu alt, lehne ab. + + + + <b>Quassel Core Version %1</b><br>Built: %2<br>Up %3d%4h%5m (since %6) + <b>Quassel-Core Version %1</b><br>Erstellungsdatum: %2<br>Betriebsdauer: %3T%4S%5M (seit %6) + + + + <b>Client not initialized!</b><br>You need to send an init message before trying to login. + <b>Client nicht initialisiert!</b><br>Sie müssen vor dem Anmeldungsversuch eine init-Meldung senden. + + + + Client %1 did not send an init message before trying to login, rejecting. + Client %1 hat vor dem Anmeldungsversuch keine init-Meldung gesendet, lehne ab. + + + + <b>Invalid username or password!</b><br>The username/password combination you supplied could not be found in the database. + <b>Ungültiger Benutzername oder Passwort!</b><br>Die angegebene Benutzername/Passwort-Kombination konnte in der Datenbank nicht gefunden werden. + + + + Client %1 initialized and authenticated successfully as "%2" (UserId: %3). + Client %1 erfolgreich als "%2" (BenutzerId: %3) initialisiert und authentifiziert. + + + + Non-authed client disconnected. + Nicht-authentifizierter Client getrennt. + + + + Could not initialize session for client %1! + Konnte Sitzung für Client %1 nicht initialisieren! + + + + Client connected from + Client verbunden von + + + + Client + Client + + + + too old, rejecting. + zu alt, lehne ab. + + + + Starting TLS for Client: + Starte TLS für Client: + + + + did not send an init message before trying to login, rejecting. + hat vor dem Anmeldungsversuch keine init-Meldung gesendet, lehne ab. + + + + initialized and authenticated successfully as "%1" (UserId: %2). + initialisiert und erfolgreich als "%1" (BenutzerId: %2) authentifziert. + + + + Could not initialize session for client: + Konnte Sitzung für Client nicht erfolgreich initialisieren: + + + + Non-authed client disconnected. (socket allready destroyed) + Unauthentifizierter Client getrennt. (Socket bereits zerstört) + + + + Closing server for basic setup. + Beende Server für Setup. + + + + Invalid listen address %1 + Ungültige Adresse %1 + + + + Listening for GUI clients on IPv4 %1 port %2 using protocol version %3 + Warte auf GUI Clients auf IPv4 %1 (port %2) mit Protollversion %3 + + + + Could not open IPv4 interface %1:%2: %3 + Konnte IPv4-Interface nicht öffnen %1:%2:%3 + + + + Listening for GUI clients on IPv6 %1 port %2 using protocol version %3 + Warte auf GUI Clients auf IPv4 %1 (port %2) mit Protollversion %3 + + + + Could not open IPv6 interface %1:%2: %3 + Konnte IPv4-Interface nicht öffnen %1:%2:%3 + + + + Invalid listen address %1, unknown network protocol + Ungültige Adresse %1, unbekanntes Netzwerkprotokoll + + + + Could not open any network interfaces to listen on! + Konnte keine Netzwerk-Interfaces öffnen CoreAccountEditDlg - + Add Core Account Remote-Konto hinzufügen @@ -1846,27 +2281,27 @@ p, li { white-space: pre-wrap; } CoreConnectDlg - + Connect to Quassel Core Mit Quassel-Core verbinden - + User: Benutzer: - + Password: Passwort: - + Remember Merken - + Always use this account Diesen Account immer benutzen @@ -1876,7 +2311,7 @@ p, li { white-space: pre-wrap; } Neu - + Delete Löschen @@ -1901,117 +2336,117 @@ p, li { white-space: pre-wrap; } Verbinden - + Remove Account Settings Kontoeinstellungen entfernen - + Do you really want to remove your local settings for this Quassel Core account?<br>Note: This will <em>not</em> remove or change any data on the Core itself! Möchten Sie wirklich Ihre lokalen Einstellungen für dieses Konto löschen?<br>Anmerkung: Dies wird die Daten im Core selbst <em>nicht</em> entfernen oder ändern! - + Connect to %1 Mit %1 verbinden - + <div style=color:red;>Connection to %1 failed!</div> <div style=color:red;>Verbindung zu %1 fehlgeschlagen!</div> - + Not connected to %1. Nicht mit %1 verbunden. - + Looking up %1... Schlage %1 nach... - + Connecting to %1... Verbinde mit %1... - + Connected to %1 Verbunden mit %1 - + Unknown connection state to %1 Unbekannter Verbindungsstatus zu %1 - + Logging in... Anmelden... - + Login Anmeldung - + Edit... Ändern... - + Add... Hinzufügen... - + Initializing your connection Initialisiere Ihre Verbindung - + Connected to apollo.mindpool.net. Verbunden zu apollo.mindpool.net. - + Configure your Quassel Core Ihren Quassel-Core konfigurieren - + The Quassel Core you are connected to is not configured yet. You may now launch a configuration wizard that helps you setting up your Core. Der Quassel-Core, mit dem Sie eine Verbindung herstellen möchten, ist noch unkonfiguriert. Sie können jetzt den Konfigurationshelfer starten, der Ihnen bei der Konfiguration Ihres Cores behilflich ist. - + Launch Wizard Helfer starten - + Initializing your session... Initialisiere Ihre Sitzung... - + <b>Please be patient while your client synchronizes with the Quassel Core!</b> <b>Bitte haben Sie etwas Geduld, während sich Ihr Client mit dem Quassel-Core synchronisiert!</b> - + Session state: Sitzungsstatus: - + Network states: Netzwerkstatus: - + 0/0 0/0 @@ -2031,18 +2466,38 @@ p, li { white-space: pre-wrap; } Internen Core benutzen - + Use internal core Internen Core benutzen - + THIS IS A PLACEHOLDER TO RESERVE SOME SPACE + + + <div>Errors occurred while connecting to "%1":</div> + <div>Fehler beim Verbinden zu "%1":</div> + + + + view SSL Certificate + SSL-Zertifikat anzeigen + + + + add to known hosts + zu den bekannten Hosts hinzufügen + + + + Continue connection + Verbinden fortsetzen + CoreConnectProgressDlg @@ -2146,37 +2601,47 @@ SOME SPACE CoreNetwork - + Connection failed. Cycling to next Server Verbindung fehlgeschlagen. Wechsle zum nächsten Server - + Connecting to %1:%2... Verbinde mit %1:%2... Disconnecting. - Trenne Verbindung. + Trenne Verbindung. - + Could not connect to %1 (%2) Konnte nicht mit %1 (%2) verbinden - + Connection failure: %1 Verbindungsfehler: %1 + + + Disconnecting. (%1) + Trenne Verbindung. (%1) + + + + Core Shutdown + Core-Shutdown + CoreSession Default Identity - Standardidentität + Standardidentität @@ -2184,22 +2649,22 @@ SOME SPACE Client %1 hat Verbindung getrennt (BenutzerId: %2). - + CoreSession::createNetwork(): Got invalid networkId from Core when trying to create network %1! CoreSession::createNetwork(): Ungültige networkId vom Core erhalten beim Versuch Netzwerk %1 anzulegen! - + CoreSession::createNetwork(): Trying to create a network that already exists, updating instead! CoreSession::createNetwork(): Versuche ein Netzwerk anzulegen, das bereits existiert, aktualisiere stattdessen! - + Client Client - + disconnected (UserId: %1). getrennt (UserId: %1). @@ -2455,12 +2920,12 @@ SOME SPACE Behaviour - Verhalten + Verhalten General - Allgemein + Allgemein @@ -2647,13 +3112,18 @@ SOME SPACE Errors: Fehler: + + + Misc + Verschiedenes + HighlightSettingsPage Behaviour - Verhalten + Verhalten @@ -2740,6 +3210,11 @@ SOME SPACE Case sensitive Groß-/Kleinschreibung beachten + + + Appearance + Erscheinungsbild + IdentitiesSettingsPage @@ -2749,49 +3224,49 @@ SOME SPACE Hinzufügen... - + ... ... General - Allgemein + Allgemein Real Name: - Realname: + Realname: Nicknames - Spitznamen + Spitznamen &Add... - &Hinzufügen... + &Hinzufügen... Re&name... - Umbe&nennen... + Umbe&nennen... Move upwards in list - In Liste nach oben verschieben + In Liste nach oben verschieben Move downwards in list - In Liste nach unten verschieben + In Liste nach unten verschieben A&way - Ab&wesend + Ab&wesend @@ -2826,90 +3301,90 @@ SOME SPACE Advanced - Erweitert + Erweitert Ident: - Ident: + Ident: Messages - Meldungen + Meldungen Part Reason: - Part-Grund: + Part-Grund: Quit Reason: - Beendigungsgrund: + Beendigungsgrund: Kick Reason: - Rauswurfsgrund: + Rauswurfsgrund: - + Identities Identitäten - + <b>The following problems need to be corrected before your changes can be applied:</b><ul> <b>Die folgenden Probleme müssen behoben werden, bevor Ihre Änderungen angewendet werden können:</b><ul> - + <li>All identities need an identity name set</li> <li>Alle Identitäten benötigen einen Identitätsnamen</li> - + <li>Every identity needs at least one nickname defined</li> <li>Bei jeder Identität muss mindestens ein Spitzname angegeben werden</li> - + <li>You need to specify a real name for every identity</li> <li>Sie müssen einen Realnamen für jede Identität angeben</li> - + <li>You need to specify an ident for every identity</li> <li>Sie müssen einen Ident für jede Identität angeben</li> - + </ul> - + One or more identities are invalid Eine oder mehrere Identitäten sind ungültig - + Delete Identity? Identität löschen? - + Do you really want to delete identity "%1"? Wollen Sie wirklich Identität "%1" löschen? - + Rename Identity Identität umbenennen - + Please enter a new name for the identity "%1"! Bitte geben Sie einen neuen Namen für die Identität "%1" an! @@ -2926,138 +3401,138 @@ SOME SPACE The "Real Name" is shown in /whois. - Der "Realname" wird im /whois angezeigt. + Der "Realname" wird im /whois angezeigt. Add Nickname - Spitznamen hinzufügen + Spitznamen hinzufügen Remove Nickname - Spitznamen entfernen + Spitznamen entfernen Remove - Etnfernen + Etnfernen The "ident" is part of your hostmask and, together with your host, uniquely identifies you within the IRC network. - Der "Ident" bildet zusammen mit Ihrer Rechneradresse die Rechnermaske und identifiziert sie so eindeutig im IRC-Netzwerk. + Der "Ident" bildet zusammen mit Ihrer Rechneradresse die Rechnermaske und identifiziert sie so eindeutig im IRC-Netzwerk. Default Away Settings - Standard-Abwesenheitseinstellungen + Standard-Abwesenheitseinstellungen Nick to be used when being away - Spitzname wenn abwesend + Spitzname wenn abwesend Default away reason - Standard-Abwesenheitsgrund + Standard-Abwesenheitsgrund Set away when all clients have detached from the core - Als abwesend markieren, wenn alle Clients vom Core getrennt wurden + Als abwesend markieren, wenn alle Clients vom Core getrennt wurden Away On Detach - Als abwesend markieren, wenn vom Core getrennt + Als abwesend markieren, wenn vom Core getrennt Override default away reason for auto-away on detach - Überschreibe Standard-Abwesenheitsgrund, wenn vom Core getrennt + Überschreibe Standard-Abwesenheitsgrund, wenn vom Core getrennt Not implemented yet - Noch nicht implementiert + Noch nicht implementiert Away On Idle - Als abwesend markieren, wenn untätig + Als abwesend markieren, wenn untätig Set away after - Als abwesend markieren nach + Als abwesend markieren nach minutes of being idle - Minuten Untätigkeit + Minuten Untätigkeit Away Reason: - Abwesenheitsgrund: + Abwesenheitsgrund: Away Nick: - Abwesenheitsspitzname: + Abwesenheitsspitzname: Load a Key - Schlüssel laden + Schlüssel laden No Key loaded - Kein Schlüssel geladen + Kein Schlüssel geladen Load - Laden + Laden RSA - RSA + RSA DSA - DSA + DSA Clear - Aufräumen + Aufräumen Load a Certificate - Ein Zertifikat laden + Ein Zertifikat laden No Certificate loaded - Kein Zertifikat geladen + Kein Zertifikat geladen You need an SSL Capable Client to edit your Cores SSL Key and Certificate - Sie brauchen einen SSL-fähigen Client um die SSL-Schlüssel und Zertifikate des Cores zu ändern + Sie brauchen einen SSL-fähigen Client um die SSL-Schlüssel und Zertifikate des Cores zu ändern Warning: you are not connected with a secured connection to the Quassel Core! Proceeding will cause an unencrypted transfer of your SSL Key and SSL Certificate! - Warnung: Sie sind nicht mit einer verschlüsselten Verbindung zum Quassel-Core verbunden! + Warnung: Sie sind nicht mit einer verschlüsselten Verbindung zum Quassel-Core verbunden! Fortfahren bedeutet die unverschlüsselte Übertragung Ihres SSL-Schlüssels und SSL-Zertifikats! @@ -3068,48 +3543,53 @@ Fortfahren bedeutet die unverschlüsselte Übertragung Ihres SSL-Schlüssels und Use SSL Key - SSL-Schlüssel benutzen + SSL-Schlüssel benutzen Key Type: - Schlüsselformat: + Schlüsselformat: Use SSL Certificate - SSL-Zertifikat benutzen + SSL-Zertifikat benutzen Organisation: - Organisation: + Organisation: CommonName: - Name: + Name: Continue - Fortfahren + Fortfahren + + + + Misc + Verschiedenes Identity - + <empty> <leer> - + Quassel IRC User Quassel-IRC-Benutzer - + Gone fishing. Mit'm Fahrrad Sahne holen. @@ -3119,7 +3599,7 @@ Fortfahren bedeutet die unverschlüsselte Übertragung Ihres SSL-Schlüssels und Sahne geholt. - + Not here. No, really. not here! Nicht da. Nein, ehrlich. Nicht da! @@ -3129,39 +3609,318 @@ Fortfahren bedeutet die unverschlüsselte Übertragung Ihres SSL-Schlüssels und Wieder im Rennen! - + Kindergarten is elsewhere! Der Kindergarten ist woanders! - + http://quassel-irc.org - Chat comfortably. Anywhere. - + All Quassel clients vanished from the face of the earth... - InputWidget + IdentityEditWidget - - Form - Formular + + Advanced + Erweitert - - Focus Input Line - Eingabezeile fokussieren + + Load a Key + Schlüssel laden - + + No Key loaded + Kein Schlüssel geladen + + + + Load + Laden + + + + RSA + RSA + + + + DSA + DSA + + + + Clear + Aufräumen + + + + Load a Certificate + Ein Zertifikat laden + + + + No Certificate loaded + Kein Zertifikat geladen + + + + General + Allgemein + + + + Real Name: + Realname: + + + + The "Real Name" is shown in /whois. + Der "Realname" wird im /whois angezeigt. + + + + Nicknames + Spitznamen + + + + Add Nickname + Spitznamen hinzufügen + + + + &Add... + &Hinzufügen... + + + + Remove Nickname + Spitznamen entfernen + + + + Remove + Entfernen + + + + Rename Identity + Identität umbenennen + + + + Re&name... + Umbe&nennen... + + + + Move upwards in list + In Liste nach oben verschieben + + + + ... + ... + + + + Move downwards in list + In Liste nach unten verschieben + + + + A&way + Ab&wesend + + + + Default Away Settings + Standard-Abwesenheitseinstellungen + + + + Nick to be used when being away + Spitzname wenn abwesend + + + + Default away reason + Standard-Abwesenheitsgrund + + + + Away Nick: + Abwesenheitsspitzname: + + + + Away Reason: + Abwesenheitsgrund: + + + + Set away when all clients have detached from the core + Als abwesend markieren, wenn alle Clients vom Core getrennt wurden + + + + Away On Detach + Als abwesend markieren, wenn vom Core getrennt + + + + Not implemented yet + Noch nicht implementiert + + + + Away On Idle + Als abwesend markieren, wenn untätig + + + + Set away after + Als abwesend markieren nach + + + + minutes of being idle + Minuten Untätigkeit + + + + Ident: + Ident: + + + + The "ident" is part of your hostmask and, together with your host, uniquely identifies you within the IRC network. + Der "Ident" bildet zusammen mit Ihrer Rechneradresse die Rechnermaske und identifiziert sie so eindeutig im IRC-Netzwerk. + + + + Messages + Meldungen + + + + Part Reason: + Part-Grund: + + + + Quit Reason: + Beendigungsgrund: + + + + Kick Reason: + Rauswurfsgrund: + + + + You need an SSL Capable Client to edit your Cores SSL Key and Certificate + Sie brauchen einen SSL-fähigen Client um die SSL-Schlüssel und Zertifikate des Cores zu ändern + + + + Warning: you are not connected with a secured connection to the Quassel Core! +Proceeding will cause an unencrypted transfer of your SSL Key and SSL Certificate! + Warnung: Sie sind nicht mit einer verschlüsselten Verbindung zum Quassel-Core verbunden! +Fortfahren bedeutet die unverschlüsselte Übertragung Ihres SSL-Schlüssels und SSL-Zertifikats! + + + + Continue + Fortfahren + + + + Use SSL Key + SSL-Schlüssel benutzen + + + + Key Type: + Schlüsselformat: + + + + Use SSL Certificate + SSL-Zertifikat benutzen + + + + Organisation: + Organisation: + + + + CommonName: + Name: + + + + IdentityPage + + + Setup Identity + Identität konfigurieren + + + + Default Identity + Standardidentität + + + + InputLine + + + Do you really want to paste %1 lines? + Wollen Sie wirklich %1 Zeilen senden? + + + + Paste Protection + Spamschutz + + + + InputWidget + + + Form + Formular + + + + Focus Input Line + Eingabezeile fokussieren + + + Ctrl+L Strg+L + + IrcConnectionWizard + + + Save && Connect + Speichern und Verbinden + + IrcListModel @@ -3183,152 +3942,152 @@ Fortfahren bedeutet die unverschlüsselte Übertragung Ihres SSL-Schlüssels und IrcServerHandler - + %1 has changed topic for %2 to: "%3" %1 hat das Thema für %2 geändert zu: "%3" - + No topic is set for %1. Für %1 ist kein Thema gesetzt. - + Topic for %1 is "%2" Thema für %1 ist "%2" - + Topic set by %1 on %2 - Thema in %2 gesetzt von %1 + Thema gesetzt von %1 am %2 - + %1 - + [Whois] %1 is away: "%2" [Whois] %1 ist abwesend: "%2" - + %1 is away: "%2" %1 ist abwesend: "%2" - + [Whois] %1 [Whois] %1 - + [Whois] %1 is %2 (%3) [Whois] %1 ist %2 (%3) - + %1 is online via %2 (%3) %1 ist angemeldet über %2 (%3) - + [Whowas] %1 [Whowas] %1 - + [Whowas] %1 was %2 (%3) [Whowas] %1 war %2 (%3) - + [Who] End of /WHO list for %1 [Who] Ende der /WHO Liste für %1 - + [Whois] %1 is logged in since %2 [Whois] %1 ist seit %2 angemeldet - + [Whois] %1 is idling for %2 (%3) [Whois] %1 ist seit %2 (%3) inaktiv - + [Whois] idle message: %1 [Whois] Inaktivmeldung: %1 - + [Whois] %1 is a user on channels: %2 [Whois] %1 ist Benutzer in den Kanälen: %2 - + [Whois] %1 has voice on channels: %2 [Whois] %1 hat Voice in den Kanälen: %2 - + [Whois] %1 is an operator on channels: %2 [Whois] %1 ist Operator in den Kanälen: %2 - + Channel %1 has %2 users. Topic is: %3 Kanal %1 hat %2 Benutzer. Thema ist: %3 - + End of channel list Ende der Kanalliste - + [Who] %1 [Who] %1 There is a nickname in your identity's nicklist which contains illegal characters - Ein Spitzname der Spitznamensliste Ihrer Identität enthält ungültige Zeichen + Ein Spitzname der Spitznamensliste Ihrer Identität enthält ungültige Zeichen Due to a bug in Unreal IRCd (and maybe other irc-servers too) we're unable to determine the erroneous nick - Auf Grund eines Fehlers im Unreal IRCs (und evtl. auch anderen IRC-Servern) können wir den fehlerhaften Spitznamen nicht ermitteln + Auf Grund eines Fehlers im Unreal IRCs (und evtl. auch anderen IRC-Servern) können wir den fehlerhaften Spitznamen nicht ermitteln Please use: /nick <othernick> to continue or clean up your nicklist - Bitte benutzen Sie: /nick <andererSpitzname> zum Fortfahren oder säubern Sie Ihre Spitznamensliste + Bitte benutzen Sie: /nick <andererSpitzname> zum Fortfahren oder säubern Sie Ihre Spitznamensliste - + Nick %1 contains illegal characters Spitzname %1 enthält ungültige Zeichen - + Nick already in use: %1 Spitzname bereits in Benutzung: %1 - + No free and valid nicks in nicklist found. use: /nick <othernick> to continue Keine freien und gültigen Spitznamen in Spitznamensliste gefunden. Benutze: /nick <andererSpitzname> zum Fortfahren - + Received RPL_ISUPPORT (005) without parameters! RPL_ISUPPORT (005) ohne Parameter erhalten! - + Received non RFC compliant RPL_ISUPPORT: this can lead to unexpected behavior! nicht RFC-konformes RPL_ISUPPORT erhalten: Dies kann unerwartete Auswirkungen haben! @@ -3336,17 +4095,17 @@ Fortfahren bedeutet die unverschlüsselte Übertragung Ihres SSL-Schlüssels und IrcUserItem - + idling since %1 untätig seit %1 - + login time: %1 angemeldet seit: %1 - + server: %1 Server: %1 @@ -3367,7 +4126,7 @@ Fortfahren bedeutet die unverschlüsselte Übertragung Ihres SSL-Schlüssels und Warte auf Kern... - + Not connected to core. Nicht mit Core verbunden. @@ -3397,7 +4156,7 @@ Fortfahren bedeutet die unverschlüsselte Übertragung Ihres SSL-Schlüssels und Hilfe - + Debug Debug @@ -3452,7 +4211,7 @@ Fortfahren bedeutet die unverschlüsselte Übertragung Ihres SSL-Schlüssels und Quassel konfigurieren... - + F7 F7 @@ -3497,32 +4256,32 @@ Fortfahren bedeutet die unverschlüsselte Übertragung Ihres SSL-Schlüssels und Mit Kern verbinden... - + Connected to core. Mit Quassel-Core verbunden. Edit &Networks... - N&etzwerke ändern... + N&etzwerke ändern... - + Nicks Spitznamen - + Chat Monitor Chatmonitor - + Inputline Eingabezeile - + Topic Thema @@ -3532,17 +4291,17 @@ Fortfahren bedeutet die unverschlüsselte Übertragung Ihres SSL-Schlüssels und Statusleiste - + &File &Datei - + &Networks &Netzwerke - + &Settings Ein&stellungen @@ -3552,7 +4311,7 @@ Fortfahren bedeutet die unverschlüsselte Übertragung Ihres SSL-Schlüssels und &Ansichten - + &Help &Hilfe @@ -3592,57 +4351,57 @@ Fortfahren bedeutet die unverschlüsselte Übertragung Ihres SSL-Schlüssels und Informationen zum Kern - + &Connect to Core... Zum Core &verbinden... - + &Disconnect from Core Vom Core &trennen - + Core &Info... Core-&Info... - + &Quit &Beenden - + Ctrl+Q Strg+Q &Manage Buffer Views... - &Ansichten verwalten... + &Ansichten verwalten... &Lock Dock Positions - Fensterleisten &fixieren + Fensterleisten &fixieren - + Show &Search Bar &Suchleiste anzeigen - + Ctrl+F Strg+F - + Show Status &Bar St&atusleiste anzeigen - + &Configure Quassel... Quassel &konfigurieren... @@ -3657,65 +4416,95 @@ Fortfahren bedeutet die unverschlüsselte Übertragung Ihres SSL-Schlüssels und Ü&ber Qt... - + Debug &NetworkModel Debug &NetworkModel - + &View &Ansicht - + &Buffer Views &Ansichten - + Show Nick List Spitznamenliste anzeigen - + Show Chat Monitor Chatmonitor anzeigen - + Show Input Line Eingabezeile anzeigen - + Show Topic Line Thema anzeigen Core Lag: %1 msec - Latenz: %1 msecs + Latenz: %1 msecs - + Debug &Log - + Debug &MessageModel - + &About Quassel &Über Quassel - + About &Qt Ü&ber Qt + + + Configure &Networks... + &Netzwerke konfigurieren... + + + + &Configure Buffer Views... + &Ansichten konfigurieren... + + + + &Lock Layout + Ansicht &fixieren + + + + Show Away Log + Abwesenheitslog anzeigen + + + + &Toolbars + &Werkzeugleiste + + + + Core Lag: %1 + Latenz: %1 + Message @@ -3763,7 +4552,7 @@ Fortfahren bedeutet die unverschlüsselte Übertragung Ihres SSL-Schlüssels und MessageModel - + Requesting %1 messages from backlog for buffer %2:%3 Lade %1 Nachrichten von Verlauf für Fenster %2:%3 @@ -3778,7 +4567,60 @@ Fortfahren bedeutet die unverschlüsselte Übertragung Ihres SSL-Schlüssels und Processing Messages - Verarbeite Verlauf + Verarbeite Verlauf + + + + Receiving Backlog + Empfange Rückspeicher + + + + NetworkAddDlg + + + Add Network + Netzwerk hinzufügen + + + + Use preset: + Voreinstellung benutzen: + + + + Manually specify network settings + Netzwerkeinstellungen manuell einstellen + + + + Manual Settings + Manuelle Einstellungen + + + + Network name: + Netzwerkname: + + + + Server address: + Serveradresse: + + + + Port: + Port: + + + + Server password: + Serverpasswort: + + + + Use secure connection + Gesicherte Verbindung benutzen @@ -3822,7 +4664,7 @@ Fortfahren bedeutet die unverschlüsselte Übertragung Ihres SSL-Schlüssels und Bitte geben Sie einen Netzwerknamen ein: - + Add Network Netzwerk hinzufügen @@ -3830,17 +4672,17 @@ Fortfahren bedeutet die unverschlüsselte Übertragung Ihres SSL-Schlüssels und NetworkItem - + Server: %1 Server: %1 - + Users: %1 Benutzer: %1 - + Lag: %1 msecs Latenz: %1 msecs @@ -3848,17 +4690,17 @@ Fortfahren bedeutet die unverschlüsselte Übertragung Ihres SSL-Schlüssels und NetworkModel - + Buffer Fenster - + Topic Thema - + Nick Count Spitznamenzähler @@ -3868,112 +4710,102 @@ Fortfahren bedeutet die unverschlüsselte Übertragung Ihres SSL-Schlüssels und Connect - Verbinden + Verbinden Disconnect - Trenne Verbindung + Trenne Verbindung Join - Beitreten + Beitreten Part - Verlassen + Verlassen Delete Buffer... - Verlauf löschen... + Verlauf löschen... Joins - Joins + Joins Parts - Parts + Parts Quits - Quits + Quits Nick Changes - Spitznamenänderungen + Spitznamenänderungen Mode Changes - Modiänderungen + Modiänderungen Day Changes - Tageswechsel + Tageswechsel Apply to All Chat Views... - Auf alle Chatansichten anwenden... + Auf alle Chatansichten anwenden... Join Channel... - Kanal beitreteten... + Kanal beitreteten... Whois - Whois + Whois Version - Version + Version Time - Zeit - - - - Ping - - - - - Finger - + Zeit Give Operator Status - Operator-Status geben + Operator-Status geben Take Operator Status - Operator-Status nehmen + Operator-Status nehmen Give Voice - Voice geben + Voice geben Take Voice - Voice nehmen + Voice nehmen @@ -3998,87 +4830,134 @@ Fortfahren bedeutet die unverschlüsselte Übertragung Ihres SSL-Schlüssels und Hide Buffer(s) Temporarily - Fenster temporär ausblenden + Fenster temporär ausblenden Hide Buffer(s) Permanently - Fenster permanent ausblenden + Fenster permanent ausblenden Show Channel List - Zeige Kanalliste + Zeige Kanalliste Show Ignore List - Zeige Ignorieren-Liste + Zeige Ignorieren-Liste Hide Events - Meldungen ausblenden + Meldungen ausblenden Remove buffer permanently? - Verlauf permanent löschen? + Verlauf permanent löschen? Do you want to delete the buffer "%1" permanently? This will delete all related data, including all backlog data, from the core's database! - Möchten Sie den Verlauf "%1" permanent löschen? Hierdurch werden alle in Verbindung stehenden Daten - inklusive des gesamten Rückspeichers - aus der Core-Datenbank gelöscht! + Möchten Sie den Verlauf "%1" permanent löschen? Hierdurch werden alle in Verbindung stehenden Daten - inklusive des gesamten Rückspeichers - aus der Core-Datenbank gelöscht! Join Channel - Kanal beitreten + Kanal beitreten Input channel name: - Kanalnamen eingeben: + Kanalnamen eingeben: Show Buffer - Fenster anzeigen + Fenster anzeigen Start Query - Dialog starten + Dialog starten + + + + Show Query + Dialog anzeigen + + + + Kick From Channel + Aus Kanal werfen + + + + Ban From Channel + Vom Kanal bannen + + + + Kick && Ban + Rauswerfen und bannen + + + + Actions + Aktionen + + + + NetworkModelController + + + Do you want to delete the following buffer(s) permanently? + + Wollen Sie dieses Fenster wirklich permanent löschen? + Wollen Sie diese Fenster wirklich permanent löschen? + + + + + <b>Note:</b> This will delete all related data, including all backlog data, from the core's database and cannot be undone. + <b>Achtung:</b> Diese Aktion wird alle betroffenen Daten, einschließlich dem Rückspeicher, vom Core entfernen. Kann nich rückgängig gemacht werden. - - Show Query - Dialog anzeigen + + <br>Active channel buffers cannot be deleted, please part the channel first. + <br>Aktive Channelfenster können nicht gelöscht werden. Bitte den Kanal erst verlassen. - - Kick From Channel - Aus Kanal werfen + + Remove buffers permanently? + Verläufe permanent löschen? + + + NetworkModelController::JoinDlg - - Ban From Channel - Vom Kanal bannen + + Join Channel + Kanal beitreten - - Kick && Ban - Rauswerfen und bannen + + Network: + Netzwerk: - - CTCP - + + Channel: + Kanal: + + + NetworkPage - - Actions - Aktionen + + Setup Network Connection + Netzwerkverbindung konfigurieren @@ -4086,55 +4965,55 @@ Fortfahren bedeutet die unverschlüsselte Übertragung Ihres SSL-Schlüssels und General - Allgemein + Allgemein - + Networks Netzwerke - + <b>The following problems need to be corrected before your changes can be applied:</b><ul> <b>Die folgenden Probleme müssen behoben werden, bevor Ihre Änderungen angewendet werden können:</b><ul> - + <li>All networks need at least one server defined</li> <li>Jedes Netzwerk benötigt die Angabe mindestens eines Servers</li> - + </ul> </ul> - + Invalid Network Settings Ungültige Netzwerkeinstellungen Connect - Verbinde + Verbinde Disconnect - Trenne Verbindung + Trenne Verbindung Apply first! - Zuerst anwenden! + Zuerst anwenden! - + Delete Network? Netzwerk löschen? - + Do you really want to delete the network "%1" and all related settings, including the backlog? Wollen Sie das Netzwerk "%1" und alle damit verbundenen Einstellungen inklusive des Rückspeichers wirklich löschen? @@ -4144,205 +5023,205 @@ Fortfahren bedeutet die unverschlüsselte Übertragung Ihres SSL-Schlüssels und Formular - + Re&name... Umbe&nennen... - + &Add... &Hinzufügen... - + De&lete &Löschen Connect now - Jetzt verbinden + Jetzt verbinden - + Network Details Netzwerkdetails - + Identity: Identität: - + Servers Server - + Manage servers for this network Server für dieses Netzwerk verwalten - + &Edit... Änd&ern... - + Move upwards in list In Liste nach oben verschieben - + ... ... - + Move downwards in list In Liste nach unten verschieben Choose random server for connecting - Beim Verbinden zufälligen Server wählen + Beim Verbinden zufälligen Server wählen Perform - Ausführen + Ausführen - + Configure automatic identification or misc. commands to be executed after connecting to a server Automatische Identifikation oder verschiedene Befehle zur Ausführung nach Herstellen der Serververbindung konfigurieren - + Commands to execute on connect: Beim Verbinden auszuführende Befehle: - + Specify a list of IRC commands to be executed upon connect. Note that Quassel IRC automatically rejoins channels, so /join will rarely be needed here! Geben Sie eine Liste von IRC-Befehlen an, die beim Verbinden ausgeführt werden. Berücksichtigen Sie, dass Quassel IRC Kanälen automatisch erneut beitritt. /join wird hier daher selten benötigt! - + Auto Identify Auto-Identifizieren - + NickServ NickServ - + Service: Service: - + Password: Passwort: Advanced - Erweitert + Erweitert - + Configure advanced settings such as message encodings and automatic reconnect Erweiterte Einstellungen wie Meldungskodierung und automatisches Wiederverbinden konfigurieren - + Control encodings for in- and outgoing messages Kodierung für ein- und abgehende Meldungen kontrollieren - + Encodings Kodierungen - + Specify which encoding your messages will be sent in. UTF-8 should be a sane choice for most networks. Geben Sie an, mit welcher Kodierung Ihre Meldungen gesendet werden sollen. UTF-8 sollte für die meisten Netzwerke eine sinnvolle Wahl sein. - + Send messages in: Meldungen senden in: - + Incoming messages encoded in Utf8 will always be treated as such. This setting defines the encoding for messages that are not Utf8. In UTF-8 kodierte eingehende Meldungen werden immer als solche behandelt. Diese Einstellung bestimmt die Kodierung für Meldungen, die nicht UTF-8-kodiert sind. - + Receive fallback: Fallback für Empfang: - + This specifies how control messages, nicks and servernames are encoded. Unless you *really* know what you do, leave this as ISO-8859-1! Dies gibt an, wie Kontrolmeldungen, Spitznamen und Servernamen kodiert sind. Lassen Sie dies auf ISO-8859-1 gesetzt, falls Sie nicht *wirklich* wissen, was Sie tun! - + Server encoding: Serverkodierung: Use default settings for encodings (recommended) - Standardeinstellungen für Kodierungen verwenden (empfohlen) + Standardeinstellungen für Kodierungen verwenden (empfohlen) Use defaults - Standardwerte benutzen + Standardwerte benutzen - + Control automatic reconnect to the network Automatisches Wiederverbinden zum Netzwerk kontrollieren - + Automatic Reconnect Automatisches Wiederverbinden - + Interval: Intervall: - + Retries: Wiederversuche: - + Unlimited Unbegrenzt - + Rejoin all channels on reconnect Allen Kanälen beim Wiederverbinden erneut beitreten @@ -4352,15 +5231,35 @@ Lassen Sie dies auf ISO-8859-1 gesetzt, falls Sie nicht *wirklich* wissen, was S s - + s s + + + Misc + Verschiedenes + + + + Commands + Befehle + + + + Connection + Verbindung + + + + Use Custom Encodings + Spezifische Kodierung verwenden + NickEditDlg - + Add Nickname Spitznamen hinzufügen @@ -4476,7 +5375,7 @@ Lassen Sie dies auf ISO-8859-1 gesetzt, falls Sie nicht *wirklich* wissen, was S Behaviour - Verhalten + Verhalten @@ -4518,6 +5417,11 @@ Lassen Sie dies auf ISO-8859-1 gesetzt, falls Sie nicht *wirklich* wissen, was S Timeout Zeitüberschreitung + + + Appearance + Erscheinungsbild + PhononNotificationBackend::ConfigWidget @@ -4548,7 +5452,7 @@ Lassen Sie dies auf ISO-8859-1 gesetzt, falls Sie nicht *wirklich* wissen, was S QObject - + Requesting a total of up to %1 backlog messages for %2 buffers Lade insgesamt %1 Nachrichten vom Verlauf von %2 Fenstern @@ -4558,15 +5462,25 @@ Lassen Sie dies auf ISO-8859-1 gesetzt, falls Sie nicht *wirklich* wissen, was S Zur Zwischenablage kopieren - + Requesting up to %1 of all unread backlog messages (plus additional %2) Lade insgesamt %1 ungelesene Nachrichten (und weitere %2) - + Requesting a total of up to %1 unread backlog messages for %2 buffers Lade insgesamt %1 ungelese Nachrichten in %2 Fenster + + + Welcome to Quassel IRC + Willkommen zu Quassel IRC + + + + This wizard will help you to set up your default identity and your IRC network connection.<br>This only covers basic settings. You can cancel this wizard any time and use the settings dialog for more detailed changes. + Dieser Dialog wird Ihnen helfen, Ihre Identität und ihre IRC-Verbindungen auszuwählen.<br>Dies schließt nur die wichtigsten Einstellungen mit ein. Sie können diesen Dialog jederzeit schließen und in den Einstellungen weitere Modifikationen vornehmen. + QShortcut @@ -4633,27 +5547,27 @@ Lassen Sie dies auf ISO-8859-1 gesetzt, falls Sie nicht *wirklich* wissen, was S Quassel::secondsToString() - + year Jahr - + day Tag - + h Std. - + min Min. - + sec Sek. @@ -4661,7 +5575,7 @@ Lassen Sie dies auf ISO-8859-1 gesetzt, falls Sie nicht *wirklich* wissen, was S QueryBufferItem - + <b>Query with %1</b> <b>Dialog mit %1</b> @@ -4671,17 +5585,17 @@ Lassen Sie dies auf ISO-8859-1 gesetzt, falls Sie nicht *wirklich* wissen, was S Abwesenheitsmeldung: %1 - + idling since %1 nichtstuend seit %1 - + login time: %1 Anmeldezeitpunkt: %1 - + server: %1 Server: %1 @@ -4823,32 +5737,32 @@ Lassen Sie dies auf ISO-8859-1 gesetzt, falls Sie nicht *wirklich* wissen, was S Einstellungen - + Save changes Einstellungen speichern - + There are unsaved changes on the current configuration page. Would you like to apply your changes now? Es gibt nicht gespeicherte Änderungen auf der aktuellen Konfigurationsseite. Möchten Sie diese Änderungen jetzt anwenden? - + Reload Settings Einstellungen neu laden - + Do you like to reload the settings, undoing your changes on this page? Möchten Sie die Einstellungen neu laden, die Änderungen auf dieser Seite zurücknehmen? - + Restore Defaults Standards wiederherstellen - + Do you like to restore the default values for this page? Möchten Sie die Standardwerte für diese Seite wiederherstellen? @@ -4857,26 +5771,31 @@ Lassen Sie dies auf ISO-8859-1 gesetzt, falls Sie nicht *wirklich* wissen, was S Configure Quassel Quassel konfigurieren + + + Configure %1 + Konfiguriere %1 + SettingsPageDlg - + Reload Settings Einstellungen neu laden - + Do you like to reload the settings, undoing your changes on this page? Möchten Sie die Einstellungen neu laden, die Änderungen auf dieser Seite zurücknehmen? - + Restore Defaults Standards wiederherstellen - + Do you like to restore the default values for this page? Möchten Sie die Standardwerte für diese Seite wiederherstellen? @@ -4890,16 +5809,21 @@ Lassen Sie dies auf ISO-8859-1 gesetzt, falls Sie nicht *wirklich* wissen, was S Settings Einstellungen + + + Configure %1 + Konfiguriere %1 + SignalProxy Client tried to send package larger than max package size! - Client versuchte Paket größer als max. Paketgröße zu senden! + Client versuchte Paket größer als max. Paketgröße zu senden! - + Disconnecting Trenne @@ -4911,41 +5835,212 @@ Lassen Sie dies auf ISO-8859-1 gesetzt, falls Sie nicht *wirklich* wissen, was S Client tried to send 0 byte package! - Client versuchte 0-byte-package zu senden! + Client versuchte 0-byte-package zu senden! Client sent corrupted compressed data! - Client hat falsch komprimierte Daten gesendet! + Client hat falsch komprimierte Daten gesendet! Client sent corrupt data: unable to load QVariant! + Client hat beschädigte Daten gesendet. QVariant kann nicht geladen werden! + + + + Peer tried to send package larger than max package size! + Client versuchte Paket größer als max. Paketgröße zu senden! + + + + Peer tried to send 0 byte package! + Client versuchte 0-byte-package zu senden! + + + + Peer sent corrupted compressed data! + Client hat falsch komprimierte Daten gesendet! + + + + Peer sent corrupt data: unable to load QVariant! Client hat beschädigte Daten gesendet. QVariant kann nicht geladen werden! + + SimpleNetworkEditor + + + Network name: + Netzwerkname: + + + + The name of the IRC network you are configuring + Der Name des IRC-Netzwerks, dass Sie gerade bearbeiten + + + + Servers + Server + + + + A list of IRC servers belonging to this network + Eine Liste von IRC-Servern die zu diesem Netzwerk gehören + + + + Edit this server entry + Diesen Servereintrag editieren + + + + &Edit... + Änd&ern... + + + + Add another IRC server + IRC-Server hinzufügen + + + + &Add... + &Hinzufügen... + + + + Remove this server entry from the list + Diesen Server von der Liste entfernen + + + + De&lete + &Löschen + + + + Move upwards in list + In Liste nach oben verschieben + + + + ... + ... + + + + Move downwards in list + In Liste nach unten verschieben + + + + Join Channels Automatically + Kanäle automatisch joinen + + + + A list of IRC channels you will join automatically after connecting to the network + Eine Liste von IRC-Kanälen, die Sie automatischen nach dem Verbinden joinen + + SqliteStorage - + SQLite is a file-based database engine that does not require any setup. It is suitable for small and medium-sized databases that do not require access via network. Use SQLite if your Quassel Core should store its data on the same machine it is running on, and if you only expect a few users to use your core. SQLite ist ein dateibasiertes Datenbanksystem, das keiner Einrichtung bedarf. Es ist für kleine bis mittelgroße Datenbanken, die keinen Netzwerkzugriff benötigen, geeignet. Verwenden Sie SQListe, wenn der Quassel-Core seine Daten auf dem selben Rechner, auf dem er auch läuft, speichern soll und Sie nur mit ein paar Benutzern auf Ihrem Core rechnen. + + SslCertDisplayDialog + + + SSL Certificate used by %1 + + + + + Issuer Info + + + + + Organization: + + + + + Locality Name: + + + + + Organizational Unit Name: + + + + + Country Name: + + + + + State or Province Name: + + + + + Subject Info + + + + + Additional Info + + + + + Valid From: + + + + + Valid To: + + + + + Hostname %1: + + + + + E-Mail Address %1: + + + + + Digest: + + + StatusBufferItem <b>Status buffer of %1</b> - <b>Statusfenster von %1</b> + <b>Statusfenster von %1</b> <p> %1 </p> - <p> %1 </p> + <p> %1 </p> - + Status Buffer Statusfenster @@ -4953,17 +6048,17 @@ Lassen Sie dies auf ISO-8859-1 gesetzt, falls Sie nicht *wirklich* wissen, was S SystrayNotificationBackend::ConfigWidget - + System Tray Icon Systemleistensymbol - + Animate Animieren - + Show bubble Sprechblasen anzeigen @@ -4991,6 +6086,149 @@ Lassen Sie dies auf ISO-8859-1 gesetzt, falls Sie nicht *wirklich* wissen, was S s + + ToolBarActionProvider + + + Connect + Verbinden + + + + Connect to IRC + Zum IRC verbinden + + + + Disconnect + Trennen + + + + Disconnect from IRC + Vom IRC trennen + + + + Part + Verlassen + + + + Leave currently selected channel + Markierten Kanal verlassen + + + + Join + Beitreten + + + + Join a channel + Kanal beitreten + + + + Query + Dialog + + + + Start a private conversation + Privates Gespräch (Query) starten + + + + Whois + Whois + + + + Request user information + Benutzerinfo anfordern + + + + Op + + + + + Give operator privileges to user + Operator-Status geben + + + + Deop + + + + + Take operator privileges from user + Operator-Status nehmen + + + + Voice + + + + + Give voice to user + Voice geben + + + + Devoice + + + + + Take voice from user + Voice nehmen + + + + Kick + Kicken + + + + Remove user from channel + Nick vom Kanal kicken + + + + Ban + Bannen + + + + Ban user from channel + Nick vom Kanal verbannen + + + + Kick/Ban + Rauswerfen/Verbannen + + + + Remove and ban user from channel + Nick vom Kanal kicken und verbannen + + + + Connect to all + Zu allen verbinden + + + + Disconnect from all + Von allen trennen + + TopicLabel @@ -5053,122 +6291,122 @@ Lassen Sie dies auf ISO-8859-1 gesetzt, falls Sie nicht *wirklich* wissen, was S UiStyle::StyledMessage - + %D0%1 %D0%1 - + %Dn%1 %Dn%1 - + %Ds%1 %Ds%1 - + %De%1 %De%1 - + %Dj%DN%1%DN %DH(%2@%3)%DH has joined %DC%4%DC %Dj%DN%1%DN %DH(%2@%3)%DH hat %DC%4%DC betreten - + %Dp%DN%1%DN %DH(%2@%3)%DH has left %DC%4%DC %Dp%DN%1%DN %DH(%2@%3)%DH hat %DC%4%DC verlassen - + %Dq%DN%1%DN %DH(%2@%3)%DH has quit %Dq%DN%1%DN %DH(%2@%3)%DH hat den Chat verlassen - + %Dk%DN%1%DN has kicked %DN%2%DN from %DC%3%DC %Dk%DN%1%DN hat %DN%2%DN aus %DC%3%DC geworfen - + %DrYou are now known as %DN%1%DN %DrSie sind jetzt als %DN%1%DN bekannt - + %Dr%DN%1%DN is now known as %DN%2%DN %Dr%DN%1%DN ist jetzt als %DN%2%DN bekannt - + %DmUser mode: %DM%1%DM %DmBenutzermodus: %DM%1%DM - + %DmMode %DM%1%DM by %DN%2%DN %DmModus %DM%1%DM by %DN%2%DN - + %Da%DN%1%DN %2 %Da%DN%1%DN %2 - + %De[%1] %De[%1] - + <%1> <%1> - + [%1] [%1] - + * * - + --> --> - + <-- <-- - + <-* <-* - + <-> <-> - + *** *** - + -*- -*- - + %1 %1 @@ -5176,7 +6414,7 @@ Lassen Sie dies auf ISO-8859-1 gesetzt, falls Sie nicht *wirklich* wissen, was S UserCategoryItem - + %n Owner(s) %n Besitzer @@ -5184,7 +6422,7 @@ Lassen Sie dies auf ISO-8859-1 gesetzt, falls Sie nicht *wirklich* wissen, was S - + %n Admin(s) %n Admin(s) @@ -5192,7 +6430,7 @@ Lassen Sie dies auf ISO-8859-1 gesetzt, falls Sie nicht *wirklich* wissen, was S - + %n Operator(s) %n Operator @@ -5200,7 +6438,7 @@ Lassen Sie dies auf ISO-8859-1 gesetzt, falls Sie nicht *wirklich* wissen, was S - + %n Half-Op(s) %n Half-Op(s) @@ -5208,7 +6446,7 @@ Lassen Sie dies auf ISO-8859-1 gesetzt, falls Sie nicht *wirklich* wissen, was S - + %n Voiced %n Voiced @@ -5216,7 +6454,7 @@ Lassen Sie dies auf ISO-8859-1 gesetzt, falls Sie nicht *wirklich* wissen, was S - + %n User(s) %n Benutzer @@ -5227,9 +6465,14 @@ Lassen Sie dies auf ISO-8859-1 gesetzt, falls Sie nicht *wirklich* wissen, was S UserInputHandler - + sending CTCP-%1 request sende CTCP-%1-Anfrage + + + away + + diff --git a/i18n/quassel_fr.ts b/i18n/quassel_fr.ts index b15a96f2..fbb914a1 100644 --- a/i18n/quassel_fr.ts +++ b/i18n/quassel_fr.ts @@ -78,12 +78,12 @@ p, li { white-space: pre-wrap; } Remerciements particuliers à:<br><dl><dt><b>John "nox-Hand" Hand</b></dt><dd>pour le beau travail artistique et le logo Quassel </dt><dt><b><a href="http://www.oxygen-icons.org">L'Equipe Oxygen</a></b></dt><dd>pour avoir créé la majorité des belles icones que vous voyez dans Quassel</dd><dt><b><a href="http://www.trolltech.com">Trolltech</a></b></dt><dd>pour avoir créé Qt et Qtopia, et pour le soutien du developpement de Quasseltopia avec Greenphones entre autres</dd> - + About Quassel À propos de Quassel - + <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'DejaVu Sans'; font-size:15pt; font-weight:600; font-style:normal;"> @@ -91,7 +91,7 @@ p, li { white-space: pre-wrap; } <html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'DejaVu Sans'; font-size:15pt; font-weight:600; font-style:normal;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Quassel IRC</p></body></html> - + <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'DejaVu Sans'; font-size:10pt; font-weight:600; font-style:normal;"> @@ -99,22 +99,22 @@ p, li { white-space: pre-wrap; } <html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'DejaVu Sans'; font-size:10pt; font-weight:600; font-style:normal;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Version 0.2.0-pre, Build &gt;= 474 (2008-02-08)</p></body></html> - + &About &À Propos - + A&uthors A&uteurs - + &Contributors &Contributeurs - + &Thanks To &Remerciements @@ -131,21 +131,31 @@ p, li { white-space: pre-wrap; } Special thanks goes to:<br><dl><dt><b>John "nox" Hand</b></dt><dd>for great artwork and the Quassel logo/icon</dt><dt><b><a href="http://www.oxygen-icons.org">The Oxygen Team</a></b></dt><dd>for creating most of the other shiny icons you see throughout Quassel</dd><dt><b><a href="http://www.trolltech.com">Qt Software formerly known as Trolltech</a></b></dt><dd>for creating Qt and Qtopia, and for sponsoring development of QuasselTopia with Greenphones and more</dd><dt><b><a href="http://www.nokia.com">Nokia</a></b></dt><dd>for keeping Qt alive, and for sponsoring development of Quassel Mobile with N810s</dd> - Remerciements particuliers à:<br><dl><dt><b>John "nox" Hand</b></dt><dd>pour son grand travail artistique et pour le logo Quassel</dt><dt><b><a href="http://www.oxygen-icons.org">The Oxygen Team</a></b></dt><dd>pour la création del a majorité des autres belles icones que vous pouvez voir dans Quassel</dd><dt><b><a href="http://www.trolltech.com">Qt Software précédemment nommée Trolltech</a></b></dt><dd>pour la création de Qt et Qtopia, et comme sponsor du developpement de QuasselTopia avec Greenphones et d'autres</dd><dt><b><a href="http://www.nokia.com">Nokia</a></b></dt><dd>pour garder en vie Qt, et pour sponsoriser le developpement de Quassel Mobile avec N810s</dd> + Remerciements particuliers à:<br><dl><dt><b>John "nox" Hand</b></dt><dd>pour son grand travail artistique et pour le logo Quassel</dt><dt><b><a href="http://www.oxygen-icons.org">The Oxygen Team</a></b></dt><dd>pour la création del a majorité des autres belles icones que vous pouvez voir dans Quassel</dd><dt><b><a href="http://www.trolltech.com">Qt Software précédemment nommée Trolltech</a></b></dt><dd>pour la création de Qt et Qtopia, et comme sponsor du developpement de QuasselTopia avec Greenphones et d'autres</dd><dt><b><a href="http://www.nokia.com">Nokia</a></b></dt><dd>pour garder en vie Qt, et pour sponsoriser le developpement de Quassel Mobile avec N810s</dd> <b>A modern, distributed IRC Client</b><br><br>&copy;2005-2009 by the Quassel Project<br><a href="http://quassel-irc.org">http://quassel-irc.org</a><br><a href="irc://irc.freenode.net/quassel">#quassel</a> on <a href="http://www.freenode.net">Freenode</a><br><br>Quassel IRC is dual-licensed under <a href="http://www.gnu.org/licenses/gpl-2.0.txt">GPLv2</a> and <a href="http://www.gnu.org/licenses/gpl-3.0.txt">GPLv3</a>.<br>Most icons are &copy; by the <a href="http://www.oxygen-icons.org">Oxygen Team</a> and used under the <a href="http://www.gnu.org/licenses/lgpl.html">LGPL</a>.<br><br>Please use <a href="http://bugs.quassel-irc.org">http://bugs.quassel-irc.org</a> to report bugs. <b>Un Client IRC distribué et moderne</b><br><br>&copy;2005-2009 par le Projet Quassel<br><a href="http://quassel-irc.org">http://quassel-irc.org</a><br><a href="irc://irc.freenode.net/quassel">#quassel</a> sur <a href="http://www.freenode.net">Freenode</a><br><br>Quassel IRC est sous double licence <a href="http://www.gnu.org/licenses/gpl-2.0.txt">GPLv2</a> et <a href="http://www.gnu.org/licenses/gpl-3.0.txt">GPLv3</a>.<br>La majorité des icones proviennent &copy; de l'<a href="http://www.oxygen-icons.org">Equipe Oxygen</a> et sont utilisés sous la <a href="http://www.gnu.org/licenses/lgpl.html">LGPL</a>.<br><br>Merci d'utiliser <a href="http://bugs.quassel-irc.org">http://bugs.quassel-irc.org</a> pour transmettre les bogues. + + + Special thanks goes to:<br><dl><dt><img src=":/pics/quassel-eye.png">&nbsp;<b>John "nox" Hand</b></dt><dd>for the original Quassel icon - The All-Seeing Eye</dt><dt><img src=":/pics/oxygen.png">&nbsp;<b><a href="http://www.oxygen-icons.org">The Oxygen Team</a></b></dt><dd>for creating all the artwork you see throughout Quassel</dd><dt><img src=":/pics/qt-logo-32.png">&nbsp;<b><a href="http://www.trolltech.com">Qt Software formerly known as Trolltech</a></b></dt><dd>for creating Qt and Qtopia, and for sponsoring development of QuasselTopia with Greenphones and more</dd><dt><a href="http://www.nokia.com"><img src=":/pics/nokia.png"></a></b></dt><dd>for keeping Qt alive, and for sponsoring development of Quassel Mobile with N810s</dd> + Remerciements particuliers à:<br><dl><dt><img src=":/pics/quassel-eye.png">&nbsp;<b>John "nox" Hand</b></dt><dd>pour son grand travail artistique et pour le logo Quassel</dt><dt><img src=":/pics/oxygen.png">&nbsp;<b><a href="http://www.oxygen-icons.org">The Oxygen Team</a></b></dt><dd>pour la création de la majorité des autres belles icones que vous pouvez voir dans Quassel</dd><dt><img src=":/pics/qt-logo-32.png">&nbsp;<b><a href="http://www.trolltech.com">Qt Software précédemment nommée Trolltech</a></b></dt><dd>pour la création de Qt et Qtopia, et comme sponsor du developpement de QuasselTopia avec Greenphones et d'autres</dd><dt><b><a href="http://www.nokia.com"><img src=":/pics/nokia.png">Nokia</a></b></dt><dd>pour garder en vie Qt, et pour sponsoriser le developpement de Quassel Mobile avec N810s</dd> + AbstractSqlStorage - + Installed Schema (version %1) is not up to date. Upgrading to version %2... Le schéma installé (version %1) n'est pas à jour. Mise à jour à la version %2... + + + Upgrade failed... + Echec de la mise à jour... + AccountManagementSettingsPage @@ -224,12 +234,12 @@ p, li { white-space: pre-wrap; } AliasesModel - + Alias Alias - + Expansion Expansion @@ -239,7 +249,7 @@ p, li { white-space: pre-wrap; } Behaviour - Comportement + Comportement @@ -261,33 +271,38 @@ p, li { white-space: pre-wrap; } Delete Supprimer + + + Misc + Divers + AppearanceSettingsPage - + Appearance Apparence General - Général + Général - + Form Formulaire Client style: - Style du Client: + Style du Client: Language: - Langage: + Langage: @@ -295,34 +310,142 @@ p, li { white-space: pre-wrap; } <Système> - + <Original> <Original> Note: needs client restart for full effect! - N.B.: il est nécessaire de relancer le client! + N.B.: il est nécessaire de relancer le client! - + <System Default> - <Défaut Système> + <Système par défaut> Misc: - Divers: + Divers: Show Web Previews - Afficher les aperçus Web + Afficher les aperçus Web Use Icons to represent away state of Users - Utiliser des Icônes pour représenter les états d'absence des Utilisateurs + Utiliser des Icônes pour représenter les états d'absence des Utilisateurs + + + + Client Style + Style du client + + + + Set application style + Définir le style + + + + Language + Langage + + + + Set the application language. Requires restart! + Definir la langue de l'application. Nécessite un redemarrage! + + + + Fonts + Polices + + + + Set font for the main chat window and the chat monitor + Définir la police pour la fenêtre principale de discussion et le moniteur de discussion + + + + Chat window: + Fenêtre de discussion: + + + + Font + Police + + + + Choose... + Choisir... + + + + Set font for channel and nick lists + Définir la police pour les listes de canaux et de pseudos + + + + Channel list: + Liste des canaux: + + + + Set font for the input line + Définir le police pour la ligne de saisie + + + + Input line: + Ligne de saisie: + + + + Misc + Divers + + + + Show a website preview window when hovering the mouse over a web address + Affiche une fenêtre d'aperçu du site web quand la souris passe sur une adresse web + + + + Show previews of webpages on URL hover + Afficher les aperçus de pages web au passage sur une URL + + + + Show status icons in channel and nick lists + Affiche des icones dans les listes de canaux et de pseudos + + + + Use icons in channel and nick lists + Utiliser les icons dans les listes de canaux et de pseudos + + + + AwayLogView + + + Away Log + Historique d'absence + + + + Show Network Name + Afficher le Nom du Réseau + + + + Show Buffer Name + Afficher le Nom du Tampon @@ -330,7 +453,7 @@ p, li { white-space: pre-wrap; } Behaviour - Comportement + Comportement @@ -343,37 +466,37 @@ p, li { white-space: pre-wrap; } Formulaire - + Backlog Request Method: Méthode de demande de l'historique: - + Fixed Amount per Buffer Montant fixe par tampon - + Unread Messages per Buffer Messages non lus par tampon - + Global Unread Messages Messages non lus globalement - + The simplest Requester. It fetches a fixed amount of lines for each buffer from the Backlog. C'est la demande la plus simple. Elle récupère un montant fixe de lignes de chaque tampon à partir de l'historique. - + amount of messages per buffer that are requested after the core connection has been established. nombre de messages par tampon demandés après que la connection avec le noyau ait été établie. - + Initial backlog amount: Montant initial de l'historique: @@ -382,27 +505,27 @@ p, li { white-space: pre-wrap; } This requester fetches unread messages for each buffer individually. The amount of lines can be limited per buffer. You can also chose to fetch additional older chatlines to provide a better context. - Cette demande récupère les messages non lus de chaque tampon individuellement. Le montant des lignes par tampon peut être limité. + Cette demande récupère les messages non lus de chaque tampon individuellement. Le montant des lignes par tampon peut être limité. Vous pouvez aussi demander des lignes complémentaires afin d'obtenir un meilleur contexte. - + Maximum amount of messages to be fetched per buffer. Montant maximim des messages devant être récupéré par tampon. - + Limit: Limite: - + Amount of messages to be fetched in addition to the unread messages. The Limit does not apply here. Montant des messages devant être récupéré en complément des messages non lus. La limite ne s'applique pas ici. - + Additional Messages: Messages complémentaires: @@ -424,37 +547,37 @@ Il est plus pratique de limiter le montant total de l'historique et c' Vous pouvez également choisir de récupérer des lignes complémentaires plus anciennes de discussion pour obtenir un meilleur contexte. - + Maximum amount of messages to be fetched over all buffers. Montant maximum de messages à récupérer pour tous les tampons. - + Number of messages to be requested from the core when using scrolling up in the buffer view. Nombre de messages à demander au noyau quand on défile dans un tampon. - + Dynamic backlog amount: Taille dynamique de l'historique : - + FixedBacklogAmount FixedBacklogAmount - + PerBufferUnreadBacklogLimit PerBufferUnreadBacklogLimit - + PerBufferUnreadBacklogAdditional PerBufferUnreadBacklogAdditional - + This requester fetches all messages newer than the oldest unread message for all buffers. Note: this requester is not recommended if you use hidden buffer or have inactive buffers (i.e.: no stale queries or channels). @@ -469,20 +592,34 @@ Il est plus pratique de limiter le montant total de l'historique et c' Vous pouvez également choisir de récupérer des lignes complémentaires plus anciennes de discussion pour obtenir un meilleur contexte. - + GlobalUnreadBacklogLimit GlobalUnreadBacklogLimit - + GlobalUnreadBacklogAdditional GlobalUnreadBacklogAdditional - + DynamicBacklogAmount DynamicBacklogAmount + + + Misc + Divers + + + + This requester fetches unread messages for each buffer individually. The amount of lines can be limited per buffer. + +You can also choose to fetch additional older chatlines to provide a better context. + Cette demande récupère les messages non lus de chaque tampon individuellement. Le montant des lignes par tampon peut être limité. + +Vous pouvez aussi demander des lignes complémentaires afin d'obtenir un meilleur contexte. + BufferItem @@ -542,7 +679,7 @@ Vous pouvez également choisir de récupérer des lignes complémentaires plus a <p> %1 </p> - + <p> %1 - %2 </p> <p> %1 - %2 </p> @@ -738,12 +875,12 @@ Lines: 1234 Voulez vous supprimer le tampon "%1" de manière permanente ? Cela supprimera toutes les données correspondantes, y compris celles sauvées dans l'historique contenu dans la base de données du noyau ! - + Merge buffers permanently? Fusionner définitivement les tampons ? - + Do you want to merge the buffer "%1" permanently into buffer "%2"? This cannot be reversed! Voulez-vous fusionner définitivement le tampon "%1" dans le tampon "%2" ? @@ -771,7 +908,7 @@ Lines: 1234 Merci de saisir un nom pour la vue: - + Add Buffer View Ajouter une Vue @@ -781,7 +918,12 @@ Lines: 1234 Edit Mode - Mode édition + Mode édition + + + + Show / Hide buffers + Afficher / Cacher les tampons @@ -789,20 +931,20 @@ Lines: 1234 General - Général + Général - + Buffer Views Vues - + Delete Buffer View? Supprimer la vue ? - + Do you really want to delete the buffer view "%1"? Voulez vous réellement supprimer la vue "%1" ? @@ -913,6 +1055,11 @@ In this mode no separate status buffer is displayed. Cette option n'est pas disponible quand tout les Réseaux sont visibles. Dans ce mode, aucun tampon d'état séparé n'est affiché. + + + Appearance + Apparence + BufferViewWidget @@ -1006,7 +1153,7 @@ p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Trebuchet MS'; font-size:13pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><img src=":/pics/quassel-large.png" /><span style=" font-size:89pt; color:#00008b;">uassel IRC</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:49pt;"><span style=" font-size:22pt;">Chat comfortably. Anywhere.</span></p></body></html> - <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Trebuchet MS'; font-size:13pt; font-weight:400; font-style:normal;"> @@ -1022,32 +1169,32 @@ p, li { white-space: pre-wrap; } ChannelBufferItem - + <b>Channel %1</b> <b>Canal %1</b> - + <b>Users:</b> %1 <b>Utilisateurs:</b> %1 - + <b>Mode:</b> %1 <b>Mode:</b> %1 - + <b>Topic:</b> %1 <b>Sujet:</b> %1 - + Not active <br /> Double-click to join Inactif <br /> Double-cliquez pour rejoindre - + <p> %1 </p> <p> %1 </p> @@ -1168,7 +1315,7 @@ p, li { white-space: pre-wrap; } General - Général + Général @@ -1188,7 +1335,7 @@ p, li { white-space: pre-wrap; } Show: - Montrer: + Afficher: @@ -1250,7 +1397,12 @@ p, li { white-space: pre-wrap; } Show own messages - Montrer mes messages + Afficher mes messages + + + + Appearance + Apparence @@ -1294,7 +1446,7 @@ p, li { white-space: pre-wrap; } ChatScene - + Copy Selection Copier la Sélection @@ -1380,25 +1532,25 @@ p, li { white-space: pre-wrap; } Récupération des informations sur les canaux... - + Identity already exists in client! L'Identité existe déjà dans le client! - + All Buffers Tous tampons Default Identity - Identité par défaut + Identité par défaut ClientBacklogManager - + Processed %1 messages in %2 seconds. %1 messages traités en %2 secondes. @@ -1406,50 +1558,60 @@ p, li { white-space: pre-wrap; } ClientSyncer - + The Quassel Core you try to connect to is too old! Please consider upgrading. Le Noyau Quassel auquel vous vous connectez est trop vieux ! Pensez à le mettre à jour. - + <b>Invalid data received from core!</b><br>Disconnecting. <b>Données invalides reçues du noyau !</b><br>Déconnexion. Internal connections not yet supported. - Les connexions internes ne sont pas encore supportées. + Les connexions internes ne sont pas encore supportées. - + <b>This client is built without SSL Support!</b><br />Disable the usage of SSL in the account settings. <b>Ce client n'a pas compilé avec le support SSL !</b><br />Suppression de l'utilisation de SSL dans les paramètres de compte. - + <b>The Quassel Core you are trying to connect to is too old!</b><br>Need at least core/client protocol v%1 to connect. <b>Le Noyau auquel vous essayez de vous connecter est trop vieux !</b><br>Vous devez au minimum avoir le protocole noyau/client n°%1 pour vous connecter. - + <b>The Quassel Core you are trying to connect to does not support SSL!</b><br />If you want to connect anyways, disable the usage of SSL in the account settings. <b>Le Noyau Quassel auquel vous essayez de vous conneter ne supporte pas le SSL!</b><br />Si vous voulez vous connect malgré tout, désactivez l'usage du SSL dans vos paramètres de compte. - + Logging in... Authentification... + + + No Host to connect to specified. + L'hôte n'a pas été spécifié. + + + + Cert Digest changed! was: %1 + Le certificat a changé! C'était: %1 + ColorSettingsPage - + Appearance Apparence - + Color settings Options de Couleur @@ -1471,293 +1633,303 @@ p, li { white-space: pre-wrap; } FG - Avant + Avant - + BG Fd - + Use BG Utiliser le Fond - + Default: Défaut: - + Inactive: Inactif: - + Highlight: Surlignage: - + New Message: Nouveau message: - + Other Activity: Autre activité: - + Preview: Aperçu: - + 1 1 - + Chatview Moniteur de discussion - + Server Activity Activité du serveur - + Foreground Devant - + Background Fond - + Error Message: Message d'erreur: - + Notice Message: Message d'information: - + Plain Message: Message normal: - + Server Message: Message du serveur: - + Highlight Message: Message surligné: - + User Activity Activité utilisateur - + Action Message: Message d'action: - + Join Message: Message d'entrée: - + Kick Message: Message de kick: - + Mode Message: Message de mode: - + Part Message: Message de sortie: - + Quit Message: Message de départ: - + Rename Message: Message de changement de pseudo: - + Message Message - + Timestamp: Format d'heure: - + Sender: Emetteur: - + Nick: Pseudo: - + Hostmask: Masque de l'hôte: - + Channelname: Nom du Canal: - + Mode flags: Drapeaux de Mode: - + Url: Url: - + Mirc Color Codes Codes Couleur Mirc - + Color Codes Codes de Couleur - + Color 0: Couleur 0: - + Color 1: Couleur 1: - + Color 2: Couleur 2: - + Color 3: Couleur 3: - + Color 4: Couleur 4: - + Color 5: Couleur 5: - + Color 6: Couleur 6: - + Color 7: Couleur 7: - + Color 8: Couleur 8: - + Color 14: Couleur 14: - + Color 15: Couleur 15: - + Color 13: Couleur 13: - + Color 12: Couleur 12: - + Color 11: Couleur 11: - + Color 10: Couleur 10: - + Color 9: Couleur 9: - + Nickview Vue des pseudos - + Nick status: Etat des pseudos: - + Online: En ligne: - + Away: Absent: - + New Message Marker: Marque d'un nouveau message: + + + Enable + Activé + + + + Sender auto coloring: + Couleur automatique de l'emetteur: + ConclusionPage @@ -1801,184 +1973,376 @@ p, li { white-space: pre-wrap; } ContentsChatItem - + Copy Link Address Copier l'Adresse du Lien - Core + ContextMenuActionProvider - - Could not initialize any storage backend! Exiting... - Impossible de créer une base de donnée ! Fin de l'opération... + + Connect + Connecter - - Calling restoreState() even though active sessions exist! - Appel de restoreState() alors que des sessions actives existent ! + + Disconnect + Déconnecter - - Admin user or password not set. - L'idnetifiant et le mot de passe administrateur ne sont pas saisis. + + Join + Rejoindre - - Could not setup storage! - Impossible de paramétrer la base de données ! + + Part + Partir - - Creating admin user... - Création de l'utilisateur administrateur... + + Delete Buffer(s)... + Supprimer le(s) tampon(s)... - - Antique client trying to connect... refusing. - Un antique client essaye de se connecter... refusé. + + Show Buffer + Afficher le tampon - - <b>Your Quassel Client is too old!</b><br>This core needs at least client/core protocol version %1.<br>Please consider upgrading your client. - <b>Le Noyau auquel vous essayez de vous connecter est trop vieux !</b><br>Vous devez au minimum avoir la version %1 du protocole noyau/client.<br> Veuillez mettre à jour votre client. + + Joins + Arrivées - - Client %1 too old, rejecting. - Client %1 trop vieux, rejeté. + + Parts + Sorties - - <b>Quassel Core Version %1</b><br>Built: %2<br>Up %3d%4h%5m (since %6) - <b>Quassel Noyau Version %1</b><br>Compilée le: %2<br>Fonctionne depuis %3d%4h%5m (soit le %6) + + Quits + Départs - - <b>Client not initialized!</b><br>You need to send an init message before trying to login. - <b>Client non créé !</b><br>Vous devez envoyer un message de création avant d'essayer de vous connecter. + + Nick Changes + Changements de Pseudo - - Client %1 did not send an init message before trying to login, rejecting. - Le client %1 n'a pas envoyé de message de création avant d'essayer de se connecter, rejet de la demande. + + Mode Changes + Changement de Mode - - <b>Invalid username or password!</b><br>The username/password combination you supplied could not be found in the database. - <b>identifiant ou mot de passe invalide !</b><br>La combinaison identifiant/mot de passe que vous avez fournie ne peut être trouvée dans la base de données. + + Day Changes + Changement de Jour - - Client %1 initialized and authenticated successfully as "%2" (UserId: %3). - Client %1 crée et identifié avec succès comme "%2" (IdUtilisateur: %3). + + Set as Default... + Définir par défaut... - - Non-authed client disconnected. - Client non-identifié déconnecté. + + Use Defaults... + Utiliser les paramètres par défauts... - - Could not initialize session for client %1! - Impossible de lancer la session pour le client %1 ! + + Join Channel... + Rejoindre le Canal... - - Currently, Quassel only supports SQLite3. You need to build your -Qt library with the sqlite plugin enabled in order for quasselcore -to work. - Actuellement, Quassel supporte uniquement SQLite3. Vous devez -construire votre librairie Qt avec le plugin sqlite activé pour que le -noyau quassel fonctionne. + + Start Query + Lancer la requête - - Client connected from - Client connecté par + + Show Query + Afficher la requête - - Client - Client + + Whois + Whois - - too old, rejecting. - trop vieux, rejeté. + + Version + Version - - Starting TLS for Client: - Début du TLS pour le Client: + + Time + Heure - - did not send an init message before trying to login, rejecting. - n'a pas envoyé de message de création avant d'essayer de se connecter, rejet. + + Ping + Ping - - initialized and authenticated successfully as "%1" (UserId: %2). - créé et identifié avec succès comme "%1" (IdUtilisateur: %2). + + Finger + Finger - - Could not initialize session for client: - Impossible de lancer la session pour le client: + + Give Operator Status + Donner le statut d'opérateur - - Non-authed client disconnected. (socket allready destroyed) - Client non-identifié déconnecté. (socket déjà supprimée) + + Take Operator Status + Enlever le statut d'opérateur - - Closing server for basic setup. - Arrêt du serveur pour un paramétrage simple. + + Give Voice + Donner Voix - - Invalid listen address %1 - Adresse d'écoute invalide %1 + + Take Voice + Enlever Voix - - Listening for GUI clients on IPv4 %1 port %2 using protocol version %3 - A l'écoute des clients sur l'IPv4 %1 port %2 avec la version %3 du protocole + + Kick From Channel + Kicker du Canal - - Could not open IPv4 interface %1:%2: %3 - Impossible d'ouvrir l'interface IPv4 %1:%2: %3 + + Ban From Channel + Bannir du Canal - - Listening for GUI clients on IPv6 %1 port %2 using protocol version %3 - A l'écoute des clients sur l'IPv6 %1 port %2 avec la version %3 du protocole + + Kick && Ban + Kicker && Bannir - - Could not open IPv6 interface %1:%2: %3 - Impossible d'ouvrir l'interface IPv6 %1:%2: %3 + + Hide Buffer(s) Temporarily + Cacher le(s) tampon(s) temporairement - - Invalid listen address %1, unknown network protocol - Adresse d'écoute invalide %1, version du protocole inconnue + + Hide Buffer(s) Permanently + Cacher le(s) tampon(s) définitivement - - Could not open any network interfaces to listen on! - Impossible d'ouvrir une interface réseau pour écouter ! + + Show Channel List + Voir la liste des canaux - - - CoreAccountEditDlg - - Add Core Account - Ajouter un compte noyau + + Show Ignore List + Voi la liste des ignorés + + + + Hide Events + Cacher les Avis + + + + CTCP + CTCP + + + + Actions + Actions + + + + Core + + + Could not initialize any storage backend! Exiting... + Impossible de créer une base de donnée ! Fin de l'opération... + + + + Calling restoreState() even though active sessions exist! + Appel de restoreState() alors que des sessions actives existent ! + + + + Admin user or password not set. + L'idnetifiant et le mot de passe administrateur ne sont pas saisis. + + + + Could not setup storage! + Impossible de paramétrer la base de données ! + + + + Creating admin user... + Création de l'utilisateur administrateur... + + + + Antique client trying to connect... refusing. + Un antique client essaye de se connecter... refusé. + + + + <b>Your Quassel Client is too old!</b><br>This core needs at least client/core protocol version %1.<br>Please consider upgrading your client. + <b>Le Noyau auquel vous essayez de vous connecter est trop vieux !</b><br>Vous devez au minimum avoir la version %1 du protocole noyau/client.<br> Veuillez mettre à jour votre client. + + + + Client %1 too old, rejecting. + Client %1 trop vieux, rejeté. + + + + <b>Quassel Core Version %1</b><br>Built: %2<br>Up %3d%4h%5m (since %6) + <b>Quassel Noyau Version %1</b><br>Compilée le: %2<br>Fonctionne depuis %3d%4h%5m (soit le %6) + + + + <b>Client not initialized!</b><br>You need to send an init message before trying to login. + <b>Client non créé !</b><br>Vous devez envoyer un message de création avant d'essayer de vous connecter. + + + + Client %1 did not send an init message before trying to login, rejecting. + Le client %1 n'a pas envoyé de message de création avant d'essayer de se connecter, rejet de la demande. + + + + <b>Invalid username or password!</b><br>The username/password combination you supplied could not be found in the database. + <b>identifiant ou mot de passe invalide !</b><br>La combinaison identifiant/mot de passe que vous avez fournie ne peut être trouvée dans la base de données. + + + + Client %1 initialized and authenticated successfully as "%2" (UserId: %3). + Client %1 crée et identifié avec succès comme "%2" (IdUtilisateur: %3). + + + + Non-authed client disconnected. + Client non-identifié déconnecté. + + + + Could not initialize session for client %1! + Impossible de lancer la session pour le client %1 ! + + + + Currently, Quassel only supports SQLite3. You need to build your +Qt library with the sqlite plugin enabled in order for quasselcore +to work. + Actuellement, Quassel supporte uniquement SQLite3. Vous devez +construire votre librairie Qt avec le plugin sqlite activé pour que le +noyau quassel fonctionne. + + + + Client connected from + Client connecté par + + + + Client + Client + + + + too old, rejecting. + trop vieux, rejeté. + + + + Starting TLS for Client: + Début du TLS pour le Client: + + + + did not send an init message before trying to login, rejecting. + n'a pas envoyé de message de création avant d'essayer de se connecter, rejet. + + + + initialized and authenticated successfully as "%1" (UserId: %2). + créé et identifié avec succès comme "%1" (IdUtilisateur: %2). + + + + Could not initialize session for client: + Impossible de lancer la session pour le client: + + + + Non-authed client disconnected. (socket allready destroyed) + Client non-identifié déconnecté. (socket déjà supprimée) + + + + Closing server for basic setup. + Arrêt du serveur pour un paramétrage simple. + + + + Invalid listen address %1 + Adresse d'écoute invalide %1 + + + + Listening for GUI clients on IPv4 %1 port %2 using protocol version %3 + A l'écoute des clients sur l'IPv4 %1 port %2 avec la version %3 du protocole + + + + Could not open IPv4 interface %1:%2: %3 + Impossible d'ouvrir l'interface IPv4 %1:%2: %3 + + + + Listening for GUI clients on IPv6 %1 port %2 using protocol version %3 + A l'écoute des clients sur l'IPv6 %1 port %2 avec la version %3 du protocole + + + + Could not open IPv6 interface %1:%2: %3 + Impossible d'ouvrir l'interface IPv6 %1:%2: %3 + + + + Invalid listen address %1, unknown network protocol + Adresse d'écoute invalide %1, version du protocole inconnue + + + + Could not open any network interfaces to listen on! + Impossible d'ouvrir une interface réseau pour écouter ! + + + + Currently, Quassel supports SQLite3 and PostgreSQL. You need to build your +Qt library with the sqlite or postgres plugin enabled in order for quasselcore +to work. + Actuellement, Quassel supporte uniquement SQLite3 et PostgreSQL. Vous devez +construire votre librairie Qt avec le plugin sqlite ou postgres activé pour que le +noyau quassel fonctionne. + + + + CoreAccountEditDlg + + + Add Core Account + Ajouter un compte noyau @@ -2142,22 +2506,22 @@ noyau quassel fonctionne. CoreConfigWizard - + Core Configuration Wizard Assistant de configuration du noyau - + Your core has been successfully configured. Logging you in... Votre noyau a été configuré avec succès. Nous vous connectons... - + Core configuration failed:<br><b>%1</b><br>Press <em>Next</em> to start over. Echec de la configuration du noyau :<br><b>%1</b><br>Pressez <em>suivant</em> pour recommencer. - + Your are now logged into your freshly configured Quassel Core!<br>Please remember to configure your identities and networks now. Vous êtes maintenant connecté dans votre Noyau Quassel tout juste configuré !<br>N'oubliez pas de configurer vos identités et réseaux maintenant. @@ -2226,12 +2590,12 @@ p, li { white-space: pre-wrap; } CoreConfigWizardPages::AdminUserPage - + Create Admin User Créer l'Utilisateur Administrateur - + First, we will create a user on the core. This first user will have administrator privileges. D'abord, nous allons créer un utilisateur dans pour le noyau. Le premier utilisateur aura les paramètres d'administration. @@ -2239,7 +2603,7 @@ p, li { white-space: pre-wrap; } CoreConfigWizardPages::IntroPage - + Introduction Introduction @@ -2247,25 +2611,30 @@ p, li { white-space: pre-wrap; } CoreConfigWizardPages::StorageSelectionPage - + Select Storage Backend Selectionnez le type de base de données - + Please select a database backend for the Quassel Core storage to store the backlog and other data in. Merci de selectionner une base de données pour le stockage de l'historique est des autres données pour Quassel Core. + + + Connection Properties + Paramètres de connexion + CoreConfigWizardPages::SyncPage - + Storing Your Settings Sauver vos paramètres - + Your settings are now stored in the core, and you will be logged in automatically. Vos paramètres sont maintenant sauvés dans le coeur, et vous serez connecté automatiquement. @@ -2415,7 +2784,7 @@ p, li { white-space: pre-wrap; } <b>Impossible de se connecter au Noyau Quassel !</b><br> - + Connect to Quassel Core Connexion au noyau Quassel @@ -2450,22 +2819,22 @@ p, li { white-space: pre-wrap; } Port: - + User: Utilisateur: - + Password: Mot de Passe: - + Remember Mémoriser - + Always use this account Toujours utiliser ce compte @@ -2500,7 +2869,7 @@ p, li { white-space: pre-wrap; } Nouveau - + Delete Supprimer @@ -2525,77 +2894,77 @@ p, li { white-space: pre-wrap; } Connecter - + Remove Account Settings Supprimer les paramètres du compte - + Do you really want to remove your local settings for this Quassel Core account?<br>Note: This will <em>not</em> remove or change any data on the Core itself! Voulez-vous réellement supprimer les informations locales pour ce compte noyau de Quassel ?<br>Notez que cela <em>ne</em> supprimera ou changera <em>aucun</em> paramètre dans le Noyau lui-même ! - + Connect to %1 Connexion à %1 - + <div style=color:red;>Connection to %1 failed!</div> <div style=color:red;>Echec de la connexion à %1 !</div> - + Not connected to %1. Non connecté à %1. - + Looking up %1... Recherche de %1... - + Connecting to %1... Connexion à %1... - + Connected to %1 Connecté à %1 - + Unknown connection state to %1 Etat de la connexion à %1 inconnu - + Logging in... Authentification... - + Login Utilisateur - + Edit... Modifier... - + Add... Ajouter... - + Initializing your connection Création de votre connexion - + Connected to apollo.mindpool.net. Connecté à apollo.mindpool.net. @@ -2611,42 +2980,42 @@ un peu d'espace - + Configure your Quassel Core Configurer votre noyau Quassel - + The Quassel Core you are connected to is not configured yet. You may now launch a configuration wizard that helps you setting up your Core. Le Noyau Quassel auquel vous essayez de vous connecter n'est pas encore configuré. Vous pouvez maintenant lancer l'assistant de configuration qui vous aide à paramétrer votre Noyau. - + Launch Wizard Lancer l'Assistant - + Initializing your session... Lancement de votre session... - + <b>Please be patient while your client synchronizes with the Quassel Core!</b> <b>Merci de patienter le temps que votre client se synchronise avec le Noyau Quassel !</b> - + Session state: Etat de la Session: - + Network states: Etat du réseau: - + 0/0 @@ -2661,12 +3030,12 @@ d'espace Etats de l'utilisateur: - + Use internal core Utiliser le noyau interne - + THIS IS A PLACEHOLDER TO RESERVE @@ -2676,6 +3045,26 @@ TO RESERVE SOME SPACE + + + <div>Errors occurred while connecting to "%1":</div> + <div>Erreurs lors de la connexion à "%1":</div> + + + + view SSL Certificate + voir le certificat SSL + + + + add to known hosts + ajouter aux hôtes connus + + + + Continue connection + Continuer la connexion + CoreConnectProgressDlg @@ -2810,30 +3199,40 @@ SOME SPACE CoreNetwork - + Connection failed. Cycling to next Server Echec de connexion. Passage sur le serveur suivant - + Connecting to %1:%2... Connexion à %1:%2... Disconnecting. - Déconnecte. + Déconnecte. - + Could not connect to %1 (%2) Impossible de se connecter à %1 (%2) - + Connection failure: %1 Erreur de connexion: %1 + + + Disconnecting. (%1) + Déconnecte. (%1) + + + + Core Shutdown + Arrêt du Noyau + CoreSession @@ -2848,22 +3247,22 @@ SOME SPACE Client %1 déconnecté (IdUtilisateur: %2). - + CoreSession::createNetwork(): Got invalid networkId from Core when trying to create network %1! CoreSession::createNetwork(): Le noyau a renvoyé idRéseau invalide lors de la création du réseau %1! - + CoreSession::createNetwork(): Trying to create a network that already exists, updating instead! CoreSession::createNetwork(): Essai de création d'un réseau dejà existant, mise à jour réalisée ! - + Client Client - + disconnected (UserId: %1). déconnecté (IdUtilisateur: %1). @@ -3064,6 +3463,44 @@ SOME SPACE Utilisateur: + + ExecWrapper + + + Invalid command string for /exec: %1 + Commande invalide pour /exec: %1 + + + + Name "%1" is invalid: / or ../ are not allowed! + Le nom "%1" est invalide: les / ou les ../ ne sont pas autorisés! + + + + Could not find script "%1" + Impossible de trouver le script "%1" + + + + Script "%1" crashed with exit code %2. + Le script "%1" a crashé avec le code d'erreur %2. + + + + Script "%1" could not start. + Le Script "%1" ne peut pas être lancé. + + + + Script "%1" caused error %2. + Le Script "%1" a causé l'erreur %2. + + + + Name "%1" is invalid: ../ or ..\ are not allowed! + Le nom "%1" est invalide: les / ou les ../ ne sont pas autorisés ! + + FontsSettingsPage @@ -3265,12 +3702,12 @@ SOME SPACE Behaviour - Comportement + Comportement General - Général + Général @@ -3432,13 +3869,18 @@ SOME SPACE Errors: Erreurs: + + + Misc + Divers + HighlightSettingsPage Behaviour - Comportement + Comportement @@ -3525,6 +3967,11 @@ SOME SPACE Case sensitive Sensible à la casse + + + Appearance + Apparence + IdentitiesDlg @@ -3712,34 +4159,34 @@ SOME SPACE Ajouter... - + ... ... General - Général + Général Real Name: - Nom Réel: + Nom Réel: Nicknames - Pseudos + Pseudos &Add... - &Ajouter... + &Ajouter... Re&name... - &Renommer... + &Renommer... @@ -3749,17 +4196,17 @@ SOME SPACE Move upwards in list - Monter dans la liste + Monter dans la liste Move downwards in list - Descendre dans la liste + Descendre dans la liste A&way - A&bsence + A&bsence @@ -3794,90 +4241,90 @@ SOME SPACE Advanced - Avancé + Avancé Ident: - Ident: + Ident: Messages - Messages + Messages Part Reason: - Motif de Départ: + Motif de Départ: Quit Reason: - Motif de Sortie: + Motif de Sortie: Kick Reason: - Motif de Kick: + Motif de Kick: - + Identities Identités - + <b>The following problems need to be corrected before your changes can be applied:</b><ul> <b>Les problèmes suivants doivent être corrigés avant que vos changements soient appliqués:</b><ul> - + <li>All identities need an identity name set</li> <li>Toutes les identitées ont besoin qu'un nom d'identité soit saisi</li> - + <li>Every identity needs at least one nickname defined</li> <li>Chaque identité doit avoir au moins un pseudo défini</li> - + <li>You need to specify a real name for every identity</li> <li>Vous devez saisir un nom réel pour chaque identité</li> - + <li>You need to specify an ident for every identity</li> <li>Vous devez saisir un ident pour chaque identité</li> - + </ul> </ul> - + One or more identities are invalid Une ou plusieurs identités sont invalides - + Delete Identity? Supprimer l'Identité ? - + Do you really want to delete identity "%1"? Voulez vous vraiment supprimer l'identité "%1"? - + Rename Identity Renommer l'identité - + Please enter a new name for the identity "%1"! Merci de saisir un nom pour l'identité "%1"! @@ -3894,27 +4341,27 @@ SOME SPACE The "Real Name" is shown in /whois. - Le "Nom Réel" est montré dans le /whois. + Le "Nom Réel" est montré dans le /whois. Add Nickname - Ajouter un pseudo + Ajouter un pseudo Remove Nickname - Supprimer le pseudo + Supprimer le pseudo Remove - Supprimer + Supprimer The "ident" is part of your hostmask and, together with your host, uniquely identifies you within the IRC network. - L' "ident" fait partie de votre masque d'hôte et ,conjointement avec votre hôte, identifie vous identifie de manière unique au réseau IRC. + L' "ident" fait partie de votre masque d'hôte et ,conjointement avec votre hôte, identifie vous identifie de manière unique au réseau IRC. @@ -3924,77 +4371,77 @@ SOME SPACE Default Away Settings - Paramètres d'absence par défaut + Paramètres d'absence par défaut Nick to be used when being away - Pseudo utilisé en cas d'absence + Pseudo utilisé en cas d'absence Default away reason - Motif d'absence par défaut + Motif d'absence par défaut Set away when all clients have detached from the core - Mettre absent lorsque tout les clients sont détachés du noyau + Mettre absent lorsque tout les clients sont détachés du noyau Away On Detach - Absent sur détachement + Absent sur détachement Override default away reason for auto-away on detach - Forcer le motif d'absence par défaut pour l'absence automatique sur détachement + Forcer le motif d'absence par défaut pour l'absence automatique sur détachement Not implemented yet - Non fonctionnel pour le moment + Non fonctionnel pour le moment Away On Idle - Absence sur inactivité + Absence sur inactivité Set away after - Mettre absent après + Mettre absent après minutes of being idle - minutes d'inactivité + minutes d'inactivité Load a Key - Charger une Clé + Charger une Clé No Key loaded - Clé non chargée + Clé non chargée Load - Chargement + Chargement RSA - RSA + RSA DSA - DSA + DSA @@ -4004,28 +4451,28 @@ SOME SPACE Clear - Effacer + Effacer Load a Certificate - Charger un Certificat + Charger un Certificat No Certificate loaded - Pas de Certificat chargé + Pas de Certificat chargé You need an SSL Capable Client to edit your Cores SSL Key and Certificate - Vous avez besoin d'un client supportant le SSL pour éditer vos clés et certificats SSL du noyau + Vous avez besoin d'un client supportant le SSL pour éditer vos clés et certificats SSL du noyau Warning: you are not connected with a secured connection to the Quassel Core! Proceeding will cause an unencrypted transfer of your SSL Key and SSL Certificate! - Attention: vous n'êtes pas connecté avec une connection sécure au noyau Quassel + Attention: vous n'êtes pas connecté avec une connection sécure au noyau Quassel Continuer provoquera le transfert non crypté de votre clé SSL et de votre certificat SSL ! @@ -4036,58 +4483,63 @@ Continuer provoquera le transfert non crypté de votre clé SSL et de votre cert Use SSL Key - Utiliser une clé SSL + Utiliser une clé SSL Key Type: - Type de clé: + Type de clé: Use SSL Certificate - Utiliser un certificat SSL + Utiliser un certificat SSL Organisation: - Organisation: + Organisation: CommonName: - Nom: + Nom: Away Reason: - Motif d'absence: + Motif d'absence: Away Nick: - Pseudo d'absence: + Pseudo d'absence: Continue - Continuer + Continuer + + + + Misc + Divers Identity - + <empty> <vide> - + Quassel IRC User Utilisateur Quassel IRC - + Gone fishing. Parti pêcher. @@ -4097,7 +4549,7 @@ Continuer provoquera le transfert non crypté de votre clé SSL et de votre cert Ramène du poisson. - + Not here. No, really. not here! Pas ici. Non, vraiment. pas ici ! @@ -4107,21 +4559,300 @@ Continuer provoquera le transfert non crypté de votre clé SSL et de votre cert A nouveau en action ! - + Kindergarten is elsewhere! Le jardin d'enfants est ailleurs ! - + http://quassel-irc.org - Chat comfortably. Anywhere. http://quassel-irc.org - Discuter simplement. Partout. - + All Quassel clients vanished from the face of the earth... Tous les clients Quassel ont disparu de la face de la terre ... + + IdentityEditWidget + + + Advanced + Avancé + + + + Load a Key + Charger une Clé + + + + No Key loaded + Clé non chargée + + + + Load + Chargement + + + + RSA + RSA + + + + DSA + DSA + + + + Clear + Effacer + + + + Load a Certificate + Charger un Certificat + + + + No Certificate loaded + Pas de Certificat chargé + + + + General + Général + + + + Real Name: + Nom Réel: + + + + The "Real Name" is shown in /whois. + Le "Nom Réel" est montré dans le /whois. + + + + Nicknames + Pseudos + + + + Add Nickname + Ajouter un pseudo + + + + &Add... + &Ajouter... + + + + Remove Nickname + Supprimer le pseudo + + + + Remove + Supprimer + + + + Rename Identity + Renommer l'identité + + + + Re&name... + Re&nommer... + + + + Move upwards in list + Monter dans la liste + + + + ... + ... + + + + Move downwards in list + Descendre dans la liste + + + + A&way + A&bsence + + + + Default Away Settings + Paramètres d'absence par défaut + + + + Nick to be used when being away + Pseudo utilisé en cas d'absence + + + + Default away reason + Motif d'absence par défaut + + + + Away Nick: + Pseudo d'absence: + + + + Away Reason: + Motif d'absence: + + + + Set away when all clients have detached from the core + Mettre absent lorsque tout les clients sont détachés du noyau + + + + Away On Detach + Absent sur détachement + + + + Not implemented yet + Non fonctionnel pour le moment + + + + Away On Idle + Absence sur inactivité + + + + Set away after + Mettre absent après + + + + minutes of being idle + minutes d'inactivité + + + + Ident: + Ident: + + + + The "ident" is part of your hostmask and, together with your host, uniquely identifies you within the IRC network. + L' "ident" fait partie de votre masque d'hôte et ,conjointement avec votre hôte, identifie vous identifie de manière unique au réseau IRC. + + + + Messages + Messages + + + + Part Reason: + Motif de Départ: + + + + Quit Reason: + Motif de Sortie: + + + + Kick Reason: + Motif de Kick: + + + + You need an SSL Capable Client to edit your Cores SSL Key and Certificate + Vous avez besoin d'un client supportant le SSL pour éditer vos clés et certificats SSL du noyau + + + + Warning: you are not connected with a secured connection to the Quassel Core! +Proceeding will cause an unencrypted transfer of your SSL Key and SSL Certificate! + Attention: vous n'êtes pas connecté avec une connection sécure au noyau Quassel +Continuer provoquera le transfert non crypté de votre clé SSL et de votre certificat SSL ! + + + + Continue + Continuer + + + + Use SSL Key + Utiliser une clé SSL + + + + Key Type: + Type de clé: + + + + Use SSL Certificate + Utiliser un certificat SSL + + + + Organisation: + Organisation: + + + + CommonName: + Nom: + + + + IdentityPage + + + Setup Identity + Paramétrage d'Identité + + + + Default Identity + Identité par défaut + + + + InputLine + + + Do you really want to paste %1 lines? + Voulez vous vraiment coller %1 lignes ? + + + + Paste Protection + Protection Collage + + + + Do you really want to paste %n lines? + + Voulez vous vraiment coller une ligne ? + Voulez vous vraiment coller %n lignes ? + + + InputWidget @@ -4130,12 +4861,12 @@ Continuer provoquera le transfert non crypté de votre clé SSL et de votre cert Formulaire - + Focus Input Line Focus sur la ligne de commande - + Ctrl+L Ctrl+L @@ -4153,6 +4884,14 @@ Continuer provoquera le transfert non crypté de votre clé SSL et de votre cert Cet assistant va vous guider dans le processus de paramétrage de votre tout nouveau client IRC Quassel. + + IrcConnectionWizard + + + Save && Connect + Sauve && Connecte + + IrcListModel @@ -4174,22 +4913,22 @@ Continuer provoquera le transfert non crypté de votre clé SSL et de votre cert IrcServerHandler - + %1 has changed topic for %2 to: "%3" %1 à changé le sujet de %2 en :"%3" - + No topic is set for %1. Pas de sujet pour %1. - + Topic for %1 is "%2" Le sujet pour %1 est "%2" - + Topic set by %1 on %2 Sujet mis par %1 le %2 @@ -4209,132 +4948,132 @@ Continuer provoquera le transfert non crypté de votre clé SSL et de votre cert Le pseudo %1 est déjà utilisé - + %1 %1 - + [Whois] %1 is away: "%2" [Whois] %1 est absent: "%2" - + %1 is away: "%2" %1 est absent: "%2" - + [Whois] %1 [Whois] %1 - + [Whois] %1 is %2 (%3) [Whois] %1 est %2 (%3) - + %1 is online via %2 (%3) %1 est connecté par %2 (%3) - + [Whowas] %1 [Whowas] %1 - + [Whowas] %1 was %2 (%3) [Whowas] %1 était %2 (%3) - + [Who] End of /WHO list for %1 [Who] Fin de la liste /WHO pour %1 - + [Whois] %1 is logged in since %2 [Whois] %1 est connecté depuis %2 - + [Whois] %1 is idling for %2 (%3) [Whois] %1est en attente depuis %2 (%3) - + [Whois] idle message: %1 [Whois] message d'attente: %1 - + [Whois] %1 is a user on channels: %2 [Whois] %1 est présent sur les canaux: %2 - + [Whois] %1 has voice on channels: %2 [Whois] %1 a voix sur les canaux: %2 - + [Whois] %1 is an operator on channels: %2 [Whois] %1 est opérateur sur les canaux: %2 - + Channel %1 has %2 users. Topic is: %3 Le canal %1 a %2 utilisateurs. Son sujet est: %3 - + End of channel list Fin de la liste des canaux - + [Who] %1 [Who] %1 There is a nickname in your identity's nicklist which contains illegal characters - Il y a un pseudo dans votre liste d'identié qui contient des caractères illégaux + Il y a un pseudo dans votre liste d'identié qui contient des caractères illégaux Due to a bug in Unreal IRCd (and maybe other irc-servers too) we're unable to determine the erroneous nick - En raison d'une bogue dans Unreal IRCd ( et peut être dans d'autres serveurs IRC) nous ne pouvons déterminer le pseudo erroné + En raison d'une bogue dans Unreal IRCd ( et peut être dans d'autres serveurs IRC) nous ne pouvons déterminer le pseudo erroné Please use: /nick <othernick> to continue or clean up your nicklist - Merci d'utiliser: /nick <autrepseudo> pour continuer ou de nettoyer votre liste de pseudos + Merci d'utiliser: /nick <autrepseudo> pour continuer ou de nettoyer votre liste de pseudos - + Nick %1 contains illegal characters Le pseudo %1 contient des caractères illégaux - + Nick already in use: %1 Le pseudo suivant est déjà utilisé: %1 - + No free and valid nicks in nicklist found. use: /nick <othernick> to continue Aucun pseudo libre et valide n'a été trouvé dans la liste. Utiliser: /nick <autrepseudo> pour continuer - + Received RPL_ISUPPORT (005) without parameters! Réception de RPL_ISUPPORT (005) sans paramètres ! - + Received non RFC compliant RPL_ISUPPORT: this can lead to unexpected behavior! Récetion d'un RPL_ISUPPORT hors RFC: cela peut avoir des conséquences inattendues ! @@ -4342,17 +5081,17 @@ Continuer provoquera le transfert non crypté de votre clé SSL et de votre cert IrcUserItem - + idling since %1 inactif depuis %1 - + login time: %1 durée de connexion: %1 - + server: %1 serveur: %1 @@ -4388,7 +5127,7 @@ p, li { white-space: pre-wrap; } Attente du noyau... - + Not connected to core. Déconnecté au noyau. @@ -4433,7 +5172,7 @@ p, li { white-space: pre-wrap; } Aide - + Debug Déboguage @@ -4493,7 +5232,7 @@ p, li { white-space: pre-wrap; } Configurer Quassel... - + F7 F7 @@ -4538,7 +5277,7 @@ p, li { white-space: pre-wrap; } Connecter au Noyau... - + Connected to core. Connecté au noyau. @@ -4548,22 +5287,22 @@ p, li { white-space: pre-wrap; } &Modifier les réseaux... - + Nicks Pseudos - + Chat Monitor Moniteur de discussion - + Inputline Ligne de Saisie - + Topic Sujet @@ -4573,17 +5312,17 @@ p, li { white-space: pre-wrap; } Barre d'état - + &File &Fichier - + &Networks &Réseaux - + &Settings &Paramètres @@ -4593,7 +5332,7 @@ p, li { white-space: pre-wrap; } &Vues - + &Help &Aide @@ -4648,27 +5387,27 @@ p, li { white-space: pre-wrap; } Lag noyau: %1 ms - + &Connect to Core... &Connecter au Noyau... - + &Disconnect from Core &Déconnecter du Noyau - + Core &Info... - &Info Noyau + &Info Noyau... - + &Quit &Quitter - + Ctrl+Q Ctrl+Q @@ -4680,25 +5419,25 @@ p, li { white-space: pre-wrap; } &Lock Dock Positions - &Bloquer les positions des fenêtres + &Bloquer les positions des fenêtres - + Show &Search Bar - Montrer la Barre de &Recherche + Afficher la Barre de &Recherche - + Ctrl+F - Ctrl+F + Ctrl+F - + Show Status &Bar - Monter la Barre d'&Etat + Montrer la Barre d'&Etat - + &Configure Quassel... &Configurer Quassel... @@ -4713,75 +5452,90 @@ p, li { white-space: pre-wrap; } À propos de &Qt... - + Debug &NetworkModel Déboguage et Modèle &Réseau - + Debug &MessageModel Déboguage et Modèle &Message - + Debug &Log Déboguage &Historique - + &View &Vue - + &Buffer Views &Vues - + Show Nick List Afficher la liste des pseudos - + Show Chat Monitor Afficher le moniteur de discussion - + Show Input Line Afficher la ligne de commande - + Show Topic Line Afficher la ligne de Sujet - + &About Quassel &À propos de Quassel - + About &Qt À propos de &Qt - + Configure &Networks... Configurer les &Réseaux... - + &Configure Buffer Views... &Configurer les Vues... - + Core Lag: %1 Lag noyau: %1 + + + &Lock Layout + B&loquer le Fond + + + + Show Away Log + Afficher l'historique d'absence + + + + &Toolbars + &Barre d'outils + Message @@ -4949,7 +5703,7 @@ p, li { white-space: pre-wrap; } MessageModel - + Requesting %1 messages from backlog for buffer %2:%3 Demande de %1 messages dans l'historique pour le tampon %2:%3 @@ -4964,7 +5718,12 @@ p, li { white-space: pre-wrap; } Processing Messages - Traitement des Messages + Traitement des Messages + + + + Receiving Backlog + Réception de l'historique @@ -5156,7 +5915,7 @@ p, li { white-space: pre-wrap; } Merci de saisir un nom de réseau: - + Add Network Ajouter un réseau @@ -5164,17 +5923,17 @@ p, li { white-space: pre-wrap; } NetworkItem - + Server: %1 Serveur: %1 - + Users: %1 Utilisateurs: %1 - + Lag: %1 msecs Lag: %1 ms @@ -5182,17 +5941,17 @@ p, li { white-space: pre-wrap; } NetworkModel - + Buffer Tampon - + Topic Sujet - + Nick Count Nombre de Pseudos @@ -5202,22 +5961,22 @@ p, li { white-space: pre-wrap; } Connect - Connecter + Connecter Disconnect - Déconnecter + Déconnecter Join - Rejoindre + Rejoindre Part - Partir + Partir @@ -5227,37 +5986,37 @@ p, li { white-space: pre-wrap; } Show Buffer - Afficher le tampon + Afficher le tampon Joins - Arrivées + Arrivées Parts - Sorties + Sorties Quits - Départs + Départs Nick Changes - Changements de Pseudo + Changements de Pseudo Mode Changes - Changement de Mode + Changement de Mode Day Changes - Changement de Jour + Changement de Jour @@ -5267,112 +6026,112 @@ p, li { white-space: pre-wrap; } Join Channel... - Rejoindre le Canal... + Rejoindre le Canal... Start Query - Lancer la requête + Lancer la requête Show Query - Afficher la requête + Afficher la requête Whois - Whois + Whois Version - Version + Version Time - Heure + Heure Ping - Ping + Ping Finger - Finger + Finger Give Operator Status - Donner le statut d'opérateur + Donner le statut d'opérateur Take Operator Status - Enlever le statut d'opérateur + Enlever le statut d'opérateur Give Voice - Donner Voix + Donner Voix Take Voice - Enlever Voix + Enlever Voix Kick From Channel - Kicker du Canal + Kicker du Canal Ban From Channel - Banir du Canal + Banir du Canal Kick && Ban - Kicker && Banir + Kicker && Banir Hide Buffer(s) Temporarily - Cacher le(s) tampon(s) temporairement + Cacher le(s) tampon(s) temporairement Hide Buffer(s) Permanently - Cacher le(s) tampon(s) définitivement + Cacher le(s) tampon(s) définitivement Show Channel List - Voir la liste des canaux + Voir la liste des canaux Show Ignore List - Voi la liste des ignorés + Voi la liste des ignorés Hide Events - Cacher les Avis + Cacher les Avis CTCP - CTCP + CTCP Actions - Actions + Actions @@ -5387,22 +6146,22 @@ p, li { white-space: pre-wrap; } Join Channel - Rejoindre le canal + Rejoindre le canal Input channel name: - Entrez le nom du canal: + Entrez le nom du canal: Delete Buffer(s)... - Supprimer le(s) tampon(s)... + Supprimer le(s) tampon(s)... Do you want to delete the following buffer(s) permanently? - + Voulez vous supprimer définitivement la vue suivante ? Voulez vous supprimer définitivement les vues suivantes ? @@ -5410,27 +6169,79 @@ p, li { white-space: pre-wrap; } <b>Note:</b> This will delete all related data, including all backlog data, from the core's database and cannot be undone. - <b>Note:</b> Cela détruira toutes les données rattachées, y compris l'historique, de la base de donnée du noyau et cela ne peut être annullé. + <b>Note:</b> Cela détruira toutes les données rattachées, y compris l'historique, de la base de donnée du noyau et cela ne peut être annullé. <br>Active channel buffers cannot be deleted, please part the channel first. - <br>Les canaux actifs ne peuvent être supprimés, merci de quitter le canal auparavant. + <br>Les canaux actifs ne peuvent être supprimés, merci de quitter le canal auparavant. Remove buffers permanently? - Supprimer les tampons définitivement ? + Supprimer les tampons définitivement ? Set as Default... - Définir par défaut... + Définir par défaut... Use Defaults... - Utiliser les paramètres par défauts... + Utiliser les paramètres par défauts... + + + + NetworkModelController + + + Do you want to delete the following buffer(s) permanently? + + Voulez vous supprimer définitivement le tampon suivant ? + Voulez vous supprimer définitivement les tampons suivants ? + + + + + <b>Note:</b> This will delete all related data, including all backlog data, from the core's database and cannot be undone. + <b>Note:</b> Cela suppirmera toutes les données rattachées, y compris l'historique, de la base de donnée du noyau et cela ne peut être annulé. + + + + <br>Active channel buffers cannot be deleted, please part the channel first. + <br>Les canaux actifs ne peuvent être supprimés, merci de quitter le canal auparavant. + + + + Remove buffers permanently? + Supprimer les tampons définitivement ? + + + + NetworkModelController::JoinDlg + + + Join Channel + Rejoindre le Canal + + + + Network: + Réseau: + + + + Channel: + Canal: + + + + NetworkPage + + + Setup Network Connection + Paramétrer la connection réseau @@ -5438,30 +6249,30 @@ p, li { white-space: pre-wrap; } General - Général + Général - + Networks Réseaux - + <b>The following problems need to be corrected before your changes can be applied:</b><ul> <b>Les problèmes suivants doivent être corrigés avant que vos changements soient appliqués:</b><ul> - + <li>All networks need at least one server defined</li> <li>Chaque réseau doit avoir au moins un serveur défini</li> - + </ul> </ul> - + Invalid Network Settings Paramètres réseau invalides @@ -5481,12 +6292,12 @@ p, li { white-space: pre-wrap; } Appliquer d'abord ! - + Delete Network? Supprimer le Réseau ? - + Do you really want to delete the network "%1" and all related settings, including the backlog? Voulez vous vraiment détruire le réseau "%1" et tous les paramètres correspondants, ainsi que l'historique? @@ -5716,6 +6527,11 @@ Unless you *really* know what you do, leave this as ISO-8859-1! Use Custom Encodings Utiliser des encodages personnalisés + + + Misc + Divers + NickEditDlg @@ -5730,7 +6546,7 @@ Unless you *really* know what you do, leave this as ISO-8859-1! Pseudo: - + Add Nickname Ajouter un pseudo @@ -5877,7 +6693,7 @@ Unless you *really* know what you do, leave this as ISO-8859-1! Behaviour - Comportement + Comportement @@ -5929,6 +6745,11 @@ Unless you *really* know what you do, leave this as ISO-8859-1! Y Y + + + Appearance + Apparence + PhononNotificationBackend::ConfigWidget @@ -5956,23 +6777,41 @@ Unless you *really* know what you do, leave this as ISO-8859-1! Fichier joué: + + PostgreSqlStorage + + + PostgreSQL Turbo Bomber HD! + PostgreSQL Turbo Bomber HD! + + QObject - + Requesting a total of up to %1 backlog messages for %2 buffers Demande d'un maximum de %1 messages d'historique pour %2 tampons - + Requesting up to %1 of all unread backlog messages (plus additional %2) Demande d'un maximum de %1 de tous les messages non lus (plus %2 complémentaires) - + Requesting a total of up to %1 unread backlog messages for %2 buffers Demande d'un maximum de %1 messages non lus d'historique pour %2 tampons + + + Welcome to Quassel IRC + Bienvenue sur Quassel IRC + + + + This wizard will help you to set up your default identity and your IRC network connection.<br>This only covers basic settings. You can cancel this wizard any time and use the settings dialog for more detailed changes. + Cet assistant vous aide à paraméter votre identité par défaut et votre connection au réseau IRC.<br>Uniquement pour les paramètres de base. Vous pouvez annuller l'assistant à tout moment et utiliser la fenêtre de paramètres pour des modifications plus détaillées. + QtopiaMainWin @@ -6028,27 +6867,27 @@ Unless you *really* know what you do, leave this as ISO-8859-1! Quassel::secondsToString() - + year année - + day jour - + h - + min mn - + sec s @@ -6056,7 +6895,7 @@ Unless you *really* know what you do, leave this as ISO-8859-1! QueryBufferItem - + <b>Query with %1</b> <b>Dialogue avec %1</b> @@ -6071,17 +6910,17 @@ Unless you *really* know what you do, leave this as ISO-8859-1! <p> %1 </p> - + idling since %1 inactif depuis %1 - + login time: %1 durée de connexion: %1 - + server: %1 serveur: %1 @@ -6294,32 +7133,32 @@ Unless you *really* know what you do, leave this as ISO-8859-1! Paramètres - + Save changes Sauver les changements - + There are unsaved changes on the current configuration page. Would you like to apply your changes now? Il y a des changements non sauvegardés sur cette page de configuration. Voulez vous appliquer vos changements maintenant ? - + Reload Settings Recharger les paramètres - + Do you like to reload the settings, undoing your changes on this page? Voulez vous recharger les paramètres, et annuler vos changements sur cette page ? - + Restore Defaults Restaurer les valeurs par défaut - + Do you like to restore the default values for this page? Voulez-vous restaurer les paramètres par défaut de cette page? @@ -6329,7 +7168,7 @@ Unless you *really* know what you do, leave this as ISO-8859-1! Configurer Quassel - + Configure %1 Configurer %1 @@ -6382,10 +7221,10 @@ Unless you *really* know what you do, leave this as ISO-8859-1! Client tried to send package larger than max package size! - Le client a essayé d'envoyer un paquet supérieur à la taille maximum d'un paquet! + Le client a essayé d'envoyer un paquet supérieur à la taille maximum d'un paquet! - + Disconnecting Déconnecte @@ -6397,17 +7236,115 @@ Unless you *really* know what you do, leave this as ISO-8859-1! Client tried to send 0 byte package! - Le client a essayé d'envoyer un paquet de 0 octet! + Le client a essayé d'envoyer un paquet de 0 octet! Client sent corrupted compressed data! - Le client a envoyé des données compressées corrompues! + Le client a envoyé des données compressées corrompues! Client sent corrupt data: unable to load QVariant! - Le client a envoyé des données corrompues: impossible de charger QVariant! + Le client a envoyé des données corrompues: impossible de charger QVariant! + + + + Peer tried to send package larger than max package size! + Le partenaire a essayé d'envoyer un paquet supérieur à la taille maximum d'un paquet! + + + + Peer tried to send 0 byte package! + Le partenaire a essayé d'envoyer un paquet de 0 octet! + + + + Peer sent corrupted compressed data! + Le partenaire a envoyé des données compressées corrompues! + + + + Peer sent corrupt data: unable to load QVariant! + Le partenaire a envoyé des données corrompues: impossible de charger QVariant! + + + + SimpleNetworkEditor + + + Network name: + Nom du Réseau: + + + + The name of the IRC network you are configuring + Nom du réseau IRC que vous configurez + + + + Servers + Serveurs + + + + A list of IRC servers belonging to this network + Liste des serveurs IRC appartenant à ce réseau + + + + Edit this server entry + Modifier cette entrée de serveur + + + + &Edit... + &Modifier... + + + + Add another IRC server + Ajouter un autre serveur IRC + + + + &Add... + &Ajouter... + + + + Remove this server entry from the list + Supprimer cette entrée serveur de la liste + + + + De&lete + &Supprimer + + + + Move upwards in list + Monter dans la liste + + + + ... + ... + + + + Move downwards in list + Descendre dans la liste + + + + Join Channels Automatically + Rejoindre les canaux automatiquement + + + + A list of IRC channels you will join automatically after connecting to the network + Liste des canaux IRC que vous voulez rejoindre automatiquement après connection au réseau @@ -6433,20 +7370,93 @@ Unless you *really* know what you do, leave this as ISO-8859-1! SQLite est un moteur de base de données par fichiers qui ne nécessite aucun paramétrage. Cela est pratique pour les petites et moyennes base de données qui n'ont pas besoin d'être consultées par réseau. Utilisez SQLite si votre Noyau Quassel doit sauver ses données sur la machine même qu'il utilise, et si vous pensez être peu à utiliser votre noyau. + + SslCertDisplayDialog + + + SSL Certificate used by %1 + SSL Certificat émis par %1 + + + + Issuer Info + Informations Emetteur + + + + Organization: + Organisation: + + + + Locality Name: + Nom de la Localité: + + + + Organizational Unit Name: + Unité d'Organisation: + + + + Country Name: + Nom du Pays: + + + + State or Province Name: + Nom de l'Etat ou de la Province: + + + + Subject Info + Sujet Info + + + + Additional Info + Info additionelle + + + + Valid From: + Valable à partir de: + + + + Valid To: + Valable jusqu'au: + + + + Hostname %1: + Nom de l'hôte %1: + + + + E-Mail Address %1: + Adresse Email %1: + + + + Digest: + Résumé: + + StatusBufferItem <b>Status buffer of %1</b> - <b>Tampon d'état de %1</b> + <b>Tampon d'état de %1</b> <p> %1 </p> - <p> %1 </p> + <p> %1 </p> - + Status Buffer Tampon d'état @@ -6505,17 +7515,17 @@ Unless you *really* know what you do, leave this as ISO-8859-1! SystrayNotificationBackend::ConfigWidget - + System Tray Icon Icône système - + Animate Animer - + Show bubble Afficher une bulle @@ -6543,6 +7553,149 @@ Unless you *really* know what you do, leave this as ISO-8859-1! s + + ToolBarActionProvider + + + Connect + Connecter + + + + Connect to IRC + Connecter à l'IRC + + + + Disconnect + Déconnecter + + + + Disconnect from IRC + Déconnecter de l'IRC + + + + Part + Partir + + + + Leave currently selected channel + Partir du canal sélectionné + + + + Join + Rejoindre + + + + Join a channel + Rejoindre le Canal + + + + Query + Requête + + + + Start a private conversation + Commencer une conversation privée + + + + Whois + Whois + + + + Request user information + Demander les informations de l'utilisateur + + + + Op + Op + + + + Give operator privileges to user + Donner le statut d'opérateur à l'utilisateur + + + + Deop + Deop + + + + Take operator privileges from user + Enlever le statut d'opérateur à l'utilisateur + + + + Voice + Voice + + + + Give voice to user + Donner Voix à l'utilisateur + + + + Devoice + Dévoice + + + + Take voice from user + Enlever Voix à l'utilisateur + + + + Kick + Kicker + + + + Remove user from channel + Enlever l'utilisateur du Canal + + + + Ban + Bannir + + + + Ban user from channel + Bannir l'utilisateur du Canal + + + + Kick/Ban + Kicker/Bannir + + + + Remove and ban user from channel + Enlever et bannir l'utilisateur du Canal + + + + Connect to all + Connecter à tous + + + + Disconnect from all + Déconnecter de tous + + TopicButton @@ -6720,122 +7873,122 @@ Click to edit! UiStyle::StyledMessage - + %D0%1 %D0%1 - + %Dn%1 %Dn%1 - + %Ds%1 %Ds%1 - + %De%1 %De%1 - + %Dj%DN%1%DN %DH(%2@%3)%DH has joined %DC%4%DC %Dj%DN%1%DN %DH(%2@%3)%DH a rejoint %DC%4%DC - + %Dp%DN%1%DN %DH(%2@%3)%DH has left %DC%4%DC %Dp%DN%1%DN %DH(%2@%3)%DH a quitté %DC%4%DC - + %Dq%DN%1%DN %DH(%2@%3)%DH has quit %Dq%DN%1%DN %DH(%2@%3)%DH est parti - + %Dk%DN%1%DN has kicked %DN%2%DN from %DC%3%DC %Dk%DN%1%DN a kické %DN%2%DN de %DC%3%DC - + %DrYou are now known as %DN%1%DN %DrVous vous appellez maintenant %DN%1%DN - + %Dr%DN%1%DN is now known as %DN%2%DN %Dr%DN%1%DN s'appelle maintenant %DN%2%DN - + %DmUser mode: %DM%1%DM %DmMode utilisateur: %DM%1%DM - + %DmMode %DM%1%DM by %DN%2%DN %DmMode %DM%1%DM par %DN%2%DN - + %Da%DN%1%DN %2 %Da%DN%1%DN %2 - + %De[%1] %De[%1] - + <%1> <%1> - + [%1] [%1] - + * * - + --> --> - + <-- <-- - + <-* <-* - + <-> <-> - + *** *** - + -*- -*- - + %1 %1 @@ -6843,7 +7996,7 @@ Click to edit! UserCategoryItem - + %n Owner(s) %n Fondateur @@ -6851,7 +8004,7 @@ Click to edit! - + %n Admin(s) %n Admin @@ -6859,7 +8012,7 @@ Click to edit! - + %n Operator(s) %n Operateur @@ -6867,7 +8020,7 @@ Click to edit! - + %n Half-Op(s) %n Half-Op @@ -6875,7 +8028,7 @@ Click to edit! - + %n Voiced %n Voicé @@ -6883,7 +8036,7 @@ Click to edit! - + %n User(s) %n Utilisateur @@ -6894,9 +8047,14 @@ Click to edit! UserInputHandler - + sending CTCP-%1 request envoi d'une requête CTCP-%1 + + + away + absent + diff --git a/i18n/quassel_ru.ts b/i18n/quassel_ru.ts index a01bc9e6..c19b6ec2 100644 --- a/i18n/quassel_ru.ts +++ b/i18n/quassel_ru.ts @@ -19,7 +19,7 @@ <b>A modern, distributed IRC Client</b><br><br>&copy;2005-2008 by the Quassel Project<br><a href="http://quassel-irc.org">http://quassel-irc.org</a><br><a href="irc://irc.freenode.net/quassel">#quassel</a> on <a href="http://www.freenode.net">Freenode</a><br><br>Quassel IRC is dual-licensed under <a href="http://www.gnu.org/licenses/gpl-2.0.txt">GPLv2</a> and <a href="http://www.gnu.org/licenses/gpl-3.0.txt">GPLv3</a>.<br>Most icons are &copy; by the <a href="http://www.oxygen-icons.org">Oxygen Team</a> and used under the <a href="http://www.gnu.org/licenses/lgpl.html">LGPL</a>.<br><br>Please use <a href="http://bugs.quassel-irc.org">http://bugs.quassel-irc.org</a> to report bugs. - <b>Современный, распределённый клиент IRC</b><br><br>&copy;2005-2008 Quassel Project<br><a href="http://quassel-irc.org">http://quassel-irc.org</a><br><a href="irc://irc.freenode.net/quassel">#quassel</a> в сети <a href="http://www.freenode.net">Freenode</a><br><br>Quassel IRC распространяется по двойной лицензии <a href="http://www.gnu.org/licenses/gpl-2.0.txt">GPLv2</a> и <a href="http://www.gnu.org/licenses/gpl-3.0.txt">GPLv3</a>.<br>Большинство значков &copy; <a href="http://www.oxygen-icons.org">Команда Oxygen</a> и используются по лицензии <a href="http://www.gnu.org/licenses/lgpl.html">LGPL</a>.<br><br>Об ошибках пожалуйста сообщайте на <a href="http://bugs.quassel-irc.org">http://bugs.quassel-irc.org</a>. + <b>Современный, распределённый клиент IRC</b><br><br>&copy;2005-2008 Quassel Project<br><a href="http://quassel-irc.org">http://quassel-irc.org</a><br><a href="irc://irc.freenode.net/quassel">#quassel</a> в сети <a href="http://www.freenode.net">Freenode</a><br><br>Quassel IRC распространяется по двойной лицензии <a href="http://www.gnu.org/licenses/gpl-2.0.txt">GPLv2</a> и <a href="http://www.gnu.org/licenses/gpl-3.0.txt">GPLv3</a>.<br>Большинство значков &copy; <a href="http://www.oxygen-icons.org">Команда Oxygen</a> и используются по лицензии <a href="http://www.gnu.org/licenses/lgpl.html">LGPL</a>.<br><br>Об ошибках пожалуйста сообщайте на <a href="http://bugs.quassel-irc.org">http://bugs.quassel-irc.org</a>. @@ -37,12 +37,12 @@ Особая благодарность:<br><dl><dt><b>John "nox-Hand" Hand</b></dt><dd>за прекрасную графическую работу и логотип/значок Quassel</dt><dt><b><a href="http://www.oxygen-icons.org">Команде Oxygen</a></b></dt><dd>за создания большинства шикарных значков, которые вы видите в Quassel</dd><dt><b><a href="http://www.trolltech.com">Trolltech</a></b></dt><dd>за создание Qt и Qtopia, и за поддержку развития Quasseltopia с помощью Greenphones и прочего</dd> - + About Quassel О Quassel - + <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'DejaVu Sans'; font-size:15pt; font-weight:600; font-style:normal;"> @@ -50,7 +50,7 @@ p, li { white-space: pre-wrap; } <html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'DejaVu Sans'; font-size:15pt; font-weight:600; font-style:normal;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Quassel IRC</p></body></html> - + <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'DejaVu Sans'; font-size:10pt; font-weight:600; font-style:normal;"> @@ -58,38 +58,53 @@ p, li { white-space: pre-wrap; } <html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'DejaVu Sans'; font-size:10pt; font-weight:600; font-style:normal;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Version 0.2.0-pre, Build &gt;= 474 (2008-02-08)</p></body></html> - + &About &О программе - + A&uthors &Авторы - + &Contributors &Помощники - + &Thanks To &Благодарности Special thanks goes to:<br><dl><dt><b>John "nox" Hand</b></dt><dd>for great artwork and the Quassel logo/icon</dt><dt><b><a href="http://www.oxygen-icons.org">The Oxygen Team</a></b></dt><dd>for creating most of the other shiny icons you see throughout Quassel</dd><dt><b><a href="http://www.trolltech.com">Qt Software formerly known as Trolltech</a></b></dt><dd>for creating Qt and Qtopia, and for sponsoring development of QuasselTopia with Greenphones and more</dd><dt><b><a href="http://www.nokia.com">Nokia</a></b></dt><dd>for keeping Qt alive, and for sponsoring development of Quassel Mobile with N810s</dd> - Особая благодарность:<br><dl><dt><b>John "nox-Hand" Hand</b></dt><dd>за прекрасную графическую работу и логотип/значок Quassel</dt><dt><b><a href="http://www.oxygen-icons.org">Команде Oxygen</a></b></dt><dd>за создания большинства шикарных значков, которые вы видите в Quassel</dd><dt><b><a href="http://www.trolltech.com">Qt Software, ранее известная как Trolltech</a></b></dt><dd>за создание Qt и Qtopia, и за поддержку развития QuasselTopia с помощью Greenphones и прочего</dd><dt><b><a href="http://www.nokia.com">Nokia</a></b></dt><dd>за поддержку жизни Qt, и за спонсорство разработки Quassel Mobile с помощью N810</dd> + Особая благодарность:<br><dl><dt><b>John "nox-Hand" Hand</b></dt><dd>за прекрасную графическую работу и логотип/значок Quassel</dt><dt><b><a href="http://www.oxygen-icons.org">Команде Oxygen</a></b></dt><dd>за создания большинства шикарных значков, которые вы видите в Quassel</dd><dt><b><a href="http://www.trolltech.com">Qt Software, ранее известная как Trolltech</a></b></dt><dd>за создание Qt и Qtopia, и за поддержку развития QuasselTopia с помощью Greenphones и прочего</dd><dt><b><a href="http://www.nokia.com">Nokia</a></b></dt><dd>за поддержку жизни Qt, и за спонсорство разработки Quassel Mobile с помощью N810</dd> + + + + <b>A modern, distributed IRC Client</b><br><br>&copy;2005-2009 by the Quassel Project<br><a href="http://quassel-irc.org">http://quassel-irc.org</a><br><a href="irc://irc.freenode.net/quassel">#quassel</a> on <a href="http://www.freenode.net">Freenode</a><br><br>Quassel IRC is dual-licensed under <a href="http://www.gnu.org/licenses/gpl-2.0.txt">GPLv2</a> and <a href="http://www.gnu.org/licenses/gpl-3.0.txt">GPLv3</a>.<br>Most icons are &copy; by the <a href="http://www.oxygen-icons.org">Oxygen Team</a> and used under the <a href="http://www.gnu.org/licenses/lgpl.html">LGPL</a>.<br><br>Please use <a href="http://bugs.quassel-irc.org">http://bugs.quassel-irc.org</a> to report bugs. + <b>Современный, распределённый клиент IRC</b><br><br>&copy;2005-2009 Quassel Project<br><a href="http://quassel-irc.org">http://quassel-irc.org</a><br><a href="irc://irc.freenode.net/quassel">#quassel</a> в сети <a href="http://www.freenode.net">Freenode</a><br><br>Quassel IRC распространяется по двойной лицензии <a href="http://www.gnu.org/licenses/gpl-2.0.txt">GPLv2</a> и <a href="http://www.gnu.org/licenses/gpl-3.0.txt">GPLv3</a>.<br>Большинство значков &copy; <a href="http://www.oxygen-icons.org">Команда Oxygen</a> и используются по лицензии <a href="http://www.gnu.org/licenses/lgpl.html">LGPL</a>.<br><br>Об ошибках пожалуйста сообщайте на <a href="http://bugs.quassel-irc.org">http://bugs.quassel-irc.org</a>. + + + + Special thanks goes to:<br><dl><dt><img src=":/pics/quassel-eye.png">&nbsp;<b>John "nox" Hand</b></dt><dd>for the original Quassel icon - The All-Seeing Eye</dt><dt><img src=":/pics/oxygen.png">&nbsp;<b><a href="http://www.oxygen-icons.org">The Oxygen Team</a></b></dt><dd>for creating all the artwork you see throughout Quassel</dd><dt><img src=":/pics/qt-logo-32.png">&nbsp;<b><a href="http://www.trolltech.com">Qt Software formerly known as Trolltech</a></b></dt><dd>for creating Qt and Qtopia, and for sponsoring development of QuasselTopia with Greenphones and more</dd><dt><a href="http://www.nokia.com"><img src=":/pics/nokia.png"></a></b></dt><dd>for keeping Qt alive, and for sponsoring development of Quassel Mobile with N810s</dd> + Особая благодарность:<br><dl><dt><img src=":/pics/quassel-eye.png">&nbsp;<b>John "nox" Hand</b></dt><dd>за оригинальный значок Quassel - Всевидящее Око</dt><dt><img src=":/pics/oxygen.png">&nbsp;<b><a href="http://www.oxygen-icons.org">The Oxygen Team</a></b></dt><dd>за всю графическую работу для Quassel</dd><dt><img src=":/pics/qt-logo-32.png">&nbsp;<b><a href="http://www.trolltech.com">Qt Software, ранее известная как Trolltech</a></b></dt><dd>за создание Qt и Qtopia, и за поддержку развития QuasselTopia с помощью Greenphones и прочего</dd><dt><a href="http://www.nokia.com"><img src=":/pics/nokia.png"></a></b></dt><dd>за поддержку жизни Qt, и за спонсорство разработки Quassel Mobile с помощью N810</dd> AbstractSqlStorage - + Installed Schema (version %1) is not up to date. Upgrading to version %2... Используемая Схема (версии %1) устарела. Обновляю до версии %2... + + + Upgrade failed... + Обновление не удалось... + AliasesModel @@ -109,7 +124,7 @@ p, li { white-space: pre-wrap; } Behaviour - Поведение + Поведение @@ -131,63 +146,176 @@ p, li { white-space: pre-wrap; } Delete Удалить + + + Misc + Прочее + AppearanceSettingsPage - + Appearance Вид General - Общие + Общие - + <System Default> <По умолчанию> - + Form Форма Client style: - Стиль клиента: + Стиль клиента: Language: - Язык: + Язык: - + <Original> <Без изменений> Note: needs client restart for full effect! - Замечание: для полного эффекта нужно перезапустить клиент! + Замечание: для полного эффекта нужно перезапустить клиент! Misc: - Прочее: + Прочее: Show Web Previews - Показывать предварительный просмотр веб-ссылок + Показывать предварительный просмотр веб-ссылок Use Icons to represent away state of Users - Отображать состояние пользователей значками + Отображать состояние пользователей значками + + + + Client Style + Стиль клиента + + + + Set application style + Задаёт стиль приложения + + + + Language + Язык + + + + Set the application language. Requires restart! + Задаёт язык приложения. Требует перезапуска! + + + + Fonts + Шрифты + + + + Set font for the main chat window and the chat monitor + Задаёт шрифт главного окна чата и монитора чата + + + + Chat window: + Окно чата: + + + + Font + Шрифт + + + + Choose... + Выбрать... + + + + Set font for channel and nick lists + Задаёт шрифт списков каналов и ников + + + + Channel list: + Список каналов: + + + + Set font for the input line + Задаёт шрифт для строки ввода + + + + Input line: + Строка ввода: + + + + Misc + Прочее + + + + Show a website preview window when hovering the mouse over a web address + Показывать предварительный просмотр вебсайта при наведении мышью на адрес + + + + Show previews of webpages on URL hover + Показывать эскиз вебсайта при наведении на URL + + + + Show status icons in channel and nick lists + Показывать значки статус в списках каналов и ников + + + + Use icons in channel and nick lists + Использовать значки в списках + + + + AwayLogView + + + Away Log + Журнал отсутствия + + + + Show Network Name + Показывать название сети + + + + Show Buffer Name + Показывать название буфера @@ -195,7 +323,7 @@ p, li { white-space: pre-wrap; } Behaviour - Поведение + Поведение @@ -208,37 +336,37 @@ p, li { white-space: pre-wrap; } Форма - + Backlog Request Method: Метод запроса журнала: - + Fixed Amount per Buffer Фиксированная длина для каждого буфера - + Unread Messages per Buffer Непрочитанные сообщения для каждого буфера - + Global Unread Messages Глобальное количество непрочитанных сообщений - + The simplest Requester. It fetches a fixed amount of lines for each buffer from the Backlog. Простейший вариант. Запрашивает фиксированное количество строк для каждого буфера из журнала. - + amount of messages per buffer that are requested after the core connection has been established. количество сообщений из каждого буфера, которые запрашиваются у ядра после установления соединения. - + Initial backlog amount: Начальный размер журнала: @@ -247,27 +375,27 @@ p, li { white-space: pre-wrap; } This requester fetches unread messages for each buffer individually. The amount of lines can be limited per buffer. You can also chose to fetch additional older chatlines to provide a better context. - Этот метод запрашивает непрочитанные сообщения для каждого буфера индивидуально. Количество строк может быть ограничено для каждого буфера. + Этот метод запрашивает непрочитанные сообщения для каждого буфера индивидуально. Количество строк может быть ограничено для каждого буфера. Также можно запрашивать дополнительное количество старых строк для лучшего контекста. - + Maximum amount of messages to be fetched per buffer. Максимальное количество запрашиваемых сообщений для буфера. - + Limit: Предел: - + Amount of messages to be fetched in addition to the unread messages. The Limit does not apply here. Количество сообщений, запрашиваемых в дополнение к непрочитанным. Предел здесь не применяется. - + Additional Messages: Дополнительных сообщений: @@ -283,22 +411,22 @@ You can also chose to fetch additional older chatlines to provide a better conte Этот метод запрашивает все сообщения новее чем самое старое сообщение из каждого буфера.Этот метод определяет самое старое прочитанное сообщение из всех буферов и затем запрашивает один большой кусок сообщений со всех буферовПримечание: не рекомендуется использовать этот метод, если используются скрытые буфера или есть неактивные буфера (например оконченные диалоги или каналы).Полезно его использовать для ограничения общего объёма журнала и достижение максимальной скорости.Также можно запросить дополнительно старые строки для лучшего контекста. - + Maximum amount of messages to be fetched over all buffers. Максимальное количество сообщений, запрашиваемых из всех буферов. - + Number of messages to be requested from the core when using scrolling up in the buffer view. Количество запрашиваемых у ядра сообщений при прокрутке журнала вверх. - + Dynamic backlog amount: Динамический размер журнала: - + This requester fetches all messages newer than the oldest unread message for all buffers. Note: this requester is not recommended if you use hidden buffer or have inactive buffers (i.e.: no stale queries or channels). @@ -313,40 +441,54 @@ You can also chose to fetch additional older chatlines to provide a better conte Также можно запрашивать дополнительные старые строки для лучшего контекста. - + FixedBacklogAmount FixedBacklogAmount - + PerBufferUnreadBacklogLimit PerBufferUnreadBacklogLimit - + PerBufferUnreadBacklogAdditional PerBufferUnreadBacklogAdditional - + GlobalUnreadBacklogLimit GlobalUnreadBacklogLimit - + GlobalUnreadBacklogAdditional GlobalUnreadBacklogAdditional - + DynamicBacklogAmount DynamicBacklogAmount + + + Misc + Прочее + + + + This requester fetches unread messages for each buffer individually. The amount of lines can be limited per buffer. + +You can also choose to fetch additional older chatlines to provide a better context. + Этот метод запрашивает непрочитанные сообщения для каждого буфера индивидуально. Количество строк может быть ограничено для каждого буфера. + +Также можно запрашивать дополнительное количество старых строк для лучшего контекста. + BufferItem - + <p> %1 - %2 </p> <p> %1 - %2 </p> @@ -474,12 +616,12 @@ You can also chose to fetch additional older chatlines to provide a better conte Смены дня - + Merge buffers permanently? Произвести необратимое слияние буферов? - + Do you want to merge the buffer "%1" permanently into buffer "%2"? This cannot be reversed! Хотите ли вы слить буфер "%1" с буфером "%2"? @@ -507,7 +649,7 @@ You can also chose to fetch additional older chatlines to provide a better conte Пожалуйста введите названия нового списка буферов: - + Add Buffer View Добавить список буферов @@ -517,7 +659,12 @@ You can also chose to fetch additional older chatlines to provide a better conte Edit Mode - Режим правки + Режим правки + + + + Show / Hide buffers + Показать / спрятать буферы @@ -525,10 +672,10 @@ You can also chose to fetch additional older chatlines to provide a better conte General - Общие + Общие - + Buffer Views Списки буферов @@ -538,12 +685,12 @@ You can also chose to fetch additional older chatlines to provide a better conte Все - + Delete Buffer View? Удалить список буферов? - + Do you really want to delete the buffer view "%1"? Вы действительно хотите удалить список буферов "%1"? @@ -649,6 +796,11 @@ In this mode no separate status buffer is displayed. Эта опция недоступна когда видны все сети. В этом режиме отдельные буфера состояния не отображаются. + + + Appearance + Вид + BufferViewWidget @@ -688,7 +840,7 @@ In this mode no separate status buffer is displayed. Ctrl+0 - Ctrl+0 + Ctrl+0 @@ -698,7 +850,7 @@ p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Trebuchet MS'; font-size:13pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><img src=":/pics/quassel-large.png" /><span style=" font-size:89pt; color:#00008b;">uassel IRC</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:49pt;"><span style=" font-size:22pt;">Chat comfortably. Anywhere.</span></p></body></html> - <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"><html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'Trebuchet MS'; font-size:13pt; font-weight:400; font-style:normal;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><img src=":/pics/quassel-large.png" /><span style=" font-size:89pt; color:#00008b;">uassel IRC</span></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:49pt;"><span style=" font-size:22pt;">Разговаривать удобно. Везде.</span></p></body></html> + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"><html><head><meta name="qrichtext" content="1" /><style type="text/css">p, li { white-space: pre-wrap; }</style></head><body style=" font-family:'Trebuchet MS'; font-size:13pt; font-weight:400; font-style:normal;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><img src=":/pics/quassel-large.png" /><span style=" font-size:89pt; color:#00008b;">uassel IRC</span></p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:49pt;"><span style=" font-size:22pt;">Разговаривать удобно. Везде.</span></p></body></html> @@ -713,38 +865,43 @@ p, li { white-space: pre-wrap; } Zoom Original - Восстановить размер + Восстановить размер + + + + Actual Size + Исходный размер ChannelBufferItem - + <b>Channel %1</b> <b>Канал %1</b> - + <b>Users:</b> %1 <b>Пользователи:</b> %1 - + <b>Mode:</b> %1 <b>Режим:</b> %1 - + <b>Topic:</b> %1 <b>Тема:</b> %1 - + Not active <br /> Double-click to join Неактивно <br /> Дважды щёлкните чтобы войти - + <p> %1 </p> <p> %1 </p> @@ -809,7 +966,7 @@ p, li { white-space: pre-wrap; } General - Общие + Общие @@ -887,6 +1044,11 @@ p, li { white-space: pre-wrap; } Show own messages Показывать свои сообщения + + + Appearance + Вид + ChatMonitorView @@ -929,7 +1091,7 @@ p, li { white-space: pre-wrap; } ChatScene - + Copy Selection Скопировать выделение @@ -975,15 +1137,20 @@ p, li { white-space: pre-wrap; } Личность уже есть в клиенте! - + All Buffers Все буфера + + + Default Identity + Личность по умолчанию + ClientBacklogManager - + Processed %1 messages in %2 seconds. Обработано сообщений: %1. Затрачено секунд: %2. @@ -991,50 +1158,60 @@ p, li { white-space: pre-wrap; } ClientSyncer - + The Quassel Core you try to connect to is too old! Please consider upgrading. Вы пытаетесь подключиться к слишком старому ядру Quassel! Пожалуйста обновите. - + <b>Invalid data received from core!</b><br>Disconnecting. <b>От ядра получены некорректные данные!</b><br>Отсоединяюсь. - + Internal connections not yet supported. - Внутренние соединения пока не поддерживаются. + Внутренние соединения пока не поддерживаются. - + <b>This client is built without SSL Support!</b><br />Disable the usage of SSL in the account settings. <b>Этот клиент был собран без поддержки SSL!</b><br />Отключите использование SSL в настройках аккаунта. - + <b>The Quassel Core you are trying to connect to is too old!</b><br>Need at least core/client protocol v%1 to connect. <b>Вы пытаетесь подключиться к слишком старому ядру Quassel!</b><br>Для соединения необходима поддержка клиент-серверного протокола по крайней мере версии %1. - + <b>The Quassel Core you are trying to connect to does not support SSL!</b><br />If you want to connect anyways, disable the usage of SSL in the account settings. <b>Ядро Quassel, к которому вы пытаетесь подключиться не поддерживает SSL!</b><br />Если вы всё равно хотите подключиться, отключите использование SSL в настройках аккаунта. - + Logging in... Авторизуюсь... + + + Cert Digest changed! was: %1 + Хеш сертификата изменился! старый был: %1 + + + + No Host to connect to specified. + Не указан хост для соединения. + ColorSettingsPage - + Appearance Вид - + Color settings Настройки цвета @@ -1056,468 +1233,696 @@ p, li { white-space: pre-wrap; } FG - Текст + Текст - + BG Фон - + Use BG Использовать фон - + Default: По умолчанию: - + Inactive: Неактивно: - + Highlight: Подсветка: - + New Message: Новое сообщение: - + Other Activity: Другая активность: - + Preview: Предварительный просмотр: - + 1 1 - + Chatview Окно чата - + Server Activity Активность сервера - + Foreground Текст - + Background Фон - + Error Message: Сообщение об ошибке: - + Notice Message: Уведомление: - + Plain Message: Простое сообщение: - + Server Message: Сообщение сервера: - + Highlight Message: Подсвеченное сообщение: - + User Activity Пользовательская активность - + Action Message: Сообщение о действии: - + Join Message: Сообщение о входе: - + Kick Message: Сообщение об изгнании: - + Mode Message: Сообщение о смене режима: - + Part Message: Сообщение об уходе: - + Quit Message: Сообщение о выходе: - + Rename Message: Сообщение о переименовании: - + Message Сообщение - + Timestamp: Время: - + Sender: Отправитель: - + Nick: Ник: - + Hostmask: Маска: - + Channelname: Канал: - + Mode flags: Режимы: - + Url: Адрес: - + New Message Marker: Маркер новых сообщений: - + Mirc Color Codes Цвета mIRC - + Color Codes Цвета - + Color 0: Цвет 0: - + Color 1: Цвет 1: - + Color 2: Цвет 2: - + Color 3: Цвет 3: - + Color 4: Цвет 4: - + Color 5: Цвет 5: - + Color 6: Цвет 6: - + Color 7: Цвет 7: - + Color 8: Цвет 8: - + Color 14: Цвет 14: - + Color 15: Цвет 15: - + Color 13: Цвет 13: - + Color 12: Цвет 12: - + Color 11: Цвет 11: - + Color 10: Цвет 10: - + Color 9: Цвет 9: - + Nickview Список ников - + Nick status: Состояние ника: - + Online: Онлайн: - + Away: Отошёл: + + + Enable + Включено + + + + Sender auto coloring: + Автоматическая раскраска отправителя: + ContentsChatItem - + Copy Link Address Скопировать адрес ссылки - Core + ContextMenuActionProvider - - Could not initialize any storage backend! Exiting... - Не могу инициализировать ни одно хранилище! Выхожу... + + Connect + Соединиться - - Currently, Quassel only supports SQLite3. You need to build your -Qt library with the sqlite plugin enabled in order for quasselcore -to work. - В настоящий момент Quassel поддерживает только SQLite3. Вам нужно -собрать собственную библиотеку Qt с включенным плагином sqlite -чтобы quasselcore заработал. + + Disconnect + Отсоединиться - - Calling restoreState() even though active sessions exist! - Вызываю restoreState() несмотря на существующие активные сессии! + + Join + Зайти - - Admin user or password not set. - Нет пользователя-администратора или пароля. + + Part + Выйти - - Could not setup storage! - Не могу настроить хранилище! + + Delete Buffer(s)... + Удалить буфер(а)... - - Creating admin user... - Создаю пользователя-администратора... + + Show Buffer + Показать буфер - - Client connected from - Клиент соединился с + + Joins + Входы - - Closing server for basic setup. - Закрываю сервер для базовой настройки. + + Parts + Выходы из канала - - Antique client trying to connect... refusing. - Древний клиент попытался подключиться... отказываю. + + Quits + Выходы из сети - - <b>Your Quassel Client is too old!</b><br>This core needs at least client/core protocol version %1.<br>Please consider upgrading your client. - <b>Ваш клиент Quassel слишком старый!</b><br>Этому ядру нужна версия клиент-серверного протокола по крайней мере %1.<br>Пожалуйста обновите клиент. + + Nick Changes + Смены ника - - Client - Клиент + + Mode Changes + Смены режимов - - too old, rejecting. - слишком старый, отказываю. + + Day Changes + Смены дня - - <b>Quassel Core Version %1</b><br>Built: %2<br>Up %3d%4h%5m (since %6) - <b>Ядро Quassel версии %1</b><br>Собрано: %2<br>Аптайм %3д%4ч%5м (с %6) + + Set as Default... + Задать буфер по умолчанию... - - Starting TLS for Client: - Запускаю TLS для клиента: + + Use Defaults... + Использовать по умолчанию... - - <b>Client not initialized!</b><br>You need to send an init message before trying to login. - <b>Клиент не инициализирован!</b><br>Вам нужно отправить инициализационное сообщение перед попыткой входа. + + Join Channel... + Зайти на канал... - - did not send an init message before trying to login, rejecting. - не отправил инициализационное сообщение перед попыткой входа, отказываю. + + Start Query + Начать диалог - - <b>Invalid username or password!</b><br>The username/password combination you supplied could not be found in the database. - <b>Неверное имя пользователя или пароль!</b><br>Предоставленные вами имя пользователя и пароль не найдены в базе. + + Show Query + Показать диалог - - initialized and authenticated successfully as "%1" (UserId: %2). - инициализирован и аутентифицирован успешно как "%1" (UserId: %2). + + Whois + Whois - - Non-authed client disconnected. - Неавторизованный клиент отсоединён. + + Version + Версия - - Non-authed client disconnected. (socket allready destroyed) - Неавторизованный клиент отсоединён. (сокет уже уничтожен) + + Time + Время - - Could not initialize session for client: - Не могу инициализировать сессию для клиента: + + Ping + Ping - - - CoreAccountEditDlg - - Add Core Account - Добавить аккаунт в ядре + + Finger + Finger - - Edit Core Account - Редактировать аккаунт в ядре + + Give Operator Status + Дать оператора - - Account Details - Подробности аккаунта + + Take Operator Status + Снять оператора - - Account Name: - Название аккаунта: + + Give Voice + Дать голос - - Local Core - Локальное ядро + + Take Voice + Снять голос - - Hostname: - Хост: + + Kick From Channel + Выгнать с канала - - Port: - Порт: + + Ban From Channel + Забанить на канале - - localhost - localhost + + Kick && Ban + Выгнать и забанить - - Use secure connection (SSL) - Использовать защищённое соединение (SSL) + + Hide Buffer(s) Temporarily + Временно спрятать буфер(а) - - Use a proxy: - Использовать прокси: + + Hide Buffer(s) Permanently + Навсегда спрятать буфер(а) - + + Show Channel List + Показать список каналов + + + + Show Ignore List + Показать список игнорируемых + + + + Hide Events + Спрятать события + + + + CTCP + CTCP + + + + Actions + Действия + + + + Core + + + Could not initialize any storage backend! Exiting... + Не могу инициализировать ни одно хранилище! Выхожу... + + + + Currently, Quassel only supports SQLite3. You need to build your +Qt library with the sqlite plugin enabled in order for quasselcore +to work. + В настоящий момент Quassel поддерживает только SQLite3. Вам нужно +собрать собственную библиотеку Qt с включенным плагином sqlite +чтобы quasselcore заработал. + + + + Calling restoreState() even though active sessions exist! + Вызываю restoreState() несмотря на существующие активные сессии! + + + + Admin user or password not set. + Нет пользователя-администратора или пароля. + + + + Could not setup storage! + Не могу настроить хранилище! + + + + Creating admin user... + Создаю пользователя-администратора... + + + + Client connected from + Клиент соединился с + + + + Closing server for basic setup. + Закрываю сервер для базовой настройки. + + + + Antique client trying to connect... refusing. + Древний клиент попытался подключиться... отказываю. + + + + <b>Your Quassel Client is too old!</b><br>This core needs at least client/core protocol version %1.<br>Please consider upgrading your client. + <b>Ваш клиент Quassel слишком старый!</b><br>Этому ядру нужна версия клиент-серверного протокола по крайней мере %1.<br>Пожалуйста обновите клиент. + + + + Client + Клиент + + + + too old, rejecting. + слишком старый, отказываю. + + + + <b>Quassel Core Version %1</b><br>Built: %2<br>Up %3d%4h%5m (since %6) + <b>Ядро Quassel версии %1</b><br>Собрано: %2<br>Аптайм %3д%4ч%5м (с %6) + + + + Starting TLS for Client: + Запускаю TLS для клиента: + + + + <b>Client not initialized!</b><br>You need to send an init message before trying to login. + <b>Клиент не инициализирован!</b><br>Вам нужно отправить инициализационное сообщение перед попыткой входа. + + + + did not send an init message before trying to login, rejecting. + не отправил инициализационное сообщение перед попыткой входа, отказываю. + + + + <b>Invalid username or password!</b><br>The username/password combination you supplied could not be found in the database. + <b>Неверное имя пользователя или пароль!</b><br>Предоставленные вами имя пользователя и пароль не найдены в базе. + + + + initialized and authenticated successfully as "%1" (UserId: %2). + инициализирован и аутентифицирован успешно как "%1" (UserId: %2). + + + + Non-authed client disconnected. + Неавторизованный клиент отсоединён. + + + + Non-authed client disconnected. (socket allready destroyed) + Неавторизованный клиент отсоединён. (сокет уже уничтожен) + + + + Could not initialize session for client: + Не могу инициализировать сессию для клиента: + + + + Invalid listen address %1 + Некорректный адрес для прослушивания %1 + + + + Listening for GUI clients on IPv4 %1 port %2 using protocol version %3 + Ожидаю графических клиентов по адресу IPv4 %1 порт %2, использую протокол версии %3 + + + + Could not open IPv4 interface %1:%2: %3 + Не могу открыть интерфейс IPv4 %1:%2: %3 + + + + Listening for GUI clients on IPv6 %1 port %2 using protocol version %3 + Ожидаю графических клиентов по адресу IPv6 %1 порт %2, использую протокол версии %3 + + + + Could not open IPv6 interface %1:%2: %3 + Не могу открыть интерфейс IPv6 %1:%2: %3 + + + + Invalid listen address %1, unknown network protocol + Некорректный адрес для прослушивания %1, неизвестный сетевой протокол + + + + Could not open any network interfaces to listen on! + Не могу открыть ни один сетевой интерфейс для прослушивания! + + + + CoreAccountEditDlg + + + Add Core Account + Добавить аккаунт в ядре + + + + Edit Core Account + Редактировать аккаунт в ядре + + + + Account Details + Подробности аккаунта + + + + Account Name: + Название аккаунта: + + + + Local Core + Локальное ядро + + + + Hostname: + Хост: + + + + Port: + Порт: + + + + localhost + localhost + + + + Use secure connection (SSL) + Использовать защищённое соединение (SSL) + + + + Use a proxy: + Использовать прокси: + + + Proxy Type: Тип прокси: @@ -1770,77 +2175,77 @@ p, li { white-space: pre-wrap; } CoreConnectDlg - + Remove Account Settings Удаление настроек аккаунта - + Do you really want to remove your local settings for this Quassel Core account?<br>Note: This will <em>not</em> remove or change any data on the Core itself! Вы действительно хотите удалить ваши локальные настройки для этого аккаунта ядра Quassel?<br>Замечание: это <em>не</em> удалит и никак не изменит данные в самом ядре! - + Connect to %1 Соединиться с %1 - + <div style=color:red;>Connection to %1 failed!</div> <div style="color:red;">Сбой соединения с %1!</div> - + Not connected to %1. Нет соединения с %1. - + Looking up %1... Ищу хост %1... - + Connecting to %1... Соединяюсь с %1... - + Connected to %1 Соединение с %1 установлено - + Unknown connection state to %1 Неизвестно состояние соединения с %1 - + Logging in... Выполняю вход... - + Login Вход - + Connect to Quassel Core Соединение с ядром Quassel - + Edit... Правка... - + Add... Добавить... - + Delete Удалить @@ -1850,17 +2255,17 @@ p, li { white-space: pre-wrap; } использовать встроенное ядро - + Always use this account Всегда использовать этот аккаунт - + Initializing your connection Инициализирую ваше соединение - + Connected to apollo.mindpool.net. Соединён с apollo.mindpool.net. @@ -1876,67 +2281,67 @@ some space - + User: Пользователь: - + Password: Пароль: - + Remember Запомнить - + Configure your Quassel Core Настройте ваше ядро Quassel - + The Quassel Core you are connected to is not configured yet. You may now launch a configuration wizard that helps you setting up your Core. Ядро Quassel, к которому вы подключились, ещё не настроено. Сейчас вы можете запустить мастер настройки, который поможет сконфигурировать ваше ядро. - + Launch Wizard Запустить мастер - + Initializing your session... Инициализирую ваш сеанс... - + <b>Please be patient while your client synchronizes with the Quassel Core!</b> <b>Пожалуйста, наберитесь терпения, пока ваш клиент синхронизируется с ядром Quassel!</b> - + Session state: Состояние сессии: - + Network states: Состояния сетей: - + 0/0 0/0 - + Use internal core Использовать встроенное ядро - + THIS IS A PLACEHOLDER TO RESERVE @@ -1946,6 +2351,26 @@ TO RESERVE SOME SPACE + + + <div>Errors occurred while connecting to "%1":</div> + <div>При соединении с "%1" возникли ошибки:</div> + + + + view SSL Certificate + просмотреть сертификат SSL + + + + add to known hosts + добавить в известные адреса + + + + Continue connection + Продолжить соединение + CoreInfoDlg @@ -2017,55 +2442,65 @@ SOME SPACE CoreNetwork - + Connection failed. Cycling to next Server Сбой соединения. Пробую следующий сервер - + Connecting to %1:%2... Соединяюсь с %1:%2... Disconnecting. - Отсоединяюсь. + Отсоединяюсь. - + Could not connect to %1 (%2) Не могу подсоединиться к %1 (%2) - + Connection failure: %1 Сбой соединения: %1 + + + Disconnecting. (%1) + Отсоединяюсь. (%1) + + + + Core Shutdown + Ядро завершает работу + CoreSession Default Identity - Личность по умолчанию + Личность по умолчанию - + Client Клиент - + disconnected (UserId: %1). отсоединён (UserId: %1). - + CoreSession::createNetwork(): Got invalid networkId from Core when trying to create network %1! CoreSession::createNetwork(): Получен неверный networkId от ядра, пытаясь создать сеть %1! - + CoreSession::createNetwork(): Trying to create a network that already exists, updating instead! CoreSession::createNetwork(): Попытался создать уже существующую сеть, вместо этого обновляю! @@ -2288,12 +2723,12 @@ SOME SPACE Behaviour - Поведение + Поведение General - Общие + Общие @@ -2440,13 +2875,18 @@ SOME SPACE Errors: Ошибки: + + + Misc + Прочее + HighlightSettingsPage Behaviour - Поведение + Поведение @@ -2523,76 +2963,81 @@ SOME SPACE Case sensitive Учитывать регистр + + + Appearance + Вид + IdentitiesSettingsPage General - Общие + Общие - + Identities Личности - + <b>The following problems need to be corrected before your changes can be applied:</b><ul> <b>Прежде чем сохранить настройки, необходимо устранить следующие проблемы:</b><ul> - + <li>All identities need an identity name set</li> <li>У всех личностей должно быть название</li> - + <li>Every identity needs at least one nickname defined</li> <li>В каждой личности должен быть хотя бы один ник</li> - + <li>You need to specify a real name for every identity</li> <li>Вам нужно указать настоящее имя для каждой личности</li> - + <li>You need to specify an ident for every identity</li> <li>Вам нужно указать идент для каждой личности</li> - + </ul> </ul> - + One or more identities are invalid Одна или несколько личностей некорректны - + Delete Identity? Удалить личность? - + Do you really want to delete identity "%1"? Вы действительно хотите удалить личность "%1"? - + Rename Identity Переименовать личность - + Please enter a new name for the identity "%1"! Пожалуйста введите новое название личности "%1"! - + ... ... @@ -2614,72 +3059,72 @@ SOME SPACE Real Name: - Настоящее имя: + Настоящее имя: The "Real Name" is shown in /whois. - "Настоящее имя" отображается в /whois. + "Настоящее имя" отображается в /whois. Nicknames - Ники + Ники Add Nickname - Добавить ник + Добавить ник &Add... - Доб&авить... + Доб&авить... Remove Nickname - Удалить ник + Удалить ник Remove - Удалить + Удалить Re&name... - Пере&именовать... + Пере&именовать... Move upwards in list - Передвинуть вверх в списке + Передвинуть вверх в списке Move downwards in list - Передвинуть вниз в списке + Передвинуть вниз в списке A&way - &Отошёл + &Отошёл Default Away Settings - Настройки состояния "Отошёл" по-умолчанию + Настройки состояния "Отошёл" по-умолчанию Nick to be used when being away - Ник для состояния "Отошёл" + Ник для состояния "Отошёл" Default away reason - Причина по-умолчанию + Причина по-умолчанию @@ -2694,97 +3139,97 @@ SOME SPACE Set away when all clients have detached from the core - Устанавливать состояние "отошёл" когда все клиенты отсоединены от ядра + Устанавливать состояние "отошёл" когда все клиенты отсоединены от ядра Away On Detach - "Отошёл" при отсоединении + "Отошёл" при отсоединении Override default away reason for auto-away on detach - Игнорировать причину по-умолчанию при автоматическом состоянии "отошёл" при отсоединении + Игнорировать причину по-умолчанию при автоматическом состоянии "отошёл" при отсоединении Not implemented yet - Ещё не реализовано + Ещё не реализовано Away On Idle - "Отошёл" при неактивности + "Отошёл" при неактивности Set away after - Устанавливать "отошёл" после + Устанавливать "отошёл" после minutes of being idle - минут неактивности + минут неактивности Advanced - Дополнительно + Дополнительно Ident: - Идент: + Идент: The "ident" is part of your hostmask and, together with your host, uniquely identifies you within the IRC network. - "Идент" является частью хостмаски и вместе с хостом является однозначным идентификатором пользователя сети IRC. + "Идент" является частью хостмаски и вместе с хостом является однозначным идентификатором пользователя сети IRC. Messages - Сообщения + Сообщения Part Reason: - Причина выхода с канала: + Причина выхода с канала: Quit Reason: - Причина выхода: + Причина выхода: Kick Reason: - Причина изгнания: + Причина изгнания: Load a Key - Загрузить ключ + Загрузить ключ No Key loaded - Ключ не загружен + Ключ не загружен Load - Загрузить + Загрузить RSA - RSA + RSA DSA - DSA + DSA @@ -2794,28 +3239,28 @@ SOME SPACE Clear - Очистить + Очистить Load a Certificate - Загрузить сертификат + Загрузить сертификат No Certificate loaded - Сертификат не загружен + Сертификат не загружен You need an SSL Capable Client to edit your Cores SSL Key and Certificate - Вам нужен клиент, умеющий работать с SSL, для редактирования ключа и сертификата SSL + Вам нужен клиент, умеющий работать с SSL, для редактирования ключа и сертификата SSL Warning: you are not connected with a secured connection to the Quassel Core! Proceeding will cause an unencrypted transfer of your SSL Key and SSL Certificate! - Предупреждение: вы не используете безопасное соединение с ядром Quassel! + Предупреждение: вы не используете безопасное соединение с ядром Quassel! В случае продолжения передача вашего ключа и сертификата будет небезопасной! @@ -2826,91 +3271,371 @@ Proceeding will cause an unencrypted transfer of your SSL Key and SSL Certificat Use SSL Key - Использовать ключ SSL + Использовать ключ SSL Key Type: - Тип ключа: + Тип ключа: Use SSL Certificate - Использовать сертификат SSL + Использовать сертификат SSL Organisation: - Организация: + Организация: CommonName: - ОбщееИмя: + ОбщееИмя: Away Reason: - Причина отсутствия: + Причина отсутствия: Away Nick: - Ник при отсутствии: + Ник при отсутствии: Continue - Продолжить + Продолжить + + + + Misc + Прочее Identity - + <empty> <пусто> - + Quassel IRC User Пользователь Quassel IRC - + Gone fishing. Ловлю рыбу. - + Not here. No, really. not here! Нет меня. Не, честно, нет меня! - + All Quassel clients vanished from the face of the earth... Все клиенты Quassel стёрты с лица земли... - + Kindergarten is elsewhere! Детский сад в другом месте! - + http://quassel-irc.org - Chat comfortably. Anywhere. http://quassel-irc.org - Разговаривать удобно. Везде. + + IdentityEditWidget + + + Advanced + Дополнительно + + + + Load a Key + Загрузить ключ + + + + No Key loaded + Ключ не загружен + + + + Load + Загрузить + + + + RSA + RSA + + + + DSA + DSA + + + + Clear + Очистить + + + + Load a Certificate + Загрузить сертификат + + + + No Certificate loaded + Сертификат не загружен + + + + General + Общие + + + + Real Name: + Настоящее имя: + + + + The "Real Name" is shown in /whois. + "Настоящее имя" отображается в /whois. + + + + Nicknames + Ники + + + + Add Nickname + Добавить ник + + + + &Add... + Доб&авить... + + + + Remove Nickname + Удалить ник + + + + Remove + Удалить + + + + Rename Identity + Переименовать личность + + + + Re&name... + Пере&именовать... + + + + Move upwards in list + Передвинуть вверх в списке + + + + ... + ... + + + + Move downwards in list + Передвинуть вниз в списке + + + + A&way + &Отошёл + + + + Default Away Settings + Настройки состояния "Отошёл" по-умолчанию + + + + Nick to be used when being away + Ник для состояния "Отошёл" + + + + Default away reason + Причина по-умолчанию + + + + Away Nick: + Ник при отсутствии: + + + + Away Reason: + Причина отсутствия: + + + + Set away when all clients have detached from the core + Устанавливать состояние "отошёл" когда все клиенты отсоединены от ядра + + + + Away On Detach + "Отошёл" при отсоединении + + + + Not implemented yet + Ещё не реализовано + + + + Away On Idle + "Отошёл" при неактивности + + + + Set away after + Устанавливать "отошёл" после + + + + minutes of being idle + минут неактивности + + + + Ident: + Идент: + + + + The "ident" is part of your hostmask and, together with your host, uniquely identifies you within the IRC network. + "Идент" является частью хостмаски и вместе с хостом является однозначным идентификатором пользователя сети IRC. + + + + Messages + Сообщения + + + + Part Reason: + Причина выхода с канала: + + + + Quit Reason: + Причина выхода: + + + + Kick Reason: + Причина изгнания: + + + + You need an SSL Capable Client to edit your Cores SSL Key and Certificate + Вам нужен клиент, умеющий работать с SSL, для редактирования ключа и сертификата SSL + + + + Warning: you are not connected with a secured connection to the Quassel Core! +Proceeding will cause an unencrypted transfer of your SSL Key and SSL Certificate! + Предупреждение: вы не используете безопасное соединение с ядром Quassel! +В случае продолжения передача вашего ключа и сертификата будет небезопасной! + + + + Continue + Продолжить + + + + Use SSL Key + Использовать ключ SSL + + + + Key Type: + Тип ключа: + + + + Use SSL Certificate + Использовать сертификат SSL + + + + Organisation: + Организация: + + + + CommonName: + ОбщееИмя: + + + + IdentityPage + + + Setup Identity + Настроить личность + + + + Default Identity + Личность по умолчанию + + + + InputLine + + + Do you really want to paste %1 lines? + + Действительно вставить %1 строку? + Действительно вставить %1 строки? + Действительно вставить %1 строк? + + + + + Paste Protection + Защита при вставке + + InputWidget - + Focus Input Line Активировать строку ввода - + Ctrl+L Ctrl+L @@ -2920,6 +3645,14 @@ Proceeding will cause an unencrypted transfer of your SSL Key and SSL Certificat Форма + + IrcConnectionWizard + + + Save && Connect + Сохранить и соединиться + + IrcListModel @@ -2941,152 +3674,152 @@ Proceeding will cause an unencrypted transfer of your SSL Key and SSL Certificat IrcServerHandler - + %1 has changed topic for %2 to: "%3" %1 сменил тему канала %2 на "%3" - + Received RPL_ISUPPORT (005) without parameters! Получено RPL_ISUPPORT (005) без параметров! - + Received non RFC compliant RPL_ISUPPORT: this can lead to unexpected behavior! Получен нестандартный RPL_ISUPPORT: может случиться всё что угодно! - + %1 %1 - + [Whois] %1 is away: "%2" [Whois] %1 отошёл: "%2" - + %1 is away: "%2" %1 отошёл: "%2" - + [Whois] %1 [Whois] %1 - + [Whois] %1 is %2 (%3) [Whois] %1 это %2 (%3) - + %1 is online via %2 (%3) %1 подключен через %2 (%3) - + [Whowas] %1 [Whowas] %1 - + [Whowas] %1 was %2 (%3) [Whowas] %1 был %2 (%3) - + [Who] End of /WHO list for %1 [Who] Конец списка /WHO для %1 - + [Whois] %1 is logged in since %2 [Whois] %1 в онлайне с %2 - + [Whois] %1 is idling for %2 (%3) [Whois] %1 неактивен %2 (%3) - + [Whois] idle message: %1 [Whois] сообщение неактивности: %1 - + [Whois] %1 is a user on channels: %2 [Whois] %1 является участником каналов: %2 - + [Whois] %1 has voice on channels: %2 [Whois] %1 является участником с голосом на каналах: %2 - + [Whois] %1 is an operator on channels: %2 [Whois] %1 является оператором каналов: %2 - + Channel %1 has %2 users. Topic is: %3 На канале %1 %2 пользователей. Тема: %3 - + End of channel list Конец списка каналов - + No topic is set for %1. Тема для канала %1 не установлена. - + Topic for %1 is "%2" Тема канала %1 "%2" - + Topic set by %1 on %2 Тема установлена %1 %2 - + [Who] %1 [Who] %1 - + There is a nickname in your identity's nicklist which contains illegal characters - В списке ников вашей личности есть ник с недопустимыми символами + В списке ников вашей личности есть ник с недопустимыми символами - + Due to a bug in Unreal IRCd (and maybe other irc-servers too) we're unable to determine the erroneous nick - Из-за бага в сервере Unreal IRCd (и, возможно, в других) мы не можем определить ошибочный ник + Из-за бага в сервере Unreal IRCd (и, возможно, в других) мы не можем определить ошибочный ник - + Please use: /nick <othernick> to continue or clean up your nicklist - Для продолжения используйте: /nick <другой ник> или почистите ваш список ников + Для продолжения используйте: /nick <другой ник> или почистите ваш список ников - + Nick %1 contains illegal characters Ник %1 содержит недопустимые символы - + Nick already in use: %1 Ник уже используется: %1 - + No free and valid nicks in nicklist found. use: /nick <othernick> to continue Среди ников в списке не найдено свободного и корректного. Используйте /nick <другой ник> для продолжения @@ -3094,17 +3827,17 @@ Proceeding will cause an unencrypted transfer of your SSL Key and SSL Certificat IrcUserItem - + idling since %1 неактивен с %1 - + login time: %1 время входа: %1 - + server: %1 сервер: %1 @@ -3112,17 +3845,17 @@ Proceeding will cause an unencrypted transfer of your SSL Key and SSL Certificat MainWin - + &Connect to Core... &Подключиться к ядру... - + &Disconnect from Core &Отключиться от ядра - + Core &Info... &Инфромация ядра... @@ -3132,12 +3865,12 @@ Proceeding will cause an unencrypted transfer of your SSL Key and SSL Certificat &Редактировать сети... - + &Quit В&ыход - + Ctrl+Q Ctrl+Q @@ -3149,30 +3882,30 @@ Proceeding will cause an unencrypted transfer of your SSL Key and SSL Certificat &Lock Dock Positions - За&фиксировать позиции + За&фиксировать позиции - + Show &Search Bar Показать строку &поиска - + Ctrl+F Ctrl+F - + Show Status &Bar Показать строку &статуса - + &Configure Quassel... &Настройки Quassel... - + F7 F7 @@ -3187,135 +3920,155 @@ Proceeding will cause an unencrypted transfer of your SSL Key and SSL Certificat О &Qt... - + Debug &NetworkModel Отладить &NetworkModel - + &File &Файл - + &Networks &Сети - + &View &Вид - + &Buffer Views &Буфера - + &Settings &Настройки - + &Help &Помощь - + Debug Отладка - + Nicks Ники - + Show Nick List Показать список ников - + Chat Monitor Монитор чата - + Show Chat Monitor Показать монитор чата - + Inputline Строкаввода - + Show Input Line Показать строку ввода - + Topic Тема - + Show Topic Line Показать строку темы - + Connected to core. Соединение с ядром установлено. Core Lag: %1 msec - Лаг ядра: %1 мс + Лаг ядра: %1 мс - + Not connected to core. Нет соединения с ядром. - + Debug &MessageModel Отладить &MessageModel - + Debug &Log &Журнал отладки - + &About Quassel &О Quassel - + About &Qt О &Qt - + Configure &Networks... Настроить &Сети... - + &Configure Buffer Views... Настроить списки &буферов... + + + Core Lag: %1 + Лаг ядра: %1 + + + + &Lock Layout + &Блокировать расположение + + + + Show Away Log + Показать журнал отсутствия + + + + &Toolbars + Па&нели + MessageModel - + Requesting %1 messages from backlog for buffer %2:%3 Запрашиваю %1 сообщений из журнала для буфера %2:%3 @@ -3330,7 +4083,60 @@ Proceeding will cause an unencrypted transfer of your SSL Key and SSL Certificat Processing Messages - Обработка сообщений + Обработка сообщений + + + + Receiving Backlog + Получаю журнал + + + + NetworkAddDlg + + + Add Network + Добавить сеть + + + + Use preset: + Выбрать известную сеть: + + + + Manually specify network settings + Вручную указать параметры сети + + + + Manual Settings + Ручные настройки + + + + Network name: + Название сети: + + + + Server address: + Адрес сервера: + + + + Port: + Порт: + + + + Server password: + Пароль сервера: + + + + Use secure connection + Использовать безопасное соединение @@ -3374,7 +4180,7 @@ Proceeding will cause an unencrypted transfer of your SSL Key and SSL Certificat Пожалуйста введите название сети: - + Add Network Добавить сеть @@ -3382,17 +4188,17 @@ Proceeding will cause an unencrypted transfer of your SSL Key and SSL Certificat NetworkItem - + Server: %1 Сервер: %1 - + Users: %1 Пользователи: %1 - + Lag: %1 msecs Лаг: %1 мс @@ -3400,17 +4206,17 @@ Proceeding will cause an unencrypted transfer of your SSL Key and SSL Certificat NetworkModel - + Buffer Буфер - + Topic Тема - + Nick Count Ников @@ -3420,253 +4226,345 @@ Proceeding will cause an unencrypted transfer of your SSL Key and SSL Certificat Connect - Соединиться + Соединиться Disconnect - Отсоединиться + Отсоединиться Join - Зайти + Зайти Part - Выйти + Выйти Delete Buffer... - Удалить буфер... + Удалить буфер... Show Buffer - Показать буфер + Показать буфер Joins - Входы + Входы Parts - Выходы из канала + Выходы из канала Quits - Выходы из сети + Выходы из сети Nick Changes - Смены ника + Смены ника Mode Changes - Смены режимов + Смены режимов Day Changes - Смены дня + Смены дня Apply to All Chat Views... - Применить ко всем окнам чата... + Применить ко всем окнам чата... - + Join Channel... - Зайти на канал... + Зайти на канал... - + Start Query - Начать диалог + Начать диалог - + Show Query - Показать диалог + Показать диалог - + Whois - Whois + Whois - + Version - Версия + Версия - + Time - Время + Время - + Ping - Ping + Ping - + Finger - Finger + Finger - + Give Operator Status - Дать оператора + Дать оператора - + Take Operator Status - Снять оператора + Снять оператора - + Give Voice - Дать голос + Дать голос - + Take Voice - Снять голос + Снять голос - + Kick From Channel - Выгнать с канала + Выгнать с канала - + Ban From Channel - Забанить на канале + Забанить на канале + + + + Kick && Ban + Выгнать и забанить + + + + Hide Buffer(s) Temporarily + Временно спрятать буфер(а) + + + + Hide Buffer(s) Permanently + Навсегда спрятать буфер(а) + + + + Show Channel List + Показать список каналов + + + + Show Ignore List + Показать список игнорируемых + + + + Hide Events + Спрятать события + + + + CTCP + CTCP + + + + Actions + Действия + + + + Remove buffer permanently? + Удалить буфер навсегда? + + + + Do you want to delete the buffer "%1" permanently? This will delete all related data, including all backlog data, from the core's database! + Удалить буфер "%1" навсегда? Это удалить все относящиеся к нему данные, включая историю, из базы данных ядра! + + + + Join Channel + Зайти на канал - - Kick && Ban - Выгнать и забанить + + Input channel name: + Введите название канала: - - Hide Buffer(s) Temporarily - Временно спрятать буфер(а) + + Delete Buffer(s)... + Удалить буфер(а)... - - Hide Buffer(s) Permanently - Навсегда спрятать буфер(а) + + Set as Default... + Задать буфер по умолчанию... - - Show Channel List - Показать список каналов + + Use Defaults... + Использовать по умолчанию... + + + + Do you want to delete the following buffer(s) permanently? + + Удалить следующий буфер навсегда? + Удалить следующие буфера навсегда? + Удалить следующие буфера навсегда? + - - Show Ignore List - Показать список игнорируемых + + <b>Note:</b> This will delete all related data, including all backlog data, from the core's database and cannot be undone. + <b>Замечание:</b> Это удалит все соответствующие данные, включае весь журнал, из базы данных ядра без возможности отмены. - - Hide Events - Спрятать события + + <br>Active channel buffers cannot be deleted, please part the channel first. + <br>Нельзя удалить буфера активных каналов, сначала, пожалуйста, покиньте канал. - - CTCP - CTCP + + Remove buffers permanently? + Удалить буфера навсегда? + + + + NetworkModelController + + + Do you want to delete the following buffer(s) permanently? + + Удалить следующий буфер навсегда? + Удалить следующие буфера навсегда? + Удалить следующие буфера навсегда? + - - Actions - Действия + + <b>Note:</b> This will delete all related data, including all backlog data, from the core's database and cannot be undone. + <b>Замечание:</b> Это удалит все соответствующие данные, включая весь журнал, из базы данных ядра без возможности отмены. - - Remove buffer permanently? - Удалить буфер навсегда? + + <br>Active channel buffers cannot be deleted, please part the channel first. + <br>Нельзя удалить буфера активных каналов, сначала, пожалуйста, покиньте канал. - - Do you want to delete the buffer "%1" permanently? This will delete all related data, including all backlog data, from the core's database! - Удалить буфер "%1" навсегда? Это удалить все относящиеся к нему данные, включая историю, из базы данных ядра! + + Remove buffers permanently? + Удалить буфера навсегда? + + + NetworkModelController::JoinDlg - + Join Channel Зайти на канал - - Input channel name: - Введите название канала: + + Network: + Сеть: + + + + Channel: + Канал: + + + + NetworkPage + + + Setup Network Connection + Настройка сетевого соединения NetworksSettingsPage - + General - Общие + Общие - + Networks Сети - + <b>The following problems need to be corrected before your changes can be applied:</b><ul> <b>Прежде чем сохранить настройки, необходимо устранить следующие проблемы:</b><ul> - + <li>All networks need at least one server defined</li> <li>У каждой сети должен быть хотя бы один сервер</li> - + </ul> </ul> - + Invalid Network Settings Некорректные настройки сети Connect - Соединиться + Соединиться Disconnect - Отсоединиться + Отсоединиться Apply first! - Сначала примени! + Сначала примени! - + Delete Network? Удалить сеть? - + Do you really want to delete the network "%1" and all related settings, including the backlog? Действительно удалить сеть "%1" и все сопутствующие данные, включая журнал? @@ -3676,218 +4574,238 @@ Proceeding will cause an unencrypted transfer of your SSL Key and SSL Certificat Форма - + Re&name... Пере&именовать... - + &Add... Доб&авить... - + De&lete У&далить Connect now - Соединиться сейчас + Соединиться сейчас - + Network Details Подробности сети - + Identity: Личность: - + Servers Серверы - + Manage servers for this network Управление серверами данной сети - + &Edit... &Править... - + Move upwards in list Передвинуть вверх в списке - + ... ... - + Move downwards in list Передвинуть вниз в списке Choose random server for connecting - Выбирать случайный сервер для соединения + Выбирать случайный сервер для соединения Perform - Автовыполнение + Автовыполнение - + Configure automatic identification or misc. commands to be executed after connecting to a server Настройка автоматического выполнения идентификационных или любых других команд при подключении к серверу - + Commands to execute on connect: При подключении выполнить команды: - + Specify a list of IRC commands to be executed upon connect. Note that Quassel IRC automatically rejoins channels, so /join will rarely be needed here! Укажите список команд IRC, которые будут выполнены при подключении. Учтите, что Quassel автоматически входит на каналы, так что /join здесь нужен редко! - + Auto Identify Автоматическая идентификация - + NickServ NickServ - + Service: Служба: - + Password: Пароль: Advanced - Дополнительно + Дополнительно - + Configure advanced settings such as message encodings and automatic reconnect Настроить дополнительные параметры, такие как кодировки сообщений и автоматическое соединение - + Control encodings for in- and outgoing messages Управление кодировками для входящих и исходящих сообщений - + Encodings Кодировки - + Specify which encoding your messages will be sent in. UTF-8 should be a sane choice for most networks. Укажите кодировки, в которых будут отправляться ваши сообщения. UTF-8 должен быть разумным выбором для большинства сетей. - + Send messages in: Отправлять сообщения в: - + Incoming messages encoded in Utf8 will always be treated as such. This setting defines the encoding for messages that are not Utf8. Входящие сообщения, закодированные в Utf8, всегда будут обработаны как надо. Эти настройки затрагивают только сообщения не в кодировке Utf8. - + Receive fallback: Альтернативная входящая кодировка: - + This specifies how control messages, nicks and servernames are encoded. Unless you *really* know what you do, leave this as ISO-8859-1! Это определяет кодировку контрольных сообщений, ников и названий серверов. Если только вы *действительно* не знаете что делаете, оставьте тут ISO-8859-1! - + Server encoding: Кодировка сервера: Use default settings for encodings (recommended) - Использовать настройки кодировок по-умолчанию (рекомендуется) + Использовать настройки кодировок по-умолчанию (рекомендуется) Use defaults - По-умолчанию + По-умолчанию - + Control automatic reconnect to the network Настройки автоматического соединения с сетью - + Automatic Reconnect Автоматическое соединение - + Interval: Интервал: - + s с - + Retries: Попыток: - + Unlimited Неограничено - + Rejoin all channels on reconnect Вернуться на все каналы при повторном соединении + + + Commands + Команды + + + + Connection + Соединения + + + + Use Custom Encodings + Использовать свои кодировки + + + + Misc + Прочее + NickEditDlg - + Add Nickname Добавить ник @@ -3995,13 +4913,18 @@ Unless you *really* know what you do, leave this as ISO-8859-1! Behaviour - Поведение + Поведение Notifications Уведомления + + + Appearance + Вид + PhononNotificationBackend::ConfigWidget @@ -4032,7 +4955,7 @@ Unless you *really* know what you do, leave this as ISO-8859-1! QObject - + Requesting a total of up to %1 backlog messages for %2 buffers Всего запрашиваю сообщений: %1 для буферов: %2 @@ -4042,15 +4965,25 @@ Unless you *really* know what you do, leave this as ISO-8859-1! Скопировать в буфер обмена - + Requesting up to %1 of all unread backlog messages (plus additional %2) Запрашиваю до %1 всех непрочитанных сообщений из журнала (и дополнительные %2) - + Requesting a total of up to %1 unread backlog messages for %2 buffers Запрашиваю суммарно до %1 непрочитанных сообщений из журнала для %2 буферов + + + Welcome to Quassel IRC + Добро пожаловать в Quassel IRC + + + + This wizard will help you to set up your default identity and your IRC network connection.<br>This only covers basic settings. You can cancel this wizard any time and use the settings dialog for more detailed changes. + Этот мастер поможет настроить личность по умолчанию и сетевое соединение с IRC.<br>Он устанавливает только базовые настройки. В любой момент можно отказаться от мастера и использовать окно настройки для более подробной конфигурации. + Quassel @@ -4068,27 +5001,27 @@ Unless you *really* know what you do, leave this as ISO-8859-1! Quassel::secondsToString() - + year год - + day день - + h ч - + min мин - + sec сек @@ -4096,22 +5029,22 @@ Unless you *really* know what you do, leave this as ISO-8859-1! QueryBufferItem - + <b>Query with %1</b> <b>Приват с %1</b> - + idling since %1 неактивен с %1 - + login time: %1 время входа: %1 - + server: %1 сервер: %1 @@ -4245,32 +5178,32 @@ Unless you *really* know what you do, leave this as ISO-8859-1! Настройки - + Save changes Сохранить изменения - + There are unsaved changes on the current configuration page. Would you like to apply your changes now? В текущей вкладке есть несохранённые изменения. Применить их сейчас? - + Reload Settings Вернуть настройки - + Do you like to reload the settings, undoing your changes on this page? Вернуть старый настройки, отменив все изменения на этой вкладке? - + Restore Defaults Вернуть умолчания - + Do you like to restore the default values for this page? Вернуть параметры по-умолчанию для этой вкладки? @@ -4280,7 +5213,7 @@ Unless you *really* know what you do, leave this as ISO-8859-1! Настроить Quassel - + Configure %1 Настроить %1 @@ -4326,12 +5259,12 @@ Unless you *really* know what you do, leave this as ISO-8859-1! SignalProxy - + Client tried to send package larger than max package size! - Клиент пытался отправить пакет больше максимального размера! + Клиент пытался отправить пакет больше максимального размера! - + Disconnecting Отсоединяюсь @@ -4341,43 +5274,214 @@ Unless you *really* know what you do, leave this as ISO-8859-1! локальный клиент - + Client tried to send 0 byte package! - Клиент пытался отправить пакет из 0 байт! + Клиент пытался отправить пакет из 0 байт! - + Client sent corrupted compressed data! - Клиент отправил повреждённые сжатые данные! + Клиент отправил повреждённые сжатые данные! - + Client sent corrupt data: unable to load QVariant! - Клиент отправил повреждённые данные: не могу загрузить QVariant! + Клиент отправил повреждённые данные: не могу загрузить QVariant! + + + + Peer tried to send package larger than max package size! + Пир попытался отправить пакет больше максимального размера! + + + + Peer tried to send 0 byte package! + Пир попытался отправить пакет из 0 байт! + + + + Peer sent corrupted compressed data! + Пир отправил испорченные сжатые данные! + + + + Peer sent corrupt data: unable to load QVariant! + Пир отправил испорченные данные: не могу загрузить QVariant! + + + + SimpleNetworkEditor + + + Network name: + Название сети: + + + + The name of the IRC network you are configuring + Название настраиваемой IRC-сети + + + + Servers + Серверы + + + + A list of IRC servers belonging to this network + Список IRC-серверов в этой сети + + + + Edit this server entry + Редактировать этот сервер + + + + &Edit... + &Править... + + + + Add another IRC server + Добавить другой IRC-сервер + + + + &Add... + Доб&авить... + + + + Remove this server entry from the list + Удалить этот сервер из списка + + + + De&lete + У&далить + + + + Move upwards in list + Передвинуть вверх в списке + + + + ... + ... + + + + Move downwards in list + Передвинуть вниз в списке + + + + Join Channels Automatically + Автоматически входить на каналы + + + + A list of IRC channels you will join automatically after connecting to the network + Список каналов IRC, на которые клиент будет автоматически заходить при подключении к сети SqliteStorage - + SQLite is a file-based database engine that does not require any setup. It is suitable for small and medium-sized databases that do not require access via network. Use SQLite if your Quassel Core should store its data on the same machine it is running on, and if you only expect a few users to use your core. SQLite -- это основанная на файлах система управления базами данных, которая не требует никаких настроек. Она подходит для маленьких и средних баз данных, для которых не нужен доступ через сеть. Используйте SQLite, если ваше ядро Quassel должно хранить данные на той же машине, на которой запущено, и если вашим ядром не будет пользоваться много народу. + + SslCertDisplayDialog + + + SSL Certificate used by %1 + Сертификат SSL используется %1 + + + + Issuer Info + Сертификат выдан + + + + Organization: + Организация: + + + + Locality Name: + Название местности: + + + + Organizational Unit Name: + Название отделения: + + + + Country Name: + Страна: + + + + State or Province Name: + Название штата или области: + + + + Subject Info + Информация о субъекте + + + + Additional Info + Дополнительная информация + + + + Valid From: + Годен с: + + + + Valid To: + Годен по: + + + + Hostname %1: + Хост %1: + + + + E-Mail Address %1: + E-Mail %1: + + + + Digest: + Хеш: + + StatusBufferItem - + <b>Status buffer of %1</b> - <b>Буфер состояния %1</b> + <b>Буфер состояния %1</b> - + <p> %1 </p> - <p> %1 </p> + <p> %1 </p> - + Status Buffer Буфер состояния @@ -4385,17 +5489,17 @@ Unless you *really* know what you do, leave this as ISO-8859-1! SystrayNotificationBackend::ConfigWidget - + System Tray Icon Значок в трее - + Animate Анимировать - + Show bubble Показывать всплывающее уведомление @@ -4423,6 +5527,149 @@ Unless you *really* know what you do, leave this as ISO-8859-1! с + + ToolBarActionProvider + + + Connect + Соединиться + + + + Connect to IRC + Соединиться с IRC + + + + Disconnect + Отсоединиться + + + + Disconnect from IRC + Отсоединиться от IRC + + + + Part + Выйти + + + + Leave currently selected channel + Покинуть выделенный канал + + + + Join + Зайти + + + + Join a channel + Зайти на канал + + + + Query + Приват + + + + Start a private conversation + Начать личную беседу + + + + Whois + Whois + + + + Request user information + Запросить информацию о пользователе + + + + Op + Оп + + + + Give operator privileges to user + Дать пользователю статус оператора + + + + Deop + Снять оп + + + + Take operator privileges from user + Снять статус оператора с пользователя + + + + Voice + Голос + + + + Give voice to user + Дать пользователю статус "с голосом" + + + + Devoice + Снять голос + + + + Take voice from user + Снять статус "с голосом" с пользователя + + + + Kick + Выгнать + + + + Remove user from channel + Удалить пользователя с канала + + + + Ban + Забанить + + + + Ban user from channel + Запретить пользователю вход на канал + + + + Kick/Ban + Выгнать и забанить + + + + Remove and ban user from channel + Удалить пользователя с канала и запретить ему вход + + + + Connect to all + Подключиться ко всем + + + + Disconnect from all + Отключиться от всех + + TopicLabel @@ -4442,122 +5689,122 @@ Unless you *really* know what you do, leave this as ISO-8859-1! UiStyle::StyledMessage - + %D0%1 %D0%1 - + %Dn%1 %Dn%1 - + %Ds%1 %Ds%1 - + %De%1 %De%1 - + %Dj%DN%1%DN %DH(%2@%3)%DH has joined %DC%4%DC %Dj%DN%1%DN %DH(%2@%3)%DH вошёл на канал %DC%4%DC - + %Dp%DN%1%DN %DH(%2@%3)%DH has left %DC%4%DC %Dp%DN%1%DN %DH(%2@%3)%DH покинул %DC%4%DC - + %Dq%DN%1%DN %DH(%2@%3)%DH has quit %Dq%DN%1%DN %DH(%2@%3)%DH вышел из сети - + %Dk%DN%1%DN has kicked %DN%2%DN from %DC%3%DC %Dk%DN%1%DN выгнал %DN%2%DN с %DC%3%DC - + %DrYou are now known as %DN%1%DN %DrВы теперь известны как %DN%1%DN - + %Dr%DN%1%DN is now known as %DN%2%DN %Dr%DN%1%DN теперь известен как %DN%2%DN - + %DmUser mode: %DM%1%DM %DmПользовательский режим: %DM%1%DM - + %DmMode %DM%1%DM by %DN%2%DN %DmРежим %DM%1%DM установлен %DN%2%DN - + %Da%DN%1%DN %2 %Da%DN%1%DN %2 - + %De[%1] %De[%1] - + <%1> <%1> - + [%1] [%1] - + * * - + --> --> - + <-- <-- - + <-* <-* - + <-> <-> - + *** *** - + -*- -*- - + %1 %1 @@ -4565,7 +5812,7 @@ Unless you *really* know what you do, leave this as ISO-8859-1! UserCategoryItem - + %n Owner(s) %n владелец @@ -4574,7 +5821,7 @@ Unless you *really* know what you do, leave this as ISO-8859-1! - + %n Admin(s) %n администратор @@ -4583,7 +5830,7 @@ Unless you *really* know what you do, leave this as ISO-8859-1! - + %n Operator(s) %n оператор @@ -4592,7 +5839,7 @@ Unless you *really* know what you do, leave this as ISO-8859-1! - + %n Half-Op(s) %n полуоператор @@ -4601,7 +5848,7 @@ Unless you *really* know what you do, leave this as ISO-8859-1! - + %n Voiced %n с голосом @@ -4610,7 +5857,7 @@ Unless you *really* know what you do, leave this as ISO-8859-1! - + %n User(s) %n пользователь @@ -4622,9 +5869,14 @@ Unless you *really* know what you do, leave this as ISO-8859-1! UserInputHandler - + sending CTCP-%1 request отправляю запрос CTCP-%1 + + + away + отошёл + diff --git a/i18n/quassel_sl.ts b/i18n/quassel_sl.ts index a37add95..5f6c088a 100644 --- a/i18n/quassel_sl.ts +++ b/i18n/quassel_sl.ts @@ -1,11 +1,11 @@ - + + - Day changed to %1 - Dan se je spremenil v %1 + Dan se je spremenil v %1 @@ -16,32 +16,36 @@ <b>Različica:</b> %1<br><b>Različica protokola:</b> %2<br><b>Zgrajeno:</b> %3 - + <b>A modern, distributed IRC Client</b><br><br>&copy;2005-2009 by the Quassel Project<br><a href="http://quassel-irc.org">http://quassel-irc.org</a><br><a href="irc://irc.freenode.net/quassel">#quassel</a> on <a href="http://www.freenode.net">Freenode</a><br><br>Quassel IRC is dual-licensed under <a href="http://www.gnu.org/licenses/gpl-2.0.txt">GPLv2</a> and <a href="http://www.gnu.org/licenses/gpl-3.0.txt">GPLv3</a>.<br>Most icons are &copy; by the <a href="http://www.oxygen-icons.org">Oxygen Team</a> and used under the <a href="http://www.gnu.org/licenses/lgpl.html">LGPL</a>.<br><br>Please use <a href="http://bugs.quassel-irc.org">http://bugs.quassel-irc.org</a> to report bugs. <b>Moderen, porazdeljen odjemalec za IRC</b><br><br>&copy;2005-2009 projekt Quassel<br><a href="http://quassel-irc.org">quassel-irc.org</a><br><a href="irc://irc.freenode.net/quassel">#quassel</a> na <a href="http://www.freenode.net">Freenode</a><br><br>Quassel IRC je izdan pod pogoji licenc <a href="http://www.gnu.org/licenses/gpl-2.0.txt">GPLv2</a> in <a href="http://www.gnu.org/licenses/gpl-3.0.txt">GPLv3</a>.<br>Večina ikon je &copy; s strani <a href="http://www.oxygen-icons.org">ekipe Oxygen</a> in uporabljenih pod pogoji <a href="http://www.gnu.org/licenses/lgpl.html">LGPL</a>.<br><br>Za poročanje o napakah obiščite stran <a href="http://bugs.quassel-irc.org">bugs.quassel-irc.org</a>. - + Quassel IRC is mainly developed by: Quassel IRC v glavnem razvijajo: - + We would like to thank the following contributors (in alphabetical order) and everybody we forgot to mention here: Radi bi se zahvalili sledečim sodelavcem (v abecednem vrstnem redu) in vsem, ki smo jih pozabili omeniti tu: - + + Special thanks goes to:<br><dl><dt><img src=":/pics/quassel-eye.png">&nbsp;<b>John "nox" Hand</b></dt><dd>for the original Quassel icon - The All-Seeing Eye</dt><dt><img src=":/pics/oxygen.png">&nbsp;<b><a href="http://www.oxygen-icons.org">The Oxygen Team</a></b></dt><dd>for creating all the artwork you see throughout Quassel</dd><dt><img src=":/pics/qt-logo-32.png">&nbsp;<b><a href="http://www.trolltech.com">Qt Software formerly known as Trolltech</a></b></dt><dd>for creating Qt and Qtopia, and for sponsoring development of QuasselTopia with Greenphones and more</dd><dt><a href="http://www.nokia.com"><img src=":/pics/nokia.png"></a></b></dt><dd>for keeping Qt alive, and for sponsoring development of Quassel Mobile with N810s</dd> + Posebno zahvalo si zaslužijo:<br><dl><dt><img src=":/pics/quassel-eye.png">&nbsp;<b>John "nox" Hand</b></dt><dd>za originalno ikono za Quassel - Vse-vidno oko</dt><dt><img src=":/pics/oxygen.png">&nbsp;<b><a href="http://www.oxygen-icons.org">Ekipa Oxygen</a></b></dt><dd>za izdelavo vse grafike, ki jo vidite v Quassel</dd><dt><img src=":/pics/qt-logo-32.png">&nbsp;<b><a href="http://www.trolltech.com">Qt Software, nekdaj znani kot Trolltech</a></b></dt><dd>za izdelavo Qt in Qtopia ter sponzoriranje razvoja QuasselTopia z Greenphone in ostalim</dd><dt><img src=":/pics/nokia.png">&nbsp;<b><a href="http://www.nokia.com">Nokia</a></b></dt><dd>za nadaljnji razvoj Qt in za sponzoriranje razvoja Quassel Mobile z večimi N810</dd> + + Special thanks goes to:<br><dl><dt><b>John "nox" Hand</b></dt><dd>for great artwork and the Quassel logo/icon</dt><dt><b><a href="http://www.oxygen-icons.org">The Oxygen Team</a></b></dt><dd>for creating most of the other shiny icons you see throughout Quassel</dd><dt><b><a href="http://www.trolltech.com">Qt Software formerly known as Trolltech</a></b></dt><dd>for creating Qt and Qtopia, and for sponsoring development of QuasselTopia with Greenphones and more</dd><dt><b><a href="http://www.nokia.com">Nokia</a></b></dt><dd>for keeping Qt alive, and for sponsoring development of Quassel Mobile with N810s</dd> - Posebno zahvalo si zaslužijo:<br><dl><dt><b>John "nox" Hand</b></dt><dd>za odlično grafiko in logo/ikono za Quassel</dt><dt><b><a href="http://www.oxygen-icons.org">ekipa Oxygen</a></b></dt><dd>za izdelavo večine ostalih čudovitih ikon, ki jih vidite v Quassel</dd><dt><b><a href="http://www.trolltech.com">Qt Software, nekdaj znani kot Trolltech</a></b></dt><dd>za izdelavo Qt in Qtopia ter sponzoriranje razvoja QuasselTopia z Greenphone in ostalim</dd><dt><b><a href="http://www.nokia.com">Nokia</a></b></dt><dd>za nadaljnji razvoj Qt in za sponzoriranje razvoja Quassel Mobile z večimi N810</dd> + Posebno zahvalo si zaslužijo:<br><dl><dt><b>John "nox" Hand</b></dt><dd>za odlično grafiko in logo/ikono za Quassel</dt><dt><b><a href="http://www.oxygen-icons.org">ekipa Oxygen</a></b></dt><dd>za izdelavo večine ostalih čudovitih ikon, ki jih vidite v Quassel</dd><dt><b><a href="http://www.trolltech.com">Qt Software, nekdaj znani kot Trolltech</a></b></dt><dd>za izdelavo Qt in Qtopia ter sponzoriranje razvoja QuasselTopia z Greenphone in ostalim</dd><dt><b><a href="http://www.nokia.com">Nokia</a></b></dt><dd>za nadaljnji razvoj Qt in za sponzoriranje razvoja Quassel Mobile z večimi N810</dd> - + About Quassel O Quassel - + <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'DejaVu Sans'; font-size:15pt; font-weight:600; font-style:normal;"> @@ -52,7 +56,7 @@ p, li { white-space: pre-wrap; } <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Quassel IRC</p></body></html> - + <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'DejaVu Sans'; font-size:10pt; font-weight:600; font-style:normal;"> @@ -63,22 +67,22 @@ p, li { white-space: pre-wrap; } <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Različica 0.2.0-pre, gradnja &gt;= 474 (2008-02-08)</p></body></html> - + &About &O - + A&uthors A&vtorji - + &Contributors &Sodelavci - + &Thanks To &Zahvale @@ -86,15 +90,20 @@ p, li { white-space: pre-wrap; } AbstractSqlStorage - + Installed Schema (version %1) is not up to date. Upgrading to version %2... Nameščena shema (različica %1) ni ažurna. Nadgradnja na različico %2 ... + + + Upgrade failed... + Nadgradnja ni uspela. + AliasesModel - + Alias Vzdevek @@ -107,15 +116,19 @@ p, li { white-space: pre-wrap; } AliasesSettingsPage - Behaviour - ObnaÅ¡anje + ObnaÅ¡anje Aliases Vzdevki + + + Misc + Razno + Form @@ -135,159 +148,287 @@ p, li { white-space: pre-wrap; } AppearanceSettingsPage - + Appearance Videz - General - SploÅ¡no + SploÅ¡no - + + <System Default> <sistemsko privzeto> - + Form Obrazec - + + Client Style + Slog odjemalca + + + + Set application style + Nastavite slog programa + + + + Language + Jezik + + + + Set the application language. Requires restart! + Nastavite jezik programa. Potreben je ponovni zagon programa. + + + + Fonts + Pisave + + + + + Set font for the main chat window and the chat monitor + Nastavite pisavo za glavno okno klepeta in nadzorovalnik klepeta + + + + Chat window: + Okno klepeta: + + + + + + Font + Pisava + + + + + + Choose... + Izbor ... + + + + + Set font for channel and nick lists + Nastavite pisavo za seznama kanalov in vzdevkov + + + + Channel list: + Seznam kanalov: + + + + + Set font for the input line + Nastavite pisavo za vnosno vrstico + + + + Input line: + Vnosna vrstica: + + + + Misc + Razno + + + + Show a website preview window when hovering the mouse over a web address + Prikaži namig z ogledom spletne strani, ko miÅ¡ka lebdi nad spletno povezavo + + + + Show previews of webpages on URL hover + Ob lebdenju nad povezavo prikaži ogled strani + + + + Show status icons in channel and nick lists + V seznamih kanalov in vzdevkov prikaži ikone stanj + + + + Use icons in channel and nick lists + V seznamih kanalov in vzdevkov prikaži ikone + + Client style: - Slog odjemalca: + Slog odjemalca: - Language: - Jezik: + Jezik: - + <Original> <prvotni> - Note: needs client restart for full effect! - Pomnite: za uveljavitev je potrebno znova zagnati program! + Pomnite: za uveljavitev je potrebno znova zagnati program! - Misc: - Razno: + Razno: - Show Web Previews - Prikaži oglede spletnih strani + Prikaži oglede spletnih strani - Use Icons to represent away state of Users - Za prikaz stanja uporabnikov uporabi ikone + Za prikaz stanja uporabnikov uporabi ikone + + + + AwayLogView + + + Away Log + Dnevnik ob odsotnosti + + + + Show Network Name + Prikaži ime omrežja + + + + Show Buffer Name + Prikaži ime prikaza BacklogSettingsPage - Behaviour - ObnaÅ¡anje + ObnaÅ¡anje Backlog Stara sporočila + + + Misc + Razno + Form Obrazec - + Backlog Request Method: Način zahtevanja starih sporočil: - + Fixed Amount per Buffer Fiksno Å¡tevilo na prikaz - + Unread Messages per Buffer Neprebranih sporočil na prikaz - + Global Unread Messages Globalno neprebranih sporočil - + The simplest Requester. It fetches a fixed amount of lines for each buffer from the Backlog. Najbolj preprost način. Iz zgodovine sporočil pridobi fiksno Å¡tevilo vrstic za vsak prikaz. - + amount of messages per buffer that are requested after the core connection has been established. Å tevilo sporočil na prikaz, ki so zahtevana po vzpostavljeni povezavi z jedrom. - + Initial backlog amount: Začetno Å¡tevilo starih sporočil: - + FixedBacklogAmount FixedBacklogAmount - This requester fetches unread messages for each buffer individually. The amount of lines can be limited per buffer. You can also chose to fetch additional older chatlines to provide a better context. + Pridobi neprebrana sporočila za vsak prikaz posebaj. Å tevilo vrstic lahko omejite za vsak prikaz. + +Za boljÅ¡i kontekst lahko izberete tudi pridobivanje dodatnih starih sporočil. + + + + This requester fetches unread messages for each buffer individually. The amount of lines can be limited per buffer. + +You can also choose to fetch additional older chatlines to provide a better context. Pridobi neprebrana sporočila za vsak prikaz posebaj. Å tevilo vrstic lahko omejite za vsak prikaz. Za boljÅ¡i kontekst lahko izberete tudi pridobivanje dodatnih starih sporočil. - + + + Maximum amount of messages to be fetched per buffer. Največje Å¡tevilo pridobljenih sporočil na prikaz. - + + Limit: Omejitev: - + PerBufferUnreadBacklogLimit PerBufferUnreadBacklogLimit - + + + + Amount of messages to be fetched in addition to the unread messages. The Limit does not apply here. Å tevilo sporočil, ki naj se pridobijo poleg neprebranih sporočil. Omejitev tu nima veljave. - + + Additional Messages: Dodatna sporočila: - + PerBufferUnreadBacklogAdditional PerBufferUnreadBacklogAdditional - + This requester fetches all messages newer than the oldest unread message for all buffers. Note: this requester is not recommended if you use hidden buffer or have inactive buffers (i.e.: no stale queries or channels). @@ -302,32 +443,32 @@ Uporaben je za omejitev skupnega Å¡tevila starih sporočil in je verjetno najhit Za boljÅ¡i kontekst lahko izberete tudi pridobivanje dodatnih starih sporočil. - + Maximum amount of messages to be fetched over all buffers. Največje Å¡tevilo sporočil, pridobljenih za vse prikaze. - + GlobalUnreadBacklogLimit GlobalUnreadBacklogLimit - + GlobalUnreadBacklogAdditional GlobalUnreadBacklogAdditional - + Number of messages to be requested from the core when using scrolling up in the buffer view. Å tevilo sporočil, ki se jih zahteva od jedra ob pomiku proti vrhu prikazu prikaza. - + Dynamic backlog amount: Dinamično Å¡tevilo starih sporočil: - + DynamicBacklogAmount DynamicBacklogAmount @@ -335,7 +476,7 @@ Za boljÅ¡i kontekst lahko izberete tudi pridobivanje dodatnih starih sporočil.< BufferItem - + <p> %1 - %2 </p> <p> %1 - %2 </p> @@ -343,12 +484,12 @@ Za boljÅ¡i kontekst lahko izberete tudi pridobivanje dodatnih starih sporočil.< BufferView - + Merge buffers permanently? Trajno združim prikaza? - + Do you want to merge the buffer "%1" permanently into buffer "%2"? This cannot be reversed! Ali želite trajno združiti prikaz »%1« v prikaz »%2«? @@ -368,7 +509,7 @@ Tega kasneje ni moč razveljaviti! Vnesite ime za prikaz: - + Add Buffer View Dodaj prikaz @@ -376,35 +517,44 @@ Tega kasneje ni moč razveljaviti! BufferViewFilter - Edit Mode - Način za urejanje + Način za urejanje + + + + Show / Hide buffers + Prikaži/skrij prikaze BufferViewSettingsPage - General - SploÅ¡no + SploÅ¡no - + Buffer Views Prikazi + + Appearance + Videz + + + All Vsa - + Delete Buffer View? ZbriÅ¡em prikaz? - + Do you really want to delete the buffer view "%1"? Ali res želite zbrisati prikaz »%1«? @@ -537,14 +687,13 @@ V tem načinu ni ločenega prikaza stanja. Dejanska velikost - <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Trebuchet MS'; font-size:13pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><img src=":/pics/quassel-large.png" /><span style=" font-size:89pt; color:#00008b;">uassel IRC</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:49pt;"><span style=" font-size:22pt;">Chat comfortably. Anywhere.</span></p></body></html> - <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Trebuchet MS'; font-size:13pt; font-weight:400; font-style:normal;"> @@ -555,32 +704,32 @@ p, li { white-space: pre-wrap; } ChannelBufferItem - + <b>Channel %1</b> <b>Kanal %1</b> - + <b>Users:</b> %1 <b>Uporabniki:</b> %1 - + <b>Mode:</b> %1 <b>Način:</b> %1 - + <b>Topic:</b> %1 <b>Tema:</b> %1 - + Not active <br /> Double-click to join Ni aktiven <br /> Za pridružitev dvo-kliknite - + <p> %1 </p> <p> %1 </p> @@ -638,15 +787,19 @@ p, li { white-space: pre-wrap; } ChatMonitorSettingsPage - General - SploÅ¡no + SploÅ¡no Chat Monitor Nadzorovalnik klepeta + + + Appearance + Videz + Opt In @@ -658,6 +811,7 @@ p, li { white-space: pre-wrap; } Izvzemi + Show: Prikaži: @@ -751,7 +905,7 @@ p, li { white-space: pre-wrap; } ChatScene - + Copy Selection Skopiraj izbor @@ -764,6 +918,8 @@ p, li { white-space: pre-wrap; } Obrazec + + ... ... @@ -797,20 +953,19 @@ p, li { white-space: pre-wrap; } Identiteta v odjemalcu že obstaja! - + All Buffers Vsi prikazi - Default Identity - Privzeta identiteta + Privzeta identiteta ClientBacklogManager - + Processed %1 messages in %2 seconds. Obdelanih %1 sporočil v %2 sekundah. @@ -828,32 +983,33 @@ p, li { white-space: pre-wrap; } <b>Od jedra je bil prejet neveljaven podatek.</b><br>Prekinjam povezavo. - + No Host to connect to specified. Podanega ni nobenega gostitelja za povezavo. - + <b>This client is built without SSL Support!</b><br />Disable the usage of SSL in the account settings. <b>Odjemalec je bil zgrajen brez podpore za SSL.</b><br />V nastavitvah računa onemogočite uporabo SSL. - + <b>The Quassel Core you are trying to connect to is too old!</b><br>Need at least core/client protocol v%1 to connect. <b>Jedro Quassel, s katerim se želite povezati, je prestaro.</b><br>Za povezavo je potreben vsaj protokol različice %1. - + <b>The Quassel Core you are trying to connect to does not support SSL!</b><br />If you want to connect anyways, disable the usage of SSL in the account settings. <b>Jedro Quassel, s katerim se želite povezati, ne podpira SSL.</b><br />Če se vseeno želite povezati, v nastavitvah računa onemogočite uporabo SSL. - + Logging in... Prijavljanje ... - + + Cert Digest changed! was: %1 Povzetek potrdila se je spremenil. Bil je: %1 @@ -871,39 +1027,32 @@ p, li { white-space: pre-wrap; } Nastavitve barv - Buffers - Prikazi + Prikazi - Network - Omrežje + Omrežje - #incative - #neaktiven + #neaktiven - #regular - #običajen + #običajen - #highlight - #poudarek + #poudarek - #new message - #novo sporočilo + #novo sporočilo - #other activity - #druga aktivnost + #druga aktivnost @@ -911,442 +1060,677 @@ p, li { white-space: pre-wrap; } Obrazec - + Bufferview Prikaz - + Activities: Aktivnosti: - FG - OS + OS - + + BG OZ - + + + + + Use BG Uporabi OZ - + Highlight: Poudarek: - + New Message: Novo sporočilo: - + Other Activity: Druga aktivnost: - + Preview: Ogled: - + 1 1 - + Chatview Prikaz klepeta - + Server Activity Aktivnost strežnika - + + + + + Foreground Ospredje - + + Default: + Privzeto: + + + + Inactive: + Neaktivno: + + + + + Background Ozadje - + Error Message: Sporočilo napake: - + Notice Message: Sporočilo opombe: - + Plain Message: Navadno sporočilo: - + Server Message: Sporočilo strežnika: - + Highlight Message: Poudarjeno sporočilo: - + User Activity UporabniÅ¡ka aktivnost - + Action Message: Sporočilo aktivnosti: - + Join Message: Sporočilo pridružitve: - + Kick Message: Sporočilo brce: - + Mode Message: Sporočilo načina: - + Part Message: Sporočilo zapustitve: - + Quit Message: Sporočilo končanja: - + Rename Message: Sporočilo preimenovanja: - + Message Sporočilo - + Timestamp: Časovna oznaka: - + Sender: PoÅ¡iljatelj: - + Nick: Vzdevek: - + Hostmask: Maska gostitelja: - + Channelname: Ime kanala: - + Mode flags: Zastavice načina: - + Url: Lokacija: - + New Message Marker: Označevalnik novih sporočil: - + + Enable + Omogoči + + + + Sender auto coloring: + Samodejno barvanje poÅ¡iljateljev: + + + Mirc Color Codes Barvne kode mIRCa - + Color Codes Barvne kode - + Color 0: Barva 0: - + Color 1: Barva 1: - + Color 2: Barva 2: - + Color 3: Barva 3: - + Color 4: Barva 4: - + Color 5: Barva 5: - + Color 6: Barva 6: - + Color 7: Barva 7: - + Color 8: Barva 8: - + Color 14: Barva 14: - + Color 15: Barva 15: - + Color 13: Barva 13: - + Color 12: Barva 12: - + Color 11: Barva 11: - + Color 10: Barva 10: - + Color 9: Barva 9: + + + Nickview + Prikaz vzdevkov + + + + Nick status: + Stanje vzdevka: + + + + Online: + Na zvazi: + + + + Away: + Odsoten: + ContentsChatItem - + Copy Link Address Skopiraj naslov povezave - Core + ContextMenuActionProvider - - Could not initialize any storage backend! Exiting... - Ni bilo moč inicializirati nobene hrbtenice za shranjevanje. Končujem ... + + Connect + Poveži se - - Currently, Quassel only supports SQLite3. You need to build your -Qt library with the sqlite plugin enabled in order for quasselcore -to work. - Trenutno Quassel podpira le SQLite3. Da bo quasselcore deloval, -morate knjižnico Qt zgraditi z omogočenim vstavkom sqlite. + + Disconnect + Prekini povezavo - - Calling restoreState() even though active sessions exist! - Kličem restoreState(), čeprav obstajajo aktivne seje! + + Join + Pridruži se - - Admin user or password not set. - SkrbniÅ¡ki uporabnik, ali geslo zanj, ni nastavljen. + + Part + Zapusti - - Could not setup storage! - Ni moč nastaviti shranjevanja! + + Delete Buffer(s)... + ZbriÅ¡i prikaz(e) ... - - Creating admin user... - Ustvarjanje skrbniÅ¡kega uporabnika ... + + Show Buffer + Prikaži prikaz - - Invalid listen address %1 - Neveljaven naslov za posluÅ¡anje (%1) + + Joins + Pridružitve - - Listening for GUI clients on IPv4 %1 port %2 using protocol version %3 - Odjemalce posluÅ¡am na IPv4 %1, vratih %2, z uporabo protokola različice %3 + + Parts + Zapustitve - - Could not open IPv4 interface %1:%2: %3 - Ni moč odpreti vmesnika IPv4 %1:%2: %3 + + Quits + Končanja - - Listening for GUI clients on IPv6 %1 port %2 using protocol version %3 - Odjemalce posluÅ¡am na IPv6 %1, vratih %2, z uporabo protokola različice %3 + + Nick Changes + Spremembe vzdevkov - - Could not open IPv6 interface %1:%2: %3 - Ni moč odpreti vmesnika IPv6 %1:%2: %3 + + Mode Changes + Spremembe načina - - Invalid listen address %1, unknown network protocol - Neveljaven naslov za posluÅ¡anje (%1), neznan omrežni protokol + + Day Changes + Spremembe dneva - - Could not open any network interfaces to listen on! - Ni moč odpreti nobenega omrežnega vmesnika za posluÅ¡anje! + + Set as Default... + Nastavi kot privzeto ... - - Client connected from - Odjemalec se je povezal z + + Use Defaults... + Uporabi privzeto ... - - Closing server for basic setup. - Zapiram strežnik za osnovno nastavitev. + + Join Channel... + Pridruži se kanalu ... - - Antique client trying to connect... refusing. - Zastarel odjemalec se poskupa povezati... Zavračam ga. + + Start Query + Zaženi poizvedbo - - <b>Your Quassel Client is too old!</b><br>This core needs at least client/core protocol version %1.<br>Please consider upgrading your client. - <b>VaÅ¡ odjemalec Quassel je prestar.</b><br>To jedro potrebuje vsaj protokol različice %1.<br>Razmislite o nadgradnji odjemalca. + + Show Query + Prikaži poizvedbo - - Client - Odjemalec + + Whois + Kdoje - - too old, rejecting. - je prestar, zavračam ga. + + Version + Različica - - <b>Quassel Core Version %1</b><br>Built: %2<br>Up %3d%4h%5m (since %6) - <b>Jedro Quassel različice %1</b><br>Zgrajeno: %2<br>Teče %3d %4u %5m (od %6) + + Time + Čas - - Starting TLS for Client: - Zaganjanje TLS za odjemalca: + + Ping + Ping - - <b>Client not initialized!</b><br>You need to send an init message before trying to login. - <b>Odjemalec ni inicializiran.</b><br>Preden se poskusi prijaviti mora poslati inicializacijsko sporočilo. + + Finger + Podrobnosti - - did not send an init message before trying to login, rejecting. - pred prijavo ni poslal inicializacijskega sporočila, zavračam ga. + + Give Operator Status + Podeli status operaterja - - <b>Invalid username or password!</b><br>The username/password combination you supplied could not be found in the database. - <b>Neveljavno uporabniÅ¡ko ime ali geslo.</b><br>Podane kombinacije uporabniÅ¡kega imena in gesla ni moč najti v podatkovni zbirki. + + Take Operator Status + Odvzemi status operaterja - - initialized and authenticated successfully as "%1" (UserId: %2). - je uspeÅ¡no inicializiran in overjen kot »%1« (uporabniÅ¡ki ID: %2). + + Give Voice + Daj besedo - - Non-authed client disconnected. - Prekinjena povezava z neoverjenim odjemalcem. + + Take Voice + Odvzemi besedo - - Non-authed client disconnected. (socket allready destroyed) - Prekinjena povezava z neoverjenim odjemalcem. (vtičnica je že bila uničena) + + Kick From Channel + Brcni s kanala - - Could not initialize session for client: - Ni moč inicializirati seje za odjemalca: + + Ban From Channel + Izloči s kanala - - - CoreAccountEditDlg - - Add Core Account - Dodaj račun pri jedru + + Kick && Ban + Brcni in izloči - - Edit Core Account - Urejanje računa pri jedru - + + Hide Buffer(s) Temporarily + Začasno skrij prikaz(e) + + + + Hide Buffer(s) Permanently + Trajno skrij prikaz(e) + + + + Show Channel List + Prikaži seznam kanalov + + + + Show Ignore List + Prikaži seznam spregledanih + + + + Hide Events + Skrij dogodke + + + + CTCP + CTCP + + + + Actions + Dejanja + + + + Core + + + Could not initialize any storage backend! Exiting... + Ni bilo moč inicializirati nobene hrbtenice za shranjevanje. Končujem ... + + + + Currently, Quassel only supports SQLite3. You need to build your +Qt library with the sqlite plugin enabled in order for quasselcore +to work. + Trenutno Quassel podpira le SQLite3. Da bo quasselcore deloval, +morate knjižnico Qt zgraditi z omogočenim vstavkom sqlite. + + + + Calling restoreState() even though active sessions exist! + Kličem restoreState(), čeprav obstajajo aktivne seje! + + + + Admin user or password not set. + SkrbniÅ¡ki uporabnik, ali geslo zanj, ni nastavljen. + + + + Could not setup storage! + Ni moč nastaviti shranjevanja! + + + + Creating admin user... + Ustvarjanje skrbniÅ¡kega uporabnika ... + + + + Invalid listen address %1 + Neveljaven naslov za posluÅ¡anje (%1) + + + + Listening for GUI clients on IPv4 %1 port %2 using protocol version %3 + Odjemalce posluÅ¡am na IPv4 %1, vratih %2, z uporabo protokola različice %3 + + + + Could not open IPv4 interface %1:%2: %3 + Ni moč odpreti vmesnika IPv4 %1:%2: %3 + + + + Listening for GUI clients on IPv6 %1 port %2 using protocol version %3 + Odjemalce posluÅ¡am na IPv6 %1, vratih %2, z uporabo protokola različice %3 + + + + Could not open IPv6 interface %1:%2: %3 + Ni moč odpreti vmesnika IPv6 %1:%2: %3 + + + + Invalid listen address %1, unknown network protocol + Neveljaven naslov za posluÅ¡anje (%1), neznan omrežni protokol + + + + Could not open any network interfaces to listen on! + Ni moč odpreti nobenega omrežnega vmesnika za posluÅ¡anje! + + + + Client connected from + Odjemalec se je povezal z + + + + Closing server for basic setup. + Zapiram strežnik za osnovno nastavitev. + + + + Antique client trying to connect... refusing. + Zastarel odjemalec se poskupa povezati... Zavračam ga. + + + + <b>Your Quassel Client is too old!</b><br>This core needs at least client/core protocol version %1.<br>Please consider upgrading your client. + <b>VaÅ¡ odjemalec Quassel je prestar.</b><br>To jedro potrebuje vsaj protokol različice %1.<br>Razmislite o nadgradnji odjemalca. + + + + + + Client + Odjemalec + + + + too old, rejecting. + je prestar, zavračam ga. + + + + <b>Quassel Core Version %1</b><br>Built: %2<br>Up %3d%4h%5m (since %6) + <b>Jedro Quassel različice %1</b><br>Zgrajeno: %2<br>Teče %3d %4u %5m (od %6) + + + + Starting TLS for Client: + Zaganjanje TLS za odjemalca: + + + + <b>Client not initialized!</b><br>You need to send an init message before trying to login. + <b>Odjemalec ni inicializiran.</b><br>Preden se poskusi prijaviti mora poslati inicializacijsko sporočilo. + + + + did not send an init message before trying to login, rejecting. + pred prijavo ni poslal inicializacijskega sporočila, zavračam ga. + + + + <b>Invalid username or password!</b><br>The username/password combination you supplied could not be found in the database. + <b>Neveljavno uporabniÅ¡ko ime ali geslo.</b><br>Podane kombinacije uporabniÅ¡kega imena in gesla ni moč najti v podatkovni zbirki. + + + + initialized and authenticated successfully as "%1" (UserId: %2). + je uspeÅ¡no inicializiran in overjen kot »%1« (uporabniÅ¡ki ID: %2). + + + + Non-authed client disconnected. + Prekinjena povezava z neoverjenim odjemalcem. + + + + Non-authed client disconnected. (socket allready destroyed) + Prekinjena povezava z neoverjenim odjemalcem. (vtičnica je že bila uničena) + + + + Could not initialize session for client: + Ni moč inicializirati seje za odjemalca: + + + + CoreAccountEditDlg + + + Add Core Account + Dodaj račun pri jedru + + + + Edit Core Account + Urejanje računa pri jedru + Account Details @@ -1373,6 +1757,7 @@ morate knjižnico Qt zgraditi z omogočenim vstavkom sqlite. Vrata: + localhost localhost @@ -1441,7 +1826,7 @@ morate knjižnico Qt zgraditi z omogočenim vstavkom sqlite. Nastavitev jedra ni uspela.<br><b>%1</b><br>Kliknite <em>Naprej</em>, da začnete znova. - + Your are now logged into your freshly configured Quassel Core!<br>Please remember to configure your identities and networks now. Prijavljeni ste v sveže nastavljeno jedro Quassel.<br>Ne pozabite sedaj nastaviti svojih identitet in omrežij. @@ -1618,7 +2003,7 @@ p, li { white-space: pre-wrap; } Odstrani nastavitve računa - + Do you really want to remove your local settings for this Quassel Core account?<br>Note: This will <em>not</em> remove or change any data on the Core itself! Ali res želite odstraniti svoje krajevne nastavitve za ta račun pri jedru Quassel.<br>Pomnite: s tem <em>ne</em> odstranite ali spremenite nobenih podatkov pri jedru samem! @@ -1655,7 +2040,7 @@ p, li { white-space: pre-wrap; } Connected to %1 - Povezan s %1 + Povezan na %1 @@ -1668,11 +2053,14 @@ p, li { white-space: pre-wrap; } Prijavljanje ... + + Login Prijava + Connect to Quassel Core Poveži se z jedrom Quassel @@ -1865,27 +2253,37 @@ SOME SPACE CoreNetwork - + Connection failed. Cycling to next Server Povezovanje ni uspelo. Prehajam na naslednji strežnik - + + Connecting to %1:%2... Povezujem se z %1:%2 ... - + + Disconnecting. (%1) + Prekinjanje povezave ... (%1) + + + + Core Shutdown + Zaustavitev jedra + + Disconnecting. - Prekinjam povezavo. + Prekinjam povezavo. - + Could not connect to %1 (%2) Ni se moč povezati z %1 (%2) - + Connection failure: %1 Neuspeh pri povezovanju: %1 @@ -2028,6 +2426,7 @@ SOME SPACE Položaj: + px pik @@ -2071,11 +2470,25 @@ SOME SPACE Pisave po meri + + + + + + + Font Pisava + + + + + + + Choose... Izbor ... @@ -2101,6 +2514,7 @@ SOME SPACE Vnosna vrstica: + General: SploÅ¡no: @@ -2129,14 +2543,12 @@ SOME SPACE GeneralSettingsPage - Behaviour - ObnaÅ¡anje + ObnaÅ¡anje - General - SploÅ¡no + SploÅ¡no @@ -2233,19 +2645,29 @@ SOME SPACE Completion suffix: Pripona dokončevanja: + + + Misc + Razno + HighlightSettingsPage - Behaviour - ObnaÅ¡anje + ObnaÅ¡anje + Highlight Poudarek + + + Appearance + Videz + this shouldn't be empty @@ -2320,112 +2742,110 @@ SOME SPACE IdentitiesSettingsPage - General - SploÅ¡no + SploÅ¡no - + Identities Identitete - + + Misc + Razno + + + <b>The following problems need to be corrected before your changes can be applied:</b><ul> <b>Preden se uveljavijo spremembe, je potrebno odpraviti sledeče težave:</b><ul> - + <li>All identities need an identity name set</li> <li>Vse identitete morajo imeti nastavljeno ime</li> - + <li>Every identity needs at least one nickname defined</li> <li>Vsaka identiteta mora imeti določen vsaj en vzdevek</li> - + <li>You need to specify a real name for every identity</li> <li>Za vsako identiteto morate nastaviti pravo ime</li> - + <li>You need to specify an ident for every identity</li> <li>Za vsako identiteto morate nastaviti ident</li> - + </ul> </ul> - + One or more identities are invalid Vsaj ena identiteta ni veljavna - + Delete Identity? ZbriÅ¡em identiteto? - + Do you really want to delete identity "%1"? Ali res želite zbrisati identiteto »%1«? - + + Rename Identity Preimenuj identiteto - + Please enter a new name for the identity "%1"! Vnesite novo ime identitete »%1«! - Load a Key - Naloži ključ + Naloži ključ - No Key loaded - Naložen ni noben ključ + Naložen ni noben ključ - Load - Naloži + Naloži - RSA - RSA + RSA - DSA - DSA + DSA - Clear - Počisti + Počisti - Load a Certificate - Naloži potrdilo + Naloži potrdilo - No Certificate loaded - Naloženo ni nobeno potrdilo + Naloženo ni nobeno potrdilo - + + ... ... @@ -2445,245 +2865,492 @@ SOME SPACE Odstrani identiteto - + Real Name: + Pravo ime: + + + The "Real Name" is shown in /whois. + Pravo ime je prikazano v izpisu /whois. + + + Nicknames + Vzdevki + + + Add Nickname + Dodaj vzdevek + + + &Add... + &Dodaj ... + + + Remove Nickname + Odstrani vzdevek + + + Remove + Odstrani + + + Re&name... + Pre&imenuj ... + + + Move upwards in list + Premakni gor v seznamu + + + Move downwards in list + Premakni dol v seznamu + + + A&way + &Odsoten + + + Default Away Settings + Privzete nastavitve za odsotnost + + + Nick to be used when being away + Vzdevek, ki bo prikazan, ko ste odsotni + + + Default away reason + Privzeti razlog za odsotnost + + + Away Reason: + Razlog odsotnosti: + + + Away Nick: + Vzdevek odsotnosti: + + + Set away when all clients have detached from the core + Nastavi odsotnost, ko vsi odjemalci prekinejo povezavo z jedrom + + + Away On Detach + Odsotnost ob prekinitvi + + + Override default away reason for auto-away on detach + Za samo-odsotnost ob prekinitvi povozi privzeti razlog odsotnosti + + + Not implemented yet + Å e ni izvedeno + + + Away On Idle + Odsotnost ob neaktivnosti + + + Set away after + Odsoten po + + + minutes of being idle + minutah neaktivnosti + + + Advanced + Napredno + + + Ident: + Ident: + + + The "ident" is part of your hostmask and, together with your host, uniquely identifies you within the IRC network. + »ident« je del maske gostitelja in vas, skupaj z gostiteljem, edinstveno identificira na omrežju IRC. + + + Messages + Sporočila + + + Part Reason: + Razlog zapustitve: + + + Quit Reason: + Razlog končanja: + + + Kick Reason: + Razlog za brco: + + + You need an SSL Capable Client to edit your Cores SSL Key and Certificate + Za urejanje ključa in potrdila SSL za jedro potrebujete odjemalca s podporo za SSL + + + Warning: you are not connected with a secured connection to the Quassel Core! +Proceeding will cause an unencrypted transfer of your SSL Key and SSL Certificate! + Opozorilo: Povezava z jedrom Quassel ni varna. Če nadaljujete, se bosta +ključ SSL in potrdilo SSL prenesla brez Å¡ifriranja! + + + Continue + Nadaljuj + + + Use SSL Key + Uporabi ključ SSL + + + Key Type: + Vrsta ključa: + + + Use SSL Certificate + Uporabi potrdilo SSL + + + Organisation: + Organizacija: + + + CommonName: + Skupno ime: + + + + Identity + + + <empty> + <prazno> + + + + Quassel IRC User + Uporabnik Quassel IRC + + + + Gone fishing. + OdÅ¡el sem ribarit. + + + + Not here. No, really. not here! + Ni me tu. Ne, res, ni me tu! + + + + All Quassel clients vanished from the face of the earth... + Vsi odjemalci Quassel so izginili z obličja Zemlje ... + + + + Kindergarten is elsewhere! + OtroÅ¡ki vrtec je drugje! + + + + + http://quassel-irc.org - Chat comfortably. Anywhere. + http://quassel-irc.org - Klepetajte udobno. Kjerkoli. + + + + IdentityEditWidget + + + + Advanced + Napredno + + + + Load a Key + Naloži ključ + + + + + + No Key loaded + Naložen ni noben ključ + + + + + + + Load + Naloži + + + + RSA + RSA + + + + DSA + DSA + + + + + Clear + Počisti + + + + Load a Certificate + Naloži potrdilo + + + + + + + No Certificate loaded + Naloženo ni nobeno potrdilo + + + + General + SploÅ¡no + + + Real Name: Pravo ime: - + The "Real Name" is shown in /whois. - Pravo ime je prikazano v izpisu /whois. + Pravo ime je prikazano v izpisu /whois (kdoje). - + Nicknames Vzdevki - + Add Nickname Dodaj vzdevek - + &Add... &Dodaj ... - + Remove Nickname Odstrani vzdevek - + Remove Odstrani - + + Rename Identity + Preimenuj identiteto + + + Re&name... Pre&imenuj ... - + Move upwards in list Premakni gor v seznamu - + + + ... + ... + + + Move downwards in list Premakni dol v seznamu - + A&way - &Odsoten + &Odsotnost - + Default Away Settings Privzete nastavitve za odsotnost - + Nick to be used when being away Vzdevek, ki bo prikazan, ko ste odsotni - + Default away reason - Privzeti razlog za odsotnost + Privzet razlog za odsotnost - - Away Reason: - Razlog odsotnosti: + + Away Nick: + Vzdevek ob odsotnosti: - - Away Nick: - Vzdevek odsotnosti: + + + + Away Reason: + Razlog za odsotnost: - + Set away when all clients have detached from the core Nastavi odsotnost, ko vsi odjemalci prekinejo povezavo z jedrom - + Away On Detach Odsotnost ob prekinitvi - - Override default away reason for auto-away on detach - Za samo-odsotnost ob prekinitvi povozi privzeti razlog odsotnosti - - - + Not implemented yet - Å e ni izvedeno + Å e ni izdelano - + Away On Idle Odsotnost ob neaktivnosti - + Set away after Odsoten po - + minutes of being idle minutah neaktivnosti - - Advanced - Napredno - - - + Ident: Ident: - + The "ident" is part of your hostmask and, together with your host, uniquely identifies you within the IRC network. »ident« je del maske gostitelja in vas, skupaj z gostiteljem, edinstveno identificira na omrežju IRC. - + Messages Sporočila - + Part Reason: Razlog zapustitve: - + Quit Reason: Razlog končanja: - + Kick Reason: Razlog za brco: - + You need an SSL Capable Client to edit your Cores SSL Key and Certificate Za urejanje ključa in potrdila SSL za jedro potrebujete odjemalca s podporo za SSL - + Warning: you are not connected with a secured connection to the Quassel Core! Proceeding will cause an unencrypted transfer of your SSL Key and SSL Certificate! Opozorilo: Povezava z jedrom Quassel ni varna. Če nadaljujete, se bosta ključ SSL in potrdilo SSL prenesla brez Å¡ifriranja! - + Continue Nadaljuj - + Use SSL Key Uporabi ključ SSL - + Key Type: Vrsta ključa: - + Use SSL Certificate Uporabi potrdilo SSL - + Organisation: Organizacija: - + CommonName: Skupno ime: - Identity + IdentityPage - - <empty> - <prazno> - - - - Quassel IRC User - Uporabnik Quassel IRC - - - - Gone fishing. - OdÅ¡el sem ribarit. - - - - Not here. No, really. not here! - Ni me tu. Ne, res, ni me tu! + + Setup Identity + Nastavitev identitete - - All Quassel clients vanished from the face of the earth... - Vsi odjemalci Quassel so izginili z obličja Zemlje ... + + Default Identity + Privzeta identiteta + + + InputLine - - Kindergarten is elsewhere! - OtroÅ¡ki vrtec je drugje! + + Do you really want to paste %1 lines? + Ali res želite prilepiti %1 vrstic? - - http://quassel-irc.org - Chat comfortably. Anywhere. - http://quassel-irc.org - Klepetajte udobno. Kjerkoli. + + Paste Protection + Varovanje pri lepljenju InputWidget - + Focus Input Line Fokusiraj vnosno vrstico - + Ctrl+L Ctrl+L @@ -2693,15 +3360,23 @@ ključ SSL in potrdilo SSL prenesla brez Å¡ifriranja! Obrazec + + IrcConnectionWizard + + + Save && Connect + Shrani in se poveži + + IrcListModel - + Channel Kanal - + Users Uporabniki @@ -2714,152 +3389,160 @@ ključ SSL in potrdilo SSL prenesla brez Å¡ifriranja! IrcServerHandler - + %1 has changed topic for %2 to: "%3" %1 je spremenil temo za %2 na: »%3« - + Received RPL_ISUPPORT (005) without parameters! Prejet je bil RPL_ISUPPORT (005) brez parametrov! - + Received non RFC compliant RPL_ISUPPORT: this can lead to unexpected behavior! Prejet je bil RPL_ISUPPORT, ki ni skladen z RFC: to lahko vodi do nepredvidenega obnaÅ¡anja! - + + + + %1 %1 - + [Whois] %1 is away: "%2" - [Whois] %1 je odsoten: »%2« + [Kdoje] %1 je odsoten: »%2« + %1 is away: "%2" %1 je odsoten: »%2« - + + + + + + [Whois] %1 - [Whois] %1 + [Kdoje] %1 - + + [Whois] %1 is %2 (%3) - [Whois] %1 je %2 (%3) + [Kdoje] %1 je %2 (%3) - + %1 is online via %2 (%3) %1 je povezan prek %2 (%3) - + + [Whowas] %1 - [Whowas] %1 + [Kdojebil] %1 - + [Whowas] %1 was %2 (%3) - [Whowas] %1 je bil %2 (%3) + [Kdojebil] %1 je bil %2 (%3) - + [Who] End of /WHO list for %1 [Who] Konec seznama /WHO za %1 - + [Whois] %1 is logged in since %2 - [Whois] %1 je prijavljen od %2 + [Kdoje] %1 je prijavljen od %2 - + [Whois] %1 is idling for %2 (%3) - [Whois] %1 je nedejaven %2 (%3) + [Kdoje] %1 je nedejaven %2 (%3) - + [Whois] idle message: %1 - [Whois] sporočilo nedejavnosti: %1 + [Kdoje] sporočilo nedejavnosti: %1 - + [Whois] %1 is a user on channels: %2 - [Whois] %1 je uporabnik na kanalih: %2 + [Kdoje] %1 je uporabnik na kanalih: %2 - + [Whois] %1 has voice on channels: %2 - [Whois] %1 ima glas na kanalih: %2 + [Kdoje] %1 ima glas na kanalih: %2 - + [Whois] %1 is an operator on channels: %2 - [Whois] %1 je operater na kanalih: %2 + [Kdoje] %1 je operater na kanalih: %2 - + Channel %1 has %2 users. Topic is: %3 Kanal %1 ima %2 uporabnikov. Tema je: %3 - + End of channel list Konec seznama kanalov - + No topic is set for %1. Za %1 ni nastavljene nobene teme. - + Topic for %1 is "%2" Tema za %1 je »%2« - + Topic set by %1 on %2 Temo je %2 nastavil %1 - + [Who] %1 [Who] %1 - There is a nickname in your identity's nicklist which contains illegal characters - Na seznamu vzdevkov za vaÅ¡o identiteto je vzdevek, ki vsebuje neveljavne znake + Na seznamu vzdevkov za vaÅ¡o identiteto je vzdevek, ki vsebuje neveljavne znake - Due to a bug in Unreal IRCd (and maybe other irc-servers too) we're unable to determine the erroneous nick - Zaradi napake v Unreal IRCd (in mogoče drugih strežnikih za IRC) ne moremo določiti nepravilnega vzdevka + Zaradi napake v Unreal IRCd (in mogoče drugih strežnikih za IRC) ne moremo določiti nepravilnega vzdevka - Please use: /nick <othernick> to continue or clean up your nicklist - Za nadaljevanje uporabite »/nick <drug_vzdevek>«, ali pa počistite seznam vzdevkov + Za nadaljevanje uporabite »/nick <drug_vzdevek>«, ali pa počistite seznam vzdevkov - + Nick %1 contains illegal characters Vzdevek %1 vsebuje neveljavne znake - + Nick already in use: %1 Vzdevek je že v uporabi: %1 - + No free and valid nicks in nicklist found. use: /nick <othernick> to continue Na seznamu vzdevkov ni moč najti nobenega prostega ali veljavnega vzdevka. Za nadaljevanje uporabite »/nick <drug_vzdevek>« @@ -2867,17 +3550,17 @@ ključ SSL in potrdilo SSL prenesla brez Å¡ifriranja! IrcUserItem - + idling since %1 nedejaven od %1 - + login time: %1 čas prijave: %1 - + server: %1 strežnik: %1 @@ -2885,190 +3568,212 @@ ključ SSL in potrdilo SSL prenesla brez Å¡ifriranja! MainWin - + &Connect to Core... &Poveži se z jedrom ... - + &Disconnect from Core P&rekini povezavo z jedrom - + Core &Info... P&odatki o jedru ... - + Configure &Networks... &Nastavi omrežja ... - + &Quit Konča&j - + Ctrl+Q Ctrl+Q - + &Configure Buffer Views... N&astavi prikaze ... - &Lock Dock Positions - &Zakleni položaj podoken + &Zakleni položaj podoken + + + + &Lock Layout + &Zakleni razpored - + Show &Search Bar Pr&ikaži iskalno vrstico - + Ctrl+F Ctrl+F - + + Show Away Log + Prkaži dnevnik ob odsotnosti + + + Show Status &Bar Pri&kaži vrstico stanja - + &Configure Quassel... &Nastavi Quassel ... - + F7 F7 - + &About Quassel &O Quassel - + About &Qt O &Qt - + Debug &NetworkModel Raz&hroščevanje modela omrežja - + Debug &MessageModel Ra&zhroščevanje modela sporočil - + Debug &Log Razhroščevalni &dnevnik - + &File &Datoteka - + &Networks &Omrežja - + &View &Videz - + &Buffer Views P&rikazi - + + &Toolbars + &Orodjarne + + + &Settings &Nastavitve - + &Help &Pomoč - + Debug Razhroščevanje - + Nicks Vzdevki - + Show Nick List Prikaži seznam vzdevkov - + Chat Monitor Nadzorovalnik klepeta - + Show Chat Monitor Prikaži nadzorovalnik klepeta - + Inputline Vnosna vrstica - + Show Input Line Prikaži vnosno vrstico - + Topic Tema - + Show Topic Line Prikaži vrstico s temo - + Connected to core. Povezan z jedrom. - + Core Lag: %1 Zakasnitev jedra: %1 - + Not connected to core. Brez povezave z jedrom. + + Message + + + Day changed to %1 + Dan se je spremenil na %1 + + MessageModel - + Requesting %1 messages from backlog for buffer %2:%3 Zahtevam %1 starih sporočil za prikaz %2:%3 @@ -3082,8 +3787,12 @@ ključ SSL in potrdilo SSL prenesla brez Å¡ifriranja! + Receiving Backlog + Sprejemanje starih sporočil + + Processing Messages - Obdelovanje sporočil + Obdelovanje sporočil @@ -3147,7 +3856,7 @@ ključ SSL in potrdilo SSL prenesla brez Å¡ifriranja! Vnesite ime omrežja: - + Add Network Dodaj omrežje @@ -3155,17 +3864,17 @@ ključ SSL in potrdilo SSL prenesla brez Å¡ifriranja! NetworkItem - + Server: %1 Strežnik: %1 - + Users: %1 Uporabniki: %1 - + Lag: %1 msecs Zakasnitev: %1 ms @@ -3173,17 +3882,17 @@ ključ SSL in potrdilo SSL prenesla brez Å¡ifriranja! NetworkModel - + Buffer Prikaz - + Topic Tema - + Nick Count Å t. vzdevkov @@ -3191,189 +3900,152 @@ ključ SSL in potrdilo SSL prenesla brez Å¡ifriranja! NetworkModelActionProvider - Connect - Poveži se + Poveži se - Disconnect - Prekini povezavo + Prekini povezavo - Join - Pridruži se + Pridruži se - Part - Zapusti + Zapusti - Delete Buffer(s)... - ZbriÅ¡i prikaz(e) ... + ZbriÅ¡i prikaz(e) ... - Show Buffer - Prikaži prikaz + Prikaži prikaz - Joins - Pridružitve + Pridružitve - Parts - Zapustitve + Zapustitve - Quits - Končanja + Končanja - Nick Changes - Spremembe vzdevkov + Spremembe vzdevkov - Mode Changes - Spremembe načina + Spremembe načina - Day Changes - Spremembe dneva + Spremembe dneva - Set as Default... - Nastavi kot privzeto ... + Nastavi kot privzeto ... - Use Defaults... - Uporabi privzeto ... + Uporabi privzeto ... - Join Channel... - Pridruži se kanalu ... + Pridruži se kanalu ... - Start Query - Zaženi poizvedbo + Zaženi poizvedbo - Show Query - Prikaži poizvedbo + Prikaži poizvedbo - Whois - Whois + Whois - Version - Različica + Različica - Time - Čas + Čas - Ping - Ping + Ping - Finger - Finger + Finger - Give Operator Status - Daj status operaterja + Daj status operaterja - Take Operator Status - Odvzemi status operaterja + Odvzemi status operaterja - Give Voice - Daj besedo + Daj besedo - Take Voice - Odvzemi besedo + Odvzemi besedo - Kick From Channel - Brcni s kanala + Brcni s kanala - Ban From Channel - Izloči s kanala + Izloči s kanala - Kick && Ban - Brcni in izloči + Brcni in izloči - Hide Buffer(s) Temporarily - Začasno skrij prikaz(e) + Začasno skrij prikaz(e) - Hide Buffer(s) Permanently - Trajno skrij prikaz(e) + Trajno skrij prikaz(e) - Show Channel List - Prikaži seznam kanalov + Prikaži seznam kanalov - Show Ignore List - Prikaži seznam spregledanih + Prikaži seznam spregledanih - Hide Events - Skrij dogodke + Skrij dogodke - CTCP - CTCP + CTCP - Actions - Dejanja + Dejanja - Do you want to delete the following buffer(s) permanently? - + Ali želite trajno zbrisati sledeči prikaz? Ali želite trajno zbrisati sledeča prikaza? Ali želite trajno zbrisati sledeče prikaze? @@ -3381,70 +4053,123 @@ ključ SSL in potrdilo SSL prenesla brez Å¡ifriranja! - + <b>Note:</b> This will delete all related data, including all backlog data, from the core's database and cannot be undone. + <b>Pomnite:</b> S tem iz podatkovne zbirke jedra zbriÅ¡ete vse povezane podatke, vključno z zgodovino sporočil. Tega kasneje ni moč razveljaviti. + + + <br>Active channel buffers cannot be deleted, please part the channel first. + <br>Aktivnih prikazov kanalov ni moč zbrisati. Najprej zapustite kanale. + + + Remove buffers permanently? + Ali trajno zbriÅ¡em prikaze? + + + Join Channel + Pridruži se kanalu + + + Input channel name: + Vnesite ime kanala: + + + + NetworkModelController + + + Do you want to delete the following buffer(s) permanently? + + Ali želite trajno zbrisati sledeči %n prikaz? + Ali želite trajno zbrisati sledeča %n prikaza? + Ali želite trajno zbrisati sledeče %n prikaze? + Ali želite trajno zbrisati sledečih %n prikaze? + + + + <b>Note:</b> This will delete all related data, including all backlog data, from the core's database and cannot be undone. <b>Pomnite:</b> S tem iz podatkovne zbirke jedra zbriÅ¡ete vse povezane podatke, vključno z zgodovino sporočil. Tega kasneje ni moč razveljaviti. - + <br>Active channel buffers cannot be deleted, please part the channel first. <br>Aktivnih prikazov kanalov ni moč zbrisati. Najprej zapustite kanale. - + Remove buffers permanently? Ali trajno zbriÅ¡em prikaze? + + + NetworkModelController::JoinDlg - + Join Channel Pridruži se kanalu - - Input channel name: - Vnesite ime kanala: + + Network: + Omrežje: + + + + Channel: + Kanal: + + + + NetworkPage + + + Setup Network Connection + Nastavitev omrežne povezave NetworksSettingsPage - General - SploÅ¡no + SploÅ¡no - + Networks Omrežja - + + Misc + Razno + + + <b>The following problems need to be corrected before your changes can be applied:</b><ul> <b>Preden se uveljavijo spremembe, je potrebno odpraviti sledeče težave:</b><ul> - + <li>All networks need at least one server defined</li> <li>Vsako omrežje mora imeti določen vsaj en strežnik</li> - + </ul> </ul> - + Invalid Network Settings Neveljavne nastavitve omrežja - + Delete Network? ZbriÅ¡em omrežje? - + Do you really want to delete the network "%1" and all related settings, including the backlog? Ali res želite zbrisati omrežje »%1« in vse z njim povezane nastavitve, vključno z zgodovino sporočil? @@ -3459,11 +4184,13 @@ ključ SSL in potrdilo SSL prenesla brez Å¡ifriranja! Pre&imenuj ... + &Add... &Dodaj ... + De&lete &ZbriÅ¡i @@ -3479,6 +4206,8 @@ ključ SSL in potrdilo SSL prenesla brez Å¡ifriranja! Identiteta: + + ... ... @@ -3571,6 +4300,7 @@ Pomnite, da se Quassel samodejno znova pridruži kanalom, zato /join tu verjetno Po vnovični povezavi se pridruži vsem kanalom + Auto Identify Samodejno se identificiraj @@ -3611,6 +4341,7 @@ Pomnite, da se Quassel samodejno znova pridruži kanalom, zato /join tu verjetno Uporabi nabor znakov po meri + Specify which encoding your messages will be sent in. UTF-8 should be a sane choice for most networks. @@ -3623,6 +4354,7 @@ Za večino omrežij bi morala biti UTF-8 razumna izbira. PoÅ¡lji sporočila z: + Incoming messages encoded in Utf8 will always be treated as such. This setting defines the encoding for messages that are not Utf8. @@ -3635,6 +4367,7 @@ Ta nastavitev določa nabor znakov za sporočila, ki niso UTF-8. Zasilen za prejeta: + This specifies how control messages, nicks and servernames are encoded. Unless you *really* know what you do, leave this as ISO-8859-1! @@ -3650,7 +4383,7 @@ Pustite na ISO-8859-1, razen če ste prepričani, kaj počnete! NickEditDlg - + Add Nickname Dodaj vzdevek @@ -3673,15 +4406,19 @@ Pustite na ISO-8859-1, razen če ste prepričani, kaj počnete! NotificationsSettingsPage - Behaviour - ObnaÅ¡anje + ObnaÅ¡anje Notifications Obvestila + + + Appearance + Videz + PhononNotificationBackend::ConfigWidget @@ -3712,20 +4449,30 @@ Pustite na ISO-8859-1, razen če ste prepričani, kaj počnete! QObject - + Requesting a total of up to %1 backlog messages for %2 buffers Zahtevam največ %1 starih sporočil za %2 prikazov - + Requesting up to %1 of all unread backlog messages (plus additional %2) Zahtevam največ %1 neprebranih starih sporočil (in dodatnih %2) - + Requesting a total of up to %1 unread backlog messages for %2 buffers Zahtevam največ %1 neprebranih starih sporočil za %2 prikazov + + + Welcome to Quassel IRC + DobrodoÅ¡li v Quassel IRC + + + + This wizard will help you to set up your default identity and your IRC network connection.<br>This only covers basic settings. You can cancel this wizard any time and use the settings dialog for more detailed changes. + Ta čarovnik vam bo pomagal pri nastavitvi privzete identitete in povezave v omrežje IRC.<br>Zaobjete so le osnovne nastavitve. Tega čarovnika lahko prekličete kadarkoli in za podrobnejÅ¡e spremembe uporabite nastavitveno okno. + Quassel::secondsToString() @@ -3758,22 +4505,22 @@ Pustite na ISO-8859-1, razen če ste prepričani, kaj počnete! QueryBufferItem - + <b>Query with %1</b> <b>Poizvedba z %1</b> - + idling since %1 nedejaven od %1 - + login time: %1 čas prijave: %1 - + server: %1 strežnik: %1 @@ -3814,6 +4561,7 @@ Pustite na ISO-8859-1, razen če ste prepričani, kaj počnete! Naslov strežnika: + Port: Vrata: @@ -3902,42 +4650,44 @@ Pustite na ISO-8859-1, razen če ste prepričani, kaj počnete! SettingsDlg + + Settings Nastavitve - + Save changes Shrani spremembe - + There are unsaved changes on the current configuration page. Would you like to apply your changes now? Na trenutni strani z nastavitvami so neshranjene spremembe. Ali želite sedaj uveljaviti spremembe? - + Configure %1 Nastavi %1 - + Reload Settings Znova naloži nastavitve - + Do you like to reload the settings, undoing your changes on this page? Ali želite znova naložiti nastavitve, pri čemer se spremembe izgubijo? - + Restore Defaults Obnovi privzete vrednosti - + Do you like to restore the default values for this page? Ali želite obnoviti privzete vrednosti za to stran? @@ -3988,35 +4738,114 @@ Pustite na ISO-8859-1, razen če ste prepričani, kaj počnete! SignalProxy - + Peer tried to send package larger than max package size! Vrstnik je poskusil poslati paket, ki je večji kot je dovoljeno! - + Peer tried to send 0 byte package! Vrstnik je poskusil poslati paket velik 0 bajtov! - + Peer sent corrupted compressed data! Vrstnik je poslal poÅ¡kodovane stisnjene podatke! - + Peer sent corrupt data: unable to load QVariant! Vrstnik je poslal poÅ¡kodovane podatke: ni moč naložiti QVariant! - + Disconnecting Prekinjam povezavo + + SimpleNetworkEditor + + + Network name: + Ime omrežja: + + + + The name of the IRC network you are configuring + Ime omrežja IRC, ki ga nastavljate + + + + Servers + Strežniki + + + + A list of IRC servers belonging to this network + Seznam strežnikov, ki spadajo v to omrežje + + + + Edit this server entry + Urejanje izbranega strežnika + + + + &Edit... + &Urejanje ... + + + + Add another IRC server + Doda nov strežnik za IRC + + + + &Add... + &Dodaj ... + + + + Remove this server entry from the list + Odstrani izbrani strežnik s seznama + + + + De&lete + &ZbriÅ¡i + + + + Move upwards in list + Premakni gor v seznamu + + + + + ... + ... + + + + Move downwards in list + Premakni dol v seznamu + + + + Join Channels Automatically + Samodejno se pridruži kanalom + + + + A list of IRC channels you will join automatically after connecting to the network + Seznam kanalov IRC, katerim se boste po vzpostavljeni povezavi v omrežje pridružili samodejno + + SqliteStorage - + SQLite is a file-based database engine that does not require any setup. It is suitable for small and medium-sized databases that do not require access via network. Use SQLite if your Quassel Core should store its data on the same machine it is running on, and if you only expect a few users to use your core. SQLite je pogon za zbirko podatkov, ki temelji na datotekah in ne potrebuje nobenega nastavljanja. Primeren je za male in srednje-velike podatkovne zbirke, ki ne potrebujejo dostopa prek omrežja. Uporabite SQLite, če naj jedro Quassel shranjuje svoje podatke na računalniku, kjer teče, in če bo jedro uporabljalo malo uporabnikov. @@ -4024,72 +4853,77 @@ Pustite na ISO-8859-1, razen če ste prepričani, kaj počnete! SslCertDisplayDialog - + SSL Certificate used by %1 Potrdilo SSL, ki ga uporablja %1 - + Issuer Info Podatki o izdajatelju - + + Organization: Organizacija: - + + Locality Name: Ime krajevnosti: - + + Organizational Unit Name: Ime organizacijske enote: - + + Country Name: Ime države: - + + State or Province Name: Ime zv. države ali province: - + Subject Info Podatki o subjektu - + Additional Info Dodatni podatki - + Valid From: Veljavno od: - + Valid To: Veljavno do: - + Hostname %1: Ime gostitelja %1: - + E-Mail Address %1: E-poÅ¡tni naslov %1: - + Digest: Povzetek: @@ -4097,7 +4931,7 @@ Pustite na ISO-8859-1, razen če ste prepričani, kaj počnete! StatusBufferItem - + Status Buffer Prikaz stanja @@ -4105,17 +4939,17 @@ Pustite na ISO-8859-1, razen če ste prepričani, kaj počnete! SystrayNotificationBackend::ConfigWidget - + System Tray Icon Ikona v sistemski vrstici - + Animate Animiraj - + Show bubble Prikaži oblaček @@ -4143,6 +4977,149 @@ Pustite na ISO-8859-1, razen če ste prepričani, kaj počnete! s + + ToolBarActionProvider + + + Connect + Poveži se + + + + Connect to IRC + Poveži se na IRC + + + + Disconnect + Prekini povezavo + + + + Disconnect from IRC + Prekini povezavo z IRC-em + + + + Part + Zapusti + + + + Leave currently selected channel + Zapusti trnutno izbrani kanal + + + + Join + Pridruži se + + + + Join a channel + Pridruži se kanalu + + + + Query + Poizvedba + + + + Start a private conversation + Zaćni zaseben pogovor + + + + Whois + Kdoje + + + + Request user information + Zahtevaj podatke o uporabniku + + + + Op + Op + + + + Give operator privileges to user + Uporabniku podeli pravice operaterja + + + + Deop + Razop + + + + Take operator privileges from user + Uporabniku odvzemi pravice operaterja + + + + Voice + Glas + + + + Give voice to user + Uporabniku daj glas + + + + Devoice + Razglas + + + + Take voice from user + Uporabniku odvzemi glas + + + + Kick + Brcni + + + + Remove user from channel + Uporabnika odstrani iz kanala + + + + Ban + Izloči + + + + Ban user from channel + Uporabnika izloči iz kanala + + + + Kick/Ban + Brcni/izloči + + + + Remove and ban user from channel + Uporabnika odstrani in izloči iz kanala + + + + Connect to all + Poveži se na vse + + + + Disconnect from all + Prekini povezavo z vsemi + + TopicLabel @@ -4162,122 +5139,124 @@ Pustite na ISO-8859-1, razen če ste prepričani, kaj počnete! UiStyle::StyledMessage - + %D0%1 %D0%1 - + %Dn%1 %Dn%1 - + %Ds%1 %Ds%1 - + %De%1 %De%1 - + %Dj%DN%1%DN %DH(%2@%3)%DH has joined %DC%4%DC %Dj%DN%1%DN %DH(%2@%3)%DH se je pridružil %DC%4%DC - + %Dp%DN%1%DN %DH(%2@%3)%DH has left %DC%4%DC %Dp%DN%1%DN %DH(%2@%3)%DH je zapustil %DC%4%DC - + %Dq%DN%1%DN %DH(%2@%3)%DH has quit %Dq%DN%1%DN %DH(%2@%3)%DH je končal - + %Dk%DN%1%DN has kicked %DN%2%DN from %DC%3%DC %Dk%DN%1%DN je brcnil %DN%2%DN iz %DC%3%DC - + %DrYou are now known as %DN%1%DN %DrSedaj ste znani kot %DN%1%DN - + %Dr%DN%1%DN is now known as %DN%2%DN %Dr%DN%1%DN je sedaj znan kot %DN%2%DN - + %DmUser mode: %DM%1%DM %DmUporabniÅ¡ki način: %DM%1%DM - + %DmMode %DM%1%DM by %DN%2%DN %DmNačin %DM%1%DM od %DN%2%DN - + %Da%DN%1%DN %2 %Da%DN%1%DN %2 - + %De[%1] %De[%1] - + <%1> <%1> - + [%1] [%1] - + + * * - + --> --> - + + <-- <-- - + <-* <-* - + <-> <-> - + *** *** - + -*- -*- - + %1 %1 @@ -4285,7 +5264,7 @@ Pustite na ISO-8859-1, razen če ste prepričani, kaj počnete! UserCategoryItem - + %n Owner(s) %n lastnik @@ -4295,7 +5274,7 @@ Pustite na ISO-8859-1, razen če ste prepričani, kaj počnete! - + %n Admin(s) %n skrbnik @@ -4305,7 +5284,7 @@ Pustite na ISO-8859-1, razen če ste prepričani, kaj počnete! - + %n Operator(s) %n operater @@ -4315,7 +5294,7 @@ Pustite na ISO-8859-1, razen če ste prepričani, kaj počnete! - + %n Half-Op(s) %n pol-operater @@ -4325,7 +5304,7 @@ Pustite na ISO-8859-1, razen če ste prepričani, kaj počnete! - + %n Voiced %n z besedo @@ -4335,7 +5314,7 @@ Pustite na ISO-8859-1, razen če ste prepričani, kaj počnete! - + %n User(s) %n uporabnik @@ -4348,7 +5327,12 @@ Pustite na ISO-8859-1, razen če ste prepričani, kaj počnete! UserInputHandler - + + away + odsoten + + + sending CTCP-%1 request poÅ¡iljanje zahtevka CTCP-%1 diff --git a/i18n/quassel_tr_TR.ts b/i18n/quassel_tr_TR.ts index 0018f504..02c084a5 100644 --- a/i18n/quassel_tr_TR.ts +++ b/i18n/quassel_tr_TR.ts @@ -86,7 +86,7 @@ p, li { white-space: pre-wrap; } <b>A modern, distributed IRC Client</b><br><br>&copy;2005-2009 by the Quassel Project<br><a href="http://quassel-irc.org">http://quassel-irc.org</a><br><a href="irc://irc.freenode.net/quassel">#quassel</a> on <a href="http://www.freenode.net">Freenode</a><br><br>Quassel IRC is dual-licensed under <a href="http://www.gnu.org/licenses/gpl-2.0.txt">GPLv2</a> and <a href="http://www.gnu.org/licenses/gpl-3.0.txt">GPLv3</a>.<br>Most icons are &copy; by the <a href="http://www.oxygen-icons.org">Oxygen Team</a> and used under the <a href="http://www.gnu.org/licenses/lgpl.html">LGPL</a>.<br><br>Please use <a href="http://bugs.quassel-irc.org">http://bugs.quassel-irc.org</a> to report bugs. - + <b>Modern, dağıtımlı bir IRC Ä°stemcisi</b><br><br>&copy;2005-2009 Quassel Projesi<br><a href="http://quassel-irc.org">http://quassel-irc.org</a><br><a href="irc://irc.freenode.net/quassel">#quassel</a> on <a href="http://www.freenode.net">Freenode</a><br><br>Quassel IRC <a href="http://www.gnu.org/licenses/gpl-2.0.txt">GPLv2</a> ve <a href="http://www.gnu.org/licenses/gpl-3.0.txt">GPLv3</a> ile çifte lisanslanmıştır..<br>Çoğu simge &copy; <a href="http://www.oxygen-icons.org">Oxygen Takımı</a> tarafından yapılmış ve <a href="http://www.gnu.org/licenses/lgpl.html">LGPL</a> ile lisanslamıştır..<br><br>Hataları lütfen <a href="http://bugs.quassel-irc.org">http://bugs.quassel-irc.org</a> adresine bildiriniz. @@ -206,7 +206,7 @@ p, li { white-space: pre-wrap; } Backlog - Birikim + Backlog @@ -216,7 +216,7 @@ p, li { white-space: pre-wrap; } Backlog Request Method: - + Backlog Talep Metodu: @@ -226,7 +226,7 @@ p, li { white-space: pre-wrap; } Unread Messages per Buffer - + Arabellek Başına Düşen Okunmamış Mesajlar @@ -323,7 +323,7 @@ You can also chose to fetch additional older chatlines to provide a better conte Dynamic backlog amount: - Dinamik birikim miktarı: + Dinamik backlog miktarı: @@ -439,13 +439,14 @@ You can also chose to fetch additional older chatlines to provide a better conte Merge buffers permanently? - + Arabellekleri kalıcı olarak birleştireyim mi? Do you want to merge the buffer "%1" permanently into buffer "%2"? This cannot be reversed! - + "%1" arabelleğini kalıcı olarak "%2" arabelleğiyle birleştireyim mi? +Bu işlem geri alınamaz! @@ -597,7 +598,7 @@ You can also chose to fetch additional older chatlines to provide a better conte Highlight - Vurgula + Vurgula @@ -795,7 +796,7 @@ p, li { white-space: pre-wrap; } Ignore: - + Görmezden Gel: @@ -805,7 +806,7 @@ p, li { white-space: pre-wrap; } Operation Mode: - + İşlem Kipi: @@ -821,22 +822,22 @@ p, li { white-space: pre-wrap; } Available Buffers: - + Mevcut Arabellekler: Move selected buffers to the left - + Seçili arabellekleri sola taşı Move selected buffers to the right - + Seçili arabellekleri sağa taşı Show highlights in chatmonitor even if the originating buffer is ignored - + Mesajın geldiği arabellek görmezden geliniyor olsa bile, vurgulamaları sohbet ekranında göster @@ -1432,37 +1433,37 @@ derlemeniz gerekmektedir. Invalid listen address %1 - + Geçersiz dinleme adresi %1 Listening for GUI clients on IPv4 %1 port %2 using protocol version %3 - + GUI istemcileri IPv4 %1 port %2 ve %3 protokol sürümü üzerinden dinleniyor Could not open IPv4 interface %1:%2: %3 - + IPv4 arayüzü açılamadı %1:%2: %3 Listening for GUI clients on IPv6 %1 port %2 using protocol version %3 - + GUI istemcileri IPv6 %1 port %2 ve %3 protokol sürümü üzerinden dinleniyor Could not open IPv6 interface %1:%2: %3 - + IPv6 arayüzü açılamadı %1:%2: %3 Invalid listen address %1, unknown network protocol - + Geçersiz dinleme adresi %1, bilinmeyen ağ protokolü Could not open any network interfaces to listen on! - + Hiçbir dinlenecek ağ arayüzü açılamadı! @@ -2051,7 +2052,7 @@ SOME SPACE CoreSession::createNetwork(): Trying to create a network that already exists, updating instead! - + CoreSession::createNetwork(): Zaten varolan bir ağı oluşturmaya çalışıyor, güncelliyorum! @@ -2087,7 +2088,7 @@ SOME SPACE Received CTCP PING answer from %1 with %2 seconds round trip time - + %1 kişisinden %2 saniye geri dönüş süresiyle CTCP PING cevabı alındı @@ -2097,7 +2098,7 @@ SOME SPACE Received CTCP VERSION answer from %1: %2 - + CTCP VERSION cevabı alındı %1: %2 @@ -2513,7 +2514,7 @@ SOME SPACE <li>You need to specify an ident for every identity</li> - + <li>Her kimlik için bir ident belirtmeniz gerekiyor</li> @@ -2658,7 +2659,7 @@ SOME SPACE Override default away reason for auto-away on detach - + Ayrılırken otomatik dışarıda olma durumunda, öntanımlı dışarıda sebebini geçersiz kıl @@ -2768,7 +2769,7 @@ SOME SPACE You need an SSL Capable Client to edit your Cores SSL Key and Certificate - + Çekirdeğinizin SSL Anahtar ve Sertifikasını düzenlemeniz için SSL Destekli bir Ä°stemcinizin olması gerekiyor @@ -2804,7 +2805,7 @@ Proceeding will cause an unencrypted transfer of your SSL Key and SSL Certificat CommonName: - + OrtakAd: @@ -3257,7 +3258,7 @@ Proceeding will cause an unencrypted transfer of your SSL Key and SSL Certificat Core Lag: %1 - + Çekirdek Gecikmesi: %1 @@ -3301,7 +3302,7 @@ Proceeding will cause an unencrypted transfer of your SSL Key and SSL Certificat Manual Settings - + Manuel Ayarlar @@ -3466,7 +3467,7 @@ Proceeding will cause an unencrypted transfer of your SSL Key and SSL Certificat Mode Changes - + Kip Değişimi @@ -3521,27 +3522,27 @@ Proceeding will cause an unencrypted transfer of your SSL Key and SSL Certificat Finger - + Finger Give Operator Status - + Operatör Yetkisi Ver Take Operator Status - + Operatör Yetkisini Al Give Voice - + Voice Ver Take Voice - + Voice Al @@ -3556,17 +3557,17 @@ Proceeding will cause an unencrypted transfer of your SSL Key and SSL Certificat Kick && Ban - + Kick && Ban Hide Buffer(s) Temporarily - + Arabellek(leri) Geçici Olarak Gizle Hide Buffer(s) Permanently - + Arabellek(leri) Kalıcı Olarak Gizle @@ -3576,7 +3577,7 @@ Proceeding will cause an unencrypted transfer of your SSL Key and SSL Certificat Show Ignore List - + Görmezden Gelinenlerin Listesini Göster @@ -3591,25 +3592,25 @@ Proceeding will cause an unencrypted transfer of your SSL Key and SSL Certificat Actions - + Eylemler Do you want to delete the following buffer(s) permanently? - - - + + Aşağıdaki arabelleği kalıcı olarak silmek istiyor musunuz? + Aşağıdaki arabellekleri kalıcı olarak silmek istiyor musunuz? <b>Note:</b> This will delete all related data, including all backlog data, from the core's database and cannot be undone. - + <b>Not:</b> Bu işlem tüm backlog verileri de dahil olmak üzere tüm ilgili verileri çekirdeğinizin veritabanından silecek ve geri dönüşü yok. <br>Active channel buffers cannot be deleted, please part the channel first. - + <br>Etkin kanal arabellekleri silinemez, lütfen önce kanaldan ayrılın. @@ -3624,7 +3625,7 @@ Proceeding will cause an unencrypted transfer of your SSL Key and SSL Certificat Input channel name: - + @@ -4310,7 +4311,7 @@ Unless you *really* know what you do, leave this as ISO-8859-1! Configure %1 - + Yapılandır %1 @@ -4348,7 +4349,7 @@ Unless you *really* know what you do, leave this as ISO-8859-1! Configure %1 - + Yapılandır %1 @@ -4433,7 +4434,7 @@ Unless you *really* know what you do, leave this as ISO-8859-1! Mark taskbar entry, timeout: - + Görev çubuğu girdisini işaretle, zaman aşımı: @@ -4487,17 +4488,17 @@ Unless you *really* know what you do, leave this as ISO-8859-1! %Dj%DN%1%DN %DH(%2@%3)%DH has joined %DC%4%DC - + %Dj%DN%1%DN %DH(%2@%3)%DH katıldı %DC%4%DC %Dp%DN%1%DN %DH(%2@%3)%DH has left %DC%4%DC - + %Dp%DN%1%DN %DH(%2@%3)%DH ayrıldı %DC%4%DC %Dq%DN%1%DN %DH(%2@%3)%DH has quit - + %Dq%DN%1%DN %DH(%2@%3)%DH çıktı @@ -4507,12 +4508,12 @@ Unless you *really* know what you do, leave this as ISO-8859-1! %DrYou are now known as %DN%1%DN - + %DrOlarak biliniyorsunuz %DN%1%DN %Dr%DN%1%DN is now known as %DN%2%DN - + %Dr%DN%1%DN olarak biliniyor %DN%2%DN @@ -4606,9 +4607,9 @@ Unless you *really* know what you do, leave this as ISO-8859-1! %n Operator(s) - + + %n Operatör %n Operatör - diff --git a/src/client/CMakeLists.txt b/src/client/CMakeLists.txt index e7e9e4df..f60f66c5 100644 --- a/src/client/CMakeLists.txt +++ b/src/client/CMakeLists.txt @@ -14,6 +14,7 @@ set(SOURCES buffersettings.cpp bufferviewoverlay.cpp client.cpp + clientaliasmanager.cpp clientbacklogmanager.cpp clientbufferviewconfig.cpp clientbufferviewmanager.cpp @@ -22,6 +23,7 @@ set(SOURCES clientsettings.cpp clientsyncer.cpp clientuserinputhandler.cpp + execwrapper.cpp irclistmodel.cpp messagefilter.cpp messagemodel.cpp @@ -35,6 +37,7 @@ set(MOC_HDRS buffermodel.h bufferviewoverlay.h client.h + clientaliasmanager.h clientbacklogmanager.h clientbufferviewconfig.h clientbufferviewmanager.h @@ -43,6 +46,7 @@ set(MOC_HDRS clientirclisthelper.h clientuserinputhandler.h clientsyncer.h + execwrapper.h irclistmodel.h messagefilter.h messagemodel.h diff --git a/src/client/client.cpp b/src/client/client.cpp index 3d430371..d04e258d 100644 --- a/src/client/client.cpp +++ b/src/client/client.cpp @@ -28,6 +28,7 @@ #include "buffersyncer.h" #include "bufferviewconfig.h" #include "bufferviewoverlay.h" +#include "clientaliasmanager.h" #include "clientbacklogmanager.h" #include "clientbufferviewmanager.h" #include "clientirclisthelper.h" @@ -51,6 +52,11 @@ AccountId Client::_currentCoreAccount = 0; /*** Initialization/destruction ***/ +bool Client::instanceExists() +{ + return instanceptr; +} + Client *Client::instance() { if(!instanceptr) instanceptr = new Client(); @@ -77,11 +83,12 @@ Client::Client(QObject *parent) _networkModel(0), _bufferModel(0), _bufferSyncer(0), + _aliasManager(0), _backlogManager(new ClientBacklogManager(this)), _bufferViewManager(0), _bufferViewOverlay(new BufferViewOverlay(this)), _ircListHelper(new ClientIrcListHelper(this)), - _inputHandler(new ClientUserInputHandler(this)), + _inputHandler(0), _messageModel(0), _messageProcessor(0), _connectedToCore(false), @@ -107,6 +114,7 @@ void Client::init() { _bufferModel = new BufferModel(_networkModel); _messageModel = mainUi()->createMessageModel(this); _messageProcessor = mainUi()->createMessageProcessor(this); + _inputHandler = new ClientUserInputHandler(this); SignalProxy *p = signalProxy(); @@ -268,9 +276,21 @@ void Client::coreIdentityRemoved(IdentityId id) { } } -/*** ***/ +/*** User input handling ***/ + void Client::userInput(const BufferInfo &bufferInfo, const QString &message) { - inputHandler()->handleUserInput(bufferInfo, message); + // we need to make sure that AliasManager is ready before processing input + if(aliasManager() && aliasManager()->isInitialized()) + inputHandler()->handleUserInput(bufferInfo, message); + else + instance()-> _userInputBuffer.append(qMakePair(bufferInfo, message)); +} + +void Client::sendBufferedUserInput() { + for(int i = 0; i < _userInputBuffer.count(); i++) + userInput(_userInputBuffer.at(i).first, _userInputBuffer.at(i).second); + + _userInputBuffer.clear(); } /*** core connection stuff ***/ @@ -305,6 +325,12 @@ void Client::setSyncedToCore() { connect(bufferViewManager(), SIGNAL(initDone()), this, SLOT(createDefaultBufferView())); connect(bufferViewManager(), SIGNAL(viewsInitialized()), this, SLOT(requestInitialBacklogBarrier())); + // create AliasManager + Q_ASSERT(!_aliasManager); + _aliasManager = new ClientAliasManager(this); + connect(aliasManager(), SIGNAL(initDone()), SLOT(sendBufferedUserInput())); + signalProxy()->synchronize(aliasManager()); + _syncedToCore = true; emit connected(); emit coreConnectionStateChanged(true); @@ -360,6 +386,14 @@ void Client::disconnectedFromCore() { _bufferViewManager = 0; } + if(_aliasManager) { + _aliasManager->deleteLater(); + _aliasManager = 0; + } + + // we probably don't want to save pending input for reconnect + _userInputBuffer.clear(); + _messageModel->clear(); _networkModel->clear(); @@ -476,6 +510,12 @@ void Client::logMessage(QtMsgType type, const char *msg) { Quassel::logFatalMessage(msg); } else { QString msgString = QString("%1\n").arg(msg); + + //Check to see if there is an instance around, else we risk recursions + //when calling instance() and creating new ones. + if (!instanceExists()) + return; + instance()->_debugLog << msgString; emit instance()->logUpdated(msgString); } diff --git a/src/client/client.h b/src/client/client.h index ec4ab3a2..0c9922a4 100644 --- a/src/client/client.h +++ b/src/client/client.h @@ -43,6 +43,7 @@ class NetworkModel; class BufferModel; class BufferSyncer; class BufferViewOverlay; +class ClientAliasManager; class ClientBacklogManager; class ClientBufferViewManager; class ClientIrcListHelper; @@ -62,6 +63,7 @@ public: RemoteCore }; + static bool instanceExists(); static Client *instance(); static void destroy(); static void init(AbstractUi *); @@ -102,6 +104,7 @@ public: static inline AbstractMessageProcessor *messageProcessor() { return instance()->_messageProcessor; } static inline SignalProxy *signalProxy() { return instance()->_signalProxy; } + static inline ClientAliasManager *aliasManager() { return instance()->_aliasManager; } static inline ClientBacklogManager *backlogManager() { return instance()->_backlogManager; } static inline ClientIrcListHelper *ircListHelper() { return instance()->_ircListHelper; } static inline ClientBufferViewManager *bufferViewManager() { return instance()->_bufferViewManager; } @@ -189,6 +192,8 @@ private slots: void requestInitialBacklogBarrier(); void createDefaultBufferView(); + void sendBufferedUserInput(); + private: Client(QObject *parent = 0); virtual ~Client(); @@ -205,6 +210,7 @@ private: NetworkModel * _networkModel; BufferModel * _bufferModel; BufferSyncer * _bufferSyncer; + ClientAliasManager *_aliasManager; ClientBacklogManager *_backlogManager; ClientBufferViewManager *_bufferViewManager; BufferViewOverlay *_bufferViewOverlay; @@ -227,6 +233,8 @@ private: QString _debugLogBuffer; QTextStream _debugLog; + QList > _userInputBuffer; + friend class ClientSyncer; }; diff --git a/dev-notes/obsolete/qtopia/qtopiauistyle.h b/src/client/clientaliasmanager.cpp similarity index 82% rename from dev-notes/obsolete/qtopia/qtopiauistyle.h rename to src/client/clientaliasmanager.cpp index 238937fc..e8fc3612 100644 --- a/dev-notes/obsolete/qtopia/qtopiauistyle.h +++ b/src/client/clientaliasmanager.cpp @@ -1,5 +1,5 @@ /*************************************************************************** - * Copyright (C) 2005-08 by the Quassel Project * + * Copyright (C) 2005-09 by the Quassel Project * * devel@quassel-irc.org * * * * This program is free software; you can redistribute it and/or modify * @@ -18,17 +18,16 @@ * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ***************************************************************************/ -#ifndef _QTOPIASTYLE_H_ -#define _QTOPIASTYLE_H_ +#include "clientaliasmanager.h" -#include "uistyle.h" +#include "client.h" -class QtopiaUiStyle : public UiStyle { +ClientAliasManager::ClientAliasManager(QObject *parent) + : AliasManager(parent) +{ - public: - QtopiaUiStyle(); - virtual ~QtopiaUiStyle(); +} -}; - -#endif +const Network *ClientAliasManager::network(NetworkId id) const { + return Client::network(id); +} diff --git a/dev-notes/obsolete/qtopia/main.cpp b/src/client/clientaliasmanager.h similarity index 75% rename from dev-notes/obsolete/qtopia/main.cpp rename to src/client/clientaliasmanager.h index 03c33c29..47ffe071 100644 --- a/dev-notes/obsolete/qtopia/main.cpp +++ b/src/client/clientaliasmanager.h @@ -1,5 +1,5 @@ /*************************************************************************** - * Copyright (C) 2005-08 by the Quassel Project * + * Copyright (C) 2005-09 by the Quassel Project * * devel@quassel-irc.org * * * * This program is free software; you can redistribute it and/or modify * @@ -18,9 +18,22 @@ * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ***************************************************************************/ -#include "qtopiamainwin.h" -#include +#ifndef CLIENTALIASMANAGER_H +#define CLIENTALIASMANAGER_H -QTOPIA_ADD_APPLICATION("Quassel IRC", QtopiaMainWin) -QTOPIA_MAIN +#include "aliasmanager.h" +class ClientAliasManager : public AliasManager { + Q_OBJECT + +public: + explicit ClientAliasManager(QObject *parent = 0); + + inline virtual const QMetaObject *syncMetaObject() const { return &AliasManager::staticMetaObject; } + +protected: + const Network *network(NetworkId) const; + +}; + +#endif //CLIENTALIASMANAGER_H diff --git a/src/client/clientuserinputhandler.cpp b/src/client/clientuserinputhandler.cpp index 296fc1cb..610a7021 100644 --- a/src/client/clientuserinputhandler.cpp +++ b/src/client/clientuserinputhandler.cpp @@ -21,12 +21,16 @@ #include #include "client.h" +#include "clientaliasmanager.h" #include "clientuserinputhandler.h" #include "clientsettings.h" +#include "execwrapper.h" #include "ircuser.h" #include "network.h" -ClientUserInputHandler::ClientUserInputHandler(QObject *parent) : QObject(parent) { +ClientUserInputHandler::ClientUserInputHandler(QObject *parent) +: QObject(parent) +{ TabCompletionSettings s; s.notify("CompletionSuffix", this, SLOT(completionSuffixChanged(QVariant))); completionSuffixChanged(s.completionSuffix()); @@ -41,16 +45,28 @@ void ClientUserInputHandler::completionSuffixChanged(const QVariant &v) { // this would be the place for a client-side hook void ClientUserInputHandler::handleUserInput(const BufferInfo &bufferInfo, const QString &msg) { - // check if we addressed a user and update its timestamp in that case - if(bufferInfo.type() == BufferInfo::ChannelBuffer) { - if(!msg.startsWith('/')) { - if(_nickRx.indexIn(msg) == 0) { - const Network *net = Client::network(bufferInfo.networkId()); - IrcUser *user = net ? net->ircUser(_nickRx.cap(1)) : 0; - if(user) - user->setLastSpokenTo(bufferInfo.bufferId(), QDateTime::currentDateTime().toUTC()); - } + + if(!msg.startsWith('/')) { + if(_nickRx.indexIn(msg) == 0) { + const Network *net = Client::network(bufferInfo.networkId()); + IrcUser *user = net ? net->ircUser(_nickRx.cap(1)) : 0; + if(user) + user->setLastSpokenTo(bufferInfo.bufferId(), QDateTime::currentDateTime().toUTC()); } } - emit sendInput(bufferInfo, msg); + + AliasManager::CommandList clist = Client::aliasManager()->processInput(bufferInfo, msg); + + for(int i = 0; i < clist.count(); i++) { + QString cmd = clist.at(i).second.section(' ', 0, 0).remove(0, 1).toUpper(); + if(cmd == "EXEC") + handleExec(clist.at(i).first, clist.at(i).second.section(' ', 1)); + else + emit sendInput(clist.at(i).first, clist.at(i).second); + } +} + +void ClientUserInputHandler::handleExec(const BufferInfo &bufferInfo, const QString &execString) { + ExecWrapper *exec = new ExecWrapper(this); // gets suicidal when it's done + exec->start(bufferInfo, execString); } diff --git a/src/client/clientuserinputhandler.h b/src/client/clientuserinputhandler.h index bc1b46cc..21d27578 100644 --- a/src/client/clientuserinputhandler.h +++ b/src/client/clientuserinputhandler.h @@ -38,6 +38,8 @@ signals: private slots: void completionSuffixChanged(const QVariant &); + void handleExec(const BufferInfo &bufferInfo, const QString &execStr); + private: QRegExp _nickRx; }; diff --git a/src/client/execwrapper.cpp b/src/client/execwrapper.cpp new file mode 100644 index 00000000..510a4444 --- /dev/null +++ b/src/client/execwrapper.cpp @@ -0,0 +1,126 @@ +/*************************************************************************** +* Copyright (C) 2005-09 by the Quassel Project * +* devel@quassel-irc.org * +* * +* 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) version 3. * +* * +* This program is distributed in the hope that it will be useful, * +* but WITHOUT ANY WARRANTY; without even the implied warranty of * +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * +* GNU General Public License for more details. * +* * +* You should have received a copy of the GNU General Public License * +* along with this program; if not, write to the * +* Free Software Foundation, Inc., * +* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * +***************************************************************************/ + +#include + +#include "execwrapper.h" + +#include "client.h" +#include "messagemodel.h" +#include "quassel.h" + +ExecWrapper::ExecWrapper(QObject* parent) : QObject(parent) { + connect(&_process, SIGNAL(readyReadStandardOutput()), SLOT(processReadStdout())); + connect(&_process, SIGNAL(readyReadStandardError()), SLOT(processReadStderr())); + connect(&_process, SIGNAL(finished(int, QProcess::ExitStatus)), SLOT(processFinished(int, QProcess::ExitStatus))); + connect(&_process, SIGNAL(error(QProcess::ProcessError)), SLOT(processError(QProcess::ProcessError))); + + connect(this, SIGNAL(output(QString)), SLOT(postStdout(QString))); + connect(this, SIGNAL(error(QString)), SLOT(postStderr(QString))); +} + +void ExecWrapper::start(const BufferInfo &info, const QString &command) { + _bufferInfo = info; + QString params; + + QRegExp rx("^\\s*(\\S+)(\\s+(.*))?$"); + if(!rx.exactMatch(command)) { + emit error(tr("Invalid command string for /exec: %1").arg(command)); + } else { + _scriptName = rx.cap(1); + params = rx.cap(3); + } + + // Make sure we don't execute something outside a script dir + if(_scriptName.contains("../") || _scriptName.contains("..\\")) + emit error(tr("Name \"%1\" is invalid: ../ or ..\\ are not allowed!").arg(_scriptName)); + + else { + foreach(QString scriptDir, Quassel::scriptDirPaths()) { + QString fileName = scriptDir + _scriptName; + if(!QFile::exists(fileName)) + continue; + _process.setWorkingDirectory(scriptDir); + _process.start('"' + fileName + "\" " + params); + return; + } + emit error(tr("Could not find script \"%1\"").arg(_scriptName)); + } + + deleteLater(); // self-destruct +} + +void ExecWrapper::postStdout(const QString &msg) { + if(_bufferInfo.isValid()) + Client::userInput(_bufferInfo, msg); +} + +void ExecWrapper::postStderr(const QString &msg) { + if(_bufferInfo.isValid()) + Client::messageModel()->insertErrorMessage(_bufferInfo, msg); +} + +void ExecWrapper::processFinished(int exitCode, QProcess::ExitStatus status) { + if(status == QProcess::CrashExit) { + emit error(tr("Script \"%1\" crashed with exit code %2.").arg(_scriptName).arg(exitCode)); + } + + // empty buffers + if(!_stdoutBuffer.isEmpty()) + foreach(QString msg, _stdoutBuffer.split('\n')) + emit output(msg); + if(!_stderrBuffer.isEmpty()) + foreach(QString msg, _stderrBuffer.split('\n')) + emit error(msg); + + deleteLater(); +} + +void ExecWrapper::processError(QProcess::ProcessError err) { + if(err == QProcess::FailedToStart) + emit error(tr("Script \"%1\" could not start.").arg(_scriptName)); + else + emit error(tr("Script \"%1\" caused error %2.").arg(_scriptName).arg(err)); + + if(_process.state() != QProcess::Running) + deleteLater(); +} + +void ExecWrapper::processReadStdout() { + QString str = QTextCodec::codecForLocale()->toUnicode(_process.readAllStandardOutput()); + str.replace(QRegExp("\r\n?"), "\n"); + _stdoutBuffer.append(str); + int idx; + while((idx = _stdoutBuffer.indexOf('\n')) >= 0) { + emit output(_stdoutBuffer.left(idx)); + _stdoutBuffer = _stdoutBuffer.mid(idx + 1); + } +} + +void ExecWrapper::processReadStderr() { + QString str = QTextCodec::codecForLocale()->toUnicode(_process.readAllStandardError()); + str.replace(QRegExp("\r\n?"), "\n"); + _stderrBuffer.append(str); + int idx; + while((idx = _stderrBuffer.indexOf('\n')) >= 0) { + emit error(_stderrBuffer.left(idx)); + _stderrBuffer = _stderrBuffer.mid(idx + 1); + } +} diff --git a/src/client/execwrapper.h b/src/client/execwrapper.h new file mode 100644 index 00000000..e6d6dce0 --- /dev/null +++ b/src/client/execwrapper.h @@ -0,0 +1,58 @@ +/*************************************************************************** +* Copyright (C) 2005-09 by the Quassel Project * +* devel@quassel-irc.org * +* * +* 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) version 3. * +* * +* This program is distributed in the hope that it will be useful, * +* but WITHOUT ANY WARRANTY; without even the implied warranty of * +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * +* GNU General Public License for more details. * +* * +* You should have received a copy of the GNU General Public License * +* along with this program; if not, write to the * +* Free Software Foundation, Inc., * +* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * +***************************************************************************/ + +#ifndef EXECWRAPPER_H_ +#define EXECWRAPPER_H_ + +#include + +#include "bufferinfo.h" + +class ExecWrapper : public QObject { + Q_OBJECT + +public: + ExecWrapper(QObject *parent = 0); + +public slots: + void start(const BufferInfo &info, const QString &command); + +signals: + void error(const QString &errorMsg); + void output(const QString &out); + +private slots: + void processReadStdout(); + void processReadStderr(); + void processFinished(int exitCode, QProcess::ExitStatus exitStatus); + void processError(QProcess::ProcessError); + + void postStdout(const QString &); + void postStderr(const QString &); + +private: + QProcess _process; + BufferInfo _bufferInfo; + QString _scriptName; + QString _stdoutBuffer; + QString _stderrBuffer; +}; + +#endif diff --git a/src/client/messagemodel.cpp b/src/client/messagemodel.cpp index 91eb769f..58e3108d 100644 --- a/src/client/messagemodel.cpp +++ b/src/client/messagemodel.cpp @@ -348,6 +348,18 @@ void MessageModel::changeOfDay() { _nextDayChange = _nextDayChange.addSecs(86400); } +void MessageModel::insertErrorMessage(BufferInfo bufferInfo, const QString &errorString) { + int idx = messageCount(); + beginInsertRows(QModelIndex(), idx, idx); + Message msg(bufferInfo, Message::Error, errorString); + if(!messagesIsEmpty()) + msg.setMsgId(messageItemAt(idx-1)->msgId()); + else + msg.setMsgId(0); + insertMessage__(idx, msg); + endInsertRows(); +} + void MessageModel::requestBacklog(BufferId bufferId) { if(_messagesWaiting.contains(bufferId)) return; diff --git a/src/client/messagemodel.h b/src/client/messagemodel.h index 0d540cd5..b6b783fb 100644 --- a/src/client/messagemodel.h +++ b/src/client/messagemodel.h @@ -73,6 +73,7 @@ public slots: void requestBacklog(BufferId bufferId); void messagesReceived(BufferId bufferId, int count); void buffersPermanentlyMerged(BufferId bufferId1, BufferId bufferId2); + void insertErrorMessage(BufferInfo bufferInfo, const QString &errorString); protected: // virtual MessageModelItem *createMessageModelItem(const Message &) = 0; diff --git a/src/common/aliasmanager.cpp b/src/common/aliasmanager.cpp index c627e703..b398b8b3 100644 --- a/src/common/aliasmanager.cpp +++ b/src/common/aliasmanager.cpp @@ -18,15 +18,17 @@ * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ***************************************************************************/ -#include "aliasmanager.h" #include #include +#include "aliasmanager.h" +#include "network.h" + AliasManager &AliasManager::operator=(const AliasManager &other) { if(this == &other) return *this; - + SyncableObject::operator=(other); _aliases = other._aliases; return *this; @@ -84,12 +86,106 @@ void AliasManager::addAlias(const QString &name, const QString &expansion) { AliasManager::AliasList AliasManager::defaults() { AliasList aliases; aliases << Alias("j", "/join $0") - << Alias("ns", "/msg nickserv $0") - << Alias("nickserv", "/msg nickserv $0") - << Alias("cs", "/msg chanserv $0") - << Alias("chanserv", "/msg chanserv $0") - << Alias("hs", "/msg hostserv $0") - << Alias("hostserv", "/msg hostserv $0") - << Alias("back", "/quote away"); + << Alias("ns", "/msg nickserv $0") + << Alias("nickserv", "/msg nickserv $0") + << Alias("cs", "/msg chanserv $0") + << Alias("chanserv", "/msg chanserv $0") + << Alias("hs", "/msg hostserv $0") + << Alias("hostserv", "/msg hostserv $0") + << Alias("back", "/quote away"); + +#ifdef Q_OS_LINUX + // let's add aliases for scripts that only run on linux + aliases << Alias("inxi", "/exec inxi $0") + << Alias("sysinfo", "/exec inxi -d"); +#endif + return aliases; } + +AliasManager::CommandList AliasManager::processInput(const BufferInfo &info, const QString &msg) { + CommandList result; + processInput(info, msg, result); + return result; +} + +void AliasManager::processInput(const BufferInfo &info, const QString &msg_, CommandList &list) { + QString msg = msg_; + + // leading slashes indicate there's a command to call unless there is another one in the first section (like a path /proc/cpuinfo) + int secondSlashPos = msg.indexOf('/', 1); + int firstSpacePos = msg.indexOf(' '); + if(!msg.startsWith('/') || (secondSlashPos != -1 && (secondSlashPos < firstSpacePos || firstSpacePos == -1))) { + if(msg.startsWith("//")) + msg.remove(0, 1); // //asdf is transformed to /asdf + msg.prepend("/SAY "); // make sure we only send proper commands to the core + } else { + // check for aliases + QString cmd = msg.section(' ', 0, 0).remove(0, 1).toUpper(); + for(int i = 0; i < count(); i++) { + if((*this)[i].name.toUpper() == cmd) { + expand((*this)[i].expansion, info, msg.section(' ', 1), list); + return; + } + } + } + + list.append(qMakePair(info, msg)); +} + +void AliasManager::expand(const QString &alias, const BufferInfo &bufferInfo, const QString &msg, CommandList &list) { + const Network *net = network(bufferInfo.networkId()); + if(!net) { + // FIXME send error as soon as we have a method for that! + return; + } + + QRegExp paramRangeR("\\$(\\d+)\\.\\.(\\d*)"); + QStringList commands = alias.split(QRegExp("; ?")); + QStringList params = msg.split(' '); + QStringList expandedCommands; + for(int i = 0; i < commands.count(); i++) { + QString command = commands[i]; + + // replace ranges like $1..3 + if(!params.isEmpty()) { + int pos; + while((pos = paramRangeR.indexIn(command)) != -1) { + int start = paramRangeR.cap(1).toInt(); + bool ok; + int end = paramRangeR.cap(2).toInt(&ok); + if(!ok) { + end = params.count(); + } + if(end < start) + command = command.replace(pos, paramRangeR.matchedLength(), QString()); + else { + command = command.replace(pos, paramRangeR.matchedLength(), QStringList(params.mid(start - 1, end - start + 1)).join(" ")); + } + } + } + + for(int j = params.count(); j > 0; j--) { + IrcUser *ircUser = net->ircUser(params[j - 1]); + command = command.replace(QString("$%1:hostname").arg(j), ircUser ? ircUser->host() : QString("*")); + command = command.replace(QString("$%1").arg(j), params[j - 1]); + } + command = command.replace("$0", msg); + command = command.replace("$channelname", bufferInfo.bufferName()); // legacy + command = command.replace("$channel", bufferInfo.bufferName()); + command = command.replace("$currentnick", net->myNick()); // legacy + command = command.replace("$nick", net->myNick()); + expandedCommands << command; + } + + while(!expandedCommands.isEmpty()) { + QString command; + if(expandedCommands[0].trimmed().toLower().startsWith("/wait")) { + command = expandedCommands.join("; "); + expandedCommands.clear(); + } else { + command = expandedCommands.takeFirst(); + } + list.append(qMakePair(bufferInfo, command)); + } +} diff --git a/src/common/aliasmanager.h b/src/common/aliasmanager.h index cc936cda..c72f57dd 100644 --- a/src/common/aliasmanager.h +++ b/src/common/aliasmanager.h @@ -21,9 +21,12 @@ #ifndef ALIASMANAGER_H #define ALIASMANAGER_H +#include + +#include "bufferinfo.h" #include "syncableobject.h" -#include +class Network; class AliasManager : public SyncableObject { Q_OBJECT @@ -31,7 +34,7 @@ class AliasManager : public SyncableObject { public: inline AliasManager(QObject *parent = 0) : SyncableObject(parent) { setAllowClientUpdates(true); } AliasManager &operator=(const AliasManager &other); - + struct Alias { QString name; QString expansion; @@ -45,24 +48,32 @@ public: inline int count() const { return _aliases.count(); } inline void removeAt(int index) { _aliases.removeAt(index); } inline Alias &operator[](int i) { return _aliases[i]; } - inline const Alias &operator[](int i) const { return _aliases[i]; } + inline const Alias &operator[](int i) const { return _aliases.at(i); } inline const AliasList &aliases() const { return _aliases; } static AliasList defaults(); + typedef QList > CommandList; + + CommandList processInput(const BufferInfo &info, const QString &message); + public slots: virtual QVariantMap initAliases() const; virtual void initSetAliases(const QVariantMap &aliases); virtual void addAlias(const QString &name, const QString &expansion); - + protected: void setAliases(const QList &aliases) { _aliases = aliases; } + virtual const Network *network(NetworkId) const = 0; // core and client require different access signals: void aliasAdded(const QString &name, const QString &expansion); - + private: + void processInput(const BufferInfo &info, const QString &message, CommandList &previousCommands); + void expand(const QString &alias, const BufferInfo &bufferInfo, const QString &msg, CommandList &previousCommands); + AliasList _aliases; }; diff --git a/src/common/cliparser.cpp b/src/common/cliparser.cpp index 39be78b1..059ef350 100644 --- a/src/common/cliparser.cpp +++ b/src/common/cliparser.cpp @@ -24,6 +24,8 @@ #include #include +#include + CliParser::CliParser() : AbstractCliParser() { } @@ -148,7 +150,7 @@ bool CliParser::init(const QStringList &args) { } void CliParser::usage() { - qWarning() << "Usage:" << QFileInfo(argsRaw.at(0)).completeBaseName() << "[arguments]"; + std::cout << "Usage: " << qPrintable(QFileInfo(argsRaw.at(0)).completeBaseName()) << " [arguments]" << std::endl; // get size of longName field QStringList keys = argsHash.keys(); @@ -184,7 +186,7 @@ void CliParser::usage() { if(arg.value().type == CliParserArg::CliArgOption && !arg.value().def.isNull()) { output.append(". Default is: ").append(arg.value().def); } - qWarning() << qPrintable(output); + std::cout << qPrintable(output) << std::endl; } } diff --git a/src/common/main.cpp b/src/common/main.cpp index 97e71004..6aff6db3 100644 --- a/src/common/main.cpp +++ b/src/common/main.cpp @@ -84,7 +84,12 @@ int main(int argc, char **argv) { // put shared client&core arguments here cliParser->addSwitch("debug",'d', "Enable debug output"); cliParser->addSwitch("help",'h', "Display this help and exit"); - cliParser->addOption("configdir ", 'c', "Specify the directory holding configuration files, the SQlite database and the SSL Cert"); + cliParser->addSwitch("version", 'v', "Display version information"); +#ifdef BUILD_QTUI + cliParser->addOption("configdir ", 'c', "Specify the directory holding the client configuration"); +#else + cliParser->addOption("configdir ", 'c', "Specify the directory holding configuration files, the SQlite database and the SSL certificate"); +#endif cliParser->addOption("datadir ", 0, "DEPRECATED - Use --configdir instead"); #ifndef BUILD_CORE diff --git a/src/common/quassel.cpp b/src/common/quassel.cpp index 50651bd8..4be4db16 100644 --- a/src/common/quassel.cpp +++ b/src/common/quassel.cpp @@ -20,6 +20,7 @@ #include "quassel.h" +#include #include #include @@ -84,6 +85,11 @@ bool Quassel::init() { return false; } + if(isOptionSet("version")) { + std::cout << qPrintable("Quassel IRC: " + Quassel::buildInfo().plainVersionString) << std::endl; + return false; + } + DEBUG = isOptionSet("debug"); return true; } @@ -336,6 +342,13 @@ QString Quassel::findDataFilePath(const QString &fileName) { return QString(); } +QStringList Quassel::scriptDirPaths() { + QStringList res(configDirPath() + "scripts/"); + foreach(QString path, dataDirPaths()) + res << path + "scripts/"; + return res; +} + QString Quassel::translationDirPath() { if(_translationDirPath.isEmpty()) { // We support only one translation dir; fallback mechanisms wouldn't work else. diff --git a/src/common/quassel.h b/src/common/quassel.h index 7e78f73d..53d9e0bf 100644 --- a/src/common/quassel.h +++ b/src/common/quassel.h @@ -84,6 +84,12 @@ public: static QString translationDirPath(); + //! Returns a list of directories we look for scripts in + /** We look for a subdirectory named "scripts" in the configdir and in all datadir paths. + * \return A list of directory paths containing executable scripts for /exec + */ + static QStringList scriptDirPaths(); + static void loadTranslation(const QLocale &locale); static inline void setCliParser(AbstractCliParser *cliParser); diff --git a/src/core/core.cpp b/src/core/core.cpp index 003f6daf..56784298 100644 --- a/src/core/core.cpp +++ b/src/core/core.cpp @@ -668,7 +668,13 @@ void Core::setupInternalClientSession(SignalProxy *proxy) { setupCoreForInternalUsage(); } - UserId uid = _storage->internalUser(); + UserId uid; + if(_storage) { + uid = _storage->internalUser(); + } else { + qWarning() << "Core::setupInternalClientSession(): You're trying to run monolithic Quassel with an unusable Backend! Go fix it!"; + return; + } // Find or create session for validated user SessionThread *sess; diff --git a/src/core/corealiasmanager.cpp b/src/core/corealiasmanager.cpp index 78044db8..b1e7f2f2 100644 --- a/src/core/corealiasmanager.cpp +++ b/src/core/corealiasmanager.cpp @@ -21,6 +21,7 @@ #include "corealiasmanager.h" #include "core.h" +#include "corenetwork.h" #include "coresession.h" CoreAliasManager::CoreAliasManager(CoreSession *parent) @@ -33,13 +34,11 @@ CoreAliasManager::CoreAliasManager(CoreSession *parent) return; } - QVariantMap aliases = Core::getUserSetting(session->user(), "Aliases").toMap(); initSetAliases(Core::getUserSetting(session->user(), "Aliases").toMap()); if(isEmpty()) loadDefaults(); } - CoreAliasManager::~CoreAliasManager() { CoreSession *session = qobject_cast(parent()); if(!session) { @@ -50,6 +49,9 @@ CoreAliasManager::~CoreAliasManager() { Core::setUserSetting(session->user(), "Aliases", initAliases()); } +const Network *CoreAliasManager::network(NetworkId id) const { + return qobject_cast(parent())->network(id); +} void CoreAliasManager::loadDefaults() { foreach(Alias alias, AliasManager::defaults()) { diff --git a/src/core/corealiasmanager.h b/src/core/corealiasmanager.h index ab2c1e57..d5739c6f 100644 --- a/src/core/corealiasmanager.h +++ b/src/core/corealiasmanager.h @@ -29,14 +29,17 @@ class CoreAliasManager : public AliasManager { Q_OBJECT public: - CoreAliasManager(CoreSession *parent = 0); + explicit CoreAliasManager(CoreSession *parent); ~CoreAliasManager(); inline virtual const QMetaObject *syncMetaObject() const { return &AliasManager::staticMetaObject; } +protected: + const Network *network(NetworkId) const; + private: void loadDefaults(); - + }; #endif //COREALIASMANAGER_H diff --git a/src/core/corenetwork.cpp b/src/core/corenetwork.cpp index 5fd5ed98..b1278ca9 100644 --- a/src/core/corenetwork.cpp +++ b/src/core/corenetwork.cpp @@ -192,6 +192,7 @@ void CoreNetwork::disconnectFromIrc(bool requested, const QString &reason, bool _autoReconnectCount = 0; // prohibiting auto reconnect } disablePingTimeout(); + _msgQueue.clear(); IrcUser *me_ = me(); if(me_) { @@ -327,10 +328,10 @@ void CoreNetwork::socketInitialized() { } // TokenBucket to avoid sending too much at once - _messagesPerSecond = 1; + _messageDelay = 2200; // this seems to be a safe value (2.2 seconds delay) _burstSize = 5; - _tokenBucket = 5; // init with a full bucket - _tokenBucketTimer.start(_messagesPerSecond * 1000); + _tokenBucket = _burstSize; // init with a full bucket + _tokenBucketTimer.start(_messageDelay); if(!server.password.isEmpty()) { putRawLine(serverEncode(QString("PASS %1").arg(server.password))); @@ -348,6 +349,7 @@ void CoreNetwork::socketInitialized() { void CoreNetwork::socketDisconnected() { disablePingTimeout(); + _msgQueue.clear(); _autoWhoCycleTimer.stop(); _autoWhoTimer.stop(); @@ -525,6 +527,10 @@ void CoreNetwork::doAutoReconnect() { void CoreNetwork::sendPing() { uint now = QDateTime::currentDateTime().toTime_t(); + if(_pingCount != 0) { + qDebug() << "UserId:" << userId() << "Network:" << networkName() << "missed" << _pingCount << "pings." + << "BA:" << socket.bytesAvailable() << "BTW:" << socket.bytesToWrite(); + } if(_pingCount >= _maxPingCount && now - _lastPingTime <= (uint)(_pingTimer.interval() / 1000) + 1) { // the second check compares the actual elapsed time since the last ping and the pingTimer interval // if the interval is shorter then the actual elapsed time it means that this thread was somehow blocked diff --git a/src/core/corenetwork.h b/src/core/corenetwork.h index dbb8a5e2..d7ebd449 100644 --- a/src/core/corenetwork.h +++ b/src/core/corenetwork.h @@ -194,7 +194,7 @@ private: QTimer _autoWhoTimer, _autoWhoCycleTimer; QTimer _tokenBucketTimer; - int _messagesPerSecond; // token refill speed + int _messageDelay; // token refill speed in ms int _burstSize; // size of the token bucket int _tokenBucket; // the virtual bucket that holds the tokens QList _msgQueue; diff --git a/src/core/postgresqlstorage.cpp b/src/core/postgresqlstorage.cpp index bd1e089e..13aa8c94 100644 --- a/src/core/postgresqlstorage.cpp +++ b/src/core/postgresqlstorage.cpp @@ -1067,7 +1067,7 @@ bool PostgreSqlStorage::mergeBuffersPermanently(const UserId &user, const Buffer } QSqlQuery checkQuery(db); - checkQuery.prepare("SELECT count(*) FROM buffer" + checkQuery.prepare("SELECT count(*) FROM buffer " "WHERE userid = :userid AND bufferid IN (:buffer1, :buffer2)"); checkQuery.bindValue(":userid", user.toInt()); checkQuery.bindValue(":buffer1", bufferId1.toInt()); diff --git a/src/core/sqlitestorage.cpp b/src/core/sqlitestorage.cpp index fcc52adf..6b795f28 100644 --- a/src/core/sqlitestorage.cpp +++ b/src/core/sqlitestorage.cpp @@ -152,53 +152,71 @@ void SqliteStorage::renameUser(UserId user, const QString &newName) { } UserId SqliteStorage::validateUser(const QString &user, const QString &password) { - QSqlQuery query(logDb()); - query.prepare(queryString("select_authuser")); - query.bindValue(":username", user); - query.bindValue(":password", cryptedPassword(password)); - - lockForRead(); - safeExec(query); - - if(query.first()) { - unlock(); - return query.value(0).toInt(); - } else { - unlock(); - return 0; + UserId userId; + + // this scope ensures that the query is freed in sqlite before we call unlock() + // this ensures that our thread doesn't hold a internal after unlock is called + // (see sqlites doc on implicit locking for details) + { + QSqlQuery query(logDb()); + query.prepare(queryString("select_authuser")); + query.bindValue(":username", user); + query.bindValue(":password", cryptedPassword(password)); + + lockForRead(); + safeExec(query); + + if(query.first()) { + userId = query.value(0).toInt(); + } } + unlock(); + + return userId; } UserId SqliteStorage::getUserId(const QString &username) { - QSqlQuery query(logDb()); - query.prepare(queryString("select_userid")); - query.bindValue(":username", username); + UserId userId; - lockForRead(); - safeExec(query); + // this scope ensures that the query is freed in sqlite before we call unlock() + // this ensures that our thread doesn't hold a internal after unlock is called + // (see sqlites doc on implicit locking for details) + { + QSqlQuery query(logDb()); + query.prepare(queryString("select_userid")); + query.bindValue(":username", username); - if(query.first()) { - unlock(); - return query.value(0).toInt(); - } else { - unlock(); - return 0; + lockForRead(); + safeExec(query); + + if(query.first()) { + userId = query.value(0).toInt(); + } } + unlock(); + + return userId; } UserId SqliteStorage::internalUser() { - QSqlQuery query(logDb()); - query.prepare(queryString("select_internaluser")); - lockForRead(); - safeExec(query); - - if(query.first()) { - unlock(); - return query.value(0).toInt(); - } else { - unlock(); - return 0; + UserId userId; + + // this scope ensures that the query is freed in sqlite before we call unlock() + // this ensures that our thread doesn't hold a internal after unlock is called + // (see sqlites doc on implicit locking for details) + { + QSqlQuery query(logDb()); + query.prepare(queryString("select_internaluser")); + lockForRead(); + safeExec(query); + + if(query.first()) { + userId = query.value(0).toInt(); + } } + unlock(); + + return userId; } void SqliteStorage::delUser(UserId user) { @@ -442,7 +460,7 @@ QList SqliteStorage::identities(UserId user) { QList identities; QSqlDatabase db = logDb(); db.transaction(); - + QSqlQuery query(db); query.prepare(queryString("select_identities")); query.bindValue(":userid", user.toInt()); @@ -498,7 +516,7 @@ NetworkId SqliteStorage::createNetwork(UserId user, const NetworkInfo &info) { QSqlDatabase db = logDb(); db.transaction(); - + QSqlQuery query(db); query.prepare(queryString("insert_network")); query.bindValue(":userid", user.toInt()); @@ -526,7 +544,7 @@ NetworkId SqliteStorage::createNetwork(UserId user, const NetworkInfo &info) { return NetworkId(); } } - + db.commit(); unlock(); return networkId; @@ -741,7 +759,7 @@ QList SqliteStorage::connectedNetworks(UserId user) { QSqlDatabase db = logDb(); db.transaction(); - + QSqlQuery query(db); query.prepare(queryString("select_connected_networks")); query.bindValue(":userid", user.toInt()); @@ -1236,7 +1254,7 @@ bool SqliteStorage::logMessages(MessageList &msgs) { QSqlDatabase db = logDb(); db.transaction(); - QSet senders; + QSet senders; QSqlQuery addSenderQuery(db); addSenderQuery.prepare(queryString("insert_sender")); diff --git a/src/core/userinputhandler.cpp b/src/core/userinputhandler.cpp index 8fe87b03..1cac5aad 100644 --- a/src/core/userinputhandler.cpp +++ b/src/core/userinputhandler.cpp @@ -33,23 +33,17 @@ UserInputHandler::UserInputHandler(CoreNetwork *parent) { } -void UserInputHandler::handleUserInput(const BufferInfo &bufferInfo, const QString &msg_) { - if(msg_.isEmpty()) +void UserInputHandler::handleUserInput(const BufferInfo &bufferInfo, const QString &msg) { + if(msg.isEmpty()) return; - QString cmd; - QString msg = msg_; - // leading slashes indicate there's a command to call unless there is another one in the first section (like a path /proc/cpuinfo) - int secondSlashPos = msg.indexOf('/', 1); - int firstSpacePos = msg.indexOf(' '); - if(!msg.startsWith('/') || (secondSlashPos != -1 && (secondSlashPos < firstSpacePos || firstSpacePos == -1))) { - if(msg.startsWith("//")) - msg.remove(0, 1); // //asdf is transformed to /asdf - cmd = QString("SAY"); - } else { - cmd = msg.section(' ', 0, 0).remove(0, 1).toUpper(); - msg = msg.section(' ', 1); + + AliasManager::CommandList list = coreSession()->aliasManager().processInput(bufferInfo, msg); + + for(int i = 0; i < list.count(); i++) { + QString cmd = list.at(i).second.section(' ', 0, 0).remove(0, 1).toUpper(); + QString payload = list.at(i).second.section(' ', 1); + handle(cmd, Q_ARG(BufferInfo, list.at(i).first), Q_ARG(QString, payload)); } - handle(cmd, Q_ARG(BufferInfo, bufferInfo), Q_ARG(QString, msg)); } // ==================== @@ -392,65 +386,10 @@ void UserInputHandler::handleWhowas(const BufferInfo &bufferInfo, const QString } void UserInputHandler::defaultHandler(QString cmd, const BufferInfo &bufferInfo, const QString &msg) { - for(int i = 0; i < coreSession()->aliasManager().count(); i++) { - if(coreSession()->aliasManager()[i].name.toLower() == cmd.toLower()) { - expand(coreSession()->aliasManager()[i].expansion, bufferInfo, msg); - return; - } - } + Q_UNUSED(bufferInfo); emit displayMsg(Message::Error, BufferInfo::StatusBuffer, "", QString("Error: %1 %2").arg(cmd, msg)); } -void UserInputHandler::expand(const QString &alias, const BufferInfo &bufferInfo, const QString &msg) { - QRegExp paramRangeR("\\$(\\d+)\\.\\.(\\d*)"); - QStringList commands = alias.split(QRegExp("; ?")); - QStringList params = msg.split(' '); - QStringList expandedCommands; - for(int i = 0; i < commands.count(); i++) { - QString command = commands[i]; - - // replace ranges like $1..3 - if(!params.isEmpty()) { - int pos; - while((pos = paramRangeR.indexIn(command)) != -1) { - int start = paramRangeR.cap(1).toInt(); - bool ok; - int end = paramRangeR.cap(2).toInt(&ok); - if(!ok) { - end = params.count(); - } - if(end < start) - command = command.replace(pos, paramRangeR.matchedLength(), QString()); - else { - command = command.replace(pos, paramRangeR.matchedLength(), QStringList(params.mid(start - 1, end - start + 1)).join(" ")); - } - } - } - - for(int j = params.count(); j > 0; j--) { - IrcUser *ircUser = network()->ircUser(params[j - 1]); - command = command.replace(QString("$%1:hostname").arg(j), ircUser ? ircUser->host() : QString("*")); - command = command.replace(QString("$%1").arg(j), params[j - 1]); - } - command = command.replace("$0", msg); - command = command.replace("$channelname", bufferInfo.bufferName()); - command = command.replace("$currentnick", network()->myNick()); - expandedCommands << command; - } - - while(!expandedCommands.isEmpty()) { - QString command; - if(expandedCommands[0].trimmed().toLower().startsWith("/wait")) { - command = expandedCommands.join("; "); - expandedCommands.clear(); - } else { - command = expandedCommands.takeFirst(); - } - handleUserInput(bufferInfo, command); - } -} - - void UserInputHandler::putPrivmsg(const QByteArray &target, const QByteArray &message) { static const char *cmd = "PRIVMSG"; int overrun = lastParamOverrun(cmd, QList() << message); diff --git a/src/core/userinputhandler.h b/src/core/userinputhandler.h index 5df26864..2d207255 100644 --- a/src/core/userinputhandler.h +++ b/src/core/userinputhandler.h @@ -73,7 +73,6 @@ protected: void timerEvent(QTimerEvent *event); private: - void expand(const QString &alias, const BufferInfo &bufferInfo, const QString &msg); void banOrUnban(const BufferInfo &bufferInfo, const QString &text, bool ban); void putPrivmsg(const QByteArray &target, const QByteArray &message); int lastParamOverrun(const QString &cmd, const QList ¶ms); diff --git a/src/qtui/chatitem.cpp b/src/qtui/chatitem.cpp index 934fadf3..dd23c5cb 100644 --- a/src/qtui/chatitem.cpp +++ b/src/qtui/chatitem.cpp @@ -413,7 +413,7 @@ void ContentsChatItem::doLayout(QTextLayout *layout) const { QList ContentsChatItem::findClickables() const { // For matching URLs static QString urlEnd("(?:>|[,.;:\"]*\\s|\\b|$)"); - static QString urlChars("(?:[,.;:]*[\\w\\-~@/?&=+$()!%#*|{}\\[\\]])"); + static QString urlChars("(?:[,.;:]*[\\w\\-~@/?&=+$()!%#*|{}\\[\\]'])"); static QRegExp regExp[] = { // URL diff --git a/src/qtui/inputwidget.cpp b/src/qtui/inputwidget.cpp index 71f124c8..737387fb 100644 --- a/src/qtui/inputwidget.cpp +++ b/src/qtui/inputwidget.cpp @@ -62,7 +62,7 @@ void InputWidget::setCustomFont(const QVariant &v) { QFont font = v.value(); if(font.family().isEmpty()) font = QApplication::font(); - ui.inputEdit->setFont(font); + ui.inputEdit->setCustomFont(font); } void InputWidget::currentChanged(const QModelIndex ¤t, const QModelIndex &previous) { diff --git a/src/qtui/mainwin.cpp b/src/qtui/mainwin.cpp index 99fe6d52..5a484fe0 100644 --- a/src/qtui/mainwin.cpp +++ b/src/qtui/mainwin.cpp @@ -240,7 +240,7 @@ void MainWin::setupActions() { connect(lockAct, SIGNAL(toggled(bool)), SLOT(on_actionLockLayout_toggled(bool))); coll->addAction("ToggleSearchBar", new Action(SmallIcon("edit-find"), tr("Show &Search Bar"), coll, - 0, 0, tr("Ctrl+F")))->setCheckable(true); + 0, 0, QKeySequence::Find))->setCheckable(true); coll->addAction("ShowAwayLog", new Action(tr("Show Away Log"), coll, this, SLOT(showAwayLog()))); coll->addAction("ToggleStatusBar", new Action(tr("Show Status &Bar"), coll, diff --git a/src/qtui/qtui.cpp b/src/qtui/qtui.cpp index c1ed4aa0..2efdf72e 100644 --- a/src/qtui/qtui.cpp +++ b/src/qtui/qtui.cpp @@ -21,7 +21,6 @@ #include "qtui.h" #include "abstractnotificationbackend.h" -#include "actioncollection.h" #include "chatlinemodel.h" #include "contextmenuactionprovider.h" #include "mainwin.h" @@ -32,7 +31,6 @@ #include "types.h" #include "util.h" -QHash QtUi::_actionCollections; QPointer QtUi::_instance = 0; QPointer QtUi::_mainWin = 0; QList QtUi::_notificationBackends; @@ -55,6 +53,8 @@ QtUi::QtUi() : GraphicalUi() { _mainWin = new MainWin(); _style = new QtUiStyle; + setMainWidget(_mainWin); + connect(_mainWin, SIGNAL(connectToCore(const QVariantMap &)), this, SIGNAL(connectToCore(const QVariantMap &))); connect(_mainWin, SIGNAL(disconnectFromCore()), this, SIGNAL(disconnectFromCore())); } @@ -69,15 +69,6 @@ void QtUi::init() { _mainWin->init(); } -ActionCollection *QtUi::actionCollection(const QString &category) { - if(_actionCollections.contains(category)) - return _actionCollections.value(category); - ActionCollection *coll = new ActionCollection(mainWindow()); - coll->addAssociatedWidget(mainWindow()); - _actionCollections.insert(category, coll); - return coll; -} - MessageModel *QtUi::createMessageModel(QObject *parent) { return new ChatLineModel(parent); } diff --git a/src/qtui/qtui.h b/src/qtui/qtui.h index 77916ce2..1e2144c2 100644 --- a/src/qtui/qtui.h +++ b/src/qtui/qtui.h @@ -26,7 +26,6 @@ #include "abstractnotificationbackend.h" #include "mainwin.h" -class ActionCollection; class MainWin; class MessageModel; class QtUiMessageProcessor; @@ -50,13 +49,6 @@ public: inline static QtUiStyle *style(); inline static MainWin *mainWindow(); - //! Access global ActionCollections. - /** These ActionCollections are associated with the main window, i.e. they contain global - * actions (and thus, shortcuts). Widgets providing application-wide shortcuts should - * create appropriate Action objects using QtUi::actionCollection(cat)->add\(). - * @param category The category (default: "General") - */ - static ActionCollection *actionCollection(const QString &category = "General"); /* Notifications */ @@ -80,7 +72,6 @@ protected slots: private: static QPointer _instance; static QPointer _mainWin; - static QHash _actionCollections; static QtUiStyle *_style; static QList _notificationBackends; static QList _notifications; diff --git a/src/qtui/settingsdlg.cpp b/src/qtui/settingsdlg.cpp index f260fb09..d1db2cef 100644 --- a/src/qtui/settingsdlg.cpp +++ b/src/qtui/settingsdlg.cpp @@ -95,8 +95,15 @@ void SettingsDlg::selectPage(SettingsPage *sp) { } if(sp != currentPage()) { - ui.pageTitle->setText(sp->title()); - setWindowTitle(tr("Configure %1").arg(sp->title())); + if(sp->title().isEmpty()) { + ui.pageTitle->setText(sp->category()); + setWindowTitle(tr("Configure %1").arg(sp->category())); + } + else { + ui.pageTitle->setText(sp->title()); + setWindowTitle(tr("Configure %1").arg(sp->title())); + } + ui.settingsStack->setCurrentWidget(sp); _currentPage = sp; } diff --git a/src/qtui/settingspages/aliasesmodel.cpp b/src/qtui/settingspages/aliasesmodel.cpp index 251e9e26..416414d5 100644 --- a/src/qtui/settingspages/aliasesmodel.cpp +++ b/src/qtui/settingspages/aliasesmodel.cpp @@ -28,11 +28,13 @@ AliasesModel::AliasesModel(QObject *parent) : QAbstractItemModel(parent), - _configChanged(false) + _configChanged(false), + _modelReady(false) { // we need this signal for future connects to reset the data; connect(Client::instance(), SIGNAL(connected()), this, SLOT(clientConnected())); connect(Client::instance(), SIGNAL(disconnected()), this, SLOT(clientDisconnected())); + if(Client::isConnected()) clientConnected(); else @@ -40,6 +42,9 @@ AliasesModel::AliasesModel(QObject *parent) } QVariant AliasesModel::data(const QModelIndex &index, int role) const { + if(!_modelReady) + return QVariant(); + if(!index.isValid() || index.row() >= rowCount() || index.column() >= columnCount()) return QVariant(); @@ -58,8 +63,8 @@ QVariant AliasesModel::data(const QModelIndex &index, int role) const { " - $i.. represents all parameters from i on separated by spaces.
" " - $i:hostname represents the hostname of the user identified by the i'th parameter or a * if unknown.
" " - $0 the whole string.
" - " - $currentnick your current nickname
" - " - $channelname the name of the selected channel

" + " - $nick your current nickname
" + " - $channel the name of the selected channel

" "Multiple commands can be separated with semicolons

" "Example: \"Test $1; Test $2; Test All $0\" will be expanded to three separate messages \"Test 1\", \"Test 2\" and \"Test All 1 2 3\" when called like /test 1 2 3"; default: @@ -81,13 +86,16 @@ QVariant AliasesModel::data(const QModelIndex &index, int role) const { } bool AliasesModel::setData(const QModelIndex &index, const QVariant &value, int role) { + if(!_modelReady) + return false; + if(!index.isValid() || index.row() >= rowCount() || index.column() >= columnCount() || role != Qt::EditRole) return false; QString newValue = value.toString(); if(newValue.isEmpty()) return false; - + switch(index.column()) { case 0: if(aliasManager().contains(newValue)) { @@ -118,6 +126,9 @@ void AliasesModel::newAlias() { } void AliasesModel::loadDefaults() { + if(!_modelReady) + return; + AliasManager &manager = cloneAliasManager(); if(!manager.isEmpty()) { @@ -157,8 +168,8 @@ Qt::ItemFlags AliasesModel::flags(const QModelIndex &index) const { QVariant AliasesModel::headerData(int section, Qt::Orientation orientation, int role) const { QStringList header; header << tr("Alias") - << tr("Expansion"); - + << tr("Expansion"); + if(orientation == Qt::Horizontal && role == Qt::DisplayRole) return header[section]; @@ -178,19 +189,19 @@ const AliasManager &AliasesModel::aliasManager() const { if(_configChanged) return _clonedAliasManager; else - return _aliasManager; + return *Client::aliasManager(); } AliasManager &AliasesModel::aliasManager() { if(_configChanged) return _clonedAliasManager; else - return _aliasManager; + return *Client::aliasManager(); } AliasManager &AliasesModel::cloneAliasManager() { if(!_configChanged) { - _clonedAliasManager = _aliasManager; + _clonedAliasManager = *Client::aliasManager(); _configChanged = true; emit configChanged(true); } @@ -200,7 +211,7 @@ AliasManager &AliasesModel::cloneAliasManager() { void AliasesModel::revert() { if(!_configChanged) return; - + _configChanged = false; emit configChanged(false); reset(); @@ -210,26 +221,28 @@ void AliasesModel::commit() { if(!_configChanged) return; - _aliasManager.requestUpdate(_clonedAliasManager.toVariantMap()); + Client::aliasManager()->requestUpdate(_clonedAliasManager.toVariantMap()); revert(); -} +} void AliasesModel::initDone() { + _modelReady = true; reset(); emit modelReady(true); } void AliasesModel::clientConnected() { - _aliasManager = AliasManager(); - Client::signalProxy()->synchronize(&_aliasManager); - connect(&_aliasManager, SIGNAL(initDone()), this, SLOT(initDone())); - connect(&_aliasManager, SIGNAL(updated(const QVariantMap &)), this, SLOT(revert())); + connect(Client::aliasManager(), SIGNAL(updated(QVariantMap)), SLOT(revert())); + if(Client::aliasManager()->isInitialized()) + initDone(); + else + connect(Client::aliasManager(), SIGNAL(initDone()), SLOT(initDone())); } void AliasesModel::clientDisconnected() { - // clear alias managers - _aliasManager = AliasManager(); - _clonedAliasManager = AliasManager(); + // clear + _clonedAliasManager = ClientAliasManager(); + _modelReady = false; reset(); emit modelReady(false); } diff --git a/src/qtui/settingspages/aliasesmodel.h b/src/qtui/settingspages/aliasesmodel.h index c2b8b2eb..74a0cfd6 100644 --- a/src/qtui/settingspages/aliasesmodel.h +++ b/src/qtui/settingspages/aliasesmodel.h @@ -24,7 +24,7 @@ #include #include -#include "aliasmanager.h" +#include "clientaliasmanager.h" class AliasesModel : public QAbstractItemModel { Q_OBJECT @@ -43,10 +43,11 @@ public: inline QModelIndex parent(const QModelIndex &) const { return QModelIndex(); } - inline int rowCount(const QModelIndex &parent = QModelIndex()) const { Q_UNUSED(parent) return aliasManager().count(); } - inline int columnCount(const QModelIndex &parent = QModelIndex()) const { Q_UNUSED(parent) return 2; } + inline int rowCount(const QModelIndex &parent = QModelIndex()) const; + inline int columnCount(const QModelIndex &parent = QModelIndex()) const; inline bool configChanged() const { return _configChanged; } + inline bool isReady() const { return _modelReady; } public slots: void newAlias(); @@ -58,11 +59,11 @@ public slots: signals: void configChanged(bool); void modelReady(bool); - + private: - AliasManager _aliasManager; - AliasManager _clonedAliasManager; + ClientAliasManager _clonedAliasManager; bool _configChanged; + bool _modelReady; const AliasManager &aliasManager() const; AliasManager &aliasManager(); @@ -74,4 +75,16 @@ private slots: void initDone(); }; +// Inlines +int AliasesModel::rowCount(const QModelIndex &parent) const { + Q_UNUSED(parent); + return isReady() ? aliasManager().count() : 0; +} + +int AliasesModel::columnCount(const QModelIndex &parent) const { + Q_UNUSED(parent); + return isReady() ? 2 : 0; +} + + #endif //ALIASESMODEL_H diff --git a/src/qtui/settingspages/aliasessettingspage.cpp b/src/qtui/settingspages/aliasessettingspage.cpp index 1b35fb08..8ffd30a4 100644 --- a/src/qtui/settingspages/aliasessettingspage.cpp +++ b/src/qtui/settingspages/aliasessettingspage.cpp @@ -45,6 +45,8 @@ AliasesSettingsPage::AliasesSettingsPage(QWidget *parent) connect(ui.deleteAliasButton, SIGNAL(clicked()), this, SLOT(deleteSelectedAlias())); connect(&_aliasesModel, SIGNAL(configChanged(bool)), this, SLOT(setChangedState(bool))); connect(&_aliasesModel, SIGNAL(modelReady(bool)), this, SLOT(enableDialog(bool))); + + enableDialog(_aliasesModel.isReady()); } void AliasesSettingsPage::load() { @@ -64,6 +66,7 @@ void AliasesSettingsPage::save() { void AliasesSettingsPage::enableDialog(bool enabled) { ui.newAliasButton->setEnabled(enabled); ui.deleteAliasButton->setEnabled(enabled); + setEnabled(enabled); } void AliasesSettingsPage::deleteSelectedAlias() { diff --git a/src/qtui/settingspages/appearancesettingspage.cpp b/src/qtui/settingspages/appearancesettingspage.cpp index c6a8b455..9a699120 100644 --- a/src/qtui/settingspages/appearancesettingspage.cpp +++ b/src/qtui/settingspages/appearancesettingspage.cpp @@ -33,7 +33,8 @@ #include AppearanceSettingsPage::AppearanceSettingsPage(QWidget *parent) - : SettingsPage(tr("Appearance"), QString(), parent) + : SettingsPage(tr("Appearance"), QString(), parent), + _fontsChanged(false) { ui.setupUi(this); initStyleComboBox(); @@ -88,6 +89,10 @@ void AppearanceSettingsPage::defaults() { loadFonts(Settings::Default); _fontsChanged = true; + + ui.showWebPreview->setChecked(true); + ui.showUserStateIcons->setChecked(true); + widgetHasChanged(); } @@ -95,13 +100,14 @@ void AppearanceSettingsPage::load() { QtUiSettings uiSettings; // Gui Style - settings["Style"] = uiSettings.value("Style", QString("")); - if(settings["Style"].toString() == "") { + QString style = uiSettings.value("Style", QString("")).toString(); + if(style.isEmpty()) { ui.styleComboBox->setCurrentIndex(0); } else { - ui.styleComboBox->setCurrentIndex(ui.styleComboBox->findText(settings["Style"].toString(), Qt::MatchExactly)); - QApplication::setStyle(settings["Style"].toString()); + ui.styleComboBox->setCurrentIndex(ui.styleComboBox->findText(style, Qt::MatchExactly)); + QApplication::setStyle(style); } + ui.styleComboBox->setProperty("storedValue", ui.styleComboBox->currentIndex()); // Language QLocale locale = uiSettings.value("Locale", QLocale::system()).value(); @@ -111,6 +117,7 @@ void AppearanceSettingsPage::load() { ui.languageComboBox->setCurrentIndex(1); else ui.languageComboBox->setCurrentIndex(ui.languageComboBox->findText(QLocale::languageToString(locale.language()), Qt::MatchExactly)); + ui.languageComboBox->setProperty("storedValue", ui.languageComboBox->currentIndex()); Quassel::loadTranslation(selectedLocale()); ChatViewSettings chatViewSettings; @@ -226,7 +233,8 @@ void AppearanceSettingsPage::widgetHasChanged() { bool AppearanceSettingsPage::testHasChanged() { if(_fontsChanged) return true; // comparisons are nasty for now - if(settings["Style"].toString() != ui.styleComboBox->currentText()) return true; + if(ui.styleComboBox->currentIndex() != ui.styleComboBox->property("storedValue").toInt()) return true; + if(selectedLocale() != QLocale()) return true; // QLocale() returns the default locale (manipulated via loadTranslation()) if(SettingsPage::hasChanged(ui.showWebPreview)) return true; diff --git a/src/uisupport/graphicalui.cpp b/src/uisupport/graphicalui.cpp index 796eb214..abd8cd17 100644 --- a/src/uisupport/graphicalui.cpp +++ b/src/uisupport/graphicalui.cpp @@ -20,15 +20,33 @@ #include "graphicalui.h" +#include "actioncollection.h" #include "contextmenuactionprovider.h" +QWidget *GraphicalUi::_mainWidget = 0; +QHash GraphicalUi::_actionCollections; ContextMenuActionProvider *GraphicalUi::_contextMenuActionProvider = 0; ToolBarActionProvider *GraphicalUi::_toolBarActionProvider = 0; -GraphicalUi::GraphicalUi(QObject *parent) : AbstractUi(parent) { +GraphicalUi::GraphicalUi(QObject *parent) : AbstractUi(parent) +{ } +ActionCollection *GraphicalUi::actionCollection(const QString &category) { + if(_actionCollections.contains(category)) + return _actionCollections.value(category); + ActionCollection *coll = new ActionCollection(_mainWidget); + if(_mainWidget) + coll->addAssociatedWidget(_mainWidget); + _actionCollections.insert(category, coll); + return coll; +} + +void GraphicalUi::setMainWidget(QWidget *widget) { + _mainWidget = widget; +} + void GraphicalUi::setContextMenuActionProvider(ContextMenuActionProvider *provider) { _contextMenuActionProvider = provider; } diff --git a/src/uisupport/graphicalui.h b/src/uisupport/graphicalui.h index b4f8669f..392075eb 100644 --- a/src/uisupport/graphicalui.h +++ b/src/uisupport/graphicalui.h @@ -23,6 +23,7 @@ #include "abstractui.h" +class ActionCollection; class ContextMenuActionProvider; class ToolBarActionProvider; @@ -32,14 +33,27 @@ class GraphicalUi : public AbstractUi { public: GraphicalUi(QObject *parent = 0); + //! Access global ActionCollections. + /** These ActionCollections are associated with the main window, i.e. they contain global + * actions (and thus, shortcuts). Widgets providing application-wide shortcuts should + * create appropriate Action objects using GraphicalUi::actionCollection(cat)->add\(). + * @param category The category (default: "General") + */ + static ActionCollection *actionCollection(const QString &category = "General"); + inline static ContextMenuActionProvider *contextMenuActionProvider(); inline static ToolBarActionProvider *toolBarActionProvider(); protected: + //! This is the widget we associate global actions with, typically the main window + void setMainWidget(QWidget *); + void setContextMenuActionProvider(ContextMenuActionProvider *); void setToolBarActionProvider(ToolBarActionProvider *); private: + static QWidget *_mainWidget; + static QHash _actionCollections; static ContextMenuActionProvider *_contextMenuActionProvider; static ToolBarActionProvider *_toolBarActionProvider; diff --git a/src/uisupport/inputline.cpp b/src/uisupport/inputline.cpp index 76796dd5..593af037 100644 --- a/src/uisupport/inputline.cpp +++ b/src/uisupport/inputline.cpp @@ -19,15 +19,31 @@ ***************************************************************************/ #include "bufferview.h" - +#include "graphicalui.h" #include "inputline.h" #include "tabcompleter.h" InputLine::InputLine(QWidget *parent) - : QLineEdit(parent), + : +#ifdef HAVE_KDE + KTextEdit(parent), +#else + QLineEdit(parent), +#endif idx(0), tabCompleter(new TabCompleter(this)) { +#ifdef HAVE_KDE +//This is done to make the KTextEdit look like a lineedit + setMaximumHeight(document()->size().toSize().height()); + setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); + setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff); + setAcceptRichText(false); + setLineWrapMode(NoWrap); + enableFindReplace(false); + connect(this, SIGNAL(textChanged()), this, SLOT(on_textChanged())); +#endif + connect(this, SIGNAL(returnPressed()), this, SLOT(on_returnPressed())); connect(this, SIGNAL(textChanged(QString)), this, SLOT(on_textChanged(QString))); } @@ -35,6 +51,13 @@ InputLine::InputLine(QWidget *parent) InputLine::~InputLine() { } +void InputLine::setCustomFont(const QFont &font) { + setFont(font); +#ifdef HAVE_KDE + setMaximumHeight(document()->size().toSize().height()); +#endif +} + bool InputLine::eventFilter(QObject *watched, QEvent *event) { if(event->type() != QEvent::KeyPress) return false; @@ -57,6 +80,18 @@ bool InputLine::eventFilter(QObject *watched, QEvent *event) { } void InputLine::keyPressEvent(QKeyEvent * event) { + +#ifdef HAVE_KDE + if(event->matches(QKeySequence::Find)) { + QAction *act = GraphicalUi::actionCollection()->action("ToggleSearchBar"); + if(act) { + act->toggle(); + event->accept(); + return; + } + } +#endif + switch(event->key()) { case Qt::Key_Up: event->accept(); @@ -90,9 +125,30 @@ void InputLine::keyPressEvent(QKeyEvent * event) { case Qt::Key_Select: // for Qtopia emit returnPressed(); + break; + +#ifdef HAVE_KDE +//Since this is a ktextedit, we don't have this signal "natively" + case Qt::Key_Return: + event->accept(); + if(!text().isEmpty()) + emit returnPressed(); + break; + + case Qt::Key_Enter: + event->accept(); + if(!text().isEmpty()) + emit returnPressed(); + break; + +#endif default: +#ifdef HAVE_KDE + KTextEdit::keyPressEvent(event); +#else QLineEdit::keyPressEvent(event); +#endif } } @@ -145,7 +201,7 @@ void InputLine::on_textChanged(QString newText) { clear(); if(lines.count() >= 4) { - QString msg = tr("Do you really want to paste %1 lines?").arg(lines.count()); + QString msg = tr("Do you really want to paste %n lines?", "", lines.count()); msg += "

"; for(int i = 0; i < 3; i++) { msg += lines[i].left(40); @@ -164,9 +220,11 @@ void InputLine::on_textChanged(QString newText) { } foreach(QString line, lines) { - clear(); - insert(line); - emit returnPressed(); + if(!line.isEmpty()) { + clear(); + insert(line); + emit returnPressed(); + } } // if(newText.contains(lineSep)) { // clear(); diff --git a/src/uisupport/inputline.h b/src/uisupport/inputline.h index dc6d691c..66742b63 100644 --- a/src/uisupport/inputline.h +++ b/src/uisupport/inputline.h @@ -23,15 +23,36 @@ #include +#ifdef HAVE_KDE +#include +#endif + class TabCompleter; -class InputLine : public QLineEdit { +class InputLine : public +#ifdef HAVE_KDE + KTextEdit +#else + QLineEdit +#endif +{ Q_OBJECT public: InputLine(QWidget *parent = 0); ~InputLine(); + void setCustomFont(const QFont &); // should be used instead setFont(), so we can set our size correctly + +#ifdef HAVE_KDE +//Compatibility methods with the rest of the classes which expects this to be a QLineEdit + QString text() { return toPlainText(); }; + int cursorPosition() { return textCursor().position(); }; + void insert(const QString &newText) { insertPlainText(newText); }; + void backspace() { keyPressEvent(new QKeyEvent(QEvent::KeyPress, Qt::Key_Backspace, Qt::NoModifier)); }; + bool hasSelectedText() { return textCursor().hasSelection(); }; +#endif + protected: // virtual bool event(QEvent *); virtual void keyPressEvent(QKeyEvent * event); @@ -40,11 +61,20 @@ protected: private slots: void on_returnPressed(); void on_textChanged(QString newText); +#ifdef HAVE_KDE +//Needed to emulate the signal that QLineEdit has + void on_textChanged() { emit textChanged(toPlainText()); }; +#endif bool addToHistory(const QString &text, bool temporary = false); signals: void sendText(QString text); +#ifdef HAVE_KDE +//KTextEdit does not provide this signal, so we manually emit it in keyPressEvent() + void returnPressed(); + void textChanged(QString newText); +#endif private: QStringList history; diff --git a/src/uisupport/settingspage.cpp b/src/uisupport/settingspage.cpp index 577f1683..a1b6f8db 100644 --- a/src/uisupport/settingspage.cpp +++ b/src/uisupport/settingspage.cpp @@ -53,7 +53,7 @@ void SettingsPage::load(QCheckBox *box, bool checked) { } bool SettingsPage::hasChanged(QCheckBox *box) { - return box->property("StoredValue").toBool() == box->isChecked(); + return box->property("StoredValue").toBool() != box->isChecked(); } @@ -63,7 +63,7 @@ void SettingsPage::load(QComboBox *box, int index) { } bool SettingsPage::hasChanged(QComboBox *box) { - return box->property("StoredValue").toInt() == box->currentIndex(); + return box->property("StoredValue").toInt() != box->currentIndex(); } void SettingsPage::load(QSpinBox *box, int value) { @@ -72,7 +72,7 @@ void SettingsPage::load(QSpinBox *box, int value) { } bool SettingsPage::hasChanged(QSpinBox *box) { - return box->property("StoredValue").toInt() == box->value(); + return box->property("StoredValue").toInt() != box->value(); } /*** Auto child widget handling ***/