pax_global_header00006660000000000000000000000064145554325560014530gustar00rootroot0000000000000052 comment=9e3be1ed1240aa01d9bee66f04492fa21710cf98 telephony-service-0.5.3/000077500000000000000000000000001455543255600152025ustar00rootroot00000000000000telephony-service-0.5.3/.gitignore000066400000000000000000000022221455543255600171700ustar00rootroot00000000000000CMakeCache.txt CMakeFiles/ Makefile cmake_install.cmake install_manifest.txt *.user *.cbp config.h approver/telephony-service-approver handler/telephony-service-handler indicator/telephony-service-indicator moc_*.cxx moc_*.cpp *_automoc.cpp *.moc obj-*/ debian/files debian/*.debhelper debian/*.debhelper.log debian/*.substvars src/*.service src/*.desktop handler/*.service approver/*.service approver/approveradaptor.* handler/handleradaptor.* handler/messagesendingjobadaptor.* indicator/*.desktop indicator/*.service indicator/NotificationsInterface.* indicator/indicatoradaptor.* Testing Lomiri/Telephony/qmldir CTestTestfile.cmake test_*.xml cmake_uninstall.cmake coverage* po/*.gmo tests/*/*Test tests/common/dbus-test-wrapper.sh tests/common/NotificationsMock tests/common/MockConnectionInterface.* tests/common/mock/mockconnectionadaptor.* tests/common/mock/telepathy-mock tests/common/dbus-session.conf tests/common/dbus-services/* tests/Lomiri.Telephony/ContactWatcherTest tests/libtelephonyservice/GreeterContactsTestExe tests/libtelephonyservice/GreeterContactsTestServerExe tests/libtelephonyservice/*Mock tests/indicator/NotificationsInterface.* telephony-service-0.5.3/AUTHORS000066400000000000000000000026041455543255600162540ustar00rootroot00000000000000Abidin Abidin Toumi Adam Adolfo Jayme Barrientos Albert Astals Alberto Aguirre Alberto Mardegan Alexandre Abreu Alfonso Sanchez-Beato Alfred Neumayer Allan Nordhøy Andreas Pokorny Anne Onyme Anonymous Antti Kaijanmäki Arthur Mello Bhushan Shah Bill Filler Dalton Durst Dan Daniel Frost Didier Roche Dimitri John Ledkov Efstathios Iosifidis Enkli Ylli Florian Boucault Florian Leeber Gallegonovato Gerry Boland GK Gnu-ewm Guido Berhoerster Gustavo Pichorim Boiko Heimen Stoffels Helabasa Hosted Weblate Iain Lane Ierihon Imrufbd Ivo Xavier Jan Christian Sherdahl JEzEk Jim Hodapp Joan CiberSheep Josué Jozef Mlich Kai Goldbeck Kaleo Ken VanDine Lionel Duboeuf Loïc Minier Louies0623 Luca Weiss Łukasz 'sil2100' Zemczak Luna Jernberg Lundrin Marius Gripsgard Martin Pitt Martti Piirainen Michael Terry Michael Zanetti Michał Sawicz Mike Mike Gabriel Milan Korecký Mirco Müller M Sugahara Muhammad NPL Olivier Tilloy Omer Akram OPNA2608 Phlostically Ratchanan Srirattanamet Renato Araujo Oliveira Filho Reza Almanda Ricardo Mendoza Ricardo Salveti De Araujo Roberto Mier Escandon Rodney Rodney Dawes Rudra Harsh V Singh Sebastien Bacher Sergii Horichenko Sergio Schvezov Stefan Kalb Sylke Vicious Taisei Washington Temuri Doghonadze TheKit Thomas Moenicke Tiago Salem Herrmann Timo Jyrinki Tim Peeters Ugo Riboni Vesa Rautiainen Weblate Yaron Shahrabani Ying-Chun Liu Ying-Chun Liu (PaulLiu) You-Sheng Yang telephony-service-0.5.3/CMakeLists.txt000066400000000000000000000115131455543255600177430ustar00rootroot00000000000000cmake_minimum_required(VERSION 3.5) project(telephony-service VERSION 0.5.3 LANGUAGES CXX) set(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake/modules) # Standard install paths include(GNUInstallDirs) # Check for include files include(CheckIncludeFileCXX) include(CheckIncludeFile) # Instruct CMake to run moc automatically when needed. set(CMAKE_AUTOMOC ON) # just to make debug easier, print the system processor message(STATUS "System processor: ${CMAKE_SYSTEM_PROCESSOR}") set(TELEPHONY_SERVICE_DIR ${CMAKE_INSTALL_FULL_DATADIR}/telephony-service) configure_file(config.h.in ${CMAKE_CURRENT_BINARY_DIR}/config.h @ONLY) # uninstall target configure_file("${CMAKE_CURRENT_SOURCE_DIR}/cmake_uninstall.cmake.in" "${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake" IMMEDIATE @ONLY) add_custom_target(uninstall "${CMAKE_COMMAND}" -P "${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake") find_package(Qt5Contacts) find_package(Qt5DBus) find_package(Qt5Multimedia) find_package(Qt5Qml) find_package(Qt5Quick) find_package(Qt5Test) find_package(Qt5Feedback) find_package(Qt5Network) find_package(LibPhoneNumber REQUIRED) include(qt5) option(SKIP_QML_TESTS "Skip QML tests" OFF) option(WANT_UI_SERVICES "Enable build of UI services" ON) if(NOT CMAKE_CROSSCOMPILING) find_program(QMAKE_EXECUTABLE qmake) if(QMAKE_EXECUTABLE STREQUAL "QMAKE_EXECUTABLE-NOTFOUND") message(FATAL_ERROR "qmake not found") endif() execute_process( COMMAND ${QMAKE_EXECUTABLE} -query QT_INSTALL_QML RESULT_VARIABLE RESULT OUTPUT_VARIABLE QT_INSTALL_QML OUTPUT_STRIP_TRAILING_WHITESPACE ) if(NOT RESULT EQUAL 0) message(FATAL_ERROR "Failed to determine QT_INSTALL_QML from qmake") endif() else() # qmake isn't multi-arch aware as it installs arch-specific mkspec files # in to /usr/share, so we can't use it here (we'd need a qmake binary # for the host arch using data for the target arch) set(QT_INSTALL_QML "/usr/lib/${CMAKE_LIBRARY_ARCHITECTURE}/qt5/qml") endif() find_package(PkgConfig REQUIRED) pkg_check_modules(TP_QT5 REQUIRED TelepathyQt5) pkg_check_modules(TP_QT5_FS REQUIRED TelepathyQt5Farstream) pkg_check_modules(NOTIFY REQUIRED libnotify) pkg_check_modules(TPFS REQUIRED telepathy-farstream) pkg_check_modules(GST REQUIRED gstreamer-1.0) pkg_check_modules(FS REQUIRED farstream-0.2) pkg_check_modules(PULSEAUDIO libpulse) pkg_check_modules(HISTORY REQUIRED history-service) if (WANT_UI_SERVICES) pkg_check_modules(MESSAGING_MENU REQUIRED messaging-menu) pkg_check_modules(UserMetrics REQUIRED libusermetricsinput-1) pkg_check_modules(URL_DISPATCHER REQUIRED lomiri-url-dispatcher) add_definitions(-DWANT_UI_SERVICES) message("Building with UI services") else() message("Bulding of UI services is disabled") endif() add_definitions(-DQT_NO_KEYWORDS) include_directories( ${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_CURRENT_SOURCE_DIR} ) # generate a macro to make it easier to enable coverage support on targets function(ENABLE_COVERAGE) get_directory_property(COVERAGE_TARGETS DIRECTORY ${CMAKE_SOURCE_DIR} COVERAGE_TARGETS) list(APPEND COVERAGE_TARGETS ${ARGN}) MESSAGE(STATUS "Enabling coverage report for target(s): ${ARGN}") set_property(DIRECTORY ${CMAKE_SOURCE_DIR} PROPERTY COVERAGE_TARGETS ${COVERAGE_TARGETS}) endfunction() enable_testing() set(CMAKE_CXX_STANDARD 17) set(DATA_DIR "${CMAKE_SOURCE_DIR}/data") # install assets set(ASSETS_DIR assets) install(DIRECTORY ${ASSETS_DIR} DESTINATION ${TELEPHONY_SERVICE_DIR}) add_subdirectory(libtelephonyservice) add_subdirectory(Lomiri) add_subdirectory(handler) add_subdirectory(tools) add_subdirectory(icons) add_subdirectory(po) add_subdirectory(tests) add_subdirectory(protocols) if (WANT_UI_SERVICES) add_subdirectory(indicator) add_subdirectory(approver) endif() include(EnableCoverageReport) ##################################################################### # Enable code coverage calculation with gcov/gcovr/lcov # Usage: # * Switch build type to coverage (use ccmake or cmake-gui) # * Invoke make, make test, make coverage # * Find html report in subdir coveragereport # * Find xml report feasible for jenkins in coverage.xml ##################################################################### IF(CMAKE_BUILD_TYPE MATCHES [cC][oO][vV][eE][rR][aA][gG][eE]) SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -ftest-coverage -fprofile-arcs" ) SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -ftest-coverage -fprofile-arcs" ) SET(CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} -coverage" ) SET(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -coverage" ) GET_DIRECTORY_PROPERTY(COVERAGE_TARGETS DIRECTORY ${CMAKE_SOURCE_DIR} COVERAGE_TARGETS) ENABLE_COVERAGE_REPORT(TARGETS ${COVERAGE_TARGETS}) ENDIF(CMAKE_BUILD_TYPE MATCHES [cC][oO][vV][eE][rR][aA][gG][eE]) telephony-service-0.5.3/COPYING000066400000000000000000001045131455543255600162410ustar00rootroot00000000000000 GNU GENERAL PUBLIC LICENSE Version 3, 29 June 2007 Copyright (C) 2007 Free Software Foundation, Inc. Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The GNU General Public License is a free, copyleft license for software and other kinds of works. The licenses for most software and other practical works are designed to take away your freedom to share and change the works. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change all versions of a program--to make sure it remains free software for all its users. We, the Free Software Foundation, use the GNU General Public License for most of our software; it applies also to any other work released this way by its authors. You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for them if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs, and that you know you can do these things. To protect your rights, we need to prevent others from denying you these rights or asking you to surrender the rights. Therefore, you have certain responsibilities if you distribute copies of the software, or if you modify it: responsibilities to respect the freedom of others. For example, if you distribute copies of such a program, whether gratis or for a fee, you must pass on to the recipients the same freedoms that you received. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. Developers that use the GNU GPL protect your rights with two steps: (1) assert copyright on the software, and (2) offer you this License giving you legal permission to copy, distribute and/or modify it. For the developers' and authors' protection, the GPL clearly explains that there is no warranty for this free software. For both users' and authors' sake, the GPL requires that modified versions be marked as changed, so that their problems will not be attributed erroneously to authors of previous versions. Some devices are designed to deny users access to install or run modified versions of the software inside them, although the manufacturer can do so. This is fundamentally incompatible with the aim of protecting users' freedom to change the software. The systematic pattern of such abuse occurs in the area of products for individuals to use, which is precisely where it is most unacceptable. Therefore, we have designed this version of the GPL to prohibit the practice for those products. If such problems arise substantially in other domains, we stand ready to extend this provision to those domains in future versions of the GPL, as needed to protect the freedom of users. Finally, every program is threatened constantly by software patents. States should not allow patents to restrict development and use of software on general-purpose computers, but in those that do, we wish to avoid the special danger that patents applied to a free program could make it effectively proprietary. To prevent this, the GPL assures that patents cannot be used to render the program non-free. The precise terms and conditions for copying, distribution and modification follow. TERMS AND CONDITIONS 0. Definitions. "This License" refers to version 3 of the GNU General Public License. "Copyright" also means copyright-like laws that apply to other kinds of works, such as semiconductor masks. "The Program" refers to any copyrightable work licensed under this License. Each licensee is addressed as "you". "Licensees" and "recipients" may be individuals or organizations. To "modify" a work means to copy from or adapt all or part of the work in a fashion requiring copyright permission, other than the making of an exact copy. The resulting work is called a "modified version" of the earlier work or a work "based on" the earlier work. A "covered work" means either the unmodified Program or a work based on the Program. To "propagate" a work means to do anything with it that, without permission, would make you directly or secondarily liable for infringement under applicable copyright law, except executing it on a computer or modifying a private copy. Propagation includes copying, distribution (with or without modification), making available to the public, and in some countries other activities as well. To "convey" a work means any kind of propagation that enables other parties to make or receive copies. Mere interaction with a user through a computer network, with no transfer of a copy, is not conveying. An interactive user interface displays "Appropriate Legal Notices" to the extent that it includes a convenient and prominently visible feature that (1) displays an appropriate copyright notice, and (2) tells the user that there is no warranty for the work (except to the extent that warranties are provided), that licensees may convey the work under this License, and how to view a copy of this License. If the interface presents a list of user commands or options, such as a menu, a prominent item in the list meets this criterion. 1. Source Code. The "source code" for a work means the preferred form of the work for making modifications to it. "Object code" means any non-source form of a work. A "Standard Interface" means an interface that either is an official standard defined by a recognized standards body, or, in the case of interfaces specified for a particular programming language, one that is widely used among developers working in that language. The "System Libraries" of an executable work include anything, other than the work as a whole, that (a) is included in the normal form of packaging a Major Component, but which is not part of that Major Component, and (b) serves only to enable use of the work with that Major Component, or to implement a Standard Interface for which an implementation is available to the public in source code form. A "Major Component", in this context, means a major essential component (kernel, window system, and so on) of the specific operating system (if any) on which the executable work runs, or a compiler used to produce the work, or an object code interpreter used to run it. The "Corresponding Source" for a work in object code form means all the source code needed to generate, install, and (for an executable work) run the object code and to modify the work, including scripts to control those activities. However, it does not include the work's System Libraries, or general-purpose tools or generally available free programs which are used unmodified in performing those activities but which are not part of the work. For example, Corresponding Source includes interface definition files associated with source files for the work, and the source code for shared libraries and dynamically linked subprograms that the work is specifically designed to require, such as by intimate data communication or control flow between those subprograms and other parts of the work. The Corresponding Source need not include anything that users can regenerate automatically from other parts of the Corresponding Source. The Corresponding Source for a work in source code form is that same work. 2. Basic Permissions. All rights granted under this License are granted for the term of copyright on the Program, and are irrevocable provided the stated conditions are met. This License explicitly affirms your unlimited permission to run the unmodified Program. The output from running a covered work is covered by this License only if the output, given its content, constitutes a covered work. This License acknowledges your rights of fair use or other equivalent, as provided by copyright law. You may make, run and propagate covered works that you do not convey, without conditions so long as your license otherwise remains in force. You may convey covered works to others for the sole purpose of having them make modifications exclusively for you, or provide you with facilities for running those works, provided that you comply with the terms of this License in conveying all material for which you do not control copyright. Those thus making or running the covered works for you must do so exclusively on your behalf, under your direction and control, on terms that prohibit them from making any copies of your copyrighted material outside their relationship with you. Conveying under any other circumstances is permitted solely under the conditions stated below. Sublicensing is not allowed; section 10 makes it unnecessary. 3. Protecting Users' Legal Rights From Anti-Circumvention Law. No covered work shall be deemed part of an effective technological measure under any applicable law fulfilling obligations under article 11 of the WIPO copyright treaty adopted on 20 December 1996, or similar laws prohibiting or restricting circumvention of such measures. When you convey a covered work, you waive any legal power to forbid circumvention of technological measures to the extent such circumvention is effected by exercising rights under this License with respect to the covered work, and you disclaim any intention to limit operation or modification of the work as a means of enforcing, against the work's users, your or third parties' legal rights to forbid circumvention of technological measures. 4. Conveying Verbatim Copies. You may convey verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice; keep intact all notices stating that this License and any non-permissive terms added in accord with section 7 apply to the code; keep intact all notices of the absence of any warranty; and give all recipients a copy of this License along with the Program. You may charge any price or no price for each copy that you convey, and you may offer support or warranty protection for a fee. 5. Conveying Modified Source Versions. You may convey a work based on the Program, or the modifications to produce it from the Program, in the form of source code under the terms of section 4, provided that you also meet all of these conditions: a) The work must carry prominent notices stating that you modified it, and giving a relevant date. b) The work must carry prominent notices stating that it is released under this License and any conditions added under section 7. This requirement modifies the requirement in section 4 to "keep intact all notices". c) You must license the entire work, as a whole, under this License to anyone who comes into possession of a copy. This License will therefore apply, along with any applicable section 7 additional terms, to the whole of the work, and all its parts, regardless of how they are packaged. This License gives no permission to license the work in any other way, but it does not invalidate such permission if you have separately received it. d) If the work has interactive user interfaces, each must display Appropriate Legal Notices; however, if the Program has interactive interfaces that do not display Appropriate Legal Notices, your work need not make them do so. A compilation of a covered work with other separate and independent works, which are not by their nature extensions of the covered work, and which are not combined with it such as to form a larger program, in or on a volume of a storage or distribution medium, is called an "aggregate" if the compilation and its resulting copyright are not used to limit the access or legal rights of the compilation's users beyond what the individual works permit. Inclusion of a covered work in an aggregate does not cause this License to apply to the other parts of the aggregate. 6. Conveying Non-Source Forms. You may convey a covered work in object code form under the terms of sections 4 and 5, provided that you also convey the machine-readable Corresponding Source under the terms of this License, in one of these ways: a) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by the Corresponding Source fixed on a durable physical medium customarily used for software interchange. b) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by a written offer, valid for at least three years and valid for as long as you offer spare parts or customer support for that product model, to give anyone who possesses the object code either (1) a copy of the Corresponding Source for all the software in the product that is covered by this License, on a durable physical medium customarily used for software interchange, for a price no more than your reasonable cost of physically performing this conveying of source, or (2) access to copy the Corresponding Source from a network server at no charge. c) Convey individual copies of the object code with a copy of the written offer to provide the Corresponding Source. This alternative is allowed only occasionally and noncommercially, and only if you received the object code with such an offer, in accord with subsection 6b. d) Convey the object code by offering access from a designated place (gratis or for a charge), and offer equivalent access to the Corresponding Source in the same way through the same place at no further charge. You need not require recipients to copy the Corresponding Source along with the object code. If the place to copy the object code is a network server, the Corresponding Source may be on a different server (operated by you or a third party) that supports equivalent copying facilities, provided you maintain clear directions next to the object code saying where to find the Corresponding Source. Regardless of what server hosts the Corresponding Source, you remain obligated to ensure that it is available for as long as needed to satisfy these requirements. e) Convey the object code using peer-to-peer transmission, provided you inform other peers where the object code and Corresponding Source of the work are being offered to the general public at no charge under subsection 6d. A separable portion of the object code, whose source code is excluded from the Corresponding Source as a System Library, need not be included in conveying the object code work. A "User Product" is either (1) a "consumer product", which means any tangible personal property which is normally used for personal, family, or household purposes, or (2) anything designed or sold for incorporation into a dwelling. In determining whether a product is a consumer product, doubtful cases shall be resolved in favor of coverage. For a particular product received by a particular user, "normally used" refers to a typical or common use of that class of product, regardless of the status of the particular user or of the way in which the particular user actually uses, or expects or is expected to use, the product. A product is a consumer product regardless of whether the product has substantial commercial, industrial or non-consumer uses, unless such uses represent the only significant mode of use of the product. "Installation Information" for a User Product means any methods, procedures, authorization keys, or other information required to install and execute modified versions of a covered work in that User Product from a modified version of its Corresponding Source. The information must suffice to ensure that the continued functioning of the modified object code is in no case prevented or interfered with solely because modification has been made. If you convey an object code work under this section in, or with, or specifically for use in, a User Product, and the conveying occurs as part of a transaction in which the right of possession and use of the User Product is transferred to the recipient in perpetuity or for a fixed term (regardless of how the transaction is characterized), the Corresponding Source conveyed under this section must be accompanied by the Installation Information. But this requirement does not apply if neither you nor any third party retains the ability to install modified object code on the User Product (for example, the work has been installed in ROM). The requirement to provide Installation Information does not include a requirement to continue to provide support service, warranty, or updates for a work that has been modified or installed by the recipient, or for the User Product in which it has been modified or installed. Access to a network may be denied when the modification itself materially and adversely affects the operation of the network or violates the rules and protocols for communication across the network. Corresponding Source conveyed, and Installation Information provided, in accord with this section must be in a format that is publicly documented (and with an implementation available to the public in source code form), and must require no special password or key for unpacking, reading or copying. 7. Additional Terms. "Additional permissions" are terms that supplement the terms of this License by making exceptions from one or more of its conditions. Additional permissions that are applicable to the entire Program shall be treated as though they were included in this License, to the extent that they are valid under applicable law. If additional permissions apply only to part of the Program, that part may be used separately under those permissions, but the entire Program remains governed by this License without regard to the additional permissions. When you convey a copy of a covered work, you may at your option remove any additional permissions from that copy, or from any part of it. (Additional permissions may be written to require their own removal in certain cases when you modify the work.) You may place additional permissions on material, added by you to a covered work, for which you have or can give appropriate copyright permission. Notwithstanding any other provision of this License, for material you add to a covered work, you may (if authorized by the copyright holders of that material) supplement the terms of this License with terms: a) Disclaiming warranty or limiting liability differently from the terms of sections 15 and 16 of this License; or b) Requiring preservation of specified reasonable legal notices or author attributions in that material or in the Appropriate Legal Notices displayed by works containing it; or c) Prohibiting misrepresentation of the origin of that material, or requiring that modified versions of such material be marked in reasonable ways as different from the original version; or d) Limiting the use for publicity purposes of names of licensors or authors of the material; or e) Declining to grant rights under trademark law for use of some trade names, trademarks, or service marks; or f) Requiring indemnification of licensors and authors of that material by anyone who conveys the material (or modified versions of it) with contractual assumptions of liability to the recipient, for any liability that these contractual assumptions directly impose on those licensors and authors. All other non-permissive additional terms are considered "further restrictions" within the meaning of section 10. If the Program as you received it, or any part of it, contains a notice stating that it is governed by this License along with a term that is a further restriction, you may remove that term. If a license document contains a further restriction but permits relicensing or conveying under this License, you may add to a covered work material governed by the terms of that license document, provided that the further restriction does not survive such relicensing or conveying. If you add terms to a covered work in accord with this section, you must place, in the relevant source files, a statement of the additional terms that apply to those files, or a notice indicating where to find the applicable terms. Additional terms, permissive or non-permissive, may be stated in the form of a separately written license, or stated as exceptions; the above requirements apply either way. 8. Termination. You may not propagate or modify a covered work except as expressly provided under this License. Any attempt otherwise to propagate or modify it is void, and will automatically terminate your rights under this License (including any patent licenses granted under the third paragraph of section 11). However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation. Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice. Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, you do not qualify to receive new licenses for the same material under section 10. 9. Acceptance Not Required for Having Copies. You are not required to accept this License in order to receive or run a copy of the Program. Ancillary propagation of a covered work occurring solely as a consequence of using peer-to-peer transmission to receive a copy likewise does not require acceptance. However, nothing other than this License grants you permission to propagate or modify any covered work. These actions infringe copyright if you do not accept this License. Therefore, by modifying or propagating a covered work, you indicate your acceptance of this License to do so. 10. Automatic Licensing of Downstream Recipients. Each time you convey a covered work, the recipient automatically receives a license from the original licensors, to run, modify and propagate that work, subject to this License. You are not responsible for enforcing compliance by third parties with this License. An "entity transaction" is a transaction transferring control of an organization, or substantially all assets of one, or subdividing an organization, or merging organizations. If propagation of a covered work results from an entity transaction, each party to that transaction who receives a copy of the work also receives whatever licenses to the work the party's predecessor in interest had or could give under the previous paragraph, plus a right to possession of the Corresponding Source of the work from the predecessor in interest, if the predecessor has it or can get it with reasonable efforts. You may not impose any further restrictions on the exercise of the rights granted or affirmed under this License. For example, you may not impose a license fee, royalty, or other charge for exercise of rights granted under this License, and you may not initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging that any patent claim is infringed by making, using, selling, offering for sale, or importing the Program or any portion of it. 11. Patents. A "contributor" is a copyright holder who authorizes use under this License of the Program or a work on which the Program is based. The work thus licensed is called the contributor's "contributor version". A contributor's "essential patent claims" are all patent claims owned or controlled by the contributor, whether already acquired or hereafter acquired, that would be infringed by some manner, permitted by this License, of making, using, or selling its contributor version, but do not include claims that would be infringed only as a consequence of further modification of the contributor version. For purposes of this definition, "control" includes the right to grant patent sublicenses in a manner consistent with the requirements of this License. Each contributor grants you a non-exclusive, worldwide, royalty-free patent license under the contributor's essential patent claims, to make, use, sell, offer for sale, import and otherwise run, modify and propagate the contents of its contributor version. In the following three paragraphs, a "patent license" is any express agreement or commitment, however denominated, not to enforce a patent (such as an express permission to practice a patent or covenant not to sue for patent infringement). To "grant" such a patent license to a party means to make such an agreement or commitment not to enforce a patent against the party. If you convey a covered work, knowingly relying on a patent license, and the Corresponding Source of the work is not available for anyone to copy, free of charge and under the terms of this License, through a publicly available network server or other readily accessible means, then you must either (1) cause the Corresponding Source to be so available, or (2) arrange to deprive yourself of the benefit of the patent license for this particular work, or (3) arrange, in a manner consistent with the requirements of this License, to extend the patent license to downstream recipients. "Knowingly relying" means you have actual knowledge that, but for the patent license, your conveying the covered work in a country, or your recipient's use of the covered work in a country, would infringe one or more identifiable patents in that country that you have reason to believe are valid. If, pursuant to or in connection with a single transaction or arrangement, you convey, or propagate by procuring conveyance of, a covered work, and grant a patent license to some of the parties receiving the covered work authorizing them to use, propagate, modify or convey a specific copy of the covered work, then the patent license you grant is automatically extended to all recipients of the covered work and works based on it. A patent license is "discriminatory" if it does not include within the scope of its coverage, prohibits the exercise of, or is conditioned on the non-exercise of one or more of the rights that are specifically granted under this License. You may not convey a covered work if you are a party to an arrangement with a third party that is in the business of distributing software, under which you make payment to the third party based on the extent of your activity of conveying the work, and under which the third party grants, to any of the parties who would receive the covered work from you, a discriminatory patent license (a) in connection with copies of the covered work conveyed by you (or copies made from those copies), or (b) primarily for and in connection with specific products or compilations that contain the covered work, unless you entered into that arrangement, or that patent license was granted, prior to 28 March 2007. Nothing in this License shall be construed as excluding or limiting any implied license or other defenses to infringement that may otherwise be available to you under applicable patent law. 12. No Surrender of Others' Freedom. If conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot convey a covered work so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not convey it at all. For example, if you agree to terms that obligate you to collect a royalty for further conveying from those to whom you convey the Program, the only way you could satisfy both those terms and this License would be to refrain entirely from conveying the Program. 13. Use with the GNU Affero General Public License. Notwithstanding any other provision of this License, you have permission to link or combine any covered work with a work licensed under version 3 of the GNU Affero General Public License into a single combined work, and to convey the resulting work. The terms of this License will continue to apply to the part which is the covered work, but the special requirements of the GNU Affero General Public License, section 13, concerning interaction through a network will apply to the combination as such. 14. Revised Versions of this License. The Free Software Foundation may publish revised and/or new versions of the GNU General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies that a certain numbered version of the GNU General Public License "or any later version" applies to it, you have the option of following the terms and conditions either of that numbered version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of the GNU General Public License, you may choose any version ever published by the Free Software Foundation. If the Program specifies that a proxy can decide which future versions of the GNU General Public License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Program. Later license versions may give you additional or different permissions. However, no additional obligations are imposed on any author or copyright holder as a result of your choosing to follow a later version. 15. Disclaimer of Warranty. THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 16. Limitation of Liability. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. 17. Interpretation of Sections 15 and 16. If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively state the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) 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 . Also add information on how to contact you by electronic and paper mail. If the program does terminal interaction, make it output a short notice like this when it starts in an interactive mode: Copyright (C) This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, your program's commands might be different; for a GUI interface, you would use an "about box". You should also get your employer (if you work as a programmer) or school, if any, to sign a "copyright disclaimer" for the program, if necessary. For more information on this, and how to apply and follow the GNU GPL, see . The GNU General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. But first, please read . telephony-service-0.5.3/COPYING.CC-BY-SA-3000066400000000000000000000533361455543255600175040ustar00rootroot00000000000000Creative Commons Legal Code Attribution-ShareAlike 3.0 Unported CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE LEGAL SERVICES. DISTRIBUTION OF THIS LICENSE DOES NOT CREATE AN ATTORNEY-CLIENT RELATIONSHIP. CREATIVE COMMONS PROVIDES THIS INFORMATION ON AN "AS-IS" BASIS. CREATIVE COMMONS MAKES NO WARRANTIES REGARDING THE INFORMATION PROVIDED, AND DISCLAIMS LIABILITY FOR DAMAGES RESULTING FROM ITS USE. License THE WORK (AS DEFINED BELOW) IS PROVIDED UNDER THE TERMS OF THIS CREATIVE COMMONS PUBLIC LICENSE ("CCPL" OR "LICENSE"). THE WORK IS PROTECTED BY COPYRIGHT AND/OR OTHER APPLICABLE LAW. ANY USE OF THE WORK OTHER THAN AS AUTHORIZED UNDER THIS LICENSE OR COPYRIGHT LAW IS PROHIBITED. BY EXERCISING ANY RIGHTS TO THE WORK PROVIDED HERE, YOU ACCEPT AND AGREE TO BE BOUND BY THE TERMS OF THIS LICENSE. TO THE EXTENT THIS LICENSE MAY BE CONSIDERED TO BE A CONTRACT, THE LICENSOR GRANTS YOU THE RIGHTS CONTAINED HERE IN CONSIDERATION OF YOUR ACCEPTANCE OF SUCH TERMS AND CONDITIONS. 1. Definitions a. "Adaptation" means a work based upon the Work, or upon the Work and other pre-existing works, such as a translation, adaptation, derivative work, arrangement of music or other alterations of a literary or artistic work, or phonogram or performance and includes cinematographic adaptations or any other form in which the Work may be recast, transformed, or adapted including in any form recognizably derived from the original, except that a work that constitutes a Collection will not be considered an Adaptation for the purpose of this License. For the avoidance of doubt, where the Work is a musical work, performance or phonogram, the synchronization of the Work in timed-relation with a moving image ("synching") will be considered an Adaptation for the purpose of this License. b. "Collection" means a collection of literary or artistic works, such as encyclopedias and anthologies, or performances, phonograms or broadcasts, or other works or subject matter other than works listed in Section 1(f) below, which, by reason of the selection and arrangement of their contents, constitute intellectual creations, in which the Work is included in its entirety in unmodified form along with one or more other contributions, each constituting separate and independent works in themselves, which together are assembled into a collective whole. A work that constitutes a Collection will not be considered an Adaptation (as defined below) for the purposes of this License. c. "Creative Commons Compatible License" means a license that is listed at http://creativecommons.org/compatiblelicenses that has been approved by Creative Commons as being essentially equivalent to this License, including, at a minimum, because that license: (i) contains terms that have the same purpose, meaning and effect as the License Elements of this License; and, (ii) explicitly permits the relicensing of adaptations of works made available under that license under this License or a Creative Commons jurisdiction license with the same License Elements as this License. d. "Distribute" means to make available to the public the original and copies of the Work or Adaptation, as appropriate, through sale or other transfer of ownership. e. "License Elements" means the following high-level license attributes as selected by Licensor and indicated in the title of this License: Attribution, ShareAlike. f. "Licensor" means the individual, individuals, entity or entities that offer(s) the Work under the terms of this License. g. "Original Author" means, in the case of a literary or artistic work, the individual, individuals, entity or entities who created the Work or if no individual or entity can be identified, the publisher; and in addition (i) in the case of a performance the actors, singers, musicians, dancers, and other persons who act, sing, deliver, declaim, play in, interpret or otherwise perform literary or artistic works or expressions of folklore; (ii) in the case of a phonogram the producer being the person or legal entity who first fixes the sounds of a performance or other sounds; and, (iii) in the case of broadcasts, the organization that transmits the broadcast. h. "Work" means the literary and/or artistic work offered under the terms of this License including without limitation any production in the literary, scientific and artistic domain, whatever may be the mode or form of its expression including digital form, such as a book, pamphlet and other writing; a lecture, address, sermon or other work of the same nature; a dramatic or dramatico-musical work; a choreographic work or entertainment in dumb show; a musical composition with or without words; a cinematographic work to which are assimilated works expressed by a process analogous to cinematography; a work of drawing, painting, architecture, sculpture, engraving or lithography; a photographic work to which are assimilated works expressed by a process analogous to photography; a work of applied art; an illustration, map, plan, sketch or three-dimensional work relative to geography, topography, architecture or science; a performance; a broadcast; a phonogram; a compilation of data to the extent it is protected as a copyrightable work; or a work performed by a variety or circus performer to the extent it is not otherwise considered a literary or artistic work. i. "You" means an individual or entity exercising rights under this License who has not previously violated the terms of this License with respect to the Work, or who has received express permission from the Licensor to exercise rights under this License despite a previous violation. j. "Publicly Perform" means to perform public recitations of the Work and to communicate to the public those public recitations, by any means or process, including by wire or wireless means or public digital performances; to make available to the public Works in such a way that members of the public may access these Works from a place and at a place individually chosen by them; to perform the Work to the public by any means or process and the communication to the public of the performances of the Work, including by public digital performance; to broadcast and rebroadcast the Work by any means including signs, sounds or images. k. "Reproduce" means to make copies of the Work by any means including without limitation by sound or visual recordings and the right of fixation and reproducing fixations of the Work, including storage of a protected performance or phonogram in digital form or other electronic medium. 2. Fair Dealing Rights. Nothing in this License is intended to reduce, limit, or restrict any uses free from copyright or rights arising from limitations or exceptions that are provided for in connection with the copyright protection under copyright law or other applicable laws. 3. License Grant. Subject to the terms and conditions of this License, Licensor hereby grants You a worldwide, royalty-free, non-exclusive, perpetual (for the duration of the applicable copyright) license to exercise the rights in the Work as stated below: a. to Reproduce the Work, to incorporate the Work into one or more Collections, and to Reproduce the Work as incorporated in the Collections; b. to create and Reproduce Adaptations provided that any such Adaptation, including any translation in any medium, takes reasonable steps to clearly label, demarcate or otherwise identify that changes were made to the original Work. For example, a translation could be marked "The original work was translated from English to Spanish," or a modification could indicate "The original work has been modified."; c. to Distribute and Publicly Perform the Work including as incorporated in Collections; and, d. to Distribute and Publicly Perform Adaptations. e. For the avoidance of doubt: i. Non-waivable Compulsory License Schemes. In those jurisdictions in which the right to collect royalties through any statutory or compulsory licensing scheme cannot be waived, the Licensor reserves the exclusive right to collect such royalties for any exercise by You of the rights granted under this License; ii. Waivable Compulsory License Schemes. In those jurisdictions in which the right to collect royalties through any statutory or compulsory licensing scheme can be waived, the Licensor waives the exclusive right to collect such royalties for any exercise by You of the rights granted under this License; and, iii. Voluntary License Schemes. The Licensor waives the right to collect royalties, whether individually or, in the event that the Licensor is a member of a collecting society that administers voluntary licensing schemes, via that society, from any exercise by You of the rights granted under this License. The above rights may be exercised in all media and formats whether now known or hereafter devised. The above rights include the right to make such modifications as are technically necessary to exercise the rights in other media and formats. Subject to Section 8(f), all rights not expressly granted by Licensor are hereby reserved. 4. Restrictions. The license granted in Section 3 above is expressly made subject to and limited by the following restrictions: a. You may Distribute or Publicly Perform the Work only under the terms of this License. You must include a copy of, or the Uniform Resource Identifier (URI) for, this License with every copy of the Work You Distribute or Publicly Perform. You may not offer or impose any terms on the Work that restrict the terms of this License or the ability of the recipient of the Work to exercise the rights granted to that recipient under the terms of the License. You may not sublicense the Work. You must keep intact all notices that refer to this License and to the disclaimer of warranties with every copy of the Work You Distribute or Publicly Perform. When You Distribute or Publicly Perform the Work, You may not impose any effective technological measures on the Work that restrict the ability of a recipient of the Work from You to exercise the rights granted to that recipient under the terms of the License. This Section 4(a) applies to the Work as incorporated in a Collection, but this does not require the Collection apart from the Work itself to be made subject to the terms of this License. If You create a Collection, upon notice from any Licensor You must, to the extent practicable, remove from the Collection any credit as required by Section 4(c), as requested. If You create an Adaptation, upon notice from any Licensor You must, to the extent practicable, remove from the Adaptation any credit as required by Section 4(c), as requested. b. You may Distribute or Publicly Perform an Adaptation only under the terms of: (i) this License; (ii) a later version of this License with the same License Elements as this License; (iii) a Creative Commons jurisdiction license (either this or a later license version) that contains the same License Elements as this License (e.g., Attribution-ShareAlike 3.0 US)); (iv) a Creative Commons Compatible License. If you license the Adaptation under one of the licenses mentioned in (iv), you must comply with the terms of that license. If you license the Adaptation under the terms of any of the licenses mentioned in (i), (ii) or (iii) (the "Applicable License"), you must comply with the terms of the Applicable License generally and the following provisions: (I) You must include a copy of, or the URI for, the Applicable License with every copy of each Adaptation You Distribute or Publicly Perform; (II) You may not offer or impose any terms on the Adaptation that restrict the terms of the Applicable License or the ability of the recipient of the Adaptation to exercise the rights granted to that recipient under the terms of the Applicable License; (III) You must keep intact all notices that refer to the Applicable License and to the disclaimer of warranties with every copy of the Work as included in the Adaptation You Distribute or Publicly Perform; (IV) when You Distribute or Publicly Perform the Adaptation, You may not impose any effective technological measures on the Adaptation that restrict the ability of a recipient of the Adaptation from You to exercise the rights granted to that recipient under the terms of the Applicable License. This Section 4(b) applies to the Adaptation as incorporated in a Collection, but this does not require the Collection apart from the Adaptation itself to be made subject to the terms of the Applicable License. c. If You Distribute, or Publicly Perform the Work or any Adaptations or Collections, You must, unless a request has been made pursuant to Section 4(a), keep intact all copyright notices for the Work and provide, reasonable to the medium or means You are utilizing: (i) the name of the Original Author (or pseudonym, if applicable) if supplied, and/or if the Original Author and/or Licensor designate another party or parties (e.g., a sponsor institute, publishing entity, journal) for attribution ("Attribution Parties") in Licensor's copyright notice, terms of service or by other reasonable means, the name of such party or parties; (ii) the title of the Work if supplied; (iii) to the extent reasonably practicable, the URI, if any, that Licensor specifies to be associated with the Work, unless such URI does not refer to the copyright notice or licensing information for the Work; and (iv) , consistent with Ssection 3(b), in the case of an Adaptation, a credit identifying the use of the Work in the Adaptation (e.g., "French translation of the Work by Original Author," or "Screenplay based on original Work by Original Author"). The credit required by this Section 4(c) may be implemented in any reasonable manner; provided, however, that in the case of a Adaptation or Collection, at a minimum such credit will appear, if a credit for all contributing authors of the Adaptation or Collection appears, then as part of these credits and in a manner at least as prominent as the credits for the other contributing authors. For the avoidance of doubt, You may only use the credit required by this Section for the purpose of attribution in the manner set out above and, by exercising Your rights under this License, You may not implicitly or explicitly assert or imply any connection with, sponsorship or endorsement by the Original Author, Licensor and/or Attribution Parties, as appropriate, of You or Your use of the Work, without the separate, express prior written permission of the Original Author, Licensor and/or Attribution Parties. d. Except as otherwise agreed in writing by the Licensor or as may be otherwise permitted by applicable law, if You Reproduce, Distribute or Publicly Perform the Work either by itself or as part of any Adaptations or Collections, You must not distort, mutilate, modify or take other derogatory action in relation to the Work which would be prejudicial to the Original Author's honor or reputation. Licensor agrees that in those jurisdictions (e.g. Japan), in which any exercise of the right granted in Section 3(b) of this License (the right to make Adaptations) would be deemed to be a distortion, mutilation, modification or other derogatory action prejudicial to the Original Author's honor and reputation, the Licensor will waive or not assert, as appropriate, this Section, to the fullest extent permitted by the applicable national law, to enable You to reasonably exercise Your right under Section 3(b) of this License (right to make Adaptations) but not otherwise. 5. Representations, Warranties and Disclaimer UNLESS OTHERWISE MUTUALLY AGREED TO BY THE PARTIES IN WRITING, LICENSOR OFFERS THE WORK AS-IS AND MAKES NO REPRESENTATIONS OR WARRANTIES OF ANY KIND CONCERNING THE WORK, EXPRESS, IMPLIED, STATUTORY OR OTHERWISE, INCLUDING, WITHOUT LIMITATION, WARRANTIES OF TITLE, MERCHANTIBILITY, FITNESS FOR A PARTICULAR PURPOSE, NONINFRINGEMENT, OR THE ABSENCE OF LATENT OR OTHER DEFECTS, ACCURACY, OR THE PRESENCE OF ABSENCE OF ERRORS, WHETHER OR NOT DISCOVERABLE. SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OF IMPLIED WARRANTIES, SO SUCH EXCLUSION MAY NOT APPLY TO YOU. 6. Limitation on Liability. EXCEPT TO THE EXTENT REQUIRED BY APPLICABLE LAW, IN NO EVENT WILL LICENSOR BE LIABLE TO YOU ON ANY LEGAL THEORY FOR ANY SPECIAL, INCIDENTAL, CONSEQUENTIAL, PUNITIVE OR EXEMPLARY DAMAGES ARISING OUT OF THIS LICENSE OR THE USE OF THE WORK, EVEN IF LICENSOR HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. 7. Termination a. This License and the rights granted hereunder will terminate automatically upon any breach by You of the terms of this License. Individuals or entities who have received Adaptations or Collections from You under this License, however, will not have their licenses terminated provided such individuals or entities remain in full compliance with those licenses. Sections 1, 2, 5, 6, 7, and 8 will survive any termination of this License. b. Subject to the above terms and conditions, the license granted here is perpetual (for the duration of the applicable copyright in the Work). Notwithstanding the above, Licensor reserves the right to release the Work under different license terms or to stop distributing the Work at any time; provided, however that any such election will not serve to withdraw this License (or any other license that has been, or is required to be, granted under the terms of this License), and this License will continue in full force and effect unless terminated as stated above. 8. Miscellaneous a. Each time You Distribute or Publicly Perform the Work or a Collection, the Licensor offers to the recipient a license to the Work on the same terms and conditions as the license granted to You under this License. b. Each time You Distribute or Publicly Perform an Adaptation, Licensor offers to the recipient a license to the original Work on the same terms and conditions as the license granted to You under this License. c. If any provision of this License is invalid or unenforceable under applicable law, it shall not affect the validity or enforceability of the remainder of the terms of this License, and without further action by the parties to this agreement, such provision shall be reformed to the minimum extent necessary to make such provision valid and enforceable. d. No term or provision of this License shall be deemed waived and no breach consented to unless such waiver or consent shall be in writing and signed by the party to be charged with such waiver or consent. e. This License constitutes the entire agreement between the parties with respect to the Work licensed here. There are no understandings, agreements or representations with respect to the Work not specified here. Licensor shall not be bound by any additional provisions that may appear in any communication from You. This License may not be modified without the mutual written agreement of the Licensor and You. f. The rights granted under, and the subject matter referenced, in this License were drafted utilizing the terminology of the Berne Convention for the Protection of Literary and Artistic Works (as amended on September 28, 1979), the Rome Convention of 1961, the WIPO Copyright Treaty of 1996, the WIPO Performances and Phonograms Treaty of 1996 and the Universal Copyright Convention (as revised on July 24, 1971). These rights and subject matter take effect in the relevant jurisdiction in which the License terms are sought to be enforced according to the corresponding provisions of the implementation of those treaty provisions in the applicable national law. If the standard suite of rights granted under applicable copyright law includes additional rights not granted under this License, such additional rights are deemed to be included in the License; this License is not intended to restrict the license of any rights under applicable law. Creative Commons Notice Creative Commons is not a party to this License, and makes no warranty whatsoever in connection with the Work. Creative Commons will not be liable to You or any party on any legal theory for any damages whatsoever, including without limitation any general, special, incidental or consequential damages arising in connection to this license. Notwithstanding the foregoing two (2) sentences, if Creative Commons has expressly identified itself as the Licensor hereunder, it shall have all rights and obligations of Licensor. Except for the limited purpose of indicating to the public that the Work is licensed under the CCPL, Creative Commons does not authorize the use by either party of the trademark "Creative Commons" or any related trademark or logo of Creative Commons without the prior written consent of Creative Commons. Any permitted use will be in compliance with Creative Commons' then-current trademark usage guidelines, as may be published on its website or otherwise made available upon request from time to time. For the avoidance of doubt, this trademark restriction does not form part of the License. Creative Commons may be contacted at http://creativecommons.org/. telephony-service-0.5.3/ChangeLog000066400000000000000000016236641455543255600167760ustar00rootroot000000000000002024-01-28 Mike Gabriel * Release 0.5.3 (HEAD -> main, tag: 0.5.3) 2024-01-04 Mike Gabriel * Merge branch 'fix/protocoltestBuilding' into 'main' (f94266a6) 2024-01-01 OPNA2608 * tests/libtelephonyservice/CMakeLists: Fix ProtocolTest build (d8f0f38f) 2024-01-04 Mike Gabriel * Merge branch 'fix/qmldirCrossCondition' into 'main' (c3fabd0f) 2024-01-01 OPNA2608 * CMakeLists: Fix cross-conditional for QT_INSTALL_QML determining (c1946344) 2024-01-04 Mike Gabriel * Merge branch 'fix/gnuinstalldirsUsage' into 'main' (f9881e9e) 2024-01-02 OPNA2608 * Add more/better GNUInstallDirs variables usage (9a35a50c) 2023-12-27 Weblate * Added translation using Weblate (Tamil (Sri Lanka)) (186d2c68) * Added translation using Weblate (Meadow Mari) (bd9783b9) * Added translation using Weblate (Crimean Tatar) (26599f2c) * Added translation using Weblate (Chuvash) (60c51eb9) * Added translation using Weblate (Silesian) (47a81dcb) * Added translation using Weblate (Venetian) (7c183421) * Added translation using Weblate (Ossetian) (20a0430e) * Added translation using Weblate (Sami (Northern)) (08464b84) * Added translation using Weblate (Greenlandic) (bd4da9cd) * Added translation using Weblate (Assamese) (cbbf2743) * Added translation using Weblate (Haitian) (7e74ec48) * Added translation using Weblate (Cornish) (75de726d) * Added translation using Weblate (Frisian) (dada2907) * Added translation using Weblate (Kashubian) (fdec127d) * Added translation using Weblate (Aragonese) (5f503036) * Added translation using Weblate (Tibetan) (bbb481a8) * Added translation using Weblate (Tigrinya) (72f336a9) 2023-12-26 Weblate * Added translation using Weblate (German (Walser)) (4dc76745) * Added translation using Weblate (Italian (it_CARES)) (0deffc9e) * Added translation using Weblate (Latin) (bc9ee1bf) * Added translation using Weblate (Tatar) (d76a7c12) * Added translation using Weblate (Chinese (Simplified) (zh_LATN@pinyin)) (11dc1d41) * Added translation using Weblate (Filipino) (f146c4a2) 2023-12-16 Hosted Weblate * Update translation files (1f12de50) 2023-12-16 Mike Gabriel * po/telephony-service.pot: Update translation template. (c2697f6e) * Merge branch 'ubports/focal_-_custom_ringtone' into 'main' (3f476ef4) 2023-12-02 Lionel Duboeuf * Contact Ringtone (520bdbb0) 2023-12-04 Reza Almanda * Translated using Weblate (Indonesian) (5fbd7285) 2023-12-05 gallegonovato * Translated using Weblate (Spanish) (494df9ba) 2023-12-05 Ratchanan Srirattanamet * Merge branch 'c++17' into 'main' (64d2c990) 2023-11-25 Luca Weiss * Upgrade C++ standard to C++17 (b77349ac) 2023-12-05 Ratchanan Srirattanamet * Merge branch 'mktemp-busybox' into 'main' (3aec786d) 2023-11-25 Luca Weiss * Make mktemp call compatible with busybox (10a40474) 2023-11-10 Marius Gripsgard * Merge branch 'libintl-include' into 'main' (5dbc2704) 2023-10-18 Luca Weiss * Fix compile error in some setups (7d586fb6) 2023-11-10 Marius Gripsgard * Merge branch 'qstring-null' into 'main' (19423a0e) 2023-10-18 Luca Weiss * Replace deprecated QString::null (e9b02ed4) 2023-10-17 Weblate * Added translation using Weblate (Xhosa) (2ba8803a) * Added translation using Weblate (Manx) (0c7d60bc) * Added translation using Weblate (Corsican) (57b83279) * Added translation using Weblate (Chechen) (654a491e) * Added translation using Weblate (Wolof) (36b8456d) * Added translation using Weblate (Kurdish (Central)) (e7e23fa6) * Added translation using Weblate (Uzbek) (b445cdc0) * Added translation using Weblate (Kyrgyz) (fd2259a1) * Added translation using Weblate (Kurdish) (6f9332cf) * Added translation using Weblate (Sotho (Southern)) (7d7879e0) * Added translation using Weblate (Kannada) (1f46b2c9) * Added translation using Weblate (Kazakh) (d005a893) * Added translation using Weblate (Faroese) (9cbf5318) * Added translation using Weblate (Norwegian Nynorsk) (37345af3) * Added translation using Weblate (Swahili) (82eb97d9) * Added translation using Weblate (Afrikaans) (6f6f1f72) * Added translation using Weblate (Marathi) (6cff9bba) * Added translation using Weblate (Vietnamese) (81c53ced) * Added translation using Weblate (Odia) (ca2ca845) * Added translation using Weblate (Bengali) (065c8c48) * Added translation using Weblate (Estonian) (6b17ea6c) * Added translation using Weblate (Irish) (56684954) 2023-10-15 Mike Gabriel * Release 0.5.2 (0419d2a8) (tag: 0.5.2) 2023-08-21 NPL * Translated using Weblate (Japanese) (b12ec1d0) 2023-08-12 NPL * Translated using Weblate (Japanese) (d70a0ff8) 2023-08-18 Mike Gabriel * Merge branch 'personal/peat-psuwit/hfd-othervibrate' into 'main' (83348a7e) 2023-08-10 Ratchanan Srirattanamet * debian/*.user.service: allow telephony to bypass "Other vibration" (d301ba6a) 2023-07-08 Rudra Harsh V.Singh * Translated using Weblate (English (Canada)) (f9b2eea0) 2023-07-10 abidin toumi * Translated using Weblate (Arabic) (7383c43c) 2023-06-30 Rudra Harsh V.Singh * Translated using Weblate (Sanskrit) (49e18d9b) 2023-06-30 Weblate * Added translation using Weblate (Sanskrit) (ea27a415) 2023-06-27 Rudra Harsh V.Singh * Translated using Weblate (English (Canada)) (3e678657) * Translated using Weblate (Hindi) (80024b4c) 2023-06-22 Lionel Duboeuf * Translated using Weblate (French) (ce924a79) 2023-04-15 Lundrin * Translated using Weblate (Hungarian) (2889cf07) 2023-04-12 Temuri Doghonadze * Translated using Weblate (Georgian) (99331bf7) 2023-04-11 Temuri Doghonadze * Translated using Weblate (Georgian) (119ea55c) * Translated using Weblate (Georgian) (d44d4827) 2023-04-04 gallegonovato * Translated using Weblate (Spanish) (6c57480d) 2023-03-31 Sylke Vicious * Translated using Weblate (Italian) (bf235eb1) 2023-03-30 Sylke Vicious * Translated using Weblate (Italian) (7130be92) 2023-03-30 Jozef Mlich * Translated using Weblate (Czech) (6b8fe09d) 2023-03-27 Jozef Mlich * Translated using Weblate (Czech) (c1c976d1) 2023-03-03 Taisei Washington * Translated using Weblate (Japanese) (5b34b0ae) 2023-03-01 Allan Nordhøy * Translated using Weblate (Icelandic) (27b4e649) 2023-02-28 Luna Jernberg * Translated using Weblate (Swedish) (d7f4f4a9) 2023-02-26 Luna Jernberg * Translated using Weblate (Swedish) (6a7ee6f9) 2023-02-20 Sergii Horichenko * Translated using Weblate (Ukrainian) (3bafce99) 2023-02-21 Heimen Stoffels * Translated using Weblate (Dutch) (78fca8f0) 2023-02-19 Sergii Horichenko * Translated using Weblate (Russian) (867d6416) 2023-02-18 Sergii Horichenko * Translated using Weblate (Russian) (7509e969) 2023-02-16 phlostically * Translated using Weblate (Esperanto) (8374ba86) 2023-02-15 Adolfo Jayme Barrientos * Translated using Weblate (Spanish) (c19a8be1) 2023-02-15 Mike Gabriel * Translated using Weblate (German) (5ae52eb3) 2023-02-14 Mike Gabriel * Release 0.5.1 (f5e61833) (tag: 0.5.1) 2023-02-13 Mike Gabriel * Merge branch 'personal/peat-psuwit/58-micmute-on-telephony-service' into 'main' (99d672f6) 2023-02-14 Ratchanan Srirattanamet * handler/callhandler: also mute microphone via Pulseaudio (b0d4fa76) 2023-02-13 Guido Berhoerster * Merge branch 'personal/lduboeuf/fix_missing_desktop_file' into 'main' (a2d21d24) 2023-02-13 Lionel Duboeuf * fix telephony-service-call.desktop not installed fixes https://gitlab.com/ubports/development/core/telephony-service/-/issues/66 (4b1e14f1) 2023-02-08 gnu-ewm * Translated using Weblate (Polish) (c28b6064) 2023-02-07 Ivo Xavier * Translated using Weblate (Portuguese) (d2b304c3) 2023-02-07 Allan Nordhøy * Translated using Weblate (Norwegian Bokmål) (9c8136b7) 2023-02-06 Sergii Horichenko * Translated using Weblate (Ukrainian) (3b095657) 2023-02-06 Hosted Weblate * Update translation files (4d9bac98) 2023-02-06 Mike Gabriel * Merge branch 'personal/gber/modernize-i18n' into 'main' (9ea93375) 2023-02-06 Guido Berhoerster * Update .pot file (48fe52a3) * Replace literal UTF-8 encoded em dash with octal escape sequence (7049577f) * Modernize i18n (36e26777) * Use CMake >= 3.5 (5cca9b86) 2023-02-04 Mike Gabriel * Translated using Weblate (German) (1c1f6ec5) 2023-01-31 Mike Gabriel * Translated using Weblate (German) (c116f400) 2023-01-30 Sergii Horichenko * Translated using Weblate (Russian) (315640ed) 2023-01-30 Ivo Xavier * Translated using Weblate (Portuguese) (421d6b63) 2023-01-28 Allan Nordhøy * Translated using Weblate (Norwegian Bokmål) (add16fe5) 2023-01-29 Mike Gabriel * Merge branch 'kingu-main-patch-66488' into 'main' (bfe07db1) 2023-01-28 Allan Nordhøy * Messagingmenu language reworked (f46d5909) 2023-01-26 Allan Nordhøy * Translated using Weblate (Norwegian Bokmål) (4187c057) 2023-01-24 gnu-ewm * Translated using Weblate (Polish) (c9ccee1e) 2023-01-24 Allan Nordhøy * Translated using Weblate (Norwegian Bokmål) (92221b79) 2023-01-21 Sergii Horichenko * Translated using Weblate (Ukrainian) (a00bf479) 2023-01-21 Daniel Frost * Translated using Weblate (German) (e30affc8) 2023-01-21 Sergii Horichenko * Translated using Weblate (Ukrainian) (06360c84) 2023-01-20 Sergii Horichenko * Translated using Weblate (Russian) (809335fc) 2023-01-19 Hosted Weblate * Update translation files (364439d2) 2023-01-19 Mike Gabriel * po/: Update .pot file. (331bc247) * Merge branch 'main_-_cellbroadcast' into 'main' (950da3e2) 2022-06-14 Lionel Duboeuf * Support Cell Broadcast (655bc6f0) 2023-01-17 Mike Gabriel * Merge branch 'personal/gber/fix-icon-size' into 'main' (5cc6e077) 2023-01-16 Guido Berhoerster * Edit icons so they have the correct size (e7c31503) * Merge branch 'personal/sunweaver/ayatana-indicators' into 'main' (7a56a186) 2023-01-13 Mike Gabriel * debian/telephony-service.telephony-service-indicator.user.service: s/indicators-pre.target/ayatana-indicators.target/g. (44a7cf09) 2023-01-14 Dan * Translated using Weblate (Ukrainian) (c01417e7) 2023-01-15 Sergii Horichenko * Translated using Weblate (Russian) (22637308) 2023-01-13 Mike Gabriel * Release 0.5 (5463d0f5) (tag: 0.5) * README -> README.md (convert to markdown and add i18n contribution hint). (42ccd56b) 2023-01-11 Dan * Translated using Weblate (Ukrainian) (c13a911f) 2023-01-06 Mike Gabriel * Merge branch 'main_-_rotatedimages' into 'main' (8879588a) 2023-01-05 Lionel Duboeuf * Handle rotated images (65af455d) 2023-01-04 Anonymous * Translated using Weblate (Pampanga) (fbabd8eb) * Translated using Weblate (Chinese (Min Nan)) (b103c167) * Translated using Weblate (Kurdish (Southern)) (1a6f9067) * Translated using Weblate (French (Switzerland)) (ac472ae7) * Translated using Weblate (Kurdish (Northern)) (fdd85821) * Translated using Weblate (Shan) (c89c87f9) * Translated using Weblate (Bemba) (e9412853) * Translated using Weblate (Oromo) (b798155a) * Translated using Weblate (Dhivehi) (810dbfa8) * Translated using Weblate (Kabyle) (3db56f9d) * Translated using Weblate (Nyanja) (71b6eba1) * Translated using Weblate (Sindhi) (0b057adc) * Translated using Weblate (Lojban) (9dfbc368) * Translated using Weblate (Macedonian) (1354b566) * Translated using Weblate (Maori) (05f420e2) * Translated using Weblate (Malayalam) (d90e2acd) * Translated using Weblate (Friulian) (e334a6ac) * Translated using Weblate (Malagasy) (34df0482) * Translated using Weblate (Pashto) (42255717) * Translated using Weblate (Bulgarian) (a4b2d07d) * Translated using Weblate (Telugu) (49087558) * Translated using Weblate (Tajik) (fd806b3d) * Translated using Weblate (Turkmen) (0888966d) * Translated using Weblate (Lao) (828850af) * Translated using Weblate (Lingala) (b5ebce5e) * Translated using Weblate (Luxembourgish) (79ce1c17) 2023-01-04 Muhammad * Translated using Weblate (Urdu) (7f23d3e9) 2023-01-04 Anonymous * Translated using Weblate (Ido) (72897f20) * Translated using Weblate (Tetum) (97dfb4ea) * Translated using Weblate (Scots) (07f9fae0) * Translated using Weblate (Franco-Provençal) (bb0f820e) * Translated using Weblate (Nepali) (a0e80fb6) * Translated using Weblate (Burmese) (a6a6686f) 2023-01-05 Mike Gabriel * Revert "Deleted translation using Weblate (Chinese (Traditional, Hong Kong))" (123d6659) * Revert "Added translation using Weblate (Chinese (Traditional, Hong Kong))" (ab0ecb95) 2023-01-04 Weblate * Added translation using Weblate (Chinese (Traditional, Hong Kong)) (f9629009) 2023-01-04 Mike Gabriel * Deleted translation using Weblate (Chinese (Traditional, Hong Kong)) (59198fb8) 2023-01-04 Weblate * Added translation using Weblate (Pampanga) (67433299) * Added translation using Weblate (Chinese (Min Nan)) (a99488ee) * Added translation using Weblate (Kurdish (Southern)) (6f611764) * Added translation using Weblate (French (Switzerland)) (48cc80a8) * Added translation using Weblate (Kurdish (Northern)) (b947db49) * Added translation using Weblate (Shan) (1ff3ebc1) * Added translation using Weblate (Bemba) (bda0fd23) * Added translation using Weblate (Oromo) (40e1bf00) * Added translation using Weblate (Afar) (755fbe1a) * Added translation using Weblate (Dhivehi) (5c4e0cd7) * Added translation using Weblate (Kabyle) (2d517730) * Added translation using Weblate (Nyanja) (068a3451) * Added translation using Weblate (French (Canada)) (594aa8a7) * Added translation using Weblate (English (Canada)) (f9e0a60b) * Added translation using Weblate (Sindhi) (0e7f2156) * Added translation using Weblate (Lojban) (dc021955) * Added translation using Weblate (English (United States)) (d4b19ed6) * Added translation using Weblate (Georgian) (6bdadba5) * Added translation using Weblate (Macedonian) (e2bf834c) * Added translation using Weblate (Maori) (ef9fdc0e) * Added translation using Weblate (Malayalam) (2d217a1e) * Added translation using Weblate (Friulian) (ded9a18e) * Added translation using Weblate (Malagasy) (903e9aa0) * Added translation using Weblate (Hindi) (38ac4383) * Added translation using Weblate (Armenian) (bb792a90) * Added translation using Weblate (Pashto) (7d801400) * Added translation using Weblate (Bulgarian) (f8d99960) * Added translation using Weblate (Esperanto) (67189e5d) * Added translation using Weblate (Telugu) (a5fb8c64) * Added translation using Weblate (Tajik) (e6ae9af9) * Added translation using Weblate (Turkmen) (ee23bead) * Added translation using Weblate (Lithuanian) (8f2321d1) * Added translation using Weblate (Lao) (bc032e56) * Added translation using Weblate (Lingala) (f825399a) * Added translation using Weblate (Luxembourgish) (07cb3694) * Added translation using Weblate (Gujarati) (39504062) 2023-01-03 Muhammad * Translated using Weblate (Urdu) (95bf63d7) 2023-01-03 Weblate * Added translation using Weblate (Urdu) (db01888b) * Added translation using Weblate (Ido) (6bde603c) * Added translation using Weblate (Tetum) (2fa654f1) * Added translation using Weblate (Scots) (b6b73151) * Added translation using Weblate (Franco-Provençal) (65e5f3c5) 2023-01-03 Hosted Weblate * Update translation files (16d053d4) 2022-12-14 Marius Gripsgard * Merge branch 'personal/gberh/approver-startup' into 'main' (04bd7692) 2022-12-13 Guido Berhoerster * Start telephony-service-approver before Lomiri (7087c5d7) 2022-12-13 Marius Gripsgard * Merge branch 'personal/gberh/xenial-merge' into 'main' (c3254a1f) 2022-05-06 Lionel Duboeuf * prevent deadlock when several ContactWatcher instance is being removed. (7e98453e) 2022-05-04 Lionel Duboeuf * delay request deletion (bf8d63cd) 2022-03-29 Lionel Duboeuf * MMS: update attachment metadata when we compress a file (0d7f04e5) 2022-12-12 Alfred Neumayer * Merge branch 'personal/mariogrip/updatedbuspath' into 'main' (ca8e3a8d) 2022-12-08 Marius Gripsgard * Update dbus path for renamed LomiriGreeter (0d05079c) 2022-12-04 Mike Gabriel * Merge branch 'MMS-redownload-xenial-to-focal' into 'main' (eecbc2b6) 2022-01-06 jEzEk * Revert status on dbus reply error on message redownload (2e1f3ef3) 2021-12-15 Florian Leeber * Merge pull request #20 from jezek/xenial_-_failed-MMS-redownload (a3daaa31) 2022-11-04 Mike Gabriel * Merge branch 'personal/peat-psuwit/x-lomiri' into 'main' (3e71af21) 2022-11-04 Ratchanan Srirattanamet * Adjust for x-{canonical,lomiri} notification hint rename (7cc493a7) Fixes: https://gitlab.com/ubports/development/core/telephony-service/-/issues/57 2022-11-03 Ratchanan Srirattanamet * Merge branch 'personal/peat-psuwit/correct-installsystemduser' into 'main' (e117f2a0) * debian/*: correct the installation of systemd user unit (56489e72) 2022-08-21 Ratchanan Srirattanamet * Merge branch 'systemd-migration' into 'main' (338db188) 2022-08-15 Guido Berhoerster * Migrate upstart job to systemd (618393c7) 2022-08-15 Ratchanan Srirattanamet * Merge branch 'fix-ofono-setup' into 'main' (cce62eca) 2022-08-11 Guido Berhoerster * Handle non-Android systems missing getprop gracefully (df45b2c4) * Rename com.ubuntu.phone gsetting to com.lomiri.phone (418c782d) 2022-04-22 Ratchanan Srirattanamet * Merge branch 'port-to-lomiri-url-dispatcher' into 'main' (37272505) 2022-04-20 Guido Berhoerster * Port to lomiri-url-dispatcher (25b82fcb) 2022-02-28 Guido Berhoerster * Merge branch 'ubports/focal_-_lomiri-telephony-apps' into 'main' (459ef030) 2022-02-23 Guido Berhoerster * Rename macros from CANONICAL to LOMIRI (671422fd) 2022-01-27 Guido Berhoerster * Adjust messaging app DBus name (a7db7d77) * Rename com.canonical namespace to com.lomiri (9d1e1731) * Port to Lomiri greeter (8ed15c12) 2022-01-26 Guido Berhoerster * Remove unused dependency on qml-module-ubuntu-onlineaccounts (573bc4c4) * Switch to lomiri-sounds (3a671d40) * Remove bazaar files (4aa68f98) * Port to Lomiri Repowerd (e4fd0502) 2021-12-03 Guido Berhoerster * Add python3 dependency for phone-gsettings-migration.py (2d443a52) * Remove unused snapcraft.yml (30b8cacf) * Remove obsolete Unity8 account plugins (a2fa7e55) 2021-11-19 Guido Berhoerster * Update Debian packaging (5c8032e5) * Rename QML module Ubuntu.Telephony to Lomiri.Telephony (707ac2f5) * Fix renamed QML modules and DBus names/paths (4f785816) 2021-11-17 Guido Berhoerster * Do not hardcode dconf-service path (d7c7ac27) * Fix dependencies (e6336937) 2021-08-17 Florian Leeber * Merge pull request #40 from ubports-weblate/weblate-ubports-telephony-service (aae257e7) 2021-07-16 Weblate * Translated using Weblate (Thai) - 26.0% (18 of 69 strings) (bdd0c8b7) 2021-08-14 Florian Leeber * Do not create a useless account0 in setup of ofono when accounts are created elsewhere (#41) (a8ecdcd6) 2021-06-24 Rodney * Merge pull request #38 from ubports-weblate/weblate-ubports-telephony-service (05670106) 2021-06-09 Weblate * Translated using Weblate (Japanese) - 73.9% (51 of 69 strings) (708e483f) 2021-06-16 Dalton Durst * Revert "[handler] Improve sink and source find and select" (#39) (daf06b1d) 2021-06-02 Rodney * Merge pull request #35 from ubports-weblate/weblate-ubports-telephony-service (ff29aec0) 2021-06-01 Weblate * Translated using Weblate (Swedish) - 89.8% (62 of 69 strings) (5650d8fd) 2021-01-08 Marius Gripsgard * [handler] Improve sink and source find and select (0355e78b) 2021-05-26 Lionel Duboeuf * PhoneUtils: Add method to get the country prefix from a locale string (#29) (99315949) 2021-05-24 Rodney * Merge pull request #34 from ubports-weblate/weblate-ubports-telephony-service (e1638184) 2021-05-23 Weblate * Translated using Weblate (Thai) - 4.3% (3 of 69 strings) (02471346) 2021-05-20 Rodney * Merge pull request #33 from ubports-weblate/weblate-ubports-telephony-service (fee8acf1) 2021-05-19 Weblate * Translated using Weblate (Galician) - 100.0% (69 of 69 strings) (75d7eda1) 2021-05-13 Rodney * Merge pull request #30 from ubports-weblate/weblate-ubports-telephony-service (f9ed046e) 2021-05-03 Weblate * Translated using Weblate (Chinese (Simplified)) - 100.0% (69 of 69 strings) (cf79e3c8) 2021-04-07 Florian Leeber * Prevent switching to loudspeaker too early, when disconnect tones are still played (#28) (27381560) 2021-03-26 Rodney * Merge pull request #27 from ubports-weblate/weblate-ubports-telephony-service (4abf3a3f) 2021-03-26 Weblate * Translated using Weblate (Russian) - 100.0% (69 of 69 strings) (ee2a814d) 2021-03-23 Florian Leeber * Merge pull request #26 from ubports-weblate/weblate-ubports-telephony-service (00b271be) 2021-03-22 Weblate * Translated using Weblate (Arabic) - 72.4% (50 of 69 strings) (f9598694) 2021-03-21 Florian Leeber * Merge pull request #25 from ubports-weblate/weblate-ubports-telephony-service (0086d31c) 2021-03-16 Weblate * Manual repair (8bb7d493) 2021-03-14 Josué * Translated using Weblate (Spanish) - 100.0% (69 of 69 strings) (e430857f) 2021-03-10 Jan Christian Sherdahl * Translated using Weblate (Norwegian Bokmål) - 100.0% (69 of 69 strings) (94188bd0) 2021-03-03 helabasa * Translated using Weblate (Sinhala) - 2.8% (2 of 69 strings) (554e9055) 2021-03-02 helabasa * Added translation using Weblate (Sinhala) (c8f64a29) 2021-02-14 louies0623 * Translated using Weblate (Chinese (Traditional)) - 100.0% (69 of 69 strings) (30ba1e40) 2021-01-31 imrufbd * Translated using Weblate (Bengali (Bangladesh)) - 5.7% (4 of 69 strings) (70c3a6ba) 2021-01-31 Anne Onyme * Translated using Weblate (French) - 100.0% (69 of 69 strings) (c296438c) 2021-02-01 Heimen Stoffels * Translated using Weblate (Dutch) - 100.0% (69 of 69 strings) (2e6c729f) 2021-01-31 Stefan Kalb * Translated using Weblate (German) - 100.0% (69 of 69 strings) (e8532a8d) 2021-02-01 Ivo Xavier * Translated using Weblate (Portuguese) - 100.0% (69 of 69 strings) (3aead6b2) 2021-01-31 Milan Korecký * Translated using Weblate (Czech) - 100.0% (69 of 69 strings) (feaa6d24) 2021-02-02 Joan CiberSheep * Translated using Weblate (Catalan) - 100.0% (69 of 69 strings) (2d8759af) 2021-01-31 imrufbd * Added translation using Weblate (Bengali (Bangladesh)) (b16ef6d0) 2021-01-27 Adam * Translated using Weblate (Hungarian) - 98.5% (68 of 69 strings) (6a87b9fd) 2021-01-23 Marius Gripsgard * Merge pull request #22 from ubports/xenial_-_drop-ubuntu-sounds (7b2f5911) 2021-01-22 Rodney Dawes * Verify the QTemporaryFile fileName is not empty. (5cadf9e7) * Update the sounds package dependency. (072b2792) 2021-01-17 Mike * Translated using Weblate (Italian) - 100.0% (69 of 69 strings) (9f4af5f9) 2021-01-17 anonymous * Translated using Weblate (Italian) - 100.0% (69 of 69 strings) (4d2a28ec) 2021-01-15 ierihon * Translated using Weblate (Russian) - 88.4% (61 of 69 strings) (1eb60d57) 2021-01-04 GK * Translated using Weblate (Tamil) - 100.0% (69 of 69 strings) (59ced559) 2020-12-31 GK * Translated using Weblate (Tamil) - 100.0% (69 of 69 strings) (3e39546c) 2020-12-25 Allan Nordhøy * Translated using Weblate (Norwegian Bokmål) - 100.0% (69 of 69 strings) (deb74b61) 2020-12-22 Yaron Shahrabani * Translated using Weblate (Hebrew) - 100.0% (69 of 69 strings) (2dcc311d) 2020-12-20 M.Sugahara * Translated using Weblate (Japanese) - 60.8% (42 of 69 strings) (ec76b69b) 2020-12-17 Enkli Ylli * Translated using Weblate (Albanian) - 30.4% (21 of 69 strings) (c539e73d) 2020-12-17 abidin * Translated using Weblate (Arabic) - 72.4% (50 of 69 strings) (238e236d) 2020-12-17 Efstathios Iosifidis * Translated using Weblate (Greek) - 100.0% (69 of 69 strings) (618d7272) 2020-12-17 Yaron Shahrabani * Translated using Weblate (Hebrew) - 91.3% (63 of 69 strings) (109e65cb) 2020-12-18 Kai Goldbeck * Translated using Weblate (German) - 98.5% (68 of 69 strings) (90632fd1) 2020-12-08 abidin * Translated using Weblate (Arabic) - 72.4% (50 of 69 strings) (6f634b29) 2020-11-30 Joan CiberSheep * Translated using Weblate (Catalan) - 100.0% (69 of 69 strings) (30b24698) 2020-11-30 Dalton Durst * Merge pull request #19 from ubports-weblate/weblate-ubports-telephony-service (3cebc461) 2020-11-30 Weblate * Translated using Weblate (Belarusian) - 100.0% (69 of 69 strings) (d8c51719) 2020-11-28 Weblate * Translated using Weblate (Japanese) - 59.4% (41 of 69 strings) (38dd474a) 2020-11-26 Florian Leeber * Merge pull request #13 from lduboeuf/xenial_-_mmslost (d65696ec) 2020-11-26 Lionel Duboeuf * fix typo in changelog (9bfa3868) 2020-11-23 Rodney * Merge pull request #18 from ubports-weblate/weblate-ubports-telephony-service (9c138269) 2020-11-23 Weblate * Translated using Weblate (Sardinian) - 1.4% (1 of 68 strings) (30087835) 2020-11-23 Florian Leeber * Merge pull request #17 from ubports-weblate/weblate-ubports-telephony-service (df010255) 2020-11-23 Weblate * Added translation using Weblate (Sardinian) (5dfaf61a) 2020-11-16 Marius Gripsgard * Merge pull request #16 from ubports/xenial_-_enable-contacts-arm64 (44467fad) 2020-11-16 Dalton Durst * Re-enable contact fetching on arm64 (3639849f) 2020-11-13 Rodney * Merge pull request #14 from peat-psuwit/xenial_-_telephony-fix-incomming-logic (926913a3) 2020-11-12 Ratchanan Srirattanamet * Fix channel incoming logic (efaf17f0) * Update Jenkinsfile to use shared library (d4bfb052) 2020-11-11 Lionel Duboeuf * update changelog (f8a6426b) * fix typo (262dd1da) 2020-10-29 Lionel Duboeuf * update translation (fed07f69) * change error Message (22bc74dd) * manage empty mms ( case where any issues occured during retrieval ) (1d25bdea) 2020-10-15 Florian Leeber * Merge pull request #12 from ubports/xenial_-_android9 (0a2e2a9d) 2020-10-07 Luca Weiss * Replace qt5_use_modules (#10) (abb2f14a) 2020-10-06 TheKit * handler: select output-speaker+wired_headphone port only if available (5525e12f) 2020-10-01 Florian Leeber * Merge pull request #11 from lduboeuf/xenial (8d2715fa) 2020-10-01 Lionel Duboeuf * update changelog (993b84e8) 2020-09-30 Florian Leeber * Merge pull request #9 from lduboeuf/xenial_-_displaysentdate (ecb02174) 2020-03-25 Lionel Duboeuf * use sent message date as timestamp reference for notification (66144645) 2020-02-12 Ratchanan Srirattanamet * Revert "Fallback to a2dp if no profile is set" (f80374d6) 2020-02-19 Marius Gripsgard * Add support for "Linux standard" pulseaudio profile/port names (cf811709) * Add option to build without UI services (eaf10285) 2020-02-23 Marius Gripsgard * Merge pull request #8 from bhush9/xenial_-_dropcmakecruft (484d46e2) 2020-02-22 Bhushan Shah * cmake: drop the cruft (28e78fe9) 2020-02-19 Marius Gripsgard * Remove unused gsettings (1bd34852) 2020-02-04 Marius Gripsgard * Remove unused platform apis (9ede9167) 2020-02-05 Marius Gripsgard * Do not run tests in parallel (33da8746) 2018-09-13 Alberto Mardegan * Update changelog (85b8ed1e) * ContactWatcher: use C++11 signal connections (58f327f8) * debian/control: Make xvfb optional, allows building in crossbuilder (c0921dd8) 2018-09-08 Alberto Mardegan * Bump upstream version (8fe2988c) * Merge pull request #2 from mardy/version-fix (e69c67d0) * Fix version of debian package (6394b921) 2018-09-01 Marius Gripsgard * Merge pull request #1 from mardy/xenial_-_latestqtpim (b6d87a11) 2018-07-25 Alberto Mardegan * Rebuild against latest QtPim (3f686d72) 2018-01-08 Marius Gripsgard * Imported to UBports (9efa14e3) 2017-04-05 Gustavo Pichorim Boiko * Fix watching the connection status changes and properly notify the changes to displayed accounts (41397af4) * Fix watching the connection status changes and properly notify the changes to displayed accounts (ee35c183) 2017-04-04 Tiago Salem Herrmann * Add requires to telepathy-rakia and mfw-plugin-irc (3b26eb5c) * Add requires to telepathy-rakia and mfw-plugin-irc (c81ccad4) 2017-03-31 Tiago Salem Herrmann * - Use alsasrc as a workaround to be able to record from the microphone. pulsesrc does not work on some environments. (751bda9d) * Use alsasrc as a workaround to be able to record from the microphone (4a01e2fb) 2017-03-29 Tiago Salem Herrmann * - Initialize pointer to avoid crashes. - Connect new accounts in case messaging-app is already active (dbd1ef85) * Connect new accounts in case messaging-app is already active (11fd12dd) * Initialize pointer to avoid crashes (2cc92202) 2017-03-22 Gustavo Pichorim Boiko * Disable PA on tests. (1ef2bff8) * Disable PA on tests. (35a98d78) * Monitor app and disconnect/connect accounts when appropriate. (d622789c) * Implemented contact match by online accounts (IRC). (1dc887f2) * Export startChat to QML. (ce8934a1) * Expose the account parameters to QML (26492e56) * Add ParticipantsModel (d2f9a5fe) * - Multiple performance improvements on Roles Interfaces and ContactWatcher - Changed upstart job to also launch telephony-service-indicator on desktop (0656c652) * Implement AudioRouteManager in telephony-service-handler (c10b1c61) * Add method to leave channel by properties. (3ae9cc4a) * Uses "ua_url_dispatcher_session_open" to launch external apps. (4cb4b01f) * Fix protocol filters (d772d111) * - Add more properties to the .protocol files - Expose method on dbus to leave all rooms from a certain account. (886d6a11) * Create unity8 sip account package. Create unity8 irc account package. (cd001d97) * Add VOIP support to telephony-service. (7f0766e4) * Fix copyright header dates. (4f02868a) 2017-03-22 Tiago Salem Herrmann * add entry to TODO list (ed252443) * use enums instead of uints and disconnect old instances of ChatEntry from the model (d2bcf0a3) * Move setChannels() back to protected (d9af4ede) * add more itens to TODO file (4b7cff04) * add descriptions to README (6ba6d242) 2017-03-21 Renato Araujo Oliveira Filho * Rename missing function. (1795a2fc) * Renamed activeAccountsChangedImpl function to match with the code style. (db077483) * Updated TODO. (4f5e9561) * Added missing license headers. (85c8900f) 2017-03-07 Tiago Salem Herrmann * Use connectionStatus() instead of connection()->status() (0493d2c0) * add connection status property (0dfe1b87) 2017-03-06 Tiago Salem Herrmann * check if there is a connection before disconnecting (11cafaa0) * Disable auto-connect on irc protocols (2b48ea78) 2017-03-03 Tiago Salem Herrmann * temporary fix for online detection (8e75adb0) * merge parent branch (c5e9ed11) * merge parent branch (e61279e5) * merge parent branch (e2dea098) * merge parent branch (da407572) * merge parent branch (6443d994) * merge parent branch (c107bd8a) * merge parent branch (60439dc3) * merge parent branch (ba96b60e) * merge parent branch (c91d5400) * merge parent branch (eed07527) * merge parent branch (f9cdca82) * merge parent branch (c922d0aa) * merge parent branch (4a5d8b53) * merge parent branch (24c1a093) 2017-02-24 Tiago Salem Herrmann * Fix sorting (f3aeb435) 2017-02-24 Gustavo Pichorim Boiko * Expose the account parameters to QML (12716cd0) 2017-02-22 Renato Araujo Oliveira Filho * Implemented contact match by online accounts (IRC). (ff2cb816) 2017-02-17 Tiago Salem Herrmann * merge parent (5155c468) * start indicator on desktop-start (684838bb) 2017-02-16 Tiago Salem Herrmann * fallback to threadId if no participant is provided (d0124e48) * change string comparison method (1e13e183) 2017-02-16 Renato Araujo Oliveira Filho * Notify individual accounts active change. (98934655) 2017-02-16 Tiago Salem Herrmann * include all participants (e5a55f98) * add more props to participants (d60e959a) 2017-02-16 Renato Araujo Oliveira Filho * Export startChat to QML. (b4d5c2cc) 2017-02-16 Tiago Salem Herrmann * add missing cpp file (8fc2adf5) 2017-02-15 Tiago Salem Herrmann * Add missing files (4c5fc3d6) * Add ParticipantsModel (eac44cf7) * merge parent (bc293658) 2017-02-13 Gustavo Pichorim Boiko * Fix OfonoAccountEntry test on vivid. (e27a8515) 2017-02-10 Tiago Salem Herrmann * merge parent branch (52639505) * merge parent branch (6c4f89f8) * merge parent branch (84515af9) * merge parent branch (7877311e) * merge parent branch (b8bb0419) * Add EnableChatStates property (1ed7977c) 2017-02-09 Tiago Salem Herrmann * merge parent branch (38e98ff7) * merge parent branch (7d0177d5) * merge parent branch (6451a8e5) * merge parent branch (17a3263e) * merge parent branch (539ce7a1) * merge parent branch (6be3e3ef) * merge parent branch (d7bc99a9) 2017-02-09 Gustavo Pichorim Boiko * Fix displaying the messaging menu item for VOIP calls, and make them activatable. (d8b8ab5f) * Do not show the text reply options for protocols that don't have text capabilities (9c915539) 2017-02-08 Gustavo Pichorim Boiko * Remove debugs (f364fc8d) * Request contacts for all accounts, not only phone ones, and add some debug to the messaging menu. (ad19d816) 2017-02-06 Gustavo Pichorim Boiko * Build the pulseaudio stuff on all supported architectures. (0f743090) * Fix building. (611ac6d5) 2017-02-06 Tiago Salem Herrmann * Multiple performance improvements on Roles Interfaces and ContactWatcher (f3e440a1) * merge parent branch (eece06e9) 2017-02-06 Gustavo Pichorim Boiko * Merge parent (1824edcd) * Merge parent branch (1656a22d) * Merge parent branch (299c8287) * Merge parent branch (d1d62bd9) * Merge parent branch (967ed4e1) * Merge parent branch (62b0ece4) * Set the missed calls correctly for VOIP too. (b84c9a68) 2017-02-04 Renato Araujo Oliveira Filho * Remove debug messages. (a108f634) * Use 'liburl-dispatcher1-dev' to launch apps. (84c2b49c) * Debug messages. (b5427b5d) 2017-02-03 Renato Araujo Oliveira Filho * Fixed build. (26d79e59) * Parent merged. (e5121867) * Parent merged. (8115a36d) * Add missing compilation flag. (bf14b6d2) * Added missing dep. (6b2dbef5) * Use "QDesktopServices::openUrl(url);" instead of url-launcher API. (203617b9) 2017-02-03 Gustavo Pichorim Boiko * Initial code to move audio outputs to telephony-service (code by Tiago Salem Herrmann) (fd0df887) 2017-02-02 Tiago Salem Herrmann * Allow leave single channel by properties (c23876e7) * merge trunk (1866f8cb) 2017-02-01 Renato Araujo Oliveira Filho * Do not require 'libubuntu-application-api-dev' for all architectures. (c93337d1) 2017-01-31 Renato Araujo Oliveira Filho * Use ubuntu platform library instead of url-launcher. (d0fc3e09) * Fix build. (3cb8b27e) * Add "liburl-dispatcher1-dev" as dep to fix notification message click. (6c8ba8d0) 2017-01-31 Gustavo Pichorim Boiko * Strip whitespace (8493493f) * Make the approver do the contact search for other accounts than just phone ones. (70f3bb19) 2017-01-30 Gustavo Pichorim Boiko * Close the channel when the call ends (e2fd89d9) * Prepend the + sign for incoming phone numbers (00fee0e8) 2017-01-26 Renato Araujo Oliveira Filho * FIXME: Use plain password for sip accounts. (bcb88919) * trunk merged. (ddf84503) * Added 'telepathy-accounts-signon' as dep for sip account plugin. (52cedd5f) 2017-01-25 Tiago Salem Herrmann * Connect SIP account automatically (940b439f) * Connect IRC account automatically (367571b6) 2017-01-23 Gustavo Pichorim Boiko * Use the phone settings to apply phone number rewriting rules (c4e51d9b) 2017-01-19 Gustavo Pichorim Boiko * Merge parent (bcd10395) * Merge parent (319a2a4b) * Merge parent (dcd1dea6) * Fix the settings saving and retrieving (ec4cf168) 2017-01-19 Tiago Salem Herrmann * merge parent branch (b5a8bdea) * Add property: LeaveRoomsOnClose (6f349c74) 2017-01-18 Gustavo Pichorim Boiko * Add a way to read and write account properties (ecf168d1) 2017-01-17 Gustavo Pichorim Boiko * Emit the signal after the identifier has been normalized in contactwatcher (dd398525) 2017-01-16 Tiago Salem Herrmann * merge parent branch (52f28b6e) * merge parent branch (e826968e) * Add EnableTabCompletion property (08362ffb) 2017-01-13 Renato Araujo Oliveira Filho * Auto enable accounts after creation. (58b1e80c) * Fix irc provider name. (61c4c2bf) 2017-01-12 Renato Araujo Oliveira Filho * Format display name for irc accounts. Disable continue button if any of the basics fields are empty. (b7169f10) 2017-01-12 Gustavo Pichorim Boiko * Make it possible to enable/disable dialpad sounds (af1deb1f) 2017-01-12 Renato Araujo Oliveira Filho * Disable "continue" button if the main fields are empty. (676abb23) 2017-01-12 Gustavo Pichorim Boiko * Remove debugs (39d55eb0) * - Fix contact matching - Extract only the phone number from the SIP URI - Stop ringing when the call ends - Iterate over just the phone accounts to set the account name - Expose the modem name (2f879f77) 2017-01-11 Gustavo Pichorim Boiko * Expose the modem name. (86d4574c) * Select VOIP accounts by default (90b0abb0) 2017-01-11 Tiago Salem Herrmann * fix filtering accounts (756010d4) * merge parent branch (2c3d2543) * this is going to be added in another commit (2f26cdfa) * do not add accounts not in the protocols list (0898dca5) 2017-01-10 Renato Araujo Oliveira Filho * Fix account display name for irc accounts. (6ed4a33a) 2017-01-10 Tiago Salem Herrmann * merge parent branch (401d98bb) * Add EnableRejoin property (fe89ffa5) * Fix protocol filters (d5bcb2e0) * merge parent branch (fdd710d2) 2017-01-10 Renato Araujo Oliveira Filho * rename qml account plugin install dir, to follow the new service name. (143b0f2b) * Renamed install dir for qml accounts pluings. (c7be40fe) 2017-01-09 Renato Araujo Oliveira Filho * Use a new account provider. (ce96f8e0) 2017-01-09 Tiago Salem Herrmann * add new properties to ofono.protocol (374f2a1f) * Add option to disable attachments (6ed28726) 2017-01-05 Tiago Salem Herrmann * fix dbus signature (79fe8955) * add ReturnToSend (31d38221) * merge parent branch (d1294c5d) * merge parent branch (8d183438) * merge parent branch (8593dc50) * merge parent branch (cccc0090) * merge parent branch (50fd9909) * merge parent branch (bf8a85aa) 2017-01-04 Gustavo Pichorim Boiko * When matching SIP contacts, extract the phone number from the SIP URI (f00c8c88) * stop the ringing tone when the call ends (181054fa) 2017-01-04 Tiago Salem Herrmann * fix parameters for irc account creating (f45bfd27) 2017-01-04 Gustavo Pichorim Boiko * Iterate over the phone accounts only to set the name (ef2d5041) * Merge staging (ce01da29) * Merge trunk (6c04745b) 2017-01-04 Launchpad Translations on behalf of phablet-team * Launchpad automatic translations update. (8b4d4c5c) 2017-01-03 Bileto Bot * Resync trunk. (4a08569c) 2016-12-22 Renato Araujo Oliveira Filho * Fixed irc account creation. (e5b2b8c4) 2016-12-22 Launchpad Translations on behalf of phablet-team * Launchpad automatic translations update. (b0760814) 2016-12-21 Renato Araujo Oliveira Filho * Implement support for password on IRC account. (9cea389c) * Fix irc account params. (8e89f548) * Parent merged. (e43bc649) * staging merged. (3fd84418) 2016-12-20 Renato Araujo Oliveira Filho * Do not store empty parameters. (b6b062a7) * Implemented support fo advaced fields on sip and irc accounts. (17995b44) 2016-12-19 Renato Araujo Oliveira Filho * Update accounts view layout. (47768c8f) * Moved 'messaging-app.application' to messaging app package. (f1ba67ae) * Created 'irc' account plugin. (4e73cabe) * Refactory account plugin to allow extend it to new protocols. (0afca471) 2016-12-17 Gustavo Pichorim Boiko * Play the dialing tone before the ringing one. (b6d2c2a2) * Play the correct tone when the call is ringing. (969ea749) 2016-12-17 Launchpad Translations on behalf of phablet-team * Launchpad automatic translations update. (ed48dbff) 2016-12-16 Gustavo Pichorim Boiko * Play a tone when the call is ringing on the other end. (162c6802) 2016-12-16 Tiago Salem Herrmann * merge trunk (8d48c046) 2016-12-16 Gustavo Pichorim Boiko * Sync with trunk. (e9a3f918) 2016-12-16 Tiago Salem Herrmann * fix tests and protocol struct (e485dc16) * add property to join existing channels (5eec6a80) * only notify messages ono rooms that contain self username (4e9912d0) * merge parent branch (3d482683) 2016-12-16 Gustavo Pichorim Boiko * Implement mute for CMs that don't use hardware streaming. (f18424f1) 2016-12-16 Launchpad Translations on behalf of phablet-team * Launchpad automatic translations update. (3b68d7e1) 2016-12-15 Gustavo Pichorim Boiko * Fix DTMF, add more gstreamer debugging and add a protocol file for SIP. (0d62d009) 2016-12-15 Renato Araujo Oliveira Filho * Fix arch for online-account package. (cf6316d3) * Create unity8 sip account package. (976d5a57) 2016-12-15 Tiago Salem Herrmann * sync with trunk (42655518) 2016-12-13 Bileto Bot * Releasing 0.1+17.04.20161213.1-0ubuntu1 (cfc574bc) 2016-12-13 Tiago Salem Herrmann * Increase dbus-test-runner timeout to 6 minutes. Increase tests timeout to 6 minutes. (3cf77ab7) 2016-12-13 Roberto Mier Escandon * Requesting protocols from qml plugin using DBus in case protocols dir folder does not exits. This is needed in snappy to access available protocols from applications. (b662ff34) 2016-12-13 Renato Araujo Oliveira Filho * prefixes snap env var value to paths in case service is into a snap package (LP: #1629009) (4f452c85) 2016-12-13 Tiago Salem Herrmann * Reduce test timeout to 6 minutes (e15f6f45) 2016-12-12 Tiago Salem Herrmann * Increase tests timeout (f7577264) 2016-12-10 Launchpad Translations on behalf of phablet-team * Launchpad automatic translations update. (94ee1010) 2016-12-09 Tiago Salem Herrmann * Increase test timeout (31d4a9c6) 2016-12-09 Gustavo Pichorim Boiko * Remove not needed dependencies (2c71281b) 2016-12-08 Gustavo Pichorim Boiko * Fix some SIP-only behavior and add debug (93489149) 2016-12-06 Tiago Salem Herrmann * avoid crash by replacing mProtocol with new instances when protocols change (883ba358) * merge parent branch (3e85f89b) 2016-12-06 Launchpad Translations on behalf of phablet-team * Launchpad automatic translations update. (06ead310) 2016-12-05 Renato Araujo Oliveira Filho * Trunk merged. (33cef82f) 2016-12-05 Launchpad Translations on behalf of phablet-team * Launchpad automatic translations update. (ee9b359a) 2016-12-04 Launchpad Translations on behalf of phablet-team * Launchpad automatic translations update. (111499ca) 2016-12-03 Launchpad Translations on behalf of phablet-team * Launchpad automatic translations update. (77521654) 2016-12-02 Roberto Mier Escandon * removed not needed protocol manager test dependency (eef11f4c) * merged prereq branch (52e68cc4) * rolledback to any architecture build (36a49152) * completed tests for protocol manager (7e19679d) * first protocol manager test using dbus (642cda91) * protocol manager test not being a telepathy test (d53685ff) 2016-12-01 Gustavo Pichorim Boiko * Make it work with rakia (a3cd2ef5) 2016-12-01 Roberto Mier Escandon * added test to get protocols through dbus (ab30ee5f) * updated tests (39187656) * set explicitly the architectures to build (4fe4ef32) * first working version (01f65a56) * solved dependency problem in protocol manager test (51bf682a) 2016-11-30 Roberto Mier Escandon * not completed, exposing protocols info in dbus. Leaving also old way of reading files (91c85e5f) 2016-11-29 Bileto Bot * Releasing 0.1+17.04.20161129-0ubuntu1 (9b016efe) 2016-11-29 Gustavo Pichorim Boiko * Ignore the tone-generator dependency on s390x just to make it possible to land there. (aecec6c7) * Group chat support. (182e1a4e) 2016-11-28 Gustavo Pichorim Boiko * One more dependency (1a028210) 2016-11-28 Roberto Mier Escandon * corrected bad var reference (2beef4dd) 2016-11-25 Gustavo Pichorim Boiko * Merge parent (a026101b) * Merge trunk. (e078c0e9) * Ignore the tone-generator dependency on s390x just to make it possible to land there. (4ed9e391) * Merge staging branch. (ea7c9d02) 2016-11-24 Roberto Mier Escandon * added snapcraft.yaml and folder to mount ubuntu-app-platform (6d650b5a) * udpate hardcoded paths to be referenced to snap local path if needed (d4b05189) 2016-11-23 Gustavo Pichorim Boiko * Address comments. (9517918c) * Update copyright headers (09355e69) 2016-11-23 Launchpad Translations on behalf of phablet-team * Launchpad automatic translations update. (0c26bda8) 2016-11-11 Gustavo Pichorim Boiko * Replace the mms group option by mms enabled as groups are created in a different way now. (62f317a0) 2016-11-09 Gustavo Pichorim Boiko * Replace the mms group option by mms enabled as groups are created in a different way now. (e7b03030) 2016-11-04 Gustavo Pichorim Boiko * Remove the dependency on upstart so that it builds on s390x (18b9d8c2) * Conditionally disable TelepathyHelperTest on arm64 until we find out why it is failing there. (8000204b) 2016-10-29 Gustavo Pichorim Boiko * Fix tests. (af02303e) * Make sure we only request a channel for the desired account when chatType is Room. (a1becf53) 2016-10-28 Gustavo Pichorim Boiko * Remove debug leftover (173c22b2) * Fix the failing tests. (65b209f6) * Adapt the ChatManagerTest to the new behavior of splitting messages sent via accounts other than the phone ones. (751630e0) * Make sure we only request a channel for the desired account when chatType is Room. (3459a7e5) 2016-10-27 Gustavo Pichorim Boiko * Adapt the registration of objects and services to the way QtDBus works from 5.6.x on. (6183fac6) * Re-enable tests. (4f84976d) 2016-10-26 Gustavo Pichorim Boiko * Merge parent branch (f2209aae) * Merge staging branch (65e7ffbd) 2016-10-25 Gustavo Pichorim Boiko * Validates group title change synchronously (1fdddf44) 2016-10-24 Roberto Mier Escandon * validate-group-title-change (0d50a7fc) 2016-10-21 Gustavo Pichorim Boiko * Handle the account fallback cases using the protocol information. (ba49923c) * Creates the channel if in a conversation or conversation details pages when reconnection (f143b150) * Updated roles management using Roles interface client and events received from messaging framework. (e4dae8f1) * Change the fallback logic for the multimedia accounts. (cbb4d246) * Expose the roles for the participants. (aadc7fa7) * Forward the return value (4045bd69) * Merge parent (34cb9fe9) * Expose Telepathy RoomConfig's CanUpdateConfiguration property to QML (b273fff1) * Enable building against new tp-qt 0.9.7. (e310d806) * Make it possible to just start chats from the ChatEntry. This is particularly useful for creating group chats before actually sending messages. (b2d13a13) * Add support for adding and removing participants from group chats. (030a9ddf) * Make it possible to change the group title. (0ad1715b) * Merge parent branch (9ce1d881) * split multipart messages into multiple messages on some protocols (f6f170bd) * Add support for chat state. (80b3bbea) * Make it possible to send messages asynchronously and still report the results. (1d57968c) * Merge parent (130735f1) * Add a FIXME on a disabled test (5cfa1a8f) * Initial group chat support. (886d5ff8) 2016-10-21 Tiago Salem Herrmann * remove temporary comments (1938bbd4) 2016-10-20 Tiago Salem Herrmann * do not use the x-canonical-mms flag or the option mmsGroupChat() (db11bcd0) 2016-10-18 Gustavo Pichorim Boiko * Do not overload accounts when creating room. If the user tries to send a message to a room, the account informed should be used (as overloaded accounts might have a different room id) (cc065348) 2016-10-07 Gustavo Pichorim Boiko * Add QList variants for the fallback and overload functions to be used from QML (38d78b20) 2016-10-07 Launchpad Translations on behalf of phablet-team * Launchpad automatic translations update. (fc884944) 2016-10-06 Gustavo Pichorim Boiko * Merge parent (5c541ee5) 2016-10-06 Tiago Salem Herrmann * merge parent branch (07cbcf65) * merge parent branch (c51028a3) * merge parent branch (7814ca19) * merge parent branch (e725469a) * merge parent branch (dedc2530) * merge parent branch (d66b72fd) * merge parent branch (3d87fa29) * merge parent branch (f7804841) * merge parent branch (7c785037) * merge parent branch (3962b9f5) * merge parent branch (b55d96ae) * merge parent branch (3a3c8b0f) * merge parent branch (493e2384) * merge parent branch (9c24ea3a) * merge parent branch (cbd8b725) 2016-10-06 Roberto Mier Escandon * fixed (9ebdcf8a) 2016-10-05 Gustavo Pichorim Boiko * Expose a convenience method to tell whether an account uses phone numbers (ce898de8) * Return an empty list of fallback and overload accounts if the original account is null (f767d1d1) 2016-10-04 Gustavo Pichorim Boiko * Return empty lists if no fallback or overload accounts are found. (44721401) * Add a ShowOnlineStatus option in the protocol info file (f0a24c5c) * Make the fallback & overload methods available to QML (73a09b41) * Register AccountList in the QML plugin (ed0296f9) 2016-10-03 Gustavo Pichorim Boiko * Delay the account list initialization to make sure telepathyhelper is fully constructed. (dea6b8eb) * Remove the multimedia account type, it is not needed anymore. (dc012365) * Add code to look for fallback and overloaded accounts (50675363) * Use phone compare in the generic account for protocols that support the 'tel' field (154f8f52) * Expose the list of filtered accounts (1b15a16d) * Use a wrapper to expose the various list of accounts (99fb6e51) 2016-09-30 Gustavo Pichorim Boiko * Simplify the QML account-related properties by using a single function to return the count and the account at a given position. (b8259f02) * Add a README file explaining the .protocol file format (c632ddf2) * Add the necessary extra information to the Protocol class and description. (8ec136ae) 2016-09-29 Gustavo Pichorim Boiko * Merge parent branch (abee7476) * Initialize the variable (140205b2) 2016-09-28 Gustavo Pichorim Boiko * Fix one more crash when the Roles interface is not available. (449872d9) * Do not crash if the roles interface is not available. (cc1b825f) 2016-09-27 Bileto Bot * Releasing 0.1+16.10.20160927-0ubuntu1 (5c4ce2f5) 2016-09-27 Tiago Salem Herrmann * Request a wake lock so the device doesn't go to deep sleep when receiving an sms. (LP: #1516696) (db06af5a) * change requestWakeup to requestSysState (a061e943) 2016-09-26 Roberto Mier Escandon * emit selfcontactroleschanged signal when those roles changes for ui to be updated (1d9c7f92) * updated copyright (59b4f2f8) * updated roles management using interface (4132ebb2) 2016-09-26 Tiago Salem Herrmann * request wake lock so device doesn't go to deep sleep when receiving sms (1aff817a) 2016-09-19 Gustavo Pichorim Boiko * Adapt the registration of objects and services to the way QtDBus works from 5.6.x on. (6ba3be16) * Merge trunk (2773e8e5) 2016-09-16 Launchpad Translations on behalf of phablet-team * Launchpad automatic translations update. (a2599957) 2016-09-15 Bileto Bot * Resync trunk. (90409ed4) 2016-09-14 Gustavo Pichorim Boiko * Change the fallback logic for the multimedia accounts. (0eaa1fb5) 2016-09-10 Launchpad Translations on behalf of phablet-team * Launchpad automatic translations update. (2851be16) 2016-09-09 Bileto Bot * Releasing 0.1+16.10.20160909.1-0ubuntu1 (268c552b) 2016-09-09 Tiago Salem Herrmann * Move telepathy-ofono from "Depends" to "Suggests". (a3865220) * Fix test failure with new libphonenumber release. (e9d8f1b0) 2016-09-02 Bileto Bot * Releasing 0.1+16.10.20160902.1-0ubuntu1 (2bdca343) 2016-09-02 Alfonso Sanchez-Beato * Make sure we play notification sounds if media-hub re-starts (LP: #1544477). (LP: #1544477) (da950e1d) 2016-09-02 Gustavo Pichorim Boiko * Disable tests temporarily (d8ec5d01) * Add a build-dep on upstart to avoid building on s390x (d1d69fb1) 2016-09-01 Gustavo Pichorim Boiko * Re-enable tests. (fb6ff34c) * Disable QML tests on archs known to be broken (4f237e38) * Disable tests temporarily (241bcf8b) 2016-08-30 Tiago Salem Herrmann * do not request automatically if chatType == None (9436d4e0) * request leaveChat through handler (37b4a23e) 2016-08-29 Tiago Salem Herrmann * expose self contact roles to qml (892d48ef) * expose group flags to qml (8feeb19b) * Change 'Depends: telepathy-ofono' to 'Suggests'. This change allows unity8 to be installed without ofono. (b3035605) 2016-08-26 Tiago Salem Herrmann * merge parent branch (17a2cc4e) * merge parent branch (903a6edd) * merge parent branch (49f26dc8) * merge parent branch (5a7831f0) * merge parent branch (d1b19db2) * remove from pending members when applicable (a67c212d) * merge parent branch (39b96169) * merge parent branch (f72a4bd0) * add active property to chat entry (ef43f7f0) 2016-08-25 Gustavo Pichorim Boiko * Expose the roles for the participants. (1e664ab7) 2016-08-24 Gustavo Pichorim Boiko * Expose Telepathy RoomConfig's CanUpdateConfiguration property to QML (c44ab2d4) 2016-08-23 Alfonso Sanchez-Beato * Fix style issue (768af41c) * Make sure we play notification sounds if media-hub re-starts (LP: #1544477). (fe0e09a4) 2016-08-22 Launchpad Translations on behalf of phablet-team * Launchpad automatic translations update. (42e75c2b) 2016-08-16 Tiago Salem Herrmann * merge parent branch (e53e76cc) * merge parent branch (1263210f) * merge parent branch (9a7965a3) * merge parent branch (9d9506ad) * merge parent branch (ee0077ea) * merge parent branch (a7f430e9) * merge parent branch (9c083f02) * merge parent branch (5f0ea73f) * use history service to detect new threads (07f3d8bd) 2016-08-12 Tiago Salem Herrmann * merge parent branch (f965e7b6) * merge parent branch (0fc0670d) * merge parent branch (c0311552) * merge parent branch (af78d5c1) * merge parent branch (76e8f552) * merge parent branch (2f3e9d08) * merge parent branch (92479f29) * fix handler test (faddacfa) * merge parent branch (e57dddf9) * merge parent branch (15023500) * merge parent branch (5aa57f3e) * merge parent branch (febd6e69) * merge parent branch (ab6f89aa) * merge parent branch (2a1e367d) * merge parent branch (04fa838e) * merge parent branch (623a7bf8) * set targetId/threadId correctly (a70286ac) 2016-08-11 Tiago Salem Herrmann * merge parent branch (90a9e737) * merge parent branch (f77b02bc) * merge parent branch (81d5224b) * merge parent branch (e4d15f0a) * merge parent branch (d18efa01) * merge parent branch (8dea84f3) * merge parent branch (089d4bb9) * merge parent branch (c2e5aa2a) * Implement replying to multimedia groups from indicator (d1ae752b) 2016-08-10 Tiago Salem Herrmann * Fix test failure with new libphonenumber release (08e35231) 2016-08-05 Tiago Salem Herrmann * merge parent branch (72e8cc43) * merge parent branch (9b223591) * merge parent branch (e5100abd) * merge parent branch (e517b19c) * merge parent branch (12b1a95d) * merge parent branch (b66c91d9) * merge parent branch (0c4993b8) * merge parent branch (ab26fc1a) * fix tests (1a45eb64) * merge parent branch (33d79ae4) * merge parent branch (5629b525) * merge parent branch (fd959221) * merge parent branch (40c98450) * merge parent branch (a3c74c53) * merge parent branch (f301ac98) * merge parent branch (22bee73d) * merge parent branch (9907dfb5) * add service display name to protocol files (aab9740b) 2016-07-21 Tiago Salem Herrmann * merge parent branch (1963e988) * Add property to ChatEntry to avoid requesting channels automatically (127895d3) 2016-07-13 Gustavo Pichorim Boiko * Fix build (d09a5298) * Merge parent (2e60c9a1) * Merge parent (bfff0fb0) * merge parent (d1e10630) * merge parent (e4e874e2) * merge parent (b1a4a84b) * merge parent (de697673) * merge parent (71815a91) * Handle channel invalidation. (3bfab4a7) 2016-07-12 Gustavo Pichorim Boiko * Merge trunk (a3b4fb72) 2016-07-11 Tiago Salem Herrmann * merge parent branch (819c4bf4) * merge parent branch (cf6e7af8) * merge parent branch (3b435f30) * merge parent branch (f5e4c15e) * merge parent branch (7cabac96) * merge parent branch (7f2b1ec0) * merge parent branch (5cf7b975) * merge parent branch (cfe29859) * fix build (dbcd794a) * merge parent branch (27f77122) * merge parent branch (e6bec9c9) * merge parent branch (66e2e397) * merge parent branch (a451ddd3) * merge parent branch (bd7e1a58) * merge parent branch (2abe9070) * merge parent branch (7e71288b) * merge parent branch (792dd752) * do a small refactor on the code (63b3d61c) * merge parent branch (488b6903) * merge parent branch (f8222486) * merge parent branch (d6189de2) * merge parent branch (b54eeb4b) * merge parent branch (4f20584d) * merge parent branch (7063cd4a) * merge parent branch (d69860ce) * merge parent branch (f049dea0) * allow opening rooms in messaging app (19f405af) * use group name in notification bubble (67cc7760) * fix group management on mock using tp-qt 0.9.7 (f2844eaa) * enable building against new tp-qt (1d915851) * merge parent branch (e91ce645) 2016-07-09 Tiago Salem Herrmann * add chat rooms to handler filters (c40d16b6) 2016-07-07 Tiago Salem Herrmann * merge parent branch (d7ff30e3) * merge parent branch (1ed350b2) * merge parent branch (45da5088) * merge parent branch (8d10cb69) * merge parent branch (2c92b0f0) * merge parent branch (116b80b5) 2016-07-07 Gustavo Pichorim Boiko * Remove wrongly committed changelog. (7956bccb) * Fix build. (bc637bf0) 2016-07-07 Tiago Salem Herrmann * merge parent branch (fbabcf24) * merge parent branch (4dbefc0e) * merge parent branch (834f1f4d) * merge parent branch (5ee25bb9) * merge parent branch (e4eee118) * merge parent branch (af46f5c2) 2016-07-07 Gustavo Pichorim Boiko * Fix crash. (2d3526f9) * Make it possible to just start chats from the ChatEntry. This is particularly useful for creating group chats before actually sending messages. (0974a975) 2016-07-07 Tiago Salem Herrmann * merge parent branch (694ba054) * merge parent branch (b76744a8) * merge parent branch (1c26161a) * merge parent branch (3a7c927a) * merge parent branch (49c7add1) 2016-07-07 Gustavo Pichorim Boiko * Make startChat return the job's objectPath (49e328e7) * Expose chatstarting to dbus (67e865db) 2016-07-06 Gustavo Pichorim Boiko * Merge parent (9fb281f4) * Merge parent (a24da7b1) * Merge parent (1304a1c2) * Merge parent. (fa02573b) * Merge parent (ac29d922) * Merge parent (0b2818e4) * Merge trunk (92fc4e3b) 2016-07-05 Gustavo Pichorim Boiko * Remove obsolete comment (f19e4404) * Expose the pending participants too. (409fedd7) * Expose participants in chat entry. (a08db834) 2016-07-01 Gustavo Pichorim Boiko * Update copyright headers. (92159a6e) 2016-06-27 Tiago Salem Herrmann * merge parent branch (7f7d2478) * merge parent branch (0cc2cc79) * merge parent branch (2893c4a6) * merge parent branch (d58326d7) * remove mTypingTimer (6b3688f3) * merge parent branch (ecb2e496) * merge parent branch (072cacde) * merge parent branch (3d334181) * merge parent branch (45251dd8) * remove timer for chat state. it's done in the app now (0af12e3d) * merge parent branch (bc08c552) * merge parent branch (c8241113) * merge parent branch (1afbba48) * merge parent branch (236e7a98) * merge parent branch (20fff23d) * merge parent branch (30f8a661) * notify ChatState's to qml (6b609fcd) * merge parent branch (a4b01528) * merge parent branch (6b82a3d9) * use accountId after fallback to build messages (0ecad264) * merge parent branch (77f34f43) * merge parent branch (1ea3b5ca) * merge parent branch (0a47ed27) * merge parent branch (9a31c4dc) * merge parent branch (3a691dbf) * merge parent branch (7ec28992) * merge parent branch (fdb4a3ca) 2016-06-16 Tiago Salem Herrmann * merge parent branch (336f506f) 2016-06-15 Gustavo Pichorim Boiko * Do not delete the interface classes. They are destroyed together with the channel itself. (ca8e9931) * Merge parent (a1980cf1) * merge parent (3e465117) * merge parent (6613eefa) * merge parent (052ce9bf) * merge parent (9572df68) * merge parent (8b9a747e) * Use values instead of references (1a08821d) * Make sure we fetch the initial values of the group title from the channel. (bb65e23c) 2016-06-14 Gustavo Pichorim Boiko * Make sure observers get chat rooms. (1f89cd73) 2016-06-14 Tiago Salem Herrmann * add support for invite and remove participants (83a3b49e) * merge parent branch (60abd935) 2016-06-14 Gustavo Pichorim Boiko * We don't need to verify accounts here, it is done in a later stage if needed (9edb0cc4) * Only set the accountId in properties if we are trying to match a chatroom (b9390871) * If no accountId is given, match channels from all accounts. (c805ea3d) 2016-06-14 Tiago Salem Herrmann * merge parent branch (8d6a4cdb) * add comment (2b5b179a) 2016-06-14 Gustavo Pichorim Boiko * Fix building (a24ccb3e) * Properly implement changing title. (51e27122) * Add more debug information. (d107a6a5) * Add some debug to the group destroying. (e92d695c) 2016-06-13 Tiago Salem Herrmann * split multipart into multiple messages (a5008202) 2016-06-13 Gustavo Pichorim Boiko * Add a comment about errors setting the property. (4ec3cd55) 2016-06-13 Tiago Salem Herrmann * merge parent branch (afdbb6d0) 2016-06-13 Gustavo Pichorim Boiko * Make it possible to change the group title. (18efdd0e) 2016-06-09 Gustavo Pichorim Boiko * Set also the threadId in properties so that the channel gets created correctly. (0d1665e9) 2016-06-09 Launchpad Translations on behalf of phablet-team * Launchpad automatic translations update. (cd11d32f) 2016-06-08 Gustavo Pichorim Boiko * Make it possible to destroy channels that have this interface. (0c3deb79) 2016-06-06 Tiago Salem Herrmann * add support for chat state (1a4739aa) 2016-06-03 Gustavo Pichorim Boiko * Fix handler tests (8587e78d) * Fix ChatManager tests. (2e3c6d50) * Ignore message sending job adaptor. (51e40f06) 2016-06-01 Gustavo Pichorim Boiko * Start chat with accounts that might have typing notifications. (71fa95ad) * Do not pass the interface when registering the jobs, it is already present in the adaptor. (68df1a2e) * Watch for new channels. (e7e63a96) * Finish implementing the message sending job and make use of it in chatentry. (36a6b3d9) 2016-06-01 Bileto Bot * Releasing 0.1+16.10.20160601.1-0ubuntu1 (2bedaade) 2016-06-01 Renato Araujo Oliveira Filho * Contact name now checks for QContactDisplayLabel to display full name when possible. (LP: #1585634) (5cfe396b) * Contact name now checks for QContactDisplayLabel to display full name when possible. (addfb736) 2016-05-31 Gustavo Pichorim Boiko * Make it possible to set the chat type (0ac7c936) 2016-05-30 Gustavo Pichorim Boiko * Expose the chatentry to QML. (85a7c967) * Implement channel matching. (5fdbbff1) * Merge parent branch (65d585cf) 2016-05-30 Tiago Salem Herrmann * Ack messages using properties (a812d919) 2016-05-30 Gustavo Pichorim Boiko * Change ChatEntry to fetch channels from ChatManager and to send messages using the new asynchronous API. (1b03947f) 2016-05-28 Launchpad Translations on behalf of phablet-team * Launchpad automatic translations update. (0cd41063) 2016-05-23 Gustavo Pichorim Boiko * Remove empty spaces. (708e0ea6) * Fix some problems, remove some code not needed anymore and add some debug. (19644328) * Start implementing the asynchronous way of sending messages. (c728bf27) 2016-05-20 CI Train Bot * Releasing 0.1+16.10.20160520-0ubuntu1 (e453fcb8) 2016-05-20 Renato Araujo Oliveira Filho * Update PhonNumber components to use the new SDK 1.3 Approved by: PS Jenkins bot (3a183b7a) 2016-05-20 Tiago Salem Herrmann * add temporary code for creating channel synchronously (40203467) 2016-05-19 Tiago Salem Herrmann * avoid crash (691fb9bb) 2016-05-17 Tiago Salem Herrmann * use createChannel() for new chat rooms (600c9d3e) 2016-05-17 Renato Araujo Oliveira Filho * Update PhonNumber components to use the new SDK 1.3 (72ef1569) 2016-05-17 Tiago Salem Herrmann * avoid crashed when message has no sender (e20915a1) 2016-05-11 Tiago Salem Herrmann * use a different method to start a new group chat (aa7d47e2) 2016-05-10 Launchpad Translations on behalf of phablet-team * Launchpad automatic translations update. (c17bdecc) 2016-05-06 Tiago Salem Herrmann * fallback group chats to rcs (381fe367) 2016-04-30 Launchpad Translations on behalf of phablet-team * Launchpad automatic translations update. (cc7d91e9) 2016-04-29 CI Train Bot * Resync trunk. (512045e3) 2016-04-29 Tiago Salem Herrmann * add accountsForType() to TelepathyHelper (9b73f0e4) 2016-04-27 Tiago Salem Herrmann * correctly parse participantIds (d0f2f838) * fix passing properties to handler (0dd931f9) 2016-04-26 Tiago Salem Herrmann * use participantIds instead of participants (b3d139a6) 2016-04-22 Launchpad Translations on behalf of phablet-team * Launchpad automatic translations update. (f33c35ee) 2016-04-19 Tiago Salem Herrmann * remove debug (3167c5de) * monitor room properties on chat entry (5a3dc27c) * fix crash (50a8e0e7) 2016-04-19 Launchpad Translations on behalf of phablet-team * Launchpad automatic translations update. (d3206c31) 2016-04-15 Tiago Salem Herrmann * Initial group chat support (6d70b64a) 2016-04-15 CI Train Bot * Releasing 0.1+16.04.20160415.1-0ubuntu1 (063101d6) 2016-04-15 Tiago Salem Herrmann * - do not set SimNames if it's empty - use a config file to avoid running the script instead of an account service property (7313dd46) * add copyright (ff4f6d46) * - do not set SimNames if it's empty - use a config file to avoid running the script instead of an account service property (b0168136) 2016-04-11 CI Train Bot * Releasing 0.1+16.04.20160411-0ubuntu1 (86c8534a) 2016-04-11 Tiago Salem Herrmann * Fix HandlerTest flaky test. Approved by: Gustavo Pichorim Boiko, PS Jenkins bot (0e319582) * Initial work moving properties from gsettings to accounts service. Fixes: #1418040 Approved by: Gustavo Pichorim Boiko (0b985839) * fix error in the migration script (27942775) 2016-04-08 Launchpad Translations on behalf of phablet-team * Launchpad automatic translations update. (d2c7c3cb) 2016-04-06 Tiago Salem Herrmann * fix handler test failure (46d05034) 2016-03-31 CI Train Bot * Releasing 0.1+16.04.20160331.4-0ubuntu1 (a9531ec7) 2016-03-31 Tiago Salem Herrmann * - Fix duplicate tasks launched during tests (2afbae26) * Do not change power mode on incoming MMS'. This is done by unity now. Fixes: #1562923 (0f816308) * remove timer and use hasCalls() (de1825f9) * add more fixes to tests (42d03f25) * make sure handler has the channel before we acknowledge the message (31530d81) * fix some flaky tests (dbdde4f4) * revert change (35a1ad70) * fix duplicate tasks launched during tests (75a599db) 2016-03-30 Tiago Salem Herrmann * Do not change power mode on incoming MMS'. This is done by unity now. (e54492fd) 2016-03-29 Launchpad Translations on behalf of phablet-team * Launchpad automatic translations update. (4acd7d1f) 2016-03-22 Tiago Salem Herrmann * use get_string() instead of get_value() (3d98dcc3) * merge trunk (f139eb7a) 2016-03-21 CI Train Bot * Releasing 0.1+16.04.20160321.2-0ubuntu1 (91341d8e) 2016-03-21 Jim Hodapp * Make sure the sound preview uses the correct audioRole API. (81e0e6ff) * Make sure the sound preview uses the correct audioRole API (44573279) 2016-03-18 Tiago Salem Herrmann * add method to set sim names (0357bd1a) * Move displaynamesettings to indicator and set default sim names (b1cb6492) * Use os.getuid() in the migration script (4f7bd081) 2016-03-16 Tiago Salem Herrmann * Fix interpreter (4cca4d7f) * Fix interpreter (57e45e61) * Add migration script (ce69c964) 2016-03-15 Launchpad Translations on behalf of phablet-team * Launchpad automatic translations update. (26450e6b) 2016-03-10 Tiago Salem Herrmann * remove more gsettings stuff (1eb0da2a) * remove last remaining references to gsettings (af263958) * fix retrieval of sim names (6ef67354) 2016-03-09 Tiago Salem Herrmann * remove gsettings dependency (e78f24e7) * add more fixes (16ba38a1) * merge trunk (6512081f) 2016-03-07 CI Train Bot * Releasing 0.1+16.04.20160307-0ubuntu1 (a286c495) 2016-03-07 Tiago Salem Herrmann * Only add notifications to messaging-menu if ack didn't happen in the meantime. Approved by: PS Jenkins bot (d1742002) * Display notifications for sms's where sender phone number matches the sim card phone number that received the message. Fixes: #1547462 Approved by: Gustavo Pichorim Boiko, PS Jenkins bot (1c1cb802) * Compare target id to check if this is a channel to the self contact. Fixes: #1546369 Approved by: Gustavo Pichorim Boiko, PS Jenkins bot (b0d7cedd) * reduce timer to 25ms (e5a1e08b) 2016-03-05 Launchpad Translations on behalf of phablet-team * Launchpad automatic translations update. (ab9be4e7) 2016-03-04 Tiago Salem Herrmann * revert timer to 1 second and acknowledge messages asynchronously (a0df95cd) * play ringtone even for messages that were read (168f850b) * reduce timer to 400ms (2d6b2e3f) * invert logic (0aa28e34) * mUnreadMessages does not use hex format (d6db4759) * also fix timing issue for notifications (89f4525a) * merge parent branch (c1c66214) * Only add to messaging-menu if ack didn't happen in the meantime (d6d363a9) * Make sure no notifications are displayed when receiving messages from the selfHandle on account types other than Phone (8c3a51e7) * use ensureHandle() instead of newHandle() to avoid creating multiple handles for the same contact (242a688c) 2016-03-04 Launchpad Translations on behalf of phablet-team * Launchpad automatic translations update. (963059d6) 2016-03-03 Tiago Salem Herrmann * Add unit test (ca83b668) * merge parent branch (bfc28b6f) 2016-03-03 Launchpad Translations on behalf of phablet-team * Launchpad automatic translations update. (ee2c4c72) 2016-03-02 Tiago Salem Herrmann * Notify messages where sender is the same as the selfId only on phone acounts (902292c7) 2016-03-02 Launchpad Translations on behalf of phablet-team * Launchpad automatic translations update. (51de6fd8) 2016-03-01 Tiago Salem Herrmann * fix comments (90559abd) * add comment (12d8cae1) * Add unit test (b5a541ca) 2016-02-29 Tiago Salem Herrmann * Compare target id to check if this is a channel to the self contact (9b111535) 2016-02-13 Launchpad Translations on behalf of phablet-team * Launchpad automatic translations update. (bba7241a) 2016-02-05 Tiago Salem Herrmann * initial work moving properties from gsettings to accounts service (d1672eaa) 2016-01-22 CI Train Bot * Releasing 0.1+16.04.20160122-0ubuntu1 (dea9699b) 2016-01-22 Gustavo Pichorim Boiko * Remove protocol files that are not supposed to be shipped. Approved by: Arthur Mello, PS Jenkins bot (d5c51542) * Expose extra information about the protocols we support. Approved by: Arthur Mello, PS Jenkins bot (6ff2e95a) 2016-01-22 Tiago Salem Herrmann * Make sendMessage() return the actual accountId used to send the message. Approved by: Gustavo Pichorim Boiko, PS Jenkins bot (adf75113) 2016-01-22 Arthur Mello * Enable video support for mms Approved by: Gustavo Pichorim Boiko, PS Jenkins bot (55a57072) 2016-01-22 Tiago Salem Herrmann * Add tests for sending messages with attachments Approved by: Gustavo Pichorim Boiko, PS Jenkins bot (3114a013) * Add test for account fallback. Approved by: Gustavo Pichorim Boiko, PS Jenkins bot (391387eb) 2016-01-22 Gustavo Pichorim Boiko * Make it possible to send messages to "multimedia" accounts and fallback to ofono accounts when not possible. Approved by: Gustavo Pichorim Boiko (a8cd7be3) * Enable audio support for mms. Approved by: Gustavo Pichorim Boiko, PS Jenkins bot (deede893) 2016-01-20 Tiago Salem Herrmann * include qpulseaudioengine only when libpulse is installed (7c00ad38) * add ifdef to avoid including qpulseaudioengine.h (311b081e) * remove unused include (f05923d4) 2016-01-19 Tiago Salem Herrmann * fix get AudioOutputs (74b50730) * Implement AudioRouteManager in telephony-service-handler (881b288e) 2016-01-13 Launchpad Translations on behalf of phablet-team * Launchpad automatic translations update. (caa32a4b) 2016-01-05 CI Train Bot * Releasing 0.1+16.04.20160105-0ubuntu1 (6cd9ee4a) 2016-01-05 Tiago Salem Herrmann * Update mms flag so telephony-service-indicator can correctly manage attachments. Fixes: #1529903 (f81ba79f) * remove wrong commit (be9ab3b8) * update mms flag (d9499d5c) 2015-12-14 Tiago Salem Herrmann * Add translator comment (53e0f8f7) 2015-12-09 Gustavo Pichorim Boiko * Really remove the multimedia protocol file. (28794341) * Merge parent (c0f76328) * Merge parent (3ee1ae99) * Use a different set of protocols for the tests. (d0ba0a74) * Merge parent (4ca45616) 2015-12-09 Tiago Salem Herrmann * merge parent branch (4132a12f) 2015-12-09 Gustavo Pichorim Boiko * Merge parent branch (46f70eb2) 2015-12-09 Arthur Mello * Merge with parent branch (5fd604e0) 2015-12-09 Tiago Salem Herrmann * fix broken test (8a7c2a33) 2015-12-09 Launchpad Translations on behalf of phablet-team * Launchpad automatic translations update. (f52db6e9) 2015-12-08 Arthur Mello * Merge with trunk (b933abfc) 2015-12-08 CI Train Bot * Resync trunk. (b22c5490) 2015-12-08 Tiago Salem Herrmann * merge parent branch (e7ce980a) 2015-12-08 Arthur Mello * Merge parent branch (6053d031) 2015-12-08 Tiago Salem Herrmann * merge parent branch (0adc4fb9) * merge parent branch (6c0ad00b) 2015-12-08 Gustavo Pichorim Boiko * Request online status synchronously in order to decide which account use as fallback. Patch by Tiago Salem Herrmann (abb77ae9) 2015-12-08 Launchpad Translations on behalf of phablet-team * Launchpad automatic translations update. (faad3b51) 2015-12-07 CI Train Bot * Releasing 0.1+16.04.20151207-0ubuntu1 (c2df04f8) 2015-12-07 Tiago Salem Herrmann * Fill notifications with attachments info when no text is received. Fixes: #1517654 Approved by: PS Jenkins bot (a5fa60e3) * Improve notifications on multi-sim devices. Fixes: #1460301, #1487528 Approved by: Gustavo Pichorim Boiko (bd46fa86) * Make sendMessage() return the actual accountId used to send the message (1d05d4d7) * merge parent branch (ba9d89a8) 2015-12-07 CI Train Bot * Resync trunk. (668b6811) 2015-12-07 Launchpad Translations on behalf of phablet-team * Launchpad automatic translations update. (0f2b6636) 2015-12-03 Arthur Mello * Merge parent branch (936d9328) 2015-12-03 Tiago Salem Herrmann * fix broken test (58d8c4ea) * merge parent branch (d3361132) * merge parent branch (006c5439) 2015-12-03 Gustavo Pichorim Boiko * Use the correct accountId. (ee27a69f) 2015-12-03 Arthur Mello * Merge parent branch (0b29d369) 2015-12-03 Tiago Salem Herrmann * merge parent branch (dbc5bf67) * merge parent branch (8c0b3475) 2015-12-03 Arthur Mello * Merge with lp:~tiagosh/telephony-service/add-tests-messages-with-attachments (56f74403) 2015-12-03 Gustavo Pichorim Boiko * Change account fallback logic. Patch by Tiago Salem Herrmann (88981b96) 2015-12-03 Arthur Mello * Fix typo (bcf8da08) * Fix typo (eddb02d9) * Enable video support for mms. (1bbcfc5a) 2015-12-02 CI Train Bot * Releasing 0.1+16.04.20151202.1-0ubuntu1 (43f6db41) 2015-12-02 Tiago Salem Herrmann * Support new audio role api. Fixes: #1493851 Approved by: PS Jenkins bot (97d581e7) * Use old text on single sim devices (415d8de2) * Fill notification with attachments info when no text is received. (b87c5eb1) * one more fix (37f222d8) * Make incoming calls compliant to the spec (b6ddac71) * merge trunk (b160d38b) * Change incoming message text (429b4fef) * Change QMediaPlayer to QAudio (3da90c0e) * Support new audio role api (3f18ca09) 2015-12-01 Gustavo Pichorim Boiko * Rename property. (be8e3d08) 2015-11-30 Tiago Salem Herrmann * use build dir and not temp dir (44fc86b1) * remove first().last() in favour of first[2] (5b3df254) * Add tests for sending messages with attachments (48fc018b) 2015-11-30 Launchpad Translations on behalf of phablet-team * Launchpad automatic translations update. (bf6eac9b) 2015-11-29 Launchpad Translations on behalf of phablet-team * Launchpad automatic translations update. (c9c7a540) 2015-11-27 Launchpad Translations on behalf of phablet-team * Launchpad automatic translations update. (e12f4e10) 2015-11-26 Tiago Salem Herrmann * Add test for account fallback (84a58b13) 2015-11-26 Gustavo Pichorim Boiko * Re-add the multimedia protocol. (c662d1ed) 2015-11-25 Gustavo Pichorim Boiko * Expose extra information about the protocols we support. (ede4743f) * Make it possible to send messages to "multimedia" accounts and fallback to ofono accounts when not possible. (7038b495) * Enable audio support for mms. (706c1061) 2015-11-23 Tiago Salem Herrmann * merge trunk (eb388eda) * Fix incoming call screen (ca05c94b) * Add label on messaging menu and notification (db673b33) * Improve notifications on multi-sim devices (907400de) 2015-11-19 CI Train Bot * Releasing 0.1+16.04.20151119-0ubuntu1 (09a46c1a) 2015-11-19 Tiago Salem Herrmann * Create new QMediaPlayer instances on every incoming call. Approved by: PS Jenkins bot, Gustavo Pichorim Boiko (e34814ec) 2015-11-19 Gustavo Pichorim Boiko * Make sure telephony-service QML plugin does not use uninstalled paths to look for protocol information. Approved by: PS Jenkins bot, Tiago Salem Herrmann (baa95e04) 2015-11-19 Tiago Salem Herrmann * Add support for sending attachments to regular IM accounts. Approved by: Gustavo Pichorim Boiko (b109ddc3) * Add initial support for the ChatState interface. Approved by: Gustavo Pichorim Boiko (413486e1) * Fix notifications and messaging menu for generic IM accounts. Approved by: Gustavo Pichorim Boiko (a6d3daec) * Implement PresenceRequest qml component. Approved by: Gustavo Pichorim Boiko (c6f9c78d) 2015-11-19 Gustavo Pichorim Boiko * Add tests for the NotificationMenu and AuthHandler. Approved by: PS Jenkins bot, Tiago Salem Herrmann (d795aef9) 2015-11-19 Tiago Salem Herrmann * Implement simple authentication handler. Approved by: PS Jenkins bot, Gustavo Pichorim Boiko (528094ca) * - Refactor TelepathyHelper initialization - Refactor AccountEntry initialization Approved by: PS Jenkins bot, Gustavo Pichorim Boiko (2dcef720) 2015-11-18 Tiago Salem Herrmann * disable test in arm64 (bd5737f9) * remove dbus-monitor from tasks (b3899b2e) * remove debug (89b0a123) * use memory backend when testing (f490c1ac) * add debugs (eb648db7) * add debugs (a9516a46) 2015-11-17 Tiago Salem Herrmann * improve debug (5585a644) * merge parent branch (f2fee135) * merge parent branch (1f30e444) * use xvfb to launch indicator (d54c8ae1) * merge parent branch (95a594fa) * merge parent branch (2914276d) * start indicator offscreen (fa08eb37) * fix copyright (bff99f07) * merge chat_state branch (8dc68d4f) * merge indicator-generic-im-accounts branch (dbfcb68d) * merge presence_request branch (4e5fe280) * merge auth_handler_tests branch (20bf7984) 2015-11-17 Gustavo Pichorim Boiko * Fix build when srcdir != builddir (f7f06d97) 2015-11-17 Tiago Salem Herrmann * merge auth_handler_tests branch (9ddd6db5) * merge trunk (aa96382f) * merge trunk (3fd610c6) * Test if x-canonical-mms is correctly propagated (045c819d) * Add comment Rename chatsCount() to chatCount() (a1c8c51b) * Add initialParticipants property to StartChatRoom() (de30882b) * Improve tests (1bb3f0fb) 2015-11-16 Gustavo Pichorim Boiko * One last fix. (ce1b2c94) * Fix some spaces vs tabs (5e11d652) * Add test for the authentication handler. (320ce42f) 2015-11-16 Tiago Salem Herrmann * Add comment (b6c0ba0a) * Add test to make sure all notifications are displayed (e8adac95) 2015-11-16 Gustavo Pichorim Boiko * Test also the response value. (ddf5e8ef) * Finish implementing the tests. (e2a0e400) 2015-11-16 Tiago Salem Herrmann * Fix identation and copyright date (c0f66156) 2015-11-16 Gustavo Pichorim Boiko * More attempts to make the test pass. (91e53476) * Implement dbus operators. (595033f8) 2015-11-13 Gustavo Pichorim Boiko * Start implementing the tests for the notification menus. (9854805d) 2015-11-13 Tiago Salem Herrmann * Add unit test (059236e6) * Rename private variables to match the standard (f48aeec7) * add comment (06792c74) 2015-11-12 Tiago Salem Herrmann * Add separate file for testing setupReady() signal from TelepathyHelper (2dd1f370) 2015-11-10 Tiago Salem Herrmann * check if channel is open with self contact (170763e2) * Fix logic when trying to send pending messages (c4d9c8d9) * break look after message is sent to avoid loops (04ed8ded) 2015-11-09 Gustavo Pichorim Boiko * Merge trunk. (ee6337f3) 2015-11-06 Launchpad Translations on behalf of phablet-team * Launchpad automatic translations update. (c6a6750f) 2015-11-03 Tiago Salem Herrmann * Create new QMediaPlayer instances on every incoming call (e420b0a5) 2015-11-03 CI Train Bot * Releasing 0.1+16.04.20151103-0ubuntu1 (50fe21ed) 2015-11-03 Tiago Salem Herrmann * Enable cross compiling. Approved by: PS Jenkins bot (69184330) * merge trunk (1e688f87) * revert wrong pot file change (489fadbd) * merge parent branch (89c06d06) * merge parent branch (2ead3973) * merge parent branch (1eaa0e40) * merge parent branch (4f24f43d) * merge trunk (06bb8519) 2015-10-30 Tiago Salem Herrmann * merge trunk (02b3f682) * merge trunk (5eb54b3f) * merge trunk (ae8df0e3) * merge trunk (173e3caf) * merge trunk (b020292f) * merge trunk (023a580c) * [ Gustavo Pichorim Boiko ]; Make it possible to set all fields in the contact matcher. Some components (like HistoryService's events and threads) provide a cached contact match value and are just interested in watching for changes.; Use smooth scaling when resizing image files to send via MMS. [ Tiago Salem Herrmann ]; Convert x-ofono-unknown to "Unknown contact" Set proper icon for group chats in messaging-menu (e77fef0d) 2015-10-30 Gustavo Pichorim Boiko * Merge trunk. (aa407b65) * Merge trunk. (ce922a4d) 2015-10-29 CI Train Bot * Releasing 0.1+16.04.20151029.2-0ubuntu1 (8fa9b7f5) 2015-10-29 Tiago Salem Herrmann * Keep reference of observer pointer so it doesn't get deleted. Fixes: #1484300 Approved by: Gustavo Pichorim Boiko, PS Jenkins bot (fb368b9c) 2015-10-28 Launchpad Translations on behalf of phablet-team * Launchpad automatic translations update. (32bab15a) 2015-10-24 Launchpad Translations on behalf of phablet-team * Launchpad automatic translations update. (29d44818) 2015-10-23 CI Train Bot * Resync trunk. (61106ce2) 2015-10-20 Tiago Salem Herrmann * Keep reference of observer pointer so it doesn't get deleted (ae9fb95e) 2015-10-17 Launchpad Translations on behalf of phablet-team * Launchpad automatic translations update. (c7fc24b4) 2015-10-14 Launchpad Translations on behalf of phablet-team * Launchpad automatic translations update. (916af8fe) 2015-10-13 CI Train Bot * Releasing 0.1+15.10.20151013-0ubuntu1 (04554907) 2015-10-13 Gustavo Pichorim Boiko * Use smooth scaling when resizing image files to send via MMS. Approved by: Tiago Salem Herrmann (7c182052) * Make it possible to set all fields in the contact matcher. Some components (like HistoryService's events and threads) provide a cached contact match value and are just interested in watching for changes. Approved by: PS Jenkins bot, Tiago Salem Herrmann (e869dae6) 2015-10-13 Tiago Salem Herrmann * - Convert x-ofono-unknown to "Unknown contact" - Set proper icon for group chats in messaging-menu Approved by: Gustavo Pichorim Boiko (94efc93b) 2015-10-13 Gustavo Pichorim Boiko * Use the defined macros for unknown and private numbers. (73291f4e) * Merge a branch fixing x-ofono-unknown stuff. (6c0574af) * Fix typo. (6b271248) 2015-10-13 Tiago Salem Herrmann * add missing file (b2f26bb7) * Enable cross compiling (46522942) 2015-10-09 Gustavo Pichorim Boiko * Even if an alias was set by QML, change to Unknown or Private after component completion. (f54ee01c) 2015-10-09 Tiago Salem Herrmann * - add macros for x-ofono-* - check for unknown numbers also in messaging-menu (d8eb15ac) * fix test (c6856d34) * merge trunk (2703fd37) * merge trunk (bac76124) * merge trunk (24b61563) * merge trunk (cc1bb9c9) * merge trunk (6387c7ff) * merge trunk (584192a1) 2015-10-08 Gustavo Pichorim Boiko * Set the interactivity of the contact before starting the search. (42356137) * Make it possible to set all fields in the contact matcher. Some components (like HistoryService's events and threads) provide a cached contact match value and are just interested in watching for changes. (5e2107de) 2015-10-06 Tiago Salem Herrmann * Add contact group asset as messaging-menu can't find it from the theme (476e77df) 2015-10-06 Gustavo Pichorim Boiko * Use smooth scaling when resizing image files to send via MMS. (758606ab) 2015-10-05 Tiago Salem Herrmann * convert x-ofono-unknown to Unknown contact and set proper icon on groups (defa8c7c) 2015-10-03 Launchpad Translations on behalf of phablet-team * Launchpad automatic translations update. (e7b1c9d3) 2015-09-25 CI Train Bot * Releasing 0.1+15.10.20150925-0ubuntu1 (42c79eff) 2015-09-25 Gustavo Pichorim Boiko * Make it possible to acknowledge all pending messages of a given conversation at once. Fixes: #1488498 Approved by: PS Jenkins bot (19927c03) 2015-09-21 Gustavo Pichorim Boiko * Make the ack call asynchronous and fix a typo. (b23cb0ea) 2015-09-07 Launchpad Translations on behalf of phablet-team * Launchpad automatic translations update. (651c4bbe) 2015-09-05 Launchpad Translations on behalf of phablet-team * Launchpad automatic translations update. (772ca1ff) 2015-09-03 Gustavo Pichorim Boiko * Registering/unregistering the observers multiple times in the test is making it fail. Leave it registered for now. (b575037f) * Make it possible to acknowledge all pending messages of a given conversation at once. (e260b196) 2015-08-26 Gustavo Pichorim Boiko * Update copyright (1bef0023) * Make sure telephony-service QML plugin does not use uninstalled paths to look for protocol information. (2f2d84f0) 2015-08-19 Tiago Salem Herrmann * [ CI Train Bot ]; Resync trunk. [ Tiago Salem Herrmann ]; Change existingChat() to existingChannels(). (LP: #1482401, #1347906) [ Gustavo Pichorim Boiko ]; Make GreeterContacts thread safe. (LP: #1471338) (df247685) * merge parent branch (425ef039) * merge parent branch (1ecb4133) * merge parent branch (67d9add9) * merge parent branch (349080ff) * merge parent branch (747632d7) 2015-08-19 Launchpad Translations on behalf of phablet-team * Launchpad automatic translations update. (94e33278) 2015-08-18 CI Train Bot * Releasing 0.1+15.10.20150818-0ubuntu1 (5951a16f) 2015-08-18 Tiago Salem Herrmann * Change existingChat() to existingChannels(). Fixes: #1347906, #1482401 (6a17bfcf) * change existingChat() to existingChannels() (d31f32db) 2015-08-18 CI Train Bot * Resync trunk. (f12e9da5) 2015-08-18 Launchpad Translations on behalf of phablet-team * Launchpad automatic translations update. (33285a4a) 2015-08-14 CI Train Bot * Releasing 0.1+15.10.20150814-0ubuntu1 (89eaef9e) 2015-08-14 Gustavo Pichorim Boiko * Make GreeterContacts thread safe. Fixes: #1471338 (1bf88ca1) * Fix a deadlock on silentMode() being used internally in other methods. (0af20e51) * Use mutex locker. (af013c9a) * Make GreeterContacts thread safe. (17478a69) 2015-08-11 Tiago Salem Herrmann * Only show displayName if there are more than one phone accounts (c0663a0d) * improve logic (32a43ac4) * add missing readAll() (2010765f) * fix OfonoAccountEntryTest (d322c2ae) * merge telepathyhelper-init branch (9b5d910e) * merge telepathyhelper-init branch (b47fa39a) * merge telepathyhelper-init branch (07790291) * merge telepathyhelper-init branch (9f4acf0d) * merge telepathyhelper-init branch (86fa51ce) * merge trunk (47b0f6f6) * use a specific flag to inform handler whether files should be removed or not. (51a08717) 2015-08-10 Tiago Salem Herrmann * copy file to temporary location and let the handler remove it (1eae0ea9) 2015-08-10 CI Train Bot * Releasing 0.1+15.10.20150810.1-0ubuntu1 (08c73c1d) 2015-08-10 Tiago Salem Herrmann * Check contact results on the client side. Phone comparison in the server side is not reliable. Fixes: #1476833 Approved by: PS Jenkins bot (e60c46fd) * Use libphonenumber for phone number validation, normalization and comparison. Fixes: #1334860, #1444883, #1471545 Approved by: PS Jenkins bot, Gustavo Pichorim Boiko (53aea749) * Add test for similar phone numbers (cc389e55) * add test for phones with slashes (b08b79e7) * add test for numbers with slash (84ef7fed) * force add x-canonical-mms flag if needed (87a547c9) * merge chat_state branch (57c513d3) 2015-08-09 Tiago Salem Herrmann * Add support for sending attachments to regular IM accounts (671852ae) 2015-08-07 Tiago Salem Herrmann * merge telepathyhelper-init (60852fde) 2015-08-06 Tiago Salem Herrmann * Just return mReady. IsReady/(former connected()) has no meaning anymore as each account has an indepentent status. (e3bba64e) 2015-08-05 Tiago Salem Herrmann * fix build with libphonenumber >= 7 (4f975aa4) * Invoke messaging-app with accountId for generic accounts (68781e3c) 2015-08-04 Tiago Salem Herrmann * notify before deletion (e48e9f58) 2015-08-04 Launchpad Translations on behalf of phablet-team * Launchpad automatic translations update. (70e9816d) 2015-08-03 Tiago Salem Herrmann * reset status when a connection/account is not present (bef5214b) 2015-08-03 Gustavo Pichorim Boiko * Add missing gcc5 rebuild changelog entry. (20656f45) 2015-07-31 Tiago Salem Herrmann * Revert to use PhoneUtils::comparePhoneNumbers() (8045ef91) * merge libphonenumber branch (3f2d2362) * Only use libphonenumber if both numbers have more than 7 digits (e9036fd0) * Check contact results on the client side. Phone comparison in the server side is not reliable. (584f4ccc) * merge use-libphonenumber branch (c7b55796) 2015-07-27 CI Train Bot * Releasing 0.1+15.10.20150727-0ubuntu1 (ee624c87) 2015-07-27 Gustavo Pichorim Boiko * Make sure outgoing calls are not set as accepted by the approver. Fixes: #1476826 Approved by: PS Jenkins bot (a05dca70) * Make sure the approver don't call accept() on call channels that are already active. (e414b5cc) 2015-07-23 Gustavo Pichorim Boiko * Update tests. (0b31cb60) * Use initialised instead of initialized to be consistent with telepathy. (cd7ed69c) 2015-07-23 Tiago Salem Herrmann * merge trunk (926f6cce) 2015-07-22 Gustavo Pichorim Boiko * Fix handler test. (570c1a19) 2015-07-22 Tiago Salem Herrmann * Change comparePhoneNumbers() to return PhoneUtils::PhoneNumberMatchType (4d336709) 2015-07-22 Gustavo Pichorim Boiko * Add a unit test for the bug. (3165be3d) * Make sure outgoing calls are not set as accepted by the approver. (d0287d6a) 2015-07-21 Tiago Salem Herrmann * Use IsEmergencyNumber() instead of ConnectsToEmergencyNumber() (dcbfcbbd) 2015-07-21 Launchpad Translations on behalf of phablet-team * Launchpad automatic translations update. (4f1f2700) 2015-07-20 Tiago Salem Herrmann * Add code to fallback (0e7211bf) * Read countryCode() from ofono (9dd26768) 2015-07-20 CI Train Bot * Resync trunk. (bb5940ac) 2015-07-20 Launchpad Translations on behalf of phablet-team * Launchpad automatic translations update. (feb6f8b1) 2015-07-17 Tiago Salem Herrmann * Provide a fallback to country code if none is provided (72aba9a1) 2015-07-17 CI Train Bot * Releasing 0.1+15.10.20150717-0ubuntu1 (ae60dbab) 2015-07-17 Gustavo Pichorim Boiko * Specify the domain when translating unknown and private number strings. Fixes: #1470938 (73b39616) * Do not unregister the channel to prevent crashes if the connection is not available. (73270d21) 2015-07-17 Tiago Salem Herrmann * revert po changes (fe6d3f05) * fix copyright header (9c2b89c8) * reenable tests (fcf7f1af) 2015-07-17 Launchpad Translations on behalf of phablet-team * Launchpad automatic translations update. (b442bf4b) 2015-07-15 Gustavo Pichorim Boiko * Specify the domain when translating unknown and private number strings. (d05a068e) 2015-07-15 Tiago Salem Herrmann * Use libphonenumber to check for emergency numbers (435791cb) 2015-07-14 Tiago Salem Herrmann * Use libphonenumber for comparison and normalization (fc8d8f25) 2015-07-10 Gustavo Pichorim Boiko * Remove obsolete code. (29f22a83) 2015-07-10 Tiago Salem Herrmann * merge back telepathyhelper-init branch (1fef4fc2) * merge back telepathyhelper-init branch (f01d9386) * merge back telepathyhelper-init branch (7127e8b0) * merge back telepathyhelper-init branch (a3c84a50) * remove old variable (c5a7204a) * merge trunk (edfe536c) 2015-07-09 CI Train Bot * Releasing 0.1+15.10.20150709-0ubuntu1 (d848c3cb) 2015-07-09 Gustavo Pichorim Boiko * Sync the fixes that were released in OTA5: (d5459271) 2015-07-09 Tiago Salem Herrmann * use ready instead (7beb8a06) 2015-07-09 Launchpad Translations on behalf of phablet-team * Launchpad automatic translations update. (20dbded6) 2015-07-08 Gustavo Pichorim Boiko * Fix approver test. (9669a9e6) 2015-07-08 Tiago Salem Herrmann * merge telepathyhelper refactor branch (2bfcb412) * merge trunk (38e43992) 2015-07-08 Gustavo Pichorim Boiko * Sync the fixes that were released in OTA5: (1d61a287) 2015-07-07 Tiago Salem Herrmann * merge trunk (30ef8128) 2015-07-06 CI Train Bot * Releasing 0.1+15.04.20150706.1-0ubuntu1 (effeceab) 2015-07-06 Gustavo Pichorim Boiko * Do not update the pot file automatically on builds, it causes conflicts when multiple changes are applied together. (e5943597) 2015-07-06 Sebastien Bacher * Don't play keypad sounds in silentmode Fixes: #1384274 (4a1c756e) 2015-07-06 Tiago Salem Herrmann * Check if targetContact() returns a valid pointer before using it. (578fbf5e) 2015-07-06 Andreas Pokorny * sbuild fix (5879e20b) 2015-07-06 Sebastien Bacher * don't unref a non owned variant, g_variant_new_strv() returns a floating reference which is consumed by calling messaging_menu_message_add_action() thanks Lars Uebernickel for pointing the issue Fixes: #1427286 (11c6ada5) 2015-07-06 Iain Lane * We don't inherit from the 'gnome' icon theme any more, so our icons weren't being found in a default Unity session using ubuntu-mono-dark. We do, however, inherit from Humanity, so put the icons under this theme. Fixes: #1412709 (4824b17f) 2015-07-06 CI Train Bot * Releasing 0.1+15.10.20150706.1-0ubuntu1 (33ca6cba) 2015-07-06 Alberto Aguirre * No change rebuid against platform-api 3 Approved by: PS Jenkins bot (78adafcb) * No change rebuid against platform-api 3 (89c0c700) 2015-07-03 CI Train Bot * Releasing 0.1+15.04.20150703.1-0ubuntu1 (05bcadde) 2015-07-03 Gustavo Pichorim Boiko * Prevent telephony-service from auto-accepting calls in the case of an approver failure. (3646ea24) 2015-07-03 Tiago Salem Herrmann * - Do not let USSD and incoming call snap decisions timeout. - Initialize m_notificationId with -1, as 0 is a valid id. - Do not call CloseNotification() when notificationClosed() is received to avoid loop. Fixes: #1453004 (c2bbf551) 2015-07-03 Gustavo Pichorim Boiko * Another try at disabling the tests. (4aa600ad) * Disable approver test on arm64. (8835c0ca) 2015-07-02 Gustavo Pichorim Boiko * Use vivid changelog. (a80a4f38) * Do not try to use platform code in unit tests. (d4684dc5) * Fix call entry test. (049c2d3d) * Fix the approver tests and add a test to make sure the snap decision timeout is set to -1 (051ac1ab) * Avoid emitting setupReady() more than just once when accounts are added later. (0b5be1da) 2015-07-01 Gustavo Pichorim Boiko * Merge notifications mock branch. (b11eaded) * More debug. (b3307a59) * Add approver test, it is still crashing. (b79501b4) * Fix a crash in the HandlerTest. (4775a0fa) * Add more stuff needed for the tests. Handler test is still crashing, added gdb to the test macro. (f398117c) * Set the error correctly. (088789d2) * Make sure only channels going through the approver are accepted so that phone calls don't get auto-answered when the approver fails. (3a85f919) 2015-07-01 Tiago Salem Herrmann * Add NotificationsMock and run for all tests (2c12befe) * - Don't let ussd and incoming call snap decisions timeout - initialise m_notificationId with -1, as 0 is a valid id (9728ddcd) 2015-07-01 CI Train Bot * Releasing 0.1+15.10.20150701-0ubuntu1 (7ec67ae8) 2015-07-01 Tiago Salem Herrmann * Update to telepathy-qt 0.9.6.1 (0b48d214) 2015-07-01 Launchpad Translations on behalf of phablet-team * Launchpad automatic translations update. (564665e5) 2015-06-30 Launchpad Translations on behalf of phablet-team * Launchpad automatic translations update. (7c587005) 2015-06-29 Launchpad Translations on behalf of phablet-team * Launchpad automatic translations update. (d2cad08a) 2015-06-25 Tiago Salem Herrmann * merge back more changes from the refactor branch (885c1915) * merge back more changes from the refactor branch (1b390613) * merge back more changes from the refactor branch (ee917343) * use selfContactChanged() instead of selfHandleChanged() (6b2d73cb) * merge refactor branch (abcaeebb) * merge refactor branch (fe0afa27) * Implement PresenceRequest qml component (38ba57be) * Fix notifications and messaging menu for generic IM accounts (7a98ae69) * - Do not show messages sent by the selfContact() - Fix notification for regular im accounts (54cd7c4c) 2015-06-24 Tiago Salem Herrmann * remove unused variable and use correct type for notification id's (26fe1156) * Implement simple authentication handler (55fdc29f) * merge refactor branch (abca9f23) * - Refactor TelepathyHelper initialization - Refactor AccountEntry initialization (407586d3) 2015-06-23 Launchpad Translations on behalf of phablet-team * Launchpad automatic translations update. (7f39c48f) 2015-06-22 CI Train Bot * Resync trunk. (8b96329d) 2015-06-19 Launchpad Translations on behalf of phablet-team * Launchpad automatic translations update. (acd9b24f) 2015-06-17 CI Train Bot * Releasing 0.1+15.10.20150617-0ubuntu1 (14e9f75b) 2015-06-17 Tiago Salem Herrmann * Remove slashes when normalizing phone numbers. Fixes: #1462090 (fe5ad88d) 2015-06-17 Gustavo Pichorim Boiko * Make it possible to specify the list of supported protocols dynamically by installing .protocol files in /usr/share/telephony-service/protocols Approved by: Tiago Salem Herrmann, PS Jenkins bot (df7bacab) 2015-06-17 Tiago Salem Herrmann * Add multimedia connection manager support Approved by: Gustavo Pichorim Boiko, PS Jenkins bot (dfebe71a) * Remove slashes when normalizing phone numbers (35be4983) 2015-06-17 Launchpad Translations on behalf of phablet-team * Launchpad automatic translations update. (396d09ab) 2015-06-16 Tiago Salem Herrmann * wait for mission control to be running before changing use-conn (40a7bdc9) * workaround mission control problem (f0c2761f) * update to telepathy-qt 0.9.6.1 (c808d741) 2015-06-16 Launchpad Translations on behalf of phablet-team * Launchpad automatic translations update. (f65aa7fe) 2015-06-15 Gustavo Pichorim Boiko * Make sure to watch for file system changes on the protocols directory. (a23f4364) 2015-06-14 Launchpad Translations on behalf of phablet-team * Launchpad automatic translations update. (1c427e74) 2015-06-11 Tiago Salem Herrmann * Add MultimediaAccountEntry test (f86f5431) 2015-06-11 Gustavo Pichorim Boiko * More changes from multimedia branch (928bbf7f) * Merge the multimedia branch. (482d6220) 2015-06-11 Tiago Salem Herrmann * check for multimedia account (0a1f1686) 2015-06-11 Gustavo Pichorim Boiko * Package the default protocols. (a4d0c3fb) 2015-06-10 Gustavo Pichorim Boiko * Add tests for Protocol and ProtocolManager classes. (b15ad76a) * Finish implementing dynamic protocol support loading. (ceecdf68) * Expose the protocols to QML (ce7512d5) * Do not update the pot file automatically on builds, it causes conflicts when multiple changes are applied together. (3582a535) 2015-06-09 Tiago Salem Herrmann * merge trunk (154ebe9d) * merge trunk (b667f820) 2015-06-09 Gustavo Pichorim Boiko * Merge latest changes from trunk. (03dfc119) 2015-06-08 CI Train Bot * Releasing 0.1+15.10.20150608.4-0ubuntu1 (7fa8b3f2) 2015-06-08 Gustavo Pichorim Boiko * Make it possible to remove call notifications from the messaging menu Fixes: #1455408 Approved by: PS Jenkins bot (ce570b42) 2015-06-08 Tiago Salem Herrmann * Fix TelepathyHelperTest and HandlerTest. Approved by: Sebastien Bacher, PS Jenkins bot (51d6b843) * Do not try to reconnect if the account is in "Connecting" state (1d619bc0) 2015-06-08 Gustavo Pichorim Boiko * Fix building. (3e06960a) * Merge latest changes from parent branch. (c6738d91) 2015-06-08 Tiago Salem Herrmann * fix test (5c0c58da) 2015-06-08 Gustavo Pichorim Boiko * Merge test fixing branch. (74ba0111) * Revert the TelepathyHelperTest fix, it is being fixed in a separate MP. (bfd292fe) * Merge latest changes from trunk. (1f5605e7) * Start implement the dynamic protocol loading. (c4391eed) 2015-06-05 Tiago Salem Herrmann * merge fix-tests branch (ae890555) * Reenable use-conn. mission-control must disconnect non-phone accounts when there is no network. (e32b1c14) * Add MultimediaAccountEntry Send messages through MultimediaAccountEntry when available (cd957491) * Disable mms support when testing group chat messages (eeeb85e4) * add multimedia cm support (7abad134) 2015-06-02 Tiago Salem Herrmann * Improve tests (4a3617a7) 2015-06-01 Sebastien Bacher * Don't play keypad sounds in silentmode (fbc2ae20) 2015-05-29 Launchpad Translations on behalf of phablet-team * Launchpad automatic translations update. (e8d45d8a) 2015-05-22 Gustavo Pichorim Boiko * Workaround a test failure that happens only on arm64. (00d93677) * Use the memory contacts backend in the messaging menu test. (44911974) * Add missing copyright headers and remove some commented out include files. (b7059507) 2015-05-21 Gustavo Pichorim Boiko * Fix the property installing on the messaging menu mock. (44998c90) * Fix build when srcdir != builddir (a4218a00) * Merge latest changes from trunk. (505a517d) 2015-05-21 CI Train Bot * Releasing 0.1+15.04.20150521.1-0ubuntu1 (7092fc3c) 2015-05-21 Tiago Salem Herrmann * Properly move ringtone calls to a separate thread. Approved by: PS Jenkins bot, Gustavo Pichorim Boiko (fb5da39b) 2015-05-21 Gustavo Pichorim Boiko * Add tests to make sure the notifications are removed from messaging menu. (c685f079) 2015-05-20 Tiago Salem Herrmann * trigger rebuild (e3652c7c) 2015-05-19 Gustavo Pichorim Boiko * Make it possible to clear call notifications. (08746ecb) 2015-05-18 Launchpad Translations on behalf of phablet-team * Launchpad automatic translations update. (3201ce3d) 2015-05-15 Tiago Salem Herrmann * Properly move ringtone calls to a separate thread (8f1f1aa2) 2015-05-15 Launchpad Translations on behalf of phablet-team * Launchpad automatic translations update. (92f6ba57) 2015-05-14 CI Train Bot * Resync trunk. (85709cb3) 2015-05-12 Launchpad Translations on behalf of phablet-team * Launchpad automatic translations update. (6b45c099) 2015-05-11 CI Train Bot * Releasing 0.1+15.04.20150511.1-0ubuntu1 (20a5d9e6) 2015-05-11 Gustavo Pichorim Boiko * Fix voicemail detection on CallEntry. Fixes: #1449710 Approved by: Tiago Salem Herrmann (aa44de3c) * Not having a voicemail number is just a warning, not critical. (ae5cf124) 2015-05-08 Gustavo Pichorim Boiko * Ignore status changes from the client side to mimic the behavior of telepathy-ofono. (51a01f00) * Fix some more flakiness points. (3f92131a) * Only set offline when really necessary. (0c28c9f9) * Wait for the AccountEntry to change the status. (49073b5f) 2015-05-07 Gustavo Pichorim Boiko * Add debug on the mock dbus calls. (af6d8b8b) * Merge latest changes from trunk. (f587c0af) * Some more test fixes. (c4ccd0ae) 2015-05-07 Launchpad Translations on behalf of phablet-team * Launchpad automatic translations update. (0d026e76) 2015-05-06 CI Train Bot * Resync trunk. (2c1ea7a5) 2015-05-04 Launchpad Translations on behalf of phablet-team * Launchpad automatic translations update. (e390e6ef) 2015-04-30 CI Train Bot * Releasing 0.1+15.04.20150430.1-0ubuntu1 (34185d06) 2015-04-30 Gustavo Pichorim Boiko * Make it possible to clear the notifications. This is intended to be used by application tests. Approved by: Tiago Salem Herrmann, PS Jenkins bot (1e9e11e9) * Add an initial set of tests to make sure USSD is working. Approved by: Tiago Salem Herrmann (a5d1bcba) 2015-04-30 Tiago Salem Herrmann * Add an USSDManager instance to each OfonoAccountEntry. Fixes: #1438273 Approved by: Gustavo Pichorim Boiko (920e218d) 2015-04-30 Gustavo Pichorim Boiko * Clear also the incoming messages notifications. (a4035c0e) * Sometimes multiple status changed signals are emitted, so account for that in the tests. (6bf08566) 2015-04-29 Gustavo Pichorim Boiko * Revert the mReady change. (78ce07bb) * Only set mReady when the connection is actually ready. (a0e30ae2) * And one more. (f31c4fcd) * Re-add dbus-monitor to debug the test failures. (9f6421d7) * Use the account from telepathyhelper in the callentry test. (27d033ea) * Fix some possible points of flakiness. The connectedChanged() signal might be emitted more than just once. (fbd424db) * Change the tests in a hope to finally remove the flakiness. (3e0c8436) * Increase the timeout of all tests so that slow builders don't fail. (3fe7ae85) * Fix some comments. (26504d61) 2015-04-28 Gustavo Pichorim Boiko * Try to fix some flakiness. (155927fd) * Fix voicemail number detection. (ff564fe9) * Make it possible to remove the notifications from the indicator. (7eb58107) 2015-04-28 Launchpad Translations on behalf of phablet-team * Launchpad automatic translations update. (625a47d0) 2015-04-23 Launchpad Translations on behalf of phablet-team * Launchpad automatic translations update. (e1100df6) 2015-04-22 Gustavo Pichorim Boiko * One more test fix, just in case. (1b7b3143) * Merge latest changes from parent branch. (63802cbd) 2015-04-22 Tiago Salem Herrmann * merge trunk (b9cc3d6a) * add more checks for null pointers (ac5b91bb) 2015-04-22 Gustavo Pichorim Boiko * Add the test name to the temporary dir, just in case. (14a0a8fa) 2015-04-22 CI Train Bot * Resync trunk. (d746b76e) 2015-04-22 Launchpad Translations on behalf of phablet-team * Launchpad automatic translations update. (085decd9) 2015-04-21 Gustavo Pichorim Boiko * Fix building. (95204107) * Merge latest changes from parent. (b87534b9) 2015-04-21 Tiago Salem Herrmann * merge trunk (5b202da0) 2015-04-21 Gustavo Pichorim Boiko * Fix building when srcdir != builddir. (e3f1472b) * Add missing include dir. (a06da7d4) 2015-04-21 CI Train Bot * Releasing 0.1+15.04.20150421-0ubuntu1 (6cb59c92) 2015-04-21 Gustavo Pichorim Boiko * Add unit tests for the ToneGenerator class. (d36a2959) 2015-04-21 You-Sheng Yang * Class ToneGenerator creates a oneshot timer to keep track of when to send a StopTone req after successfully sending a StartEventTone one. However, when playDTMFTone() is called the second time within the timeout interval (0.2s), it's currently completely ignored and no tone will ever be generated. As a result, when someone presses dialpad buttons very quickly, some of them sound missed because not each of them is accompanied by a DTMF tone. (49fca32b) 2015-04-21 Launchpad Translations on behalf of phablet-team * Launchpad automatic translations update. (ec47ee88) 2015-04-17 Gustavo Pichorim Boiko * Merge latest changes from parent. (01e406ff) * Add the USSDManager tests. (2c46dd08) 2015-04-17 Tiago Salem Herrmann * add test for phoneAccounts() (cc5ff3b9) 2015-04-17 Gustavo Pichorim Boiko * Generate as much code of the MockController as possible automatically from the XML specification. (a0ef7b66) 2015-04-17 Tiago Salem Herrmann * add phoneAccounts() to TelepathyHelper (83a49498) 2015-04-17 Gustavo Pichorim Boiko * Start adding the required bits to test USSD. (c4bc3a6d) 2015-04-16 Tiago Salem Herrmann * Add an USSDManager instance to each OfonoAccountEntry (2477da17) 2015-04-16 Gustavo Pichorim Boiko * Add unit tests for the ToneGenerator class. (5c9da5be) * Merge the dialpad tone playing fix. (e2c56d2e) 2015-04-16 CI Train Bot * Releasing 0.1+15.04.20150416.2-0ubuntu1 (9898fbf8) 2015-04-16 Tiago Salem Herrmann * Add sanity check to ofono-setup. Fixes: #1439566 (3087dd2c) 2015-04-16 Gustavo Pichorim Boiko * Another attempt to fix the failures that happen only on jenkins. (2474a94d) * Improve some signal emissions. (ca58bad8) * Add dbus-monitor just to understand what is going on. (fedd1682) 2015-04-15 Gustavo Pichorim Boiko * And yet another attempt. (65db789f) * Just in case, wait on some more comparisons (3310994b) * Fix two more points of possible problems. (abdc9f4b) * One more try. (ca62111e) * Try to fix the test failures that happen only on jenkins. (5fdecd61) 2015-04-14 Tiago Salem Herrmann * sort output of mc-tool list (7dc42072) * merge trunk (c69d80d4) 2015-04-14 CI Train Bot * Releasing 0.1+15.04.20150414-0ubuntu1 (931d8902) 2015-04-14 Gustavo Pichorim Boiko * Expose the account type to QML. Fixes: #1439718 (81293432) * Expose the account type to QML. (220a162e) 2015-04-14 Tiago Salem Herrmann * improve ofono-setup with sanity checks (3081b59b) 2015-04-13 Launchpad Translations on behalf of phablet-team * Launchpad automatic translations update. (6a3435f3) 2015-04-08 Launchpad Translations on behalf of phablet-team * Launchpad automatic translations update. (de64e91c) 2015-04-04 Launchpad Translations on behalf of phablet-team * Launchpad automatic translations update. (a972e0dc) 2015-04-03 Launchpad Translations on behalf of phablet-team * Launchpad automatic translations update. (a2df303c) 2015-04-02 CI Train Bot * Resync trunk. (ee8498ad) 2015-04-01 Launchpad Translations on behalf of phablet-team * Launchpad automatic translations update. (7866ff64) 2015-03-30 CI Train Bot * Releasing 0.1+15.04.20150330.1-0ubuntu1 (3c96886d) 2015-03-30 Gustavo Pichorim Boiko * - Move all tests to root/tests to make it easier to share components - Add tests to existing components - Add tests to make sure supporting non-phone based accounts works - Fix problems found while writing the tests. - Fix coverage reports (2ef1051d) * Support accounts not based on phone numbers. Approved by: PS Jenkins bot (b79e51ce) * Just to prevent timeouts on high load builders, change from 30secs to 1 minute. Also, give sime time for the serial property to propagate. (33c6da38) * Fix the default timeout. (0d842414) * Fix the documentation of the USSD Serial method (13a80e16) 2015-03-29 Launchpad Translations on behalf of phablet-team * Launchpad automatic translations update. (baa5d211) 2015-03-26 Gustavo Pichorim Boiko * Make sure the addressable fields are loaded correctly, and add tests to guarantee that. (33b2e7e4) * Set the protocol info feature for accounts. (ada642b1) * Merge latest changes from parent branch, and make the tests a bit more reliable by waiting for the call channels to close before removing the accounts. (05af6a93) * Prepare the protocol info feature. (91da2798) * Only display the flightMode message for phone accounts. (750125a9) * Output test results both in xunitxml and stdout plain text. (2f851acc) 2015-03-26 Launchpad Translations on behalf of phablet-team * Launchpad automatic translations update. (814ae4b8) 2015-03-25 Gustavo Pichorim Boiko * Merge latest changes from parent branch. (9b6c4f1c) * Remove dbus monitor. (82d0047b) * Re-add the phoneNumber property as a fallback until all code using it is replaced. (c42d2143) 2015-03-25 Tiago Salem Herrmann * fix tests (afeec207) 2015-03-24 Tiago Salem Herrmann * add ChatEntryTest (c0751c85) * merge non-phone number branch (d80ec990) * Fix chat state test (2801730e) 2015-03-24 You-Sheng Yang * Send StopTone at the last dialpad press (17840b9c) 2015-03-23 Gustavo Pichorim Boiko * Some more stability fixes. (8d8b0af1) * Change the TelepathyHelperTest to use the new infrastructure. (b7e9d07b) * Remove some leftover debugs. Reimplement the BaseConnection::uniqueName() to make sure it is really unique during the mock CM lifetime. Port the ChatManagerTest to the new infrastructure. (49e12cec) * Do not overwrite the disconnected() signal. (bfea58e4) * Start refactoring the tests to use a common baseclass that will make sure all tests start fresh. (ed022f1a) 2015-03-23 Launchpad Translations on behalf of phablet-team * Launchpad automatic translations update. (49ec6ecb) 2015-03-20 Gustavo Pichorim Boiko * Refactor the generate_test() function to make it more flexible and possibly more reliable for the dbus tests. (0f22a727) 2015-03-20 Tiago Salem Herrmann * add initial tests (fccfb723) * merge parent (d9ccc2e2) 2015-03-20 Gustavo Pichorim Boiko * Increase some timeouts in a hope they fix the tests. (370b43c4) * Merge latest changes from parent branch. (b0a9d6cf) * Make the helper methods accessible from QML. (d9974cf8) * Add more debugging to figure out what is going on. (2dbcc76b) 2015-03-19 Gustavo Pichorim Boiko * Output the xml with the test results in case of failures to help debugging. (c1274345) * Pass the temp dir as an argument and increase timeout, just in case. (2ab22449) * Start mission-control manually to be able to stop it at the end of testing. (5f545237) 2015-03-19 Tiago Salem Herrmann * merge support_non_phone_accounts branch (fb80b535) * expose correctly methods and properties to qml (e69ffc8f) * postpone processing new channels until telepathy is ready (549b860a) * - manually delete pointers - expose startChat and startChatRoom in handler (c15c20c7) 2015-03-19 Gustavo Pichorim Boiko * Clear the temporary directory every time. (e9204e2d) * Add some waiting time to prevent races. (766033fa) * Run the dbus tests using a stripped down services directory and a custom config to prevent running unwanted stuff from the system. (07274cc9) 2015-03-19 Launchpad Translations on behalf of phablet-team * Launchpad automatic translations update. (f69d60bc) 2015-03-18 Gustavo Pichorim Boiko * Launch the tests using xvfb-run. (386fd70f) 2015-03-18 Tiago Salem Herrmann * add initial support for chat states (ee67506c) 2015-03-17 Tiago Salem Herrmann * merge again (17283929) 2015-03-17 Gustavo Pichorim Boiko * Merge latest changes from parent branch. (c97fae83) * Change the ContactWatcher class to match more fields than just the phone number. (43a040a0) 2015-03-17 Tiago Salem Herrmann * merge non-phone-number branch (0285cdb5) * Check if targetContact() is a valid pointer (7cd940a4) 2015-03-14 Launchpad Translations on behalf of phablet-team * Launchpad automatic translations update. (a6808f43) 2015-03-11 Gustavo Pichorim Boiko * Revert pot changes again. (45a16845) * Test more account stuff on TelepathyHelper. (3aec4742) * Merge latest changes from parent branch. (e6f7e486) * Start adding TelepathyHelper tests. (395d538b) * Check if the account is actually an Ofono account. (4306f644) * Test the remaining bits on OfonoAccountEntry. (9293e2b4) * Test emergency calls available. (1a030c5a) * Test SIM locked and fix the serial test. (7b18f5c9) * Remove extra signal emission. (af96bb06) * Test the custom interfaces used for the telephony stuff (voicemail, emergency numbers and serial) (2bc53ff9) 2015-03-10 Gustavo Pichorim Boiko * Revert pot file changes. (c0cf6ab1) * Test acknowledge messages. (4648e370) * Test that received messages are notified. (342f3ba2) * Merge latest changes from parent branch. (417a4ed4) * Remove more obsolete code. (4073f261) * Merge latest changes from parent branch. (39ff8c19) * Remove unused method. (bfff8c92) * Fix coverage report support. (fe02b6dc) * To prevent crashes, make sure AccountEntry and AccountEntryFactory work if they are given a null Tp::AccountPtr. (691992ad) * Fix build when srcdir != builddir (e4684a78) * Start creating tests for the ChatManager. First test is to make sure sending messages is working. (2bbba78c) * Add support for group text channels in the mock CM. (ad5b819e) * Fix the messageSent signal. (8960429d) * Fix the supported channel filters. (c1c1eb70) * Added a missing spec class. (e647fb22) 2015-03-10 Sebastien Bacher * don't unref a non owned variant, g_variant_new_strv() returns a floating reference which is consumed by calling messaging_menu_message_add_action() thanks Lars Uebernickel for pointing the issue (37eb3a45) 2015-03-10 Launchpad Translations on behalf of phablet-team * Launchpad automatic translations update. (4a6d0365) 2015-03-09 Gustavo Pichorim Boiko * Add tests for the account entry. (a5b119bb) * Return the status message for all presences. (86f9785f) * Make sure the activeChanged() signal is emitted correctly in all cases. (3ff77840) 2015-03-09 Launchpad Translations on behalf of phablet-team * Launchpad automatic translations update. (a44097b5) 2015-03-08 Launchpad Translations on behalf of phablet-team * Launchpad automatic translations update. (0ec25d41) 2015-03-06 Gustavo Pichorim Boiko * Add a test for the account entry factory. (824b05e6) * Do not use the display name to sort generic accounts, as there might be more than one account using the same display name and then one of them will be ignored. Use the accountId instead. (4815a370) * Use the stock telepathyhelper class instead of a special copy for the tests. (42997552) * Use the already created dbus interface object to connect the signals. (f3183b2e) * Make it possible to run and control multiple mock accounts. (9696e1ec) * Move the mock CM out of the handler test. It will be used by other tests too. (e6d7001f) 2015-03-05 Gustavo Pichorim Boiko * Move all tests to one single directory in preparation for the new tests. (71b036fd) 2015-03-04 Gustavo Pichorim Boiko * Remove some phone number dependencies. (a254d8c0) * Fix a wrong code insertion on a previous trunk merge. (aa1c6fca) 2015-03-04 Launchpad Translations on behalf of phablet-team * Launchpad automatic translations update. (2757cb16) 2015-03-03 Gustavo Pichorim Boiko * Merge latest changes from trunk. (ca04bfcd) 2015-03-02 Launchpad Translations on behalf of phablet-team * Launchpad automatic translations update. (d91b284b) 2015-02-28 Launchpad Translations on behalf of phablet-team * Launchpad automatic translations update. (4e7853ac) 2015-02-27 CI Train Bot * Releasing 0.1+15.04.20150227-0ubuntu1 (f4522689) 2015-02-27 Tiago Salem Herrmann * Do not create instance of GreeterContacts to avoid dealock with unity. Fixes: #1426399 (7eeadaf6) * Check if default sim is active before sending messages. Fixes: #1423942 Approved by: Sebastien Bacher (e7435ffb) * Do not create instance of GreeterContacts to avoid dealock with unity. (23f5d769) 2015-02-27 Launchpad Translations on behalf of phablet-team * Launchpad automatic translations update. (ba9616fe) 2015-02-23 Launchpad Translations on behalf of phablet-team * Launchpad automatic translations update. (395c8a5a) 2015-02-21 Launchpad Translations on behalf of phablet-team * Launchpad automatic translations update. (82323764) 2015-02-20 Tiago Salem Herrmann * Use the right accountId (95bd549c) * Check if default sim is active before sending messages (f8e76c4e) 2015-02-20 Launchpad Translations on behalf of phablet-team * Launchpad automatic translations update. (38ecfe89) 2015-02-17 Gustavo Pichorim Boiko * Merge latest changes from trunk. (2ff1b783) 2015-02-17 CI Train Bot * Releasing 0.1+15.04.20150217-0ubuntu1 (4fa2f88a) 2015-02-17 Tiago Salem Herrmann * Don't remove the call channel if hangup() does not succeed. (3bb10a00) * Don't remove the call channel if hangup() does not succeed (487f71ec) 2015-02-16 Launchpad Translations on behalf of phablet-team * Launchpad automatic translations update. (b9113e7a) 2015-02-15 Launchpad Translations on behalf of phablet-team * Launchpad automatic translations update. (58cf2827) 2015-02-13 Launchpad Translations on behalf of phablet-team * Launchpad automatic translations update. (c889237c) 2015-02-12 Launchpad Translations on behalf of phablet-team * Launchpad automatic translations update. (0efd5d20) 2015-02-11 CI Train Bot * Releasing 0.1+15.04.20150211-0ubuntu1 (47917383) 2015-02-11 Tiago Salem Herrmann * Initialize variables to avoid randomly showing the voicemail indicator for telepathy accounts that do not support the voicemail interface. (4ef7c97a) 2015-02-11 Gustavo Pichorim Boiko * Ignore accounts not explicitly supported for now. Fixes: #1340758 Approved by: PS Jenkins bot (c66973c1) 2015-02-11 Launchpad Translations on behalf of phablet-team * Launchpad automatic translations update. (46899f3f) 2015-02-09 Gustavo Pichorim Boiko * Ignore accounts not explicitly supported for now. (2780da87) 2015-02-09 Launchpad Translations on behalf of phablet-team * Launchpad automatic translations update. (1aed9bd3) 2015-02-06 Gustavo Pichorim Boiko * Split the telephony-related bits out of AccountEntry into a derived class. (2a0deb76) 2015-02-05 CI Train Bot * Releasing 0.1+15.04.20150205.1-0ubuntu1 (1d0669fa) 2015-02-05 Tiago Salem Herrmann * Avoid using ofono to get the list of modems in ofono-setup. Fixes: #1413316 Approved by: PS Jenkins bot (75b8536b) 2015-02-05 CI Train Bot * Releasing 0.1+15.04.20150205-0ubuntu1 (32215a5e) 2015-02-05 Tiago Salem Herrmann * Add initial MMS group chat support. Fixes: #1415458 (ee765cd3) * merge trunk (69ef7c49) 2015-02-04 Tiago Salem Herrmann * rename phoneNumber(s) to recipient(s) (0d16b715) * cache QVariantMap when using it multiple times (adbadb93) * rename variable (f7cc1eb0) * avoid using ofono to get the list of modems on ofono-setup (8b423bdb) * initialise variables (50f29e73) 2015-02-03 CI Train Bot * Releasing 0.1+15.04.20150203-0ubuntu1 (f9738fe7) 2015-02-03 Gustavo Pichorim Boiko * Move the serial to be a property on account entry, and make sure it is read even when the account is not connected. Approved by: PS Jenkins bot (1cceb876) * Move the serial to be a property on account entry, and make sure it is read even when the account is not connected. (f734fb51) 2015-02-02 Tiago Salem Herrmann * revert pot changes (4d99d978) * use icon from theme (36031191) 2015-01-30 Iain Lane * Install indicator icons into /usr/share/notify-osd/icons/Humanity (1a319e26) 2015-01-29 Launchpad Translations on behalf of phablet-team * Launchpad automatic translations update. (f8f4a581) 2015-01-28 Tiago Salem Herrmann * update property name (04e47dd0) 2015-01-28 Launchpad Translations on behalf of phablet-team * Launchpad automatic translations update. (5660f97c) 2015-01-27 Tiago Salem Herrmann * merge trunk (df236322) 2015-01-27 CI Train Bot * Resync trunk (6276e545) 2015-01-26 Launchpad Translations on behalf of phablet-team * Launchpad automatic translations update. (e5ec7e84) 2015-01-25 Launchpad Translations on behalf of phablet-team * Launchpad automatic translations update. (4b93c61f) 2015-01-24 CI Train Bot * Releasing 0.1+15.04.20150124-0ubuntu1 (46d78299) 2015-01-24 Gustavo Pichorim Boiko * Notify errors when creating conference calls and putting calls on hold. Fixes: #1410365 Approved by: PS Jenkins bot (4cc29c5e) 2015-01-23 Launchpad Translations on behalf of phablet-team * Launchpad automatic translations update. (11719cea) 2015-01-20 CI Train Bot * Releasing 0.1+15.04.20150120.2-0ubuntu1 (f1b30a8e) 2015-01-20 Tiago Salem Herrmann * Silence incoming calls when power button is pressed. Fixes: #1376240 Approved by: PS Jenkins bot (4ec45e90) * Invoke LiveCall view when answering incoming calls. Fixes: #1410961 Approved by: PS Jenkins bot (e7f068dd) * merge trunk (590576e8) 2015-01-20 Launchpad Translations on behalf of phablet-team * Launchpad automatic translations update. (7cc72c31) 2015-01-19 Gustavo Pichorim Boiko * Notify errors when creating conference calls and putting calls on hold. (820acfd2) 2015-01-19 Launchpad Translations on behalf of phablet-team * Launchpad automatic translations update. (2c0271c5) 2015-01-18 Launchpad Translations on behalf of phablet-team * Launchpad automatic translations update. (4b3f964e) 2015-01-17 Launchpad Translations on behalf of phablet-team * Launchpad automatic translations update. (75d45927) 2015-01-16 CI Train Bot * Resync trunk (a0481fdd) 2015-01-16 Gustavo Pichorim Boiko * Update pot file. (cdaf2c20) 2015-01-16 CI Train Bot * Releasing 0.1+15.04.20150116-0ubuntu1 (ce666850) 2015-01-16 Tiago Salem Herrmann * Expose HandleMediaKey(bool doubleClick) to DBus. Fixes: #1398427 Approved by: Michał Sawicz, Gustavo Pichorim Boiko (98e24bcd) 2015-01-16 Launchpad Translations on behalf of phablet-team * Launchpad automatic translations update. (b50b1ca6) 2015-01-15 Tiago Salem Herrmann * Invoke liveCallView when answering incoming calls (3a92ca63) * merge trunk (651b06bb) * initialize variable (203871c4) 2015-01-15 Launchpad Translations on behalf of phablet-team * Launchpad automatic translations update. (e18232a4) 2015-01-14 Tiago Salem Herrmann * use mApproverInterface instead of mHandlerInterface (32de698c) 2015-01-14 Launchpad Translations on behalf of phablet-team * Launchpad automatic translations update. (97379e9d) 2015-01-13 Tiago Salem Herrmann * - change approver bus name to fix dbus activation - use a global timer and always return right away on HandleMediaKey() (d9685392) * change return name (d4b8b19b) * cache hasCalls value (77f53df9) * export handleMediaKey(bool) to qml plugin (e54d2e48) * Return a bool value in HandleMediaKey to indicate if the event will be handled by the approver. (de09aeb0) 2015-01-13 Launchpad Translations on behalf of phablet-team * Launchpad automatic translations update. (ae6e9584) 2015-01-12 Tiago Salem Herrmann * Deal with the case when approver is not running and the media key is pressed. (d8ce70db) * expose HandleMediaKey(bool doubleClick) to DBus (1e7fbb7a) 2015-01-09 CI Train Bot * Releasing 0.1+15.04.20150109-0ubuntu1 (7ab0bc89) 2015-01-09 Tiago Salem Herrmann * Only register telepathy clients and observers after TelepathyHelper is ready. Fixes: #1408103 Approved by: Michał Sawicz, Gustavo Pichorim Boiko, PS Jenkins bot (282c5e38) * Check if the account exists before accessing the pointer. Fixes: #1408029 Approved by: Gustavo Pichorim Boiko, PS Jenkins bot (7da09468) * create observers only after telepathyhelper is ready (1c9be4e4) 2015-01-07 Tiago Salem Herrmann * Only register telepathy clients and observers after TelepathyHelper is ready (fe876584) 2015-01-07 Launchpad Translations on behalf of phablet-team * Launchpad automatic translations update. (eeec6392) 2015-01-06 CI Train Bot * Resync trunk (d232922b) 2015-01-06 Tiago Salem Herrmann * fix crash (1693ba09) 2015-01-03 Launchpad Translations on behalf of phablet-team * Launchpad automatic translations update. (12dcdeba) 2015-01-02 Launchpad Translations on behalf of phablet-team * Launchpad automatic translations update. (f7ee1d4f) 2014-12-19 CI Train Bot * Releasing 0.1+15.04.20141219-0ubuntu1 (cf5083ef) 2014-12-19 Tiago Salem Herrmann * Dynamically add and remove telepathy accounts. Approved by: PS Jenkins bot (a41c8c3d) 2014-12-17 Tiago Salem Herrmann * Dynamically add and remove telepathy accounts (5dc2067d) 2014-12-16 Launchpad Translations on behalf of phablet-team * Launchpad automatic translations update. (1708f3b3) 2014-12-15 CI Train Bot * Resync trunk (89de5213) 2014-12-15 Launchpad Translations on behalf of phablet-team * Launchpad automatic translations update. (acdc4905) 2014-12-13 Launchpad Translations on behalf of phablet-team * Launchpad automatic translations update. (aa290dee) 2014-12-12 CI Train Bot * Releasing 0.1+15.04.20141212-0ubuntu1 (eccb0a10) 2014-12-12 Renato Araujo Oliveira Filho * Added support for [',', ';', '+', '*', '#'] on phone number fields. Fixes: #1372548, #1399011 Approved by: PS Jenkins bot (2b4e913b) 2014-12-12 CI Train Bot * Resync trunk (87cac4c5) 2014-12-11 Launchpad Translations on behalf of phablet-team * Launchpad automatic translations update. (55bdf56b) 2014-12-10 CI Train Bot * Releasing 0.1+15.04.20141210-0ubuntu1 (fece4a15) 2014-12-10 Tiago Salem Herrmann * Use dbus-send to get the list of modems from ofono. (715e6cab) * Only set voicemail is the phone number is not empty. Fixes: #1398431 Approved by: Bill Filler, PS Jenkins bot (606e1ae2) 2014-12-09 Renato Araujo Oliveira Filho * Removed invalid test. (ed57738f) * More typo fixed. (f34e17ce) * Typo fixed. (f232ce65) * Added support for [',', ';', '+', '*', '#'] on phone number fields. (9d37fada) 2014-12-08 Tiago Salem Herrmann * do not use list-modems script as it takes a lot of time to run and that delays the accounts creation (e9aa9969) 2014-12-03 Gustavo Pichorim Boiko * Add a new implementation to handle farstream channels. (f0c506eb) 2014-12-03 Tiago Salem Herrmann * only set voicemail is the phone number is not empty (497e0674) 2014-12-02 Gustavo Pichorim Boiko * Remove Meego's farstream channel implementation. (62236593) * Add and update copyright headers. (274d85d3) 2014-12-01 Tiago Salem Herrmann * add selfContactId() (c9fcbbaf) 2014-12-01 Gustavo Pichorim Boiko * Merge latest changes from trunk. (5509f3f0) 2014-11-27 Launchpad Translations on behalf of phablet-team * Launchpad automatic translations update. (78f0ecde) 2014-11-26 Tiago Salem Herrmann * provide contact group icon, as messaging-menu does not get the correct one from the theme (ccd090d6) 2014-11-26 Launchpad Translations on behalf of phablet-team * Launchpad automatic translations update. (0e742bd7) 2014-11-25 Tiago Salem Herrmann * add new property to control mms group chat (aeabdb08) 2014-11-25 Launchpad Translations on behalf of phablet-team * Launchpad automatic translations update. (80887b2a) 2014-11-24 Tiago Salem Herrmann * open use all participants as recipients when launching messaging-app (4a52dffb) * fix group chat strings (1cf2f66e) * remove useless debug change accounts() -> activeAccounts() (cff58e4a) * merge trunk (e12a1417) 2014-11-23 Launchpad Translations on behalf of phablet-team * Launchpad automatic translations update. (dfda26d2) 2014-11-22 Launchpad Translations on behalf of phablet-team * Launchpad automatic translations update. (921b83f0) 2014-11-21 Gustavo Pichorim Boiko * Fix the gstreamer set up. (ad51bbca) * Remove obsolete code and add more debug. (071b4815) * And also set the capabilities at runtime. (e473a170) * Add capabilities to the client file. (a4f854fd) 2014-11-21 Tiago Salem Herrmann * avoid crash (fc55bef4) * make recipient list sanity checks (67caa369) 2014-11-21 CI bot * Releasing 0.1+15.04.20141121.1-0ubuntu1 (b52c35bd) 2014-11-21 Gustavo Pichorim Boiko * Do not enable quick replying for icoming calls from unknown or private numbers. Fixes: #1394297 Approved by: PS Jenkins bot (9e66ab93) * Wait until the contact match request finishes before showing the OSDs. Fixes: #1359849 Approved by: PS Jenkins bot (7195c059) 2014-11-21 Tiago Salem Herrmann * Make sure to always use the selected ringtone on every new incoming call. Fixes: #1392222 Approved by: Bill Filler, PS Jenkins bot (1de374b7) * Use only active accounts to send messages. Fixes: #1389708 Approved by: PS Jenkins bot (94cad9c4) * - Provide the translated strings to messaging-menu - Update pot file Fixes: #1389234 Approved by: Sebastien Bacher, PS Jenkins bot (ea7f8b3a) 2014-11-21 Alexandre Abreu * Add phone number match to phone utils from libphonenumber. This is mostly useful in phone number replacement cases like: (bf988813) 2014-11-21 Gustavo Pichorim Boiko * Do not display the expansion action for unknown numbers either. (f146a6f3) 2014-11-21 Tiago Salem Herrmann * - handle channel with type=None - ack messages in channels with multiple recipients (a995e776) 2014-11-21 Launchpad Translations on behalf of phablet-team * Launchpad automatic translations update. (170c2307) 2014-11-20 Tiago Salem Herrmann * use removeDuplicates() instead of QSet (b778124e) * check for empty channel (6407bc0c) 2014-11-20 Launchpad Translations on behalf of phablet-team * Launchpad automatic translations update. (2b152234) 2014-11-19 Tiago Salem Herrmann * avoid duplicate recipients (71e0f5f2) * allow replis to group chats from messaging-menu (0667f309) 2014-11-19 Gustavo Pichorim Boiko * Fix build. (a246f1cc) * Do not enable quick replying for icoming calls from unknown or private numbers. (25c4fbc4) * Do not enable quick replying for icoming calls from unknown or private numbers. (0bad6757) 2014-11-19 Tiago Salem Herrmann * also handle channels with type = none (5ea5eb3c) * remove useless comment (ef3cf4ae) * check if the message is flagged as mms (9c71119d) 2014-11-18 Tiago Salem Herrmann * flag message as mms when needed (5ddcf501) 2014-11-18 Gustavo Pichorim Boiko * Merge latest changes from trunk. (158b27ec) * Add initial support for VOIP protocols. (e992c43f) * Revert pot file changes. (417b1260) 2014-11-18 Tiago Salem Herrmann * set ringtone file on every incoming call (54c47dda) 2014-11-17 Gustavo Pichorim Boiko * Merge latest changes from trunk. (67d24aa6) 2014-11-14 Timo Jyrinki * Merge also lp:~tiagosh/telephony-service/swipe-to-answer (522d8075) * Sync with what got released to archives as 0.1+15.04.20141110.2-0ubuntu1 (d8ad223b) 2014-11-14 Gustavo Pichorim Boiko * Do not crash if the account manager preparation job does not succeed. (9d6f66ef) * Update the snap decision to support more actions. (39a17633) 2014-11-14 CI bot * Resync trunk (31441b0d) 2014-11-10 Gustavo Pichorim Boiko * Disable the "End+Answer" action for now, and update the text on the quick reply entries. (7ad3b498) * Merge latest changes from trunk. (85849423) 2014-11-08 Alexandre Abreu * Add phone number match to phone utils (9a183d69) 2014-11-08 Launchpad Translations on behalf of phablet-team * Launchpad automatic translations update. (957347b3) 2014-11-05 Gustavo Pichorim Boiko * Do not try to connect signals of an observer that didn't get registered. (f0caf39e) 2014-11-05 Tiago Salem Herrmann * use active accounts to send messages only (75a2770d) 2014-11-05 Gustavo Pichorim Boiko * Do not crash if the account manager preparation job does not succeed. (969771ae) 2014-11-04 Tiago Salem Herrmann * fix strings (3822c591) * - Provide the translated string to messaging-menu - Update pot file (51833fd4) 2014-11-04 Gustavo Pichorim Boiko * Merge latest changes from parent branch. (4a740b36) * Merge latest changes from trunk. (8345e8ea) 2014-11-02 Launchpad Translations on behalf of phablet-team * Launchpad automatic translations update. (ab4feaea) 2014-10-29 Tiago Salem Herrmann * Use swipe to answer/reject calls (f9699e2c) 2014-10-28 Tiago Salem Herrmann * check if reason == 2 (power key) (99fff304) * dont do anything if there is no snap decision (ae3c5f94) * silence incoming calls when power button is pressed (d7401939) 2014-10-25 CI bot * Releasing 0.1+14.10.20141025~rtm-0ubuntu1 (c3be992a) 2014-10-25 Tiago Salem Herrmann * Wake up the screen on incoming mms's. Fixes: 1347856 Approved by: PS Jenkins bot (bef8430d) * - Emit a sound feedback when all calls are ended - Play a waiting tone instead of regular ringtone for waiting calls. Fixes: 1372973 Approved by: PS Jenkins bot (0c66774a) 2014-10-24 Tiago Salem Herrmann * dont turn the screen on when there are active calls (7b798fd1) 2014-10-23 Launchpad Translations on behalf of phablet-team * Launchpad automatic translations update. (4cf45404) 2014-10-16 Tiago Salem Herrmann * wake up the screen on incoming mms's (f631cc19) * play 3 bips only when remote side hangs up (b9124c9b) 2014-10-16 Launchpad Translations on behalf of phablet-team * Launchpad automatic translations update. (3d0e15e1) 2014-10-15 Tiago Salem Herrmann * always emit tone on call ended and fix the waiting tone timeout (1148d9f1) * emit a sound feedback when all calls are ended (95202ede) * play a waiting tone instead of ringtone on waiting calls (9e40edbb) 2014-10-15 Launchpad Translations on behalf of phablet-team * Launchpad automatic translations update. (38173943) 2014-10-09 Gustavo Pichorim Boiko * Really delay the showing of the notifications until the contact info is available. (d32a56c1) 2014-10-09 Timo Jyrinki * Merge 0.1+14.10.20141007.1-0ubuntu1 manually. (ad2f0977) 2014-10-09 Gustavo Pichorim Boiko * Merge latest changes from parent. (cc19e770) * Revert pot file changes. (d1f9afb3) 2014-10-08 Gustavo Pichorim Boiko * Cache the value of hasCalls to avoid possible multiple dbus calls for that. (7f0e6f4f) * Wait until the contact match request finishes before showing the OSDs. (fb6cdb6b) 2014-10-08 Launchpad Translations on behalf of phablet-team * Launchpad automatic translations update. (ee76ca89) 2014-10-07 Gustavo Pichorim Boiko * Update the snap decision to support more actions. (9c3e0f62) 2014-10-07 CI bot * Releasing 0.1+14.10.20141007.1-0ubuntu1 (c57327e2) 2014-10-07 Gustavo Pichorim Boiko * Report the emergency calls availability to QML. Fixes: 1369774 Approved by: PS Jenkins bot, Tiago Salem Herrmann (e00cb407) 2014-10-07 Tiago Salem Herrmann * Add simLocked() property to AccountEntry. Approved by: Gustavo Pichorim Boiko, PS Jenkins bot (2a9b842d) * use cancel icon (ce956fc2) * prevent empty accountId's (9dd2adac) 2014-10-03 Gustavo Pichorim Boiko * Switch flight mode asynchronously. (833e2312) * Fix reporting the emergency calls availability (6620953e) 2014-09-29 Gustavo Pichorim Boiko * Merge sim lock branch. (802bf65e) * Merge latest changes from trunk. (23dcedee) 2014-09-29 Tiago Salem Herrmann * ad failed messages to the history-service and notify users about the failure (d97e8ec4) 2014-09-26 Launchpad Translations on behalf of phablet-team * Launchpad automatic translations update. (6befa253) 2014-09-25 Tiago Salem Herrmann * fix return type (6793a6c6) * add method to invoke the dialog to unlock sim cards (a6c94da9) 2014-09-25 Gustavo Pichorim Boiko * Report the emergency calls availability to QML. (d24e3f61) 2014-09-25 Launchpad Translations on behalf of phablet-team * Launchpad automatic translations update. (5870ffeb) 2014-09-24 Tiago Salem Herrmann * use status() instead of statusMessage() (42f88e38) 2014-09-24 Launchpad Translations on behalf of phablet-team * Launchpad automatic translations update. (701b4636) 2014-09-23 Gustavo Pichorim Boiko * Make it possible to set the flight mode on and off from the QML side. (44414a32) 2014-09-23 Launchpad Translations on behalf of phablet-team * Launchpad automatic translations update. (176be8d0) 2014-09-22 Tiago Salem Herrmann * add simLocked() property to AccountEntry (b94c0006) 2014-09-22 CI bot * Resync trunk (7953fc96) 2014-09-22 Launchpad Translations on behalf of phablet-team * Launchpad automatic translations update. (06a897d9) 2014-09-19 Launchpad Translations on behalf of phablet-team * Launchpad automatic translations update. (67704ad7) 2014-09-18 CI bot * Releasing 0.1+14.10.20140918.1-0ubuntu1 (557e4996) 2014-09-18 Tiago Salem Herrmann * Fix messaging-menu for handling voicemail correctly on dual sim phones. Approved by: PS Jenkins bot (f439f823) * Avoid displaying on screen notifications for messages if the message thread is open. Fixes: 1347906 Approved by: PS Jenkins bot (409e38b3) * only consider active accounts (42b6cc28) 2014-09-18 Launchpad Translations on behalf of phablet-team * Launchpad automatic translations update. (1c74afba) 2014-09-17 Tiago Salem Herrmann * increase interval and always the notification on greeter mode (b00340d0) * delay notification and check if the message was read by the app before displaying notifications. (ca049478) 2014-09-16 Tiago Salem Herrmann * add id to a map fix voicemail label (74645b25) * fix signals use account label when needed (bdb20849) * fix voicemail for dualsim (2317b50c) 2014-09-16 Launchpad Translations on behalf of phablet-team * Launchpad automatic translations update. (8a5c4efc) 2014-09-15 Launchpad Translations on behalf of phablet-team * Launchpad automatic translations update. (fe146d9f) 2014-09-14 CI bot * Resync trunk (b55a5c78) 2014-09-13 Launchpad Translations on behalf of phablet-team * Launchpad automatic translations update. (c27b4588) 2014-09-11 CI bot * Releasing 0.1+14.10.20140911-0ubuntu1 (f46b0e90) 2014-09-11 Tiago Salem Herrmann * - Fix crash on the desktop - Use default account for messaging as a fallback - Display a dialog asking the user to choose a sim card when sending a message from messaging-menu and no default sim card is defined. Fixes: 1367270, 1368389 Approved by: PS Jenkins bot (49dba19c) * Add support for sending silent sms's (skip history service) Fixes: 1340255 Approved by: PS Jenkins bot (17ce85f4) * Enable dialpad sounds only when enabled in the system-settings. Fixes: 1365583 Approved by: PS Jenkins bot (870f4e8e) * add fixme (f3cfe500) * add data to the request (ec6e77ad) * fix crash (4be74c1e) * fix sim card display name (cbf1790e) * display a sim selector when there is no default account defined (e925801d) * fallback to default account when available (252a52d1) 2014-09-11 Andreas Pokorny * sbuild fix (79096fca) 2014-09-11 Launchpad Translations on behalf of phablet-team * Launchpad automatic translations update. (496fa734) 2014-09-10 Tiago Salem Herrmann * fix typo (55f55d8f) * add support for sending silent sms's (skip history service) (4c841c30) 2014-09-09 Launchpad Translations on behalf of phablet-team * Launchpad automatic translations update. (3f901bc4) 2014-09-08 Launchpad Translations on behalf of phablet-team * Launchpad automatic translations update. (14c6e3ce) 2014-09-07 Launchpad Translations on behalf of phablet-team * Launchpad automatic translations update. (3c279cbe) 2014-09-06 Launchpad Translations on behalf of phablet-team * Launchpad automatic translations update. (ba212256) 2014-09-05 Tiago Salem Herrmann * enable dialpad sounds when appropriate (be083872) 2014-09-05 CI bot * Releasing 0.1+14.10.20140905-0ubuntu1 (0ce0f5b2) 2014-09-05 Gustavo Pichorim Boiko * Add a runtime dependency on gsettings-ubuntu-schemas needed by the SIM label settings. Approved by: PS Jenkins bot, Tiago Salem Herrmann (87f729c7) 2014-09-05 Renato Araujo Oliveira Filho * Improve contact watcher. (cef5826d) 2014-09-05 Michał Sawicz * Add :any to python build dependency and rely on debhelper instead of direct make calls. Approved by: Gustavo Pichorim Boiko, PS Jenkins bot (e910fcae) 2014-09-05 CI bot * Resync trunk (307a6433) 2014-09-05 Launchpad Translations on behalf of phablet-team * Launchpad automatic translations update. (f5334de6) 2014-09-03 Launchpad Translations on behalf of phablet-team * Launchpad automatic translations update. (5ba303ef) 2014-09-03 CI bot * Releasing 0.1+14.10.20140903-0ubuntu1 (dc728151) 2014-09-03 Ricardo Salveti de Araujo * ringtone: adding media role for both ringtone and message (0a15fbe5) * ringtone: adding media role for both ringtone and message (5ab8c128) 2014-09-02 Gustavo Pichorim Boiko * Add a runtime dependency on gsettings-ubuntu-schemas needed by the SIM label settings. (bee89022) 2014-09-02 Renato Araujo Oliveira Filho * Removed function "markAsComplete" (d6e61012) 2014-09-02 Launchpad Translations on behalf of phablet-team * Launchpad automatic translations update. (8c253a7a) 2014-09-01 Renato Araujo Oliveira Filho * Remove idle call function. (fc7e499f) 2014-09-01 Launchpad Translations on behalf of phablet-team * Launchpad automatic translations update. (c93ba0f8) 2014-08-31 Launchpad Translations on behalf of phablet-team * Launchpad automatic translations update. (a1aa9bbc) 2014-08-30 CI bot * Resync trunk (02f9b066) 2014-08-30 Launchpad Translations on behalf of phablet-team * Launchpad automatic translations update. (39e036f5) 2014-08-29 Renato Araujo Oliveira Filho * Fixed ContactWatcher inital value for interactive; Added tests for late search (Search after component be complete). (01480a05) * Cancel previous request if a new request was requested. Avoid fetch for contacts during the component creation, wait until the component be ready. (f288dd66) * Improve contac watcher. (79256458) 2014-08-28 CI bot * Releasing 0.1+14.10.20140828-0ubuntu1 (07ce634c) 2014-08-28 Gustavo Pichorim Boiko * Add a method to invoke greeter. Approved by: PS Jenkins bot (80f14ccb) 2014-08-28 Launchpad Translations on behalf of phablet-team * Launchpad automatic translations update. (a331743b) 2014-08-27 Gustavo Pichorim Boiko * Add a method to invoke greeter. (89245977) 2014-08-27 CI bot * Releasing 0.1+14.10.20140827-0ubuntu1 (1810ef83) 2014-08-27 Tiago Salem Herrmann * Initial support for AudioOutputs interface. Approved by: Gustavo Pichorim Boiko, PS Jenkins bot (ef5fbe43) 2014-08-27 Launchpad Translations on behalf of phablet-team * Launchpad automatic translations update. (24f13e6d) 2014-08-26 Tiago Salem Herrmann * split long line (9f6234a7) 2014-08-26 Launchpad Translations on behalf of phablet-team * Launchpad automatic translations update. (8468fac4) 2014-08-25 Tiago Salem Herrmann * merge trunk (5fa6ac27) * expose AudioOutput devices to qml (1af508c7) 2014-08-25 CI bot * Resync trunk (f2f2302f) 2014-08-25 Launchpad Translations on behalf of phablet-team * Launchpad automatic translations update. (b96d7632) 2014-08-25 CI bot * Releasing 0.1+14.10.20140825-0ubuntu1 (fea148c8) 2014-08-25 Martin Pitt * Mark for using language packs. Approved by: Ken VanDine, PS Jenkins bot (d9c29d17) * merge trunk (5da483d1) 2014-08-24 Launchpad Translations on behalf of phablet-team * Launchpad automatic translations update. (f03b9b38) 2014-08-23 Launchpad Translations on behalf of phablet-team * Launchpad automatic translations update. (67c2d081) 2014-08-22 Tiago Salem Herrmann * merge trunk (2611a135) 2014-08-22 CI bot * Resync trunk (3616f232) 2014-08-22 Launchpad Translations on behalf of phablet-team * Launchpad automatic translations update. (addda94e) 2014-08-21 CI bot * Releasing 0.1+14.10.20140821-0ubuntu1 (01bb870f) 2014-08-21 Tiago Salem Herrmann * Report network name and sim presence to apps. Approved by: Gustavo Pichorim Boiko (4920fa27) 2014-08-21 CI bot * Resync trunk (f7e9a179) 2014-08-21 Launchpad Translations on behalf of phablet-team * Launchpad automatic translations update. (c2938f16) 2014-08-20 CI bot * Releasing 0.1+14.10.20140820-0ubuntu1 (688f942a) 2014-08-20 Albert Astals * Mark User Metrics strings for translation and extract them so they can get translated Fixes: 1353755 Approved by: PS Jenkins bot, Manuel de la Peña (b5566366) * Update .pot Approved by: PS Jenkins bot, Manuel de la Peña (e838c1c6) * Run make telephony-service.pot after extraction fixes (b7c599b3) * Mark User Metrics strings for translation and extract them so they can get translated (a37ef43b) 2014-08-20 Launchpad Translations on behalf of phablet-team * Launchpad automatic translations update. (335cee19) 2014-08-19 Martin Pitt * mark for using language packs (ef9899dd) 2014-08-19 Tiago Salem Herrmann * merge trunk (66118b26) 2014-08-19 Launchpad Translations on behalf of phablet-team * Launchpad automatic translations update. (0faa5054) 2014-08-18 CI bot * Releasing 0.1+14.10.20140818.1-0ubuntu1 (3c9a6bc9) 2014-08-18 Tiago Salem Herrmann * Do not connect/disconnect signals if the connection is not ready. (49efca36) * increate timout time (26318357) * do not connect/disconnect signals if the connection is not ready (7944109e) 2014-08-18 Albert Astals * Update .pot file (15ff0718) 2014-08-18 Launchpad Translations on behalf of phablet-team * Launchpad automatic translations update. (79e28238) 2014-08-17 Launchpad Translations on behalf of phablet-team * Launchpad automatic translations update. (be466beb) 2014-08-16 Launchpad Translations on behalf of phablet-team * Launchpad automatic translations update. (863b71cb) 2014-08-15 Tiago Salem Herrmann * revert pot file changes (917e8294) * remove i18n library (f9b01ad9) * report network name and sim presence to apps (8958b759) 2014-08-15 CI bot * Resync trunk (b4d965b3) 2014-08-15 Launchpad Translations on behalf of phablet-team * Launchpad automatic translations update. (8d890e40) 2014-08-14 CI bot * Releasing 0.1+14.10.20140814-0ubuntu1 (52c592f6) 2014-08-14 Tiago Salem Herrmann * Fix USSDManager for multiple accounts (9109ae10) 2014-08-14 CI bot * Resync trunk (9833ca32) 2014-08-14 Launchpad Translations on behalf of phablet-team * Launchpad automatic translations update. (42cfc731) 2014-08-13 CI bot * Releasing 0.1+14.10.20140813.1-0ubuntu1 (b32b1edf) 2014-08-13 Gustavo Pichorim Boiko * Do not update the .po files during `make`, update only the .pot file. Approved by: Tiago Salem Herrmann (91350c00) * Check if the self contact actually exists before getting its presence. Fixes: 1355388 Approved by: Tiago Salem Herrmann (6d700c14) 2014-08-13 Tiago Salem Herrmann * - Reduce vibration duration for text messages - Fix vibration in silent mode options for calls/messages Fixes: 1347908 Approved by: Gustavo Pichorim Boiko, PS Jenkins bot (ccff44ff) 2014-08-13 Martti Piirainen * Adding support for tone generator (LP: #1187453). Fixes: 1187453, 1228711 Approved by: Tiago Salem Herrmann (af8bac5b) 2014-08-13 Tiago Salem Herrmann * Use system settings to retrieve sim card display names. Approved by: Gustavo Pichorim Boiko, PS Jenkins bot (9f26e08a) 2014-08-13 Gustavo Pichorim Boiko * Do not update the .po files during `make`, update only the .pot file. (7df93105) 2014-08-13 Launchpad Translations on behalf of phablet-team * Launchpad automatic translations update. (ad9cb6b9) 2014-08-12 Tiago Salem Herrmann * remove debug (fd9d0266) * fix ussd for multiple accounts (1003692d) * reduce vibration time for text messages (1f1dd094) * fix vibrate in silent mode option (2ebd189e) 2014-08-11 Gustavo Pichorim Boiko * Check if the self contact actually exists before getting its presence. (37009922) 2014-08-11 Launchpad Translations on behalf of phablet-team * Launchpad automatic translations update. (080fac9e) 2014-08-10 Launchpad Translations on behalf of phablet-team * Launchpad automatic translations update. (98de2fda) 2014-08-09 Launchpad Translations on behalf of phablet-team * Launchpad automatic translations update. (6f67f437) 2014-08-08 Tiago Salem Herrmann * update default properties on startup (b01949eb) * Expose properties for default sim cards for messages and calls (3d56c9c8) * set default sim card name when creating accounts (74cd559a) * merge trunk (2b860dfb) 2014-08-08 Launchpad Translations on behalf of phablet-team * Launchpad automatic translations update. (8c5266e3) 2014-08-07 CI bot * Releasing 0.1+14.10.20140807-0ubuntu1 (98345ac5) 2014-08-07 Tiago Salem Herrmann * Check if there is an account instance before actually accessing it. Approved by: Gustavo Pichorim Boiko (3daea2d8) 2014-08-07 Mirco Müller * Added the use of the symbolic icon for the incoming-call as the secondary icon as requested by Design. Fixes: 1346838 Approved by: Gustavo Pichorim Boiko (ab5781d4) 2014-08-07 Tiago Salem Herrmann * check if there is an account instance before actually accessing it. (edd189cc) 2014-08-07 Martti Piirainen * Merged from trunk (3ed4dccc) * Change misleading name of DTMF library function (afc48b17) 2014-08-07 Launchpad Translations on behalf of phablet-team * Launchpad automatic translations update. (6bb58ec9) 2014-08-06 Martti Piirainen * Add tone-generator as installation dependency (5cfe9420) * Enable DTMF playback while dialling. Fixes: 1228711 (67d09fa6) 2014-08-06 Launchpad Translations on behalf of phablet-team * Launchpad automatic translations update. (9b683e7d) 2014-08-05 Tiago Salem Herrmann * add build dep (88e48fd6) * add build dep (e0c052e2) * use system settings to retrieve sim card display names (07b87ec2) 2014-08-05 Mirco Müller * Merged with trunk (ea7cd5f3) 2014-08-05 Launchpad Translations on behalf of phablet-team * Launchpad automatic translations update. (9fa2a940) 2014-08-05 Tiago Salem Herrmann * initial support for AudioOutputs interface (43d8cadb) 2014-08-04 Martti Piirainen * Enable DTMF playback while dialling (03955892) 2014-08-04 Launchpad Translations on behalf of phablet-team * Launchpad automatic translations update. (7d779330) 2014-08-03 Launchpad Translations on behalf of phablet-team * Launchpad automatic translations update. (36345532) 2014-08-03 Martti Piirainen * Merged from trunk (f5316b81) 2014-08-02 Launchpad Translations on behalf of phablet-team * Launchpad automatic translations update. (812a392e) 2014-08-01 Martti Piirainen * DTMF: Don't depend on an active channel; re-use timer object. Fixes: 1187453 (0279bab1) 2014-08-01 Launchpad Translations on behalf of phablet-team * Launchpad automatic translations update. (087c3cc3) 2014-07-31 CI bot * Resync trunk (18c7c047) 2014-07-31 Launchpad Translations on behalf of phablet-team * Launchpad automatic translations update. (fb2d9af2) 2014-07-30 CI bot * Releasing 0.1+14.10.20140730-0ubuntu1 (98db1d9e) 2014-07-30 Gustavo Pichorim Boiko * Expose the telepathy accounts to QML as objects. This allows us to centralize the information about each and every account. This also fixes the problem that the voicemail and emergency numbers were only being retrieved for the first account. (23247975) 2014-07-30 Launchpad Translations on behalf of phablet-team * Launchpad automatic translations update. (a74acf1a) 2014-07-28 Gustavo Pichorim Boiko * Initialize the pointer. (ec3bc5c8) * Merge latest changes from trunk, and adapt the voicemail updating code. (9af52b8f) * Delay the updating of account statuses to make sure the telepathy helper gets it correctly. (ad0e04f9) 2014-07-26 Martti Piirainen * Add local playback of DTMF tones (303bcf23) 2014-07-25 CI bot * Releasing 0.1+14.10.20140725.2-0ubuntu1 (99ce58c1) 2014-07-25 Tiago Salem Herrmann * Fix smil file generation Fixes: 1347079 Approved by: PS Jenkins bot (dec737e3) * Recover mute state. Fixes: 1346995 Approved by: Gustavo Pichorim Boiko, PS Jenkins bot (bf2c8eac) * Listen for VoicemailNumberChanged() signal Fixes: 1347085 (605bddf8) * Use correct label for blocked and private numbers on messaging-menu. Fixes: 1340386, 1347708 Approved by: Gustavo Pichorim Boiko (8ec01727) * merge trunk (745434ba) 2014-07-25 Gustavo Pichorim Boiko * Update the accounts displayName according to a map (later it will be according to what is in systemsettings). (51408b60) * Make it possible to set the displayname. (2b9d5fb8) * Make the accountId property notifyiable to make QML happy. (dfdbc3cd) 2014-07-25 Tiago Salem Herrmann * use the same string as the dialer-app (6e26fb8b) 2014-07-24 Tiago Salem Herrmann * remove temporary text file after it's read (ab5fb144) 2014-07-23 Tiago Salem Herrmann * Recover mute state (ba2b32a8) * listen for voicemail number changes (cdaaa587) * fix smil generation for vcards (20e1fad5) * fix smil generation (7f13eaec) 2014-07-23 Gustavo Pichorim Boiko * Register the AccountEntry type in the QML plugin, and remove dead code. (dfa47c93) * Expose the account objects to QML. (6478d144) 2014-07-22 Mirco Müller * Make incoming-call snap-decision notification use the correct symbolic icon as the secondary icon. (34f0ac95) 2014-07-22 Gustavo Pichorim Boiko * Start refactoring the multiple account support in telephony-service. (50e30272) 2014-07-17 CI bot * Releasing 0.1+14.10.20140717.1-0ubuntu1 (d8ed7144) 2014-07-17 Tiago Salem Herrmann * - Add isAccountConnected() so apps can track status of individual accounts - Fix crash when sending acks during the app startup Approved by: Gustavo Pichorim Boiko, PS Jenkins bot (29bf6e1b) 2014-07-15 CI bot * Releasing 0.1+14.10.20140715.1-0ubuntu1 (00a48ad5) 2014-07-15 Renato Araujo Oliveira Filho * Export PhoneNumber.PhoneUtils.defaultRegion with the region code based on the application locale. Fixes: 1331515 Approved by: PS Jenkins bot (6db0b937) 2014-07-15 CI bot * Releasing 0.1+14.10.20140715-0ubuntu1 (b3acd980) 2014-07-15 Gustavo Pichorim Boiko * Make sure the handler gets registered to DBus even when there is no compatible telepathy account configured. Fixes: 1340086 Approved by: PS Jenkins bot, Tiago Salem Herrmann (556a4da3) * Make sure the handler gets registered to DBus even when there is no compatible telepathy account configured. (4e062109) 2014-07-14 Tiago Salem Herrmann * fix displaying private and blocked numbers in messaging menu (739821e0) 2014-07-14 Renato Araujo Oliveira Filho * Export PhoneNumber.PhoneUtils.defaultRegion with the reigion code based on the application locale. (6775b996) 2014-07-14 Tiago Salem Herrmann * check if the account is connected before sending acks (37b3f645) * add isAccountConnected() (2270090c) 2014-07-12 Renato Araujo Oliveira Filho * [PhoneNumber] Does not try format phone numbers starting with "*" or "#" (ee9645d6) 2014-07-11 Renato Araujo Oliveira Filho * Added missing license header. (f51b14c8) * Implemented PhoneNumber.format. (ea1fa70e) 2014-07-11 Dimitri John Ledkov * Use debhelper to build instead of explicit make. (9f3f6ea9) 2014-07-11 Michał Sawicz * Mark python :any to allow cross compilation. (0c677415) 2014-07-09 CI bot * Releasing 0.1+14.10.20140709.2-0ubuntu1 (e129aec7) 2014-07-09 Renato Araujo Oliveira Filho * Update PhoneNumber formatter text if the autoFormat property changes. (fd52b13d) 2014-07-09 Tiago Salem Herrmann * Reduce image sizes before sending them to telepathy. MMS's have a limit of 300k Fixes: 1337585 Approved by: PS Jenkins bot, Gustavo Pichorim Boiko (867514dc) * Add support for vibration on incoming calls/messages. Fixes: 1232350 Approved by: PS Jenkins bot, Gustavo Pichorim Boiko (a9a66ad8) * Sort list-modems output so /ril_0 is set to account0 on first boot. Approved by: PS Jenkins bot, Alfonso Sanchez-Beato, Gustavo Pichorim Boiko (e0ebdf21) 2014-07-09 Michael Terry * Don't run tests during build if nocheck is in DEB_BUILD_OPTIONS. Approved by: PS Jenkins bot, Gustavo Pichorim Boiko (f41f5be8) 2014-07-09 Renato Araujo Oliveira Filho * Created tests to autoFormat property change. (739ae9b8) * Update PhoneNumber formatter text if the autoFormat property changes. (13e69991) 2014-07-09 Tiago Salem Herrmann * merge trunk (d73c73f1) * merge trunk (f75c5b2b) 2014-07-09 CI bot * Releasing 0.1+14.10.20140709-0ubuntu1 (592c3991) 2014-07-09 Tiago Salem Herrmann * Fix message token to properly remove read messages from the messaging menu. Fixes: 1236895 Approved by: PS Jenkins bot, Gustavo Pichorim Boiko (f83d177f) 2014-07-09 Renato Araujo Oliveira Filho * Added uninstall rule in CMake; Implemented formattedText in AsYouTypeFormatter class that return the cursor position after the number format.; Fixed PhoneNumberField cursor position after editing. Approved by: PS Jenkins bot, PS Jenkins bot, PS Jenkins bot, PS Jenkins bot, Tiago Salem Herrmann (413c6846) 2014-07-07 Tiago Salem Herrmann * fix message token to properly remove messages from the messaging menu (67386ddd) * also ring on incoming messages (c09bfaf4) * improve the width and height check (ed2b7704) 2014-07-06 Tiago Salem Herrmann * add support for vibration on incoming calls (8b3f3105) 2014-07-05 Renato Araujo Oliveira Filho * Fixed phone number formatter. (7a74bbbc) * Removed unnecessary code. (7be9e74f) * Added missing files into qtdeclarative5-ubuntu-telephony-phonenumber0.1.install (1830e343) 2014-07-04 Renato Araujo Oliveira Filho * Created PhoneNumberInput item based on TextInput useful for Dialer app. (fb79cf20) * Added missing dependency. (25f5c307) * Added missing dependency necessary to run qml tests. (ffbe45ca) * Added missing file. (b28a1361) 2014-07-03 Renato Araujo Oliveira Filho * Created QML tests for PhoneNumberField. (0d2bb99e) * Implemented formattedText in AsYouTypeFormatter class that return the cursor positon after the number format. Fixed PhoneNumberField cursor position after editing. (8a64b320) * Added uninstall rule. (919ef43b) 2014-07-03 Tiago Salem Herrmann * reduce image sizes before sending them to telepathy. MMS's have a limit of 300k (6759b17e) 2014-07-03 CI bot * Releasing 0.1+14.10.20140703-0ubuntu1 (b86ffe4c) 2014-07-03 Gustavo Pichorim Boiko * Expose the emergency numbers to the QML plugin (af4456ef) * Expose the greeter being active to the QML plugin. (13edbf5c) 2014-07-03 Tiago Salem Herrmann * Implement MMS sending support. (3806f577) * Use g_variant_unref() instead of g_object_unref() to avoid crash. (34424d00) 2014-07-03 Michael Terry * Fix failing GreeterContactsTest by not overriding getuid(), which confuses Qt 5.3 unless we also override geteuid(), which we don't want to do because it confuses dbus. So instead, we'll just use the test runner's UID. (082295f7) 2014-07-03 Tiago Salem Herrmann * use mms attachment as message text when appropriate (eb73fa53) 2014-07-02 Tiago Salem Herrmann * merge branch to fix test (ae2be350) * use g_variant_unref() instead of g_object_unref() (cedd443a) * merge branch to fix tests (23b740e2) * sort list-modems output so /ril_0 is set to account0 on first boot (f4d250eb) 2014-07-01 Gustavo Pichorim Boiko * Fix the test. (1b791201) * Merge other greeter fixes. (4c4591c2) 2014-06-30 Michael Terry * Don't rely on USER being set -- debuild strips it (4a31730f) * Fix running dbus-test-runner under fakeroot (72d5ec66) * And don't bother with using different username either (1d64102e) * Avoid overriding UID (a4b2ff29) 2014-06-27 Michael Terry * Merge from trunk (f88dc912) 2014-06-27 Gustavo Pichorim Boiko * Fix exporting the emergency numbers to QML. (852f70bb) * Remove trailing line. (141ee8f7) * Expose the emergency numbers to the QML plugin. (b05d089b) 2014-06-25 Gustavo Pichorim Boiko * Expose the GreeterContacts object in the QML plugin, and expose also the IsActive property to be used to switch apps to locked mode. (ba966634) 2014-06-25 Tiago Salem Herrmann * fix smil generation (1201072d) 2014-06-24 Tiago Salem Herrmann * remove unused code (ba38f14f) 2014-06-23 Tiago Salem Herrmann * merge trunk (5eb0cd7b) 2014-06-18 CI bot * Releasing 0.1+14.10.20140618-0ubuntu1 (436a868e) 2014-06-18 Gustavo Pichorim Boiko * Add the callIndicatorVisible property to callManager so that dialer-app can control the active call indicator visibility. (e2e9090e) * Merge latest changes from trunk. (3f1a97ab) * Do not show the call indicator if we don't actually have calls. (cf5d2f8b) 2014-06-17 Gustavo Pichorim Boiko * Fix some problems in the dbus methods and add a test for the active call indicator. (4d0703cc) 2014-06-13 CI bot * Releasing 0.1+14.10.20140613.1-0ubuntu1 (04df131b) 2014-06-13 Tiago Salem Herrmann * Delete notifications from mNotifications when actions are performed. (bd4403d7) 2014-06-13 Renato Araujo Oliveira Filho * [PhoneNumber] Initialize m_formatter with 0. Fixes: 1327970 (c3161586) 2014-06-13 Tiago Salem Herrmann * delete notifications from mNotifications when actions are performed (4098c156) 2014-06-13 Gustavo Pichorim Boiko * Add a call indicator visible property on handler. (194e933b) 2014-06-13 Renato Araujo Oliveira Filho * Trunk Merged. (0eb8682f) 2014-06-12 CI bot * Releasing 0.1+14.10.20140612.1-0ubuntu1 (66164c04) 2014-06-12 Ricardo Mendoza * Migrate to Platform API V2 (e635b2d7) * Platform API only for armhf (19f3657b) 2014-06-11 Renato Araujo Oliveira Filho * [PhoneNumber] Initialize m_formatter with 0. (c2e01d7a) 2014-06-10 Ricardo Mendoza * Merge trunk (b7d2768f) 2014-06-09 CI bot * Releasing 0.1+14.10.20140609-0ubuntu1 (549e46f2) 2014-06-09 Gustavo Pichorim Boiko * Try to postpone the handler initialization as much as we can. It is still launched when the approver is started, but that is probably because of the telepathy introspection. Fixes: 1325702 (6b4da746) 2014-06-09 Tiago Salem Herrmann * Clear pending snap decision when rejecting an incoming call. Fixes: 1325702 (2824de45) 2014-06-09 Gustavo Pichorim Boiko * Merge latest changes from trunk. (76c3eb17) * Init the handler interface. (4f2fe382) 2014-06-09 Ricardo Mendoza * Revert previous commit (d523e136) * Merge trunk (14a6c7f7) * Merge trunk (29298453) 2014-06-04 Gustavo Pichorim Boiko * Delay the loading of the handler dbus interface so that it doesn't trigger the dbus activation of the handler process. (1b6af3ae) * Don't fetch info from the handler when in greeter mode. (9193e405) 2014-06-04 Tiago Salem Herrmann * update contact filter after notification is displayed (7fb8d27c) 2014-06-04 CI bot * Releasing 0.1+14.10.20140604-0ubuntu1 (4d8dc48e) 2014-06-04 Tiago Salem Herrmann * Use a new instance of QMediaPlayer on every call. Fixes: 1325627 (087efdbb) * clear snap decision if it failed to show (a13baa17) * clear incoming call on reject (5f9a92c6) 2014-06-03 Tiago Salem Herrmann * use dynamic pointer for all qmediaplayer instances (a32c31e4) 2014-06-02 Tiago Salem Herrmann * workaround for bug in qmediaplayer (bf98f893) 2014-06-02 Gustavo Pichorim Boiko * Merge latest changes from trunk. (3cf80f25) 2014-06-02 Tiago Salem Herrmann * use a new instance of QMediaPlayer on every call (7b70ab1b) 2014-06-02 Ricardo Mendoza * Merge trunk (ed5ea792) 2014-05-29 Ricardo Mendoza * Migrate to Platform API V2 (f6d7cfd9) 2014-05-26 CI bot * Releasing 0.1+14.10.20140526-0ubuntu1 (60ef9c60) 2014-05-26 Michael Terry * Support PA_DISABLED in telephony-service to support running without sound. (aeb21894) 2014-05-26 Tiago Salem Herrmann * - start indicator only after ofono-setup has finished its execution - stop only when the desktop session ends. Fixes: 1317692 (d088c666) 2014-05-23 Tiago Salem Herrmann * add support for sending mms's (2cbfe3f0) 2014-05-15 CI bot * Releasing 0.1+14.10.20140515-0ubuntu1 (8931165a) 2014-05-15 Tiago Salem Herrmann * - make indicator recover channels during startup - workaround bugs in qmediaplayer/media-hub that is reporting wrong status - fix AcknowledgeMessages signature Fixes: 1318724 (8199167e) 2014-05-14 Michael Terry * Remove playlist-clear workaround, that's in another branch (cab203a3) 2014-05-14 Tiago Salem Herrmann * - make indicator recover channels during startup - workaround bugs in qmediaplayer/media-hub that is reporting wrong status (754ebd75) 2014-05-14 CI bot * Releasing 0.1+14.10.20140514-0ubuntu1 (68a01e5c) 2014-05-14 Renato Araujo Oliveira Filho * Implemented Telephony.PhoneNumber QML plugin. Fixes: 1267250 (f4ee203d) 2014-05-13 Renato Araujo Oliveira Filho * Added 'libprotobuf-dev' as dependency due a bug on libphonenumber package. (4ff268f7) * Fixed typo. (451c2fe0) * Revert changelog changes. (29ad093a) * Merged trunk. (9054e971) 2014-05-12 CI bot * Releasing 0.1+14.10.20140512.1-0ubuntu1 (b6c8cef1) 2014-05-12 Tiago Salem Herrmann * update po and pot files (ff83f507) 2014-05-12 CI bot * Releasing 0.1+14.10.20140512-0ubuntu1 (c04227e2) 2014-05-12 Gustavo Pichorim Boiko * Expose the telepathy accounts' connectivity status via DBus. Fixes: 1309143, 1311672, 1316662 (d05b6a6c) * Merge latest changes from trunk (d70b19ad) 2014-05-09 Renato Araujo Oliveira Filho * Merged trunk. (604755f1) 2014-05-09 Michael Terry * And clear playlist when stopping to avoid playing ringtone twice (d0c1d0d7) 2014-05-09 Tiago Salem Herrmann * update po and pot files (bbe3c5d6) 2014-05-09 Michael Terry * Support PA_DISABLED and don't play ringtones if it is set (84c16a65) 2014-05-09 Tiago Salem Herrmann * start indicator only after ofono-setup has finished its execution stop only when the desktop session ends. (96c1b719) 2014-05-08 Michael Terry * Don't run tests if asked not to (8d5215c9) 2014-05-07 CI bot * Releasing 0.1+14.10.20140507-0ubuntu1 (d8dcdd9a) 2014-05-07 Michael Terry * Tie telephony-service-indicator lifecycle to indicator-messages. (46873cb3) 2014-05-01 Gustavo Pichorim Boiko * Update the indicator code to work with the new TelepathyHelper::connected() implementation. (fc25e08f) * Merge latest changes from trunk. (1cd8da23) 2014-04-29 CI bot * Releasing 0.1+14.10.20140429-0ubuntu1 (3d55bbf7) 2014-04-29 Tiago Salem Herrmann * - use connectedChanged() instead of connectionChanged() - remove connectionChanged() as it is not used anywhere Fixes: 1234989, 1307653 (203f3037) 2014-04-25 Gustavo Pichorim Boiko * Expose the telepathy accounts' connectivity status via DBus. (483530e9) 2014-04-24 Renato Araujo Oliveira Filho * Fixed phonenumber conflicts with telepony QML plugin files. (4021a484) * Avoid problems with text property initialization. (e4e708cf) * Format number after focus received instead of keypress. (KeyPress does not work on device) (deefcd7f) * only enabled formatting after the first keypress to avoid problems with text property initialization (39009ad9) * Added AsYouTypeFormatter documentation. (b97bdc97) * Renamed PhoneNumberInput component to PhoneNumberField to mach with base class TextField. Added missing cmake files. Added QML documentation. (ee90b31f) 2014-04-23 Renato Araujo Oliveira Filho * Renamed regionCode to defaultRegionCode since this will be used as fall-back in case of the number does not cotains "+" in the beginner. (d18055b8) * Added debian package for telephony phonenumber qml plugin. (2c11db4f) * Implemented Telephony.PhoneNumber plugin. (d54357b8) 2014-04-18 Michael Terry * Tie telephony-service-indicator to indicator-messages (7cef6d66) 2014-04-15 Tiago Salem Herrmann * - use connectedChanged() instead of connectionChanged() - remove connectionChanged() as it is not used anywhere (bf781b55) 2014-04-15 CI bot * Releasing 0.1+14.04.20140415-0ubuntu1 (f5a2459e) 2014-04-15 Gustavo Pichorim Boiko * Do not use the TelepathyHelper::accounts(), and use the ::accountIds() instead as this might be called before the telepathy stuff is prepared. Fixes: 1286358 (698cbd7a) * Merge latest changes from trunk (b7a35942) 2014-04-14 Gustavo Pichorim Boiko * Do not use the TelepathyHelper::accounts(), and use the ::accountIds() instead as this might be called before the telepathy stuff is prepared. (0e2e42fc) 2014-04-11 CI bot * Releasing 0.1+14.04.20140411-0ubuntu1 (aa02a4d4) 2014-04-11 Gustavo Pichorim Boiko * Make sure the calls still dialing are returned as foregroundCalls even when they are not the only ones available. (ef439c95) 2014-04-10 CI bot * Releasing 0.1+14.04.20140410.1-0ubuntu1 (3da8fcc3) 2014-04-10 Tiago Salem Herrmann * - get accountIds from handler when appropriate to start apps faster - set application names (5033fc62) 2014-04-09 Gustavo Pichorim Boiko * Increase the waiting time when checking for the mock connection manager to be connected. (95ce3fa6) 2014-04-09 Tiago Salem Herrmann * merge trunk (9c323087) 2014-04-08 Gustavo Pichorim Boiko * Make sure the calls still dialing are returned as foregroundCalls even when they are not the only ones available. (5d731444) 2014-04-07 CI bot * Releasing 0.1+14.04.20140407-0ubuntu1 (52f7e3f4) * Add initial USSD support Fixes: 1195398 (1f2a1b6a) 2014-04-07 Tiago Salem Herrmann * Add class 0 SMS support (8c020529) * check if the sms interface is present before using it (9c3b0dda) * do not use hardcoded paths (9c8e8e34) * rename method (27f24a14) * get accountIds from handler when appropriate to start apps faster set application names (b5b5240c) 2014-04-03 Tiago Salem Herrmann * fix build (5d599b2f) * merge ussd branch (649a96fd) * [ Ubuntu daily release ]; New rebuild forced [ Gustavo Pichorim Boiko ]; Add support for handling conference calls. [ Gustavo Pichorim Boiko ]; Make sure to check the connection object before accessing it.; Expose to QML not only background and foreground calls, but a list of available calls so that the UI can decide how to display that to the user. [ Tiago Salem Herrmann ]; Fix telephony-service tests.; Add upstart job to launch telephony-service indicator at startup. (LP: #1296787. Call voicemail when message Id matches the voicemail action. [ Michael Terry ]; Add support for sharing contact info of incoming texts with the greeter. Consolidate ringtone code and greeter code so that the service can listen to which user is selected in the greeter, and use their ringtone. [ Gustavo Pichorim Boiko ]; Make it possible to handle multiple telepathy accounts.; Cleanup the build deps.; New rebuild forced [ Iain Lane ]; Read the user's ringtone, message tone and silent mode settings from AccountsService instead of GSettings (LP: #1265528) [ Gustavo Pichorim Boiko ]; Fix building against Qt 5.2.1 (LP: #1280281) [ Gustavo Pichorim Boiko ]; Avoid flickering the UI on client apps by addressing the following points: Get the "hasCalls" property value from the handler even before the telepathy observer is properly registered. Delay the cleaning up of manager data when unregistering the observer. (LP: #1277762) (a7f93891) 2014-04-02 Tiago Salem Herrmann * add support for IMEI (d13bf45d) * add missing connections (fa7f7fc9) 2014-04-02 CI bot * Releasing 0.1+14.04.20140402.1-0ubuntu1 (e4c83ada) 2014-04-02 Gustavo Pichorim Boiko * Add support for handling conference calls. (7c9e7817) 2014-04-01 Gustavo Pichorim Boiko * Connect the signals of the conference call. (350d5642) * Make sure that when a call becomes active, it notifies the callmanager calls. (af08ffdc) 2014-03-31 Gustavo Pichorim Boiko * Only connect to the call entry's signals if it doesn't belong to a conference. (c02ca426) * Remove some code duplication. (66055b45) 2014-03-31 Tiago Salem Herrmann * merge conference-call branch (324956c5) * add ussdManager to the qml plugin (4b652037) * add respondComplete() fix initiateFailed() (d82319f0) 2014-03-31 Gustavo Pichorim Boiko * Remove leftover conflict. (aad8b8d1) * Merge latest changes from trunk. (b8020153) 2014-03-31 Tiago Salem Herrmann * wait for the status before showing the notification (84f7ada9) 2014-03-28 CI bot * Releasing 0.1+14.04.20140328.1-0ubuntu1 (c94733c7) 2014-03-28 Gustavo Pichorim Boiko * Expose to QML not only background and foreground calls, but a list of available calls so that the UI can decide how to display that to the user. (899ce1ea) * Make sure to check the connection object before accessing it. (c36b4fd1) 2014-03-28 Tiago Salem Herrmann * Call voicemail when message Id matches the voicemail action. (4b242d5b) * Add upstart job to launch telephony-service indicator at startup. Fixes: 1296787 (d5a487cb) * Fix telephony-service tests. (074271ad) * do not execute tests on ppc (9e5d1d2d) 2014-03-27 Tiago Salem Herrmann * add ussd support on the indicator side (ff54ac69) * increase comparison timeout (0275886f) 2014-03-27 Gustavo Pichorim Boiko * Merge the test fixes. (dd8b76dd) * Merge latest changes from trunk. (5f82897d) 2014-03-27 Tiago Salem Herrmann * merge test fixes (7b07f673) * merge test fixes (bc1291ce) 2014-03-27 Gustavo Pichorim Boiko * Merge more test fixes. (86ddd15b) 2014-03-27 Tiago Salem Herrmann * do not enable account. it will be done by telepathyhelper (7a7c4ea0) 2014-03-27 Gustavo Pichorim Boiko * Merge the test fixes. (a0468b6c) 2014-03-26 Tiago Salem Herrmann * revert fix for tests (be37054e) * fix tests (2944683f) * revert fix for tests (b66551e5) 2014-03-26 Gustavo Pichorim Boiko * Update the connected status when the account connection changes. (fcf5a966) * Make sure to check the connection object before accessing it. (a1d217e4) 2014-03-24 Tiago Salem Herrmann * use utf8 use always the same voicemailId (3cbd452d) * fix tests (0b692982) * call voicemail when message Id matches the voicemail action (7479d7ec) * fix tests (bf099a52) * add upstart job to launch telephony-service indicator at startup (11134d19) 2014-03-21 Gustavo Pichorim Boiko * Another attempt to use the offscreen platform for the unit tests. (abd981ca) 2014-03-21 Tiago Salem Herrmann * connect/disconnect all signals when appropriate (608e74da) * add ussdmanager to CMakeLists.txt fix build (14bc0445) 2014-03-21 Gustavo Pichorim Boiko * Use the offscreen platform to make sure we don't rely on the display server being available for tests. (f5d477f5) * Remove some debug leftovers (c1566d7c) 2014-03-20 Tiago Salem Herrmann * add initial ussd support (ff180933) 2014-03-20 Gustavo Pichorim Boiko * Finish implementing the tests for conference call handling. (e95f6bc5) 2014-03-19 CI bot * Releasing 0.1+14.04.20140319-0ubuntu1 (ed0b0c1b) 2014-03-19 Michael Terry * Consolidate ringtone code and greeter code so that the service can listen to which user is selected in the greeter, and use their ringtone. (a65bd846) * Add support for sharing contact info of incoming texts with the greeter. (96a0551b) 2014-03-19 Gustavo Pichorim Boiko * Cleanup the build deps. (e3d76cf2) * Make it possible to handle multiple telepathy accounts. (ec391344) 2014-03-13 Gustavo Pichorim Boiko * Merge the changes for multiple account support. (eec7f1f1) * Add the base code for implementing the mock for conference calls. (f83cd91f) 2014-03-12 Michael Terry * Add method for checking if we're in greeter or not (1fadf519) * Merge from text-greeter-share branch (38500264) * Handle multiple-phone-number contacts (f8204efc) 2014-03-12 Gustavo Pichorim Boiko * Make it possible to create multiple telepathy accounts when there is more than just one modem in ofono. (386c0b14) 2014-03-11 Tiago Salem Herrmann * add support for saving class 0 sms (e67e861d) 2014-03-11 Michael Terry * Add missing header, whoops (b167bb1f) * Use proper comparison for phone numbers (50654253) * Merge in latest text-greeter-share branch (7e30471b) * Merge from trunk (770b2f24) * Merge from trunk (fa2cfdde) 2014-03-11 Gustavo Pichorim Boiko * Make it possible to select which account to use to make calls and send messages. (2917fed5) 2014-03-10 Tiago Salem Herrmann * show notification for class 0 sms's and place them in the messaging-menu (25b3b860) 2014-03-07 Gustavo Pichorim Boiko * Make sure to track the active timestamp of channels that are already active when they arrive. (f6d2665f) * Fix the ensureChannel() method signature. (130712df) * Merge latest changes from trunk. (d0698000) 2014-03-06 Tiago Salem Herrmann * fix broken behavior. some class 0 sms were being treated as class 1 (45737de9) 2014-03-06 Gustavo Pichorim Boiko * Make it possible to use multiple simultaneous accounts. (4934092d) * Cleanup the build deps. (1fdb2261) 2014-03-06 Tiago Salem Herrmann * fix tests add class 0 sms support (a4ca1b0e) 2014-03-06 CI bot * Releasing 0.1+14.04.20140306-0ubuntu1 (35d45905) * No change rebuild against Qt 5.2.1. (85d0606b) 2014-03-03 CI bot * Releasing 0.1+14.04.20140303-0ubuntu1 (013adb0d) 2014-03-03 Iain Lane * Read the user's ringtone, message tone and silent mode settings from AccountsService instead of GSettings Fixes: 1265528 (5164fcce) * Merge trunk (80a188ae) 2014-02-28 CI bot * Releasing 0.1+14.04.20140228.1-0ubuntu1 (c25602e5) 2014-02-28 Gustavo Pichorim Boiko * Fix building against Qt 5.2.1 Fixes: 1280281 (3eb4937a) 2014-02-28 CI bot * Releasing 0.1+14.04.20140228-0ubuntu1 (aab74372) 2014-02-28 Gustavo Pichorim Boiko * Avoid flickering the UI on client apps by addressing the following points: - Get the "hasCalls" property value from the handler even before the telepathy observer is properly registered - Delay the cleaning up of manager data when unregistering the observer Fixes: 1277762, 1277763 (b224c5c6) 2014-02-27 Michael Terry * Consolidate GreeterContacts and TextChannelObserver code that deals with accountsservice; support watching greeter for which user is selected and use their ringtone settings (50269512) 2014-02-27 Gustavo Pichorim Boiko * Add the splitCall() method on CallEntry and remove some leftover debug prints. (49766af5) 2014-02-26 Michael Terry * Merge in AccountsService branch (67e2ddc5) * Fix a couple typos (78c0e3ec) 2014-02-26 Gustavo Pichorim Boiko * Fix build against Qt 5.2.1 (5d888d89) 2014-02-24 Gustavo Pichorim Boiko * Merge latest changes from trunk. (d0cd5004) * Do not check for duplicated phone calls. (15760b7b) * Fix the specs used for handling the conf channels. (47158bcc) 2014-02-21 Michael Terry * First pass at sharing text contact info (f4418bde) * Use new lightdm-data directory support to store contact image (43b77ca7) 2014-02-20 Michael Terry * Move greetercontact class to internal library (d383c516) 2014-02-20 Gustavo Pichorim Boiko * Delay the cleaning up of manager data to avoid UI flickering on client apps. (2d8218cf) * Get the "hasCalls" property value from the handler to avoid flickering the UI of client apps. (a479440f) 2014-02-17 CI bot * Releasing 0.1+14.04.20140217.1-0ubuntu1 (a993994e) 2014-02-17 Tiago Salem Herrmann * Add group chat support. (e7fa1a0a) 2014-02-17 Gustavo Pichorim Boiko * Merge latest changes from trunk. (4c2cfeae) 2014-02-17 Tiago Salem Herrmann * merge trunk (1cb3306e) 2014-02-14 CI bot * Releasing 0.1+14.04.20140214.1-0ubuntu1 (5ebb8524) 2014-02-14 Gustavo Pichorim Boiko * Disable the displaying of notifications for calls. This is not required anymore in the new designs. (95dde9f6) * Update the mock CM to the new telepathy-qt5 API. (f8ffab24) 2014-02-11 Gustavo Pichorim Boiko * Handle call channels no matter what target handle type is used. (f6d1d906) * Merge latest changes from trunk. (bd95dfbe) * Add support for merging and splitting calls. (7eb44a3c) 2014-02-10 Gustavo Pichorim Boiko * Disable the displaying of notifications for calls. This is not required anymore in the new designs. (42f8512a) 2014-02-07 Gustavo Pichorim Boiko * Expose conference calls correctly in the QML plugin. (5afef50e) * Merge latest changes from trunk. (f0917fc9) * Add support for conference calls in the handler. (96f589e9) 2014-02-06 Tiago Salem Herrmann * fix ensureChannel() signature (0d0a82f4) 2014-02-06 CI bot * Releasing 0.1+14.04.20140206-0ubuntu1 (9b66a452) 2014-02-06 Gustavo Pichorim Boiko * Get the active timestamp for calls from the handler, as the observer is unregistered every time the application goes out of focus. This ensures that the call duration will always be correct. Save also the DTMF string so that the application can restore that info too after it is send to background and back to foreground. Fixes: 1225939 (32518b00) 2014-02-06 Michael Terry * Share current call contact info with the greeter. (97acc498) 2014-02-05 Gustavo Pichorim Boiko * Expose to QML not only background and foreground calls, but a list of available calls so that the UI can decide how to display that to the user. (addc4b9a) 2014-01-31 Gustavo Pichorim Boiko * Merge latest changes from trunk. (c6e22265) * Add tests to the newly created DBus method and signal. (92d6f4be) 2014-01-30 CI bot * Releasing 0.1+14.04.20140130-0ubuntu1 (1f57297b) 2014-01-30 Gustavo Pichorim Boiko * Improve the support for handling multiple calls by: - Using a different approach to detect background calls in the QML plugin - Make it possible to hangup the active call to answer an incoming one - Show notifications when calls are put on hold, when they are rejected and when they end. (a4e7a490) 2014-01-30 Tiago Salem Herrmann * fix broken test (880b73a6) * correctly handle group chats (00d1ec4e) 2014-01-29 Gustavo Pichorim Boiko * Merge latest changes from trunk. (cb4af7b2) * Get the active timestamp for calls from the handler, as the observer is unregistered every time the application goes out of focus. This ensures that the call duration will always be correct. Save also the DTMF string so that the application can restore that info too after it is send to background and back to foreground. (66a708cf) 2014-01-29 Michael Terry * Merge from trunk (006f6ff6) 2014-01-29 Iain Lane * Use invalidatedProperties instead of changedProperties to fix change notification (faef899c) * Rename slot* to on* (7d41176f) 2014-01-28 Tiago Salem Herrmann * add group chat support (96b4f0ca) 2014-01-28 Gustavo Pichorim Boiko * Display calls that are still in the dialing state too. (202873b6) 2014-01-24 Gustavo Pichorim Boiko * Fix the compilation. (5b6df732) * Make sure to notify the hasBackgroundChanged() when an incoming call becomes active (bdcb110b) 2014-01-22 Gustavo Pichorim Boiko * Do not show notifications for missed calls. (c212b988) * Add tests for the hold feature of calls. (2e631dfe) 2014-01-22 Timo Jyrinki * Use QT_QPA_PLATFORM=minimal to fix test failures (LP: #1270770). Fixes: https://bugs.launchpad.net/bugs/1270770. (883f92ea) 2014-01-22 Gustavo Pichorim Boiko * Make the dbus-based tests more robust. Fixes: https://bugs.launchpad.net/bugs/1270778. (de402277) * Try to fix the dbus autopilot errors by giving telepathy-mock some time to start up. (1dd7d6ce) 2014-01-20 Tiago Salem Herrmann * - Fix default action for missed calls. - Add voicemail entries to the messaging menu. (9179ec44) 2014-01-20 Gustavo Pichorim Boiko * Disable the secondary accept action, as this is not supported by the notification system on phone yet. (c54a9a3b) * Improve the support for handling multiple calls by: - Using a different approach to detect background calls in the QML plugin - Make it possible to hangup the active call to answer an incoming one - Show notifications when calls are put on hold, when they are rejected and when they end. (d5f9beec) 2014-01-20 Timo Jyrinki * Use QT_QPA_PLATFORM=minimal to fix test failures (LP: #1270770) (802cb5f0) 2014-01-20 Tiago Salem Herrmann * remove unused method. (4115ef46) 2014-01-17 Tiago Salem Herrmann * - Fix default action for missed calls - Add voicemail entries to the messaging menu (49a43b05) 2014-01-16 Gustavo Pichorim Boiko * Add the infrastructure to write tests for the handler, and write tests for the most important bits of it. (2e5d15ae) * Output test failures. (baa642c2) 2014-01-15 Gustavo Pichorim Boiko * Remove leftover linking library. (d98ef516) * Add missing licence headers. (6af43e6e) * Add new dependencies required to run the tests. (bcf31721) * Test sending a message. (4b66471c) * Add tests for making and hanging up calls. (caadf76e) 2014-01-14 Iain Lane * Depend on accountsservice-ubuntu-touch-schemas (6da9ae57) 2014-01-13 Iain Lane * Read the ringtone, messaging tone and silent-mode toggle from AccountsService (2f17be2a) 2014-01-07 Gustavo Pichorim Boiko * Add the infrastructure to test the handler. (85dc5468) 2013-12-21 Michael Terry * Pass contact info to AccountsService for the benefit of unity8-greeter (384e41ac) 2013-12-05 Automatic PS uploader * Releasing 0.1+14.04.20131205-0ubuntu1 (revision 761 from lp:telephony-service). (c97fa498) * Releasing 0.1+14.04.20131205-0ubuntu1, based on r761 (245f80b5) 2013-12-04 Gustavo Pichorim Boiko * Test ContactWatcher's "interactive" property. (4579e7bf) * Test the interactive property of ContactWatcher. (bf750f29) 2013-12-03 Tiago Salem Herrmann * Add support for private and unknown phone numbers. (c8fb4812) * initialize mInteractive only set mInteractive in setPhoneNumber() (896ec5e0) * fix mInteractive attribution (51e043ed) * use x-ofono strings to identify unknown and private calls (f931cd6d) * add support for unknown and private numbers (e61be5a5) 2013-11-17 Tiago Salem Herrmann * Accept non numeric id's. (305a287b) 2013-11-11 Tiago Salem Herrmann * revert back to comparePhoneNumbers() (9a7d51ae) 2013-11-08 Tiago Salem Herrmann * change test name (b872323e) * move isPhoneNumber() to phoneutils.cpp (e9ed022c) 2013-11-05 Tiago Salem Herrmann * add support for non numeric ids (3ea63b70) 2013-10-15 Automatic PS uploader * Releasing 0.1+13.10.20131015.2-0ubuntu1 (revision 757 from lp:telephony-service). (612f250b) * Releasing 0.1+13.10.20131015.2-0ubuntu1, based on r757 (bf329e3f) 2013-10-11 Gustavo Pichorim Boiko * Create the GFile from URIs to make sure the percent encoding gets properly preserved. (9e37b846) * Create the GFile from URIs to make sure the percent encoding gets properly preserved. (793cc73d) * Fix the icon used in the messaging-menu entry. (a451dce7) 2013-10-11 Automatic PS uploader * Releasing 0.1+13.10.20131011-0ubuntu1 (revision 755 from lp:telephony-service). (a9dcf90a) * Releasing 0.1+13.10.20131011-0ubuntu1, based on r755 (b4c310b9) 2013-10-09 Gustavo Pichorim Boiko * Use the URL dispatcher to invoke the dialer and messaging apps. Fixes: https://bugs.launchpad.net/bugs/1234903. (a44a6d0a) 2013-10-08 Gustavo Pichorim Boiko * Make the existence of messaging-menu-message.h mandatory, failing the build if it is not there. (7ad5bb7d) 2013-10-07 Gustavo Pichorim Boiko * Use platform-api calls directly to open URLs because calling QDesktopServices::openUrl() from a QCoreApplication causes a crash. (0956a14e) * Add template code for the openUrl method. (b4b58098) * Add the code to check for platform API back. (ee58f3ef) 2013-10-04 Gustavo Pichorim Boiko * Make the existence of messaging-menu-message.h mandatory for the buildi, failing if it is not there. (3b6bbc3e) * Use the URL dispatcher to invoke the dialer and messaging apps. (716e5a43) 2013-10-04 Automatic PS uploader * Releasing 0.1+13.10.20131004.1-0ubuntu1 (revision 752 from lp:telephony-service). (3c7e526d) * Releasing 0.1+13.10.20131004.1-0ubuntu1, based on r752 (d8ab9768) 2013-10-02 Gustavo Pichorim Boiko * Make it possible to click in the OSD notifications. Fixes: https://bugs.launchpad.net/bugs/1227718. (88bb1ade) * Merge latest changes from trunk. (6dec6710) * Add the switch-to-application hint to the OSD notification. (a2b3b640) * Improve the placing of items in the messaging menu by addressing the following points: - Add messages to the messaging menu even before the contact matching happens for the OSD notifications - Add only missed calls to the messaging menu (instead of adding all calls). Fixes: https://bugs.launchpad.net/bugs/1220848. (a1728d82) 2013-10-01 Automatic PS uploader * Releasing 0.1+13.10.20131001.4-0ubuntu1 (revision 749 from lp:telephony-service). (6abda7c0) * Releasing 0.1+13.10.20131001.4-0ubuntu1, based on r749 (a750af43) 2013-10-01 Gustavo Pichorim Boiko * Properly encode the contact avatar image path. Fixes: https://bugs.launchpad.net/bugs/1224095. (4a723a26) * Make it possible to click in the OSD notifications. (ceec2497) * Add only missed calls to the messaging menu. (b57a9ef7) * Place the messaging-menu entry even before the contact matching returns. (206f7c9e) 2013-09-30 Gustavo Pichorim Boiko * Properly encode the contact avatar image path. (f9a3843c) 2013-09-27 Automatic PS uploader * Releasing 0.1+13.10.20130926.1-0ubuntu1 (revision 746 from lp:telephony-service). (8ffc955a) 2013-09-26 Gustavo Pichorim Boiko * Handle exceptions that might occur as a result of metric service usage. (3519f6b3) * Handle exceptions that might occur as a result of metric service usage. (88deaf62) 2013-09-26 Automatic PS uploader * Releasing 0.1+13.10.20130926.1-0ubuntu1, based on r746 (d27e3a78) 2013-09-26 Gustavo Pichorim Boiko * Add support for user metrics. (b6ca40c3) 2013-09-25 Gustavo Pichorim Boiko * Make ir float point. (2a421d43) * Add Ugo to the authors section, as he did most of the code. (9c3655db) * Remove leftover return statement. (ea59483c) * Move the metrics implementation to a separate class and add support for call metrics. (83de490a) 2013-09-25 Ugo Riboni * Refactor a bit the logic to choose only actual messages, then update metrics also with messages already in the channel when opening it. (0a3fab3e) 2013-09-24 Ugo Riboni * Fix style issue and send metric only on real text messages (03b259fd) * Add proper dependencies (53ab93b8) * Send updates to the infographics when receiving or sending a text message (c621332f) 2013-09-23 Timo Jyrinki * Sync changelog from manual upload (0bbcc9ac) 2013-09-18 Tiago Salem Herrmann * - exclude incoming calls from foregroundCalls(). - empty mCallEntries when the observer is unregistered. Fixes: https://bugs.launchpad.net/bugs/1224082. (0a552be5) * remove legacy code (f538b07b) * fix comment (c2f95b7f) * - fix foregroundCall() to exclude incoming calls. - empty mCallEntries when the observer is unregistered (21d4e17c) 2013-08-31 Automatic PS uploader * Releasing 0.1+13.10.20130830.3-0ubuntu1 (revision 742 from lp:telephony-service). (7dc4e88a) 2013-08-30 Automatic PS uploader * Releasing 0.1+13.10.20130830.3-0ubuntu1, based on r742 (0a17e20a) 2013-08-30 Gustavo Pichorim Boiko * Reload the ringtone file path from settings every time the playing of it is requested to make sure it uses the latest preferences. (f0c7169a) 2013-08-30 Automatic PS uploader * Releasing 0.1+13.10.20130830.2-0ubuntu1 (revision 740 from lp:telephony-service). (80d90927) * Releasing 0.1+13.10.20130830.2-0ubuntu1, based on r740 (d21b02f7) 2013-08-30 Loïc Minier * Let telephony-service depend on dconf-cli as /usr/bin/ofono-setup calls /usr/bin/dconf. (bb7260a3) * Let telephony-service depend on dconf-cli as /usr/bin/ofono-setup calls /usr/bin/dconf. (a3c1f509) 2013-08-29 Gustavo Pichorim Boiko * Reload the ringtone file path from settings every time the playing of it is requested to make sure it uses the latest preferences. (f54d5f22) 2013-08-28 Automatic PS uploader * Releasing 0.1+13.10.20130828.1-0ubuntu1 (revision 738 from lp:telephony-service). (249da0b0) * Releasing 0.1+13.10.20130828.1-0ubuntu1, based on r738 (cc1105b6) 2013-08-27 Gustavo Pichorim Boiko * Run the mediaplayer calls in a separate thread to avoid locking the approver. (7fbcc4a8) * Merge latest changes from trunk. (54837aa3) 2013-08-27 Automatic PS uploader * Releasing 0.1+13.10.20130827.2-0ubuntu1 (revision 736 from lp:telephony-service). (e975cf97) * Releasing 0.1+13.10.20130827.2-0ubuntu1, based on r736 (1e0c012c) 2013-08-27 Bill Filler * Add Conflicts and Replaces phone-app such that both can't be installed at the same time. (5b5e6a32) 2013-08-27 Automatic PS uploader * Releasing 0.1+13.10.20130827-0ubuntu1 (revision 734 from lp:telephony-service). (a53a673b) * Releasing 0.1+13.10.20130827-0ubuntu1, based on r734 (3569ab87) 2013-08-26 Automatic PS uploader * Releasing 0.1+13.10.20130826.1-0ubuntu1 (revision 733 from lp:telephony-service). (bd44f704) * Releasing 0.1+13.10.20130826.1-0ubuntu1, based on r733 (320d53a2) 2013-08-26 Bill Filler * added Conflicts, Replaces phone-app in debian/control (61b4b86c) 2013-08-26 Timo Jyrinki * Preparations and fixes for daily release. (3bff3e92) * Add CC-BY-SA license and update debian/copyright. For the assets+icons. (63043390) * Merge trunk. (0ab91942) * Remove -dbg package, dbgsyms will be available after archive upload (52c85d58) * s/telephony-app/telephony-service/ (7cc4c732) 2013-08-23 Tiago Salem Herrmann * register observer only when necessary add unregisterChannelObserver() method. Fixes: https://bugs.launchpad.net/bugs/1208869. (1869ddab) * delete old observer instance (9ec49e77) * register observer only when necessary add unregisterChannelObserver() method (9c56af2b) 2013-08-23 Timo Jyrinki * Multi-Arch, renaming of QML plugin package and other tweaks. (01223611) * Remove source (b90b0d59) * wrap-and-sort -a -t (b710b56d) * Automatic snapshot from revision 730 (bootstrap) (323b6b6d) 2013-08-23 Gustavo Pichorim Boiko * Create a new daemon to host the indicators and OSD to get that code out of the approver. (add222f1) 2013-08-22 Gustavo Pichorim Boiko * Run the mediaplayer calls in a separate thread to avoid locking the approver. (363bafc3) * Do not link the approver against libmessaging-menu. (de25da1e) * Replace some calls of telephony-service-approver by the correct ones for the indicator. (693e63ea) * Update potfiles. (21732fc6) * Remove a file from the packaging. (9b1dfd34) * Create a new daemon to host the indicators and OSD to get that code out of the approver. (7293beed) * Update bzrignore. (d28268e5) 2013-08-21 Gustavo Pichorim Boiko * Make sure there is only at most one instance of the approver and the handler. (7a9eeadf) * Make sure there is only at most one instance of the approver and the handler. (d0444030) 2013-08-20 Gustavo Pichorim Boiko * Make sure the approver gets registered as an observer too. (70099293) * Make sure the approver gets registered as an observer too. (6d5f69ae) 2013-08-14 Gustavo Pichorim Boiko * Add some unit tests for the telephony-service. (66cadb29) * Disable qml tests for now. (47fd25b8) * Add missing license header. (43a5bf3d) 2013-08-13 Gustavo Pichorim Boiko * Fix running qml tests in the package building environment. (df15a730) * Update .bzrignore (ba90b75d) * Add missing dependencies. (1cd940ff) * Add more test cases for the ContactWatcher. (23ee6962) * Clear the contact data from ContactWatcher when the match is not valid anymore. (d6ab2f22) * Add a QML test to make sure the context properties are properly registered. (d874ecce) * Add tests for the ContactWatcher class. (10272de4) * Fix the logic for clearing contact data in the contact watcher. (08ef1611) * Add tests for the ContactUtils and the PhoneUtils classes. (578e72f0) 2013-08-12 Tiago Salem Herrmann * - make ContactWatcher provide subTypes and contexts of the matched phone number - test current contact on every change, as the phone number might have changed. (0c7e38e0) * make ContactWatcher provide subTypes and contexts of the matched phone number test current contact on every change, as the phone number might have changed (0200a2c2) 2013-08-09 Sebastien Bacher * read the ringtone and new message sounds from gsettings. Fixes: https://bugs.launchpad.net/bugs/1202253. (8916eb00) 2013-08-08 Sebastien Bacher * don't play sounds in silent mode (220cbdb5) 2013-08-02 Tiago Salem Herrmann * fix address book bus name. (e9f095f4) * fix address book bus name (87a1920b) 2013-08-02 Sebastien Bacher * read the ringtone and new message sounds from gsettings (814b6fb3) 2013-08-01 Gustavo Pichorim Boiko * Use the new contact service via QtContacts to match contacts in notification items. (513cab38) 2013-07-31 Gustavo Pichorim Boiko * Add missing entry to the .install file. (da8060ae) * Add missing copyright headers. (fd7a131c) 2013-07-30 Gustavo Pichorim Boiko * Add code to launch the new applications resulted from the phone-app splitting. (fd3ae98f) * Use the contact name formatted in the form FirstName + LastName. (1d489a7f) * Use the manager from the ContactUtils. (993abc48) * Use the new contact service via QtContacts to match contacts in notification items. (bbafaa98) 2013-07-29 Gustavo Pichorim Boiko * Link the static library against the platform-api library. (1d7169a8) * Add code to launch the new applications resulted from the phone-app splitting. (b890158c) 2013-07-25 Gustavo Pichorim Boiko * Add a dependency on history-service. (c3c4cddd) * Add a dependency on history-service. (7b60d757) 2013-07-24 Tiago Salem Herrmann * add dependency to qtcontact5-galera. (5db673dc) * add dependency to qtcontact5-galera (94216c8b) 2013-07-23 Tiago Salem Herrmann * add ContactWatcher component and make it accessible from qml code. (ae107486) * do not keep copy of engineInstance() pointer fix comment emit phoneNumberChanged() (f858b45a) 2013-07-22 Tiago Salem Herrmann * remove debug (2751e518) * check mAccount before using it (cc3f5a52) * fix comments, identation and debugs (5e2a85bd) * implement other functions change filter to make phone matching work. (6d3ca85d) 2013-07-19 Tiago Salem Herrmann * use resultsAvailable() signal rename id to contactId (7ff6effe) * add initial contact watcher implementation (2c51d4bc) 2013-07-18 Gustavo Pichorim Boiko * Rename the remaining code from phone-app to telephony-service. (3f1edcb1) * Rename the telepathy client the handler requests. (7ed4baaa) * Remove obsolete file. (559f40f6) * Replace phone-app in headers and comments. (5ce56c2e) * Rename the calls for the Telepathy handler. (f8be25bd) * Update the debian packaging. (36c08e20) * Update the translations. (24f3cef0) * Merge latest changes from trunk. (298be423) * Fix the packaging of the telephony-service. (d75536fc) 2013-07-17 Gustavo Pichorim Boiko * Update .bzrignore (f117bfe5) * Rename the static library to libtelephonyservice. (df10a688) * Rename the handler. (d24c12b0) * Rename the approver. (0ce2707e) * Remove some more obsolete files and clear some dependencies not needed anymore. (a1ca630f) 2013-07-16 Gustavo Pichorim Boiko * Add missing copyright headers. (b9093a74) * Fix the packaging of telephony-service. (00deb229) 2013-07-15 Gustavo Pichorim Boiko * Update translations. (78188b55) * Remove obsolete contact model and wrapper classes and other models that don't belong in here anymore. (b333d440) * Remove the qmlproject file. (832a49cf) * Rename the QML plugin to not conflict with the one in phone-app. (501247f9) * Start removing the UI bits from the branch to keep it only for the service. (73c298b6) 2013-07-14 Launchpad Translations on behalf of phablet-team * Launchpad automatic translations update. (fa488bf5) 2013-07-13 Launchpad Translations on behalf of phablet-team * Launchpad automatic translations update. (707e69e2) 2013-07-12 Launchpad Translations on behalf of phablet-team * Launchpad automatic translations update. (c6e96ab3) 2013-07-11 Launchpad Translations on behalf of phablet-team * Launchpad automatic translations update. (305bc326) 2013-07-05 Gustavo Pichorim Boiko * Replace the obsolete toolbar Actions by ToolbarButtons and update the autopilot tests to use them. (79884eed) 2013-07-04 Gustavo Pichorim Boiko * Change the tests to use the ActionItem to move to toolbar buttons. (03ac23f0) * Fix saving the contact by triggering the correct button. (69def31b) * Replace the obsolete toolbar Actions by ToolbarButtons (3429e775) 2013-07-03 Gustavo Pichorim Boiko * Release version 0.59.18. (3fb93d55) * Fix saving contacts after editing or creating new. (024005b2) * releasing version 0.59.18 (076e06e6) * Fix saving contacts after editing or creating new. (6f5f0e4f) 2013-07-03 Launchpad Translations on behalf of phablet-team * Launchpad automatic translations update. (ef98c0b0) 2013-07-03 Gustavo Pichorim Boiko * Get rid of the dual panel layout support. This is obsolete for a long time now. (6388bf13) 2013-07-02 Gustavo Pichorim Boiko * Release version 0.59.17. (fce6d18c) * releasing version 0.59.17 (ec5c0baa) * Fix autopilot tests. (75dff45c) * Rename the leftPane to mainPane. (505d6cf5) * Get rid of the dual panel layout support. This is obsolete for a long time now. (f746ce93) * Update phone-app to work with the new theming. (efefdc71) 2013-07-02 Launchpad Translations on behalf of phablet-team * Launchpad automatic translations update. (ad10caf1) 2013-07-01 Gustavo Pichorim Boiko * AbstractButton does not have a color property. (d2dfb15c) * Merge trunk. (b6ed316d) * Change the way the custom header is set to work with the new style engine. (1999a974) * Use AbstractButton as the base for all custom buttons in phone-app. (5b7a4b46) * Use AbstractButton as the base for all custom buttons in phone-app. (28450f83) 2013-06-30 Launchpad Translations on behalf of phablet-team * Launchpad automatic translations update. (27360386) 2013-06-28 Omer Akram * Adds initial packaging for the network connected tests. (032a1738) * add a sample config file to add input values to (d7a2a639) * read phone variables from a file (e36a0539) 2013-06-27 Mirco Müller * Don't use the image_path hint to pass an avatar-icon, because the notification-backend does not support it yet. Instead use notify_notification_new()s icon-parameter directly. Fixes: https://bugs.launchpad.net/bugs/1194629. (27ef8366) 2013-06-27 Kaleo * Renamed Delegates into Styles. (d682e853) 2013-06-27 Omer Akram * install connected_tests using cmake, thanks boiko (1c530b55) 2013-06-27 Kaleo * Adapt to newer and simpler toolkit's theming infrastructure. (ea8bb171) 2013-06-27 Omer Akram * merge trunk (e76e5634) * add packaging for connected_tests, make woodoo still needed (4d6fd2c4) * add initial autpilot tests for connected testing (d3629a7c) 2013-06-27 Launchpad Translations on behalf of phablet-team * Launchpad automatic translations update. (778b1f80) 2013-06-26 Mirco Müller * Don't use the image_path hint to pass an avatar-icon, because the notification-backend does not support it yet. Instead use notify_notification_new()s icon-parameter directly. Fixes LP: #1194629 (37e0236e) 2013-06-26 Launchpad Translations on behalf of phablet-team * Launchpad automatic translations update. (235aef8f) 2013-06-26 Gustavo Pichorim Boiko * Release version 0.59.16. (29ad5b61) 2013-06-25 Gustavo Pichorim Boiko * releasing version 0.59.16 (e24dbade) 2013-06-25 Renato Araujo Oliveira Filho * Used hex format for message id to avoid invalid character. Fixes: https://bugs.launchpad.net/bugs/1191820. (c154ea19) 2013-06-25 Gustavo Pichorim Boiko * Remove a call to the obsolete g_type_init() function. (c7efacf7) 2013-06-25 Renato Araujo Oliveira Filho * Merged mainline. (923d2f46) * Direct call "acknowledgeMessage" instead of use "invokeMethod" (215955ac) 2013-06-25 Gustavo Pichorim Boiko * Remove a call to the obsolete g_type_init() function. (40066ebb) * Make it possible to answer or reject a call by calling the approver via DBus. This will be used to create automatic tests. (8680dcb2) 2013-06-25 Renato Araujo Oliveira Filho * Used hex format for message id to avoid invalid character (37f62f79) 2013-06-25 Gustavo Pichorim Boiko * Refactor the code to find the dispatch operation for the incoming call to avoid code duplication. (ac7d3a5b) 2013-06-25 Ricardo Salveti de Araujo * debian/control: depend on telepathy-ofono instead, same as telepathy-ofono2 but provided by the archive. (19c4b9ed) 2013-06-25 Gustavo Pichorim Boiko * Break the second loop if the call is found. (8c717f71) * Make it possible to answer or reject a call by calling the approver via DBus. This will be used to make automatic tests. (8441b99d) 2013-06-25 Omer Akram * Make the autopilot tab switching reliable. Fixes failing tests on the phone. (292f5af7) 2013-06-25 Launchpad Translations on behalf of phablet-team * Launchpad automatic translations update. (7ae4acb7) 2013-06-25 Ricardo Salveti de Araujo * debian/control: depend on telepathy-ofono instead, same as telepathy-ofono2 but provided by the archive (3d69eb6d) 2013-06-24 Sergio Schvezov * force rebuild. (4e3e4891) * Making it native. (dddb552e) * Force rebuild. (65e384d8) 2013-06-23 Omer Akram * improve the tab revealing, making more reliable (f58bcc09) 2013-06-23 Launchpad Translations on behalf of phablet-team * Launchpad automatic translations update. (26dc3eb6) 2013-06-21 Gustavo Pichorim Boiko * Remove desktop file and application binary compatibility links. (f31d23d4) * releasing version 0.59.13-0ubuntu6 (cb4126a3) * Remove the compatibility links. (351f22bd) 2013-06-21 Launchpad Translations on behalf of phablet-team * Launchpad automatic translations update. (f91da682) 2013-06-20 Ken VanDine * debian/control - depend on libfolks-eds25. (edf02b0c) * debian/control - depend on libfolks-eds25 (47a96872) 2013-06-19 Michał Sawicz * Do not depend on notify-osd, recommend unity8 (>= 7.81.0~) instead. (f852dd07) * Release for saucy. (96f3acb1) * Do not depend on notify-osd, recommend unity8 (>= 7.81.0~) instead. (9a4db04e) 2013-06-19 Launchpad Translations on behalf of phablet-team * Launchpad automatic translations update. (9cc184b4) 2013-06-17 Launchpad Translations on behalf of phablet-team * Launchpad automatic translations update. (9560ccbe) 2013-06-16 Launchpad Translations on behalf of phablet-team * Launchpad automatic translations update. (cb34be32) 2013-06-15 Launchpad Translations on behalf of phablet-team * Launchpad automatic translations update. (f616a0c7) 2013-06-14 Gustavo Pichorim Boiko * Fix getting the toolbar buttons in autopilot tests. (92660099) * Use a custom cursor that doesn't blink to avoid extra CPU usage. Fixes: https://bugs.launchpad.net/bugs/1188669. (2dd03d9b) 2013-06-14 Omer Akram * Fix autopilot tests to re-enable jenkins job. (da862f8d) 2013-06-14 Gustavo Pichorim Boiko * Fix getting the toolbar buttons in autopilot tests. (ac629b4a) * releasing version 0.59.13-0ubuntu3 (b7451625) * Use a custom cursor that doesn't blink to avoid extra CPU usage. (fef5a522) 2013-06-14 Sebastien Bacher * debian/control: depends on dconf-cli rather than dconf-tools, the tools include the gtk editor and we don't want to depends on gtk (f519e202) 2013-06-14 Omer Akram * fix tab switching in autopilot tests (3e5d9cab) 2013-06-14 Launchpad Translations on behalf of phablet-team * Launchpad automatic translations update. (c41c18c2) 2013-06-13 Launchpad Translations on behalf of phablet-team * Launchpad automatic translations update. (7bc4bcca) 2013-06-12 Gustavo Pichorim Boiko * Handle translation of desktop files. (abe6d72c) * releasing version 0.59.13-0ubuntu2 (cd31b500) * Fix a copy&paste leftover. (42018591) * Handle translation of desktop files. (d4faacf3) 2013-06-12 Sebastien Bacher * debian/control: depends on dconf-cli rather than dconf-tools, the tools include the gtk editor and we don't want to depends on gtk (fb4bd91c) 2013-06-12 Launchpad Translations on behalf of phablet-team * Launchpad automatic translations update. (2c795267) 2013-06-10 Sergio Schvezov * Bumping the version to avoid some launchpad/ppa issues for a rebuild against the correct dependencies. (f7876ea3) 2013-06-10 Tiago Salem Herrmann * Move delete action to the main contact detail toolbar and add a confirmation dialog. Fixes: https://bugs.launchpad.net/bugs/1185548. (11322943) 2013-06-09 Launchpad Translations on behalf of phablet-team * Launchpad automatic translations update. (97f9af1d) 2013-06-07 Launchpad Translations on behalf of phablet-team * Launchpad automatic translations update. (3f2ed550) 2013-06-06 Launchpad Translations on behalf of phablet-team * Launchpad automatic translations update. (e87adb5a) 2013-06-05 Launchpad Translations on behalf of phablet-team * Launchpad automatic translations update. (cf7b587c) 2013-06-04 Tiago Salem Herrmann * add missing i18n (95c62100) * fix changelog (168b393e) * releasing version 0.59.12-0ubuntu6 (d7cbdff9) * Move delete action to the main contact detail toolbar and add a confirmation dialog (LP: #1185548). (2409d618) 2013-06-04 Sergio Schvezov * Release for saucy. (b7d71623) * Releasing for saucy. (d9e73abb) 2013-05-30 Tiago Salem Herrmann * Make the search bar always visible on contacts panel. (71f1c699) * releasing version 0.59.12-0ubuntu4 (5c2c9d10) * only scroll the contact list if search query isn't empty (f1f36f77) * Make the search bar always visible on contacts panel (987fedcb) * Set favorite detail as modified when necessary. Fixes: https://bugs.launchpad.net/bugs/1185036. (23c7fd86) 2013-05-29 Tiago Salem Herrmann * releasing version 0.59.12-0ubuntu3 (65202f3c) * Set favorite detail as modified when necessary (d6535859) * Prevent the search field from being partially covered by the view header. Fixes: https://bugs.launchpad.net/bugs/1181362. (cfc76984) * remove old code (7ea516b4) * update changelog (b54aeba2) * Allow toggling favorite even when not editing a contact (LP: #1185064).; Added rotation support;; Added i18n suppor. (592c67fd) * - Allow toggling favorite even when not editing a contact - Increase the interaction area surrounding the favorite toggle. Fixes: https://bugs.launchpad.net/bugs/1185064. (692deeeb) * revert method renaming. (2e808970) * Allow toggling favorite even when not editing a contact (LP: #1185064). (f29565c8) 2013-05-29 Renato Araujo Oliveira Filho * Implemented rotation support and re-layout for horizontal view. (a10c2508) 2013-05-28 Renato Araujo Oliveira Filho * releasing version 0.59.12-0ubuntu1 (4201c6cc) * Merged mainline. (6deacece) * Implemented support for i18n. (cbb6add0) * Changed keypad to left side in the landscape mode. (b3529d4c) * Change the layout based on app width instead of screen orientation. (8d45de93) * Removed unused variable. (ee8e5d18) * Fixed typos. (7764f352) * Included "%1 missed call" into the translation. (373e5dd5) * Used plural form for voice messages string. (0e0d9fff) * Implemented rotation support and re-layout for horizontal view. (6032bd47) * Added more instring to translation. (7161cf18) * Removed white space from dateUtils.js strings. (723ecc98) * Removed blank line. (d68367bb) 2013-05-27 Renato Araujo Oliveira Filho * Used a workaround on plural translation due a problem in the SDK. (3c655ceb) * Fixed plural translations. (58a47e5f) * Fixed plural messages. (313fb70c) * Translated conversationfeedmodel.cpp (33ab4f5b) * Fixed typo. (fd84eb8c) * Added translatior for approver. (2bd80dd8) * Added translations for dateUtils.js file (759b990f) * Fixed wrong cut/paste. (45f3c229) * Added missing files. (9d87f177) * Merged mainline. (f4d0ac95) 2013-05-27 Tiago Salem Herrmann * Prevent the search field from being partially covered by the view header (LP: 1181362). (6288f375) 2013-05-27 Renato Araujo Oliveira Filho * Field details traslated. (8d40cd3d) 2013-05-25 Bill Filler * release new version. (689280c2) 2013-05-24 Bill Filler * releasing version 0.59.11-0ubuntu1 (ef7198e7) 2013-05-24 Gustavo Pichorim Boiko * Add a temporary toolbar shown when editing contacts to make it easier to save or cancel the editing. Fixes: https://bugs.launchpad.net/bugs/1181339. (838cced7) * Begin adding support for i18n and wrap strings in QML files to get translated. (1840cedd) * Make the string self contained in the js (b4bea976) 2013-05-23 Gustavo Pichorim Boiko * Make it possible to create a new contact from a number in the conversation view. Fixes: https://bugs.launchpad.net/bugs/1181343. (2dc2fb9b) * Move the buttons away from the border to avoid triggering the edge swipe when clicking the button. (5e6c0596) * Make it possible to create a new contact from a number in the conversation view. (95650072) * Fix copyright. (3b5e98e8) * Remove leftover code. (e0b6d1d6) * Add a temporary toolbar shown when editing contacts to make it easier to save or cancel de editing. (1f1e6f3d) * Release version 0.59.10. (cd2e908d) * Update the conversation panel when a message is marked as read. (d735c8f9) 2013-05-22 Gustavo Pichorim Boiko * Fix typo in the changelog. (6753f07c) * releasing version 0.59.10-0ubuntu2 (5dbdc9f8) * And one more typo (2bd5a2c6) * Make sure the header doesn't overlap the contents in DetailViewCommunication. (32e7639f) * Fix a typo in the function name. (7e866e10) * Update the conversation panel when a message is marked as read. (698eb821) 2013-05-22 Tiago Salem Herrmann * Make phone-app depend explicitly on telepathy-ofono2. (4119ff1a) * Make phone-app depend explicitly on telepathy-ofono2 (b477d38a) 2013-05-22 Gustavo Pichorim Boiko * Make sure the header doesn't overlap the contents in DetailViewCommunication. (88bbdd78) 2013-05-20 Gustavo Pichorim Boiko * Fix the contact details view by forcing the header height to change and by removing the obsolete footer. Fixes: https://bugs.launchpad.net/bugs/1181363. (0232b043) * Fix the contact details view by forcing the header height to change and by removing the obsolete footer. (e622570d) 2013-05-17 Kaleo * Stop using the private property Scrollbar__interactive. The default value is false anyway. (4593351f) * Stop using the private property Scrollbar__interactive. The default value is false anyway. (8a43ad79) 2013-05-14 Tiago Salem Herrmann * - change voicemail interface name to com.canonical.Telephony.Voicemail - change speaker interface name to com.canonical.Telephony.Speaker - add channel object path as parameter to SetSpeakerMode(). It was raising a dbus error. - move macros to telepathyhelper.h - do not set speaker mode when accepting calls from the approver. (6a4da88e) 2013-05-08 Tiago Salem Herrmann * move macros to telepathyhelper.h (09566254) * do not enable speaker when calls are accepted from the approver (c966c730) * update changelog (e53e461a) * - change voicemail interface name to com.canonical.Telephony.Voicemail - change speaker interface name to com.canonical.Telephony.Speaker - add channel object path as parameter to SetSpeakerMode() (7aaffc65) 2013-05-08 Omer Akram * port the phone-app autopilot tests to 1.3. (3e67e89e) 2013-05-03 Omer Akram * remove useless line (52b616e5) * more changes for ap-1.3 (e1c2d092) 2013-05-02 Ken VanDine * Set swipeToSwitchTabs to true for tabs, which is deprecated. So this is a work around to keep the autopilot tests running until it can be fixed properly. (e2514e0d) 2013-05-01 Ken VanDine * Set swipeToSwitchTabs to true for tabs, which is deprecated. So this is a work around to keep the autopilot tests running until it can be fixed properly. (2da56f5d) 2013-05-01 Omer Akram * more porting work for autopilot 1.3 (3f5a8bee) 2013-04-26 Gustavo Pichorim Boiko * Fix holding a channel. It should call the handler to set the call on hold. (bde1a625) * Fix holding a channel. It should call the handler to set the call on hold. (4cc3447d) 2013-04-26 Omer Akram * port to autopilot 1.3 (b630ba7f) 2013-04-23 Łukasz 'sil2100' Zemczak * libhud-qt-qml has been renamed to qtdeclarative5-hud1.0. (9168995d) * libhud-qt-qml has been renamed to qtdeclarative5-hud1.0 (d8a6518f) 2013-04-23 Michael Terry * Switch to HUD version 1.0. (be3c1bcf) 2013-04-22 Gustavo Pichorim Boiko * Release version 0.59.9. (dcf131ac) * releasing version 0.59.9-0ubuntu1 (e7ef2e94) * Fix displaying of unread messages in the communication panel by reading the newItem property from the model and not from the item being displayed. (b7901092) * Fix problems found by coverity. Fixes: https://bugs.launchpad.net/bugs/1073224, https://bugs.launchpad.net/bugs/1073226, https://bugs.launchpad.net/bugs/1073229, https://bugs.launchpad.net/bugs/1080956. (935c3e92) * Optimize some pointer conversions by using static_cast when we know it will cast correctly. (1ae1fd96) * Make sure the private variables are initialized. (ec0ad56e) * Remove wrong comment. (c34d9305) * Add missing return value; (34533eb7) * Make sure all dynamic and qobject casts are checked before using. (83e1a9db) * Add virtual destructor to base classes. (41364753) 2013-04-19 Gustavo Pichorim Boiko * Fix displaying of unread messages in the communication panel by reading the newItem property from the model and not from the item being displayed. (369ff9a7) * Release version 0.59.8. (dad2be5e) * releasing version 0.59.8-0ubuntu1 (8e75e2e2) * Fix the argument parsing so that starting the apps in determined views works. Fixes: https://bugs.launchpad.net/bugs/1170490. (907bc87f) 2013-04-18 Gustavo Pichorim Boiko * Fix the argument parsing so that starting the apps in determined views works. (04d37293) 2013-04-18 Didier Roche * Add bootstrap commit message for first daily release. (c799d4c1) * add bootstrap commit for daily release (5ea33f61) 2013-04-17 Gustavo Pichorim Boiko * Release version 0.59.7. (11f3231c) * releasing version 0.59.7 (61d15d14) * Make the usage of messaging-menu-message conditional to its availability. (8dd10fd5) 2013-04-16 Gustavo Pichorim Boiko * And some more empty lines. (567493ab) * Remove some empty lines. (83a54a02) * Make the usage of messaging-menu-message conditional to its availability. (3a0b0abe) 2013-04-15 Gustavo Pichorim Boiko * Split the channel handling functions from the phone-app into a separate process that is just controlled from the UI when necessary. . Fixes: https://bugs.launchpad.net/bugs/1090409, https://bugs.launchpad.net/bugs/1092301, https://bugs.launchpad.net/bugs/1129854. (cf7690ed) * Register the handler dbus interface only after the Telepathy classes are initialized. (16a522b2) * Register the approver before the observer, as this seems to fix the first approver startup. (f343d721) 2013-04-12 Gustavo Pichorim Boiko * Remove unused client file. (ed1a30d7) * First approve the channel and then launch the phone-app. (5dd9dfd3) * Watch for the correct DBus interface when checking if the app is running. (2a9643b1) 2013-04-11 Gustavo Pichorim Boiko * Fix the service files and add the missing ones. (3d85e0ba) 2013-04-10 Michael Terry * Run unit tests during build. (e1fa178f) * Run tests during build (f83b1d54) * Switch to HUD version 1.0 (b39e548e) 2013-04-10 Gustavo Pichorim Boiko * Merge latest changes from trunk. (f5c21bde) * Revert the fixes for the conversation view behavior (bugs #1091682 and #1091253), as it causes many cases to not work. (c74af268) 2013-04-09 Gustavo Pichorim Boiko * releasing version 0.59.6 (5bffe281) * Revert the fixes for the conversation view behavior (bugs #1091682 and #1091253), as it causes many cases to not work. (0706885b) * Isolate the CallLogModel from the Telepathy bits by moving them to the CallManager. (7222008c) * Handle calls using the handler process. (aeceb0c3) 2013-04-08 Gustavo Pichorim Boiko * Remove leftover debug print. (e8c4f126) * Make both phone-app and approver use the handler to send messages and acknowledge incoming messages. (ec38bb13) * Make it possible to send messages and ack messages using the handler. (73fcedd5) 2013-04-05 Gustavo Pichorim Boiko * Move the application itself to a src folder. (e450cce1) * Rename PhoneAppApprover and PhoneAppHandler folders to just approver and handler (0f6f879a) * Add also a class to handle text channels in the handler. (ef224c52) * Use the client registrar from TelepathyHelper and make sure the message received signal is connected in the ChatManager. (7aeb3d5c) 2013-04-04 Gustavo Pichorim Boiko * Use the callEnded() signal from CallManager to append new calls to the model. (6b8b986f) * Make the approver use the observer from TelepathyHelper to watch for text messages. (e597e4df) * Release version 0.59.5. (0115397b) 2013-04-03 Gustavo Pichorim Boiko * Hide the message input field after sending one message. Fixes: https://bugs.launchpad.net/bugs/1091253. (5f5044ef) * releasing version 0.59.5 (7ffa6be6) * Copy the CallManager code to the handler folder (using the CallHandler name) to watch call channels. This is not fully implemented yet. (8e3eb7da) * Do not install the service that was just removed. (3edc92cf) * Turn CallManager into a singleton class and use the channel observer from TelepathyHelper to populate the models with new events. (40349d65) * Removed service file, not needed anymore. (b5de99be) * Rename the handler to be used by the approver. (3ea56346) * Start splitting the phone-app UI and the telepathy handler. (3bd773a3) 2013-04-03 Ying-Chun Liu * Add X-Ubuntu-Touch and X-Ubuntu-StageHint field into desktop file. (44a3f584) 2013-04-03 Gustavo Pichorim Boiko * Fix sending messages to numbers that don't have text channels by the time messages are sent. (747b17cd) 2013-04-03 Ying-Chun Liu (PaulLiu) * debian/changelog: quantal -> UNRELEASED. (8d341363) 2013-04-02 Gustavo Pichorim Boiko * Hide the message input field after sending one message. (fea612dd) 2013-04-02 Ying-Chun Liu * Add X-Ubuntu-Touch and X-Ubuntu-StageHint field into desktop file. (26128c14) * Add X-Ubuntu-Touch and X-Ubuntu-StageHint field into desktop file. (6b80f15d) 2013-04-02 Gustavo Pichorim Boiko * We should show the input field for replying only when clicking on incoming messages. Fixes: https://bugs.launchpad.net/bugs/1091682. (6b67f455) 2013-04-01 Gustavo Pichorim Boiko * We should show the input field for replying only when clicking on incoming messages. (40f8c6d8) 2013-04-01 Michael Terry * Fix some more packaging nits. (b50851d7) 2013-03-28 Gustavo Pichorim Boiko * Release version 0.59.4. (549f56cf) * releasing version 0.59.4 (63261ad9) 2013-03-28 Renato Araujo Oliveira Filho * Fixed crash during the contact search using ContactsSearchCombo. (81711387) * Created unit test for ContactProxyModel.countChanged signal. (bfbb6511) * Renamed 'rowCountChanged' signal to ´countChanged´ (320da71e) * Fixed crash during the contact search using ContactsSearchCombo. (db27989b) 2013-03-27 Gustavo Pichorim Boiko * Optimize some list delegates by using a simpler version of them and change the tab pages to be loaded asynchronously. (e14f0c7d) 2013-03-27 Michael Terry * Some more packaging nits (dd3b15f9) * Modernize the packaging a bit, use dh9, fix a copyright typo. (7d8c7285) * Set architecture to only the ones supported by qtdeclarative (c0d8cf86) 2013-03-27 Gustavo Pichorim Boiko * Merge latest changes from trunk. (34697367) 2013-03-27 Michael Terry * merge from trunk (caa14638) 2013-03-26 Gustavo Pichorim Boiko * Release version 0.59.3. (7631c478) 2013-03-26 Michael Terry * modernize packaging (9ac6ba71) 2013-03-26 Gustavo Pichorim Boiko * releasing version 0.59.3 (f4cf5d7f) * Clear many warnings and binding loops in the QML files. (87e802d9) * Do not consider an empty string as a message ID for comparing, as sent messages have no ID. Fixes: https://bugs.launchpad.net/bugs/1159975. (31aa8eff) * Merge latest changes from trunk. (42b0872f) * Load tabs asynchronously to improve startup time. (6460a88a) * Remove the qrand() and test for a fixed number of entries. (d728910a) * Set the width and height to be the ones from the parent item. (98892721) * Remove one extra space. (62015b5c) * Move the remove button in contact details away from the edge so that it is actually clickable. Fixes: https://bugs.launchpad.net/bugs/1136860. (9711ce5d) * Wait for the application UI to be visible to avoid races in tests. (082f863b) 2013-03-26 Michael Zanetti * make initial tab switching a bit more robust. (e2f4b490) * make tab-helper a bit more solid (27a37c17) 2013-03-25 Gustavo Pichorim Boiko * Add unit tests to cover the bug fixed in the previous commit. (62f0128a) * Do not consider an empty string as a message ID for comparing, as sent messages have no ID. (afb242eb) * Release version 0.59.2 (58bee49e) * releasing version 0.59.2 (d81a3fd5) * Use the SDK headers in DetailViews of the app, and fix the toolbar usage. (db0957de) * Merge latest changes from trunk. (4eb3d664) * Revert a change that is not needed. (804e1e17) * Clear many warnings and binding loops in the QML files. (338c1b92) * Move the remove button from contact details away from the edge so that it is actually clickable. (319efa0a) * There is no need to set the tools property on main page anymore. It is set by the last activated page. (06f3db6f) 2013-03-22 Gustavo Pichorim Boiko * The buttons in the toolbar are now inside a loader. Fix the detection code. (cf4d5590) * Restore the focus workaround as the "compose to" field is not getting focused by default now that it is in the SDK header. (6728bc6c) * Set an ID in the loader (86decba0) * Merge changes from Michael Zanetti to fix the build on raring. (5f68fb74) 2013-03-22 Michael Zanetti * fix build in raring: not hard-depend on version 2.7 for python (ae9f8668) 2013-03-21 Gustavo Pichorim Boiko * Remove obsolete __showHeader property setting. (0bfe79e9) * Move the bottom separator to inside the delegate. (37ecf244) * Adjust the code to use the headers from the UI toolkit. (2943be2a) * Release version 0.59.1. (5a3d9054) * Change the dependency to match the new components package, and do some adjustments to fix the behavior. (d8692c77) 2013-03-20 Gustavo Pichorim Boiko * Wait for the application UI to be visible to avoid races in tests. (4e23341c) 2013-03-21 Gustavo Pichorim Boiko * Make sure unit tests output a xml file with results, and remove the template test, it is not needed anymore. (f651ff7a) 2013-03-20 Gustavo Pichorim Boiko * releasing version 0.59.1 (6410c5ec) * Merge changes from the tests branch. (9ae858bb) * Revert the tools related changes in order to properly merge these changes. It should be reapplied later. (3bbbe103) * The "Send to" field is now focused by default, so there is no need to click it in the autopilot test. (3163daea) * Make sure the TelepathyLogReader gets created sooner to avoid race conditions. (9440b20a) * Merge fixes from Michael Zanetti to make autopilot work. (03e8b76c) 2013-03-20 Michael Zanetti * and another typo (8b944ae7) * fix typo (c8ba8a59) * add missing deps for autopiloting (a2d5dbae) 2013-03-20 Gustavo Pichorim Boiko * Remove the anchors also in the page creation. (4183b137) * Pages should not set anchors: those as set automatically when the page gets activated. (dc1743d9) * The Ubuntu components package has been renamed, change the dependency accordingly. (dcaf7995) * There is no need to set the tools anymore, the Page will take care of that when activated. (a6633912) * Ignore test files. (d769e0bb) * Make sure unit tests output a xml file with results, and remove the template test, not needed anymore. (cd9321c8) * Rename telephony-app to phone-app. (8d139493) 2013-03-19 Gustavo Pichorim Boiko * Set the applicationName to something without dots to workaround autopilot failures. (ded3c394) * Add links and replacement rules for better compatibility. (2a626fef) 2013-03-18 Gustavo Pichorim Boiko * Use ListView.Empty instead of ListView.Standard in the panels. (800c0e4a) 2013-03-14 Gustavo Pichorim Boiko * Set the plugin name correctly in qmldir. (0902bc7f) 2013-03-12 Gustavo Pichorim Boiko * releasing version 0.59 (7c6fba0e) * Update .bzrignore (97fa342e) * Rename autopilot tests and some other missing bits to phone-app. (652d64cb) * launch-telephony-app does not exist anymore. (5d1c5b85) * Rename telephony-app icons to phone-app. (b15fa85d) * Fix all QML files to match the name change. (d5b7ba2b) * Rename also the names in main.cpp. (ace0297f) * Rename the main app files. (a6aae19f) 2013-03-11 Gustavo Pichorim Boiko * Rename the QML plugin from TelephonyApp to Ubuntu.PhoneApp. (b24ca83a) * Rename also the static library (edd9292d) * Rename the approver from Telephony-app to Phone-app (0f6c6e06) * Ignore delivery report messages for now. Later they should be handle separately to identify and report delivery errors. Fixes: https://bugs.launchpad.net/bugs/1152877. (2a9210cd) * Add a fixme comment to implement later error handling. (eb79b9f1) * Do not forward delivery report messages to the UI. (cc4cdbf0) * Release version 0.58.37. (efc59ba8) 2013-03-08 Gustavo Pichorim Boiko * releasing version 0.58.37 (7383ca6f) * Optimize loading data from telepathy-logger by reading it just once and dispatching the events to the correct model. Also add some unit tests to the logger models (after the changes it was easier to get them tested). (e934a06e) * Fix copyright. (c78550ff) * Do not instantiate the TelepathyLogReader inside the models, do the connection outside. This avoids initializing too much stuff in the unit tests. (25d83c82) * Add tests to the MessageLogModel (d9da03ad) 2013-03-07 Gustavo Pichorim Boiko * Cleanup initialization code. (720ec406) 2013-03-06 Gustavo Pichorim Boiko * Add tests to the call log model. (c8edeee8) * Reduce the number of iterations. (6ba464c2) * Remove unused headers. (4d84a6ee) * The matchesSearch implementation in CallLogModel is exactly the same as the new one in ConversationFeedModel, so just use the default one. (068b4a66) * Test the new functions in the ConversationFeedModel. (99e63798) * Check whether running locally or installed and launch the app accordingly. (4d27b76c) 2013-03-05 Gustavo Pichorim Boiko * Check whether running locally or installed and launch the app accordingly. (baf7c835) * When a contact changes, we also need to clear the info for entries that don't match anymore. (a3d12eca) * Make the checkNonStandardNumbers public. (e4696a4b) 2013-03-04 Gustavo Pichorim Boiko * Write some more unit tests for ConversationFeedModel to make it all covered. (f6d39d4e) 2013-03-01 Gustavo Pichorim Boiko * Invalid indexes don't match the search. (0457a485) * Merge the ConversationFeedModel tests in order to update them to the new logger reading implementation. (49cdee05) * Write some more unit tests for ConversationFeedModel to make it all covered. (77f5e9d5) * Implement HUD actions. (08f2b39a) 2013-02-28 Gustavo Pichorim Boiko * Optimize reading entries from telepathy-logger by just reading it once. Previously we had two models requesting entities, dates and events from the logger stored data, now we have only the TelepathyLogReader getting it and notifying via Qt signals that it got new entries. (d081751f) 2013-02-27 Gustavo Pichorim Boiko * Implement HUD actions. (fee03f4a) 2013-02-22 Gustavo Pichorim Boiko * Make sure all autopilot tests pass. (3d4c2eb1) * Comment the Send button enabled test as now it only gets enabled when the oFono connection is available. (88781397) * Merged latest changes from trunk. (d81c195a) * Remove the test for the call button: it now stays disabled when there is no connection to ofono. Also change the Send button detection to use objectName instead of text. (64ad853a) * Update telephony-app to use the toolbar from SDK. (d7ee2de4) * Do not use text= to identify components as this is going to break once i18n is in place. (33939e63) 2013-02-20 Gustavo Pichorim Boiko * Fix a code conflict. (bf473916) * Merge latest changes from trunk. (215b863a) * Do not use loaders for the tabs' contents. (1439781b) * Set the avatar from the matched contact for incoming calls. Fixes: https://bugs.launchpad.net/bugs/1093115. (6e6769ad) 2013-02-19 Gustavo Pichorim Boiko * releasing version 0.58.36 (ce1f4ac2) * Fix the logic for setting the icon. (4a02174c) * Set the avatar from the matched contact for incoming calls. (d9d09648) 2013-02-19 Bill Filler * fix broken live call view. (58626bbb) * releasing version 0.58.35 (b44e1a09) 2013-02-19 Gustavo Pichorim Boiko * Release it. (f04bb8f9) 2013-02-18 Gustavo Pichorim Boiko * releasing version 0.58.34 (719628c1) * Make sure contacts are matched also for SMS messages. Fixes: https://bugs.launchpad.net/bugs/1093115. (2b71aa6b) * Crop the avatars so that they fill the whole UbuntuShape area. Also limit the size of images in memory (some of the original images are quite big now). Fixes: https://bugs.launchpad.net/bugs/1126634. (ca4545f2) * Make sure contacts are matched also for SMS messages. (7e603023) * Comment why the 30% increase on the image source size. (356fa59a) * Make sure the search entries don't lose focus when the proxy model changes (which causes the ListView's focus scopes to be re-evaluated). Fixes: https://bugs.launchpad.net/bugs/1127776. (abbecf8f) * Crop the avatars so that they fill the whole UbuntuShape area. Also limit the size of images in memory (some of the original images are quite big now). (a2af5f3b) * Make sure the search entries don't lose focus when the proxy model changes (which causes the ListView's focus scopes to be re-evaluated). (bdef0916) 2013-02-17 Antti Kaijanmäki * Add HUD dummy Actions. Fixes: https://bugs.launchpad.net/bugs/1125656. (53548fcd) 2013-02-16 Antti Kaijanmäki * Add HUD dummy Actions (1fa4c2a3) 2013-02-15 Renato Araujo Oliveira Filho * releasing version 0.58.33. (1821a719) * releasing version 0.58.33 (f4052774) 2013-02-15 Antti Kaijanmäki * releasing version 0.58.33 (d0da44e3) * Add HUD dummy Actions (feda2a59) 2013-02-15 Renato Araujo Oliveira Filho * Created "--help" argument to display the usage options. Now the application accepts any argument. (c5efef26) * Created "--help" argument to display the usage options. Now the application accepts any argument. (4e0d70d6) 2013-02-15 Gustavo Pichorim Boiko * Release it. (d56d8a69) * Stop the ringtone before starting the telephony app. (90831f2e) 2013-02-14 Gustavo Pichorim Boiko * releasing version 0.58.32 (be9f76c5) * Stop the ringtone before starting the telephony app. (f242b8bf) * Update some assets of the dialer view and remove the noisy background from the application. (9b50cecc) * Update some assets of the dialer view and remove the noisy background from the application. (2a464ad8) 2013-02-13 Gustavo Pichorim Boiko * Release it. (1191838f) * Match the contacts for incoming calls too. Fixes: https://bugs.launchpad.net/bugs/1093115. (0a2d85f2) * releasing version 0.58.31 (38977f22) * Enable/disable telephony-app features based on the connection status. Fixes: https://bugs.launchpad.net/bugs/1089080. (d62ea5bf) * Match the contacts for incoming calls too. (4199e5aa) * Per design request, do not call the number directly when clicking it, just switch to the dialer and type the number in there. (8ff63194) * Detect whether ofono is connected or not and enable/disable the actions accordingly. (132123bc) 2013-02-12 Gustavo Pichorim Boiko * Release it. (f7f18bb5) * Fix the alignment of the communication delegate items. Fixes: https://bugs.launchpad.net/bugs/1123242. (62c15852) * releasing version 0.58.30 (befdcfeb) * Fix the alignment of the communication delegate items. (116f4183) * Adjust the app in preparation for its opensource release. (c5e627db) * Adjust the app in preparation for its opensource release. (9036e1d5) 2013-02-12 Antti Kaijanmäki * Integrate with HUD Toolbar Quit button. (dd6eb58f) 2013-02-12 Gustavo Pichorim Boiko * Update autopilot tests. (f5f057ce) * Use the toolbar from SDK. (a5ad3847) * Load the tabs that are not visible at startup asynchronously. (5d288ddc) 2013-02-12 Antti Kaijanmäki * indentation. (8506d8f6) * Integrate with HUD Toolbar Quit button. (a2a3c46a) 2013-02-11 Gustavo Pichorim Boiko * Set the DTMF entry field as read-only to prevent the on-screen keyboard from appearing. Fixes: https://bugs.launchpad.net/bugs/1118591. (8c4656a2) * Set the DTMF entry field as read-only to prevent the on-screen keyboard from appearing. (cdd9451f) 2013-02-09 Gustavo Pichorim Boiko * Release it. (69839fb6) 2013-02-08 Gustavo Pichorim Boiko * releasing version 0.58.29 (27f32aa9) * Fix saving subtypes and contexts by converting the values to QList when they are set. . (1432612c) 2013-02-07 Gustavo Pichorim Boiko * Fix saving subtypes and contexts by converting the values to QList when they are set. (ee5ad1af) 2013-02-07 Ricardo Salveti de Araujo * Updating build-dependency to use the new ubuntu-platform-api package; debian/control: updating entries to be compatible with Ubuntu standards . (94ada8b4) 2013-02-06 Ricardo Salveti de Araujo * Updating build-dependency to use the new ubuntu-platform-api package; debian/control: updating entries to be compatible with Ubuntu standards (397318af) 2013-02-06 Gustavo Pichorim Boiko * Really stop ringing when the incoming call is gone. Force the player to stop even if the state is already stopped (when playing a playlist in loop, the player might be in stopped state for an instant before restart playing). (a9f9a826) * Really make the ringtone stop when the incoming call stopped ringing. (d029aee2) 2013-02-02 Gustavo Pichorim Boiko * Release version 0.58.27. (aac98320) 2013-02-01 Gustavo Pichorim Boiko * releasing version 0.58.27 (1d37a9ec) * Add basic ringtone support for calls and messages. Fixes: https://bugs.launchpad.net/bugs/1090496. (2ff98376) * Apply the latest visual designs to the contacts editing screen. Fixes: https://bugs.launchpad.net/bugs/1089597, https://bugs.launchpad.net/bugs/1090359, https://bugs.launchpad.net/bugs/1092728. (700e5a10) * Handle the play/stop conditionals using the player's states (81b4d322) * Replace the icon for removing contact details and fix its alignment. (b86eea03) * Merge latest changes from trunk. (8df4ae85) * Merge latest changes from trunk. (de7817d1) * Make it compatible with qt5-final. (a7a619fd) 2013-01-31 Gustavo Pichorim Boiko * Re-enabled the scrollbars. (4e319b35) * Re-enable the scrollbar. (50aa0a90) * releasing version 0.58.26 (b8c580a0) 2013-01-29 Gustavo Pichorim Boiko * Revert the usage of QSoundEffect. (5d3f6fe7) * Reimplement using QSoundEffect. (e071952b) * Remove the startup test calls. (7f715d6e) * Play a sound also when a message is received. (d5338ccc) * Set the media every time it is played to make sure. (686b4ec7) * Play the incoming call sound repeatedly using QMediaPlaylist. (2f6ecb08) * Reimplement the ringtone class using QMediaPlayer. (2378be88) * Make the sounds functions slots. (fad62001) * Really add the ringtone files. (6369bc94) * Add basic ringtone support. (ecd03ef2) * releasing version 0.58.29 (e43d5095) * Increase the cache buffer so that the delegate loading is not visible. (ae2fe9e1) * The send button is only enabled when there is a valid message, so fix autopilot tests to rely on that. (b8863c17) 2013-01-28 Gustavo Pichorim Boiko * Cover more cases in which contact details fields would be covered while still having focus. (b421b745) * Make sure focused contact details are visible. (98f4bb26) * Make sure new items get focused by default. (bb8ba191) * Avoid showing the OSK when not in edit mode. (4756b0bd) * Remove the bounds behavior. This is not set anywhere else. (b3d6344f) * Fix the appearance of the "Add new" items (88f90905) * releasing version 0.58.28 (7e1fc707) * Really fix the installation of the plugin. (aa077caa) * releasing version 0.58.27 (993c486f) * Remove obsolete parent relationship. (9baa6d0c) * Get the existing role names correctly (e48b119b) * Move the tabs inside the left pane. (f06b9711) * Fix the plugin installing. (87fb4c5d) 2013-01-25 Gustavo Pichorim Boiko * Update the contact editing to match latest design. This work is still not complete, the final details will be in separate commits. (4f644e74) * The send button is only enabled when there is a valid message, so fix autopilot tests to rely on that. (2bbb3db6) 2013-01-24 Gustavo Pichorim Boiko * releasing version 0.58.26 (8fd7ff01) * Adapt to work with qt5 final. (a2953f47) 2013-01-22 Gustavo Pichorim Boiko * Merge latest changes from trunk (68bf3d6f) * Clear some unused dependencies. (208acff6) * Clear some unused dependencies. (8291bdb7) 2013-01-17 Gustavo Pichorim Boiko * Release version 0.58.25. (6c700621) 2013-01-17 Michael Zanetti * added missing copyright header in tools/csv2logger.py. (5ce3bc91) * added missing copyright header to csv2logger.py (0a12773b) 2013-01-17 Gustavo Pichorim Boiko * releasing version 0.58.25 (7090309d) 2013-01-16 Gustavo Pichorim Boiko * Disable the "Send" button if the message is empty. Fixes: https://bugs.launchpad.net/bugs/1089509. (fce66fe7) * Disable the "Send" button if the message is empty. (8cb0a283) 2013-01-14 Gustavo Pichorim Boiko * Adapt the code to use the Tabs from SDK. (b728c4fa) 2013-01-11 Gustavo Pichorim Boiko * Add missing license header. (e9acde01) * Use a property alias for the search term. (b7063902) 2013-01-09 Gustavo Pichorim Boiko * Merge latest changes from trunk. (75fb5914) * Load the test lib by hand as we are not using QApplication anymore, and remove one test that is now obsolete. (eff2807f) * Fix autopilot tests. (9af7fb58) * Add the -testability to the usage. (b32ee8f8) * Load the test lib by hand. (ab7e908d) * Remove the test_call test as we can't really evaluate the results, and the input field is not cleared when pressing the call button anymore: it waits until the live call view is displayed before cleaning it. (09bf5173) * Merge latest changes from trunk. (ac81570c) * Reorganize the code so that the Tab header auto hiding works correctly. (2e25d219) * Telephony-app applications don't use widgets, there is no need to use QApplication nor to link to QtWidgets. (a3094d7c) * Remove the fake data models and other unused files. (6c46da1e) * Use the Tabs from SDK now that it fully supports sliding. (ac99172b) * According to the specs, when in single pane mode, the user should not be able to swipe left or right when in a second-level view. To achieve that, we are now using one pagestack for the whole app when in single pane mode. (caba16d7) 2013-01-08 Gustavo Pichorim Boiko * Release version 0.58.24. (5ff99637) * releasing version 0.58.24 (b3e19917) * Telephony-app applications don't use widgets, there is no need to use QApplication nor to link to QtWidgets. (d4d900f7) * Remove the dependency on QtVersit, not needed anymore. (a5111ebd) * Remove unused avatars. (87c644c4) * Remove unused headers. (678c327e) * Remove the fake data models. (01c01433) * Add missing license headers. Fixes: https://bugs.launchpad.net/bugs/1097077. (ee6ba97b) * Some files had LGPL as a licence, but they should have GPL in fact. (79c2012d) * Adapt the license headers to match the good practices listed for GPL. (bf8a4fd0) 2013-01-08 Michael Zanetti * Fixes a crash when trying to start a phone call without having a connection. (7eae9a6c) 2013-01-08 Gustavo Pichorim Boiko * Add missing license headers. (73f4f1e4) 2013-01-07 Gustavo Pichorim Boiko * Replace the UbuntuShape instances that were setting borderSource by a simple BorderImage. The result is not exactly the same, but it is similar enough. (4e20817f) * Replace the UbuntuShape instances that were setting borderSource by a simple BorderImage. The result is not exactly the same, but it is similar enough. (49970f3a) 2013-01-07 Michael Zanetti * Fix crash when trying to start a call without a connection (c8e1dc32) 2013-01-02 Tiago Salem Herrmann * releasing version 0.58.23. (16d6430a) 2012-12-31 Gustavo Pichorim Boiko * Set the height of the loaders to a reasonable value to avoid weird scrolling behaviours. (2ff74ea0) 2012-12-31 Tiago Salem Herrmann * add "Favourites" section to the contact list instead of using another ListView. (87ed74a0) 2012-12-31 Gustavo Pichorim Boiko * Set the height of the loaders to a reasonable value to avoid weird scrolling behaviours. (a2db72ac) 2012-12-30 Gustavo Pichorim Boiko * Clear the keypad entry only after the call is properly created in the ofono side. (85acc7e1) 2012-12-30 Tiago Salem Herrmann * add "Favourites" section to the contact list instead of using another ListView (3635a32c) 2012-12-28 Gustavo Pichorim Boiko * Clear the keypad entry only after the call is available. (2378ba27) 2012-12-21 Gustavo Pichorim Boiko * Fix the lag on swiping when the application is started. Fixes: https://bugs.launchpad.net/bugs/1091290. (b0205e2f) 2012-12-21 Tiago Salem Herrmann * releasing version 0.58.23 (07152bd0) * add missing anchors (e612c970) 2012-12-21 Gustavo Pichorim Boiko * Merge latest changs from trunk. (46aa483a) * Fix the clicking on delegates. (6f8f971c) 2012-12-21 Tiago Salem Herrmann * scroll the contact list to the top when loading the contacts panel. (0135947b) 2012-12-21 Gustavo Pichorim Boiko * Make the loading of delegates asynchronous. (22349ffe) 2012-12-21 Tiago Salem Herrmann * scroll the contact list to the top when loading the contacts panel. (22028d52) 2012-12-21 Gustavo Pichorim Boiko * Revert the approach that invalidates the filtering on every addition: it doesn't perform well. Instead go back to emitting the datachanged signal for the source model, but this time only emits it after the signals are processed (in the event loop). (c115761d) * Release version 0.58.22. (8a90558b) 2012-12-20 Gustavo Pichorim Boiko * releasing version 0.58.22 (9f88ec9c) 2012-12-21 Gustavo Pichorim Boiko * Make sure all actions launching the app are done using the application API. (4522e799) 2012-12-20 Gustavo Pichorim Boiko * Add some debug to see if the app is correctly launched. (12d42ce5) * Fix the filtering of conversations both for showing the latest from each conversation, and for showing messages from a single conversation. Fixes: https://bugs.launchpad.net/bugs/1091797, https://bugs.launchpad.net/bugs/1092670. (2894bba8) * Show the conversation view that has the messages for the given number. (03bd1ab6) * Rever the latest change, this is actually working. (16265526) 2012-12-20 Tiago Salem Herrmann * do not focus the message entry when loading the view. (aa5a3bed) 2012-12-20 Gustavo Pichorim Boiko * Do not wait until telephony-app is registered. This is crashing the approver. (4bf3887f) 2012-12-20 Tiago Salem Herrmann * do not focus the message entry when loading the view (57e1ed84) 2012-12-20 Gustavo Pichorim Boiko * Add missing include. (5cabc9e0) * Use persistent model indexes to save the displayed rows and the grouped rows. (e9583e91) * Process the timeslots even when not grouped. (65bfda44) * Instead of emitting dataChanged on the source model (causes trouble if there is more than one proxy instance), just invalidate the filtering when updates are needed. (d8bd038c) * Use the application activation function available on hybris to launch the telephony-app. (0852b06e) 2012-12-19 Gustavo Pichorim Boiko * Release version 0.58.21. (82045dcd) 2012-12-19 Tiago Salem Herrmann * set focus to header when composing new messages. (afe2ee1e) 2012-12-19 Gustavo Pichorim Boiko * releasing version 0.58.21 (b4c69013) * Merge latest changes from trunk. (10259a79) * Fix handling of favorite contacts. Fixes: https://bugs.launchpad.net/bugs/1092192. (627c334f) 2012-12-19 Tiago Salem Herrmann * revert last changes (f92ffaee) * initial change from SearchEntry by TextField (675d4644) 2012-12-19 Gustavo Pichorim Boiko * Make it possible to mark contacts as favorites. (ded2f511) * Hide the favorites section when there is no favorite contact. (bb5b1009) 2012-12-19 Tiago Salem Herrmann * - set focus to header when composing new messages (c0ea8aff) 2012-12-18 Gustavo Pichorim Boiko * releasing version 0.58.21 (75690bc2) 2012-12-18 Tiago Salem Herrmann * Focus input entry when the TextArea is clicked. (lp:1091225). Fixes: https://bugs.launchpad.net/bugs/1091225. (ce4bc21d) 2012-12-18 Gustavo Pichorim Boiko * Remove some unused files. (eb9e8bb1) * Remove some unused files. (e8c1aa7a) 2012-12-18 Tiago Salem Herrmann * Focus input entry when the TextArea is clicked. (493c6483) 2012-12-18 Gustavo Pichorim Boiko * Release version 0.58.20. (0170a3b3) 2012-12-17 Gustavo Pichorim Boiko * releasing version 0.58.20 (c419832c) 2012-12-18 Gustavo Pichorim Boiko * Change the process of item grouping to work in an incremental way. This way when the items are added only the really required calculations are done. Fixes: https://bugs.launchpad.net/bugs/1091290, https://bugs.launchpad.net/bugs/1091364. (12f90ca2) 2012-12-17 Tiago Salem Herrmann * - hide input entry when not focused - focus entry when a message is clicked. (85427f8b) 2012-12-17 Gustavo Pichorim Boiko * Revert a wrong change. (acbf5ad5) * Avoid some dataChanged signal emissions that were not really needed. (eb6af8ce) * Load contact avatar images asynchronously. (6afb0075) 2012-12-17 Tiago Salem Herrmann * - hide input entry when not focused - focus entry when a message is clicked (b2cfe32b) 2012-12-17 Gustavo Pichorim Boiko * Only emit the dataChanged signal if the previous displayed row is valid. (1fe1d03f) * Load contact avatar images asynchronously. (dd5b191e) * Change the process of item grouping to work in an incremental way. This way when the items are added only the really required calculations are done. (abb3441a) * Fix autopilot tests. (394fd0ba) * Fix the tests in communication panel too. (9573a3ca) * Fix contacts tab tests. (8c5b78f6) * Remove the GVariant unwrapping from the callback as this has been fixed in libmessaging-menu. (d7908a78) * Remove the GVariant unwrapping from the callback as this has been fixed in libmessaging-menu. (560d00aa) 2012-12-15 Gustavo Pichorim Boiko * Release version 0.58.19. (902b84f4) 2012-12-15 Tiago Salem Herrmann * - Add dbus interface to the approver and expose the SendMessage(number, text) method. - Avoid crashes in telephony-app when calling SendMessage() from dbus and the app is not running yet. Fixes: https://bugs.launchpad.net/bugs/1090087. (6a808931) 2012-12-15 Gustavo Pichorim Boiko * Remove messaging-menu messages using the remove_by_id functions to simplify the code. (d34edf7a) 2012-12-14 Gustavo Pichorim Boiko * releasing version 0.58.19 (9ad864a2) * Fix sending messages via telephony-app-approver when the app is not running. (b0b309ff) * Unfocus the currently focused item when the on-screen keyboard disappears. Fixes: https://bugs.launchpad.net/bugs/1086828. (d2e24498) * Use text area to allow long messages to be broken in multiple lines while editting. (94cc2e21) * Merge latest changes from trunk (d1fac78f) * Shorten the title of notify-osd messages so that they fit in one line. Fixes: https://bugs.launchpad.net/bugs/1090406. (12783e8e) * Remove the extra orange line at the top of the views. Fixes: https://bugs.launchpad.net/bugs/1090351. (b009debd) 2012-12-14 Tiago Salem Herrmann * another credit (2a72c165) * fix credits (f492f328) 2012-12-14 Gustavo Pichorim Boiko * Shorten the title of notify-osd messages so that they fit in one line. (008871da) 2012-12-14 Tiago Salem Herrmann * adapt csv2logger.py to support the latest changes in the conversation data spreadsheet. (665f5741) 2012-12-14 Gustavo Pichorim Boiko * Remove the extra orange line at the top of the views. (9202fb4e) 2012-12-14 Tiago Salem Herrmann * display the correct icons for telephony related messaging menu items (lp:108957) (7daf19c7) 2012-12-14 Gustavo Pichorim Boiko * Merge latest changes from trunk. (b0f58130) 2012-12-14 Tiago Salem Herrmann * save pending requests until telepathy is up (81677fb4) * merge (d3d3cc94) 2012-12-14 Gustavo Pichorim Boiko * Decide whether to handle or not a request based on the preferred handler. It is more reliable than the previous implementation. (62458ead) * Fix the avatar displaying in messaging menu, snap decision and notify-osd items. Also fix the timestamp for the messaging-menu entries. Fixes: https://bugs.launchpad.net/bugs/1090384. (3b722ec1) * Remove messaging-menu messages using the remove_by_id functions to simplify the code. (3e324812) * Use text area to allow long messages to be broken in multiple lines while editting. (afa48051) 2012-12-14 Tiago Salem Herrmann * merge approver fix branch (09183f8b) 2012-12-14 Gustavo Pichorim Boiko * Set the correct avatar placeholder in the notify-osd and snap decision items too. (3d6d7dc7) 2012-12-14 Tiago Salem Herrmann * add new dbus interface and SendMessage method (1cd774eb) 2012-12-14 Gustavo Pichorim Boiko * If there is no dispatch operation, just send the message. It should work. (1ba7bf52) * Fix the timestamps in the messaging menu entries and add a default avatar to be displayed when the contact doesn't have one. (9dfd4960) 2012-12-14 Tiago Salem Herrmann * merge (bf203065) 2012-12-14 Gustavo Pichorim Boiko * Fix sending messages via telephony-app-approver when the app is not running. (f6e3795c) * Move the conversation view to the top when a message is sent. Fixes: https://bugs.launchpad.net/bugs/1087779. (1889fe76) * Move the conversation view to the top when a message is sent. (70ff18bc) * Scroll the message we are replying to all the way down to the input field when possible. (9ad776ce) 2012-12-14 Bill Filler * latest release. (bc4e8450) 2012-12-13 Bill Filler * releasing version 0.58.18 (caebd3d1) * Add the correct icons for the messaging menu entries. Fixes: https://bugs.launchpad.net/bugs/1089575. (5bd1dcbc) * fixed install (54796234) 2012-12-13 Gustavo Pichorim Boiko * Add the correct icons for the messaging menu entries. (383095ea) * Unfocus the currently focused item when the on-screen keyboard disappears. (47b4b1bd) 2012-12-13 Tiago Salem Herrmann * add back the startChat method, so we are able to display the communication screen of a given contact through a dbus call. (811e1723) 2012-12-13 Gustavo Pichorim Boiko * Scroll the message we are replying to all the way down to the input field when possible. (922d217a) 2012-12-13 Tiago Salem Herrmann * set the contact before opening the communication view (bd88e076) 2012-12-13 Gustavo Pichorim Boiko * Release version 0.58.17. (46dc9fa3) 2012-12-12 Gustavo Pichorim Boiko * releasing version 0.58.17 (a97170d9) * Fix the compose new message view: do not show the messages nor the header until the target contact is selected. (0762eedc) * Adjust all views to display correctly when the on-screen keyboard is visible. Fixes: https://bugs.launchpad.net/bugs/1086437. (71b70dd8) * Merge latest keyboard fixes (8356bf71) 2012-12-12 Tiago Salem Herrmann * fix signature (f0e949e0) * add back the startChat method (0db51675) * use html encode for the message itself (a51b750e) * adapt csv2logger.py to support the latest changes on the spreadsheet. (e200f855) 2012-12-12 Gustavo Pichorim Boiko * Adjust all views to display correctly when the on-screen keyboard is visible. (06ee52af) * Fix the compose new message view: do not show the messages nor the header until the target contact is selected. (35c2cb50) * Release version 0.58.16. (4a261f38) * releasing version 0.58.16 (8bafb45e) 2012-12-12 Tiago Salem Herrmann * group entries in communication view by phoneNumber. Fixes: https://bugs.launchpad.net/bugs/1087381. (b20e238a) * invert check and use [] operator instead of .value() (7be6cb68) 2012-12-11 Tiago Salem Herrmann * workaround to prevent QDBusInterface to launch the app during approver startup. (d4433db1) * workaround to prevent QDBusInterface to launch the app during approver startup (1ffa0106) * group entries in communication view by phoneNumber (3d5478e3) 2012-12-11 Gustavo Pichorim Boiko * More design tweaks. This time most of the changes are in the contacts panel, but there are a few design adjustments to the other views. (43c250b3) 2012-12-11 Michael Zanetti * fixes autopilot tests with latest design changes. (675edfeb) 2012-12-11 Gustavo Pichorim Boiko * Remove the desktop_file_hint argument from command line args so that the application is correctly started when launched by hybris. Fixes: https://bugs.launchpad.net/bugs/1088947. (a2575665) * Use scrollbars from SDK and mark them as non-interactive. Fixes: https://bugs.launchpad.net/bugs/1078921. (900f4fef) * Merge latest changes from trunk. (e61592b8) * Set the scrollbars as non-interactive. (ef498ac0) * Remove the desktop_file_hint argument from command line args so that the application is correctly started when launched by hybris. (ad95e32c) 2012-12-11 Michael Zanetti * use pointing_device instead of mouse to make it work on the phone too this requires now the use of autopilot-phablet instead of python_autopilot (0124b077) * fix tests with latest ui design (45342494) 2012-12-11 Gustavo Pichorim Boiko * Move the separator inside the KeypadEntry and center the text. (0ef7364c) * Fix the font size of the message input field, and show a placeholder text when it is empty. (db19ddd8) * Hide the contact details button when talking to an unknown contact. (f9e5645e) 2012-12-11 Michael Zanetti * merge latest trunk (608d35e8) 2012-12-11 Tiago Salem Herrmann * releasing version 0.58.15. (c0858cfa) 2012-12-10 Gustavo Pichorim Boiko * Add actions to the messaging menu actions. (02d1578a) 2012-12-10 Tiago Salem Herrmann * force tp-ofono to be launched even if no network connection is available. Fixes: https://bugs.launchpad.net/bugs/1086028. (2258ca1e) * releasing version 0.58.15 (f2c08793) * the text is a string inside another variant (15b83b1e) * force tp-ofono to be launched even if no network connection is available (a3531fa9) 2012-12-07 Gustavo Pichorim Boiko * Set the correct font family. (67aa0510) * Remove the placeholder texts (f40eb3e6) * Tweaks to the contacts views and replace the search icon (93758576) * Add a pressed state for the contact actions (ce924884) * Remove some separators. (b40b3a06) * Increase the height of the search fields to units.gu(4) (a556e909) * Remove some old backgrounds. (f92adf8d) * When a message is clicked, show it in the telephony-app. (dc863b6d) * Add the required actions to the messaging menu messages. (3eaa3d28) * Release version 0.58.14. (68607e74) 2012-12-06 Gustavo Pichorim Boiko * releasing version 0.58.14 (bf6875d5) 2012-12-06 Tiago Salem Herrmann * Send events to telepathy when using DTMF. (787856cf) 2012-12-06 Gustavo Pichorim Boiko * Tweak the design of the calls and conversation tabs. (3ff375c0) * Merge latest changes from trunk. (35e4624b) * Start adding the actions for the entries in the messaging-menu. (869f4d47) * Remove some leftover debug messages. (9a57d16e) * Use a shared code for the TelepathyHelper class between the approver and the app itself, just making sure that the Handler in the approver handles only channels requested inside it. (62c19146) * Design tweaks in the conversation views. (29da8022) 2012-12-06 Tiago Salem Herrmann * fix dtmf, as it wasn't sending any events (c460bb56) 2012-12-06 Gustavo Pichorim Boiko * Remove the usage of the obsolete libindicate library and use a messaging menu entry to display the voicemail instead. (9bf6ada1) * Use separate messaging menu app instances to handle calls and messages, because they use a different desktop file (different icons, etc). (51241bbf) 2012-12-06 Tiago Salem Herrmann * add favorite icon to contact details screen (afdae2ad) 2012-12-06 Gustavo Pichorim Boiko * Dimm the opacity of the voicemail icon a bit. (227e0eaf) * Apply some design changes to the dialer view, and add the favorite star. (67559614) 2012-12-06 Tiago Salem Herrmann * add voicemail icon to button number 1 (9dd5e1a3) 2012-12-06 Gustavo Pichorim Boiko * Use a shared code for the TelepathyHelper class between the approver and the app itself, just making sure that the Handler in the approver handles only channels requested inside it. (d3a76681) * Tweak some of the design for the dialer and the live call views. (6423675a) 2012-12-06 Tiago Salem Herrmann * add pressed state to buttons in the live call view. (75af38f4) 2012-12-06 Gustavo Pichorim Boiko * Add an entry in messaging menu for voicemail. (fbf9d1b2) 2012-12-06 Tiago Salem Herrmann * add pressed state to buttons in the live call view (f009ecc5) 2012-12-06 Gustavo Pichorim Boiko * merge the changes from the multi app messaging menu branch. (a2f6d721) * Remove the obsolete libindicate code from the telephony-app. (d6167569) * Release version 0.58.13. (480bbfeb) * releasing version 0.58.13 (82acb012) 2012-12-06 Tiago Salem Herrmann * General fixes for the dialer and live call screens. (054cd26a) 2012-12-05 Gustavo Pichorim Boiko * Make sure the view shows the edit input field for the cases where there is no message shown. (0005ef25) * Make sure the input field is not covered by the OSK even if it is not the one holding the focus. (401155c8) 2012-12-05 Tiago Salem Herrmann * remove readOnly property, as this bug is fixed in this branch using another approach (c5c5a235) 2012-12-05 Thomas Moenicke * textinput readonly so it does not trigger the keyboard . (1c44a7a2) 2012-12-05 Tiago Salem Herrmann * - add back button to live call screen - add hangup button to live call screen - remove divider from KeypadEntry (c551a831) 2012-12-05 Gustavo Pichorim Boiko * Remove the changelog as agreed with Tiago, we are going to add the changelog when releasing. (e2f8479d) * Remove the changelog as agreed with Tiago, we are going to add the changelog when releasing. (3c463d71) * Update changelog. (6fcaa27f) * Make sure the input field is not covered by the OSK even if it is not the one holding the focus. (dbabe237) * Update changelog. (2da6b4de) 2012-12-05 Thomas Moenicke * make TextInput readonly, so it does not trigger the onscreen keyboard (d87be16d) 2012-12-05 Gustavo Pichorim Boiko * Make sure the view shows the edit input field for the cases where there is no message shown. (a43228a3) 2012-12-05 Tiago Salem Herrmann * show dots if the amount of numbers exceeds the available space (7dc6f080) * add + when long press 0 (b646295e) * add focus back (6eee4e14) * allow changing the cursor position and add/remove numbers at any position (7fd4cf05) * - disable osk for the dialer input field - implement copy'n'paste with long press - add a "Enter a number" label when the input field is empty - make the cursor always visible - delete input field contents when long press the backspace button (b30a438b) 2012-12-05 Gustavo Pichorim Boiko * Release version 0.58.12. (9e5e3d92) * Use a separate desktop file (and thus a separate MessagingMenuApp) for calls and sms to be able to use a different icon. (28e61696) * Make sure the messate text input field is not covered by the on-screen-keyboard. (41d52244) * Make sure the telepathy-ofono account is configured to connect automatically at startup. (430d39c5) * Release it. (1ecc6d94) * merge the changes from the tp_ofono_online_by_default branch. (8a79d9db) * Merge the changes from the OSK branch (f82b880b) 2012-12-04 Gustavo Pichorim Boiko * Leave it unreleased. (7debe60a) * Merge latest changes from trunk. (660c79fd) * Apply the visual design to the chrome bar. (b09d36cf) 2012-12-04 Tiago Salem Herrmann * Fix crashes on contact details screen. (ce278e03) 2012-12-04 Gustavo Pichorim Boiko * Make the ofono account connect automatically once setup. (1ea03f11) 2012-12-04 Tiago Salem Herrmann * Update contacts screen to match the design spec. (be45fb95) 2012-12-04 Gustavo Pichorim Boiko * Update the design of the views in the call tab. (5f6fe176) * Merge latest changes from trunk. (4edad401) * Fix some errors in the changelog. (0f6b3702) * Update changelog. (a1406fc3) * Make sure the messate text input field is not covered by the on-screen-keyboard. (706a886b) * Do not show the combo's contents when not focused. (d4360957) * Fine tune the design of the live call dialog. (0b6335fe) * Update the icons. (458f7444) * Show the chrome bar on top of the page contents, not anchored to them. (73079ca4) 2012-12-04 Tiago Salem Herrmann * - fix crashes on contacts panel - use QContactId instead of QContactGuid (73c095b2) * fix sizes and spacing (f2d3c510) * revert header changes (b400168b) 2012-12-04 Gustavo Pichorim Boiko * Move the anchoring and the z setting to inside the chrome bar. Update the assets to use the grid units (2745aa47) * Fine tuned the design of the dialer view and added a grid to the telephony-app to make it easier to compare the positioning. (cd1a280a) * Pass the button itself in the clicked signal so that popovers can show the pointing indication. (1fea6d38) * Update changelog. (4e33fd11) * Merge latest changes from trunk (8b2cbb61) * Do not link the chrome bar's back button showing to the pagestack. It might be used for some other cases. (729c1002) 2012-12-04 Tiago Salem Herrmann * add csv2logger.py script to convert csv files into xml logger files. (6422aac7) 2012-12-03 Tiago Salem Herrmann * update contacts view according to the spec (ecfebf28) * add csv2logger.py script to convert csv files into xml logger files (84b6f14f) 2012-12-03 Gustavo Pichorim Boiko * Fix the spacing in the headers. (d7344341) 2012-12-03 Tiago Salem Herrmann * - increment random token - fix call directory (932ee3bc) 2012-12-03 Gustavo Pichorim Boiko * Remove the divider from the chrome bar's top. (885a0ad7) * Update the ChromeBar widget to match the visuals (using icons for actions) and add icons to some actions used in telephony-app. (90bc3dc9) 2012-12-03 Tiago Salem Herrmann * add csv2logger.py script to convert csv files into xml logger files. (23e44991) 2012-11-30 Gustavo Pichorim Boiko * Fix the communication panel tests. (d1c259f8) * Fix current tests and add a test to check that the dial button is disabled when there is no text in the input field. (5ae98e30) * Merge latest changes from trunk (45ad817b) 2012-11-30 Michael Zanetti * initial try to make tests work again (9b444264) 2012-11-30 Gustavo Pichorim Boiko * Merge latest changes from trunk (0a5dafab) * Remove the scrollbars from the app and use the copy from the SDK. (355e7da5) * When a call is ended, we should show the entry in the conversation view. (67af6766) 2012-11-30 Kaleo * Use Label instead of TextCustom that was renamed/deprecated in the SDK. (20b2b71a) 2012-11-30 Bill Filler * move account initialization to different script that can be called from session startup rather than app launch to improve startup speed. (671e1060) 2012-11-30 Gustavo Pichorim Boiko * Remove obsolete call log view. (1f08cd7d) * When a call is ended, we need to show the conversation thread for that call per design spec. (4ca58e66) 2012-11-29 Bill Filler * added ofono-setup to debian/telephony-app.install (ace9f2e2) * added /usr/bin/ofono-setup to setup initial accounts from session startup rather than app startup; removed account setup from /usr/bin/launch-telephony-app (1e36cc40) 2012-11-29 Kaleo * Use Label instead of TextCustom that was renamed/deprecated in the SDK. (5ba8a170) 2012-11-29 Gustavo Pichorim Boiko * Make sure the telephony-app is compliant to the design specs. The only view missing is the Contacts one now. (638508ea) * Add initial support for messaging menu interaction. (520a6058) * When switching to a view that does not support chrome bar, make sure it gets hidden. (508f1fdf) * If the mouse movement was below the delta, restore the chrome bar position. (308cef5f) 2012-11-29 Tiago Salem Herrmann * - update visuals for pressed buttons (eff3bf03) 2012-11-29 Gustavo Pichorim Boiko * Avoid accidentally handling clicks in the chrome bar. (b88afb0d) * Reimplement the chrome bar showing/hiding in a self-contained way to make it easier to convert it into a component later. (c62bbffc) * Add a vertical separator between the contact details button and the rest of the header in the conversation details. (600df1d6) 2012-11-29 Michael Zanetti * added missing build dep to python. (f84f4e78) 2012-11-29 Tiago Salem Herrmann * - remove debug on CromeBar - Use bottomMargin to hide the bar (b2a3245f) 2012-11-29 Gustavo Pichorim Boiko * Call the number back when clicking the call item in the conversation view. (4a0cc91c) 2012-11-29 Michael Zanetti * adding missing build dep to python (9a904ddf) 2012-11-29 Gustavo Pichorim Boiko * Display the call duration in a user friendly way (081569bf) 2012-11-29 Michael Zanetti * rename autopilot package from telephony-app-testing to telephony-app-autopilot install tests and emulators as python site-packages instead of shared data for telephony-app. (06607895) 2012-11-29 Tiago Salem Herrmann * use Item instead of Rectangle (79712bc4) 2012-11-29 Gustavo Pichorim Boiko * Add a packaging build dependency on libmessaging-menu-dev (035eb478) * Just some small adjustments to the date formatting functions to be more generic. (476078d2) 2012-11-29 Michael Zanetti * make the install file more flexible (1ce2b2eb) * don't hardcode the python path (2a3f7609) * rename autopilot package from telephony-app-testing to telephony-app-autopilot install tests and emulators as python site-packages instead of shared data for telephony-app (8c354e80) 2012-11-28 Gustavo Pichorim Boiko * Use a friendly date formatting in the conversation details view. (32388a13) * Group messages in a 15 minutes interval. (0376f075) 2012-11-28 Tiago Salem Herrmann * track swipe gestures to open and close the chromebar (a5560697) * fix wrong logic (94599cd6) * disable dial button if no number is entered (284c749b) 2012-11-28 Gustavo Pichorim Boiko * Comment the phone type placeholder text. It is going to be re-enabled when we are able to provide that information. (c0fec5fe) 2012-11-28 Tiago Salem Herrmann * fix live call title (9f9a1d1c) 2012-11-28 Gustavo Pichorim Boiko * Remove the sections from the communications panel per design request. (df9ba4a3) * Add a white overlay to unread messages per design request. (6c404563) * Update the bubbles to use a border image instead of the UbuntuShape. (9a227e12) 2012-11-28 Tiago Salem Herrmann * fix buttons size (f9e7a10f) 2012-11-28 Gustavo Pichorim Boiko * Add missing copyright headers to the source files. (ffab1470) 2012-11-28 Tiago Salem Herrmann * - prevent text from chrome bar button to be truncated (9175805a) * - add tab indicator at the bottom - hide PageStack header - add a custom Header widget - add missing horizontal lines (b1eb36de) 2012-11-28 Gustavo Pichorim Boiko * Update changelog. (6f4326f8) * Merge latest changes from trunk. (885216cd) * Do not leak GObject instances. (e5580ece) * Fix the displaying of icons and add support for showing missed calls in the messaging menu. (30c66784) 2012-11-28 Tiago Salem Herrmann * fix header anchors (50657b5b) 2012-11-28 Bill Filler * new release with swiping support. (6e703b70) 2012-11-27 Bill Filler * Change label of view to Conversations; fix spacing of conversation search field so not obscured by header (532250d8) 2012-11-28 Tiago Salem Herrmann * use a custom Tabs widget that supports swipe while the final implementation isn't finished. (5d7c8072) 2012-11-27 Gustavo Pichorim Boiko * Fix marking messages as read. This got broken when the communication delegate was implemented. (df0dee4a) * Fix marking messages as read. This got broken when the communication delegate was implemented. (ba9023dd) * Start adding messaging menu support to the approver. Right now it just adds messages, and not all the fields are correct. (3bfa3eb0) 2012-11-27 Tiago Salem Herrmann * use a custom Tabs widget that supports swipe while the final implementation isn't finished. (8ceb9159) 2012-11-27 Gustavo Pichorim Boiko * Create a static library to share code between the approver and the QML plugin. (d6e33f78) * Update changelog. (e38c7aed) * Link the approver to the static library (b11e4362) * Merge latest changes from trunk. (ebc1a205) * Add pending tasks to the TODO (6f36e4ea) 2012-11-26 Gustavo Pichorim Boiko * Give the dialer input field focus before sending the keys in the autopilot test. (b60f3ca0) * Move the contact model related classes to a static library to allow using it from the approver. (95ab35bb) 2012-11-26 Tiago Salem Herrmann * Use the right instance of callStack when making calls. (9fb67cbc) 2012-11-26 Michael Zanetti * added/fixed some comments for test cases. (da1c2b82) * lower/upper case fixes (ec3743df) * whitespace-- (f6388d8a) * added/fixed some comments for test cases (6847f43b) 2012-11-26 Gustavo Pichorim Boiko * Give the dialer input field focus before sending the keys in the autopilot test. (ebae4557) 2012-11-26 Tiago Salem Herrmann * Use the right instance of callStack when making calls. (e4707cc0) 2012-11-23 Gustavo Pichorim Boiko * Release it. (7fdfa809) * Fix the tabs usage and adapt to the new API. (b9c949a1) * Release it. (8164ecc7) 2012-11-23 Michael Zanetti * Enable easy way to generate coverage results for the developer (aefd7319) 2012-11-23 Gustavo Pichorim Boiko * Update changelog and remove leftover import statement. (cc2696f9) * There is no need to hide the stacks in single-pane mode. (8f1df749) * Make sure the stacks are created as children of the tabs' pages when in single panel mode. (5fb7cfa2) * Replace the buttonsExpanded Tabs property by the style equivalent. (f5b725d7) 2012-11-23 Michael Zanetti * Use -coverage instead of -ftest-coverage -fprofile-arcs (da6349de) * enable easy way to generate coverage results for the developer Coverage reports can be generated by calling "make coverage" after the project has been configured with -DCMAKE_BUILD_TYPE=coverage (27fc1c2e) 2012-11-22 Tiago Salem Herrmann * release telephony-app 0.58.8. (f992f143) * releasing version 0.58.8 (36cd4fa3) 2012-11-22 Gustavo Pichorim Boiko * Apply the new visual designs to most components. (a92f0e29) 2012-11-21 Tiago Salem Herrmann * merge trunk and resolve conflicts (924be153) 2012-11-21 Gustavo Pichorim Boiko * Update changelog (21f24b93) * Update autopilot tests. (9c4f985e) * Use the UbuntuShape in the contact details avatar. (a0863ab7) * Separate items by days in the communication views. (4eaa0630) * Add a simple version of the ChromeBar widget. This is not the final widget, it just provides us the functionality required to implement the features in the app. (295ec691) 2012-11-21 Tiago Salem Herrmann * update assets for the dialer and livecall screens (0ec008e0) * update the live call view to the new design spec (f9767456) 2012-11-21 Gustavo Pichorim Boiko * Do not show the OnCallPanel when in single-panel mode. (3f7bc106) * Fix the margins according to the visual design. (b9f30c58) * Apply the UbuntuShape to the communication views. (467d19d6) 2012-11-21 Michael Zanetti * make autopilot tests more robust. (5973ad8f) 2012-11-21 Gustavo Pichorim Boiko * Scroll the contact header together with the messages list. (d5070954) 2012-11-20 Gustavo Pichorim Boiko * Start updating the header of the conversation view to match the updated designs. (34e3b005) * Update the communication details items to the latest visual design. The rounded bubbles are still missing implementation in the SDK. (5ddbd014) * Update the visual for the communication view items. (4747a23f) 2012-11-20 Tiago Salem Herrmann * - change dialer panel to match the design spec - change noise_tile.png to match the new background (33504a0e) 2012-11-20 Michael Zanetti * (0abc92ff) * (8f9a91e7) * try to fix the keypad test timing issues (a3ae812b) 2012-11-20 Gustavo Pichorim Boiko * Remove obsolete fontUtils.js: it is already in Ubuntu.Components. (c34c5c3a) * Fix displaying unread messages and marking them as read. (41f5e502) 2012-11-19 Gustavo Pichorim Boiko * Use the boolean OR instead of the bitwise OR. (d255dc7d) * Update changelog. (3aa8e069) * Fix acknowledging pending messages when they are read. (5ec65488) 2012-11-19 Michael Zanetti * don't install tests with regular package. (4395e0ca) * install files /usr/share manually to avoid packaging the tests with the app package (3f71d4eb) 2012-11-19 Gustavo Pichorim Boiko * Merge latest changes from trunk (f6969dcd) 2012-11-15 Gustavo Pichorim Boiko * Add ofono to the list of supported account types in the approver. (5747d71a) 2012-11-15 Michael Zanetti * moved autopilot tests into "tests" subdir and package them up. (4bb281a7) 2012-11-15 Gustavo Pichorim Boiko * Release it. (27dc81a0) * Mark messages as unread and read according to their status. There is no code yet to acknowledge the messages though. (31c38f29) * Release it. (b304dded) * Add ofono to the list of protocols supported by the approver. (15e0805b) * Mark messages arriving via telepathy as new. (c3192a26) * Remove the obsolete resetView() signal. (6878b402) * Remove the obsolete property isLatest. If we ever need to do something like that again it is not going to be exclusivelly for messages and a new code will have to be written. (7be9dd9b) * Remove extra ; (f909e8e8) * Add the option to show the latest message from each group. (dd69ee85) 2012-11-15 Michael Zanetti * move autopilot tests into tests directory and package them up (6659245c) 2012-11-15 Gustavo Pichorim Boiko * Make sure the displayed row is always the most recent event so that sorting works properly. (138b3a04) 2012-11-14 Gustavo Pichorim Boiko * Add the option to show the latest message from each group. (dc7a6be9) 2012-11-13 Tiago Salem Herrmann * use units.gu() to set the size of delegates for the new CommunicationView. (ab1443c2) * fix delegate size (ec9b9e1e) * Group the SMS messages and the call log into the new Communication view. (8423e81b) 2012-11-13 Gustavo Pichorim Boiko * Remove obsolete test file. (0b17862d) * Remove obsolete test file. (67b11b6a) * Add a comment explaining why QTimer::singleShot was used to populate the logger models. (08b617a1) * When removing a model from the aggregator, check if it actually has items to be removed before calling {begin,end}RemoveRows (4e5a6958) * Remove the obsolete method AbstractLoggerModel::appendEntry (84f0bfa3) * Move the fillContactInfo/clearContactInfo methods to the ConversationFeedModel (57d49de9) 2012-11-13 Tiago Salem Herrmann * remove obsolete code (00c46fee) 2012-11-13 Gustavo Pichorim Boiko * Remove some references to the call log in the contact details. (77842c70) * The call and message items also need to be marked as selected (when searching) (2db4b3e8) * Mark the communication panel items as selected when the view on the right is using the same filtering. (d399a372) * When in dual panel, reset the right view before showing a conversation (fa24a6eb) 2012-11-12 Tiago Salem Herrmann * fix footer size (1f1720fe) 2012-11-12 Gustavo Pichorim Boiko * Remove some obsolete code. (7bd518f1) * Merge latest changes from trunk (62698e11) * Do not remove items from empty models. (a6d28779) * Add tests to ConversationAggregatorModel (c1f7176b) 2012-11-12 Tiago Salem Herrmann * - fix send sms button - show footer only after a message is clicked (64e70ef6) * fix typo (26568084) 2012-11-12 Gustavo Pichorim Boiko * Update the model offsets when a model is removed from the aggregator. (0a36366e) * Add tests to some roles that were missing. (bff3fe85) * Emit the dataChanged signal in the feed model when the item properties change. (a8713ffd) * Add unit tests to ConversationFeedItem (785a9acb) * Add unit tests to ConversationFeedModel (4e30fc81) * Update bzrignore. (68a9310c) * For any valid index, return 0 as the rowCount (29d6e6cb) * Make the item management methods public so that they can be properly unit tested. (f433da8e) 2012-11-09 Gustavo Pichorim Boiko * Do not explicitly add the --fullscreen switch to the wrapper script as the script is also used by the autopilot tests. (98d84a62) * Update autopilot tests to work with the new communication panel. (dd4f8b33) * Do not explicitly add the --fullscreen switch to the wrapper script as the script is also used by the autopilot tests. (1bd5010b) 2012-11-09 Tiago Salem Herrmann * fix communication view header (96bec053) 2012-11-09 Gustavo Pichorim Boiko * Merge latest changes from trunk (7dd69d73) 2012-11-09 Michael Zanetti * Updates the autopilot tests to work with the latest UI changes. (e387602c) 2012-11-09 Gustavo Pichorim Boiko * Make sure items from the models are created in the correct thread. (3c24475b) * Merge latest changes from trunk. (7cbe92b3) * Update changelog. (21caa6a5) * The threads bug of telepathy-logger-qt models was already figured out, so this workaround is obsolete (1fd14161) * Clear some warnings. (43751852) * Fix the broken contacts panel tests and add a few more. (9ec6c299) * Merge latest changes from mainstream. (d470bbe8) 2012-11-09 Michael Zanetti * update the message panel tests (aff7d555) 2012-11-08 Bill Filler * release latest. (0dfc1c69) * modified launch-telephony-app to launch fullscreen (749d61f1) 2012-11-08 Tiago Salem Herrmann * use mRootContext as parent to avoid QThread warnings during startup. (07aad838) * - fix Contacts button in the dialer view to use units.gu() - increase width of "send" button to avoid text cutoff. (1ac38797) * use mRootContext as parent to avoid warnings during startup (d3e3b9ed) * - fix Contacts button in the dialer view to use units.gu() - increase width of "send" button to avoid text cutoff (a5737175) 2012-11-08 Gustavo Pichorim Boiko * The objectName expects a string. (efd99441) * Make it possible to start the app using the memory contacts backend to test the contact features. (b200a421) * Install the wrapper script as a program (3bc36d4f) 2012-11-08 Michael Zanetti * updated call panel autopilot tests (626982a6) 2012-11-08 Tiago Salem Herrmann * use the right height for gu == 18. (063c03e3) * update changelog (a89972f0) * merge trunk (d7f28bc5) 2012-11-08 Kaleo * Added --fullscreen option. (a048c42a) 2012-11-07 Kaleo * Set default width to be 40 grid units. (d6ae71b9) * Typo in variable name. (96eb7720) * Added --fullscreen option. (92c47ad6) * Set default width to be 40 grid units. (640e7ea3) 2012-11-07 Michael Zanetti * added code coverage measurement to cmake. (34ddbf00) * changelog (60310458) 2012-11-07 Tiago Salem Herrmann * update changelog (9c20645a) * Add a debug package for telephony-app (778af29b) 2012-11-07 Gustavo Pichorim Boiko * Add a debug package for telephony-app. (8c1a2251) 2012-11-07 Tiago Salem Herrmann * use the right width and height for gu == 18 (7d73e9b9) 2012-11-07 Michael Zanetti * added missing ParseArguments.cmake (a947e8ec) * add missing Find*.cmake modules (88d65580) * bring the copyright header back (ffa288a6) * added unit test coverage report generation (dde00779) 2012-11-06 Gustavo Pichorim Boiko * Add a debug package for telephony-app (26441664) 2012-11-06 Bill Filler * release the launch-telephony-app change. (a0ccdb6f) * new release with launch-app-telephony change (cc12c8c7) 2012-11-05 Gustavo Pichorim Boiko * Do not start a dbus session when launching the app using the wrapper script. (2e949e98) 2012-11-05 Bill Filler * release latest. (a0503e86) 2012-11-05 Gustavo Pichorim Boiko * Remove the --single-panel argument, it is not needed anymore. (f5bc9bca) * Fix changelog entry. (0f98a43b) * Update changelog (dc11ec24) * The system already contains a dbus session running, do not start another one in the launcher script. (49ba37fb) 2012-11-05 Bill Filler * release (680625bd) 2012-11-05 Tiago Salem Herrmann * replace the old ButtonWithForeground component by Button. (11d56e02) * replace ButtonWithForeground by Button (36b6a614) 2012-11-01 Gustavo Pichorim Boiko * Make it possible to import the TelephonyApp QML plugin in other places than just the telephony-app itself. This includes adding support for having multiple instances of the plugin running at the same time. (671432e0) * Use the correct variable to send the message once the chat to a contact is ready. (adadc42b) 2012-10-31 Gustavo Pichorim Boiko * Update changelog. (66ee1d1c) * Update changelog (f8918f26) * Notify the grouped items for changes at the end of processing. (84b03a76) * If the plugin is imported outside the telephony-app and the app itself is running, send message using it instead of trying to create telepathy channels directly. (91b155d7) 2012-10-31 Tiago Salem Herrmann * update call and message delegates to match the proposed design (dfe72f6c) 2012-10-31 Gustavo Pichorim Boiko * Emit the messageSent signal just after the message was really sent. And make sure the text channel is requested for the correct handler. (97e44393) * Make sure the telepathy clients are registered when running multiple instances of the plugin. (0586aa0c) * Set the base URL correctly in preparation for the theming port. (7b876794) * Merge latest changes from trunk (4ac49d68) 2012-10-30 Gustavo Pichorim Boiko * Commented out the selected conditions until the right panel is ported. (cd705524) 2012-10-30 Tiago Salem Herrmann * General improvements to telephony-app and make it more compliant with the proposed design. (97bd81d1) 2012-10-30 Gustavo Pichorim Boiko * Fix some model mapping code. (3ed2cc77) * Merge changes from trunk. (26702bac) * Remove the action icon from the call log delegate and fix the usage of some roles. (6193211b) 2012-10-30 Tiago Salem Herrmann * empty keypad entry when dialing (89046bae) * fix include to the right directory (a3e44448) 2012-10-30 Gustavo Pichorim Boiko * Set the base URL correctly. (44721297) * Call the communications detail view on item clicks. (06f7262c) * Fix loading the call and message delegates when searching. (b62d7775) 2012-10-30 Tiago Salem Herrmann * rename DetailViewMessages to DetailViewCommunication (a82c8f61) 2012-10-30 Gustavo Pichorim Boiko * Add some search conditions to AbstractLoggerModel so that they are shared between the call and message models. (d5b851a4) * Removed extra semicolons (b3ae1d88) * Return the grouping property as a role from the model and remove some not used stuff from the models. (b2508b48) * Make it resolution independent (4bb0c5bb) * Remove the call log from the contact details. (bea631c1) 2012-10-30 Tiago Salem Herrmann * merge trunk (02af9b21) * - make OnCallPanel always visible over the PageStack's - change call button color to orange to match design - call voicemail when the keypad button 1 is pressed - launch the app in single panel as default and add --dual-panel option - Turn the keypad view into the Dialer panel and add a shortcut to open the contact list (067b24b9) * add favorite contacts group on top of the contact list. (05706f29) 2012-10-30 Gustavo Pichorim Boiko * Merge latest changes from trunk. (a28f7177) 2012-10-30 Tiago Salem Herrmann * mark some contacts as favorite in the example vcard (18f631ae) 2012-10-30 Gustavo Pichorim Boiko * Implement a basic communication event grouping delegate. (cb098495) * Implement grouping support in the proxy model. (04c394b5) 2012-10-30 Tiago Salem Herrmann * add favorite contacts group on top of the contact list (0013735b) * remove the darkBorder property as it is not available in the Button component anymore. (ef7e3821) 2012-10-30 Gustavo Pichorim Boiko * Check if there are contacts in the argument passed to addContacts before actually adding them to the model. (337df879) * We should add the model even if it has no rows. (e09720ef) * Check if the model being added actually has items before calling beginInsertRows. (6f627657) * Add a placeholder role for derived models to be able to implement custom roles. (26ebdf9c) * Return the correct grouping property for the logger based entries. Also make sure the item is created in the same thread as the model itself. (82126379) * Rename the model to avoid conflicting with the property name. (b98c176b) 2012-10-30 Tiago Salem Herrmann * remove the darkBorder property as it is not available in the Button component anymore (53d1b989) 2012-10-30 Gustavo Pichorim Boiko * Check the contacts count before actually trying to get them into the model. (31c0cf81) 2012-10-29 Kaleo * Uses new resolution independence from SDK. (605b562a) * Removed hack resizing the view. (b6e81620) 2012-10-29 Tiago Salem Herrmann * keep the old --single-panel option (7b9e4bd5) * - make OnCallPanel always visible over the PageStack's - change call button color to orange to match design - call voicemail when the keypad button 1 is pressed - launch the app in single panel as default and add --dual-panel option - Turn the keypad view into the Dialer panel and add a shortcut to open the contact list (b7fa4089) 2012-10-29 Kaleo * Missed margin measurement converted to gu. (c6a254e3) * Missed BorderImage measurement converted to dp. (3dac4355) * Converted to GU (a43e670c) 2012-10-29 Tiago Salem Herrmann * change source: to sourceComponent: set parent anchors only if available to avoid warnings (33f29943) 2012-10-29 Gustavo Pichorim Boiko * Create the indexes setting up an internal pointer to the original model. (4af64912) * Check if the index is valid before trying to cast its internal pointer. (18f30784) 2012-10-28 Kaleo * Merged from trunk. (30da2983) 2012-10-26 Gustavo Pichorim Boiko * Merge the message and call models. Replace the proxy models by one single proxy doing all the tasks. (82bb4d1c) 2012-10-26 Tiago Salem Herrmann * add Q_UNUSED to remove warnings (49929158) * remove old methods declaration moved to another class (3361f6bd) * implement virtual methods itemType() and matchesSearch() (cc3229ac) * remove unused method clear() (761d4976) * remove unused model calls (6a4a6d0e) * port models to the new layout (1c95e2ca) * Change the layout to use one PageStack per tab. (f2efa2de) 2012-10-26 Gustavo Pichorim Boiko * Implement searching in the aggregator model. (7163607c) * Watch for the data changes in the source models too. (7029423a) 2012-10-26 Tiago Salem Herrmann * merge trunk (a0d88c0a) 2012-10-26 Gustavo Pichorim Boiko * Disconnect the model when it is removed. (8d82db3d) * Convert the messages panel into the new communication panel which will hold both call log and messages. (2cb36b9f) * Init the row count variable. (7a09f627) * Add missing copyright to previously created files. (1443660f) * Add a model to aggregate the various conversation sources. (f1bd7f25) 2012-10-25 Gustavo Pichorim Boiko * Add the ConversationFeedModel which will be the base model for all conversation feeds. (3e6b5cd3) 2012-10-25 Tiago Salem Herrmann * add back the activateWindow() method so the application rises when necessary.. Approved by Gustavo Pichorim Boiko, PS Jenkins bot. (eefc93ae) * remove more extra spaces (71562149) * remove extra spaces introduced by mistake (d94453bc) * update changelog (a88d7419) * merge trunk (7f853501) * update changelog (61998ee6) * merge trunk (2f439f28) 2012-10-25 Gustavo Pichorim Boiko * Populate the contact model with some dummy contacts when using the memory backend as a fallback.. Approved by PS Jenkins bot, Tiago Salem Herrmann. (7b4d754f) * Remove leftover debug (46cc271f) * Fix the version in the changelog. (6fc4dbc8) 2012-10-25 Tiago Salem Herrmann * remove useless method call (a745d5f0) 2012-10-25 Gustavo Pichorim Boiko * Load the contact model with some dummy contacts when using the memory backend. (b3130b06) 2012-10-24 Tiago Salem Herrmann * add back the activateWindow() method so the application rises when necessary (037b2505) * go back to the previous active tab when the call is finished. (528b39df) 2012-10-23 Tiago Salem Herrmann * switch tabs inside load() and avoid creating helper methods. (19daed28) 2012-10-22 Tiago Salem Herrmann * change the layout to use one PageStack per tab. (8c48e90b) 2012-10-20 Kaleo * Removed scale hack used for Galaxy Nexus. (05123fa7) * Updated copy of SDK's fontUtils.js (1ee84a27) * Merged with trunk. (0ca57e4f) * Wrapped all measurements with units.dp. (b398677b) * Merged trunk (71334e65) 2012-10-19 Gustavo Pichorim Boiko * Add a wrapper that starts DBus and creates an ofono account before launching the app. And also add a dependency on telepathy-ofono.. Approved by PS Jenkins bot, Tiago Salem Herrmann. (e6e95587) * Add a dependency on dbus-x11 (9b350811) 2012-10-19 Michael Zanetti * Adjust autopilot tests to work with Qt5. Approved by Tiago Salem Herrmann, PS Jenkins bot. (0941a60c) 2012-10-19 Gustavo Pichorim Boiko * Update changelog. (9a00c607) * Add a dependency to telepathy-ofono (ee8aa72c) * Add a wrapper that starts a dbus session and creates a telepathy-ofono account before launching the app. (0c0a2ef0) 2012-10-19 Michael Zanetti * adjust autopilot tests to work with Qt5 (79baba6a) 2012-10-18 Gustavo Pichorim Boiko * Workaround the application appearance on high res mobile screens by scaling up the interface. Also add a title to the main view of the app.. Approved by Tiago Salem Herrmann. (a275536d) * Add a missing dependency and fix the default window size to match the phone one.. Approved by PS Jenkins bot, Bill Filler. (3e9eecc2) * Fix the width when running in dual pane mode (67dcc6ca) * releasing version 0.58.3 (a4e578e3) * Workaround the application appearance on high res mobile screens by scaling up the interface. Also add a title to the main view of the app. (2f5b62f0) * releasing version 0.58.2 (100d915c) * Set the default resolution to 720x1280 (90726621) * Add missing dependency to telepathy-logger (needed for the schema) (229ae652) * A few minor fixes related to contacts:; Use the "memory" backend when folks is not available; Save the displayLabel properly; Remove obsolete dependencies. Approved by PS Jenkins bot, Tiago Salem Herrmann. (26b32b31) * Update the displayLabel test. (d33e6c0a) * releasing version 0.58.1 (de8a4ded) * Save the contact display label properly. (8f4cdce6) * Use the "memory" contacts backend when folks is not available. (989ce5f8) * Remove some dependencies that would bring in qt4 packages. (9c2f23e3) 2012-10-17 Gustavo Pichorim Boiko * Port the telephony application to Qt5.. Approved by PS Jenkins bot, Gustavo Pichorim Boiko. (ca3db55d) * Use the PageStack widget from the SDK to display the views and add support for running the app in single panel mode. (8d24af4c) * Use widgets from the SDK instead of having private copies in the app. (3ae1562f) 2012-10-17 Tiago Salem Herrmann * avoid warnings about undefined variables (c98db2ad) 2012-10-17 Gustavo Pichorim Boiko * Clear some runtime warnings. (fdde6d6f) * The correct statement is "import QtQuick 2.0". (f09643fc) * Add some other entries to .bzrignore. (3d16b0bd) * The qt5_use_modules macro already adds the Qt5 libraries to the linking flags, so there is no need to add them again using target_link_libraries. (56cd4a85) * Use lowercase for qt5 macros to be consistent. (4b3e4071) 2012-10-17 Tiago Salem Herrmann * check if subTypes are available before using them (bde53bf8) 2012-10-17 Gustavo Pichorim Boiko * Remove LocalWidgets.ButtonSmall, it is easier to just set the height in the very few places it was used. This also fixes the problem of ellipsizing text. (53a746e2) * When the listview has no sections, set the visual model to null instead of undefined. (dd3c2e18) * Import the local widgets as LocalWidgets and remove the import where it is not needed anymore. (ef69088a) * Remove leftover comment. (750e599e) 2012-10-16 Gustavo Pichorim Boiko * Do not link tests against Qt5Gui as this will make they require a display server to be executed. (2a32e4c0) * Add dependencies to libgl-dev (2a38ba93) * releasing version 0.58 (96f6d066) * Add the Qt5 modules to the CMAKE_MODULE_PATH (dfcec1bb) * Updated the TODO file with items that are pending porting. (8d42fc14) * Port ModelSectionCounter to Qt5 (patch by Florian Boucault). It is not yet working but the code builds fine at least. (93060170) 2012-10-15 Gustavo Pichorim Boiko * Load the default right side panes when the stacks are created. (33cd5776) 2012-10-15 Tiago Salem Herrmann * fix contexts set/get (42122991) 2012-10-15 Gustavo Pichorim Boiko * Replace hardcoded values for contexts and phone subtypes by enums in the C++ plugin. (09b16f91) * Return the type from QContactDetail in the ContactDetail class. This avoids the need of reimplementing the type() function in all detail children classes. (21b1cbad) 2012-10-15 Tiago Salem Herrmann * use new context/subtype infrastructure (6d331965) 2012-10-11 Tiago Salem Herrmann * align separator image in LiveCall (94662af7) * use Button from the sdk in LiveCall and Voicemail (383aa451) * fix packaging for qt5 (91fa4fb0) * - use Button widget from the sdk - fix clicked() signal (d0578c3d) 2012-10-11 Gustavo Pichorim Boiko * Force the signal/slot connections to the Tpl::PendingOperation instances to be direct. (833ff79c) 2012-10-10 Gustavo Pichorim Boiko * Fix some errors reported when running the app using QtQuick2. There are still some more to be fixed. (16543d85) * Make sure all context properties are set inside the initializeEngine(). (36e16c21) * Port to QtQuick 2 (d170b895) * Finish the initial porting of C++ code to Qt5. There are still some bits that were marked as FIXMEs but the ported code is already sufficient for porting the QML part of the code. (0ac3917b) 2012-10-09 Gustavo Pichorim Boiko * Port the C++ part of the application executable target to Qt5. (8bc7e333) * Fix the reference to the TelephonyPage widget. (576b848e) * Merge latest changes from the use-sdk-components and mainline branches. (82f3646b) 2012-10-05 Ugo Riboni * Fix the switch between tabs in the call log panel (1f36b8ff) 2012-10-04 Florian Boucault * FramedImage: fixed incorrect check that resulted in no frames being loaded.. Approved by . (4f3894ba) 2012-10-04 Ugo Riboni * Merge changes from trunk (introduce FramedImage) (596d4ff8) 2012-10-04 Florian Boucault * FramedImage: fixed incorrect check that resulted in no frames being loaded. (a391aa74) 2012-10-04 Ugo Riboni * Use selected icons for tabs when tabs are selected (4bc50a81) * Fix placeholder item size in contact delegate using new properties from SDK (929cd881) 2012-10-03 Florian Boucault * Factored repeated instances of an Image with a frame around. Resulting component is FramedImage.. Approved by Ugo Riboni. (eb376200) 2012-10-03 Ugo Riboni * Highlight the new contact button while a new contact is being edited (b259c4ec) * Fix the Cancel button when creating a new contact (8021d118) * Merge changes from trunk (9c66065a) 2012-10-03 Florian Boucault * Layout fixes ensuring that the UI scales well in OnCallPanel and DetailViewMessages/MessagesHeader. (c537d845) 2012-10-03 Ugo Riboni * Force dependency on pre-QT5 SDK components (da668509) 2012-10-02 Ugo Riboni * Adjust the sizes and margins of ListItems to match changes in the SDK (25ed2ca0) * Adapt to use the new SDK API for icons in ListItems (1f37c309) 2012-10-01 Omer Akram * Added a few autopilot Autopilot tests for the telephony app. Approved by Thomi Richards, jenkins. (84fc2221) 2012-10-01 Gustavo Pichorim Boiko * Add "ofono" to the list of supported protocols.. Approved by Tiago Salem Herrmann, jenkins. (664b43cc) 2012-09-28 Gustavo Pichorim Boiko * Add "ofono" to the list of supported protocols. (c44143d0) 2012-09-28 Ugo Riboni * Use the new fallbackIconSource property (74936a3e) * Use the local Button in a more reliable way (5ef4a993) * Adjust alignement of elements inside the call log delegate (2e76d066) 2012-09-28 Florian Boucault * Contact panel: fix horizontal alignment of icons. (1185b3c2) 2012-09-28 Ugo Riboni * Use the local version of Button instead of the one from SDK (b9ba96c1) 2012-09-28 Florian Boucault * CustomListItemBase: - removed superfluous selection rectangle - set its height properly (7667d558) 2012-09-28 Ugo Riboni * Adjust the horiz alignement of icons and text in the list buttons (2354cba6) * Adjust the text field icon margins and the padding between text field and buttons in the message panel (a818358b) 2012-09-28 Florian Boucault * Factored repeated instances of an Image with a frame around. Resulting component is FramedImage. (481e66a2) 2012-09-28 Ugo Riboni * Explicitly add top separators before columns of buttons. Adjust to changes in list API (159a789e) 2012-09-26 Omer Akram * c'mon omer (9f1f0f44) * Rename marumbi to telephony_app (14eaa164) * clean (69145c92) * moe (dc80e56d) * simplify even more (05499966) * more (e1765e1a) * use thomi's trick, now LOC is reduced by a million (264a2350) 2012-09-25 Omer Akram * there could be multiple list items which could make the tests fail, now we selecting the desired list item (a0802eee) * fix minor odities (4ad2c5f5) * fix pep8 warning (9c1cb85c) * correct a few typos (043d55b8) * use @property for accessing emulators (90a92eb0) * finally make everything pep8 compliant (4b6e4809) * remove -testability, it seems autopilot is intelligent enough (73f15c72) * add constructors so we don't need to import MarumbiTestCase (f93d1564) * use 'Eventually' in more places (7c5c2a47) * fix more pep8 complains (be26cc5a) * fix some pep8 complains (692d8365) * replace tabs by spaces (655946ef) * fix trailing whitespaces (b8209ee3) * just to be precise (e87fd13d) * fix pyflakes detected issues (481b13ec) * finally fix new line issues (ed775a26) * fix new line issues (851ada2e) 2012-09-24 Omer Akram * fix some. (85c80a53) * add autopilot tests, is WIP (10950381) 2012-09-21 Gustavo Pichorim Boiko * Merge the latest changes from the use-sdk-components branch. (21cd602c) * Fix the selected condition for contact items. (4e4eb8ad) * Propagate the clicks on the inner button to the outter one. (c64d2d03) 2012-09-20 Tiago Salem Herrmann * onEnterPressed does not work anymore. Change by onReturnPressed. (7c288431) * change singleView by singlePanel (83344771) * Add --single-panel option on command line. (6461ec8d) 2012-09-20 Gustavo Pichorim Boiko * Rename all the loader related properties to stack (a64b2dd0) * Set the title on pages (c000302a) 2012-09-20 Tiago Salem Herrmann * add missing imports (70ca6510) 2012-09-20 Gustavo Pichorim Boiko * Simplify the code a bit by defining the singlePane property according to the current state. (23486285) * Do not set the parent of the tabs pane when switching to singlePane mode, the PageStack widget does that internally. (7bd78cea) * Start implementing the single vs dual pane view modes (a460b785) 2012-09-19 Tiago Salem Herrmann * force focus to avoid having to click the input field to type a number (261521c0) 2012-09-19 Gustavo Pichorim Boiko * Remove obsolete viewName properties (0c75b34d) * Clear the stack when showing some of the views. (067d974d) * Make sure the view properties are saved (as the stack doesn't keep all the views in memory), and change the way the view.loaded property works. (929f7e35) 2012-09-19 Tiago Salem Herrmann * remove debug (70c4782a) * Use Page element on views. Load pages dyamically using Qt.resolvedUrl() (fc13c558) 2012-09-19 Ugo Riboni * Merge changes from trunk (a0135801) 2012-09-18 Tiago Salem Herrmann * Use telepathy instead of android to get the voicemail number and unread voicemail count.. Approved by Gustavo Pichorim Boiko. (d5d9ee3c) * - do not use the edit-timestamp hack anymore - check if the message-token exists before using it. Approved by Gustavo Pichorim Boiko, jenkins. (9f338d26) 2012-09-18 Sergio Schvezov * Display the time of the event (call, text message) if it happened today, otherwise display the full date. (913ddd62) 2012-09-18 Tiago Salem Herrmann * use a custom interface name for features not present on telepathy (37f423a6) 2012-09-18 Ugo Riboni * Adjust to the SDK change that replaced Page with Tab components (ae9a699a) 2012-09-17 Tiago Salem Herrmann * - do not use the edit-timestamp hack anymore - check if the message-token exists before using it (b61bcdd0) 2012-09-14 Ugo Riboni * Adjust padding of the icon inside message search field (3d5b6050) * Adjust the padding between the search box and the button in the messages panel (fae5001c) * Adjust position of the timestamp in the messages list (f27d7f7d) * Merge changes from trunk (fd7c2742) 2012-09-13 Tiago Salem Herrmann * remove old code from telepathyhelper (6e7fa4eb) * track voicemail indicator changes and check if the account is connected before trying to retrieve voicemail information (b6d6f1d6) 2012-09-12 Tiago Salem Herrmann * - use telepathy to get the voicemail number and count (9d3cb1ba) * - Move speaker methods from CallManager to CallEntry - Use the telepathy infrastructure for enabling/disabling speaker mode instead of android. Approved by . (b87f2f56) 2012-09-12 Ugo Riboni * Replace all instances of SearchEntry that don't have a drop down with TextField from the SDK (1d877377) 2012-09-12 Tiago Salem Herrmann * merge trunk (c50208ad) 2012-09-12 Ugo Riboni * Add dependency on the SDK (2d964bf9) * Use ListItem components from the SDK in all remaining places (81ab120a) 2012-09-11 Gustavo Pichorim Boiko * Remove the threadId usage and also the logger splitted ids (contactId:phoneNumber and threadId:contactId). Those were too much tailored for android usage.. Approved by Tiago Salem Herrmann. (b335a958) * Remove the customId usage in the application. This code was written back when the app was not yet able to do reliable phone comparision/matching and is not needed anymore.. Approved by Tiago Salem Herrmann, jenkins. (b47dce61) 2012-09-11 Ugo Riboni * Merge changes from trunk (e579c05a) 2012-09-11 Florian Boucault * Normalized the font sizes to respect the SDK's modular scale. A small number of layout adaptations were required in order to keep overall UI looking good.. Approved by . (5933f803) 2012-09-11 Ugo Riboni * Merge changes from trunk (8bd5c49d) * Use regular ListItems.Standard with hidden frame instead of using controls in them (1b723755) 2012-09-10 Tiago Salem Herrmann * Initial changes preparing the telephony application to run outside the ubuntu-for-android environment.. Approved by Tiago Salem Herrmann. (5c2203a1) 2012-09-10 Florian Boucault * Display the full date if the event did not happen on the same day. (5c44793d) * Display the time of the event (call, text message) if it happened today, otherwise display the full date. (1ab43449) * Normalized the font sizes to respect the SDK's modular scale. A small number of layout adaptations were required in order to keep overall UI looking good. (2472276b) 2012-09-10 Tiago Salem Herrmann * check if the property exists instead of using the result of connect() (3f6ba2fd) * - remove isHardwareStreaming() method, as we can get this info from the channel itself - replace mIsUfa by mHasSpeakerProperty (d4c5a2c6) * check if the call object exists before assigning a value (e2ab7aec) 2012-09-10 Ugo Riboni * Replace most usages of the ListItem widget copy with ListItem.Standard from the SDK. (e0caac00) 2012-09-07 Ugo Riboni * Actually remove all copies of the tab-related components (af564c61) * Fix the messages panel so that it fills the parent container (265db087) * Remove the copies of the Tab-related components and use them directly from the SDK (19a4e2aa) * Merge Florian's changes to use a copy of the SDK's Tabs and Page components (38cea426) * Merge changes from trunk (0c90a87c) 2012-09-06 Gustavo Pichorim Boiko * Remove the usage of contactid:phonenumber and threadid:contactid in logger models. (91d594ca) * Merge back latest changes from mainline. (94f8c590) * Revert the changes done to the tests. They are already fixed in mainline (b644bdf5) * Fix the unit tests running on the pbuilder env.. Approved by jenkins. (6bc8e07c) 2012-09-06 Florian Boucault * Preliminary, dirty, non working integration of latest SDK tabs. (e1139f78) * Imported latest Tabs from the SDK. (dfcd907c) 2012-09-06 Ugo Riboni * Remove the copy of TextCustom and use the version from the SDK (7b597c58) 2012-09-06 Gustavo Pichorim Boiko * Disable the ModelSectionCounter test as it is crashing on arm. (9199accb) 2012-09-06 Ugo Riboni * Replace ButtonWithForeground with the component from the SDK (7241a7ed) * Use AbstractButton from the SDK and remove the local copy (e93fbb09) 2012-09-05 Gustavo Pichorim Boiko * Implement our own lessThan() function in the ContactProxyModel to avoid case insensitive sorting to break when using some specific locales. (858275a9) * Add libicu as a dependency to fix unit tests in pbuilder env. (d63be5a5) 2012-09-03 Tiago Salem Herrmann * Move speaker methods from CallManager to CallEntry Use the telepathy infrastructure for enabling/disabling speaker mode instead of android (5b474b3e) 2012-09-03 Gustavo Pichorim Boiko * Remove accented names from tests to prevent jenkins' continuous integration to fail. (74c47b26) * Wrap the accented names using QString::fromUtf8() (b3c76079) 2012-08-30 Gustavo Pichorim Boiko * Fix the contactSaved signal signature in the ContactModel tests. (afb051a2) 2012-08-30 Tiago Salem Herrmann * fix comments and remove __unknown_contact variable (5220ad47) 2012-08-30 Gustavo Pichorim Boiko * Add support for the telepathy-ring's "tel" protocol. Replace the current account searching by one relying on a list of protocols. (150bbe22) 2012-08-30 Tiago Salem Herrmann * remove references to customId from qml files (5ca22697) 2012-08-30 Gustavo Pichorim Boiko * Remove the customId usage in C++ code. The QML part still needs to be fixed. (8b2c51c2) 2012-08-30 Tiago Salem Herrmann * remove telepathy-ufa dependency (266b7f1c) 2012-08-29 Gustavo Pichorim Boiko * Merge back changes from mainline (51b4790a) * Check if another instance of the telephony-app is running using DBus instead of using qtsingleapplication. (ec617a35) * Return false after printing the usage. (b1cd8345) * Remove leftover connect() statement. (1bda19e8) * Check if another instance of the telephony-app is running using DBus instead of using qtsingleapplication. (65923b3e) 2012-08-28 Gustavo Pichorim Boiko * Now that U4A already has scripts for creating the telepathy-ufa account, do not create any account from the telephony-app itself. (5c8ff762) 2012-08-28 Tiago Salem Herrmann * remove direct android dbus call as it is not necessary anymore. We are iterating over the local contact list instead (acb1b710) * remove direct android dbus call as it isn't needed anymore since we iterate over the local contact list (998a5279) 2012-08-28 Gustavo Pichorim Boiko * Add tests for the ContactModel. (1fe8e15a) 2012-08-23 Tiago Salem Herrmann * add tests for each custom contact detail (002c0422) * change mInteger to mCount avoid reseting the counter when not necessary (145e1b99) * use random strings when testing group related operations (6b342012) * track each signal individually (9219fdea) * test custom details by initializing them with QContactDetail's (8c145e84) 2012-08-22 Tiago Salem Herrmann * add tests for custom details (f3bcd29d) 2012-08-22 Gustavo Pichorim Boiko * Add tests for the remaining methods in ContactEntry (82e9a8be) * Add the new tests build files to bzrignore (cc454deb) * Add tests for the ContactEntry's properties. (012abeda) 2012-08-21 Tiago Salem Herrmann * add tests for ContactProxyModel (87457525) * - use Qt::DisplayRole to access displayLabel() - text filter text (282de65f) * add sorting and signal tests (6ff45288) 2012-08-20 Tiago Salem Herrmann * add ContactProxyModel tests (7ee51734) 2012-08-20 Gustavo Pichorim Boiko * Fix a typo in the comment about the contact manager. (ed102a2d) * Add a test for ContactModel::removeContact() (6ca190b2) * Test also the initial role of ContactModel (2cdc7c1d) * Add tests for the ContactModel's customIdFromPhoneNumber() and comparePhoneNumbers() functions. (876f3d8b) * Test the ContactModel::contactFrom*() functions. (3af4f40d) * Add tests for the ContactModel's data() function. (367b03ad) * Test if the rowCount() of child items is zero in ContactModel (d08a85f7) 2012-08-17 Gustavo Pichorim Boiko * Add tests for the ContactModel's signals. (7be52aff) * Change the way we select the manager engine in the model to avoid initializing two types of engines. (6e73192b) * Add a copy constructor to ContactEntry to make it possible to register it as a QMetaType. (7a72d314) * Start implementing tests for the ContactModel class. (f6720d9e) * Remove wrongly committed files (be0ba1e1) 2012-08-15 Gustavo Pichorim Boiko * Remove unused filter property. (5307309d) * Remove some extra items that are not really needed. (f8a2df9f) * Remove some obsolete FIXME comments. (a8c75c4c) * Show the call duration in the OnCall overlay panel. (83ea3bc7) * Remove obsolete contactName() function. (9d94b3e7) 2012-08-14 Gustavo Pichorim Boiko * Remove unused filter property (27d896ba) * Remove some extra items that are not really needed. (ba6e700e) * Remove two more obsolete FIXME entries. (ab005713) * Remove some obsolete FIXME comments (c638bd16) * Show the call duration in the OnCall overlay panel. (459331b9) * Remove obsolete contactName() function (24d956be) 2012-08-13 Tiago Salem Herrmann * Show "Unknown number" and "Private number" instead of "#" and "-2" (f0a62fe2) * keep the entries aligned (d980b918) * avoid duplicating code (f3e3274d) 2012-08-13 Gustavo Pichorim Boiko * Add the message id to all messages and check for duplicates that might arrive from both telepathy and logger. (aa7ff291) 2012-08-13 Tiago Salem Herrmann * Show "Unknown number" and "Private number" instead of "#" and "-2" (b42bed5a) * merge trunk (ea39998d) 2012-08-10 Gustavo Pichorim Boiko * Set the message ID from the logger event. (66e4cdb0) * Add the message id to all messages and check for duplicates that might arrive from both telepathy and logger. (34ea7316) * Search all messages instead of searching just the latest ones. (677c427a) 2012-08-09 Gustavo Pichorim Boiko * Make the comparePhoneNumbers function static. (757623cf) * Make sure the call log is not shown when adding new contacts. (f4b3c4cd) * Do not use the emit, signals and slots keywords. (0d9c966f) * Created new dbus method "CallNumber(s)" (16c8e014) * Filter out entities not used to fetch messages or call log. This should reduce the amount of data processed to get the events. (e548922e) 2012-08-09 Tiago Salem Herrmann * update changelog (d348491d) * do not call requestClose() after hanging up a call (2d8cdb0b) * validate the phone number before sending the message (f36c305a) * Change contactId to phoneNumber, as the variable name "contactId" is used in another context (6565ca78) * try to find the customId in the current contact list before asking android for it. (6f946524) * Enable speaker mode if the call was answered from ubuntu, or if it was started from telephony-app (7a62ff2d) * Use callState() only after the feature is complete. (5e249218) 2012-08-08 Gustavo Pichorim Boiko * Set the contact alias to the phone number on new messages as a fallback in case the contact is not known. (e546e43b) 2012-08-06 Tiago Salem Herrmann * add comments and remove wrong code (48553eae) 2012-08-03 Tiago Salem Herrmann * validate the phone number before sending a message (bd128b69) 2012-08-03 Gustavo Pichorim Boiko * Remove the obsolete conversation log model. (66a21a1e) * Watch the unread count signals in the proxy model. (7b5f6f56) 2012-08-02 Tiago Salem Herrmann * change contactId to phoneNumber, as the name contactId is used in another context (e5848b78) 2012-08-02 Gustavo Pichorim Boiko * Make the comparePhoneNumbers function static as it is a helper function and doesn't depend on the model instance. (7eab8826) * Make sure the call log is not shown when adding new contacts. (c7cfb9fa) 2012-08-02 Tiago Salem Herrmann * try to find the customId in the current contact list before asking android. (fb8368ae) 2012-08-02 Gustavo Pichorim Boiko * Do not use the emit, signals and slots keywords (3753d76c) * Reimplement the entity filtering in a more generic way. (2faaceeb) 2012-08-02 Tiago Salem Herrmann * enable speaker mode if the call was answered from ubuntu, or if it was started from telephony-app (7d9c3567) * do not request the channel to close, as we depend on android signals to properly close the channel (092d6fba) 2012-08-02 Renato Araujo Oliveira Filho * Created new dbus method "CallNumber(s)" (51b03137) 2012-08-02 Gustavo Pichorim Boiko * Merge latest changes from mainline. (bbd1e164) * Reimplement the conversationmodel using just the original messages model and a proxy. (1a787365) 2012-08-02 Tiago Salem Herrmann * use callState() only after the feature is complete. (c8d22899) 2012-08-01 Gustavo Pichorim Boiko * releasing version 0.56 (5105f51f) * Add the correct icon for the phone/voicemail indicator. (8445d162) * Add the correct icon for the phone/voicemail indicator. (78597bf6) 2012-08-01 Olivier Tilloy * Work around the fact that the scrollbar proximity sensor eats mouse clicks. (35608dda) * Work around the fact that the scrollbar proximity sensor eats mouse clicks. (9811071b) 2012-07-31 Gustavo Pichorim Boiko * releasing version 0.55 (19d3de73) * Make sure the telephony-app uses the correct timestamp for received messages. (c451a8c2) * Use the comparePhoneNumbers() in chatmanager to check for existing text channels. (0f04d59d) 2012-07-31 Tiago Salem Herrmann * update changelog (92647a62) * reset the proxy model when logger is fully loaded (64a06db5) * change loggerFinished() to resetView() (cf291e0d) * reset the model as soon as logger is completely loaded (f3a29cb8) 2012-07-31 Gustavo Pichorim Boiko * Filter the entities when requesting messages and call log to reduce the amount of data to be processed. (0e6cf6b6) * Make sure the telephony-app uses the correct timestamp for received messages. (e2b15234) 2012-07-30 Tiago Salem Herrmann * call reset() and make ListView behave correctly (14642a37) 2012-07-30 Gustavo Pichorim Boiko * Use the comparePhoneNumbers() in chatmanager to check for existing text channels. (84143faf) 2012-07-30 Renato Araujo Oliveira Filho * releasing version 0.54 (e4621046) * Fixed application loader from dbus method. (449ae89e) 2012-07-30 Olivier Tilloy * Raise and activate the window when an incoming call is accepted. (a661344b) * Raise and activate the window when an incoming call is accepted. (1e5cabc2) * Activate the window, and then raise it. This seems to work better than the opposite. (d9a9b642) * Do not activate the window in onMessageReceived(…), this is already taken care of automatically by setting the activation window in the early initialization. (4ec93950) 2012-07-30 Florian Boucault * Fixed out of source building of unit tests. (LP: #1029997) (f3c9130d) 2012-07-27 Renato Araujo Oliveira Filho * Used voicemail instead of voice-email in arguments. (86f73076) * Use QString to handle arguments instead of QUrl. (dcf85b04) * Fixed application loader from dbus method. (54d921d1) 2012-07-27 Florian Boucault * Fixed out of source building of unit tests. (ea530cff) 2012-07-27 Gustavo Pichorim Boiko * releasing version 0.53 (624c4c50) * Make sure the approver is auto-started when the desktop loads. (1cbb285c) * Do not display the desktop files used only by the indicators. (7ff85b2d) * Make sure the approver is auto-started when the desktop loads. (bc8ca3e1) 2012-07-27 Tiago Salem Herrmann * update changelog (66e79d5c) * change "No Name" in live call view to "Unknown Contact" just to be consistent with the messages view (1fb24a35) * change "No Name" to "Unknown Contact" in live call view (55232d58) 2012-07-27 Gustavo Pichorim Boiko * Do not display the desktop files used only by the indicators. (6ebeea9a) 2012-07-27 Florian Boucault * releasing version 0.52 (2c3a6769) * Implemented a new Scrollbar widget and added scrollbars to relevant parts of the UI. (LP: #1025780) (e627f4c4) * Deactivated unit tests until they pass in a clean chroot (319f99f0) * Added example usage for ScrollbarForListView. (6ff580e4) * Merged colo:model_section_counter (29f64cd6) * Added testing output to bzr ignore rules. (cf05a149) * Merged tests branch (7619de4b) * Added testing output to bzr ignore rules. (f1d4db18) * Merged trunk (9efac966) * Fixed regressions introduced by recent commit (rev. 296) that fixed the scrollbar in the conversation view. (43d33315) * Adapted some dummy data APIs to reflect real models better. (c30ef26c) * Added constant padding at the top and bottom of the contact details header. (LP: #1029548) (64dc432c) * ModelSectionCounter: sectionString() and watchSectionPropertyRole() do not need to be slots. (055fa2c1) * ModelSectionCounter: small optimization. (6767d9c9) * Merged trunk (516aeb5f) 2012-07-26 Gustavo Pichorim Boiko * releasing version 0.51 (84c258d9) * Make sure the logger models are properly updated when phone numbers are added. (0053b2ef) * Make sure the logger models are properly updated when phone numbers are added to contact details. (89c7c1a9) 2012-07-26 Florian Boucault * Adapted some dummy data APIs to reflect real models better. (aad29f13) * Added constant padding at the top and bottom of the contact details header. (69a7da7d) 2012-07-26 Gustavo Pichorim Boiko * releasing version 0.50 (30971f06) * Add an entry to the messaging menu to indicate there is a pending voicemail message. (4bc3077f) 2012-07-26 Florian Boucault * Button: better looking disabled state for colored buttons. (cd052f32) * Merged trunk (6fe32298) * Merged model_section_counter (debdacbd) * Added explanation for unit test failure (aac3dd66) * Make sure that when data changes the section count is updated. (fa1070c6) * Added comment on unit test failure. (ae26e3e5) 2012-07-26 Renato Araujo Oliveira Filho * Does not show folks invisible fields in UI. (034c10e2) * Fixed contact model loader. (2fdb40f9) * Removed loadDetails from constructor. (ca2a97b5) * Fixed contact model loader. (9c07b99b) 2012-07-26 Florian Boucault * Added comment on unit test failure. (4341d644) * Added comment (601d53d2) * Fixed scrollbar for conversation view. (a774f0f9) * Code clarification. (2b6337e7) 2012-07-25 Florian Boucault * Merged model_section_counter (ea6c8a7c) * Merged tests infrastructure branch (ad686914) * Merged trunk (e5aca946) * Greatly simplified scrolling logic. More on par with Ubuntu GTK's scrollbars. (0a4f2381) * More readable formula. (149cefe1) * Scrollbar: slightly clearer computation code. (cc9b330c) * Fixed case where scrollbar was desynchronised because of removal of first item in ListView. (ee2f251e) 2012-07-25 Gustavo Pichorim Boiko * Merge latest changes from mainline (698a0d32) * Remove leftover library include (dacd11af) * Show the voicemail indicator under the correct server ("Phone") (5ec51558) 2012-07-25 Renato Araujo Oliveira Filho * Does not show invisible fields in UI. (b018a01c) 2012-07-25 Florian Boucault * ScrollbarForListView: take into account ListView.spacing. (62395a0b) * Clearer scrolling code. (2b4a89ea) 2012-07-25 Gustavo Pichorim Boiko * releasing version 0.49 (522e6788) * Make sure the dialpad input has focus when entering the view. (af56a41f) * Add the new telephony-app icons. (bdeb9ebe) 2012-07-25 Florian Boucault * Simplified implementation slightly. (99bfdda4) * Fixed issue where scrollbar's slider was overshooting. (0b65827e) 2012-07-25 Gustavo Pichorim Boiko * Make sure the dialpad input has focus when entering the view. (3a811eea) * Add the new telephony-app icons. (9ba9de63) 2012-07-25 Florian Boucault * Hide scrollbar when there is no content. (2668c61b) * Clarified FIXME. (95c7bec4) * ScrollbarForFlickable: let subclasses customize the computation of contentPosition. (022be21f) 2012-07-25 Ugo Riboni * releasing version 0.48 (7c7404d3) * Update the keypad backspace icon according to design (a4c25f9c) 2012-07-25 Florian Boucault * Added link to bug report (b7367266) * Added FIXMEs (df013c03) 2012-07-25 Ugo Riboni * Display a dialing state while an outgoing call is ringing (LP: #1018428) (e6bbfb9e) * Use a slightly different backspace icon from design (b8f3c3f4) 2012-07-25 Gustavo Pichorim Boiko * Add a "New Message" entry to the SMS indicator. (acea2e63) 2012-07-25 Florian Boucault * Fix case where contentSize is smaller than pageSize. (29a54285) * ScrollbarForListView: compute manually contentSize when section headers are used. (be6be173) * Refactored Scrollbar to be more generic. Introduced widget specific scrollbars as specializations of it (ScrollbarForFlickable, ScrollbarForListView). (a0853935) 2012-07-25 Tiago Salem Herrmann * avoid accessing channel methods while it is not ready. (99e5e5a5) 2012-07-25 Ugo Riboni * Focus the recipient field when composing new message (LP: #1028169) (f966804e) * Use more sensible default subtypes for new fields (LP: #1028161) (2b89c937) 2012-07-25 Florian Boucault * Merged model_section_counter (7d9ab955) * Added 'sectionCriteria' property to ModelSectionCounter (76fd6687) 2012-07-25 Gustavo Pichorim Boiko * releasing version 0.47 (f56a0905) * Request attention when a new message arrives to turn the indicator blue. (02765f50) * Ignore unread messages from logger. Those will be all delivered by the telepathy connection manager. (71ff8338) * Add a "New Message" entry to the SMS indicator. (75739296) 2012-07-25 Florian Boucault * ModelSectionCounter: added support for more types of models. (c9f6d541) * Expose ModelSectionCounter to QML (bd59ba63) * Merged from trunk (55f5c8e2) * New ModelSectionCounter (edc4af51) * Make cmake tests adding generic. (567122f9) * Add infrastructure for automated C++ tests. (805eb862) 2012-07-24 Tiago Salem Herrmann * add new class member to callentry to track dialing state (242f725d) 2012-07-24 Gustavo Pichorim Boiko * Request attention when a new message arrives to turn the indicator blue. (cf2b3515) 2012-07-24 Renato Araujo Oliveira Filho * Fixed contact loader from another instance.(LP: #1022686) (6e883386) * Fixed contact loader from another instance. (70a43f6e) 2012-07-24 Gustavo Pichorim Boiko * Add missing copyright headers (0fb45005) * Merge latest changes from mainline (99ee7bda) * Remove leftover debug print. (581712a3) 2012-07-24 Ugo Riboni * Give focus to the recipient selector when creating a new message (ff9afc08) * Set the default contact subtypes to more sensible defaults (83ecdf97) * releasing version 0.46 (ff1e70a1) * Use the right placeholder contact picture in the call log and in the messages list (LP: #1006085) (a2dd52a1) * Prevent saving contacts entirely empty or new empty contact fields (LP: #1027095) (0be45a12) * Focus the message input field when opening a conversation (LP: #1028173) (a9d2888b) * Add missing else statement (2d9e7a43) * Check fields not only for emptyness but also for whitespace-only-ness (26b96844) * Give focus to the message input box whenever the messages view opens (c36bd31d) * Use correct placeholder images for contacts in call log and message list (5f79da7f) * Export call state to QML. Work in progress, lots of debug output (859331ec) 2012-07-23 Gustavo Pichorim Boiko * Add a dbus call to show the voicemail. (572aa40d) * Fix a crash by not inheriting QDBusInterface. (77fa17ed) * Add an initial implementation of a voicemail indicator entry. (4a023310) 2012-07-23 Florian Boucault * releasing version 0.45 (5c4e80ff) * Added missing debian/changelog entry. (83842810) * Adjusted visual implementation of buttons: - do not rely on OpenGL anymore, implement rendering algorithm with QPainter instead - use 'darkBorder' property when appropriate - change gradient composition mode when 'darkBorder' is set - scale proportionally when height is smaller than BorderImage can support (9358f311) * Put return statements on separate lines. (0d601b15) * LiveCall: when no background call, center the live call view. (b00a1d93) * LiveCall: when no background call, center the live call view. (d38ab1c1) 2012-07-23 Ugo Riboni * Do not try to add completely blank new address fields (ea759113) 2012-07-23 Florian Boucault * Adjusted visual implementation of buttons: - do not rely on OpenGL anymore, implement rendering algorithm with QPainter instead - use 'darkBorder' property when appropriate - change gradient composition mode when 'darkBorder' is set - scale proportionally when height is smaller than BorderImage can support (cda580f1) 2012-07-23 Ugo Riboni * Do not try to save new blank fields (44d48faf) * Fix bug in previous commit that disabled the button when in display mode (5684b388) * Do not allow saving with an empty contact name (3eddc94b) * Make sure the subtype editor text is not truncated (LP: #1020092) (ad9d56cd) * Email subtypes should not include "mobile" (LP: #1025808) (465b9e41) * Do not truncate the "home fax" subtype text (6429e31c) * Remove subtype "mobile" for email addresses (77071f7e) * Add a backspace button to the keypad (LP: #1018276) (10df10d9) * Merge changes from trunk (7366450b) 2012-07-20 Tiago Salem Herrmann * releasing version 0.44 (c396f7bc) * update changelog (ffcaf03e) * call phone number entered in the quick dial entry when return is pressed (45a23c66) * update changelog (9d5a3041) * - change the app to only accept not accepted calls - make the approver show the snap decision only for incoming channels and channels in initialised state (15defa77) * call phone number entered in the quick dial entry when return is pressed (4ff49ece) 2012-07-20 Gustavo Pichorim Boiko * Update changelog (dd9dee9c) * Remove social network update label, it is not going to be implemented for 1.0. (2152d77f) * Change the application name to "Telephony". (40e6e240) * Remove social network update label, it is not going to be implemented for 1.0 (39752003) * Change the application name to "Telephony" (2e8db10c) * releasing version 0.43 (e95cd423) * Update the application icon to the latest design. (3789e669) * Add contact information to the incoming call snap decision item. (11980ecc) * Absolute image paths in snap decisions are handle through hints. (5c2aec8d) 2012-07-20 Ugo Riboni * Use the right asset and layout for the backspace button (0800b225) 2012-07-20 Tiago Salem Herrmann * compare contacts directly also in CallLogModel (a3a6f838) 2012-07-20 Ugo Riboni * Apply the correct visual design for the "add new field" chooser (LP: #1025767) (89fa63e8) * Merge changes from trunk (3ad91ae4) 2012-07-20 Tiago Salem Herrmann * compare contact instances directly instead of their ids (d320e54f) * use ClientRegistrar to prepare the self contact feature (b2941ec7) * merge trunk (64887d9c) 2012-07-20 Ugo Riboni * Focus the contact name field when starting to edit a contact (LP: #1026324) (74f891dc) 2012-07-20 Gustavo Pichorim Boiko * Update the application icon to the latest design. (92f246c4) 2012-07-20 Ugo Riboni * Refocus the header (and thus the name field) after adding the default fields on new contact creation (9690df2b) * Display by default a blank email and phone fields when a new contact is being created (LP: #1025805) (c1701582) 2012-07-20 Gustavo Pichorim Boiko * Change the logic to avoid reassign the strings. (62d26de3) * Remove unused icon (062f2ccd) 2012-07-20 Ugo Riboni * Focus the contact name field when starting editing (e52985b5) * Show a blank phone and email field when creating a new contact (79eeba0e) 2012-07-20 Gustavo Pichorim Boiko * Merge latest changes from mainline (9ab6846d) * Add the button tint hint (ee6dde95) 2012-07-20 Ugo Riboni * Properly handle open and close of the menu (8e9c0789) * Make sure that the menu is visible when opened (4db16144) * Add the backspace key with temporary asset (1195bcac) * Apply correct visual style for the "add new field" widget (5d4077a8) 2012-07-19 Tiago Salem Herrmann * accept only channels that are not accepted yet show the snap decision only for channels that are in state "initialised" (c3dc5bed) 2012-07-19 Gustavo Pichorim Boiko * Add contact information to the incoming call snap decision item. (4e544d21) * releasing version 0.42 (c32dc88f) * Fix contact details saving. Instead of checking for the children of the focus scope, check for the children of the column. (26113342) * Fix contact details saving. Instead of checking for the children of the focus scope, check for the children of the column. (b221ae7d) * Set the phone number in the alias field of the conversation model as a fallback in case the contact is not known. (34de74a5) * When a new thread is created, set the contact alias to the phone number as a fallback in case the contact is not known. (dec2db86) * Merge latest changes from mainline (d3007d6c) * releasing version 0.41 (59f6ad69) * Implement the visual elements representing the unread messages (e35ccfeb) * Show indicators and OSD notifications for text messages using the telepathy framework. (c7994584) * When a new thread is created, set the contact alias to the phone number as a fallback in case the contact is not known. (0d890525) * Fix the message delegate: the ListItem property name changed from unread to textBold. (f382c565) * Evaluate just the counter value instead of creating everything dynamically. Patch by Olivier Tilloy. (8092c074) 2012-07-19 Ugo Riboni * Correctly display the placeholder icon when there's no avatar image (15b1d9ba) 2012-07-19 Olivier Tilloy * releasing version 0.40 (0024cadd) 2012-07-19 Florian Boucault * Merged trunk (67965ba5) 2012-07-19 Olivier Tilloy * Request the window to be raised and given focus when receiving a message. (c1ff9a8b) 2012-07-19 Ugo Riboni * Correctly display the placeholder icon when there's no avatar image (73d9f7ae) 2012-07-19 Olivier Tilloy * Request the window to be raised and given focus when receiving a message. (72f3574a) 2012-07-18 Renato Araujo Oliveira Filho * Fixed contact information load when the application is already running. (4922b24e) 2012-07-18 Ugo Riboni * Close the snap decision if the incoming call state is changed on the phone side (f9282626) 2012-07-18 Gustavo Pichorim Boiko * The phone number is in the alias property of the entity (475b907c) * Remove leftover debug print (6bc6dc1b) 2012-07-18 Renato Araujo Oliveira Filho * Fixed contact information load when the application is already running. (3125fbb1) 2012-07-18 Gustavo Pichorim Boiko * Fix the visual aspect of the tab counter: reduce font size, fix aligment and margins. (717f7667) * Replace the public unread property and the private __textBold property by a public textBold property. (535b61a2) * Make the constructor of ChatManager private (as it is a singleton class now) (a5b68838) * Fix the error message when displaying the notification fails. (d7223d84) * If the channel is null when the indicator is activated, return to avoid crashing (c3e0a56a) * Replace the code to remove the indicator by a simpler version (8265ee70) * Hold the sessionBus instance in a local variable to avoid having to call QDBusConnection::sessionBus all the time (062d8c1d) * Define a constant to represent the telephony app client DBus path as it is used in many different places. (d940e61b) * Check if the value of the isServiceRegistered() reply is valid before using it. (a8c8bfac) 2012-07-18 Ugo Riboni * Give focus to the newly created contact details (9d6c0469) 2012-07-17 Gustavo Pichorim Boiko * And fix the file name again to avoid recursion (92b5d1dc) * Fix the file path when creating the tab icon overlay (84ba7d9a) 2012-07-17 Tiago Salem Herrmann * do not use isRequested() to find out if that is an incoming call. make approver bypass not requested channels and all outgoing calls. (7dc5d235) 2012-07-17 Gustavo Pichorim Boiko * Simplify a bit the code by using just one signal for notifying changes in the global unread messages count and in the unread messages count for a given phone number. (0e700520) * Display unread messages as bold. (e7250a17) * Make the ChatManager singleton (cf30fbd4) * Merge latest changes from mainline (77195be7) * Add a way to check for unread messages for a given phone number (98176c93) * releasing version 0.39 (97d01be0) * Do not switch to the messages view for every new message. (ab13c238) * Add a counter overlay to the messages tab to display the number of unread messages. (6e28173e) * Add the unread messages count as a property in the chat manager class. (6d5c9131) 2012-07-17 Ugo Riboni * Close the snap decision if the incoming call state is changed on the phone side (798e1631) 2012-07-17 Gustavo Pichorim Boiko * Ignore unread messages from logger. Those will be all delivered by the telepathy connection manager. (17faf6b1) * Add a method to return an index from an item pointer (de4da62f) * releasing version 0.38 (968c7bfe) * Now that qt-folks is returning the contact ids correctly for newly added. (5e05b450) 2012-07-17 Ugo Riboni * Merge changes from trunk (bbd256a6) 2012-07-16 Gustavo Pichorim Boiko * Do not switch to the messages view for every new message. (ef226f0a) 2012-07-16 Renato Araujo Oliveira Filho * releasing version 0.37 (fd7aa69b) * Implemented support for QQ protocol. Based on the new IM generic protocol implementation. (ea1e4e73) 2012-07-16 Ugo Riboni * Give focus to the newly created contact details (68c0dd49) 2012-07-16 Olivier Tilloy * Sort contacts in a case-insensitive manner. Make sure the section headers are always upper case. (cd6800a5) * Fix call to sort(…), it takes the column as first parameter, not the role. (e4c98f51) * Sort contacts in a case-insensitive manner. (1f6b09e4) 2012-07-13 Gustavo Pichorim Boiko * Now that qt-folks is returning the contact ids correctly for newly added contacts, replace the hack to refresh the contacts after editing by a proper implementation. (99349c6b) 2012-07-13 Tiago Salem Herrmann * releasing version 0.36 (f419d625) 2012-07-13 Gustavo Pichorim Boiko * Merge latest changes from mainline (6eb0d7e7) 2012-07-13 Tiago Salem Herrmann * update changelog (58e32469) * implement a ContactWatcher and integrate into the application (5ad46fe6) * fix branch code because of a wrong merge that was reverted (794dbb00) * merge trunk (69b12701) 2012-07-13 Renato Araujo Oliveira Filho * Fixed comments on updateContext function implementation. (06c00b4e) 2012-07-13 Tiago Salem Herrmann * update changelog (667690a2) 2012-07-13 Renato Araujo Oliveira Filho * Renamed var PROTOCOL_TYPE_IM to PROTOCOL_TYPE_CUSTOM. (b23254bb) 2012-07-13 Tiago Salem Herrmann * scroll messages view to end when a conversation is open (d03d726a) * add speaker button to the voicemail view (44dab847) * do not update the messages model anymore. We use now a proxy model to filter the messages instead (99fde897) * use the android algorithm to compare phone numbers (a32c0491) * do not clear customId, and do not set the contact directly (3b294b24) 2012-07-13 Gustavo Pichorim Boiko * Imported latest version of Button widget from SDK. (5f58127c) * Asynchronously load avatars thus not blocking the whole application when loading. (a3e4e902) * Added separating line at the bottom of the contact details when the call log is empty. (8562cbd1) 2012-07-13 Tiago Salem Herrmann * if numbers are the same, return true (9c8844c5) 2012-07-13 Gustavo Pichorim Boiko * Add a missing comma (7aa23147) 2012-07-13 Olivier Tilloy * Add an "initial" role to the contact model, and use it as section header in the contact list. (6d7f29fa) 2012-07-13 Gustavo Pichorim Boiko * Show OSD notifications for messages (a3a7358d) 2012-07-13 Tiago Salem Herrmann * remove not consistent comment (77c34464) * use const QString& instead of QString (98d96a68) * add reference to the original source code (7d8c858d) * use ifdef to avoid double inclusion (f7ac68d3) * use PhoneNumberUtils namespace (69b0cb4a) * additional check. do not try to resolve contacts that are unknown (7a3da25b) * improve documentation of __checkContact() (03eb9699) * releasing version 0.35 (8d7ff121) * send message if return key is pressed (8af92cf2) * merge trunk (956554d3) * revert wrong merge (7751a12f) * fix typo (fa4549d7) * merge trunk (9cf5b16c) * check for customId on __checkContactAdded() before calling __checkContact() (17809f74) 2012-07-12 Tiago Salem Herrmann * use different methods when adding and removing contacts. change model to use the customId when removing contacts. small cleanup (ae1a3ea8) 2012-07-12 Gustavo Pichorim Boiko * Check for pending messages when the text channel arrives. (afc6f7fc) * Change the way acknowledging messages work: now the chatmanager is responsible for acknowledging the messages for the active conversation. This fixes some race conditions that were causing some messages not to be acknowledged. (bc69abd6) 2012-07-12 Tiago Salem Herrmann * rename number to phoneNumber (493232e0) * rename contactId to customId (ea2b79f9) * make unknownContact private (3e88723d) * change the way we test the unknownContact variable (db4814a3) * add missing space (17ce3114) * add some doc (5097ad6d) 2012-07-12 Renato Araujo Oliveira Filho * Implemented support for QQ protocol. (062a403a) 2012-07-12 Tiago Salem Herrmann * add double underscore to checkContact() to make it look like private (bcebf9dd) * add missing blank line (57a45b40) * remove unused import (1783813a) * - use the right icon - fix isVoicemailActive() method (1b89ac59) 2012-07-12 Gustavo Pichorim Boiko * Add the dependency to libindicate-qt-dev to the debian/control file (1e0e5ced) * Merge changes from mainline (62c35a1a) 2012-07-12 Olivier Tilloy * Catch potential errors when showing a snap decision. (2d6583f2) * Catch potential errors when showing a snap decision. (0ae2dac3) 2012-07-12 Tiago Salem Herrmann * reuse isVoicemailActive() from telephony-app.qml (76f3462a) 2012-07-12 Gustavo Pichorim Boiko * Update changelog but don't release, since the last commit was not fixing any individual bug. (4006aad2) * Acknowledge messages in the telepathy text channel once they are viewed. (ca5f4db8) 2012-07-11 Gustavo Pichorim Boiko * Show indicators when SMS messages arrive (31083858) 2012-07-11 Tiago Salem Herrmann * scroll messages view to end when a conversation is open (0bdc366a) 2012-07-11 Renato Araujo Oliveira Filho * releasing version 0.34 (435f0b28) * Fixed google talk protocol name used by folks. (cdcedb80) 2012-07-11 Tiago Salem Herrmann * use ContactWatcher on live call view (288155b1) * - rename contactIdFromPhoneNumber() to customIdFromPhoneNumber() - do not use ContactWatcher on MessageDelegate - fill customId in conversationlogmodel when adding an entry. - do not use Bindings, use property alias instead (613fe609) * implement a ContactWatcher and integrate into the messages view. (2afb9b76) 2012-07-11 Gustavo Pichorim Boiko * Register interest in text channels too. If the telephony-app is running, the text channels will be approved and their messages will be shown as unread there. If the application is not running, the approval of the channels will be held until the application is started. (cacfd775) 2012-07-11 Tiago Salem Herrmann * do not duplicate code. Call sendButton.clicked() instead. (3a76808b) * no need to use inverse logic in this line (3d1c5d07) * simplify isVoicemailActive() logic and fix coding style (277a6325) 2012-07-10 Renato Araujo Oliveira Filho * Fixed google talk protocol name used by folks. (50f13d20) 2012-07-10 Gustavo Pichorim Boiko * Acknowledge messages in the telepathy text channel once they are viewed. (ff93f85c) 2012-07-10 Tiago Salem Herrmann * send message if return key is pressed (f57b33ca) 2012-07-10 Gustavo Pichorim Boiko * releasing version 0.33 (716f8ea0) * Replace the phone icon in contact phone details by the message one. (b329a5a8) * Open the mailto: url externally when clicking in a mail address. (97b6db38) 2012-07-10 Tiago Salem Herrmann * add speaker button to the voicemail view. (b10f917f) * releasing version 0.32 (3a018ab9) * open telephony app in the live call view if it was answered from the phone (93b872a2) * use more consistent variable names in foreach loops (f1585cf3) * use Q_EMIT instead of emit (aa84da6d) * change another phone variable to phoneNumber (11debe57) 2012-07-09 Gustavo Pichorim Boiko * Replace the phone icon in contact phone details by the message one. It should be like that according to both the wireframe and visual design documents. (bf040acd) * Open the mailto: url externally when clicking in a mail address. (b46afa0b) * releasing version 0.31 (44cffc76) 2012-07-09 Tiago Salem Herrmann * use const in Q_FOREACH loops (b7f03345) 2012-07-09 Gustavo Pichorim Boiko * Add a telepathy channel observer to watch for new calls to be added to the call log model. (1059d4d6) 2012-07-09 Tiago Salem Herrmann * use Q_FOREACH instead of foreach (4a1088d2) 2012-07-09 Gustavo Pichorim Boiko * Add the icons for the "On Call" entry on left panel (86a960b6) 2012-07-09 Tiago Salem Herrmann * the right name is avatar, and not imageSource. This will avoid some warnings (fddc4b7c) * change variable name from phone to phoneNumber (7cd352e6) * fix setPhoneNumber signature (45f31268) * remove unused return (5f3374d8) * merge trunk (ef9ecc8c) * open telephony-app when a call is answered from the phone (5407bda0) 2012-07-09 Olivier Tilloy * Fix a typo. (e1c4c458) 2012-07-09 Gustavo Pichorim Boiko * Revert the icon name changing in the qml file, instead the assets were copied over. (3bc96c76) * Copy the assets instead of just reusing the same icons for two different purposes (09eaf3b5) * Fix the "On Call" icon. Designers decided to use the same icon as the one shown in the phone tab. (43c91d72) * Use isEmpty() instead of count() == 0 (bae5a29b) * Rename a variable from context1 to otherContext (784abb52) 2012-07-06 Tiago Salem Herrmann * fix warning about avatar (aedd92c4) 2012-07-06 Gustavo Pichorim Boiko * Never mark outgoing calls as missed (76742c87) * Do not remove the reference to the channel until it is invalidated on dbus. If all the references to a channel are removed from the observer, it is going to crash. (f7c3876d) * releasing version 0.30 (b375adcc) * Refresh the name detail when the contact changes. (127b4418) * Instead of setting the contactId to "", set the contact to null (26e68c5c) * Add a reference to the launchpad bug (b5411777) * Check the contact variable for null values before trying to use it (62f5500c) * Fix a typo. We actually need to set the contactId to "", not the contact. (39cf3722) * Use isEmpty() instead of count() == 0 (ac5d1aa1) 2012-07-05 Tiago Salem Herrmann * avoid warning of contact == null and check if the contact has the same id. (30df7582) 2012-07-06 Gustavo Pichorim Boiko * Clear the view's contact before closing it. (7dafa1ee) * Make sure changes to the newly added name detail are notified and saved. (9062678c) 2012-07-05 Gustavo Pichorim Boiko * If the contact doesn't have a name detail, create an empty one. (e431628d) * When android syncs the newly added contact to a google account, the local contact is removed and a new one is added with different IDs, so if the user are still in the contact view, we just close it to avoid saving to a removed contact. (5ab75b0c) * Refresh the name detail when the contact changes. (a43a0636) * Add a telepathy channel observer to watch for new calls to be added to the call log. This eliminates the need for reloading the whole call log from logger all the time. (8e9de9bf) * Wait for the hangup to finish before requesting the channel to be closed. This ensures the call state changes to ended before the channel is actually closed. (1c1b9f09) 2012-07-05 Tiago Salem Herrmann * remove unused bindings do not invalidate the model compare phone numbers if available (9819d85c) * use the android algorithm to compare phone numbers. This code was retrieved from the following link: http://androidxref.com/4.0.4/xref/frameworks/base/telephony/java/android/telephony/PhoneNumberUtils.java (e00a38d7) * do not update the messages model anymore, but use a proxy model instead. (fd9b1881) 2012-07-04 Gustavo Pichorim Boiko * releasing version 0.29 (f80e39c9) * If the user don't click the button (which is invisible now because of another bug) when typing a phone number, send the message to the number the user typed. (642a7cc9) * If the user don't click the button (which is invisible now because of another bug) when typing a phone number, send the message to the number the user typed. (bc73c1da) 2012-07-04 Florian Boucault * Imported latest version of Button widget from SDK. (081edd0e) * Asynchronously load avatars thus not blocking the whole application when loading. (f3eb8719) 2012-07-04 Tiago Salem Herrmann * releasing version 0.28 (fa5f8bd3) * do not compare phone numbers directly. Fix the case when an user types a phone number manually and a previous conversation with the same contact isn't displayed (7bac9085) * do not compare phone numbers directly. Fix the case when an user types a phone number manually and a previous conversation with the same contact isn't displayed (4503d9b0) * releasing version 0.27 (a4d823eb) * move clear() from abstractloggermodel to messagelogmodel to make the app show all the messages from a contact properly. (adf48515) * move clear() from abstractloggermodel to messagelogmodel to make the app show all the messages from a contact properly (8cdd4a89) * releasing version 0.26 (92df99df) * use threadId to group messages when available, for other cases compare phone numbers using comparePhoneNumbers() exposed by the android service. (18cd13bd) 2012-07-04 Gustavo Pichorim Boiko * Fix the type conversion from the previous Q_FOREACH commit (9eb302bd) * Use the cached count value in the for() loop condition. (fe00ff74) * Use Q_FOREACH instead of the indexed for() loop to optimize the code a bit. (158f2c27) 2012-07-04 Tiago Salem Herrmann * use comparePhoneNumbers() function instead of comparing strings directly (0ea14a60) * check if the dbus reply is valid before returning (5970c572) 2012-07-04 Gustavo Pichorim Boiko * Remove outdated comment about phone number comparing (4f42ec07) * Remove obsolete comments about the threadId in startChat(), and fix the function call from the contact details (it was using the wrong number of arguments). (344a8854) 2012-07-04 Tiago Salem Herrmann * fixes requested by reviewers (8c62105c) * remove outdated comments and deprecated code (a1d2fbd1) * remove fix not related to sms (26da8484) 2012-07-03 Tiago Salem Herrmann * merge trunk (0543cb5a) * more optimizations (fc510c07) 2012-07-03 Gustavo Pichorim Boiko * releasing version 0.25 (56e11763) * Use the android service to get the contact ID from a given number (96ba0e3d) 2012-07-03 Tiago Salem Herrmann * - many optimizations - set contact on startChat() - use Binding instead of manual changes (b6915bbb) * manually refresh the model (4edebfbd) * invalidate threadId and refetch log when necessary (07447415) 2012-07-03 Gustavo Pichorim Boiko * Do not reload the contact inside the messages view. All the functions calling this view are passing the contact correctly now. (433eb34f) * Export the customId as a role (fe3587d2) * Use the android service to get the contact ID from a given number (5d733cd2) * Fix the connect() signal/slot signatures (5f6a0832) * Fix the connect() signal/slot signatures (c4e516e2) * Set the phone number correctly for chatroom entities (63d0b68c) * The receiver entity is the one that has the thread id (2768589f) * Use the entity type to detect whether a message is incoming or outgoing (f23815ca) 2012-07-03 Tiago Salem Herrmann * initial fix for the sms threads (f99bd242) 2012-07-03 Gustavo Pichorim Boiko * releasing version 0.24 (51148ba3) * Fix contact details adding and editting (c5319b78) * Re-apply revisions 257 and 258 (58bced1e) * Merge back changes from mainline (ff7ab818) 2012-07-02 Renato Araujo Oliveira Filho * releasing version 0.23 (4564d98f) * Fixed address type translation from/to Folks. (09da4e8b) * Fixed address type translation from/to Folks. (46c667d3) 2012-07-02 Gustavo Pichorim Boiko * Make sure the address details are properly saved. (f94e0625) * Do not use the same signal to notify the property changes of detail fields. This causes QML to reload some bound data and save the wrong values to the items. (3fca0ead) * Revert the two previous commits that were pushed by accident to the main branch (b5156e70) * Do not remove the QObject representing the entry. It will get removed once the changes are saved. (26356c22) * Avoid emit the changed() signal when details are added/removed/modified on a contact. This triggers the contact entry to be reloaded in QML files and breaks the saving of details. (f2f68522) 2012-07-02 Florian Boucault * Added separating line at the bottom of the contact details when the call log is empty. (d4103bbc) 2012-07-02 Gustavo Pichorim Boiko * releasing version 0.22 (534b6c5c) * Use the android contact id to find the contact to be used to fill the info on entries. (7259868b) * Force a conversion to QStringList when setting list details as in QML JavaScript arrays of strings are mapped to QVariantList and not directly to QStringLists (14e40aca) * Document the reason why a QStringList property is declared as QVariant (4810813a) 2012-07-02 Renato Araujo Oliveira Filho * Implemented IM type translate. (aa8312c5) 2012-07-02 Gustavo Pichorim Boiko * Fix a couple of typos in the local id explanation (92b3bb8a) * Add documentation explaining the difference between all the different identifiers a contact has. (aef13768) * Emit the removed signal after the endRemoveRows() is called. (eb3a4b5d) 2012-07-02 Renato Araujo Oliveira Filho * Fixed missing semi-colon; (6c41568e) * Used contants instead of string for protocol name and type. (9761d5bd) 2012-07-02 Gustavo Pichorim Boiko * Remove a leftover debug comment (c69cb25a) * Set the in the log entry from the entity before filling the contact information to have a fallback value in case the contact is not found. (53c62a7b) * Store the customId of the given contact when iterating over the list of log events (2f999de9) * Clear also the customId when clearing the contact info from a log entry (8e32ec95) * Remove a leftover forward declaration of ContactManager (99c47158) * If the id is not in the contactId:phoneNumber format, print it together with the warning to help debugging. (6b4d5d85) 2012-07-02 Olivier Tilloy * Updated bzr ignore rules. (b767a20d) * Updated bzr ignore rules. (d467c0c1) * Fix a typo. (3f5e689e) 2012-06-29 Renato Araujo Oliveira Filho * Implemented IM type translate. (a988a9a0) 2012-06-29 Gustavo Pichorim Boiko * releasing version 0.21 (bb2934f9) * releasing version 0.20ubuntu1 (de883f6c) * Fix clearing the input field when a text message is sent. (3a07e9f1) * Force a conversion to QStringList when setting list details (e1e41ebe) * Fix clearing the input field when a text message is sent (b42cf80c) 2012-06-29 Tiago Salem Herrmann * releasing version 0.20 (6e07d5f2) * listen for speaker signals and update the ui accordingly (0249e487) * releasing version 0.19 (9f636d50) * do not anchor in callLogSecion, otherwise the detail chooser won't be shown (8fa1d412) 2012-06-29 Gustavo Pichorim Boiko * Use the android contact id to find the contact to be used to fill the info on entries (4dbc8669) 2012-06-29 Tiago Salem Herrmann * do not anchor in callLogSection, otherwise the detail chooser wont be shown (86544104) * update ui when speaker state is changed (c77a8310) 2012-06-29 Gustavo Pichorim Boiko * releasing version 0.18 (61cb9f99) * Update the messages model to work with latest logger changes (960682c4) 2012-06-29 Olivier Tilloy * Add missing debian/copyright. (cb41c828) * Add missing debian/copyright. (a50eee74) 2012-06-29 Florian Boucault * Merged trunk (0dcd2b9f) 2012-06-28 Gustavo Pichorim Boiko * Don't reset the contact when clicking twice in the messages view (fee87fb6) * Fix loading the sms messages to be compatible with latest logger (440c87f1) 2012-06-28 Florian Boucault * Messages view: improved visuals via better bubbles. (d3e9dcf5) * Contact details: improved visual design of header in edit mode. (3ef5a89f) * Added default avatars used as placeholders when no avatar is available. (801be4db) * Messages view: improved visuals via better bubbles. (e72c59bc) * Added default avatars used as placeholders when no avatar is available. (5cae7c7c) * Implemented conditional scrolling matching the behaviour of overlay scrollbars in GTK.é (610c0dcd) 2012-06-28 Gustavo Pichorim Boiko * releasing version 0.17newyork9 (6b67b9dc) * Fix the handling of log entries to be compatible with latest telepathy-logger (dbb44665) * Fix the handling of log entries to be compatible with latest telepathy-logger (696fb7ba) * releasing version 0.17newyork8 (ba31b9cd) * Do not load the dummy data from the binary application. (df58f307) 2012-06-28 Florian Boucault * Implemented 1-to-1 scrolling. (68fd0fb3) * Improved dragging behaviour. (ca27c2f6) * Thumb fully opaque when drag in progress. (dbda201b) * Animate thumb movement. (04703c5d) * More precise clicking areas for thumb. (57aecc91) 2012-06-28 Gustavo Pichorim Boiko * Do not load the dummy data from the binary application (b0a061d6) 2012-06-28 Florian Boucault * Do not make the thumb follow the mouse. (e1b3dc57) * Make thumb virtually wider to be more error tolerant. (9da6ee8e) * Removed animated slider movement (9f5a18e6) * Fixup layout a bit. Do not show even if there is content. (ba02660d) * Merged trunk (5952e384) * Merged from trunk. (5163c085) * Make thumb fully opaque only when close enough to the scrollbar. (b3988599) * Animate slider movement. (1f0c531a) * Fix dummy data according to the change in contacts model changes. (83eec4ad) 2012-06-28 Olivier Tilloy * Display the contact information in the active call view. (611ca0b4) 2012-06-28 Florian Boucault * Messages panel: compute the height of the list of messages properly. (020636f3) 2012-06-28 Olivier Tilloy * Temporarily remove the fallback picture as we don’t have the required asset yet. (d9476ffe) * Display the contact information in the active call view. (77fe7abd) * Revert the previous patch. The contacts model was re-written, and the patch isn’t valid any longer. (23d62587) * Merge the latest changes from master. (79bc238b) 2012-06-28 Florian Boucault * Clearer code. (1723115b) * Fix cases of thumb staying on or disappearing wrongly. (cfff9270) * Do not move the thumb when exactly clicking on it. (9c41f17a) * Contact details: improved visual design of header in edit mode. (498a4a96) * Messages panel: compute the height of the list of messages properly. (0da02c90) * Reverted changes to dummy messages. (e3f10e26) * Fixed dragging. (faa2c8e7) * Major code simplification. (85a6fec7) * Simplified code. (2f33c184) * Added doc. (f0d275db) * Added doc. (a6c3374e) * Added FIXME. (926f068e) * Simpler code. (47f70295) * Added doc. (6f4d7c32) * Simpler code. (972d615d) * Added doc. (0be67ff6) * Added doc. (947a815d) * Made methods private. (a8ee9cce) * Better code organisation (55dc3616) * Simpler code. (108181dc) * Simpler code. (6a7ca671) * Better doc (da7e1fbe) * Removed FIXME. (fcc49506) * Slightly clearer code. (9d82b077) * Added scrollbars to relevant screens. (cc06ea0d) * Fixed FIXME. (a96c6c45) * Use only one MouseArea in thumb (b9282fad) * Added dragging. (4bfab513) * thumb should appear when in thumb area (076dd18b) * updated FIXME (9a4c2600) * Merged from trunk. (7e699860) 2012-06-27 Florian Boucault * Messages view: implemented visual design. (888d5328) * Merged from trunk (34c169b8) * Contact detail view edit mode: better looking arrows for the combobox. (7fae0e0c) * Better clicking behaviour (882a6ffe) 2012-06-27 Gustavo Pichorim Boiko * releasing version 0.17newyork7 (96290ac1) * Make sure the correct tab is selected for all the views. (ca6a9470) 2012-06-27 Florian Boucault * Fixed clamping (3840cd29) 2012-06-27 Gustavo Pichorim Boiko * Make sure the correct tab is selected for all the views (07828744) 2012-06-27 Florian Boucault * Added FIXMEs. (65ac1c66) * Better positioning of the thumb. (426ac226) 2012-06-27 Gustavo Pichorim Boiko * releasing version 0.17newyork6 (7b22057f) * Replace the libdeclarative-contacts model by a brand new one to get rid of many bugs it had. (8e96ff14) 2012-06-27 Florian Boucault * Hide after timeout, not distance (e330a130) * Do not show if not enough items (7fc8acd9) * Merged from trunk (5935dfa6) * Merged from trunk (664630f7) * Keypad: activate call button upon pressing enter. (a5353ba3) 2012-06-27 Gustavo Pichorim Boiko * Fix adding new details to a contact (591948b7) 2012-06-27 Olivier Tilloy * Display the contact information in the active call view. (5966283a) 2012-06-27 Gustavo Pichorim Boiko * Remove unwanted debug (a93c3210) * Use QVariant instead of QStringList for properties as the javascript arrays don't map correctly to QStringLists (7e889898) 2012-06-27 Florian Boucault * Preliminary scrollbars. (370e48e4) 2012-06-27 Gustavo Pichorim Boiko * Fix loading the contact from command line arg (e630d5bf) * Make it possible to remove contact details (f9276693) 2012-06-27 Florian Boucault * Contact detail view edit mode: better looking arrows for the combobox. (0bd27be9) * Better looking input field. (4ae26331) 2012-06-27 Gustavo Pichorim Boiko * Fix the case of clicking Add a contact and then clicking cancel (88fd04d0) 2012-06-27 Florian Boucault * Keypad: activate call button upon pressing enter. (8238204b) 2012-06-27 Gustavo Pichorim Boiko * Merge latest source from mainline (a3230a1d) 2012-06-27 Florian Boucault * Merged from trunk (0a45c12e) * Contact details header: remove extra spaces in the contact name. (6180d51e) * Contacts panel: added visual design to section headers. (731c8025) * Contacts panel: added visual design to section headers. (f4e7fc75) * Contact details header: remove extra spaces in the contact name. (60c4e26e) * Merged from trunk (6d12a474) * More fixes. (b77ae3b4) 2012-06-26 Renato Araujo Oliveira Filho * releasing version 0.17newyork5 (8eb9232d) * Fixed contact edit types match (a36d7d15) * Remvoed debug messages. (d8d74377) 2012-06-26 Florian Boucault * Fix dummy data for the future. (8e698196) 2012-06-26 Gustavo Pichorim Boiko * Add the definitionName property to the contact detail (d6e49bf1) 2012-06-26 Renato Araujo Oliveira Filho * Fixed contact edit types match. (14f6f2c7) 2012-06-26 Florian Boucault * Make application stateful by keeping around the loaded views. (34a3be48) 2012-06-26 Gustavo Pichorim Boiko * Use contact.id instead of contact.guid.guid (fdf3a413) 2012-06-26 Florian Boucault * Make application stateful by keeping around the loaded views. (72ab1870) 2012-06-26 Gustavo Pichorim Boiko * Sort the contacts (2a977ff2) * Merge current changes from mainline (c8b30edf) * Display the newly added contact in the contact details view (b3307e99) 2012-06-26 Tiago Salem Herrmann * releasing version 0.17newyork4 (8852d300) * start timer as soon as the call becomes active (399091f5) * remove fake phone number from the keypad entry (5580689b) * fix speaker and mute buttons (2f0676a2) * use another approach (cb29a585) 2012-06-26 Gustavo Pichorim Boiko * Add support for removing the contact (b2af7fef) 2012-06-26 Florian Boucault * Added animation. (e8b2e31d) * Implemented drop down box visual design. (05de6912) 2012-06-26 Gustavo Pichorim Boiko * releasing version 0.17newyork3 (93aaf2c6) 2012-06-26 Tiago Salem Herrmann * show the right elapsed time in LiveCall view move StopWatch to Widgets directory (92809e71) 2012-06-26 Gustavo Pichorim Boiko * Replace the ContactLoader hack by a proper implementation in the new contact model (dfb801d3) 2012-06-26 Florian Boucault * Removed unused assets. (fb89186f) * Merged trunk (da876b04) * On call panel: implemented visual design. (8f011bea) 2012-06-26 Gustavo Pichorim Boiko * Add support for editing and creating new contacts (93f0fa74) 2012-06-26 Florian Boucault * Contact details edit mode: preliminary implementation of combobox visuals. (37a13138) * Restore focus fix: automatically give the focus to the text input in messages view. (401d09d7) * Merged trunk (4715b3d1) * On call panel: implemented visual design. (5c684aff) 2012-06-26 Tiago Salem Herrmann * merge trunk (c208bc37) 2012-06-26 ugo.riboni@canonical.com * Automatically give focus to message entry in conversations. (3008de86) 2012-06-26 Tiago Salem Herrmann * no need to force focus (c63c7c53) * remove fake phone number from the keypad entry force focus to the keypad entry widget (4f79591d) 2012-06-26 ugo.riboni@canonical.com * Automatically give focus to message entry in conversations. (698ee9ff) 2012-06-26 Florian Boucault * Contact details edit mode: preliminary implementation of combobox visuals. (abb14fa4) 2012-06-26 Tiago Salem Herrmann * fix speaker and mute buttons (77e56e0b) 2012-06-26 Florian Boucault * Contact details edit mode: implemented visuals. (7ddb74ba) 2012-06-26 Gustavo Pichorim Boiko * Use the new contact model in the contact search combo (44519b38) * Register all the detail types as creatable types (187b220f) 2012-06-26 Florian Boucault * Final arrow (65234d03) * Conversation view: make sure the focus is automatically set to the text entry. (30116fe0) * Merged trunk (d054f122) * Contact details: implemented visual design for call log. (977a49bf) * Added animations for going in and out of edit mode. (0fe945fb) 2012-06-26 Gustavo Pichorim Boiko * Add the online account details (2e191e67) * Add the address detail and simplify the loading of details (ce951214) 2012-06-26 Florian Boucault * Elide (9029d113) * Contact details edit mode: partly implemented combo box visuals (32924f32) * Missing import (f20b4390) * Contact details edit mode: - implemented visuals for header (misses expand/collapse behaviour) - implemented visuals for input fields (8bc75fa1) 2012-06-26 Tiago Salem Herrmann * releasing version 0.17newyork2 (cd4d9a4f) 2012-06-26 Gustavo Pichorim Boiko * Add missing copyright (007ea8ff) * Add the email details (7c86d3b3) 2012-06-26 Tiago Salem Herrmann * do not add outgoing as incoming messages (bef07f2e) 2012-06-26 Gustavo Pichorim Boiko * Add the phone number detail (a637b8f0) * Add the contexts property (ea92ba5b) * Add missing copyright headers (550aefdc) 2012-06-26 ugo.riboni@canonical.com * Expose a DBUS interface from the telephony app and put in it a method to show the messages tab (3080aaaa) 2012-06-25 Tiago Salem Herrmann * do not add outgoing as incoming messages in Message view. (f32bed18) * releasing version 0.17newyork1 (33d8396c) 2012-06-25 ugo.riboni@canonical.com * Fix a mistake in configuring and installing the dbus service file (95e1790c) 2012-06-25 Tiago Salem Herrmann * add ${CMAKE_CURRENT_SOURCE_DIR} to CMakeLists.txt (e8d5a989) 2012-06-25 Gustavo Pichorim Boiko * Handle the contact name detail (d4efc837) 2012-06-25 ugo.riboni@canonical.com * Expose a DBUS interface from the telephony app and put in it a method to show the messages tab (e6a3ed7d) 2012-06-25 Gustavo Pichorim Boiko * Add a contact model to the application to replace the one from libdeclarative-contacts. (13cda7a6) 2012-06-25 Florian Boucault * Implemented image messaging support. (1bb10930) * Default avatar when no photo. (508bbc0a) * Merged trunk (866ee09c) * Better center icon in notification panes. (2954befd) * Updated contact details iconset. (496b8a28) * Better center icon in notification panes. (f7279544) * Contact details: implemented visual design for call log. (161828cc) * Updated contact details iconset. (bd616d38) 2012-06-25 ugo.riboni@canonical.com * Put back an icon that was removed by mistake (b8ab1d30) * Put back an icon that was removed by mistake during the UI rewrite (f69bb020) * Correctly set parent model so that new contact won't show up blank. (41abc6b1) * New contact needs parent model or it will come up blank (d7e2ea52) 2012-06-24 ugo.riboni@canonical.com * Bring back contact name editing which was removed by mistake (8655c8e8) * Merge changes from trunk (5bde3ef3) 2012-06-22 Tiago Salem Herrmann * releasing version 0.17 (aadfb7e4) * add voicemail support (975f5eb1) * add voicemail support (ddee9bc4) 2012-06-22 Renato Araujo Oliveira Filho * Implemented call:// argument handler. (821e9e19) * Add support for handling multiple calls [merged] Mainline (60c2d842) * Used telaphyHelper to notify about applicatio ready. (60e6b49c) 2012-06-22 Gustavo Pichorim Boiko * releasing version 0.16 (4695fbf4) * Add support for handling multiple calls (aa22ebb8) 2012-06-22 ugo.riboni@canonical.com * Use snap decisions in the telephony approver (095894ac) 2012-06-22 Gustavo Pichorim Boiko * Implement swapping calls (c83459d1) * Make sure the livecall view doesn't close itself if there is a background call (47cedcc5) * Add a background call panel in the livecall view (ff354b14) 2012-06-22 ugo.riboni@canonical.com * Put back the editing feature for the contact name (93f82615) * Add debian dependencies (a06477fa) * Clean up the code (1a9b9356) 2012-06-21 Gustavo Pichorim Boiko * Created a singleton wrapper for QContactManager to be used in other places and add the contact info to the call entry (9a9139e2) 2012-06-21 Renato Araujo Oliveira Filho * Created applicationLoader object to notify when the application is ready to handle calls. (a58edd99) 2012-06-21 Tiago Salem Herrmann * delete later and avoid segfault, as the callEnded() signal is still being emitted (df6b923d) 2012-06-21 Renato Araujo Oliveira Filho * Check for application ready before call parseUrl. (2f329961) * Created signal "applicationReady" to inform when the application is fully loaded. (113e2c85) * Fixed variable name typo. (4b7389b3) * Fixed desktop file with correct mimetype. (d85ae193) * Implemented call:// argument handler. (6c540429) 2012-06-21 Gustavo Pichorim Boiko * Turn the keypad button into the "On Call" one when there is an active call (debaa73b) * Emit the callEnded() singnal in the right place (79e1d8eb) * When a call is ended, make sure we notify that the foreground and background calls are changed too (717e8786) * Fix the method name in the previous commit (ac1dca61) * Fix the bus name to connect the mute signal and make sure the channel is ready before calling the features (999d8a94) * Fix handling the mute changed signal (6c53c7ea) * Start adding support for handling multiple calls. For now just the CallManager is finished (6c06d852) 2012-06-21 ugo.riboni@canonical.com * Add support for accepting and rejecting the call via telepathy. Still with some debug messages and dead code. (4d845520) * Add c++ callbacks (d3b22df5) * Add c++ callbacks (b8277d59) * merge changes from trunk (c7ac7ac6) 2012-06-21 Gustavo Pichorim Boiko * There is no duration in the callEnded dialog anymore, so don't try to set it (3c5ac753) 2012-06-20 Gustavo Pichorim Boiko * Create an object to manage each of the calls to simplify the callmanager code and to allow for more flexibility. (48d98cac) * Reimplement support for searching messages. (1b12d0be) * Reimplement support for searching messages. (3a4a2891) 2012-06-20 Ugo Riboni * Temporary commit while i move stuff between VMs (b63f8031) 2012-06-19 Florian Boucault * Preliminary support for images. (5ca39774) * Added bubbles to conversation view. (9d56c7f9) * Merged trunk (9acba441) * Call log view: make sure the timestamp does not overflow. (13c55a55) * Merged trunk (36ff55e8) * Call log view: make sure the timestamp does not overflow. (4ba7ca64) * Refixed visuals for call log delegate changed for no reason when adding support for sms messages (bzr revision 178). (12a3b1ce) * Implemented visual design for keypad. (b8a972e0) * Implemented visual design for contact details screen. (342d7641) * Fixed recursive binding. (6622d23b) * Merged trunk (01ea041a) 2012-06-19 Gustavo Pichorim Boiko * Make sure the ufa account is always enabled and connected while the telephony-app is running (2af0b8bc) * Make sure the ufa account is always enabled and connected while the telephony-app is running (d4997dc5) 2012-06-19 Florian Boucault * Removed extra space in non edit mode. (95f1996f) * Implemented visual design for default panes. (3bc19c36) * Fixed fake call log's timestamps to become real Date objects. (96e223a5) * Fixed fake message models to reflect latest API changes. (c8a4b6d6) * Fixed up keypad sizing. (02e45725) * Implemented visual design for keypad. (442ce537) * Implemented visual design for default panes. (1d4a77e3) * ContactDetail: fairer header background. (625ea5b9) * ContactDetails: fixed background colors. (38949344) * ContactDetail: cells. (9c3ab983) * Removed redundant property. (aa2f5430) * ContactDetails: section headers. (e0f439c2) * ContactDetails: header height fix. (cf863460) * ContactDetails: footer (5377d7bd) * ContactDetails: non editable header (7526f3bd) * Background (b4587b98) * Fixed fake message models to reflect latest API changes. (ad508fb0) * Fixed fake call log's timestamps to become real Date objects. (e2da90c4) * Refixed visuals for call log delegate changed for no reason when adding support for sms messages (bzr revision 178). (f8268a72) * Reset application window size to its design. (bfb3cdce) * Reset application window size to its design. (7ed04a15) * Implemented visual design for live call view. (bd171d48) * Added final icon for "Add a new contact" button Added final icon for "New message" button (dd584bc8) * Changed pixel font size for x-large (05a1d5e2) 2012-06-18 Gustavo Pichorim Boiko * releasing version 0.15 (fe135fa4) * Make sure the models keep a reference to the logger's log manager to avoid reloading the logs from the android service. (53d7e23e) * Make sure the models keep a reference to the logger's log manager to avoid the creations of multiple instances of it. (fcb6f5f5) 2012-06-18 Florian Boucault * Implemented header and footer. (d3b8a76b) * Added final icon for "New message" button (434c68db) * If no label for location, do not anchor to it (cf8273bd) * Changed pixel font size for x-large (ab3efe9b) 2012-06-18 Gustavo Pichorim Boiko * releasing version 0.14 (97ff163e) * Add support for retrieving sms messages from android using telepathy-logger (0f7c9705) * Merge latest changes from mainline (e10cc779) * When changing the phone number in the message log model, invalidate previous requests (6ef967f7) 2012-06-18 Florian Boucault * Visuals implementation of the livecall screen. (ee3ff440) 2012-06-18 Ugo Riboni * Add the ability to edit contact detail sub types. Allow resizing the application window. (bdc8ac48) * Fix typo in previous commit that caused a syntax error (ed7bce3e) * Prevent a warning when items are added to the contacts list and are not parented (569eed67) * Clean up the way contacts are saved, always save them through the model (0f479f58) * Allow editing the subtypes of details (8e71b698) * Allow resizing the application (be634197) 2012-06-18 Gustavo Pichorim Boiko * Fix the logic for setting the avatar (e0e15170) * Use a fixed height in the call log delegate for now (af12ff56) * Fill the contact info on new messages (5985a78e) 2012-06-18 Florian Boucault * Added final icon for "Add a new contact" button (293cc8fc) 2012-06-15 Gustavo Pichorim Boiko * Sort the models, and make sure they are updated with events that happened while the application was opened. (ea16442d) * Merge current code from mainline (820a5d79) * Add a model to display the messages from one single conversation and rename the role from text to message (0494ce91) 2012-06-15 Florian Boucault * Added visuals to call log view. (98479831) * New ViewModel class encapsulating information about the views. Added visual feedback when selecting an item in the panels. (9c2843dc) * Added visuals to call log view. (8987eca9) 2012-06-15 Tiago Salem Herrmann * implement Hold, Mute and Speaker modes on LiveCall view and CallManager (76a52d71) 2012-06-15 Florian Boucault * New ViewModel class encapsulating information about the views. Added visual feedback when selecting an item in the panels. (e4f795e6) 2012-06-15 Tiago Salem Herrmann * merge trunk (8b6af8ed) 2012-06-15 Gustavo Pichorim Boiko * Use one shared instance of the ContactManager for all logger models, and fix the loading of text events (cb0b1ca7) 2012-06-15 Tiago Salem Herrmann * - emit onHoldChanged() when we get new call flags - create a new method callChannelToContactId() to avoid code duplication (6444cccd) 2012-06-15 Florian Boucault * Implement visual design for the 3 panels: calls, contacts and messages. (a880ed63) 2012-06-15 Gustavo Pichorim Boiko * More contact editing fixes (ea3a11ef) 2012-06-15 Florian Boucault * Removed bad code. (fa8fc8ef) * Merged trunk (65364082) * Tabs visual theming. (bbb06008) * ListItem: selection feedback closer to design. (54d424d2) * Added top left triangle visible upon selection. (80e947be) * Renamed id of ListItem. (0a2d91ba) * Simpler layouting. (e31239b2) 2012-06-15 Tiago Salem Herrmann * merge trunk (a5c9c109) * add support for Hold, Speaker and Mute (d582c098) 2012-06-15 Florian Boucault * ListItem to only contain generic widget. (4795f0a5) * Clarified ListItem separator story. (4800330d) 2012-06-15 Gustavo Pichorim Boiko * Refactor the call model so that part of the code can be shared with the sms models (d9ea27d8) 2012-06-15 Florian Boucault * Use text input hints. (ffdfb8de) * Fixed erroneous merge. (4b9a34df) * Merged trunk (808090d0) * Crude implementation of input field widget. (e0ba3678) * Merged trunk (d6d0532c) 2012-06-15 Ugo Riboni * Correctly save a new contact so that it's actually created (be05e94e) 2012-06-15 Florian Boucault * add libqt4-declarative-shaders as dependency (9db93f24) 2012-06-15 Ugo Riboni * Allow editing all the parts of a contact name (8851bb1f) 2012-06-15 Florian Boucault * Added text support and improved TabButton width computations. (25608f64) 2012-06-15 Ugo Riboni * Merge cosmetic change from trunk (a7ee04c7) 2012-06-15 Florian Boucault * Added a border to the left side of the detail view. (680d6831) 2012-06-15 Ugo Riboni * Adjust a little bit the layout of the contact detail to match recent widget changes (35d11aad) 2012-06-15 Florian Boucault * Added a border to the left side of the detail view. (6b184a59) 2012-06-15 Ugo Riboni * Merge changes from trunk (2098d58e) 2012-06-15 Florian Boucault * Added call log icons (b114f9e0) * Merged trunk (ad14062e) * Set default height for SearchEntry. (f20a82bd) * Merged trunk (e93e8465) * Merged trunk (c995dfcc) * Added background texture and right border to panels. (827cca3f) * Cleaned up button widgets and adapted to using SDK Button's API. (be349071) * Merged trunk (14bd1e89) 2012-06-15 Ugo Riboni * Hide the deleted details, since they won't be removed from the list when calling contact.removeDetail() (031b990b) * Use the "chevron" icon as default for action icons (0b38cc34) * Correctly calculate new detail button size and text (f116b088) * Implement UI for contact editing and adding. Actual functionality not fully working yet. (97da261b) 2012-06-14 Tiago Salem Herrmann * open keypad in a popup window during ongoing calls and send DTMF events to telepathy (62ccfcaa) * open keypad in a popup window during ongoing calls and send DTMF events to telepathy. (460fd115) 2012-06-14 Ugo Riboni * Hide the call log when we're editing (30ff7e86) * Extend the clickable area to the entire new detail text (7c3ed7f3) * Merge changes from trunk (ce4de01d) 2012-06-14 Florian Boucault * Fixed case when not running with qmlviewer broken because the runtime variable is undefined. (dc201f5c) * Fixed case when not running with qmlviewer broken because the runtime variable is undefined. (a1adeda0) 2012-06-14 Ugo Riboni * Remove incorrect parent assignement in TextContactDetailsEditor.qml (e0ffbf02) * Implement header editing but saving temporarily disabled until I get more info from design (a94d1233) * Clean up a bit the contact saving (04cb694d) * Display detail types properly (a0cb3cb2) * Merge remaining changes from trunk (a4919431) * Merge revision 160 from trunk (6c4772a6) * Merge revision 159 from trunk (6d7aa20e) * Merge from trunk up to revision 158 (0a0ae40a) * Merge rev 147 from trunk (98d714c1) * Adjust the position of the new detail type picker (still a bit wrong). Add button to add new contact (830cf665) * Explicitly clear the added details on cancel, so that the empty sections don't show up (7cad220d) 2012-06-14 Florian Boucault * Fix separator. (2123378d) * Improved visuals. Cleaned up implementation. (a51cde18) 2012-06-13 Florian Boucault * Messages panel cleanup. (14303958) * First implementation of list items for the panels. FIXME: uncomment 'hint:' when ready. (b578a2ff) * Made default window size to respect design. Removed unnecessary background. (606d2ec8) * Redefined font sizes according to design. (c390e014) * Added background texture and right border to panels. (1cb47d89) * Redefined font sizes according to design. (b21c476c) * Made default window size to respect design. Removed unnecessary background. (53f83c84) * Crude implementation of SearchEntry. (6cc3769b) * Added tabs icons and initial rough tabs implementation. (a7be47cc) * Cleaned up button widgets and adapted to using SDK Button's API. (4c18ea19) * Removed dummy model 'contactdetails' and references to it. Renamed dummy models: prefix with 'fake'. Adapted fakeCallLog and fakeContacts structures to match telepathy's models. Use dummy models conditionally. If 'runtime' is defined then we are using QML Viewer. (b264c46b) * DetailViewContact: fix initiating a chat by clicking on the action. (cfed5ff5) * Fix display of phone number in chat view. (9878da0d) * Unified the way to compute the name of a contact. (1e22d821) * Added FIXME to spot fake models. (549f2494) 2012-06-13 Tiago Salem Herrmann * releasing version 0.13 (1183616f) * add libqtgstreamer-dev as build-dep (6fbe71bb) 2012-06-13 Florian Boucault * Forgotten renaming to fakeContacts. (4381b1af) * DetailViewContact: fix initiating a chat by clicking on the action. (95de0974) * Fix display of phone number in chat view. (291560e6) * Synchronised the way to compute the name of a contact. (45ccddc8) * Renamed dummy models: prefix with 'fake'. Adapted fakeCallLog and fakeContacts structures to match telepathy's models. Use dummy models conditionally. If 'runtime' is defined then we are using QML Viewer. (ccc7f496) * Removed dead code. (fc6b3443) * Removed dummy model 'contactdetails' and references to it. (dc860e72) 2012-06-13 Tiago Salem Herrmann * releasing version 0.12 (aba82c03) * fix wrong build-dep name (9950528e) 2012-06-13 Ugo Riboni * Merge changes from trunk (0c34a88b) 2012-06-13 Tiago Salem Herrmann * releasing version 0.11 (25f73db9) * add libtelepathy-logger-qt4 as build-dep (83f2d543) * add qtmobility-dev as build-dep (2882d8ef) 2012-06-13 Ugo Riboni * Actually append the new detail type when chosen (38506ac9) 2012-06-13 Tiago Salem Herrmann * keep track of call status and end it when applicable (066137ca) 2012-06-13 Gustavo Pichorim Boiko * Update the changelog for the call log feature (758b9ec9) * Add support for showing the call log (223c3c0f) 2012-06-13 Ugo Riboni * Allow choosing the new contact detail type to add (ee595d1e) 2012-06-13 Florian Boucault * Handle error case upon account creation in TelepathyHelper. (c34aadec) 2012-06-13 Gustavo Pichorim Boiko * Remove a FIXME that was alraedy fixed (5e97c38d) 2012-06-13 Ugo Riboni * Move the detail types declarations to a separate js file (eb740074) * Fix the contact detail flickable so it can actually be used. Add the button for adding new detail types (2f9531b4) 2012-06-13 Gustavo Pichorim Boiko * Query only call events (4a0bdaba) 2012-06-13 Ugo Riboni * Fix bug on activating actions and deleting details (65e129c4) * Add the ability to create new details of the same type as existing ones (4744f57f) 2012-06-12 Gustavo Pichorim Boiko * Add a proxy model creatable from QML to allow using the call log for a specific contact in the contact details view. (24f99c9a) 2012-06-12 Tiago Salem Herrmann * keep track of the call state and end the call when applicable (1a6d335c) 2012-06-12 Gustavo Pichorim Boiko * Update the delegate to match the wireframes (c6671151) 2012-06-12 Ugo Riboni * Refactor the details list so that you don't have to declare the delegates again for each new detail type that you want to support (9a06a916) 2012-06-12 Florian Boucault * Handle error case upon account creation in TelepathyHelper. (7ebab466) 2012-06-12 Ugo Riboni * Implement detail removal (8dc9ac5b) * Move editors out to separate classes, add + icons for adding details, adjust layout to match design some more (b9657857) 2012-06-11 Gustavo Pichorim Boiko * Revert some unfinished changes (38fdcbd0) * Add a proxy model to filter the missed calls (174cddcd) * Initial call support (a84a41c2) 2012-06-11 Tiago Salem Herrmann * add initial call support (e3bfdb62) 2012-06-11 Ugo Riboni * Implement saving and editing by letting each delegate do it. Adjust visual style to match wireframes. (ab386908) 2012-06-11 Tiago Salem Herrmann * set path of dbus service file on build time (9b645ae4) 2012-06-11 Gustavo Pichorim Boiko * Fix the code to match the contact's phone number (7196d92b) 2012-06-11 Tiago Salem Herrmann * remove legacy code (64acffac) * change isChattingToContact to isTalkingToContact (e1c07120) 2012-06-11 Ugo Riboni * Move editing box to bottom of list. Shuffle some more editing stuff around. (e9af5d94) * Make contact details delegate more modular. Disable editing for now. Checkpoint commit only (67c57093) * Avoid lots of warnings in case some text fields are missing in the contact (b18e8735) 2012-06-08 Gustavo Pichorim Boiko * Add basic support for showing the call log from the telepathy logger (e56dab0f) 2012-06-08 Tiago Salem Herrmann * add initial call support (69bda38a) 2012-06-08 Gustavo Pichorim Boiko * Find the QtMobility contacts module and add it to the linking (c74a8690) 2012-06-08 Ugo Riboni * Add one more explicit dependency (56bba803) * Add initial edit implementation. Reformat the contact address like in Android's contact app. (03fe4b5e) * Prevent warnings when contact doesn't have some fields (309897d5) 2012-06-07 Ugo Riboni * Add more explicit build dependencies (f6f0f4c6) 2012-06-06 Ugo Riboni * Add explicit dependencies to some libraries (776ce41c) 2012-05-31 Tiago Salem Herrmann * call setRinging() when necessary (4cd4ac87) * move setRinging to a proper place (6abfb41c) * call setRinging() when necessary (5bbe6a68) 2012-05-30 Gustavo Pichorim Boiko * Fix the TelepathyQt includes in the approver (69b1bb7a) 2012-05-30 Tiago Salem Herrmann * add initial telepathy approver implementation (e47b0c20) * set the proper dbus reason when rejecting a call (1bc4edc4) * remove unused file (2ab2a244) * wait until the hangup operation return before closing the channel (5c32a1fe) * call hangup if we are dealing with a call channel (da822c60) * set approver as unique (f6257047) * - call claim() to close the channel when necessary. (64996316) 2012-05-29 Tiago Salem Herrmann * cosmetic changes to the header file (72218292) * fix wrong macro name (49f97e71) * add copyright text (f5cfb92a) * add an initial version of a telepathy approver. (dba50d81) 2012-05-25 Tiago Salem Herrmann * releasing version 0.10 (20f424a9) * add sms receiving support (5341772c) * do not create a new chat window if we have one already (b341fca2) * check if the current panel is the messages panel (7f67d857) 2012-05-25 Bill Filler * releasing version 0.9 (6c652f4b) * added support for icon in the desktop file so it shows something in launcher (aea253a7) 2012-05-24 Tiago Salem Herrmann * add sms receiving support (431d9f7e) 2012-05-24 Renato Araujo Oliveira Filho * releasing version 0.8 (041a5948) * Implemented single instance of telephony-app support. (fc8021cf) * Fixed bug when calling application more then once with the same contact key. (9a61c7a3) * Implemented support for single application in telephony app. (f80a33d8) 2012-05-24 Gustavo Pichorim Boiko * Add the qtsingleapplication dir to the include path (0431afb9) * Add the QtSingleApplication from Qt Solutions. (daaacd49) * releasing version 0.7 (efaef1f1) * QtMobility contacts plugin is not forwarding the child filterChanged() signal in UnionFilter and IntersectionFilter, so as a temporary workaround, we are emitting the signal ourselves. (51180b2d) * Set the preferred handler when requesting the text channel. This prevents the channel going to another client in case there are more telepathy clients installed. (b0d10fc3) * QtMobility contacts plugin is not forwarding the child filterChanged() signals in UnionFilter and IntersectionFilter, so as a temporary workaround, we are emitting the signal ourselves. (b2d99241) * Set the preferred handler when requesting the text channel. This prevents the channel going to another client in case there are more telepathy clients installed. (76a0ce82) 2012-05-24 Olivier Tilloy * Allow the application to be run uninstalled (from the development branch). (a6181d60) * releasing version 0.6 (21fb5357) * Fix displaying the avatar picture in the details view. (065b88c1) * Add missing "%u" field code to the Exec key to allow opening a given contact from the contacts lens. (5855940c) * Allow the application to be run uninstalled (from the development branch). (63254cf8) * Fix displaying the avatar picture in the details view. (2a79ac67) * Add missing "%u" field code to the Exec key to allow opening a given contact from the contacts lens. (29002107) 2012-05-23 Bill Filler * releasing version 0.5 (1ed0fcd5) * fix by Renato for missing avatar (2d6c00b2) 2012-05-23 Renato Araujo Oliveira Filho * Fixed contact avatar load. (4918999e) 2012-05-23 Gustavo Pichorim Boiko * releasing version 0.4.1 (7cc0894b) * Add a temporary solution to load the contact details when an id is passed as a command line argument. Also add some missing dependencies (c8ff1912) * Add some missing telepathy dependencies (7c6e46d4) * Add a temporary solution to load the contact details when an id is passed as a command line argument. The proper solution would be to have a signal in the ContactModel notifying when it has loaded the contacts. (674e6e7e) * releasing version 0.4 (543dd5c5) * Send messages using the telepathy infrastructure. (94ac0cca) * Log the errors that were asserts previously. (1fde2a1c) * Mark the uri as unused (80c9e1f4) * Use a better implementation for the singleton class and make its constructor private (7e2b3129) * Rename plugins to plugin to represent what it really is (65a89696) * Replace the Q_ASSERTS by if() conditions where it is applicable. Also make sure we have an "ufa" account by creating one if none is available (7de5af59) * Remove some useless qDebug (2a7b4fc1) * Replace foreach by Q_FOREACH (72b00796) * Add missing build dependencies (c43a2365) 2012-05-23 Olivier Tilloy * Add missing runtime dependencies to the packaging information: libdeclarative-contacts and libqtfolks1. (d9e4635a) 2012-05-23 Gustavo Pichorim Boiko * Add copyright to new cpp and header files (957b75bf) * Remove obsolete newMessageMinutes property (8aff4fa8) * Add moc_ files to .bzrignore (11caa3d7) 2012-05-23 Olivier Tilloy * Add missing runtime dependencies to the packaging information: libdeclarative-contacts and libqtfolks1. (bc7556eb) * Updated bzr ignore rules. (29d2fc6e) 2012-05-22 Gustavo Pichorim Boiko * Make sure the account is connected when the application starts (d0c39db1) * Make it possible to send messages to numbers not on the contact list. Also replace the dummydata model by an empty one (50cc77f4) * Make it possible to send text messages via telepathy. Also renamed the TelepathyManager to TelepathyHelper. (d1f105ae) 2012-05-22 Tiago Salem Herrmann * add initial telepathy manager class (c105e7c5) 2012-05-22 Renato Araujo Oliveira Filho * Register contact:// uri as supported uri for telephony app. (43045cf8) * Remove unnecessary command from debian/rules. (00695271) 2012-05-22 Tiago Salem Herrmann * fix headers, copyrights and make it compile. (5a1d5cdc) 2012-05-22 Gustavo Pichorim Boiko * Add a CMakeFile.txt to install the plugin (f1270f0e) 2012-05-22 Tiago Salem Herrmann * add initial plugin directory and a dummy telepathy channel handler class (11316400) 2012-05-22 Renato Araujo Oliveira Filho * Register contact:// uri as supported uri for telephony app. (3598a093) * Accept a command line parameter as a URI of the form "contact://CONTACT_KEY" and set a context property accordingly. (d9880151) 2012-05-22 Olivier Tilloy * Accept a command line parameter as a URI of the form "contact://CONTACT_KEY" and set a context property accordingly. (67c5f244) 2012-05-22 Gustavo Pichorim Boiko * Use the contact model from QtMobility (804d5efb) * Remove some FIXME entries that are already fixed (535df091) * Show the contact's phone number in the messages header (cf681350) * Install the ContactUtils folder (d276b8d2) 2012-05-22 Olivier Tilloy * Add TODO items. (3872b371) * Fix a typo in a comment. (a42279af) * Also add the default picture for contacts without an avatar in the details view. (c5c8107d) * Add a default picture for contacts without an avatar. (5bdfc0b5) * Merged the latest changes from master. (900b7df2) * Temporarily disable the telepathy folks backend as it doesn’t play well with QtFolks. (9d24a53c) * Replace the inclusion of C headers by their C++ counterparts. (2f0a285b) 2012-05-21 Olivier Tilloy * Temporarily disable the telepathy folks backend as it doesn’t play well with QtFolks. (249b29e2) 2012-05-18 Gustavo Pichorim Boiko * Call startChat using the contact item and also a phone number to make sure we are sending the message to the right number. (0885d882) * Change the search boxes to use the contact model from QtMobility (b04eeb45) * Move the TODO entries to a TODO file (3eee1935) * Filter the contact list by the terms in the search box (d31bc294) 2012-05-16 Gustavo Pichorim Boiko * releasing version 0.3 (63a54c21) 2012-05-15 Gustavo Pichorim Boiko * Make the contact list and the contact details use the models from QtMobility. The items pending implementation are listed in the README tasks (0b52bbb9) * Rename the application from telephony-prototype to telephony-app as it is not just a prototype anymore (c6df1807) * Fix the changelog and rename from prototype to app in some other missing places (af6ddab6) 2012-05-14 Gustavo Pichorim Boiko * Rename the application from telephony-prototype to telephony-app (36c33210) 2012-05-14 Olivier Tilloy * Wrap the telephony prototype in a binary application. The build system used is cmake. (92b83ec9) * Update packaging. (04dcbe81) 2012-05-11 Olivier Tilloy * Add install targets and allow running installed/uninstalled. (49dae22c) * Update the desktop file to run the executable, not qmlviewer. (a232f4e6) * Application to wrap the telephony prototype, along with CMake build file. (9c13e42b) 2012-05-09 Vesa Rautiainen * One missing png file added (empty image) and a link between message detail view contact image and contact details created (0f098837) * NewMessageHeader's search entry fixed (2b61dd18) * Review fixes. Unnecessary NewMessage.. files removed. (073ae210) 2012-05-08 Gustavo Pichorim Boiko * A missing comment from the review (10954ca2) * Some fixes from the review (ff56b30c) 2012-05-08 Vesa Rautiainen * [messages view] fixmes fixed. TextButton also changed to use default font sizes (eb9b6fd6) * [messages view] some fixmes fixed (c7ac5560) 2012-05-07 Tiago Salem Herrmann * add debian packaging + desktop file (c7a7856b) 2012-05-04 Gustavo Pichorim Boiko * Notes from the code review (760dc823) 2012-05-04 Olivier Tilloy * Refactor the contacts list. (8ee493c4) 2012-05-04 Renato Araujo Oliveira Filho * Fixed DropDownSearch bug. (e13608fe) 2012-05-04 Vesa Rautiainen * Messages view new message time stamps improved. (c8581d7e) 2012-05-04 Gustavo Pichorim Boiko * Show the dial pad (48cc55c3) 2012-05-04 Ugo Riboni * Fix a missing name on the new message button (f8063926) * Add the large icons for buttons in the panels (553a0094) * Add buttons to the messages and call log panels. Add click handler to button class (f90f26e5) * [button] Use TextCustom and allow setting font size as a property of the button (a6fe8f4e) * [button] remove some semicolons (61f576cd) 2012-05-04 Gustavo Pichorim Boiko * Clear the quick dial after calling (a8e5879e) * Fix the text/input visibility switching (208bcc5d) 2012-05-04 Vesa Rautiainen * The first version of New messages detail view added (9a6e8ebf) 2012-05-04 Ugo Riboni * [call log] Add a text label explaning what the quick dial box is (808933ae) * Fix a an error in contact details when a delegate is temporarily without parent (8fa17545) * Show contact when clicking on call log item (d9aecbcc) 2012-05-04 Gustavo Pichorim Boiko * Show the panes when the selecting tabs (850c6a8b) * Show the call ended pane after a call (3ceb3cb1) 2012-05-04 Ugo Riboni * Remove unused image (cf96e5e1) 2012-05-04 Renato Araujo Oliveira Filho * Implemented filter on MessagesPanel. (e881211b) * Fixed DrowpDownSearch size. (9162903a) * Fixed CallPanle layout. (51215f88) 2012-05-04 Florian Boucault * Refactored code to separate every view into its own directory. Widgets directory contains all common widgets. Most of them will likely go in the SDK UI toolkit. (d73ce3f4) 2012-05-04 Vesa Rautiainen * [messages view] messages view activation (1ab58de7) 2012-05-04 Gustavo Pichorim Boiko * Add some missing graphical assets and call the message dialog from the contact details. (b5ef9f92) 2012-05-04 Florian Boucault * Removed deprecated imports. (413094f2) 2012-05-03 Renato Araujo Oliveira Filho * Fix MessagePanel layout. (180afa09) * Removed contactSearchArea. (44b674ad) 2012-05-03 Gustavo Pichorim Boiko * Start a call to a contact from the contact details (411c05b0) 2012-05-03 Tim Peeters * generic button that has text and icon. No support for only text or icon in this class yet. (29d7a014) * add generic button (b9efb852) 2012-05-03 Renato Araujo Oliveira Filho * Fixed DrowpDownSearch listview size after clicked. (451192e5) 2012-05-03 Gustavo Pichorim Boiko * Change the search box to match the current implementation (bc67d3fd) 2012-05-03 Renato Araujo Oliveira Filho * Used FilterModel in ContactList and FavouriteContactList. (4c4fce66) 2012-05-03 Ugo Riboni * Remove useless state (d0e48ac4) * Fix code indentation (1e4c237c) * Remove debug code and useless comments (d64ed7f3) 2012-05-03 Gustavo Pichorim Boiko * Use the IconButton and set the editable mode on the contact details delegate (fd2e9a7c) * Load the view in the main qml (ac4d5ad4) * Add call log and the base implementation of the call panel. (ffdfe610) 2012-05-03 Ugo Riboni * Make contacts details work fine even when contact is null. Remove debug code. (2f40ab76) * dummydata: Use "" for non-existing icons (f5d32ebd) 2012-05-03 Renato Araujo Oliveira Filho * Fixed image source directory. (0c7b1664) * Created FilterModel element. (37b3933e) * Move images from artwork to assets. (2934be8c) 2012-05-03 Florian Boucault * Added cross-referencing between contacts and messages. (7f7493a8) 2012-05-03 Ugo Riboni * Make icons in search box more generic, add call icon when only numbers are typed (15be0821) 2012-05-03 Tim Peeters * no test for Button since its not on bzr yet. (8d85417f) * making a generic button (5285568c) * no hover needed on a tablet (f29d20b0) 2012-05-03 Vesa Rautiainen * [messages view] header information taken from contact property (ee3281a9) 2012-05-03 Olivier Tilloy * Display contact details when clicking a contact in the list. (8f764dff) 2012-05-03 Gustavo Pichorim Boiko * Make it possible to add and remove fields to the contact details. Also move the delegate to its own file to improve readability (9517e272) 2012-05-03 Florian Boucault * Added brand new MessagesPanel. (f71f9b5d) * Improved alignment of KeypadEntry. (198f8f80) 2012-05-03 Ugo Riboni * Refactor the start call from combobox code (3daff448) 2012-05-03 Vesa Rautiainen * [messages view] new message box added to footer. when sent new message is added to the model as well (bf8aa393) 2012-05-03 Ugo Riboni * Start a call when something is selected from the search combo (94af32c4) 2012-05-02 Ugo Riboni * End the call in live view when pushing the hang up button (9589ebbd) 2012-05-03 Gustavo Pichorim Boiko * Save the details to the model after they are changed (5ad0daf9) 2012-05-03 Tiago Salem Herrmann * use fullname for ids instead of abbreviations (4f5b7c1b) 2012-05-03 Gustavo Pichorim Boiko * Fill the contact details header using data from the contacts model and move the contact details model to the dummydata folder (c51e5d6d) 2012-05-03 Florian Boucault * Reverted wrong commit. (58dc856d) * Fixed KeypadEntry sizing. (61d9533a) * Better asset for Keypad erase button. (098d2710) 2012-05-03 Tiago Salem Herrmann * add missing id (b6607d7f) * merge trunk (9c3e3619) * load panels based on the selected tab (aad07f00) 2012-05-03 Tim Peeters * color on click works, still working on hover color without breaking color when unpressing (52bdcb60) 2012-05-03 Tiago Salem Herrmann * remove fixed height. Still needs to calculate height properly (aa4715c8) * add panel that aggregates the search box, contact list and favourite contact list (d2e31426) 2012-05-02 Gustavo Pichorim Boiko * Move the contact details header to a separate file (ff8895db) 2012-05-03 Florian Boucault * Removed useless spaces. (ce63b597) 2012-05-02 Gerry Boland * merge trunk (6bfb183d) * merge trunk (b5b758a1) 2012-05-03 Florian Boucault * New KeypadView (3b083550) * Added forgotten asset. (50af3f4d) 2012-05-02 Gerry Boland * Use better name for base class of right-hand panel (09f5f038) 2012-05-03 Florian Boucault * Added keycode to Keypad and KeypadButton. (930c3ef2) 2012-05-02 Gerry Boland * Add panel for the 3 cases: no contact selected, no address selected and phone call ended (fd5c1c10) * [assets] Add icons for right-panel, for 3 cases: no contact selected, no address selected, phone call ended (2c38dc5b) 2012-05-02 Renato Araujo Oliveira Filho * Implemented phone search. (775460b1) * Implement click support on DropDownSearch element. (f52c36a2) 2012-05-02 Olivier Tilloy * Factor out the contact delegate into its own component. (1b057059) * Add a list view to display the favourite contacts. (180e0849) 2012-05-03 Florian Boucault * New KeypadEntry (6cce04ee) 2012-05-02 Tim Peeters * update README with TODOs (41be38e3) 2012-05-03 Florian Boucault * Cleaner KeypadButton. (adfb1bf0) 2012-05-02 Olivier Tilloy * Add section headers to the contact list. (ab1e4f6d) 2012-05-02 Renato Araujo Oliveira Filho * Updated contacts search to use new contacts model. (4a3100ba) 2012-05-02 Tim Peeters * saved AbstractButton.qml (2b3a7d7c) 2012-05-02 Gustavo Pichorim Boiko * Finish implementing contact details (6bdea480) 2012-05-02 Ugo Riboni * Use dummy data model to populate the live call view (2f0a575c) * Adapt the buttons in live call view to the new IconButton component (5e8040eb) 2012-05-02 Tim Peeters * add ColoredButton (2b775c78) * move background color out of AbstractButton (4b51471b) 2012-05-03 Vesa Rautiainen * [messages view] font sizes fixed to use defined font values (b9730476) 2012-05-02 Tim Peeters * neatify buttons (4f831ede) 2012-05-02 Ugo Riboni * Make the default text color black (c3e2a784) * Actual timer on live call (b340f9a1) 2012-05-02 Tim Peeters * finish the buttons (827c40cf) 2012-05-02 Vesa Rautiainen * [messages view]background colors removed (32dcfeee) * [Messages view] Search box added and date typo from messages model fixed (050f0de2) * Messages view stuff added. (8edd5a55) 2012-05-02 Ugo Riboni * Revert the main file to its previous state, was overwritten by mistake (3f15270d) 2012-05-02 Olivier Tilloy * Add dummy contacts data and a rough contact list implementation. (c481ea0b) 2012-05-02 Tim Peeters * give the button a configurable background color again (fc7477c1) * fix tabs (0d807272) 2012-05-02 Ugo Riboni * More widgets, temporary buttons (f713e567) * First batch of components added to Live Call view (e3dba2bb) 2012-05-02 Gustavo Pichorim Boiko * Import a preliminar version of the contact details view (ca20f888) 2012-05-02 Renato Araujo Oliveira Filho * Created search test. (905eb5fd) * Created DropDownSearch component. (b00b50a5) * Updated ContactsModel, AbstractButton. (faa752a6) 2012-05-02 Florian Boucault * Set background color to right pane. (1e916d89) 2012-05-02 Gustavo Pichorim Boiko * Integrate the tabs (9de047e4) 2012-05-02 Florian Boucault * New CallButton. (7b3a1777) * Fix Keypad sizing. (9b975890) 2012-05-02 Olivier Tilloy * Initial Tabs implementation. (030967bd) 2012-05-02 Ugo Riboni * Rename the function fontSizeToPixels so it's nicer to import (80a4cb37) 2012-05-02 Tim Peeters * made AbstractButton an TextButton (cb265d5c) * AbstractButton and button test (d72719d6) * Button should be TextButton (33876bb8) 2012-05-02 Renato Araujo Oliveira Filho * Initial ContactsModel. (3f3467e3) 2012-05-02 Florian Boucault * First Keypad draft. (325d4a89) 2012-05-02 Tim Peeters * move Button.qml (fb8c64d2) * text button component (4e991bb4) 2012-05-02 Florian Boucault * Removed placeholder hello world. (6d9e8634) 2012-05-02 Renato Araujo Oliveira Filho * Uploaded fontUtils file. (f55d60d2) 2012-05-02 Gustavo Pichorim Boiko * Add a folder for assets (991e241f) * Add a qml project (4ff0476c) * Add a README file (5ea6958c) telephony-service-0.5.3/Lomiri/000077500000000000000000000000001455543255600164355ustar00rootroot00000000000000telephony-service-0.5.3/Lomiri/CMakeLists.txt000066400000000000000000000000341455543255600211720ustar00rootroot00000000000000add_subdirectory(Telephony) telephony-service-0.5.3/Lomiri/Telephony/000077500000000000000000000000001455543255600204045ustar00rootroot00000000000000telephony-service-0.5.3/Lomiri/Telephony/CMakeLists.txt000066400000000000000000000013621455543255600231460ustar00rootroot00000000000000# QML plugin set(plugin_SRCS presencerequest.cpp participantsmodel.cpp components.cpp ) include_directories( ${TP_QT5_INCLUDE_DIRS} ${CMAKE_SOURCE_DIR}/libtelephonyservice ) add_library(telephonyservice-qml SHARED ${plugin_SRCS} ${plugin_HDRS}) target_link_libraries(telephonyservice-qml ${TP_QT5_LIBRARIES} telephonyservice Qt5::Contacts Qt5::Core Qt5::Qml Qt5::Quick ) enable_coverage(telephonyservice-qml) configure_file(qmldir.in ${CMAKE_CURRENT_BINARY_DIR}/qmldir) set(PLUGIN_DIR ${QT_INSTALL_QML}/Lomiri/Telephony) install(TARGETS telephonyservice-qml DESTINATION ${PLUGIN_DIR}) install(FILES ${CMAKE_CURRENT_BINARY_DIR}/qmldir DESTINATION ${PLUGIN_DIR}) add_subdirectory(PhoneNumber) telephony-service-0.5.3/Lomiri/Telephony/PhoneNumber/000077500000000000000000000000001455543255600226265ustar00rootroot00000000000000telephony-service-0.5.3/Lomiri/Telephony/PhoneNumber/CMakeLists.txt000066400000000000000000000025361455543255600253740ustar00rootroot00000000000000set(PHONENUMBER_SRCS phonenumber.h phonenumber.cpp phoneutils.h phoneutils.cpp asyoutypeformatter.h asyoutypeformatter.cpp ) set(PHONENUMBER_QMLS PhoneNumberField.qml PhoneNumberInput.qml PhoneNumber.js qmldir ) include_directories( ${LibPhoneNumber_INCLUDE_DIRS} ) add_library(telephonyservice-phonenumber-qml SHARED ${PHONENUMBER_SRCS}) target_link_libraries(telephonyservice-phonenumber-qml ${LibPhoneNumber_LIBRARIES} Qt5::Core Qt5::Qml Qt5::Quick ) set(PHONENUMBER_PLUGIN_DIR ${QT_INSTALL_QML}/Lomiri/Telephony/PhoneNumber) install(TARGETS telephonyservice-phonenumber-qml DESTINATION ${PHONENUMBER_PLUGIN_DIR}) install(FILES ${PHONENUMBER_QMLS} DESTINATION ${PHONENUMBER_PLUGIN_DIR}) # make the files visible on qtcreator add_custom_target(phonenumber_QMlFiles ALL SOURCES ${PHONENUMBER_QMLS}) #copy qml files to build dir to make it possible to run without install add_custom_target(copy_qml) foreach(QML_FILE ${PHONENUMBER_QMLS}) add_custom_command(TARGET copy_qml PRE_BUILD COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/${QML_FILE} ${CMAKE_CURRENT_BINARY_DIR}/) endforeach() if (NOT ${CMAKE_CURRENT_BINARY_DIR} STREQUAL ${CMAKE_CURRENT_SOURCE_DIR}) add_dependencies(telephonyservice-phonenumber-qml copy_qml) endif() telephony-service-0.5.3/Lomiri/Telephony/PhoneNumber/PhoneNumber.js000066400000000000000000000023651455543255600254140ustar00rootroot00000000000000/* * Copyright (C) 2014 Canonical, Ltd. * * Authors: * Renato Araujo Oliveira Filho * * This file is part of telephony-service. * * telephony-service is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; version 3. * * telephony-service 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 . */ function onTextChange(phoneNumberItem, formatter) { if (phoneNumberItem.text === "") { return; } if (phoneNumberItem.autoFormat && (!phoneNumberItem.updateOnlyWhenFocused || phoneNumberItem.activeFocus)) { var result = formatter.formatText(phoneNumberItem.text, phoneNumberItem.cursorPosition) if (result.text !== phoneNumberItem.text) { phoneNumberItem.text = result.text phoneNumberItem.cursorPosition = result.pos } } } telephony-service-0.5.3/Lomiri/Telephony/PhoneNumber/PhoneNumberField.qml000066400000000000000000000045671455543255600265430ustar00rootroot00000000000000/* * Copyright (C) 2014 Canonical, Ltd. * * Authors: * Renato Araujo Oliveira Filho * * This file is part of telephony-service. * * telephony-service is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; version 3. * * telephony-service 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 . */ import QtQuick 2.4 import Lomiri.Components 1.3 import Lomiri.Telephony.PhoneNumber 0.1 import "PhoneNumber.js" as PhoneNumberJS /*! \qmltype PhoneNumberField \inqmlmodule Lomiri.Telephony.PhoneNumber 0.1 \brief The PhoneNumberField element allows to format a phone-number as you type The PhoneNumberInput uses TextField as base class \b{This component is under heavy development.} Example: \qml Item { PhoneNumberField { autoFormat: true defaultRegion: "US" } \endqml */ TextField { id: phoneNumberField /*! Specifies whether the phone number format is enabled or not. \qmlproperty bool autoFormat */ property alias autoFormat: formatter.enabled /*! Two letters region code to be used if the number does not provide a country code (+). These must be provided using ISO 3166-1 two-letter country-code format. The list of the codes can be found here: http://www.iso.org/iso/english_country_names_and_code_elements \qmlproperty string defaultRegion */ property alias defaultRegion: formatter.defaultRegionCode /*! Specifies if the autoformat should format the text even if the field does not have focus Default value is true \qmlproperty bool autoFormat */ property bool updateOnlyWhenFocused: true AsYouTypeFormatter { id: formatter } onTextChanged: PhoneNumberJS.onTextChange(phoneNumberField, formatter) onAutoFormatChanged: { if (autoFormat) { PhoneNumberJS.onTextChange(phoneNumberField, formatter) } } } telephony-service-0.5.3/Lomiri/Telephony/PhoneNumber/PhoneNumberInput.qml000066400000000000000000000046041455543255600266070ustar00rootroot00000000000000/* * Copyright (C) 2014 Canonical, Ltd. * * Authors: * Renato Araujo Oliveira Filho * * This file is part of telephony-service. * * telephony-service is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; version 3. * * telephony-service 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 . */ import QtQuick 2.4 import Lomiri.Components 1.3 import Lomiri.Telephony.PhoneNumber 0.1 import "PhoneNumber.js" as PhoneNumberJS /*! \qmltype PhoneNumberInput \inqmlmodule Lomiri.Telephony.PhoneNumberPhoneNumberJS 0.1 \brief The PhoneNumberField element allows to format a phone-number as you type The PhoneNumberInput uses TextInput as base class \b{This component is under heavy development.} Example: \qml Item { PhoneNumberInput { autoFormat: true defaultRegion: "US" } \endqml */ TextInput { id: phoneNumberInput /*! Specifies whether the phone number format is enabled or not. \qmlproperty bool autoFormat */ property alias autoFormat: formatter.enabled /*! Two letters region code to be used if the number does not provide a country code (+). These must be provided using ISO 3166-1 two-letter country-code format. The list of the codes can be found here: http://www.iso.org/iso/english_country_names_and_code_elements \qmlproperty string defaultRegion */ property alias defaultRegion: formatter.defaultRegionCode /*! Specifies if the autoformat should format the text even if the field does not have focus Default value is true \qmlproperty bool autoFormat */ property bool updateOnlyWhenFocused: true AsYouTypeFormatter { id: formatter } onTextChanged: PhoneNumberJS.onTextChange(phoneNumberInput, formatter) onAutoFormatChanged: { if (autoFormat) { PhoneNumberJS.onTextChange(phoneNumberInput, formatter) } } } telephony-service-0.5.3/Lomiri/Telephony/PhoneNumber/asyoutypeformatter.cpp000066400000000000000000000142251455543255600273240ustar00rootroot00000000000000/* * Copyright (C) 2014 Canonical, Ltd. * * Authors: * Renato Araujo Oliveira Filho * * This file is part of telephony-service. * * telephony-service is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; version 3. * * telephony-service 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 . */ #include #include #include #include "asyoutypeformatter.h" #include #include /*! \qmltype AsYouTypeFormatter \inqmlmodule Lomiri.Telephony.PhoneNumber 0.1 \brief The AsYouTypeFormatter is a helper class to format phone numbers \b{This component is under heavy development.} Example: \qml Item { TextField { id: field AsYouTypeFormatter { id: formatter text: field.text } Binding { target: field property: "text" value: formatter.formattedText } } } \endqml */ AsYouTypeFormatter::AsYouTypeFormatter(QObject *parent) : QObject(parent), m_formatter(0), m_defaultRegionCode(i18n::phonenumbers::RegionCode::GetUnknown()), m_enabled(true) { connect(this, SIGNAL(enabledChanged()), SLOT(updateFormattedText()), Qt::QueuedConnection); connect(this, SIGNAL(textChanged()), SLOT(updateFormattedText()), Qt::QueuedConnection); connect(this, SIGNAL(defaultRegionCodeChanged()), SLOT(updateFormattedText()), Qt::QueuedConnection); } AsYouTypeFormatter::~AsYouTypeFormatter() { if (m_formatter) { delete m_formatter; m_formatter = 0; } } /*! Specifies whether the phone number format is enabled or not. \qmlproperty bool enabled */ bool AsYouTypeFormatter::enabled() const { return m_enabled; } void AsYouTypeFormatter::setEnabled(bool enabled) { if (m_enabled != enabled) { m_enabled = enabled; Q_EMIT enabledChanged(); } } /*! Two letters region code to be used if the number does not provide a country code (+). These must be provided using ISO 3166-1 two-letter country-code format. The list of the codes can be found here: http://www.iso.org/iso/english_country_names_and_code_elements \qmlproperty string defaultRegion */ QString AsYouTypeFormatter::defaultRegionCode() const { return m_defaultRegionCode; } void AsYouTypeFormatter::setDefaultRegionCode(const QString ®ionCode) { if (m_defaultRegionCode != regionCode) { m_defaultRegionCode = regionCode; delete m_formatter; m_formatter = 0; Q_EMIT defaultRegionCodeChanged(); } } /*! Input text to be formatted \qmlproperty string text */ QString AsYouTypeFormatter::text() const { return m_rawText; } void AsYouTypeFormatter::setText(const QString &text) { if (m_rawText != text) { m_rawText = text; Q_EMIT textChanged(); } } /*! Otuput text in a phone number format if the input text is valid. \qmlproperty string formattedText */ QString AsYouTypeFormatter::formattedText() const { return m_formattedText; } /*! Clear the input and formatted text */ void AsYouTypeFormatter::clear() { m_rawText.clear(); m_formatter->Clear(); Q_EMIT textChanged(); } QVariantMap AsYouTypeFormatter::formatText(const QString &text, int cursorPosition) { int newPosition = cursorPosition; QString newText = formatTextImpl(text, &newPosition); QVariantMap result; result.insert("text", newText); result.insert("pos", newPosition); return result; } void AsYouTypeFormatter::updateFormattedText() { if (!m_enabled) { if (!m_formattedText.isEmpty()) { m_formattedText.clear(); Q_EMIT formattedTextChanged(); } return; } if (m_rawText == m_formattedText) { return; } QString newFormattedText = formatTextImpl(m_rawText, 0); if (newFormattedText != m_formattedText) { m_formattedText = newFormattedText; Q_EMIT formattedTextChanged(); } } QString AsYouTypeFormatter::formatTextImpl(const QString &text, int *cursorPosition) { static QList validChars; if (validChars.isEmpty()) { validChars << QChar(',') << QChar(';') << QChar('+') << QChar('*') << QChar('#'); } // if the number starts with "+" we will use unknown region otherwise we will use the default region QString numberRegion = m_defaultRegionCode; if (m_rawText.startsWith("+")) { numberRegion = i18n::phonenumbers::RegionCode::GetUnknown(); } // destroy current formatter if it was created with a different region if (m_formatter && (m_formatterRegionCode != numberRegion)) { delete m_formatter; m_formatter = 0; } if (m_formatter) { m_formatter->Clear(); } else { i18n::phonenumbers::PhoneNumberUtil *phonenumberUtil = i18n::phonenumbers::PhoneNumberUtil::GetInstance(); m_formatter = phonenumberUtil->GetAsYouTypeFormatter(numberRegion.toStdString()); m_formatterRegionCode = numberRegion; } std::string result; for(int i = 0, iMax = text.size(); i < iMax; i++) { bool savePosition = (cursorPosition != 0) && (i < *cursorPosition); QChar iChar = text.at(i); if (iChar.isDigit() || validChars.contains(iChar)) { if (savePosition) { m_formatter->InputDigitAndRememberPosition(iChar.toLatin1(), &result); } else { m_formatter->InputDigit(iChar.toLatin1(), &result); } } } if (cursorPosition) { *cursorPosition = m_formatter->GetRememberedPosition(); } return QString::fromStdString(result); } telephony-service-0.5.3/Lomiri/Telephony/PhoneNumber/asyoutypeformatter.h000066400000000000000000000044621455543255600267730ustar00rootroot00000000000000/* * Copyright (C) 2014 Canonical, Ltd. * * Authors: * Renato Araujo Oliveira Filho * * This file is part of telephony-service. * * telephony-service is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; version 3. * * telephony-service 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 . */ #ifndef TELEPHONY_PHONENUMBER_ASYOUTYPEFORMATTER_H #define TELEPHONY_PHONENUMBER_ASYOUTYPEFORMATTER_H #include #include #include class AsYouTypeFormatter : public QObject { Q_OBJECT Q_PROPERTY(bool enabled READ enabled WRITE setEnabled NOTIFY enabledChanged) Q_PROPERTY(QString defaultRegionCode READ defaultRegionCode WRITE setDefaultRegionCode NOTIFY defaultRegionCodeChanged) Q_PROPERTY(QString text READ text WRITE setText NOTIFY textChanged) Q_PROPERTY(QString formattedText READ formattedText NOTIFY formattedTextChanged) public: AsYouTypeFormatter(QObject *parent = 0); ~AsYouTypeFormatter(); bool enabled() const; void setEnabled(bool enabled); QString defaultRegionCode() const; void setDefaultRegionCode(const QString ®ionCode); QString text() const; void setText(const QString &text); QString formattedText() const; public Q_SLOTS: void clear(); QVariantMap formatText(const QString &text, int cursorPosition); private Q_SLOTS: void updateFormattedText(); Q_SIGNALS: void textChanged(); void formattedTextChanged(); void defaultRegionCodeChanged(); void enabledChanged(); private: i18n::phonenumbers::AsYouTypeFormatter *m_formatter; bool m_enabled; QString m_rawText; QString m_formattedText; QString m_defaultRegionCode; QString m_formatterRegionCode; QString formatTextImpl(const QString &text, int *cursorPosition); }; #endif //TELEPHONY_PHONENUMBER_ASYOUTYPEFORMATTER_H telephony-service-0.5.3/Lomiri/Telephony/PhoneNumber/phonenumber.cpp000066400000000000000000000026711455543255600256620ustar00rootroot00000000000000/* * Copyright (C) 2012 Canonical, Ltd. * * Authors: * Tiago Salem Herrmann * Gustavo Pichorim Boiko * * This file is part of telephony-service. * * telephony-service is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; version 3. * * telephony-service 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 . */ #include "phonenumber.h" #include "asyoutypeformatter.h" #include "phoneutils.h" #include #include static QObject *phoneUtilsProvider(QQmlEngine *engine, QJSEngine *scriptEngine) { Q_UNUSED(engine) Q_UNUSED(scriptEngine) return new PhoneUtils; } void PhoneNumber::initializeEngine(QQmlEngine *engine, const char *uri) { Q_UNUSED(engine); Q_UNUSED(uri); } void PhoneNumber::registerTypes(const char *uri) { // @uri Telephony.PhoneNumber qmlRegisterType(uri, 0, 1, "AsYouTypeFormatter"); qmlRegisterSingletonType(uri, 0, 1, "PhoneUtils", phoneUtilsProvider); } telephony-service-0.5.3/Lomiri/Telephony/PhoneNumber/phonenumber.h000066400000000000000000000022171455543255600253230ustar00rootroot00000000000000/* * Copyright (C) 2014 Canonical, Ltd. * * Authors: * Renato Araujo Oliveira Filho * * This file is part of telephony-service. * * telephony-service is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; version 3. * * telephony-service 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 . */ #ifndef TELEPHONY_PHONENUMBER_H #define TELEPHONY_PHONENUMBER_H #include #include class PhoneNumber : public QQmlExtensionPlugin { Q_OBJECT Q_PLUGIN_METADATA(IID "org.qt-project.Qt.QQmlExtensionInterface") public: void initializeEngine(QQmlEngine *engine, const char *uri); void registerTypes(const char *uri); }; #endif //TELEPHONY_PHONENUMBER_H telephony-service-0.5.3/Lomiri/Telephony/PhoneNumber/phoneutils.cpp000066400000000000000000000102431455543255600255240ustar00rootroot00000000000000/* * Copyright (C) 2014 Canonical, Ltd. * * Authors: * Renato Araujo Oliveira Filho * * This file is part of telephony-service. * * telephony-service is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; version 3. * * telephony-service 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 . */ #include "phoneutils.h" #include #include #include #include PhoneUtils::PhoneUtils(QObject *parent) : QObject(parent) { } PhoneUtils::~PhoneUtils() { } QString PhoneUtils::defaultRegion() const { QString locale = QLocale::system().name(); return locale.split("_").last(); } /*! From a locale code, e.g FR, retrieve the phone prefix: "33" If regionCode is empty, fallback to US */ int PhoneUtils::getCountryCodePrefix(const QString ®ionCode) const { QString locale = regionCode.isEmpty() ? QString("US") : regionCode; return i18n::phonenumbers::PhoneNumberUtil::GetInstance()->GetCountryCodeForRegion(locale.toStdString()); } QString PhoneUtils::format(const QString &phoneNumber, const QString &defaultRegion, PhoneUtils::PhoneNumberFormat format) { std::string formattedNumber; i18n::phonenumbers::PhoneNumberUtil::PhoneNumberFormat pNFormat; if (format == PhoneUtils::Auto) { // skip if it is a special number or a command if (phoneNumber.startsWith("#") || phoneNumber.startsWith("*")) { return phoneNumber; } else if (phoneNumber.startsWith("+")) { pNFormat = i18n::phonenumbers::PhoneNumberUtil::INTERNATIONAL; } else { pNFormat = i18n::phonenumbers::PhoneNumberUtil::NATIONAL; } } else { pNFormat = static_cast(format); } i18n::phonenumbers::PhoneNumberUtil *phonenumberUtil = i18n::phonenumbers::PhoneNumberUtil::GetInstance(); i18n::phonenumbers::PhoneNumber number; i18n::phonenumbers::PhoneNumberUtil::ErrorType error; QString region = defaultRegion.isEmpty() ? this->defaultRegion() : defaultRegion; error = phonenumberUtil->Parse(phoneNumber.toStdString(), region.toStdString(), &number); switch(error) { case i18n::phonenumbers::PhoneNumberUtil::INVALID_COUNTRY_CODE_ERROR: qWarning() << "Invalid country code for:" << phoneNumber; return ""; case i18n::phonenumbers::PhoneNumberUtil::NOT_A_NUMBER: qWarning() << "The phone number is not a valid number:" << phoneNumber; return ""; case i18n::phonenumbers::PhoneNumberUtil::TOO_SHORT_AFTER_IDD: case i18n::phonenumbers::PhoneNumberUtil::TOO_SHORT_NSN: case i18n::phonenumbers::PhoneNumberUtil::TOO_LONG_NSN: qWarning() << "Invalid phone number" << phoneNumber; return ""; default: break; } phonenumberUtil->Format(number, pNFormat, &formattedNumber); return QString::fromStdString(formattedNumber); } bool PhoneUtils::event(QEvent *event) { if (event->type() == QEvent::LocaleChange) { Q_EMIT defaultRegionChanged(); } return QObject::event(event); } QStringList PhoneUtils::matchInText(const QString& text, const QString &defaultRegion) { if (text.isEmpty()) { return QStringList(); } QString region = defaultRegion.isEmpty() ? this->defaultRegion() : defaultRegion; QStringList matches; i18n::phonenumbers::PhoneNumberMatcher matcher(text.toStdString(), region.toStdString()); if (matcher.HasNext()) { i18n::phonenumbers::PhoneNumberMatch match; matcher.Next(&match); matches.append(QString::fromStdString(match.raw_string())); } return matches; } telephony-service-0.5.3/Lomiri/Telephony/PhoneNumber/phoneutils.h000066400000000000000000000031641455543255600251750ustar00rootroot00000000000000/* * Copyright (C) 2014 Canonical, Ltd. * * Authors: * Renato Araujo Oliveira Filho * * This file is part of telephony-service. * * telephony-service is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; version 3. * * telephony-service 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 . */ #ifndef TELEPHONY_PHONEUTILS_H #define TELEPHONY_PHONEUTILS_H #include #include class PhoneUtils : public QObject { Q_OBJECT Q_PROPERTY(QString defaultRegion READ defaultRegion NOTIFY defaultRegionChanged) public: enum PhoneNumberFormat { E164 = 0, International, National, RFC3966, Auto }; PhoneUtils(QObject *parent = 0); ~PhoneUtils(); QString defaultRegion() const; Q_INVOKABLE QStringList matchInText(const QString& text, const QString &defaultRegion = QString()); Q_INVOKABLE QString format(const QString &phoneNumber, const QString &defaultRegion = QString(), PhoneNumberFormat format = Auto); Q_INVOKABLE int getCountryCodePrefix(const QString ®ionCode) const; virtual bool event(QEvent *event); Q_SIGNALS: void defaultRegionChanged(); }; #endif telephony-service-0.5.3/Lomiri/Telephony/PhoneNumber/qmldir000066400000000000000000000003061455543255600240400ustar00rootroot00000000000000module Lomiri.Telephony.PhoneNumber plugin telephonyservice-phonenumber-qml PhoneNumberField 0.1 PhoneNumberField.qml PhoneNumberInput 0.1 PhoneNumberInput.qml internal PhoneNumber PhoneNumber.js telephony-service-0.5.3/Lomiri/Telephony/components.cpp000066400000000000000000000077571455543255600233150ustar00rootroot00000000000000/* * Copyright (C) 2012-2016 Canonical, Ltd. * * Authors: * Tiago Salem Herrmann * Gustavo Pichorim Boiko * * This file is part of telephony-service. * * telephony-service is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; version 3. * * telephony-service 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 . */ #include "components.h" #include "config.h" #include "telepathyhelper.h" #include "callentry.h" #include "chatentry.h" #include "callmanager.h" #include "callnotification.h" #include "ussdmanager.h" #include "channelobserver.h" #include "chatmanager.h" #include "contactwatcher.h" #include "greetercontacts.h" #include "participant.h" #include "phoneutils.h" #include "presencerequest.h" #include "protocolmanager.h" #include "accountentry.h" #include "accountlist.h" #include "audiooutput.h" #include "participantsmodel.h" #include #include #include void Components::initializeEngine(QQmlEngine *engine, const char *uri) { Q_ASSERT(engine); Q_UNUSED(uri); // if we allow config.h to look for stuff in uninstalled paths, applications // that use this plugin will try to look for protocol info in the wrong path // and fail to find them. canRunUninstalled = false; // Initialize telepathy types Tp::registerTypes(); //Tp::enableDebug(true); Tp::enableWarnings(true); mRootContext = engine->rootContext(); Q_ASSERT(mRootContext); mRootContext->setContextProperty("telepathyHelper", TelepathyHelper::instance()); mRootContext->setContextProperty("chatManager", ChatManager::instance()); mRootContext->setContextProperty("callManager", CallManager::instance()); mRootContext->setContextProperty("greeter", GreeterContacts::instance()); mRootContext->setContextProperty("callNotification", CallNotification::instance()); mRootContext->setContextProperty("protocolManager", ProtocolManager::instance()); } void Components::registerTypes(const char *uri) { // @uri Telephony qmlRegisterUncreatableType(uri, 0, 1, "TelepathyHelper", "This is a singleton helper class"); qmlRegisterUncreatableType(uri, 0, 1, "CallEntry", "Objects of this type are created in CallManager and made available to QML for usage"); qmlRegisterUncreatableType(uri, 0, 1, "ContactChatState", "Objects of this type are created in ChatEntry and made available to QML"); qmlRegisterUncreatableType(uri, 0, 1, "AudioOutput", "Objects of this type are created in CallEntry and made available to QML for usage"); qmlRegisterUncreatableType(uri, 0, 1, "AccountEntry", "Objects of this type are created in TelepathyHelper and made available to QML"); qmlRegisterUncreatableType(uri, 0, 1, "USSDManager", "Objects of this type are created in AccountEntry and made available to QML"); qmlRegisterUncreatableType(uri, 0, 1, "Protocol", "Objects of this type are created in ProtocolManager and made available to QML"); qmlRegisterUncreatableType(uri, 0, 1, "AccountList", "Objects of this type are created in TelepathyHelper and made available to QML"); qmlRegisterType(uri, 0, 1, "ChatEntry"); qmlRegisterType(uri, 0, 1, "ContactWatcher"); qmlRegisterType(uri, 0, 1, "Participant"); qmlRegisterType(uri, 0, 1, "PresenceRequest"); qmlRegisterType(uri, 0, 1, "ParticipantsModel"); qmlRegisterType(uri, 0, 1, "PhoneUtils"); } telephony-service-0.5.3/Lomiri/Telephony/components.h000066400000000000000000000023121455543255600227400ustar00rootroot00000000000000/* * Copyright (C) 2012 Canonical, Ltd. * * Authors: * Tiago Salem Herrmann * Gustavo Pichorim Boiko * * This file is part of telephony-service. * * telephony-service is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; version 3. * * telephony-service 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 . */ #ifndef COMPONENTS_H #define COMPONENTS_H #include #include class Components : public QQmlExtensionPlugin { Q_OBJECT Q_PLUGIN_METADATA(IID "org.qt-project.Qt.QQmlExtensionInterface") public: void initializeEngine(QQmlEngine *engine, const char *uri); void registerTypes(const char *uri); private: QQmlContext *mRootContext; }; #endif // COMPONENTS_H telephony-service-0.5.3/Lomiri/Telephony/conversationfeeditem.cpp000066400000000000000000000044541455543255600253340ustar00rootroot00000000000000/* * Copyright (C) 2012 Canonical, Ltd. * * Authors: * Gustavo Pichorim Boiko * * This file is part of telephony-service. * * telephony-service is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; version 3. * * telephony-service 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 . */ #include "conversationfeeditem.h" ConversationFeedItem::ConversationFeedItem(QObject *parent) : QObject(parent), mIncoming(false), mNewItem(false) { } ConversationFeedItem::~ConversationFeedItem() { } QString ConversationFeedItem::contactId() const { return mContactId; } void ConversationFeedItem::setContactId(const QString &value) { mContactId = value; Q_EMIT contactIdChanged(); } QString ConversationFeedItem::contactAlias() const { return mContactAlias; } void ConversationFeedItem::setContactAlias(const QString &value) { mContactAlias = value; Q_EMIT contactAliasChanged(); } QUrl ConversationFeedItem::contactAvatar() const { return mContactAvatar; } void ConversationFeedItem::setContactAvatar(const QUrl &value) { mContactAvatar = value; Q_EMIT contactAvatarChanged(); } bool ConversationFeedItem::incoming() const { return mIncoming; } void ConversationFeedItem::setIncoming(bool value) { mIncoming = value; Q_EMIT incomingChanged(); } bool ConversationFeedItem::newItem() const { return mNewItem; } void ConversationFeedItem::setNewItem(bool value) { mNewItem = value; Q_EMIT newItemChanged(); } QDateTime ConversationFeedItem::timestamp() const { return mTimestamp; } void ConversationFeedItem::setTimestamp(const QDateTime &value) { mTimestamp = value; Q_EMIT timestampChanged(); } void ConversationFeedItem::setPhoneNumber(const QString &phone) { mPhoneNumber = phone; Q_EMIT phoneNumberChanged(); } QString ConversationFeedItem::phoneNumber() { return mPhoneNumber; } telephony-service-0.5.3/Lomiri/Telephony/conversationfeeditem.h000066400000000000000000000051411455543255600247730ustar00rootroot00000000000000/* * Copyright (C) 2012 Canonical, Ltd. * * Authors: * Gustavo Pichorim Boiko * * This file is part of telephony-service. * * telephony-service is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; version 3. * * telephony-service 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 . */ #ifndef CONVERSATIONFEEDITEM_H #define CONVERSATIONFEEDITEM_H #include #include #include class ConversationFeedItem : public QObject { Q_OBJECT Q_PROPERTY(QString contactId READ contactId WRITE setContactId NOTIFY contactIdChanged) Q_PROPERTY(QString contactAlias READ contactAlias WRITE setContactAlias NOTIFY contactAliasChanged) Q_PROPERTY(QUrl contactAvatar READ contactAvatar WRITE setContactAvatar NOTIFY contactAvatarChanged) Q_PROPERTY(bool incoming READ incoming WRITE setIncoming NOTIFY incomingChanged) Q_PROPERTY(bool newItem READ newItem WRITE setNewItem NOTIFY newItemChanged) Q_PROPERTY(QDateTime timestamp READ timestamp WRITE setTimestamp NOTIFY timestampChanged) Q_PROPERTY(QString phoneNumber READ phoneNumber WRITE setPhoneNumber NOTIFY phoneNumberChanged) public: explicit ConversationFeedItem(QObject *parent = 0); virtual ~ConversationFeedItem(); QString contactId() const; void setContactId(const QString &value); QString contactAlias() const; void setContactAlias(const QString &value); QUrl contactAvatar() const; void setContactAvatar(const QUrl &value); bool incoming() const; void setIncoming(bool value); bool newItem() const; void setNewItem(bool value); QDateTime timestamp() const; void setTimestamp(const QDateTime &value); void setPhoneNumber(const QString &phone); QString phoneNumber(); Q_SIGNALS: void contactIdChanged(); void contactAliasChanged(); void contactAvatarChanged(); void incomingChanged(); void newItemChanged(); void timestampChanged(); void phoneNumberChanged(); private: QString mContactId; QString mContactAlias; QUrl mContactAvatar; bool mIncoming; bool mNewItem; QDateTime mTimestamp; QString mPhoneNumber; }; #endif // CONVERSATIONFEEDITEM_H telephony-service-0.5.3/Lomiri/Telephony/participantsmodel.cpp000066400000000000000000000146021455543255600246350ustar00rootroot00000000000000/* * Copyright (C) 2013-2017 Canonical, Ltd. * * Authors: * Gustavo Pichorim Boiko * Tiago Salem Herrmann * * This file is part of telephony-service. * * telephony-service is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; version 3. * * telephony-service 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 . */ #include "participantsmodel.h" #include #include Q_DECLARE_METATYPE(Participant) ParticipantsModel::ParticipantsModel(QObject *parent) : QAbstractListModel(parent), mWaitingForQml(false), mCanFetchMore(true), mChatEntry(NULL) { qRegisterMetaType(); mRoles[AliasRole] = "alias"; mRoles[IdentifierRole] = "identifier"; mRoles[RolesRole] = "roles"; mRoles[StateRole] = "state"; connect(this, SIGNAL(rowsInserted(QModelIndex,int,int)), this, SIGNAL(countChanged())); connect(this, SIGNAL(rowsRemoved(QModelIndex,int,int)), this, SIGNAL(countChanged())); connect(this, SIGNAL(modelReset()), this, SIGNAL(countChanged())); } bool ParticipantsModel::canFetchMore(const QModelIndex &parent) const { return !mParticipantsCache.isEmpty(); } ParticipantsModel::~ParticipantsModel() { } void ParticipantsModel::fetchMore(const QModelIndex &parent) { if (parent.isValid() ) { return; } int max = 14; while (max >= 0 && !mParticipantsCache.isEmpty()) { addParticipant(mParticipantsCache.takeFirst()); max--; } if (mParticipantsCache.isEmpty()) { mCanFetchMore = false; Q_EMIT canFetchMoreChanged(); } } int ParticipantsModel::rowCount(const QModelIndex &parent) const { if (parent.isValid()) { return 0; } return mParticipants.count(); } QHash ParticipantsModel::roleNames() const { return mRoles; } void ParticipantsModel::addParticipantCache(Participant *participant) { int pos = positionForItem(participant->identifier(), true); mParticipantsCache.insert(pos, participant); } void ParticipantsModel::addParticipant(Participant *participant) { int pos = positionForItem(participant->identifier()); beginInsertRows(QModelIndex(), pos, pos); mParticipants.insert(pos, participant); endInsertRows(); } void ParticipantsModel::removeParticipant(Participant *participant) { int pos = mParticipants.indexOf(participant); if (pos >= 0) { beginRemoveRows(QModelIndex(), pos, pos); mParticipants.removeAt(pos); endRemoveRows(); } pos = mParticipantsCache.indexOf(participant); if (pos >= 0) { mParticipantsCache.removeAt(pos); } } QVariant ParticipantsModel::data(const QModelIndex &index, int role) const { if (!index.isValid() || index.row() < 0 || index.row() >= rowCount()) { return QVariant(); } switch (role) { case IdentifierRole: return mParticipants[index.row()]->identifier(); break; case AliasRole: return mParticipants[index.row()]->alias(); break; case StateRole: return 0; break; case RolesRole: return mParticipants[index.row()]->roles(); break; } return QVariant(); } bool ParticipantsModel::lessThan(const QString &left, const QString &right) const { // this method will push participant with names starting with non-letter // characters to the end of the list if (left.isEmpty() || right.isEmpty()) { return false; } if (left.at(0).isLetter() && right.at(0).isLetter()) { return left.localeAwareCompare(right) < 0; } if (!left.at(0).isLetter() && right.at(0).isLetter()) { return false; } if (left.at(0).isLetter() && !right.at(0).isLetter()) { return true; } return false; } int ParticipantsModel::positionForItem(const QString &item, bool cache) const { // do a binary search for the item position on the list int lowerBound = 0; int upperBound = cache ? mParticipantsCache.count() - 1 : rowCount() - 1; if (upperBound < 0) { return 0; } while (true) { int pos = (upperBound + lowerBound) / 2; const QString posItem = cache ? mParticipantsCache[pos]->identifier() : index(pos).data(IdentifierRole).toString(); if (lowerBound == pos) { if (lessThan(item, posItem)) { return pos; } } if (lessThan(posItem, item)) { lowerBound = pos + 1; // its in the upper if (lowerBound > upperBound) { return pos += 1; } } else if (lowerBound > upperBound) { return pos; } else { upperBound = pos - 1; // its in the lower } } } void ParticipantsModel::classBegin() { mWaitingForQml = true; } void ParticipantsModel::componentComplete() { mWaitingForQml = false; } QVariant ParticipantsModel::get(int row) const { QVariantMap data; QModelIndex idx = index(row, 0); if (idx.isValid()) { QHash roles = roleNames(); Q_FOREACH(int role, roles.keys()) { data.insert(roles[role], idx.data(role)); } } return data; } ChatEntry* ParticipantsModel::chatEntry() const { return mChatEntry; } void ParticipantsModel::setChatEntry(ChatEntry *entry) { if (mChatEntry == entry) { return; } ChatEntry *previousChatEntry = mChatEntry; mChatEntry = entry; if (!entry) { return; } if (previousChatEntry) { previousChatEntry->disconnect(this); } connect(mChatEntry, SIGNAL(participantAdded(Participant *)), SLOT(addParticipant(Participant *))); connect(mChatEntry, SIGNAL(participantRemoved(Participant *)), SLOT(removeParticipant(Participant *))); Q_FOREACH(Participant *participant, mChatEntry->allParticipants()) { addParticipantCache(participant); } fetchMore(); mCanFetchMore = !mParticipantsCache.isEmpty(); Q_EMIT canFetchMoreChanged(); Q_EMIT chatEntryChanged(); } telephony-service-0.5.3/Lomiri/Telephony/participantsmodel.h000066400000000000000000000054361455543255600243070ustar00rootroot00000000000000/* * Copyright (C) 2013-2017 Canonical, Ltd. * * Authors: * Gustavo Pichorim Boiko * Tiago Salem Herrmann * * This file is part of telephony-service. * * telephony-service is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; version 3. * * telephony-service 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 . */ #ifndef PARTICIPANTSMODEL_H #define PARTICIPANTSMODEL_H #include "chatentry.h" #include #include #include #include class Participant; class ParticipantsModel : public QAbstractListModel, public QQmlParserStatus { Q_OBJECT Q_INTERFACES(QQmlParserStatus) Q_PROPERTY(int count READ rowCount NOTIFY countChanged) Q_PROPERTY(bool canFetchMore READ canFetchMore NOTIFY canFetchMoreChanged) Q_PROPERTY(ChatEntry* chatEntry READ chatEntry WRITE setChatEntry NOTIFY chatEntryChanged) Q_ENUMS(Role) public: enum Role { IdentifierRole = Qt::UserRole, AliasRole, RolesRole, StateRole }; explicit ParticipantsModel(QObject *parent = 0); ~ParticipantsModel(); Q_INVOKABLE virtual bool canFetchMore(const QModelIndex &parent = QModelIndex()) const; Q_INVOKABLE virtual void fetchMore(const QModelIndex &parent = QModelIndex()); virtual QHash roleNames() const; virtual QVariant data(const QModelIndex &index, int role) const; int rowCount(const QModelIndex &parent = QModelIndex()) const; Q_INVOKABLE virtual QVariant get(int row) const; Q_INVOKABLE void setChatEntry(ChatEntry *entry); ChatEntry* chatEntry() const; void addParticipantCache(Participant *participant); void classBegin(); void componentComplete(); private Q_SLOTS: void addParticipant(Participant *participant); void removeParticipant(Participant *participant); Q_SIGNALS: void countChanged(); void canFetchMoreChanged(); void chatEntryChanged(); protected: bool lessThan(const QString &left, const QString &right) const; int positionForItem(const QString &item, bool cache = false) const; private: QHash mRoles; QList mParticipants; bool mWaitingForQml; bool mCanFetchMore; ChatEntry *mChatEntry; QList mParticipantsCache; }; #endif // PARTICIPANTSMODEL_H telephony-service-0.5.3/Lomiri/Telephony/presencerequest.cpp000066400000000000000000000076231455543255600243350ustar00rootroot00000000000000/* * Copyright (C) 2015 Canonical, Ltd. * * Authors: * Tiago Salem Herrmann * * This file is part of telephony-service. * * telephony-service is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; version 3. * * telephony-service 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 . */ #include "presencerequest.h" #include "telepathyhelper.h" #include #include PresenceRequest::PresenceRequest(QObject *parent) : QObject(parent), mCompleted(false) { connect(TelepathyHelper::instance(), SIGNAL(accountAdded(AccountEntry*)), SLOT(onAccountAdded(AccountEntry*))); } PresenceRequest::~PresenceRequest() { } void PresenceRequest::onAccountAdded(AccountEntry *account) { if (account->accountId() == mAccountId) { startPresenceRequest(); } } void PresenceRequest::startPresenceRequest() { if (!mCompleted || mIdentifier.isEmpty() || mAccountId.isEmpty()) { // component is not ready yet return; } AccountEntry *account = TelepathyHelper::instance()->accountForId(mAccountId); if (!account || account->account()->connection().isNull()) { mContact.reset(); onPresenceChanged(); return; } Tp::ContactManagerPtr contactManager = account->account()->connection()->contactManager(); Tp::PendingContacts *pendingContact = contactManager->contactsForIdentifiers(QStringList() << mIdentifier); connect(pendingContact, SIGNAL(finished(Tp::PendingOperation*)), SLOT(onContactReceived(Tp::PendingOperation*))); } void PresenceRequest::onContactReceived(Tp::PendingOperation *op) { Tp::PendingContacts *contacts = qobject_cast(op); if (!contacts || !contacts->isValid() || contacts->contacts().length() != 1) { return; } if (mContact) { disconnect(mContact.data(), 0,0,0); } mContact = contacts->contacts()[0]; connect(mContact.data(), SIGNAL(presenceChanged(const Tp::Presence &)), this, SLOT(onPresenceChanged())); onPresenceChanged(); } void PresenceRequest::onPresenceChanged() { Q_EMIT statusChanged(); Q_EMIT statusMessageChanged(); Q_EMIT typeChanged(); } uint PresenceRequest::type() const { if (mContact) { return mContact->presence().type(); } return PresenceTypeUnset; } QString PresenceRequest::status() const { if (mContact) { return mContact->presence().status(); } return QString(); } QString PresenceRequest::statusMessage() const { if (mContact) { return mContact->presence().statusMessage(); } return QString(); } QString PresenceRequest::accountId() const { return mAccountId; } QString PresenceRequest::identifier() const { return mIdentifier; } void PresenceRequest::setIdentifier(const QString &identifier) { if (mIdentifier == identifier) { return; } mIdentifier = identifier; startPresenceRequest(); } void PresenceRequest::setAccountId(const QString &accountId) { if (mAccountId == accountId) { return; } mAccountId = accountId; AccountEntry *account = TelepathyHelper::instance()->accountForId(accountId); if (!account) { return; } connect(account, SIGNAL(connectedChanged()), this, SLOT(startPresenceRequest())); startPresenceRequest(); } void PresenceRequest::classBegin() { } void PresenceRequest::componentComplete() { mCompleted = true; startPresenceRequest(); } telephony-service-0.5.3/Lomiri/Telephony/presencerequest.h000066400000000000000000000056641455543255600240050ustar00rootroot00000000000000/* * Copyright (C) 2015 Canonical, Ltd. * * Authors: * Tiago Salem Herrmann * * This file is part of telephony-service. * * telephony-service is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; version 3. * * telephony-service 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 . */ #ifndef PRESENCEREQUEST_H #define PRESENCEREQUEST_H #include #include #include #include #include "accountentry.h" class PresenceRequest : public QObject, public QQmlParserStatus { Q_OBJECT Q_INTERFACES(QQmlParserStatus) Q_ENUMS(PresenceType) Q_PROPERTY(QString identifier READ identifier WRITE setIdentifier NOTIFY identifierChanged) Q_PROPERTY(QString accountId READ accountId WRITE setAccountId NOTIFY accountIdChanged) Q_PROPERTY(QString status READ status NOTIFY statusChanged) Q_PROPERTY(QString statusMessage READ statusMessage NOTIFY statusMessageChanged) Q_PROPERTY(uint type READ type NOTIFY typeChanged) public: enum PresenceType { PresenceTypeUnset = Tp::ConnectionPresenceTypeUnset, PresenceTypeOffline = Tp::ConnectionPresenceTypeOffline, PresenceTypeAvailable = Tp::ConnectionPresenceTypeAvailable, PresenceTypeAway = Tp::ConnectionPresenceTypeAway, PresenceTypeExtendedAway = Tp::ConnectionPresenceTypeExtendedAway, PresenceTypeHidden = Tp::ConnectionPresenceTypeHidden, PresenceTypeBusy = Tp::ConnectionPresenceTypeBusy, PresenceTypeUnknown = Tp::ConnectionPresenceTypeUnknown, PresenceTypeError = Tp::ConnectionPresenceTypeError }; explicit PresenceRequest(QObject *parent = 0); ~PresenceRequest(); uint type() const; QString status() const; QString statusMessage() const; QString identifier() const; void setIdentifier(const QString &identifier); QString accountId() const; void setAccountId(const QString &accountId); void classBegin(); void componentComplete(); private Q_SLOTS: void startPresenceRequest(); void onPresenceChanged(); void onContactReceived(Tp::PendingOperation *op); void onAccountAdded(AccountEntry *account); Q_SIGNALS: void identifierChanged(); void accountIdChanged(); void statusChanged(); void statusMessageChanged(); void typeChanged(); private: void startSearching(); QString mIdentifier; QString mAccountId; bool mCompleted; Tp::ContactPtr mContact; }; #endif // PRESENCEREQUEST_H telephony-service-0.5.3/Lomiri/Telephony/qmldir.in000066400000000000000000000000641455543255600222240ustar00rootroot00000000000000module Lomiri.Telephony plugin telephonyservice-qml telephony-service-0.5.3/README.md000066400000000000000000000010351455543255600164600ustar00rootroot00000000000000# Telephony Service Telephony Service is a backend dispatcher service for various mobile phone related operations. ## i18n: Translating Telephony Service into your Language You can easily contribute to the localization of this project (i.e. the translation into your language) by visiting (and signing up with) the Hosted Weblate service: https://hosted.weblate.org/projects/lomiri/telephony-service The localization platform of this project is sponsored by Hosted Weblate via their free hosting plan for Libre and Open Source Projects. telephony-service-0.5.3/TODO000066400000000000000000000016001455543255600156670ustar00rootroot00000000000000General items - Formatting of phone numbers - Check how to import/export potfiles from the ts one - Add an automated test to check if features are getting correctly exported by AccountEntry - Implement unit test for launching external app from indicator. Contact integration items: - Fix contact search when names contain accentuated characters Qt5 porting pendencies: - The count overlay on tabs needs to be reimplemented. - ModelSectionCounter is not working, needs investigation. - Check for code on tests that was disabled in the porting to Qt5 - Check how to test QContactId stuff Sharing code between the approver and the QML plugin: - the TelepathyHelper class needs to be adapted to be able to be used in both places - Change the ChannelObserver and the ChannelApprover code to allow using from both places. Handler - Move app monitoring to from TextHandler to ApplicationUtils telephony-service-0.5.3/approver/000077500000000000000000000000001455543255600170405ustar00rootroot00000000000000telephony-service-0.5.3/approver/50-com.lomiri.TelephonyServiceApprover.pkla000066400000000000000000000002671455543255600272160ustar00rootroot00000000000000[Allow LightDM to read TelephonyServiceApprover fields] Identity=unix-user:lightdm Action=com.lomiri.TelephonyServiceApprover.ReadAny ResultAny=no ResultInactive=yes ResultActive=yes telephony-service-0.5.3/approver/Approver.xml000066400000000000000000000031101455543255600213530ustar00rootroot00000000000000 An interface to the phone approver application. telephony-service-0.5.3/approver/CMakeLists.txt000066400000000000000000000035651455543255600216110ustar00rootroot00000000000000 set(qt_SRCS approver.cpp approverdbus.cpp ) set(approver_SRCS main.cpp ${qt_SRCS}) qt5_add_dbus_adaptor(approver_SRCS Approver.xml approver/approverdbus.h ApproverDBus) include_directories( ${TP_QT5_INCLUDE_DIRS} ${NOTIFY_INCLUDE_DIRS} ${CMAKE_SOURCE_DIR}/libtelephonyservice ${CMAKE_CURRENT_BINARY_DIR} ) link_directories(${MESSAGING_MENU_LIBRARY_DIRS}) add_executable(telephony-service-approver ${approver_SRCS} ${approver_HDRS}) target_link_libraries(telephony-service-approver ${TP_QT5_LIBRARIES} ${NOTIFY_LIBRARIES} telephonyservice Qt5::Contacts Qt5::Core Qt5::DBus Qt5::Gui Qt5::Multimedia Qt5::Qml Qt5::Feedback ) enable_coverage(telephony-service-approver) configure_file(org.freedesktop.Telepathy.Client.TelephonyServiceApprover.service.in org.freedesktop.Telepathy.Client.TelephonyServiceApprover.service) install(TARGETS telephony-service-approver RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}) install(FILES ${CMAKE_CURRENT_BINARY_DIR}/org.freedesktop.Telepathy.Client.TelephonyServiceApprover.service DESTINATION share/dbus-1/services) install(FILES TelephonyServiceApprover.client DESTINATION share/telepathy/clients) install(FILES 50-com.lomiri.TelephonyServiceApprover.pkla DESTINATION "${CMAKE_INSTALL_FULL_LOCALSTATEDIR}/lib/polkit-1/localauthority/10-vendor.d") install(FILES com.lomiri.TelephonyServiceApprover.policy DESTINATION share/polkit-1/actions) install(FILES com.lomiri.TelephonyServiceApprover.xml DESTINATION share/dbus-1/interfaces) # Create accountsservice symlink for above dbus interface install(CODE " execute_process(COMMAND mkdir -p \"\$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/share/accountsservice/interfaces\") execute_process(COMMAND ln -sf ../../dbus-1/interfaces/com.lomiri.TelephonyServiceApprover.xml \"\$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/share/accountsservice/interfaces\") ") telephony-service-0.5.3/approver/TelephonyServiceApprover.client000066400000000000000000000013041455543255600252450ustar00rootroot00000000000000[org.freedesktop.Telepathy.Client] Interfaces=org.freedesktop.Telepathy.Client.Approver; [org.freedesktop.Telepathy.Client.Approver.ApproverChannelFilter 0] org.freedesktop.Telepathy.Channel.ChannelType s=org.freedesktop.Telepathy.Channel.Type.Call1 org.freedesktop.Telepathy.Channel.TargetHandleType u=1 org.freedesktop.Telepathy.Channel.Type.Call1.InitialAudio b=true [org.freedesktop.Telepathy.Client.Approver.ApproverChannelFilter 1] org.freedesktop.Telepathy.Channel.ChannelType s=org.freedesktop.Telepathy.Channel.Type.Text [org.freedesktop.Telepathy.Client.Approver.Capabilities] org.freedesktop.Telepathy.Channel.Type.Call1/audio=true org.freedesktop.Telepathy.Channel.Type.Call1/audio/speex=true telephony-service-0.5.3/approver/approver.cpp000066400000000000000000000671521455543255600214150ustar00rootroot00000000000000/* * Copyright (C) 2012-2017 Canonical, Ltd. * * Authors: * Tiago Salem Herrmann * Gustavo Pichorim Boiko * * This file is part of telephony-service. * * telephony-service is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; version 3. * * telephony-service 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 . */ #include "approver.h" #include "approverdbus.h" #include "applicationutils.h" #include "callnotification.h" #include "chatmanager.h" #include "config.h" #include "contactutils.h" #include "contactwatcher.h" #include "greetercontacts.h" #include "ringtone.h" #include "callmanager.h" #include "callentry.h" #include "protocol.h" #include "protocolmanager.h" #include "tonegenerator.h" #include "telepathyhelper.h" #include "accountentry.h" #include #include #include #include #include #include #include #include #include #include #include #include namespace C { #include } #define TELEPHONY_SERVICE_HANDLER TP_QT_IFACE_CLIENT + ".TelephonyServiceHandler" Approver::Approver() : Tp::AbstractClientApprover(channelFilters()), mPendingSnapDecision(NULL), mSettleTimer(new QTimer(this)) { mDefaultTitle = C::gettext("Unknown caller"); mDefaultIcon = QUrl(telephonyServiceDir() + "assets/avatar-default@18.png").toEncoded(); ApproverDBus *dbus = new ApproverDBus(this); connect(dbus, SIGNAL(acceptCallRequested()), SLOT(onAcceptCallRequested())); connect(dbus, SIGNAL(rejectCallRequested()), SLOT(onRejectCallRequested())); dbus->connectToBus(); if (GreeterContacts::isGreeterMode()) { connect(GreeterContacts::instance(), SIGNAL(contactUpdated(QtContacts::QContact)), this, SLOT(updateNotification(QtContacts::QContact))); } QDBusConnection::systemBus().connect("com.canonical.Unity.Screen", "/com/canonical/Unity/Screen", "com.canonical.Unity.Screen", "DisplayPowerStateChange", this, SLOT(onUnityStateChanged(int,int))); // WORKAROUND: we need to use a timer as the qtubuntu sensors backend does not support setPeriod() mVibrateTimer.setInterval(4000); connect(&mVibrateTimer, SIGNAL(timeout()), &mVibrateEffect, SLOT(start())); mRejectActions["rejectMessage1"] = C::gettext("I'm busy at the moment. I'll call later."); mRejectActions["rejectMessage2"] = C::gettext("I'm running late, on my way now."); mRejectActions["rejectMessage3"] = C::gettext("Please call me back later."); mSettleTimer->setInterval(500); mSettleTimer->setSingleShot(true); connect(mSettleTimer, SIGNAL(timeout()), this, SLOT(onSettleTimerTimeout())); mSettleTimer->start(); } void Approver::onSettleTimerTimeout() { mSettleTimer->deleteLater(); mSettleTimer = NULL; } void Approver::onUnityStateChanged(int state, int reason) { if (!mPendingSnapDecision) { return; } // state == 0 is power off // reason == 2 is power key if (state == 0 && reason == 2) { Ringtone::instance()->stopIncomingCallSound(); mVibrateTimer.stop(); mVibrateEffect.setDuration(1); mVibrateEffect.start(); } } Approver::~Approver() { } Tp::ChannelClassSpecList Approver::channelFilters() const { Tp::ChannelClassSpecList specList; specList << Tp::ChannelClassSpec::audioCall(); specList << Tp::ChannelClassSpec::textChat(); return specList; } Tp::ChannelDispatchOperationPtr Approver::dispatchOperation(Tp::PendingOperation *op) { Tp::ChannelPtr channel = mChannels[op]; QString accountId = channel->property("accountId").toString(); Q_FOREACH (Tp::ChannelDispatchOperationPtr dispatchOperation, mDispatchOps) { if (dispatchOperation->account()->uniqueIdentifier() == accountId) { return dispatchOperation; } } return Tp::ChannelDispatchOperationPtr(); } void Approver::addDispatchOperation(const Tp::MethodInvocationContextPtr<> &context, const Tp::ChannelDispatchOperationPtr &dispatchOperation) { if (!ProtocolManager::instance()->isProtocolSupported(dispatchOperation->account()->protocolName())) { context->setFinishedWithError(TP_QT_ERROR_NOT_CAPABLE, "The account for this request is not supported."); return; } bool willHandle = false; QList channels = dispatchOperation->channels(); Q_FOREACH (Tp::ChannelPtr channel, channels) { // Call Channel Tp::CallChannelPtr callChannel = Tp::CallChannelPtr::dynamicCast(channel); if (!callChannel.isNull()) { Tp::PendingReady *pr = callChannel->becomeReady(Tp::Features() << Tp::CallChannel::FeatureCore << Tp::CallChannel::FeatureCallState); mChannels[pr] = callChannel; connect(pr, SIGNAL(finished(Tp::PendingOperation*)), SLOT(onChannelReady(Tp::PendingOperation*))); callChannel->setProperty("accountId", QVariant(dispatchOperation->account()->uniqueIdentifier())); willHandle = true; continue; } // Text Channel Tp::TextChannelPtr textChannel = Tp::TextChannelPtr::dynamicCast(channel); if (!textChannel.isNull()) { // right now we are not using any of the text channel's features in the approver // so no need to call becomeReady() on it. willHandle = true; } } if (willHandle) { mDispatchOps.append(dispatchOperation); } context->setFinished(); // check if we need to approve channels already or if we should wait. processChannels(); } class EventData { public: Approver* self; Tp::ChannelDispatchOperationPtr dispatchOp; Tp::ChannelPtr channel; }; void action_accept(NotifyNotification *notification, char *action, gpointer data) { Q_UNUSED(notification); Q_UNUSED(action); EventData* eventData = (EventData*) data; Approver* approver = (Approver*) eventData->self; if (NULL != approver) { approver->onApproved((Tp::ChannelDispatchOperationPtr) eventData->dispatchOp); } } void action_hangup_and_accept(NotifyNotification *notification, char *action, gpointer data) { Q_UNUSED(notification); Q_UNUSED(action); EventData *eventData = (EventData*) data; Approver *approver = (Approver*) eventData->self; if (approver != NULL) { approver->onHangUpAndApproved((Tp::ChannelDispatchOperationPtr) eventData->dispatchOp); } } void action_reject(NotifyNotification *notification, char *action, gpointer data) { Q_UNUSED(notification); Q_UNUSED(action); EventData* eventData = (EventData*) data; Approver* approver = (Approver*) eventData->self; if (NULL != approver) { approver->onRejected((Tp::ChannelDispatchOperationPtr) eventData->dispatchOp); } } void action_reject_message(NotifyNotification *notification, char *action, gpointer data) { Q_UNUSED(notification); Q_UNUSED(action); EventData* eventData = (EventData*) data; Approver* approver = (Approver*) eventData->self; if (approver != NULL) { approver->onRejectMessage((Tp::ChannelDispatchOperationPtr) eventData->dispatchOp, action); } } void delete_event_data(gpointer data) { if (NULL != data) delete (EventData*) data; } void Approver::updateNotification(const QContact &contact) { if (!mPendingSnapDecision) return; QString displayLabel = contact.detail().label(); QString avatar = contact.detail().imageUrl().toEncoded(); if (displayLabel.isEmpty()) { displayLabel = mDefaultTitle; } if (avatar.isEmpty()) { avatar = mDefaultIcon; } notify_notification_update(mPendingSnapDecision, displayLabel.toStdString().c_str(), mCachedBody.toStdString().c_str(), avatar.toStdString().c_str()); GError *error = NULL; if (!notify_notification_show(mPendingSnapDecision, &error)) { closeSnapDecision(); qWarning() << "Failed to show snap decision:" << error->message; g_error_free (error); } } void Approver::onChannelReady(Tp::PendingOperation *op) { Tp::PendingReady *pr = qobject_cast(op); if (!pr || !mChannels.contains(pr)) { qWarning() << "PendingOperation is not a PendingReady:" << op; return; } Tp::ChannelPtr channel = mChannels[pr]; Tp::ContactPtr contact = channel->initiatorContact(); Tp::ChannelDispatchOperationPtr dispatchOp = dispatchOperation(op); if (!dispatchOp) { return; } Tp::CallChannelPtr callChannel = Tp::CallChannelPtr::dynamicCast(channel); if (!callChannel) { return; } if (isIncoming(channel) && !callChannel->isRequested() && callChannel->callState() == Tp::CallStateInitialised) { callChannel->setRinging(); } else { onApproved(dispatchOp); return; } connect(channel.data(), SIGNAL(callStateChanged(Tp::CallState)), SLOT(onCallStateChanged(Tp::CallState))); mChannels.remove(pr); QString id = ContactWatcher::normalizeIdentifier(contact->id(), true); // and now set up the contact matching for either greeter mode or regular mode if (GreeterContacts::isGreeterMode()) { // show the snap decision right away because contact info might never arrive showSnapDecision(dispatchOp, channel); GreeterContacts::instance()->setContactFilter(QContactPhoneNumber::match(id)); } else { AccountEntry *account = TelepathyHelper::instance()->accountForConnection(callChannel->connection()); if (!account) { qCritical() << "Call exists with no account for connection"; return; } // try to match the contact info QContactFetchRequest *request = new QContactFetchRequest(this); request->setFilter(QContactPhoneNumber::match(id)); // lambda function to update the notification QObject::connect(request, &QContactAbstractRequest::stateChanged, [this, request, dispatchOp, channel](QContactAbstractRequest::State state) { if (!request || state != QContactAbstractRequest::FinishedState) { return; } QContact contact; // create the snap decision only after the contact match finishes if (request->contacts().size() > 0) { // use the first match contact = request->contacts().at(0); // Also notify greeter via AccountsService GreeterContacts::emitContact(contact); } showSnapDecision(dispatchOp, channel, contact); }); // FIXME: For accounts not based on phone numbers, check what to do request->setManager(ContactUtils::sharedManager()); request->start(); } } void Approver::onApproved(Tp::ChannelDispatchOperationPtr dispatchOp) { closeSnapDecision(); acceptCallChannels(dispatchOp); // forward the channel to the handler dispatchOp->handleWith(TELEPHONY_SERVICE_HANDLER); // and then launch the dialer-app ApplicationUtils::openUrl(QUrl("dialer:///?view=liveCall")); mDispatchOps.removeAll(dispatchOp); } void Approver::onHangUpAndApproved(Tp::ChannelDispatchOperationPtr dispatchOp) { closeSnapDecision(); // hangup existing calls if (CallManager::instance()->foregroundCall()) { CallManager::instance()->foregroundCall()->endCall(); } acceptCallChannels(dispatchOp); // forward the channel to the handler dispatchOp->handleWith(TELEPHONY_SERVICE_HANDLER); // and then launch the dialer-app ApplicationUtils::openUrl(QUrl("application:///dialer-app.desktop")); mDispatchOps.removeAll(dispatchOp); } void Approver::onRejected(Tp::ChannelDispatchOperationPtr dispatchOp) { closeSnapDecision(); Tp::PendingOperation *claimop = dispatchOp->claim(); // assume there is just one channel in the dispatchOp for calls mChannels[claimop] = dispatchOp->channels().first(); connect(claimop, SIGNAL(finished(Tp::PendingOperation*)), this, SLOT(onClaimFinished(Tp::PendingOperation*))); Ringtone::instance()->stopIncomingCallSound(); } void Approver::onRejectMessage(Tp::ChannelDispatchOperationPtr dispatchOp, const char *action) { if (mRejectActions.contains(action)) { QVariantMap properties; properties["participantIds"] = QStringList() << dispatchOp->channels().first()->targetContact()->id(); ChatManager::instance()->sendMessage(dispatchOp->account()->uniqueIdentifier(), mRejectActions[action], QVariantMap(), // attachments properties); } onRejected(dispatchOp); } bool Approver::showSnapDecision(const Tp::ChannelDispatchOperationPtr dispatchOperation, const Tp::ChannelPtr channel, const QContact &contact) { Tp::ContactPtr telepathyContact = channel->initiatorContact(); NotifyNotification* notification; bool hasCalls = CallManager::instance()->hasCalls(); /* initial notification */ EventData* data = new EventData(); data->self = this; data->dispatchOp = dispatchOperation; data->channel = channel; bool unknownNumber = false; QString id = ContactWatcher::normalizeIdentifier(telepathyContact->id(), true); AccountEntry *account = TelepathyHelper::instance()->accountForConnection(channel->connection()); if (!account) { qCritical() << "Call exists with no account for connection"; return false; } bool supportsText = (account->protocolInfo()->features() & Protocol::TextChats); mCachedBody = QString(); if (account->type() == AccountEntry::PhoneAccount && TelepathyHelper::instance()->multiplePhoneAccounts()) { mCachedBody = QString::fromUtf8(C::gettext("On [%1]")).arg(account->displayName()); mCachedBody += "\n"; if (!id.isEmpty()) { if (id.startsWith(OFONO_PRIVATE_NUMBER)) { mCachedBody += QString::fromUtf8(C::gettext("Private number")); unknownNumber = true; } else if (id.startsWith(OFONO_UNKNOWN_NUMBER)) { mCachedBody += QString::fromUtf8(C::gettext("Unknown number")); unknownNumber = true; } else { mCachedBody += id; } } else { mCachedBody += C::gettext("Caller number is not available"); unknownNumber = true; } } else { if (!id.isEmpty()) { if (id.startsWith(OFONO_PRIVATE_NUMBER)) { mCachedBody = QString::fromUtf8(C::gettext("Calling from private number")); unknownNumber = true; } else if (id.startsWith(OFONO_UNKNOWN_NUMBER)) { mCachedBody = QString::fromUtf8(C::gettext("Calling from unknown number")); unknownNumber = true; } else { mCachedBody = QString::fromUtf8(C::gettext("Calling from %1")).arg(id); } } else { mCachedBody = C::gettext("Caller number is not available"); unknownNumber = true; } } QString displayLabel; QString icon; QString ringTone; if (!contact.isEmpty()) { displayLabel = contact.detail().label(); icon = contact.detail().imageUrl().toEncoded(); QUrl path = contact.detail().audioRingtoneUrl(); if (path.isValid()) { ringTone = path.toString(); } qDebug() << "contact ringTone:" << ringTone; } if (displayLabel.isEmpty()) { displayLabel = mDefaultTitle; } if (icon.isEmpty()) { icon = mDefaultIcon; } notification = notify_notification_new (displayLabel.toStdString().c_str(), mCachedBody.toStdString().c_str(), icon.toStdString().c_str()); notify_notification_set_hint_string(notification, "x-lomiri-snap-decisions", "true"); notify_notification_set_hint_string(notification, "x-lomiri-snap-decisions-swipe", "true"); notify_notification_set_hint_string(notification, "x-lomiri-private-affirmative-tint", "true"); notify_notification_set_hint_string(notification, "x-lomiri-secondary-icon", "incoming-call"); notify_notification_set_hint_int32(notification, "x-lomiri-snap-decisions-timeout", -1); QString acceptTitle = hasCalls ? C::gettext("Hold + Answer") : C::gettext("Accept"); notify_notification_add_action (notification, "action_accept", acceptTitle.toLocal8Bit().data(), action_accept, data, delete_event_data); #if 0 // FIXME: re-enable that once we move to fullscreen notifications if (hasCalls) { notify_notification_add_action (notification, "action_hangup_and_accept", C::gettext("End + Answer"), action_hangup_and_accept, data, delete_event_data); } #endif notify_notification_add_action (notification, "action_decline_1", C::gettext("Decline"), action_reject, data, delete_event_data); if (!unknownNumber && supportsText) { notify_notification_add_action(notification, "action_decline_expansion", C::gettext("Message & decline"), action_reject, data, delete_event_data); Q_FOREACH(const QString &action, mRejectActions.keys()) { notify_notification_add_action(notification, action.toUtf8().data(), QString("message:%1").arg(mRejectActions[action]).toUtf8().data(), action_reject_message, data, delete_event_data); } } mPendingSnapDecision = notification; GError *error = NULL; if (!notify_notification_show(notification, &error)) { closeSnapDecision(); qWarning() << "Failed to show snap decision:" << error->message; g_error_free (error); return false; } if (hasCalls) { ToneGenerator::instance()->playWaitingTone(); } else { // play a ringtone Ringtone::instance()->playIncomingCallSound(ringTone); } if (!hasCalls && GreeterContacts::instance()->incomingCallVibrate()) { mVibrateEffect.setDuration(2000); mVibrateEffect.start(); mVibrateTimer.start(); } return true; } void Approver::acceptCallChannels(const Tp::ChannelDispatchOperationPtr dispatchOp) { // accept all channels Q_FOREACH(Tp::ChannelPtr channel, dispatchOp->channels()) { Tp::CallChannelPtr callChannel = Tp::CallChannelPtr::dynamicCast(channel); if (callChannel && isIncoming(callChannel) && callChannel->callState() != Tp::CallStateActive) { callChannel->accept(); } } } Tp::ChannelDispatchOperationPtr Approver::dispatchOperationForIncomingCall() { Tp::ChannelDispatchOperationPtr callDispatchOp; // find the call channel in the dispatch operations Q_FOREACH(Tp::ChannelDispatchOperationPtr dispatchOp, mDispatchOps) { Q_FOREACH(Tp::ChannelPtr channel, dispatchOp->channels()) { Tp::CallChannelPtr callChannel = Tp::CallChannelPtr::dynamicCast(channel); // FIXME: maybe we need to check the call state too? if (!callChannel.isNull()) { callDispatchOp = dispatchOp; break; } } if (!callDispatchOp.isNull()) { break; } } return callDispatchOp; } bool Approver::isIncoming(const Tp::ChannelPtr &channel) { return channel->initiatorContact() != channel->connection()->selfContact(); } void Approver::processChannels() { Q_FOREACH (Tp::ChannelDispatchOperationPtr dispatchOperation, mDispatchOps) { QList channels = dispatchOperation->channels(); Q_FOREACH (Tp::ChannelPtr channel, channels) { // approve only text channels Tp::TextChannelPtr textChannel = Tp::TextChannelPtr::dynamicCast(channel); if (textChannel.isNull()) { continue; } if (dispatchOperation->possibleHandlers().contains(TELEPHONY_SERVICE_HANDLER)) { dispatchOperation->handleWith(TELEPHONY_SERVICE_HANDLER); mDispatchOps.removeAll(dispatchOperation); } // FIXME: this shouldn't happen, but in any case, we need to check what to do when // the phone app client is not available } } } void Approver::onClaimFinished(Tp::PendingOperation* op) { if(!op || op->isError()) { qDebug() << "onClaimFinished() error"; // TODO do something return; } Tp::CallChannelPtr callChannel = Tp::CallChannelPtr::dynamicCast(mChannels[op]); if (callChannel) { Tp::PendingOperation *hangupop = callChannel->hangup(Tp::CallStateChangeReasonUserRequested, TP_QT_ERROR_REJECTED, QString()); CallNotification::instance()->showNotificationForCall(QStringList() << callChannel->targetContact()->id(), CallNotification::CallRejected); mChannels[hangupop] = callChannel; connect(hangupop, SIGNAL(finished(Tp::PendingOperation*)), this, SLOT(onHangupFinished(Tp::PendingOperation*))); } } void Approver::onHangupFinished(Tp::PendingOperation* op) { if(!op || op->isError()) { qDebug() << "onHangupFinished() error"; // TODO do something return; } // FIXME: we do not call requestClose() here because // the channel will be forced to close without emiting the proper // stateChanged() signals. This would cause the app // not to register call events as it would never receive the // "ended" state. Better to check how other connection // managers deal with this case. mDispatchOps.removeAll(dispatchOperation(op)); mChannels.remove(op); } void Approver::onCallStateChanged(Tp::CallState state) { Tp::CallChannel *channel = qobject_cast(sender()); if (!channel) { return; } Tp::ChannelDispatchOperationPtr dispatchOperation; Q_FOREACH(const Tp::ChannelDispatchOperationPtr &otherDispatchOperation, mDispatchOps) { Q_FOREACH(const Tp::ChannelPtr &otherChannel, otherDispatchOperation->channels()) { if (otherChannel.data() == channel) { dispatchOperation = otherDispatchOperation; } } } if(dispatchOperation.isNull()) { return; } if (state == Tp::CallStateEnded) { mDispatchOps.removeAll(dispatchOperation); // remove all channels and pending operations Q_FOREACH(const Tp::ChannelPtr &otherChannel, dispatchOperation->channels()) { Tp::PendingOperation* op = mChannels.key(otherChannel); if(op) { mChannels.remove(op); } } closeSnapDecision(); } else if (state == Tp::CallStateActive) { onApproved(dispatchOperation); } } void Approver::closeSnapDecision() { if (mPendingSnapDecision != NULL) { notify_notification_close(mPendingSnapDecision, NULL); mPendingSnapDecision = NULL; } Ringtone::instance()->stopIncomingCallSound(); ToneGenerator::instance()->stopWaitingTone(); mVibrateTimer.stop(); // WORKAROUND: the ubuntu qt sensors backend does not support setPeriod() and stop(), // so we invoke a short vibration to simulate a stop() call mVibrateEffect.setDuration(1); mVibrateEffect.start(); } void Approver::onHangupAndAcceptCallRequested() { if (!mPendingSnapDecision) { return; } Tp::ChannelDispatchOperationPtr callDispatchOp = dispatchOperationForIncomingCall(); if (!callDispatchOp.isNull()) { onHangUpAndApproved(callDispatchOp); } } void Approver::onAcceptCallRequested() { if (!mPendingSnapDecision) { return; } Tp::ChannelDispatchOperationPtr callDispatchOp = dispatchOperationForIncomingCall(); if (!callDispatchOp.isNull()) { onApproved(callDispatchOp); } } void Approver::onRejectCallRequested() { if (!mPendingSnapDecision) { return; } Tp::ChannelDispatchOperationPtr callDispatchOp = dispatchOperationForIncomingCall(); if (!callDispatchOp.isNull()) { onRejected(callDispatchOp); } } bool Approver::handleMediaKey(bool doubleClick) { Q_UNUSED(doubleClick) // hasCalls gets the value from handler, so even if CallManager isn't ready right now, we know // if the event will be handled later bool accepted = mPendingSnapDecision || CallManager::instance()->hasCalls(); // FIXME: Telepathy-qt does not let us know if existing channels are being recovered, // so if this is the first run, call this method again when mSettleTimer is done if (mSettleTimer) { QObject::connect(mSettleTimer, &QTimer::timeout, [=]() { handleMediaKey(doubleClick); }); return accepted; } // postpone this to avoid blocking dbus method callers QMetaObject::invokeMethod(this, "processHandleMediaKey", Qt::QueuedConnection, Q_ARG(bool, doubleClick)); return accepted; } void Approver::processHandleMediaKey(bool doubleClick) { Q_UNUSED(doubleClick) if (mPendingSnapDecision) { onAcceptCallRequested(); } else if (CallManager::instance()->hasCalls()) { // if there is no incoming call, we have to hangup the current active call CallEntry *call = CallManager::instance()->foregroundCall(); if (call) { call->endCall(); } } } telephony-service-0.5.3/approver/approver.h000066400000000000000000000064211455543255600210520ustar00rootroot00000000000000/* * Copyright (C) 2012-2014 Canonical, Ltd. * * Authors: * Tiago Salem Herrmann * Gustavo Pichorim Boiko * * This file is part of telephony-service. * * telephony-service is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; version 3. * * telephony-service 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 . */ #ifndef APPROVER_H #define APPROVER_H #include #include #include #include #include #include #include #include #include QTCONTACTS_USE_NAMESPACE class Approver : public QObject, public Tp::AbstractClientApprover { Q_OBJECT public: Approver(); ~Approver(); Tp::ChannelClassSpecList channelFilters() const; void addDispatchOperation(const Tp::MethodInvocationContextPtr<> &context, const Tp::ChannelDispatchOperationPtr &dispatchOperation); Tp::ChannelDispatchOperationPtr dispatchOperation(Tp::PendingOperation *op); void onApproved(Tp::ChannelDispatchOperationPtr dispatchOp); void onHangUpAndApproved(Tp::ChannelDispatchOperationPtr dispatchOp); void onRejected(Tp::ChannelDispatchOperationPtr dispatchOp); void onRejectMessage(Tp::ChannelDispatchOperationPtr dispatchOp, const char *action); bool showSnapDecision(const Tp::ChannelDispatchOperationPtr dispatchOperation, const Tp::ChannelPtr channel, const QContact &contact = QContact()); void acceptCallChannels(const Tp::ChannelDispatchOperationPtr dispatchOp); bool handleMediaKey(bool doubleClick); protected: Tp::ChannelDispatchOperationPtr dispatchOperationForIncomingCall(); bool isIncoming(const Tp::ChannelPtr &channel); private Q_SLOTS: void processChannels(); void onChannelReady(Tp::PendingOperation *op); void onClaimFinished(Tp::PendingOperation* op); void onHangupFinished(Tp::PendingOperation* op); void onCallStateChanged(Tp::CallState state); void closeSnapDecision(); void onHangupAndAcceptCallRequested(); void onAcceptCallRequested(); void onRejectCallRequested(); void updateNotification(const QtContacts::QContact &contact); void onUnityStateChanged(int state, int reason); void onSettleTimerTimeout(); void processHandleMediaKey(bool doubleClick); private: QList mDispatchOps; QMap mChannels; NotifyNotification* mPendingSnapDecision; QString mDefaultTitle; QString mDefaultIcon; QString mCachedBody; QFeedbackHapticsEffect mVibrateEffect; QTimer mVibrateTimer; QTimer *mSettleTimer; QMap mRejectActions; }; #endif // APPROVER_H telephony-service-0.5.3/approver/approverdbus.cpp000066400000000000000000000034401455543255600222610ustar00rootroot00000000000000/* * Copyright (C) 2012-2016 Canonical, Ltd. * * Authors: * Ugo Riboni * Tiago Salem Herrmann * Gustavo Pichorim Boiko * * This file is part of telephony-service. * * telephony-service is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; version 3. * * telephony-service 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 . */ #include "approverdbus.h" #include "approveradaptor.h" // Qt #include static const char* DBUS_SERVICE = "com.lomiri.TelephonyServiceApprover"; static const char* DBUS_OBJECT_PATH = "/com/lomiri/TelephonyServiceApprover"; ApproverDBus::ApproverDBus(Approver *approver, QObject* parent) : QObject(parent), mApprover(approver) { } ApproverDBus::~ApproverDBus() { } bool ApproverDBus::connectToBus() { new TelephonyServiceApproverAdaptor(this); QDBusConnection::sessionBus().registerObject(DBUS_OBJECT_PATH, this); return QDBusConnection::sessionBus().registerService(DBUS_SERVICE); } void ApproverDBus::HangUpAndAcceptCall() { Q_EMIT hangUpAndAcceptCallRequested(); } void ApproverDBus::AcceptCall() { Q_EMIT acceptCallRequested(); } void ApproverDBus::RejectCall() { Q_EMIT rejectCallRequested(); } bool ApproverDBus::HandleMediaKey(bool doubleClick) { return mApprover->handleMediaKey(doubleClick); } telephony-service-0.5.3/approver/approverdbus.h000066400000000000000000000030011455543255600217170ustar00rootroot00000000000000/* * Copyright (C) 2012 Canonical, Ltd. * * Authors: * Ugo Riboni * Tiago Salem Herrmann * * This file is part of telephony-service. * * telephony-service is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; version 3. * * telephony-service 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 . */ #ifndef APPROVERDBUS_H #define APPROVERDBUS_H #include #include #include "chatmanager.h" #include "approver.h" /** * DBus interface for the phone approver */ class ApproverDBus : public QObject, protected QDBusContext { Q_OBJECT public: ApproverDBus(Approver *approver, QObject* parent=0); ~ApproverDBus(); bool connectToBus(); public Q_SLOTS: Q_NOREPLY void HangUpAndAcceptCall(); Q_NOREPLY void AcceptCall(); Q_NOREPLY void RejectCall(); bool HandleMediaKey(bool doubleClick); Q_SIGNALS: void hangUpAndAcceptCallRequested(); void acceptCallRequested(); void rejectCallRequested(); private: Approver *mApprover; }; #endif // APPROVERDBUS_H telephony-service-0.5.3/approver/com.lomiri.TelephonyServiceApprover.policy000066400000000000000000000012561455543255600273430ustar00rootroot00000000000000 no yes yes no no no telephony-service-0.5.3/approver/com.lomiri.TelephonyServiceApprover.xml000066400000000000000000000011521455543255600266370ustar00rootroot00000000000000 telephony-service-0.5.3/approver/main.cpp000066400000000000000000000041261455543255600204730ustar00rootroot00000000000000/* * Copyright (C) 2012-2013 Canonical, Ltd. * * Authors: * Tiago Salem Herrmann * Gustavo Pichorim Boiko * * This file is part of telephony-service. * * telephony-service is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; version 3. * * telephony-service 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 . */ #include #include "applicationutils.h" #include "approver.h" #include "telepathyhelper.h" #include #include #include #include #include namespace C { #include } int main(int argc, char **argv) { QCoreApplication app(argc, argv); QCoreApplication::setApplicationName("telephony-service-approver"); C::bindtextdomain( "telephony-service", "/usr/share/locale" ); C::textdomain("telephony-service"); notify_init(C::gettext("Telephony Service Approver")); Tp::registerTypes(); // check if there is already an instance of the approver running if (ApplicationUtils::checkApplicationRunning(TP_QT_IFACE_CLIENT + ".TelephonyServiceApprover")) { qDebug() << "Found another instance of the approver. Quitting."; return 1; } QObject::connect(TelepathyHelper::instance(), &TelepathyHelper::setupReady, []() { // register the approver TelepathyHelper::instance()->registerChannelObserver("TelephonyServiceObserver"); Approver *approver = new Approver(); TelepathyHelper::instance()->registerClient(approver, "TelephonyServiceApprover"); }); return app.exec(); } org.freedesktop.Telepathy.Client.TelephonyServiceApprover.service.in000066400000000000000000000002751455543255600342360ustar00rootroot00000000000000telephony-service-0.5.3/approver[D-BUS Service] Name=org.freedesktop.Telepathy.Client.TelephonyServiceApprover Exec=@CMAKE_INSTALL_FULL_BINDIR@/telephony-service-approver SystemdService=telephony-service-approver.service telephony-service-0.5.3/assets/000077500000000000000000000000001455543255600165045ustar00rootroot00000000000000telephony-service-0.5.3/assets/avatar-default@18.png000066400000000000000000000047131455543255600223700ustar00rootroot00000000000000PNG  IHDRFtEXtSoftwareAdobe ImageReadyqe<$iTXtXML:com.adobe.xmp +=IDATx_Un뺛FnTdV[[EZ(6?Rp!I  0z(57k?km̾T{z{?Ίܙߜg̝9ajjTJ#U@@@@@@@@&BТbFE]qe*#4.>YqX,^S5V ӠSѭYJsŰ't(*aw}igT/)>U|&(^~ I4)?\KW'c  i wZX!_ ,^l7(.@h<@鏤݁L7!'iV܊@n B;#!3?ea.#P?UDPBE!PFp "4"8'8)9@(v_y#PFF <#&0D*!+U|hg(K/Kũ> > t|( kt)|#CBc@_nyk59kRy1, #j!#߱9g{׶X*8j-x֠:KbBGR?SZ P y*6OK^Sq=PqyG }),+2ۈ[</їO~Nsn|/cl2WeMn39:bbF};Or У*&?8RMH$3O,dQ ǷVSQvq4Coҿs@N&~>,Nґfkj`VŐJܮH&czҬ]$eBqgڻ\.[?_ų%Ҵȿ1 tyo+jk`;'\-@p{ o5j^KOٱ۪:\I).SߕV4XQ(~I88չ?MRס?XxLQ uʽSF6J`$ZQ0-5]s:$-(bH{>*2E>\':XYV6Ethͭ@~ B6LS !A5@@@@@@@@> 4ES P~)( #4!!"͑ 2# "N)vرol 2̨P(x&h@ @ @ @ @ @ @ @ -;;XIENDB`telephony-service-0.5.3/assets/contact-group.svg000066400000000000000000000337111455543255600220170ustar00rootroot00000000000000 image/svg+xml telephony-service-0.5.3/assets/message_watermark.png000066400000000000000000000264031455543255600227200ustar00rootroot00000000000000PNG  IHDRwZ,sRGB,IDATxݍ봡PN (\4d(doe$||ȶ/J3oNY}Vܾ^.e?LZ bGsyya-yY.W휫9鳜ײ|f8 @h%Ձy:Z_^:q/Gv @@^e.[^uࣅoW%[J>sKK+7  @J^o&@N+`/y.y6v& @ x.h>h:ܕ`bM @}xkZBM @O:~#Z P $eȸ>=Ksa @I˞~ȢE'= Uh*+ xφ  @(m`KQ-چ @@nwLXvl:>%@pb=#@F WH7זZk^~v%w8@_N]\jx-`w_H*,__Vyεgyo"@ԙrkry?Cr&_2qw澣~ ׻V @'G܂!֜[]ymqe,-ԣn˱9.ֺYO%rޯmp2'ܝN yrc)'Bƈ3 p>һ+<˔~ZSص.eM%Э1 pN䛄t`e^UL?.GMtZ[g7%T2] vz I<[0zֆYFKeW]6"@(|{f%ޛMʍ2ԚpnVQ p,re0Y#Yh)Y&rvy['-& @ y SL#䡔#\7{.7[6?[ @ҩTx)+\vu[3[e- @5 T#^:JPς[n %ٞ7k"@ {>QlVϮ; @ z2 P$տCy P $!^K÷]znnC-r)=v;@; YxjWorK mHh+W^e,ܵ\_Jk @׫Sꡞ^dkg,;T @zuLCG݇r9{ ٣nAS W{w- sSM @zuP}m݇͑w: @ !I{4c @HQvpaܓvk @/2]Iͯƕ IUwݛnx @\UV.%'O  @ztX%ܽe|gG8@\s5zG=ߩ @̸ɷ ooW5sU @f=[{[XS/7ݝJwk @fW%rRzysmܰG,  @ 7o9ma)rP XGŵ) @@|bwKhoTt!@\@E:xBzNX G"H+NL"#iWz޺vKMG{s㒬`@ @=rλpWzwDg8@=ut< @=rλe{$s^jM-#tw= x @9zw{Jc @; w=.]sVjMuS]fw\ @{;=wG=ԋB`pJ)=w{ ut< @]N w=.˞՞ ^@]{S{$@)Ή@ 𔀞lL-o @ wz;M @yZU|E 0p7KK)' @`p* @Y ` @j  @P  @pWkX&@L. MހOZ2 @`rnT| @@-   @ w7 @jְL\@ P we @  @Z@5, @&&o@'@]a 0p7y*> @j  @P  @pWkX&@L. MހOZ2 @`rnT| @@-   @ w7 @jְL\@ P we @  @Z@5, @&&o@'@]a 0p7y*> @j  @P  @pWkX&@L. MހOZ2 @`rnT| @@-   @ w7 @jְL\@ P we @  @Z@5, @&&o@'@]a 0p7y*> @j  @P  @pWkX&@L. MހOZ2 @`rnT| @@-   @ w7 @jְL\@ P we @  @Z@5, @&&o@'@]a 0p7y*> @ԅL F 6 @JGgzz[$@h% ܵ @ @V]+I!@ +pnE @N$%piJVӲ]aQ @^=w]*;b+ pXy[a[Q @=wl @]{zԍKK)=w=(TGE8@vϝSs*MP`pg+=w [֮  @S wlv&@(w#ID !ppW.  Ah(#k؀vE^fv9  pr9|YU?8C]|B+pꞻ4[0mF%'@|&&<U8-  @i^l-ۼ  @c 赋pŎNvC @'kޮs'9TQwW^Gwc;; ptVp g* @ 3n칋S#.0 @@s}|v8dK{c @@KoSxz~]~p:K+e @)zuR}mݻiwn^0;W @ $Ot]?q0 @@S.ǮwVܩ=oFܩCH e<^kܥX[& @(X_VJ7_K)g 0@zzP] {ܔun"@|&vi@)s{?w& VV.ckb vEӣ=wq.] #}r2'x#@HhC\h9ݲ(| ~&|NfHP+^.R)\',!f\^gg"@g/{/s/|)A_^;`ze5\U,E ^{v |D0Фv2@·,1jyB d~Zf D 0@40w&遲+s97L,JNW Ϲ8x9O|v'@9}Ms9+?RYuyPsDS wl*].:Wbr8C 0?cǨܷT .=v;9V .x[+fri@zE2+? [nx1 w5=å ,DAÜU{=!HIs_%_l"@+HRVsYIo9y_@;~Qrϓis0'lw&@`?lrUp)WY|@0' wi=jj=u ÜՖ]Dx'PKo:xaN*j|k - R\2ɹ[m h, 5wKy Ü@ >>] åP<> sr6VCvvvr9. sr)= <>,PKvÜiU^]/p)m˚R{4 KyP$5 @@c1=$`r$D/^j .!W6ͧ" R.g.oK53%ikg"@ w/=Xˇ؆^ sZ RzeÜ < GQ2\d6T&&mp)s6aNl7&@@݁U1\< kyJI 8pw=P 2~cd6RBN" ܝPMåو9] w'nIK_ٹۿ sҿ @  ҿ~YK3 @@@( .!+&2lEZ-`TMV4IF;!@k>KyaN^oh" 5a F0lvQp)m s p ,K s&A@Kٮjv$@@w{( p)9i׆99Rk N짪R5aN9Y w760\mHÜܶ k2~B >OkbDҐZ\=xg0'O+ @`.nRvg.%O4 @5<$pR s)be' fJVLåcoR@Yjgr^8 Ü|B9z YOOǞ[ådsR  p0 .P.wig.%C' @R@7ߔ˴bg1N, ܝUånZݾj@R.L/ M߄*@L/aNv83w32 PhådC 0p7Pc(# "2'x @# P{L @peڽKqs]ywuHj:4'ÜZ  p .0'ݛY 0p7G;)2mM.%uyxD ww@`@ x٠ſ<3h"@ZZu +8@X3D' @pRӾWR s_GK p < P.Ӯ.%` @GOX3\aNZN* ܝU{wφK18pwܶUe˥ڼ7xD @,k}[PLj*XkIENDB`telephony-service-0.5.3/clickable.json000066400000000000000000000003461455543255600200110ustar00rootroot00000000000000{ "builder": "cmake", "dependencies_host": [ "libhistoryservice-dev", "libmessaging-menu-dev", "libusermetricsinput1-dev", "liburl-dispatcher1-dev", "telepathy-mission-control-5", "libqofono-dev" ] } telephony-service-0.5.3/cmake/000077500000000000000000000000001455543255600162625ustar00rootroot00000000000000telephony-service-0.5.3/cmake/modules/000077500000000000000000000000001455543255600177325ustar00rootroot00000000000000telephony-service-0.5.3/cmake/modules/EnableCoverageReport.cmake000066400000000000000000000153111455543255600247730ustar00rootroot00000000000000# - Creates a special coverage build type and target on GCC. # # Defines a function ENABLE_COVERAGE_REPORT which generates the coverage target # for selected targets. Optional arguments to this function are used to filter # unwanted results using globbing expressions. Moreover targets with tests for # the source code can be specified to trigger regenerating the report if the # test has changed # # ENABLE_COVERAGE_REPORT(TARGETS target... [FILTER filter...] [TESTS test targets...]) # # To generate a coverage report first build the project with # CMAKE_BUILD_TYPE=coverage, then call make test and afterwards make coverage. # # The coverage report is based on gcov. Depending on the availability of lcov # a HTML report will be generated and/or an XML report of gcovr is found. # The generated coverage target executes all found solutions. Special targets # exist to create e.g. only the xml report: coverage-xml. # # Copyright (C) 2010 by Johannes Wienke # # 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, 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. # INCLUDE(ParseArguments) FIND_PACKAGE(Lcov) FIND_PACKAGE(gcovr) FUNCTION(ENABLE_COVERAGE_REPORT) # argument parsing PARSE_ARGUMENTS(ARG "FILTER;TARGETS;TESTS" "" ${ARGN}) SET(COVERAGE_RAW_FILE "${CMAKE_BINARY_DIR}/coverage.raw.info") SET(COVERAGE_FILTERED_FILE "${CMAKE_BINARY_DIR}/coverage.info") SET(COVERAGE_REPORT_DIR "${CMAKE_BINARY_DIR}/coveragereport") SET(COVERAGE_XML_FILE "${CMAKE_BINARY_DIR}/coverage.xml") SET(COVERAGE_XML_COMMAND_FILE "${CMAKE_BINARY_DIR}/coverage-xml.cmake") # decide if there is any tool to create coverage data SET(TOOL_FOUND FALSE) IF(LCOV_FOUND OR GCOVR_FOUND) SET(TOOL_FOUND TRUE) ENDIF() IF(NOT TOOL_FOUND) MESSAGE(STATUS "Cannot enable coverage targets because neither lcov nor gcovr are found.") ENDIF() STRING(TOLOWER "${CMAKE_BUILD_TYPE}" COVERAGE_BUILD_TYPE) IF(CMAKE_COMPILER_IS_GNUCXX AND TOOL_FOUND AND "${COVERAGE_BUILD_TYPE}" MATCHES "coverage") MESSAGE(STATUS "Coverage support enabled for targets: ${ARG_TARGETS}") # create coverage build type SET(CMAKE_CXX_FLAGS_COVERAGE ${CMAKE_CXX_FLAGS_DEBUG} PARENT_SCOPE) SET(CMAKE_C_FLAGS_COVERAGE ${CMAKE_C_FLAGS_DEBUG} PARENT_SCOPE) SET(CMAKE_CONFIGURATION_TYPES ${CMAKE_CONFIGURATION_TYPES} coverage PARENT_SCOPE) # instrument targets SET_TARGET_PROPERTIES(${ARG_TARGETS} PROPERTIES COMPILE_FLAGS --coverage LINK_FLAGS --coverage) # html report IF (LCOV_FOUND) MESSAGE(STATUS "Enabling HTML coverage report") # set up coverage target ADD_CUSTOM_COMMAND(OUTPUT ${COVERAGE_RAW_FILE} COMMAND ${LCOV_EXECUTABLE} -c -d ${CMAKE_BINARY_DIR} -o ${COVERAGE_RAW_FILE} WORKING_DIRECTORY ${CMAKE_BINARY_DIR} COMMENT "Collecting coverage data" DEPENDS ${ARG_TARGETS} ${ARG_TESTS} VERBATIM) # filter unwanted stuff LIST(LENGTH ARG_FILTER FILTER_LENGTH) IF(${FILTER_LENGTH} GREATER 0) SET(FILTER COMMAND ${LCOV_EXECUTABLE}) FOREACH(F ${ARG_FILTER}) SET(FILTER ${FILTER} -r ${COVERAGE_FILTERED_FILE} ${F}) ENDFOREACH() SET(FILTER ${FILTER} -o ${COVERAGE_FILTERED_FILE}) ELSE() SET(FILTER "") ENDIF() ADD_CUSTOM_COMMAND(OUTPUT ${COVERAGE_FILTERED_FILE} COMMAND ${LCOV_EXECUTABLE} -e ${COVERAGE_RAW_FILE} "${CMAKE_SOURCE_DIR}*" -o ${COVERAGE_FILTERED_FILE} ${FILTER} DEPENDS ${COVERAGE_RAW_FILE} COMMENT "Filtering recorded coverage data for project-relevant entries" VERBATIM) ADD_CUSTOM_COMMAND(OUTPUT ${COVERAGE_REPORT_DIR} COMMAND ${CMAKE_COMMAND} -E make_directory ${COVERAGE_REPORT_DIR} COMMAND ${GENHTML_EXECUTABLE} --legend --show-details -t "${PROJECT_NAME} test coverage" -o ${COVERAGE_REPORT_DIR} ${COVERAGE_FILTERED_FILE} DEPENDS ${COVERAGE_FILTERED_FILE} COMMENT "Generating HTML coverage report in ${COVERAGE_REPORT_DIR}" VERBATIM) ADD_CUSTOM_TARGET(coverage-html DEPENDS ${COVERAGE_REPORT_DIR}) ENDIF() # xml coverage report IF(GCOVR_FOUND) MESSAGE(STATUS "Enabling XML coverage report") # gcovr cannot write directly to a file so the execution needs to # be wrapped in a cmake file that generates the file output FILE(WRITE ${COVERAGE_XML_COMMAND_FILE} "SET(ENV{LANG} en)\n") FILE(APPEND ${COVERAGE_XML_COMMAND_FILE} "EXECUTE_PROCESS(COMMAND \"${GCOVR_EXECUTABLE}\" -x -r \"${CMAKE_SOURCE_DIR}\" OUTPUT_FILE \"${COVERAGE_XML_FILE}\" WORKING_DIRECTORY \"${CMAKE_BINARY_DIR}\")\n") ADD_CUSTOM_COMMAND(OUTPUT ${COVERAGE_XML_FILE} COMMAND ${CMAKE_COMMAND} ARGS -P ${COVERAGE_XML_COMMAND_FILE} COMMENT "Generating coverage XML report" VERBATIM) ADD_CUSTOM_TARGET(coverage-xml DEPENDS ${COVERAGE_XML_FILE}) ENDIF() # provide a global coverage target executing both steps if available SET(GLOBAL_DEPENDS "") IF(LCOV_FOUND) LIST(APPEND GLOBAL_DEPENDS ${COVERAGE_REPORT_DIR}) ENDIF() IF(GCOVR_FOUND) LIST(APPEND GLOBAL_DEPENDS ${COVERAGE_XML_FILE}) ENDIF() IF(LCOV_FOUND OR GCOVR_FOUND) ADD_CUSTOM_TARGET(coverage DEPENDS ${GLOBAL_DEPENDS}) ENDIF() ENDIF() ENDFUNCTION() telephony-service-0.5.3/cmake/modules/FindLcov.cmake000066400000000000000000000017201455543255600224400ustar00rootroot00000000000000# - Find lcov # Will define: # # LCOV_EXECUTABLE - the lcov binary # GENHTML_EXECUTABLE - the genhtml executable # # Copyright (C) 2010 by Johannes Wienke # # 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, 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. # INCLUDE(FindPackageHandleStandardArgs) FIND_PROGRAM(LCOV_EXECUTABLE lcov) FIND_PROGRAM(GENHTML_EXECUTABLE genhtml) FIND_PACKAGE_HANDLE_STANDARD_ARGS(Lcov DEFAULT_MSG LCOV_EXECUTABLE GENHTML_EXECUTABLE) # only visible in advanced view MARK_AS_ADVANCED(LCOV_EXECUTABLE GENHTML_EXECUTABLE) telephony-service-0.5.3/cmake/modules/FindLibPhoneNumber.cmake000066400000000000000000000014141455543255600244060ustar00rootroot00000000000000set(CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake/modules) include(GNUInstallDirs) include(LibFindMacros) # Include dir find_path(LibPhoneNumber_INCLUDE_DIR NAMES phonenumberutil.h PATHS "/usr/local/${CMAKE_INSTALL_INCLUDEDIR}" ${CMAKE_INSTALL_FULL_INCLUDEDIR} PATH_SUFFIXES "phonenumbers" ) # library itself find_library(LibPhoneNumber_LIBRARY NAMES phonenumber PATHS "/usr/local/${CMAKE_INSTALL_LIBDIR}" ${CMAKE_INSTALL_FULL_LIBDIR} ) # Set the include dir variables and the libraries and let libfind_process do the rest. # NOTE: Singular variables for this library, plural for libraries this this lib depends on. set(LibPhoneNumber_PROCESS_INCLUDES LibPhoneNumber_INCLUDE_DIR) set(LibPhoneNumber_PROCESS_LIBS LibPhoneNumber_LIBRARY) libfind_process(LibPhoneNumber) telephony-service-0.5.3/cmake/modules/Findgcovr.cmake000066400000000000000000000017021455543255600226550ustar00rootroot00000000000000# - Find gcovr scrip # Will define: # # GCOVR_EXECUTABLE - the gcovr script # # Uses: # # GCOVR_ROOT - root to search for the script # # Copyright (C) 2011 by Johannes Wienke # # 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, 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. # INCLUDE(FindPackageHandleStandardArgs) FIND_PROGRAM(GCOVR_EXECUTABLE gcovr HINTS ${GCOVR_ROOT} "${GCOVR_ROOT}/bin") FIND_PACKAGE_HANDLE_STANDARD_ARGS(gcovr DEFAULT_MSG GCOVR_EXECUTABLE) # only visible in advanced view MARK_AS_ADVANCED(GCOVR_EXECUTABLE) telephony-service-0.5.3/cmake/modules/GenerateTest.cmake000066400000000000000000000146041455543255600233330ustar00rootroot00000000000000# # Copyright (C) 2015 Canonical, Ltd. # # Authors: # Gustavo Pichorim Boiko # # This file is part of telephony-service. # # telephony-service is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; version 3. # # telephony-service 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 . # include(CMakeParseArguments) find_program(DCONF_SERVICE dconf-service PATHS /usr/local/libexec /usr/local/lib/dconf /usr/libexec /usr/lib/dconf NO_DEFAULT_PATH) find_program(DBUS_RUNNER dbus-test-runner) function(generate_test TESTNAME) set(options USE_DBUS USE_UI) set(oneValueArgs TIMEOUT WORKING_DIRECTORY QML_TEST WAIT_FOR) set(multiValueArgs TASKS LIBRARIES SOURCES ENVIRONMENT) cmake_parse_arguments(ARG "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN} ) MESSAGE(STATUS "Adding test: ${TESTNAME}") # set reasonable defaults for the arguments if (NOT DEFINED ARG_WORKING_DIRECTORY) set(ARG_WORKING_DIRECTORY ${CMAKE_BINARY_DIR}) endif () if (NOT DEFINED ARG_TIMEOUT) set(ARG_TIMEOUT 360) endif () if (${ARG_USE_UI}) if (${ARG_USE_DBUS}) set(PLATFORM -p -platform -p offscreen) else () set(PLATFORM -platform offscreen) endif () endif() # Generate QML tests if (DEFINED ARG_QML_TEST) add_test(NAME ${TESTNAME} WORKING_DIRECTORY ${ARG_WORKING_DIRECTORY} COMMAND qmltestrunner -platform offscreen -import ${CMAKE_BINARY_DIR} -input ${CMAKE_CURRENT_SOURCE_DIR}/${ARG_QML_TEST}) set_tests_properties(${TESTNAME} PROPERTIES ENVIRONMENT "QT_QPA_FONTDIR=${CMAKE_BINARY_DIR}") else () # For sanity checking, make sure DBUS_RUNNER is available for DBUS tests if (${ARG_USE_DBUS} AND "${DBUS_RUNNER}" STREQUAL "") message(WARNING "Test ${TESTNAME} disabled because dbus-test-runner was not found.") return() endif () # No QML test, regular binary compiled test. add_executable(${TESTNAME} ${ARG_SOURCES}) if (${ARG_USE_DBUS}) execute_process(COMMAND mktemp -d /tmp/${TESTNAME}.XXXXXX OUTPUT_VARIABLE TMPDIR) string(REPLACE "\n" "" TMPDIR ${TMPDIR}) if (NOT DEFINED ARG_ENVIRONMENT) set(ARG_ENVIRONMENT HOME=${TMPDIR} HISTORY_SQLITE_DBPATH=:memory: MC_ACCOUNT_DIR=${TMPDIR} MC_MANAGER_DIR=${TMPDIR} MC_CLIENTS_DIR=${TMPDIR} PA_DISABLED=1 TELEPHONY_SERVICE_TEST=1 TELEPHONY_SERVICE_PROTOCOLS_DIR=${CMAKE_SOURCE_DIR}/tests/common/protocols TEST_DATA_DIR=${CMAKE_SOURCE_DIR}/tests/common/data) endif () set(TEST_COMMAND ${CMAKE_CURRENT_BINARY_DIR}/${TESTNAME} ${PLATFORM} -p -o -p -,txt -p -o -p ${CMAKE_BINARY_DIR}/test_${TESTNAME}.xml,xunitxml) if (DEFINED ARG_WAIT_FOR) SET(TEST_COMMAND ${TEST_COMMAND} --wait-for ${ARG_WAIT_FOR}) endif () add_test(${TESTNAME} ${DBUS_RUNNER} --keep-env --dbus-config=${CMAKE_BINARY_DIR}/tests/common/dbus-session.conf --max-wait=${ARG_TIMEOUT} ${ARG_TASKS} --task ${TEST_COMMAND} --task-name ${TESTNAME}) else () add_test(${TESTNAME} ${CMAKE_CURRENT_BINARY_DIR}/${TESTNAME} ${PLATFORM} -o -,txt -o ${CMAKE_BINARY_DIR}/test_${TESTNAME}.xml,xunitxml) endif() set_tests_properties(${TESTNAME} PROPERTIES ENVIRONMENT "${ARG_ENVIRONMENT}" TIMEOUT ${ARG_TIMEOUT}) if (DEFINED ARG_LIBRARIES) target_link_libraries(${TESTNAME} ${ARG_LIBRARIES}) endif () enable_coverage(${TESTNAME}) endif () endfunction(generate_test) function(generate_telepathy_test TESTNAME) set(options "") set(oneValueArgs WAIT_FOR) set(multiValueArgs TASKS LIBRARIES QT5_LIBRARIES) cmake_parse_arguments(ARG "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN} ) set(TASKS --task gnome-keyring-daemon -p -r -p -d --task-name gnome-keyring --ignore-return --task ${CMAKE_BINARY_DIR}/tests/common/NotificationsMock --task-name notifications --ignore-return --task "${DCONF_SERVICE}" --task-name dconf-service --ignore-return --task dconf -p write -p /org/gnome/empathy/use-conn -p false --task-name dconf-write --wait-for ca.desrt.dconf --ignore-return --task /usr/lib/telepathy/mission-control-5 --task-name mission-control --wait-for ca.desrt.dconf --ignore-return --task ${CMAKE_BINARY_DIR}/tests/common/mock/telepathy-mock --task-name telepathy-mock --wait-for org.freedesktop.Telepathy.MissionControl5 --ignore-return # FIXME: maybe it would be better to decide whether to run the handler in a per-test basis? --task ${CMAKE_BINARY_DIR}/handler/telephony-service-handler --task-name telephony-service-handler --wait-for org.freedesktop.Telepathy.ConnectionManager.mock --ignore-return ${ARG_TASKS}) if (NOT DEFINED ARG_LIBRARIES) set(ARG_LIBRARIES ${TP_QT5_LIBRARIES} telephonyservice mockcontroller telepathytest) endif(NOT DEFINED ARG_LIBRARIES) if (NOT DEFINED ARG_QT5_LIBRARIES) set(ARG_QT5_LIBRARIES Qt5::Core Qt5::DBus Qt5::Test Qt5::Qml) endif (NOT DEFINED ARG_QT5_LIBRARIES) if (NOT DEFINED ARG_WAIT_FOR) set(ARG_WAIT_FOR org.freedesktop.Telepathy.Client.TelephonyServiceHandler) endif (NOT DEFINED ARG_WAIT_FOR) generate_test(${TESTNAME} ${ARG_UNPARSED_ARGUMENTS} TASKS ${TASKS} LIBRARIES ${ARG_LIBRARIES} ${ARG_QT5_LIBRARIES} USE_DBUS USE_UI WAIT_FOR ${ARG_WAIT_FOR}) endfunction(generate_telepathy_test) telephony-service-0.5.3/cmake/modules/LibFindMacros.cmake000066400000000000000000000110601455543255600234060ustar00rootroot00000000000000# Version 1.0 (2013-04-12) # Public Domain, originally written by Lasse Kärkkäinen # Published at http://www.cmake.org/Wiki/CMake:How_To_Find_Libraries # If you improve the script, please modify the forementioned wiki page because # I no longer maintain my scripts (hosted as static files at zi.fi). Feel free # to remove this entire header if you use real version control instead. # Changelog: # 2013-04-12 Added version number (1.0) and this header, no other changes # 2009-10-08 Originally published # Works the same as find_package, but forwards the "REQUIRED" and "QUIET" arguments # used for the current package. For this to work, the first parameter must be the # prefix of the current package, then the prefix of the new package etc, which are # passed to find_package. macro (libfind_package PREFIX) set (LIBFIND_PACKAGE_ARGS ${ARGN}) if (${PREFIX}_FIND_QUIETLY) set (LIBFIND_PACKAGE_ARGS ${LIBFIND_PACKAGE_ARGS} QUIET) endif (${PREFIX}_FIND_QUIETLY) if (${PREFIX}_FIND_REQUIRED) set (LIBFIND_PACKAGE_ARGS ${LIBFIND_PACKAGE_ARGS} REQUIRED) endif (${PREFIX}_FIND_REQUIRED) find_package(${LIBFIND_PACKAGE_ARGS}) endmacro (libfind_package) # CMake developers made the UsePkgConfig system deprecated in the same release (2.6) # where they added pkg_check_modules. Consequently I need to support both in my scripts # to avoid those deprecated warnings. Here's a helper that does just that. # Works identically to pkg_check_modules, except that no checks are needed prior to use. macro (libfind_pkg_check_modules PREFIX PKGNAME) if (${CMAKE_MAJOR_VERSION} EQUAL 2 AND ${CMAKE_MINOR_VERSION} EQUAL 4) include(UsePkgConfig) pkgconfig(${PKGNAME} ${PREFIX}_INCLUDE_DIRS ${PREFIX}_LIBRARY_DIRS ${PREFIX}_LDFLAGS ${PREFIX}_CFLAGS) else (${CMAKE_MAJOR_VERSION} EQUAL 2 AND ${CMAKE_MINOR_VERSION} EQUAL 4) find_package(PkgConfig) if (PKG_CONFIG_FOUND) pkg_check_modules(${PREFIX} ${PKGNAME}) endif (PKG_CONFIG_FOUND) endif (${CMAKE_MAJOR_VERSION} EQUAL 2 AND ${CMAKE_MINOR_VERSION} EQUAL 4) endmacro (libfind_pkg_check_modules) # Do the final processing once the paths have been detected. # If include dirs are needed, ${PREFIX}_PROCESS_INCLUDES should be set to contain # all the variables, each of which contain one include directory. # Ditto for ${PREFIX}_PROCESS_LIBS and library files. # Will set ${PREFIX}_FOUND, ${PREFIX}_INCLUDE_DIRS and ${PREFIX}_LIBRARIES. # Also handles errors in case library detection was required, etc. macro (libfind_process PREFIX) # Skip processing if already processed during this run if (NOT ${PREFIX}_FOUND) # Start with the assumption that the library was found set (${PREFIX}_FOUND TRUE) # Process all includes and set _FOUND to false if any are missing foreach (i ${${PREFIX}_PROCESS_INCLUDES}) if (${i}) set (${PREFIX}_INCLUDE_DIRS ${${PREFIX}_INCLUDE_DIRS} ${${i}}) mark_as_advanced(${i}) else (${i}) set (${PREFIX}_FOUND FALSE) endif (${i}) endforeach (i) # Process all libraries and set _FOUND to false if any are missing foreach (i ${${PREFIX}_PROCESS_LIBS}) if (${i}) set (${PREFIX}_LIBRARIES ${${PREFIX}_LIBRARIES} ${${i}}) mark_as_advanced(${i}) else (${i}) set (${PREFIX}_FOUND FALSE) endif (${i}) endforeach (i) # Print message and/or exit on fatal error if (${PREFIX}_FOUND) if (NOT ${PREFIX}_FIND_QUIETLY) message (STATUS "Found ${PREFIX} ${${PREFIX}_VERSION}") endif (NOT ${PREFIX}_FIND_QUIETLY) else (${PREFIX}_FOUND) if (${PREFIX}_FIND_REQUIRED) foreach (i ${${PREFIX}_PROCESS_INCLUDES} ${${PREFIX}_PROCESS_LIBS}) message("${i}=${${i}}") endforeach (i) message (FATAL_ERROR "Required library ${PREFIX} NOT FOUND.\nInstall the library (dev version) and try again. If the library is already installed, use ccmake to set the missing variables manually.") endif (${PREFIX}_FIND_REQUIRED) endif (${PREFIX}_FOUND) endif (NOT ${PREFIX}_FOUND) endmacro (libfind_process) macro(libfind_library PREFIX basename) set(TMP "") if(MSVC80) set(TMP -vc80) endif(MSVC80) if(MSVC90) set(TMP -vc90) endif(MSVC90) set(${PREFIX}_LIBNAMES ${basename}${TMP}) if(${ARGC} GREATER 2) set(${PREFIX}_LIBNAMES ${basename}${TMP}-${ARGV2}) string(REGEX REPLACE "\\." "_" TMP ${${PREFIX}_LIBNAMES}) set(${PREFIX}_LIBNAMES ${${PREFIX}_LIBNAMES} ${TMP}) endif(${ARGC} GREATER 2) find_library(${PREFIX}_LIBRARY NAMES ${${PREFIX}_LIBNAMES} PATHS ${${PREFIX}_PKGCONF_LIBRARY_DIRS} ) endmacro(libfind_library) telephony-service-0.5.3/cmake/modules/ParseArguments.cmake000066400000000000000000000034061455543255600236770ustar00rootroot00000000000000# Parse arguments passed to a function into several lists separated by # upper-case identifiers and options that do not have an associated list e.g.: # # SET(arguments # hello OPTION3 world # LIST3 foo bar # OPTION2 # LIST1 fuz baz # ) # PARSE_ARGUMENTS(ARG "LIST1;LIST2;LIST3" "OPTION1;OPTION2;OPTION3" ${arguments}) # # results in 7 distinct variables: # * ARG_DEFAULT_ARGS: hello;world # * ARG_LIST1: fuz;baz # * ARG_LIST2: # * ARG_LIST3: foo;bar # * ARG_OPTION1: FALSE # * ARG_OPTION2: TRUE # * ARG_OPTION3: TRUE # # taken from http://www.cmake.org/Wiki/CMakeMacroParseArguments MACRO(PARSE_ARGUMENTS prefix arg_names option_names) SET(DEFAULT_ARGS) FOREACH(arg_name ${arg_names}) SET(${prefix}_${arg_name}) ENDFOREACH(arg_name) FOREACH(option ${option_names}) SET(${prefix}_${option} FALSE) ENDFOREACH(option) SET(current_arg_name DEFAULT_ARGS) SET(current_arg_list) FOREACH(arg ${ARGN}) SET(larg_names ${arg_names}) LIST(FIND larg_names "${arg}" is_arg_name) IF (is_arg_name GREATER -1) SET(${prefix}_${current_arg_name} ${current_arg_list}) SET(current_arg_name ${arg}) SET(current_arg_list) ELSE (is_arg_name GREATER -1) SET(loption_names ${option_names}) LIST(FIND loption_names "${arg}" is_option) IF (is_option GREATER -1) SET(${prefix}_${arg} TRUE) ELSE (is_option GREATER -1) SET(current_arg_list ${current_arg_list} ${arg}) ENDIF (is_option GREATER -1) ENDIF (is_arg_name GREATER -1) ENDFOREACH(arg) SET(${prefix}_${current_arg_name} ${current_arg_list}) ENDMACRO(PARSE_ARGUMENTS) telephony-service-0.5.3/cmake/modules/qt5.cmake000066400000000000000000000031061455543255600214450ustar00rootroot00000000000000# shamelessly copied over from oxide’s build system # to enable ARM cross compilation if(CMAKE_CROSSCOMPILING) # QT_MOC_EXECUTABLE is set by Qt5CoreConfigExtras, but it sets it to # the target executable rather than the host executable, which is no # use for cross-compiling. For cross-compiling, we have a guess and # override it ourselves if(NOT TARGET Qt5::moc) find_program( QT_MOC_EXECUTABLE moc PATHS /usr/lib/qt5/bin /usr/lib/${HOST_ARCHITECTURE}/qt5/bin NO_DEFAULT_PATH) if(QT_MOC_EXECUTABLE STREQUAL "QT_MOC_EXECUTABLE-NOTFOUND") message(FATAL_ERROR "Can't find a moc executable for the host arch") endif() add_executable(Qt5::moc IMPORTED) set_target_properties(Qt5::moc PROPERTIES IMPORTED_LOCATION "${QT_MOC_EXECUTABLE}") endif() # Dummy targets - not used anywhere, but this stops Qt5CoreConfigExtras.cmake # from creating them and checking if the binary exists, which is broken when # cross-building because it checks for the target system binary. We need the # host system binaries installed, because they are in the same package as the # moc in Ubuntu (qtbase5-dev-tools), which is not currently multi-arch if(NOT TARGET Qt5::qmake) add_executable(Qt5::qmake IMPORTED) endif() if(NOT TARGET Qt5::rcc) add_executable(Qt5::rcc IMPORTED) endif() if(NOT TARGET Qt5::uic) add_executable(Qt5::uic IMPORTED) endif() if(NOT TARGET Qt5::DBus) add_executable(Qt5::DBus IMPORTED) endif() else() # This should be enough to initialize QT_MOC_EXECUTABLE find_package(Qt5Core) endif() telephony-service-0.5.3/cmake_uninstall.cmake.in000066400000000000000000000016541455543255600217700ustar00rootroot00000000000000IF(NOT EXISTS "@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt") MESSAGE(FATAL_ERROR "Cannot find install manifest: \"@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt\"") ENDIF(NOT EXISTS "@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt") FILE(READ "@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt" files) STRING(REGEX REPLACE "\n" ";" files "${files}") FOREACH(file ${files}) MESSAGE(STATUS "Uninstalling \"$ENV{DESTDIR}${file}\"") IF(EXISTS "$ENV{DESTDIR}${file}") EXEC_PROGRAM( "@CMAKE_COMMAND@" ARGS "-E remove \"$ENV{DESTDIR}${file}\"" OUTPUT_VARIABLE rm_out RETURN_VALUE rm_retval ) IF(NOT "${rm_retval}" STREQUAL 0) MESSAGE(FATAL_ERROR "Problem when removing \"$ENV{DESTDIR}${file}\"") ENDIF(NOT "${rm_retval}" STREQUAL 0) ELSE(EXISTS "$ENV{DESTDIR}${file}") MESSAGE(STATUS "File \"$ENV{DESTDIR}${file}\" does not exist.") ENDIF(EXISTS "$ENV{DESTDIR}${file}") ENDFOREACH(file) telephony-service-0.5.3/config.h.in000066400000000000000000000037411455543255600172320ustar00rootroot00000000000000/* * Copyright (C) 2012-2015 Canonical, Ltd. * * Authors: * Olivier Tilloy * Gustavo Pichorim Boiko * * This file is part of telephony-service. * * telephony-service is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; version 3. * * telephony-service 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 . */ // Qt #include #include #include #include #include static bool canRunUninstalled = true; inline bool isRunningInstalled() { static bool installed = (QCoreApplication::applicationDirPath() == QDir(("@CMAKE_INSTALL_FULL_BINDIR@")).canonicalPath()); return installed || !canRunUninstalled; } inline QString telephonyServiceDir() { if (qEnvironmentVariableIsSet("SNAP")) { return QString("%1/@TELEPHONY_SERVICE_DIR@/").arg(QString(qgetenv("SNAP"))); } else if (isRunningInstalled()) { return QString("@TELEPHONY_SERVICE_DIR@/"); } else { return QString("@CMAKE_SOURCE_DIR@/"); } } inline QString ubuntuPhonePluginPath() { if (isRunningInstalled() || qEnvironmentVariableIsSet("SNAP")) { return QString(); } else { return QString("@CMAKE_SOURCE_DIR@/"); } } inline QString protocolsDir() { QString directory = qgetenv("TELEPHONY_SERVICE_PROTOCOLS_DIR"); if (directory.isEmpty()) { directory = telephonyServiceDir() + "/protocols"; } return directory; } telephony-service-0.5.3/data/000077500000000000000000000000001455543255600161135ustar00rootroot00000000000000telephony-service-0.5.3/data/org.freedesktop.Notifications.xml000066400000000000000000000035011455543255600245450ustar00rootroot00000000000000 telephony-service-0.5.3/debian/000077500000000000000000000000001455543255600164245ustar00rootroot00000000000000telephony-service-0.5.3/debian/Jenkinsfile000066400000000000000000000004251455543255600206110ustar00rootroot00000000000000@Library('ubports-build-tools') _ buildAndProvideDebianPackage() // Or if the package consists entirely of arch-independent packages: // (optiional optimization, will confuse BlueOcean's live view at build stage) // buildAndProvideDebianPackage(/* isArchIndependent */ true) telephony-service-0.5.3/debian/changelog000066400000000000000000001400041455543255600202750ustar00rootroot00000000000000telephony-service (0.5.3) unstable; urgency=medium * Upstream-provided Debian package for telephony-service. See upstream ChangeLog for recent changes. -- UBports developers Sun, 28 Jan 2024 12:07:26 +0100 telephony-service (0.5.2) unstable; urgency=medium * Upstream-provided Debian package for telephony-service. See upstream ChangeLog for recent changes. -- UBports developers Sun, 15 Oct 2023 01:55:02 +0200 telephony-service (0.5.1) unstable; urgency=medium * Upstream-provided Debian package for telephony-service. See upstream ChangeLog for recent changes. -- UBports developers Tue, 14 Feb 2023 11:50:04 +0100 telephony-service (0.5) unstable; urgency=medium [ Guido Berhoerster ] * Port to lomiri-url-dispatcher [ jEzEk ] * Make it possible to ask nuntium for MMS message re-download. * Revert status on dbus reply error on message redownload [ UBports developers ] * Upstream-provided Debian package for telephony-service. See upstream ChangeLog for recent changes. -- UBports developers Fri, 13 Jan 2023 00:16:03 +0100 telephony-service (0.4+0ubports4) focal; urgency=medium * Update for focal * Update descriptions, homepage and VCS repo * Update dh version * Rename Ubuntu to Lomiri and adjust paths * Remove obsolete account-plugin-irc-unity8, account-plugin-sip-unity8 subpackages * Add missing dependencies on python3, python3-debus, python3-gi for phone-gsettings-migration.py -- Guido Berhoerster Fri, 19 Nov 2021 16:17:06 +0100 telephony-service (0.4+0ubports3) xenial; urgency=medium * mms lost or on download error: notify user -- Lionel Duboeuf Thu, 05 Nov 2020 09:00:51 +0200 telephony-service (0.4+0ubports2) xenial; urgency=medium * sms/mms notification: use the sent date -- Lionel Duboeuf Thu, 01 Oct 2020 09:00:51 +0200 telephony-service (0.4+0ubports1) xenial; urgency=medium * debian/control: Allow building the project with crossbuilder. * Fix handling of the contactsChanged signal. -- Alberto Mardegan Thu, 13 Sep 2018 23:53:21 +0300 telephony-service (0.3+0ubports1) xenial; urgency=medium * Bump upstream version. -- Alberto Mardegan Sat, 08 Sep 2018 09:41:43 +0300 telephony-service (0.2+0ubports2) xenial; urgency=medium * Fix version of debian package. -- Alberto Mardegan Fri, 07 Sep 2018 23:59:06 +0300 telephony-service (0.2+ubports1) xenial; urgency=medium * No change rebuild against new QtPim. -- Alberto Mardegan Wed, 25 Jul 2018 22:28:17 +0300 telephony-service (0.2+ubports) xenial; urgency=medium * Imported to UBports -- UBports auto importer Mon, 08 Jan 2018 00:09:58 +0100 telephony-service (0.1+17.04.20161213.1-0ubuntu1) zesty; urgency=medium [ Renato Araujo Oliveira Filho, Roberto Mier Escandon ] * prefixes snap env var value to paths in case service is into a snap package (LP: #1629009) [ Tiago Salem Herrmann ] * Increase dbus-test-runner timeout to 6 minutes. [ Roberto Mier Escandon, Tiago Salem Herrmann ] * Requesting protocols from qml plugin using DBus in case protocols dir folder does not exits. -- Tiago Salem Herrmann Tue, 13 Dec 2016 12:47:02 +0000 telephony-service (0.1+17.04.20161129-0ubuntu1) zesty; urgency=medium * Group chat support. * Ignore the tone-generator dependency on s390x just to make it possible to land there. -- Gustavo Pichorim Boiko Tue, 29 Nov 2016 01:09:09 +0000 telephony-service (0.1+16.10.20160927-0ubuntu1) yakkety; urgency=medium * Request a wake lock so the device doesn't go to deep sleep when receiving an sms. (LP: #1516696) -- Tiago Salem Herrmann Tue, 27 Sep 2016 14:32:08 +0000 telephony-service (0.1+16.10.20160909.1-0ubuntu1) yakkety; urgency=medium [ Tiago Salem Herrmann ] * Fix test failure with new libphonenumber release. * Move telepathy-ofono from "Depends" to "Suggests". -- Gustavo Pichorim Boiko Fri, 09 Sep 2016 14:54:02 +0000 telephony-service (0.1+16.10.20160902.1-0ubuntu1) yakkety; urgency=medium [ Alfonso Sanchez-Beato ] * Make sure we play notification sounds if media-hub re-starts (LP: #1544477) [ Gustavo Pichorim Boiko ] * Disable tests temporarily -- Gustavo Pichorim Boiko Fri, 02 Sep 2016 18:36:19 +0000 telephony-service (0.1+16.10.20160601.1-0ubuntu1) yakkety; urgency=medium * Contact name now checks for QContactDisplayLabel to display full name when possible. (LP: #1585634) -- Renato Araujo Oliveira Filho Wed, 01 Jun 2016 16:08:55 +0000 telephony-service (0.1+16.10.20160520-0ubuntu1) yakkety; urgency=medium [ CI Train Bot ] * Resync trunk. added: po/sq.po [ Renato Araujo Oliveira Filho ] * Update PhonNumber components to use the new SDK 1.3 -- Renato Araujo Oliveira Filho Fri, 20 May 2016 14:23:59 +0000 telephony-service (0.1+16.04.20160415.1-0ubuntu1) xenial; urgency=medium * do not set SimNames if it's empty use a config file to avoid running the script instead of an account service property -- Tiago Salem Herrmann Fri, 15 Apr 2016 21:21:41 +0000 telephony-service (0.1+16.04.20160411-0ubuntu1) xenial; urgency=medium [ Tiago Salem Herrmann ] * Fix HandlerTest flaky test. * Initial work moving properties from gsettings to accounts service. (LP: #1418040) -- Alfonso Sanchez-Beato Mon, 11 Apr 2016 17:38:50 +0000 telephony-service (0.1+16.04.20160331.4-0ubuntu1) xenial; urgency=medium * Do not change power mode on incoming MMS'. This is done by unity now. (LP: #1562923) * Fix duplicate tasks launched during tests -- Tiago Salem Herrmann Thu, 31 Mar 2016 22:17:43 +0000 telephony-service (0.1+16.04.20160321.2-0ubuntu1) xenial; urgency=medium [ Jim Hodapp ] * Make sure the sound preview uses the correct audioRole API. -- Timo Jyrinki Mon, 21 Mar 2016 20:11:11 +0000 telephony-service (0.1+16.04.20160307-0ubuntu1) xenial; urgency=medium * Compare target id to check if this is a channel to the self contact. (LP: #1546369) * Display notifications for sms's where sender phone number matches the sim card phone number that received the message. (LP: #1547462) * Only add notifications to messaging-menu if ack didn't happen in the meantime. -- Tiago Salem Herrmann Mon, 07 Mar 2016 20:13:48 +0000 telephony-service (0.1+16.04.20160122-0ubuntu1) xenial; urgency=medium [ Arthur Mello ] * Enable video support for mms [ Gustavo Pichorim Boiko ] * Enable audio support for mms. * Expose extra information about the protocols we support. * Make it possible to send messages to "multimedia" accounts and fallback to ofono accounts when not possible. * Remove protocol files that are not supposed to be shipped. [ Tiago Salem Herrmann ] * Add test for account fallback. * Add tests for sending messages with attachments * Make sendMessage() return the actual accountId used to send the message. -- Gustavo Pichorim Boiko Fri, 22 Jan 2016 02:58:04 +0000 telephony-service (0.1+16.04.20160105-0ubuntu1) xenial; urgency=medium [ CI Train Bot ] * Resync trunk. added: po/ne.po [ Tiago Salem Herrmann ] * Update mms flag so telephony-service-indicator can correctly manage attachments. (LP: #1529903) -- Bill Filler Tue, 05 Jan 2016 17:18:22 +0000 telephony-service (0.1+16.04.20151207-0ubuntu1) xenial; urgency=medium [ CI Train Bot ] * New rebuild forced. * Resync trunk. added: po/be.po [ Tiago Salem Herrmann ] * Fill notifications with attachments info when no text is received. (LP: #1517654) * Improve notifications on multi-sim devices. (LP: #1487528, #1460301) -- Tiago Salem Herrmann Mon, 07 Dec 2015 17:55:49 +0000 telephony-service (0.1+16.04.20151202.1-0ubuntu1) xenial; urgency=medium [ CI Train Bot ] * New rebuild forced. [ Tiago Salem Herrmann ] * Support new audio role api. (LP: #1493851) -- Tiago Salem Herrmann Wed, 02 Dec 2015 21:38:51 +0000 telephony-service (0.1+16.04.20151119-0ubuntu1) xenial; urgency=medium [ Gustavo Pichorim Boiko ] * Add tests for the NotificationMenu and AuthHandler. * Make sure telephony-service QML plugin does not use uninstalled paths to look for protocol information. [ Tiago Salem Herrmann ] * Add initial support for the ChatState interface. * Add support for sending attachments to regular IM accounts. * Create new QMediaPlayer instances on every incoming call. * Fix notifications and messaging menu for generic IM accounts. * Implement PresenceRequest qml component. * Implement simple authentication handler. * Refactor TelepathyHelper initialization Refactor AccountEntry initialization -- Gustavo Pichorim Boiko Thu, 19 Nov 2015 12:59:41 +0000 telephony-service (0.1+16.04.20151103-0ubuntu1) xenial; urgency=medium [ Tiago Salem Herrmann ] * Enable cross compiling. -- Gustavo Pichorim Boiko Tue, 03 Nov 2015 14:26:55 +0000 telephony-service (0.1+16.04.20151029.2-0ubuntu1) xenial; urgency=medium [ CI Train Bot ] * New rebuild forced. * Resync trunk. added: po/hr.po [ Tiago Salem Herrmann ] * Keep reference of observer pointer so it doesn't get deleted. (LP: #1484300) -- Tiago Salem Herrmann Thu, 29 Oct 2015 19:15:54 +0000 telephony-service (0.1+15.10.20151013-0ubuntu1) wily; urgency=medium [ Gustavo Pichorim Boiko ] * Make it possible to set all fields in the contact matcher. Some components (like HistoryService's events and threads) provide a cached contact match value and are just interested in watching for changes. * Use smooth scaling when resizing image files to send via MMS. [ Tiago Salem Herrmann ] * Convert x-ofono-unknown to "Unknown contact" Set proper icon for group chats in messaging-menu -- CI Train Bot Tue, 13 Oct 2015 20:36:15 +0000 telephony-service (0.1+15.10.20150925-0ubuntu1) wily; urgency=medium [ CI Train Bot ] * New rebuild forced. [ Gustavo Pichorim Boiko ] * Make it possible to acknowledge all pending messages of a given conversation at once. (LP: #1488498) -- Gustavo Pichorim Boiko Fri, 25 Sep 2015 13:06:14 +0000 telephony-service (0.1+15.10.20150818-0ubuntu1) wily; urgency=medium [ CI Train Bot ] * Resync trunk. [ Tiago Salem Herrmann ] * Change existingChat() to existingChannels(). (LP: #1482401, #1347906) -- CI Train Bot Tue, 18 Aug 2015 13:35:42 +0000 telephony-service (0.1+15.10.20150814-0ubuntu1) wily; urgency=medium [ Gustavo Pichorim Boiko ] * Make GreeterContacts thread safe. (LP: #1471338) -- CI Train Bot Fri, 14 Aug 2015 20:38:56 +0000 telephony-service (0.1+15.10.20150810.1-0ubuntu1) wily; urgency=medium [ Tiago Salem Herrmann ] * Check contact results on the client side. Phone comparison in the server side is not reliable. (LP: #1476833) * Use libphonenumber for phone number validation, normalization and comparison. (LP: #1471545, #1444883, #1334860) -- CI Train Bot Mon, 10 Aug 2015 22:45:07 +0000 telephony-service (0.1+15.10.20150727-0ubuntu2~gcc5.1) wily; urgency=medium * No change upload built with GCC 5. -- Matthias Klose Thu, 30 Jul 2015 11:51:41 +0200 telephony-service (0.1+15.10.20150727-0ubuntu1) wily; urgency=medium [ CI Train Bot ] * Resync trunk. added: po/cy.po [ Gustavo Pichorim Boiko ] * Make sure outgoing calls are not set as accepted by the approver. (LP: #1476826) -- CI Train Bot Mon, 27 Jul 2015 19:38:59 +0000 telephony-service (0.1+15.10.20150717-0ubuntu1) wily; urgency=medium [ Gustavo Pichorim Boiko ] * Specify the domain when translating unknown and private number strings. (LP: #1470938) -- CI Train Bot Fri, 17 Jul 2015 18:20:41 +0000 telephony-service (0.1+15.10.20150709-0ubuntu1) wily; urgency=medium [ Gustavo Pichorim Boiko ] * Sync the fixes that were released in OTA5: (LP: #1384274, #1433068, #1412709, #1427286, #1453004) -- CI Train Bot Thu, 09 Jul 2015 13:46:05 +0000 telephony-service (0.1+15.10.20150706.1-0ubuntu1) wily; urgency=medium [ Alberto Aguirre ] * No change rebuid against platform-api 3 -- CI Train Bot Mon, 06 Jul 2015 22:06:19 +0000 telephony-service (0.1+15.10.20150701-0ubuntu1) wily; urgency=medium [ CI Train Bot ] * Resync trunk. [ Tiago Salem Herrmann ] * Update to telepathy-qt 0.9.6.1 -- CI Train Bot Wed, 01 Jul 2015 14:16:47 +0000 telephony-service (0.1+15.10.20150617-0ubuntu1) wily; urgency=medium [ CI Train Bot ] * New rebuild forced. [ Gustavo Pichorim Boiko ] * Make it possible to specify the list of supported protocols dynamically by installing .protocol files in /usr/share/telephony- service/protocols [ Tiago Salem Herrmann ] * Add multimedia connection manager support * Remove slashes when normalizing phone numbers. (LP: #1462090) -- CI Train Bot Wed, 17 Jun 2015 20:39:47 +0000 telephony-service (0.1+15.10.20150608.4-0ubuntu1) wily; urgency=medium [ Gustavo Pichorim Boiko ] * Make it possible to remove call notifications from the messaging menu (LP: #1455408) [ Tiago Salem Herrmann ] * Fix TelepathyHelperTest and HandlerTest. -- CI Train Bot Mon, 08 Jun 2015 23:04:10 +0000 telephony-service (0.1+15.04.20150521.1-0ubuntu1) vivid; urgency=medium [ CI Train Bot ] * Resync trunk. added: po/cs.po [ Tiago Salem Herrmann ] * Properly move ringtone calls to a separate thread. -- CI Train Bot Thu, 21 May 2015 18:45:49 +0000 telephony-service (0.1+15.04.20150511.1-0ubuntu1) vivid; urgency=medium [ CI Train Bot ] * Resync trunk. [ Gustavo Pichorim Boiko ] * Fix voicemail detection on CallEntry. (LP: #1449710) -- CI Train Bot Mon, 11 May 2015 13:47:20 +0000 telephony-service (0.1+15.04.20150430.1-0ubuntu1) vivid; urgency=medium [ CI Train Bot ] * Resync trunk. [ Gustavo Pichorim Boiko ] * Add an initial set of tests to make sure USSD is working. * Make it possible to clear the notifications. This is intended to be used by application tests. [ Tiago Salem Herrmann ] * Add an USSDManager instance to each OfonoAccountEntry. (LP: #1438273) -- CI Train Bot Thu, 30 Apr 2015 15:55:24 +0000 telephony-service (0.1+15.04.20150421-0ubuntu1) vivid; urgency=medium [ Gustavo Pichorim Boiko ] * Add unit tests for the ToneGenerator class. added: tests/libtelephonyservice/ToneGeneratorMock.cpp tests/libtelephonyservice/ToneGeneratorTest.cpp [ You-Sheng Yang ] * Class ToneGenerator creates a oneshot timer to keep track of when to send a StopTone req after successfully sending a StartEventTone one. However, when playDTMFTone() is called the second time within the timeout interval (0.2s), it's currently completely ignored and no tone will ever be generated. As a result, when someone presses dialpad buttons very quickly, some of them sound missed because not each of them is accompanied by a DTMF tone. (LP: #1403600) -- CI Train Bot Tue, 21 Apr 2015 13:07:12 +0000 telephony-service (0.1+15.04.20150416.2-0ubuntu1) vivid; urgency=medium [ Gustavo Pichorim Boiko ] * Another attempt to fix the failures that happen only on jenkins. [ Tiago Salem Herrmann ] * Add sanity check to ofono-setup. (LP: #1439566) -- CI Train Bot Thu, 16 Apr 2015 16:47:13 +0000 telephony-service (0.1+15.04.20150414-0ubuntu1) vivid; urgency=medium [ CI Train Bot ] * Resync trunk. [ Gustavo Pichorim Boiko ] * Expose the account type to QML. (LP: #1439718) -- CI Train Bot Tue, 14 Apr 2015 17:37:11 +0000 telephony-service (0.1+15.04.20150330.1-0ubuntu1) vivid; urgency=medium [ Gustavo Pichorim Boiko ] * Move all tests to root/tests to make it easier to share components Add tests to existing components Add tests to make sure supporting non-phone based accounts works Fix problems found while writing the tests. Fix coverage reports removed: handler/tests/dbus-test- wrapper.sh.in handler/tests/telepathyhelper.cpp handler/tests/telepathyhelper.h added: cmake/modules/GenerateTest.cmake tests/ tests/CMakeLists.txt tests/common/ tests/common/CMakeLists.txt tests/common/dbus- services/ tests/common/dbus-services/CMakeLists.txt tests/common/dbus-session.conf.in tests/common/mock/emergencymodeiface.cpp tests/common/mock/emergencymodeiface.h tests/common/mock/ussdiface.cpp tests/common/mock/ussdiface.h tests/common/mock/voicemailiface.cpp tests/common/mock/voicemailiface.h tests/common/telepathytest.cpp tests/common/telepathytest.h tests/libtelephonyservice/AccountEntryFactoryTest.cpp tests/libtelephonyservice/AccountEntryTest.cpp tests/libtelephonyservice/ChatManagerTest.cpp tests/libtelephonyservice/OfonoAccountEntryTest.cpp tests/libtelephonyservice/TelepathyHelperTest.cpp renamed: Ubuntu/Telephony/tests/ => tests/Ubuntu.Telephony/ handler/tests/ => tests/handler/ handler/tests/mock/ => tests/common/mock/ handler/tests/mockcontroller.cpp => tests/common/mockcontroller.cpp handler/tests/mockcontroller.h => tests/common/mockcontroller.h libtelephonyservice/tests/ => tests/libtelephonyservice/ * Support accounts not based on phone numbers. -- CI Train Bot Mon, 30 Mar 2015 20:56:48 +0000 telephony-service (0.1+15.04.20150227-0ubuntu1) vivid; urgency=medium [ CI Train Bot ] * New rebuild forced. [ Tiago Salem Herrmann ] * Check if default sim is active before sending messages. (LP: #1423942) * Do not create instance of GreeterContacts to avoid dealock with unity. (LP: #1426399) -- CI Train Bot Fri, 27 Feb 2015 15:28:57 +0000 telephony-service (0.1+15.04.20150217-0ubuntu1) vivid; urgency=medium [ Tiago Salem Herrmann ] * Don't remove the call channel if hangup() does not succeed. -- CI Train Bot Tue, 17 Feb 2015 17:24:10 +0000 telephony-service (0.1+15.04.20150211-0ubuntu1) vivid; urgency=medium [ Gustavo Pichorim Boiko ] * Ignore accounts not explicitly supported for now. (LP: #1340758) [ Tiago Salem Herrmann ] * Initialize variables to avoid randomly showing the voicemail indicator for telepathy accounts that do not support the voicemail interface. -- Ubuntu daily release Wed, 11 Feb 2015 18:18:25 +0000 telephony-service (0.1+15.04.20150205.1-0ubuntu1) vivid; urgency=medium [ Tiago Salem Herrmann ] * Avoid using ofono to get the list of modems in ofono-setup. (LP: #1413316) -- Ubuntu daily release Thu, 05 Feb 2015 20:22:09 +0000 telephony-service (0.1+15.04.20150205-0ubuntu1) vivid; urgency=medium [ Tiago Salem Herrmann ] * Add initial MMS group chat support. (LP: #1415458) -- Ubuntu daily release Thu, 05 Feb 2015 12:19:35 +0000 telephony-service (0.1+15.04.20150203-0ubuntu1) vivid; urgency=medium [ CI Train Bot ] * Resync trunk [ Gustavo Pichorim Boiko ] * Move the serial to be a property on account entry, and make sure it is read even when the account is not connected. -- Ubuntu daily release Tue, 03 Feb 2015 18:45:35 +0000 telephony-service (0.1+15.04.20150124-0ubuntu1) vivid; urgency=low [ Gustavo Pichorim Boiko ] * Notify errors when creating conference calls and putting calls on hold. (LP: #1410365) -- Ubuntu daily release Sat, 24 Jan 2015 02:03:16 +0000 telephony-service (0.1+15.04.20150120.2-0ubuntu1) vivid; urgency=low [ CI Train Bot ] * Resync trunk [ Tiago Salem Herrmann ] * Invoke LiveCall view when answering incoming calls. (LP: #1410961) * Silence incoming calls when power button is pressed. (LP: #1376240) -- Ubuntu daily release Tue, 20 Jan 2015 16:53:13 +0000 telephony-service (0.1+15.04.20150116-0ubuntu1) vivid; urgency=low [ Tiago Salem Herrmann ] * Expose HandleMediaKey(bool doubleClick) to DBus. (LP: #1398427) -- Ubuntu daily release Fri, 16 Jan 2015 10:28:07 +0000 telephony-service (0.1+15.04.20150109-0ubuntu1) vivid; urgency=low [ CI Train Bot ] * Resync trunk [ Tiago Salem Herrmann ] * Check if the account exists before accessing the pointer. (LP: #1408029) * Only register telepathy clients and observers after TelepathyHelper is ready. (LP: #1408103) -- Ubuntu daily release Fri, 09 Jan 2015 13:44:26 +0000 telephony-service (0.1+15.04.20141219-0ubuntu1) vivid; urgency=low [ CI Train Bot ] * Resync trunk [ Tiago Salem Herrmann ] * Dynamically add and remove telepathy accounts. -- Ubuntu daily release Fri, 19 Dec 2014 15:25:02 +0000 telephony-service (0.1+15.04.20141212-0ubuntu1) vivid; urgency=low [ CI Train Bot ] * Resync trunk [ Renato Araujo Oliveira Filho ] * Added support for [',', ';', '+', '*', '#'] on phone number fields. (LP: #1399011, #1372548) [ Ubuntu daily release ] * New rebuild forced -- Ubuntu daily release Fri, 12 Dec 2014 20:34:51 +0000 telephony-service (0.1+15.04.20141210-0ubuntu1) vivid; urgency=low [ Ubuntu daily release ] * New rebuild forced [ Tiago Salem Herrmann ] * Only set voicemail is the phone number is not empty. (LP: #1398431) * Use dbus-send to get the list of modems from ofono. -- Ubuntu daily release Wed, 10 Dec 2014 18:01:56 +0000 telephony-service (0.1+15.04.20141121.1-0ubuntu1) vivid; urgency=low [ Alexandre Abreu ] * Add phone number match to phone utils from libphonenumber. This is mostly useful in phone number replacement cases like: [ Tiago Salem Herrmann ] * Provide the translated strings to messaging-menu. Update pot file (LP: #1389234) * Use only active accounts to send messages. (LP: #1389708) * Make sure to always use the selected ringtone on every new incoming call. (LP: #1392222) [ CI bot ] * Resync trunk [ Timo Jyrinki ] * Merge also lp:~tiagosh/telephony-service/swipe-to-answer [ Ubuntu daily release ] * New rebuild forced [ Gustavo Pichorim Boiko ] * Update the snap decision to support more actions. * Do not crash if the account manager preparation job does not succeed. * Wait until the contact match request finishes before showing the OSDs. (LP: #1359849) * Do not enable quick replying for icoming calls from unknown or private numbers. (LP: #1394297) -- Ubuntu daily release Fri, 21 Nov 2014 17:30:02 +0000 telephony-service (0.1+15.04.20141110.2-0ubuntu1) vivid; urgency=low [ Gustavo Pichorim Boiko ] * Update the snap decision to support more actions. (LP: #1218289) * Do not crash if the account manager preparation job does not succeed. [ Tiago Salem Herrmann ] * Use swipe to answer/reject calls (LP: #1358343) -- Ubuntu daily release Mon, 10 Nov 2014 18:29:26 +0000 telephony-service (0.1+14.10.20141025~rtm-0ubuntu1) 14.09; urgency=low [ CI bot ] * Resync trunk [ Tiago Salem Herrmann ] * Emit a sound feedback when all calls are ended. Play a waiting tone instead of regular ringtone for waiting calls. (LP: #1372973) * Wake up the screen on incoming mms's. (LP: #1347856) [ Ubuntu daily release ] * New rebuild forced -- Ubuntu daily release Sat, 25 Oct 2014 18:24:27 +0000 telephony-service (0.1+14.10.20141007.1-0ubuntu1) 14.09; urgency=low [ CI bot ] * Resync trunk [ Gustavo Pichorim Boiko ] * Report the emergency calls availability to QML. (LP: #1369774) [ Tiago Salem Herrmann ] * Add simLocked() property to AccountEntry. [ Ubuntu daily release ] * New rebuild forced -- Ubuntu daily release Tue, 07 Oct 2014 17:04:51 +0000 telephony-service (0.1+14.10.20140918.1-0ubuntu1) utopic; urgency=low [ CI bot ] * Resync trunk [ Tiago Salem Herrmann ] * Avoid displaying on screen notifications for messages if the message thread is open. (LP: #1347906) * Fix messaging-menu for handling voicemail correctly on dual sim phones. [ Ubuntu daily release ] * New rebuild forced -- Ubuntu daily release Thu, 18 Sep 2014 13:21:37 +0000 telephony-service (0.1+14.10.20140911-0ubuntu1) utopic; urgency=low [ Tiago Salem Herrmann ] * Enable dialpad sounds only when enabled in the system-settings. (LP: #1365583) * Add support for sending silent sms's (skip history service) (LP: #1340255) * Fix crash on the desktop. Use default account for messaging as a fallback. Display a dialog asking the user to choose a sim card when sending a message from messaging-menu and no default sim card is defined. (LP: #1367270) -- Ubuntu daily release Thu, 11 Sep 2014 21:29:06 +0000 telephony-service (0.1+14.10.20140905-0ubuntu1) utopic; urgency=low [ CI bot ] * Resync trunk [ Michał Sawicz ] * Add :any to python build dependency and rely on debhelper instead of direct make calls. [ Gustavo Pichorim Boiko ] * Add a runtime dependency on gsettings-ubuntu-schemas needed by the SIM label settings. [ Renato Araujo Oliveira Filho ] * Improve contact watcher. [ Dimitri John Ledkov ] * Add :any to python build dependency and rely on debhelper instead of direct make calls. -- Ubuntu daily release Fri, 05 Sep 2014 13:47:32 +0000 telephony-service (0.1+14.10.20140903-0ubuntu1) utopic; urgency=low [ CI bot ] * Resync trunk [ Ricardo Salveti de Araujo ] * ringtone: adding media role for both ringtone and message -- Ubuntu daily release Wed, 03 Sep 2014 06:28:35 +0000 telephony-service (0.1+14.10.20140828-0ubuntu1) utopic; urgency=low [ Gustavo Pichorim Boiko ] * Add a method to invoke greeter. -- Ubuntu daily release Thu, 28 Aug 2014 23:45:12 +0000 telephony-service (0.1+14.10.20140827-0ubuntu1) utopic; urgency=low [ CI bot ] * Resync trunk [ Tiago Salem Herrmann ] * Initial support for AudioOutputs interface. [ Ubuntu daily release ] * New rebuild forced -- Ubuntu daily release Wed, 27 Aug 2014 16:39:51 +0000 telephony-service (0.1+14.10.20140825-0ubuntu1) utopic; urgency=low [ CI bot ] * Resync trunk [ Ubuntu daily release ] * New rebuild forced [ Martin Pitt ] * Mark for using language packs. -- Ubuntu daily release Mon, 25 Aug 2014 06:40:43 +0000 telephony-service (0.1+14.10.20140821-0ubuntu1) utopic; urgency=low [ CI bot ] * Resync trunk [ Tiago Salem Herrmann ] * Report network name and sim presence to apps. -- Ubuntu daily release Thu, 21 Aug 2014 21:21:55 +0000 telephony-service (0.1+14.10.20140820-0ubuntu1) utopic; urgency=low [ Albert Astals ] * Update .pot * Mark User Metrics strings for translation and extract them so they can get translated (LP: #1353755) -- Ubuntu daily release Wed, 20 Aug 2014 14:07:22 +0000 telephony-service (0.1+14.10.20140818.1-0ubuntu1) utopic; urgency=low [ CI bot ] * Resync trunk [ Tiago Salem Herrmann ] * Do not connect/disconnect signals if the connection is not ready. -- Ubuntu daily release Mon, 18 Aug 2014 17:45:07 +0000 telephony-service (0.1+14.10.20140814-0ubuntu1) utopic; urgency=low [ CI bot ] * Resync trunk [ Tiago Salem Herrmann ] * Fix USSDManager for multiple accounts -- Ubuntu daily release Thu, 14 Aug 2014 20:21:37 +0000 telephony-service (0.1+14.10.20140813.1-0ubuntu1) utopic; urgency=low [ Ubuntu daily release ] * New rebuild forced [ Gustavo Pichorim Boiko ] * Check if the self contact actually exists before getting its presence. (LP: #1355388) * Do not update the .po files during `make`, update only the .pot file. [ Martti Piirainen ] * Adding support for tone generator (LP: #1187453). (LP: #1187453) [ Tiago Salem Herrmann ] * Use system settings to retrieve sim card display names. * Reduce vibration duration for text messages. Fix vibration in silent mode options for calls/messages (LP: #1347908) -- Ubuntu daily release Wed, 13 Aug 2014 22:31:48 +0000 telephony-service (0.1+14.10.20140807-0ubuntu1) utopic; urgency=low [ CI bot ] * Resync trunk [ Tiago Salem Herrmann ] * Check if there is an account instance before actually accessing it. [ Mirco Müller ] * Added the use of the symbolic icon for the incoming-call as the secondary icon as requested by Design. (LP: #1346838) -- Ubuntu daily release Thu, 07 Aug 2014 18:46:01 +0000 telephony-service (0.1+14.10.20140730-0ubuntu1) utopic; urgency=low [ Gustavo Pichorim Boiko ] * Expose the telepathy accounts to QML as objects. This allows us to centralize the information about each and every account. This also fixes the problem that the voicemail and emergency numbers were only being retrieved for the first account. -- Ubuntu daily release Wed, 30 Jul 2014 18:01:18 +0000 telephony-service (0.1+14.10.20140725.2-0ubuntu1) utopic; urgency=low [ Ubuntu daily release ] * New rebuild forced [ Tiago Salem Herrmann ] * Use correct label for blocked and private numbers on messaging-menu. (LP: #1340386) * Listen for VoicemailNumberChanged() signal (LP: #1347085) * Recover mute state. (LP: #1346995) * Fix smil file generation (LP: #1347079) -- Ubuntu daily release Fri, 25 Jul 2014 21:33:01 +0000 telephony-service (0.1+14.10.20140717.1-0ubuntu1) utopic; urgency=low [ Tiago Salem Herrmann ] * Add isAccountConnected() so apps can track status of individual accounts. Fix crash when sending acks during the app startup . -- Ubuntu daily release Thu, 17 Jul 2014 18:24:00 +0000 telephony-service (0.1+14.10.20140715.1-0ubuntu1) utopic; urgency=low [ Renato Araujo Oliveira Filho ] * Export PhoneNumber.PhoneUtils.defaultRegion with the region code based on the application locale. (LP: #1331515) -- Ubuntu daily release Tue, 15 Jul 2014 22:12:05 +0000 telephony-service (0.1+14.10.20140715-0ubuntu1) utopic; urgency=low [ Gustavo Pichorim Boiko ] * Make sure the handler gets registered to DBus even when there is no compatible telepathy account configured. (LP: #1340086) -- Ubuntu daily release Tue, 15 Jul 2014 16:31:49 +0000 telephony-service (0.1+14.10.20140709.2-0ubuntu1) utopic; urgency=low [ Michael Terry ] * Don't run tests during build if nocheck is in DEB_BUILD_OPTIONS. [ Tiago Salem Herrmann ] * Sort list-modems output so /ril_0 is set to account0 on first boot. * Add support for vibration on incoming calls/messages. (LP: #1232350) * Reduce image sizes before sending them to telepathy. MMS's have a limit of 300k (LP: #1337585) [ Renato Araujo Oliveira Filho ] * Update PhoneNumber formatter text if the autoFormat property changes. -- Ubuntu daily release Wed, 09 Jul 2014 17:41:55 +0000 telephony-service (0.1+14.10.20140709-0ubuntu1) utopic; urgency=low [ Tiago Salem Herrmann ] * Fix message token to properly remove read messages from the messaging menu. (LP: #1236895) [ Renato Araujo Oliveira Filho ] * Added uninstall rule in CMake. Implemented formattedText in AsYouTypeFormatter class that return the cursor position after the number format. Fixed PhoneNumberField cursor position after editing. . -- Ubuntu daily release Wed, 09 Jul 2014 00:58:42 +0000 telephony-service (0.1+14.10.20140703-0ubuntu1) utopic; urgency=low [ Michael Terry ] * Fix failing GreeterContactsTest by not overriding getuid(), which confuses Qt 5.3 unless we also override geteuid(), which we don't want to do because it confuses dbus. So instead, we'll just use the test runner's UID. [ Gustavo Pichorim Boiko ] * Expose the greeter being active to the QML plugin. * Expose the emergency numbers to the QML plugin [ Tiago Salem Herrmann ] * Use g_variant_unref() instead of g_object_unref() to avoid crash. * Implement MMS sending support. -- Ubuntu daily release Thu, 03 Jul 2014 03:59:10 +0000 telephony-service (0.1+14.10.20140618-0ubuntu1) utopic; urgency=low [ Gustavo Pichorim Boiko ] * Add the callIndicatorVisible property to callManager so that dialer- app can control the active call indicator visibility. -- Ubuntu daily release Wed, 18 Jun 2014 20:46:54 +0000 telephony-service (0.1+14.10.20140613.1-0ubuntu1) utopic; urgency=low [ Tiago Salem Herrmann ] * Delete notifications from mNotifications when actions are performed. [ Renato Araujo Oliveira Filho ] * [PhoneNumber] Initialize m_formatter with 0. (LP: #1327970) -- Ubuntu daily release Fri, 13 Jun 2014 18:31:33 +0000 telephony-service (0.1+14.10.20140612.1-0ubuntu1) utopic; urgency=low [ Ricardo Mendoza ] * Migrate to Platform API V2 -- Ubuntu daily release Thu, 12 Jun 2014 15:32:48 +0000 telephony-service (0.1+14.10.20140609-0ubuntu1) utopic; urgency=low [ Gustavo Pichorim Boiko ] * Try to postpone the handler initialization as much as we can. It is still launched when the approver is started, but that is probably because of the telepathy introspection. (LP: #1325702) [ Tiago Salem Herrmann ] * Clear pending snap decision when rejecting an incoming call. (LP: #1325702) -- Ubuntu daily release Mon, 09 Jun 2014 20:52:51 +0000 telephony-service (0.1+14.10.20140604-0ubuntu1) utopic; urgency=low [ Tiago Salem Herrmann ] * Use a new instance of QMediaPlayer on every call. (LP: #1325627) -- Ubuntu daily release Wed, 04 Jun 2014 15:53:07 +0000 telephony-service (0.1+14.10.20140526-0ubuntu1) utopic; urgency=low [ Michael Terry ] * Support PA_DISABLED in telephony-service to support running without sound. [ Ubuntu daily release ] * New rebuild forced [ Tiago Salem Herrmann ] * start indicator only after ofono-setup has finished its execution. stop only when the desktop session ends. (LP: #1317692) -- Ubuntu daily release Mon, 26 May 2014 15:43:45 +0000 telephony-service (0.1+14.10.20140515-0ubuntu1) utopic; urgency=low [ Tiago Salem Herrmann ] * make indicator recover channels during startup. workaround bugs in qmediaplayer/media-hub that is reporting wrong status. fix AcknowledgeMessages signature (LP: #1318724) -- Ubuntu daily release Thu, 15 May 2014 23:17:06 +0000 telephony-service (0.1+14.10.20140514-0ubuntu1) utopic; urgency=low [ Renato Araujo Oliveira Filho ] * Implemented Telephony.PhoneNumber QML plugin. (LP: #1267250) -- Ubuntu daily release Wed, 14 May 2014 13:15:39 +0000 telephony-service (0.1+14.10.20140512.1-0ubuntu1) utopic; urgency=low [ Ubuntu daily release ] * New rebuild forced [ Tiago Salem Herrmann ] * update po and pot files -- Ubuntu daily release Mon, 12 May 2014 23:00:44 +0000 telephony-service (0.1+14.10.20140512-0ubuntu1) utopic; urgency=low [ Gustavo Pichorim Boiko ] * Expose the telepathy accounts' connectivity status via DBus. (LP: #1309143) -- Ubuntu daily release Mon, 12 May 2014 19:25:30 +0000 telephony-service (0.1+14.10.20140507-0ubuntu1) utopic; urgency=low [ Michael Terry ] * Tie telephony-service-indicator lifecycle to indicator-messages. -- Ubuntu daily release Wed, 07 May 2014 19:24:07 +0000 telephony-service (0.1+14.10.20140429-0ubuntu1) utopic; urgency=low [ Tiago Salem Herrmann ] * use connectedChanged() instead of connectionChanged(). remove connectionChanged() as it is not used anywhere (LP: #1234989) -- Ubuntu daily release Tue, 29 Apr 2014 21:38:36 +0000 telephony-service (0.1+14.04.20140415-0ubuntu1) trusty; urgency=low [ Gustavo Pichorim Boiko ] * Do not use the TelepathyHelper::accounts(), and use the ::accountIds() instead as this might be called before the telepathy stuff is prepared. (LP: #1286358) -- Ubuntu daily release Tue, 15 Apr 2014 19:57:05 +0000 telephony-service (0.1+14.04.20140411-0ubuntu1) trusty; urgency=low [ Gustavo Pichorim Boiko ] * Make sure the calls still dialing are returned as foregroundCalls even when they are not the only ones available. -- Ubuntu daily release Fri, 11 Apr 2014 12:52:39 +0000 telephony-service (0.1+14.04.20140410.1-0ubuntu1) trusty; urgency=low [ Tiago Salem Herrmann ] * get accountIds from handler when appropriate to start apps faster. set application names . -- Ubuntu daily release Thu, 10 Apr 2014 16:19:50 +0000 telephony-service (0.1+14.04.20140407-0ubuntu1) trusty; urgency=low [ CI bot ] * Add initial USSD support (LP: #1195398) [ Tiago Salem Herrmann ] * Add class 0 SMS support -- Ubuntu daily release Mon, 07 Apr 2014 23:11:52 +0000 telephony-service (0.1+14.04.20140402.1-0ubuntu1) trusty; urgency=low [ Ubuntu daily release ] * New rebuild forced [ Gustavo Pichorim Boiko ] * Add support for handling conference calls. -- Ubuntu daily release Wed, 02 Apr 2014 12:41:39 +0000 telephony-service (0.1+14.04.20140328.1-0ubuntu1) trusty; urgency=low [ Gustavo Pichorim Boiko ] * Make sure to check the connection object before accessing it. * Expose to QML not only background and foreground calls, but a list of available calls so that the UI can decide how to display that to the user. [ Tiago Salem Herrmann ] * Fix telephony-service tests. * Add upstart job to launch telephony-service indicator at startup. (LP: #1296787) * Call voicemail when message Id matches the voicemail action. -- Ubuntu daily release Fri, 28 Mar 2014 18:06:02 +0000 telephony-service (0.1+14.04.20140319-0ubuntu1) trusty; urgency=low [ Michael Terry ] * Add support for sharing contact info of incoming texts with the greeter. * Consolidate ringtone code and greeter code so that the service can listen to which user is selected in the greeter, and use their ringtone. [ Gustavo Pichorim Boiko ] * Make it possible to handle multiple telepathy accounts. * Cleanup the build deps. -- Ubuntu daily release Wed, 19 Mar 2014 02:49:40 +0000 telephony-service (0.1+14.04.20140306-0ubuntu1) trusty; urgency=low * New rebuild forced -- Ubuntu daily release Thu, 06 Mar 2014 09:31:29 +0000 telephony-service (0.1+14.04.20140303-0ubuntu1) trusty; urgency=low [ Iain Lane ] * Read the user's ringtone, message tone and silent mode settings from AccountsService instead of GSettings (LP: #1265528) -- Ubuntu daily release Mon, 03 Mar 2014 17:13:40 +0000 telephony-service (0.1+14.04.20140228.1-0ubuntu1) trusty; urgency=low [ Gustavo Pichorim Boiko ] * Fix building against Qt 5.2.1 (LP: #1280281) -- Ubuntu daily release Fri, 28 Feb 2014 23:26:09 +0000 telephony-service (0.1+14.04.20140228-0ubuntu1) trusty; urgency=low [ Gustavo Pichorim Boiko ] * Avoid flickering the UI on client apps by addressing the following points: Get the "hasCalls" property value from the handler even before the telepathy observer is properly registered. Delay the cleaning up of manager data when unregistering the observer. (LP: #1277762) -- Ubuntu daily release Fri, 28 Feb 2014 14:59:08 +0000 telephony-service (0.1+14.04.20140217.1-0ubuntu1) trusty; urgency=low [ Tiago Salem Herrmann ] * Add group chat support. -- Ubuntu daily release Mon, 17 Feb 2014 13:44:49 +0000 telephony-service (0.1+14.04.20140214.1-0ubuntu1) trusty; urgency=low [ Gustavo Pichorim Boiko ] * Disable the displaying of notifications for calls. This is not required anymore in the new designs. -- Ubuntu daily release Fri, 14 Feb 2014 16:16:29 +0000 telephony-service (0.1+14.04.20140206-0ubuntu1) trusty; urgency=low [ Michael Terry ] * Share current call contact info with the greeter. [ Gustavo Pichorim Boiko ] * Get the active timestamp for calls from the handler, as the observer is unregistered every time the application goes out of focus. This ensures that the call duration will always be correct. Save also the DTMF string so that the application can restore that info too after it is send to background and back to foreground. (LP: #1225939) -- Ubuntu daily release Thu, 06 Feb 2014 14:19:38 +0000 telephony-service (0.1+14.04.20140130-0ubuntu1) trusty; urgency=low [ Gustavo Pichorim Boiko ] * Add the infrastructure to write tests for the handler, and write tests for the most important bits of it. * Make the dbus-based tests more robust. (LP: #1270778) * Improve the support for handling multiple calls by: Using a different approach to detect background calls in the QML plugin. Make it possible to hangup the active call to answer an incoming one. Show notifications when calls are put on hold, when they are rejected and when they end. . [ Timo Jyrinki ] * Use QT_QPA_PLATFORM=minimal to fix test failures (LP: #1270770). (LP: #1270770) [ Tiago Salem Herrmann ] * Fix default action for missed calls. Add voicemail entries to the messaging menu. -- Ubuntu daily release Thu, 30 Jan 2014 17:08:38 +0000 telephony-service (0.1+14.04.20131205-0ubuntu1) trusty; urgency=low [ Gustavo Pichorim Boiko ] * Test ContactWatcher's "interactive" property. [ Tiago Salem Herrmann ] * Accept non numeric id's. * Add support for private and unknown phone numbers. [ Ubuntu daily release ] * Automatic snapshot from revision 761 -- Ubuntu daily release Thu, 05 Dec 2013 08:42:04 +0000 telephony-service (0.1+13.10.20131015.2-0ubuntu1) saucy; urgency=low [ Gustavo Pichorim Boiko ] * Create the GFile from URIs to make sure the percent encoding gets properly preserved. [ Ubuntu daily release ] * Automatic snapshot from revision 757 -- Ubuntu daily release Tue, 15 Oct 2013 20:24:14 +0000 telephony-service (0.1+13.10.20131011-0ubuntu1) saucy; urgency=low [ Gustavo Pichorim Boiko ] * Make the existence of messaging-menu-message.h mandatory, failing the build if it is not there. * Use the URL dispatcher to invoke the dialer and messaging apps. (LP: #1234903) [ Ubuntu daily release ] * Automatic snapshot from revision 755 -- Ubuntu daily release Fri, 11 Oct 2013 08:47:29 +0000 telephony-service (0.1+13.10.20131004.1-0ubuntu1) saucy; urgency=low [ Gustavo Pichorim Boiko ] * Improve the placing of items in the messaging menu by addressing the following points: - Add messages to the messaging menu even before the contact matching happens for the OSD notifications - Add only missed calls to the messaging menu (instead of adding all calls). (LP: #1220848) * Make it possible to click in the OSD notifications. (LP: #1227718) [ Ubuntu daily release ] * Automatic snapshot from revision 752 -- Ubuntu daily release Fri, 04 Oct 2013 07:23:24 +0000 telephony-service (0.1+13.10.20131001.4-0ubuntu1) saucy; urgency=low [ Gustavo Pichorim Boiko ] * Handle exceptions that might occur as a result of metric service usage. * Properly encode the contact avatar image path. (LP: #1224095) [ Ubuntu daily release ] * Automatic snapshot from revision 749 -- Ubuntu daily release Tue, 01 Oct 2013 21:20:46 +0000 telephony-service (0.1+13.10.20130926.1-0ubuntu1) saucy; urgency=low [ Gustavo Pichorim Boiko ] * Add support for user metrics. [ Ugo Riboni ] * Add support for user metrics. [ Ubuntu daily release ] * Automatic snapshot from revision 746 -- Ubuntu daily release Thu, 26 Sep 2013 08:46:15 +0000 telephony-service (0.1+13.10.20130919.3-0ubuntu1) saucy; urgency=low * Automatic snapshot from revision 744 -- Ubuntu daily release Thu, 19 Sep 2013 15:47:23 +0000 telephony-service (0.1+13.10.20130830.3-0ubuntu1) saucy; urgency=low [ Gustavo Pichorim Boiko ] * Reload the ringtone file path from settings every time the playing of it is requested to make sure it uses the latest preferences. [ Ubuntu daily release ] * Automatic snapshot from revision 742 -- Ubuntu daily release Fri, 30 Aug 2013 20:33:17 +0000 telephony-service (0.1+13.10.20130830.2-0ubuntu1) saucy; urgency=low [ Loïc Minier ] * Let telephony-service depend on dconf-cli as /usr/bin/ofono-setup calls /usr/bin/dconf. [ Ubuntu daily release ] * Automatic snapshot from revision 740 -- Ubuntu daily release Fri, 30 Aug 2013 13:26:54 +0000 telephony-service (0.1+13.10.20130828.1-0ubuntu1) saucy; urgency=low [ Gustavo Pichorim Boiko ] * Run the mediaplayer calls in a separate thread to avoid locking the approver. [ Ubuntu daily release ] * Automatic snapshot from revision 738 -- Ubuntu daily release Wed, 28 Aug 2013 11:48:47 +0000 telephony-service (0.1+13.10.20130827.2-0ubuntu1) saucy; urgency=low [ Bill Filler ] * Add Conflicts and Replaces phone-app such that both can't be installed at the same time. [ Ubuntu daily release ] * Automatic snapshot from revision 736 -- Ubuntu daily release Tue, 27 Aug 2013 14:55:22 +0000 telephony-service (0.1+13.10.20130827-0ubuntu1) saucy; urgency=low * Automatic snapshot from revision 734 -- Ubuntu daily release Tue, 27 Aug 2013 02:43:17 +0000 telephony-service (0.1+13.10.20130826.1-0ubuntu1) saucy; urgency=low [ Gustavo Pichorim Boiko ] * Initial release [ Timo Jyrinki ] * Automatic snapshot from revision 730 (bootstrap) [ Gustavo Pichorim Boiko ] * Create a new daemon to host the indicators and OSD to get that code out of the approver. [ Tiago Salem Herrmann ] * register observer only when necessary add unregisterChannelObserver() method. (LP: #1208869) [ Ubuntu daily release ] * Automatic snapshot from revision 733 -- Ubuntu daily release Mon, 26 Aug 2013 19:14:38 +0000 telephony-service-0.5.3/debian/control000066400000000000000000000057731455543255600200430ustar00rootroot00000000000000Source: telephony-service Section: libs Priority: optional Maintainer: UBports developers Build-Depends: cmake, dbus-test-runner, dconf-cli, debhelper-compat (= 12), dh-translations, gnome-keyring, libhistoryservice-dev, libicu-dev, libmessaging-menu-dev, libnotify-dev, libphonenumber-dev, libtelepathy-qt5-dev, libprotobuf-dev, libpulse-dev, liblomiri-url-dispatcher-dev, pkg-config, python3, qml-module-qttest, qt5-default, qtbase5-dev (>= 5.0), qtdeclarative5-dev (>= 5.0), qtdeclarative5-dev-tools (>= 5.0), qtfeedback5-dev, qml-module-lomiri-components, qml-module-lomiri-layouts, qml-module-lomiri-performancemetrics, qml-module-lomiri-test, qtmultimedia5-dev (>= 5.0), qtpim5-dev (>= 5), libusermetricsinput1-dev, telepathy-mission-control-5, xvfb , Standards-Version: 3.9.4 Homepage: https://gitlab.com/ubports/core/telephony-service/ Vcs-Git: https://gitlab.com/ubports/core/telephony-service.git Vcs-Browser: https://gitlab.com/ubports/core/telephony-service/ X-Ubuntu-Use-Langpack: yes Package: telephony-service Architecture: any Multi-Arch: foreign Conflicts: phone-app Replaces: phone-app Depends: lomiri-schemas, history-service, libnotify4, telepathy-mission-control-5, lomiri-sounds, tone-generator[!s390x], libusermetricsinput1, dconf-cli, python3, python3-dbus, python3-gi, ${misc:Depends}, ${shlibs:Depends}, Suggests: telepathy-ofono Description: Telephony service components for Lomiri - backend Telephony service components for Lomiri. . This package contains the backend components providing the telephony features such as calling and texting. Package: qml-module-lomiri-telephony0.1 Architecture: any Multi-Arch: same Depends: lomiri-schemas, qtcontact5-galera[!s390x], telephony-service (>= ${binary:Version}), ${misc:Depends}, ${shlibs:Depends}, Suggests: telepathy-ofono Description: Telephony service components for Lomiri - QML plugin Telephony service components for Lomiri. . This package contains the QML plugin providing the features from the telephony service to applications. Package: qml-module-lomiri-telephony-phonenumber0.1 Architecture: any Multi-Arch: same Depends: ${misc:Depends}, ${shlibs:Depends}, qml-module-lomiri-components Description: Telephony service components for Lomiri - QML plugin Telephony PhoneNumber components for Lomiri. . This package contains the QML plugin providing the features from the telephony PhoneNumber to applications. telephony-service-0.5.3/debian/copyright000066400000000000000000000025141455543255600203610ustar00rootroot00000000000000Format: http://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ Upstream-Name: telephony-service Source: https://launchpad.net/telephony-service Files: * Copyright: 2012-2013 Canonical Ltd. License: GPL-3 Files: assets/* icons/* Copyright: 2012-2013 Canonical Ltd. License: CC-BY-SA-3.0 License: GPL-3 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, version 3 of the License. . 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 . . On Debian systems, the full text of the GNU General Public License version 3 can be found in the file /usr/share/common-licenses/GPL-3. License: CC-BY-SA-3.0 This work is licensed under the Creative Commons Attribution-ShareAlike 3.0 Unported License. To view a copy of this license, visit http://creativecommons.org/licenses/by-sa/3.0/ or send a letter to Creative Commons, 444 Castro Street, Suite 900, Mountain View, California, 94041, USA. telephony-service-0.5.3/debian/qml-module-lomiri-telephony-phonenumber0.1.install000066400000000000000000000005221455543255600301240ustar00rootroot00000000000000usr/lib/*/qt5/qml/Lomiri/Telephony/PhoneNumber/libtelephonyservice-phonenumber-qml.so usr/lib/*/qt5/qml/Lomiri/Telephony/PhoneNumber/PhoneNumberField.qml usr/lib/*/qt5/qml/Lomiri/Telephony/PhoneNumber/PhoneNumberInput.qml usr/lib/*/qt5/qml/Lomiri/Telephony/PhoneNumber/PhoneNumber.js usr/lib/*/qt5/qml/Lomiri/Telephony/PhoneNumber/qmldir telephony-service-0.5.3/debian/qml-module-lomiri-telephony0.1.install000066400000000000000000000001511455543255600256020ustar00rootroot00000000000000usr/lib/*/qt5/qml/Lomiri/Telephony/libtelephonyservice-qml.so usr/lib/*/qt5/qml/Lomiri/Telephony/qmldir telephony-service-0.5.3/debian/rules000077500000000000000000000023311455543255600175030ustar00rootroot00000000000000#!/usr/bin/make -f # -*- makefile -*- # Uncomment this to turn on verbose mode. #export DH_VERBOSE=1 export DPKG_GENSYMBOLS_CHECK_LEVEL=4 DEB_HOST_ARCH := $(shell dpkg-architecture -qDEB_HOST_ARCH) # Skip qml tests on the archs they are known to be flaky with current configuration # Ref.: https://bugs.launchpad.net/ubuntu/+source/mesa/+bug/1585942 qmltestskip_architectures := arm64 powerpc s390x %: dh $@ --with=translations override_dh_missing: dh_missing --fail-missing override_dh_auto_configure: ifeq ($(DEB_HOST_ARCH),$(findstring $(DEB_HOST_ARCH), $(qmltestskip_architectures))) dh_auto_configure -- -DCMAKE_BUILD_TYPE=Debug \ -DSKIP_QML_TESTS="on" else dh_auto_configure -- -DCMAKE_BUILD_TYPE=Debug endif override_dh_auto_test: ifeq ($(DEB_BUILD_GNU_TYPE),$(DEB_HOST_GNU_TYPE)) QT_QPA_PLATFORM=minimal CTEST_OUTPUT_ON_FAILURE=1 dh_auto_test --no-parallel endif override_dh_translations: # Override dh_translations to work around http://pad.lv/1183262. dh_auto_build -- telephony-service.pot override_dh_installsystemduser: dh_installsystemduser --package=telephony-service --name=telephony-service-indicator dh_installsystemduser --package=telephony-service --name=telephony-service-approver telephony-service-0.5.3/debian/source/000077500000000000000000000000001455543255600177245ustar00rootroot00000000000000telephony-service-0.5.3/debian/source/format000066400000000000000000000000151455543255600211330ustar00rootroot000000000000003.0 (native) telephony-service-0.5.3/debian/telephony-service.install000066400000000000000000000020111455543255600234530ustar00rootroot00000000000000usr/bin/*telephony-service* usr/bin/ofono-setup usr/bin/phone-gsettings-migration.py usr/share/accountsservice/interfaces/*TelephonyService*.xml usr/share/applications/telephony-service*.desktop usr/share/dbus-1/interfaces/*TelephonyService*.xml usr/share/dbus-1/services/*TelephonyService*.service usr/share/icons/hicolor/*/apps/telephony-service*.png usr/share/icons/ubuntu-mono-dark/status/*/indicator-call.svg usr/share/icons/ubuntu-mono-light/status/*/indicator-call.svg usr/share/locale/*/LC_MESSAGES/telephony-service.mo usr/share/notify-osd/icons/Humanity/scalable/status/notification-group-call.svg usr/share/notify-osd/icons/Humanity/scalable/status/notification-unavailable-image-call.svg usr/share/notify-osd/icons/Humanity/scalable/status/notification-unknown-call.svg usr/share/polkit-1/actions/*TelephonyService*.policy usr/share/telepathy/clients/TelephonyService*.client usr/share/telephony-service/assets/* usr/share/telephony-service/protocols/* var/lib/polkit-1/localauthority/10-vendor.d/*TelephonyService*.pkla telephony-service-0.5.3/debian/telephony-service.postrm000066400000000000000000000001741455543255600233410ustar00rootroot00000000000000#!/bin/sh set -e if [ "$1" = "purge" ] ; then rm -rf /var/lib/lightdm-data/*/telephony-service/ fi #DEBHELPER# exit 0 telephony-service-0.5.3/debian/telephony-service.telephony-service-approver.user.service000066400000000000000000000007031455543255600317300ustar00rootroot00000000000000[Unit] Description=Telephony Service Approver Before=lomiri-full-greeter.service lomiri-full-shell.service lomiri-greeter.service lomiri-shell.service [Service] Type=dbus BusName=org.freedesktop.Telepathy.Client.TelephonyServiceApprover ExecStart=/usr/bin/telephony-service-approver # Allow phone call & message vibrations to bypass "Other vibrations" settings Environment=HFD_USE_PRIVILEGED_INTERFACE=1 [Install] WantedBy=graphical-session.target telephony-service-0.5.3/debian/telephony-service.telephony-service-indicator.user.service000066400000000000000000000010111455543255600320370ustar00rootroot00000000000000[Unit] Description=Telephony Service Indicator PartOf=graphical-session.target PartOf=ayatana-indicators.target After=ayatana-indicators.target Requires=ofono-setup.service After=ofono-setup.service [Service] Type=dbus ExecStart=/usr/bin/telephony-service-indicator BusName=org.freedesktop.Telepathy.Client.TelephonyServiceIndicator Restart=on-failure # Allow phone call & message vibrations to bypass "Other vibrations" settings Environment=HFD_USE_PRIVILEGED_INTERFACE=1 [Install] WantedBy=ayatana-indicators.target telephony-service-0.5.3/handler/000077500000000000000000000000001455543255600166175ustar00rootroot00000000000000telephony-service-0.5.3/handler/CMakeLists.txt000066400000000000000000000041751455543255600213660ustar00rootroot00000000000000if (PULSEAUDIO_FOUND) add_definitions(-DUSE_PULSEAUDIO) set(USE_PULSEAUDIO ON) set(QPULSEAUDIOENGINE_CPP qpulseaudioengine.cpp) endif (PULSEAUDIO_FOUND) set(qt_SRCS accountproperties.cpp callagent.cpp audioroutemanager.cpp callhandler.cpp chatstartingjob.cpp farstreamchannel.cpp handler.cpp handlerdbus.cpp messagejob.cpp messagesendingjob.cpp powerdaudiomodemediator.cpp powerddbus.cpp texthandler.cpp ${QPULSEAUDIOENGINE_CPP} ) set(handler_SRCS main.cpp ${qt_SRCS}) qt5_add_dbus_adaptor(handler_SRCS Handler.xml handler/handlerdbus.h HandlerDBus) qt5_add_dbus_adaptor(handler_SRCS ChatStartingJob.xml handler/chatstartingjob.h ChatStartingJob) qt5_add_dbus_adaptor(handler_SRCS MessageSendingJob.xml handler/messagesendingjob.h MessageSendingJob) include_directories( ${TP_QT5_INCLUDE_DIRS} ${TPFS_INCLUDE_DIRS} ${FS_INCLUDE_DIRS} ${GST_INCLUDE_DIRS} ${CMAKE_SOURCE_DIR}/libtelephonyservice ${CMAKE_CURRENT_BINARY_DIR} ${PULSEAUDIO_INCLUDE_DIRS} ${HISTORY_INCLUDE_DIRS} ) add_executable(telephony-service-handler ${handler_SRCS} ${handler_HDRS}) target_link_libraries(telephony-service-handler ${TP_QT5_LIBRARIES} ${TP_QT5_FS_LIBRARIES} ${TPFS_LIBRARIES} ${FS_LIBRARIES} ${HISTORY_LIBRARIES} telephonyservice ${PULSEAUDIO_LIBRARIES} Qt5::Contacts Qt5::Core Qt5::DBus Qt5::Qml ) enable_coverage(telephony-service-handler) configure_file(com.lomiri.TelephonyServiceHandler.service.in com.lomiri.TelephonyServiceHandler.service) configure_file(org.freedesktop.Telepathy.Client.TelephonyServiceHandler.service.in org.freedesktop.Telepathy.Client.TelephonyServiceHandler.service) install(TARGETS telephony-service-handler RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}) install(FILES ${CMAKE_CURRENT_BINARY_DIR}/org.freedesktop.Telepathy.Client.TelephonyServiceHandler.service DESTINATION share/dbus-1/services) install(FILES ${CMAKE_CURRENT_BINARY_DIR}/com.lomiri.TelephonyServiceHandler.service DESTINATION share/dbus-1/services) install(FILES TelephonyServiceHandler.client DESTINATION share/telepathy/clients) telephony-service-0.5.3/handler/ChatStartingJob.xml000066400000000000000000000024371455543255600223750ustar00rootroot00000000000000 An interface to the phone handler helper application. telephony-service-0.5.3/handler/Handler.xml000066400000000000000000000305021455543255600207160ustar00rootroot00000000000000 An interface to the phone handler helper application. telephony-service-0.5.3/handler/MessageSendingJob.xml000066400000000000000000000027251455543255600226760ustar00rootroot00000000000000 An interface to the phone handler helper application. telephony-service-0.5.3/handler/TelephonyServiceHandler.client000066400000000000000000000015331455543255600246070ustar00rootroot00000000000000[org.freedesktop.Telepathy.Client] Interfaces=org.freedesktop.Telepathy.Client.Handler; [org.freedesktop.Telepathy.Client.Handler.HandlerChannelFilter 0] org.freedesktop.Telepathy.Channel.ChannelType s=org.freedesktop.Telepathy.Channel.Type.Text [org.freedesktop.Telepathy.Client.Handler.HandlerChannelFilter 3] org.freedesktop.Telepathy.Channel.ChannelType s=org.freedesktop.Telepathy.Channel.Type.Call1 [org.freedesktop.Telepathy.Client.Handler.HandlerChannelFilter 1] org.freedesktop.Telepathy.Channel.ChannelType s=org.freedesktop.Telepathy.Channel.Type.Call1 org.freedesktop.Telepathy.Channel.Type.Call1.InitialAudio b=true [org.freedesktop.Telepathy.Client.Handler.Capabilities] org.freedesktop.Telepathy.Channel.Type.Call1/audio=true org.freedesktop.Telepathy.Channel.Type.Call1/ice=true org.freedesktop.Telepathy.Channel.Type.Call1/gtalk-p2p=true telephony-service-0.5.3/handler/accountproperties.cpp000066400000000000000000000041071455543255600230760ustar00rootroot00000000000000/* * Copyright (C) 2017 Canonical, Ltd. * * Authors: * Gustavo Pichorim Boiko * * This file is part of telephony-service. * * telephony-service is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; version 3. * * telephony-service 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 . */ #include "accountproperties.h" #include "telepathyhelper.h" #include #define SETTINGS_DOMAIN "com.lomiri.TelephonyServiceHandler" AccountProperties *AccountProperties::instance() { static AccountProperties *self = new AccountProperties(); return self; } QMap AccountProperties::allProperties() { QMap props; for (auto accountId : TelepathyHelper::instance()->accountIds()) { props[accountId] = accountProperties(accountId); } } QVariantMap AccountProperties::accountProperties(const QString &accountId) { QVariantMap props; mSettings->beginGroup(formatAccountId(accountId)); for (auto key : mSettings->allKeys()) { props[key] = mSettings->value(key); } mSettings->endGroup(); return props; } void AccountProperties::setAccountProperties(const QString &accountId, const QVariantMap &properties) { mSettings->beginGroup(formatAccountId(accountId)); for (auto key : properties.keys()) { mSettings->setValue(key, properties[key]); } mSettings->endGroup(); } QString AccountProperties::formatAccountId(const QString &accountId) { return QUrl::toPercentEncoding(accountId); } AccountProperties::AccountProperties(QObject *parent) : QObject(parent), mSettings(new QSettings(SETTINGS_DOMAIN, QString(), parent)) { } telephony-service-0.5.3/handler/accountproperties.h000066400000000000000000000025031455543255600225410ustar00rootroot00000000000000/* * Copyright (C) 2017 Canonical, Ltd. * * Authors: * Gustavo Pichorim Boiko * * This file is part of telephony-service. * * telephony-service is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; version 3. * * telephony-service 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 . */ #ifndef ACCOUNTPROPERTIES_H #define ACCOUNTPROPERTIES_H #include class QSettings; class AccountProperties : public QObject { Q_OBJECT public: static AccountProperties *instance(); QMap allProperties(); QVariantMap accountProperties(const QString &accountId); void setAccountProperties(const QString &accountId, const QVariantMap &properties); QString formatAccountId(const QString &accountId); protected: explicit AccountProperties(QObject *parent = 0); private: QSettings *mSettings; }; #endif // ACCOUNTPROPERTIES_H telephony-service-0.5.3/handler/audioroutemanager.cpp000066400000000000000000000165371455543255600230520ustar00rootroot00000000000000/* * Copyright (C) 2016 Canonical, Ltd. * * Authors: * Tiago Salem Herrmann * * This file is part of telephony-service. * * telephony-service is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; version 3. * * telephony-service 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 . */ #include "audioroutemanager.h" #include "telepathyhelper.h" #include "accountentry.h" #include #include static void enable_earpiece() { #ifdef USE_PULSEAUDIO QPulseAudioEngine::instance()->setCallMode(CallActive, AudioModeBtOrWiredOrEarpiece); #endif } static void enable_normal() { #ifdef USE_PULSEAUDIO QTimer* timer = new QTimer(); timer->setSingleShot(true); QObject::connect(timer, &QTimer::timeout, [=](){ QPulseAudioEngine::instance()->setMicMute(false); QPulseAudioEngine::instance()->setCallMode(CallEnded, AudioModeWiredOrSpeaker); timer->deleteLater(); }); timer->start(2200); #endif } static void enable_speaker() { #ifdef USE_PULSEAUDIO QPulseAudioEngine::instance()->setCallMode(CallActive, AudioModeSpeaker); #endif } static void enable_ringtone() { #ifdef USE_PULSEAUDIO QPulseAudioEngine::instance()->setCallMode(CallRinging, AudioModeBtOrWiredOrSpeaker); #endif } AudioRouteManager *AudioRouteManager::instance() { static AudioRouteManager *self = new AudioRouteManager(); return self; } AudioRouteManager::AudioRouteManager(QObject *parent) : QObject(parent), mAudioModeMediator(mPowerDDBus) { TelepathyHelper::instance()->registerChannelObserver("TelephonyServiceHandlerAudioRouteManager"); QObject::connect(TelepathyHelper::instance()->channelObserver(), SIGNAL(callChannelAvailable(Tp::CallChannelPtr)), this, SLOT(onCallChannelAvailable(Tp::CallChannelPtr))); #ifdef USE_PULSEAUDIO // update audio modes QObject::connect(QPulseAudioEngine::instance(), SIGNAL(audioModeChanged(AudioMode)), SLOT(onAudioModeChanged(AudioMode))); QObject::connect(QPulseAudioEngine::instance(), SIGNAL(availableAudioModesChanged(AudioModes)), SLOT(onAvailableAudioModesChanged(AudioModes))); // check if we should indeed use pulseaudio QByteArray pulseAudioDisabled = qgetenv("PA_DISABLED"); mHasPulseAudio = true; if (!pulseAudioDisabled.isEmpty()) mHasPulseAudio = false; #endif connect(this, &AudioRouteManager::activeAudioOutputChanged, Tp::memFun(&mAudioModeMediator, &PowerDAudioModeMediator::audioModeChanged)); connect(this, &AudioRouteManager::lastChannelClosed, Tp::memFun(&mAudioModeMediator, &PowerDAudioModeMediator::audioOutputClosed)); } void AudioRouteManager::onCallChannelAvailable(Tp::CallChannelPtr callChannel) { connect(callChannel.data(), SIGNAL(callStateChanged(Tp::CallState)), SLOT(onCallStateChanged(Tp::CallState))); mChannels.append(callChannel); updateAudioRoute(true); } void AudioRouteManager::onCallStateChanged(Tp::CallState state) { Tp::CallChannelPtr channel(qobject_cast(sender())); if (!channel) { return; } if (channel->callState() == Tp::CallStateEnded) { mChannels.removeOne(channel); } updateAudioRoute(false); } void AudioRouteManager::setActiveAudioOutput(const QString &id) { #ifdef USE_PULSEAUDIO // fallback to earpiece/headset AudioMode mode = AudioModeWiredOrEarpiece; if (id == "bluetooth") { mode = AudioModeBluetooth; } else if (id == "speaker") { mode = AudioModeSpeaker; } if (mHasPulseAudio) QPulseAudioEngine::instance()->setCallMode(CallActive, mode); #endif } QString AudioRouteManager::activeAudioOutput() { return mActiveAudioOutput; } AudioOutputDBusList AudioRouteManager::audioOutputs() const { return mAudioOutputs; } void AudioRouteManager::updateAudioRoute(bool newCall) { #ifdef USE_PULSEAUDIO if (!mHasPulseAudio) return; #endif int currentCalls = mChannels.size(); if (currentCalls != 0) { if (currentCalls == 1) { // if we have only one call, check if it's incoming and // enable speaker mode so the ringtone is audible Tp::CallChannelPtr callChannel = mChannels.first(); AccountEntry *accountEntry = TelepathyHelper::instance()->accountForConnection(callChannel->connection()); if (!accountEntry || !callChannel) { return; } bool incoming = callChannel->initiatorContact() != accountEntry->account()->connection()->selfContact(); Tp::CallState state = callChannel->callState(); if (incoming && newCall) { enable_ringtone(); return; } if (state == Tp::CallStateEnded) { enable_normal(); return; } // if only one call and dialing, or incoming call just accepted, then default to earpiece if (newCall || (state == Tp::CallStateAccepted && incoming)) { enable_earpiece(); return; } } } else { enable_normal(); Q_EMIT lastChannelClosed(); } } #ifdef USE_PULSEAUDIO void AudioRouteManager::onAudioModeChanged(AudioMode mode) { qDebug("PulseAudio audio mode changed: 0x%x", mode); if (mode == AudioModeEarpiece && mActiveAudioOutput != "earpiece") { mActiveAudioOutput = "earpiece"; } else if (mode == AudioModeWiredHeadset && mActiveAudioOutput != "wired_headset") { mActiveAudioOutput = "wired_headset"; } else if (mode == AudioModeSpeaker && mActiveAudioOutput != "speaker") { mActiveAudioOutput = "speaker"; } else if (mode == AudioModeBluetooth && mActiveAudioOutput != "bluetooth") { mActiveAudioOutput = "bluetooth"; } Q_EMIT activeAudioOutputChanged(mActiveAudioOutput); } void AudioRouteManager::onAvailableAudioModesChanged(AudioModes modes) { qDebug("PulseAudio available audio modes changed"); bool defaultFound = false; mAudioOutputs.clear(); Q_FOREACH(const AudioMode &mode, modes) { AudioOutputDBus output; if (mode == AudioModeBluetooth) { // there can be only one bluetooth output.id = "bluetooth"; output.type = "bluetooth"; // we dont support names for now, so we set a default value output.name = "bluetooth"; } else if (mode == AudioModeEarpiece || mode == AudioModeWiredHeadset) { if (!defaultFound) { defaultFound = true; output.id = "default"; output.type = "default"; output.name = "default"; } else { continue; } } else if (mode == AudioModeSpeaker) { output.id = "speaker"; output.type = "speaker"; output.name = "speaker"; } mAudioOutputs << output; } Q_EMIT audioOutputsChanged(mAudioOutputs); } #endif telephony-service-0.5.3/handler/audioroutemanager.h000066400000000000000000000040701455543255600225040ustar00rootroot00000000000000/* * Copyright (C) 2016 Canonical, Ltd. * * Authors: * Tiago Salem Herrmann * * This file is part of telephony-service. * * telephony-service is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; version 3. * * telephony-service 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 . */ #ifndef AUDIOROUTEMANAGER_H #define AUDIOROUTEMANAGER_H #ifdef USE_PULSEAUDIO #include "qpulseaudioengine.h" #endif #include "audiooutput.h" #include "powerdaudiomodemediator.h" #include "powerddbus.h" #include #include class AudioRouteManager : public QObject { Q_OBJECT public: static AudioRouteManager *instance(); void setActiveAudioOutput(const QString &id); QString activeAudioOutput(); AudioOutputDBusList audioOutputs() const; void updateAudioRoute(bool newCall = false); public Q_SLOTS: void onCallChannelAvailable(Tp::CallChannelPtr callChannel); Q_SIGNALS: void audioOutputsChanged(const AudioOutputDBusList &outputs); void activeAudioOutputChanged(const QString &id); void lastChannelClosed(); protected Q_SLOTS: void onCallStateChanged(Tp::CallState state); private Q_SLOTS: #ifdef USE_PULSEAUDIO void onAudioModeChanged(AudioMode mode); void onAvailableAudioModesChanged(AudioModes modes); #endif private: explicit AudioRouteManager(QObject *parent = 0); QList mChannels; AudioOutputDBusList mAudioOutputs; QString mActiveAudioOutput; PowerDDBus mPowerDDBus; PowerDAudioModeMediator mAudioModeMediator; #ifdef USE_PULSEAUDIO bool mHasPulseAudio; #endif }; #endif // AUDIOROUTEMANAGER_H telephony-service-0.5.3/handler/callagent.cpp000066400000000000000000000066741455543255600212720ustar00rootroot00000000000000/* * Copyright (C) 2017 Canonical, Ltd. * * Authors: * Gustavo Pichorim Boiko * * This file is part of telephony-service. * * telephony-service is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; version 3. * * telephony-service 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 . */ #include "callagent.h" #include #include #include #include CallAgent::CallAgent(const Tp::CallChannelPtr &channel, QObject *parent) : QObject(parent), mChannel(channel), mFarstreamChannel(0) { connect(mChannel.data(), SIGNAL(invalidated(Tp::DBusProxy*,QString,QString)), SLOT(onCallChannelInvalidated())); connect(mChannel.data(), SIGNAL(callStateChanged(Tp::CallState)), SLOT(onCallStateChanged(Tp::CallState))); connect(mChannel.data(), SIGNAL(contentAdded(Tp::CallContentPtr)), SLOT(onContentAdded(Tp::CallContentPtr))); Q_FOREACH(const Tp::CallContentPtr &content, mChannel->contents()) { onContentAdded(content); } if (!mChannel->handlerStreamingRequired()) { return; } Tp::Farstream::PendingChannel *pendingChannel = Tp::Farstream::createChannel(mChannel); connect(pendingChannel, SIGNAL(finished(Tp::PendingOperation*)), SLOT(onFarstreamChannelCreated(Tp::PendingOperation*))); } CallAgent::~CallAgent() { if (mFarstreamChannel) { mFarstreamChannel->deleteLater(); } } void CallAgent::setMute(bool mute) { if (!mFarstreamChannel) { return; } mFarstreamChannel->setMute(mute); } void CallAgent::onCallChannelInvalidated() { deleteLater(); } void CallAgent::onCallStateChanged(Tp::CallState state) { if (state == Tp::CallStatePendingInitiator) { mChannel->accept(); } } void CallAgent::onContentAdded(const Tp::CallContentPtr &content) { if (!mChannel->handlerStreamingRequired()) { return; } qDebug() << "Content Added, name: " << content->name() << " type: " << content->type(); connect(content.data(), SIGNAL(streamAdded(Tp::CallStreamPtr)), SLOT(onStreamAdded(Tp::CallStreamPtr))); Q_FOREACH(const Tp::CallStreamPtr &stream, content->streams()) { onStreamAdded(stream); } } void CallAgent::onStreamAdded(const Tp::CallStreamPtr &stream) { qDebug() << "Stream present: " << stream->localSendingState(); qDebug() << " members " << stream->remoteMembers().size(); Q_FOREACH(const Tp::ContactPtr contact, stream->remoteMembers()) { qDebug() << " member " << contact->id() << " remoteSendingState=" << stream->remoteSendingState(contact); } } void CallAgent::onFarstreamChannelCreated(Tp::PendingOperation *op) { Tp::Farstream::PendingChannel *pendingChannel = qobject_cast(op); if (!pendingChannel) { return; } mFarstreamChannel = new FarstreamChannel(pendingChannel->tfChannel(), this); } telephony-service-0.5.3/handler/callagent.h000066400000000000000000000027431455543255600207300ustar00rootroot00000000000000/* * Copyright (C) 2017 Canonical, Ltd. * * Authors: * Gustavo Pichorim Boiko * * This file is part of telephony-service. * * telephony-service is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; version 3. * * telephony-service 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 . */ #ifndef CALLAGENT_H #define CALLAGENT_H #include #include #include #include "farstreamchannel.h" class CallAgent : public QObject { Q_OBJECT public: explicit CallAgent(const Tp::CallChannelPtr &channel, QObject *parent = 0); ~CallAgent(); void setMute(bool mute); protected Q_SLOTS: void onCallChannelInvalidated(); void onCallStateChanged(Tp::CallState state); void onContentAdded(const Tp::CallContentPtr &content); void onStreamAdded(const Tp::CallStreamPtr &stream); void onFarstreamChannelCreated(Tp::PendingOperation *op); private: Tp::CallChannelPtr mChannel; FarstreamChannel *mFarstreamChannel; }; #endif // CALLAGENT_H telephony-service-0.5.3/handler/callhandler.cpp000066400000000000000000000455221455543255600216040ustar00rootroot00000000000000/* * Copyright (C) 2012-2017 Canonical, Ltd. * * Authors: * Gustavo Pichorim Boiko * Tiago Salem Herrmann * * This file is part of telephony-service. * * telephony-service is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; version 3. * * telephony-service 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 . */ #include "accountproperties.h" #include "callagent.h" #include "callhandler.h" #include "telepathyhelper.h" #include "accountentry.h" #include "tonegenerator.h" #include "greetercontacts.h" #include "phoneutils.h" #ifdef USE_PULSEAUDIO #include "qpulseaudioengine.h" #endif #include #include #include #include #include #define TELEPATHY_MUTE_IFACE "org.freedesktop.Telepathy.Call1.Interface.Mute" #define DBUS_PROPERTIES_IFACE "org.freedesktop.DBus.Properties" typedef QMap dbusQMap; Q_DECLARE_METATYPE(dbusQMap) CallHandler *CallHandler::instance() { static CallHandler *self = new CallHandler(); return self; } QVariantMap CallHandler::getCallProperties(const QString &objectPath) { QVariantMap properties; Tp::CallChannelPtr channel = callFromObjectPath(objectPath); if (!channel) { return properties; } QVariant property = channel->property("timestamp"); if (property.isValid()) { properties["timestamp"] = property; } property = channel->property("activeTimestamp"); if (property.isValid()) { properties["activeTimestamp"] = property; } property = channel->property("dtmfString"); if (property.isValid()) { properties["dtmfString"] = property; } return properties; } bool CallHandler::hasCalls() const { bool hasActiveCalls = false; Q_FOREACH(const Tp::CallChannelPtr channel, mCallChannels) { bool incoming = isIncoming(channel); bool dialing = !incoming && (channel->callState() == Tp::CallStateInitialised); bool active = channel->callState() == Tp::CallStateActive; if (dialing || active) { hasActiveCalls = true; break; } } return hasActiveCalls; } CallHandler::CallHandler(QObject *parent) : QObject(parent), mHangupRequested(false) { } void CallHandler::startCall(const QString &targetId, const QString &accountId) { QString finalId = targetId; // Request the contact to start audio call AccountEntry *accountEntry = TelepathyHelper::instance()->accountForId(accountId); if (!accountEntry) { return; } Tp::ConnectionPtr connection = accountEntry->account()->connection(); if (!connection) { return; } // FIXME: this is a workaround, there might be a better way of handling this. // One idea is to implement the Addressing interface on the SIP connection manager such that // we can request a handle based on the vCard field "tel" if (accountEntry->protocolInfo()->name() == "sip") { // check if the phone number needs rewriting QVariantMap accountProperties = AccountProperties::instance()->accountProperties(accountId); finalId = applyNumberRewritingRules(finalId, accountProperties); // replace the numbers by a SIP URI QString domain = accountEntry->account()->parameters()["account"].toString(); if (domain.contains("@")) { domain = domain.split("@")[1]; finalId = QString("sip:%1@%2").arg(PhoneUtils::normalizePhoneNumber(finalId)).arg(domain); } } connect(connection->contactManager()->contactsForIdentifiers(QStringList() << finalId), SIGNAL(finished(Tp::PendingOperation*)), SLOT(onContactsAvailable(Tp::PendingOperation*))); } void CallHandler::hangUpCall(const QString &objectPath) { Tp::CallChannelPtr channel = callFromObjectPath(objectPath); if (channel.isNull()) { return; } Tp::PendingOperation *pending = channel->hangup(); mClosingChannels[pending] = channel; connect(pending, SIGNAL(finished(Tp::PendingOperation*)), SLOT(onCallHangupFinished(Tp::PendingOperation*))); } void CallHandler::setHold(const QString &objectPath, bool hold) { Tp::CallChannelPtr channel = callFromObjectPath(objectPath); if (channel.isNull()) { return; } Tp::PendingOperation *op = channel->requestHold(hold); connect(op, &Tp::PendingOperation::finished, [this, objectPath, op] { if (op->isError()) { Q_EMIT callHoldingFailed(objectPath); } }); } void CallHandler::setMuted(const QString &objectPath, bool muted) { Tp::CallChannelPtr channel = callFromObjectPath(objectPath); if (channel.isNull()) { return; } if (channel->handlerStreamingRequired()) { CallAgent *agent = mCallAgents[channel.data()]; if (!agent) { return; } agent->setMute(muted); } else { // FIXME: replace by a proper TpQt implementation of mute QDBusInterface muteInterface(channel->busName(), channel->objectPath(), TELEPATHY_MUTE_IFACE); muteInterface.call("RequestMuted", muted); /* * On some devices, muting via telepathy-ofono -> oFono -> RIL doesn't * work well. Thus, also additionally mute via PulseAudio. * AudioRouteManager will reset this value on hangup, so we shouldn't have * to worry about it here. * * https://gitlab.com/ubports/development/core/telephony-service/-/issues/58 */ #ifdef USE_PULSEAUDIO QPulseAudioEngine::instance()->setMicMute(muted); #endif } } void CallHandler::sendDTMF(const QString &objectPath, const QString &key) { /* * play locally (via tone generator) only if we are on a call, or if this is * dialpad sounds */ int event = toDTMFEvent(key); if (GreeterContacts::instance()->dialpadSoundsEnabled() && !GreeterContacts::instance()->silentMode() && objectPath.isEmpty() || !objectPath.isEmpty()) { ToneGenerator::instance()->playDTMFTone(event); } Tp::CallChannelPtr channel = callFromObjectPath(objectPath); if (channel.isNull()) { return; } // save the dtmfString to send to clients that request it QString dtmfString = channel->property("dtmfString").toString(); QString pendingDTMF = channel->property("pendingDTMF").toString(); pendingDTMF += key; dtmfString += key; channel->setProperty("dtmfString", dtmfString); channel->setProperty("pendingDTMF", pendingDTMF); // if there is only one pending DTMF event, start playing it if (pendingDTMF.length() == 1) { playNextDTMFTone(channel); } Q_EMIT callPropertiesChanged(channel->objectPath(), getCallProperties(channel->objectPath())); } void CallHandler::createConferenceCall(const QStringList &objectPaths) { QList calls; AccountEntry *accountEntry = 0; Q_FOREACH(const QString &objectPath, objectPaths) { Tp::CallChannelPtr call = callFromObjectPath(objectPath); if (!call) { qWarning() << "Could not find a call channel for objectPath:" << objectPath; return; } if (!accountEntry) { accountEntry = TelepathyHelper::instance()->accountForConnection(call->connection()); } // make sure all call channels belong to the same connection if (call->connection() != accountEntry->account()->connection()) { qWarning() << "It is not possible to merge channels from different accounts."; return; } calls.append(call); } if (calls.isEmpty() || !accountEntry) { qWarning() << "The list of calls was empty. Failed to create a conference."; return; } // there is no need to check the pending request. The new channel will arrive at some point. Tp::PendingChannelRequest *pcr = accountEntry->account()->createConferenceCall(calls, QStringList(), QDateTime::currentDateTime(), TP_QT_IFACE_CLIENT + ".TelephonyServiceHandler"); connect(pcr, &Tp::PendingChannelRequest::finished, [this, pcr] { Q_EMIT conferenceCallRequestFinished(!pcr->isError()); }); } void CallHandler::mergeCall(const QString &conferenceObjectPath, const QString &callObjectPath) { Tp::CallChannelPtr conferenceChannel = callFromObjectPath(conferenceObjectPath); Tp::CallChannelPtr callChannel = callFromObjectPath(callObjectPath); if (!conferenceChannel || !callChannel || !conferenceChannel->isConference()) { qWarning() << "No valid channels found."; return; } // there is no need to check for the result here. conferenceChannel->conferenceMergeChannel(callChannel); } void CallHandler::splitCall(const QString &objectPath) { Tp::CallChannelPtr channel = callFromObjectPath(objectPath); if (!channel) { return; } // we don't need to check the result of the operation here channel->conferenceSplitChannel(); } void CallHandler::onCallChannelAvailable(Tp::CallChannelPtr channel) { QDBusInterface callChannelIface(channel->busName(), channel->objectPath(), DBUS_PROPERTIES_IFACE); channel->setProperty("timestamp", QDateTime::currentDateTimeUtc()); if (channel->callState() == Tp::CallStateActive) { channel->setProperty("activeTimestamp", QDateTime::currentDateTimeUtc()); } else if (channel->callState() == Tp::CallStatePendingInitiator) { channel->accept(); } connect(channel.data(), SIGNAL(invalidated(Tp::DBusProxy*,QString,QString)), SLOT(onCallChannelInvalidated())); connect(channel.data(), SIGNAL(callStateChanged(Tp::CallState)), SLOT(onCallStateChanged(Tp::CallState))); // FIXME: save this to a list CallAgent *agent = new CallAgent(channel, this); mCallAgents[channel.data()] = agent; mCallChannels.append(channel); Q_EMIT callPropertiesChanged(channel->objectPath(), getCallProperties(channel->objectPath())); } void CallHandler::onContactsAvailable(Tp::PendingOperation *op) { Tp::PendingContacts *pc = qobject_cast(op); if (!pc) { qCritical() << "The pending object is not a Tp::PendingContacts"; return; } AccountEntry *accountEntry = TelepathyHelper::instance()->accountForConnection(pc->manager()->connection()); // start call to the contacts Q_FOREACH(Tp::ContactPtr contact, pc->contacts()) { accountEntry->account()->ensureAudioCall(contact, QLatin1String("audio"), QDateTime::currentDateTime(), TP_QT_IFACE_CLIENT + ".TelephonyServiceHandler"); // hold the ContactPtr to make sure its refcounting stays bigger than 0 mContacts[contact->id()] = contact; } } void CallHandler::onCallHangupFinished(Tp::PendingOperation *op) { if (!mClosingChannels.contains(op)) { qCritical() << "Channel for pending hangup not found:" << op; return; } // Do NOT request the channel closing at this point. It will get closed automatically. // if you request it to be closed, the CallStateEnded will never be reached and the UI // and logging will be broken. Tp::CallChannelPtr channel = mClosingChannels.take(op); if (mCallChannels.count() == 1) { mHangupRequested = true; } } void CallHandler::onCallChannelInvalidated() { Tp::CallChannelPtr channel(qobject_cast(sender())); if (channel.isNull()) { return; } mCallChannels.removeAll(channel); if (mCallAgents.contains(channel.data())) { CallAgent *agent = mCallAgents.take(channel.data()); agent->deleteLater(); } ToneGenerator::instance()->stopTone(); if (mCallChannels.isEmpty() && !mHangupRequested) { ToneGenerator::instance()->playCallEndedTone(); } mHangupRequested = false; } void CallHandler::onCallStateChanged(Tp::CallState state) { Tp::CallChannelPtr channel(qobject_cast(sender())); if (!channel) { return; } switch (state) { case Tp::CallStatePendingInitiator: case Tp::CallStateInitialising: if (!isIncoming(channel) && channel->handlerStreamingRequired()) { ToneGenerator::instance()->playDialingTone(); } break; case Tp::CallStateInitialised: if (!isIncoming(channel) && channel->handlerStreamingRequired()) { ToneGenerator::instance()->stopTone(); ToneGenerator::instance()->playRingingTone(); } break; case Tp::CallStateActive: if (channel->handlerStreamingRequired()) { ToneGenerator::instance()->stopTone(); } channel->setProperty("activeTimestamp", QDateTime::currentDateTimeUtc()); Q_EMIT callPropertiesChanged(channel->objectPath(), getCallProperties(channel->objectPath())); break; case Tp::CallStateEnded: ToneGenerator::instance()->stopTone(); channel->requestClose(); break; } } Tp::CallChannelPtr CallHandler::existingCall(const QString &targetId) { Tp::CallChannelPtr channel; Q_FOREACH(const Tp::CallChannelPtr &ch, mCallChannels) { if (ch->isConference()) { continue; } AccountEntry *account = TelepathyHelper::instance()->accountForConnection(ch->connection()); if (!account) { continue; } if (account->compareIds(ch->targetContact()->id(), targetId)) { channel = ch; break; } } return channel; } Tp::CallChannelPtr CallHandler::callFromObjectPath(const QString &objectPath) { Tp::CallChannelPtr channel; Q_FOREACH(const Tp::CallChannelPtr &ch, mCallChannels) { if (ch->objectPath() == objectPath) { channel = ch; break; } } return channel; } void CallHandler::playNextDTMFTone(Tp::CallChannelPtr channel) { // the channel might have been closed already if (!channel) { return; } QString pendingDTMF = channel->property("pendingDTMF").toString(); QString key = ""; if (!pendingDTMF.isEmpty()) { key = pendingDTMF[0]; } int event = toDTMFEvent(key); Q_FOREACH(const Tp::CallContentPtr &content, channel->contents()) { if (content->supportsDTMF()) { /* stop any previous DTMF tone before sending the new one*/ connect(content->stopDTMFTone(), &Tp::PendingOperation::finished, [=](Tp::PendingOperation *op){ // in case stopDTMFTone, it might mean the service automatically stops the tone, // so try playing the next one if (op->isError()) { /* send DTMF to network (via telepathy) */ if (event >= 0) { content->startDTMFTone((Tp::DTMFEvent)event); } triggerNextDTMFTone(channel); return; } Tp::Client::CallContentInterfaceDTMFInterface *dtmfInterface = content->interface(); Tp::PendingVariant *pv = dtmfInterface->requestPropertyCurrentlySendingTones(); connect(pv, &Tp::PendingOperation::finished, [=](){ bool sendingTones = pv->result().toBool(); // if we already stopped sending tones, we can send the next one if (!sendingTones) { /* send DTMF to network (via telepathy) */ if (event >= 0) { content->startDTMFTone((Tp::DTMFEvent)event); } triggerNextDTMFTone(channel); return; } // in case the previous tone is not finished, we need to wait for it auto conn = std::make_shared(); *conn = connect(dtmfInterface, &Tp::Client::CallContentInterfaceDTMFInterface::StoppedTones, [=](){ QObject::disconnect(*conn); /* send DTMF to network (via telepathy) */ if (event >= 0) { content->startDTMFTone((Tp::DTMFEvent)event); } triggerNextDTMFTone(channel); }); }); }); } } } void CallHandler::triggerNextDTMFTone(Tp::CallChannelPtr channel) { QTimer::singleShot(250, [=](){ QString pendingDTMF = channel->property("pendingDTMF").toString(); if (pendingDTMF.isEmpty()) { return; } pendingDTMF.remove(0, 1); channel->setProperty("pendingDTMF", pendingDTMF); playNextDTMFTone(channel); }); } int CallHandler::toDTMFEvent(const QString &key) { bool ok; int ev = key.toInt(&ok); if (!ok) { if (key == "*") { ev = Tp::DTMFEventAsterisk; } else if (key == "#") { ev = Tp::DTMFEventHash; } else { ev = -1; } } return ev; } bool CallHandler::isIncoming(const Tp::CallChannelPtr &channel) const { AccountEntry *accountEntry = TelepathyHelper::instance()->accountForConnection(channel->connection()); return channel->initiatorContact() != accountEntry->account()->connection()->selfContact(); } QString CallHandler::applyNumberRewritingRules(const QString &originalNumber, const QVariantMap &properties) { QString finalNumber = originalNumber; if (properties.contains("numberRewrite") && properties["numberRewrite"].toBool()) { // FIXME: do a proper phone number identification implementation // for now consider anything bigger than 6 digits to be a phone number if (finalNumber.length() <= 6) { return finalNumber; } QString defaultCountryCode = properties["defaultCountryCode"].toString(); QString defaultAreaCode = properties["defaultAreaCode"].toString(); QString removeCharacters = properties["removeCharacters"].toString(); QString prefix = properties["prefix"].toString(); if (!defaultCountryCode.startsWith("+")) { defaultCountryCode.prepend("+"); } finalNumber = PhoneUtils::getFullNumber(finalNumber, defaultCountryCode, defaultAreaCode); finalNumber.remove(removeCharacters); finalNumber.prepend(prefix); } return finalNumber; } telephony-service-0.5.3/handler/callhandler.h000066400000000000000000000057001455543255600212430ustar00rootroot00000000000000/* * Copyright (C) 2012-2017 Canonical, Ltd. * * Authors: * Gustavo Pichorim Boiko * Tiago Salem Herrmann * * This file is part of telephony-service. * * telephony-service is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; version 3. * * telephony-service 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 . */ #ifndef CALLHANDLER_H #define CALLHANDLER_H #include #include #include class TelepathyHelper; class CallAgent; class CallHandler : public QObject { Q_OBJECT public: static CallHandler *instance(); QVariantMap getCallProperties(const QString &objectPath); bool hasCalls() const; public Q_SLOTS: void onCallChannelAvailable(Tp::CallChannelPtr channel); void startCall(const QString &targetId, const QString &accountId); void hangUpCall(const QString &objectPath); void setHold(const QString &objectPath, bool hold); void setMuted(const QString &objectPath, bool muted); void sendDTMF(const QString &objectPath, const QString &key); // conference call related void createConferenceCall(const QStringList &objectPaths); void mergeCall(const QString &conferenceObjectPath, const QString &callObjectPath); void splitCall(const QString &objectPath); Q_SIGNALS: void callPropertiesChanged(const QString &objectPath, const QVariantMap &properties); void conferenceCallRequestFinished(bool succeeded); void callHoldingFailed(const QString &objectPath); protected: Tp::CallChannelPtr existingCall(const QString &targetId); Tp::CallChannelPtr callFromObjectPath(const QString &objectPath); void playNextDTMFTone(Tp::CallChannelPtr channel); void triggerNextDTMFTone(Tp::CallChannelPtr channel); static int toDTMFEvent(const QString &key); bool isIncoming(const Tp::CallChannelPtr &channel) const; QString applyNumberRewritingRules(const QString &originalNumber, const QVariantMap &properties); protected Q_SLOTS: void onContactsAvailable(Tp::PendingOperation *op); void onCallHangupFinished(Tp::PendingOperation *op); void onCallChannelInvalidated(); void onCallStateChanged(Tp::CallState state); private: explicit CallHandler(QObject *parent = 0); QMap mContacts; QList mCallChannels; QMap mCallAgents; QMap mClosingChannels; bool mHangupRequested; }; #endif // CALLHANDLER_H telephony-service-0.5.3/handler/chatstartingjob.cpp000066400000000000000000000141131455543255600225110ustar00rootroot00000000000000/* * Copyright (C) 2016 Canonical, Ltd. * * Authors: * Tiago Salem Herrmann * Gustavo Pichorim Boiko * * This file is part of telephony-service. * * telephony-service is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; version 3. * * telephony-service 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 . */ #include "chatstartingjob.h" #include "chatstartingjobadaptor.h" #include "telepathyhelper.h" #include "texthandler.h" #include ChatStartingJob::ChatStartingJob(TextHandler *textHandler, const QString &accountId, const QVariantMap &properties) : MessageJob(textHandler), mTextHandler(textHandler), mAccountId(accountId), mProperties(properties) { qDebug() << __PRETTY_FUNCTION__; connect(this, &ChatStartingJob::textChannelChanged, &ChatStartingJob::channelObjectPathChanged); setAdaptorAndRegister(new ChatStartingJobAdaptor(this)); } QString ChatStartingJob::accountId() { return mAccountId; } void ChatStartingJob::startJob() { qDebug() << __PRETTY_FUNCTION__; setStatus(Running); // Request the contact to start chatting to // FIXME: make it possible to select which account to use, for now, pick the first one AccountEntry *account = TelepathyHelper::instance()->accountForId(mAccountId); if (!account || !account->connected()) { qCritical() << "The selected account does not have a connection. AccountId:" << mAccountId; setStatus(Failed); scheduleDeletion(); return; } switch(mProperties["chatType"].toUInt()) { case Tp::HandleTypeNone: case Tp::HandleTypeContact: startTextChat(account->account(), mProperties); break; case Tp::HandleTypeRoom: startTextChatRoom(account->account(), mProperties); break; default: qCritical() << "Chat type not supported"; } } void ChatStartingJob::startTextChat(const Tp::AccountPtr &account, const QVariantMap &properties) { qDebug() << __PRETTY_FUNCTION__; Tp::PendingChannelRequest *op = NULL; QStringList participants = properties["participantIds"].toStringList(); switch(participants.size()) { case 0: qCritical() << "Error: No participant list provided"; break; case 1: op = account->ensureTextChat(participants[0], QDateTime::currentDateTime(), TP_QT_IFACE_CLIENT + ".TelephonyServiceHandler"); break; default: op = account->createConferenceTextChat(QList(), participants, QDateTime::currentDateTime(), TP_QT_IFACE_CLIENT + ".TelephonyServiceHandler"); } if (!op) { setStatus(Failed); scheduleDeletion(); return; } connect(op, &Tp::PendingOperation::finished, this, &ChatStartingJob::onChannelRequestFinished); } void ChatStartingJob::startTextChatRoom(const Tp::AccountPtr &account, const QVariantMap &properties) { qDebug() << __PRETTY_FUNCTION__; QString roomName = properties["threadId"].toString(); // these properties are still not used //QString server = properties["Server"].toString(); //QString creator = properties["Creator"].toString(); QVariantMap request; Tp::PendingChannelRequest *op = NULL; if (properties.contains("title")) { request.insert(TP_QT_IFACE_CHANNEL_INTERFACE_ROOM_CONFIG + QLatin1String(".Title"), properties["title"].toString()); } if (roomName.isEmpty()) { request.insert(TP_QT_IFACE_CHANNEL + QLatin1String(".ChannelType"), TP_QT_IFACE_CHANNEL_TYPE_TEXT); request.insert(TP_QT_IFACE_CHANNEL + QLatin1String(".TargetHandleType"), (uint) Tp::HandleTypeNone); QStringList initialInviteeIDs = properties["participantIds"].toStringList(); if (!initialInviteeIDs.isEmpty()) { request.insert(TP_QT_IFACE_CHANNEL_INTERFACE_CONFERENCE + QLatin1String(".InitialInviteeIDs"), initialInviteeIDs); } // the presence of RoomName indicates the returned channel must be of type Room request.insert(TP_QT_IFACE_CHANNEL_INTERFACE_ROOM + QLatin1String(".RoomName"), QString()); // TODO use the instance returned by createChanne() to track when the channel creation is finished op = account->createChannel(request, QDateTime::currentDateTime(), TP_QT_IFACE_CLIENT + ".TelephonyServiceHandler"); } else { op = account->ensureTextChatroom(roomName, QDateTime::currentDateTime(), TP_QT_IFACE_CLIENT + ".TelephonyServiceHandler", request); } if (!op) { setStatus(Failed); scheduleDeletion(); return; } connect(op, &Tp::PendingOperation::finished, this, &ChatStartingJob::onChannelRequestFinished); } Tp::TextChannelPtr ChatStartingJob::textChannel() const { qDebug() << __PRETTY_FUNCTION__; return mTextChannel; } QString ChatStartingJob::channelObjectPath() const { if (mTextChannel.isNull()) { return QString(); } return mTextChannel->objectPath(); } void ChatStartingJob::setTextChannel(Tp::TextChannelPtr channel) { qDebug() << __PRETTY_FUNCTION__; mTextChannel = channel; Q_EMIT textChannelChanged(); } void ChatStartingJob::onChannelRequestFinished(Tp::PendingOperation *op) { qDebug() << __PRETTY_FUNCTION__; Status status; if (op->isError()) { status = Failed; } else { Tp::PendingChannelRequest *channelRequest = qobject_cast(op); if (!channelRequest) { status = Failed; } else { setTextChannel(Tp::TextChannelPtr::dynamicCast(channelRequest->channelRequest()->channel())); status = Finished; } } setStatus(status); scheduleDeletion(); } telephony-service-0.5.3/handler/chatstartingjob.h000066400000000000000000000041161455543255600221600ustar00rootroot00000000000000/* * Copyright (C) 2016 Canonical, Ltd. * * Authors: * Tiago Salem Herrmann * Gustavo Pichorim Boiko * * This file is part of telephony-service. * * telephony-service is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; version 3. * * telephony-service 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 . */ #ifndef CHATSTARTINGJOB_H #define CHATSTARTINGJOB_H #include #include "messagejob.h" #include #include class TextHandler; class ChatStartingJob : public MessageJob { Q_OBJECT Q_PROPERTY(QString accountId READ accountId CONSTANT) Q_PROPERTY(Tp::TextChannelPtr textChannel READ textChannel NOTIFY textChannelChanged) Q_PROPERTY(QString channelObjectPath READ channelObjectPath NOTIFY channelObjectPathChanged) public: ChatStartingJob(TextHandler *textHandler, const QString &accountId, const QVariantMap &properties); QString accountId(); Tp::TextChannelPtr textChannel() const; QString channelObjectPath() const; public Q_SLOTS: virtual void startJob(); Q_SIGNALS: void textChannelChanged(); void channelObjectPathChanged(); protected Q_SLOTS: void startTextChat(const Tp::AccountPtr &account, const QVariantMap &properties); void startTextChatRoom(const Tp::AccountPtr &account, const QVariantMap &properties); void setTextChannel(Tp::TextChannelPtr channel); void onChannelRequestFinished(Tp::PendingOperation *op); private: TextHandler *mTextHandler; QString mAccountId; QVariantMap mProperties; Tp::TextChannelPtr mTextChannel; }; #endif // CHATSTARTINGJOB_H telephony-service-0.5.3/handler/com.lomiri.TelephonyServiceHandler.service.in000066400000000000000000000001631455543255600274430ustar00rootroot00000000000000[D-BUS Service] Name=com.lomiri.TelephonyServiceHandler Exec=@CMAKE_INSTALL_FULL_BINDIR@/telephony-service-handler telephony-service-0.5.3/handler/farstreamchannel.cpp000066400000000000000000000255541455543255600226530ustar00rootroot00000000000000/* * Copyright (C) 2017 Canonical, Ltd. * * Authors: * Gustavo Pichorim Boiko * * This file is part of telephony-service. * * telephony-service is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; version 3. * * telephony-service 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 . */ #include "farstreamchannel.h" #include #include FarstreamChannel::FarstreamChannel(TfChannel *channel, QObject *parent) : mChannel(channel), QObject(parent), mPipeline(0), mBus(0), mBusSource(0), mConferenceAddedSignal(0), mConferenceRemovedSignal(0), mContentAddedSignal(0), mContentRemovedSignal(0), mAudioInput(0), mAudioOutput(0) { qDebug() << __PRETTY_FUNCTION__; initialize(); } FarstreamChannel::~FarstreamChannel() { // stop audio input and output if (mAudioInput) { setState(mAudioInput, GST_STATE_NULL); gst_object_unref(mAudioInput); } if (mAudioOutput) { setState(mAudioOutput, GST_STATE_NULL); gst_object_unref(mAudioOutput); } // now clear the notifiers Q_FOREACH(FsElementAddedNotifier *notifier, mNotifiers) { fs_element_added_notifier_remove(notifier, GST_BIN(mPipeline)); g_object_unref(notifier); } mNotifiers.clear(); // clear the bus stuff if (mBusSource) { g_source_remove(mBusSource); } if (mBus) { gst_object_unref(mBus); } // and finally the pipeline if (mPipeline) { setState(mPipeline, GST_STATE_NULL); gst_object_unref(mPipeline); } } void FarstreamChannel::setMute(bool mute) { GstElement *input_volume = gst_bin_get_by_name(GST_BIN(mPipeline), "input_volume"); g_object_set(input_volume, "mute", mute, NULL); g_object_unref(input_volume); } void FarstreamChannel::initialize() { qDebug() << __PRETTY_FUNCTION__; // connect all the signals mConferenceAddedSignal = g_signal_connect(mChannel, "fs-conference-added", G_CALLBACK(&FarstreamChannel::onConferenceAdded), this); mConferenceRemovedSignal = g_signal_connect(mChannel, "fs-conference-removed", G_CALLBACK(&FarstreamChannel::onConferenceRemoved), this); mContentAddedSignal = g_signal_connect(mChannel, "content-added", G_CALLBACK(&FarstreamChannel::onContentAdded), this); mContentRemovedSignal = g_signal_connect(mChannel, "content-removed", G_CALLBACK(&FarstreamChannel::onContentRemoved), this); // and initialize the gstreamer pipeline mPipeline = gst_pipeline_new(NULL); if (!mPipeline) { qCritical() << "Failed to create GStreamer pipeline."; return; } mBus = gst_pipeline_get_bus(GST_PIPELINE(mPipeline)); if (!mBus) { qCritical() << "Failed to get GStreamer pipeline bus."; return; } mBusSource = gst_bus_add_watch(mBus, (GstBusFunc) &FarstreamChannel::onBusWatch, this); if (!setState(mPipeline, GST_STATE_PLAYING)) { return; } } GstElement *FarstreamChannel::initializeAudioSource(TfContent *content) { qDebug() << __PRETTY_FUNCTION__; GstElement *element = gst_parse_bin_from_description ("alsasrc ! audio/x-raw, rate=8000 ! queue" " ! audioconvert ! audioresample" " ! volume name=input_volume ! audioconvert ", TRUE, NULL); gint input_volume = 0; g_object_get (content, "requested-input-volume", &input_volume, NULL); if (input_volume >= 0) { GstElement *volume = gst_bin_get_by_name (GST_BIN (element), "input_volume"); g_object_set (volume, "volume", (double)input_volume / 255.0, NULL); gst_object_unref (volume); } // FIXME: we probably need to handle input volume request changes mAudioOutput = element; return element; } bool FarstreamChannel::addToPipeline(GstElement *element) { qDebug() << __PRETTY_FUNCTION__ << GST_ELEMENT_NAME(element); if (!mPipeline) { qWarning() << "No gstreamer pipeline found."; return false; } if (!gst_bin_add(GST_BIN(mPipeline), element)) { qCritical() << "Failed to add bin" << GST_ELEMENT_NAME(element) << "to pipeline."; return false; } qDebug() << "Succeeded adding to pipeline!"; return true; } void FarstreamChannel::removeFromPipeline(GstElement *element) { qDebug() << __PRETTY_FUNCTION__ << GST_ELEMENT_NAME(element); gst_element_set_locked_state(element, TRUE); setState(element, GST_STATE_NULL); gst_bin_remove (GST_BIN (mPipeline), element); } bool FarstreamChannel::setState(GstElement *element, GstState state) { qDebug() << __PRETTY_FUNCTION__ << GST_ELEMENT_NAME(element) << gst_element_state_get_name(state); GstStateChangeReturn result = gst_element_set_state(element, state); if (result == GST_STATE_CHANGE_FAILURE) { qCritical() << "Failed to set GStreamer element" << GST_ELEMENT_NAME(element) << "state to" << gst_element_state_get_name(state); return false; } qDebug() << "Succeeded playing!"; return true; } gboolean FarstreamChannel::onBusWatch(GstBus *bus, GstMessage *message, FarstreamChannel *self) { Q_UNUSED(bus) if (!self->mChannel) { return TRUE; } // FIXME: maybe we need to do some error handling here? tf_channel_bus_message(self->mChannel, message); return TRUE; } void FarstreamChannel::onConferenceAdded(TfChannel *channel, FsConference *conference, FarstreamChannel *self) { qDebug() << __PRETTY_FUNCTION__; Q_UNUSED(channel) /* Add notifier to set the various element properties as needed */ GKeyFile *keyfile = fs_utils_get_default_element_properties (GST_ELEMENT(conference)); if (keyfile != NULL) { qDebug() << "Loaded default properties for" << GST_ELEMENT_NAME(conference); FsElementAddedNotifier *notifier = fs_element_added_notifier_new(); fs_element_added_notifier_set_properties_from_keyfile(notifier, keyfile); fs_element_added_notifier_add(notifier, GST_BIN(self->mPipeline)); // FIXME: right now we are leaking the notifiers, check when to remove them self->mNotifiers.append(notifier); } if (!self->addToPipeline(GST_ELEMENT(conference))) { return; } self->setState(GST_ELEMENT(conference), GST_STATE_PLAYING); } void FarstreamChannel::onConferenceRemoved(TfChannel *channel, FsConference *conference, FarstreamChannel *self) { qDebug() << __PRETTY_FUNCTION__; Q_UNUSED(channel); // just remove the conference from the pipeline self->removeFromPipeline(GST_ELEMENT(conference)); } void FarstreamChannel::onContentAdded(TfChannel *channel, TfContent *content, FarstreamChannel *self) { qDebug() << __PRETTY_FUNCTION__; Q_UNUSED(channel) g_signal_connect(content, "src-pad-added", G_CALLBACK(&FarstreamChannel::onSrcPadAdded), self); g_signal_connect(content, "start-sending", G_CALLBACK(&FarstreamChannel::onStartSending), self); g_signal_connect(content, "stop-sending", G_CALLBACK(&FarstreamChannel::onStopSending), self); } void FarstreamChannel::onContentRemoved(TfChannel *channel, TfContent *content, FarstreamChannel *self) { qDebug() << __PRETTY_FUNCTION__; // FIXME: implement } bool FarstreamChannel::onStartSending(TfContent *content, FarstreamChannel *self) { qDebug() << __PRETTY_FUNCTION__; GstPad *sinkPad; FsMediaType mediaType; GstElement *element; g_object_get (content, "sink-pad", &sinkPad, "media-type", &mediaType, NULL); switch (mediaType) { case FS_MEDIA_TYPE_AUDIO: element = self->initializeAudioSource(content); break; // FIXME: add video support default: qWarning() << "Unsupported media type:" << mediaType; g_object_unref(sinkPad); return false; } if (!self->addToPipeline(element)) { g_object_unref(sinkPad); return false; } GstPad *sourcePad = gst_element_get_static_pad (element, "src"); if (GST_PAD_LINK_FAILED (gst_pad_link (sourcePad, sinkPad))) { qCritical() << "Failed to link source pad to content's sink pad"; g_object_unref(sinkPad); g_object_unref(sourcePad); return false; } self->setState(element, GST_STATE_PLAYING); self->mAudioInput = element; g_object_unref(sinkPad); g_object_unref(sourcePad); return true; } void FarstreamChannel::onStopSending(TfContent *content, FarstreamChannel *self) { qDebug() << __PRETTY_FUNCTION__; // FIXME: implement } void FarstreamChannel::onSrcPadAdded(TfContent *content, uint handle, FsStream *stream, GstPad *pad, FsCodec *codec, FarstreamChannel *self) { qDebug() << __PRETTY_FUNCTION__; gchar *codecString = fs_codec_to_string (codec); qDebug() << __PRETTY_FUNCTION__ << "Codec:" << codecString; FsMediaType mediaType; GstElement *element; g_object_get (content, "media-type", &mediaType, NULL); switch (mediaType) { case FS_MEDIA_TYPE_AUDIO: { QString outputVolume = QString("output_volume%1").arg(codecString); QString description = QString("audioconvert ! audioresample " "! volume name=\"%1\" " "! audioconvert ! autoaudiosink").arg(outputVolume); element = gst_parse_bin_from_description (description.toUtf8().data(), TRUE, NULL); GstElement *volume = gst_bin_get_by_name (GST_BIN (element), outputVolume.toUtf8().data()); // FIXME: we need to handle volume request changes in the volume element gst_object_unref (volume); break; } // FIXME: handle video default: qWarning() << "Unsupported media type:" << mediaType; return; } if (!self->addToPipeline(element)) { return; } GstPad *sinkPad = gst_element_get_static_pad (element, "sink"); if (GST_PAD_LINK_FAILED (gst_pad_link (pad, sinkPad))) { qCritical() << "Failed to link content's source pad to local sink pad"; } self->setState(element, GST_STATE_PLAYING); g_object_unref (sinkPad); } telephony-service-0.5.3/handler/farstreamchannel.h000066400000000000000000000052621455543255600223120ustar00rootroot00000000000000/* * Copyright (C) 2017 Canonical, Ltd. * * Authors: * Gustavo Pichorim Boiko * * This file is part of telephony-service. * * telephony-service is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; version 3. * * telephony-service 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 . */ #ifndef FARSTREAMCHANNEL_H #define FARSTREAMCHANNEL_H #include #include #include #include #include #include class FarstreamChannel : public QObject { Q_OBJECT public: explicit FarstreamChannel(TfChannel *channel, QObject *parent = 0); ~FarstreamChannel(); void setMute(bool mute); protected: void initialize(); GstElement *initializeAudioSource(TfContent *content); // gstreamer helpers bool addToPipeline(GstElement *element); void removeFromPipeline(GstElement *bin); bool setState(GstElement *element, GstState state); // glib signal handlers static gboolean onBusWatch(GstBus *bus, GstMessage *message, FarstreamChannel *self); static void onConferenceAdded(TfChannel *channel, FsConference *conference, FarstreamChannel *self); static void onConferenceRemoved(TfChannel *channel, FsConference *conference, FarstreamChannel *self); static void onContentAdded(TfChannel *channel, TfContent * content, FarstreamChannel *self); static void onContentRemoved(TfChannel *channel, TfContent * content, FarstreamChannel *self); static bool onStartSending(TfContent *content, FarstreamChannel *self); static void onStopSending(TfContent *content, FarstreamChannel *self); static void onSrcPadAdded(TfContent *content, uint handle, FsStream *stream, GstPad *pad, FsCodec *codec, FarstreamChannel *self); private: TfChannel *mChannel; // gstreamer stuff GstElement *mPipeline; GstBus *mBus; uint mBusSource; GstElement *mAudioInput; GstElement *mAudioOutput; // signal IDs gulong mConferenceAddedSignal; gulong mConferenceRemovedSignal; gulong mContentAddedSignal; gulong mContentRemovedSignal; // farstream stuff QList mNotifiers; }; #endif // FARSTREAMCHANNEL_H telephony-service-0.5.3/handler/handler.cpp000066400000000000000000000160441455543255600207450ustar00rootroot00000000000000/* * Copyright (C) 2012-2017 Canonical, Ltd. * * Authors: * Tiago Salem Herrmann * Gustavo Pichorim Boiko * * This file is part of telephony-service. * * telephony-service is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; version 3. * * telephony-service 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 . */ #include "handler.h" #include "accountentry.h" #include "protocolmanager.h" #include "telepathyhelper.h" #include #include #include #include #include Handler::Handler(QObject *parent) : QObject(parent), Tp::AbstractClientHandler(channelFilters(), capabilities()) { } bool Handler::bypassApproval() const { return false; } void Handler::handleChannels(const Tp::MethodInvocationContextPtr<> &context, const Tp::AccountPtr &account, const Tp::ConnectionPtr &connection, const QList &channels, const QList &requestsSatisfied, const QDateTime &userActionTime, const Tp::AbstractClientHandler::HandlerInfo &handlerInfo) { Q_UNUSED(connection) Q_UNUSED(requestsSatisfied) Q_UNUSED(userActionTime) Q_UNUSED(handlerInfo) if (!ProtocolManager::instance()->isProtocolSupported(account->protocolName())) { context->setFinishedWithError(TP_QT_ERROR_NOT_CAPABLE, "The account for this request is not supported."); return; } Q_FOREACH(const Tp::ChannelPtr channel, channels) { mContexts[channel.data()] = context; Tp::TextChannelPtr textChannel = Tp::TextChannelPtr::dynamicCast(channel); if (textChannel) { Tp::PendingReady *pr = textChannel->becomeReady(Tp::Features() << Tp::TextChannel::FeatureCore << Tp::TextChannel::FeatureChatState << Tp::TextChannel::FeatureMessageCapabilities << Tp::TextChannel::FeatureMessageQueue << Tp::TextChannel::FeatureMessageSentSignal); connect(pr, SIGNAL(finished(Tp::PendingOperation*)), SLOT(onTextChannelReady(Tp::PendingOperation*))); mReadyRequests[pr] = textChannel; continue; } Tp::CallChannelPtr callChannel = Tp::CallChannelPtr::dynamicCast(channel); if (callChannel) { Tp::PendingReady *pr = callChannel->becomeReady(Tp::Features() << Tp::CallChannel::FeatureCore << Tp::CallChannel::FeatureCallState << Tp::CallChannel::FeatureContents); connect(pr, SIGNAL(finished(Tp::PendingOperation*)), SLOT(onCallChannelReady(Tp::PendingOperation*))); mReadyRequests[pr] = callChannel; continue; } } } Tp::ChannelClassSpecList Handler::channelFilters() { Tp::ChannelClassSpecList specList; specList << TelepathyHelper::audioConferenceSpec(); specList << Tp::ChannelClassSpec::audioCall(); specList << Tp::ChannelClassSpec::textChat(); specList << Tp::ChannelClassSpec::textChatroom(); specList << Tp::ChannelClassSpec::unnamedTextChat(); QVariantMap props; props[TP_QT_IFACE_CHANNEL_TYPE_CALL + ".InitialAudio"] = true; specList << Tp::ChannelClassSpec::audioCall(props); return specList; } Tp::AbstractClientHandler::Capabilities Handler::capabilities() { QStringList caps; caps << TP_QT_IFACE_CHANNEL_TYPE_CALL + "/shm" << TP_QT_IFACE_CHANNEL_TYPE_CALL + "/ice" << TP_QT_IFACE_CHANNEL_TYPE_CALL + "/gtalk-p2p"; return Tp::AbstractClientHandler::Capabilities(caps); } void Handler::onTextChannelReady(Tp::PendingOperation *op) { Tp::PendingReady *pr = qobject_cast(op); if (!pr) { qCritical() << "The pending object is not a Tp::PendingReady"; return; } Tp::ChannelPtr channel = mReadyRequests[pr]; Tp::TextChannelPtr textChannel = Tp::TextChannelPtr::dynamicCast(channel); if(!textChannel) { qCritical() << "The saved channel is not a Tp::TextChannel"; return; } mReadyRequests.remove(pr); Tp::MethodInvocationContextPtr<> context = mContexts.take(textChannel.data()); if (context) { context->setFinished(); } Q_EMIT textChannelAvailable(textChannel); } void Handler::onCallChannelReady(Tp::PendingOperation *op) { Tp::PendingReady *pr = qobject_cast(op); if (!pr) { qCritical() << "The pending object is not a Tp::PendingReady"; return; } Tp::ChannelPtr channel = mReadyRequests.take(pr); Tp::CallChannelPtr callChannel = Tp::CallChannelPtr::dynamicCast(channel); Tp::MethodInvocationContextPtr<> context = mContexts.take(channel.data()); if(!callChannel) { if (context) { context->setFinishedWithError(TP_QT_ERROR_CONFUSED, "Channel was not a call channel"); } qCritical() << "The saved channel is not a Tp::CallChannel"; return; } // if the call is neither Accepted nor Active, it means it got dispatched directly to the handler without passing // through any approver. For phone calls, this would mean calls getting auto-accepted which is not desirable // so we return an error here bool incoming; AccountEntry *accountEntry = TelepathyHelper::instance()->accountForConnection(callChannel->connection()); if (accountEntry && !callChannel->initiatorContact().isNull()) { incoming = callChannel->initiatorContact() != accountEntry->account()->connection()->selfContact(); } else { incoming = !callChannel->isRequested(); } if (incoming && callChannel->callState() != Tp::CallStateAccepted && callChannel->callState() != Tp::CallStateActive) { qWarning() << "Available channel was not approved by telephony-service-approver, ignoring it."; if (context) { context->setFinishedWithError(TP_QT_ERROR_NOT_CAPABLE, "Only channels approved and accepted by telephony-service-approver are supported"); } return; } if (context) { context->setFinished(); } Q_EMIT callChannelAvailable(callChannel); } telephony-service-0.5.3/handler/handler.h000066400000000000000000000042661455543255600204150ustar00rootroot00000000000000/* * Copyright (C) 2012-2017 Canonical, Ltd. * * Authors: * Tiago Salem Herrmann * Gustavo Pichorim Boiko * * This file is part of telephony-service. * * telephony-service is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; version 3. * * telephony-service 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 . */ #ifndef HANDLER_H #define HANDLER_H #include #include #include #include #include class Handler : public QObject, public Tp::AbstractClientHandler { Q_OBJECT public: Handler(QObject *parent = 0); ~Handler() { } bool bypassApproval() const; void handleChannels(const Tp::MethodInvocationContextPtr<> &context, const Tp::AccountPtr &account, const Tp::ConnectionPtr &connection, const QList &channels, const QList &requestsSatisfied, const QDateTime &userActionTime, const Tp::AbstractClientHandler::HandlerInfo &handlerInfo); Tp::ChannelClassSpecList channelFilters(); Tp::AbstractClientHandler::Capabilities capabilities(); Q_SIGNALS: void textChannelAvailable(Tp::TextChannelPtr textChannel); void callChannelAvailable(Tp::CallChannelPtr callChannel); private Q_SLOTS: void onTextChannelReady(Tp::PendingOperation *op); void onCallChannelReady(Tp::PendingOperation *op); private: QMap mReadyRequests; QMap > mContexts; }; #endif // HANDLER_H telephony-service-0.5.3/handler/handlerdbus.cpp000066400000000000000000000171531455543255600216250ustar00rootroot00000000000000/* * Copyright (C) 2012-2017 Canonical, Ltd. * * Authors: * Ugo Riboni * Tiago Salem Herrmann * Gustavo Pichorim Boiko * * This file is part of telephony-service. * * telephony-service is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; version 3. * * telephony-service 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 . */ #include "accountproperties.h" #include "audiooutput.h" #include "audioroutemanager.h" #include "callhandler.h" #include "handlerdbus.h" #include "handleradaptor.h" #include "texthandler.h" #include "telepathyhelper.h" #include "protocolmanager.h" #include // Qt #include static const char* DBUS_SERVICE = "com.lomiri.TelephonyServiceHandler"; static const char* DBUS_OBJECT_PATH = "/com/lomiri/TelephonyServiceHandler"; HandlerDBus::HandlerDBus(QObject* parent) : QObject(parent), mCallIndicatorVisible(false) { qDBusRegisterMetaType(); qDBusRegisterMetaType(); connect(CallHandler::instance(), SIGNAL(callPropertiesChanged(QString,QVariantMap)), SIGNAL(CallPropertiesChanged(QString,QVariantMap))); connect(CallHandler::instance(), SIGNAL(callHoldingFailed(QString)), SIGNAL(CallHoldingFailed(QString))); connect(CallHandler::instance(), SIGNAL(conferenceCallRequestFinished(bool)), SIGNAL(ConferenceCallRequestFinished(bool))); connect(ProtocolManager::instance(), &ProtocolManager::protocolsChanged, [this]() { Q_EMIT ProtocolsChanged(ProtocolManager::instance()->protocols().dbusType()); }); connect(AudioRouteManager::instance(), SIGNAL(audioOutputsChanged(AudioOutputDBusList)), SIGNAL(AudioOutputsChanged(AudioOutputDBusList))); connect(AudioRouteManager::instance(), SIGNAL(activeAudioOutputChanged(QString)), SIGNAL(ActiveAudioOutputChanged(QString))); } HandlerDBus::~HandlerDBus() { } QVariantMap HandlerDBus::GetCallProperties(const QString &objectPath) { return CallHandler::instance()->getCallProperties(objectPath); } bool HandlerDBus::HasCalls() { return CallHandler::instance()->hasCalls(); } QStringList HandlerDBus::AccountIds() { return TelepathyHelper::instance()->accountIds(); } bool HandlerDBus::IsReady() { return TelepathyHelper::instance()->ready(); } bool HandlerDBus::callIndicatorVisible() const { return mCallIndicatorVisible; } void HandlerDBus::setCallIndicatorVisible(bool visible) { mCallIndicatorVisible = visible; Q_EMIT CallIndicatorVisibleChanged(visible); } ProtocolList HandlerDBus::GetProtocols() { return ProtocolManager::instance()->protocols().dbusType(); } AllAccountsProperties HandlerDBus::GetAllAccountsProperties() { return AccountProperties::instance()->allProperties(); } QVariantMap HandlerDBus::GetAccountProperties(const QString &accountId) { return AccountProperties::instance()->accountProperties(accountId); } void HandlerDBus::SetAccountProperties(const QString &accountId, const QVariantMap &properties) { AccountProperties::instance()->setAccountProperties(accountId, properties); } QString HandlerDBus::registerObject(QObject *object, const QString &path) { QString fullPath = QString("%1/%2").arg(DBUS_OBJECT_PATH, path); if (QDBusConnection::sessionBus().registerObject(fullPath, object)) { return fullPath; } return QString(); } void HandlerDBus::unregisterObject(const QString &path) { QDBusConnection::sessionBus().unregisterObject(path); } HandlerDBus *HandlerDBus::instance() { static HandlerDBus *self = new HandlerDBus; return self; } void HandlerDBus::InviteParticipants(const QString &objectPath, const QStringList &participants, const QString &message) { TextHandler::instance()->inviteParticipants(objectPath, participants, message); } void HandlerDBus::RemoveParticipants(const QString &objectPath, const QStringList &participants, const QString &message) { TextHandler::instance()->removeParticipants(objectPath, participants, message); } void HandlerDBus::LeaveRooms(const QString &accountId, const QString &message) { return TextHandler::instance()->leaveRooms(accountId, message); } bool HandlerDBus::LeaveChat(const QString &objectPath, const QString &message) { return TextHandler::instance()->leaveChat(objectPath, message); } bool HandlerDBus::DestroyTextChannel(const QString &objectPath) { return TextHandler::instance()->destroyTextChannel(objectPath); } bool HandlerDBus::ChangeRoomTitle(const QString &objectPath, const QString &title) { return TextHandler::instance()->changeRoomTitle(objectPath, title); } void HandlerDBus::setActiveAudioOutput(const QString &id) { AudioRouteManager::instance()->setActiveAudioOutput(id); } QString HandlerDBus::activeAudioOutput() const { return AudioRouteManager::instance()->activeAudioOutput(); } AudioOutputDBusList HandlerDBus::AudioOutputs() const { return AudioRouteManager::instance()->audioOutputs(); } bool HandlerDBus::connectToBus() { new TelephonyServiceHandlerAdaptor(this); QDBusConnection::sessionBus().registerObject(DBUS_OBJECT_PATH, this); return QDBusConnection::sessionBus().registerService(DBUS_SERVICE); } QString HandlerDBus::SendMessage(const QString &accountId, const QString &message, const AttachmentList &attachments, const QVariantMap &properties) { return TextHandler::instance()->sendMessage(accountId, message, attachments, properties); } void HandlerDBus::AcknowledgeMessages(const QVariantList &messages) { TextHandler::instance()->acknowledgeMessages(messages); } QString HandlerDBus::StartChat(const QString &accountId, const QVariantMap &properties) { return TextHandler::instance()->startChat(accountId, properties); } void HandlerDBus::AcknowledgeAllMessages(const QVariantMap &properties) { TextHandler::instance()->acknowledgeAllMessages(properties); } void HandlerDBus::RedownloadMessage(const QString &accountId, const QString &threadId, const QString &eventId) { TextHandler::instance()->redownloadMessage(accountId, threadId, eventId); } void HandlerDBus::StartCall(const QString &number, const QString &accountId) { CallHandler::instance()->startCall(number, accountId); } void HandlerDBus::HangUpCall(const QString &objectPath) { CallHandler::instance()->hangUpCall(objectPath); } void HandlerDBus::SetHold(const QString &objectPath, bool hold) { CallHandler::instance()->setHold(objectPath, hold); } void HandlerDBus::SetMuted(const QString &objectPath, bool muted) { CallHandler::instance()->setMuted(objectPath, muted); } void HandlerDBus::SendDTMF(const QString &objectPath, const QString &key) { CallHandler::instance()->sendDTMF(objectPath, key); } void HandlerDBus::CreateConferenceCall(const QStringList &objectPaths) { CallHandler::instance()->createConferenceCall(objectPaths); } void HandlerDBus::MergeCall(const QString &conferenceObjectPath, const QString &callObjectPath) { CallHandler::instance()->mergeCall(conferenceObjectPath, callObjectPath); } void HandlerDBus::SplitCall(const QString &objectPath) { CallHandler::instance()->splitCall(objectPath); } telephony-service-0.5.3/handler/handlerdbus.h000066400000000000000000000112701455543255600212640ustar00rootroot00000000000000/* * Copyright (C) 2012-2017 Canonical, Ltd. * * Authors: * Ugo Riboni * Tiago Salem Herrmann * Gustavo Pichorim Boiko * * This file is part of telephony-service. * * telephony-service is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; version 3. * * telephony-service 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 . */ #ifndef HANDLERDBUS_H #define HANDLERDBUS_H #include #include #include "chatmanager.h" #include "dbustypes.h" #include "audiooutput.h" typedef QMap AllAccountsProperties; /** * DBus interface for the phone handler */ class HandlerDBus : public QObject, protected QDBusContext { Q_OBJECT Q_PROPERTY(bool CallIndicatorVisible READ callIndicatorVisible WRITE setCallIndicatorVisible NOTIFY CallIndicatorVisibleChanged) Q_PROPERTY(QString ActiveAudioOutput READ activeAudioOutput WRITE setActiveAudioOutput NOTIFY ActiveAudioOutputChanged) public: HandlerDBus(QObject* parent=0); ~HandlerDBus(); QVariantMap GetCallProperties(const QString &objectPath); bool HasCalls(); QStringList AccountIds(); bool IsReady(); bool callIndicatorVisible() const; void setCallIndicatorVisible(bool visible); // configuration related ProtocolList GetProtocols(); AllAccountsProperties GetAllAccountsProperties(); QVariantMap GetAccountProperties(const QString &accountId); void SetAccountProperties(const QString &accountId, const QVariantMap &properties); QString registerObject(QObject *object, const QString &path); void unregisterObject(const QString &path); static HandlerDBus *instance(); QString activeAudioOutput() const; void setActiveAudioOutput(const QString &id); public Q_SLOTS: bool connectToBus(); // messages related QString SendMessage(const QString &accountId, const QString &message, const AttachmentList &attachments, const QVariantMap &properties); Q_NOREPLY void AcknowledgeMessages(const QVariantList &messages); QString StartChat(const QString &accountId, const QVariantMap &properties); Q_NOREPLY void AcknowledgeAllMessages(const QVariantMap &properties); Q_NOREPLY void RedownloadMessage(const QString &accountId, const QString &threadId, const QString &eventId); bool DestroyTextChannel(const QString &objectPath); bool ChangeRoomTitle(const QString &objectPath, const QString &title); Q_NOREPLY void InviteParticipants(const QString &objectPath, const QStringList &participants, const QString &message); Q_NOREPLY void RemoveParticipants(const QString &objectPath, const QStringList &participants, const QString &message); bool LeaveChat(const QString &objectPath, const QString &message); Q_NOREPLY void LeaveRooms(const QString &accountId, const QString &message); // call related Q_NOREPLY void StartCall(const QString &number, const QString &accountId); Q_NOREPLY void HangUpCall(const QString &objectPath); Q_NOREPLY void SetHold(const QString &objectPath, bool hold); Q_NOREPLY void SetMuted(const QString &objectPath, bool muted); Q_NOREPLY void SendDTMF(const QString &objectPath, const QString &key); // conference call related Q_NOREPLY void CreateConferenceCall(const QStringList &objectPaths); Q_NOREPLY void MergeCall(const QString &conferenceObjectPath, const QString &callObjectPath); Q_NOREPLY void SplitCall(const QString &objectPath); AudioOutputDBusList AudioOutputs() const; Q_SIGNALS: void onMessageSent(const QString &number, const QString &message); void CallPropertiesChanged(const QString &objectPath, const QVariantMap &properties); void AccountPropertiesChanged(const QString &accountId, const QVariantMap &properties); void CallIndicatorVisibleChanged(bool visible); void ConferenceCallRequestFinished(bool succeeded); void CallHoldingFailed(const QString &objectPath); void ProtocolsChanged(const ProtocolList &protocols); void ActiveAudioOutputChanged(const QString &id); void AudioOutputsChanged(const AudioOutputDBusList &audioOutputs); private: bool mCallIndicatorVisible; }; #endif // HANDLERDBUS_H telephony-service-0.5.3/handler/main.cpp000066400000000000000000000052341455543255600202530ustar00rootroot00000000000000/* * Copyright (C) 2013-2017 Canonical, Ltd. * * Authors: * Gustavo Pichorim Boiko * * This file is part of telephony-service. * * telephony-service is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; version 3. * * telephony-service 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 . */ #include "applicationutils.h" #include "callhandler.h" #include "handler.h" #include "handlerdbus.h" #include "telepathyhelper.h" #include "texthandler.h" #include #include #include #include #include #include #include Q_DECLARE_METATYPE(Tp::CallChannelPtr) int main(int argc, char **argv) { QCoreApplication app(argc, argv); QCoreApplication::setApplicationName("telephony-service-handler"); Tp::registerTypes(); gst_init(&argc, &argv); qRegisterMetaType(); qRegisterMetaType(); qRegisterMetaType(); qDBusRegisterMetaType(); qDBusRegisterMetaType(); // check if there is already an instance of the handler running if (ApplicationUtils::checkApplicationRunning(TP_QT_IFACE_CLIENT + ".TelephonyServiceHandler")) { qDebug() << "Found another instance of the handler. Quitting."; return 1; } HandlerDBus dbus; Handler *handler = new Handler(); QObject::connect(TelepathyHelper::instance(), &TelepathyHelper::setupReady, [&]() { TelepathyHelper::instance()->registerClient(handler, "TelephonyServiceHandler"); dbus.connectToBus(); }); QObject::connect(handler, SIGNAL(callChannelAvailable(Tp::CallChannelPtr)), CallHandler::instance(), SLOT(onCallChannelAvailable(Tp::CallChannelPtr))); QObject::connect(handler, SIGNAL(textChannelAvailable(Tp::TextChannelPtr)), TextHandler::instance(), SLOT(onTextChannelAvailable(Tp::TextChannelPtr))); QObject::connect(TelepathyHelper::instance(), SIGNAL(setupReady()), HandlerDBus::instance(), SLOT(connectToBus())); return app.exec(); } telephony-service-0.5.3/handler/messagejob.cpp000066400000000000000000000046501455543255600214470ustar00rootroot00000000000000/* * Copyright (C) 2016 Canonical, Ltd. * * Authors: * Tiago Salem Herrmann * Gustavo Pichorim Boiko * * This file is part of telephony-service. * * telephony-service is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; version 3. * * telephony-service 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 . */ #include "messagejob.h" #include "handlerdbus.h" #include #include #include #include MessageJob::MessageJob(QObject *parent) : QObject(parent), mStatus(Pending), mFinished(false), mAdaptor(0) { } MessageJob::~MessageJob() { HandlerDBus::instance()->unregisterObject(mObjectPath); } void MessageJob::setAdaptorAndRegister(QDBusAbstractAdaptor *adaptor) { mAdaptor = adaptor; static ulong count = 0; // just to avoid overflowing if (count == ULONG_MAX) { count = 0; } mObjectPath = HandlerDBus::instance()->registerObject(this, QString("messagejob%1").arg(count++)); } MessageJob::Status MessageJob::status() const { return mStatus; } bool MessageJob::isFinished() const { return mFinished; } QString MessageJob::objectPath() const { return mObjectPath; } void MessageJob::waitForFinished(int timeout) { QTime time; time.start(); while (!mFinished && time.elapsed() < timeout) { QCoreApplication::processEvents(); } } void MessageJob::startJob() { // the default implementation just sets the status to Finished setStatus(Finished); } void MessageJob::setStatus(MessageJob::Status status) { mStatus = status; Q_EMIT statusChanged(); // update the isFinished property too bool wasFinished = mFinished; mFinished = mStatus == Finished || mStatus == Failed; if (wasFinished != mFinished) { Q_EMIT isFinishedChanged(); } if (mFinished) { Q_EMIT finished(); } } void MessageJob::scheduleDeletion(int timeout) { QTimer::singleShot(timeout, this, &QObject::deleteLater); } telephony-service-0.5.3/handler/messagejob.h000066400000000000000000000037021455543255600211110ustar00rootroot00000000000000/* * Copyright (C) 2016 Canonical, Ltd. * * Authors: * Tiago Salem Herrmann * Gustavo Pichorim Boiko * * This file is part of telephony-service. * * telephony-service is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; version 3. * * telephony-service 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 . */ #ifndef MESSAGEJOB_H #define MESSAGEJOB_H #include #include #include class MessageJob : public QObject, protected QDBusContext { Q_OBJECT Q_PROPERTY(int status READ status NOTIFY statusChanged) Q_PROPERTY(bool isFinished READ isFinished NOTIFY isFinishedChanged) Q_PROPERTY(QString objectPath READ objectPath CONSTANT) Q_ENUMS(Status) public: enum Status { Pending, Initialising, Running, Finished, Failed }; explicit MessageJob(QObject *parent = 0); virtual ~MessageJob(); void setAdaptorAndRegister(QDBusAbstractAdaptor *adaptor); Status status() const; bool isFinished() const; QString objectPath() const; void waitForFinished(int timeout = 10000); Q_SIGNALS: void statusChanged(); void isFinishedChanged(); void finished(); public Q_SLOTS: virtual void startJob(); protected: void setStatus(Status status); void scheduleDeletion(int timeout = 60000); private: Status mStatus; bool mFinished; QString mObjectPath; QDBusAbstractAdaptor *mAdaptor; }; #endif // MESSAGEJOB_H telephony-service-0.5.3/handler/messagesendingjob.cpp000066400000000000000000000315321455543255600230160ustar00rootroot00000000000000/* * Copyright (C) 2016 Canonical, Ltd. * * Authors: * Tiago Salem Herrmann * Gustavo Pichorim Boiko * * This file is part of telephony-service. * * telephony-service is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; version 3. * * telephony-service 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 . */ #include "accountentry.h" #include "chatstartingjob.h" #include "messagesendingjob.h" #include "messagesendingjobadaptor.h" #include "telepathyhelper.h" #include "texthandler.h" #include #include #include #include #define SMIL_TEXT_REGION "" #define SMIL_IMAGE_REGION "" #define SMIL_VIDEO_REGION "" #define SMIL_AUDIO_REGION "" #define SMIL_TEXT_PART "\ \ " #define SMIL_IMAGE_PART "\ \ " #define SMIL_VIDEO_PART "\ " #define SMIL_AUDIO_PART "\ " #define SMIL_FILE "\ \ \ %1\ \ \ \ %2\ \ " MessageSendingJob::MessageSendingJob(TextHandler *textHandler, PendingMessage message) : MessageJob(textHandler), mTextHandler(textHandler), mMessage(message), mFinished(false) { setAdaptorAndRegister(new MessageSendingJobAdaptor(this)); } MessageSendingJob::~MessageSendingJob() { qDebug() << __PRETTY_FUNCTION__; } QString MessageSendingJob::accountId() const { qDebug() << __PRETTY_FUNCTION__; return mAccountId; } QString MessageSendingJob::messageId() const { return mMessageId; } QString MessageSendingJob::channelObjectPath() const { qDebug() << __PRETTY_FUNCTION__; return mChannelObjectPath; } QVariantMap MessageSendingJob::properties() const { return mMessage.properties; } void MessageSendingJob::startJob() { qDebug() << __PRETTY_FUNCTION__; qDebug() << "Getting account for id:" << mMessage.accountId; AccountEntry *account = TelepathyHelper::instance()->accountForId(mMessage.accountId); if (!account) { setStatus(Failed); scheduleDeletion(); return; } setStatus(Running); // check if the message should be sent via an overloaded account // if the target type is a room, do not overload. if (mMessage.properties["chatType"].toUInt() != Tp::HandleTypeRoom) { QList overloadAccounts = TelepathyHelper::instance()->checkAccountOverload(account); for (auto newAccount : overloadAccounts) { // FIXME: check if we need to validate anything other than being connected if (newAccount->connected()) { account = newAccount; break; } } } // save the account mAccount = account; setAccountId(mAccount->accountId()); if (!account->connected()) { connect(account, &AccountEntry::connectedChanged, [this, account]() { if (account->connected()) { findOrCreateChannel(); } }); return; } findOrCreateChannel(); } void MessageSendingJob::findOrCreateChannel() { qDebug() << __PRETTY_FUNCTION__; // now that we know what account to use, find existing channels or request a new one QList channels = mTextHandler->existingChannels(mAccount->accountId(), mMessage.properties); if (channels.isEmpty()) { ChatStartingJob *job = new ChatStartingJob(mTextHandler, mAccount->accountId(), mMessage.properties); connect(job, &MessageJob::finished, [this, job]() { if (job->status() == MessageJob::Failed) { setStatus(Failed); scheduleDeletion(); return; } mTextChannel = job->textChannel(); sendMessage(); }); job->startJob(); return; } mTextChannel = channels.last(); sendMessage(); } void MessageSendingJob::sendMessage() { qDebug() << __PRETTY_FUNCTION__; Tp::MessagePartList messageParts = buildMessage(mMessage); Tp::PendingSendMessage *op = NULL; // some protocols can't sent multipart messages, so we check here // and split the parts if needed if (canSendMultiPartMessages()) { op = mTextChannel->send(messageParts); } else { bool messageSent = false; Tp::MessagePart header = messageParts.takeFirst(); Q_FOREACH(const Tp::MessagePart &part, messageParts) { Tp::MessagePartList newMessage; newMessage << header; newMessage << part; Tp::PendingSendMessage *thisOp = mTextChannel->send(newMessage); if (messageSent) { continue; } messageSent = true; op = thisOp; } } connect(op, &Tp::PendingOperation::finished, [this, op]() { if (op->isError()) { setStatus(Failed); scheduleDeletion(); return; } setChannelObjectPath(mTextChannel->objectPath()); setMessageId(op->sentMessageToken()); setStatus(Finished); scheduleDeletion(); }); } bool MessageSendingJob::canSendMultiPartMessages() { if (!mAccount) { return false; } switch (mAccount->type()) { case AccountEntry::PhoneAccount: return true; // TODO check in telepathy if multipart is supported // currently we just return false to be on the safe side case AccountEntry::GenericAccount: default: return false; } return false; } void MessageSendingJob::setAccountId(const QString &accountId) { qDebug() << __PRETTY_FUNCTION__; mAccountId = accountId; Q_EMIT accountIdChanged(); } void MessageSendingJob::setChannelObjectPath(const QString &objectPath) { qDebug() << __PRETTY_FUNCTION__; mChannelObjectPath = objectPath; Q_EMIT channelObjectPathChanged(); } void MessageSendingJob::setMessageId(const QString &id) { mMessageId = id; Q_EMIT messageIdChanged(); } Tp::MessagePartList MessageSendingJob::buildMessage(const PendingMessage &pendingMessage) { qDebug() << __PRETTY_FUNCTION__; Tp::MessagePartList message; Tp::MessagePart header; QString smil, regions, parts; bool hasImage = false, hasText = false, hasVideo = false, hasAudio = false, isMMS = false; int chatType = pendingMessage.properties["chatType"].toUInt(); if (!mAccount) { // account does not exist return Tp::MessagePartList(); } bool temporaryFiles = (pendingMessage.properties.contains("x-canonical-tmp-files") && pendingMessage.properties["x-canonical-tmp-files"].toBool()); // add the remaining properties to the message header QVariantMap::const_iterator it = pendingMessage.properties.begin(); for (; it != pendingMessage.properties.end(); ++it) { header[it.key()] = QDBusVariant(it.value()); } // check if this message should be sent as an MMS if (mAccount->type() == AccountEntry::PhoneAccount) { isMMS = (pendingMessage.attachments.size() > 0 || (pendingMessage.properties["chatType"].toUInt() == Tp::HandleTypeRoom)); } // this flag should not be in the message header, it's only useful for the handler header.remove("x-canonical-tmp-files"); header.remove("chatType"); header.remove("threadId"); header.remove("participantIds"); header["message-type"] = QDBusVariant(0); message << header; // convert AttachmentList struct into telepathy Message parts Q_FOREACH(const AttachmentStruct &attachment, pendingMessage.attachments) { QByteArray fileData; QString contentType = attachment.contentType; QString filename = attachment.id; QString newFilePath = QString(attachment.filePath).replace("file://", ""); QFile attachmentFile(newFilePath); if (!attachmentFile.open(QIODevice::ReadOnly)) { qWarning() << "fail to load attachment" << attachmentFile.errorString() << attachment.filePath; continue; } if (attachment.contentType.startsWith("image/")) { if (isMMS) { hasImage = true; // check if we need to reduce de image size in case it's bigger than 300k // this check is only valid for MMS if (attachmentFile.size() > 307200) { QImage scaledImage; QImageReader imgReader(newFilePath); if (imgReader.canRead()) { imgReader.setAutoTransform(true); // to avoid rotation issue scaledImage = imgReader.read(); } if (!scaledImage.isNull()) { QBuffer buffer(&fileData); buffer.open(QIODevice::WriteOnly); scaledImage.scaled(640, 640, Qt::KeepAspectRatio, Qt::SmoothTransformation).save(&buffer, "jpg"); // update metadatas QFileInfo info(newFilePath); filename = info.completeBaseName() + ".jpg"; contentType = "image/jpeg"; } } else { fileData = attachmentFile.readAll(); } parts += QString(SMIL_IMAGE_PART).arg(filename); } } else if (attachment.contentType.startsWith("video/")) { if (isMMS) { hasVideo = true; parts += QString(SMIL_VIDEO_PART).arg(attachment.id); } } else if (attachment.contentType.startsWith("audio/")) { if (isMMS) { hasAudio = true; parts += QString(SMIL_AUDIO_PART).arg(attachment.id); } } else if (attachment.contentType.startsWith("text/plain")) { if (isMMS) { hasText = true; parts += QString(SMIL_TEXT_PART).arg(attachment.id); } } else if (attachment.contentType.startsWith("text/vcard") || attachment.contentType.startsWith("text/x-vcard")) { } else if (isMMS) { // for MMS we just support the contentTypes above if (temporaryFiles) { attachmentFile.remove(); } continue; } if (fileData.isEmpty()) { fileData = attachmentFile.readAll(); } if (temporaryFiles) { attachmentFile.remove(); } if (hasVideo) { regions += QString(SMIL_VIDEO_REGION); } if (hasAudio) { regions += QString(SMIL_AUDIO_REGION); } if (hasText) { regions += QString(SMIL_TEXT_REGION); } if (hasImage) { regions += QString(SMIL_IMAGE_REGION); } Tp::MessagePart part; part["content-type"] = QDBusVariant(contentType); part["identifier"] = QDBusVariant(filename); part["content"] = QDBusVariant(fileData); part["size"] = QDBusVariant(fileData.size()); message << part; } if (!pendingMessage.message.isEmpty()) { Tp::MessagePart part; QString tmpTextId("text_0.txt"); part["content-type"] = QDBusVariant(QString("text/plain")); part["identifier"] = QDBusVariant(tmpTextId); part["content"] = QDBusVariant(pendingMessage.message); part["size"] = QDBusVariant(pendingMessage.message.size()); if (isMMS) { parts += QString(SMIL_TEXT_PART).arg(tmpTextId); regions += QString(SMIL_TEXT_REGION); } message << part; } if (isMMS) { Tp::MessagePart smilPart; smil = QString(SMIL_FILE).arg(regions).arg(parts); smilPart["content-type"] = QDBusVariant(QString("application/smil")); smilPart["identifier"] = QDBusVariant(QString("smil.xml")); smilPart["content"] = QDBusVariant(smil); smilPart["size"] = QDBusVariant(smil.size()); message << smilPart; } return message; } telephony-service-0.5.3/handler/messagesendingjob.h000066400000000000000000000050271455543255600224630ustar00rootroot00000000000000/* * Copyright (C) 2016 Canonical, Ltd. * * Authors: * Tiago Salem Herrmann * Gustavo Pichorim Boiko * * This file is part of telephony-service. * * telephony-service is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; version 3. * * telephony-service 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 . */ #ifndef MESSAGESENDINGJOB_H #define MESSAGESENDINGJOB_H #include #include #include "dbustypes.h" #include "messagejob.h" class AccountEntry; class TextHandler; class MessageSendingJobAdaptor; struct PendingMessage { QString accountId; QString message; AttachmentList attachments; QVariantMap properties; }; Q_DECLARE_METATYPE(PendingMessage) class MessageSendingJob : public MessageJob { Q_OBJECT Q_PROPERTY(QString accountId READ accountId NOTIFY accountIdChanged) Q_PROPERTY(QString messageId READ messageId NOTIFY messageIdChanged) Q_PROPERTY(QString channelObjectPath READ channelObjectPath NOTIFY channelObjectPathChanged) Q_PROPERTY(QVariantMap properties READ properties CONSTANT) public: explicit MessageSendingJob(TextHandler *textHandler, PendingMessage message); ~MessageSendingJob(); QString accountId() const; QString messageId() const; QString channelObjectPath() const; QVariantMap properties() const; Q_SIGNALS: void accountIdChanged(); void messageIdChanged(); void channelObjectPathChanged(); public Q_SLOTS: void startJob(); protected Q_SLOTS: void findOrCreateChannel(); void sendMessage(); void setAccountId(const QString &accountId); void setChannelObjectPath(const QString &objectPath); void setMessageId(const QString &id); private: TextHandler *mTextHandler; PendingMessage mMessage; QString mAccountId; QString mMessageId; AccountEntry *mAccount; QString mChannelObjectPath; Tp::TextChannelPtr mTextChannel; bool mFinished; Tp::MessagePartList buildMessage(const PendingMessage &pendingMessage); bool canSendMultiPartMessages(); }; #endif // MESSAGESENDINGJOB_H telephony-service-0.5.3/handler/org.freedesktop.Telepathy.Client.TelephonyServiceHandler.service.in000066400000000000000000000002111455543255600336410ustar00rootroot00000000000000[D-BUS Service] Name=org.freedesktop.Telepathy.Client.TelephonyServiceHandler Exec=@CMAKE_INSTALL_FULL_BINDIR@/telephony-service-handler telephony-service-0.5.3/handler/powerd.h000066400000000000000000000020441455543255600202700ustar00rootroot00000000000000/** * Copyright (C) 2014 Canonical, Ltd. * * This program is free software: you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License version 3, as published by * the Free Software Foundation. * * This program is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranties of MERCHANTABILITY, * SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * * Authors: Andreas Pokorny */ #ifndef POWERD_H #define POWERD_H class PowerD { public: PowerD() = default; virtual ~PowerD() = default; PowerD(PowerD const&) = delete; PowerD& operator=(PowerD const&) = delete; virtual void enableProximityHandling() = 0; virtual void disableProximityHandling() = 0; }; #endif // POWERD_H telephony-service-0.5.3/handler/powerdaudiomodemediator.cpp000066400000000000000000000037461455543255600242510ustar00rootroot00000000000000/** * Copyright (C) 2014 Canonical, Ltd. * * This program is free software: you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License version 3, as published by * the Free Software Foundation. * * This program is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranties of MERCHANTABILITY, * SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * * Authors: Andreas Pokorny */ #include #include "powerdaudiomodemediator.h" PowerDAudioModeMediator::PowerDAudioModeMediator(PowerD &powerd) : powerd(powerd) { } void PowerDAudioModeMediator::audioModeChanged(const QString &mode) { bool enableProximity = !(mode == "speaker" || mode == "bluetooth" || mode == "wired_headset"); if (mProximityEnabled != enableProximity) { mProximityEnabled = enableProximity; apply(); } } void PowerDAudioModeMediator::apply() const { if (mProximityEnabled) { powerd.enableProximityHandling(); } else { // we need to power the screen on before disabling the proximity handling QDBusInterface unityIface("com.canonical.Unity.Screen", "/com/canonical/Unity/Screen", "com.canonical.Unity.Screen", QDBusConnection::systemBus()); QList args; args.append("on"); args.append(3); unityIface.callWithArgumentList(QDBus::NoBlock, "setScreenPowerMode", args); powerd.disableProximityHandling(); } } void PowerDAudioModeMediator::audioOutputClosed() { if (mProximityEnabled) { mProximityEnabled = false; apply(); } } telephony-service-0.5.3/handler/powerdaudiomodemediator.h000066400000000000000000000027071455543255600237120ustar00rootroot00000000000000/**************************************************************************** ** ** Copyright (C) 2014 Canonical, Ltd. ** ** Authors: ** Andreas Pokorny ** ** GNU Lesser General Public License Usage ** Alternatively, this file may be used under the terms of the GNU Lesser ** General Public License version 2.1 as published by the Free Software ** Foundation and appearing in the file LICENSE.LGPL included in the ** packaging of this file. Please review the following information to ** ensure the GNU Lesser General Public License version 2.1 requirements ** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ** ****************************************************************************/ #ifndef POWERDAUDIOMODEMEDIATOR_H #define POWERDAUDIOMODEMEDIATOR_H #include "powerd.h" #include #include #include class PowerD; /*! * \brief PowerDAudioModeMediator is responsible for configuring proximity * handling of powerd during different call states and used audio outputs. * In General that mean enabling sreen blanking on proximity events, when * a call is active and neither a bluetooth headset nor the speakers are used. */ class PowerDAudioModeMediator { public: PowerDAudioModeMediator(PowerD &powerd); void audioModeChanged(const QString &mode); void audioOutputClosed(); private: void apply() const; PowerD &powerd; bool mProximityEnabled{false}; }; #endif telephony-service-0.5.3/handler/powerddbus.cpp000066400000000000000000000024561455543255600215100ustar00rootroot00000000000000/** * Copyright (C) 2014 Canonical, Ltd. * * This program is free software: you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License version 3, as published by * the Free Software Foundation. * * This program is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranties of MERCHANTABILITY, * SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * * Authors: Andreas Pokorny */ #include "powerddbus.h" #include #include #include PowerDDBus::PowerDDBus() : mPowerDIface{ new QDBusInterface( "com.lomiri.Repowerd", "/com/lomiri/Repowerd", "com.lomiri.Repowerd", QDBusConnection::systemBus())} { } void PowerDDBus::enableProximityHandling() { mPowerDIface->call("enableProximityHandling", "telephony-service-handler"); } void PowerDDBus::disableProximityHandling() { mPowerDIface->call("disableProximityHandling", "telephony-service-handler"); } telephony-service-0.5.3/handler/powerddbus.h000066400000000000000000000020571455543255600211520ustar00rootroot00000000000000/** * Copyright (C) 2014 Canonical, Ltd. * * This program is free software: you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License version 3, as published by * the Free Software Foundation. * * This program is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranties of MERCHANTABILITY, * SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * * Authors: Andreas Pokorny */ #ifndef POWERD_DUBS_H #define POWERD_DBUS_H #include "powerd.h" #include class QDBusInterface; class PowerDDBus : public PowerD { public: PowerDDBus(); void enableProximityHandling() override; void disableProximityHandling() override; private: std::unique_ptr mPowerDIface; }; #endif telephony-service-0.5.3/handler/qpulseaudioengine.cpp000066400000000000000000000744251455543255600230600ustar00rootroot00000000000000/**************************************************************************** ** ** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). ** Contact: http://www.qt-project.org/legal ** ** This file was taken from qt5 and modified by ** David Henningsson for usage in ** telepathy-ofono. ** ** GNU Lesser General Public License Usage ** Alternatively, this file may be used under the terms of the GNU Lesser ** General Public License version 2.1 as published by the Free Software ** Foundation and appearing in the file LICENSE.LGPL included in the ** packaging of this file. Please review the following information to ** ensure the GNU Lesser General Public License version 2.1 requirements ** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ** ****************************************************************************/ #include #include "qpulseaudioengine.h" #include #include #define PULSEAUDIO_PROFILE_HSP "headset_head_unit" #define PULSEAUDIO_PROFILE_A2DP "a2dp_sink" QT_BEGIN_NAMESPACE static void contextStateCallbackInit(pa_context *context, void *userdata) { Q_UNUSED(context); QPulseAudioEngineWorker *pulseEngine = reinterpret_cast(userdata); pa_threaded_mainloop_signal(pulseEngine->mainloop(), 0); } static void contextStateCallback(pa_context *context, void *userdata) { Q_UNUSED(userdata); Q_UNUSED(context); } static void success_cb(pa_context *context, int success, void *userdata) { QPulseAudioEngineWorker *pulseEngine = reinterpret_cast(userdata); pa_threaded_mainloop_signal(pulseEngine->mainloop(), 0); } /* Callbacks used when handling events from PulseAudio */ static void plug_card_cb(pa_context *c, const pa_card_info *info, int isLast, void *userdata) { QPulseAudioEngineWorker *pulseEngine = static_cast(userdata); if (isLast != 0 || !pulseEngine || !info) { pa_threaded_mainloop_signal(pulseEngine->mainloop(), 0); return; } pulseEngine->plugCardCallback(info); } static void update_card_cb(pa_context *c, const pa_card_info *info, int isLast, void *userdata) { QPulseAudioEngineWorker *pulseEngine = static_cast(userdata); if (isLast != 0 || !pulseEngine || !info) { pa_threaded_mainloop_signal(pulseEngine->mainloop(), 0); return; } pulseEngine->updateCardCallback(info); } static void unplug_card_cb(pa_context *c, const pa_card_info *info, int isLast, void *userdata) { QPulseAudioEngineWorker *pulseEngine = static_cast(userdata); if (!pulseEngine) { pa_threaded_mainloop_signal(pulseEngine->mainloop(), 0); return; } if (info == NULL) { /* That means that the card used to query card_info was removed */ pulseEngine->unplugCardCallback(); } } static void subscribeCallback(pa_context *context, pa_subscription_event_type_t t, uint32_t idx, void *userdata) { /* For card change events (slot plug/unplug and add/remove card) */ if ((t & PA_SUBSCRIPTION_EVENT_FACILITY_MASK) == PA_SUBSCRIPTION_EVENT_CARD) { if ((t & PA_SUBSCRIPTION_EVENT_TYPE_MASK) == PA_SUBSCRIPTION_EVENT_CHANGE) { QMetaObject::invokeMethod((QPulseAudioEngineWorker *) userdata, "handleCardEvent", Qt::QueuedConnection, Q_ARG(int, PA_SUBSCRIPTION_EVENT_CHANGE), Q_ARG(unsigned int, idx)); } else if ((t & PA_SUBSCRIPTION_EVENT_TYPE_MASK) == PA_SUBSCRIPTION_EVENT_NEW) { QMetaObject::invokeMethod((QPulseAudioEngineWorker *) userdata, "handleCardEvent", Qt::QueuedConnection, Q_ARG(int, PA_SUBSCRIPTION_EVENT_NEW), Q_ARG(unsigned int, idx)); } else if ((t & PA_SUBSCRIPTION_EVENT_TYPE_MASK) == PA_SUBSCRIPTION_EVENT_REMOVE) { QMetaObject::invokeMethod((QPulseAudioEngineWorker *) userdata, "handleCardEvent", Qt::QueuedConnection, Q_ARG(int, PA_SUBSCRIPTION_EVENT_REMOVE), Q_ARG(unsigned int, idx)); } } } QPulseAudioEngineWorker::QPulseAudioEngineWorker(QObject *parent) : QObject(parent) , m_mainLoopApi(0) , m_context(0) , m_callstatus(CallEnded) , m_audiomode(AudioModeSpeaker) , m_micmute(false) , m_defaultsink("sink.primary") , m_defaultsource("source.primary") , m_voicecallcard("") , m_voicecallhighest("") , m_voicecallprofile("") , m_bt_hsp("") , m_bt_hsp_a2dp("") { m_mainLoop = pa_threaded_mainloop_new(); if (m_mainLoop == 0) { qWarning("Unable to create pulseaudio mainloop"); return; } if (pa_threaded_mainloop_start(m_mainLoop) != 0) { qWarning("Unable to start pulseaudio mainloop"); pa_threaded_mainloop_free(m_mainLoop); m_mainLoop = 0; return; } createPulseContext(); } bool QPulseAudioEngineWorker::createPulseContext() { bool keepGoing = true; bool ok = true; if (m_context) return true; m_mainLoopApi = pa_threaded_mainloop_get_api(m_mainLoop); pa_threaded_mainloop_lock(m_mainLoop); m_context = pa_context_new(m_mainLoopApi, QString(QLatin1String("QtmPulseContext:%1")).arg(::getpid()).toLatin1().constData()); pa_context_set_state_callback(m_context, contextStateCallbackInit, this); if (!m_context) { qWarning("Unable to create new pulseaudio context"); pa_threaded_mainloop_unlock(m_mainLoop); return false; } if (pa_context_connect(m_context, NULL, PA_CONTEXT_NOAUTOSPAWN, NULL) < 0) { qWarning("Unable to create a connection to the pulseaudio context"); pa_threaded_mainloop_unlock(m_mainLoop); releasePulseContext(); return false; } pa_threaded_mainloop_wait(m_mainLoop); while (keepGoing) { switch (pa_context_get_state(m_context)) { case PA_CONTEXT_CONNECTING: case PA_CONTEXT_AUTHORIZING: case PA_CONTEXT_SETTING_NAME: break; case PA_CONTEXT_READY: qDebug("Pulseaudio connection established."); keepGoing = false; break; case PA_CONTEXT_TERMINATED: qCritical("Pulseaudio context terminated."); keepGoing = false; ok = false; break; case PA_CONTEXT_FAILED: default: qCritical() << QString("Pulseaudio connection failure: %1").arg(pa_strerror(pa_context_errno(m_context))); keepGoing = false; ok = false; } if (keepGoing) { pa_threaded_mainloop_wait(m_mainLoop); } } if (ok) { pa_context_set_state_callback(m_context, contextStateCallback, this); pa_context_set_subscribe_callback(m_context, subscribeCallback, this); pa_context_subscribe(m_context, PA_SUBSCRIPTION_MASK_CARD, NULL, this); } else { if (m_context) { pa_context_unref(m_context); m_context = 0; } } pa_threaded_mainloop_unlock(m_mainLoop); return true; } void QPulseAudioEngineWorker::releasePulseContext() { if (m_context) { pa_threaded_mainloop_lock(m_mainLoop); pa_context_disconnect(m_context); pa_context_unref(m_context); pa_threaded_mainloop_unlock(m_mainLoop); m_context = 0; } } QPulseAudioEngineWorker::~QPulseAudioEngineWorker() { releasePulseContext(); if (m_mainLoop) { pa_threaded_mainloop_stop(m_mainLoop); pa_threaded_mainloop_free(m_mainLoop); m_mainLoop = 0; } } void QPulseAudioEngineWorker::cardInfoCallback(const pa_card_info *info) { pa_card_profile_info2 *voice_call = NULL, *highest = NULL; pa_card_profile_info2 *hsp = NULL, *a2dp = NULL; /* For now we only support one card with the voicecall feature */ for (int i = 0; i < info->n_profiles; i++) { if (!highest || info->profiles2[i]->priority > highest->priority) highest = info->profiles2[i]; if (!strcmp(info->profiles2[i]->name, "voicecall") || !strcmp(info->profiles2[i]->name, "Voice Call")) voice_call = info->profiles2[i]; else if (!strcmp(info->profiles2[i]->name, PULSEAUDIO_PROFILE_HSP) && info->profiles2[i]->available != 0) hsp = info->profiles2[i]; else if (!strcmp(info->profiles2[i]->name, PULSEAUDIO_PROFILE_A2DP) && info->profiles2[i]->available != 0) a2dp = info->profiles2[i]; } /* Record the card that supports voicecall (default one to be used) */ if (voice_call) { qDebug("Found card that supports voicecall: '%s'", info->name); m_voicecallcard = info->name; m_voicecallhighest = highest->name; qDebug("1"); m_voicecallprofile = voice_call->name; qDebug("2"); } /* Handle the use cases needed for bluetooth */ if (hsp && a2dp) { qDebug("Found card that supports hsp and a2dp: '%s'", info->name); m_bt_hsp_a2dp = info->name; } else if (hsp && (a2dp == NULL)) { /* This card only provides the hsp profile */ qDebug("Found card that supports only hsp: '%s'", info->name); m_bt_hsp = info->name; } qDebug("3"); } void QPulseAudioEngineWorker::sinkInfoCallback(const pa_sink_info *info) { pa_sink_port_info *earpiece = NULL, *speaker = NULL; pa_sink_port_info *wired_headset = NULL, *wired_headphone = NULL; pa_sink_port_info *preferred = NULL; pa_sink_port_info *bluetooth_sco = NULL; pa_sink_port_info *speaker_and_wired_headphone = NULL; AudioMode audiomodetoset; AudioModes modes; for (int i = 0; i < info->n_ports; i++) { if (!strcmp(info->ports[i]->name, "output-earpiece") || !strcmp(info->ports[i]->name, "Earpiece")) earpiece = info->ports[i]; else if (!strcmp(info->ports[i]->name, "output-wired_headset") && (info->ports[i]->available != PA_PORT_AVAILABLE_NO)) wired_headset = info->ports[i]; else if ((!strcmp(info->ports[i]->name, "output-wired_headphone") || !strcmp(info->ports[i]->name, "Headphone")) && (info->ports[i]->available != PA_PORT_AVAILABLE_NO)) wired_headphone = info->ports[i]; else if (!strcmp(info->ports[i]->name, "output-speaker") || !strcmp(info->ports[i]->name, "Speaker")) speaker = info->ports[i]; else if (!strcmp(info->ports[i]->name, "output-bluetooth_sco")) bluetooth_sco = info->ports[i]; else if (!strcmp(info->ports[i]->name, "output-speaker+wired_headphone") && (info->ports[i]->available != PA_PORT_AVAILABLE_NO)) speaker_and_wired_headphone = info->ports[i]; } if (!earpiece || !speaker) return; /* Not the right sink */ /* Refresh list of available audio modes */ modes.append(AudioModeEarpiece); modes.append(AudioModeSpeaker); if (wired_headset || wired_headphone) modes.append(AudioModeWiredHeadset); if (bluetooth_sco && ((m_bt_hsp != "") || (m_bt_hsp_a2dp != ""))) modes.append(AudioModeBluetooth); /* Check if the requested mode is available (earpiece*/ if (((m_audiomode == AudioModeWiredHeadset) && !modes.contains(AudioModeWiredHeadset)) || ((m_audiomode == AudioModeBluetooth) && !modes.contains(AudioModeBluetooth))) return; /* Now to decide which output to be used, depending on the active mode */ if (m_audiomode & AudioModeEarpiece) { preferred = earpiece; audiomodetoset = AudioModeEarpiece; } if (m_audiomode & AudioModeSpeaker) { preferred = speaker; audiomodetoset = AudioModeSpeaker; } if ((m_audiomode & AudioModeWiredHeadset) && (modes.contains(AudioModeWiredHeadset))) { preferred = wired_headset ? wired_headset : wired_headphone; audiomodetoset = AudioModeWiredHeadset; } if (m_callstatus == CallRinging && speaker_and_wired_headphone) { preferred = speaker_and_wired_headphone; } if ((m_audiomode & AudioModeBluetooth) && (modes.contains(AudioModeBluetooth))) { preferred = bluetooth_sco; audiomodetoset = AudioModeBluetooth; } m_audiomode = audiomodetoset; m_nametoset = info->name; if (info->active_port != preferred) m_valuetoset = preferred->name; if (modes != m_availableAudioModes) m_availableAudioModes = modes; } void QPulseAudioEngineWorker::sourceInfoCallback(const pa_source_info *info) { pa_source_port_info *builtin_mic = NULL, *preferred = NULL; pa_source_port_info *wired_headset = NULL, *bluetooth_sco = NULL; if (info->monitor_of_sink != PA_INVALID_INDEX) return; /* Not the right source */ for (int i = 0; i < info->n_ports; i++) { if (!strcmp(info->ports[i]->name, "input-builtin_mic") || !strcmp(info->ports[i]->name, "DigitalMic")) builtin_mic = info->ports[i]; else if ((!strcmp(info->ports[i]->name, "input-wired_headset") || !strcmp(info->ports[i]->name, "HeadsetMic")) && (info->ports[i]->available != PA_PORT_AVAILABLE_NO)) wired_headset = info->ports[i]; else if (!strcmp(info->ports[i]->name, "input-bluetooth_sco_headset")) bluetooth_sco = info->ports[i]; } if (!builtin_mic) return; /* Not the right source */ /* Now to decide which output to be used, depending on the active mode */ if ((m_audiomode & AudioModeEarpiece) || (m_audiomode & AudioModeSpeaker)) preferred = builtin_mic; if ((m_audiomode & AudioModeWiredHeadset) && (m_availableAudioModes.contains(AudioModeWiredHeadset))) preferred = wired_headset ? wired_headset : builtin_mic; if ((m_audiomode & AudioModeBluetooth) && (m_availableAudioModes.contains(AudioModeBluetooth))) preferred = bluetooth_sco; m_nametoset = info->name; if (info->active_port != preferred) m_valuetoset = preferred->name; } void QPulseAudioEngineWorker::serverInfoCallback(const pa_server_info *info) { /* Saving default sink/source to restore after call hangup */ m_defaultsink = info->default_sink_name; m_defaultsource = info->default_source_name; /* In the case of a server callback we need to signal the mainloop */ pa_threaded_mainloop_signal(mainloop(), 0); } static void cardinfo_cb(pa_context *context, const pa_card_info *info, int isLast, void *userdata) { QPulseAudioEngineWorker *pulseEngine = static_cast(userdata); if (isLast != 0 || !pulseEngine || !info) { pa_threaded_mainloop_signal(pulseEngine->mainloop(), 0); return; } pulseEngine->cardInfoCallback(info); } static void sinkinfo_cb(pa_context *context, const pa_sink_info *info, int isLast, void *userdata) { QPulseAudioEngineWorker *pulseEngine = static_cast(userdata); if (isLast != 0 || !pulseEngine || !info) { pa_threaded_mainloop_signal(pulseEngine->mainloop(), 0); return; } pulseEngine->sinkInfoCallback(info); } static void sourceinfo_cb(pa_context *context, const pa_source_info *info, int isLast, void *userdata) { QPulseAudioEngineWorker *pulseEngine = static_cast(userdata); if (isLast != 0 || !pulseEngine || !info) { pa_threaded_mainloop_signal(pulseEngine->mainloop(), 0); return; } pulseEngine->sourceInfoCallback(info); } static void serverinfo_cb(pa_context *context, const pa_server_info *info, void *userdata) { QPulseAudioEngineWorker *pulseEngine = static_cast(userdata); if (!pulseEngine || !info) { pa_threaded_mainloop_signal(pulseEngine->mainloop(), 0); return; } pulseEngine->serverInfoCallback(info); } bool QPulseAudioEngineWorker::handleOperation(pa_operation *operation, const char *func_name) { if (!operation) { qCritical("'%s' failed (lost PulseAudio connection?)", func_name); /* Free resources so it can retry a new connection during next operation */ pa_threaded_mainloop_unlock(m_mainLoop); releasePulseContext(); return false; } while (pa_operation_get_state(operation) == PA_OPERATION_RUNNING) pa_threaded_mainloop_wait(m_mainLoop); pa_operation_unref(operation); return true; } int QPulseAudioEngineWorker::setupVoiceCall() { pa_operation *o; qDebug("Setting up pulseaudio for voice call"); pa_threaded_mainloop_lock(m_mainLoop); /* Get and set the default sink/source to be restored later */ o = pa_context_get_server_info(m_context, serverinfo_cb, this); if (!handleOperation(o, "pa_context_get_server_info")) return -1; qDebug("Recorded default sink: %s default source: %s", m_defaultsink.c_str(), m_defaultsource.c_str()); /* Walk through the list of devices, find the voice call capable card and * identify if we have bluetooth capable devices (hsp and a2dp) */ m_voicecallcard = m_voicecallhighest = m_voicecallprofile = ""; m_bt_hsp = m_bt_hsp_a2dp = ""; o = pa_context_get_card_info_list(m_context, cardinfo_cb, this); if (!handleOperation(o, "pa_context_get_card_info_list")) return -1; /* In case we have only one bt device that provides hsp and a2dp, we need * to make sure we switch the default profile for that card (to hsp) */ if ((m_bt_hsp_a2dp != "") && (m_bt_hsp == "")) { qDebug("Setting PulseAudio card '%s' profile '%s'", m_bt_hsp_a2dp.c_str(), PULSEAUDIO_PROFILE_HSP); o = pa_context_set_card_profile_by_name(m_context, m_bt_hsp_a2dp.c_str(), PULSEAUDIO_PROFILE_HSP, success_cb, this); if (!handleOperation(o, "pa_context_set_card_profile_by_name")) return -1; } pa_threaded_mainloop_unlock(m_mainLoop); return 0; } void QPulseAudioEngineWorker::restoreVoiceCall() { pa_operation *o; qDebug("Restoring pulseaudio previous state"); /* Then restore previous settings */ pa_threaded_mainloop_lock(m_mainLoop); /* See if we need to restore any HSP+AD2P device state */ if ((m_bt_hsp_a2dp != "") && (m_bt_hsp == "")) { qDebug("Restoring PulseAudio card '%s' to profile '%s'", m_bt_hsp_a2dp.c_str(), PULSEAUDIO_PROFILE_A2DP); o = pa_context_set_card_profile_by_name(m_context, m_bt_hsp_a2dp.c_str(), PULSEAUDIO_PROFILE_A2DP, success_cb, this); if (!handleOperation(o, "pa_context_set_card_profile_by_name")) return; } /* Restore default sink/source */ if (m_defaultsink != "") { qDebug("Restoring PulseAudio default sink to '%s'", m_defaultsink.c_str()); o = pa_context_set_default_sink(m_context, m_defaultsink.c_str(), success_cb, this); if (!handleOperation(o, "pa_context_set_default_sink")) return; } if (m_defaultsource != "") { qDebug("Restoring PulseAudio default source to '%s'", m_defaultsource.c_str()); o = pa_context_set_default_source(m_context, m_defaultsource.c_str(), success_cb, this); if (!handleOperation(o, "pa_context_set_default_source")) return; } pa_threaded_mainloop_unlock(m_mainLoop); } void QPulseAudioEngineWorker::setCallMode(CallStatus callstatus, AudioMode audiomode) { if (!createPulseContext()) { return; } CallStatus p_callstatus = m_callstatus; AudioMode p_audiomode = m_audiomode; AudioModes p_availableAudioModes = m_availableAudioModes; pa_operation *o; /* Check if we need to save the current pulseaudio state (e.g. when starting a call) */ if ((callstatus != CallEnded) && (p_callstatus == CallEnded)) { if (setupVoiceCall() < 0) { qCritical("Failed to setup PulseAudio for Voice Call"); return; } } /* If we have an active call, update internal state (used later when updating sink/source ports) */ m_callstatus = callstatus; m_audiomode = audiomode; pa_threaded_mainloop_lock(m_mainLoop); /* Switch the virtual card mode when call is active and not active * This needs to be done before sink/source gets updated, because after changing mode * it will automatically move to input/output-parking */ if ((m_callstatus == CallActive) && (p_callstatus != CallActive) && (m_voicecallcard != "") && (m_voicecallprofile != "")) { qDebug("Setting PulseAudio card '%s' profile '%s'", m_voicecallcard.c_str(), m_voicecallprofile.c_str()); o = pa_context_set_card_profile_by_name(m_context, m_voicecallcard.c_str(), m_voicecallprofile.c_str(), success_cb, this); if (!handleOperation(o, "pa_context_set_card_profile_by_name")) return; } else if ((m_callstatus == CallEnded) && (m_voicecallcard != "") && (m_voicecallhighest != "")) { /* If using droid, make sure to restore to the profile that has the highest score */ qDebug("Restoring PulseAudio card '%s' to profile '%s'", m_voicecallcard.c_str(), m_voicecallhighest.c_str()); o = pa_context_set_card_profile_by_name(m_context, m_voicecallcard.c_str(), m_voicecallhighest.c_str(), success_cb, this); if (!handleOperation(o, "pa_context_set_card_profile_by_name")) return; } /* Find highest compatible sink/source elements from the voicecall compatible card (on touch this means the pulse droid element) */ m_nametoset = m_valuetoset = ""; o = pa_context_get_sink_info_list(m_context, sinkinfo_cb, this); if (!handleOperation(o, "pa_context_get_sink_info_list")) return; if ((m_nametoset != "") && (m_nametoset != m_defaultsink)) { qDebug("Setting PulseAudio default sink to '%s'", m_nametoset.c_str()); o = pa_context_set_default_sink(m_context, m_nametoset.c_str(), success_cb, this); if (!handleOperation(o, "pa_context_set_default_sink")) return; } if (m_valuetoset != "") { qDebug("Setting PulseAudio sink '%s' port '%s'", m_nametoset.c_str(), m_valuetoset.c_str()); o = pa_context_set_sink_port_by_name(m_context, m_nametoset.c_str(), m_valuetoset.c_str(), success_cb, this); if (!handleOperation(o, "pa_context_set_sink_port_by_name")) return; } /* Same for source */ m_nametoset = m_valuetoset = ""; o = pa_context_get_source_info_list(m_context, sourceinfo_cb, this); if (!handleOperation(o, "pa_context_get_source_info_list")) return; if ((m_nametoset != "") && (m_nametoset != m_defaultsource)) { qDebug("Setting PulseAudio default source to '%s'", m_nametoset.c_str()); o = pa_context_set_default_source(m_context, m_nametoset.c_str(), success_cb, this); if (!handleOperation(o, "pa_context_set_default_source")) return; } if (m_valuetoset != "") { qDebug("Setting PulseAudio source '%s' port '%s'", m_nametoset.c_str(), m_valuetoset.c_str()); o = pa_context_set_source_port_by_name(m_context, m_nametoset.c_str(), m_valuetoset.c_str(), success_cb, this); if (!handleOperation(o, "pa_context_set_source_port_by_name")) return; } pa_threaded_mainloop_unlock(m_mainLoop); /* Notify if the list of audio modes changed */ if (p_availableAudioModes != m_availableAudioModes) Q_EMIT availableAudioModesChanged(m_availableAudioModes); /* Notify if call mode changed */ if (p_audiomode != m_audiomode) { Q_EMIT audioModeChanged(m_audiomode); } /* If no more active voicecall, restore previous saved pulseaudio state */ if (callstatus == CallEnded) { restoreVoiceCall(); } /* In case the app had set mute when the call wasn't active, make sure we reflect it here */ if (m_callstatus != CallEnded) setMicMute(m_micmute); } void QPulseAudioEngineWorker::setMicMute(bool muted) { if (!createPulseContext()) { return; } m_micmute = muted; if (m_callstatus == CallEnded) return; pa_threaded_mainloop_lock(m_mainLoop); m_nametoset = ""; pa_operation *o = pa_context_get_source_info_list(m_context, sourceinfo_cb, this); if (!handleOperation(o, "pa_context_get_source_info_list")) return; if (m_nametoset != "") { int m = m_micmute ? 1 : 0; qDebug("Setting PulseAudio source '%s' muted '%d'", m_nametoset.c_str(), m); o = pa_context_set_source_mute_by_name(m_context, m_nametoset.c_str(), m, success_cb, this); if (!handleOperation(o, "pa_context_set_source_mute_by_name")) return; } pa_threaded_mainloop_unlock(m_mainLoop); } void QPulseAudioEngineWorker::plugCardCallback(const pa_card_info *info) { qDebug("Notified about card (%s) add event from PulseAudio", info->name); /* We only care about BT (HSP) devices, and if one is not already available */ if ((m_callstatus != CallEnded) && ((m_bt_hsp == "") || (m_bt_hsp_a2dp == ""))) { /* Check if it's indeed a BT device (with at least one hsp profile) */ pa_card_profile_info *hsp = NULL; for (int i = 0; i < info->n_profiles; i++) { if (!strcmp(info->profiles[i].name, PULSEAUDIO_PROFILE_HSP)) hsp = &info->profiles[i]; } if (hsp) m_handleevent = true; } } void QPulseAudioEngineWorker::updateCardCallback(const pa_card_info *info) { qDebug("Notified about card (%s) changes event from PulseAudio", info->name); /* We only care if the card event for the voicecall capable card */ if ((m_callstatus == CallActive) && (!strcmp(info->name, m_voicecallcard.c_str()))) { if (m_audiomode == AudioModeWiredHeadset) { /* If previous mode is wired, it means it got unplugged */ m_handleevent = true; m_audiomodetoset = AudioModeBtOrWiredOrEarpiece; } else if ((m_audiomode == AudioModeEarpiece) || ((m_audiomode == AudioModeSpeaker))) { /* Now only trigger the event in case wired headset/headphone is now available */ pa_card_port_info *port_info = NULL; for (int i = 0; i < info->n_ports; i++) { if (info->ports[i] && (info->ports[i]->available == PA_PORT_AVAILABLE_YES) && ( !strcmp(info->ports[i]->name, "output-wired_headset") || !strcmp(info->ports[i]->name, "output-wired_headphone"))) { m_handleevent = true; m_audiomodetoset = AudioModeWiredOrEarpiece; } } } else if (m_audiomode == AudioModeBluetooth) { /* Handle the event so we can update the audiomodes */ m_handleevent = true; m_audiomodetoset = AudioModeBluetooth; } } } void QPulseAudioEngineWorker::unplugCardCallback() { if (m_callstatus != CallEnded) { m_handleevent = true; } } void QPulseAudioEngineWorker::handleCardEvent(const int evt, const unsigned int idx) { pa_operation *o = NULL; /* Internal state var used to know if we need to update our internal state */ m_handleevent = false; if (evt == PA_SUBSCRIPTION_EVENT_NEW) { o = pa_context_get_card_info_by_index(m_context, idx, plug_card_cb, this); if (!handleOperation(o, "pa_context_get_card_info_by_index")) return; if (m_handleevent) { qDebug("Adding new BT-HSP capable device"); /* In case A2DP is available, switch to HSP */ if (setupVoiceCall() < 0) return; /* Enable the HSP output port */ setCallMode(m_callstatus, AudioModeBluetooth); } } else if (evt == PA_SUBSCRIPTION_EVENT_CHANGE) { o = pa_context_get_card_info_by_index(m_context, idx, update_card_cb, this); if (!handleOperation(o, "pa_context_get_card_info_by_index")) return; if (m_handleevent) { /* In this case it means the handset state changed */ qDebug("Notifying card changes for the voicecall capable card"); setCallMode(m_callstatus, m_audiomodetoset); } } else if (evt == PA_SUBSCRIPTION_EVENT_REMOVE) { /* Check if the main HSP card was removed */ if (m_bt_hsp != "") { o = pa_context_get_card_info_by_name(m_context, m_bt_hsp.c_str(), unplug_card_cb, this); if (!handleOperation(o, "pa_context_get_sink_info_by_name")) return; } if (m_bt_hsp_a2dp != "") { o = pa_context_get_card_info_by_name(m_context, m_bt_hsp_a2dp.c_str(), unplug_card_cb, this); if (!handleOperation(o, "pa_context_get_sink_info_by_name")) return; } if (m_handleevent) { qDebug("Notifying about BT-HSP card removal"); /* Needed in order to save the default sink/source */ if (setupVoiceCall() < 0) return; /* Enable the default handset output port */ setCallMode(m_callstatus, AudioModeWiredOrEarpiece); } } } Q_GLOBAL_STATIC(QPulseAudioEngine, pulseEngine); QPulseAudioEngine::QPulseAudioEngine(QObject *parent) : QObject(parent) { qRegisterMetaType(); qRegisterMetaType(); qRegisterMetaType(); mWorker = new QPulseAudioEngineWorker(); QObject::connect(mWorker, SIGNAL(audioModeChanged(const AudioMode)), this, SIGNAL(audioModeChanged(const AudioMode)), Qt::QueuedConnection); QObject::connect(mWorker, SIGNAL(availableAudioModesChanged(const AudioModes)), this, SIGNAL(availableAudioModesChanged(const AudioModes)), Qt::QueuedConnection); mWorker->createPulseContext(); mWorker->moveToThread(&mThread); mThread.start(); } QPulseAudioEngine::~QPulseAudioEngine() { mThread.quit(); mThread.wait(); } QPulseAudioEngine *QPulseAudioEngine::instance() { QPulseAudioEngine *engine = pulseEngine(); return engine; } void QPulseAudioEngine::setCallMode(CallStatus callstatus, AudioMode audiomode) { QMetaObject::invokeMethod(mWorker, "setCallMode", Qt::QueuedConnection, Q_ARG(CallStatus, callstatus), Q_ARG(AudioMode, audiomode)); } void QPulseAudioEngine::setMicMute(bool muted) { QMetaObject::invokeMethod(mWorker, "setMicMute", Qt::QueuedConnection, Q_ARG(bool, muted)); } QT_END_NAMESPACE telephony-service-0.5.3/handler/qpulseaudioengine.h000066400000000000000000000076241455543255600225220ustar00rootroot00000000000000/**************************************************************************** ** ** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). ** Contact: http://www.qt-project.org/legal ** ** This file was taken from qt5 and modified by ** David Henningsson for usage in ** telepathy-ofono. ** ** GNU Lesser General Public License Usage ** Alternatively, this file may be used under the terms of the GNU Lesser ** General Public License version 2.1 as published by the Free Software ** Foundation and appearing in the file LICENSE.LGPL included in the ** packaging of this file. Please review the following information to ** ensure the GNU Lesser General Public License version 2.1 requirements ** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ** ****************************************************************************/ #ifndef QPULSEAUDIOENGINE_H #define QPULSEAUDIOENGINE_H #include #include #include #include enum AudioMode { AudioModeEarpiece = 0x0001, AudioModeWiredHeadset = 0x0002, AudioModeSpeaker = 0x0004, AudioModeBluetooth = 0x0008, AudioModeBtOrWiredOrEarpiece = AudioModeBluetooth | AudioModeWiredHeadset | AudioModeEarpiece, AudioModeWiredOrEarpiece = AudioModeWiredHeadset | AudioModeEarpiece, AudioModeWiredOrSpeaker = AudioModeWiredHeadset | AudioModeSpeaker, AudioModeBtOrWiredOrSpeaker = AudioModeBluetooth | AudioModeWiredOrSpeaker }; Q_DECLARE_METATYPE(AudioMode) typedef QList AudioModes; Q_DECLARE_METATYPE(AudioModes) enum CallStatus { CallRinging, CallActive, CallEnded }; Q_DECLARE_METATYPE(CallStatus) QT_BEGIN_NAMESPACE class QPulseAudioEngineWorker : public QObject { Q_OBJECT public: QPulseAudioEngineWorker(QObject *parent = 0); ~QPulseAudioEngineWorker(); pa_threaded_mainloop *mainloop() { return m_mainLoop; } pa_context *context() { return m_context; } bool createPulseContext(void); int setupVoiceCall(void); void restoreVoiceCall(void); /* Callbacks to be used internally */ void cardInfoCallback(const pa_card_info *card); void sinkInfoCallback(const pa_sink_info *sink); void sourceInfoCallback(const pa_source_info *source); void serverInfoCallback(const pa_server_info *server); void plugCardCallback(const pa_card_info *card); void updateCardCallback(const pa_card_info *card); void unplugCardCallback(); Q_SIGNALS: void audioModeChanged(const AudioMode mode); void availableAudioModesChanged(const AudioModes modes); public Q_SLOTS: void handleCardEvent(const int evt, const unsigned int idx); void setCallMode(CallStatus callstatus, AudioMode audiomode); void setMicMute(bool muted); /* True if muted, false if unmuted */ private: pa_mainloop_api *m_mainLoopApi; pa_threaded_mainloop *m_mainLoop; pa_context *m_context; AudioModes m_availableAudioModes; CallStatus m_callstatus; AudioMode m_audiomode; AudioMode m_audiomodetoset; bool m_micmute, m_handleevent; std::string m_nametoset, m_valuetoset; std::string m_defaultsink, m_defaultsource; std::string m_bt_hsp, m_bt_hsp_a2dp; std::string m_voicecallcard, m_voicecallhighest, m_voicecallprofile; bool handleOperation(pa_operation *operation, const char *func_name); void releasePulseContext(void); }; class QPulseAudioEngine : public QObject { Q_OBJECT public: explicit QPulseAudioEngine(QObject *parent = 0); ~QPulseAudioEngine(); static QPulseAudioEngine *instance(); void setCallMode(CallStatus callstatus, AudioMode audiomode); void setMicMute(bool muted); /* True if muted, false if unmuted */ Q_SIGNALS: void audioModeChanged(const AudioMode mode); void availableAudioModesChanged(const AudioModes modes); private: QPulseAudioEngineWorker *mWorker; QThread mThread; }; QT_END_NAMESPACE #endif telephony-service-0.5.3/handler/texthandler.cpp000066400000000000000000000326311455543255600216520ustar00rootroot00000000000000/* * Copyright (C) 2012-2016 Canonical, Ltd. * * Authors: * Gustavo Pichorim Boiko * Tiago Salem Herrmann * * This file is part of telephony-service. * * telephony-service is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; version 3. * * telephony-service 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 . */ #include "texthandler.h" #include "phoneutils.h" #include "telepathyhelper.h" #include "config.h" #include "dbustypes.h" #include "accountentry.h" #include "chatstartingjob.h" #include #include #include #include #include #include #include #include TextHandler::TextHandler(QObject *parent) : QObject(parent) , mMessagingAppMonitor("com.lomiri.MessagingApp", QDBusConnection::sessionBus(), QDBusServiceWatcher::WatchForRegistration|QDBusServiceWatcher::WatchForUnregistration), mMessagingAppRegistered(false) { qDBusRegisterMetaType(); qDBusRegisterMetaType(); qRegisterMetaType(); connect(&mMessagingAppMonitor, SIGNAL(serviceRegistered(const QString&)), SLOT(onMessagingAppOpen())); connect(&mMessagingAppMonitor, SIGNAL(serviceUnregistered(const QString&)), SLOT(onMessagingAppClosed())); connect(TelepathyHelper::instance(), &TelepathyHelper::accountAdded, [=](AccountEntry *account) { if (mMessagingAppRegistered && !account->active() && account->protocolInfo()->leaveRoomsOnClose()) { account->reconnect(); } }); } void TextHandler::onMessagingAppOpen() { mMessagingAppRegistered = true; Q_FOREACH(AccountEntry *account, TelepathyHelper::instance()->accounts()) { if (!account->active() && account->protocolInfo()->leaveRoomsOnClose()) { account->reconnect(); } } } void TextHandler::onMessagingAppClosed() { mMessagingAppRegistered = false; Q_FOREACH(AccountEntry *account, TelepathyHelper::instance()->accounts()) { if (account->protocolInfo()->leaveRoomsOnClose()) { account->requestDisconnect(); } } } TextHandler *TextHandler::instance() { static TextHandler *handler = new TextHandler(); return handler; } QString TextHandler::startChat(const QString &accountId, const QVariantMap &properties) { ChatStartingJob *job = new ChatStartingJob(this, accountId, properties); job->startJob(); return job->objectPath(); } QString TextHandler::sendMessage(const QString &accountId, const QString &message, const AttachmentList &attachments, const QVariantMap &properties) { PendingMessage pendingMessage = {accountId, message, attachments, properties}; MessageSendingJob *job = new MessageSendingJob(this, pendingMessage); job->startJob(); return job->objectPath(); } void TextHandler::acknowledgeMessages(const QVariantList &messages) { Q_FOREACH(const QVariant &message, messages) { QVariantMap properties = qdbus_cast(message); QList channels = existingChannels(properties["accountId"].toString(), properties); if (channels.isEmpty()) { return; } QList messagesToAck; QString messageId = properties["messageId"].toString(); Q_FOREACH(const Tp::TextChannelPtr &channel, channels) { Q_FOREACH(const Tp::ReceivedMessage &message, channel->messageQueue()) { if (messageId == message.messageToken()) { messagesToAck.append(message); } } channel->acknowledge(messagesToAck); } } } void TextHandler::acknowledgeAllMessages(const QVariantMap &properties) { QList channels = existingChannels(properties["accountId"].toString(), properties); if (channels.isEmpty()) { return; } Q_FOREACH(const Tp::TextChannelPtr &channel, channels) { channel->acknowledge(channel->messageQueue()); } } void TextHandler::redownloadMessage(const QString &accountId, const QString &threadId, const QString &eventId) { qDebug() << "TextHandler::redownloadMessage with eventId: " << eventId; History::TextEvent textEvent = History::Manager::instance()->getSingleEvent(History::EventTypeText, accountId, threadId, eventId); if (textEvent.isNull()) { qWarning() << "No message for re-download found under accountId: " << accountId << ", threadId: " << threadId << ", eventId: " << eventId; return; } // Only re-download temporarily failed messages. if (textEvent.messageStatus() != History::MessageStatusTemporarilyFailed) { qWarning() << "Trying to re-download message with wrong status: " << textEvent.messageStatus(); return; } // Update status to pending. // Note: Visually the message should be seen as pending now, because the messaging-app sets it as pending (to sort out lag after click), but that is not saved to db. textEvent.setMessageStatus(History::MessageStatusPending); History::Events events; events.append(textEvent); if (!History::Manager::instance()->writeEvents(events)) { qWarning() << "Failed to save the re-downloaded message pending status!"; } QDBusMessage request = QDBusMessage::createMethodCall("org.ofono.mms", eventId, "org.ofono.mms.Message", "Redownload"); QDBusReply reply = QDBusConnection::sessionBus().call(request); if (!reply.isValid()) { qWarning() << "Re-download request failed with error: " << reply.error(); // Revert status back to temporarily failed. textEvent.setMessageStatus(History::MessageStatusTemporarilyFailed); History::Events events; events.append(textEvent); if (!History::Manager::instance()->writeEvents(events)) { qWarning() << "Failed to save the re-downloaded message temporarily failed status!"; } } } bool TextHandler::destroyTextChannel(const QString &objectPath) { Tp::TextChannelPtr channelToDestroy = existingChannelFromObjectPath(objectPath); if (!channelToDestroy || !channelToDestroy->hasInterface(TP_QT_IFACE_CHANNEL_INTERFACE_DESTROYABLE)) { return false; } Tp::Client::ChannelInterfaceDestroyableInterface *interface = channelToDestroy->interface(); if (!interface) { return false; } // FIXME(boiko): maybe use an async API? not sure it is worth adding that QDBusPendingReply reply = interface->Destroy(); reply.waitForFinished(); return !reply.isError(); } bool TextHandler::changeRoomTitle(const QString &objectPath, const QString &title) { qDebug() << __PRETTY_FUNCTION__; Tp::TextChannelPtr channel = existingChannelFromObjectPath(objectPath); if (!channel) { qWarning() << "Could not find channel for object path" << objectPath; return false; } Tp::Client::ChannelInterfaceRoomConfigInterface *roomConfigInterface; roomConfigInterface = channel->optionalInterface(); if (!roomConfigInterface) { qWarning() << "Could not find RoomConfig interface in the channel" << objectPath; return false; } QVariantMap properties; properties["Title"] = title; QDBusPendingReply reply = roomConfigInterface->UpdateConfiguration(properties); reply.waitForFinished(); return !reply.isError(); } void TextHandler::onTextChannelInvalidated() { Tp::TextChannelPtr textChannel(qobject_cast(sender())); mChannels.removeAll(textChannel); } void TextHandler::onTextChannelAvailable(Tp::TextChannelPtr channel) { qDebug() << "TextHandler::onTextChannelAvailable" << channel; AccountEntry *account = TelepathyHelper::instance()->accountForConnection(channel->connection()); if (!account) { return; } connect(channel.data(), SIGNAL(invalidated(Tp::DBusProxy*,const QString&, const QString&)), SLOT(onTextChannelInvalidated())); QString accountId = account->accountId(); mChannels.append(channel); } QList TextHandler::existingChannels(const QString &accountId, const QVariantMap &properties) { QList channels; QStringList targetIds = properties["participantIds"].toStringList(); int chatType = properties["chatType"].toUInt(); if (chatType == Tp::HandleTypeNone && targetIds.size() == 1) { chatType = Tp::HandleTypeContact; } QString roomId = properties["threadId"].toString(); // try to use the threadId as participantId if empty if (chatType == Tp::HandleTypeContact && targetIds.isEmpty()) { targetIds << roomId; } Q_FOREACH(const Tp::TextChannelPtr &channel, mChannels) { int count = 0; AccountEntry *channelAccount = TelepathyHelper::instance()->accountForConnection(channel->connection()); if (!channelAccount || channelAccount->accountId() != accountId) { continue; } if (chatType != channel->targetHandleType()) { continue; } if (chatType == Tp::HandleTypeRoom) { if (!roomId.isEmpty() && channel->targetHandleType() == chatType && roomId == channel->targetId()) { channels.append(channel); } continue; } // this is a special case. We have to check if we are looking for a channel open with our self contact. bool channelToSelfContact = channel->groupContacts(true).size() == 1 && targetIds.size() == 1 && channel->targetHandleType() == Tp::HandleTypeContact && channelAccount->compareIds(channel->targetId(), channelAccount->selfContactId()) && channelAccount->compareIds(targetIds.first(), channel->targetId()); // make sure we compare the recipient with the channel if (channelToSelfContact) { channels.append(channel); continue; } if (channel->groupContacts(false).size() != targetIds.size()) { continue; } Q_FOREACH(const QString &targetId, targetIds) { Q_FOREACH(const Tp::ContactPtr &channelContact, channel->groupContacts(false)) { if (channelAccount->compareIds(channelContact->id(), targetId)) { count++; } } } if (count == targetIds.size()) { channels.append(channel); } } return channels; } Tp::TextChannelPtr TextHandler::existingChannelFromObjectPath(const QString &objectPath) { Q_FOREACH(Tp::TextChannelPtr channel, mChannels) { if (channel->objectPath() == objectPath) { return channel; } } return Tp::TextChannelPtr(); } void TextHandler::inviteParticipants(const QString &objectPath, const QStringList &participants, const QString &message) { Tp::TextChannelPtr channel = existingChannelFromObjectPath(objectPath); if (channel->targetHandleType() != Tp::HandleTypeRoom || !channel) { return; } if (!channel->groupCanAddContacts() || !channel->connection()) { return; } Tp::PendingContacts *contactOp = channel->connection()->contactManager()->contactsForIdentifiers(participants); connect(contactOp, &Tp::PendingOperation::finished, [=] { if (contactOp->isError()) { return; } channel->groupAddContacts(contactOp->contacts(), message); }); } void TextHandler::removeParticipants(const QString &objectPath, const QStringList &participants, const QString &message) { Tp::TextChannelPtr channel = existingChannelFromObjectPath(objectPath); if (channel->targetHandleType() != Tp::HandleTypeRoom || !channel) { return; } if (!channel->groupCanRemoveContacts() || !channel->connection()) { return; } Tp::PendingContacts *contactOp = channel->connection()->contactManager()->contactsForIdentifiers(participants); connect(contactOp, &Tp::PendingOperation::finished, [=] { if (contactOp->isError()) { return; } channel->groupRemoveContacts(contactOp->contacts(), message); }); } bool TextHandler::leaveChat(const QString &objectPath, const QString &message) { Tp::TextChannelPtr channel = existingChannelFromObjectPath(objectPath); if (channel->targetHandleType() != Tp::HandleTypeRoom || !channel || !channel->connection()) { return false; } channel->requestLeave(message); return true; } void TextHandler::leaveRooms(const QString &accountId, const QString &message) { Q_FOREACH(const Tp::TextChannelPtr &channel, mChannels) { if (channel->targetHandleType() != Tp::HandleTypeRoom) { continue; } AccountEntry *account = TelepathyHelper::instance()->accountForConnection(channel->connection()); if (account && account->accountId() == accountId) { leaveChat(channel->objectPath(), message); } } } telephony-service-0.5.3/handler/texthandler.h000066400000000000000000000052451455543255600213200ustar00rootroot00000000000000/* * Copyright (C) 2012-2016 Canonical, Ltd. * * Authors: * Gustavo Pichorim Boiko * Tiago Salem Herrmann * * This file is part of telephony-service. * * telephony-service is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; version 3. * * telephony-service 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 . */ #ifndef TEXTHANDLER_H #define TEXTHANDLER_H #include #include #include #include #include "dbustypes.h" #include "messagesendingjob.h" class TextHandler : public QObject { Q_OBJECT public: static TextHandler *instance(); QString startChat(const QString &accountId, const QVariantMap &properties); friend class MessageSendingJob; public Q_SLOTS: QString sendMessage(const QString &accountId, const QString &message, const AttachmentList &attachments, const QVariantMap &properties); void acknowledgeMessages(const QVariantList &messages); void acknowledgeAllMessages(const QVariantMap &properties); void redownloadMessage(const QString &accountId, const QString &threadId, const QString &eventId); bool destroyTextChannel(const QString &objectPath); bool changeRoomTitle(const QString &objectPath, const QString &title); void inviteParticipants(const QString &objectPath, const QStringList &participants, const QString &message); void removeParticipants(const QString &objectPath, const QStringList &participants, const QString &message); bool leaveChat(const QString &objectPath, const QString &message); void leaveRooms(const QString &accountId, const QString &message); protected Q_SLOTS: void onTextChannelAvailable(Tp::TextChannelPtr channel); void onTextChannelInvalidated(); void onMessagingAppOpen(); void onMessagingAppClosed(); protected: QList existingChannels(const QString &accountId, const QVariantMap &properties); Tp::TextChannelPtr existingChannelFromObjectPath(const QString &objectPath); private: explicit TextHandler(QObject *parent = 0); QList mChannels; QDBusServiceWatcher mMessagingAppMonitor; bool mMessagingAppRegistered; }; #endif // TEXTHANDLER_H telephony-service-0.5.3/icons/000077500000000000000000000000001455543255600163155ustar00rootroot00000000000000telephony-service-0.5.3/icons/CMakeLists.txt000066400000000000000000000002271455543255600210560ustar00rootroot00000000000000set(icon_DIRS hicolor ubuntu-mono-dark ubuntu-mono-light ) install(DIRECTORY ${icon_DIRS} DESTINATION ${CMAKE_INSTALL_DATADIR}/icons) telephony-service-0.5.3/icons/hicolor/000077500000000000000000000000001455543255600177545ustar00rootroot00000000000000telephony-service-0.5.3/icons/hicolor/48x48/000077500000000000000000000000001455543255600205535ustar00rootroot00000000000000telephony-service-0.5.3/icons/hicolor/48x48/apps/000077500000000000000000000000001455543255600215165ustar00rootroot00000000000000telephony-service-0.5.3/icons/hicolor/48x48/apps/telephony-service-call.png000066400000000000000000000020611455543255600266010ustar00rootroot00000000000000PNG  IHDR00WbKGD pHYs  IDATh[U96" 6dH" 3*ꡛTOME#²AOR>$EaHz(d'ˌ0k0\|-8/]JjHy!= *j~(c ccJ"(W9|㺊%\r'@ιЇÝ9Ӱ ]5/8pV{TJu9瓊Ts7V q"_pfVZ$iao'nUC)"hqڜ8[ܿodha>–3;pRﱿ؋uX N* lK)PU_ {tZ~'QTb\sW$*&=wagJio&r)⦢hT7XR#cGJx5l_bGι-t`VX2ϱ>kUBǁvgtaKU؍K]4<>vh3]uk ִ DS® ,W!9Հ`ޝbA`XvTk-^ 2mJSzyιo{]~ؐR}pUfBo'{(pz+؎Ri7@+o4ޮ_ "̫?~O<a|iSJa s%g%\8'גN3M?K)h"5)[]'LȿL0Q^IENDB`telephony-service-0.5.3/icons/hicolor/48x48/apps/telephony-service-message.png000066400000000000000000000011671455543255600273200ustar00rootroot00000000000000PNG  IHDR00WbKGD pHYs  IDATh혿kA?F.!%"h *X "j%D_0N$FID Y\3ϝoy3o7o1Ш^&pf)pE&J̬<n"Yxܑe(Ms^6d½0q`8yqWşζ?( )3 g\N(G]x>v$m@ԉ(Y}:':Ыd`l5+> ]l+=\2+?<1O%P'f"6`>2o1o! g#Ĥl"I?]6\k Xq)=˺%멤Mg/$98b/͜E ]u+V5I`Ӄ Nuh0t8 GwQ{I{ȱY3{ / K ;|fR6 2!̗ JR6_R]XeQFU΂h8HIENDB`telephony-service-0.5.3/icons/ubuntu-mono-dark/000077500000000000000000000000001455543255600215245ustar00rootroot00000000000000telephony-service-0.5.3/icons/ubuntu-mono-dark/status/000077500000000000000000000000001455543255600230475ustar00rootroot00000000000000telephony-service-0.5.3/icons/ubuntu-mono-dark/status/16/000077500000000000000000000000001455543255600232755ustar00rootroot00000000000000telephony-service-0.5.3/icons/ubuntu-mono-dark/status/16/indicator-call.svg000066400000000000000000000055121455543255600267060ustar00rootroot00000000000000 image/svg+xml telephony-service-0.5.3/icons/ubuntu-mono-dark/status/22/000077500000000000000000000000001455543255600232725ustar00rootroot00000000000000telephony-service-0.5.3/icons/ubuntu-mono-dark/status/22/indicator-call.svg000066400000000000000000000054721455543255600267100ustar00rootroot00000000000000 image/svg+xml telephony-service-0.5.3/icons/ubuntu-mono-dark/status/24/000077500000000000000000000000001455543255600232745ustar00rootroot00000000000000telephony-service-0.5.3/icons/ubuntu-mono-dark/status/24/indicator-call.svg000066400000000000000000000054721455543255600267120ustar00rootroot00000000000000 image/svg+xml telephony-service-0.5.3/icons/ubuntu-mono-light/000077500000000000000000000000001455543255600217125ustar00rootroot00000000000000telephony-service-0.5.3/icons/ubuntu-mono-light/status/000077500000000000000000000000001455543255600232355ustar00rootroot00000000000000telephony-service-0.5.3/icons/ubuntu-mono-light/status/16/000077500000000000000000000000001455543255600234635ustar00rootroot00000000000000telephony-service-0.5.3/icons/ubuntu-mono-light/status/16/indicator-call.svg000066400000000000000000000054711455543255600271000ustar00rootroot00000000000000 image/svg+xml telephony-service-0.5.3/icons/ubuntu-mono-light/status/22/000077500000000000000000000000001455543255600234605ustar00rootroot00000000000000telephony-service-0.5.3/icons/ubuntu-mono-light/status/22/indicator-call.svg000066400000000000000000000054521455543255600270740ustar00rootroot00000000000000 image/svg+xml telephony-service-0.5.3/icons/ubuntu-mono-light/status/24/000077500000000000000000000000001455543255600234625ustar00rootroot00000000000000telephony-service-0.5.3/icons/ubuntu-mono-light/status/24/indicator-call.svg000066400000000000000000000054631455543255600271000ustar00rootroot00000000000000 image/svg+xml telephony-service-0.5.3/indicator/000077500000000000000000000000001455543255600171565ustar00rootroot00000000000000telephony-service-0.5.3/indicator/CMakeLists.txt000066400000000000000000000052341455543255600217220ustar00rootroot00000000000000include(FindGettext) set(qt_SRCS authhandler.cpp callchannelobserver.cpp displaynamesettings.cpp messagingmenu.cpp metrics.cpp textchannelobserver.cpp ussdindicator.cpp notificationmenu.cpp voicemailindicator.cpp indicatordbus.cpp ) set_source_files_properties( "${DATA_DIR}/org.freedesktop.Notifications.xml" PROPERTIES INCLUDE "${CMAKE_SOURCE_DIR}/indicator/DBusTypes.h" ) qt5_add_dbus_interface( qt_SRCS "${DATA_DIR}/org.freedesktop.Notifications.xml" NotificationsInterface ) qt5_add_dbus_adaptor(qt_SRCS Indicator.xml indicator/indicatordbus.h IndicatorDBus) set(indicator_SRCS main.cpp ${qt_SRCS}) include_directories( ${TP_QT5_INCLUDE_DIRS} ${NOTIFY_INCLUDE_DIRS} ${MESSAGING_MENU_INCLUDE_DIRS} ${CMAKE_SOURCE_DIR}/libtelephonyservice ${CMAKE_CURRENT_BINARY_DIR} ${UserMetrics_INCLUDE_DIRS} ${HISTORY_INCLUDE_DIRS} ) link_directories(${MESSAGING_MENU_LIBRARY_DIRS}) add_executable(telephony-service-indicator ${indicator_SRCS} ${indicator_HDRS}) target_link_libraries(telephony-service-indicator ${TP_QT5_LIBRARIES} ${NOTIFY_LIBRARIES} ${MESSAGING_MENU_LIBRARIES} ${UserMetrics_LIBRARIES} ${HISTORY_LIBRARIES} telephonyservice Qt5::Contacts Qt5::Core Qt5::DBus Qt5::Gui Qt5::Multimedia Qt5::Qml ) enable_coverage(telephony-service-indicator) configure_file(org.freedesktop.Telepathy.Client.TelephonyServiceIndicator.service.in org.freedesktop.Telepathy.Client.TelephonyServiceIndicator.service) install(TARGETS telephony-service-indicator RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}) install(FILES ${CMAKE_CURRENT_BINARY_DIR}/org.freedesktop.Telepathy.Client.TelephonyServiceIndicator.service DESTINATION share/dbus-1/services) install(FILES TelephonyServiceIndicator.client DESTINATION share/telepathy/clients) # Handle i18n in desktop files set(desktop_FILES telephony-service-sms.desktop telephony-service-call.desktop) function(merge_desktop_translations DESKTOP_FILES) foreach(DESKTOP_FILE ${DESKTOP_FILES}) add_custom_target(${DESKTOP_FILE} ALL COMMENT "Merging translations into ${DESKTOP_FILE}..." COMMAND ${GETTEXT_MSGFMT_EXECUTABLE} -d ${CMAKE_SOURCE_DIR}/po --desktop --template=${CMAKE_CURRENT_SOURCE_DIR}/${DESKTOP_FILE}.in -o ${DESKTOP_FILE} ) install(FILES ${CMAKE_CURRENT_BINARY_DIR}/${DESKTOP_FILE} DESTINATION ${CMAKE_INSTALL_DATADIR}/applications) endforeach() endfunction() merge_desktop_translations("${desktop_FILES}") add_subdirectory(icons) telephony-service-0.5.3/indicator/DBusTypes.h000066400000000000000000000020651455543255600212140ustar00rootroot00000000000000/* * Copyright (C) 2013 Canonical, Ltd. * * This program is free software: you can redistribute it and/or modify it * under the terms of the GNU General Public License version 3, as published * by the Free Software Foundation. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranties of * MERCHANTABILITY, SATISFACTORY QUALITY, 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 . * * Author: Pete Woods */ #ifndef DBUSTYPES_H_ #define DBUSTYPES_H_ #include #include typedef QMap QVariantDictMap; Q_DECLARE_METATYPE(QVariantDictMap) class DBusTypes { public: static void registerMetaTypes() { qRegisterMetaType("QVariantDictMap"); qDBusRegisterMetaType(); } }; #endif /* DBUSTYPES_H_ */ telephony-service-0.5.3/indicator/Indicator.xml000066400000000000000000000017351455543255600216220ustar00rootroot00000000000000 An interface to the phone indicator application. telephony-service-0.5.3/indicator/TelephonyServiceIndicator.client000066400000000000000000000013761455543255600255120ustar00rootroot00000000000000[org.freedesktop.Telepathy.Client] Interfaces=org.freedesktop.Telepathy.Client.Observer; [org.freedesktop.Telepathy.Client.Observer.ObserverChannelFilter 0] org.freedesktop.Telepathy.Channel.ChannelType s=org.freedesktop.Telepathy.Channel.Type.Call1 org.freedesktop.Telepathy.Channel.TargetHandleType u=1 org.freedesktop.Telepathy.Channel.Type.Call1.InitialAudio b=true [org.freedesktop.Telepathy.Client.Observer.ObserverChannelFilter 1] org.freedesktop.Telepathy.Channel.ChannelType s=org.freedesktop.Telepathy.Channel.Type.Text [org.freedesktop.Telepathy.Client.Observer.Capabilities] org.freedesktop.Telepathy.Channel.Type.Call1/audio=true org.freedesktop.Telepathy.Channel.Type.Call1/audio/speex=true [org.freedesktop.Telepathy.Client.Observer] Recover=true telephony-service-0.5.3/indicator/authhandler.cpp000066400000000000000000000121131455543255600221570ustar00rootroot00000000000000/* * Copyright (C) 2015 Canonical, Ltd. * * Authors: * Tiago Salem Herrmann * * This file is part of telephony-service. * * telephony-service is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; version 3. * * telephony-service 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 . */ #include #include #include "applicationutils.h" #include "authhandler.h" #include "telepathyhelper.h" namespace C { #include } // FIXME: port to libqmenumodel if possible AuthHandler::AuthHandler(QObject *parent) : QObject(parent), mMenuNotification("authentication", false), mNotifications("org.freedesktop.Notifications", "/org/freedesktop/Notifications", QDBusConnection::sessionBus()) { setupAccounts(); connect(TelepathyHelper::instance(), SIGNAL(setupReady()), this, SLOT(setupAccounts())); connect(TelepathyHelper::instance(), SIGNAL(accountsChanged()), this, SLOT(setupAccounts())); connect(&mNotifications, SIGNAL(ActionInvoked(uint, const QString &)), this, SLOT(actionInvoked(uint, const QString &))); connect(&mNotifications, SIGNAL(NotificationClosed(uint, uint)), this, SLOT(notificationClosed(uint, uint))); connect(TelepathyHelper::instance(), &TelepathyHelper::setupReady, [&]() { Q_FOREACH(AccountEntry *account, TelepathyHelper::instance()->accounts()) { processStatusChange(account, account->account()->connectionStatus()); } }); } void AuthHandler::setupAccounts() { Q_FOREACH(AccountEntry *account, TelepathyHelper::instance()->accounts()) { connect(account, SIGNAL(connectionStatusChanged(Tp::ConnectionStatus)), SLOT(onConnectionStatusChanged(Tp::ConnectionStatus)), Qt::UniqueConnection); } } void AuthHandler::onConnectionStatusChanged(Tp::ConnectionStatus status) { AccountEntry *account = qobject_cast(sender()); if (!account) { return; } processStatusChange(account, status); } void AuthHandler::processStatusChange(AccountEntry *account, Tp::ConnectionStatus status) { QString title; QString message = QString::fromUtf8(C::gettext("Authentication failed. Do you want to review your credentials?")); if (status == Tp::ConnectionStatusDisconnected && account->account()->connectionStatusReason() == Tp::ConnectionStatusReasonAuthenticationFailed && !mIgnoredAccounts.contains(account->accountId())) { QString serviceAndDisplayName; QString displayName = account->displayName(); if (displayName.isEmpty()) { serviceAndDisplayName = account->account()->serviceName(); } else { serviceAndDisplayName = QString("%1: %2").arg(account->account()->serviceName()).arg(displayName); } title = serviceAndDisplayName; } else { return; } NotificationMenu *menu = &mMenuNotification; QString yesActionId = "yes_id"; QString yesActionLabel = C::gettext("Yes"); QString noActionId = "no_id"; QString noActionLabel = C::gettext("No"); QStringList actions; actions << yesActionId << yesActionLabel << noActionId << noActionLabel; // indicate to the notification-daemon, that we want to use snap-decisions QVariantMap notificationHints; notificationHints["x-lomiri-snap-decisions"] = "true"; notificationHints["x-lomiri-private-affirmative-tint"] = "true"; QVariantMap menuModelActions; menuModelActions["notifications"] = menu->actionPath(); QVariantMap menuModelPaths; menuModelPaths["busName"] = menu->busName(); menuModelPaths["menuPath"] = menu->menuPath(); menuModelPaths["actions"] = menuModelActions; notificationHints["x-lomiri-private-menu-model"] = menuModelPaths; uint notificationId = mNotifications.Notify("telephony-service-indicator", 0, "", title, message, actions, notificationHints, 0); mAuthFailureRequests[notificationId] = account; } void AuthHandler::actionInvoked(uint id, const QString &actionKey) { if (!mAuthFailureRequests.keys().contains(id)) { return; } if (actionKey == "yes_id") { ApplicationUtils::openUrl(QString("settings:///system/online-accounts")); } else { mIgnoredAccounts << mAuthFailureRequests[id]->accountId(); } } void AuthHandler::notificationClosed(uint id, uint reason) { if (!mAuthFailureRequests.keys().contains(id)) { return; } mNotifications.CloseNotification(id); mAuthFailureRequests.remove(id); } void AuthHandler::clear() { Q_FOREACH (uint id, mAuthFailureRequests.keys()) { mAuthFailureRequests.remove(id); mNotifications.CloseNotification(id); } } telephony-service-0.5.3/indicator/authhandler.h000066400000000000000000000031131455543255600216240ustar00rootroot00000000000000/* * Copyright (C) 2015 Canonical, Ltd. * * Authors: * Tiago Salem Herrmann * * This file is part of telephony-service. * * telephony-service is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; version 3. * * telephony-service 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 . */ #ifndef AUTHHANDLER_H #define AUTHHANDLER_H #include #include #include "indicator/NotificationsInterface.h" #include "accountentry.h" #include "notificationmenu.h" class AuthHandler : public QObject { Q_OBJECT public: explicit AuthHandler(QObject *parent = 0); public Q_SLOTS: void onConnectionStatusChanged(Tp::ConnectionStatus status); void actionInvoked(uint id, const QString &actionKey); void notificationClosed(uint id, uint reason); void clear(); private Q_SLOTS: void setupAccounts(); private: void processStatusChange(AccountEntry *account, Tp::ConnectionStatus status); NotificationMenu mMenuNotification; org::freedesktop::Notifications mNotifications; QMap mAuthFailureRequests; QStringList mIgnoredAccounts; }; #endif // AUTHHANDLER_H telephony-service-0.5.3/indicator/callchannelobserver.cpp000066400000000000000000000111501455543255600236740ustar00rootroot00000000000000/* * Copyright (C) 2013-2017 Canonical, Ltd. * * Authors: * Gustavo Pichorim Boiko * * This file is part of telephony-service. * * telephony-service is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; version 3. * * telephony-service 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 . */ #include "callchannelobserver.h" #include "callnotification.h" #include "contactwatcher.h" #include "messagingmenu.h" #include "metrics.h" #include "telepathyhelper.h" #include "accountentry.h" #include CallChannelObserver::CallChannelObserver(QObject *parent) : QObject(parent) { } void CallChannelObserver::onCallChannelAvailable(Tp::CallChannelPtr callChannel) { // save the timestamp as a property in the call channel callChannel->setProperty("timestamp", QDateTime::currentDateTime()); if (callChannel->callState() == Tp::CallStateActive) { callChannel->setProperty("activeTimestamp", QDateTime::currentDateTime()); } connect(callChannel.data(), SIGNAL(callStateChanged(Tp::CallState)), SLOT(onCallStateChanged(Tp::CallState))); connect(callChannel.data(), SIGNAL(localHoldStateChanged(Tp::LocalHoldState,Tp::LocalHoldStateReason)), SLOT(onHoldChanged())); mChannels.append(callChannel); if (callChannel->isReady(Tp::CallChannel::FeatureCallState)) { mCallStates[callChannel.data()] = callChannel->callState(); } else { connect(callChannel->becomeReady(Tp::CallChannel::FeatureCallState), &Tp::PendingReady::finished, [&](){ mCallStates[callChannel.data()] = callChannel->callState(); }); } } void CallChannelObserver::onCallStateChanged(Tp::CallState state) { Tp::CallChannelPtr channel(qobject_cast(sender())); if (!channel) { return; } AccountEntry *accountEntry = TelepathyHelper::instance()->accountForConnection(channel->connection()); if (!accountEntry) { return; } bool incoming = channel->initiatorContact() != accountEntry->account()->connection()->selfContact(); bool missed = incoming && channel->callStateReason().reason == Tp::CallStateChangeReasonNoAnswer; QDateTime activeTimestamp = channel->property("activeTimestamp").toDateTime(); switch (state) { case Tp::CallStateEnded: Q_EMIT callEnded(channel); // if the missed flag is false, we still have to check if transitioning directly from Initialized to Ended if (!missed && incoming) { missed = mCallStates[channel.data()] == Tp::CallStateInitialised; } // add the missed call to the messaging menu if (missed) { // FIXME: handle conf call MessagingMenu::instance()->addCall(ContactWatcher::normalizeIdentifier(channel->targetContact()->id()), accountEntry->accountId(), QDateTime::currentDateTime()); } else { // and show a notification // FIXME: handle conf call CallNotification::instance()->showNotificationForCall(QStringList() << ContactWatcher::normalizeIdentifier(channel->targetContact()->id()), CallNotification::CallEnded); } mCallStates.remove(channel.data()); mChannels.removeOne(channel); // update the metrics Metrics::instance()->increment(incoming ? Metrics::IncomingCalls : Metrics::OutgoingCalls); if (activeTimestamp.isValid()) { double minutes = activeTimestamp.secsTo(QDateTime::currentDateTime()) / 60.; Metrics::instance()->increment(Metrics::CallDurations, qRound(minutes * 100) / 100); } break; case Tp::CallStateActive: channel->setProperty("activeTimestamp", QDateTime::currentDateTime()); break; } mCallStates[channel.data()] = state; } void CallChannelObserver::onHoldChanged() { Tp::CallChannelPtr channel(qobject_cast(sender())); if (!channel) { return; } if (channel->localHoldState() == Tp::LocalHoldStateHeld) { // FIXME: handle conf call CallNotification::instance()->showNotificationForCall(QStringList() << channel->targetContact()->id(), CallNotification::CallHeld); } } telephony-service-0.5.3/indicator/callchannelobserver.h000066400000000000000000000025501455543255600233450ustar00rootroot00000000000000/* * Copyright (C) 2013-2017 Canonical, Ltd. * * Authors: * Gustavo Pichorim Boiko * * This file is part of telephony-service. * * telephony-service is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; version 3. * * telephony-service 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 . */ #ifndef CALLCHANNELOBSERVER_H #define CALLCHANNELOBSERVER_H #include #include class CallChannelObserver : public QObject { Q_OBJECT public: explicit CallChannelObserver(QObject *parent = 0); public Q_SLOTS: void onCallChannelAvailable(Tp::CallChannelPtr callChannel); Q_SIGNALS: void callEnded(Tp::CallChannelPtr callChannel); protected Q_SLOTS: void onCallStateChanged(Tp::CallState state); void onHoldChanged(); private: QList mChannels; QMap mCallStates; }; #endif // CALLCHANNELOBSERVER_H telephony-service-0.5.3/indicator/displaynamesettings.cpp000066400000000000000000000064351455543255600237610ustar00rootroot00000000000000/* * Copyright (C) 2016-2017 Canonical, Ltd. * * Authors: * Gustavo Pichorim Boiko * * This file is part of telephony-service. * * telephony-service is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; version 3. * * telephony-service 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 . */ #include "displaynamesettings.h" #include "accountentry.h" #include "greetercontacts.h" #include "telepathyhelper.h" namespace C { #include } #define DUAL_SIM_NAMES_KEY "SimNames" // do not remove the following line. // it is used by the the ofono-setup script when creating new accounts #define SIM_DEFAULT_NAME C::gettext("SIM %1") DisplayNameSettings::DisplayNameSettings(QObject *parent) : QObject(parent) { connect(TelepathyHelper::instance(), SIGNAL(accountsChanged()), SLOT(onAccountsChanged())); connect(GreeterContacts::instance(), SIGNAL(phoneSettingsChanged(QString)), SLOT(onSettingsChanged(QString))); QVariantMap newSimNames; QVariantMap values = GreeterContacts::instance()->simNames(); // if there are no sim names at this point, we have to fallback to the default names. // it means the migration script did not find anything on gsettings to be migrated, // so this is likely to be a first fresh boot if (values.isEmpty()) { int index = 1; Q_FOREACH(AccountEntry *account, TelepathyHelper::instance()->phoneAccounts()) { QString modemObjName = account->account()->parameters().value("modem-objpath").toString(); QString newSimName = QString(SIM_DEFAULT_NAME).arg(index++); account->setDisplayName(newSimName); newSimNames[modemObjName] = newSimName; } if (!newSimNames.isEmpty()) { GreeterContacts::instance()->setSimNames(newSimNames); } } // force update during startup onSettingsChanged(DUAL_SIM_NAMES_KEY); } void DisplayNameSettings::onSettingsChanged(const QString &key) { if (key == DUAL_SIM_NAMES_KEY) { QVariantMap values = GreeterContacts::instance()->simNames(); for(QVariantMap::const_iterator iter = values.begin(); iter != values.end(); ++iter) { mAccountNames[iter.key()] = iter.value().toString(); } onAccountsChanged(); } } DisplayNameSettings *DisplayNameSettings::instance() { static DisplayNameSettings *self = new DisplayNameSettings(); return self; } void DisplayNameSettings::onAccountsChanged() { Q_FOREACH(AccountEntry *account, TelepathyHelper::instance()->phoneAccounts()) { QString modemObjName = account->account()->parameters().value("modem-objpath").toString(); if (mAccountNames.contains(modemObjName) && account->displayName() != mAccountNames[modemObjName]) { account->setDisplayName(mAccountNames[modemObjName]); } } } telephony-service-0.5.3/indicator/displaynamesettings.h000066400000000000000000000022651455543255600234230ustar00rootroot00000000000000/* * Copyright (C) 2016 Canonical, Ltd. * * Authors: * Gustavo Pichorim Boiko * * This file is part of telephony-service. * * telephony-service is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; version 3. * * telephony-service 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 . */ #ifndef DISPLAYNAMESETTINGS_H #define DISPLAYNAMESETTINGS_H #include #include class DisplayNameSettings : public QObject { Q_OBJECT public: static DisplayNameSettings *instance(); private Q_SLOTS: void onAccountsChanged(); void onSettingsChanged(const QString &key); private: explicit DisplayNameSettings(QObject *parent = 0); QMap mAccountNames; }; #endif // DISPLAYNAMESETTINGS_H telephony-service-0.5.3/indicator/icons/000077500000000000000000000000001455543255600202715ustar00rootroot00000000000000telephony-service-0.5.3/indicator/icons/CMakeLists.txt000066400000000000000000000003631455543255600230330ustar00rootroot00000000000000set (icon-theme Humanity) set(icons notification-group-call.svg notification-unavailable-image-call.svg notification-unknown-call.svg ) install(FILES ${icons} DESTINATION share/notify-osd/icons/${icon-theme}/scalable/status) telephony-service-0.5.3/indicator/icons/notification-group-call.svg000066400000000000000000000253311455543255600255470ustar00rootroot00000000000000 telephony-service-0.5.3/indicator/icons/notification-unavailable-image-call.svg000066400000000000000000000121211455543255600277470ustar00rootroot00000000000000 telephony-service-0.5.3/indicator/icons/notification-unknown-call.svg000066400000000000000000000121021455543255600261020ustar00rootroot00000000000000 telephony-service-0.5.3/indicator/indicatordbus.cpp000066400000000000000000000033041455543255600225140ustar00rootroot00000000000000/* * Copyright (C) 2012-2016 Canonical, Ltd. * * Authors: * Ugo Riboni * Tiago Salem Herrmann * Gustavo Pichorim Boiko * * This file is part of telephony-service. * * telephony-service is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; version 3. * * telephony-service 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 . */ #include "indicatordbus.h" #include "indicatoradaptor.h" #include "messagingmenu.h" // Qt #include static const char* DBUS_SERVICE = "com.lomiri.TelephonyServiceIndicator"; static const char* DBUS_OBJECT_PATH = "/com/lomiri/TelephonyServiceIndicator"; IndicatorDBus::IndicatorDBus(QObject* parent) : QObject(parent) { } IndicatorDBus::~IndicatorDBus() { } bool IndicatorDBus::connectToBus() { new TelephonyServiceIndicatorAdaptor(this); QDBusConnection::sessionBus().registerObject(DBUS_OBJECT_PATH, this); return QDBusConnection::sessionBus().registerService(DBUS_SERVICE); } void IndicatorDBus::ClearNotifications() { Q_EMIT clearNotificationsRequested(); } void IndicatorDBus::ClearCallNotification(const QString &targetId, const QString &accountId) { MessagingMenu::instance()->removeCall(targetId, accountId); } telephony-service-0.5.3/indicator/indicatordbus.h000066400000000000000000000026501455543255600221640ustar00rootroot00000000000000/* * Copyright (C) 2012-2015 Canonical, Ltd. * * Authors: * Ugo Riboni * Tiago Salem Herrmann * Gustavo Pichorim Boiko * * This file is part of telephony-service. * * telephony-service is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; version 3. * * telephony-service 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 . */ #ifndef INDICATORDBUS_H #define INDICATORDBUS_H #include #include #include "chatmanager.h" /** * DBus interface for the phone approver */ class IndicatorDBus : public QObject, protected QDBusContext { Q_OBJECT public: IndicatorDBus(QObject* parent=0); ~IndicatorDBus(); bool connectToBus(); public Q_SLOTS: Q_NOREPLY void ClearNotifications(); Q_NOREPLY void ClearCallNotification(const QString &targetId, const QString &accountId); Q_SIGNALS: void clearNotificationsRequested(); }; #endif // INDICATORDBUS_H telephony-service-0.5.3/indicator/main.cpp000066400000000000000000000074101455543255600206100ustar00rootroot00000000000000/* * Copyright (C) 2012-2013 Canonical, Ltd. * * Authors: * Tiago Salem Herrmann * Gustavo Pichorim Boiko * * This file is part of telephony-service. * * telephony-service is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; version 3. * * telephony-service 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 . */ #include #include "applicationutils.h" #include "callchannelobserver.h" #include "displaynamesettings.h" #include "indicatordbus.h" #include "metrics.h" #include "telepathyhelper.h" #include "textchannelobserver.h" #include "voicemailindicator.h" #include "ussdindicator.h" #include "authhandler.h" #include #include #include #include #include namespace C { #include } int main(int argc, char **argv) { QCoreApplication app(argc, argv); QCoreApplication::setApplicationName("telephony-service-indicator"); C::bindtextdomain( "telephony-service", "/usr/share/locale" ); C::textdomain("telephony-service"); notify_init(C::gettext("Telephony Service Indicator")); Tp::registerTypes(); // check if there is already an instance of the indicator running if (ApplicationUtils::checkApplicationRunning(TP_QT_IFACE_CLIENT + ".TelephonyServiceIndicator")) { qDebug() << "Found another instance of the indicator. Quitting."; return 1; } // we don't need to call anything on the indicator, it will work by itself // make sure we create the voicemail indicator before the telepathy helper VoiceMailIndicator voiceMailIndicator; Q_UNUSED(voiceMailIndicator); // create the dbus object and connect its signals USSDIndicator ussdIndicator; AuthHandler authHandler; IndicatorDBus dbus; QObject::connect(&dbus, SIGNAL(clearNotificationsRequested()), &ussdIndicator, SLOT(clear())); QObject::connect(&dbus, SIGNAL(clearNotificationsRequested()), &authHandler, SLOT(clear())); // register the observer QObject::connect(TelepathyHelper::instance(), &TelepathyHelper::setupReady, [&]() { TelepathyHelper::instance()->registerChannelObserver("TelephonyServiceIndicator"); // Connect the textObserver and the callObserver to the channel observer in TelepathyHelper CallChannelObserver *callObserver = new CallChannelObserver(); TextChannelObserver *textObserver = new TextChannelObserver(); QObject::connect(TelepathyHelper::instance()->channelObserver(), SIGNAL(textChannelAvailable(Tp::TextChannelPtr)), textObserver, SLOT(onTextChannelAvailable(Tp::TextChannelPtr))); QObject::connect(TelepathyHelper::instance()->channelObserver(), SIGNAL(callChannelAvailable(Tp::CallChannelPtr)), callObserver, SLOT(onCallChannelAvailable(Tp::CallChannelPtr))); QObject::connect(&dbus, SIGNAL(clearNotificationsRequested()), textObserver, SLOT(clearNotifications())); // instanciate the display name settings singleton, it will work by itself DisplayNameSettings::instance(); }); // instanciate the metrics helper Metrics::instance(); dbus.connectToBus(); return app.exec(); } telephony-service-0.5.3/indicator/messagingmenu.cpp000066400000000000000000000674301455543255600225360ustar00rootroot00000000000000/* * Copyright (C) 2012-2017 Canonical, Ltd. * * Authors: * Gustavo Pichorim Boiko * Tiago Salem Herrmann * * This file is part of telephony-service. * * telephony-service is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; version 3. * * telephony-service 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 . */ #include "applicationutils.h" #include "callmanager.h" #include "config.h" #include "contactutils.h" #include "phoneutils.h" #include "messagingmenu.h" #include "telepathyhelper.h" #include "accountentry.h" #include "ofonoaccountentry.h" #include #include #include #include #include #include #include #include #include #include namespace C { #include } #define SOURCE_ID "telephony-service-indicator" QTCONTACTS_USE_NAMESPACE void openMessage(NotificationData *notificationData) { if (notificationData != NULL) { // launch the messaging-app to show the message QStringList recipients; QString accountId = notificationData->accountId; QStringList extraOptions; if (notificationData->targetType == Tp::HandleTypeRoom) { extraOptions << "chatType=" + QString::number((uint)Tp::HandleTypeRoom); extraOptions << "threadId=" + QUrl::toPercentEncoding(notificationData->targetId); } else { if (!notificationData->senderId.isEmpty()) { recipients << notificationData->senderId; } recipients << notificationData->participantIds; recipients.removeDuplicates(); } QString url(QString("message:///%1").arg(QString(QUrl::toPercentEncoding(recipients.join(";"))))); url += QString("?accountId=%1&").arg(QString(QUrl::toPercentEncoding(accountId))); url += extraOptions.join("&"); ApplicationUtils::openUrl(url); } } MessagingMenu::MessagingMenu(QObject *parent) : QObject(parent) { GIcon *icon = g_icon_new_for_string("telephony-service-indicator", NULL); mMessagesApp = messaging_menu_app_new("telephony-service-sms.desktop"); messaging_menu_app_register(mMessagesApp); messaging_menu_app_append_source(mMessagesApp, SOURCE_ID, icon, C::gettext("Telephony Service")); mCallsApp = messaging_menu_app_new("telephony-service-call.desktop"); messaging_menu_app_register(mCallsApp); messaging_menu_app_append_source(mCallsApp, SOURCE_ID, icon, C::gettext("Telephony Service")); g_object_unref(icon); } void MessagingMenu::addFlashMessage(NotificationData notificationData) { QUrl iconPath = QUrl::fromLocalFile(telephonyServiceDir() + "/assets/avatar-default@18.png"); QString contactAlias = notificationData.senderId; GFile *file = g_file_new_for_uri(iconPath.toString().toUtf8().data()); GIcon *icon = g_file_icon_new(file); MessagingMenuMessage *message = messaging_menu_message_new(notificationData.encodedEventId.toUtf8().data(), icon, "", NULL, notificationData.messageText.toUtf8().data(), notificationData.timestamp.toMSecsSinceEpoch() * 1000); // the value is expected to be in microseconds /* FIXME: uncomment when messaging-menu support two regular buttons messaging_menu_message_add_action(message, "saveFlashMessage", C::gettext("Save"), NULL, NULL ); messaging_menu_message_add_action(message, "dismiss", C::gettext("Dismiss"), NULL, NULL ); */ g_signal_connect(message, "activate", G_CALLBACK(&MessagingMenu::flashMessageActivateCallback), this); mMessages[notificationData.encodedEventId] = notificationData; messaging_menu_app_append_message(mMessagesApp, message, SOURCE_ID, true); g_object_unref(file); g_object_unref(icon); g_object_unref(message); } void MessagingMenu::addNotification(NotificationData notificationData) { AccountEntry *account = TelepathyHelper::instance()->accountForId(notificationData.accountId); if (!account) { return; } mMessages[notificationData.encodedEventId] = notificationData; GFile *file = NULL; GIcon *icon = NULL; file = g_file_new_for_uri(notificationData.icon.toUtf8().data()); icon = g_file_icon_new(file); MessagingMenuMessage *message = messaging_menu_message_new(notificationData.encodedEventId.toUtf8().data(), icon, notificationData.notificationTitle.toUtf8().data(), "", notificationData.messageText.toUtf8().data(), notificationData.timestamp.toMSecsSinceEpoch() * 1000); // the value is expected to be in microseconds messaging_menu_message_add_action(message, "quickReply", C::gettext("Send"), // label G_VARIANT_TYPE("s"), NULL // predefined values ); g_signal_connect(message, "activate", G_CALLBACK(&MessagingMenu::messageActivateCallback), this); messaging_menu_app_append_message(mMessagesApp, message, SOURCE_ID, true); if (file) { g_object_unref(file); } if (icon) { g_object_unref(icon); } if (message) { g_object_unref(message); } } void MessagingMenu::addCellBroadcastNotification(NotificationData notificationData) { AccountEntry *account = TelepathyHelper::instance()->accountForId(notificationData.accountId); if (!account) { return; } mMessages[notificationData.encodedEventId] = notificationData; GFile *file = NULL; GIcon *icon = NULL; file = g_file_new_for_uri(notificationData.icon.toUtf8().data()); icon = g_file_icon_new(file); MessagingMenuMessage *message = messaging_menu_message_new(notificationData.encodedEventId.toUtf8().data(), icon, notificationData.notificationTitle.toUtf8().data(), "", notificationData.messageText.toUtf8().data(), notificationData.timestamp.toMSecsSinceEpoch() * 1000); // the value is expected to be in microseconds g_signal_connect(message, "activate", G_CALLBACK(&MessagingMenu::messageActivateCallback), this); messaging_menu_app_append_message(mMessagesApp, message, SOURCE_ID, true); if (file) { g_object_unref(file); } if (icon) { g_object_unref(icon); } if (message) { g_object_unref(message); } } void MessagingMenu::addMessage(NotificationData notificationData) { // try to get a contact for that phone number QUrl iconPath = QUrl::fromLocalFile(telephonyServiceDir() + "/assets/avatar-default@18.png"); AccountEntry *account = TelepathyHelper::instance()->accountForId(notificationData.accountId); if (!account) { return; } // FIXME: for accounts not based on phone number, we need to match other fields. // Right now we don't even bother trying to match contact data // try to match the contact info QContactFetchRequest *request = new QContactFetchRequest(this); request->setFilter(QContactPhoneNumber::match(notificationData.senderId)); mMessages[notificationData.encodedEventId] = notificationData; // place the messaging-menu item only after the contact fetch request is finished, as we can´t simply update QObject::connect(request, &QContactAbstractRequest::stateChanged, [request, iconPath, notificationData, this](QContactAbstractRequest::State newState) { GFile *file = NULL; GIcon *icon = NULL; // only process the results after the finished state is reached // also, if the ack happens before contacts service return the request we have to // simply skip this if (newState != QContactAbstractRequest::FinishedState || !mMessages.contains(notificationData.encodedEventId)) { return; } QString displayLabel; QString subTitle; QUrl avatar; if (notificationData.senderId == OFONO_UNKNOWN_NUMBER) { displayLabel = C::gettext("Unknown number"); } else if (request->contacts().size() > 0) { QContact contact = request->contacts().at(0); displayLabel = ContactUtils::formatContactName(contact); avatar = contact.detail().imageUrl(); } if (displayLabel.isEmpty()) { displayLabel = notificationData.alias; } QString title; if (notificationData.targetType == Tp::HandleTypeRoom || notificationData.participantIds.size() > 1) { avatar = QUrl::fromLocalFile(telephonyServiceDir() + "/assets/contact-group.svg"); if (notificationData.targetType == Tp::HandleTypeRoom) { if (!notificationData.roomName.isEmpty()) { // TRANSLATORS : %1 is the group name and %2 is the recipient name displayLabel = QString::fromUtf8(C::gettext("Message to %1 from %2")).arg(notificationData.roomName).arg(displayLabel); } else { // TRANSLATORS : %1 is the recipient name displayLabel = QString::fromUtf8(C::gettext("Message to the group from %1")).arg(displayLabel); } } else { // TRANSLATORS : %1 is the recipient name displayLabel = QString::fromUtf8(C::gettext("Message to the group from %1")).arg(displayLabel); } } AccountEntry::addAccountLabel(notificationData.accountId, displayLabel); if (avatar.isEmpty()) { avatar = iconPath; } if (!icon) { file = g_file_new_for_uri(avatar.toString().toUtf8().data()); icon = g_file_icon_new(file); } qDebug() << "notify message received:" << notificationData.encodedEventId.toUtf8(); MessagingMenuMessage *message = messaging_menu_message_new(notificationData.encodedEventId.toUtf8().data(), icon, displayLabel.toUtf8().data(), subTitle.toUtf8().data(), notificationData.messageText.toUtf8().data(), notificationData.timestamp.toMSecsSinceEpoch() * 1000); // the value is expected to be in microseconds messaging_menu_message_add_action(message, "quickReply", C::gettext("Send"), // label G_VARIANT_TYPE("s"), NULL // predefined values ); g_signal_connect(message, "activate", G_CALLBACK(&MessagingMenu::messageActivateCallback), this); messaging_menu_app_append_message(mMessagesApp, message, SOURCE_ID, true); if (file) { g_object_unref(file); } g_object_unref(icon); g_object_unref(message); }); // FIXME: For accounts not based on phone numbers, don't try to match contacts for now if (account->addressableVCardFields().contains("tel")) { request->setManager(ContactUtils::sharedManager()); request->start(); } else { // just emit the signal to pretend we did a contact search Q_EMIT request->stateChanged(QContactAbstractRequest::FinishedState); } } void MessagingMenu::removeMessage(const QString &messageId) { if (!mMessages.contains(messageId)) { return; } messaging_menu_app_remove_message_by_id(mMessagesApp, messageId.toUtf8().data()); mMessages.remove(messageId); } void MessagingMenu::addCallToMessagingMenu(Call call, const QString &text, bool supportsTextReply) { qDebug() << __PRETTY_FUNCTION__; GVariant *messages = NULL; GFile *file = g_file_new_for_uri(call.contactIcon.toString().toUtf8().data()); GIcon *icon = g_file_icon_new(file); MessagingMenuMessage *message = messaging_menu_message_new(call.targetId.toUtf8().data(), icon, call.contactAlias.toUtf8().data(), NULL, text.toUtf8().data(), call.timestamp.toMSecsSinceEpoch() * 1000); // the value is expected to be in microseconds call.messageId = messaging_menu_message_get_id(message); if (supportsTextReply && call.targetId != OFONO_PRIVATE_NUMBER && call.targetId != OFONO_UNKNOWN_NUMBER) { messaging_menu_message_add_action(message, "callBack", C::gettext("Call back"), // label NULL, // argument type NULL // predefined values ); const char *predefinedMessages[] = { C::gettext("Missed your call \342\200\224 can you call me now?"), C::gettext("Running late. On my way."), C::gettext("Busy at the moment. Will call you later."), C::gettext("I am 20 minutes late."), C::gettext("Still busy. Will call you later."), 0 }; messages = g_variant_new_strv(predefinedMessages, -1); messaging_menu_message_add_action(message, "replyWithMessage", C::gettext("Send"), // label G_VARIANT_TYPE("s"), messages // predefined values ); } g_signal_connect(message, "activate", G_CALLBACK(&MessagingMenu::callsActivateCallback), this); messaging_menu_app_append_message(mCallsApp, message, SOURCE_ID, true); mCalls.append(call); g_object_unref(file); g_object_unref(icon); g_object_unref(message); } void MessagingMenu::addCall(const QString &targetId, const QString &accountId, const QDateTime ×tamp) { qDebug() << __PRETTY_FUNCTION__; Call call; bool found = false; AccountEntry *account = TelepathyHelper::instance()->accountForId(accountId); if (!account) { return; } Q_FOREACH(Call callMessage, mCalls) { // FIXME: we need a better strategy to group calls from different accounts if (account->compareIds(callMessage.targetId, targetId) && callMessage.accountId == accountId) { call = callMessage; found = true; mCalls.removeOne(callMessage); // remove the previous entry and add a new one increasing the missed call count messaging_menu_app_remove_message_by_id(mCallsApp, callMessage.messageId.toUtf8().data()); break; } } if (!found) { call.contactAlias = targetId; call.accountId = accountId; call.contactIcon = QUrl::fromLocalFile(telephonyServiceDir() + "/assets/avatar-default@18.png"); call.targetId = targetId; call.count = 0; } call.count++; call.timestamp = timestamp; QString text; text = QString::fromUtf8(C::ngettext("%1 missed call", "%1 missed calls", call.count)).arg(call.count); AccountEntry::addAccountLabel(accountId, text); if (targetId.startsWith(OFONO_PRIVATE_NUMBER)) { call.contactAlias = C::gettext("Private number"); addCallToMessagingMenu(call, text); return; } else if (targetId.startsWith(OFONO_UNKNOWN_NUMBER)) { call.contactAlias = C::gettext("Unknown number"); addCallToMessagingMenu(call, text); return; } // FIXME: we need to match other fields for accounts not based on phone numbers. // For now we are not even trying to match contact data // try to match the contact info QContactFetchRequest *request = new QContactFetchRequest(this); request->setFilter(QContactPhoneNumber::match(targetId)); // place the messaging-menu item only after the contact fetch request is finished, as we can´t simply update QObject::connect(request, &QContactAbstractRequest::stateChanged, [=]() { // only process the results after the finished state is reached if (request->state() != QContactAbstractRequest::FinishedState) { return; } Call newCall = call; if (request->contacts().size() > 0) { QContact contact = request->contacts().at(0); QString displayLabel = ContactUtils::formatContactName(contact); QUrl avatar = contact.detail().imageUrl(); if (!displayLabel.isEmpty()) { newCall.contactAlias = displayLabel; } if (!avatar.isEmpty()) { newCall.contactIcon = avatar; } } addCallToMessagingMenu(newCall, text, account->protocolInfo()->features() & Protocol::TextChats); }); request->setManager(ContactUtils::sharedManager()); request->start(); } void MessagingMenu::removeCall(const QString &targetId, const QString &accountId) { Call call; bool found = false; AccountEntry *account = TelepathyHelper::instance()->accountForId(accountId); if (!account) { qWarning() << "Account not found for id" << accountId; return; } Q_FOREACH(Call callMessage, mCalls) { // FIXME: we need a better strategy to group calls from different accounts if (account->compareIds(callMessage.targetId, targetId) && callMessage.accountId == accountId) { call = callMessage; found = true; mCalls.removeOne(callMessage); // remove the previous entry and add a new one increasing the missed call count messaging_menu_app_remove_message_by_id(mCallsApp, callMessage.messageId.toUtf8().data()); break; } } } void MessagingMenu::showVoicemailEntry(AccountEntry *account) { OfonoAccountEntry *ofonoAccount = qobject_cast(account); if (!ofonoAccount) { return; } messaging_menu_app_remove_message_by_id(mCallsApp, account->accountId().toUtf8().data()); mVoicemailIds.removeAll(account->accountId()); QString messageBody = C::gettext("Voicemail messages"); uint count = ofonoAccount->voicemailCount(); if (count != 0) { messageBody = QString::fromUtf8(C::ngettext("%1 voicemail message", "%1 voicemail messages", count)).arg(count); } GIcon *icon = g_themed_icon_new("indicator-call"); QString accountLabel(C::gettext("Voicemail")); AccountEntry::addAccountLabel(account->accountId(), accountLabel); MessagingMenuMessage *message = messaging_menu_message_new(account->accountId().toUtf8().data(), icon, accountLabel.toUtf8().data(), NULL, messageBody.toUtf8().data(), QDateTime::currentDateTime().toMSecsSinceEpoch() * 1000); // the value is expected to be in microseconds g_signal_connect(message, "activate", G_CALLBACK(&MessagingMenu::callsActivateCallback), this); messaging_menu_app_append_message(mCallsApp, message, SOURCE_ID, true); mVoicemailIds.append(ofonoAccount->accountId()); g_object_unref(icon); g_object_unref(message); } void MessagingMenu::hideVoicemailEntry(AccountEntry *account) { mVoicemailIds.removeAll(account->accountId()); messaging_menu_app_remove_message_by_id(mCallsApp, account->accountId().toUtf8().data()); } void MessagingMenu::messageActivateCallback(MessagingMenuMessage *message, const char *actionId, GVariant *param, MessagingMenu *instance) { QString action(actionId); QString messageId(messaging_menu_message_get_id(message)); QString text(g_variant_get_string(param, NULL)); if (action == "quickReply") { QMetaObject::invokeMethod(instance, "sendMessageReply", Q_ARG(QString, messageId), Q_ARG(QString, text)); } else if (action.isEmpty()) { QMetaObject::invokeMethod(instance, "showMessage", Q_ARG(QString, messageId)); } } void MessagingMenu::flashMessageActivateCallback(MessagingMenuMessage *message, const char *actionId, GVariant *param, MessagingMenu *instance) { QString action(actionId); QString messageId(messaging_menu_message_get_id(message)); if (action == "saveFlashMessage") { QMetaObject::invokeMethod(instance, "saveFlashMessage", Q_ARG(QString, messageId)); } } void MessagingMenu::callsActivateCallback(MessagingMenuMessage *message, const char *actionId, GVariant *param, MessagingMenu *instance) { QString action(actionId); QString messageId(messaging_menu_message_get_id(message)); if (instance->mVoicemailIds.contains(messageId)) { QMetaObject::invokeMethod(instance, "callVoicemail", Q_ARG(QString, messageId)); return; } if (action == "callBack" || action.isEmpty()) { QMetaObject::invokeMethod(instance, "callBack", Q_ARG(QString, messageId)); } else if (action == "replyWithMessage") { QString text(g_variant_get_string(param, NULL)); QMetaObject::invokeMethod(instance, "replyWithMessage", Q_ARG(QString, messageId), Q_ARG(QString, text)); } } void MessagingMenu::sendMessageReply(const QString &messageId, const QString &reply) { NotificationData notificationData = mMessages[messageId]; QStringList recipients; if (!notificationData.senderId.isEmpty()) { notificationData.participantIds << notificationData.senderId; } notificationData.participantIds.removeDuplicates(); notificationData.messageReply = reply; notificationData.encodedEventId = messageId; Q_EMIT replyReceived(notificationData); Q_EMIT messageRead(notificationData); } void MessagingMenu::saveFlashMessage(const QString &messageId) { NotificationData notificationData = mMessages[messageId]; AccountEntry *account = TelepathyHelper::instance()->accountForId(notificationData.accountId); bool phoneNumberBased = account && (account->type() == AccountEntry::PhoneAccount); History::Thread thread = History::Manager::instance()->threadForParticipants(notificationData.accountId, History::EventTypeText, QStringList() << notificationData.senderId, phoneNumberBased ? History::MatchPhoneNumber : History::MatchCaseSensitive, true); History::TextEvent textEvent(notificationData.accountId, thread.threadId(), QString(QByteArray::fromHex(notificationData.encodedEventId.toUtf8())), notificationData.senderId, notificationData.timestamp, false, notificationData.messageText, History::MessageTypeText); History::Events events; events.append(textEvent); History::Manager::instance()->writeEvents(events); } void MessagingMenu::showMessage(const QString &messageId) { NotificationData notificationData = mMessages[messageId]; openMessage(¬ificationData); } void MessagingMenu::callBack(const QString &messageId) { Call call = callFromMessageId(messageId); AccountEntry *account = TelepathyHelper::instance()->accountForId(call.accountId); if (!account) { qWarning() << "Could not find the account originating the call"; } qDebug() << "TelephonyService/MessagingMenu: Calling back" << call.targetId; // FIXME: support accounts not based on phone numbers // FIXME: hardcoding SIP protocol as using phone numbers, at some point it would be better to change the CM to report that // another idea is to use protocol-aware fields, like sip:// for example if (account->addressableVCardFields().contains("tel") || account->protocolInfo()->name() == "sip") { ApplicationUtils::openUrl(QString("tel:///%1").arg(QString(QUrl::toPercentEncoding(call.targetId)))); } } void MessagingMenu::replyWithMessage(const QString &messageId, const QString &reply) { Call call = callFromMessageId(messageId); qDebug() << "TelephonyService/MessagingMenu: Replying to call" << call.targetId << "with text" << reply; NotificationData data; data.participantIds << call.targetId; data.accountId = call.accountId; data.messageReply = reply; Q_EMIT replyReceived(data); } void MessagingMenu::callVoicemail(const QString &messageId) { QString voicemailNumber; // get the corresponding account OfonoAccountEntry *ofonoAccount = qobject_cast(TelepathyHelper::instance()->accountForId(messageId)); if (ofonoAccount) { voicemailNumber = ofonoAccount->voicemailNumber(); } qDebug() << "TelephonyService/MessagingMenu: Calling voicemail for messageId" << messageId; if (!voicemailNumber.isEmpty()) { // FIXME: we need to specify which account to use ApplicationUtils::openUrl(QUrl(QString("tel:///%1").arg(voicemailNumber))); } } Call MessagingMenu::callFromMessageId(const QString &messageId) { Q_FOREACH(const Call &call, mCalls) { if (call.messageId == messageId) { return call; } } return Call(); } MessagingMenu *MessagingMenu::instance() { static MessagingMenu *menu = new MessagingMenu(); return menu; } MessagingMenu::~MessagingMenu() { g_object_unref(mMessagesApp); g_object_unref(mCallsApp); } telephony-service-0.5.3/indicator/messagingmenu.h000066400000000000000000000075231455543255600222000ustar00rootroot00000000000000/* * Copyright (C) 2012-2017 Canonical, Ltd. * * Authors: * Gustavo Pichorim Boiko * Tiago Salem Herrmann * * This file is part of telephony-service. * * telephony-service is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; version 3. * * telephony-service 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 . */ #ifndef MESSAGINGMENU_H #define MESSAGINGMENU_H #include #include #include #include #include "accountentry.h" #include class Call { public: Call() : count(0) { } QString targetId; int count; QString contactAlias; QUrl contactIcon; QString messageId; QString accountId; QDateTime timestamp; bool operator==(const Call &other) { return other.targetId == targetId; } }; class TextChannelObserver; class NotificationData { public: NotificationData() : targetType(0), observer(NULL), notificationList(NULL) {} QString accountId; QString senderId; QString targetId; uint targetType; QStringList participantIds; QDateTime timestamp; QString messageText; QString encodedEventId; QString alias; QString roomName; QString icon; QString notificationTitle; QString messageReply; TextChannelObserver *observer; QMap *notificationList; }; class MessagingMenu : public QObject { Q_OBJECT public: static MessagingMenu *instance(); virtual ~MessagingMenu(); void addMessage(NotificationData notificationData); void addFlashMessage(NotificationData notificationData); void removeMessage(const QString &messageId); void addNotification(NotificationData notificationData); void addCellBroadcastNotification(NotificationData notificationData); void addCall(const QString &targetId, const QString &accountId, const QDateTime ×tamp); void removeCall(const QString &targetId, const QString &accountId); void addCallToMessagingMenu(Call call, const QString &text, bool supportsTextReply = true); static void flashMessageActivateCallback(MessagingMenuMessage *message, const char *actionId, GVariant *param, MessagingMenu *instance); static void messageActivateCallback(MessagingMenuMessage *message, const char *actionId, GVariant *param, MessagingMenu *instance); static void callsActivateCallback(MessagingMenuMessage *message, const char *actionId, GVariant *param, MessagingMenu *instance); void showVoicemailEntry(AccountEntry *account); void hideVoicemailEntry(AccountEntry *account); Q_SIGNALS: void replyReceived(NotificationData notificationData); void messageRead(NotificationData notificationData); private Q_SLOTS: void sendMessageReply(const QString &messageId, const QString &reply); void showMessage(const QString &messageId); void callBack(const QString &messageId); void replyWithMessage(const QString &messageId, const QString &reply); void callVoicemail(const QString &messageId); void saveFlashMessage(const QString &messageId); Call callFromMessageId(const QString &messageId); private: explicit MessagingMenu(QObject *parent = 0); MessagingMenuApp *mCallsApp; MessagingMenuApp *mMessagesApp; QMap mMessages; QList mCalls; QStringList mVoicemailIds; int mVoicemailCount; }; #endif // MESSAGINGMENU_H telephony-service-0.5.3/indicator/metrics.cpp000066400000000000000000000071661455543255600213420ustar00rootroot00000000000000/* * Copyright (C) 2013 Canonical, Ltd. * * Authors: * Gustavo Pichorim Boiko * Ugo Riboni * * This file is part of telephony-service. * * telephony-service is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; version 3. * * telephony-service 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 . */ #include "metrics.h" #include const QString APP_ID = QString("telephony-service"); const QString MESSAGES_RECEIVED_STATISTICS_ID = QString("text-messages-received"); const QString MESSAGES_SENT_STATISTICS_ID = QString("text-messages-sent"); const QString DIALER_INCOMING_STATISTICS_ID = QString("dialer-calls-incoming"); const QString DIALER_OUTGOING_STATISTICS_ID = QString("dialer-calls-outgoing"); const QString DIALER_CALL_DURATION_STATISTICS_ID = QString("dialer-calls-duration"); #define GettextMarkExtraction(x) x using namespace UserMetricsInput; Metrics::Metrics(QObject *parent) : QObject(parent) { try { mMetricManager.reset(MetricManager::getInstance()); mMetrics[SentMessages] = mMetricManager->add(MetricParameters(MESSAGES_SENT_STATISTICS_ID).formatString(GettextMarkExtraction("%1 text messages sent today")) .emptyDataString(GettextMarkExtraction("No text messages sent today")).textDomain(APP_ID).minimum(0.0)); mMetrics[ReceivedMessages] = mMetricManager->add(MetricParameters(MESSAGES_RECEIVED_STATISTICS_ID).formatString(GettextMarkExtraction("%1 text messages received today")) .emptyDataString(GettextMarkExtraction("No text messages received today")).textDomain(APP_ID).minimum(0.0)); mMetrics[IncomingCalls] = mMetricManager->add(MetricParameters(DIALER_INCOMING_STATISTICS_ID).formatString(GettextMarkExtraction("%1 calls received today")) .emptyDataString(GettextMarkExtraction("No calls received today")).textDomain(APP_ID).minimum(0.0)); mMetrics[OutgoingCalls] = mMetricManager->add(MetricParameters(DIALER_OUTGOING_STATISTICS_ID).formatString(GettextMarkExtraction("%1 calls made today")) .emptyDataString(GettextMarkExtraction("No calls made today")).textDomain(APP_ID).minimum(0.0)); mMetrics[CallDurations] = mMetricManager->add(MetricParameters(DIALER_CALL_DURATION_STATISTICS_ID).formatString(GettextMarkExtraction("Spent %1 minutes in calls today")) .emptyDataString(GettextMarkExtraction("No calls made today")).textDomain(APP_ID).minimum(0.0)); } catch(std::exception &e) { qWarning() << "Error connecting to metrics service:" << e.what(); } } Metrics *Metrics::instance() { static Metrics *self = new Metrics(); return self; } void Metrics::increment(Metrics::MetricType metric, double amount) { MetricPtr metricPtr; metricPtr = mMetrics[metric]; if (!metricPtr) { return; } try { metricPtr->increment(amount); } catch(std::exception &e) { qWarning() << "Error incrementing telephony metric:" << e.what(); } } telephony-service-0.5.3/indicator/metrics.h000066400000000000000000000026451455543255600210040ustar00rootroot00000000000000/* * Copyright (C) 2013 Canonical, Ltd. * * Authors: * Gustavo Pichorim Boiko * Ugo Riboni * * This file is part of telephony-service. * * telephony-service is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; version 3. * * telephony-service 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 . */ #ifndef METRICS_H #define METRICS_H #include #include #include using namespace UserMetricsInput; class Metrics : public QObject { Q_OBJECT public: enum MetricType { SentMessages, ReceivedMessages, IncomingCalls, OutgoingCalls, CallDurations }; static Metrics *instance(); void increment(MetricType metric, double amount = 1.0f); private: explicit Metrics(QObject *parent = 0); QMap mMetrics; UserMetricsInput::MetricManagerPtr mMetricManager; }; #endif // METRICS_H telephony-service-0.5.3/indicator/notificationmenu.cpp000066400000000000000000000110341455543255600232340ustar00rootroot00000000000000/* * Copyright (C) 2013-2015 Canonical, Ltd. * * This program is free software: you can redistribute it and/or modify it * under the terms of the GNU General Public License version 3, as published * by the Free Software Foundation. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranties of * MERCHANTABILITY, SATISFACTORY QUALITY, 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 . * * Author: Pete Woods * Author: Tiago Salem Herrmann */ #include "notificationmenu.h" #include #include #include static const QString ACTION_PATH("/action/%1"); static const QString MENU_PATH("/menu/%1"); class NotificationMenuPriv { public: NotificationMenuPriv() : m_connection(g_bus_get_sync(G_BUS_TYPE_SESSION, NULL, NULL)), m_exportedActionGroupId(0), m_exportedMenuModelId(0) { } ~NotificationMenuPriv() { g_object_unref(m_connection); } static void responseChangedCallback(GAction *responseAction, GVariant *variant, gpointer userData) { NotificationMenuPriv *self(reinterpret_cast(userData)); self->m_response = QString::fromUtf8(g_variant_get_string(variant, 0)); } GDBusConnection *m_connection; QString m_id; QString m_busName; QString m_actionPath; QString m_menuPath; unsigned int m_exportedActionGroupId; unsigned int m_exportedMenuModelId; QString m_response; }; NotificationMenu::NotificationMenu(const QString &id, bool needsResponse, bool password) : p(new NotificationMenuPriv()) { int exportrev; p->m_id = id; p->m_busName = QString::fromUtf8( g_dbus_connection_get_unique_name(p->m_connection)); // menu GMenu *menu(g_menu_new()); GMenuItem *item(g_menu_item_new("", QString("notifications.%1").arg(id).toLatin1().data())); if (needsResponse) { g_menu_item_set_attribute_value(item, "x-canonical-type", g_variant_new_string("com.canonical.snapdecision.textfield")); g_menu_item_set_attribute_value(item, "x-echo-mode-password", g_variant_new_boolean(password)); g_menu_append_item(menu, item); } // actions GActionGroup *actions(G_ACTION_GROUP(g_simple_action_group_new())); GAction *action(G_ACTION( g_simple_action_new_stateful(id.toLatin1().data(), G_VARIANT_TYPE_STRING, g_variant_new_string("")))); g_signal_connect(G_OBJECT(action), "change-state", G_CALLBACK(NotificationMenuPriv::responseChangedCallback), reinterpret_cast(p.data())); g_action_map_add_action(G_ACTION_MAP(actions), action); /* Export the actions group. If we can't get a name, keep trying to use increasing numbers. There is possible races on fast import/exports. They're rare, but worth protecting against. */ exportrev = 0; do { exportrev++; p->m_actionPath = ACTION_PATH.arg(exportrev); p->m_exportedActionGroupId = g_dbus_connection_export_action_group( p->m_connection, p->m_actionPath.toUtf8().data(), actions, NULL); } while (p->m_exportedActionGroupId == 0 && exportrev < 128); /* Export the menu. If we can't get a name, keep trying to use increasing numbers. There is possible races on fast import/exports. They're rare, but worth protecting against. */ exportrev = 0; do { exportrev++; p->m_menuPath = MENU_PATH.arg(exportrev); p->m_exportedMenuModelId = g_dbus_connection_export_menu_model( p->m_connection, p->m_menuPath.toUtf8().data(), G_MENU_MODEL(menu), NULL); } while (p->m_exportedMenuModelId == 0 && exportrev < 128); /* Unref the objects as a reference is maintained by the fact that they're exported onto the bus. */ g_object_unref(menu); g_object_unref(item); g_object_unref(actions); g_object_unref(action); } NotificationMenu::~NotificationMenu() { g_dbus_connection_unexport_action_group(p->m_connection, p->m_exportedActionGroupId); g_dbus_connection_unexport_menu_model(p->m_connection, p->m_exportedMenuModelId); } const QString &NotificationMenu::id() const { return p->m_id; } const QString & NotificationMenu::busName() const { return p->m_busName; } const QString & NotificationMenu::response() const { return p->m_response; } const QString & NotificationMenu::actionPath() const { return p->m_actionPath; } const QString & NotificationMenu::menuPath() const { return p->m_menuPath; } void NotificationMenu::clearResponse() { p->m_response.clear(); } telephony-service-0.5.3/indicator/notificationmenu.h000066400000000000000000000024761455543255600227130ustar00rootroot00000000000000/* * Copyright (C) 2013-2015 Canonical, Ltd. * * This program is free software: you can redistribute it and/or modify it * under the terms of the GNU General Public License version 3, as published * by the Free Software Foundation. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranties of * MERCHANTABILITY, SATISFACTORY QUALITY, 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 . * * Author: Pete Woods * Author: Tiago Salem Herrmann */ #ifndef NOTIFICATIONMENU_H_ #define NOTIFICATIONMENU_H_ #include #include class NotificationMenuPriv; class NotificationMenu { public: NotificationMenu(const QString &id, bool needsResponse = false, bool password = false); virtual ~NotificationMenu(); const QString & id() const; const QString & busName() const; const QString & response() const; const QString & actionPath() const; const QString & menuPath() const; void clearResponse(); protected: QScopedPointer p; }; #endif /* NOTIFICATIONMENU_H_ */ org.freedesktop.Telepathy.Client.TelephonyServiceIndicator.service.in000066400000000000000000000003001455543255600344570ustar00rootroot00000000000000telephony-service-0.5.3/indicator[D-BUS Service] Name=org.freedesktop.Telepathy.Client.TelephonyServiceIndicator Exec=@CMAKE_INSTALL_FULL_BINDIR@/telephony-service-indicator SystemdService=telephony-service-indicator.service telephony-service-0.5.3/indicator/telephony-service-call.desktop.in000066400000000000000000000001761455543255600255400ustar00rootroot00000000000000[Desktop Entry] Type=Application Name=Phone Calls Exec=telephony-service-indicator Icon=telephony-service-call NoDisplay=true telephony-service-0.5.3/indicator/telephony-service-sms.desktop.in000066400000000000000000000001711455543255600254220ustar00rootroot00000000000000[Desktop Entry] Type=Application Name=SMS Exec=telephony-service-indicator Icon=telephony-service-message NoDisplay=true telephony-service-0.5.3/indicator/textchannelobserver.cpp000066400000000000000000001240221455543255600237500ustar00rootroot00000000000000/* * Copyright (C) 2012-2016 Canonical, Ltd. * * Authors: * Gustavo Pichorim Boiko * Tiago Salem Herrmann * * This file is part of telephony-service. * * telephony-service is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; version 3. * * telephony-service 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 . */ #include "applicationutils.h" #include "greetercontacts.h" #include "textchannelobserver.h" #include "messagingmenu.h" #include "metrics.h" #include "chatmanager.h" #include "callmanager.h" #include "include/cellbroadcast-types.h" #include "config.h" #include "contactutils.h" #include "ringtone.h" #include "telepathyhelper.h" #include "phoneutils.h" #include "accountentry.h" #include "ofonoaccountentry.h" #include #include #include #include #include #include #include #include #include #include #include #include #include namespace C { #include } // notification handling void openMessage(NotificationData *notificationData); void notification_closed(NotifyNotification *notification, QMap *map); void sim_selection_action(NotifyNotification* notification, char *action, gpointer data) { GError *error = NULL; QString accountId = action; NotificationData *notificationData = (NotificationData*) data; if (notificationData != NULL) { QStringList recipients; recipients << notificationData->participantIds; recipients.removeDuplicates(); notificationData->observer->sendMessage(*notificationData); } notify_notification_close(notification, &error); g_object_unref(notification); } void flash_notification_action(NotifyNotification* notification, char *action, gpointer data) { GError *error = NULL; if (action == QLatin1String("notification_save_action")) { NotificationData *notificationData = (NotificationData*) data; if (notificationData != NULL) { AccountEntry *account = TelepathyHelper::instance()->accountForId(notificationData->accountId); bool phoneNumberBased = account && account->addressableVCardFields().contains("tel"); QStringList recipients; recipients << notificationData->senderId << notificationData->participantIds; History::Thread thread = History::Manager::instance()->threadForParticipants(notificationData->accountId, History::EventTypeText, recipients, phoneNumberBased ? History::MatchPhoneNumber : History::MatchCaseSensitive, true); History::TextEvent textEvent(notificationData->accountId, thread.threadId(), QString(QByteArray::fromHex(notificationData->encodedEventId.toUtf8())), notificationData->senderId, notificationData->timestamp, false, notificationData->messageText, History::MessageTypeText); History::Events events; events.append(textEvent); History::Manager::instance()->writeEvents(events); } } notify_notification_close(notification, &error); g_object_unref(notification); } void notification_action(NotifyNotification* notification, char *action, gpointer data) { Q_UNUSED(notification); Q_UNUSED(action); NotificationData *notificationData = (NotificationData*) data; openMessage(notificationData); if (notification) { notification_closed(notification, notificationData->notificationList); g_object_unref(notification); } } void notification_closed(NotifyNotification *notification, QMap *map) { NotificationData *data = map->take(notification); if (data != NULL) { Ringtone::instance()->stopSound(); delete data; } } QVariantMap getInterfaceProperties(const Tp::AbstractInterface *interface) { if (!interface) { return QVariantMap(); } QDBusInterface propsInterface(interface->service(), interface->path(), "org.freedesktop.DBus.Properties"); QDBusReply reply = propsInterface.call("GetAll", interface->interface()); if (!reply.isValid()) { qWarning() << "Failed to fetch channel properties for interface" << interface->interface() << reply.error().message(); } return reply.value(); } TextChannelObserver::TextChannelObserver(QObject *parent) : mPowerdIface("com.lomiri.Repowerd", "/com/lomiri/Repowerd", "com.lomiri.Repowerd", QDBusConnection::systemBus()), QObject(parent) { connect(MessagingMenu::instance(), SIGNAL(replyReceived(NotificationData)), SLOT(onReplyReceived(NotificationData))); connect(MessagingMenu::instance(), SIGNAL(messageRead(NotificationData)), SLOT(onMessageRead(NotificationData))); connect(History::Manager::instance(), SIGNAL(threadsAdded(History::Threads)), SLOT(onThreadsAdded(History::Threads))); if (GreeterContacts::isGreeterMode()) { connect(GreeterContacts::instance(), SIGNAL(contactUpdated(QtContacts::QContact)), this, SLOT(updateNotifications(QtContacts::QContact))); } } TextChannelObserver::~TextChannelObserver() { QMap::const_iterator i = mNotifications.constBegin(); while (i != mNotifications.constEnd()) { NotifyNotification *notification = i.key(); NotificationData *data = i.value(); g_signal_handlers_disconnect_by_data(notification, &mNotifications); delete data; ++i; } mNotifications.clear(); } void TextChannelObserver::sendMessage(NotificationData notificationData) { AccountEntry *account = TelepathyHelper::instance()->accountForId(notificationData.accountId); if (!account || notificationData.accountId.isEmpty()) { // fallback to the default account if (TelepathyHelper::instance()->defaultMessagingAccount() && TelepathyHelper::instance()->defaultMessagingAccount()->active()) { account = TelepathyHelper::instance()->defaultMessagingAccount(); } else if (TelepathyHelper::instance()->activeAccounts().size() > 0) { account = TelepathyHelper::instance()->activeAccounts()[0]; } } if (!account) { // we could not find any account, but in theory this case can never happen return; } // check if the account is available if (!account->connected()) { bool phoneNumberBased = account->addressableVCardFields().contains("tel"); History::Thread thread = History::Manager::instance()->threadForParticipants(account->accountId(), History::EventTypeText, notificationData.participantIds, phoneNumberBased ? History::MatchPhoneNumber : History::MatchCaseSensitive, true); History::TextEvent textEvent(account->accountId(), thread.threadId(), QByteArray(QDateTime::currentDateTime().toString("yyyy-MM-ddTHH:mm:ss.zzz").toUtf8()).toHex(), "self", QDateTime::currentDateTime(), false, notificationData.messageReply, History::MessageTypeText, History::MessageStatusPermanentlyFailed); History::Events events; events.append(textEvent); History::Manager::instance()->writeEvents(events); QString failureMessage; OfonoAccountEntry *ofonoAccount = qobject_cast(account); bool simLocked = (ofonoAccount && ofonoAccount->simLocked()); if (simLocked) { failureMessage = C::gettext("Unlock your sim card and try again from the messaging application."); } else if (ofonoAccount && TelepathyHelper::instance()->flightMode()) { failureMessage = C::gettext("Deactivate flight mode and try again from the messaging application."); } else { // generic error failureMessage = C::gettext("Try again from the messaging application."); } // notify user about the failure GIcon *icon = g_themed_icon_new("cancel"); gchar *iconPath = g_icon_to_string(icon); NotifyNotification *notification = notify_notification_new(C::gettext("The message could not be sent"), failureMessage.toStdString().c_str(), iconPath); g_object_unref(icon); g_free(iconPath); NotificationData *data = new NotificationData(); *data = notificationData; data->notificationList = &mNotifications; mNotifications.insert(notification, data); // add the callback action notify_notification_add_action (notification, "notification_action", C::gettext("View message"), notification_action, data, NULL /* will be deleted when closed */); notify_notification_set_hint_string(notification, "x-lomiri-switch-to-application", "true"); g_signal_connect(notification, "closed", G_CALLBACK(notification_closed), &mNotifications); GError *error = NULL; if (!notify_notification_show(notification, &error)) { qWarning() << "Failed to show message notification:" << error->message; g_error_free (error); } return; } QVariantMap properties; properties["participantIds"] = notificationData.participantIds; properties["chatType"] = notificationData.targetType; if (!notificationData.targetId.isEmpty()) { properties["threadId"] = notificationData.targetId; } ChatManager::instance()->sendMessage(account->accountId(), notificationData.messageReply, QVariantMap(), properties); } void TextChannelObserver::clearNotifications() { Q_FOREACH(NotifyNotification *notification, mNotifications.keys()) { GError *error = NULL; notify_notification_close(notification, &error); } } void TextChannelObserver::showNotificationForNewGroup(const History::Thread &thread) { // show the notification QString text; NotificationData *data = new NotificationData(); data->accountId = thread.accountId(); data->timestamp = QDateTime::currentDateTime(); data->targetId = thread.threadId(); data->targetType = Tp::HandleTypeRoom; data->notificationTitle = QString::fromUtf8(C::gettext("New Group")); data->encodedEventId = QByteArray(QDateTime::currentDateTime().toString("yyyy-MM-ddTHH:mm:ss.zzz").toUtf8()).toHex(); data->icon = QUrl::fromLocalFile(telephonyServiceDir() + "/assets/contact-group.svg").toString(); QVariantMap roomProps = thread.chatRoomInfo(); if (roomProps.contains("Title") && !roomProps["Title"].toString().isEmpty()) { // TRANSLATORS : %1 is the group name data->messageText = QString::fromUtf8(C::gettext("You joined group %1 ")).arg(roomProps["Title"].toString()); data->roomName = roomProps["Title"].toString(); } else if (roomProps.contains("RoomName") && !roomProps["RoomName"].toString().isEmpty()) { // TRANSLATORS : %1 is the group name data->messageText = QString::fromUtf8(C::gettext("You joined group %1")).arg(roomProps["RoomName"].toString()); data->roomName = roomProps["RoomName"].toString(); } else { data->messageText = QString::fromUtf8(C::gettext("You joined a new group")); } if (roomProps["CreationTimestamp"].toDateTime().isValid()) { data->timestamp = roomProps["CreationTimestamp"].toDateTime(); } NotificationData messagingMenuData = *data; MessagingMenu::instance()->addNotification(messagingMenuData); NotifyNotification *notification = notify_notification_new(data->notificationTitle.toStdString().c_str(), data->messageText.toStdString().c_str(), data->icon.toStdString().c_str()); mNotifications.insert(notification, data); notify_notification_add_action (notification, "notification_action", C::gettext("View Group"), notification_action, data, NULL); g_signal_connect(notification, "closed", G_CALLBACK(notification_closed), &mNotifications); GError *error = NULL; if (!notify_notification_show(notification, &error)) { qWarning() << "Failed to show message notification:" << error->message; g_error_free (error); } Ringtone::instance()->playIncomingMessageSound(); } void TextChannelObserver::showNotificationForFlashMessage(const Tp::ReceivedMessage &message, const QString &accountId) { Tp::ContactPtr contact = message.sender(); QByteArray token(message.messageToken().toUtf8()); // show the notification NotifyNotification *notification = notify_notification_new("", message.text().toStdString().c_str(), ""); NotificationData *data = new NotificationData(); data->senderId = contact->id(); data->accountId = accountId; data->timestamp = message.sent(); data->messageText = message.text(); data->encodedEventId = token.toHex(); NotificationData messagingMenuData = *data; MessagingMenu::instance()->addFlashMessage(messagingMenuData); mNotifications.insert(notification, data); notify_notification_add_action (notification, "notification_ok_action", C::gettext("Ok"), flash_notification_action, NULL, NULL); notify_notification_add_action (notification, "notification_save_action", C::gettext("Save"), flash_notification_action, data, NULL); g_signal_connect(notification, "closed", G_CALLBACK(notification_closed), &mNotifications); notify_notification_set_hint_string(notification, "x-lomiri-snap-decisions", "true"); notify_notification_set_hint_string(notification, "x-lomiri-private-affirmative-tint", "true"); GError *error = NULL; if (!notify_notification_show(notification, &error)) { qWarning() << "Failed to show message notification:" << error->message; g_error_free (error); } Ringtone::instance()->playIncomingMessageSound(); } void TextChannelObserver::triggerNotificationForMessage(const Tp::TextChannelPtr channel, const Tp::ReceivedMessage &message, const QString &accountId, const QStringList &participantIds) { Tp::ContactPtr contact = message.sender(); if (!contact) { return; } QByteArray token(message.messageToken().toUtf8()); if (!mUnreadMessages.contains(token)) { Ringtone::instance()->playIncomingMessageSound(); return; } if (GreeterContacts::isGreeterMode()) { // we're in the greeter's session GreeterContacts::instance()->setContactFilter(QContactPhoneNumber::match(contact->id())); // in greeter mode we show the notification right away as the contact data might not be received showNotificationForMessage(channel, message, accountId, participantIds); } else { AccountEntry *account = TelepathyHelper::instance()->accountForId(accountId); if (!account) { return; } // try to match the contact info QContactFetchRequest *request = new QContactFetchRequest(this); request->setFilter(QContactPhoneNumber::match(contact->id())); QObject::connect(request, &QContactAbstractRequest::stateChanged, [this, request, accountId, participantIds, message, channel](QContactAbstractRequest::State newState) { // only process the results after the finished state is reached if (newState != QContactAbstractRequest::FinishedState) { return; } QContact contact; if (request->contacts().size() > 0) { contact = request->contacts().at(0); // Notify greeter via AccountsService about this contact so it // can show the details if our session is locked. GreeterContacts::emitContact(contact); } // wait for the contact match request to finish before showing the notification showNotificationForMessage(channel, message, accountId, participantIds, contact); }); // FIXME: For accounts not based on phone numbers, don't try to match contacts for now if (account->addressableVCardFields().contains("tel")) { request->setManager(ContactUtils::sharedManager()); request->start(); } else { // just emit the signal to pretend we did a contact search Q_EMIT request->stateChanged(QContactAbstractRequest::FinishedState); } } } void TextChannelObserver::showNotificationForCellBroadcast(const Tp::TextChannelPtr channel, const Tp::ReceivedMessage &message, const QString &accountId) { Tp::ContactPtr contact = message.sender(); if (!contact) { return; } QString topic = message.header().value("subject").variant().toString(); CellBroadcast::Type type = (CellBroadcast::Type) message.header().value(CellBroadcast::CELLBROADCAST_IDENTIFIER_TYPE).variant().toInt(); qDebug() << "received cell broadcast from topic:" << topic; QString title; QString iconTheme; // Display different icons according to severity if (type == CellBroadcast::TYPE_LEVEL_1) { title = QString::fromUtf8(C::gettext("Emergency Alert")); iconTheme = "security-alert"; } else if (type == CellBroadcast::TYPE_LEVEL_2) { title = QString::fromUtf8(C::gettext("Emergency Alert: Extreme")); iconTheme = "dialog-warning-symbolic"; } else if (type == CellBroadcast::TYPE_LEVEL_3) { title = QString::fromUtf8(C::gettext("Emergency Alert: Severe")); iconTheme = "dialog-warning-symbolic"; } else if (type == CellBroadcast::TYPE_LEVEL_4) { title = QString::fromUtf8(C::gettext("Emergency Alert: Notice")); iconTheme = "dialog-warning-symbolic"; } else { if (type == CellBroadcast::TYPE_AMBER) { title = QString::fromUtf8(C::gettext("AMBER Alert")); iconTheme = "dialog-warning-symbolic"; } else { title = QString::fromUtf8(C::gettext("Alert")); iconTheme = "broadcast"; } } GIcon *icon = g_themed_icon_new(iconTheme.toStdString().c_str()); QString iconUrl = QUrl(QStringLiteral("image://theme/%1").arg(g_icon_to_string(icon))).toString(); g_object_unref(icon); // add the message to the messaging menu (use hex format to avoid invalid characters) QByteArray token(message.messageToken().toUtf8()); NotificationData *data = new NotificationData(); data->accountId = accountId; data->senderId = contact->id(); data->alias = contact->alias(); data->timestamp = QDateTime::currentDateTime(); data->targetId = channel->targetId(); data->targetType = channel->targetHandleType(); data->encodedEventId = token.toHex(); data->notificationTitle = title; data->messageText = message.text(); data->icon = iconUrl; data->notificationList = &mNotifications; NotificationData messagingMenuData = *data; MessagingMenu::instance()->addCellBroadcastNotification(messagingMenuData); NotifyNotification *notification = notify_notification_new(title.toStdString().c_str(), message.text().toStdString().c_str(), iconUrl.toStdString().c_str()); mNotifications.insert(notification, data); // allow to display notification in more than 2 lines notify_notification_set_hint(notification, "x-lomiri-truncation", g_variant_new_boolean(false)); if (type == CellBroadcast::TYPE_LEVEL_1 || type == CellBroadcast::TYPE_LEVEL_2 || type == CellBroadcast::TYPE_LEVEL_3) { notify_notification_set_urgency(notification, NOTIFY_URGENCY_CRITICAL); } notify_notification_add_action (notification, "notification_action", C::gettext("Show alert"), notification_action, data, NULL); notify_notification_set_hint_string(notification, "x-lomiri-switch-to-application", "true"); g_signal_connect(notification, "closed", G_CALLBACK(notification_closed), &mNotifications); GError *error = NULL; if (!notify_notification_show(notification, &error)) { qWarning() << "Failed to show message notification:" << error->message; g_error_free (error); } // sound + vibrate if (type == CellBroadcast::TYPE_LEVEL_1) { Ringtone::instance()->playIncomingEmergencySound(); } else if (type == CellBroadcast::TYPE_LEVEL_2) { Ringtone::instance()->playIncomingWarningSound(); } else if (type == CellBroadcast::TYPE_LEVEL_3) { Ringtone::instance()->playIncomingWarningSound(); } else if (type == CellBroadcast::TYPE_LEVEL_4) { Ringtone::instance()->playIncomingMessageSound(); } else { Ringtone::instance()->playIncomingMessageSound(); } } void TextChannelObserver::showNotificationForMessage(const Tp::TextChannelPtr channel, const Tp::ReceivedMessage &message, const QString &accountId, const QStringList &participantIds, const QContact &contact) { Tp::ContactPtr telepathyContact = message.sender(); QString messageText = message.text(); AccountEntry *account = TelepathyHelper::instance()->accountForId(accountId); Tp::MessagePartList messageParts = message.parts(); bool mms = message.header()["x-canonical-mms"].variant().toBool(); if (mms) { // remove header messageParts.pop_front(); Q_FOREACH(const Tp::MessagePart &part, messageParts) { if (part["content-type"].variant().toString().startsWith("text/plain")) { messageText = part["content"].variant().toString(); break; } } } // if messageText is empty, search for attachments if (messageText.isEmpty()) { int imageCount = 0; int videoCount = 0; int contactCount = 0; int audioCount = 0; int attachmentCount = 0; Q_FOREACH(const Tp::MessagePart &part, messageParts) { QString contentType = part["content-type"].variant().toString(); if (contentType.startsWith("image/")) { imageCount++; } else if (contentType.startsWith("video/")) { videoCount++; } else if (contentType.startsWith("audio/")) { audioCount++; } else if (contentType.startsWith("text/vcard") || contentType.startsWith("text/x-vcard")) { contactCount++; } } attachmentCount = imageCount + videoCount + contactCount; if (imageCount > 0 && attachmentCount == imageCount) { messageText = QString::fromUtf8(C::ngettext("Attachment: %1 image", "Attachments: %1 images", imageCount)).arg(imageCount); } else if (videoCount > 0 && attachmentCount == videoCount) { messageText = QString::fromUtf8(C::ngettext("Attachment: %1 video", "Attachments: %1 videos", videoCount)).arg(videoCount); } else if (contactCount > 0 && attachmentCount == contactCount) { messageText = QString::fromUtf8(C::ngettext("Attachment: %1 contact", "Attachments: %1 contacts", contactCount)).arg(contactCount); } else if (audioCount > 0 && attachmentCount == audioCount) { messageText = QString::fromUtf8(C::ngettext("Attachment: %1 audio clip", "Attachments: %1 audio clips", audioCount)).arg(audioCount); } else if (attachmentCount > 0) { messageText = QString::fromUtf8(C::ngettext("Attachment: %1 file", "Attachments: %1 files", attachmentCount)).arg(attachmentCount); } else { // TRANSLATORS : message displayed when any error occurred while receiving a MMS (case when cellular-data is off, or any downloading issue). Notify that there was a message, the user can find more about it in the messaging-app. messageText = QString::fromUtf8(C::gettext("New MMS message")); } } // add the message to the messaging menu (use hex format to avoid invalid characters) QByteArray token(message.messageToken().toUtf8()); // if the message was already read, just play the ringtone and return // ignore logic if we are in greeter mode if (!mUnreadMessages.contains(token) && !GreeterContacts::isGreeterMode()) { Ringtone::instance()->playIncomingMessageSound(); return; } QString alias; QString avatar; if (!contact.isEmpty()) { alias = contact.detail().label(); avatar = contact.detail().imageUrl().toEncoded(); } if (alias.isEmpty()) { alias = telepathyContact->alias(); if (alias == OFONO_UNKNOWN_NUMBER) { alias = C::gettext("Unknown number"); } } if (avatar.isEmpty()) { avatar = QUrl(telephonyServiceDir() + "assets/avatar-default@18.png").toEncoded(); } NotificationData messagingMenuData; messagingMenuData.senderId = telepathyContact->id(); messagingMenuData.alias = telepathyContact->alias(); messagingMenuData.participantIds = participantIds; messagingMenuData.accountId = accountId; messagingMenuData.encodedEventId = token.toHex(); messagingMenuData.timestamp = message.sent(); messagingMenuData.messageText = messageText; messagingMenuData.targetId = channel->targetId(); messagingMenuData.targetType = channel->targetHandleType(); QString title; if (channel->targetHandleType() == Tp::HandleTypeRoom || participantIds.size() > 1) { GIcon *icon = g_themed_icon_new("contact-group"); avatar = g_icon_to_string(icon); g_object_unref(icon); if (channel->targetHandleType() == Tp::HandleTypeRoom) { Tp::Client::ChannelInterfaceRoomInterface *roomInterface = channel->optionalInterface(); Tp::Client::ChannelInterfaceRoomConfigInterface *roomConfigInterface = channel->optionalInterface(); QVariantMap roomInterfaceProps = getInterfaceProperties(roomInterface); QVariantMap roomConfigInterfaceProps = getInterfaceProperties(roomConfigInterface); if (roomConfigInterfaceProps.contains("Title") && !roomConfigInterfaceProps["Title"].toString().isEmpty()) { // TRANSLATORS : %1 is the group name and %2 is the recipient name title = QString::fromUtf8(C::gettext("Message to %1 from %2")).arg(roomConfigInterfaceProps["Title"].toString()).arg(alias); messagingMenuData.roomName = roomConfigInterfaceProps["Title"].toString(); } else if (roomInterfaceProps.contains("RoomName") && !roomInterfaceProps["RoomName"].toString().isEmpty()) { // TRANSLATORS : %1 is the group name and %2 is the recipient name title = QString::fromUtf8(C::gettext("Message to %1 from %2")).arg(roomInterfaceProps["RoomName"].toString()).arg(alias); messagingMenuData.roomName = roomInterfaceProps["RoomName"].toString(); } else { // TRANSLATORS : %1 is the recipient name title = QString::fromUtf8(C::gettext("Message to group from %1")).arg(alias); } } else { // TRANSLATORS : %1 is the recipient name title = QString::fromUtf8(C::gettext("Message to group from %1")).arg(alias); } } else { title = alias; } AccountEntry::addAccountLabel(accountId, title); MessagingMenu::instance()->addMessage(messagingMenuData); // show the notification NotifyNotification *notification = notify_notification_new(title.toStdString().c_str(), messageText.toStdString().c_str(), avatar.toStdString().c_str()); // Bundle the data we need for later updating NotificationData *data = new NotificationData(); data->accountId = accountId; data->senderId = telepathyContact->id(); data->participantIds = participantIds; data->alias = alias; data->messageText = messageText; data->targetId = channel->targetId(); data->targetType = channel->targetHandleType(); data->notificationList = &mNotifications; mNotifications.insert(notification, data); // add the callback action notify_notification_add_action (notification, "notification_action", C::gettext("View message"), notification_action, data, NULL /* will be deleted when closed */); notify_notification_set_hint_string(notification, "x-lomiri-switch-to-application", "true"); g_signal_connect(notification, "closed", G_CALLBACK(notification_closed), &mNotifications); GError *error = NULL; if (!notify_notification_show(notification, &error)) { qWarning() << "Failed to show message notification:" << error->message; g_error_free (error); } Ringtone::instance()->playIncomingMessageSound(); } void TextChannelObserver::updateNotifications(const QContact &contact) { QMap::const_iterator i = mNotifications.constBegin(); while (i != mNotifications.constEnd()) { NotifyNotification *notification = i.key(); NotificationData *data = i.value(); AccountEntry *account = TelepathyHelper::instance()->accountForId(data->accountId); if (!account || !account->addressableVCardFields().contains("tel")) { return; } // FIXME: add support for contact matching for non phone number based accounts Q_FOREACH(const QContactPhoneNumber phoneNumber, contact.details(QContactDetail::TypePhoneNumber)) { if (account->compareIds(data->senderId, phoneNumber.number())) { QString displayLabel = contact.detail().label(); QString title = QString::fromUtf8(C::gettext("Message from %1")).arg(displayLabel.isEmpty() ? data->alias : displayLabel); QString avatar = contact.detail().imageUrl().toEncoded(); if (avatar.isEmpty()) { avatar = QUrl(telephonyServiceDir() + "assets/avatar-default@18.png").toEncoded(); } notify_notification_update(notification, title.toStdString().c_str(), data->messageText.toStdString().c_str(), avatar.toStdString().c_str()); GError *error = NULL; if (!notify_notification_show(notification, &error)) { qWarning() << "Failed to show message notification:" << error->message; g_error_free (error); } } } ++i; } } void TextChannelObserver::onTextChannelAvailable(Tp::TextChannelPtr textChannel) { connect(textChannel.data(), SIGNAL(invalidated(Tp::DBusProxy*,const QString&, const QString&)), SLOT(onTextChannelInvalidated())); connect(textChannel.data(), SIGNAL(messageReceived(const Tp::ReceivedMessage&)), SLOT(onMessageReceived(const Tp::ReceivedMessage&))); connect(textChannel.data(), SIGNAL(pendingMessageRemoved(const Tp::ReceivedMessage&)), SLOT(onPendingMessageRemoved(const Tp::ReceivedMessage&))); connect(textChannel.data(), SIGNAL(messageSent(Tp::Message,Tp::MessageSendingFlags,QString)), SLOT(onMessageSent(Tp::Message,Tp::MessageSendingFlags,QString))); AccountEntry *account = TelepathyHelper::instance()->accountForConnection(textChannel->connection()); if (!account) { return; } if (textChannel->immutableProperties().contains(TP_QT_IFACE_CHANNEL_INTERFACE_SMS + QLatin1String(".Flash")) && textChannel->immutableProperties()[TP_QT_IFACE_CHANNEL_INTERFACE_SMS + QLatin1String(".Flash")].toBool()) { AccountEntry *account = TelepathyHelper::instance()->accountForConnection(textChannel->connection()); if (!account) { return; } // class 0 sms mFlashChannels.append(textChannel); Q_FOREACH(Tp::ReceivedMessage message, textChannel->messageQueue()) { showNotificationForFlashMessage(message, account->accountId()); } return; } else { mChannels.append(textChannel); } // notify all the messages from the channel Q_FOREACH(Tp::ReceivedMessage message, textChannel->messageQueue()) { processMessageReceived(message, textChannel); } } void TextChannelObserver::onTextChannelInvalidated() { Tp::TextChannelPtr textChannel(qobject_cast(sender())); mChannels.removeAll(textChannel); mFlashChannels.removeAll(textChannel); } void TextChannelObserver::processMessageReceived(const Tp::ReceivedMessage &message, const Tp::TextChannelPtr &textChannel) { if (textChannel.isNull()) { qDebug() << "TextChannelObserver::processMessageReceived: no text channel"; return; } AccountEntry *account = TelepathyHelper::instance()->accountForConnection(textChannel->connection()); if (!account) { return; } if (message.sender()->id() == CellBroadcast::CELLBROADCAST_IDENTIFIER) { // CellBroadcast Notification showNotificationForCellBroadcast(textChannel, message, account->accountId()); return; } // we do not notify messages sent by ourselves on other devices, unless we // are dealing with phone accounts: #1547462 if (!account->account()->connection().isNull() && message.sender() && message.sender()->handle().at(0) == account->account()->connection()->selfHandle() && account->type() != AccountEntry::PhoneAccount) { return; } if (textChannel->targetHandleType() == Tp::HandleTypeRoom) { if (!message.text().contains(account->selfContactId())) { return; } } // do not place notification items for scrollback messages if (mFlashChannels.contains(textChannel) && !message.isScrollback() && !message.isDeliveryReport() && !message.isRescued()) { showNotificationForFlashMessage(message, account->accountId()); return; } QStringList participantIds; Q_FOREACH(const Tp::ContactPtr &contact, textChannel->groupContacts(false)) { participantIds << contact->id(); } if (!message.isScrollback() && !message.isDeliveryReport() && !message.isRescued()) { QTimer *timer = new QTimer(this); timer->setInterval(1500); timer->setSingleShot(true); QString wakeToken; QDBusReply reply = mPowerdIface.call("requestSysState", "telephony-service-indicator", 1); if (reply.isValid()) { wakeToken = reply.value(); } QByteArray token(message.messageToken().toUtf8()); mUnreadMessages.append(token); QObject::connect(timer, &QTimer::timeout, [=]() { triggerNotificationForMessage(textChannel, message, account->accountId(), participantIds); Metrics::instance()->increment(Metrics::ReceivedMessages); timer->deleteLater(); if (!wakeToken.isEmpty()) { mPowerdIface.call("clearSysState", wakeToken); } }); timer->start(); } } void TextChannelObserver::onMessageReceived(const Tp::ReceivedMessage &message) { Tp::TextChannelPtr textChannel(qobject_cast(sender())); processMessageReceived(message, textChannel); } void TextChannelObserver::onPendingMessageRemoved(const Tp::ReceivedMessage &message) { QByteArray token(message.messageToken().toUtf8()); mUnreadMessages.removeAll(token); MessagingMenu::instance()->removeMessage(token.toHex()); } void TextChannelObserver::onReplyReceived(NotificationData notificationData) { AccountEntry *account = TelepathyHelper::instance()->accountForId(notificationData.accountId); if (!account) { return; } // FIXME - we need to find a better way to deal with dual sim in the messaging-menu if (account->type() == AccountEntry::PhoneAccount && !TelepathyHelper::instance()->defaultMessagingAccount() && TelepathyHelper::instance()->activeAccounts().size() > 1) { NotifyNotification *notification = notify_notification_new(C::gettext("Please, select a SIM card:"), notificationData.messageReply.toStdString().c_str(), ""); NotificationData *data = new NotificationData(); *data = notificationData; data->observer = this; mNotifications.insert(notification, data); Q_FOREACH(AccountEntry *account, TelepathyHelper::instance()->activeAccounts()) { notify_notification_add_action (notification, account->accountId().toStdString().c_str(), account->displayName().toStdString().c_str(), sim_selection_action, data, NULL); } g_signal_connect(notification, "closed", G_CALLBACK(notification_closed), &mNotifications); notify_notification_set_hint_string(notification, "x-lomiri-snap-decisions", "true"); GError *error = NULL; if (!notify_notification_show(notification, &error)) { qWarning() << "Failed to show message notification:" << error->message; g_error_free (error); } return; } sendMessage(notificationData); } void TextChannelObserver::onMessageRead(NotificationData notificationData) { QString messageId(QByteArray::fromHex(notificationData.encodedEventId.toUtf8())); QVariantMap properties; properties["accountId"] = notificationData.accountId; properties["participantIds"] = notificationData.participantIds; properties["messageId"] = notificationData.encodedEventId; ChatManager::instance()->acknowledgeMessage(properties); } void TextChannelObserver::onMessageSent(Tp::Message, Tp::MessageSendingFlags, QString) { Metrics::instance()->increment(Metrics::SentMessages); } void TextChannelObserver::onThreadsAdded(History::Threads threads) { Q_FOREACH(const History::Thread &thread, threads) { if (thread.chatType() == History::ChatTypeRoom) { QVariantMap roomInfo = thread.chatRoomInfo(); if (thread.count() == 0 && roomInfo.contains("Requested") && !roomInfo["Requested"].toBool()) { // notify that we got added to a new group showNotificationForNewGroup(thread); } } } } telephony-service-0.5.3/indicator/textchannelobserver.h000066400000000000000000000057321455543255600234230ustar00rootroot00000000000000/* * Copyright (C) 2012-2016 Canonical, Ltd. * * Authors: * Gustavo Pichorim Boiko * Tiago Salem Herrmann * * This file is part of telephony-service. * * telephony-service is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; version 3. * * telephony-service 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 . */ #ifndef TEXTCHANNELOBSERVER_H #define TEXTCHANNELOBSERVER_H #include #include #include #include #include #include "messagingmenu.h" #include QTCONTACTS_USE_NAMESPACE class TextChannelObserver : public QObject { Q_OBJECT public: explicit TextChannelObserver(QObject *parent = 0); ~TextChannelObserver(); public Q_SLOTS: void onTextChannelAvailable(Tp::TextChannelPtr textChannel); void sendMessage(NotificationData notificationData); void clearNotifications(); protected: void showNotificationForFlashMessage(const Tp::ReceivedMessage &message, const QString &accountId); void triggerNotificationForMessage(const Tp::TextChannelPtr channel, const Tp::ReceivedMessage &message, const QString &accountId, const QStringList &participantIds = QStringList()); void showNotificationForCellBroadcast(const Tp::TextChannelPtr channel, const Tp::ReceivedMessage &message, const QString &accountId); void showNotificationForMessage(const Tp::TextChannelPtr channel, const Tp::ReceivedMessage &message, const QString &accountId, const QStringList &participantIds = QStringList(), const QContact &contact = QContact()); void showNotificationForNewGroup(const History::Thread &thread); protected Q_SLOTS: void onTextChannelInvalidated(); void onMessageReceived(const Tp::ReceivedMessage &message); void onPendingMessageRemoved(const Tp::ReceivedMessage &message); void onReplyReceived(NotificationData notificationData); void onMessageRead(NotificationData notificationData); void onMessageSent(Tp::Message, Tp::MessageSendingFlags, QString); void onThreadsAdded(History::Threads threads); void updateNotifications(const QtContacts::QContact &contact); private: void processMessageReceived(const Tp::ReceivedMessage &message, const Tp::TextChannelPtr &textChannel); QList mChannels; QList mFlashChannels; QMap mNotifications; QList mUnreadMessages; QDBusInterface mPowerdIface; }; #endif // TEXTCHANNELOBSERVER_H telephony-service-0.5.3/indicator/ussdindicator.cpp000066400000000000000000000143171455543255600225430ustar00rootroot00000000000000/* * Copyright (C) 2014 Canonical, Ltd. * * Authors: * Tiago Salem Herrmann * * This file is part of telephony-service. * * telephony-service is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; version 3. * * telephony-service 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 . */ #include #include #include "ringtone.h" #include "ussdindicator.h" #include "ofonoaccountentry.h" #include "telepathyhelper.h" namespace C { #include } USSDIndicator::USSDIndicator(QObject *parent) : QObject(parent), m_menuRequest("ussd", true), m_menuNotification("ussd", false), m_notificationId(-1), m_notifications("org.freedesktop.Notifications", "/org/freedesktop/Notifications", QDBusConnection::sessionBus()) { setupAccounts(); connect(TelepathyHelper::instance(), SIGNAL(accountsChanged()), this, SLOT(setupAccounts())); connect(&m_notifications, SIGNAL(ActionInvoked(uint, const QString &)), this, SLOT(actionInvoked(uint, const QString &))); connect(&m_notifications, SIGNAL(NotificationClosed(uint, uint)), this, SLOT(notificationClosed(uint, uint))); } void USSDIndicator::setupAccounts() { Q_FOREACH(AccountEntry *account, TelepathyHelper::instance()->accounts()) { OfonoAccountEntry *ofonoAccount = qobject_cast(account); if (!ofonoAccount) { continue; } connect(ofonoAccount->ussdManager(), SIGNAL(notificationReceived(const QString &)), SLOT(onNotificationReceived(const QString &)), Qt::UniqueConnection); connect(ofonoAccount->ussdManager(), SIGNAL(requestReceived(const QString &)), SLOT(onRequestReceived(const QString &)), Qt::UniqueConnection); connect(ofonoAccount->ussdManager(), SIGNAL(initiateUSSDComplete(const QString &)), SLOT(onInitiateUSSDComplete(const QString &)), Qt::UniqueConnection); connect(ofonoAccount->ussdManager(), SIGNAL(respondComplete(bool, const QString &)), SLOT(onRespondComplete(bool, const QString &)), Qt::UniqueConnection); connect(ofonoAccount->ussdManager(), SIGNAL(stateChanged(const QString &)), SLOT(onStateChanged(const QString &)), Qt::UniqueConnection); } } void USSDIndicator::onNotificationReceived(const QString &message) { USSDManager *ussdManager = qobject_cast(sender()); if (!ussdManager) { return; } showUSSDNotification(message, false, ussdManager); } void USSDIndicator::onRequestReceived(const QString &message) { USSDManager *ussdManager = qobject_cast(sender()); if (!ussdManager) { return; } showUSSDNotification(message, true, ussdManager); } void USSDIndicator::onInitiateUSSDComplete(const QString &ussdResp) { USSDManager *ussdManager = qobject_cast(sender()); if (!ussdManager) { return; } showUSSDNotification(ussdResp, (ussdManager->state() == "user-response"), ussdManager); } void USSDIndicator::onRespondComplete(bool success, const QString &ussdResp) { USSDManager *ussdManager = qobject_cast(sender()); if (!ussdManager) { return; } if (success) { showUSSDNotification(ussdResp, (ussdManager->state() == "user-response"), ussdManager); } } void USSDIndicator::onStateChanged(const QString &state) { if (m_notificationId == -1) { return; } if (state == "idle") { m_notifications.CloseNotification(m_notificationId); } } void USSDIndicator::showUSSDNotification(const QString &message, bool replyRequired, USSDManager *ussdManager) { NotificationMenu *menu = replyRequired ? &m_menuRequest : &m_menuNotification; QString actionId = "ok_id"; QString actionLabel = C::gettext("Ok"); if (replyRequired) { actionId = "reply_id"; actionLabel = C::gettext("Reply"); } // indicate to the notification-daemon, that we want to use snap-decisions QVariantMap notificationHints; notificationHints["x-lomiri-snap-decisions"] = "true"; notificationHints["x-lomiri-private-affirmative-tint"] = "true"; notificationHints["x-lomiri-snap-decisions-timeout"] = -1; QVariantMap menuModelActions; menuModelActions["notifications"] = menu->actionPath(); QVariantMap menuModelPaths; menuModelPaths["busName"] = menu->busName(); menuModelPaths["menuPath"] = menu->menuPath(); menuModelPaths["actions"] = menuModelActions; notificationHints["x-lomiri-private-menu-model"] = menuModelPaths; m_notificationId = m_notifications.Notify("telephony-service-indicator", 0, "", "", message, QStringList() << actionId << actionLabel << "cancel_id" << C::gettext("Cancel"), notificationHints, 0); mUSSDRequests[m_notificationId] = ussdManager; Ringtone::instance()->playIncomingMessageSound(); } void USSDIndicator::actionInvoked(uint id, const QString &actionKey) { if (id != m_notificationId) { return; } USSDManager *ussdManager = mUSSDRequests.take(id); if (!ussdManager) { return; } m_notificationId = -1; if (actionKey == "reply_id") { ussdManager->respond(m_menuRequest.response()); } else if (actionKey == "cancel_id") { ussdManager->cancel(); } m_menuRequest.clearResponse(); } void USSDIndicator::notificationClosed(uint id, uint reason) { if (id != m_notificationId) { return; } m_notificationId = -1; } void USSDIndicator::clear() { if (m_notificationId != -1) { USSDManager *ussdManager = mUSSDRequests.take(m_notificationId); if (ussdManager) { ussdManager->cancel(); } m_notifications.CloseNotification(m_notificationId); m_notificationId = -1; } } telephony-service-0.5.3/indicator/ussdindicator.h000066400000000000000000000037021455543255600222040ustar00rootroot00000000000000/* * Copyright (C) 2014 Canonical, Ltd. * * Authors: * Tiago Salem Herrmann * * This file is part of telephony-service. * * telephony-service is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; version 3. * * telephony-service 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 . */ #ifndef USSDINDICATOR_H #define USSDINDICATOR_H #include #include #include "indicator/NotificationsInterface.h" #include "ussdmanager.h" #include "notificationmenu.h" #include "ofonoaccountentry.h" class USSDIndicator : public QObject { Q_OBJECT public: explicit USSDIndicator(QObject *parent = 0); void showUSSDNotification(const QString &message, bool replyRequired, USSDManager *ussdManager); public Q_SLOTS: void onNotificationReceived(const QString &message); void onRequestReceived(const QString &message); void onInitiateUSSDComplete(const QString &ussdResp); void onRespondComplete(bool success, const QString &ussdResp); void onStateChanged(const QString &state); void actionInvoked(uint id, const QString &actionKey); void notificationClosed(uint id, uint reason); void clear(); private Q_SLOTS: void setupAccounts(); private: unsigned int m_notificationId; NotificationMenu m_menuRequest; NotificationMenu m_menuNotification; QString mPendingMessage; org::freedesktop::Notifications m_notifications; QMap mUSSDRequests; QList mAccounts; }; #endif // USSDINDICATOR_H telephony-service-0.5.3/indicator/voicemailindicator.cpp000066400000000000000000000051011455543255600235240ustar00rootroot00000000000000/* * Copyright (C) 2012 Canonical, Ltd. * * Authors: * Gustavo Pichorim Boiko * * This file is part of telephony-service. * * telephony-service is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; version 3. * * telephony-service 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 . */ #include "voicemailindicator.h" #include "telepathyhelper.h" #include "messagingmenu.h" #include "accountentry.h" #include "ofonoaccountentry.h" #include #include VoiceMailIndicator::VoiceMailIndicator(QObject *parent) : QObject(parent), mConnection(QDBusConnection::sessionBus()) { connect(TelepathyHelper::instance(), SIGNAL(setupReady()), SLOT(onAccountReady())); connect(TelepathyHelper::instance(), SIGNAL(accountsChanged()), SLOT(onAccountReady())); } void VoiceMailIndicator::onAccountReady() { Q_FOREACH(AccountEntry *account, TelepathyHelper::instance()->accounts()) { OfonoAccountEntry *ofonoAccount = qobject_cast(account); if (!ofonoAccount) { continue; } // disconnect previous signals if any disconnect(ofonoAccount, SIGNAL(voicemailIndicatorChanged()), this, SLOT(onVoicemailIndicatorChanged())); disconnect(ofonoAccount, SIGNAL(voicemailCountChanged()), this, SLOT(onVoicemailIndicatorChanged())); connect(ofonoAccount, SIGNAL(voicemailIndicatorChanged()), this, SLOT(onVoicemailIndicatorChanged())); connect(ofonoAccount, SIGNAL(voicemailCountChanged()), this, SLOT(onVoicemailIndicatorChanged())); if (ofonoAccount->voicemailIndicator()) { MessagingMenu::instance()->showVoicemailEntry(account); } else { MessagingMenu::instance()->hideVoicemailEntry(account); } } } void VoiceMailIndicator::onVoicemailIndicatorChanged() { OfonoAccountEntry *ofonoAccount = qobject_cast(sender()); if (!ofonoAccount) { return; } if (ofonoAccount->voicemailIndicator()) { MessagingMenu::instance()->showVoicemailEntry(ofonoAccount); } else { MessagingMenu::instance()->hideVoicemailEntry(ofonoAccount); } } telephony-service-0.5.3/indicator/voicemailindicator.h000066400000000000000000000022241455543255600231740ustar00rootroot00000000000000/* * Copyright (C) 2012 Canonical, Ltd. * * Authors: * Gustavo Pichorim Boiko * * This file is part of telephony-service. * * telephony-service is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; version 3. * * telephony-service 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 . */ #ifndef VOICEMAILINDICATOR_H #define VOICEMAILINDICATOR_H #include #include #include class VoiceMailIndicator : public QObject { Q_OBJECT public: explicit VoiceMailIndicator(QObject *parent = 0); public Q_SLOTS: void onVoicemailIndicatorChanged(); void onAccountReady(); private: QDBusConnection mConnection; }; #endif // VOICEMAILINDICATOR_H telephony-service-0.5.3/libtelephonyservice/000077500000000000000000000000001455543255600212615ustar00rootroot00000000000000telephony-service-0.5.3/libtelephonyservice/CMakeLists.txt000066400000000000000000000025721455543255600240270ustar00rootroot00000000000000set(library_SRCS accountentry.cpp accountentryfactory.cpp accountlist.cpp audiooutput.cpp applicationutils.cpp callentry.cpp callmanager.cpp callnotification.cpp channelobserver.cpp chatmanager.cpp chatentry.cpp contactutils.cpp contactwatcher.cpp greetercontacts.cpp ofonoaccountentry.cpp participant.cpp phoneutils.cpp protocol.cpp protocolmanager.cpp ringtone.cpp rolesinterface.cpp telepathyhelper.cpp tonegenerator.cpp ussdmanager.cpp ) include_directories( ${TP_QT5_INCLUDE_DIRS} ${NOTIFY_INCLUDE_DIRS} ${LibPhoneNumber_INCLUDE_DIRS} ${URL_DISPATCHER_INCLUDE_DIRS}) add_library(telephonyservice STATIC ${library_SRCS} ${library_HDRS}) set_target_properties(telephonyservice PROPERTIES COMPILE_DEFINITIONS AS_BUSNAME=systemBus) target_link_libraries(telephonyservice ${TP_QT5_LIBRARIES} ${NOTIFY_LIBRARIES} ${LibPhoneNumber_LIBRARIES} ${URL_DISPATCHER_LIBRARIES} Qt5::Contacts Qt5::Core Qt5::DBus Qt5::Feedback Qt5::Multimedia Qt5::Qml Qt5::Quick Qt5::Gui ) enable_coverage(telephonyservice) telephony-service-0.5.3/libtelephonyservice/accountentry.cpp000066400000000000000000000253341455543255600245120ustar00rootroot00000000000000/* * Copyright (C) 2013-2017 Canonical, Ltd. * * Authors: * Gustavo Pichorim Boiko * * This file is part of telephony-service. * * telephony-service is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; version 3. * * telephony-service 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 . */ #include #include #include "accountentry.h" #include "phoneutils.h" #include "protocolmanager.h" #include "telepathyhelper.h" Q_DECLARE_METATYPE(Tp::ConnectionPtr); namespace C { #include } AccountEntry::AccountEntry(const Tp::AccountPtr &account, QObject *parent) : QObject(parent), mAccount(account), mReady(false), mProtocol(0) { qRegisterMetaType(); initialize(); } bool AccountEntry::ready() const { return mReady; } QString AccountEntry::accountId() const { if (mAccount.isNull()) { return QString(); } return mAccount->uniqueIdentifier(); } bool AccountEntry::active() const { if (mAccount.isNull() || mAccount->connection().isNull() || mAccount->connectionStatus() != Tp::ConnectionStatusConnected) { return false; } // we have to check if the account supports simple presence. In case it does, we use the self contact presence to determine // if this account is active. if (mAccount->connection()->hasInterface(TP_QT_IFACE_CONNECTION_INTERFACE_SIMPLE_PRESENCE)) { return (!mAccount->connection()->selfContact().isNull() && mAccount->connection()->selfContact()->presence().type() != Tp::ConnectionPresenceTypeOffline); } // if it doesn't support simple presence, we consider it online by having a connection in connected state return true; } QString AccountEntry::displayName() const { if (mAccount.isNull()) { return QString(); } return mAccount->displayName(); } QString AccountEntry::status() const { if (mAccount.isNull() || mAccount->connection().isNull() || mAccount->connection()->selfContact().isNull()) { return QString(); } Tp::Presence presence = mAccount->connection()->selfContact()->presence(); return presence.status(); } QString AccountEntry::statusMessage() const { if (mAccount.isNull() || mAccount->connection().isNull() || mAccount->connection()->selfContact().isNull()) { return QString(); } Tp::Presence presence = mAccount->connection()->selfContact()->presence(); return presence.statusMessage(); } QString AccountEntry::selfContactId() const { if (!mAccount.isNull() && !mAccount->connection().isNull() && !mAccount->connection()->selfContact().isNull()) { return mAccount->connection()->selfContact()->id(); } return QString(); } void AccountEntry::setDisplayName(const QString &name) { if (mAccount.isNull()) { return; } mAccount->setDisplayName(name); } bool AccountEntry::connected() const { return !mAccount.isNull() && !mAccount->connection().isNull() && mAccount->connectionStatus() == Tp::ConnectionStatusConnected; } AccountEntry::Capabilities AccountEntry::capabilities() const { AccountEntry::Capabilities capabilities = CapabilityNone; if (!connected()) { return capabilities; } Tp::ConnectionCapabilities tpCapabilities = mAccount->capabilities(); if (tpCapabilities.textChatrooms()) { capabilities |= (AccountEntry::Capabilities)AccountEntry::CapabilityTextChatrooms; } if (tpCapabilities.conferenceTextChats()) { capabilities |= (AccountEntry::Capabilities)AccountEntry::CapabilityConferenceTextChats; } if (tpCapabilities.conferenceTextChatsWithInvitees()) { capabilities |= (AccountEntry::Capabilities)AccountEntry::CapabilityConferenceTextChatsWithInvitees; } if (tpCapabilities.conferenceTextChatrooms()) { capabilities |= (AccountEntry::Capabilities)AccountEntry::CapabilityConferenceTextChatrooms; } if (tpCapabilities.conferenceTextChatroomsWithInvitees()) { capabilities |= (AccountEntry::Capabilities)AccountEntry::CapabilityConferenceTextChatroomsWithInvitees; } if (tpCapabilities.contactSearches()) { capabilities |= (AccountEntry::Capabilities)AccountEntry::CapabilityContactSearches; } return capabilities; } QVariantMap AccountEntry::accountProperties() const { return mAccountProperties; } void AccountEntry::setAccountProperties(const QVariantMap &properties) { TelepathyHelper::instance()->handlerInterface()->asyncCall("SetAccountProperties", mAccount->uniqueIdentifier(), properties); mAccountProperties = properties; Q_EMIT accountPropertiesChanged(); } QVariantMap AccountEntry::parameters() const { return mAccount->parameters(); } Tp::AccountPtr AccountEntry::account() const { return mAccount; } AccountEntry::AccountType AccountEntry::type() const { return GenericAccount; } QStringList AccountEntry::addressableVCardFields() const { return mAccount->protocolInfo().addressableVCardFields(); } bool AccountEntry::usePhoneNumbers() const { return addressableVCardFields().contains("tel"); } bool AccountEntry::compareIds(const QString &first, const QString &second) const { // try the basic first if (first == second) { return true; } // if the account has "tel" in the addressable fields, also try phone compare if (addressableVCardFields().contains("tel")) { return PhoneUtils::comparePhoneNumbers(first, second) > PhoneUtils::NO_MATCH; } return false; } Protocol *AccountEntry::protocolInfo() const { return mProtocol; } void AccountEntry::initialize() { if (mAccount.isNull()) { return; } mProtocol = ProtocolManager::instance()->protocolByName(mAccount->protocolName()); connect(ProtocolManager::instance(), &ProtocolManager::protocolsChanged, [=]() { mProtocol = ProtocolManager::instance()->protocolByName(mAccount->protocolName()); }); connect(this, &AccountEntry::addressableVCardFieldsChanged, &AccountEntry::usePhoneNumbersChanged); // propagate the display name changes connect(mAccount.data(), SIGNAL(removed()), SIGNAL(removed())); // propagate the display name changes connect(mAccount.data(), SIGNAL(displayNameChanged(QString)), SIGNAL(displayNameChanged())); connect(mAccount.data(), SIGNAL(connectionChanged(Tp::ConnectionPtr)), SLOT(onConnectionChanged(Tp::ConnectionPtr))); connect(mAccount.data(), SIGNAL(connectionStatusChanged(Tp::ConnectionStatus)), SIGNAL(connectionStatusChanged(Tp::ConnectionStatus))); connect(mAccount.data(), SIGNAL(connectionStatusChanged(Tp::ConnectionStatus)), SIGNAL(connectedChanged())); connect(mAccount.data(), &Tp::Account::parametersChanged, this, &AccountEntry::parametersChanged); connect(this, SIGNAL(connectedChanged()), SIGNAL(activeChanged())); Q_EMIT accountIdChanged(); // we have to postpone this call to give telepathyhelper time to connect the signals QMetaObject::invokeMethod(this, "onConnectionChanged", Qt::QueuedConnection, Q_ARG(Tp::ConnectionPtr, mAccount->connection())); QMetaObject::invokeMethod(this, "accountReady", Qt::QueuedConnection); // FIXME: change it to be asynchronous if (QCoreApplication::applicationName() != "telephony-service-handler") { QDBusReply reply = TelepathyHelper::instance()->handlerInterface()->call("GetAccountProperties", mAccount->uniqueIdentifier()); if (!reply.isValid()) { return; } mAccountProperties = reply; Q_EMIT accountPropertiesChanged(); } mReady = true; } void AccountEntry::watchSelfContactPresence() { if (mAccount.isNull() || mAccount->connection().isNull() || mAccount->connection()->selfContact().isNull()) { return; } connect(mAccount->connection()->selfContact().data(), SIGNAL(presenceChanged(Tp::Presence)), SIGNAL(statusChanged())); connect(mAccount->connection()->selfContact().data(), SIGNAL(presenceChanged(Tp::Presence)), SIGNAL(statusMessageChanged())); connect(mAccount->connection()->selfContact().data(), SIGNAL(presenceChanged(Tp::Presence)), SIGNAL(activeChanged())); connect(mAccount->connection()->selfContact().data(), SIGNAL(presenceChanged(Tp::Presence)), SIGNAL(connectedChanged())); } void AccountEntry::onSelfContactChanged() { watchSelfContactPresence(); Q_EMIT connectedChanged(); Q_EMIT selfContactIdChanged(); } void AccountEntry::onConnectionChanged(Tp::ConnectionPtr connection) { if (!connection.isNull()) { mConnectionInfo.busName = connection->busName(); mConnectionInfo.objectPath = connection->objectPath(); connect(connection.data(), SIGNAL(selfContactChanged()), SLOT(onSelfContactChanged())); watchSelfContactPresence(); } else { mConnectionInfo.busName = QString(); mConnectionInfo.objectPath = QString(); } Q_EMIT connectedChanged(); Q_EMIT selfContactIdChanged(); Q_EMIT capabilitiesChanged(); } AccountEntry::ConnectionStatus AccountEntry::connectionStatus() const { if (mAccount && mAccount->connection()) { return (ConnectionStatus)mAccount->connectionStatus(); } return ConnectionStatusDisconnected; } void AccountEntry::addAccountLabel(const QString &accountId, QString &text) { AccountEntry *account = TelepathyHelper::instance()->accountForId(accountId); if (account && account->type() == AccountEntry::PhoneAccount && TelepathyHelper::instance()->multiplePhoneAccounts()) { text += QString(" - [%1]").arg(account->displayName()); } } void AccountEntry::reconnect() { if (mAccount.isNull() || (mAccount->connection() && mAccount->connectionStatus() != Tp::ConnectionStatusDisconnected)) { return; } mAccount->reconnect(); mAccount->setRequestedPresence(Tp::Presence::available()); } void AccountEntry::requestDisconnect() { if (mAccount.isNull() || !mAccount->connection() || mAccount->connectionStatus() == Tp::ConnectionStatusDisconnected) { return; } mAccount->setRequestedPresence(Tp::Presence::offline()); } telephony-service-0.5.3/libtelephonyservice/accountentry.h000066400000000000000000000121321455543255600241470ustar00rootroot00000000000000/* * Copyright (C) 2013-2017 Canonical, Ltd. * * Authors: * Gustavo Pichorim Boiko * * This file is part of telephony-service. * * telephony-service is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; version 3. * * telephony-service 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 . */ #ifndef ACCOUNTENTRY_H #define ACCOUNTENTRY_H #include #include class Protocol; typedef struct { QString busName; QString objectPath; } ConnectionInfo; class AccountEntry : public QObject { Q_OBJECT Q_PROPERTY(AccountType type READ type CONSTANT) Q_PROPERTY(QString accountId READ accountId NOTIFY accountIdChanged) Q_PROPERTY(bool active READ active NOTIFY activeChanged) Q_PROPERTY(QString displayName READ displayName WRITE setDisplayName NOTIFY displayNameChanged) Q_PROPERTY(QString status READ status NOTIFY statusChanged) Q_PROPERTY(QString statusMessage READ statusMessage NOTIFY statusMessageChanged) Q_PROPERTY(QString selfContactId READ selfContactId NOTIFY selfContactIdChanged) Q_PROPERTY(bool connected READ connected NOTIFY connectedChanged) Q_PROPERTY(QStringList addressableVCardFields READ addressableVCardFields NOTIFY addressableVCardFieldsChanged) Q_PROPERTY(bool usePhoneNumbers READ usePhoneNumbers NOTIFY usePhoneNumbersChanged) Q_PROPERTY(Protocol* protocolInfo READ protocolInfo CONSTANT) Q_PROPERTY(Capabilities capabilities READ capabilities NOTIFY capabilitiesChanged) Q_PROPERTY(QVariantMap accountProperties READ accountProperties WRITE setAccountProperties NOTIFY accountPropertiesChanged) Q_PROPERTY(QVariantMap parameters READ parameters NOTIFY parametersChanged) Q_PROPERTY(ConnectionStatus connectionStatus READ connectionStatus NOTIFY connectionStatusChanged) Q_ENUMS(AccountType) Q_ENUMS(ConnectionStatus) friend class AccountEntryFactory; public: enum AccountType { PhoneAccount, GenericAccount }; enum Capability { CapabilityNone = 0, CapabilityTextChatrooms = 1, CapabilityConferenceTextChats = 2, CapabilityConferenceTextChatsWithInvitees = 4, CapabilityConferenceTextChatrooms = 8, CapabilityConferenceTextChatroomsWithInvitees = 16, CapabilityContactSearches = 32 }; Q_DECLARE_FLAGS(Capabilities, Capability); enum ConnectionStatus { ConnectionStatusConnected = Tp::ConnectionStatusConnected, ConnectionStatusConnecting = Tp::ConnectionStatusConnecting, ConnectionStatusDisconnected = Tp::ConnectionStatusDisconnected }; bool ready() const; QString accountId() const; QString displayName() const; QString status() const; QString statusMessage() const; QString selfContactId() const; void setDisplayName(const QString &name); Tp::AccountPtr account() const; virtual AccountType type() const; virtual QStringList addressableVCardFields() const; virtual bool usePhoneNumbers() const; virtual bool compareIds(const QString &first, const QString &second) const; virtual bool active() const; virtual bool connected() const; Capabilities capabilities() const; QVariantMap accountProperties() const; void setAccountProperties(const QVariantMap &properties); QVariantMap parameters() const; Protocol *protocolInfo() const; ConnectionStatus connectionStatus() const; static void addAccountLabel(const QString &accountId, QString &text); void reconnect(); void requestDisconnect(); Q_SIGNALS: void accountReady(); void accountIdChanged(); void activeChanged(); void displayNameChanged(); void statusChanged(); void statusMessageChanged(); void selfContactIdChanged(); void connectedChanged(); void addressableVCardFieldsChanged(); void usePhoneNumbersChanged(); void removed(); void connectionStatusChanged(Tp::ConnectionStatus status); void capabilitiesChanged(); void accountPropertiesChanged(); void parametersChanged(); protected Q_SLOTS: virtual void initialize(); virtual void watchSelfContactPresence(); virtual void onConnectionChanged(Tp::ConnectionPtr connection); virtual void onSelfContactChanged(); protected: explicit AccountEntry(const Tp::AccountPtr &account, QObject *parent = 0); Tp::AccountPtr mAccount; ConnectionInfo mConnectionInfo; bool mReady; Protocol *mProtocol; QVariantMap mAccountProperties; }; Q_DECLARE_OPERATORS_FOR_FLAGS(AccountEntry::Capabilities); #endif // ACCOUNTENTRY_H telephony-service-0.5.3/libtelephonyservice/accountentryfactory.cpp000066400000000000000000000023241455543255600260740ustar00rootroot00000000000000/* * Copyright (C) 2015-2016 Canonical, Ltd. * * Authors: * Gustavo Pichorim Boiko * * This file is part of telephony-service. * * telephony-service is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; version 3. * * telephony-service 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 . */ #include "accountentryfactory.h" #include "accountentry.h" #include "ofonoaccountentry.h" AccountEntry *AccountEntryFactory::createEntry(const Tp::AccountPtr &account, QObject *parent) { QString protocol = account.isNull() ? "" : account->protocolName(); // FIXME: check what other accounts need extra properties/methods if (protocol == "ofono") { return new OfonoAccountEntry(account, parent); } return new AccountEntry(account, parent); } telephony-service-0.5.3/libtelephonyservice/accountentryfactory.h000066400000000000000000000020141455543255600255350ustar00rootroot00000000000000/* * Copyright (C) 2015 Canonical, Ltd. * * Authors: * Gustavo Pichorim Boiko * * This file is part of telephony-service. * * telephony-service is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; version 3. * * telephony-service 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 . */ #ifndef ACCOUNTENTRYFACTORY_H #define ACCOUNTENTRYFACTORY_H #include class AccountEntry; class AccountEntryFactory { public: static AccountEntry *createEntry(const Tp::AccountPtr &account, QObject *parent = 0); }; #endif // ACCOUNTENTRYFACTORY_H telephony-service-0.5.3/libtelephonyservice/accountlist.cpp000066400000000000000000000111361455543255600243170ustar00rootroot00000000000000/* * Copyright (C) 2016 Canonical, Ltd. * * Authors: * Gustavo Pichorim Boiko * * This file is part of telephony-service. * * telephony-service is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; version 3. * * telephony-service 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 . */ #include "accountlist.h" #include "accountentry.h" #include "protocol.h" #include AccountList::AccountList(Protocol::Features features, const QString &protocol, QObject *parent) : QObject(parent), mFeatures(features), mProtocol(protocol) { QTimer::singleShot(0, this, &AccountList::init); } QQmlListProperty AccountList::qmlAllAccounts() { return QQmlListProperty(this, 0, allAccountsCount, allAccountsAt); } QQmlListProperty AccountList::qmlActiveAccounts() { return QQmlListProperty(this, 0, activeAccountsCount, activeAccountsAt); } QQmlListProperty AccountList::qmlDisplayedAccounts() { return QQmlListProperty(this, 0, displayedAccountsCount, displayedAccountsAt); } int AccountList::allAccountsCount(QQmlListProperty *p) { AccountList *accountList = qobject_cast(p->object); return accountList->mAccounts.count(); } AccountEntry *AccountList::allAccountsAt(QQmlListProperty *p, int index) { AccountList *accountList = qobject_cast(p->object); return accountList->mAccounts[index]; } int AccountList::activeAccountsCount(QQmlListProperty *p) { AccountList *accountList = qobject_cast(p->object); return accountList->activeAccounts().count(); } AccountEntry *AccountList::activeAccountsAt(QQmlListProperty *p, int index) { AccountList *accountList = qobject_cast(p->object); return accountList->activeAccounts()[index]; } int AccountList::displayedAccountsCount(QQmlListProperty *p) { AccountList *accountList = qobject_cast(p->object); return accountList->displayedAccounts().count(); } AccountEntry *AccountList::displayedAccountsAt(QQmlListProperty *p, int index) { AccountList *accountList = qobject_cast(p->object); return accountList->displayedAccounts()[index]; } QList AccountList::accounts() { return mAccounts; } QList AccountList::activeAccounts() { QList accounts; for (auto account : mAccounts) { if (account->active()) { accounts << account; } } return accounts; } QList AccountList::displayedAccounts() { QList accounts; for (auto account : mAccounts) { if (account->active() && account->protocolInfo()->showOnSelector()) { accounts << account; } } return accounts; } void AccountList::init() { filterAccounts(); connect(TelepathyHelper::instance(), &TelepathyHelper::accountsChanged, this, &AccountList::filterAccounts); } void AccountList::onActiveAccountsChanged() { AccountEntry *account = qobject_cast(QObject::sender()); Q_EMIT accountChanged(account, account->active()); Q_EMIT activeAccountsChanged(); Q_EMIT displayedAccountsChanged(); } void AccountList::filterAccounts() { // FIXME: we need to watch for active changed on accounts for (auto account : mAccounts) { account->disconnect(this); } mAccounts.clear(); for (auto account : TelepathyHelper::instance()->accounts()) { // if the account doesn't have any of the required features, skip it if (!(account->protocolInfo()->features() & mFeatures)) { continue; } // if we are filtering by protocol, only add the ones matching the protocol name if (!mProtocol.isNull() && account->protocolInfo()->name() != mProtocol) { continue; } connect(account, &AccountEntry::activeChanged, this, &AccountList::onActiveAccountsChanged); mAccounts << account; } Q_EMIT allAccountsChanged(); Q_EMIT displayedAccountsChanged(); Q_EMIT activeAccountsChanged(); } telephony-service-0.5.3/libtelephonyservice/accountlist.h000066400000000000000000000050341455543255600237640ustar00rootroot00000000000000/* * Copyright (C) 2016 Canonical, Ltd. * * Authors: * Gustavo Pichorim Boiko * * This file is part of telephony-service. * * telephony-service is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; version 3. * * telephony-service 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 . */ #ifndef ACCOUNTLIST_H #define ACCOUNTLIST_H #include #include #include "telepathyhelper.h" class AccountEntry; class AccountList : public QObject { Q_OBJECT Q_PROPERTY(QQmlListProperty all READ qmlAllAccounts NOTIFY allAccountsChanged) Q_PROPERTY(QQmlListProperty active READ qmlActiveAccounts NOTIFY activeAccountsChanged) Q_PROPERTY(QQmlListProperty displayed READ qmlDisplayedAccounts NOTIFY displayedAccountsChanged) public: AccountList(Protocol::Features features = Protocol::AllFeatures, const QString &protocol = QString(), QObject *parent = 0); QQmlListProperty qmlAllAccounts(); QQmlListProperty qmlActiveAccounts(); QQmlListProperty qmlDisplayedAccounts(); static int allAccountsCount(QQmlListProperty *p); static AccountEntry *allAccountsAt(QQmlListProperty *p, int index); static int activeAccountsCount(QQmlListProperty *p); static AccountEntry *activeAccountsAt(QQmlListProperty *p, int index); static int displayedAccountsCount(QQmlListProperty *p); static AccountEntry *displayedAccountsAt(QQmlListProperty *p, int index); QList accounts(); QList activeAccounts(); QList displayedAccounts(); Q_SIGNALS: void allAccountsChanged(); void activeAccountsChanged(); void displayedAccountsChanged(); void accountChanged(AccountEntry *entry, bool active); protected Q_SLOTS: void init(); void filterAccounts(); void onActiveAccountsChanged(); private: Protocol::Features mFeatures; QString mProtocol; QList mAccounts; }; #endif // ACCOUNTLIST_H telephony-service-0.5.3/libtelephonyservice/applicationutils.cpp000066400000000000000000000037571455543255600253650ustar00rootroot00000000000000/* * Copyright (C) 2012 Canonical, Ltd. * * Authors: * Gustavo Pichorim Boiko * * This file is part of telephony-service. * * telephony-service is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; version 3. * * telephony-service 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 . */ #include "applicationutils.h" #include #include #include #include #include #include #include #include #include #include ApplicationUtils::ApplicationUtils(QObject *parent) : QObject(parent) { } ApplicationUtils *ApplicationUtils::instance() { static ApplicationUtils *self = new ApplicationUtils(); return self; } bool ApplicationUtils::checkApplicationRunning(const QString &serviceName) { bool result = false; QDBusReply reply = QDBusConnection::sessionBus().interface()->isServiceRegistered(serviceName); if (reply.isValid()) { result = reply.value(); } return result; } #ifdef WANT_UI_SERVICES #include static void urlDispatchCallback (const gchar * url, gboolean success, gpointer user_data) { if (!success) { qWarning() << "Fail to launch url:" << url; } } bool ApplicationUtils::openUrl(const QUrl &url) { if (qgetenv("TELEPHONY_SERVICE_TEST").isEmpty()) { lomiri_url_dispatch_send(url.toString().toUtf8().constData(), urlDispatchCallback, 0); } return true; } #endif telephony-service-0.5.3/libtelephonyservice/applicationutils.h000066400000000000000000000022551455543255600250220ustar00rootroot00000000000000/* * Copyright (C) 2012-2013 Canonical, Ltd. * * Authors: * Gustavo Pichorim Boiko * * This file is part of telephony-service. * * telephony-service is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; version 3. * * telephony-service 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 . */ #ifndef APPLICATIONUTILS_H #define APPLICATIONUTILS_H #include #include class ApplicationUtils : public QObject { Q_OBJECT public: static ApplicationUtils *instance(); static bool checkApplicationRunning(const QString &serviceName); #ifdef WANT_UI_SERVICES static bool openUrl(const QUrl &url); #endif private: explicit ApplicationUtils(QObject *parent = 0); }; #endif // APPLICATIONUTILS_H telephony-service-0.5.3/libtelephonyservice/audiooutput.cpp000066400000000000000000000030441455543255600243500ustar00rootroot00000000000000/* * Copyright (C) 2013 Canonical, Ltd. * * Authors: * Tiago Salem Herrmann * * This file is part of telephony-service. * * telephony-service is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; version 3. * * telephony-service 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 . */ #include "audiooutput.h" QDBusArgument &operator<<(QDBusArgument &argument, const AudioOutputDBus &output) { argument.beginStructure(); argument << output.id << output.type << output.name; argument.endStructure(); return argument; } const QDBusArgument &operator>>(const QDBusArgument &argument, AudioOutputDBus &output) { argument.beginStructure(); argument >> output.id >> output.type >> output.name; argument.endStructure(); return argument; } AudioOutput::AudioOutput(const QString& id, const QString& name, const QString& type, QObject *parent) : QObject(parent), mId(id), mName(name), mType(type) { } QString AudioOutput::id() const { return mId; } QString AudioOutput::name() const { return mName; } QString AudioOutput::type() const { return mType; } telephony-service-0.5.3/libtelephonyservice/audiooutput.h000066400000000000000000000032421455543255600240150ustar00rootroot00000000000000/* * Copyright (C) 2013 Canonical, Ltd. * * Authors: * Tiago Salem Herrmann * * This file is part of telephony-service. * * telephony-service is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; version 3. * * telephony-service 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 . */ #ifndef AUDIOOUTPUT_H #define AUDIOOUTPUT_H #include #include struct AudioOutputDBus { QString id; QString type; QString name; }; Q_DECLARE_METATYPE(AudioOutputDBus) typedef QList AudioOutputDBusList; Q_DECLARE_METATYPE(AudioOutputDBusList) class AudioOutput : public QObject { Q_OBJECT Q_PROPERTY(QString id READ id CONSTANT) Q_PROPERTY(QString name READ name CONSTANT) Q_PROPERTY(QString type READ type CONSTANT) public: AudioOutput(const QString &id, const QString &name, const QString &type, QObject *parent = 0); QString id() const; QString name() const; QString type() const; private: QString mId; QString mName; QString mType; }; QDBusArgument &operator<<(QDBusArgument &argument, const AudioOutputDBus &output); const QDBusArgument &operator>>(const QDBusArgument &argument, AudioOutputDBus &output); #endif // AUDIOOUTPUT_H telephony-service-0.5.3/libtelephonyservice/callentry.cpp000066400000000000000000000346131455543255600237710ustar00rootroot00000000000000/* * Copyright (C) 2012-2017 Canonical, Ltd. * * Authors: * Gustavo Pichorim Boiko * Tiago Salem Herrmann * * This file is part of telephony-service. * * telephony-service is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; version 3. * * telephony-service 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 . */ #include "callentry.h" #include "callmanager.h" #include "telepathyhelper.h" #include "accountentry.h" #include "ofonoaccountentry.h" #include #include #include #include #include #define TELEPATHY_MUTE_IFACE "org.freedesktop.Telepathy.Call1.Interface.Mute" #define TELEPATHY_CALL_IFACE "org.freedesktop.Telepathy.Channel.Type.Call1" #define DBUS_PROPERTIES_IFACE "org.freedesktop.DBus.Properties" #define PROPERTY_AUDIO_OUTPUTS "AudioOutputs" #define PROPERTY_ACTIVE_AUDIO_OUTPUT "ActiveAudioOutput" CallEntry::CallEntry(const Tp::CallChannelPtr &channel, QObject *parent) : QObject(parent), mChannel(channel), mVoicemail(false), mLocalMuteState(false), mMuteInterface(channel->busName(), channel->objectPath(), TELEPATHY_MUTE_IFACE) { qRegisterMetaType(); qRegisterMetaType(); qDBusRegisterMetaType(); qDBusRegisterMetaType(); mAccount = TelepathyHelper::instance()->accountForConnection(mChannel->connection()); setupCallChannel(); // connect to the DBus signal connect(TelepathyHelper::instance()->handlerInterface(), SIGNAL(CallPropertiesChanged(QString, QVariantMap)), SLOT(onCallPropertiesChanged(QString,QVariantMap))); connect(TelepathyHelper::instance()->handlerInterface(), SIGNAL(CallHoldingFailed(QString)), SLOT(onCallHoldingFailed(QString))); connect(TelepathyHelper::instance()->handlerInterface(), SIGNAL(ActiveAudioOutputChanged(QString)), SLOT(onActiveAudioOutputChanged(QString))); QDBusConnection::sessionBus().connect(TelepathyHelper::instance()->handlerInterface()->service(), TelepathyHelper::instance()->handlerInterface()->path(), TelepathyHelper::instance()->handlerInterface()->interface(), "AudioOutputsChanged", this, SLOT(onAudioOutputsChanged(AudioOutputDBusList))); // in case the account is an ofono account, we can check the voicemail number OfonoAccountEntry *ofonoAccount = qobject_cast(mAccount); if (ofonoAccount && !ofonoAccount->voicemailNumber().isEmpty()) { setVoicemail(phoneNumber() == ofonoAccount->voicemailNumber()); } QDBusInterface *phoneAppHandler = TelepathyHelper::instance()->handlerInterface(); QDBusMessage reply = phoneAppHandler->call(PROPERTY_AUDIO_OUTPUTS); AudioOutputDBusList audioOutputList = qdbus_cast(reply.arguments().first()); onAudioOutputsChanged(audioOutputList); QString activeAudioOutput = phoneAppHandler->property(PROPERTY_ACTIVE_AUDIO_OUTPUT).toString(); onActiveAudioOutputChanged(activeAudioOutput); Q_EMIT incomingChanged(); } void CallEntry::onAudioOutputsChanged(const AudioOutputDBusList &outputs) { mAudioOutputs.clear(); while (!mAudioOutputs.isEmpty()) { mAudioOutputs.takeFirst()->deleteLater(); } Q_FOREACH(const AudioOutputDBus &output, outputs) { mAudioOutputs.append(new AudioOutput(output.id, output.name, output.type, this)); } Q_EMIT audioOutputsChanged(); } QString CallEntry::activeAudioOutput() const { return mActiveAudioOutput; } void CallEntry::setActiveAudioOutput(const QString &id) { QDBusInterface *phoneAppHandler = TelepathyHelper::instance()->handlerInterface(); phoneAppHandler->setProperty("ActiveAudioOutput", id); } void CallEntry::onActiveAudioOutputChanged(const QString &id) { mActiveAudioOutput = id; Q_EMIT activeAudioOutputChanged(); } void CallEntry::onCallPropertiesChanged(const QString &objectPath, const QVariantMap &properties) { if (objectPath != mChannel->objectPath()) { return; } updateChannelProperties(properties); } void CallEntry::onConferenceChannelMerged(const Tp::ChannelPtr &channel) { QList entries = CallManager::instance()->takeCalls(QList() << channel); if (entries.isEmpty()) { qWarning() << "Could not find the call that was just merged."; return; } CallEntry *entry = entries.first(); connect(entry, SIGNAL(callEnded()), SLOT(onInternalCallEnded())); mCalls.append(entry); Q_EMIT callsChanged(); } void CallEntry::onConferenceChannelRemoved(const Tp::ChannelPtr &channel, const Tp::Channel::GroupMemberChangeDetails &details) { Q_FOREACH(CallEntry *entry, mCalls) { Tp::ChannelPtr entryChannel = entry->channel(); if (entryChannel == channel) { CallManager::instance()->addCalls(QList() << entry); mCalls.removeAll(entry); entry->disconnect(this); Q_EMIT callsChanged(); break; } } } void CallEntry::onInternalCallEnded() { CallEntry *entry = qobject_cast(sender()); mCalls.removeAll(entry); Q_EMIT callsChanged(); entry->deleteLater(); } void CallEntry::onCallHoldingFailed(const QString &objectPath) { if (objectPath != mChannel->objectPath()) { return; } // make sure we get the hold state again Q_EMIT heldChanged(); } void CallEntry::setupCallChannel() { connect(mChannel.data(), SIGNAL(callStateChanged(Tp::CallState)), SLOT(onCallStateChanged(Tp::CallState))); connect(mChannel.data(), SIGNAL(callFlagsChanged(Tp::CallFlags)), SLOT(onCallFlagsChanged(Tp::CallFlags))); connect(mChannel.data(), SIGNAL(localHoldStateChanged(Tp::LocalHoldState,Tp::LocalHoldStateReason)), SLOT(onCallLocalHoldStateChanged(Tp::LocalHoldState,Tp::LocalHoldStateReason))); mLocalMuteState = mMuteInterface.property("LocalMuteState") == 1; connect(&mMuteInterface, SIGNAL(MuteStateChanged(uint)), SLOT(onMutedChanged(uint))); if (mChannel->isConference()) { connect(mChannel.data(), SIGNAL(conferenceChannelMerged(Tp::ChannelPtr)), SLOT(onConferenceChannelMerged(Tp::ChannelPtr))); connect(mChannel.data(), SIGNAL(conferenceChannelRemoved(Tp::ChannelPtr, Tp::Channel::GroupMemberChangeDetails)), SLOT(onConferenceChannelRemoved(Tp::ChannelPtr,Tp::Channel::GroupMemberChangeDetails))); } refreshProperties(); onCallStateChanged(mChannel->callState()); Q_EMIT heldChanged(); Q_EMIT phoneNumberChanged(); Q_EMIT dialingChanged(); } void CallEntry::updateChannelProperties(const QVariantMap &properties) { QVariantMap props = properties; // fetch the properties if the map is empty if (props.isEmpty()) { QDBusInterface *phoneAppHandler = TelepathyHelper::instance()->handlerInterface(); QDBusReply reply = phoneAppHandler->call("GetCallProperties", mChannel->objectPath()); if (!reply.isValid()) { return; } props = reply.value(); } QDateTime timestamp; if (props.contains("timestamp")) { props["timestamp"].value() >> timestamp; } if (props.contains("activeTimestamp")) { props["activeTimestamp"].value() >> mActiveTimestamp; } mChannel->setProperty("dtmfString", props["dtmfString"]); mChannel->setProperty("timestamp", timestamp); mChannel->setProperty("activeTimestamp", mActiveTimestamp); Q_EMIT dtmfStringChanged(); } void CallEntry::timerEvent(QTimerEvent *event) { Q_EMIT elapsedTimeChanged(); } void CallEntry::refreshProperties() { QDBusInterface callChannelIface(mChannel->busName(), mChannel->objectPath(), DBUS_PROPERTIES_IFACE); QDBusMessage reply = callChannelIface.call("GetAll", TELEPATHY_CALL_IFACE); QVariantList args = reply.arguments(); QMap map = qdbus_cast >(args[0]); mProperties.clear(); QMapIterator i(map); while(i.hasNext()) { i.next(); mProperties[i.key()] = i.value(); } } bool CallEntry::dialing() const { return !incoming() && (mChannel->callState() == Tp::CallStateInitialised); } bool CallEntry::incoming() const { bool isIncoming; if (mAccount && !mChannel->initiatorContact().isNull()) { isIncoming = mChannel->initiatorContact() != mAccount->account()->connection()->selfContact(); } else { isIncoming = !mChannel->isRequested(); } return isIncoming; } bool CallEntry::ringing() const { return incoming() && (mChannel->callState() == Tp::CallStateInitialised); } QString CallEntry::phoneNumber() const { if (mChannel->isConference() || !mChannel->actualFeatures().contains(Tp::CallChannel::FeatureCore) || mChannel->targetContact().isNull()) { return ""; } return mChannel->targetContact()->id(); } QQmlListProperty CallEntry::calls() { return QQmlListProperty(this, 0, callsCount, callAt); } QQmlListProperty CallEntry::audioOutputs() { return QQmlListProperty(this, 0, audioOutputsCount, audioOutputsAt); } bool CallEntry::isConference() const { return mChannel->isConference(); } QString CallEntry::dtmfString() const { return mChannel->property("dtmfString").toString(); } void CallEntry::sendDTMF(const QString &key) { QDBusInterface *phoneAppHandler = TelepathyHelper::instance()->handlerInterface(); phoneAppHandler->call("SendDTMF", mChannel->objectPath(), key); } void CallEntry::endCall() { QDBusInterface *phoneAppHandler = TelepathyHelper::instance()->handlerInterface(); phoneAppHandler->call("HangUpCall", mChannel->objectPath()); } void CallEntry::splitCall() { QDBusInterface *phoneAppHandler = TelepathyHelper::instance()->handlerInterface(); phoneAppHandler->call("SplitCall", mChannel->objectPath()); } Tp::CallChannelPtr CallEntry::channel() const { return mChannel; } AccountEntry *CallEntry::account() const { return mAccount; } int CallEntry::callsCount(QQmlListProperty *p) { CallEntry *entry = qobject_cast(p->object); if (!entry) { return 0; } return entry->mCalls.count(); } CallEntry *CallEntry::callAt(QQmlListProperty *p, int index) { CallEntry *entry = qobject_cast(p->object); if (!entry) { return 0; } return entry->mCalls[index]; } int CallEntry::audioOutputsCount(QQmlListProperty *p) { CallEntry *entry = qobject_cast(p->object); if (!entry) { return 0; } return entry->mAudioOutputs.count(); } AudioOutput *CallEntry::audioOutputsAt(QQmlListProperty *p, int index) { CallEntry *entry = qobject_cast(p->object); if (!entry) { return 0; } return entry->mAudioOutputs[index]; } void CallEntry::addCall(CallEntry *call) { mCalls << call; connect(call, SIGNAL(callEnded()), SLOT(onInternalCallEnded())); Q_EMIT callsChanged(); } bool CallEntry::isHeld() const { if (!mChannel->actualFeatures().contains(Tp::CallChannel::FeatureLocalHoldState)) { return false; } return (mChannel->localHoldState() == Tp::LocalHoldStateHeld); } void CallEntry::setHold(bool hold) { QDBusInterface *phoneAppHandler = TelepathyHelper::instance()->handlerInterface(); phoneAppHandler->call("SetHold", mChannel->objectPath(), hold); } void CallEntry::onMutedChanged(uint state) { // Replace this by a Mute interface method call when it // becomes available in telepathy-qt mLocalMuteState = (state == 1); Q_EMIT mutedChanged(); } bool CallEntry::isMuted() const { // Replace this by a Mute interface method call when it // becomes available in telepathy-qt return mLocalMuteState; } void CallEntry::setMute(bool value) { QDBusInterface *phoneAppHandler = TelepathyHelper::instance()->handlerInterface(); phoneAppHandler->call("SetMuted", mChannel->objectPath(), value); // FIXME: maybe we should retrieve the property from the handler instead of relying on telepathy // for that, because on channels that are not using hardware streaming we handle the mute internally // with no participation of the Telepathy mute interface if (mChannel->handlerStreamingRequired()) { onMutedChanged(value ? 1 : 0); } } void CallEntry::onCallStateChanged(Tp::CallState state) { qDebug() << __PRETTY_FUNCTION__ << state; // fetch the channel properties from the handler updateChannelProperties(); switch (state) { case Tp::CallStateEnded: Q_EMIT callEnded(); break; case Tp::CallStateActive: startTimer(1000); Q_EMIT callActive(); Q_EMIT activeChanged(); break; } Q_EMIT dialingChanged(); } void CallEntry::onCallFlagsChanged(Tp::CallFlags flags) { Q_UNUSED(flags) Q_EMIT ringingChanged(); } void CallEntry::onCallLocalHoldStateChanged(Tp::LocalHoldState state, Tp::LocalHoldStateReason reason) { if (reason == Tp::LocalHoldStateReasonResourceNotAvailable) { Q_EMIT callHoldingFailed(); } Q_EMIT heldChanged(); } void CallEntry::setVoicemail(bool voicemail) { mVoicemail = voicemail; Q_EMIT voicemailChanged(); } bool CallEntry::isVoicemail() const { return mVoicemail; } int CallEntry::elapsedTime() const { if (!mActiveTimestamp.isValid()) { return 0; } return mActiveTimestamp.secsTo(QDateTime::currentDateTimeUtc()); } bool CallEntry::isActive() const { return (mChannel->callState() == Tp::CallStateActive); } telephony-service-0.5.3/libtelephonyservice/callentry.h000066400000000000000000000136051455543255600234340ustar00rootroot00000000000000/* * Copyright (C) 2012-2017 Canonical, Ltd. * * Authors: * Gustavo Pichorim Boiko * Tiago Salem Herrmann * * This file is part of telephony-service. * * telephony-service is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; version 3. * * telephony-service 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 . */ #ifndef CALLENTRY_H #define CALLENTRY_H #include #include #include #include #include "audiooutput.h" class AccountEntry; class CallEntry : public QObject { Q_OBJECT Q_PROPERTY (bool held READ isHeld WRITE setHold NOTIFY heldChanged) Q_PROPERTY(bool muted READ isMuted WRITE setMute NOTIFY mutedChanged) Q_PROPERTY(bool voicemail READ isVoicemail WRITE setVoicemail NOTIFY voicemailChanged) Q_PROPERTY(AccountEntry *account READ account CONSTANT) // FIXME: replace this by a more generic identifier to support accounts not based on phone numbers // this property is only filled for 1-1 calls Q_PROPERTY(QString phoneNumber READ phoneNumber NOTIFY phoneNumberChanged) // this property is only filled for conference calls Q_PROPERTY(QQmlListProperty calls READ calls NOTIFY callsChanged) Q_PROPERTY(bool isConference READ isConference NOTIFY isConferenceChanged) Q_PROPERTY(int elapsedTime READ elapsedTime NOTIFY elapsedTimeChanged) Q_PROPERTY(bool active READ isActive NOTIFY activeChanged) Q_PROPERTY(bool dialing READ dialing NOTIFY dialingChanged) Q_PROPERTY(bool incoming READ incoming NOTIFY incomingChanged) Q_PROPERTY(bool ringing READ ringing NOTIFY ringingChanged) Q_PROPERTY(QString dtmfString READ dtmfString NOTIFY dtmfStringChanged) Q_PROPERTY(QString activeAudioOutput READ activeAudioOutput WRITE setActiveAudioOutput NOTIFY activeAudioOutputChanged) Q_PROPERTY(QQmlListProperty audioOutputs READ audioOutputs NOTIFY audioOutputsChanged) public: explicit CallEntry(const Tp::CallChannelPtr &channel, QObject *parent = 0); void timerEvent(QTimerEvent *event); bool isHeld() const; void setHold(bool hold); bool isMuted() const; void setMute(bool value); bool isVoicemail() const; void setVoicemail(bool voicemail); int elapsedTime() const; bool isActive() const; void setActiveAudioOutput(const QString &id); QString activeAudioOutput() const; QQmlListProperty audioOutputs(); bool dialing() const; bool incoming() const; bool ringing() const; QString phoneNumber() const; QQmlListProperty calls(); bool isConference() const; QString dtmfString() const; Q_INVOKABLE void sendDTMF(const QString &key); Q_INVOKABLE void endCall(); Q_INVOKABLE void splitCall(); Tp::CallChannelPtr channel() const; AccountEntry *account() const; // QQmlListProperty helpers static int callsCount(QQmlListProperty *p); static CallEntry* callAt(QQmlListProperty *p, int index); void addCall(CallEntry *call); static int audioOutputsCount(QQmlListProperty *p); static AudioOutput* audioOutputsAt(QQmlListProperty *p, int index); protected Q_SLOTS: void onCallStateChanged(Tp::CallState state); void onCallFlagsChanged(Tp::CallFlags flags); void onCallLocalHoldStateChanged(Tp::LocalHoldState state, Tp::LocalHoldStateReason reason); void onMutedChanged(uint state); void onCallPropertiesChanged(const QString &objectPath, const QVariantMap &properties); void onAudioOutputsChanged(const AudioOutputDBusList &outputs); void onActiveAudioOutputChanged(const QString &id); // conference related stuff void onConferenceChannelMerged(const Tp::ChannelPtr &channel); void onConferenceChannelRemoved(const Tp::ChannelPtr &channel, const Tp::Channel::GroupMemberChangeDetails &details); void onInternalCallEnded(); // handler error notification void onCallHoldingFailed(const QString &objectPath); protected: void setupCallChannel(); void updateChannelProperties(const QVariantMap &properties = QVariantMap()); Q_SIGNALS: void callEnded(); void callActive(); void activeChanged(); void heldChanged(); void mutedChanged(); void voicemailChanged(); void phoneNumberChanged(); void callsChanged(); void isConferenceChanged(); void dtmfStringChanged(); void dialingChanged(); void incomingChanged(); void ringingChanged(); void elapsedTimeChanged(); void activeAudioOutputChanged(); void audioOutputsChanged(); void callHoldingFailed(); private: void refreshProperties(); AccountEntry *mAccount; Tp::CallChannelPtr mChannel; QDBusInterface mMuteInterface; QMap mProperties; bool mVoicemail; bool mLocalMuteState; QDateTime mActiveTimestamp; QList mCalls; QList mAudioOutputs; QString mActiveAudioOutput; }; #endif // CALLENTRY_H telephony-service-0.5.3/libtelephonyservice/callmanager.cpp000066400000000000000000000316261455543255600242430ustar00rootroot00000000000000/* * Copyright (C) 2012 Canonical, Ltd. * * Authors: * Gustavo Pichorim Boiko * Tiago Salem Herrmann * * This file is part of telephony-service. * * telephony-service is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; version 3. * * telephony-service 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 . */ #include "callmanager.h" #include "callentry.h" #include "telepathyhelper.h" #include "accountentry.h" #include #include #include typedef QMap dbusQMap; Q_DECLARE_METATYPE(dbusQMap) CallManager *CallManager::instance() { static CallManager *self = new CallManager(); return self; } CallManager::CallManager(QObject *parent) : QObject(parent), mNeedsUpdate(false), mConferenceCall(0) { connect(TelepathyHelper::instance(), SIGNAL(channelObserverUnregistered()), SLOT(onChannelObserverUnregistered())); connect(this, SIGNAL(hasCallsChanged()), SIGNAL(callsChanged())); connect(this, &CallManager::hasCallsChanged, [this] { Q_EMIT this->callIndicatorVisibleChanged(this->callIndicatorVisible()); }); refreshProperties(); // connect the dbus signal QDBusConnection connection = QDBusConnection::sessionBus(); connection.connect("com.lomiri.TelephonyServiceHandler", "/com/lomiri/TelephonyServiceHandler", "com.lomiri.TelephonyServiceHandler", "CallIndicatorVisibleChanged", this, SLOT(onCallIndicatorVisibleChanged(bool))); connection.connect("com.lomiri.TelephonyServiceHandler", "/com/lomiri/TelephonyServiceHandler", "com.lomiri.TelephonyServiceHandler", "ConferenceCallRequestFinished", this, SLOT(onConferenceCallRequestFinished(bool))); } void CallManager::refreshProperties() { QDBusInterface handlerPropertiesInterface("com.lomiri.TelephonyServiceHandler", "/com/lomiri/TelephonyServiceHandler", "org.freedesktop.DBus.Properties"); QDBusReply reply = handlerPropertiesInterface.call("GetAll", "com.lomiri.TelephonyServiceHandler"); if (!reply.isValid()) { qWarning() << "Failed to refresh the properties from the handler"; return; } QVariantMap map = reply.value(); mCallIndicatorVisible = map["CallIndicatorVisible"].toBool(); Q_EMIT callIndicatorVisibleChanged(mCallIndicatorVisible); } void CallManager::setDBusProperty(const QString &name, const QVariant &value) { QDBusInterface handlerPropertiesInterface("com.lomiri.TelephonyServiceHandler", "/com/lomiri/TelephonyServiceHandler", "org.freedesktop.DBus.Properties"); handlerPropertiesInterface.call("Set", "com.lomiri.TelephonyServiceHandler", name, QVariant::fromValue(QDBusVariant(value))); } QList CallManager::takeCalls(const QList callChannels) { qDebug() << __PRETTY_FUNCTION__; QList entries; // run through the current calls and check which ones we find Q_FOREACH(CallEntry *entry, mCallEntries) { if (callChannels.contains(entry->channel())) { mCallEntries.removeAll(entry); entries << entry; entry->disconnect(this); } } // FIXME: check which of those signals we really need to emit here Q_EMIT hasCallsChanged(); Q_EMIT hasBackgroundCallChanged(); Q_EMIT foregroundCallChanged(); Q_EMIT backgroundCallChanged(); return entries; } void CallManager::addCalls(const QList entries) { Q_FOREACH (CallEntry *entry, entries) { if (!mCallEntries.contains(entry)) { mCallEntries << entry; } setupCallEntry(entry); } // FIXME: check which of those signals we really need to emit here Q_EMIT hasCallsChanged(); Q_EMIT hasBackgroundCallChanged(); Q_EMIT foregroundCallChanged(); Q_EMIT backgroundCallChanged(); } bool CallManager::callIndicatorVisible() const { return hasCalls() && mCallIndicatorVisible; } void CallManager::setCallIndicatorVisible(bool visible) { setDBusProperty("CallIndicatorVisible", visible); } void CallManager::setupCallEntry(CallEntry *entry) { connect(entry, SIGNAL(callEnded()), SLOT(onCallEnded())); connect(entry, SIGNAL(heldChanged()), SIGNAL(foregroundCallChanged())); connect(entry, SIGNAL(activeChanged()), SIGNAL(foregroundCallChanged())); connect(entry, SIGNAL(heldChanged()), SIGNAL(backgroundCallChanged())); connect(entry, SIGNAL(activeChanged()), SIGNAL(hasBackgroundCallChanged())); connect(entry, SIGNAL(activeChanged()), SIGNAL(hasCallsChanged())); } void CallManager::onChannelObserverUnregistered() { // do not clear the manager right now, wait until the observer is re-registered // to avoid flickering in the UI mNeedsUpdate = true; } void CallManager::startCall(const QString &phoneNumber, const QString &accountId) { AccountEntry *account; if (accountId.isNull()) { account = TelepathyHelper::instance()->defaultCallAccount(); if (!account) { account = TelepathyHelper::instance()->accounts()[0]; } } else { account = TelepathyHelper::instance()->accountForId(accountId); } if (!account) { return; } QDBusInterface *phoneAppHandler = TelepathyHelper::instance()->handlerInterface(); phoneAppHandler->call("StartCall", phoneNumber, account->accountId()); } void CallManager::onCallIndicatorVisibleChanged(bool visible) { mCallIndicatorVisible = visible; Q_EMIT callIndicatorVisibleChanged(visible); } void CallManager::onConferenceCallRequestFinished(bool succeeded) { if (!succeeded) { Q_EMIT conferenceRequestFailed(); } } CallEntry *CallManager::foregroundCall() const { CallEntry *call = 0; // if we have only one call, return it as being always in foreground // even if it is held QList calls = activeCalls(); if (calls.count() == 1) { call = calls.first(); } else { Q_FOREACH(CallEntry *entry, calls) { if (!entry->isHeld()) { call = entry; break; } } } return call; } CallEntry *CallManager::backgroundCall() const { QList calls = activeCalls(); // if we have only one call, assume there is no call in background // even if the foreground call is held if (calls.count() == 1) { return 0; } Q_FOREACH(CallEntry *entry, calls) { if (entry->isHeld()) { return entry; } } return 0; } QList CallManager::activeCalls() const { QList calls; if (mConferenceCall) { calls << mConferenceCall; } Q_FOREACH(CallEntry *entry, mCallEntries) { if (entry->isActive() || entry->dialing()) { calls << entry; } } return calls; } QQmlListProperty CallManager::calls() { return QQmlListProperty(this, 0, callsCount, callAt); } bool CallManager::hasCalls() const { // check if the callmanager already has active calls if (activeCalls().count() > 0) { return true; } // if that's not the case, and if not in greeter mode, query the telephony-service-handler // for the availability of calls. // this is done only to get the live call view on clients as soon as possible, even before the // telepathy observer is configured // Also, we have to avoid creating instances of GreeterContacts here to query if we are in greeter mode, // otherwise we might end up with a deadlock: unity -> telephony-service -> unity if (qgetenv("XDG_SESSION_CLASS") != "greeter") { QDBusInterface *phoneAppHandler = TelepathyHelper::instance()->handlerInterface(); QDBusReply reply = phoneAppHandler->call("HasCalls"); if (reply.isValid()) { return reply.value(); } } return false; } bool CallManager::hasBackgroundCall() const { return activeCalls().count() > 1; } int CallManager::callsCount(QQmlListProperty *p) { return CallManager::instance()->activeCalls().count(); } CallEntry *CallManager::callAt(QQmlListProperty *p, int index) { return CallManager::instance()->activeCalls()[index]; } void CallManager::onCallChannelAvailable(Tp::CallChannelPtr channel) { // if this is the first call after re-registering the observer, clear the data if (mNeedsUpdate) { Q_FOREACH(CallEntry *entry, mCallEntries) { entry->deleteLater(); } mCallEntries.clear(); if (mConferenceCall) { mConferenceCall->deleteLater(); mConferenceCall = 0; } mNeedsUpdate = false; } CallEntry *entry = new CallEntry(channel, this); if (entry->isConference()) { // assume there can be only one conference call at any time for now mConferenceCall = entry; // check if any of the existing channels belong to the conference // if they do, move them to the conference QList entries = takeCalls(channel->conferenceChannels()); Q_FOREACH(CallEntry *entry, entries) { mConferenceCall->addCall(entry); } setupCallEntry(mConferenceCall); } else if (mConferenceCall && mConferenceCall->channel()->conferenceChannels().contains(channel)){ // if the call channel belongs to the conference, don't add it here, move it to the conference itself mConferenceCall->addCall(entry); } else { mCallEntries.append(entry); setupCallEntry(entry); } // FIXME: check which of those signals we really need to emit here Q_EMIT hasCallsChanged(); Q_EMIT hasBackgroundCallChanged(); Q_EMIT foregroundCallChanged(); Q_EMIT backgroundCallChanged(); } void CallManager::onCallEnded() { qDebug() << __PRETTY_FUNCTION__; // FIXME: handle multiple calls CallEntry *entry = qobject_cast(sender()); if (!entry) { return; } // at this point the entry should be removed if (entry == mConferenceCall) { mConferenceCall = 0; } else { mCallEntries.removeAll(entry); } Q_EMIT callEnded(entry); Q_EMIT hasCallsChanged(); Q_EMIT hasBackgroundCallChanged(); Q_EMIT foregroundCallChanged(); Q_EMIT backgroundCallChanged(); entry->deleteLater(); } void CallManager::mergeCalls(CallEntry *firstCall, CallEntry *secondCall) { QDBusInterface *handlerInterface = TelepathyHelper::instance()->handlerInterface(); // if there is already a conference call, just merge the remaining channels // in the existing conference if (firstCall->isConference() || secondCall->isConference()) { CallEntry *conferenceCall = firstCall->isConference() ? firstCall : secondCall; CallEntry *otherCall = firstCall->isConference() ? secondCall : firstCall; handlerInterface->call("MergeCall", conferenceCall->channel()->objectPath(), otherCall->channel()->objectPath()); } else { handlerInterface->call("CreateConferenceCall", QStringList() << firstCall->channel()->objectPath() << secondCall->channel()->objectPath()); } } void CallManager::splitCall(CallEntry *callEntry) { QDBusInterface *handlerInterface = TelepathyHelper::instance()->handlerInterface(); handlerInterface->call("SplitCall", callEntry->channel()->objectPath()); } void CallManager::playTone(const QString &key) { QDBusInterface *phoneAppHandler = TelepathyHelper::instance()->handlerInterface(); /* calling without channel, DTMF tone is played only locally */ phoneAppHandler->call("SendDTMF", "" , key); } bool CallManager::handleMediaKey(bool doubleClick) { QDBusInterface *approverInterface = TelepathyHelper::instance()->approverInterface(); QDBusReply reply = approverInterface->call("HandleMediaKey", doubleClick); if (reply.isValid()) { return reply.value(); } return false; } telephony-service-0.5.3/libtelephonyservice/callmanager.h000066400000000000000000000074741455543255600237140ustar00rootroot00000000000000/* * Copyright (C) 2012-2013 Canonical, Ltd. * * Authors: * Gustavo Pichorim Boiko * Tiago Salem Herrmann * * This file is part of telephony-service. * * telephony-service is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; version 3. * * telephony-service 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 . */ #ifndef CALLMANAGER_H #define CALLMANAGER_H #include #include #include #include #include class CallEntry; class TelepathyHelper; class CallManager : public QObject { Q_OBJECT Q_PROPERTY(QObject *foregroundCall READ foregroundCall NOTIFY foregroundCallChanged) Q_PROPERTY(QObject *backgroundCall READ backgroundCall NOTIFY backgroundCallChanged) Q_PROPERTY(bool hasCalls READ hasCalls NOTIFY hasCallsChanged) Q_PROPERTY(bool hasBackgroundCall READ hasBackgroundCall NOTIFY hasBackgroundCallChanged) Q_PROPERTY(QQmlListProperty calls READ calls NOTIFY callsChanged) Q_PROPERTY(bool callIndicatorVisible READ callIndicatorVisible WRITE setCallIndicatorVisible NOTIFY callIndicatorVisibleChanged) public: static CallManager *instance(); Q_INVOKABLE void startCall(const QString &phoneNumber, const QString &accountId = QString()); Q_INVOKABLE void mergeCalls(CallEntry *firstCall, CallEntry *secondCall); Q_INVOKABLE void splitCall(CallEntry *callEntry); Q_INVOKABLE void playTone(const QString &key); Q_INVOKABLE bool handleMediaKey(bool doubleClick); CallEntry *foregroundCall() const; CallEntry *backgroundCall() const; QList activeCalls() const; QQmlListProperty calls(); bool hasCalls() const; bool hasBackgroundCall() const; // conference related members QList takeCalls(const QList callChannels); void addCalls(const QList entries); // call indicator related bool callIndicatorVisible() const; void setCallIndicatorVisible(bool visible); // QQmlListProperty helpers static int callsCount(QQmlListProperty *p); static CallEntry* callAt(QQmlListProperty *p, int index); Q_SIGNALS: void callEnded(CallEntry *entry); void foregroundCallChanged(); void backgroundCallChanged(); void callsChanged(); void hasCallsChanged(); void hasBackgroundCallChanged(); void voicemailNumberChanged(); void emergencyNumbersChanged(); void callIndicatorVisibleChanged(bool visible); void conferenceRequestFailed(); public Q_SLOTS: void onCallChannelAvailable(Tp::CallChannelPtr channel); void onChannelObserverUnregistered(); void onCallEnded(); void onCallIndicatorVisibleChanged(bool visible); void onConferenceCallRequestFinished(bool succeeded); private: explicit CallManager(QObject *parent = 0); void refreshProperties(); void setDBusProperty(const QString &name, const QVariant &value); void setupCallEntry(CallEntry *entry); mutable QList mCallEntries; bool mNeedsUpdate; CallEntry *mConferenceCall; bool mCallIndicatorVisible; }; #endif // CALLMANAGER_H telephony-service-0.5.3/libtelephonyservice/callnotification.cpp000066400000000000000000000077751455543255600253270ustar00rootroot00000000000000/* * Copyright (C) 2013 Canonical, Ltd. * * Authors: * Gustavo Pichorim Boiko * * This file is part of telephony-service. * * telephony-service is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; version 3. * * telephony-service 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 . */ #include "callnotification.h" #include "config.h" namespace C { #include } CallNotification::CallNotification(QObject *parent) : QObject(parent), mIndicatorIface("com.lomiri.TelephonyServiceIndicator", "/com/lomiri/TelephonyServiceIndicator", "com.lomiri.TelephonyServiceIndicator") { } CallNotification *CallNotification::instance() { static CallNotification *self = new CallNotification(); return self; } void CallNotification::showNotificationForCall(const QStringList &participants, CallNotification::NotificationReason reason) { // FIXME: the new designs don't have on screen notifications, and that's why they are disabled here // in case that changes again in the future, just remove the #if 0 #if 0 QString title; bool isConference = participants.count() > 1; switch (reason) { case CallHeld: title = isConference? C::gettext("Conf call on hold") : C::gettext("%1 call on hold"); break; case CallEnded: title = isConference? C::gettext("Conf call ended") : C::gettext("%1 call ended"); break; case CallRejected: title = C::gettext("%1 call declined"); break; } // just to make things easier, search for a contact even when the call is a conference QContactFetchRequest *request = new QContactFetchRequest(this); request->setFilter(QContactPhoneNumber::match(participants.first())); // place the notify-notification item only after the contact fetch request is finished, as we can´t simply update QObject::connect(request, &QContactAbstractRequest::stateChanged, [request, participants, title, isConference]() { QString finalTitle = title; // only process the results after the finished state is reached if (request->state() != QContactAbstractRequest::FinishedState) { return; } QString displayLabel; QString avatar; if (request->contacts().size() > 0) { QContact contact = request->contacts().at(0); displayLabel = ContactUtils::formatContactName(contact); avatar = contact.detail().imageUrl().toEncoded(); } if (!isConference) { finalTitle = title.arg(displayLabel.isEmpty() ? participants[0] : displayLabel); } if (avatar.isEmpty()) { avatar = QUrl(telephonyServiceDir() + "assets/avatar-default@18.png").toEncoded(); } // show the notification NotifyNotification *notification = notify_notification_new(finalTitle.toStdString().c_str(), NULL, avatar.toStdString().c_str()); GError *error = NULL; if (!notify_notification_show(notification, &error)) { qWarning() << "Failed to show message notification:" << error->message; g_error_free (error); } }); request->setManager(ContactUtils::sharedManager()); request->start(); #endif } void CallNotification::clearCallNotification(const QString &participantId, const QString &accountId) { mIndicatorIface.asyncCall("ClearCallNotification", participantId, accountId); } telephony-service-0.5.3/libtelephonyservice/callnotification.h000066400000000000000000000025551455543255600247630ustar00rootroot00000000000000/* * Copyright (C) 2013 Canonical, Ltd. * * Authors: * Gustavo Pichorim Boiko * * This file is part of telephony-service. * * telephony-service is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; version 3. * * telephony-service 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 . */ #ifndef CALLNOTIFICATION_H #define CALLNOTIFICATION_H #include #include class CallNotification : public QObject { Q_OBJECT public: enum NotificationReason { CallHeld, CallEnded, CallRejected }; public Q_SLOTS: static CallNotification *instance(); void showNotificationForCall(const QStringList &participants, NotificationReason reason); void clearCallNotification(const QString &participantId, const QString &accountId); private: explicit CallNotification(QObject *parent = 0); QDBusInterface mIndicatorIface; }; #endif // CALLNOTIFICATION_H telephony-service-0.5.3/libtelephonyservice/channelobserver.cpp000066400000000000000000000160441455543255600251520ustar00rootroot00000000000000/* * Copyright (C) 2012 Canonical, Ltd. * * Authors: * Gustavo Pichorim Boiko * * This file is part of telephony-service. * * telephony-service is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; version 3. * * telephony-service 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 . */ #include "channelobserver.h" #include "protocolmanager.h" #include "telepathyhelper.h" #include #include #include #include ChannelObserver::ChannelObserver(QObject *parent) : QObject(parent), Tp::AbstractClientObserver(channelFilters(), true) { } Tp::ChannelClassSpecList ChannelObserver::channelFilters() const { Tp::ChannelClassSpecList specList; specList << TelepathyHelper::audioConferenceSpec(); specList << Tp::ChannelClassSpec::audioCall(); specList << Tp::ChannelClassSpec::textChat(); specList << Tp::ChannelClassSpec::textChatroom(); specList << Tp::ChannelClassSpec::unnamedTextChat(); return specList; } void ChannelObserver::observeChannels(const Tp::MethodInvocationContextPtr<> &context, const Tp::AccountPtr &account, const Tp::ConnectionPtr &connection, const QList &channels, const Tp::ChannelDispatchOperationPtr &dispatchOperation, const QList &requestsSatisfied, const Tp::AbstractClientObserver::ObserverInfo &observerInfo) { Q_UNUSED(connection) Q_UNUSED(dispatchOperation) Q_UNUSED(requestsSatisfied) Q_UNUSED(observerInfo) if (!ProtocolManager::instance()->isProtocolSupported(account->protocolName())) { context->setFinishedWithError(TP_QT_ERROR_NOT_CAPABLE, "The account for this request is not supported."); return; } Q_FOREACH (Tp::ChannelPtr channel, channels) { mContexts[channel.data()] = context; mChannels.append(channel); connect(channel.data(), SIGNAL(invalidated(Tp::DBusProxy*,const QString&, const QString&)), SLOT(onChannelInvalidated())); Tp::CallChannelPtr callChannel = Tp::CallChannelPtr::dynamicCast(channel); if (callChannel) { Tp::PendingReady *ready = callChannel->becomeReady(Tp::Features() << Tp::CallChannel::FeatureCore << Tp::CallChannel::FeatureCallMembers << Tp::CallChannel::FeatureCallState << Tp::CallChannel::FeatureContents << Tp::CallChannel::FeatureLocalHoldState); connect(ready, SIGNAL(finished(Tp::PendingOperation*)), SLOT(onCallChannelReady(Tp::PendingOperation*))); mReadyMap[ready] = callChannel; } Tp::TextChannelPtr textChannel = Tp::TextChannelPtr::dynamicCast(channel); if (textChannel) { Tp::PendingReady *ready = textChannel->becomeReady(Tp::Features() << Tp::TextChannel::FeatureCore << Tp::TextChannel::FeatureChatState << Tp::TextChannel::FeatureMessageCapabilities << Tp::TextChannel::FeatureMessageQueue << Tp::TextChannel::FeatureMessageSentSignal); connect(ready, SIGNAL(finished(Tp::PendingOperation*)), SLOT(onTextChannelReady(Tp::PendingOperation*))); mReadyMap[ready] = textChannel; } } } void ChannelObserver::onCallChannelReady(Tp::PendingOperation *op) { Tp::PendingReady *ready = qobject_cast(op); if (!ready) { qCritical() << "Pending operation is not a pending ready:" << op; return; } if (!mReadyMap.contains(ready)) { qWarning() << "Pending ready finished but not on the map:" << ready; return; } Tp::CallChannelPtr callChannel = Tp::CallChannelPtr::dynamicCast(mReadyMap[ready]); mReadyMap.remove(ready); if (!callChannel) { qWarning() << "Ready channel is not a call channel:" << callChannel; return; } // save the timestamp as a property in the call channel callChannel->setProperty("timestamp", QDateTime::currentDateTime()); if (callChannel->callState() == Tp::CallStateActive) { callChannel->setProperty("activeTimestamp", QDateTime::currentDateTime()); } Q_EMIT callChannelAvailable(callChannel); checkContextFinished(callChannel.data()); } void ChannelObserver::onChannelInvalidated() { Tp::ChannelPtr channel(qobject_cast(sender())); mChannels.removeAll(channel); } void ChannelObserver::onTextChannelReady(Tp::PendingOperation *op) { Tp::PendingReady *ready = qobject_cast(op); if (!ready) { qCritical() << "Pending operation is not a pending ready:" << op; return; } if (!mReadyMap.contains(ready)) { qWarning() << "Pending ready finished but not on the map:" << ready; return; } Tp::TextChannelPtr textChannel = Tp::TextChannelPtr::dynamicCast(mReadyMap[ready]); mReadyMap.remove(ready); if (!textChannel) { qWarning() << "Ready channel is not a call channel:" << textChannel; return; } Q_EMIT textChannelAvailable(textChannel); checkContextFinished(textChannel.data()); } void ChannelObserver::checkContextFinished(Tp::Channel *channel) { if (!mContexts.contains(channel)) { qWarning() << "Context for channel not available:" << channel; return; } Tp::MethodInvocationContextPtr<> context = mContexts[channel]; mContexts.remove(channel); // check if this is the last channel from the context Q_FOREACH(Tp::MethodInvocationContextPtr<> otherContext, mContexts.values()) { // if we find the context, just return from the function. We need to wait // for the other channels to become ready before setting the context finished if (otherContext == context) { return; } } context->setFinished(); } telephony-service-0.5.3/libtelephonyservice/channelobserver.h000066400000000000000000000043721455543255600246200ustar00rootroot00000000000000/* * Copyright (C) 2012 Canonical, Ltd. * * Authors: * Gustavo Pichorim Boiko * * This file is part of telephony-service. * * telephony-service is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; version 3. * * telephony-service 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 . */ #ifndef CHANNELOBSERVER_H #define CHANNELOBSERVER_H #include #include #include #include class ChannelObserver : public QObject, public Tp::AbstractClientObserver { Q_OBJECT public: explicit ChannelObserver(QObject *parent = 0); Tp::ChannelClassSpecList channelFilters() const; void observeChannels(const Tp::MethodInvocationContextPtr<> &context, const Tp::AccountPtr &account, const Tp::ConnectionPtr &connection, const QList &channels, const Tp::ChannelDispatchOperationPtr &dispatchOperation, const QList &requestsSatisfied, const Tp::AbstractClientObserver::ObserverInfo &observerInfo); Q_SIGNALS: void callEnded(const Tp::CallChannelPtr &channel); void textChannelAvailable(const Tp::TextChannelPtr &channel); void callChannelAvailable(const Tp::CallChannelPtr &channel); protected Q_SLOTS: void onChannelInvalidated(); void onCallChannelReady(Tp::PendingOperation *op); void onTextChannelReady(Tp::PendingOperation *op); protected: void checkContextFinished(Tp::Channel *channel); private: QMap > mContexts; QMap mReadyMap; QList mChannels; }; #endif // CHANNELOBSERVER_H telephony-service-0.5.3/libtelephonyservice/chatentry.cpp000066400000000000000000000677351455543255600240100ustar00rootroot00000000000000/* * Copyright (C) 2015-2016 Canonical, Ltd. * * Authors: * Tiago Salem Herrmann * Gustavo Pichorim Boiko * * This file is part of telephony-service. * * telephony-service is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; version 3. * * telephony-service 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 . */ #include "telepathyhelper.h" #include "accountentry.h" #include "chatentry.h" #include "chatmanager.h" #include "participant.h" // FIXME: move this class to libtelephonyservice #include "handler/messagejob.h" #include #include #include #include #include #include #include Q_DECLARE_METATYPE(ContactChatStates) Q_DECLARE_METATYPE(Participant) const QDBusArgument &operator>>(const QDBusArgument &argument, RolesMap &roles) { argument.beginMap(); while ( !argument.atEnd() ) { argument.beginMapEntry(); uint key,value; argument >> key >> value; argument.endMapEntry(); roles[key] = value; } argument.endMap(); return argument; } ChatEntry::ChatEntry(QObject *parent) : QObject(parent), mChatType(ChatTypeNone), mAutoRequest(true), mCanUpdateConfiguration(false), mSelfContactRoles(0), roomInterface(NULL), roomConfigInterface(NULL), subjectInterface(NULL), rolesInterface(NULL) { qRegisterMetaType(); qRegisterMetaType(); qRegisterMetaType(); qDBusRegisterMetaType(); } void ChatEntry::onRoomPropertiesChanged(const QVariantMap &changed,const QStringList &invalidated) { if (changed.contains("RoomName")) { setRoomName(changed["RoomName"].toString()); } if (changed.contains("Title")) { mTitle = changed["Title"].toString(); Q_EMIT titleChanged(); } if (changed.contains("CanUpdateConfiguration")) { mCanUpdateConfiguration = changed["CanUpdateConfiguration"].toBool(); Q_EMIT canUpdateConfigurationChanged(); } } void ChatEntry::onSendingMessageFinished() { QDBusInterface *job = qobject_cast(sender()); if (!job) { return; } QString accountId = job->property("accountId").toString(); QString messageId = job->property("messageId").toString(); QString channelObjectPath = job->property("channelObjectPath").toString(); QVariantMap properties = job->property("properties").toMap(); qDebug() << accountId << messageId << channelObjectPath << properties; Tp::TextChannelPtr channel = ChatManager::instance()->channelForObjectPath(channelObjectPath); if (channel.isNull()) { Q_EMIT messageSendingFailed(accountId, messageId, properties); job->deleteLater(); return; } // even if sending the message fails, we can use the channel if available addChannel(channel); if (job->property("status").toInt() == MessageJob::Failed || channel.isNull()) { Q_EMIT messageSendingFailed(accountId, messageId, properties); job->deleteLater(); return; } Q_EMIT messageSent(accountId, messageId, properties); job->deleteLater(); } void ChatEntry::onGroupMembersChanged(const Tp::Contacts &groupMembersAdded, const Tp::Contacts &groupLocalPendingMembersAdded, const Tp::Contacts &groupRemotePendingMembersAdded, const Tp::Contacts &groupMembersRemoved, const Tp::Channel::GroupMemberChangeDetails &details) { Tp::TextChannel *channel(qobject_cast(sender())); AccountEntry *account = TelepathyHelper::instance()->accountForId(mAccountId); if (channel) { account = TelepathyHelper::instance()->accountForConnection(channel->connection()); } if (!account) { qWarning() << "Could not find account"; return; } updateParticipants(mParticipants, groupMembersAdded, groupMembersRemoved, account, Participant::ParticipantStateRegular); updateParticipants(mLocalPendingParticipants, groupLocalPendingMembersAdded, groupMembersRemoved + groupMembersAdded, // if contacts move to the main list, remove from the pending one account, Participant::ParticipantStateRemotePending); updateParticipants(mRemotePendingParticipants, groupRemotePendingMembersAdded, groupMembersRemoved + groupMembersAdded, // if contacts move to the main list, remove from the pending one account, Participant::ParticipantStateLocalPending); // generate the list of participant IDs again mParticipantIds.clear(); Q_FOREACH(Participant *participant, mParticipants) { mParticipantIds << participant->identifier(); } Q_EMIT participantsChanged(); Q_EMIT localPendingParticipantsChanged(); Q_EMIT remotePendingParticipantsChanged(); Q_EMIT participantIdsChanged(); } void ChatEntry::onRolesChanged(const HandleRolesMap &added, const HandleRolesMap &removed) { Tp::TextChannel* channel = 0; if (rolesInterface) { if (mRolesMap.isEmpty()) { mRolesMap = rolesInterface->getRoles(); } channel = qvariant_cast(rolesInterface->property("channel")); } QMapIterator it(removed); while (it.hasNext()) { it.next(); mRolesMap.remove(it.key()); } QMapIterator it2(added); while (it2.hasNext()) { it2.next(); mRolesMap[it2.key()] = it2.value(); } // TODO avoid iterating over all participants when not needed Q_FOREACH(Participant* participant, mParticipants) { if (mRolesMap.contains(participant->handle())) { participant->setRoles(mRolesMap[participant->handle()]); } } Q_FOREACH(Participant* participant, mLocalPendingParticipants) { if (mRolesMap.contains(participant->handle())) { participant->setRoles(mRolesMap[participant->handle()]); } } Q_FOREACH(Participant* participant, mRemotePendingParticipants) { if (mRolesMap.contains(participant->handle())) { participant->setRoles(mRolesMap[participant->handle()]); } } if (!channel) { return; } Tp::ContactPtr selfContact = channel->groupSelfContact(); if (!selfContact) { return; } mSelfContactRoles = mRolesMap[selfContact->handle().at(0)]; Q_EMIT selfContactRolesChanged(); } void ChatEntry::onChatStartingFinished() { QDBusInterface *job = qobject_cast(sender()); if (!job) { return; } QString accountId = job->property("accountId").toString(); QString channelObjectPath = job->property("channelObjectPath").toString(); QVariantMap properties = job->property("properties").toMap(); Tp::TextChannelPtr channel = ChatManager::instance()->channelForObjectPath(channelObjectPath); if (channel.isNull()) { Q_EMIT startChatFailed(); job->deleteLater(); return; } // even if sending the message fails, we can use the channel if available addChannel(channel); if (job->property("status").toInt() == MessageJob::Failed || channel.isNull()) { Q_EMIT startChatFailed(); job->deleteLater(); return; } Q_EMIT chatReady(); job->deleteLater(); } QString ChatEntry::roomName() const { return mRoomName; } void ChatEntry::setRoomName(const QString &name) { mRoomName = name; Q_EMIT roomNameChanged(); // FIXME: we need to invalidate the existing channels & data and start fresh } bool ChatEntry::autoRequest() const { return mAutoRequest; } QList ChatEntry::allParticipants() const { return mParticipants + mLocalPendingParticipants + mRemotePendingParticipants; } bool ChatEntry::canUpdateConfiguration() const { return mCanUpdateConfiguration; } void ChatEntry::setAutoRequest(bool autoRequest) { mAutoRequest = autoRequest; } QString ChatEntry::title() const { return mTitle; } void ChatEntry::setTitle(const QString &title) { // if no channels available, just set the variable // we can use that to start a new chat with a predefined title if (mChannels.isEmpty()) { mTitle = title; Q_EMIT titleChanged(); return; } // if the user can't update the configuration, just return from this point. if (!mCanUpdateConfiguration) { return; } QDBusInterface *handlerIface = TelepathyHelper::instance()->handlerInterface(); Q_FOREACH(const Tp::TextChannelPtr channel, mChannels) { if (!channel->hasInterface(TP_QT_IFACE_CHANNEL_INTERFACE_ROOM_CONFIG)) { qWarning() << "Channel doesn't have the RoomConfig interface"; return; } QDBusReply reply = handlerIface->call("ChangeRoomTitle", channel->objectPath(), title); if (!reply.isValid() || !reply.value()) { Q_EMIT setTitleFailed(); } } } ChatEntry::~ChatEntry() { QMap tmp = mChatStates; mChatStates.clear(); Q_EMIT chatStatesChanged(); QMapIterator it(tmp); while (it.hasNext()) { it.next(); delete it.value(); } } QString ChatEntry::chatId() const { return mChatId; } void ChatEntry::setChatId(const QString &id) { mChatId = id; Q_EMIT chatIdChanged(); // FIXME: we need to invalidate the existing channels & data and start fresh } QString ChatEntry::accountId() const { return mAccountId; } void ChatEntry::setAccountId(const QString &id) { mAccountId = id; Q_EMIT accountIdChanged(); // FIXME: we need to invalidate the existing channels & data and start fresh } void ChatEntry::onChatStateChanged(const Tp::ContactPtr &contact, Tp::ChannelChatState state) { if (mChatStates.contains(contact->id())) { mChatStates[contact->id()]->setState(state); return; } ContactChatState *newState = new ContactChatState(contact->id(), state); mChatStates[contact->id()] = newState; Q_EMIT chatStatesChanged(); } ChatEntry::ChatType ChatEntry::chatType() const { return mChatType; } void ChatEntry::setChatType(ChatEntry::ChatType type) { mChatType = type; Q_EMIT chatTypeChanged(); } QStringList ChatEntry::participantIds() const { return mParticipantIds; } void ChatEntry::setParticipantIds(const QStringList &participantIds) { mParticipantIds = participantIds; Q_EMIT participantIdsChanged(); // FIXME: we need to invalidate the existing channels & data and start fresh } QQmlListProperty ChatEntry::participants() { return QQmlListProperty(this, &mParticipants, participantsCount, participantsAt); } QQmlListProperty ChatEntry::localPendingParticipants() { return QQmlListProperty(this, &mLocalPendingParticipants, participantsCount, participantsAt); } QQmlListProperty ChatEntry::remotePendingParticipants() { return QQmlListProperty(this, &mRemotePendingParticipants, participantsCount, participantsAt); } int ChatEntry::participantsCount(QQmlListProperty *p) { QList *list = static_cast*>(p->data); return list->count(); } Participant *ChatEntry::participantsAt(QQmlListProperty *p, int index) { QList *list = static_cast*>(p->data); return list->at(index); } QQmlListProperty ChatEntry::chatStates() { return QQmlListProperty(this, 0, chatStatesCount, chatStatesAt); } int ChatEntry::chatStatesCount(QQmlListProperty *p) { ChatEntry *entry = qobject_cast(p->object); if (!entry) { return 0; } return entry->mChatStates.count(); } ContactChatState *ChatEntry::chatStatesAt(QQmlListProperty *p, int index) { ChatEntry *entry = qobject_cast(p->object); if (!entry) { return 0; } return entry->mChatStates.values()[index]; } void ChatEntry::sendMessage(const QString &accountId, const QString &message, const QVariant &attachments, const QVariantMap &properties) { QString objPath = ChatManager::instance()->sendMessage(accountId, message, attachments, properties); QDBusInterface *sendingJob = new QDBusInterface(TelepathyHelper::instance()->handlerInterface()->service(), objPath, "com.lomiri.TelephonyServiceHandler.MessageSendingJob"); connect(sendingJob, SIGNAL(finished()), SLOT(onSendingMessageFinished())); } void ChatEntry::classBegin() { // nothing to do here } void ChatEntry::componentComplete() { QVariantMap properties = generateProperties(); QList channels = ChatManager::instance()->channelForProperties(properties); QList accounts; if (!channels.isEmpty()) { setChannels(channels); } if (chatType() == ChatTypeNone) { return; } // now filter out the Phone accounts from the accounts list Q_FOREACH(AccountEntry *account, TelepathyHelper::instance()->accounts()) { if (account->active() && account->type() != AccountEntry::PhoneAccount) { accounts << account; // when account is activated, create the channel if it not exists. This can happen // when being in the conversation or in conversation details page while account is offline // and become online at that moment. Use UniqueConnection for not duplicating same signal-slot connect(account, SIGNAL(activeChanged()), SLOT(onAccountActiveChanged()), Qt::UniqueConnection); } } // now check that we have channels for all !Phone accounts // we need channels to be able to show typing notifications Q_FOREACH(const Tp::TextChannelPtr &channel, channels) { AccountEntry *account = TelepathyHelper::instance()->accountForConnection(channel->connection()); accounts.removeAll(account); } if (mAutoRequest) { // if the chat type is room we should only request the channel to the desired account. if (chatType() == ChatTypeRoom) { AccountEntry *account = TelepathyHelper::instance()->accountForId(mAccountId); if (account && accounts.contains(account)) { ChatManager::instance()->startChat(account->accountId(), properties); } } else { // if there is any remaining account, request to start chatting using the account Q_FOREACH(AccountEntry *account, accounts) { ChatManager::instance()->startChat(account->accountId(), properties); } } } connect(ChatManager::instance(), &ChatManager::textChannelAvailable, this, &ChatEntry::onTextChannelAvailable); } void ChatEntry::onAccountActiveChanged() { AccountEntry* account = qobject_cast(sender()); if (account->active()) { if (mAutoRequest) { bool hasChannel = false; Q_FOREACH(const Tp::TextChannelPtr &channel, mChannels) { AccountEntry *current = TelepathyHelper::instance()->accountForConnection(channel->connection()); if (current->accountId() == account->accountId()) { hasChannel = true; break; } } if (!hasChannel) { ChatManager::instance()->startChat(account->accountId(), generateProperties()); } } } } void ChatEntry::setChannels(const QList &channels) { Q_FOREACH(const Tp::TextChannelPtr &channel, channels) { addChannel(channel); } } void ChatEntry::addChannel(const Tp::TextChannelPtr &channel) { qDebug() << "adding channel" << channel->objectPath(); if (mChannels.contains(channel)) { return; } roomInterface = channel->optionalInterface(); roomConfigInterface = channel->optionalInterface(); subjectInterface = channel->optionalInterface(); rolesInterface = channel->optionalInterface(); if (roomInterface) { roomInterface->setProperty("channel", QVariant::fromValue(channel.data())); roomInterface->setMonitorProperties(true); connect(roomInterface, SIGNAL(propertiesChanged(const QVariantMap &,const QStringList &)), SLOT(onRoomPropertiesChanged(const QVariantMap &,const QStringList &))); } if (roomConfigInterface) { roomConfigInterface->setProperty("channel", QVariant::fromValue(channel.data())); roomConfigInterface->setMonitorProperties(true); Tp::PendingVariantMap *pendingResult = roomConfigInterface->requestAllProperties(); connect(pendingResult, &Tp::PendingOperation::finished, [=](){ if (!pendingResult->isError()) { onRoomPropertiesChanged(pendingResult->result(), QStringList()); } }); connect(roomConfigInterface, SIGNAL(propertiesChanged(const QVariantMap &,const QStringList &)), SLOT(onRoomPropertiesChanged(const QVariantMap &,const QStringList &))); } if (subjectInterface) { subjectInterface->setProperty("channel", QVariant::fromValue(channel.data())); subjectInterface->setMonitorProperties(true); connect(subjectInterface, SIGNAL(propertiesChanged(const QVariantMap &,const QStringList &)), SLOT(onRoomPropertiesChanged(const QVariantMap &,const QStringList &))); } if (rolesInterface) { rolesInterface->setProperty("channel", QVariant::fromValue(channel.data())); rolesInterface->setMonitorProperties(true); connect(rolesInterface, SIGNAL(propertiesChanged(const QVariantMap &,const QStringList &)), SLOT(onRoomPropertiesChanged(const QVariantMap &,const QStringList &))); connect(rolesInterface, SIGNAL(RolesChanged(const HandleRolesMap&, const HandleRolesMap&)), SLOT(onRolesChanged(const HandleRolesMap&, const HandleRolesMap&))); } connect(channel.data(), SIGNAL(chatStateChanged(const Tp::ContactPtr &, Tp::ChannelChatState)), this, SLOT(onChatStateChanged(const Tp::ContactPtr &,Tp::ChannelChatState))); // FIXME: check how to handle multiple channels in a better way, // for now, use the info from the last available channel clearParticipants(); onGroupMembersChanged(channel->groupContacts(false), channel->groupLocalPendingContacts(false), channel->groupRemotePendingContacts(false), Tp::Contacts(), Tp::Channel::GroupMemberChangeDetails()); onRolesChanged(HandleRolesMap(), HandleRolesMap()); connect(channel.data(), SIGNAL(groupMembersChanged(const Tp::Contacts &, const Tp::Contacts &, const Tp::Contacts &, const Tp::Contacts &, const Tp::Channel::GroupMemberChangeDetails &)), this, SLOT(onGroupMembersChanged(Tp::Contacts,Tp::Contacts,Tp::Contacts,Tp::Contacts, Tp::Channel::GroupMemberChangeDetails))); connect(channel.data(), SIGNAL(groupFlagsChanged(Tp::ChannelGroupFlags,Tp::ChannelGroupFlags, Tp::ChannelGroupFlags)), this, SIGNAL(groupFlagsChanged())); connect(channel.data(), SIGNAL(invalidated(Tp::DBusProxy*,const QString&, const QString&)), this, SLOT(onChannelInvalidated())); Q_FOREACH (Tp::ContactPtr contact, channel->groupContacts(false)) { // FIXME: we should not create new chat states for contacts already found in previous channels ContactChatState *state = new ContactChatState(contact->id(), channel->chatState(contact)); mChatStates[contact->id()] = state; } Q_EMIT chatStatesChanged(); // now fill the properties with the data from the channel if (chatType() != (ChatType)channel->targetHandleType()) { setChatType((ChatType)channel->targetHandleType()); } if (chatType() == ChatTypeRoom && mChatId != channel->targetId()) { setChatId(channel->targetId()); } mChannels << channel; Q_EMIT activeChanged(); Q_EMIT groupFlagsChanged(); } void ChatEntry::setChatState(ChatState state) { Q_FOREACH(const Tp::TextChannelPtr channel, mChannels) { if (channel->hasChatStateInterface()) { channel->requestChatState((Tp::ChannelChatState)state); } } } bool ChatEntry::destroyRoom() { if (mChannels.isEmpty()) { qWarning() << "Cannot destroy group. No channels available"; return false; } QDBusInterface *handlerIface = TelepathyHelper::instance()->handlerInterface(); Q_FOREACH(const Tp::TextChannelPtr channel, mChannels) { if (!channel->hasInterface(TP_QT_IFACE_CHANNEL_INTERFACE_DESTROYABLE)) { qWarning() << "Text channel doesn't have the destroyable interface"; return false; } QDBusReply reply = handlerIface->call("DestroyTextChannel", channel->objectPath()); if (!reply.isValid() || !reply.value()) { qWarning() << "Failed to destroy text channel."; return false; } } return true; } QVariantMap ChatEntry::generateProperties() const { QVariantMap properties; properties["participantIds"] = participantIds(); properties["chatType"] = (int)chatType(); properties["chatId"] = chatId(); properties["threadId"] = chatId(); properties["title"] = title(); if (chatType() == ChatEntry::ChatTypeRoom) { properties["accountId"] = accountId(); } return properties; } void ChatEntry::clearParticipants() { Q_FOREACH(Participant *participant, mParticipants) { Q_EMIT participantRemoved(participant); participant->deleteLater(); } Q_FOREACH(Participant *participant, mLocalPendingParticipants) { Q_EMIT participantRemoved(participant); participant->deleteLater(); } Q_FOREACH(Participant *participant, mRemotePendingParticipants) { Q_EMIT participantRemoved(participant); participant->deleteLater(); } mParticipants.clear(); mLocalPendingParticipants.clear(); mRemotePendingParticipants.clear(); mRolesMap.clear(); mSelfContactRoles = 0; } void ChatEntry::updateParticipants(QList &list, const Tp::Contacts &added, const Tp::Contacts &removed, AccountEntry *account, Participant::ParticipantState pending) { // first look for removed members Q_FOREACH(Tp::ContactPtr contact, removed) { Q_FOREACH(Participant *participant, list) { if (account->compareIds(contact->id(), participant->identifier())) { Q_EMIT participantRemoved(participant); participant->deleteLater(); list.removeOne(participant); break; } } } if (rolesInterface && mRolesMap.isEmpty()) { mRolesMap = rolesInterface->getRoles(); } // now add the new participants // FIXME: check for duplicates? Q_FOREACH(Tp::ContactPtr contact, added) { uint handle = contact->handle().at(0); Participant* participant = new Participant(contact->id(), mRolesMap[handle], handle, QString(), pending, this); Q_EMIT participantAdded(participant); list << participant; } } void ChatEntry::onTextChannelAvailable(const Tp::TextChannelPtr &channel) { if (ChatManager::channelMatchProperties(channel, generateProperties())) { addChannel(channel); } } void ChatEntry::inviteParticipants(const QStringList &participants, const QString &message) { if (chatType() != ChatEntry::ChatTypeRoom || mChannels.size() != 1) { Q_EMIT inviteParticipantsFailed(); return; } Tp::TextChannelPtr channel = mChannels.first(); if (!channel->groupCanAddContacts() || !channel->connection()) { Q_EMIT inviteParticipantsFailed(); return; } QDBusInterface *handlerIface = TelepathyHelper::instance()->handlerInterface(); QDBusReply reply = handlerIface->call("InviteParticipants", channel->objectPath(), participants, message); if (!reply.isValid()) { Q_EMIT inviteParticipantsFailed(); } } void ChatEntry::removeParticipants(const QStringList &participants, const QString &message) { if (chatType() != ChatEntry::ChatTypeRoom || mChannels.size() != 1) { Q_EMIT removeParticipantsFailed(); return; } Tp::TextChannelPtr channel = mChannels.first(); if (!channel->groupCanAddContacts() || !channel->connection()) { Q_EMIT removeParticipantsFailed(); return; } QDBusInterface *handlerIface = TelepathyHelper::instance()->handlerInterface(); QDBusReply reply = handlerIface->call("RemoveParticipants", channel->objectPath(), participants, message); if (!reply.isValid()) { Q_EMIT removeParticipantsFailed(); } } bool ChatEntry::leaveChat(const QString &message) { if (chatType() != ChatEntry::ChatTypeRoom || mChannels.size() != 1) { return false; } Tp::TextChannelPtr channel = mChannels.first(); if (!channel->connection()) { return false; } QDBusInterface *handlerIface = TelepathyHelper::instance()->handlerInterface(); QDBusReply reply = handlerIface->call("LeaveChat", channel->objectPath(), message); return reply.isValid(); } void ChatEntry::startChat() { QString objPath = ChatManager::instance()->startChat(accountId(), generateProperties()); QDBusInterface *job = new QDBusInterface(TelepathyHelper::instance()->handlerInterface()->service(), objPath, "com.lomiri.TelephonyServiceHandler.ChatStartingJob"); connect(job, SIGNAL(finished()), SLOT(onChatStartingFinished())); } void ChatEntry::onChannelInvalidated() { qDebug() << __PRETTY_FUNCTION__; Tp::TextChannelPtr channel(qobject_cast(sender())); mChannels.removeAll(channel); if (roomInterface && roomInterface->property("channel").value() == channel.data()) { roomInterface->disconnect(this); roomInterface = 0; } if (roomConfigInterface && roomConfigInterface->property("channel").value() == channel.data()) { roomConfigInterface->disconnect(this); roomConfigInterface = 0; } if (subjectInterface && subjectInterface->property("channel").value() == channel.data()) { subjectInterface->disconnect(this); subjectInterface = 0; } if (rolesInterface && rolesInterface->property("channel").value() == channel.data()) { rolesInterface->disconnect(this); rolesInterface = 0; } clearParticipants(); Q_EMIT activeChanged(); Q_EMIT groupFlagsChanged(); Q_EMIT selfContactRolesChanged(); } bool ChatEntry::isActive() const { return mChannels.size() > 0; } uint ChatEntry::groupFlags() const { if (mChannels.isEmpty()) { return 0; } return mChannels[0]->groupFlags(); } uint ChatEntry::selfContactRoles() const { return mSelfContactRoles; } telephony-service-0.5.3/libtelephonyservice/chatentry.h000066400000000000000000000234061455543255600234400ustar00rootroot00000000000000/* * Copyright (C) 2015-2016 Canonical, Ltd. * * Authors: * Tiago Salem Herrmann * Gustavo Pichorim Boiko * * This file is part of telephony-service. * * telephony-service is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; version 3. * * telephony-service 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 . */ #ifndef CHATENTRY_H #define CHATENTRY_H #include #include #include #include #include "rolesinterface.h" #include "participant.h" class AccountEntry; class Participant; typedef QMap RolesMap; Q_DECLARE_METATYPE(RolesMap) class ContactChatState : public QObject { Q_OBJECT Q_PROPERTY(QString contactId READ contactId CONSTANT) Q_PROPERTY(int state READ state WRITE setState NOTIFY stateChanged) public: ContactChatState(const QString &contactId, int state) : mContactId(contactId), mState(state) {} QString contactId() { return mContactId; } int state() { return mState; } void setState(int state) { mState = state; Q_EMIT stateChanged(); } Q_SIGNALS: void stateChanged(); private: QString mContactId; int mState; }; typedef QList ContactChatStates; class ChatEntry : public QObject, public QQmlParserStatus { Q_OBJECT Q_INTERFACES(QQmlParserStatus) Q_PROPERTY(ChatType chatType READ chatType WRITE setChatType NOTIFY chatTypeChanged) Q_PROPERTY(QStringList participantIds READ participantIds WRITE setParticipantIds NOTIFY participantIdsChanged) Q_PROPERTY(QQmlListProperty participants READ participants NOTIFY participantsChanged) Q_PROPERTY(QQmlListProperty localPendingParticipants READ localPendingParticipants NOTIFY localPendingParticipantsChanged) Q_PROPERTY(QQmlListProperty remotePendingParticipants READ remotePendingParticipants NOTIFY remotePendingParticipantsChanged) Q_PROPERTY(QString roomName READ roomName WRITE setRoomName NOTIFY roomNameChanged) Q_PROPERTY(QString chatId READ chatId WRITE setChatId NOTIFY chatIdChanged) Q_PROPERTY(QString accountId READ accountId WRITE setAccountId NOTIFY accountIdChanged) Q_PROPERTY(QString title READ title WRITE setTitle NOTIFY titleChanged) Q_PROPERTY(QQmlListProperty chatStates READ chatStates NOTIFY chatStatesChanged) Q_PROPERTY(bool autoRequest READ autoRequest WRITE setAutoRequest CONSTANT) Q_PROPERTY(bool canUpdateConfiguration READ canUpdateConfiguration NOTIFY canUpdateConfigurationChanged) Q_PROPERTY(bool active READ isActive NOTIFY activeChanged) Q_PROPERTY(uint groupFlags READ groupFlags NOTIFY groupFlagsChanged); Q_PROPERTY(uint selfContactRoles READ selfContactRoles NOTIFY selfContactRolesChanged); Q_ENUMS(ChatType) Q_ENUMS(ChatState) Q_ENUMS(ChannelGroupFlag) public: enum ChatType { ChatTypeNone = Tp::HandleTypeNone, ChatTypeContact = Tp::HandleTypeContact, ChatTypeRoom = Tp::HandleTypeRoom }; enum ChatState { ChannelChatStateGone = Tp::ChannelChatStateGone, ChannelChatStateInactive = Tp::ChannelChatStateInactive, ChannelChatStateActive = Tp::ChannelChatStateActive, ChannelChatStatePaused = Tp::ChannelChatStatePaused, ChannelChatStateComposing = Tp::ChannelChatStateComposing }; enum ChannelGroupFlag { ChannelGroupFlagCanAdd = Tp::ChannelGroupFlagCanAdd, ChannelGroupFlagCanRemove = Tp::ChannelGroupFlagCanRemove, ChannelGroupFlagCanRescind = Tp::ChannelGroupFlagCanRescind, ChannelGroupFlagMessageAdd = Tp::ChannelGroupFlagMessageAdd, ChannelGroupFlagMessageRemove = Tp::ChannelGroupFlagMessageRemove, ChannelGroupFlagMessageAccept = Tp::ChannelGroupFlagMessageAccept, ChannelGroupFlagMessageReject = Tp::ChannelGroupFlagMessageReject, ChannelGroupFlagMessageRescind = Tp::ChannelGroupFlagMessageRescind, ChannelGroupFlagChannelSpecificHandles = Tp::ChannelGroupFlagChannelSpecificHandles, ChannelGroupFlagOnlyOneGroup = Tp::ChannelGroupFlagOnlyOneGroup, ChannelGroupFlagHandleOwnersNotAvailable = Tp::ChannelGroupFlagHandleOwnersNotAvailable, ChannelGroupFlagProperties = Tp::ChannelGroupFlagProperties, ChannelGroupFlagMembersChangedDetailed = Tp::ChannelGroupFlagMembersChangedDetailed, ChannelGroupFlagMessageDepart = Tp::ChannelGroupFlagMessageDepart }; explicit ChatEntry(QObject *parent = 0); ~ChatEntry(); QStringList participantIds() const; void setParticipantIds(const QStringList &participantIds); QQmlListProperty participants(); QQmlListProperty localPendingParticipants(); QQmlListProperty remotePendingParticipants(); static int participantsCount(QQmlListProperty *p); static Participant *participantsAt(QQmlListProperty *p, int index); ChatType chatType() const; void setChatType(ChatType type); QString chatId() const; void setChatId(const QString &id); QString accountId() const; void setAccountId(const QString &id); QString roomName() const; void setRoomName(const QString &name); QString title() const; void setTitle(const QString & title); void setAutoRequest(bool autoRequest); bool autoRequest() const; bool canUpdateConfiguration() const; QQmlListProperty chatStates(); static int chatStatesCount(QQmlListProperty *p); static ContactChatState *chatStatesAt(QQmlListProperty *p, int index); uint groupFlags() const; uint selfContactRoles() const; // QML parser status bool isActive() const; void classBegin(); void componentComplete(); QList allParticipants() const; public Q_SLOTS: // FIXME: void or return something? void sendMessage(const QString &accountId, const QString &message, const QVariant &attachments = QVariant(), const QVariantMap &properties = QVariantMap()); void setChatState(ChatState state); bool destroyRoom(); void inviteParticipants(const QStringList &participantIds, const QString &message = QString()); void removeParticipants(const QStringList &participantIds, const QString &message = QString()); void startChat(); bool leaveChat(const QString &message = QString()); protected: void setChannels(const QList &channels); void addChannel(const Tp::TextChannelPtr &channel); QVariantMap generateProperties() const; void clearParticipants(); void updateParticipants(QList &list, const Tp::Contacts &added, const Tp::Contacts &removed, AccountEntry *account, Participant::ParticipantState = Participant::ParticipantStateRegular); private Q_SLOTS: void onTextChannelAvailable(const Tp::TextChannelPtr &channel); void onChannelInvalidated(); void onChatStateChanged(const Tp::ContactPtr &contact, Tp::ChannelChatState state); void onRoomPropertiesChanged(const QVariantMap &changed,const QStringList &invalidated); void onSendingMessageFinished(); void onGroupMembersChanged(const Tp::Contacts &groupMembersAdded, const Tp::Contacts &groupLocalPendingMembersAdded, const Tp::Contacts &groupRemotePendingMembersAdded, const Tp::Contacts &groupMembersRemoved, const Tp::Channel::GroupMemberChangeDetails &details); void onChatStartingFinished(); void onRolesChanged(const HandleRolesMap &added, const HandleRolesMap &removed); void onAccountActiveChanged(); Q_SIGNALS: void chatTypeChanged(); void chatIdChanged(); void accountIdChanged(); void chatStatesChanged(); void participantIdsChanged(); void participantsChanged(); void localPendingParticipantsChanged(); void remotePendingParticipantsChanged(); void roomNameChanged(); void titleChanged(); void canUpdateConfigurationChanged(); void inviteParticipantsFailed(); void removeParticipantsFailed(); void setTitleFailed(); void activeChanged(); void groupFlagsChanged(); void selfContactRolesChanged(); void messageSent(const QString &accountId, const QString &messageId, const QVariantMap &properties); void messageSendingFailed(const QString &accountId, const QString &messageId, const QVariantMap &properties); void chatReady(); void startChatFailed(); void participantAdded(Participant *participant); void participantRemoved(Participant *participant); private: QList mChannels; QStringList mParticipantIds; QList mParticipants; QList mLocalPendingParticipants; QList mRemotePendingParticipants; QMap mChatStates; QString mRoomName; QString mTitle; QString mChatId; QString mAccountId; ChatType mChatType; bool mAutoRequest; bool mCanUpdateConfiguration; uint mSelfContactRoles; Tp::Client::ChannelInterfaceRoomInterface *roomInterface; Tp::Client::ChannelInterfaceRoomConfigInterface *roomConfigInterface; Tp::Client::ChannelInterfaceSubjectInterface *subjectInterface; ChannelInterfaceRolesInterface *rolesInterface; RolesMap mRolesMap; }; #endif // CHATENTRY_H telephony-service-0.5.3/libtelephonyservice/chatmanager.cpp000066400000000000000000000265641455543255600242540ustar00rootroot00000000000000/* * Copyright (C) 2012-2016 Canonical, Ltd. * * Authors: * Gustavo Pichorim Boiko * Tiago Salem Herrmann * * This file is part of telephony-service. * * telephony-service is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; version 3. * * telephony-service 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 . */ #include "chatmanager.h" #include "chatentry.h" #include "telepathyhelper.h" #include "phoneutils.h" #include "config.h" #include "dbustypes.h" #include "accountentry.h" #include #include #include #include QDBusArgument &operator<<(QDBusArgument &argument, const AttachmentStruct &attachment) { argument.beginStructure(); argument << attachment.id << attachment.contentType << attachment.filePath; argument.endStructure(); return argument; } const QDBusArgument &operator>>(const QDBusArgument &argument, AttachmentStruct &attachment) { argument.beginStructure(); argument >> attachment.id >> attachment.contentType >> attachment.filePath; argument.endStructure(); return argument; } QVariantMap convertPropertiesForDBus(const QVariantMap &properties) { QVariantMap propMap = properties; // participants coming from qml are variants if (properties.contains("participantIds")) { QStringList participants = properties["participantIds"].toStringList(); if (!participants.isEmpty()) { propMap["participantIds"] = participants; } } return propMap; } ChatManager::ChatManager(QObject *parent) : QObject(parent) { qDBusRegisterMetaType(); qDBusRegisterMetaType(); // wait one second for other acknowledge calls before acknowledging messages to avoid many round trips mMessagesAckTimer.setInterval(25); mMessagesAckTimer.setSingleShot(true); connect(TelepathyHelper::instance(), SIGNAL(channelObserverUnregistered()), SLOT(onChannelObserverUnregistered())); connect(&mMessagesAckTimer, SIGNAL(timeout()), SLOT(onAckTimerTriggered())); connect(TelepathyHelper::instance(), SIGNAL(setupReady()), SLOT(onConnectedChanged())); } void ChatManager::onChannelObserverUnregistered() { mTextChannels.clear(); } void ChatManager::onConnectedChanged() { if (TelepathyHelper::instance()->ready()) { onAckTimerTriggered(); } } ChatManager *ChatManager::instance() { static ChatManager *manager = new ChatManager(); return manager; } QString ChatManager::startChat(const QString &accountId, const QVariantMap &properties) { QVariantMap propMap = convertPropertiesForDBus(properties); QDBusInterface *phoneAppHandler = TelepathyHelper::instance()->handlerInterface(); QDBusReply reply = phoneAppHandler->call("StartChat", accountId, propMap); return reply.value(); } QString ChatManager::sendMessage(const QString &accountId, const QString &message, const QVariant &attachments, const QVariantMap &properties) { AccountEntry *account = TelepathyHelper::instance()->accountForId(accountId); if (!account) { return QString(); } QVariantMap propMap = convertPropertiesForDBus(properties); // check if files should be copied to a temporary location before passing them to handler bool tmpFiles = (properties.contains("x-canonical-tmp-files") && properties["x-canonical-tmp-files"].toBool()); AttachmentList newAttachments; Q_FOREACH (const QVariant &attachment, attachments.toList()) { AttachmentStruct newAttachment; QVariantList list = attachment.toList(); newAttachment.id = list.at(0).toString(); newAttachment.contentType = list.at(1).toString(); if (tmpFiles) { // we can't give the original path to handler, as it might be removed // from history database by the time it tries to read the file, // so we duplicate the file and the handler will remove it QTemporaryFile tmpFile("/tmp/XXXXX"); tmpFile.setAutoRemove(false); if (!tmpFile.open()) { qWarning() << "Unable to create a temporary file"; return QString(); } QFile originalFile(list.at(2).toString()); if (!originalFile.open(QIODevice::ReadOnly)) { qWarning() << "Attachment file not found"; return QString(); } if (tmpFile.write(originalFile.readAll()) == -1) { qWarning() << "Failed to write attachment to a temporary file"; return QString(); } newAttachment.filePath = tmpFile.fileName(); tmpFile.close(); originalFile.close(); } else { newAttachment.filePath = list.at(2).toString(); } newAttachments << newAttachment; } QDBusInterface *phoneAppHandler = TelepathyHelper::instance()->handlerInterface(); QDBusReply reply = phoneAppHandler->call("SendMessage", account->accountId(), message, QVariant::fromValue(newAttachments), propMap); if (reply.isValid()) { return reply.value(); } return QString(); } QList ChatManager::channelForProperties(const QVariantMap &properties) { QList channels; Q_FOREACH (Tp::TextChannelPtr channel, mTextChannels) { if (channelMatchProperties(channel, properties)) { channels << channel; } } return channels; } Tp::TextChannelPtr ChatManager::channelForObjectPath(const QString &objectPath) { Q_FOREACH(Tp::TextChannelPtr channel, mTextChannels) { if (channel->objectPath() == objectPath) { return channel; } } return Tp::TextChannelPtr(); } bool ChatManager::channelMatchProperties(const Tp::TextChannelPtr &channel, const QVariantMap &properties) { QVariantMap propMap = properties; ChatEntry::ChatType chatType = ChatEntry::ChatTypeNone; QStringList participants; // participants coming from qml are variants if (properties.contains("participantIds")) { participants = properties["participantIds"].toStringList(); if (!participants.isEmpty()) { propMap["participantIds"] = participants; } } if (participants.isEmpty() && propMap.contains("participants")) { // try to generate list of participants from "participants" Q_FOREACH(const QVariant &participantMap, propMap["participants"].toList()) { if (participantMap.toMap().contains("identifier")) { participants << participantMap.toMap()["identifier"].toString(); } } if (!participants.isEmpty()) { propMap["participantIds"] = participants; } } if (properties.contains("chatType")) { chatType = (ChatEntry::ChatType)properties["chatType"].toInt(); } else { if (participants.length() == 1) { chatType = ChatEntry::ChatTypeContact; } } QString accountId; if (propMap.contains("accountId")) { accountId = propMap["accountId"].toString(); } if (participants.count() == 0 && chatType == ChatEntry::ChatTypeContact) { return false; } AccountEntry *account = TelepathyHelper::instance()->accountForConnection(channel->connection()); if (!account) { return false; } // only channels of the correct type should be returned if ((ChatEntry::ChatType)channel->targetHandleType() != chatType) { return false; } if (chatType == ChatEntry::ChatTypeRoom) { QString chatId = propMap["threadId"].toString(); if (!chatId.isEmpty() && channel->targetId() == chatId) { // if we are filtering by one specific accountId, make sure it matches if (!accountId.isEmpty() && accountId != account->accountId()) { return false; } return true; } return false; } Tp::Contacts contacts = channel->groupContacts(false); if (participants.count() != contacts.count()) { return false; } int participantCount = 0; // iterate over participants Q_FOREACH (const Tp::ContactPtr &contact, contacts) { // try the easiest first if (participants.contains(contact->id())) { participantCount++; continue; } // if no exact match, try to use the account's compare function Q_FOREACH(const QString &participant, participants) { if (account->compareIds(participant, contact->id())) { participantCount++; break; } } } return (participantCount == participants.count()); } void ChatManager::onTextChannelAvailable(Tp::TextChannelPtr channel) { mTextChannels << channel; connect(channel.data(), SIGNAL(invalidated(Tp::DBusProxy*,const QString&, const QString&)), SLOT(onChannelInvalidated())); Q_EMIT textChannelAvailable(channel); } void ChatManager::onChannelInvalidated() { Tp::TextChannelPtr channel(qobject_cast(sender())); mTextChannels.removeAll(channel); Q_EMIT textChannelInvalidated(channel); } void ChatManager::acknowledgeMessage(const QVariantMap &properties) { mMessagesToAck << QVariant::fromValue(convertPropertiesForDBus(properties)); mMessagesAckTimer.start(); } void ChatManager::acknowledgeAllMessages(const QVariantMap &properties) { QDBusInterface *phoneAppHandler = TelepathyHelper::instance()->handlerInterface(); phoneAppHandler->asyncCall("AcknowledgeAllMessages", convertPropertiesForDBus(properties)); } /** * Sends an asynchronous call through DBus to re-download a message identified by properties. * Parameters accountId, threadId, eventId uniquely identify the message, which shall be redownloaded. */ void ChatManager::redownloadMessage(const QString &accountId, const QString &threadId, const QString &eventId) { QDBusInterface *phoneAppHandler = TelepathyHelper::instance()->handlerInterface(); phoneAppHandler->asyncCall("RedownloadMessage", accountId, threadId, eventId); } void ChatManager::onAckTimerTriggered() { // ack all pending messages QDBusInterface *phoneAppHandler = TelepathyHelper::instance()->handlerInterface(); phoneAppHandler->asyncCall("AcknowledgeMessages", mMessagesToAck); mMessagesToAck.clear(); } void ChatManager::leaveRooms(const QString &accountId, const QString &message) { QDBusInterface *phoneAppHandler = TelepathyHelper::instance()->handlerInterface(); phoneAppHandler->asyncCall("LeaveRooms", accountId, message); } void ChatManager::leaveRoom(const QVariantMap &properties, const QString &message) { QList channels = channelForProperties(properties); if (channels.isEmpty()) { return; } QDBusInterface *handlerIface = TelepathyHelper::instance()->handlerInterface(); handlerIface->asyncCall("LeaveChat", channels.first()->objectPath(), message); } telephony-service-0.5.3/libtelephonyservice/chatmanager.h000066400000000000000000000050371455543255600237110ustar00rootroot00000000000000/* * Copyright (C) 2012-2016 Canonical, Ltd. * * Authors: * Gustavo Pichorim Boiko * Tiago Salem Herrmann * * This file is part of telephony-service. * * telephony-service is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; version 3. * * telephony-service 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 . */ #ifndef CHATMANAGER_H #define CHATMANAGER_H #include #include #include #include #include #include "dbustypes.h" class ChatManager : public QObject { Q_OBJECT public: static ChatManager *instance(); Q_INVOKABLE QString startChat(const QString &accountId, const QVariantMap &properties); QString sendMessage(const QString &accountId, const QString &message, const QVariant &attachments = QVariant(), const QVariantMap &properties = QVariantMap()); QList channelForProperties(const QVariantMap &properties); Tp::TextChannelPtr channelForObjectPath(const QString &objectPath); static bool channelMatchProperties(const Tp::TextChannelPtr &channel, const QVariantMap &properties); Q_SIGNALS: void textChannelAvailable(Tp::TextChannelPtr); void textChannelInvalidated(Tp::TextChannelPtr); public Q_SLOTS: void onTextChannelAvailable(Tp::TextChannelPtr channel); void onChannelInvalidated(); void onConnectedChanged(); void acknowledgeMessage(const QVariantMap &properties); void acknowledgeAllMessages(const QVariantMap &properties); void redownloadMessage(const QString &accountId, const QString &threadId, const QString &eventId); void leaveRooms(const QString &accountId, const QString &message); void leaveRoom(const QVariantMap &properties, const QString &message); private Q_SLOTS: void onChannelObserverUnregistered(); protected Q_SLOTS: void onAckTimerTriggered(); private: explicit ChatManager(QObject *parent = 0); QVariantList mMessagesToAck; QList mTextChannels; QTimer mMessagesAckTimer; }; #endif // CHATMANAGER_H telephony-service-0.5.3/libtelephonyservice/contactemailaddress.cpp000066400000000000000000000025071455543255600260020ustar00rootroot00000000000000/* * Copyright (C) 2012 Canonical, Ltd. * * Authors: * Gustavo Pichorim Boiko * * This file is part of telephony-service. * * telephony-service is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; version 3. * * telephony-service 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 . */ #include "contactemailaddress.h" ContactEmailAddress::ContactEmailAddress(const QContactDetail &detail, QObject *parent) : ContactDetail(detail, parent) { connect(this, SIGNAL(detailChanged()), SIGNAL(changed())); } QString ContactEmailAddress::emailAddress() const { return mDetail.value(QContactEmailAddress::FieldEmailAddress).toString(); } void ContactEmailAddress::setEmailAddress(const QString &value) { if (value != emailAddress()) { mDetail.setValue(QContactEmailAddress::FieldEmailAddress, value); Q_EMIT changed(); } } telephony-service-0.5.3/libtelephonyservice/contactemailaddress.h000066400000000000000000000025171455543255600254500ustar00rootroot00000000000000/* * Copyright (C) 2012 Canonical, Ltd. * * Authors: * Gustavo Pichorim Boiko * * This file is part of telephony-service. * * telephony-service is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; version 3. * * telephony-service 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 . */ #ifndef CONTACTEMAILADDRESS_H #define CONTACTEMAILADDRESS_H #include "contactdetail.h" #include class ContactEmailAddress : public ContactDetail { Q_OBJECT Q_PROPERTY(QString emailAddress READ emailAddress WRITE setEmailAddress NOTIFY changed) public: explicit ContactEmailAddress(const QContactDetail &detail = QContactEmailAddress(), QObject *parent = 0); QString emailAddress() const; void setEmailAddress(const QString &value); Q_SIGNALS: void changed(); }; #endif // CONTACTEMAILADDRESS_H telephony-service-0.5.3/libtelephonyservice/contactutils.cpp000066400000000000000000000036421455543255600245060ustar00rootroot00000000000000/* * Copyright (C) 2013 Canonical, Ltd. * * Authors: * Gustavo Pichorim Boiko * * This file is part of telephony-service. * * telephony-service is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; version 3. * * telephony-service 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 . */ #include "contactutils.h" #include #include QTCONTACTS_USE_NAMESPACE namespace ContactUtils { QContactManager *sharedManager(const QString &engine) { QString finalEngine = engine; if (!qgetenv("TELEPHONY_SERVICE_TEST").isEmpty()) { finalEngine = "memory"; } static QContactManager *instance = new QContactManager(finalEngine); return instance; } // Note: update GreeterContacts::mapToContact() if this function is modified // to use more than just first and last names. QString formatContactName(const QContact &contact) { // try contact display label QContactDisplayLabel displayLabel = contact.detail(); if (!displayLabel.isEmpty() && !displayLabel.label().isEmpty()) { return displayLabel.label(); } // if empty fallback to contact name QContactName name = contact.detail(); QString formattedName = name.firstName(); if (!name.middleName().isEmpty()) { formattedName += " " + name.middleName(); } if (!name.lastName().isEmpty()) { formattedName += " " + name.lastName(); } return formattedName.trimmed(); } } telephony-service-0.5.3/libtelephonyservice/contactutils.h000066400000000000000000000022021455543255600241420ustar00rootroot00000000000000/* * Copyright (C) 2013 Canonical, Ltd. * * Authors: * Gustavo Pichorim Boiko * * This file is part of telephony-service. * * telephony-service is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; version 3. * * telephony-service 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 . */ #ifndef CONTACTUTILS_H #define CONTACTUTILS_H #include #include #define OFONO_UNKNOWN_NUMBER "x-ofono-unknown" #define OFONO_PRIVATE_NUMBER "x-ofono-private" QTCONTACTS_USE_NAMESPACE namespace ContactUtils { QContactManager *sharedManager(const QString &engine = "galera"); QString formatContactName(const QContact &contact); } #endif // CONTACTUTILS_H telephony-service-0.5.3/libtelephonyservice/contactwatcher.cpp000066400000000000000000000320641455543255600250030ustar00rootroot00000000000000/* * Copyright (C) 2013-2017 Canonical, Ltd. * * Authors: * Gustavo Pichorim Boiko * Tiago Salem Herrmann * * This file is part of telephony-service. * * telephony-service is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; version 3. * * telephony-service 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 . */ #include "contactwatcher.h" #include "contactutils.h" #include "phoneutils.h" #include "accountentry.h" #include "telepathyhelper.h" #include #include #include #include #include #include #include #include #include #include namespace C { #include } ContactWatcher::ContactWatcher(QObject *parent) : QObject(parent), mRequest(0), mInteractive(false), mCompleted(false) { QContactManager *manager = ContactUtils::sharedManager(); QObject::connect(manager, &QContactManager::contactsAdded, this, &ContactWatcher::onContactsAdded); QObject::connect(manager, &QContactManager::contactsChanged, this, &ContactWatcher::onContactsChanged); QObject::connect(manager, &QContactManager::contactsRemoved, this, &ContactWatcher::onContactsRemoved); connect(this, SIGNAL(contactIdChanged()), SIGNAL(isUnknownChanged())); } ContactWatcher::~ContactWatcher() { // prevent deadlock while ContactWatcher being removed // https://github.com/ubports/messaging-app/issues/338 ContactUtils::sharedManager()->disconnect(this); if (mRequest) { mRequest->cancel(); mRequest->deleteLater(); } } QContactIntersectionFilter ContactWatcher::filterForField(const QString &field, const QString &identifier) { QContactIntersectionFilter intersectionFilter; if (field == "X-IRC") { QContactDetailFilter nameFilter = QContactDetailFilter(); nameFilter.setDetailType(QContactOnlineAccount::Type, QContactOnlineAccount::FieldProtocol); nameFilter.setMatchFlags(QContactFilter::MatchExactly); nameFilter.setValue(QContactOnlineAccount::ProtocolIrc); QContactDetailFilter valueFilter = QContactDetailFilter(); valueFilter.setDetailType(QContactOnlineAccount::Type, QContactOnlineAccount::FieldAccountUri); valueFilter.setMatchFlags(QContactFilter::MatchExactly); valueFilter.setValue(identifier); intersectionFilter.append(nameFilter); intersectionFilter.append(valueFilter); } return intersectionFilter; } void ContactWatcher::startSearching() { if (!mCompleted || mIdentifier.isEmpty() || !mInteractive || mAddressableFields.isEmpty()) { // component is not ready yet or no identifier given, // or the number is not interactive and thus doesn't need contact info at all return; } // cancel current request if necessary if (mRequest) { mRequest->cancel(); mRequest->deleteLater(); } // FIXME: search for all the fields mRequest = new QContactFetchRequest(this); QContactUnionFilter topLevelFilter; Q_FOREACH(const QString &field, mAddressableFields) { if (field == "tel") { topLevelFilter.append(QContactPhoneNumber::match(mIdentifier)); } else { QContactIntersectionFilter intersectionFilter; // try a special filter intersectionFilter = filterForField(field, mIdentifier); if (intersectionFilter.filters().isEmpty()) { // FIXME: handle more fields // rely on a generic field filter QContactDetailFilter nameFilter = QContactDetailFilter(); nameFilter.setDetailType(QContactExtendedDetail::Type, QContactExtendedDetail::FieldName); nameFilter.setMatchFlags(QContactFilter::MatchExactly); nameFilter.setValue(field); QContactDetailFilter valueFilter = QContactDetailFilter(); valueFilter.setDetailType(QContactExtendedDetail::Type, QContactExtendedDetail::FieldData); valueFilter.setMatchFlags(QContactFilter::MatchExactly); valueFilter.setValue(mIdentifier); intersectionFilter.append(nameFilter); intersectionFilter.append(valueFilter); } topLevelFilter.append(intersectionFilter); } } mRequest->setFilter(topLevelFilter); connect(mRequest, SIGNAL(stateChanged(QContactAbstractRequest::State)), SLOT(onRequestStateChanged(QContactAbstractRequest::State))); connect(mRequest, SIGNAL(resultsAvailable()), SLOT(onResultsAvailable())); mRequest->setManager(ContactUtils::sharedManager()); mRequest->start(); } void ContactWatcher::clear() { setAlias(QString()); setContactId(QString()); setAvatar(QString()); setDetailProperties(QVariantMap()); } void ContactWatcher::updateAlias() { if (mIdentifier.isEmpty()) { setAlias(QString()); } else if (mIdentifier.startsWith(OFONO_PRIVATE_NUMBER)) { setAlias(C::dgettext("telephony-service", "Private Number")); } else if (mIdentifier.startsWith(OFONO_UNKNOWN_NUMBER)) { setAlias(C::dgettext("telephony-service", "Unknown Number")); } } QVariantList ContactWatcher::wrapIntList(const QList &list) { QVariantList resultList; Q_FOREACH(int value, list) { resultList << value; } return resultList; } QList ContactWatcher::unwrapIntList(const QVariantList &list) { QList resultList; Q_FOREACH(const QVariant &value, list) { resultList << value.toInt(); } return resultList; } QString ContactWatcher::contactId() const { return mContactId; } void ContactWatcher::setContactId(const QString &id) { if (id == mContactId) { return; } if (id == QStringLiteral("qtcontacts:::")) { mContactId = QString(); } else { mContactId = id; } Q_EMIT contactIdChanged(); } QString ContactWatcher::avatar() const { return mAvatar; } void ContactWatcher::setAvatar(const QString &avatar) { if (avatar == mAvatar) { return; } mAvatar = avatar; Q_EMIT avatarChanged(); } QString ContactWatcher::alias() const { return mAlias; } void ContactWatcher::setAlias(const QString &alias) { if (alias == mAlias) { return; } mAlias = alias; Q_EMIT aliasChanged(); } QString ContactWatcher::identifier() const { return mIdentifier; } void ContactWatcher::setIdentifier(const QString &identifier) { if (mIdentifier == identifier) { return; } // FIXME: ofono stuff, maybe move somewhere else? const bool isPrivate = identifier.startsWith(OFONO_PRIVATE_NUMBER); const bool isUnknown = identifier.startsWith(OFONO_UNKNOWN_NUMBER); const bool isInteractive = !identifier.isEmpty() && !isPrivate && !isUnknown; mIdentifier = identifier; if (isInteractive != mInteractive) { mInteractive = isInteractive; Q_EMIT interactiveChanged(); } mIdentifier = normalizeIdentifier(mIdentifier); Q_EMIT identifierChanged(); if (mIdentifier.isEmpty() || isPrivate || isUnknown) { updateAlias(); setContactId(QString()); setAvatar(QString()); setDetailProperties(QVariantMap()); } else { startSearching(); } } QVariantMap ContactWatcher::detailProperties() const { return mDetailProperties; } void ContactWatcher::setDetailProperties(const QVariantMap &properties) { if (properties == mDetailProperties) { return; } mDetailProperties = properties; Q_EMIT detailPropertiesChanged(); } bool ContactWatcher::isUnknown() const { return mContactId.isNull(); } bool ContactWatcher::interactive() const { return mInteractive; } QStringList ContactWatcher::addressableFields() const { return mAddressableFields; } void ContactWatcher::setAddressableFields(const QStringList &fields) { mAddressableFields = fields; Q_EMIT addressableFieldsChanged(); startSearching(); } QString ContactWatcher::normalizeIdentifier(const QString &identifier, bool incoming) { QString finalId = identifier; // FIXME: this is a hack, we need to find a better way of matching contacts for accounts // that don't have addressable fields if (finalId.startsWith("sip:")) { finalId.remove("sip:").remove(QRegularExpression("@.*$")); // If the final ID's length is bigger than 6 digits, we assume it is a phone number. // For incoming phone numbers, assume they come in the full format, including country code // and just append the + to the beginning. // FIXME: this rule might be an over-simplification of the cases. Change it to a more complete // approach if the need appears. if (!finalId.startsWith("+") && finalId.length() > 6 && incoming) { finalId.prepend("+"); } } return finalId; } void ContactWatcher::classBegin() { } void ContactWatcher::componentComplete() { mCompleted = true; updateAlias(); startSearching(); } void ContactWatcher::onContactsAdded(const QList &ids) { // ignore this signal if we have a contact already // or if we have no phone number set if (!mContactId.isNull() || mIdentifier.isEmpty()) { return; } startSearching(); } void ContactWatcher::onContactsChanged(const QList &ids) { // check for changes even if we have this contact already, // as the number might have changed, thus invalidating the current contact startSearching(); } void ContactWatcher::onContactsRemoved(const QList &ids) { Q_FOREACH(const QContactId &id, ids) { if (id.toString() == mContactId) { clear(); startSearching(); break; } } } void ContactWatcher::onResultsAvailable() { QContactFetchRequest *request = qobject_cast(sender()); if (request && request->contacts().size() > 0) { QContact contact; // iterate over all contacts Q_FOREACH(const QString &field, mAddressableFields) { if (!contact.isEmpty()) { break; } if (field == "tel") { Q_FOREACH(const QContact &resultContact, request->contacts()) { Q_FOREACH(const QContactPhoneNumber phoneNumber, resultContact.details(QContactDetail::TypePhoneNumber)) { if (PhoneUtils::comparePhoneNumbers(phoneNumber.number(), mIdentifier) > PhoneUtils::NO_MATCH) { contact = resultContact; break; } } if (!contact.isEmpty()) { break; } } if (!contact.isEmpty()) { break; } } else { // FIXME: add proper support for non-phonenumber ids contact = request->contacts().at(0); break; } } setContactId(contact.id().toString()); setAvatar(contact.detail().imageUrl().toString()); setAlias(ContactUtils::formatContactName(contact)); QVariantMap detailProperties; Q_FOREACH(const QString &field, mAddressableFields) { if (field == "tel") { Q_FOREACH(const QContactPhoneNumber phoneNumber, contact.details(QContactDetail::TypePhoneNumber)) { if (PhoneUtils::comparePhoneNumbers(phoneNumber.number(), mIdentifier) > PhoneUtils::NO_MATCH) { detailProperties["type"] = (int)QContactDetail::TypePhoneNumber; detailProperties["phoneNumberSubTypes"] = wrapIntList(phoneNumber.subTypes()); detailProperties["phoneNumberContexts"] = wrapIntList(phoneNumber.contexts()); break; } } } else { // FIXME: add proper support for more fields } } setDetailProperties(detailProperties); } } void ContactWatcher::onRequestStateChanged(QContactAbstractRequest::State state) { QContactFetchRequest *request = mRequest; if (request && state == QContactAbstractRequest::FinishedState) { mRequest = 0; request->deleteLater(); // if we got no results and we had a contact previously, we need to clear the data if (request->contacts().isEmpty() && !mContactId.isNull()) { clear(); } } } telephony-service-0.5.3/libtelephonyservice/contactwatcher.h000066400000000000000000000100771455543255600244500ustar00rootroot00000000000000/* * Copyright (C) 2013-2017 Canonical, Ltd. * * Authors: * Gustavo Pichorim Boiko * Tiago Salem Herrmann * * This file is part of telephony-service. * * telephony-service is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; version 3. * * telephony-service 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 . */ #ifndef CONTACTWATCHER_H #define CONTACTWATCHER_H #include #include #include #include #include #include QTCONTACTS_USE_NAMESPACE class ContactWatcher : public QObject, public QQmlParserStatus { Q_OBJECT Q_INTERFACES(QQmlParserStatus) Q_PROPERTY(QString contactId READ contactId WRITE setContactId NOTIFY contactIdChanged) Q_PROPERTY(QString avatar READ avatar WRITE setAvatar NOTIFY avatarChanged) Q_PROPERTY(QString alias READ alias WRITE setAlias NOTIFY aliasChanged) Q_PROPERTY(QString identifier READ identifier WRITE setIdentifier NOTIFY identifierChanged) Q_PROPERTY(QString phoneNumber READ identifier WRITE setIdentifier NOTIFY identifierChanged) // The details property changes according to the detail type. // One property is always present on the map though, the "detailType" property. Q_PROPERTY(QVariantMap detailProperties READ detailProperties WRITE setDetailProperties NOTIFY detailPropertiesChanged) Q_PROPERTY(bool isUnknown READ isUnknown NOTIFY isUnknownChanged) Q_PROPERTY(bool interactive READ interactive NOTIFY interactiveChanged) Q_PROPERTY(QStringList addressableFields READ addressableFields WRITE setAddressableFields NOTIFY addressableFieldsChanged) public: explicit ContactWatcher(QObject *parent = 0); ~ContactWatcher(); QString contactId() const; void setContactId(const QString &id); QString avatar() const; void setAvatar(const QString &avatar); QString alias() const; void setAlias(const QString &alias); QString identifier() const; void setIdentifier(const QString &identifier); QVariantMap detailProperties() const; void setDetailProperties(const QVariantMap &properties); bool isUnknown() const; bool interactive() const; // defaults to only phone number searching QStringList addressableFields() const; void setAddressableFields(const QStringList &fields); static QString normalizeIdentifier(const QString &identifier, bool incoming = false); void classBegin(); void componentComplete(); // helpers Q_INVOKABLE QVariantList wrapIntList(const QList &list); Q_INVOKABLE QList unwrapIntList(const QVariantList &list); Q_SIGNALS: void contactIdChanged(); void avatarChanged(); void aliasChanged(); void identifierChanged(); void detailPropertiesChanged(); void isUnknownChanged(); void interactiveChanged(); void addressableFieldsChanged(); protected Q_SLOTS: void onContactsAdded(const QList &ids); void onContactsChanged(const QList &ids); void onContactsRemoved(const QList &ids); void onResultsAvailable(); void onRequestStateChanged(QContactAbstractRequest::State state); private: void startSearching(); void clear(); void updateAlias(); QContactIntersectionFilter filterForField(const QString &field, const QString &identifier); QContactFetchRequest *mRequest; QString mContactId; QString mAvatar; QString mAlias; QString mIdentifier; QVariantMap mDetailProperties; bool mInteractive; bool mCompleted; QStringList mAddressableFields; }; #endif // CONTACTWATCHER_H telephony-service-0.5.3/libtelephonyservice/dbustypes.h000066400000000000000000000043271455543255600234620ustar00rootroot00000000000000/** * Copyright (C) 2013 Canonical, Ltd. * * This program is free software: you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License version 3, as published by * the Free Software Foundation. * * This program is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranties of MERCHANTABILITY, * SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * * Authors: Tiago Salem Herrmann */ #ifndef DBUSTYPES #define DBUSTYPES #include #include struct MessageStruct { QDBusObjectPath path; QVariantMap properties; }; struct AttachmentStruct { QString id; QString contentType; QString filePath; }; struct ProtocolStruct { QString name; uint features; QString fallbackProtocol; uint fallbackMatchRule; QString fallbackSourceProperty; QString fallbackDestinationProperty; bool showOnSelector; bool showOnlineStatus; QString backgroundImage; QString icon; QString serviceName; QString serviceDisplayName; bool joinExistingChannels; bool returnToSend; bool enableAttachments; bool enableRejoin; bool enableTabCompletion; bool leaveRoomsOnClose; bool enableChatStates; }; typedef QList AttachmentList; Q_DECLARE_METATYPE(AttachmentStruct) Q_DECLARE_METATYPE(AttachmentList) typedef QList MessageList; Q_DECLARE_METATYPE(MessageStruct) Q_DECLARE_METATYPE(MessageList) typedef QList ProtocolList; Q_DECLARE_METATYPE(ProtocolStruct) Q_DECLARE_METATYPE(ProtocolList) QDBusArgument &operator<<(QDBusArgument &argument, const AttachmentStruct &attachment); const QDBusArgument &operator>>(const QDBusArgument &argument, AttachmentStruct &attachment); QDBusArgument &operator<<(QDBusArgument &argument, const ProtocolStruct &protocol); const QDBusArgument &operator>>(const QDBusArgument &argument, ProtocolStruct &protocol); #endif telephony-service-0.5.3/libtelephonyservice/greetercontacts.cpp000066400000000000000000000544551455543255600251760ustar00rootroot00000000000000/* * Copyright (C) 2013-2017 Canonical, Ltd. * * Authors: * Michael Terry * Gustavo Pichorim Boiko * Tiago Salem Herrmann * * This file is part of telephony-service. * * telephony-service is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; version 3. * * telephony-service 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 . */ #include "greetercontacts.h" #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include QTCONTACTS_USE_NAMESPACE GreeterContacts *GreeterContacts::instance() { static GreeterContacts *self = new GreeterContacts(); return self; } GreeterContacts::GreeterContacts(QObject *parent) : QObject(parent), mActiveUser(), mFilter(QContactInvalidFilter()), mContacts() { qDBusRegisterMetaType >(); // Watch for changes QDBusConnection connection = QDBusConnection::AS_BUSNAME(); connection.connect("org.freedesktop.Accounts", nullptr, "org.freedesktop.DBus.Properties", "PropertiesChanged", this, SLOT(accountsPropertiesChanged(QString, QVariantMap, QStringList, QDBusMessage))); // Are we in greeter mode or not? if (isGreeterMode()) { connection = QDBusConnection::sessionBus(); connection.connect("com.lomiri.LomiriGreeter", "/com/lomiri/LomiriGreeter/list", "org.freedesktop.DBus.Properties", "PropertiesChanged", this, SLOT(greeterListPropertiesChanged(QString, QVariantMap, QStringList))); QDBusInterface iface("org.freedesktop.Accounts", "/org/freedesktop/Accounts", "org.freedesktop.Accounts", QDBusConnection::AS_BUSNAME()); QDBusPendingCall call = iface.asyncCall("ListCachedUsers"); QDBusPendingCallWatcher *watcher = new QDBusPendingCallWatcher(call, this); connect(watcher, SIGNAL(finished(QDBusPendingCallWatcher *)), this, SLOT(accountsGetUsersReply(QDBusPendingCallWatcher *))); queryEntry(); } else { QString uid = QString::number(getuid()); mActiveUser = "/org/freedesktop/Accounts/User" + uid; } // get the current value of greeter's isActive property connection = QDBusConnection::sessionBus(); QDBusInterface greeterPropsIface("com.lomiri.LomiriGreeter", "/com/lomiri/LomiriGreeter", "org.freedesktop.DBus.Properties"); QDBusReply reply = greeterPropsIface.call("Get", "com.lomiri.LomiriGreeter", "IsActive"); mGreeterActive = reply.isValid() && reply.value().toBool(); connection.connect("com.lomiri.LomiriGreeter", "/com/lomiri/LomiriGreeter", "org.freedesktop.DBus.Properties", "PropertiesChanged", this, SLOT(greeterPropertiesChanged(QString, QVariantMap, QStringList))); } GreeterContacts::~GreeterContacts() { } bool GreeterContacts::greeterActive() const { return mGreeterActive; } bool GreeterContacts::isGreeterMode() { return qgetenv("XDG_SESSION_CLASS") == "greeter"; } void GreeterContacts::setContactFilter(const QContactFilter &filter) { QMutexLocker locker(&mMutex); mFilter = filter; signalIfNeeded(); } bool GreeterContacts::silentMode() { QMutexLocker locker(&mMutex); if (!mSilentMode.isValid()) { mSilentMode = getUserValue("com.lomiri.touch.AccountsService.Sound", "SilentMode"); } return mSilentMode.toBool(); } QString GreeterContacts::incomingCallSound() { QMutexLocker locker(&mMutex); if (!mIncomingCallSound.isValid()) { mIncomingCallSound = getUserValue("com.lomiri.touch.AccountsService.Sound", "IncomingCallSound"); } return mIncomingCallSound.toString(); } QString GreeterContacts::incomingMessageSound() { QMutexLocker locker(&mMutex); if (!mIncomingMessageSound.isValid()) { mIncomingMessageSound = getUserValue("com.lomiri.touch.AccountsService.Sound", "IncomingMessageSound"); } return mIncomingMessageSound.toString(); } QString GreeterContacts::incomingEmergencySound() { QMutexLocker locker(&mMutex); if (!mIncomingEmergencySound.isValid()) { mIncomingEmergencySound = getUserValue("com.lomiri.touch.AccountsService.Sound", "IncomingEmergencySound"); } return mIncomingEmergencySound.toString(); } QString GreeterContacts::incomingWarningSound() { QMutexLocker locker(&mMutex); if (!mIncomingWarningSound.isValid()) { mIncomingWarningSound = getUserValue("com.lomiri.touch.AccountsService.Sound", "IncomingWarningSound"); } return mIncomingWarningSound.toString(); } bool GreeterContacts::incomingCallVibrate() { if (silentMode()) { QMutexLocker locker(&mMutex); return getUserValue("com.lomiri.touch.AccountsService.Sound", "IncomingCallVibrateSilentMode").toBool(); } QMutexLocker locker(&mMutex); if (!mIncomingCallVibrate.isValid()) { mIncomingCallVibrate = getUserValue("com.lomiri.touch.AccountsService.Sound", "IncomingCallVibrate"); } return mIncomingCallVibrate.toBool(); } bool GreeterContacts::incomingMessageVibrate() { if (silentMode()) { QMutexLocker locker(&mMutex); return getUserValue("com.lomiri.touch.AccountsService.Sound", "IncomingMessageVibrateSilentMode").toBool(); } QMutexLocker locker(&mMutex); if (!mIncomingMessageVibrate.isValid()) { mIncomingMessageVibrate = getUserValue("com.lomiri.touch.AccountsService.Sound", "IncomingMessageVibrate"); } return mIncomingMessageVibrate.toBool(); } bool GreeterContacts::dialpadSoundsEnabled() { QMutexLocker locker(&mMutex); if (!mDialpadSoundsEnabled.isValid()) { mDialpadSoundsEnabled = getUserValue("com.lomiri.touch.AccountsService.Sound", "DialpadSoundsEnabled"); } return mDialpadSoundsEnabled.toBool(); } bool GreeterContacts::mmsEnabled() { QMutexLocker locker(&mMutex); if (!mMmsEnabled.isValid()) { mMmsEnabled = getUserValue("com.lomiri.touch.AccountsService.Phone", "MmsEnabled"); } return mMmsEnabled.toBool(); } QString GreeterContacts::defaultSimForCalls() { QMutexLocker locker(&mMutex); if (!mDefaultSimForCalls.isValid()) { mDefaultSimForCalls = getUserValue("com.lomiri.touch.AccountsService.Phone", "DefaultSimForCalls"); } return mDefaultSimForCalls.toString(); } QString GreeterContacts::defaultSimForMessages() { QMutexLocker locker(&mMutex); if (!mDefaultSimForMessages.isValid()) { mDefaultSimForMessages = getUserValue("com.lomiri.touch.AccountsService.Phone", "DefaultSimForMessages"); } return mDefaultSimForMessages.toString(); } QVariantMap GreeterContacts::simNames() { QMutexLocker locker(&mMutex); QVariantMap namesAsVariantMap; if (!mSimNames.isValid()) { QVariant value = getUserValue("com.lomiri.touch.AccountsService.Phone", "SimNames"); // the signature is a{ss} instead of a{sv} QMap names = qdbus_cast >(value); QMapIterator i(names); while (i.hasNext()) { i.next(); namesAsVariantMap[i.key()] = i.value(); } mSimNames = namesAsVariantMap; } return mSimNames.toMap(); } void GreeterContacts::greeterListPropertiesChanged(const QString &interface, const QVariantMap &changed, const QStringList &invalidated) { if (interface == "com.lomiri.LomiriGreeter.List") { if (changed.contains("ActiveEntry")) { updateActiveUser(changed.value("ActiveEntry").toString()); } else if (invalidated.contains("ActiveEntry")) { queryEntry(); } } } void GreeterContacts::greeterPropertiesChanged(const QString &interface, const QVariantMap &changed, const QStringList &invalidated) { if (interface == "com.lomiri.LomiriGreeter") { if (changed.contains("IsActive")) { mGreeterActive = changed.value("IsActive").toBool(); Q_EMIT greeterActiveChanged(); } } } void GreeterContacts::setMmsEnabled(bool enabled) { QString uid = QString::number(getuid()); QDBusInterface iface("org.freedesktop.Accounts", "/org/freedesktop/Accounts/User" + uid, "org.freedesktop.DBus.Properties", QDBusConnection::AS_BUSNAME()); iface.asyncCall("Set", "com.lomiri.touch.AccountsService.Phone", "MmsEnabled", QVariant::fromValue(QDBusVariant(enabled))); } void GreeterContacts::setDefaultSimForMessages(const QString &objPath) { QString uid = QString::number(getuid()); QDBusInterface iface("org.freedesktop.Accounts", "/org/freedesktop/Accounts/User" + uid, "org.freedesktop.DBus.Properties", QDBusConnection::AS_BUSNAME()); iface.asyncCall("Set", "com.lomiri.touch.AccountsService.Phone", "DefaultSimForMessages", QVariant::fromValue(QDBusVariant(objPath))); } void GreeterContacts::setDefaultSimForCalls(const QString &objPath) { QString uid = QString::number(getuid()); QDBusInterface iface("org.freedesktop.Accounts", "/org/freedesktop/Accounts/User" + uid, "org.freedesktop.DBus.Properties", QDBusConnection::AS_BUSNAME()); iface.asyncCall("Set", "com.lomiri.touch.AccountsService.Phone", "DefaultSimForCalls", QVariant::fromValue(QDBusVariant(objPath))); } void GreeterContacts::setSimNames(const QVariantMap &simNames) { QMap newSimNames; QMapIterator i(simNames); while (i.hasNext()) { i.next(); newSimNames[i.key()] = i.value().toString(); } QString uid = QString::number(getuid()); QDBusInterface iface("org.freedesktop.Accounts", "/org/freedesktop/Accounts/User" + uid, "org.freedesktop.DBus.Properties", QDBusConnection::AS_BUSNAME()); iface.asyncCall("Set", "com.lomiri.touch.AccountsService.Phone", "SimNames", QVariant::fromValue(QDBusVariant(QVariant::fromValue(newSimNames)))); } void GreeterContacts::setDialpadSoundsEnabled(bool enabled) { QString uid = QString::number(getuid()); QDBusInterface iface("org.freedesktop.Accounts", "/org/freedesktop/Accounts/User" + uid, "org.freedesktop.DBus.Properties", QDBusConnection::AS_BUSNAME()); iface.asyncCall("Set", "com.lomiri.touch.AccountsService.Sound", "DialpadSoundsEnabled", QVariant::fromValue(QDBusVariant(enabled))); } QVariant GreeterContacts::getUserValue(const QString &interface, const QString &propName) { QDBusInterface iface("org.freedesktop.Accounts", mActiveUser, "org.freedesktop.DBus.Properties", QDBusConnection::AS_BUSNAME()); QDBusReply reply = iface.call("Get", interface, propName); if (reply.isValid()) { return reply.value(); } else { qWarning() << "Failed to get user property " << propName << " from AccountsService:" << reply.error().message(); } return QVariant(); } void GreeterContacts::checkUpdatedValue(const QVariantMap &changed, const QStringList &invalidated, const QString &propName, QVariant &propValue) { if (changed.contains(propName)) { propValue = changed.value(propName); } else if (invalidated.contains(propName)) { propValue = QVariant(); } } void GreeterContacts::accountsPropertiesChanged(const QString &interface, const QVariantMap &changed, const QStringList &invalidated, const QDBusMessage &message) { if (interface == "com.lomiri.TelephonyServiceApprover") { if (changed.contains("CurrentContact")) { mContacts.insert(message.path(), qdbus_cast(changed.value("CurrentContact"))); signalIfNeeded(); } else if (invalidated.contains("CurrentContact")) { queryContact(message.path()); } } else if (interface == "com.lomiri.touch.AccountsService.Sound" && message.path() == mActiveUser) { checkUpdatedValue(changed, invalidated, "SilentMode", mSilentMode); checkUpdatedValue(changed, invalidated, "IncomingCallSound", mIncomingCallSound); checkUpdatedValue(changed, invalidated, "IncomingMessageSound", mIncomingMessageSound); checkUpdatedValue(changed, invalidated, "IncomingMessageVibrate", mIncomingMessageVibrate); checkUpdatedValue(changed, invalidated, "IncomingCallVibrate", mIncomingCallVibrate); checkUpdatedValue(changed, invalidated, "DialpadSoundsEnabled", mDialpadSoundsEnabled); Q_FOREACH(const QString &key, changed.keys()) { Q_EMIT soundSettingsChanged(key); } Q_FOREACH(const QString &key, invalidated) { Q_EMIT soundSettingsChanged(key); } } else if (interface == "com.lomiri.touch.AccountsService.Phone" && message.path() == mActiveUser) { checkUpdatedValue(changed, invalidated, "DefaultSimForCalls", mDefaultSimForCalls); checkUpdatedValue(changed, invalidated, "DefaultSimForMessages", mDefaultSimForMessages); checkUpdatedValue(changed, invalidated, "MmsEnabled", mMmsEnabled); checkUpdatedValue(changed, invalidated, "SimNames", mSimNames); Q_FOREACH(const QString &key, changed.keys()) { Q_EMIT phoneSettingsChanged(key); } Q_FOREACH(const QString &key, invalidated) { Q_EMIT phoneSettingsChanged(key); } } } void GreeterContacts::greeterGetEntryReply(QDBusPendingCallWatcher *watcher) { QDBusPendingReply reply = *watcher; if (!reply.isError()) { updateActiveUser(reply.argumentAt<0>().toString()); } else { qWarning() << "Failed to get active entry from Unity Greeter:" << reply.error().message(); } watcher->deleteLater(); } void GreeterContacts::accountsGetUsersReply(QDBusPendingCallWatcher *watcher) { QDBusPendingReply> reply = *watcher; if (!reply.isError()) { Q_FOREACH (const QDBusObjectPath &user, reply.argumentAt<0>()) { queryContact(user.path()); } } else { qWarning() << "Failed to get user list from AccountsService:" << reply.error().message(); } watcher->deleteLater(); } void GreeterContacts::accountsGetContactReply(QDBusPendingCallWatcher *watcher) { QDBusPendingReply reply = *watcher; if (!reply.isError()) { mContacts.insert(watcher->property("telepathyPath").toString(), qdbus_cast(reply.argumentAt<0>())); signalIfNeeded(); } else { qWarning() << "Failed to get user's contact from AccountsService:" << reply.error().message(); } watcher->deleteLater(); } void GreeterContacts::queryEntry() { QDBusInterface iface("com.lomiri.LomiriGreeter", "/com/lomiri/LomiriGreeter/list", "org.freedesktop.DBus.Properties", QDBusConnection::sessionBus()); QDBusPendingCall call = iface.asyncCall("Get", "com.lomiri.LomiriGreeter.List", "ActiveEntry"); QDBusPendingCallWatcher *watcher = new QDBusPendingCallWatcher(call, this); connect(watcher, SIGNAL(finished(QDBusPendingCallWatcher *)), this, SLOT(greeterGetEntryReply(QDBusPendingCallWatcher *))); } void GreeterContacts::queryContact(const QString &user) { QDBusInterface iface("org.freedesktop.Accounts", user, "org.freedesktop.DBus.Properties", QDBusConnection::AS_BUSNAME()); QDBusPendingCall call = iface.asyncCall("Get", "com.lomiri.TelephonyServiceApprover", "CurrentContact"); QDBusPendingCallWatcher *watcher = new QDBusPendingCallWatcher(call, this); watcher->setProperty("telepathyPath", QVariant(user)); connect(watcher, SIGNAL(finished(QDBusPendingCallWatcher *)), this, SLOT(accountsGetContactReply(QDBusPendingCallWatcher *))); } void GreeterContacts::updateActiveUser(const QString &username) { struct passwd *pwinfo = getpwnam(username.toLatin1()); if (pwinfo) { mActiveUser = "/org/freedesktop/Accounts/User" + QString::number(pwinfo->pw_uid); mSilentMode = QVariant(); mIncomingCallSound = QVariant(); mIncomingMessageSound = QVariant(); mIncomingCallVibrate = QVariant(); mIncomingMessageVibrate = QVariant(); mDialpadSoundsEnabled = QVariant(); mMmsEnabled = QVariant(); mDefaultSimForCalls = QVariant(); mDefaultSimForMessages = QVariant(); mSimNames = QVariant(); signalIfNeeded(); } } QContact GreeterContacts::lookupContact() { // For now, only ever look at active user's contact info. In future, // maybe we should search all users for any matching info. QVariantMap contactInfo = mContacts.value(mActiveUser); if (!contactInfo.empty()) { QContact contact = mapToContact(contactInfo); if (QContactManagerEngine::testFilter(mFilter, contact)) { return contact; } } return QContact(); } void GreeterContacts::signalIfNeeded() { QContact contact = lookupContact(); if (!contact.isEmpty()) { Q_EMIT contactUpdated(contact); } } void GreeterContacts::emitContact(const QContact &contact) { QString uid = QString::number(getuid()); QVariantMap map = contactToMap(contact); if (!map.value("Image").toString().isEmpty()) { // OK, so we want to tell LightDM about our contact. But LightDM won't // have access to our image file in their normal location managed by // evolution. And rather than give world-readable permissions to our // evolution dir, we minimize the damage by copying the image to a new // more accessible location. // Clean up from previous (poor) implementation of this method QFile imageFile(QDir::home().filePath(".telephony-service-contact-image")); imageFile.remove(); // Now copy into greeter data dir, if one is set QString path = qgetenv("XDG_GREETER_DATA_DIR"); if (!path.isEmpty()) { QDir(path).mkdir("telephony-service"); // create namespaced subdir path += "/telephony-service/contact-image"; QFile(path).remove(); // copy() won't overwrite, so remove before if (QFile(map.value("Image").toString()).copy(path)) { map.insert("Image", path); } } } QDBusInterface iface("org.freedesktop.Accounts", "/org/freedesktop/Accounts/User" + uid, "org.freedesktop.DBus.Properties", QDBusConnection::AS_BUSNAME()); iface.asyncCall("Set", "com.lomiri.TelephonyServiceApprover", "CurrentContact", QVariant::fromValue(QDBusVariant(QVariant(map)))); } QVariantMap GreeterContacts::contactToMap(const QContact &contact) { QVariantMap map; QContactAvatar avatarDetail = contact.detail(); map.insert("Image", avatarDetail.imageUrl().toLocalFile()); QContactDisplayLabel displayLabel = contact.detail(); map.insert("DisplayLabel", displayLabel.label()); QContactName nameDetail = contact.detail(); map.insert("FirstName", nameDetail.firstName()); map.insert("MiddleName", nameDetail.middleName()); map.insert("LastName", nameDetail.lastName()); QContactPhoneNumber numberDetail = contact.detail(); map.insert("PhoneNumber", numberDetail.number()); return map; } QContact GreeterContacts::mapToContact(const QVariantMap &map) { QContact contact; QContactAvatar avatarDetail; avatarDetail.setValue(QContactAvatar::FieldImageUrl, QUrl::fromLocalFile(map.value("Image").toString())); contact.saveDetail(&avatarDetail); // We only use FirstName and LastName right now in ContactUtils::formatContactName(). // If/When we use more, we should save more detail values here. QContactDisplayLabel displayLabel; displayLabel.setValue(QContactDisplayLabel::FieldLabel, map.value("DisplayLabel")); contact.saveDetail(&displayLabel); QContactName nameDetail; nameDetail.setValue(QContactName::FieldFirstName, map.value("FirstName")); nameDetail.setValue(QContactName::FieldMiddleName, map.value("MiddleName")); nameDetail.setValue(QContactName::FieldLastName, map.value("LastName")); contact.saveDetail(&nameDetail); QContactPhoneNumber numberDetail; numberDetail.setValue(QContactPhoneNumber::FieldNumber, map.value("PhoneNumber")); contact.saveDetail(&numberDetail); return contact; } void GreeterContacts::showGreeter() { QMutexLocker locker(&mMutex); QDBusInterface iface("com.lomiri.LomiriGreeter", "/com/lomiri/LomiriGreeter", "com.lomiri.LomiriGreeter", QDBusConnection::sessionBus()); iface.call("ShowGreeter"); } telephony-service-0.5.3/libtelephonyservice/greetercontacts.h000066400000000000000000000105521455543255600246310ustar00rootroot00000000000000/* * Copyright (C) 2013-2017 Canonical, Ltd. * * Authors: * Michael Terry * Gustavo Pichorim Boiko * Tiago Salem Herrmann * * This file is part of telephony-service. * * telephony-service is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; version 3. * * telephony-service 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 . */ #ifndef GREETERCONTACTS_H #define GREETERCONTACTS_H #include #include #include #include #include class QDBusPendingCallWatcher; /** * When running under the greeter, we don't have our own contacts database. * Instead, we query AccountsService for the information. */ class GreeterContacts : public QObject { Q_OBJECT Q_PROPERTY(bool greeterActive READ greeterActive NOTIFY greeterActiveChanged) public: static GreeterContacts *instance(); ~GreeterContacts(); bool greeterActive() const; void setContactFilter(const QtContacts::QContactFilter &filter); bool silentMode(); QString incomingCallSound(); QString incomingMessageSound(); QString incomingEmergencySound(); QString incomingWarningSound(); bool incomingMessageVibrate(); bool incomingCallVibrate(); bool dialpadSoundsEnabled(); QString defaultSimForCalls(); QString defaultSimForMessages(); bool mmsEnabled(); QVariantMap simNames(); void setDefaultSimForCalls(const QString &objPath); void setDefaultSimForMessages(const QString &objPath); void setMmsEnabled(bool enabled); void setSimNames(const QVariantMap &simNames); void setDialpadSoundsEnabled(bool enabled); static bool isGreeterMode(); // Records contact info for currently-logged-in user static void emitContact(const QtContacts::QContact &contact); // These are really implementation details, but are public for ease of unit testing static QVariantMap contactToMap(const QtContacts::QContact &contact); static QtContacts::QContact mapToContact(const QVariantMap &map); Q_INVOKABLE void showGreeter(); Q_SIGNALS: void contactUpdated(const QtContacts::QContact &contact); void greeterActiveChanged(); void phoneSettingsChanged(const QString &key); void soundSettingsChanged(const QString &key); private Q_SLOTS: void greeterListPropertiesChanged(const QString &interface, const QVariantMap &changed, const QStringList &invalidated); void greeterPropertiesChanged(const QString &interface, const QVariantMap &changed, const QStringList &invalidated); void accountsPropertiesChanged(const QString &interface, const QVariantMap &changed, const QStringList &invalidated, const QDBusMessage &message); void greeterGetEntryReply(QDBusPendingCallWatcher *watcher); void accountsGetUsersReply(QDBusPendingCallWatcher *watcher); void accountsGetContactReply(QDBusPendingCallWatcher *watcher); protected: GreeterContacts(QObject *parent = 0); private: void queryEntry(); void queryContact(const QString &user); void updateActiveUser(const QString &username); QtContacts::QContact lookupContact(); void signalIfNeeded(); void checkUpdatedValue(const QVariantMap &changed, const QStringList &invalidated, const QString &propName, QVariant &propValue); QVariant getUserValue(const QString &interface, const QString &propName); QString mActiveUser; QVariant mSilentMode; QVariant mIncomingCallSound; QVariant mIncomingMessageSound; QVariant mIncomingEmergencySound; QVariant mIncomingWarningSound; QVariant mIncomingCallVibrate; QVariant mIncomingMessageVibrate; QVariant mDialpadSoundsEnabled; QVariant mDefaultSimForCalls; QVariant mDefaultSimForMessages; QVariant mMmsEnabled; QVariant mSimNames; bool mGreeterActive; QtContacts::QContactFilter mFilter; QMap mContacts; QMutex mMutex; }; #endif // GREETERCONTACTS_H telephony-service-0.5.3/libtelephonyservice/include/000077500000000000000000000000001455543255600227045ustar00rootroot00000000000000telephony-service-0.5.3/libtelephonyservice/include/cellbroadcast-types.h000066400000000000000000000146411455543255600270270ustar00rootroot00000000000000 /* Copyright (C) 2022 Ubports Foundation * * * This file is part of telepathy-ofono * * telephony-service is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; version 3. * * telephony-service 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 . */ #ifndef CELLBROADCASTCONSTANTS_H #define CELLBROADCASTCONSTANTS_H namespace CellBroadcast { static const char* CELLBROADCAST_IDENTIFIER = "x-ofono-cellbroadcast"; static const char* CELLBROADCAST_IDENTIFIER_TYPE = "x-ofono-cellbroadcast-type"; /** EU Alert Alert Levels - ref: https://www.etsi.org/deliver/etsi_ts/102900_102999/102900/01.03.01_60/ts_102900v010301p.pdf*/ enum Type { TYPE_LEVEL_1 = 1, // CMAS Presidential Alert TYPE_LEVEL_2, // CMAS Extreme Alert TYPE_LEVEL_3, // CMAS Severe Alert TYPE_LEVEL_4, // CMAS Public Safety Alert TYPE_INFO, // no equivalent TYPE_AMBER, // CMAS Child Abduction Emergency Alert TYPE_MONTHLY_TEST, TYPE_TEST, TYPE_EXERCISE, TYPE_RESERVED, TYPE_OTHER }; /** Start of ETWS Message Identifier types */ enum ETWS { ETWS_ALERT_EARTHQUAKE = 4352, // ETWS Message Identifier for earthquake warning message. ETWS_ALERT_TSUNAMI = 4353, // ETWS Message Identifier for tsunami warning message ETWS_ALERT_EARTHQUAKE_AND_TSUNAMI = 4354, // ETWS Message Identifier for earthquake and tsunami combined warning message. ETWS_ALERT_TEST = 4355, // ETWS Message Identifier for Test : discarded in ofono ETWS_ALERT_OTHER = 4356 // ETWS Message Identifier for messages related to other emergency types. }; /** Start of CMAS Message Identifier range. */ enum CMAS { /** CMAS Message Identifier for Presidential Level alerts. */ CMAS_ALERT_PRESIDENTIAL_LEVEL = 4370, /** CMAS Message Identifier for Extreme alerts, Urgency=Immediate, Certainty=Observed. */ CMAS_ALERT_EXTREME_IMMEDIATE_OBSERVED = 4371, /** CMAS Message Identifier for Extreme alerts, Urgency=Immediate, Certainty=Likely. */ CMAS_ALERT_EXTREME_IMMEDIATE_LIKELY = 4372, /** CMAS Message Identifier for Extreme alerts, Urgency=Expected, Certainty=Observed. */ CMAS_ALERT_EXTREME_EXPECTED_OBSERVED = 4373, /** CMAS Message IdentifCMAS_ALERT_EXTREME_IMMEDIATE_OBSERVEDier for Extreme alerts, Urgency=Expected, Certainty=Likely. */ CMAS_ALERT_EXTREME_EXPECTED_LIKELY = 4374, /** CMAS Message Identifier for Severe alerts, Urgency=Immediate, Certainty=Observed. */ CMAS_ALERT_SEVERE_IMMEDIATE_OBSERVED = 4375, /** CMAS Message Identifier for Severe alerts, Urgency=Immediate, Certainty=Likely. */ CMAS_ALERT_SEVERE_IMMEDIATE_LIKELY = 4376, /** CMAS Message Identifier for Severe alerts, Urgency=Expected, Certainty=Observed. */ CMAS_ALERT_SEVERE_EXPECTED_OBSERVED = 4377, /** CMAS Message Identifier for Severe alerts, Urgency=Expected, Certainty=Likely. */ CMAS_ALERT_SEVERE_EXPECTED_LIKELY = 4378, /** CMAS Message Identifier for Child Abduction Emergency (Amber Alert). */ CMAS_ALERT_CHILD_ABDUCTION_EMERGENCY = 4379, /** CMAS Message Identifier for the Required Monthly Test. */ CMAS_ALERT_REQUIRED_MONTHLY_TEST = 4380, /** CMAS Message Identifier for CMAS Exercise. */ CMAS_ALERT_EXERCISE = 4381, /** CMAS Message Identifier for operator defined use. */ CMAS_ALERT_OPERATOR_DEFINED_USE = 4382, CMAS_ALERT_PRESIDENTIAL_LEVEL_LANGUAGE = 4383, /** * CMAS Message Identifier for Extreme alerts, Urgency=Immediate, Certainty=Observed * for additional languages. */ CMAS_ALERT_EXTREME_IMMEDIATE_OBSERVED_LANGUAGE = 4384, /** * CMAS Message Identifier for Extreme alerts, Urgency=Immediate, Certainty=Likely * for additional languages. */ CMAS_ALERT_EXTREME_IMMEDIATE_LIKELY_LANGUAGE = 4385, /** * CMAS Message Identifier for Extreme alerts, Urgency=Expected, Certainty=Observed * for additional languages. */ CMAS_ALERT_EXTREME_EXPECTED_OBSERVED_LANGUAGE = 4386, /** * CMAS Message Identifier for Extreme alerts, Urgency=Expected, Certainty=Likely * for additional languages. */ CMAS_ALERT_EXTREME_EXPECTED_LIKELY_LANGUAGE = 4387, /** * CMAS Message Identifier for Severe alerts, Urgency=Immediate, Certainty=Observed * for additional languages. */ CMAS_ALERT_SEVERE_IMMEDIATE_OBSERVED_LANGUAGE = 4388, /** * CMAS Message Identifier for Severe alerts, Urgency=Immediate, Certainty=Likely * for additional languages. */ CMAS_ALERT_SEVERE_IMMEDIATE_LIKELY_LANGUAGE = 4389, /** * CMAS Message Identifier for Severe alerts, Urgency=Expected, Certainty=Observed * for additional languages. */ CMAS_ALERT_SEVERE_EXPECTED_OBSERVED_LANGUAGE = 4390, /** * CMAS Message Identifier for Severe alerts, Urgency=Expected, Certainty=Likely * for additional languages. */ CMAS_ALERT_SEVERE_EXPECTED_LIKELY_LANGUAGE = 4391, /** * CMAS Message Identifier for Child Abduction Emergency (Amber Alert) * for additional languages. */ CMAS_ALERT_CHILD_ABDUCTION_EMERGENCY_LANGUAGE = 4392, /** CMAS Message Identifier for the Required Monthly Test for additional languages. */ CMAS_ALERT_REQUIRED_MONTHLY_TEST_LANGUAGE = 4393, /** CMAS Message Identifier for CMAS Exercise for additional languages. */ CMAS_ALERT_EXERCISE_LANGUAGE = 4394, /** CMAS Message Identifier for operator defined use for additional languages. */ CMAS_ALERT_OPERATOR_DEFINED_USE_LANGUAGE = 4395, /** CMAS Message Identifier for CMAS Public Safety Alerts. */ CMAS_ALERT_PUBLIC_SAFETY = 4396, /** CMAS Message Identifier for CMAS Public Safety Alerts for additional languages. */ CMAS_ALERT_PUBLIC_SAFETY_LANGUAGE = 4397, /** CMAS Message Identifier for CMAS State/Local Test. */ CMAS_ALERT_STATE_LOCAL_TEST = 4398, /** CMAS Message Identifier for CMAS State/Local Test for additional languages. */ CMAS_ALERT_STATE_LOCAL_TEST_LANGUAGE = 4399, /** CMAS Message Identifier for CMAS geo fencing trigger message. */ CMAS_GEO_FENCING_TRIGGER = 4440 }; } #endif // CELLBROADCASTCONSTANTS_H telephony-service-0.5.3/libtelephonyservice/ofonoaccountentry.cpp000066400000000000000000000241361455543255600255520ustar00rootroot00000000000000/* * Copyright (C) 2013-2017 Canonical, Ltd. * * Authors: * Gustavo Pichorim Boiko * * This file is part of telephony-service. * * telephony-service is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; version 3. * * telephony-service 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 . */ #include "ofonoaccountentry.h" #include "phoneutils.h" #include "telepathyhelper.h" OfonoAccountEntry::OfonoAccountEntry(const Tp::AccountPtr &account, QObject *parent) : AccountEntry(account, parent), mVoicemailCount(0), mVoicemailIndicator(false) { // the sim lock detection is based on the status message, so whenever it // changes, it might mean the sim lock state changed too connect(this, SIGNAL(statusChanged()), SIGNAL(simLockedChanged())); connect(this, SIGNAL(statusMessageChanged()), SIGNAL(networkNameChanged())); connect(this, SIGNAL(statusMessageChanged()), SIGNAL(emergencyCallsAvailableChanged())); mUssdManager = new USSDManager(this, this); } USSDManager *OfonoAccountEntry::ussdManager() const { return mUssdManager; } QString OfonoAccountEntry::modemName() { return mAccount->parameters().value("modem-objpath").toString(); } QStringList OfonoAccountEntry::emergencyNumbers() const { return mEmergencyNumbers; } QString OfonoAccountEntry::countryCode() const { return mCountryCode; } QString OfonoAccountEntry::voicemailNumber() const { return mVoicemailNumber; } uint OfonoAccountEntry::voicemailCount() const { return mVoicemailCount; } bool OfonoAccountEntry::voicemailIndicator() const { return mVoicemailIndicator; } QString OfonoAccountEntry::networkName() const { // FIXME: maybe it is safer to reimplement here, but for ofono accounts the status message really is the // network name return statusMessage(); } bool OfonoAccountEntry::emergencyCallsAvailable() const { if (mAccount.isNull() || mAccount->connection().isNull() || mAccount->connection()->selfContact().isNull()) { return false; } QString status = mAccount->connection()->selfContact()->presence().status(); return status != "flightmode" && status != "nomodem" && status != ""; } bool OfonoAccountEntry::simLocked() const { if (mAccount.isNull() || mAccount->connection().isNull() || mAccount->connection()->selfContact().isNull()) { return false; } Tp::Presence presence = mAccount->connection()->selfContact()->presence(); return (presence.type() == Tp::ConnectionPresenceTypeAway && presence.status() == "simlocked"); } QString OfonoAccountEntry::serial() const { return mSerial; } AccountEntry::AccountType OfonoAccountEntry::type() const { return AccountEntry::PhoneAccount; } bool OfonoAccountEntry::active() const { return (!mAccount.isNull() && !mAccount->connection().isNull() && !mAccount->connection()->selfContact().isNull() && mAccount->connection()->selfContact()->presence().type() != Tp::ConnectionPresenceTypeOffline); } bool OfonoAccountEntry::connected() const { return !mAccount.isNull() && !mAccount->connection().isNull() && !mAccount->connection()->selfContact().isNull() && mAccount->connection()->selfContact()->presence().type() == Tp::ConnectionPresenceTypeAvailable; } bool OfonoAccountEntry::compareIds(const QString &first, const QString &second) const { return PhoneUtils::comparePhoneNumbers(first, second) > PhoneUtils::NO_MATCH; } QStringList OfonoAccountEntry::addressableVCardFields() { return mAccount->protocolInfo().addressableVCardFields(); } void OfonoAccountEntry::onEmergencyNumbersChanged(const QStringList &numbers) { mEmergencyNumbers = numbers; Q_EMIT emergencyNumbersChanged(); } void OfonoAccountEntry::onCountryCodeChanged(const QString &countryCode) { mCountryCode = countryCode; Q_EMIT countryCodeChanged(); } void OfonoAccountEntry::onVoicemailNumberChanged(const QString &number) { mVoicemailNumber = number; Q_EMIT voicemailNumberChanged(); } void OfonoAccountEntry::onVoicemailCountChanged(uint count) { mVoicemailCount = count; Q_EMIT voicemailCountChanged(); } void OfonoAccountEntry::onVoicemailIndicatorChanged(bool visible) { qDebug() << __PRETTY_FUNCTION__ << visible; mVoicemailIndicator = visible; Q_EMIT voicemailIndicatorChanged(); } void OfonoAccountEntry::onConnectionChanged(Tp::ConnectionPtr connection) { // make sure the generic code is also run AccountEntry::onConnectionChanged(connection); QDBusConnection dbusConnection = QDBusConnection::sessionBus(); if (!connection) { // disconnect any previous dbus connections if (!mConnectionInfo.objectPath.isEmpty()) { dbusConnection.disconnect(mConnectionInfo.busName, mConnectionInfo.objectPath, LOMIRI_TELEPHONY_EMERGENCYMODE_IFACE, "EmergencyNumbersChanged", this, SLOT(onEmergencyNumbersChanged(QStringList))); // connect the voicemail number changed signal dbusConnection.disconnect(mConnectionInfo.busName, mConnectionInfo.objectPath, LOMIRI_TELEPHONY_VOICEMAIL_IFACE, "VoicemailNumberChanged", this, SLOT(onVoicemailNumberChanged(QString))); dbusConnection.disconnect(mConnectionInfo.busName, mConnectionInfo.objectPath, LOMIRI_TELEPHONY_VOICEMAIL_IFACE, "VoicemailCountChanged", this, SLOT(onVoicemailCountChanged(uint))); dbusConnection.disconnect(mConnectionInfo.busName, mConnectionInfo.objectPath, LOMIRI_TELEPHONY_VOICEMAIL_IFACE, "VoicemailIndicatorChanged", this, SLOT(onVoicemailIndicatorChanged(bool))); dbusConnection.disconnect(mConnectionInfo.busName, mConnectionInfo.objectPath, LOMIRI_TELEPHONY_EMERGENCYMODE_IFACE, "CountryCodeChanged", this, SLOT(onCountryCodeChanged(QString))); } } else { // connect the emergency numbers changed signal dbusConnection.connect(mConnectionInfo.busName, mConnectionInfo.objectPath, LOMIRI_TELEPHONY_EMERGENCYMODE_IFACE, "EmergencyNumbersChanged", this, SLOT(onEmergencyNumbersChanged(QStringList))); // and get the current value of the emergency numbers QDBusInterface connIface(mConnectionInfo.busName, mConnectionInfo.objectPath, LOMIRI_TELEPHONY_EMERGENCYMODE_IFACE); QDBusReply replyNumbers = connIface.call("EmergencyNumbers"); if (replyNumbers.isValid()) { mEmergencyNumbers = replyNumbers.value(); if (mReady) { Q_EMIT emergencyNumbersChanged(); } } // connect the country code changed signal dbusConnection.connect(mConnectionInfo.busName, mConnectionInfo.objectPath, LOMIRI_TELEPHONY_EMERGENCYMODE_IFACE, "CountryCodeChanged", this, SLOT(onCountryCodeChanged(QString))); // and get the current value of the country code QDBusReply replyCountryCode = connIface.call("CountryCode"); if (replyCountryCode.isValid()) { mCountryCode = replyCountryCode.value(); Q_EMIT countryCodeChanged(); } // connect the voicemail number changed signal dbusConnection.connect(mConnectionInfo.busName, mConnectionInfo.objectPath, LOMIRI_TELEPHONY_VOICEMAIL_IFACE, "VoicemailNumberChanged", this, SLOT(onVoicemailNumberChanged(QString))); QDBusInterface voicemailIface(mConnectionInfo.busName, mConnectionInfo.objectPath, LOMIRI_TELEPHONY_VOICEMAIL_IFACE); QDBusReply replyNumber = voicemailIface.call("VoicemailNumber"); if (replyNumber.isValid()) { mVoicemailNumber = replyNumber.value(); if (mReady) { Q_EMIT voicemailNumberChanged(); } } else { qWarning() << "Could not get voicemail number!"; } // connect the voicemail count changed signal dbusConnection.connect(mConnectionInfo.busName, mConnectionInfo.objectPath, LOMIRI_TELEPHONY_VOICEMAIL_IFACE, "VoicemailCountChanged", this, SLOT(onVoicemailCountChanged(uint))); QDBusReply replyCount = voicemailIface.call("VoicemailCount"); if (replyCount.isValid()) { mVoicemailCount = replyCount.value(); if (mReady) { Q_EMIT voicemailCountChanged(); } } // connect the voicemail indicator changed signal dbusConnection.connect(mConnectionInfo.busName, mConnectionInfo.objectPath, LOMIRI_TELEPHONY_VOICEMAIL_IFACE, "VoicemailIndicatorChanged", this, SLOT(onVoicemailIndicatorChanged(bool))); QDBusReply replyIndicator = voicemailIface.call("VoicemailIndicator"); if (replyIndicator.isValid()) { mVoicemailIndicator = replyIndicator.value(); if (mReady) { Q_EMIT voicemailIndicatorChanged(); } } // and get the serial QDBusInterface ussdIface(mConnectionInfo.busName, mConnectionInfo.objectPath, LOMIRI_TELEPHONY_USSD_IFACE); mSerial = ussdIface.property("Serial").toString(); if (mReady) { Q_EMIT serialChanged(); } } } telephony-service-0.5.3/libtelephonyservice/ofonoaccountentry.h000066400000000000000000000070171455543255600252160ustar00rootroot00000000000000/* * Copyright (C) 2013-2017 Canonical, Ltd. * * Authors: * Gustavo Pichorim Boiko * * This file is part of telephony-service. * * telephony-service is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; version 3. * * telephony-service 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 . */ #ifndef OFONOACCOUNTENTRY_H #define OFONOACCOUNTENTRY_H #include "accountentry.h" #include "ussdmanager.h" class OfonoAccountEntry : public AccountEntry { Q_OBJECT Q_PROPERTY(QStringList emergencyNumbers READ emergencyNumbers NOTIFY emergencyNumbersChanged) Q_PROPERTY(QString voicemailNumber READ voicemailNumber NOTIFY voicemailNumberChanged) Q_PROPERTY(uint voicemailCount READ voicemailCount NOTIFY voicemailCountChanged) Q_PROPERTY(bool voicemailIndicator READ voicemailIndicator NOTIFY voicemailIndicatorChanged) Q_PROPERTY(QString networkName READ networkName NOTIFY networkNameChanged) Q_PROPERTY(bool emergencyCallsAvailable READ emergencyCallsAvailable NOTIFY emergencyCallsAvailableChanged) Q_PROPERTY(bool simLocked READ simLocked NOTIFY simLockedChanged) Q_PROPERTY(QString serial READ serial NOTIFY serialChanged) Q_PROPERTY(QString countryCode READ countryCode NOTIFY countryCodeChanged) Q_PROPERTY(USSDManager* ussdManager READ ussdManager CONSTANT) Q_PROPERTY(QString modemName READ modemName CONSTANT) friend class AccountEntryFactory; public: QStringList emergencyNumbers() const; QString voicemailNumber() const; uint voicemailCount() const; bool voicemailIndicator() const; QString networkName() const; QString countryCode() const; bool emergencyCallsAvailable() const; bool simLocked() const; QString serial() const; USSDManager *ussdManager() const; QString modemName(); // reimplemented from AccountEntry virtual AccountEntry::AccountType type() const; virtual bool connected() const; virtual bool active() const; virtual bool compareIds(const QString &first, const QString &second) const; virtual QStringList addressableVCardFields(); Q_SIGNALS: void emergencyNumbersChanged(); void voicemailNumberChanged(); void voicemailCountChanged(); void voicemailIndicatorChanged(); void networkNameChanged(); void countryCodeChanged(); void emergencyCallsAvailableChanged(); void simLockedChanged(); void serialChanged(); private Q_SLOTS: void onEmergencyNumbersChanged(const QStringList &numbers); void onCountryCodeChanged(const QString &countryCode); void onVoicemailNumberChanged(const QString &number); void onVoicemailCountChanged(uint count); void onVoicemailIndicatorChanged(bool visible); // reimplemented from AccountEntry void onConnectionChanged(Tp::ConnectionPtr connection); protected: explicit OfonoAccountEntry(const Tp::AccountPtr &account, QObject *parent = 0); private: QStringList mEmergencyNumbers; QString mCountryCode; QString mVoicemailNumber; uint mVoicemailCount; bool mVoicemailIndicator; QString mSerial; USSDManager *mUssdManager; }; #endif // OFONOACCOUNTENTRY_H telephony-service-0.5.3/libtelephonyservice/participant.cpp000066400000000000000000000033511455543255600243050ustar00rootroot00000000000000/* * Copyright (C) 2013-2016 Canonical, Ltd. * * Authors: * Gustavo Pichorim Boiko * Tiago Salem Herrmann * * This file is part of telephony-service. * * telephony-service is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; version 3. * * telephony-service 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 . */ #include "participant.h" Participant::Participant(const QString &identifier, uint roles, uint handle, const QString &avatar, uint state, QObject *parent) : ContactWatcher(parent), mRoles(roles), mHandle(handle), mAvatar(avatar), mState(state) { classBegin(); setIdentifier(identifier); componentComplete(); } Participant::Participant(QObject *parent) : ContactWatcher(parent) { classBegin(); componentComplete(); } Participant::Participant(const Participant &other) { // we just need to set the identifier, the rest will come after the info is fetched setIdentifier(other.identifier()); } Participant::~Participant() { } void Participant::setRoles(uint roles) { mRoles = roles; } uint Participant::roles() const { return mRoles; } uint Participant::handle() const { return mHandle; } uint Participant::state() const { return mState; } QString Participant::avatar() const { return mAvatar; } telephony-service-0.5.3/libtelephonyservice/participant.h000066400000000000000000000033301455543255600237470ustar00rootroot00000000000000/* * Copyright (C) 2013-2016 Canonical, Ltd. * * Authors: * Gustavo Pichorim Boiko * Tiago Salem Herrmann * * This file is part of telephony-service. * * telephony-service is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; version 3. * * telephony-service 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 . */ #ifndef PARTICIPANT_H #define PARTICIPANT_H #include "contactwatcher.h" class Participant : public ContactWatcher { Q_OBJECT Q_PROPERTY(uint roles READ roles NOTIFY rolesChanged) Q_ENUMS(ParticipantState) public: enum ParticipantState { ParticipantStateRegular = 0, ParticipantStateRemotePending = 1, ParticipantStateLocalPending = 2, }; explicit Participant(const QString &identifier, uint roles, uint handle, const QString &avatar = QString(), uint state = 0, QObject *parent = 0); explicit Participant(QObject *parent = 0); explicit Participant(const Participant &other); ~Participant(); void setRoles(uint roles); uint roles() const; uint handle() const; QString avatar() const; uint state() const; Q_SIGNAL void rolesChanged(); private: uint mRoles; uint mHandle; QString mAvatar; uint mState; }; #endif // PARTICIPANT_H telephony-service-0.5.3/libtelephonyservice/phoneutils.cpp000066400000000000000000000145611455543255600241660ustar00rootroot00000000000000/* * Copyright (C) 2012-2017 Canonical, Ltd. * * Authors: * Gustavo Pichorim Boiko * Renato Araujo Oliveira Filho * Tiago Salem Herrmann * * This file is part of telephony-service. * * telephony-service is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; version 3. * * telephony-service 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 . */ #include "phoneutils.h" #include #include #include #include #include #include QString PhoneUtils::mCountryCode = QString(); PhoneUtils::PhoneUtils(QObject *parent) : QObject(parent) { } void PhoneUtils::setCountryCode(const QString &countryCode) { mCountryCode = countryCode; } QString PhoneUtils::countryCode() { if (!mCountryCode.isEmpty()) { return mCountryCode; } QString countryCode = QLocale::system().name().split("_").last(); if (countryCode.size() < 2) { // fallback to US if no valid country code was provided, otherwise libphonenumber // will fail to parse any numbers return QString("US"); } return countryCode; } QString PhoneUtils::normalizePhoneNumber(const QString &phoneNumber) { static i18n::phonenumbers::PhoneNumberUtil *phonenumberUtil = i18n::phonenumbers::PhoneNumberUtil::GetInstance(); if (!isPhoneNumber(phoneNumber)) { return phoneNumber; } std::string number = phoneNumber.toStdString(); phonenumberUtil->NormalizeDiallableCharsOnly(&number); return QString::fromStdString(number); } PhoneUtils::PhoneNumberMatchType PhoneUtils::comparePhoneNumbers(const QString &phoneNumberA, const QString &phoneNumberB) { static i18n::phonenumbers::PhoneNumberUtil *phonenumberUtil = i18n::phonenumbers::PhoneNumberUtil::GetInstance(); // just do a simple string comparison if we are dealing with non phone numbers if (!isPhoneNumber(phoneNumberA) || !isPhoneNumber(phoneNumberB)) { return phoneNumberA == phoneNumberB ? PhoneUtils::EXACT_MATCH : PhoneUtils::INVALID_NUMBER; } QString normalizedPhoneNumberA = normalizePhoneNumber(phoneNumberA); QString normalizedPhoneNumberB = normalizePhoneNumber(phoneNumberB); if (normalizedPhoneNumberA.size() < 7 || normalizedPhoneNumberB.size() < 7) { return normalizedPhoneNumberA == normalizedPhoneNumberB ? PhoneUtils::EXACT_MATCH : PhoneUtils::NO_MATCH; } i18n::phonenumbers::PhoneNumberUtil::MatchType match = phonenumberUtil-> IsNumberMatchWithTwoStrings(phoneNumberA.toStdString(), phoneNumberB.toStdString()); return (PhoneNumberMatchType)match; } bool PhoneUtils::isPhoneNumber(const QString &phoneNumber) { static i18n::phonenumbers::PhoneNumberUtil *phonenumberUtil = i18n::phonenumbers::PhoneNumberUtil::GetInstance(); std::string formattedNumber; i18n::phonenumbers::PhoneNumber number; i18n::phonenumbers::PhoneNumberUtil::ErrorType error; error = phonenumberUtil->Parse(phoneNumber.toStdString(), countryCode().toStdString(), &number); switch(error) { case i18n::phonenumbers::PhoneNumberUtil::INVALID_COUNTRY_CODE_ERROR: qWarning() << "Invalid country code for:" << phoneNumber; return false; case i18n::phonenumbers::PhoneNumberUtil::NOT_A_NUMBER: qWarning() << "The phone number is not a valid number:" << phoneNumber; return false; case i18n::phonenumbers::PhoneNumberUtil::TOO_SHORT_AFTER_IDD: case i18n::phonenumbers::PhoneNumberUtil::TOO_SHORT_NSN: case i18n::phonenumbers::PhoneNumberUtil::TOO_LONG_NSN: qWarning() << "Invalid phone number" << phoneNumber; return false; default: break; } return true; } bool PhoneUtils::isEmergencyNumber(const QString &phoneNumber, const QString &countryCode) { QString finalCode = countryCode; if (finalCode.isEmpty()) { finalCode = PhoneUtils::countryCode(); } static const i18n::phonenumbers::ShortNumberInfo short_info; return short_info.IsEmergencyNumber(normalizePhoneNumber(phoneNumber).toStdString(), finalCode.toStdString()); } bool PhoneUtils::phoneNumberHasCountryCode(const QString &phoneNumber) { return false; } QStringList PhoneUtils::supportedRegions() { static i18n::phonenumbers::PhoneNumberUtil *phonenumberUtil = i18n::phonenumbers::PhoneNumberUtil::GetInstance(); std::set regions; phonenumberUtil->GetSupportedRegions(®ions); QStringList result; for (auto region : regions) { result << QString::fromStdString(region); } return result; } QString PhoneUtils::getFullNumber(const QString &number, const QString &defaultCountryCode, const QString &defaultAreaCode) { QString normalizedNumber = normalizePhoneNumber(number); static i18n::phonenumbers::PhoneNumberUtil *phonenumberUtil = i18n::phonenumbers::PhoneNumberUtil::GetInstance(); std::string formattedNumber; i18n::phonenumbers::PhoneNumber phoneNumber; std:: string regionCode; phonenumberUtil->GetRegionCodeForCountryCode(defaultCountryCode.toInt(), ®ionCode); phonenumberUtil->Parse(normalizedNumber.toStdString(), regionCode, &phoneNumber); if (phoneNumber.country_code() == 0 && !defaultCountryCode.isEmpty()) { phoneNumber.set_country_code(defaultCountryCode.toInt()); } // FIXME: getting the area code from libphonenumber seems to be broken, so for now we don't deal with that /* int length = phonenumberUtil->GetLengthOfGeographicalAreaCode(phoneNumber); if (length == 0 && !defaultAreaCode.isEmpty()) { phoneNumber.set_national_number(QString("%1%2").arg(defaultAreaCode, normalizedNumber).toULongLong()); } */ phonenumberUtil->Format(phoneNumber, i18n::phonenumbers::PhoneNumberUtil::INTERNATIONAL, &formattedNumber); return QString::fromStdString(formattedNumber); } telephony-service-0.5.3/libtelephonyservice/phoneutils.h000066400000000000000000000045151455543255600236310ustar00rootroot00000000000000/* * Copyright (C) 2012-2017 Canonical, Ltd. * * Authors: * Gustavo Pichorim Boiko * Renato Araujo Oliveira Filho * Tiago Salem Herrmann * * This file is part of telephony-service. * * telephony-service is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; version 3. * * telephony-service 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 . */ #ifndef PHONEUTILS_H #define PHONEUTILS_H #include #include class PhoneUtils : public QObject { Q_OBJECT Q_ENUMS(PhoneNumberMatchType) public: enum PhoneNumberMatchType { INVALID_NUMBER = i18n::phonenumbers::PhoneNumberUtil::INVALID_NUMBER, NO_MATCH = i18n::phonenumbers::PhoneNumberUtil::NO_MATCH, SHORT_NSN_MATCH = i18n::phonenumbers::PhoneNumberUtil::SHORT_NSN_MATCH, NSN_MATCH = i18n::phonenumbers::PhoneNumberUtil::NSN_MATCH, EXACT_MATCH = i18n::phonenumbers::PhoneNumberUtil::EXACT_MATCH }; explicit PhoneUtils(QObject *parent = 0); Q_INVOKABLE static void setCountryCode(const QString &countryCode); Q_INVOKABLE static QString countryCode(); Q_INVOKABLE static PhoneNumberMatchType comparePhoneNumbers(const QString &number1, const QString &number2); Q_INVOKABLE static bool isPhoneNumber(const QString &phoneNumber); Q_INVOKABLE static QString normalizePhoneNumber(const QString &phoneNumber); Q_INVOKABLE static bool isEmergencyNumber(const QString &phoneNumber, const QString &countryCode = QString()); Q_INVOKABLE static bool phoneNumberHasCountryCode(const QString &phoneNumber); Q_INVOKABLE static QStringList supportedRegions(); Q_INVOKABLE static QString getFullNumber(const QString &number, const QString &defaultCountryCode, const QString &defaultAreaCode); private: static QString mCountryCode; }; #endif // PHONEUTILS_H telephony-service-0.5.3/libtelephonyservice/protocol.cpp000066400000000000000000000204061455543255600236300ustar00rootroot00000000000000/* * Copyright (C) 2015-2016 Canonical, Ltd. * * Authors: * Gustavo Pichorim Boiko * Tiago Salem Herrmann * * This file is part of telephony-service. * * telephony-service is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; version 3. * * telephony-service 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 . */ #include "protocol.h" #include "dbustypes.h" #include #include Protocol::Protocol(const ProtocolStruct & protocol) : mName(protocol.name) , mFeatures(protocol.features) , mFallbackProtocol(protocol.fallbackProtocol) , mFallbackMatchRule((MatchRule)protocol.fallbackMatchRule) , mFallbackSourceProperty(protocol.fallbackSourceProperty) , mFallbackDestinationProperty(protocol.fallbackDestinationProperty) , mShowOnSelector(protocol.showOnSelector) , mShowOnlineStatus(protocol.showOnlineStatus) , mBackgroundImage(protocol.backgroundImage) , mIcon(protocol.icon) , mServiceName(protocol.serviceName) , mServiceDisplayName(protocol.serviceDisplayName) , mJoinExistingChannels(protocol.joinExistingChannels) , mReturnToSend(protocol.returnToSend) , mEnableAttachments(protocol.enableAttachments) , mEnableRejoin(protocol.enableRejoin) , mEnableTabCompletion(protocol.enableTabCompletion) , mLeaveRoomsOnClose(protocol.leaveRoomsOnClose) , mEnableChatStates(protocol.enableChatStates) { } Protocol::Protocol(const QString &name, Features features, const QString &fallbackProtocol, MatchRule fallbackMatchRule, const QString &fallbackSourceProperty, const QString &fallbackDestinationProperty, bool showOnSelector, bool showOnlineStatus, const QString &backgroundImage, const QString &icon, const QString &serviceName, const QString &serviceDisplayName, bool joinExistingChannels, bool returnToSend, bool enableAttachments, bool enableRejoin, bool enableTabCompletion, bool leaveRoomsOnClose, bool enableChatStates, QObject *parent) : QObject(parent) , mName(name) , mFeatures(features) , mFallbackProtocol(fallbackProtocol) , mFallbackMatchRule(fallbackMatchRule) , mFallbackSourceProperty(fallbackSourceProperty) , mFallbackDestinationProperty(fallbackDestinationProperty) , mShowOnSelector(showOnSelector) , mShowOnlineStatus(showOnlineStatus) , mBackgroundImage(backgroundImage) , mIcon(icon) , mServiceName(serviceName) , mServiceDisplayName(serviceDisplayName) , mJoinExistingChannels(joinExistingChannels) , mReturnToSend(returnToSend) , mEnableAttachments(enableAttachments) , mEnableRejoin(enableRejoin) , mEnableTabCompletion(enableTabCompletion) , mLeaveRoomsOnClose(leaveRoomsOnClose) , mEnableChatStates(enableChatStates) { } ProtocolStruct Protocol::dbusType() { return ProtocolStruct{mName, static_cast(mFeatures), mFallbackProtocol, static_cast(mFallbackMatchRule), mFallbackSourceProperty, mFallbackDestinationProperty, mShowOnSelector, mShowOnlineStatus, mBackgroundImage, mIcon, mServiceName, mServiceDisplayName, mJoinExistingChannels, mReturnToSend, mEnableAttachments, mEnableRejoin, mEnableTabCompletion, mLeaveRoomsOnClose, mEnableChatStates}; } QString Protocol::name() const { return mName; } QString Protocol::icon() const { return mIcon; } QString Protocol::serviceName() const { return mServiceName; } Protocol::Features Protocol::features() const { return mFeatures; } QString Protocol::fallbackProtocol() const { return mFallbackProtocol; } Protocol::MatchRule Protocol::fallbackMatchRule() const { return mFallbackMatchRule; } QString Protocol::fallbackSourceProperty() const { return mFallbackSourceProperty; } QString Protocol::fallbackDestinationProperty() const { return mFallbackDestinationProperty; } bool Protocol::showOnSelector() const { return mShowOnSelector; } bool Protocol::showOnlineStatus() const { return mShowOnlineStatus; } QString Protocol::backgroundImage() const { return mBackgroundImage; } QString Protocol::serviceDisplayName() const { return mServiceDisplayName; } bool Protocol::joinExistingChannels() const { return mJoinExistingChannels; } bool Protocol::returnToSend() const { return mReturnToSend; } bool Protocol::enableAttachments() const { return mEnableAttachments; } bool Protocol::enableRejoin() const { return mEnableRejoin; } bool Protocol::enableTabCompletion() const { return mEnableTabCompletion; } bool Protocol::leaveRoomsOnClose() const { return mLeaveRoomsOnClose; } bool Protocol::enableChatStates() const { return mEnableChatStates; } Protocol *Protocol::fromFile(const QString &fileName) { QFileInfo file(fileName); if (!file.isReadable() || file.suffix() != "protocol") { return 0; } QString protocolName = file.baseName(); QSettings settings(fileName, QSettings::IniFormat); settings.setIniCodec("UTF-8"); settings.beginGroup("Protocol"); QString name = settings.value("Name", protocolName).toString(); QStringList featureList = settings.value("Features").toStringList(); Protocol::Features features; Q_FOREACH(const QString &feature, featureList) { if (feature == "text") { features |= Protocol::TextChats; } else if (feature == "voice") { features |= Protocol::VoiceCalls; } } QString fallbackProtocol = settings.value("FallbackProtocol").toString(); QString matchRuleString = settings.value("FallbackMatchRule").toString(); MatchRule matchRule = MatchAny; if (matchRuleString == "match_any") { matchRule = MatchAny; } else if (matchRuleString == "match_properties") { matchRule = MatchProperties; } QString fallbackSourceProperty = settings.value("FallbackSourceProperty").toString(); QString fallbackDestinationProperty = settings.value("FallbackDestinationProperty").toString(); bool showOnSelector = settings.value("ShowOnSelector", true).toBool(); bool showOnlineStatus = settings.value("ShowOnlineStatus", false).toBool(); QString backgroundImage = settings.value("BackgroundImage").toString(); QString icon = settings.value("Icon").toString(); QString serviceName = settings.value("ServiceName").toString(); QString serviceDisplayName = settings.value("ServiceDisplayName").toString(); bool joinExistingChannels = settings.value("JoinExistingChannels").toBool(); bool returnToSend = settings.value("ReturnToSend").toBool(); bool enableAttachments = settings.value("EnableAttachments").toBool(); bool enableRejoin = settings.value("EnableRejoin").toBool(); bool enableTabCompletion = settings.value("EnableTabCompletion").toBool(); bool leaveRoomsOnClose = settings.value("LeaveRoomsOnClose").toBool(); bool enableChatStates = settings.value("EnableChatStates").toBool(); return new Protocol(name, features, fallbackProtocol, matchRule, fallbackSourceProperty, fallbackDestinationProperty, showOnSelector, showOnlineStatus, backgroundImage, icon, serviceName, serviceDisplayName, joinExistingChannels, returnToSend, enableAttachments, enableRejoin, enableTabCompletion, leaveRoomsOnClose, enableChatStates); } telephony-service-0.5.3/libtelephonyservice/protocol.h000066400000000000000000000152631455543255600233020ustar00rootroot00000000000000/* * Copyright (C) 2015-2016 Canonical, Ltd. * * Authors: * Gustavo Pichorim Boiko * Tiago Salem Herrmann * * This file is part of telephony-service. * * telephony-service is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; version 3. * * telephony-service 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 . */ #ifndef PROTOCOL_H #define PROTOCOL_H #include "dbustypes.h" #include /// @brief describes one protocol and the features it supports class Protocol : public QObject { Q_OBJECT /// @brief the name of the protocol Q_PROPERTY(QString name READ name CONSTANT) /// @brief the features this protocol supports Q_PROPERTY(Features features READ features CONSTANT) /// @brief the fallback protocol to be used for operations that support it (mainly text features) Q_PROPERTY(QString fallbackProtocol READ fallbackProtocol CONSTANT) /// @brief the strategy to be used when matching fallback accounts Q_PROPERTY(MatchRule fallbackMatchRule READ fallbackMatchRule CONSTANT) /// @brief the property to be used on this protocol to match the fallback account Q_PROPERTY(QString fallbackSourceProperty READ fallbackSourceProperty CONSTANT) /// @brief the property to be used on the fallback protocol to match the account Q_PROPERTY(QString fallbackDestinationProperty READ fallbackDestinationProperty CONSTANT) /// @brief whether accounts from this protocol should be shown on account selectors Q_PROPERTY(bool showOnSelector READ showOnSelector CONSTANT) /// @brief whether the online status of contacts for this account should be shown on UI Q_PROPERTY(bool showOnlineStatus READ showOnlineStatus CONSTANT) /// @brief the file path for the image that represents this protocol Q_PROPERTY(QString backgroundImage READ backgroundImage CONSTANT) /// @brief the file path for the image that represents this protocol Q_PROPERTY(QString icon READ icon CONSTANT) /// @brief the title that represents this protocol Q_PROPERTY(QString serviceName READ serviceName CONSTANT) /// @brief the name to display for this protocol Q_PROPERTY(QString serviceDisplayName READ serviceDisplayName CONSTANT) /// @brief whether this protocol allows joining existing channels Q_PROPERTY(bool joinExistingChannels READ joinExistingChannels CONSTANT) /// @brief whether this protocol should send the message directly when return is pressed Q_PROPERTY(bool returnToSend READ returnToSend CONSTANT) /// @brief whether this protocol supports attachments Q_PROPERTY(bool enableAttachments READ enableAttachments CONSTANT) /// @brief whether this protocol supports rejoin channels manually Q_PROPERTY(bool enableRejoin READ enableRejoin CONSTANT) /// @brief whether this protocol supports tab completion Q_PROPERTY(bool enableTabCompletion READ enableTabCompletion CONSTANT) /// @brief whether the app needs to request leave all room channels when the app closes Q_PROPERTY(bool leaveRoomsOnClose READ leaveRoomsOnClose CONSTANT) /// @brief whether the app support chat states as typing notifications Q_PROPERTY(bool enableChatStates READ enableChatStates CONSTANT) public: enum Feature { TextChats = 0x1, VoiceCalls = 0x2, AllFeatures = (TextChats | VoiceCalls) }; Q_DECLARE_FLAGS(Features, Feature) Protocol(const ProtocolStruct& protocolStruct); enum MatchRule { MatchAny, MatchProperties }; QString name() const; Features features() const; QString fallbackProtocol() const; MatchRule fallbackMatchRule() const; QString fallbackSourceProperty() const; QString fallbackDestinationProperty() const; bool showOnSelector() const; bool showOnlineStatus() const; QString backgroundImage() const; QString icon() const; QString serviceName() const; QString serviceDisplayName() const; bool joinExistingChannels() const; bool returnToSend() const; bool enableAttachments() const; bool enableRejoin() const; bool enableTabCompletion() const; bool leaveRoomsOnClose() const; bool enableChatStates() const; static Protocol *fromFile(const QString &fileName); ProtocolStruct dbusType(); friend class ProtocolManager; protected: explicit Protocol(const QString &name, Features features, const QString &fallbackProtocol = QString(), const MatchRule fallbackMatchRule = MatchAny, const QString &fallbackSourceProperty = QString(), const QString &fallbackDestinationProperty = QString(), bool showOnSelector = true, bool showOnlineStatus = false, const QString &backgroundImage = QString(), const QString &icon = QString(), const QString &serviceName = QString(), const QString &serviceDisplayName = QString(), bool joinExistingChannels = false, bool returnToSend = false, bool enableAttachments = true, bool enableRejoin = false, bool enableTabCompletion = false, bool leaveRoomsOnClose = false, bool enableChatStates = false, QObject *parent = 0); private: QString mName; Features mFeatures; QString mFallbackProtocol; MatchRule mFallbackMatchRule; QString mFallbackSourceProperty; QString mFallbackDestinationProperty; bool mShowOnSelector; bool mShowOnlineStatus; QString mBackgroundImage; QString mIcon; QString mServiceName; QString mServiceDisplayName; bool mJoinExistingChannels; bool mReturnToSend; bool mEnableAttachments; bool mEnableRejoin; bool mEnableTabCompletion; bool mLeaveRoomsOnClose; bool mEnableChatStates; }; class Protocols : public QList { public: ProtocolList dbusType() { // return list of DBus types ProtocolList protocolList; Q_FOREACH(Protocol *protocol, *this) { protocolList << protocol->dbusType(); } return protocolList; } }; #endif // PROTOCOL_H telephony-service-0.5.3/libtelephonyservice/protocolmanager.cpp000066400000000000000000000167131455543255600251710ustar00rootroot00000000000000/* * Copyright (C) 2015 Canonical, Ltd. * * Authors: * Gustavo Pichorim Boiko * * This file is part of telephony-service. * * telephony-service is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; version 3. * * telephony-service 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 . */ #include "protocolmanager.h" #include "telepathyhelper.h" #include "config.h" #include "dbustypes.h" #include #include QDBusArgument &operator<<(QDBusArgument &argument, const ProtocolStruct &protocol) { argument.beginStructure(); argument << protocol.name << protocol.features << protocol.fallbackProtocol << protocol.fallbackMatchRule << protocol.fallbackSourceProperty << protocol.fallbackDestinationProperty << protocol.showOnSelector << protocol.showOnlineStatus << protocol.backgroundImage << protocol.icon << protocol.serviceName << protocol.serviceDisplayName << protocol.joinExistingChannels << protocol.returnToSend << protocol.enableAttachments << protocol.enableRejoin << protocol.enableTabCompletion << protocol.leaveRoomsOnClose << protocol.enableChatStates; argument.endStructure(); return argument; } const QDBusArgument &operator>>(const QDBusArgument &argument, ProtocolStruct &protocol) { argument.beginStructure(); argument >> protocol.name >> protocol.features >> protocol.fallbackProtocol >> protocol.fallbackMatchRule >> protocol.fallbackSourceProperty >> protocol.fallbackDestinationProperty >> protocol.showOnSelector >> protocol.showOnlineStatus >> protocol.backgroundImage >> protocol.icon >> protocol.serviceName >> protocol.serviceDisplayName >> protocol.joinExistingChannels >> protocol.returnToSend >> protocol.enableAttachments >> protocol.enableRejoin >> protocol.enableTabCompletion >> protocol.leaveRoomsOnClose >> protocol.enableChatStates; argument.endStructure(); return argument; } /** * Protocol Manager acts in two senses. If protocols dir is accessible it takes info from there and exposes it thtrough DBus (handler will be accessible * in this case). Otherwise, it queries for protocols through DBus, avoiding accessing disk to get that information. This last is useful in confined * environments where info could only be accessible by DBus */ ProtocolManager::ProtocolManager(const QString &dir, QObject *parent) : QObject(parent), mProtocolsDir(dir) { QDir d(mProtocolsDir); // read from disk and emit signal of available protocols in case protocols directory exists (We are servers) if (d.exists()) { mFileWatcher.addPath(mProtocolsDir); connect(&mFileWatcher, SIGNAL(directoryChanged(QString)), SLOT(loadSupportedProtocols())); loadSupportedProtocols(); } else { // register DBus types and query protocols info through DBus in case protocols directory does not exists (We are clients) qDBusRegisterMetaType(); qDBusRegisterMetaType(); //TODO make DBus call to get the protocols QDBusInterface *interface = TelepathyHelper::instance()->handlerInterface(); if (!interface) { return; } connect(interface, SIGNAL(ProtocolsChanged(ProtocolList)), SLOT(onProtocolsChanged(ProtocolList))); QDBusReply reply = interface->call("GetProtocols"); if (!reply.isValid()) { return; } mProtocols.clear(); Q_FOREACH (const ProtocolStruct& protocol, reply.value()) { mProtocols << new Protocol(protocol); } } } ProtocolManager *ProtocolManager::instance() { static ProtocolManager self(protocolsDir()); return &self; } Protocols ProtocolManager::protocols() const { return mProtocols; } QStringList ProtocolManager::protocolNames() const { QStringList names; Q_FOREACH(const Protocol *protocol, mProtocols) { names << protocol->name(); } return names; } Protocols ProtocolManager::protocolsForFeatures(Protocol::Features features) const { Protocols filtered; Q_FOREACH(Protocol *protocol, mProtocols) { if (protocol->features() & features) { filtered << protocol; } } return filtered; } Protocols ProtocolManager::textProtocols() const { return protocolsForFeatures(Protocol::TextChats); } Protocols ProtocolManager::voiceProtocols() const { return protocolsForFeatures(Protocol::VoiceCalls); } Protocol *ProtocolManager::protocolByName(const QString &protocolName) const { Q_FOREACH(Protocol *protocol, mProtocols) { if (protocol->name() == protocolName) { return protocol; } } return 0; } bool ProtocolManager::isProtocolSupported(const QString &protocolName) const { return protocolByName(protocolName) != 0; } QQmlListProperty ProtocolManager::qmlProtocols() { return QQmlListProperty(this, 0, qmlProtocolsCount, qmlProtocolsAt); } int ProtocolManager::qmlProtocolsCount(QQmlListProperty *p) { Q_UNUSED(p); return ProtocolManager::instance()->protocols().count(); } Protocol *ProtocolManager::qmlProtocolsAt(QQmlListProperty *p, int index) { Q_UNUSED(p); return ProtocolManager::instance()->protocols()[index]; } QQmlListProperty ProtocolManager::qmlTextProtocols() { return QQmlListProperty(this, 0, qmlTextProtocolsCount, qmlTextProtocolsAt); } int ProtocolManager::qmlTextProtocolsCount(QQmlListProperty *p) { Q_UNUSED(p); return ProtocolManager::instance()->textProtocols().count(); } Protocol *ProtocolManager::qmlTextProtocolsAt(QQmlListProperty *p, int index) { Q_UNUSED(p); return ProtocolManager::instance()->textProtocols()[index]; } QQmlListProperty ProtocolManager::qmlVoiceProtocols() { return QQmlListProperty(this, 0, qmlVoiceProtocolsCount, qmlVoiceProtocolsAt); } int ProtocolManager::qmlVoiceProtocolsCount(QQmlListProperty *p) { Q_UNUSED(p); return ProtocolManager::instance()->voiceProtocols().count(); } Protocol *ProtocolManager::qmlVoiceProtocolsAt(QQmlListProperty *p, int index) { Q_UNUSED(p); return ProtocolManager::instance()->voiceProtocols()[index]; } void ProtocolManager::loadSupportedProtocols() { // clear previous entries Q_FOREACH(Protocol *protocol, mProtocols) { protocol->deleteLater(); } mProtocols.clear(); // and scan the directory QDir dir(mProtocolsDir); Q_FOREACH(QString entry, dir.entryList()) { if (!entry.endsWith(".protocol")) { continue; } Protocol *protocol = Protocol::fromFile(dir.absoluteFilePath(entry)); if (protocol) { protocol->setParent(this); mProtocols << protocol; } } Q_EMIT protocolsChanged(); } void ProtocolManager::onProtocolsChanged(const ProtocolList &protocolList) { mProtocols.clear(); Q_FOREACH (const ProtocolStruct &protocol, protocolList) { mProtocols << new Protocol(protocol); } Q_EMIT protocolsChanged(); } telephony-service-0.5.3/libtelephonyservice/protocolmanager.h000066400000000000000000000071521455543255600246330ustar00rootroot00000000000000/* * Copyright (C) 2015 Canonical, Ltd. * * Authors: * Gustavo Pichorim Boiko * * This file is part of telephony-service. * * telephony-service is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; version 3. * * telephony-service 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 . */ #ifndef PROTOCOLMANAGER_H #define PROTOCOLMANAGER_H #include #include #include #include "protocol.h" /// @brief Manages the list of supported protocols class ProtocolManager : public QObject { Q_OBJECT /// @brief all supported protocols Q_PROPERTY(QQmlListProperty protocols READ qmlProtocols NOTIFY protocolsChanged) /// @brief protocols that support text chats Q_PROPERTY(QQmlListProperty textProtocols READ qmlTextProtocols NOTIFY protocolsChanged) /// @brief protocols that support voice calls Q_PROPERTY(QQmlListProperty voiceProtocols READ qmlVoiceProtocols NOTIFY protocolsChanged) /// @brief the name of all supported protocols Q_PROPERTY(QStringList protocolNames READ protocolNames NOTIFY protocolsChanged) public: static ProtocolManager *instance(); /// @brief returns all supported protocols Protocols protocols() const; /// @brief return the name of all supported protocols QStringList protocolNames() const; /// @brief returns all protocols matching the given flags Protocols protocolsForFeatures(Protocol::Features features) const; /// @brief convenience function returning all protocols that support text chats Protocols textProtocols() const; /// @brief convenience function returning all protocols that support voice calls Protocols voiceProtocols() const; /// @brief returns the protocol information for the given @ref protocolName or 0 if not supported Protocol *protocolByName(const QString &protocolName) const; /// @brief checks if a given @ref protocolName is supported bool isProtocolSupported(const QString &protocolName) const; // QML protocols property helpers QQmlListProperty qmlProtocols(); static int qmlProtocolsCount(QQmlListProperty *p); static Protocol *qmlProtocolsAt(QQmlListProperty *p, int index); // QML textProtocols property helpers QQmlListProperty qmlTextProtocols(); static int qmlTextProtocolsCount(QQmlListProperty *p); static Protocol *qmlTextProtocolsAt(QQmlListProperty *p, int index); // QML voiceProtocols property helpers QQmlListProperty qmlVoiceProtocols(); static int qmlVoiceProtocolsCount(QQmlListProperty *p); static Protocol *qmlVoiceProtocolsAt(QQmlListProperty *p, int index); Q_SIGNALS: void protocolsChanged(); protected Q_SLOTS: void loadSupportedProtocols(); void onProtocolsChanged(const ProtocolList &protocolList); protected: explicit ProtocolManager(const QString &dir, QObject *parent = 0); private: Protocols mProtocols; QFileSystemWatcher mFileWatcher; QString mProtocolsDir; }; #endif // PROTOCOLMANAGER_H telephony-service-0.5.3/libtelephonyservice/ringtone.cpp000066400000000000000000000202071455543255600236130ustar00rootroot00000000000000/* * Copyright (C) 2012 Canonical, Ltd. * * Authors: * Gustavo Pichorim Boiko * * This file is part of telephony-service. * * telephony-service is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; version 3. * * telephony-service 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 . */ #include "greetercontacts.h" #include "ringtone.h" #include #include #include #define CUSTOM_RINGTONE_SUBDIR "sounds/ringtones" RingtoneWorker::RingtoneWorker(QObject *parent) : QObject(parent), mCallAudioPlayer(NULL), mCallAudioPlaylist(this), mMessageAudioPlayer(NULL) { mCallAudioPlaylist.setPlaybackMode(QMediaPlaylist::Loop); mCallAudioPlaylist.setCurrentIndex(0); } void RingtoneWorker::playIncomingCallSound(const QString &customSound) { if (!qgetenv("PA_DISABLED").isEmpty()) { return; } if (GreeterContacts::instance()->silentMode()) { return; } // force delete all media player instances stopIncomingCallSound(); QString callSound = GreeterContacts::instance()->incomingCallSound(); if (!customSound.isEmpty()) { QFileInfo file(customSound); if (file.exists() && file.isFile()) { // mime database to detect file type QMimeDatabase db; // the mime type (to test if it is an audio file QMimeType type = db.mimeTypeForFile(customSound); if(type.name().startsWith("audio")){ callSound = customSound; } } } qDebug() << "playIncomingCallSound" << callSound; mCallAudioPlaylist.addMedia(QUrl::fromLocalFile(callSound)); mCallAudioPlayer = new QMediaPlayer(this); mCallAudioPlayer->setAudioRole(QAudio::RingtoneRole); mCallAudioPlayer->setPlaylist(&mCallAudioPlaylist); mCallAudioPlayer->play(); } void RingtoneWorker::stopIncomingCallSound() { if (mCallAudioPlayer) { // WORKAROUND: if we call stop and the stream is already over, qmediaplayer plays again. mCallAudioPlayer->pause(); mCallAudioPlayer->deleteLater(); mCallAudioPlayer = NULL; } mCallAudioPlaylist.clear(); } void RingtoneWorker::playIncomingMessageSound(const QString &customSound) { if (!qgetenv("PA_DISABLED").isEmpty()) { return; } if (GreeterContacts::instance()->silentMode()) { return; } // Re-create if in error state. A typical case is when media-hub-server has // crashed and we need to start from a clean slate. if (mMessageAudioPlayer && mMessageAudioPlayer->error()) { qDebug() << "mMessageAudioPlayer in error state (" << mMessageAudioPlayer->error() << "), recreating"; mMessageAudioPlayer->deleteLater(); mMessageAudioPlayer = NULL; } if (!mMessageAudioPlayer) { mMessageAudioPlayer = new QMediaPlayer(this); mMessageAudioPlayer->setAudioRole(QAudio::NotificationRole); } // WORKAROUND: there is a bug in qmediaplayer/(media-hub?) that never goes into Stopped mode. if (mMessageAudioPlayer->duration() == mMessageAudioPlayer->position()) { mMessageAudioPlayer->stop(); } if (mMessageAudioPlayer->state() == QMediaPlayer::PlayingState) { return; } QString messageSound = GreeterContacts::instance()->incomingMessageSound(); if (!customSound.isEmpty()) { QFileInfo file(customSound); if (file.exists() && file.isFile()) { // mime database to detect file type QMimeDatabase db; // the mime type (to test if it is an audio file QMimeType type = db.mimeTypeForFile(customSound); if(type.name().startsWith("audio")){ messageSound = customSound; } } } qDebug() << "playIncomingMessageSound" << messageSound; mMessageAudioPlayer->setMedia(QUrl::fromLocalFile(messageSound)); mMessageAudioPlayer->play(); } void RingtoneWorker::stopIncomingMessageSound() { stopSound(); } void RingtoneWorker::playIncomingEmergencySound() { playAlertSound(GreeterContacts::instance()->incomingEmergencySound()); } void RingtoneWorker::playIncomingWarningSound() { playAlertSound(GreeterContacts::instance()->incomingWarningSound()); } void RingtoneWorker::stopSound() { if (mMessageAudioPlayer) { mMessageAudioPlayer->pause(); mMessageAudioPlayer->deleteLater(); mMessageAudioPlayer = NULL; } } void RingtoneWorker::playAlertSound(const QString &soundFile) { if (!qgetenv("PA_DISABLED").isEmpty()) { return; } // Re-create if in error state. A typical case is when media-hub-server has // crashed and we need to start from a clean slate. if (mMessageAudioPlayer && mMessageAudioPlayer->error()) { qDebug() << "mMessageAudioPlayer in error state (" << mMessageAudioPlayer->error() << "), recreating"; mMessageAudioPlayer->deleteLater(); mMessageAudioPlayer = NULL; } if (!mMessageAudioPlayer) { mMessageAudioPlayer = new QMediaPlayer(this); mMessageAudioPlayer->setAudioRole(QAudio::AlarmRole); } // WORKAROUND: there is a bug in qmediaplayer/(media-hub?) that never goes into Stopped mode. if (mMessageAudioPlayer->duration() == mMessageAudioPlayer->position()) { mMessageAudioPlayer->stop(); } if (mMessageAudioPlayer->state() == QMediaPlayer::PlayingState) { return; } mMessageAudioPlayer->setMedia(QUrl::fromLocalFile(soundFile)); mMessageAudioPlayer->play(); } Ringtone::Ringtone(QObject *parent) : QObject(parent), mNbVibrateCycle(0) { mWorker = new RingtoneWorker(); mWorker->moveToThread(&mThread); mThread.start(); connect(&mVibrateTimer, SIGNAL(timeout()), this, SLOT(vibrate())); } Ringtone::~Ringtone() { mThread.quit(); mThread.wait(); } Ringtone *Ringtone::instance() { static Ringtone *self = new Ringtone(); return self; } void Ringtone::startVibrate(int nbCycle, int duration, int interval) { mVibrateTimer.stop(); mVibrateEffect.stop(); mNbVibrateCycle = nbCycle; mVibrateEffect.setDuration(duration); mVibrateEffect.setIntensity(1); //immediate vibrate vibrate(); mVibrateTimer.start(interval); } void Ringtone::vibrate() { if (mNbVibrateCycle <= 0) { mVibrateTimer.stop(); return; } mVibrateEffect.stop(); mVibrateEffect.start(); mNbVibrateCycle--; } void Ringtone::playIncomingCallSound(const QString &customSound) { QMetaObject::invokeMethod(mWorker, "playIncomingCallSound", Qt::QueuedConnection, Q_ARG(QString, customSound)); } void Ringtone::stopIncomingCallSound() { QMetaObject::invokeMethod(mWorker, "stopIncomingCallSound", Qt::QueuedConnection); } void Ringtone::playIncomingMessageSound(const QString &customSound) { if (GreeterContacts::instance()->incomingMessageVibrate() && !mVibrateTimer.isActive()) { startVibrate(1, 500, 1); } QMetaObject::invokeMethod(mWorker, "playIncomingMessageSound", Qt::QueuedConnection, Q_ARG(QString, customSound)); } void Ringtone::stopIncomingMessageSound() { QMetaObject::invokeMethod(mWorker, "stopIncomingMessageSound", Qt::QueuedConnection); } void Ringtone::playIncomingEmergencySound() { startVibrate(10, 3000, 4000); QMetaObject::invokeMethod(mWorker, "playIncomingEmergencySound", Qt::QueuedConnection); } void Ringtone::playIncomingWarningSound() { if (!mVibrateTimer.isActive()) { startVibrate(4, 3000, 4000); } QMetaObject::invokeMethod(mWorker, "playIncomingWarningSound", Qt::QueuedConnection); } void Ringtone::stopSound() { mVibrateEffect.stop(); mVibrateTimer.stop(); QMetaObject::invokeMethod(mWorker, "stopSound", Qt::QueuedConnection); } telephony-service-0.5.3/libtelephonyservice/ringtone.h000066400000000000000000000046661455543255600232730ustar00rootroot00000000000000/* * Copyright (C) 2012 Canonical, Ltd. * * Authors: * Gustavo Pichorim Boiko * * This file is part of telephony-service. * * telephony-service is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; version 3. * * telephony-service 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 . */ #ifndef RINGTONE_H #define RINGTONE_H #include #include #include #include #include #include #include #include #include #include #include #include #include class RingtoneWorker : public QObject { Q_OBJECT public: RingtoneWorker(QObject *parent = 0); public Q_SLOTS: void playIncomingCallSound(const QString &customSound = QString()); void stopIncomingCallSound(); void playIncomingMessageSound(const QString &customSound = QString()); void stopIncomingMessageSound(); void playIncomingEmergencySound(); void playIncomingWarningSound(); void stopSound(); private: void playAlertSound(const QString &soundFile); QMediaPlayer *mCallAudioPlayer; QMediaPlaylist mCallAudioPlaylist; QMediaPlayer *mMessageAudioPlayer; }; class Ringtone : public QObject { Q_OBJECT public: ~Ringtone(); static Ringtone *instance(); public Q_SLOTS: void playIncomingCallSound(const QString &customSound = QString()); void stopIncomingCallSound(); void playIncomingMessageSound(const QString &customSound = QString()); void stopIncomingMessageSound(); void playIncomingEmergencySound(); void playIncomingWarningSound(); void stopSound(); private Q_SLOTS: void vibrate(); private: explicit Ringtone(QObject *parent = 0); void startVibrate(int nbCycle, int duration, int interval); QFeedbackHapticsEffect mVibrateEffect; int mNbVibrateCycle; QTimer mVibrateTimer; RingtoneWorker *mWorker; QThread mThread; }; #endif // RINGTONE_H telephony-service-0.5.3/libtelephonyservice/rolesinterface.cpp000066400000000000000000000056551455543255600250050ustar00rootroot00000000000000/* * Copyright (C) 2016 Canonical, Ltd. * * Authors: * Roberto Mier Escandon * * This file is part of telephony-service. * * telephony-service is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; version 3. * * history-service 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 . */ #include ChannelInterfaceRolesInterface::ChannelInterfaceRolesInterface(const QString& busName, const QString& objectPath, QObject *parent) : Tp::AbstractInterface(busName, objectPath, staticInterfaceName(), QDBusConnection::sessionBus(), parent) { } ChannelInterfaceRolesInterface::ChannelInterfaceRolesInterface(const QDBusConnection& connection, const QString& busName, const QString& objectPath, QObject *parent) : Tp::AbstractInterface(busName, objectPath, staticInterfaceName(), connection, parent) { } ChannelInterfaceRolesInterface::ChannelInterfaceRolesInterface(Tp::DBusProxy *proxy) : Tp::AbstractInterface(proxy, staticInterfaceName()) { } ChannelInterfaceRolesInterface::ChannelInterfaceRolesInterface(const Tp::Client::ChannelInterface& mainInterface) : Tp::AbstractInterface(mainInterface.service(), mainInterface.path(), staticInterfaceName(), mainInterface.connection(), mainInterface.parent()) { } ChannelInterfaceRolesInterface::ChannelInterfaceRolesInterface(const Tp::Client::ChannelInterface& mainInterface, QObject *parent) : Tp::AbstractInterface(mainInterface.service(), mainInterface.path(), staticInterfaceName(), mainInterface.connection(), parent) { } void ChannelInterfaceRolesInterface::invalidate(Tp::DBusProxy *proxy, const QString &error, const QString &message) { Tp::AbstractInterface::invalidate(proxy, error, message); } HandleRolesMap ChannelInterfaceRolesInterface::getRoles() const { QDBusMessage msg = QDBusMessage::createMethodCall(service(), path(), TP_QT_IFACE_PROPERTIES, QLatin1String("Get")); msg << interface() << QLatin1String("Roles"); QDBusMessage result = connection().call(msg); return qdbus_cast(result.arguments().at(0).value().variant()); } bool ChannelInterfaceRolesInterface::getCanUpdateRoles() const { QDBusMessage msg = QDBusMessage::createMethodCall(service(), path(), TP_QT_IFACE_PROPERTIES, QLatin1String("Get")); msg << interface() << QLatin1String("CanUpdateRoles"); QDBusMessage result = connection().call(msg); return qdbus_cast(result.arguments().at(0).value().variant()); } telephony-service-0.5.3/libtelephonyservice/rolesinterface.h000066400000000000000000000150531455543255600244430ustar00rootroot00000000000000/* * Copyright (C) 2016 Canonical, Ltd. * * Authors: * Roberto Mier Escandon * * This file is part of telephony-service. * * telephony-service is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; version 3. * * history-service 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 . */ #ifndef CHANNELINTERFACEROLESINTERFACE_H #define CHANNELINTERFACEROLESINTERFACE_H #include #include #include /** * \struct HandleRolesMap * \ingroup mapping * \headerfile TelepathyQt/types.h * * Convertible with * QMap, but needed to have a discrete type in the Qt type system. * * A map from channel-specific handles to their owners. */ struct HandleRolesMap : public QMap { inline HandleRolesMap() : QMap() {} inline HandleRolesMap(const QMap& a) : QMap(a) {} inline HandleRolesMap& operator=(const QMap& a) { *(static_cast*>(this)) = a; return *this; } }; Q_DECLARE_METATYPE(HandleRolesMap) class ChannelInterfaceRolesInterface : public Tp::AbstractInterface { Q_OBJECT public: /** * Returns the name of the interface "org.freedesktop.Telepathy.Channel.Interface.Roles", which this class * represents. * * \return The D-Bus interface name. */ static inline QLatin1String staticInterfaceName() { return QLatin1String("org.freedesktop.Telepathy.Channel.Interface.Roles"); } /** * Creates a ChannelInterfaceRolesInterface associated with the given object on the session bus. * * \param busName Name of the service the object is on. * \param objectPath Path to the object on the service. * \param parent Passed to the parent class constructor. */ ChannelInterfaceRolesInterface( const QString& busName, const QString& objectPath, QObject* parent = 0 ); /** * Creates a ChannelInterfaceRolesInterface associated with the given object on the given bus. * * \param connection The bus via which the object can be reached. * \param busName Name of the service the object is on. * \param objectPath Path to the object on the service. * \param parent Passed to the parent class constructor. */ ChannelInterfaceRolesInterface( const QDBusConnection& connection, const QString& busName, const QString& objectPath, QObject* parent = 0 ); /** * Creates a ChannelInterfaceRolesInterface associated with the same object as the given proxy. * * \param proxy The proxy to use. It will also be the QObject::parent() * for this object. */ ChannelInterfaceRolesInterface(Tp::DBusProxy *proxy); /** * Creates a ChannelInterfaceRolesInterface associated with the same object as the given proxy. * Additionally, the created proxy will have the same parent as the given * proxy. * * \param mainInterface The proxy to use. */ explicit ChannelInterfaceRolesInterface(const Tp::Client::ChannelInterface& mainInterface); /** * Creates a ChannelInterfaceRolesInterface associated with the same object as the given proxy. * However, a different parent object can be specified. * * \param mainInterface The proxy to use. * \param parent Passed to the parent class constructor. */ ChannelInterfaceRolesInterface(const Tp::Client::ChannelInterface& mainInterface, QObject* parent); /** * Asynchronous getter for the remote object property \c Roles of type \c HandleRolesMap. * * \return A pending variant which will emit finished when the property has been * retrieved. */ inline Tp::PendingVariant *requestPropertyRoles() const { return internalRequestProperty(QLatin1String("Roles")); } /** * Asynchronous getter for the remote object property \c CanUpdateRoles of type \c bool. * * \return A pending variant which will emit finished when the property has been * retrieved. */ inline Tp::PendingVariant *requestPropertyCanUpdateRoles() const { return internalRequestProperty(QLatin1String("CanUpdateRoles")); } /** * Request all of the DBus properties on the interface. * * \return A pending variant map which will emit finished when the properties have * been retrieved. */ Tp::PendingVariantMap *requestAllProperties() const { return internalRequestAllProperties(); } /** * Synchronous version to get Roles property */ HandleRolesMap getRoles() const; /** * Synchronous version to get CanUpdateRoles property */ bool getCanUpdateRoles() const; public Q_SLOTS: /** * Begins a call to the D-Bus method \c UpdateRoles on the remote object. * * Update the roles in the server * */ inline QDBusPendingReply<> UpdateRoles(const HandleRolesMap &contactRoles, int timeout = -1) { if (!invalidationReason().isEmpty()) { return QDBusPendingReply<>(QDBusMessage::createError( invalidationReason(), invalidationMessage() )); } QDBusMessage callMessage = QDBusMessage::createMethodCall(this->service(), this->path(), this->staticInterfaceName(), QLatin1String("UpdateRoles")); callMessage << QVariant::fromValue(contactRoles); return this->connection().asyncCall(callMessage, timeout); } Q_SIGNALS: /** * Represents the signal \c RolesChanged on the remote object. * * Emitted when the state the roles of the channel has changed. * * \param added * * map of handles and related roles added * * \param removed * * map of handles and related roles removed */ void RolesChanged(const HandleRolesMap &added, const HandleRolesMap& removed); protected: virtual void invalidate(Tp::DBusProxy *, const QString &, const QString &); }; #endif // CHANNELINTERFACEROLESINTERFACE_H telephony-service-0.5.3/libtelephonyservice/telepathyhelper.cpp000066400000000000000000000530661455543255600251760ustar00rootroot00000000000000/* * Copyright (C) 2012-2017 Canonical, Ltd. * * Authors: * Tiago Salem Herrmann * Gustavo Pichorim Boiko * * This file is part of telephony-service. * * telephony-service is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; version 3. * * telephony-service 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 . */ #include "telepathyhelper.h" #include "accountentry.h" #include "accountlist.h" #include "ofonoaccountentry.h" #include "accountentryfactory.h" #include "chatmanager.h" #include "callmanager.h" #include "config.h" #include "greetercontacts.h" #include "protocolmanager.h" #include #include #include #include #include template<> bool qMapLessThanKey(const QStringList &key1, const QStringList &key2) { return key1.size() > key2.size(); // sort by operator> ! } typedef struct { QList (*accountFunction)(); } QmlAccountData; TelepathyHelper::TelepathyHelper(QObject *parent) : QObject(parent), mPendingAccountReady(0), mDefaultCallAccount(NULL), mDefaultMessagingAccount(NULL), mChannelObserver(0), mReady(false), mChannelObserverPtr(NULL), mHandlerInterface(0), mApproverInterface(0), mFlightModeInterface("org.freedesktop.URfkill", "/org/freedesktop/URfkill", "org.freedesktop.URfkill", QDBusConnection::systemBus()) { mQmlAccounts = new AccountList(Protocol::AllFeatures, QString(), this); mQmlVoiceAccounts = new AccountList(Protocol::VoiceCalls, QString(), this); mQmlTextAccounts = new AccountList(Protocol::TextChats, QString(), this); mQmlPhoneAccounts = new AccountList(Protocol::AllFeatures, "ofono", this); qRegisterMetaType >(); mAccountFeatures << Tp::Account::FeatureCore << Tp::Account::FeatureProtocolInfo; mContactFeatures << Tp::Contact::FeatureAlias << Tp::Contact::FeatureAvatarData << Tp::Contact::FeatureAvatarToken << Tp::Contact::FeatureCapabilities << Tp::Contact::FeatureSimplePresence; mConnectionFeatures << Tp::Connection::FeatureCore << Tp::Connection::FeatureSelfContact << Tp::Connection::FeatureSimplePresence; Tp::ChannelFactoryPtr channelFactory = Tp::ChannelFactory::create(QDBusConnection::sessionBus()); channelFactory->addCommonFeatures(Tp::Channel::FeatureCore); // FIXME: at some point this needs to be fixed in tp-qt itself. channelFactory->setSubclassFor(audioConferenceSpec()); mAccountManager = Tp::AccountManager::create( Tp::AccountFactory::create(QDBusConnection::sessionBus(), mAccountFeatures), Tp::ConnectionFactory::create(QDBusConnection::sessionBus(), mConnectionFeatures), channelFactory, Tp::ContactFactory::create(mContactFeatures)); connect(mAccountManager->becomeReady(Tp::AccountManager::FeatureCore), SIGNAL(finished(Tp::PendingOperation*)), SLOT(onAccountManagerReady(Tp::PendingOperation*))); mClientRegistrar = Tp::ClientRegistrar::create(mAccountManager); connect(GreeterContacts::instance(), SIGNAL(phoneSettingsChanged(QString)), this, SLOT(onPhoneSettingsChanged(QString))); connect(GreeterContacts::instance(), SIGNAL(soundSettingsChanged(QString)), this, SLOT(onPhoneSettingsChanged(QString))); connect(&mFlightModeInterface, SIGNAL(FlightModeChanged(bool)), this, SIGNAL(flightModeChanged())); mMmsEnabled = GreeterContacts::instance()->mmsEnabled(); } TelepathyHelper::~TelepathyHelper() { } TelepathyHelper *TelepathyHelper::instance() { static TelepathyHelper* helper = new TelepathyHelper(); return helper; } QStringList TelepathyHelper::accountIds() { QStringList ids; if (QCoreApplication::applicationName() == "telephony-service-handler" || mAccounts.size() != 0) { Q_FOREACH(const AccountEntry *account, mAccounts) { ids << account->accountId(); } } else if (!GreeterContacts::instance()->isGreeterMode()) { // if we are in greeter mode, we should not initialize the handler to get the account IDs QDBusReply reply = handlerInterface()->call("AccountIds"); if (reply.isValid()) { ids = reply.value(); } } return ids; } void TelepathyHelper::setMmsEnabled(bool enable) { GreeterContacts::instance()->setMmsEnabled(enable); } bool TelepathyHelper::mmsEnabled() { return mMmsEnabled; } bool TelepathyHelper::flightMode() { QDBusReply reply = mFlightModeInterface.call("IsFlightMode"); if (reply.isValid()) { return reply; } return false; } void TelepathyHelper::setFlightMode(bool value) { mFlightModeInterface.asyncCall("FlightMode", value); } QList TelepathyHelper::accounts() const { return mAccounts; } QList TelepathyHelper::activeAccounts() const { QList activeAccountList; Q_FOREACH(AccountEntry *account, mAccounts) { if (account->active()) { activeAccountList << account; } } return activeAccountList; } AccountList *TelepathyHelper::qmlAccounts() const { return mQmlAccounts; } AccountList *TelepathyHelper::qmlVoiceAccounts() const { return mQmlVoiceAccounts; } AccountList *TelepathyHelper::qmlTextAccounts() const { return mQmlTextAccounts; } AccountList *TelepathyHelper::qmlPhoneAccounts() const { return mQmlPhoneAccounts; } bool TelepathyHelper::multiplePhoneAccounts() const { int count = 0; Q_FOREACH(AccountEntry *account, phoneAccounts()) { if (account->active()) { count++; } } return (count > 1); } /** * If the @param originalAccount is listed as being the fallback of any other protocol, * this function will return the account that should be used instead. * @param originalAccount The original account that might be replaced * @return A list containing the replacement accounts or an empty list if none are suitable. */ QList TelepathyHelper::checkAccountOverload(AccountEntry *originalAccount) { QList accounts; if (!originalAccount) { return accounts; } QString protocol = originalAccount->protocolInfo()->name(); for (auto account : mAccounts) { // FIXME: check for matching properties if needed if (account->protocolInfo()->fallbackProtocol() == protocol) { accounts << account; } } return accounts; } /** * If the @param originalAccount is listed as having a fallback protocol, when the @param originalAccount * cannot be used by any reason (not connected, or not having a particular feature enabled), the fallback * account should be used. This function will try to find a suitable fallback account. * @return A list containing the fallback accounts or an empty list if none are suitable. */ QList TelepathyHelper::checkAccountFallback(AccountEntry *originalAccount) { QList accounts; if (!originalAccount) { return accounts; } QString fallbackProtocol = originalAccount->protocolInfo()->fallbackProtocol(); // FIXME: check for the match rules too // if the account doesn't have a fallback protocol specified, just return the empty list if (fallbackProtocol.isEmpty()) { return accounts; } for (auto account : mAccounts) { if (account->protocolInfo()->name() == fallbackProtocol) { accounts << account; } } return accounts; } QList TelepathyHelper::accountOverload(AccountEntry *originalAccount) { QList accounts; for (auto account : checkAccountOverload(originalAccount)) { accounts << account; } return accounts; } QList TelepathyHelper::accountFallback(AccountEntry *originalAccount) { QList accounts; for (auto account : checkAccountFallback(originalAccount)) { accounts << account; } return accounts; } QList TelepathyHelper::phoneAccounts() const { QList accountList; Q_FOREACH(AccountEntry *account, mAccounts) { if (account->type() == AccountEntry::PhoneAccount) { accountList << account; } } return accountList; } ChannelObserver *TelepathyHelper::channelObserver() const { return mChannelObserver; } QDBusInterface *TelepathyHelper::handlerInterface() const { // delay the loading of the handler interface, as it seems this is triggering // the dbus activation of the handler process if (!mHandlerInterface) { mHandlerInterface = new QDBusInterface("com.lomiri.TelephonyServiceHandler", "/com/lomiri/TelephonyServiceHandler", "com.lomiri.TelephonyServiceHandler", QDBusConnection::sessionBus(), const_cast(this)); } return mHandlerInterface; } QDBusInterface *TelepathyHelper::approverInterface() const { if (!mApproverInterface) { mApproverInterface = new QDBusInterface("org.freedesktop.Telepathy.Client.TelephonyServiceApprover", "/com/lomiri/TelephonyServiceApprover", "com.lomiri.TelephonyServiceApprover", QDBusConnection::sessionBus(), const_cast(this)); } return mApproverInterface; } bool TelepathyHelper::ready() const { return mReady; } void TelepathyHelper::registerChannelObserver(const QString &observerName) { QString name = observerName; if (name.isEmpty()) { name = "TelephonyPluginObserver"; } if (mChannelObserver) { unregisterClient(mChannelObserver); } mChannelObserver = new ChannelObserver(this); mChannelObserverPtr = Tp::AbstractClientPtr(mChannelObserver); if (registerClient(mChannelObserver, name)) { // we don't connect managers in handler, as they query the handler and cause a deadlock if (QCoreApplication::applicationName() != "telephony-service-handler") { // messages connect(mChannelObserver, SIGNAL(textChannelAvailable(Tp::TextChannelPtr)), ChatManager::instance(), SLOT(onTextChannelAvailable(Tp::TextChannelPtr))); // calls connect(mChannelObserver, SIGNAL(callChannelAvailable(Tp::CallChannelPtr)), CallManager::instance(), SLOT(onCallChannelAvailable(Tp::CallChannelPtr))); } Q_EMIT channelObserverCreated(mChannelObserver); } } void TelepathyHelper::unregisterChannelObserver() { unregisterClient(mChannelObserver); mChannelObserver->deleteLater(); mChannelObserverPtr.reset(); mChannelObserver = NULL; Q_EMIT channelObserverUnregistered(); } void TelepathyHelper::setupAccountEntry(AccountEntry *entry) { connect(entry, SIGNAL(connectedChanged()), SIGNAL(activeAccountsChanged())); connect(entry, SIGNAL(accountReady()), SLOT(onAccountReady())); connect(entry, SIGNAL(removed()), SLOT(onAccountRemoved())); OfonoAccountEntry *ofonoAccount = qobject_cast(entry); if (ofonoAccount) { connect(ofonoAccount, SIGNAL(emergencyCallsAvailableChanged()), SIGNAL(emergencyCallsAvailableChanged())); } } bool TelepathyHelper::registerClient(Tp::AbstractClient *client, QString name) { Tp::AbstractClientPtr clientPtr(client); bool succeeded = mClientRegistrar->registerClient(clientPtr, name); if (!succeeded) { name.append("%1"); int count = 0; // limit the number of registered clients to 20, that should be a safe margin while (!succeeded && count < 20) { succeeded = mClientRegistrar->registerClient(clientPtr, name.arg(++count)); if (succeeded) { name = name.arg(count); } } } if (succeeded) { QObject *object = dynamic_cast(client); if (object) { object->setProperty("clientName", TP_QT_IFACE_CLIENT + "." + name ); } } return succeeded; } bool TelepathyHelper::unregisterClient(Tp::AbstractClient *client) { Tp::AbstractClientPtr clientPtr(client); if (clientPtr) { return mClientRegistrar->unregisterClient(clientPtr); } return false; } AccountEntry *TelepathyHelper::accountForConnection(const Tp::ConnectionPtr &connection) const { if (connection.isNull()) { return 0; } Q_FOREACH(AccountEntry *accountEntry, mAccounts) { if (accountEntry->account()->connection() == connection) { return accountEntry; } } return 0; } AccountEntry *TelepathyHelper::accountForId(const QString &accountId) const { Q_FOREACH(AccountEntry *account, mAccounts) { if (account->accountId() == accountId) { return account; } } return 0; } Tp::ChannelClassSpec TelepathyHelper::audioConferenceSpec() { static Tp::ChannelClassSpec spec; if (!spec.isValid()) { spec = Tp::ChannelClassSpec(TP_QT_IFACE_CHANNEL_TYPE_CALL, Tp::HandleTypeNone); spec.setCallInitialAudioFlag(); } return spec; } void TelepathyHelper::onAccountRemoved() { AccountEntry *account = qobject_cast(sender()); if (!account) { return; } mAccounts.removeAll(account); Q_EMIT accountIdsChanged(); Q_EMIT accountsChanged(); Q_EMIT phoneAccountsChanged(); Q_EMIT activeAccountsChanged(); onPhoneSettingsChanged("DefaultSimForMessages"); onPhoneSettingsChanged("DefaultSimForCalls"); } void TelepathyHelper::onNewAccount(const Tp::AccountPtr &account) { if (!ProtocolManager::instance()->protocolByName(account->protocolName())) { return; } AccountEntry *accountEntry = AccountEntryFactory::createEntry(account, this); setupAccountEntry(accountEntry); mAccounts.append(accountEntry); QMap sortedOfonoAccounts; QMap sortedOtherAccounts; Q_FOREACH(AccountEntry *account, mAccounts) { QString modemObjName = account->account()->parameters().value("modem-objpath").toString(); if (modemObjName.isEmpty()) { sortedOtherAccounts[account->accountId()] = account; } else { sortedOfonoAccounts[modemObjName] = account; } } mAccounts = QList() << sortedOfonoAccounts.values() << sortedOtherAccounts.values() ; Q_EMIT accountIdsChanged(); Q_EMIT accountsChanged(); Q_EMIT phoneAccountsChanged(); Q_EMIT activeAccountsChanged(); onPhoneSettingsChanged("DefaultSimForMessages"); onPhoneSettingsChanged("DefaultSimForCalls"); Q_EMIT accountAdded(accountEntry); } void TelepathyHelper::onAccountManagerReady(Tp::PendingOperation *op) { // if the account manager ready job returns an error, just fail silently if (op->isError()) { qCritical() << "Failed to prepare Tp::AccountManager" << op->errorName() << op->errorMessage(); return; } // handle dynamic account adding and removing connect(mAccountManager.data(), SIGNAL(newAccount(const Tp::AccountPtr &)), SLOT(onNewAccount(const Tp::AccountPtr &))); Tp::AccountSetPtr accountSet; // try to find an account of the one of supported protocols Q_FOREACH(const QString &protocol, ProtocolManager::instance()->protocolNames()) { accountSet = mAccountManager->accountsByProtocol(protocol); Q_FOREACH(const Tp::AccountPtr &account, accountSet->accounts()) { onNewAccount(account); } } // get the number of pending accounts to be processed first mPendingAccountReady = mAccounts.count(); if (mPendingAccountReady == 0) { mReady = true; Q_EMIT setupReady(); return; } Q_EMIT accountIdsChanged(); Q_EMIT accountsChanged(); Q_EMIT phoneAccountsChanged(); Q_EMIT activeAccountsChanged(); onPhoneSettingsChanged("DefaultSimForMessages"); onPhoneSettingsChanged("DefaultSimForCalls"); } void TelepathyHelper::onAccountReady() { if (mReady) { return; } mPendingAccountReady--; if (mPendingAccountReady == 0) { mReady = true; Q_EMIT setupReady(); } } AccountEntry *TelepathyHelper::defaultMessagingAccount() const { return mDefaultMessagingAccount; } AccountEntry *TelepathyHelper::defaultCallAccount() const { return mDefaultCallAccount; } QVariantMap TelepathyHelper::simNames() const { return mSimNames; } void TelepathyHelper::setDefaultAccount(AccountType type, AccountEntry* account) { if (!account) { return; } QString modemObjName = account->account()->parameters().value("modem-objpath").toString(); if (!modemObjName.isEmpty()) { if (type == Voice) { GreeterContacts::instance()->setDefaultSimForCalls(modemObjName); } else if (type == Messaging) { GreeterContacts::instance()->setDefaultSimForMessages(modemObjName); } } } bool TelepathyHelper::emergencyCallsAvailable() const { // FIXME: this is really ofono specific, so maybe move somewhere else? Q_FOREACH(const AccountEntry *account, mAccounts) { const OfonoAccountEntry *ofonoAccount = qobject_cast(account); if (ofonoAccount && ofonoAccount->emergencyCallsAvailable()) { return true; } } return false; } bool TelepathyHelper::dialpadSoundsEnabled() const { return GreeterContacts::instance()->dialpadSoundsEnabled(); } void TelepathyHelper::setDialpadSoundsEnabled(bool enabled) { GreeterContacts::instance()->setDialpadSoundsEnabled(enabled); } void TelepathyHelper::onPhoneSettingsChanged(const QString &key) { if (key == "DefaultSimForMessages") { QString defaultSim = GreeterContacts::instance()->defaultSimForMessages(); if (defaultSim == "ask") { mDefaultMessagingAccount = NULL; Q_EMIT defaultMessagingAccountChanged(); return; } Q_FOREACH(AccountEntry *account, TelepathyHelper::instance()->accounts()) { QString modemObjName = account->account()->parameters().value("modem-objpath").toString(); if (modemObjName == defaultSim) { mDefaultMessagingAccount = account; Q_EMIT defaultMessagingAccountChanged(); return; } } mDefaultMessagingAccount = NULL; Q_EMIT defaultMessagingAccountChanged(); } else if (key == "DefaultSimForCalls") { // if there is a VOIP account configured, use that by default // FIXME: revisit the topic and maybe discuss with designers what is best here? Q_FOREACH(AccountEntry *account, TelepathyHelper::instance()->qmlVoiceAccounts()->activeAccounts()) { if (account->type() != AccountEntry::PhoneAccount) { mDefaultCallAccount = account; Q_EMIT defaultCallAccountChanged(); return; } } // if no VOIP account, get the default modem setting QString defaultSim = GreeterContacts::instance()->defaultSimForCalls(); if (defaultSim == "ask") { mDefaultCallAccount = NULL; Q_EMIT defaultCallAccountChanged(); return; } Q_FOREACH(AccountEntry *account, TelepathyHelper::instance()->accounts()) { QString modemObjName = account->account()->parameters().value("modem-objpath").toString(); if (modemObjName == defaultSim) { mDefaultCallAccount = account; Q_EMIT defaultCallAccountChanged(); return; } } mDefaultCallAccount = NULL; Q_EMIT defaultCallAccountChanged(); } else if (key == "MmsEnabled") { mMmsEnabled = GreeterContacts::instance()->mmsEnabled(); Q_EMIT mmsEnabledChanged(); } else if (key == "SimNames") { mSimNames = GreeterContacts::instance()->simNames(); Q_EMIT simNamesChanged(); } else if (key == "DialpadSoundsEnabled") { Q_EMIT dialpadSoundsEnabledChanged(); } } void TelepathyHelper::unlockSimCards() const { QDBusInterface connectivityIface("com.lomiri.connectivity1", "/com/lomiri/connectivity1/Private", "com.lomiri.connectivity1.Private"); connectivityIface.asyncCall("UnlockAllModems"); } QList TelepathyHelper::accountsForType(int type) { QList accounts; Q_FOREACH(AccountEntry *account, mAccounts) { if (account->type() == (AccountEntry::AccountType)type) { accounts << account; } } return accounts; } telephony-service-0.5.3/libtelephonyservice/telepathyhelper.h000066400000000000000000000161671455543255600246440ustar00rootroot00000000000000/* * Copyright (C) 2012-2017 Canonical, Ltd. * * Authors: * Tiago Salem Herrmann * Gustavo Pichorim Boiko * * This file is part of telephony-service. * * telephony-service is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; version 3. * * telephony-service 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 . */ #ifndef TELEPATHYHELPER_H #define TELEPATHYHELPER_H #include #include #include #include #include #include #include #include "channelobserver.h" #include "accountentry.h" #include "protocol.h" #define LOMIRI_TELEPHONY_VOICEMAIL_IFACE "com.lomiri.Telephony.Voicemail" #define LOMIRI_TELEPHONY_USSD_IFACE "com.lomiri.Telephony.USSD" #define LOMIRI_TELEPHONY_EMERGENCYMODE_IFACE "com.lomiri.Telephony.EmergencyMode" template<> bool qMapLessThanKey(const QStringList &key1, const QStringList &key2); class AccountList; class TelepathyHelper : public QObject { Q_OBJECT Q_PROPERTY(bool ready READ ready NOTIFY setupReady) Q_PROPERTY(QStringList accountIds READ accountIds NOTIFY accountIdsChanged) Q_PROPERTY(AccountList *accounts READ qmlAccounts CONSTANT) Q_PROPERTY(AccountList *voiceAccounts READ qmlVoiceAccounts CONSTANT) Q_PROPERTY(AccountList *textAccounts READ qmlTextAccounts CONSTANT) Q_PROPERTY(AccountList *phoneAccounts READ qmlPhoneAccounts CONSTANT) Q_PROPERTY(AccountEntry *defaultMessagingAccount READ defaultMessagingAccount NOTIFY defaultMessagingAccountChanged) Q_PROPERTY(AccountEntry *defaultCallAccount READ defaultCallAccount NOTIFY defaultCallAccountChanged) Q_PROPERTY(bool flightMode READ flightMode WRITE setFlightMode NOTIFY flightModeChanged) Q_PROPERTY(bool mmsEnabled READ mmsEnabled WRITE setMmsEnabled NOTIFY mmsEnabledChanged) Q_PROPERTY(bool emergencyCallsAvailable READ emergencyCallsAvailable NOTIFY emergencyCallsAvailableChanged) Q_PROPERTY(bool dialpadSoundsEnabled READ dialpadSoundsEnabled WRITE setDialpadSoundsEnabled NOTIFY dialpadSoundsEnabledChanged) Q_PROPERTY(QVariantMap simNames READ simNames NOTIFY simNamesChanged) Q_ENUMS(AccountType) Q_ENUMS(ChatType) public: enum AccountType { Messaging = Protocol::TextChats, Voice = Protocol::VoiceCalls, }; Q_DECLARE_FLAGS(AccountTypes, AccountType) enum ChatType { ChatTypeNone = Tp::HandleTypeNone, ChatTypeContact = Tp::HandleTypeContact, ChatTypeRoom = Tp::HandleTypeRoom }; ~TelepathyHelper(); static TelepathyHelper *instance(); /********************************* Account stuff *********************************/ QList accounts() const; QList phoneAccounts() const; QList activeAccounts() const; AccountList *qmlAccounts() const; AccountList *qmlVoiceAccounts() const; AccountList *qmlTextAccounts() const; AccountList *qmlPhoneAccounts() const; ChannelObserver *channelObserver() const; QDBusInterface *handlerInterface() const; QDBusInterface *approverInterface() const; AccountEntry *defaultMessagingAccount() const; AccountEntry *defaultCallAccount() const; AccountEntry *accountForConnection(const Tp::ConnectionPtr &connection) const; Q_INVOKABLE AccountEntry *accountForId(const QString &accountId) const; Q_INVOKABLE void setDefaultAccount(AccountType type, AccountEntry* account); Q_INVOKABLE QList accountsForType(int type); bool multiplePhoneAccounts() const; /** @brief Check if this account should be replaced by any overloaded protocol. */ QList checkAccountOverload(AccountEntry *originalAccount); /** @brief Check if this account has a fallback to be used when the original account is not suitable. */ QList checkAccountFallback(AccountEntry *originalAccount); /* Convenience functions to be used by qml */ Q_INVOKABLE QList accountOverload(AccountEntry *originalAccount); Q_INVOKABLE QList accountFallback(AccountEntry *originalAccount); bool mmsEnabled(); QVariantMap simNames() const; void setMmsEnabled(bool value); bool flightMode(); void setFlightMode(bool value); bool ready() const; QStringList accountIds(); bool emergencyCallsAvailable() const; bool dialpadSoundsEnabled() const; void setDialpadSoundsEnabled(bool enabled); Q_INVOKABLE void unlockSimCards() const; bool registerClient(Tp::AbstractClient *client, QString name); bool unregisterClient(Tp::AbstractClient *client); // pre-populated channel class specs for conferences static Tp::ChannelClassSpec audioConferenceSpec(); Q_SIGNALS: void channelObserverCreated(ChannelObserver *observer); void channelObserverUnregistered(); void accountIdsChanged(); void accountsChanged(); void accountAdded(AccountEntry *account); void phoneAccountsChanged(); void activeAccountsChanged(); void setupReady(); void defaultMessagingAccountChanged(); void defaultCallAccountChanged(); void flightModeChanged(); void emergencyCallsAvailableChanged(); void mmsEnabledChanged(); void simNamesChanged(); void dialpadSoundsEnabledChanged(); public Q_SLOTS: Q_INVOKABLE void registerChannelObserver(const QString &observerName = QString()); Q_INVOKABLE void unregisterChannelObserver(); protected: explicit TelepathyHelper(QObject *parent = 0); void setupAccountEntry(AccountEntry *entry); private Q_SLOTS: void onAccountManagerReady(Tp::PendingOperation *op); void onAccountReady(); void onNewAccount(const Tp::AccountPtr &account); void onAccountRemoved(); void onPhoneSettingsChanged(const QString&); private: Tp::AccountManagerPtr mAccountManager; Tp::Features mAccountManagerFeatures; Tp::Features mAccountFeatures; Tp::Features mContactFeatures; Tp::Features mConnectionFeatures; Tp::ClientRegistrarPtr mClientRegistrar; QList mAccounts; int mPendingAccountReady; AccountList *mQmlAccounts; AccountList *mQmlVoiceAccounts; AccountList *mQmlTextAccounts; AccountList *mQmlPhoneAccounts; AccountEntry *mDefaultCallAccount; AccountEntry *mDefaultMessagingAccount; ChannelObserver *mChannelObserver; bool mReady; Tp::AbstractClientPtr mChannelObserverPtr; bool mMmsEnabled; QVariantMap mSimNames; mutable QDBusInterface *mHandlerInterface; mutable QDBusInterface *mApproverInterface; QDBusInterface mFlightModeInterface; }; Q_DECLARE_OPERATORS_FOR_FLAGS(TelepathyHelper::AccountTypes) #endif // TELEPATHYHELPER_H telephony-service-0.5.3/libtelephonyservice/tonegenerator.cpp000066400000000000000000000072231455543255600246450ustar00rootroot00000000000000/* * Copyright (C) 2014-2017 Canonical, Ltd. * * Authors: * Gustavo Pichorim Boiko * Martti Piirainen * * This file is part of telephony-service. * * telephony-service is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; version 3. * * telephony-service 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 . */ #include "tonegenerator.h" #include #include #include #include /* Use tone-generator (tonegend) via D-Bus */ #define TONEGEN_DBUS_SERVICE_NAME "com.Nokia.Telephony.Tones" #define TONEGEN_DBUS_OBJ_PATH "/com/Nokia/Telephony/Tones" #define TONEGEN_DBUS_IFACE_NAME TONEGEN_DBUS_SERVICE_NAME ToneGenerator::ToneGenerator(QObject *parent) : QObject(parent), mDTMFPlaybackTimer(nullptr), mWaitingPlaybackTimer(new QTimer(this)) { // the waiting tone is played in loop connect(mWaitingPlaybackTimer, SIGNAL(timeout()), this, SLOT(playWaitingTone())); mWaitingPlaybackTimer->setSingleShot(true); } ToneGenerator::~ToneGenerator() { this->stopDTMFTone(); this->stopWaitingTone(); } ToneGenerator *ToneGenerator::instance() { static ToneGenerator *self = new ToneGenerator(); return self; } bool ToneGenerator::startEventTone(uint key) { QDBusMessage startMsg = QDBusMessage::createMethodCall( TONEGEN_DBUS_SERVICE_NAME, TONEGEN_DBUS_OBJ_PATH, TONEGEN_DBUS_IFACE_NAME, "StartEventTone" ); QList toneArgs; toneArgs << QVariant((uint)key); toneArgs << QVariant((int)0); // volume is ignored toneArgs << QVariant((uint)0); // duration is ignored startMsg.setArguments(toneArgs); return QDBusConnection::sessionBus().send(startMsg); } void ToneGenerator::playDTMFTone(uint key) { qDebug() << __PRETTY_FUNCTION__ << key; if (key > 11) { qDebug() << "Invalid DTMF tone, ignore."; return; } if (startEventTone(key)) { if (!mDTMFPlaybackTimer) { mDTMFPlaybackTimer = new QTimer(this); mDTMFPlaybackTimer->setSingleShot(true); connect(mDTMFPlaybackTimer, SIGNAL(timeout()), this, SLOT(stopDTMFTone())); } mDTMFPlaybackTimer->start(DTMF_LOCAL_PLAYBACK_DURATION); } } void ToneGenerator::stopTone() { QDBusConnection::sessionBus().send( QDBusMessage::createMethodCall( TONEGEN_DBUS_SERVICE_NAME, TONEGEN_DBUS_OBJ_PATH, TONEGEN_DBUS_IFACE_NAME, "StopTone" )); } void ToneGenerator::stopDTMFTone() { stopTone(); if (mDTMFPlaybackTimer) { mDTMFPlaybackTimer->stop(); } } void ToneGenerator::playWaitingTone() { if (mWaitingPlaybackTimer->isActive()) { stopTone(); } if (startEventTone(WAITING_TONE)) { mWaitingPlaybackTimer->start(WAITING_PLAYBACK_DURATION); } } void ToneGenerator::stopWaitingTone() { stopTone(); mWaitingPlaybackTimer->stop(); } void ToneGenerator::playCallEndedTone() { startEventTone(CALL_ENDED_TONE); QTimer::singleShot(2000, this, SLOT(stopTone())); } void ToneGenerator::playDialingTone() { startEventTone(DIALING_TONE); } void ToneGenerator::playRingingTone() { startEventTone(RINGING_TONE); } telephony-service-0.5.3/libtelephonyservice/tonegenerator.h000066400000000000000000000034611455543255600243120ustar00rootroot00000000000000/* * Copyright (C) 2014-2017 Canonical, Ltd. * * Authors: * Gustavo Pichorim Boiko * Martti Piirainen * * This file is part of telephony-service. * * telephony-service is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; version 3. * * telephony-service 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 . */ #ifndef TONEGENERATOR_H #define TONEGENERATOR_H #include class QTimer; static const int DTMF_LOCAL_PLAYBACK_DURATION = 200; /* in milliseconds */ static const int WAITING_PLAYBACK_DURATION = 8000; /* in milliseconds */ static const uint WAITING_TONE = 79; static const uint CALL_ENDED_TONE = 257; static const uint DIALING_TONE = 66; static const uint RINGING_TONE = 70; class ToneGenerator : public QObject { Q_OBJECT public: ~ToneGenerator(); static ToneGenerator *instance(); public Q_SLOTS: /** * Valid tones: 0..9 (number keys), 10 (*), 11 (#) */ void playDTMFTone(uint key); void playWaitingTone(); void stopWaitingTone(); void playCallEndedTone(); void playDialingTone(); void playRingingTone(); void stopTone(); private Q_SLOTS: void stopDTMFTone(); bool startEventTone(uint key); private: explicit ToneGenerator(QObject *parent = 0); QTimer* mDTMFPlaybackTimer; QTimer* mWaitingPlaybackTimer; }; #endif // TONEGENERATOR_H telephony-service-0.5.3/libtelephonyservice/ussdmanager.cpp000066400000000000000000000162411455543255600243020ustar00rootroot00000000000000/* * Copyright (C) 2012-2015 Canonical, Ltd. * * Authors: * Gustavo Pichorim Boiko * Tiago Salem Herrmann * * This file is part of telephony-service. * * telephony-service is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; version 3. * * telephony-service 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 . */ #include "ussdmanager.h" #include "telepathyhelper.h" #include "accountentry.h" #include #include typedef QMap dbusQMap; Q_DECLARE_METATYPE(dbusQMap) USSDManager::USSDManager(AccountEntry *account, QObject *parent) : QObject(parent), mState("idle"), mAccount(account) { connect(mAccount, SIGNAL(connectedChanged()), this, SLOT(onConnectionChanged())); onConnectionChanged(); } void USSDManager::initiate(const QString &command) { QDBusInterface ussdIface(mBusName, mObjectPath, LOMIRI_TELEPHONY_USSD_IFACE); ussdIface.asyncCall("Initiate", command); } void USSDManager::respond(const QString &reply) { QDBusInterface ussdIface(mBusName, mObjectPath, LOMIRI_TELEPHONY_USSD_IFACE); ussdIface.asyncCall("Respond", reply); } void USSDManager::cancel() { QDBusInterface ussdIface(mBusName, mObjectPath, LOMIRI_TELEPHONY_USSD_IFACE); ussdIface.asyncCall("Cancel"); } void USSDManager::connectAllSignals() { if (mBusName.isEmpty() || mObjectPath.isEmpty()) { return; } QDBusConnection::sessionBus().connect(mBusName, mObjectPath, LOMIRI_TELEPHONY_USSD_IFACE, "StateChanged", this, SLOT(onStateChanged(QString))); QDBusConnection::sessionBus().connect(mBusName, mObjectPath, LOMIRI_TELEPHONY_USSD_IFACE, "RequestReceived", this, SIGNAL(requestReceived(QString))); QDBusConnection::sessionBus().connect(mBusName, mObjectPath, LOMIRI_TELEPHONY_USSD_IFACE, "NotificationReceived", this, SIGNAL(notificationReceived(QString))); QDBusConnection::sessionBus().connect(mBusName, mObjectPath, LOMIRI_TELEPHONY_USSD_IFACE, "InitiateUSSDComplete", this, SIGNAL(initiateUSSDComplete(QString))); QDBusConnection::sessionBus().connect(mBusName, mObjectPath, LOMIRI_TELEPHONY_USSD_IFACE, "RespondComplete", this, SIGNAL(respondComplete(bool, QString))); QDBusConnection::sessionBus().connect(mBusName, mObjectPath, LOMIRI_TELEPHONY_USSD_IFACE, "BarringComplete", this, SIGNAL(barringComplete(QString, QString, QVariantMap))); QDBusConnection::sessionBus().connect(mBusName, mObjectPath, LOMIRI_TELEPHONY_USSD_IFACE, "ForwardingComplete", this, SIGNAL(forwardingComplete(QString, QString, QVariantMap))); QDBusConnection::sessionBus().connect(mBusName, mObjectPath, LOMIRI_TELEPHONY_USSD_IFACE, "WaitingComplete", this, SIGNAL(waitingComplete(QString, QVariantMap))); QDBusConnection::sessionBus().connect(mBusName, mObjectPath, LOMIRI_TELEPHONY_USSD_IFACE, "CallingLinePresentationComplete", this, SIGNAL(callingLinePresentationComplete(QString, QString))); QDBusConnection::sessionBus().connect(mBusName, mObjectPath, LOMIRI_TELEPHONY_USSD_IFACE, "CallingLineRestrictionComplete", this, SIGNAL(callingLineRestrictionComplete(QString, QString))); QDBusConnection::sessionBus().connect(mBusName, mObjectPath, LOMIRI_TELEPHONY_USSD_IFACE, "ConnectedLineRestrictionComplete", this, SIGNAL(connectedLineRestrictionComplete(QString, QString))); QDBusConnection::sessionBus().connect(mBusName, mObjectPath, LOMIRI_TELEPHONY_USSD_IFACE, "ConnectedLinePresentationComplete", this, SIGNAL(connectedLinePresentationComplete(QString, QString))); QDBusConnection::sessionBus().connect(mBusName, mObjectPath, LOMIRI_TELEPHONY_USSD_IFACE, "InitiateFailed", this, SIGNAL(initiateFailed())); } void USSDManager::disconnectAllSignals() { if (mBusName.isEmpty() || mObjectPath.isEmpty()) { return; } QDBusConnection::sessionBus().disconnect(mBusName, mObjectPath, LOMIRI_TELEPHONY_USSD_IFACE, "StateChanged", this, SLOT(onStateChanged(QString))); QDBusConnection::sessionBus().disconnect(mBusName, mObjectPath, LOMIRI_TELEPHONY_USSD_IFACE, "RequestReceived", this, SIGNAL(requestReceived(QString))); QDBusConnection::sessionBus().disconnect(mBusName, mObjectPath, LOMIRI_TELEPHONY_USSD_IFACE, "NotificationReceived", this, SIGNAL(notificationReceived(QString))); QDBusConnection::sessionBus().disconnect(mBusName, mObjectPath, LOMIRI_TELEPHONY_USSD_IFACE, "InitiateUSSDComplete", this, SIGNAL(initiateUSSDComplete(QString))); QDBusConnection::sessionBus().disconnect(mBusName, mObjectPath, LOMIRI_TELEPHONY_USSD_IFACE, "RespondComplete", this, SIGNAL(respondComplete(bool, QString))); QDBusConnection::sessionBus().disconnect(mBusName, mObjectPath, LOMIRI_TELEPHONY_USSD_IFACE, "BarringComplete", this, SIGNAL(barringComplete(QString, QString, QVariantMap))); QDBusConnection::sessionBus().disconnect(mBusName, mObjectPath, LOMIRI_TELEPHONY_USSD_IFACE, "ForwardingComplete", this, SIGNAL(forwardingComplete(QString, QString, QVariantMap))); QDBusConnection::sessionBus().disconnect(mBusName, mObjectPath, LOMIRI_TELEPHONY_USSD_IFACE, "WaitingComplete", this, SIGNAL(waitingComplete(QString, QVariantMap))); QDBusConnection::sessionBus().disconnect(mBusName, mObjectPath, LOMIRI_TELEPHONY_USSD_IFACE, "CallingLinePresentationComplete", this, SIGNAL(callingLinePresentationComplete(QString, QString))); QDBusConnection::sessionBus().disconnect(mBusName, mObjectPath, LOMIRI_TELEPHONY_USSD_IFACE, "CallingLineRestrictionComplete", this, SIGNAL(callingLineRestrictionComplete(QString, QString))); QDBusConnection::sessionBus().disconnect(mBusName, mObjectPath, LOMIRI_TELEPHONY_USSD_IFACE, "ConnectedLineRestrictionComplete", this, SIGNAL(connectedLineRestrictionComplete(QString, QString))); QDBusConnection::sessionBus().disconnect(mBusName, mObjectPath, LOMIRI_TELEPHONY_USSD_IFACE, "ConnectedLinePresentationComplete", this, SIGNAL(connectedLinePresentationComplete(QString, QString))); QDBusConnection::sessionBus().disconnect(mBusName, mObjectPath, LOMIRI_TELEPHONY_USSD_IFACE, "InitiateFailed", this, SIGNAL(initiateFailed())); } void USSDManager::onConnectionChanged() { disconnectAllSignals(); if (mAccount->account()->connection().isNull()) { qDebug() << "USSDManager: Failed to connect signals"; return; } mBusName = mAccount->account()->connection()->busName(); mObjectPath = mAccount->account()->connection()->objectPath(); QDBusInterface ussdIface(mBusName, mObjectPath, LOMIRI_TELEPHONY_USSD_IFACE); mState = ussdIface.property("State").toString(); connectAllSignals(); } void USSDManager::onStateChanged(const QString &state) { mState = state; Q_EMIT stateChanged(mState); Q_EMIT activeChanged(); } bool USSDManager::active() const { return mState != "idle"; } QString USSDManager::state() const { return mState; } telephony-service-0.5.3/libtelephonyservice/ussdmanager.h000066400000000000000000000053151455543255600237470ustar00rootroot00000000000000/* * Copyright (C) 2012-2015 Canonical, Ltd. * * Authors: * Gustavo Pichorim Boiko * Tiago Salem Herrmann * * This file is part of telephony-service. * * telephony-service is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; version 3. * * telephony-service 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 . */ #ifndef USSDMANAGER_H #define USSDMANAGER_H #include #include #include class TelepathyHelper; class AccountEntry; class USSDManager : public QObject { Q_OBJECT Q_PROPERTY(bool active READ active NOTIFY activeChanged) Q_PROPERTY(QString state READ state NOTIFY stateChanged) public: explicit USSDManager(AccountEntry *account, QObject *parent = 0); Q_INVOKABLE void initiate(const QString &command); Q_INVOKABLE void respond(const QString &reply); Q_INVOKABLE void cancel(); bool active() const; QString state() const; public Q_SLOTS: void onStateChanged(const QString &state); Q_SIGNALS: void activeChanged(); void stateChanged(const QString &state); void notificationReceived(const QString &message); void requestReceived(const QString &message); void initiateUSSDComplete(const QString &ussdResp); void respondComplete(bool success, const QString &ussdResp); void barringComplete(const QString &ssOp, const QString &cbService, const QVariantMap &cbMap); void forwardingComplete(const QString &ssOp, const QString &cfService, const QVariantMap &cfMap); void waitingComplete(const QString &ssOp, const QVariantMap &cwMap); void callingLinePresentationComplete(const QString &ssOp, const QString &status); void connectedLinePresentationComplete(const QString &ssOp, const QString &status); void callingLineRestrictionComplete(const QString &ssOp, const QString &status); void connectedLineRestrictionComplete(const QString &ssOp, const QString &status); void initiateFailed(); private Q_SLOTS: void onConnectionChanged(); private: void connectAllSignals(); void disconnectAllSignals(); QString mState; QString mBusName; QString mObjectPath; AccountEntry *mAccount; }; #endif // USSDMANAGER_H telephony-service-0.5.3/po/000077500000000000000000000000001455543255600156205ustar00rootroot00000000000000telephony-service-0.5.3/po/CMakeLists.txt000066400000000000000000000045001455543255600203570ustar00rootroot00000000000000include(FindGettext) find_program(GETTEXT_XGETTEXT_EXECUTABLE xgettext) if("${GETTEXT_XGETTEXT_EXECUTABLE}" STREQUAL "GETTEXT_XGETTEXT_EXECUTABLE-NOTFOUND") message(FATAL_ERROR "Could not find xgettext") endif() set(DOMAIN ${PROJECT_NAME}) set(POT_FILE ${DOMAIN}.pot) set(DESKTOP_IN_FILES indicator/telephony-service-call.desktop.in indicator/telephony-service-sms.desktop.in) file(STRINGS ${CMAKE_CURRENT_SOURCE_DIR}/LINGUAS LINGUAS REGEX "^[^#].*") string(REGEX MATCHALL "[^ \t]+" LANGS "${LINGUAS}") configure_file(${CMAKE_CURRENT_SOURCE_DIR}/POTFILES.in ${CMAKE_CURRENT_BINARY_DIR}/POTFILES COPYONLY) add_custom_target(${POT_FILE} ALL COMMENT "Generating translation template" COMMENT "Generating translation template" # Extract the translatable messages from the desktop file COMMAND ${GETTEXT_XGETTEXT_EXECUTABLE} -o ${POT_FILE} --from-code=UTF-8 --language=Desktop --package-name='${PROJECT_NAME}' --copyright-holder='Canonical Ltd.' -D ${CMAKE_SOURCE_DIR} ${DESKTOP_IN_FILES} COMMAND ${GETTEXT_XGETTEXT_EXECUTABLE} -o ${POT_FILE} -D ${CMAKE_SOURCE_DIR} -D ${CMAKE_CURRENT_SOURCE_DIR} -D ${CMAKE_CURRENT_BINARY_DIR} --from-code=UTF-8 --c++ --qt --add-comments=TRANSLATORS --keyword=tr --keyword=tr:1,2 --keyword=GettextMarkExtraction --package-name='${PROJECT_NAME}' --copyright-holder='Canonical Ltd.' --join-existing --files-from=${CMAKE_CURRENT_BINARY_DIR}/POTFILES) foreach(LANG ${LANGS}) configure_file(${CMAKE_CURRENT_SOURCE_DIR}/${LANG}.po ${CMAKE_CURRENT_BINARY_DIR}/${LANG}.po COPYONLY) endforeach(LANG) gettext_process_pot_file(${POT_FILE} ALL INSTALL_DESTINATION ${CMAKE_INSTALL_LOCALEDIR} LANGUAGES ${LANGS}) telephony-service-0.5.3/po/LINGUAS000066400000000000000000000005541455543255600166510ustar00rootroot00000000000000aa am ar ast az be bem bg bn_BD br bs ca ca@valencia cs cy da de dv el en_AU en_CA en_GB en_US eo es eu fa fi fr fr_CA fr_CH frp fur gd gl gu he hi hr hu hy ia id io is it ja jbo ka kab km kmr ko lb ln lo lt lv mg mi mk ml ms my nan nb ne nl ny oc om pa pam pl ps pt pt_BR ro ru sc sco sd sdh shn si sk sl sq sr sv ta te tet tg th tk tr ug uk ur zh_CN zh_HK zh_TW telephony-service-0.5.3/po/POTFILES.in000066400000000000000000000040771455543255600174050ustar00rootroot00000000000000approver/approver.cpp approver/approverdbus.cpp approver/main.cpp handler/accountproperties.cpp handler/audioroutemanager.cpp handler/callagent.cpp handler/callhandler.cpp handler/chatstartingjob.cpp handler/farstreamchannel.cpp handler/handler.cpp handler/handlerdbus.cpp handler/main.cpp handler/messagejob.cpp handler/messagesendingjob.cpp handler/powerdaudiomodemediator.cpp handler/powerddbus.cpp handler/qpulseaudioengine.cpp handler/texthandler.cpp indicator/authhandler.cpp indicator/callchannelobserver.cpp indicator/displaynamesettings.cpp indicator/indicatordbus.cpp indicator/main.cpp indicator/messagingmenu.cpp indicator/metrics.cpp indicator/notificationmenu.cpp indicator/textchannelobserver.cpp indicator/ussdindicator.cpp indicator/voicemailindicator.cpp libtelephonyservice/accountentry.cpp libtelephonyservice/accountentryfactory.cpp libtelephonyservice/accountlist.cpp libtelephonyservice/applicationutils.cpp libtelephonyservice/audiooutput.cpp libtelephonyservice/callentry.cpp libtelephonyservice/callmanager.cpp libtelephonyservice/callnotification.cpp libtelephonyservice/channelobserver.cpp libtelephonyservice/chatentry.cpp libtelephonyservice/chatmanager.cpp libtelephonyservice/contactemailaddress.cpp libtelephonyservice/contactutils.cpp libtelephonyservice/contactwatcher.cpp libtelephonyservice/greetercontacts.cpp libtelephonyservice/ofonoaccountentry.cpp libtelephonyservice/participant.cpp libtelephonyservice/phoneutils.cpp libtelephonyservice/protocol.cpp libtelephonyservice/protocolmanager.cpp libtelephonyservice/ringtone.cpp libtelephonyservice/rolesinterface.cpp libtelephonyservice/telepathyhelper.cpp libtelephonyservice/tonegenerator.cpp libtelephonyservice/ussdmanager.cpp Lomiri/Telephony/components.cpp Lomiri/Telephony/conversationfeeditem.cpp Lomiri/Telephony/participantsmodel.cpp Lomiri/Telephony/PhoneNumber/asyoutypeformatter.cpp Lomiri/Telephony/PhoneNumber/phonenumber.cpp Lomiri/Telephony/PhoneNumber/PhoneNumberField.qml Lomiri/Telephony/PhoneNumber/PhoneNumberInput.qml Lomiri/Telephony/PhoneNumber/phoneutils.cpp Lomiri/Telephony/presencerequest.cpp telephony-service-0.5.3/po/aa.po000066400000000000000000000207431455543255600165470ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-12-16 17:03+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: Automatically generated\n" "Language-Team: none\n" "Language: aa\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" #: indicator/telephony-service-call.desktop.in:4 msgid "Phone Calls" msgstr "" #: indicator/telephony-service-sms.desktop.in:4 msgid "SMS" msgstr "" #: approver/approver.cpp:66 msgid "Unknown caller" msgstr "" #: approver/approver.cpp:94 msgid "I'm busy at the moment. I'll call later." msgstr "" #: approver/approver.cpp:95 msgid "I'm running late, on my way now." msgstr "" #: approver/approver.cpp:96 msgid "Please call me back later." msgstr "" #: approver/approver.cpp:457 #, qt-format msgid "On [%1]" msgstr "" #: approver/approver.cpp:461 indicator/messagingmenu.cpp:414 msgid "Private number" msgstr "" #: approver/approver.cpp:464 indicator/messagingmenu.cpp:244 #: indicator/messagingmenu.cpp:418 indicator/textchannelobserver.cpp:640 msgid "Unknown number" msgstr "" #: approver/approver.cpp:470 approver/approver.cpp:485 msgid "Caller number is not available" msgstr "" #: approver/approver.cpp:476 msgid "Calling from private number" msgstr "" #: approver/approver.cpp:479 msgid "Calling from unknown number" msgstr "" #: approver/approver.cpp:482 #, qt-format msgid "Calling from %1" msgstr "" #: approver/approver.cpp:529 msgid "Hold + Answer" msgstr "" #: approver/approver.cpp:530 msgid "Accept" msgstr "" #: approver/approver.cpp:543 msgid "End + Answer" msgstr "" #: approver/approver.cpp:552 msgid "Decline" msgstr "" #: approver/approver.cpp:560 msgid "Message & decline" msgstr "" #: approver/main.cpp:46 msgid "Telephony Service Approver" msgstr "" #: indicator/authhandler.cpp:72 msgid "Authentication failed. Do you want to review your credentials?" msgstr "" #: indicator/authhandler.cpp:91 msgid "Yes" msgstr "" #: indicator/authhandler.cpp:94 msgid "No" msgstr "" #: indicator/displaynamesettings.cpp:35 #, qt-format msgid "SIM %1" msgstr "" #: indicator/main.cpp:53 msgid "Telephony Service Indicator" msgstr "" #: indicator/messagingmenu.cpp:83 indicator/messagingmenu.cpp:87 msgid "Telephony Service" msgstr "" #: indicator/messagingmenu.cpp:151 indicator/messagingmenu.cpp:293 #: indicator/messagingmenu.cpp:360 msgid "Send" msgstr "" #. TRANSLATORS : %1 is the group name and %2 is the recipient name #: indicator/messagingmenu.cpp:262 indicator/textchannelobserver.cpp:671 #: indicator/textchannelobserver.cpp:675 #, qt-format msgid "Message to %1 from %2" msgstr "" #. TRANSLATORS : %1 is the recipient name #: indicator/messagingmenu.cpp:265 indicator/messagingmenu.cpp:269 #, qt-format msgid "Message to the group from %1" msgstr "" #: indicator/messagingmenu.cpp:345 msgid "Call back" msgstr "" #: indicator/messagingmenu.cpp:350 msgid "Missed your call — can you call me now?" msgstr "" #: indicator/messagingmenu.cpp:351 msgid "Running late. On my way." msgstr "" #: indicator/messagingmenu.cpp:352 msgid "Busy at the moment. Will call you later." msgstr "" #: indicator/messagingmenu.cpp:353 msgid "I am 20 minutes late." msgstr "" #: indicator/messagingmenu.cpp:354 msgid "Still busy. Will call you later." msgstr "" #: indicator/messagingmenu.cpp:409 #, qt-format msgid "%1 missed call" msgid_plural "%1 missed calls" msgstr[0] "" msgstr[1] "" #: indicator/messagingmenu.cpp:492 msgid "Voicemail messages" msgstr "" #: indicator/messagingmenu.cpp:495 #, qt-format msgid "%1 voicemail message" msgid_plural "%1 voicemail messages" msgstr[0] "" msgstr[1] "" #: indicator/messagingmenu.cpp:500 msgid "Voicemail" msgstr "" #: indicator/metrics.cpp:42 #, qt-format msgid "%1 text messages sent today" msgstr "" #: indicator/metrics.cpp:43 msgid "No text messages sent today" msgstr "" #: indicator/metrics.cpp:44 #, qt-format msgid "%1 text messages received today" msgstr "" #: indicator/metrics.cpp:45 msgid "No text messages received today" msgstr "" #: indicator/metrics.cpp:46 #, qt-format msgid "%1 calls received today" msgstr "" #: indicator/metrics.cpp:47 msgid "No calls received today" msgstr "" #: indicator/metrics.cpp:48 #, qt-format msgid "%1 calls made today" msgstr "" #: indicator/metrics.cpp:49 indicator/metrics.cpp:51 msgid "No calls made today" msgstr "" #: indicator/metrics.cpp:50 #, qt-format msgid "Spent %1 minutes in calls today" msgstr "" #: indicator/textchannelobserver.cpp:225 msgid "Unlock your sim card and try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:227 msgid "Deactivate flight mode and try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:230 msgid "Try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:236 msgid "The message could not be sent" msgstr "" #: indicator/textchannelobserver.cpp:249 indicator/textchannelobserver.cpp:713 msgid "View message" msgstr "" #: indicator/textchannelobserver.cpp:295 msgid "New Group" msgstr "" #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:302 #, qt-format msgid "You joined group %1 " msgstr "" #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:306 #, qt-format msgid "You joined group %1" msgstr "" #: indicator/textchannelobserver.cpp:309 msgid "You joined a new group" msgstr "" #: indicator/textchannelobserver.cpp:328 msgid "View Group" msgstr "" #: indicator/textchannelobserver.cpp:367 indicator/ussdindicator.cpp:116 msgid "Ok" msgstr "" #: indicator/textchannelobserver.cpp:373 msgid "Save" msgstr "" #: indicator/textchannelobserver.cpp:468 msgid "Emergency Alert" msgstr "" #: indicator/textchannelobserver.cpp:471 msgid "Emergency Alert: Extreme" msgstr "" #: indicator/textchannelobserver.cpp:474 msgid "Emergency Alert: Severe" msgstr "" #: indicator/textchannelobserver.cpp:477 msgid "Emergency Alert: Notice" msgstr "" #: indicator/textchannelobserver.cpp:482 msgid "AMBER Alert" msgstr "" #: indicator/textchannelobserver.cpp:485 msgid "Alert" msgstr "" #: indicator/textchannelobserver.cpp:531 msgid "Show alert" msgstr "" #: indicator/textchannelobserver.cpp:604 #, qt-format msgid "Attachment: %1 image" msgid_plural "Attachments: %1 images" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:606 #, qt-format msgid "Attachment: %1 video" msgid_plural "Attachments: %1 videos" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:608 #, qt-format msgid "Attachment: %1 contact" msgid_plural "Attachments: %1 contacts" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:610 #, qt-format msgid "Attachment: %1 audio clip" msgid_plural "Attachments: %1 audio clips" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:612 #, qt-format msgid "Attachment: %1 file" msgid_plural "Attachments: %1 files" msgstr[0] "" msgstr[1] "" #. TRANSLATORS : message displayed when any error occurred while receiving a MMS (case when cellular-data is off, or any downloading issue). Notify that there was a message, the user can find more about it in the messaging-app. #: indicator/textchannelobserver.cpp:615 msgid "New MMS message" msgstr "" #. TRANSLATORS : %1 is the recipient name #: indicator/textchannelobserver.cpp:679 indicator/textchannelobserver.cpp:683 #, qt-format msgid "Message to group from %1" msgstr "" #: indicator/textchannelobserver.cpp:749 #, qt-format msgid "Message from %1" msgstr "" #: indicator/textchannelobserver.cpp:910 msgid "Please, select a SIM card:" msgstr "" #: indicator/ussdindicator.cpp:119 msgid "Reply" msgstr "" #: indicator/ussdindicator.cpp:142 msgid "Cancel" msgstr "" #: libtelephonyservice/callnotification.cpp:53 msgid "Conf call on hold" msgstr "" #: libtelephonyservice/callnotification.cpp:53 #, qt-format msgid "%1 call on hold" msgstr "" #: libtelephonyservice/callnotification.cpp:56 msgid "Conf call ended" msgstr "" #: libtelephonyservice/callnotification.cpp:56 #, qt-format msgid "%1 call ended" msgstr "" #: libtelephonyservice/callnotification.cpp:59 #, qt-format msgid "%1 call declined" msgstr "" #: libtelephonyservice/contactwatcher.cpp:157 msgid "Private Number" msgstr "" #: libtelephonyservice/contactwatcher.cpp:159 msgid "Unknown Number" msgstr "" telephony-service-0.5.3/po/af.po000066400000000000000000000207371455543255600165570ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR Canonical Ltd. # This file is distributed under the same license as the telephony-service package. # FIRST AUTHOR , YEAR. # msgid "" msgstr "" "Project-Id-Version: telephony-service\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-12-16 17:03+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: Automatically generated\n" "Language-Team: none\n" "Language: af\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" #: indicator/telephony-service-call.desktop.in:4 msgid "Phone Calls" msgstr "" #: indicator/telephony-service-sms.desktop.in:4 msgid "SMS" msgstr "" #: approver/approver.cpp:66 msgid "Unknown caller" msgstr "" #: approver/approver.cpp:94 msgid "I'm busy at the moment. I'll call later." msgstr "" #: approver/approver.cpp:95 msgid "I'm running late, on my way now." msgstr "" #: approver/approver.cpp:96 msgid "Please call me back later." msgstr "" #: approver/approver.cpp:457 #, qt-format msgid "On [%1]" msgstr "" #: approver/approver.cpp:461 indicator/messagingmenu.cpp:414 msgid "Private number" msgstr "" #: approver/approver.cpp:464 indicator/messagingmenu.cpp:244 #: indicator/messagingmenu.cpp:418 indicator/textchannelobserver.cpp:640 msgid "Unknown number" msgstr "" #: approver/approver.cpp:470 approver/approver.cpp:485 msgid "Caller number is not available" msgstr "" #: approver/approver.cpp:476 msgid "Calling from private number" msgstr "" #: approver/approver.cpp:479 msgid "Calling from unknown number" msgstr "" #: approver/approver.cpp:482 #, qt-format msgid "Calling from %1" msgstr "" #: approver/approver.cpp:529 msgid "Hold + Answer" msgstr "" #: approver/approver.cpp:530 msgid "Accept" msgstr "" #: approver/approver.cpp:543 msgid "End + Answer" msgstr "" #: approver/approver.cpp:552 msgid "Decline" msgstr "" #: approver/approver.cpp:560 msgid "Message & decline" msgstr "" #: approver/main.cpp:46 msgid "Telephony Service Approver" msgstr "" #: indicator/authhandler.cpp:72 msgid "Authentication failed. Do you want to review your credentials?" msgstr "" #: indicator/authhandler.cpp:91 msgid "Yes" msgstr "" #: indicator/authhandler.cpp:94 msgid "No" msgstr "" #: indicator/displaynamesettings.cpp:35 #, qt-format msgid "SIM %1" msgstr "" #: indicator/main.cpp:53 msgid "Telephony Service Indicator" msgstr "" #: indicator/messagingmenu.cpp:83 indicator/messagingmenu.cpp:87 msgid "Telephony Service" msgstr "" #: indicator/messagingmenu.cpp:151 indicator/messagingmenu.cpp:293 #: indicator/messagingmenu.cpp:360 msgid "Send" msgstr "" #. TRANSLATORS : %1 is the group name and %2 is the recipient name #: indicator/messagingmenu.cpp:262 indicator/textchannelobserver.cpp:671 #: indicator/textchannelobserver.cpp:675 #, qt-format msgid "Message to %1 from %2" msgstr "" #. TRANSLATORS : %1 is the recipient name #: indicator/messagingmenu.cpp:265 indicator/messagingmenu.cpp:269 #, qt-format msgid "Message to the group from %1" msgstr "" #: indicator/messagingmenu.cpp:345 msgid "Call back" msgstr "" #: indicator/messagingmenu.cpp:350 msgid "Missed your call — can you call me now?" msgstr "" #: indicator/messagingmenu.cpp:351 msgid "Running late. On my way." msgstr "" #: indicator/messagingmenu.cpp:352 msgid "Busy at the moment. Will call you later." msgstr "" #: indicator/messagingmenu.cpp:353 msgid "I am 20 minutes late." msgstr "" #: indicator/messagingmenu.cpp:354 msgid "Still busy. Will call you later." msgstr "" #: indicator/messagingmenu.cpp:409 #, qt-format msgid "%1 missed call" msgid_plural "%1 missed calls" msgstr[0] "" msgstr[1] "" #: indicator/messagingmenu.cpp:492 msgid "Voicemail messages" msgstr "" #: indicator/messagingmenu.cpp:495 #, qt-format msgid "%1 voicemail message" msgid_plural "%1 voicemail messages" msgstr[0] "" msgstr[1] "" #: indicator/messagingmenu.cpp:500 msgid "Voicemail" msgstr "" #: indicator/metrics.cpp:42 #, qt-format msgid "%1 text messages sent today" msgstr "" #: indicator/metrics.cpp:43 msgid "No text messages sent today" msgstr "" #: indicator/metrics.cpp:44 #, qt-format msgid "%1 text messages received today" msgstr "" #: indicator/metrics.cpp:45 msgid "No text messages received today" msgstr "" #: indicator/metrics.cpp:46 #, qt-format msgid "%1 calls received today" msgstr "" #: indicator/metrics.cpp:47 msgid "No calls received today" msgstr "" #: indicator/metrics.cpp:48 #, qt-format msgid "%1 calls made today" msgstr "" #: indicator/metrics.cpp:49 indicator/metrics.cpp:51 msgid "No calls made today" msgstr "" #: indicator/metrics.cpp:50 #, qt-format msgid "Spent %1 minutes in calls today" msgstr "" #: indicator/textchannelobserver.cpp:225 msgid "Unlock your sim card and try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:227 msgid "Deactivate flight mode and try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:230 msgid "Try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:236 msgid "The message could not be sent" msgstr "" #: indicator/textchannelobserver.cpp:249 indicator/textchannelobserver.cpp:713 msgid "View message" msgstr "" #: indicator/textchannelobserver.cpp:295 msgid "New Group" msgstr "" #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:302 #, qt-format msgid "You joined group %1 " msgstr "" #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:306 #, qt-format msgid "You joined group %1" msgstr "" #: indicator/textchannelobserver.cpp:309 msgid "You joined a new group" msgstr "" #: indicator/textchannelobserver.cpp:328 msgid "View Group" msgstr "" #: indicator/textchannelobserver.cpp:367 indicator/ussdindicator.cpp:116 msgid "Ok" msgstr "" #: indicator/textchannelobserver.cpp:373 msgid "Save" msgstr "" #: indicator/textchannelobserver.cpp:468 msgid "Emergency Alert" msgstr "" #: indicator/textchannelobserver.cpp:471 msgid "Emergency Alert: Extreme" msgstr "" #: indicator/textchannelobserver.cpp:474 msgid "Emergency Alert: Severe" msgstr "" #: indicator/textchannelobserver.cpp:477 msgid "Emergency Alert: Notice" msgstr "" #: indicator/textchannelobserver.cpp:482 msgid "AMBER Alert" msgstr "" #: indicator/textchannelobserver.cpp:485 msgid "Alert" msgstr "" #: indicator/textchannelobserver.cpp:531 msgid "Show alert" msgstr "" #: indicator/textchannelobserver.cpp:604 #, qt-format msgid "Attachment: %1 image" msgid_plural "Attachments: %1 images" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:606 #, qt-format msgid "Attachment: %1 video" msgid_plural "Attachments: %1 videos" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:608 #, qt-format msgid "Attachment: %1 contact" msgid_plural "Attachments: %1 contacts" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:610 #, qt-format msgid "Attachment: %1 audio clip" msgid_plural "Attachments: %1 audio clips" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:612 #, qt-format msgid "Attachment: %1 file" msgid_plural "Attachments: %1 files" msgstr[0] "" msgstr[1] "" #. TRANSLATORS : message displayed when any error occurred while receiving a MMS (case when cellular-data is off, or any downloading issue). Notify that there was a message, the user can find more about it in the messaging-app. #: indicator/textchannelobserver.cpp:615 msgid "New MMS message" msgstr "" #. TRANSLATORS : %1 is the recipient name #: indicator/textchannelobserver.cpp:679 indicator/textchannelobserver.cpp:683 #, qt-format msgid "Message to group from %1" msgstr "" #: indicator/textchannelobserver.cpp:749 #, qt-format msgid "Message from %1" msgstr "" #: indicator/textchannelobserver.cpp:910 msgid "Please, select a SIM card:" msgstr "" #: indicator/ussdindicator.cpp:119 msgid "Reply" msgstr "" #: indicator/ussdindicator.cpp:142 msgid "Cancel" msgstr "" #: libtelephonyservice/callnotification.cpp:53 msgid "Conf call on hold" msgstr "" #: libtelephonyservice/callnotification.cpp:53 #, qt-format msgid "%1 call on hold" msgstr "" #: libtelephonyservice/callnotification.cpp:56 msgid "Conf call ended" msgstr "" #: libtelephonyservice/callnotification.cpp:56 #, qt-format msgid "%1 call ended" msgstr "" #: libtelephonyservice/callnotification.cpp:59 #, qt-format msgid "%1 call declined" msgstr "" #: libtelephonyservice/contactwatcher.cpp:157 msgid "Private Number" msgstr "" #: libtelephonyservice/contactwatcher.cpp:159 msgid "Unknown Number" msgstr "" telephony-service-0.5.3/po/am.po000066400000000000000000000304241455543255600165600ustar00rootroot00000000000000# Amharic translation for telephony-service # Copyright (c) 2014 Rosetta Contributors and Canonical Ltd 2014 # This file is distributed under the same license as the telephony-service package. # FIRST AUTHOR , 2014. # msgid "" msgstr "" "Project-Id-Version: telephony-service\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-12-16 17:03+0100\n" "PO-Revision-Date: 2016-12-03 14:59+0000\n" "Last-Translator: samson \n" "Language-Team: Amharic \n" "Language: am\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n > 1;\n" "X-Launchpad-Export-Date: 2017-01-04 06:02+0000\n" "X-Generator: Launchpad (build 18298)\n" #: indicator/telephony-service-call.desktop.in:4 msgid "Phone Calls" msgstr "የስልክ ጥሪዎች" #: indicator/telephony-service-sms.desktop.in:4 msgid "SMS" msgstr "ኤስ ኤም ኤስ" #: approver/approver.cpp:66 msgid "Unknown caller" msgstr "ያልታወቀ ደዋይ" #: approver/approver.cpp:94 msgid "I'm busy at the moment. I'll call later." msgstr "ለጊዜው በ ስራ ላይ ነኝ: በኋላ እደውላለሁ" #: approver/approver.cpp:95 msgid "I'm running late, on my way now." msgstr "እዘገያለሁ ነገር ግን እየመጣሁ ነው" #: approver/approver.cpp:96 msgid "Please call me back later." msgstr "እባክዎን ትንሽ ቆይተው እንደገና ይደውሉ" #: approver/approver.cpp:457 #, qt-format msgid "On [%1]" msgstr "በርቷል [%1]" #: approver/approver.cpp:461 indicator/messagingmenu.cpp:414 msgid "Private number" msgstr "የ ግል ቁጥር" #: approver/approver.cpp:464 indicator/messagingmenu.cpp:244 #: indicator/messagingmenu.cpp:418 indicator/textchannelobserver.cpp:640 msgid "Unknown number" msgstr "ያልታወቀ ቁጥር" #: approver/approver.cpp:470 approver/approver.cpp:485 msgid "Caller number is not available" msgstr "የደዋዩ ቁጥር አልተገኘም" #: approver/approver.cpp:476 msgid "Calling from private number" msgstr "ደዋይ ከ ግል ቁጥር" #: approver/approver.cpp:479 msgid "Calling from unknown number" msgstr "ደዋይ ካልታወቀ ቁጥር" #: approver/approver.cpp:482 #, qt-format msgid "Calling from %1" msgstr "ደዋይ ከ %1" #: approver/approver.cpp:529 msgid "Hold + Answer" msgstr "ይጠብቁ + መመለሻ" #: approver/approver.cpp:530 msgid "Accept" msgstr "ተቀብያለሁ" #: approver/approver.cpp:543 msgid "End + Answer" msgstr "መጨረሻ + መመለሻ" #: approver/approver.cpp:552 msgid "Decline" msgstr "አልቀበልም" #: approver/approver.cpp:560 msgid "Message & decline" msgstr "መልእክት & አልተቀበሉም" #: approver/main.cpp:46 msgid "Telephony Service Approver" msgstr "የ ቴሌፎን ግልጋሎት አቅራቢ" #: indicator/authhandler.cpp:72 msgid "Authentication failed. Do you want to review your credentials?" msgstr "ማረጋገጫ ወድቋል: የ እርስዎን ቅድሚያ ማየት ይፈልጋሉ?" #: indicator/authhandler.cpp:91 msgid "Yes" msgstr "አዎ" #: indicator/authhandler.cpp:94 msgid "No" msgstr "አይ" #: indicator/displaynamesettings.cpp:35 #, qt-format msgid "SIM %1" msgstr "ሲም %1" #: indicator/main.cpp:53 msgid "Telephony Service Indicator" msgstr "የ ቴሌፎን ግልጋሎት ጠቋሚ" #: indicator/messagingmenu.cpp:83 indicator/messagingmenu.cpp:87 msgid "Telephony Service" msgstr "የ ቴሌፎን ግልጋሎት" #: indicator/messagingmenu.cpp:151 indicator/messagingmenu.cpp:293 #: indicator/messagingmenu.cpp:360 msgid "Send" msgstr "መላኪያ" #. TRANSLATORS : %1 is the group name and %2 is the recipient name #: indicator/messagingmenu.cpp:262 indicator/textchannelobserver.cpp:671 #: indicator/textchannelobserver.cpp:675 #, qt-format msgid "Message to %1 from %2" msgstr "መልእክት ለ %1 ከ %2" #. TRANSLATORS : %1 is the recipient name #: indicator/messagingmenu.cpp:265 indicator/messagingmenu.cpp:269 #, fuzzy, qt-format #| msgid "Message to group from %1" msgid "Message to the group from %1" msgstr "መልእክት ወደ ቡድን ከ %1" #: indicator/messagingmenu.cpp:345 msgid "Call back" msgstr "መልሶ መደወያ" #: indicator/messagingmenu.cpp:350 #, fuzzy #| msgid "I missed your call - can you call me now?" msgid "Missed your call — can you call me now?" msgstr "ጥሪው አምልጧኛል - አሁን ሊደውሉልኝ ይችላሉ?" #: indicator/messagingmenu.cpp:351 #, fuzzy #| msgid "I'm running late. I'm on my way." msgid "Running late. On my way." msgstr "እየመጣሁ ነው: ነገር ግን እዘገያለሁ" #: indicator/messagingmenu.cpp:352 #, fuzzy #| msgid "I'm busy at the moment. I'll call you later." msgid "Busy at the moment. Will call you later." msgstr "አሁን በስራ ላይ ነኝ: በኋላ እደውላለሁ" #: indicator/messagingmenu.cpp:353 #, fuzzy #| msgid "I'll be 20 minutes late." msgid "I am 20 minutes late." msgstr "20 ደቂቆች እዘገያለሁ" #: indicator/messagingmenu.cpp:354 #, fuzzy #| msgid "Sorry, I'm still busy. I'll call you later." msgid "Still busy. Will call you later." msgstr "አዝናለሁ: አሁንም በስራ ላይ ነኝ: በኋላ እደውላለሁ" #: indicator/messagingmenu.cpp:409 #, qt-format msgid "%1 missed call" msgid_plural "%1 missed calls" msgstr[0] "%1 ያልተመለሰ ጥሪ" msgstr[1] "%1 ያልተመለሱ ጥሪዎች" #: indicator/messagingmenu.cpp:492 msgid "Voicemail messages" msgstr "የ ድምፅ መልእክቶች ሳጥን" #: indicator/messagingmenu.cpp:495 #, qt-format msgid "%1 voicemail message" msgid_plural "%1 voicemail messages" msgstr[0] "%1 የ ድምፅ መልእክት ሳጥን" msgstr[1] "%1 የ ድምፅ መልእክቶች ሳጥን" #: indicator/messagingmenu.cpp:500 msgid "Voicemail" msgstr "የ መልእክት ሳጥን" #: indicator/metrics.cpp:42 #, qt-format msgid "%1 text messages sent today" msgstr "%1 ዛሬ የላኩዋቸው የ ጽሁፍ መልእክቶች" #: indicator/metrics.cpp:43 msgid "No text messages sent today" msgstr "ዛሬ ምንም የ ጽሁፍ መልእክቶች አልላኩም" #: indicator/metrics.cpp:44 #, qt-format msgid "%1 text messages received today" msgstr "%1 ዛሬ የተቀበሉዋቸው የ ጽሁፍ መልእክቶች" #: indicator/metrics.cpp:45 msgid "No text messages received today" msgstr "ዛሬ ምንም የ ጽሁፍ መልእክቶች አልተቀበሉም" #: indicator/metrics.cpp:46 #, qt-format msgid "%1 calls received today" msgstr "%1 ዛሬ የተቀበሉዋቸው ጥሪዎች" #: indicator/metrics.cpp:47 msgid "No calls received today" msgstr "ዛሬ ምንም ጥሪ አልተቀበሉም" #: indicator/metrics.cpp:48 #, qt-format msgid "%1 calls made today" msgstr "%1 ዛሬ የደወሉት" #: indicator/metrics.cpp:49 indicator/metrics.cpp:51 msgid "No calls made today" msgstr "ዛሬ ምንም አልደወሉም" #: indicator/metrics.cpp:50 #, qt-format msgid "Spent %1 minutes in calls today" msgstr "ያባከኑት ጊዜ በ %1 ደቂቃዎች በጥሪ ዛሬ" #: indicator/textchannelobserver.cpp:225 msgid "Unlock your sim card and try again from the messaging application." msgstr "የ እርስዎን ሲም ካርድ ይክፈቱ እና በ መልእክት መላኪያ መተግበሪያ እንደገና ይሞክሩ" #: indicator/textchannelobserver.cpp:227 msgid "Deactivate flight mode and try again from the messaging application." msgstr "የበረራ ዘዴን ያሰናክሉ እና በ መልእክት መላኪያ መተግበሪያ እንደገና ይሞክሩ" #: indicator/textchannelobserver.cpp:230 msgid "Try again from the messaging application." msgstr "በ መልእክት መላኪያ መተግበሪያ እንደገና ይሞክሩ" #: indicator/textchannelobserver.cpp:236 msgid "The message could not be sent" msgstr "መልእክቱን መላክ አልተቻለም" #: indicator/textchannelobserver.cpp:249 indicator/textchannelobserver.cpp:713 msgid "View message" msgstr "መልእክት መመልከቻ" #: indicator/textchannelobserver.cpp:295 msgid "New Group" msgstr "አዲስ ቡድን" #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:302 #, qt-format msgid "You joined group %1 " msgstr "እርስዎ ቡድን ውስጥ ገብተዋል %1 " #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:306 #, qt-format msgid "You joined group %1" msgstr "እርስዎ አዲስ ቡድን ውስጥ ገብተዋል %1" #: indicator/textchannelobserver.cpp:309 msgid "You joined a new group" msgstr "እርስዎ ወደ አዲስ ቡድን ውስጥ ገብተዋል" #: indicator/textchannelobserver.cpp:328 msgid "View Group" msgstr "ቡድን መመልከቻ" #: indicator/textchannelobserver.cpp:367 indicator/ussdindicator.cpp:116 msgid "Ok" msgstr "እሺ" #: indicator/textchannelobserver.cpp:373 msgid "Save" msgstr "ማስቀመጫ" #: indicator/textchannelobserver.cpp:468 msgid "Emergency Alert" msgstr "" #: indicator/textchannelobserver.cpp:471 msgid "Emergency Alert: Extreme" msgstr "" #: indicator/textchannelobserver.cpp:474 msgid "Emergency Alert: Severe" msgstr "" #: indicator/textchannelobserver.cpp:477 msgid "Emergency Alert: Notice" msgstr "" #: indicator/textchannelobserver.cpp:482 msgid "AMBER Alert" msgstr "" #: indicator/textchannelobserver.cpp:485 msgid "Alert" msgstr "" #: indicator/textchannelobserver.cpp:531 msgid "Show alert" msgstr "" #: indicator/textchannelobserver.cpp:604 #, qt-format msgid "Attachment: %1 image" msgid_plural "Attachments: %1 images" msgstr[0] "ማያያዣ: %1 ምስል" msgstr[1] "ማያያዣዎች: %1 ምስሎች" #: indicator/textchannelobserver.cpp:606 #, qt-format msgid "Attachment: %1 video" msgid_plural "Attachments: %1 videos" msgstr[0] "ማያያዣ: %1 ቪዲዮ" msgstr[1] "ማያያዣዎች: %1 ቪዲዮዎች" #: indicator/textchannelobserver.cpp:608 #, qt-format msgid "Attachment: %1 contact" msgid_plural "Attachments: %1 contacts" msgstr[0] "ማያያዣ: %1 ግንኙነት" msgstr[1] "ማያያዣዎች: %1 ግንኙነቶች" #: indicator/textchannelobserver.cpp:610 #, qt-format msgid "Attachment: %1 audio clip" msgid_plural "Attachments: %1 audio clips" msgstr[0] "ማያያዣ: %1 ድምፅ" msgstr[1] "ማያያዣዎች: %1 ድምፆች" #: indicator/textchannelobserver.cpp:612 #, qt-format msgid "Attachment: %1 file" msgid_plural "Attachments: %1 files" msgstr[0] "ማያያዣ: %1 ፋይል" msgstr[1] "ማያያዣዎች: %1 ፋይሎች" #. TRANSLATORS : message displayed when any error occurred while receiving a MMS (case when cellular-data is off, or any downloading issue). Notify that there was a message, the user can find more about it in the messaging-app. #: indicator/textchannelobserver.cpp:615 #, fuzzy #| msgid "View message" msgid "New MMS message" msgstr "መልእክት መመልከቻ" #. TRANSLATORS : %1 is the recipient name #: indicator/textchannelobserver.cpp:679 indicator/textchannelobserver.cpp:683 #, qt-format msgid "Message to group from %1" msgstr "መልእክት ወደ ቡድን ከ %1" #: indicator/textchannelobserver.cpp:749 #, qt-format msgid "Message from %1" msgstr "መልእክት ከ %1" #: indicator/textchannelobserver.cpp:910 msgid "Please, select a SIM card:" msgstr "እባክዎን ይምረጡየ SIM ካርድ:" #: indicator/ussdindicator.cpp:119 msgid "Reply" msgstr "መመለሻ" #: indicator/ussdindicator.cpp:142 msgid "Cancel" msgstr "መሰረዣ" #: libtelephonyservice/callnotification.cpp:53 msgid "Conf call on hold" msgstr "" #: libtelephonyservice/callnotification.cpp:53 #, qt-format msgid "%1 call on hold" msgstr "" #: libtelephonyservice/callnotification.cpp:56 msgid "Conf call ended" msgstr "" #: libtelephonyservice/callnotification.cpp:56 #, qt-format msgid "%1 call ended" msgstr "" #: libtelephonyservice/callnotification.cpp:59 #, qt-format msgid "%1 call declined" msgstr "" #: libtelephonyservice/contactwatcher.cpp:157 msgid "Private Number" msgstr "የግል ቁጥር" #: libtelephonyservice/contactwatcher.cpp:159 msgid "Unknown Number" msgstr "ያልታወቀ ቁጥር" #, fuzzy #~| msgid "Telephony Service" #~ msgid "telephony-service-call" #~ msgstr "የ ቴሌፎን ግልጋሎት" #, fuzzy #~| msgid "Telephony Service" #~ msgid "telephony-service-message" #~ msgstr "የ ቴሌፎን ግልጋሎት" telephony-service-0.5.3/po/an.po000066400000000000000000000207371455543255600165670ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR Canonical Ltd. # This file is distributed under the same license as the telephony-service package. # FIRST AUTHOR , YEAR. # msgid "" msgstr "" "Project-Id-Version: telephony-service\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-12-16 17:03+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: Automatically generated\n" "Language-Team: none\n" "Language: an\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" #: indicator/telephony-service-call.desktop.in:4 msgid "Phone Calls" msgstr "" #: indicator/telephony-service-sms.desktop.in:4 msgid "SMS" msgstr "" #: approver/approver.cpp:66 msgid "Unknown caller" msgstr "" #: approver/approver.cpp:94 msgid "I'm busy at the moment. I'll call later." msgstr "" #: approver/approver.cpp:95 msgid "I'm running late, on my way now." msgstr "" #: approver/approver.cpp:96 msgid "Please call me back later." msgstr "" #: approver/approver.cpp:457 #, qt-format msgid "On [%1]" msgstr "" #: approver/approver.cpp:461 indicator/messagingmenu.cpp:414 msgid "Private number" msgstr "" #: approver/approver.cpp:464 indicator/messagingmenu.cpp:244 #: indicator/messagingmenu.cpp:418 indicator/textchannelobserver.cpp:640 msgid "Unknown number" msgstr "" #: approver/approver.cpp:470 approver/approver.cpp:485 msgid "Caller number is not available" msgstr "" #: approver/approver.cpp:476 msgid "Calling from private number" msgstr "" #: approver/approver.cpp:479 msgid "Calling from unknown number" msgstr "" #: approver/approver.cpp:482 #, qt-format msgid "Calling from %1" msgstr "" #: approver/approver.cpp:529 msgid "Hold + Answer" msgstr "" #: approver/approver.cpp:530 msgid "Accept" msgstr "" #: approver/approver.cpp:543 msgid "End + Answer" msgstr "" #: approver/approver.cpp:552 msgid "Decline" msgstr "" #: approver/approver.cpp:560 msgid "Message & decline" msgstr "" #: approver/main.cpp:46 msgid "Telephony Service Approver" msgstr "" #: indicator/authhandler.cpp:72 msgid "Authentication failed. Do you want to review your credentials?" msgstr "" #: indicator/authhandler.cpp:91 msgid "Yes" msgstr "" #: indicator/authhandler.cpp:94 msgid "No" msgstr "" #: indicator/displaynamesettings.cpp:35 #, qt-format msgid "SIM %1" msgstr "" #: indicator/main.cpp:53 msgid "Telephony Service Indicator" msgstr "" #: indicator/messagingmenu.cpp:83 indicator/messagingmenu.cpp:87 msgid "Telephony Service" msgstr "" #: indicator/messagingmenu.cpp:151 indicator/messagingmenu.cpp:293 #: indicator/messagingmenu.cpp:360 msgid "Send" msgstr "" #. TRANSLATORS : %1 is the group name and %2 is the recipient name #: indicator/messagingmenu.cpp:262 indicator/textchannelobserver.cpp:671 #: indicator/textchannelobserver.cpp:675 #, qt-format msgid "Message to %1 from %2" msgstr "" #. TRANSLATORS : %1 is the recipient name #: indicator/messagingmenu.cpp:265 indicator/messagingmenu.cpp:269 #, qt-format msgid "Message to the group from %1" msgstr "" #: indicator/messagingmenu.cpp:345 msgid "Call back" msgstr "" #: indicator/messagingmenu.cpp:350 msgid "Missed your call — can you call me now?" msgstr "" #: indicator/messagingmenu.cpp:351 msgid "Running late. On my way." msgstr "" #: indicator/messagingmenu.cpp:352 msgid "Busy at the moment. Will call you later." msgstr "" #: indicator/messagingmenu.cpp:353 msgid "I am 20 minutes late." msgstr "" #: indicator/messagingmenu.cpp:354 msgid "Still busy. Will call you later." msgstr "" #: indicator/messagingmenu.cpp:409 #, qt-format msgid "%1 missed call" msgid_plural "%1 missed calls" msgstr[0] "" msgstr[1] "" #: indicator/messagingmenu.cpp:492 msgid "Voicemail messages" msgstr "" #: indicator/messagingmenu.cpp:495 #, qt-format msgid "%1 voicemail message" msgid_plural "%1 voicemail messages" msgstr[0] "" msgstr[1] "" #: indicator/messagingmenu.cpp:500 msgid "Voicemail" msgstr "" #: indicator/metrics.cpp:42 #, qt-format msgid "%1 text messages sent today" msgstr "" #: indicator/metrics.cpp:43 msgid "No text messages sent today" msgstr "" #: indicator/metrics.cpp:44 #, qt-format msgid "%1 text messages received today" msgstr "" #: indicator/metrics.cpp:45 msgid "No text messages received today" msgstr "" #: indicator/metrics.cpp:46 #, qt-format msgid "%1 calls received today" msgstr "" #: indicator/metrics.cpp:47 msgid "No calls received today" msgstr "" #: indicator/metrics.cpp:48 #, qt-format msgid "%1 calls made today" msgstr "" #: indicator/metrics.cpp:49 indicator/metrics.cpp:51 msgid "No calls made today" msgstr "" #: indicator/metrics.cpp:50 #, qt-format msgid "Spent %1 minutes in calls today" msgstr "" #: indicator/textchannelobserver.cpp:225 msgid "Unlock your sim card and try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:227 msgid "Deactivate flight mode and try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:230 msgid "Try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:236 msgid "The message could not be sent" msgstr "" #: indicator/textchannelobserver.cpp:249 indicator/textchannelobserver.cpp:713 msgid "View message" msgstr "" #: indicator/textchannelobserver.cpp:295 msgid "New Group" msgstr "" #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:302 #, qt-format msgid "You joined group %1 " msgstr "" #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:306 #, qt-format msgid "You joined group %1" msgstr "" #: indicator/textchannelobserver.cpp:309 msgid "You joined a new group" msgstr "" #: indicator/textchannelobserver.cpp:328 msgid "View Group" msgstr "" #: indicator/textchannelobserver.cpp:367 indicator/ussdindicator.cpp:116 msgid "Ok" msgstr "" #: indicator/textchannelobserver.cpp:373 msgid "Save" msgstr "" #: indicator/textchannelobserver.cpp:468 msgid "Emergency Alert" msgstr "" #: indicator/textchannelobserver.cpp:471 msgid "Emergency Alert: Extreme" msgstr "" #: indicator/textchannelobserver.cpp:474 msgid "Emergency Alert: Severe" msgstr "" #: indicator/textchannelobserver.cpp:477 msgid "Emergency Alert: Notice" msgstr "" #: indicator/textchannelobserver.cpp:482 msgid "AMBER Alert" msgstr "" #: indicator/textchannelobserver.cpp:485 msgid "Alert" msgstr "" #: indicator/textchannelobserver.cpp:531 msgid "Show alert" msgstr "" #: indicator/textchannelobserver.cpp:604 #, qt-format msgid "Attachment: %1 image" msgid_plural "Attachments: %1 images" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:606 #, qt-format msgid "Attachment: %1 video" msgid_plural "Attachments: %1 videos" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:608 #, qt-format msgid "Attachment: %1 contact" msgid_plural "Attachments: %1 contacts" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:610 #, qt-format msgid "Attachment: %1 audio clip" msgid_plural "Attachments: %1 audio clips" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:612 #, qt-format msgid "Attachment: %1 file" msgid_plural "Attachments: %1 files" msgstr[0] "" msgstr[1] "" #. TRANSLATORS : message displayed when any error occurred while receiving a MMS (case when cellular-data is off, or any downloading issue). Notify that there was a message, the user can find more about it in the messaging-app. #: indicator/textchannelobserver.cpp:615 msgid "New MMS message" msgstr "" #. TRANSLATORS : %1 is the recipient name #: indicator/textchannelobserver.cpp:679 indicator/textchannelobserver.cpp:683 #, qt-format msgid "Message to group from %1" msgstr "" #: indicator/textchannelobserver.cpp:749 #, qt-format msgid "Message from %1" msgstr "" #: indicator/textchannelobserver.cpp:910 msgid "Please, select a SIM card:" msgstr "" #: indicator/ussdindicator.cpp:119 msgid "Reply" msgstr "" #: indicator/ussdindicator.cpp:142 msgid "Cancel" msgstr "" #: libtelephonyservice/callnotification.cpp:53 msgid "Conf call on hold" msgstr "" #: libtelephonyservice/callnotification.cpp:53 #, qt-format msgid "%1 call on hold" msgstr "" #: libtelephonyservice/callnotification.cpp:56 msgid "Conf call ended" msgstr "" #: libtelephonyservice/callnotification.cpp:56 #, qt-format msgid "%1 call ended" msgstr "" #: libtelephonyservice/callnotification.cpp:59 #, qt-format msgid "%1 call declined" msgstr "" #: libtelephonyservice/contactwatcher.cpp:157 msgid "Private Number" msgstr "" #: libtelephonyservice/contactwatcher.cpp:159 msgid "Unknown Number" msgstr "" telephony-service-0.5.3/po/ar.po000066400000000000000000000305371455543255600165720ustar00rootroot00000000000000# Arabic translation for telephony-service # Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013 # This file is distributed under the same license as the telephony-service package. # FIRST AUTHOR , 2013. # msgid "" msgstr "" "Project-Id-Version: telephony-service\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-12-16 17:03+0100\n" "PO-Revision-Date: 2023-07-17 18:05+0000\n" "Last-Translator: abidin toumi \n" "Language-Team: Arabic \n" "Language: ar\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 " "&& n%100<=10 ? 3 : n%100>=11 ? 4 : 5;\n" "X-Generator: Weblate 5.0-dev\n" "X-Launchpad-Export-Date: 2017-01-04 06:02+0000\n" #: indicator/telephony-service-call.desktop.in:4 msgid "Phone Calls" msgstr "مكالمات هاتفية" #: indicator/telephony-service-sms.desktop.in:4 msgid "SMS" msgstr "رسالة قصيرة" #: approver/approver.cpp:66 msgid "Unknown caller" msgstr "متصل مجهول" #: approver/approver.cpp:94 msgid "I'm busy at the moment. I'll call later." msgstr "أنا مشغول حاليا. سأتصل بك لاحقا." #: approver/approver.cpp:95 msgid "I'm running late, on my way now." msgstr "" #: approver/approver.cpp:96 msgid "Please call me back later." msgstr "رجاءً عاود الاتصال بي لاحقا." #: approver/approver.cpp:457 #, qt-format msgid "On [%1]" msgstr "" #: approver/approver.cpp:461 indicator/messagingmenu.cpp:414 msgid "Private number" msgstr "رقم خاص" #: approver/approver.cpp:464 indicator/messagingmenu.cpp:244 #: indicator/messagingmenu.cpp:418 indicator/textchannelobserver.cpp:640 msgid "Unknown number" msgstr "رقم مجهول" #: approver/approver.cpp:470 approver/approver.cpp:485 msgid "Caller number is not available" msgstr "رقم المتصل غير متاح حاليا" #: approver/approver.cpp:476 msgid "Calling from private number" msgstr "اتصال من رقم خاص" #: approver/approver.cpp:479 msgid "Calling from unknown number" msgstr "اتصال من رقم مجهول" #: approver/approver.cpp:482 #, qt-format msgid "Calling from %1" msgstr "الاتصال من %1" #: approver/approver.cpp:529 msgid "Hold + Answer" msgstr "" #: approver/approver.cpp:530 msgid "Accept" msgstr "أقبل" #: approver/approver.cpp:543 msgid "End + Answer" msgstr "" #: approver/approver.cpp:552 msgid "Decline" msgstr "ارفض" #: approver/approver.cpp:560 msgid "Message & decline" msgstr "" #: approver/main.cpp:46 msgid "Telephony Service Approver" msgstr "" #: indicator/authhandler.cpp:72 msgid "Authentication failed. Do you want to review your credentials?" msgstr "" #: indicator/authhandler.cpp:91 msgid "Yes" msgstr "نعم" #: indicator/authhandler.cpp:94 msgid "No" msgstr "لا" #: indicator/displaynamesettings.cpp:35 #, qt-format msgid "SIM %1" msgstr "SIM %1" #: indicator/main.cpp:53 msgid "Telephony Service Indicator" msgstr "" #: indicator/messagingmenu.cpp:83 indicator/messagingmenu.cpp:87 msgid "Telephony Service" msgstr "" #: indicator/messagingmenu.cpp:151 indicator/messagingmenu.cpp:293 #: indicator/messagingmenu.cpp:360 msgid "Send" msgstr "أرسل" #. TRANSLATORS : %1 is the group name and %2 is the recipient name #: indicator/messagingmenu.cpp:262 indicator/textchannelobserver.cpp:671 #: indicator/textchannelobserver.cpp:675 #, qt-format msgid "Message to %1 from %2" msgstr "" #. TRANSLATORS : %1 is the recipient name #: indicator/messagingmenu.cpp:265 indicator/messagingmenu.cpp:269 #, fuzzy, qt-format #| msgid "Message to group from %1" msgid "Message to the group from %1" msgstr "رسالة للمجموعة من %1" #: indicator/messagingmenu.cpp:345 msgid "Call back" msgstr "عاود الاتصال" #: indicator/messagingmenu.cpp:350 #, fuzzy #| msgid "I missed your call - can you call me now?" msgid "Missed your call — can you call me now?" msgstr "لقد فاتني اتصالك ولم أرد عليه - أيمكنك معاودة الاتصال بي الآن؟" #: indicator/messagingmenu.cpp:351 #, fuzzy #| msgid "I'm running late. I'm on my way." msgid "Running late. On my way." msgstr "قد أتأخر قليلا. أنا في طريقي إليك." #: indicator/messagingmenu.cpp:352 #, fuzzy #| msgid "I'm busy at the moment. I'll call you later." msgid "Busy at the moment. Will call you later." msgstr "أنا منشغل حاليا. سأتصل بك لاحقا." #: indicator/messagingmenu.cpp:353 #, fuzzy #| msgid "I'll be 20 minutes late." msgid "I am 20 minutes late." msgstr "سأتأخر 20 دقيقة." #: indicator/messagingmenu.cpp:354 #, fuzzy #| msgid "Sorry, I'm still busy. I'll call you later." msgid "Still busy. Will call you later." msgstr "عذرًا، ما زلت منشغلا. سأتصل بك لاحقا." #: indicator/messagingmenu.cpp:409 #, qt-format msgid "%1 missed call" msgid_plural "%1 missed calls" msgstr[0] "لا مكالمات لم ترد عليها (%1)" msgstr[1] "مكالمة واحدة لم ترد عليها (%1)" msgstr[2] "مكالمتين لم ترد عليهما (%1)" msgstr[3] "%1 مكالمات لم ترد عليها" msgstr[4] "%1 مكالمة لم ترد عليها" msgstr[5] "%1 مكالمة لم ترد عليها" #: indicator/messagingmenu.cpp:492 msgid "Voicemail messages" msgstr "رسائل البريد الصوتي" #: indicator/messagingmenu.cpp:495 #, qt-format msgid "%1 voicemail message" msgid_plural "%1 voicemail messages" msgstr[0] "لا رسائل صوتية (%1)" msgstr[1] "رسالة صوتية واحدة (%1)" msgstr[2] "رسالتان صوتيتان (%1)" msgstr[3] "%1 رسائل صوتية" msgstr[4] "%1 رسالة صوتية" msgstr[5] "%1 رسالة صوتية" #: indicator/messagingmenu.cpp:500 msgid "Voicemail" msgstr "البريد الصوتي" #: indicator/metrics.cpp:42 #, qt-format msgid "%1 text messages sent today" msgstr "%1 رسائل نصية تم إرسالها اليوم" #: indicator/metrics.cpp:43 msgid "No text messages sent today" msgstr "لا رسائل نصية تم إرسالها اليوم" #: indicator/metrics.cpp:44 #, qt-format msgid "%1 text messages received today" msgstr "%1 رسائل نصية تم تلقيها اليوم" #: indicator/metrics.cpp:45 msgid "No text messages received today" msgstr "لا رسائل نصية تم تلقيها اليوم" #: indicator/metrics.cpp:46 #, qt-format msgid "%1 calls received today" msgstr "%1 مكالمات تم استلامها اليوم" #: indicator/metrics.cpp:47 msgid "No calls received today" msgstr "لا مكالمات تم استلامها اليوم" #: indicator/metrics.cpp:48 #, qt-format msgid "%1 calls made today" msgstr "%1 مكالمات تم إجرائها اليوم" #: indicator/metrics.cpp:49 indicator/metrics.cpp:51 msgid "No calls made today" msgstr "لا مكالمات تم إجرائها اليوم" #: indicator/metrics.cpp:50 #, qt-format msgid "Spent %1 minutes in calls today" msgstr "" #: indicator/textchannelobserver.cpp:225 msgid "Unlock your sim card and try again from the messaging application." msgstr "قم بفتح القفل عن بطاقة SIM ثم حاول مجددا من تطبيق الرسائل." #: indicator/textchannelobserver.cpp:227 msgid "Deactivate flight mode and try again from the messaging application." msgstr "عطَل وضع الطيران ثم حاول مجددا من تطبيق الرسائل." #: indicator/textchannelobserver.cpp:230 msgid "Try again from the messaging application." msgstr "حاول مجددا من تطبيق الرسائل" #: indicator/textchannelobserver.cpp:236 msgid "The message could not be sent" msgstr "تعذر إرسال الرسالة" #: indicator/textchannelobserver.cpp:249 indicator/textchannelobserver.cpp:713 msgid "View message" msgstr "عرض الرسالة" #: indicator/textchannelobserver.cpp:295 msgid "New Group" msgstr "" #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:302 #, qt-format msgid "You joined group %1 " msgstr "" #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:306 #, qt-format msgid "You joined group %1" msgstr "" #: indicator/textchannelobserver.cpp:309 msgid "You joined a new group" msgstr "" #: indicator/textchannelobserver.cpp:328 msgid "View Group" msgstr "" #: indicator/textchannelobserver.cpp:367 indicator/ussdindicator.cpp:116 msgid "Ok" msgstr "موافق" #: indicator/textchannelobserver.cpp:373 msgid "Save" msgstr "احفظ" #: indicator/textchannelobserver.cpp:468 msgid "Emergency Alert" msgstr "" #: indicator/textchannelobserver.cpp:471 msgid "Emergency Alert: Extreme" msgstr "" #: indicator/textchannelobserver.cpp:474 msgid "Emergency Alert: Severe" msgstr "" #: indicator/textchannelobserver.cpp:477 msgid "Emergency Alert: Notice" msgstr "" #: indicator/textchannelobserver.cpp:482 msgid "AMBER Alert" msgstr "" #: indicator/textchannelobserver.cpp:485 msgid "Alert" msgstr "" #: indicator/textchannelobserver.cpp:531 msgid "Show alert" msgstr "" #: indicator/textchannelobserver.cpp:604 #, qt-format msgid "Attachment: %1 image" msgid_plural "Attachments: %1 images" msgstr[0] "مرفق: لاشيئ" msgstr[1] "مرفق: صورة" msgstr[2] "مرفقان: صورتان" msgstr[3] "مرفقات: %1 صور" msgstr[4] "مرفقات: %1 صورة" msgstr[5] "مرفقات: %1 صورة" #: indicator/textchannelobserver.cpp:606 #, qt-format msgid "Attachment: %1 video" msgid_plural "Attachments: %1 videos" msgstr[0] "مرفق: لاشيئ" msgstr[1] "مرفق: فيديو" msgstr[2] "مرفقات: فيديوهان" msgstr[3] "مرفقات: %1 فيديوهات" msgstr[4] "مرفقات: %1 فيديو" msgstr[5] "مرفقات: %1 فيديو" #: indicator/textchannelobserver.cpp:608 #, qt-format msgid "Attachment: %1 contact" msgid_plural "Attachments: %1 contacts" msgstr[0] "مرفق: لاشيئ" msgstr[1] "مرفق: متراسل" msgstr[2] "مرفقان: متراسلان" msgstr[3] "مرفقات: %1 متراسلين" msgstr[4] "مرفقات: %1 مترسلًا" msgstr[5] "مرفقات: %1 متراسل" #: indicator/textchannelobserver.cpp:610 #, qt-format msgid "Attachment: %1 audio clip" msgid_plural "Attachments: %1 audio clips" msgstr[0] "مرفق: لاشيء" msgstr[1] "مرفق: مقطع صوتي" msgstr[2] "مرفقان: مقطعان صوتيان" msgstr[3] "مرفقات: %1 مقاطع صوتية" msgstr[4] "مرفقات: %1 مقطعًا صوتيًا" msgstr[5] "مرفقات: %1 مقطع صوتي" #: indicator/textchannelobserver.cpp:612 #, qt-format msgid "Attachment: %1 file" msgid_plural "Attachments: %1 files" msgstr[0] "مرفق: لاشيئ" msgstr[1] "مرفق: ملف" msgstr[2] "مرفقان: ملفان" msgstr[3] "مرفقات: %1 ملفات" msgstr[4] "مرفقات: %1 ملفا" msgstr[5] "مرفقات: %1 ملف" #. TRANSLATORS : message displayed when any error occurred while receiving a MMS (case when cellular-data is off, or any downloading issue). Notify that there was a message, the user can find more about it in the messaging-app. #: indicator/textchannelobserver.cpp:615 #, fuzzy #| msgid "View message" msgid "New MMS message" msgstr "عرض الرسالة" #. TRANSLATORS : %1 is the recipient name #: indicator/textchannelobserver.cpp:679 indicator/textchannelobserver.cpp:683 #, qt-format msgid "Message to group from %1" msgstr "رسالة للمجموعة من %1" #: indicator/textchannelobserver.cpp:749 #, qt-format msgid "Message from %1" msgstr "رسالة من %1" #: indicator/textchannelobserver.cpp:910 msgid "Please, select a SIM card:" msgstr "برجاء اختيار بطاقة SIM:" #: indicator/ussdindicator.cpp:119 msgid "Reply" msgstr "رد" #: indicator/ussdindicator.cpp:142 msgid "Cancel" msgstr "ألغِ" #: libtelephonyservice/callnotification.cpp:53 msgid "Conf call on hold" msgstr "" #: libtelephonyservice/callnotification.cpp:53 #, qt-format msgid "%1 call on hold" msgstr "" #: libtelephonyservice/callnotification.cpp:56 msgid "Conf call ended" msgstr "" #: libtelephonyservice/callnotification.cpp:56 #, qt-format msgid "%1 call ended" msgstr "" #: libtelephonyservice/callnotification.cpp:59 #, qt-format msgid "%1 call declined" msgstr "" #: libtelephonyservice/contactwatcher.cpp:157 msgid "Private Number" msgstr "رقم خاص" #: libtelephonyservice/contactwatcher.cpp:159 msgid "Unknown Number" msgstr "رقم مجهول" telephony-service-0.5.3/po/as.po000066400000000000000000000207361455543255600165730ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR Canonical Ltd. # This file is distributed under the same license as the telephony-service package. # FIRST AUTHOR , YEAR. # msgid "" msgstr "" "Project-Id-Version: telephony-service\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-12-16 17:03+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: Automatically generated\n" "Language-Team: none\n" "Language: as\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n > 1;\n" #: indicator/telephony-service-call.desktop.in:4 msgid "Phone Calls" msgstr "" #: indicator/telephony-service-sms.desktop.in:4 msgid "SMS" msgstr "" #: approver/approver.cpp:66 msgid "Unknown caller" msgstr "" #: approver/approver.cpp:94 msgid "I'm busy at the moment. I'll call later." msgstr "" #: approver/approver.cpp:95 msgid "I'm running late, on my way now." msgstr "" #: approver/approver.cpp:96 msgid "Please call me back later." msgstr "" #: approver/approver.cpp:457 #, qt-format msgid "On [%1]" msgstr "" #: approver/approver.cpp:461 indicator/messagingmenu.cpp:414 msgid "Private number" msgstr "" #: approver/approver.cpp:464 indicator/messagingmenu.cpp:244 #: indicator/messagingmenu.cpp:418 indicator/textchannelobserver.cpp:640 msgid "Unknown number" msgstr "" #: approver/approver.cpp:470 approver/approver.cpp:485 msgid "Caller number is not available" msgstr "" #: approver/approver.cpp:476 msgid "Calling from private number" msgstr "" #: approver/approver.cpp:479 msgid "Calling from unknown number" msgstr "" #: approver/approver.cpp:482 #, qt-format msgid "Calling from %1" msgstr "" #: approver/approver.cpp:529 msgid "Hold + Answer" msgstr "" #: approver/approver.cpp:530 msgid "Accept" msgstr "" #: approver/approver.cpp:543 msgid "End + Answer" msgstr "" #: approver/approver.cpp:552 msgid "Decline" msgstr "" #: approver/approver.cpp:560 msgid "Message & decline" msgstr "" #: approver/main.cpp:46 msgid "Telephony Service Approver" msgstr "" #: indicator/authhandler.cpp:72 msgid "Authentication failed. Do you want to review your credentials?" msgstr "" #: indicator/authhandler.cpp:91 msgid "Yes" msgstr "" #: indicator/authhandler.cpp:94 msgid "No" msgstr "" #: indicator/displaynamesettings.cpp:35 #, qt-format msgid "SIM %1" msgstr "" #: indicator/main.cpp:53 msgid "Telephony Service Indicator" msgstr "" #: indicator/messagingmenu.cpp:83 indicator/messagingmenu.cpp:87 msgid "Telephony Service" msgstr "" #: indicator/messagingmenu.cpp:151 indicator/messagingmenu.cpp:293 #: indicator/messagingmenu.cpp:360 msgid "Send" msgstr "" #. TRANSLATORS : %1 is the group name and %2 is the recipient name #: indicator/messagingmenu.cpp:262 indicator/textchannelobserver.cpp:671 #: indicator/textchannelobserver.cpp:675 #, qt-format msgid "Message to %1 from %2" msgstr "" #. TRANSLATORS : %1 is the recipient name #: indicator/messagingmenu.cpp:265 indicator/messagingmenu.cpp:269 #, qt-format msgid "Message to the group from %1" msgstr "" #: indicator/messagingmenu.cpp:345 msgid "Call back" msgstr "" #: indicator/messagingmenu.cpp:350 msgid "Missed your call — can you call me now?" msgstr "" #: indicator/messagingmenu.cpp:351 msgid "Running late. On my way." msgstr "" #: indicator/messagingmenu.cpp:352 msgid "Busy at the moment. Will call you later." msgstr "" #: indicator/messagingmenu.cpp:353 msgid "I am 20 minutes late." msgstr "" #: indicator/messagingmenu.cpp:354 msgid "Still busy. Will call you later." msgstr "" #: indicator/messagingmenu.cpp:409 #, qt-format msgid "%1 missed call" msgid_plural "%1 missed calls" msgstr[0] "" msgstr[1] "" #: indicator/messagingmenu.cpp:492 msgid "Voicemail messages" msgstr "" #: indicator/messagingmenu.cpp:495 #, qt-format msgid "%1 voicemail message" msgid_plural "%1 voicemail messages" msgstr[0] "" msgstr[1] "" #: indicator/messagingmenu.cpp:500 msgid "Voicemail" msgstr "" #: indicator/metrics.cpp:42 #, qt-format msgid "%1 text messages sent today" msgstr "" #: indicator/metrics.cpp:43 msgid "No text messages sent today" msgstr "" #: indicator/metrics.cpp:44 #, qt-format msgid "%1 text messages received today" msgstr "" #: indicator/metrics.cpp:45 msgid "No text messages received today" msgstr "" #: indicator/metrics.cpp:46 #, qt-format msgid "%1 calls received today" msgstr "" #: indicator/metrics.cpp:47 msgid "No calls received today" msgstr "" #: indicator/metrics.cpp:48 #, qt-format msgid "%1 calls made today" msgstr "" #: indicator/metrics.cpp:49 indicator/metrics.cpp:51 msgid "No calls made today" msgstr "" #: indicator/metrics.cpp:50 #, qt-format msgid "Spent %1 minutes in calls today" msgstr "" #: indicator/textchannelobserver.cpp:225 msgid "Unlock your sim card and try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:227 msgid "Deactivate flight mode and try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:230 msgid "Try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:236 msgid "The message could not be sent" msgstr "" #: indicator/textchannelobserver.cpp:249 indicator/textchannelobserver.cpp:713 msgid "View message" msgstr "" #: indicator/textchannelobserver.cpp:295 msgid "New Group" msgstr "" #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:302 #, qt-format msgid "You joined group %1 " msgstr "" #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:306 #, qt-format msgid "You joined group %1" msgstr "" #: indicator/textchannelobserver.cpp:309 msgid "You joined a new group" msgstr "" #: indicator/textchannelobserver.cpp:328 msgid "View Group" msgstr "" #: indicator/textchannelobserver.cpp:367 indicator/ussdindicator.cpp:116 msgid "Ok" msgstr "" #: indicator/textchannelobserver.cpp:373 msgid "Save" msgstr "" #: indicator/textchannelobserver.cpp:468 msgid "Emergency Alert" msgstr "" #: indicator/textchannelobserver.cpp:471 msgid "Emergency Alert: Extreme" msgstr "" #: indicator/textchannelobserver.cpp:474 msgid "Emergency Alert: Severe" msgstr "" #: indicator/textchannelobserver.cpp:477 msgid "Emergency Alert: Notice" msgstr "" #: indicator/textchannelobserver.cpp:482 msgid "AMBER Alert" msgstr "" #: indicator/textchannelobserver.cpp:485 msgid "Alert" msgstr "" #: indicator/textchannelobserver.cpp:531 msgid "Show alert" msgstr "" #: indicator/textchannelobserver.cpp:604 #, qt-format msgid "Attachment: %1 image" msgid_plural "Attachments: %1 images" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:606 #, qt-format msgid "Attachment: %1 video" msgid_plural "Attachments: %1 videos" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:608 #, qt-format msgid "Attachment: %1 contact" msgid_plural "Attachments: %1 contacts" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:610 #, qt-format msgid "Attachment: %1 audio clip" msgid_plural "Attachments: %1 audio clips" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:612 #, qt-format msgid "Attachment: %1 file" msgid_plural "Attachments: %1 files" msgstr[0] "" msgstr[1] "" #. TRANSLATORS : message displayed when any error occurred while receiving a MMS (case when cellular-data is off, or any downloading issue). Notify that there was a message, the user can find more about it in the messaging-app. #: indicator/textchannelobserver.cpp:615 msgid "New MMS message" msgstr "" #. TRANSLATORS : %1 is the recipient name #: indicator/textchannelobserver.cpp:679 indicator/textchannelobserver.cpp:683 #, qt-format msgid "Message to group from %1" msgstr "" #: indicator/textchannelobserver.cpp:749 #, qt-format msgid "Message from %1" msgstr "" #: indicator/textchannelobserver.cpp:910 msgid "Please, select a SIM card:" msgstr "" #: indicator/ussdindicator.cpp:119 msgid "Reply" msgstr "" #: indicator/ussdindicator.cpp:142 msgid "Cancel" msgstr "" #: libtelephonyservice/callnotification.cpp:53 msgid "Conf call on hold" msgstr "" #: libtelephonyservice/callnotification.cpp:53 #, qt-format msgid "%1 call on hold" msgstr "" #: libtelephonyservice/callnotification.cpp:56 msgid "Conf call ended" msgstr "" #: libtelephonyservice/callnotification.cpp:56 #, qt-format msgid "%1 call ended" msgstr "" #: libtelephonyservice/callnotification.cpp:59 #, qt-format msgid "%1 call declined" msgstr "" #: libtelephonyservice/contactwatcher.cpp:157 msgid "Private Number" msgstr "" #: libtelephonyservice/contactwatcher.cpp:159 msgid "Unknown Number" msgstr "" telephony-service-0.5.3/po/ast.po000066400000000000000000000260441455543255600167550ustar00rootroot00000000000000# Asturian translation for telephony-service # Copyright (c) 2014 Rosetta Contributors and Canonical Ltd 2014 # This file is distributed under the same license as the telephony-service package. # FIRST AUTHOR , 2014. # msgid "" msgstr "" "Project-Id-Version: telephony-service\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-12-16 17:03+0100\n" "PO-Revision-Date: 2016-12-21 19:58+0000\n" "Last-Translator: Xuacu Saturio \n" "Language-Team: Asturian \n" "Language: ast\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Launchpad-Export-Date: 2017-01-04 06:02+0000\n" "X-Generator: Launchpad (build 18298)\n" #: indicator/telephony-service-call.desktop.in:4 msgid "Phone Calls" msgstr "Llamaes de teléfonu" #: indicator/telephony-service-sms.desktop.in:4 msgid "SMS" msgstr "SMS" #: approver/approver.cpp:66 msgid "Unknown caller" msgstr "Llamante desconocíu" #: approver/approver.cpp:94 msgid "I'm busy at the moment. I'll call later." msgstr "Llámote namái pueda" #: approver/approver.cpp:95 msgid "I'm running late, on my way now." msgstr "Aportaré sero, toi en camín." #: approver/approver.cpp:96 msgid "Please call me back later." msgstr "Por favor llámame llueu" #: approver/approver.cpp:457 #, qt-format msgid "On [%1]" msgstr "En [%1]" #: approver/approver.cpp:461 indicator/messagingmenu.cpp:414 msgid "Private number" msgstr "Númberu priváu" #: approver/approver.cpp:464 indicator/messagingmenu.cpp:244 #: indicator/messagingmenu.cpp:418 indicator/textchannelobserver.cpp:640 msgid "Unknown number" msgstr "Númberu desconocíu" #: approver/approver.cpp:470 approver/approver.cpp:485 msgid "Caller number is not available" msgstr "El númberu al que tas llamando nun ta disponible" #: approver/approver.cpp:476 msgid "Calling from private number" msgstr "Llamada dende un númberu priváu" #: approver/approver.cpp:479 msgid "Calling from unknown number" msgstr "Llamada dende númberu desconocíu" #: approver/approver.cpp:482 #, qt-format msgid "Calling from %1" msgstr "Llamada dende %1" #: approver/approver.cpp:529 msgid "Hold + Answer" msgstr "Caltener + Contestar" #: approver/approver.cpp:530 msgid "Accept" msgstr "Aceutar" #: approver/approver.cpp:543 msgid "End + Answer" msgstr "Fin + responder" #: approver/approver.cpp:552 msgid "Decline" msgstr "Refugar" #: approver/approver.cpp:560 msgid "Message & decline" msgstr "Refugar con msx." #: approver/main.cpp:46 msgid "Telephony Service Approver" msgstr "Aprobador del serviciu telefónicu" #: indicator/authhandler.cpp:72 msgid "Authentication failed. Do you want to review your credentials?" msgstr "Falló l'autenticación. ¿Quies revisar les tos credenciales?" #: indicator/authhandler.cpp:91 msgid "Yes" msgstr "Sí" #: indicator/authhandler.cpp:94 msgid "No" msgstr "Non" #: indicator/displaynamesettings.cpp:35 #, qt-format msgid "SIM %1" msgstr "SIM %1" #: indicator/main.cpp:53 msgid "Telephony Service Indicator" msgstr "Indicador del serviciu de telefonía" #: indicator/messagingmenu.cpp:83 indicator/messagingmenu.cpp:87 msgid "Telephony Service" msgstr "Serviciu telefónicu" #: indicator/messagingmenu.cpp:151 indicator/messagingmenu.cpp:293 #: indicator/messagingmenu.cpp:360 msgid "Send" msgstr "Unviar" #. TRANSLATORS : %1 is the group name and %2 is the recipient name #: indicator/messagingmenu.cpp:262 indicator/textchannelobserver.cpp:671 #: indicator/textchannelobserver.cpp:675 #, qt-format msgid "Message to %1 from %2" msgstr "Mensaxe a %1 de %2" #. TRANSLATORS : %1 is the recipient name #: indicator/messagingmenu.cpp:265 indicator/messagingmenu.cpp:269 #, fuzzy, qt-format #| msgid "Message to group from %1" msgid "Message to the group from %1" msgstr "Mensaxe a grupu de %1" #: indicator/messagingmenu.cpp:345 msgid "Call back" msgstr "Devolver llamada" #: indicator/messagingmenu.cpp:350 #, fuzzy #| msgid "I missed your call - can you call me now?" msgid "Missed your call — can you call me now?" msgstr "Nun pudi responder, ¿pues llamame agora?" #: indicator/messagingmenu.cpp:351 #, fuzzy #| msgid "I'm running late. I'm on my way." msgid "Running late. On my way." msgstr "Fízoseme sero. Toi en camín." #: indicator/messagingmenu.cpp:352 #, fuzzy #| msgid "I'm busy at the moment. I'll call you later." msgid "Busy at the moment. Will call you later." msgstr "Toi ocupáu nesti intre. Llámote dempués." #: indicator/messagingmenu.cpp:353 #, fuzzy #| msgid "I'll be 20 minutes late." msgid "I am 20 minutes late." msgstr "Voi tardar 20 minutos." #: indicator/messagingmenu.cpp:354 #, fuzzy #| msgid "Sorry, I'm still busy. I'll call you later." msgid "Still busy. Will call you later." msgstr "Siéntolo, sigo ocupáu/ada. Llámote llueu." #: indicator/messagingmenu.cpp:409 #, qt-format msgid "%1 missed call" msgid_plural "%1 missed calls" msgstr[0] "%1 llamada perdida" msgstr[1] "%1 llamaes perdíes" #: indicator/messagingmenu.cpp:492 msgid "Voicemail messages" msgstr "Mensaxes de voz" #: indicator/messagingmenu.cpp:495 #, qt-format msgid "%1 voicemail message" msgid_plural "%1 voicemail messages" msgstr[0] "%1 mensaxe de voz" msgstr[1] "%1 mensaxes de voz" #: indicator/messagingmenu.cpp:500 msgid "Voicemail" msgstr "Buzón de voz" #: indicator/metrics.cpp:42 #, qt-format msgid "%1 text messages sent today" msgstr "%1 mensaxes de testu unviaos güei" #: indicator/metrics.cpp:43 msgid "No text messages sent today" msgstr "Güei nun s'unviaron mensaxes de testu" #: indicator/metrics.cpp:44 #, qt-format msgid "%1 text messages received today" msgstr "%1 mensaxes de testu recibíos güei" #: indicator/metrics.cpp:45 msgid "No text messages received today" msgstr "Güei nun se recibieron mensaxes de testu" #: indicator/metrics.cpp:46 #, qt-format msgid "%1 calls received today" msgstr "%1 llamaes recibíes güei" #: indicator/metrics.cpp:47 msgid "No calls received today" msgstr "Güei nun se recibieron llamaes" #: indicator/metrics.cpp:48 #, qt-format msgid "%1 calls made today" msgstr "%1 llamaes feches güei" #: indicator/metrics.cpp:49 indicator/metrics.cpp:51 msgid "No calls made today" msgstr "Güei nun se fexeron llamaes" #: indicator/metrics.cpp:50 #, qt-format msgid "Spent %1 minutes in calls today" msgstr "Güei usasti %1 minutos en llamaes" #: indicator/textchannelobserver.cpp:225 msgid "Unlock your sim card and try again from the messaging application." msgstr "" "Desbloquia la tarxeta SIM ya inténtalo de nueves dende l'aplicación de " "mensaxería." #: indicator/textchannelobserver.cpp:227 msgid "Deactivate flight mode and try again from the messaging application." msgstr "" "Desactiva'l mou avión ya inténtalo de nueves dende l'app de mensaxería." #: indicator/textchannelobserver.cpp:230 msgid "Try again from the messaging application." msgstr "Inténtalo de nueves dende l'aplicación de mensaxería." #: indicator/textchannelobserver.cpp:236 msgid "The message could not be sent" msgstr "Nun pudo unviase'l mensaxe" #: indicator/textchannelobserver.cpp:249 indicator/textchannelobserver.cpp:713 msgid "View message" msgstr "Ver mensaxe" #: indicator/textchannelobserver.cpp:295 msgid "New Group" msgstr "Grupu nuevu" #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:302 #, qt-format msgid "You joined group %1 " msgstr "Xuniéstite al grupu %1 " #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:306 #, qt-format msgid "You joined group %1" msgstr "Xuniéstite al grupu %1" #: indicator/textchannelobserver.cpp:309 msgid "You joined a new group" msgstr "Xueniestite al grupu nuevu" #: indicator/textchannelobserver.cpp:328 msgid "View Group" msgstr "Ver grupu" #: indicator/textchannelobserver.cpp:367 indicator/ussdindicator.cpp:116 msgid "Ok" msgstr "Aceutar" #: indicator/textchannelobserver.cpp:373 msgid "Save" msgstr "Guardar" #: indicator/textchannelobserver.cpp:468 msgid "Emergency Alert" msgstr "" #: indicator/textchannelobserver.cpp:471 msgid "Emergency Alert: Extreme" msgstr "" #: indicator/textchannelobserver.cpp:474 msgid "Emergency Alert: Severe" msgstr "" #: indicator/textchannelobserver.cpp:477 msgid "Emergency Alert: Notice" msgstr "" #: indicator/textchannelobserver.cpp:482 msgid "AMBER Alert" msgstr "" #: indicator/textchannelobserver.cpp:485 msgid "Alert" msgstr "" #: indicator/textchannelobserver.cpp:531 msgid "Show alert" msgstr "" #: indicator/textchannelobserver.cpp:604 #, qt-format msgid "Attachment: %1 image" msgid_plural "Attachments: %1 images" msgstr[0] "Axuntu: %1 imaxe" msgstr[1] "Axuntos: %1 imáxenes" #: indicator/textchannelobserver.cpp:606 #, qt-format msgid "Attachment: %1 video" msgid_plural "Attachments: %1 videos" msgstr[0] "Axuntu: %1 videu" msgstr[1] "Axuntos: %1 vídeos" #: indicator/textchannelobserver.cpp:608 #, qt-format msgid "Attachment: %1 contact" msgid_plural "Attachments: %1 contacts" msgstr[0] "Axuntu: %1 contautu" msgstr[1] "Axuntos: %1 contautos" #: indicator/textchannelobserver.cpp:610 #, qt-format msgid "Attachment: %1 audio clip" msgid_plural "Attachments: %1 audio clips" msgstr[0] "Axuntu: %1 clip d'audiu" msgstr[1] "Axuntos: %1 clips d'audiu" #: indicator/textchannelobserver.cpp:612 #, qt-format msgid "Attachment: %1 file" msgid_plural "Attachments: %1 files" msgstr[0] "Axuntu: %1 ficheru" msgstr[1] "Axuntos: %1 ficheros" #. TRANSLATORS : message displayed when any error occurred while receiving a MMS (case when cellular-data is off, or any downloading issue). Notify that there was a message, the user can find more about it in the messaging-app. #: indicator/textchannelobserver.cpp:615 #, fuzzy #| msgid "View message" msgid "New MMS message" msgstr "Ver mensaxe" #. TRANSLATORS : %1 is the recipient name #: indicator/textchannelobserver.cpp:679 indicator/textchannelobserver.cpp:683 #, qt-format msgid "Message to group from %1" msgstr "Mensaxe a grupu de %1" #: indicator/textchannelobserver.cpp:749 #, qt-format msgid "Message from %1" msgstr "Mensaxe de %1" #: indicator/textchannelobserver.cpp:910 msgid "Please, select a SIM card:" msgstr "Esbilla una tarxeta SIM:" #: indicator/ussdindicator.cpp:119 msgid "Reply" msgstr "Responder" #: indicator/ussdindicator.cpp:142 msgid "Cancel" msgstr "Encaboxar" #: libtelephonyservice/callnotification.cpp:53 msgid "Conf call on hold" msgstr "" #: libtelephonyservice/callnotification.cpp:53 #, qt-format msgid "%1 call on hold" msgstr "" #: libtelephonyservice/callnotification.cpp:56 msgid "Conf call ended" msgstr "" #: libtelephonyservice/callnotification.cpp:56 #, qt-format msgid "%1 call ended" msgstr "" #: libtelephonyservice/callnotification.cpp:59 #, qt-format msgid "%1 call declined" msgstr "" #: libtelephonyservice/contactwatcher.cpp:157 msgid "Private Number" msgstr "Númberu priváu" #: libtelephonyservice/contactwatcher.cpp:159 msgid "Unknown Number" msgstr "Númberu desconocíu" #, fuzzy #~| msgid "Telephony Service" #~ msgid "telephony-service-call" #~ msgstr "Serviciu telefónicu" #, fuzzy #~| msgid "Telephony Service" #~ msgid "telephony-service-message" #~ msgstr "Serviciu telefónicu" telephony-service-0.5.3/po/az.po000066400000000000000000000227451455543255600166040ustar00rootroot00000000000000# Azerbaijani translation for telephony-service # Copyright (c) 2014 Rosetta Contributors and Canonical Ltd 2014 # This file is distributed under the same license as the telephony-service package. # FIRST AUTHOR , 2014. # msgid "" msgstr "" "Project-Id-Version: telephony-service\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-12-16 17:03+0100\n" "PO-Revision-Date: 2014-08-31 07:59+0000\n" "Last-Translator: Nicat Məmmədov \n" "Language-Team: Azerbaijani \n" "Language: az\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Launchpad-Export-Date: 2017-01-04 06:02+0000\n" "X-Generator: Launchpad (build 18298)\n" #: indicator/telephony-service-call.desktop.in:4 msgid "Phone Calls" msgstr "" #: indicator/telephony-service-sms.desktop.in:4 msgid "SMS" msgstr "SMS" #: approver/approver.cpp:66 msgid "Unknown caller" msgstr "" #: approver/approver.cpp:94 msgid "I'm busy at the moment. I'll call later." msgstr "" #: approver/approver.cpp:95 msgid "I'm running late, on my way now." msgstr "" #: approver/approver.cpp:96 msgid "Please call me back later." msgstr "" #: approver/approver.cpp:457 #, qt-format msgid "On [%1]" msgstr "" #: approver/approver.cpp:461 indicator/messagingmenu.cpp:414 msgid "Private number" msgstr "" #: approver/approver.cpp:464 indicator/messagingmenu.cpp:244 #: indicator/messagingmenu.cpp:418 indicator/textchannelobserver.cpp:640 msgid "Unknown number" msgstr "Bilinmәyәn nömrә" #: approver/approver.cpp:470 approver/approver.cpp:485 msgid "Caller number is not available" msgstr "" #: approver/approver.cpp:476 msgid "Calling from private number" msgstr "" #: approver/approver.cpp:479 msgid "Calling from unknown number" msgstr "Bilinmәyәn nömrәdәn zәng olunur" #: approver/approver.cpp:482 #, qt-format msgid "Calling from %1" msgstr "" #: approver/approver.cpp:529 msgid "Hold + Answer" msgstr "" #: approver/approver.cpp:530 msgid "Accept" msgstr "Qәbul" #: approver/approver.cpp:543 msgid "End + Answer" msgstr "" #: approver/approver.cpp:552 msgid "Decline" msgstr "Rədd" #: approver/approver.cpp:560 msgid "Message & decline" msgstr "" #: approver/main.cpp:46 msgid "Telephony Service Approver" msgstr "" #: indicator/authhandler.cpp:72 msgid "Authentication failed. Do you want to review your credentials?" msgstr "" #: indicator/authhandler.cpp:91 msgid "Yes" msgstr "" #: indicator/authhandler.cpp:94 msgid "No" msgstr "" #: indicator/displaynamesettings.cpp:35 #, qt-format msgid "SIM %1" msgstr "SIM %1" #: indicator/main.cpp:53 msgid "Telephony Service Indicator" msgstr "" #: indicator/messagingmenu.cpp:83 indicator/messagingmenu.cpp:87 msgid "Telephony Service" msgstr "" #: indicator/messagingmenu.cpp:151 indicator/messagingmenu.cpp:293 #: indicator/messagingmenu.cpp:360 msgid "Send" msgstr "" #. TRANSLATORS : %1 is the group name and %2 is the recipient name #: indicator/messagingmenu.cpp:262 indicator/textchannelobserver.cpp:671 #: indicator/textchannelobserver.cpp:675 #, qt-format msgid "Message to %1 from %2" msgstr "" #. TRANSLATORS : %1 is the recipient name #: indicator/messagingmenu.cpp:265 indicator/messagingmenu.cpp:269 #, qt-format msgid "Message to the group from %1" msgstr "" #: indicator/messagingmenu.cpp:345 msgid "Call back" msgstr "" #: indicator/messagingmenu.cpp:350 msgid "Missed your call — can you call me now?" msgstr "" #: indicator/messagingmenu.cpp:351 msgid "Running late. On my way." msgstr "" #: indicator/messagingmenu.cpp:352 #, fuzzy #| msgid "I'm busy at the moment. I'll call you later." msgid "Busy at the moment. Will call you later." msgstr "İndi mәşğulam. Sәnә sonra zәng edәcәm." #: indicator/messagingmenu.cpp:353 #, fuzzy #| msgid "I'll be 20 minutes late." msgid "I am 20 minutes late." msgstr "20 dәqiqә gecikәcәm." #: indicator/messagingmenu.cpp:354 #, fuzzy #| msgid "Sorry, I'm still busy. I'll call you later." msgid "Still busy. Will call you later." msgstr "Bağışla, hәlә dә mәşğulam. Sәnә sonra zәng edәcәm." #: indicator/messagingmenu.cpp:409 #, qt-format msgid "%1 missed call" msgid_plural "%1 missed calls" msgstr[0] "%1 cavabsız zәng" msgstr[1] "%1 cavabsız zәng" #: indicator/messagingmenu.cpp:492 msgid "Voicemail messages" msgstr "Sәsli mesajlar" #: indicator/messagingmenu.cpp:495 #, qt-format msgid "%1 voicemail message" msgid_plural "%1 voicemail messages" msgstr[0] "%1 sәsli mesaj" msgstr[1] "%1 sәsli mesaj" #: indicator/messagingmenu.cpp:500 msgid "Voicemail" msgstr "" #: indicator/metrics.cpp:42 #, qt-format msgid "%1 text messages sent today" msgstr "Bu gün %1 mәtn mesajı göndәrildi" #: indicator/metrics.cpp:43 msgid "No text messages sent today" msgstr "Bu gün heç bir mәtn mesajı göndәrilmәyib" #: indicator/metrics.cpp:44 #, qt-format msgid "%1 text messages received today" msgstr "Bu gün %1 mәtn mesajı qәbul edildi" #: indicator/metrics.cpp:45 msgid "No text messages received today" msgstr "Bu gün heç bir mәtn mesajı qәbul edilmәdi" #: indicator/metrics.cpp:46 #, qt-format msgid "%1 calls received today" msgstr "Bu gün %1 zәng qәbul edildi" #: indicator/metrics.cpp:47 msgid "No calls received today" msgstr "Bu gün heç bir zәng qәbul edilmәdi" #: indicator/metrics.cpp:48 #, qt-format msgid "%1 calls made today" msgstr "" #: indicator/metrics.cpp:49 indicator/metrics.cpp:51 msgid "No calls made today" msgstr "Bu gün heç bir zәng edilmәyib" #: indicator/metrics.cpp:50 #, qt-format msgid "Spent %1 minutes in calls today" msgstr "" #: indicator/textchannelobserver.cpp:225 msgid "Unlock your sim card and try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:227 msgid "Deactivate flight mode and try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:230 msgid "Try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:236 msgid "The message could not be sent" msgstr "" #: indicator/textchannelobserver.cpp:249 indicator/textchannelobserver.cpp:713 msgid "View message" msgstr "Mesaja bax" #: indicator/textchannelobserver.cpp:295 msgid "New Group" msgstr "" #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:302 #, qt-format msgid "You joined group %1 " msgstr "" #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:306 #, qt-format msgid "You joined group %1" msgstr "" #: indicator/textchannelobserver.cpp:309 msgid "You joined a new group" msgstr "" #: indicator/textchannelobserver.cpp:328 msgid "View Group" msgstr "" #: indicator/textchannelobserver.cpp:367 indicator/ussdindicator.cpp:116 msgid "Ok" msgstr "Oldu" #: indicator/textchannelobserver.cpp:373 msgid "Save" msgstr "Saxla" #: indicator/textchannelobserver.cpp:468 msgid "Emergency Alert" msgstr "" #: indicator/textchannelobserver.cpp:471 msgid "Emergency Alert: Extreme" msgstr "" #: indicator/textchannelobserver.cpp:474 msgid "Emergency Alert: Severe" msgstr "" #: indicator/textchannelobserver.cpp:477 msgid "Emergency Alert: Notice" msgstr "" #: indicator/textchannelobserver.cpp:482 msgid "AMBER Alert" msgstr "" #: indicator/textchannelobserver.cpp:485 msgid "Alert" msgstr "" #: indicator/textchannelobserver.cpp:531 msgid "Show alert" msgstr "" #: indicator/textchannelobserver.cpp:604 #, qt-format msgid "Attachment: %1 image" msgid_plural "Attachments: %1 images" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:606 #, qt-format msgid "Attachment: %1 video" msgid_plural "Attachments: %1 videos" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:608 #, qt-format msgid "Attachment: %1 contact" msgid_plural "Attachments: %1 contacts" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:610 #, qt-format msgid "Attachment: %1 audio clip" msgid_plural "Attachments: %1 audio clips" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:612 #, qt-format msgid "Attachment: %1 file" msgid_plural "Attachments: %1 files" msgstr[0] "" msgstr[1] "" #. TRANSLATORS : message displayed when any error occurred while receiving a MMS (case when cellular-data is off, or any downloading issue). Notify that there was a message, the user can find more about it in the messaging-app. #: indicator/textchannelobserver.cpp:615 #, fuzzy #| msgid "View message" msgid "New MMS message" msgstr "Mesaja bax" #. TRANSLATORS : %1 is the recipient name #: indicator/textchannelobserver.cpp:679 indicator/textchannelobserver.cpp:683 #, qt-format msgid "Message to group from %1" msgstr "" #: indicator/textchannelobserver.cpp:749 #, qt-format msgid "Message from %1" msgstr "" #: indicator/textchannelobserver.cpp:910 msgid "Please, select a SIM card:" msgstr "" #: indicator/ussdindicator.cpp:119 msgid "Reply" msgstr "Cavabla" #: indicator/ussdindicator.cpp:142 msgid "Cancel" msgstr "İmtina" #: libtelephonyservice/callnotification.cpp:53 msgid "Conf call on hold" msgstr "" #: libtelephonyservice/callnotification.cpp:53 #, qt-format msgid "%1 call on hold" msgstr "" #: libtelephonyservice/callnotification.cpp:56 msgid "Conf call ended" msgstr "" #: libtelephonyservice/callnotification.cpp:56 #, qt-format msgid "%1 call ended" msgstr "" #: libtelephonyservice/callnotification.cpp:59 #, qt-format msgid "%1 call declined" msgstr "" #: libtelephonyservice/contactwatcher.cpp:157 msgid "Private Number" msgstr "" #: libtelephonyservice/contactwatcher.cpp:159 msgid "Unknown Number" msgstr "Bilinmәyәn Nömrә" telephony-service-0.5.3/po/be.po000066400000000000000000000335751455543255600165630ustar00rootroot00000000000000# Belarusian translation for telephony-service # Copyright (c) 2015 Rosetta Contributors and Canonical Ltd 2015 # This file is distributed under the same license as the telephony-service package. # FIRST AUTHOR , 2015. # msgid "" msgstr "" "Project-Id-Version: telephony-service\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-12-16 17:03+0100\n" "PO-Revision-Date: 2020-11-30 13:09+0000\n" "Last-Translator: Zmicer \n" "Language-Team: Belarusian \n" "Language: be\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && " "n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" "X-Generator: Weblate 3.11.3\n" "X-Launchpad-Export-Date: 2017-01-04 06:02+0000\n" #: indicator/telephony-service-call.desktop.in:4 msgid "Phone Calls" msgstr "Выклікі" #: indicator/telephony-service-sms.desktop.in:4 msgid "SMS" msgstr "SMS" #: approver/approver.cpp:66 msgid "Unknown caller" msgstr "Невядомы выклік" #: approver/approver.cpp:94 msgid "I'm busy at the moment. I'll call later." msgstr "Зараз я заняты. Патэлефаную пазней." #: approver/approver.cpp:95 msgid "I'm running late, on my way now." msgstr "Спазняюся, ужо еду." #: approver/approver.cpp:96 msgid "Please call me back later." msgstr "Калі ласка, патэлефануйце мне пазней." #: approver/approver.cpp:457 #, qt-format msgid "On [%1]" msgstr "Уключана [%1]" #: approver/approver.cpp:461 indicator/messagingmenu.cpp:414 msgid "Private number" msgstr "Прыватны нумар" #: approver/approver.cpp:464 indicator/messagingmenu.cpp:244 #: indicator/messagingmenu.cpp:418 indicator/textchannelobserver.cpp:640 msgid "Unknown number" msgstr "Невядомы нумар" #: approver/approver.cpp:470 approver/approver.cpp:485 msgid "Caller number is not available" msgstr "Нумар абанента недаступны" #: approver/approver.cpp:476 msgid "Calling from private number" msgstr "Прыватны нумар" #: approver/approver.cpp:479 msgid "Calling from unknown number" msgstr "Невядомы нумар" #: approver/approver.cpp:482 #, qt-format msgid "Calling from %1" msgstr "Выклік ад %1" #: approver/approver.cpp:529 msgid "Hold + Answer" msgstr "Прыпыніць + Адказаць" #: approver/approver.cpp:530 msgid "Accept" msgstr "Пагадзіцца" #: approver/approver.cpp:543 msgid "End + Answer" msgstr "Скончыць + Адказаць" #: approver/approver.cpp:552 msgid "Decline" msgstr "Адхіліць" #: approver/approver.cpp:560 msgid "Message & decline" msgstr "Паведамленне і адхіленне" #: approver/main.cpp:46 msgid "Telephony Service Approver" msgstr "Пацвярджэнне службаў тэлефанавання" #: indicator/authhandler.cpp:72 msgid "Authentication failed. Do you want to review your credentials?" msgstr "Няўдалая аўтэнтыфікацыя. Хочаце праверыць уліковыя даныя?" #: indicator/authhandler.cpp:91 msgid "Yes" msgstr "Так" #: indicator/authhandler.cpp:94 msgid "No" msgstr "Не" #: indicator/displaynamesettings.cpp:35 #, qt-format msgid "SIM %1" msgstr "SIM %1" #: indicator/main.cpp:53 msgid "Telephony Service Indicator" msgstr "Індыкатар службы тэлефанавання" #: indicator/messagingmenu.cpp:83 indicator/messagingmenu.cpp:87 msgid "Telephony Service" msgstr "Службы тэлефанавання" #: indicator/messagingmenu.cpp:151 indicator/messagingmenu.cpp:293 #: indicator/messagingmenu.cpp:360 msgid "Send" msgstr "Адправіць" #. TRANSLATORS : %1 is the group name and %2 is the recipient name #: indicator/messagingmenu.cpp:262 indicator/textchannelobserver.cpp:671 #: indicator/textchannelobserver.cpp:675 #, qt-format msgid "Message to %1 from %2" msgstr "Паведамленне ў %1 ад %2" #. TRANSLATORS : %1 is the recipient name #: indicator/messagingmenu.cpp:265 indicator/messagingmenu.cpp:269 #, fuzzy, qt-format #| msgid "Message to group from %1" msgid "Message to the group from %1" msgstr "Паведамленне ў групе ад %1" #: indicator/messagingmenu.cpp:345 msgid "Call back" msgstr "Патэлефанаваць назад" #: indicator/messagingmenu.cpp:350 #, fuzzy #| msgid "I missed your call - can you call me now?" msgid "Missed your call — can you call me now?" msgstr "Я не чуў ваш выклік, вы можаце патэлефанаваць зараз?" #: indicator/messagingmenu.cpp:351 #, fuzzy #| msgid "I'm running late. I'm on my way." msgid "Running late. On my way." msgstr "Я спазняюся. Я ўжо ў дарозе." #: indicator/messagingmenu.cpp:352 #, fuzzy #| msgid "I'm busy at the moment. I'll call you later." msgid "Busy at the moment. Will call you later." msgstr "Зараз я заняты. Патэлефаную крыху пазней." #: indicator/messagingmenu.cpp:353 #, fuzzy #| msgid "I'll be 20 minutes late." msgid "I am 20 minutes late." msgstr "Я спазнюся на 20 хвілін." #: indicator/messagingmenu.cpp:354 #, fuzzy #| msgid "Sorry, I'm still busy. I'll call you later." msgid "Still busy. Will call you later." msgstr "Прабачце, але я ўсё яшчэ заняты. Я патэлефаную пазней." #: indicator/messagingmenu.cpp:409 #, qt-format msgid "%1 missed call" msgid_plural "%1 missed calls" msgstr[0] "%1 неадказаны выклік" msgstr[1] "%1 неадказаныя выклікі" msgstr[2] "%1 неадказаных выклікаў" #: indicator/messagingmenu.cpp:492 msgid "Voicemail messages" msgstr "Галасавыя паведамленні" #: indicator/messagingmenu.cpp:495 #, qt-format msgid "%1 voicemail message" msgid_plural "%1 voicemail messages" msgstr[0] "%1 галасавое паведамленне" msgstr[1] "%1 галасавыя паведамленні" msgstr[2] "%1 галасавых паведамленняў" #: indicator/messagingmenu.cpp:500 msgid "Voicemail" msgstr "Галасавая пошта" #: indicator/metrics.cpp:42 #, qt-format msgid "%1 text messages sent today" msgstr "%1 паведамленняў адпраўлена за сёння" #: indicator/metrics.cpp:43 msgid "No text messages sent today" msgstr "Сёння не было адпраўлена паведамленняў" #: indicator/metrics.cpp:44 #, qt-format msgid "%1 text messages received today" msgstr "%1 паведамленняў атрымана за сёння" #: indicator/metrics.cpp:45 msgid "No text messages received today" msgstr "Сёння не было атрымана паведамленняў" #: indicator/metrics.cpp:46 #, qt-format msgid "%1 calls received today" msgstr "%1 уваходных выклікаў за сёння" #: indicator/metrics.cpp:47 msgid "No calls received today" msgstr "Сёння не было ўваходных выклікаў" #: indicator/metrics.cpp:48 #, qt-format msgid "%1 calls made today" msgstr "%1 выходных выклікаў за сёння" #: indicator/metrics.cpp:49 indicator/metrics.cpp:51 msgid "No calls made today" msgstr "Сёння не было выходных выклікаў" #: indicator/metrics.cpp:50 #, qt-format msgid "Spent %1 minutes in calls today" msgstr "Працягласць выклікаў за сёння: %1хвілін" #: indicator/textchannelobserver.cpp:225 msgid "Unlock your sim card and try again from the messaging application." msgstr "Разблакуйце SIM-картку і паспрабуйце адправіць паведамленне зноў." #: indicator/textchannelobserver.cpp:227 msgid "Deactivate flight mode and try again from the messaging application." msgstr "Адключыце рэжым палёту і паспрабуйце зноў." #: indicator/textchannelobserver.cpp:230 msgid "Try again from the messaging application." msgstr "Паспрабуйце адправіць паведамленне зноў." #: indicator/textchannelobserver.cpp:236 msgid "The message could not be sent" msgstr "Немагчыма адправіць паведамленне" #: indicator/textchannelobserver.cpp:249 indicator/textchannelobserver.cpp:713 msgid "View message" msgstr "Паказаць паведамленне" #: indicator/textchannelobserver.cpp:295 msgid "New Group" msgstr "Новая група" #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:302 #, qt-format msgid "You joined group %1 " msgstr "Вы далучыліся да групы %1 " #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:306 #, qt-format msgid "You joined group %1" msgstr "Вы далучыліся да групы %1" #: indicator/textchannelobserver.cpp:309 msgid "You joined a new group" msgstr "Вы далучыліся да новай групы" #: indicator/textchannelobserver.cpp:328 msgid "View Group" msgstr "Паказаць групу" #: indicator/textchannelobserver.cpp:367 indicator/ussdindicator.cpp:116 msgid "Ok" msgstr "Добра" #: indicator/textchannelobserver.cpp:373 msgid "Save" msgstr "Захаваць" #: indicator/textchannelobserver.cpp:468 msgid "Emergency Alert" msgstr "" #: indicator/textchannelobserver.cpp:471 msgid "Emergency Alert: Extreme" msgstr "" #: indicator/textchannelobserver.cpp:474 msgid "Emergency Alert: Severe" msgstr "" #: indicator/textchannelobserver.cpp:477 msgid "Emergency Alert: Notice" msgstr "" #: indicator/textchannelobserver.cpp:482 msgid "AMBER Alert" msgstr "" #: indicator/textchannelobserver.cpp:485 msgid "Alert" msgstr "" #: indicator/textchannelobserver.cpp:531 msgid "Show alert" msgstr "" #: indicator/textchannelobserver.cpp:604 #, qt-format msgid "Attachment: %1 image" msgid_plural "Attachments: %1 images" msgstr[0] "Укладзеныя файлы: %1 выява" msgstr[1] "Укладзеныя файлы: %1 выявы" msgstr[2] "Укладзеныя файлы: %1 выяў" #: indicator/textchannelobserver.cpp:606 #, qt-format msgid "Attachment: %1 video" msgid_plural "Attachments: %1 videos" msgstr[0] "Укладзеныя файлы: %1 відэа" msgstr[1] "Укладзеныя файлы: %1 відэа" msgstr[2] "Укладзеныя файлы: %1 відэа" #: indicator/textchannelobserver.cpp:608 #, qt-format msgid "Attachment: %1 contact" msgid_plural "Attachments: %1 contacts" msgstr[0] "Укладзеныя файлы: %1 кантакт" msgstr[1] "Укладзеныя файлы: %1 кантакты" msgstr[2] "Укладзеныя файлы: %1 кантактаў" #: indicator/textchannelobserver.cpp:610 #, qt-format msgid "Attachment: %1 audio clip" msgid_plural "Attachments: %1 audio clips" msgstr[0] "Укладзеныя файлы: %1 гукавы запіс" msgstr[1] "Укладзеныя файлы: %1 гукавыя запісы" msgstr[2] "Укладзеныя файлы: %1 гукавых запісаў" #: indicator/textchannelobserver.cpp:612 #, qt-format msgid "Attachment: %1 file" msgid_plural "Attachments: %1 files" msgstr[0] "Укладзеныя файлы: %1 файл" msgstr[1] "Укладзеныя файлы: %1 файлы" msgstr[2] "Укладзеныя файлы: %1 файлаў" #. TRANSLATORS : message displayed when any error occurred while receiving a MMS (case when cellular-data is off, or any downloading issue). Notify that there was a message, the user can find more about it in the messaging-app. #: indicator/textchannelobserver.cpp:615 #, fuzzy #| msgid "View message" msgid "New MMS message" msgstr "Паказаць паведамленне" #. TRANSLATORS : %1 is the recipient name #: indicator/textchannelobserver.cpp:679 indicator/textchannelobserver.cpp:683 #, qt-format msgid "Message to group from %1" msgstr "Паведамленне ў групе ад %1" #: indicator/textchannelobserver.cpp:749 #, qt-format msgid "Message from %1" msgstr "Паведамленне ад %1" #: indicator/textchannelobserver.cpp:910 msgid "Please, select a SIM card:" msgstr "Калі ласка, абярыце SIM-картку:" #: indicator/ussdindicator.cpp:119 msgid "Reply" msgstr "Адказаць" #: indicator/ussdindicator.cpp:142 msgid "Cancel" msgstr "Скасаваць" #: libtelephonyservice/callnotification.cpp:53 msgid "Conf call on hold" msgstr "" #: libtelephonyservice/callnotification.cpp:53 #, qt-format msgid "%1 call on hold" msgstr "" #: libtelephonyservice/callnotification.cpp:56 msgid "Conf call ended" msgstr "" #: libtelephonyservice/callnotification.cpp:56 #, qt-format msgid "%1 call ended" msgstr "" #: libtelephonyservice/callnotification.cpp:59 #, qt-format msgid "%1 call declined" msgstr "" #: libtelephonyservice/contactwatcher.cpp:157 msgid "Private Number" msgstr "Прыватны нумар" #: libtelephonyservice/contactwatcher.cpp:159 msgid "Unknown Number" msgstr "Невядомы нумар" #, fuzzy #~| msgid "Telephony Service" #~ msgid "telephony-service-call" #~ msgstr "Службы тэлефанавання" #, fuzzy #~| msgid "Telephony Service" #~ msgid "telephony-service-message" #~ msgstr "Службы тэлефанавання" #~ msgid "" #~ "Oops, there has been an error with the MMS system and this message could " #~ "not be retrieved. Please ensure Cellular Data is ON and MMS settings are " #~ "correct, then ask the sender to try again." #~ msgstr "" #~ "На жаль, у сістэме MMS адбылася памылка, таму гэтае паведамленне не " #~ "ўдалося атрымаць. Пераканайцеся, што сотавая сувязь уключаная, налады MMS " #~ "правільныя, а потым звярніцеся да адпраўніка, каб той паспрабаваў яшчэ " #~ "раз." telephony-service-0.5.3/po/bem.po000066400000000000000000000211471455543255600167300ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-12-16 17:03+0100\n" "PO-Revision-Date: 2023-01-05 11:07+0000\n" "Last-Translator: Anonymous \n" "Language-Team: Bemba \n" "Language: bem\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Generator: Weblate 4.15.1-dev\n" #: indicator/telephony-service-call.desktop.in:4 msgid "Phone Calls" msgstr "" #: indicator/telephony-service-sms.desktop.in:4 msgid "SMS" msgstr "" #: approver/approver.cpp:66 msgid "Unknown caller" msgstr "" #: approver/approver.cpp:94 msgid "I'm busy at the moment. I'll call later." msgstr "" #: approver/approver.cpp:95 msgid "I'm running late, on my way now." msgstr "" #: approver/approver.cpp:96 msgid "Please call me back later." msgstr "" #: approver/approver.cpp:457 #, qt-format msgid "On [%1]" msgstr "" #: approver/approver.cpp:461 indicator/messagingmenu.cpp:414 msgid "Private number" msgstr "" #: approver/approver.cpp:464 indicator/messagingmenu.cpp:244 #: indicator/messagingmenu.cpp:418 indicator/textchannelobserver.cpp:640 msgid "Unknown number" msgstr "" #: approver/approver.cpp:470 approver/approver.cpp:485 msgid "Caller number is not available" msgstr "" #: approver/approver.cpp:476 msgid "Calling from private number" msgstr "" #: approver/approver.cpp:479 msgid "Calling from unknown number" msgstr "" #: approver/approver.cpp:482 #, qt-format msgid "Calling from %1" msgstr "" #: approver/approver.cpp:529 msgid "Hold + Answer" msgstr "" #: approver/approver.cpp:530 msgid "Accept" msgstr "" #: approver/approver.cpp:543 msgid "End + Answer" msgstr "" #: approver/approver.cpp:552 msgid "Decline" msgstr "" #: approver/approver.cpp:560 msgid "Message & decline" msgstr "" #: approver/main.cpp:46 msgid "Telephony Service Approver" msgstr "" #: indicator/authhandler.cpp:72 msgid "Authentication failed. Do you want to review your credentials?" msgstr "" #: indicator/authhandler.cpp:91 msgid "Yes" msgstr "" #: indicator/authhandler.cpp:94 msgid "No" msgstr "" #: indicator/displaynamesettings.cpp:35 #, qt-format msgid "SIM %1" msgstr "" #: indicator/main.cpp:53 msgid "Telephony Service Indicator" msgstr "" #: indicator/messagingmenu.cpp:83 indicator/messagingmenu.cpp:87 msgid "Telephony Service" msgstr "" #: indicator/messagingmenu.cpp:151 indicator/messagingmenu.cpp:293 #: indicator/messagingmenu.cpp:360 msgid "Send" msgstr "" #. TRANSLATORS : %1 is the group name and %2 is the recipient name #: indicator/messagingmenu.cpp:262 indicator/textchannelobserver.cpp:671 #: indicator/textchannelobserver.cpp:675 #, qt-format msgid "Message to %1 from %2" msgstr "" #. TRANSLATORS : %1 is the recipient name #: indicator/messagingmenu.cpp:265 indicator/messagingmenu.cpp:269 #, qt-format msgid "Message to the group from %1" msgstr "" #: indicator/messagingmenu.cpp:345 msgid "Call back" msgstr "" #: indicator/messagingmenu.cpp:350 msgid "Missed your call — can you call me now?" msgstr "" #: indicator/messagingmenu.cpp:351 msgid "Running late. On my way." msgstr "" #: indicator/messagingmenu.cpp:352 msgid "Busy at the moment. Will call you later." msgstr "" #: indicator/messagingmenu.cpp:353 msgid "I am 20 minutes late." msgstr "" #: indicator/messagingmenu.cpp:354 msgid "Still busy. Will call you later." msgstr "" #: indicator/messagingmenu.cpp:409 #, qt-format msgid "%1 missed call" msgid_plural "%1 missed calls" msgstr[0] "" msgstr[1] "" #: indicator/messagingmenu.cpp:492 msgid "Voicemail messages" msgstr "" #: indicator/messagingmenu.cpp:495 #, qt-format msgid "%1 voicemail message" msgid_plural "%1 voicemail messages" msgstr[0] "" msgstr[1] "" #: indicator/messagingmenu.cpp:500 msgid "Voicemail" msgstr "" #: indicator/metrics.cpp:42 #, qt-format msgid "%1 text messages sent today" msgstr "" #: indicator/metrics.cpp:43 msgid "No text messages sent today" msgstr "" #: indicator/metrics.cpp:44 #, qt-format msgid "%1 text messages received today" msgstr "" #: indicator/metrics.cpp:45 msgid "No text messages received today" msgstr "" #: indicator/metrics.cpp:46 #, qt-format msgid "%1 calls received today" msgstr "" #: indicator/metrics.cpp:47 msgid "No calls received today" msgstr "" #: indicator/metrics.cpp:48 #, qt-format msgid "%1 calls made today" msgstr "" #: indicator/metrics.cpp:49 indicator/metrics.cpp:51 msgid "No calls made today" msgstr "" #: indicator/metrics.cpp:50 #, qt-format msgid "Spent %1 minutes in calls today" msgstr "" #: indicator/textchannelobserver.cpp:225 msgid "Unlock your sim card and try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:227 msgid "Deactivate flight mode and try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:230 msgid "Try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:236 msgid "The message could not be sent" msgstr "" #: indicator/textchannelobserver.cpp:249 indicator/textchannelobserver.cpp:713 msgid "View message" msgstr "" #: indicator/textchannelobserver.cpp:295 msgid "New Group" msgstr "" #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:302 #, qt-format msgid "You joined group %1 " msgstr "" #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:306 #, qt-format msgid "You joined group %1" msgstr "" #: indicator/textchannelobserver.cpp:309 msgid "You joined a new group" msgstr "" #: indicator/textchannelobserver.cpp:328 msgid "View Group" msgstr "" #: indicator/textchannelobserver.cpp:367 indicator/ussdindicator.cpp:116 msgid "Ok" msgstr "" #: indicator/textchannelobserver.cpp:373 msgid "Save" msgstr "" #: indicator/textchannelobserver.cpp:468 msgid "Emergency Alert" msgstr "" #: indicator/textchannelobserver.cpp:471 msgid "Emergency Alert: Extreme" msgstr "" #: indicator/textchannelobserver.cpp:474 msgid "Emergency Alert: Severe" msgstr "" #: indicator/textchannelobserver.cpp:477 msgid "Emergency Alert: Notice" msgstr "" #: indicator/textchannelobserver.cpp:482 msgid "AMBER Alert" msgstr "" #: indicator/textchannelobserver.cpp:485 msgid "Alert" msgstr "" #: indicator/textchannelobserver.cpp:531 msgid "Show alert" msgstr "" #: indicator/textchannelobserver.cpp:604 #, qt-format msgid "Attachment: %1 image" msgid_plural "Attachments: %1 images" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:606 #, qt-format msgid "Attachment: %1 video" msgid_plural "Attachments: %1 videos" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:608 #, qt-format msgid "Attachment: %1 contact" msgid_plural "Attachments: %1 contacts" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:610 #, qt-format msgid "Attachment: %1 audio clip" msgid_plural "Attachments: %1 audio clips" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:612 #, qt-format msgid "Attachment: %1 file" msgid_plural "Attachments: %1 files" msgstr[0] "" msgstr[1] "" #. TRANSLATORS : message displayed when any error occurred while receiving a MMS (case when cellular-data is off, or any downloading issue). Notify that there was a message, the user can find more about it in the messaging-app. #: indicator/textchannelobserver.cpp:615 msgid "New MMS message" msgstr "" #. TRANSLATORS : %1 is the recipient name #: indicator/textchannelobserver.cpp:679 indicator/textchannelobserver.cpp:683 #, qt-format msgid "Message to group from %1" msgstr "" #: indicator/textchannelobserver.cpp:749 #, qt-format msgid "Message from %1" msgstr "" #: indicator/textchannelobserver.cpp:910 msgid "Please, select a SIM card:" msgstr "" #: indicator/ussdindicator.cpp:119 msgid "Reply" msgstr "" #: indicator/ussdindicator.cpp:142 #, fuzzy msgid "Cancel" msgstr "Cancel" #: libtelephonyservice/callnotification.cpp:53 msgid "Conf call on hold" msgstr "" #: libtelephonyservice/callnotification.cpp:53 #, qt-format msgid "%1 call on hold" msgstr "" #: libtelephonyservice/callnotification.cpp:56 msgid "Conf call ended" msgstr "" #: libtelephonyservice/callnotification.cpp:56 #, qt-format msgid "%1 call ended" msgstr "" #: libtelephonyservice/callnotification.cpp:59 #, qt-format msgid "%1 call declined" msgstr "" #: libtelephonyservice/contactwatcher.cpp:157 msgid "Private Number" msgstr "" #: libtelephonyservice/contactwatcher.cpp:159 msgid "Unknown Number" msgstr "" telephony-service-0.5.3/po/bg.po000066400000000000000000000211511455543255600165500ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-12-16 17:03+0100\n" "PO-Revision-Date: 2023-01-05 11:07+0000\n" "Last-Translator: Anonymous \n" "Language-Team: Bulgarian \n" "Language: bg\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Generator: Weblate 4.15.1-dev\n" #: indicator/telephony-service-call.desktop.in:4 msgid "Phone Calls" msgstr "" #: indicator/telephony-service-sms.desktop.in:4 msgid "SMS" msgstr "" #: approver/approver.cpp:66 msgid "Unknown caller" msgstr "" #: approver/approver.cpp:94 msgid "I'm busy at the moment. I'll call later." msgstr "" #: approver/approver.cpp:95 msgid "I'm running late, on my way now." msgstr "" #: approver/approver.cpp:96 msgid "Please call me back later." msgstr "" #: approver/approver.cpp:457 #, qt-format msgid "On [%1]" msgstr "" #: approver/approver.cpp:461 indicator/messagingmenu.cpp:414 msgid "Private number" msgstr "" #: approver/approver.cpp:464 indicator/messagingmenu.cpp:244 #: indicator/messagingmenu.cpp:418 indicator/textchannelobserver.cpp:640 msgid "Unknown number" msgstr "" #: approver/approver.cpp:470 approver/approver.cpp:485 msgid "Caller number is not available" msgstr "" #: approver/approver.cpp:476 msgid "Calling from private number" msgstr "" #: approver/approver.cpp:479 msgid "Calling from unknown number" msgstr "" #: approver/approver.cpp:482 #, qt-format msgid "Calling from %1" msgstr "" #: approver/approver.cpp:529 msgid "Hold + Answer" msgstr "" #: approver/approver.cpp:530 msgid "Accept" msgstr "" #: approver/approver.cpp:543 msgid "End + Answer" msgstr "" #: approver/approver.cpp:552 msgid "Decline" msgstr "" #: approver/approver.cpp:560 msgid "Message & decline" msgstr "" #: approver/main.cpp:46 msgid "Telephony Service Approver" msgstr "" #: indicator/authhandler.cpp:72 msgid "Authentication failed. Do you want to review your credentials?" msgstr "" #: indicator/authhandler.cpp:91 msgid "Yes" msgstr "" #: indicator/authhandler.cpp:94 msgid "No" msgstr "" #: indicator/displaynamesettings.cpp:35 #, qt-format msgid "SIM %1" msgstr "" #: indicator/main.cpp:53 msgid "Telephony Service Indicator" msgstr "" #: indicator/messagingmenu.cpp:83 indicator/messagingmenu.cpp:87 msgid "Telephony Service" msgstr "" #: indicator/messagingmenu.cpp:151 indicator/messagingmenu.cpp:293 #: indicator/messagingmenu.cpp:360 msgid "Send" msgstr "" #. TRANSLATORS : %1 is the group name and %2 is the recipient name #: indicator/messagingmenu.cpp:262 indicator/textchannelobserver.cpp:671 #: indicator/textchannelobserver.cpp:675 #, qt-format msgid "Message to %1 from %2" msgstr "" #. TRANSLATORS : %1 is the recipient name #: indicator/messagingmenu.cpp:265 indicator/messagingmenu.cpp:269 #, qt-format msgid "Message to the group from %1" msgstr "" #: indicator/messagingmenu.cpp:345 msgid "Call back" msgstr "" #: indicator/messagingmenu.cpp:350 msgid "Missed your call — can you call me now?" msgstr "" #: indicator/messagingmenu.cpp:351 msgid "Running late. On my way." msgstr "" #: indicator/messagingmenu.cpp:352 msgid "Busy at the moment. Will call you later." msgstr "" #: indicator/messagingmenu.cpp:353 msgid "I am 20 minutes late." msgstr "" #: indicator/messagingmenu.cpp:354 msgid "Still busy. Will call you later." msgstr "" #: indicator/messagingmenu.cpp:409 #, qt-format msgid "%1 missed call" msgid_plural "%1 missed calls" msgstr[0] "" msgstr[1] "" #: indicator/messagingmenu.cpp:492 msgid "Voicemail messages" msgstr "" #: indicator/messagingmenu.cpp:495 #, qt-format msgid "%1 voicemail message" msgid_plural "%1 voicemail messages" msgstr[0] "" msgstr[1] "" #: indicator/messagingmenu.cpp:500 msgid "Voicemail" msgstr "" #: indicator/metrics.cpp:42 #, qt-format msgid "%1 text messages sent today" msgstr "" #: indicator/metrics.cpp:43 msgid "No text messages sent today" msgstr "" #: indicator/metrics.cpp:44 #, qt-format msgid "%1 text messages received today" msgstr "" #: indicator/metrics.cpp:45 msgid "No text messages received today" msgstr "" #: indicator/metrics.cpp:46 #, qt-format msgid "%1 calls received today" msgstr "" #: indicator/metrics.cpp:47 msgid "No calls received today" msgstr "" #: indicator/metrics.cpp:48 #, qt-format msgid "%1 calls made today" msgstr "" #: indicator/metrics.cpp:49 indicator/metrics.cpp:51 msgid "No calls made today" msgstr "" #: indicator/metrics.cpp:50 #, qt-format msgid "Spent %1 minutes in calls today" msgstr "" #: indicator/textchannelobserver.cpp:225 msgid "Unlock your sim card and try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:227 msgid "Deactivate flight mode and try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:230 msgid "Try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:236 msgid "The message could not be sent" msgstr "" #: indicator/textchannelobserver.cpp:249 indicator/textchannelobserver.cpp:713 msgid "View message" msgstr "" #: indicator/textchannelobserver.cpp:295 msgid "New Group" msgstr "" #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:302 #, qt-format msgid "You joined group %1 " msgstr "" #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:306 #, qt-format msgid "You joined group %1" msgstr "" #: indicator/textchannelobserver.cpp:309 msgid "You joined a new group" msgstr "" #: indicator/textchannelobserver.cpp:328 msgid "View Group" msgstr "" #: indicator/textchannelobserver.cpp:367 indicator/ussdindicator.cpp:116 msgid "Ok" msgstr "" #: indicator/textchannelobserver.cpp:373 msgid "Save" msgstr "" #: indicator/textchannelobserver.cpp:468 msgid "Emergency Alert" msgstr "" #: indicator/textchannelobserver.cpp:471 msgid "Emergency Alert: Extreme" msgstr "" #: indicator/textchannelobserver.cpp:474 msgid "Emergency Alert: Severe" msgstr "" #: indicator/textchannelobserver.cpp:477 msgid "Emergency Alert: Notice" msgstr "" #: indicator/textchannelobserver.cpp:482 msgid "AMBER Alert" msgstr "" #: indicator/textchannelobserver.cpp:485 msgid "Alert" msgstr "" #: indicator/textchannelobserver.cpp:531 msgid "Show alert" msgstr "" #: indicator/textchannelobserver.cpp:604 #, qt-format msgid "Attachment: %1 image" msgid_plural "Attachments: %1 images" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:606 #, qt-format msgid "Attachment: %1 video" msgid_plural "Attachments: %1 videos" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:608 #, qt-format msgid "Attachment: %1 contact" msgid_plural "Attachments: %1 contacts" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:610 #, qt-format msgid "Attachment: %1 audio clip" msgid_plural "Attachments: %1 audio clips" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:612 #, qt-format msgid "Attachment: %1 file" msgid_plural "Attachments: %1 files" msgstr[0] "" msgstr[1] "" #. TRANSLATORS : message displayed when any error occurred while receiving a MMS (case when cellular-data is off, or any downloading issue). Notify that there was a message, the user can find more about it in the messaging-app. #: indicator/textchannelobserver.cpp:615 msgid "New MMS message" msgstr "" #. TRANSLATORS : %1 is the recipient name #: indicator/textchannelobserver.cpp:679 indicator/textchannelobserver.cpp:683 #, qt-format msgid "Message to group from %1" msgstr "" #: indicator/textchannelobserver.cpp:749 #, qt-format msgid "Message from %1" msgstr "" #: indicator/textchannelobserver.cpp:910 msgid "Please, select a SIM card:" msgstr "" #: indicator/ussdindicator.cpp:119 msgid "Reply" msgstr "" #: indicator/ussdindicator.cpp:142 #, fuzzy msgid "Cancel" msgstr "Cancel" #: libtelephonyservice/callnotification.cpp:53 msgid "Conf call on hold" msgstr "" #: libtelephonyservice/callnotification.cpp:53 #, qt-format msgid "%1 call on hold" msgstr "" #: libtelephonyservice/callnotification.cpp:56 msgid "Conf call ended" msgstr "" #: libtelephonyservice/callnotification.cpp:56 #, qt-format msgid "%1 call ended" msgstr "" #: libtelephonyservice/callnotification.cpp:59 #, qt-format msgid "%1 call declined" msgstr "" #: libtelephonyservice/contactwatcher.cpp:157 msgid "Private Number" msgstr "" #: libtelephonyservice/contactwatcher.cpp:159 msgid "Unknown Number" msgstr "" telephony-service-0.5.3/po/bn.po000066400000000000000000000207361455543255600165670ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR Canonical Ltd. # This file is distributed under the same license as the telephony-service package. # FIRST AUTHOR , YEAR. # msgid "" msgstr "" "Project-Id-Version: telephony-service\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-12-16 17:03+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: Automatically generated\n" "Language-Team: none\n" "Language: bn\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n > 1;\n" #: indicator/telephony-service-call.desktop.in:4 msgid "Phone Calls" msgstr "" #: indicator/telephony-service-sms.desktop.in:4 msgid "SMS" msgstr "" #: approver/approver.cpp:66 msgid "Unknown caller" msgstr "" #: approver/approver.cpp:94 msgid "I'm busy at the moment. I'll call later." msgstr "" #: approver/approver.cpp:95 msgid "I'm running late, on my way now." msgstr "" #: approver/approver.cpp:96 msgid "Please call me back later." msgstr "" #: approver/approver.cpp:457 #, qt-format msgid "On [%1]" msgstr "" #: approver/approver.cpp:461 indicator/messagingmenu.cpp:414 msgid "Private number" msgstr "" #: approver/approver.cpp:464 indicator/messagingmenu.cpp:244 #: indicator/messagingmenu.cpp:418 indicator/textchannelobserver.cpp:640 msgid "Unknown number" msgstr "" #: approver/approver.cpp:470 approver/approver.cpp:485 msgid "Caller number is not available" msgstr "" #: approver/approver.cpp:476 msgid "Calling from private number" msgstr "" #: approver/approver.cpp:479 msgid "Calling from unknown number" msgstr "" #: approver/approver.cpp:482 #, qt-format msgid "Calling from %1" msgstr "" #: approver/approver.cpp:529 msgid "Hold + Answer" msgstr "" #: approver/approver.cpp:530 msgid "Accept" msgstr "" #: approver/approver.cpp:543 msgid "End + Answer" msgstr "" #: approver/approver.cpp:552 msgid "Decline" msgstr "" #: approver/approver.cpp:560 msgid "Message & decline" msgstr "" #: approver/main.cpp:46 msgid "Telephony Service Approver" msgstr "" #: indicator/authhandler.cpp:72 msgid "Authentication failed. Do you want to review your credentials?" msgstr "" #: indicator/authhandler.cpp:91 msgid "Yes" msgstr "" #: indicator/authhandler.cpp:94 msgid "No" msgstr "" #: indicator/displaynamesettings.cpp:35 #, qt-format msgid "SIM %1" msgstr "" #: indicator/main.cpp:53 msgid "Telephony Service Indicator" msgstr "" #: indicator/messagingmenu.cpp:83 indicator/messagingmenu.cpp:87 msgid "Telephony Service" msgstr "" #: indicator/messagingmenu.cpp:151 indicator/messagingmenu.cpp:293 #: indicator/messagingmenu.cpp:360 msgid "Send" msgstr "" #. TRANSLATORS : %1 is the group name and %2 is the recipient name #: indicator/messagingmenu.cpp:262 indicator/textchannelobserver.cpp:671 #: indicator/textchannelobserver.cpp:675 #, qt-format msgid "Message to %1 from %2" msgstr "" #. TRANSLATORS : %1 is the recipient name #: indicator/messagingmenu.cpp:265 indicator/messagingmenu.cpp:269 #, qt-format msgid "Message to the group from %1" msgstr "" #: indicator/messagingmenu.cpp:345 msgid "Call back" msgstr "" #: indicator/messagingmenu.cpp:350 msgid "Missed your call — can you call me now?" msgstr "" #: indicator/messagingmenu.cpp:351 msgid "Running late. On my way." msgstr "" #: indicator/messagingmenu.cpp:352 msgid "Busy at the moment. Will call you later." msgstr "" #: indicator/messagingmenu.cpp:353 msgid "I am 20 minutes late." msgstr "" #: indicator/messagingmenu.cpp:354 msgid "Still busy. Will call you later." msgstr "" #: indicator/messagingmenu.cpp:409 #, qt-format msgid "%1 missed call" msgid_plural "%1 missed calls" msgstr[0] "" msgstr[1] "" #: indicator/messagingmenu.cpp:492 msgid "Voicemail messages" msgstr "" #: indicator/messagingmenu.cpp:495 #, qt-format msgid "%1 voicemail message" msgid_plural "%1 voicemail messages" msgstr[0] "" msgstr[1] "" #: indicator/messagingmenu.cpp:500 msgid "Voicemail" msgstr "" #: indicator/metrics.cpp:42 #, qt-format msgid "%1 text messages sent today" msgstr "" #: indicator/metrics.cpp:43 msgid "No text messages sent today" msgstr "" #: indicator/metrics.cpp:44 #, qt-format msgid "%1 text messages received today" msgstr "" #: indicator/metrics.cpp:45 msgid "No text messages received today" msgstr "" #: indicator/metrics.cpp:46 #, qt-format msgid "%1 calls received today" msgstr "" #: indicator/metrics.cpp:47 msgid "No calls received today" msgstr "" #: indicator/metrics.cpp:48 #, qt-format msgid "%1 calls made today" msgstr "" #: indicator/metrics.cpp:49 indicator/metrics.cpp:51 msgid "No calls made today" msgstr "" #: indicator/metrics.cpp:50 #, qt-format msgid "Spent %1 minutes in calls today" msgstr "" #: indicator/textchannelobserver.cpp:225 msgid "Unlock your sim card and try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:227 msgid "Deactivate flight mode and try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:230 msgid "Try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:236 msgid "The message could not be sent" msgstr "" #: indicator/textchannelobserver.cpp:249 indicator/textchannelobserver.cpp:713 msgid "View message" msgstr "" #: indicator/textchannelobserver.cpp:295 msgid "New Group" msgstr "" #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:302 #, qt-format msgid "You joined group %1 " msgstr "" #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:306 #, qt-format msgid "You joined group %1" msgstr "" #: indicator/textchannelobserver.cpp:309 msgid "You joined a new group" msgstr "" #: indicator/textchannelobserver.cpp:328 msgid "View Group" msgstr "" #: indicator/textchannelobserver.cpp:367 indicator/ussdindicator.cpp:116 msgid "Ok" msgstr "" #: indicator/textchannelobserver.cpp:373 msgid "Save" msgstr "" #: indicator/textchannelobserver.cpp:468 msgid "Emergency Alert" msgstr "" #: indicator/textchannelobserver.cpp:471 msgid "Emergency Alert: Extreme" msgstr "" #: indicator/textchannelobserver.cpp:474 msgid "Emergency Alert: Severe" msgstr "" #: indicator/textchannelobserver.cpp:477 msgid "Emergency Alert: Notice" msgstr "" #: indicator/textchannelobserver.cpp:482 msgid "AMBER Alert" msgstr "" #: indicator/textchannelobserver.cpp:485 msgid "Alert" msgstr "" #: indicator/textchannelobserver.cpp:531 msgid "Show alert" msgstr "" #: indicator/textchannelobserver.cpp:604 #, qt-format msgid "Attachment: %1 image" msgid_plural "Attachments: %1 images" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:606 #, qt-format msgid "Attachment: %1 video" msgid_plural "Attachments: %1 videos" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:608 #, qt-format msgid "Attachment: %1 contact" msgid_plural "Attachments: %1 contacts" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:610 #, qt-format msgid "Attachment: %1 audio clip" msgid_plural "Attachments: %1 audio clips" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:612 #, qt-format msgid "Attachment: %1 file" msgid_plural "Attachments: %1 files" msgstr[0] "" msgstr[1] "" #. TRANSLATORS : message displayed when any error occurred while receiving a MMS (case when cellular-data is off, or any downloading issue). Notify that there was a message, the user can find more about it in the messaging-app. #: indicator/textchannelobserver.cpp:615 msgid "New MMS message" msgstr "" #. TRANSLATORS : %1 is the recipient name #: indicator/textchannelobserver.cpp:679 indicator/textchannelobserver.cpp:683 #, qt-format msgid "Message to group from %1" msgstr "" #: indicator/textchannelobserver.cpp:749 #, qt-format msgid "Message from %1" msgstr "" #: indicator/textchannelobserver.cpp:910 msgid "Please, select a SIM card:" msgstr "" #: indicator/ussdindicator.cpp:119 msgid "Reply" msgstr "" #: indicator/ussdindicator.cpp:142 msgid "Cancel" msgstr "" #: libtelephonyservice/callnotification.cpp:53 msgid "Conf call on hold" msgstr "" #: libtelephonyservice/callnotification.cpp:53 #, qt-format msgid "%1 call on hold" msgstr "" #: libtelephonyservice/callnotification.cpp:56 msgid "Conf call ended" msgstr "" #: libtelephonyservice/callnotification.cpp:56 #, qt-format msgid "%1 call ended" msgstr "" #: libtelephonyservice/callnotification.cpp:59 #, qt-format msgid "%1 call declined" msgstr "" #: libtelephonyservice/contactwatcher.cpp:157 msgid "Private Number" msgstr "" #: libtelephonyservice/contactwatcher.cpp:159 msgid "Unknown Number" msgstr "" telephony-service-0.5.3/po/bn_BD.po000066400000000000000000000212361455543255600171300ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-12-16 17:03+0100\n" "PO-Revision-Date: 2021-02-03 22:27+0000\n" "Last-Translator: imrufbd \n" "Language-Team: Bengali (Bangladesh) \n" "Language: bn_BD\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Generator: Weblate 3.11.3\n" #: indicator/telephony-service-call.desktop.in:4 msgid "Phone Calls" msgstr "" #: indicator/telephony-service-sms.desktop.in:4 msgid "SMS" msgstr "" #: approver/approver.cpp:66 msgid "Unknown caller" msgstr "" #: approver/approver.cpp:94 msgid "I'm busy at the moment. I'll call later." msgstr "" #: approver/approver.cpp:95 msgid "I'm running late, on my way now." msgstr "" #: approver/approver.cpp:96 msgid "Please call me back later." msgstr "" #: approver/approver.cpp:457 #, qt-format msgid "On [%1]" msgstr "" #: approver/approver.cpp:461 indicator/messagingmenu.cpp:414 msgid "Private number" msgstr "" #: approver/approver.cpp:464 indicator/messagingmenu.cpp:244 #: indicator/messagingmenu.cpp:418 indicator/textchannelobserver.cpp:640 msgid "Unknown number" msgstr "" #: approver/approver.cpp:470 approver/approver.cpp:485 msgid "Caller number is not available" msgstr "" #: approver/approver.cpp:476 msgid "Calling from private number" msgstr "" #: approver/approver.cpp:479 msgid "Calling from unknown number" msgstr "" #: approver/approver.cpp:482 #, qt-format msgid "Calling from %1" msgstr "" #: approver/approver.cpp:529 msgid "Hold + Answer" msgstr "" #: approver/approver.cpp:530 msgid "Accept" msgstr "" #: approver/approver.cpp:543 msgid "End + Answer" msgstr "" #: approver/approver.cpp:552 msgid "Decline" msgstr "" #: approver/approver.cpp:560 msgid "Message & decline" msgstr "" #: approver/main.cpp:46 msgid "Telephony Service Approver" msgstr "" #: indicator/authhandler.cpp:72 msgid "Authentication failed. Do you want to review your credentials?" msgstr "" #: indicator/authhandler.cpp:91 msgid "Yes" msgstr "হ্যাঁ" #: indicator/authhandler.cpp:94 msgid "No" msgstr "না" #: indicator/displaynamesettings.cpp:35 #, qt-format msgid "SIM %1" msgstr "" #: indicator/main.cpp:53 msgid "Telephony Service Indicator" msgstr "" #: indicator/messagingmenu.cpp:83 indicator/messagingmenu.cpp:87 msgid "Telephony Service" msgstr "" #: indicator/messagingmenu.cpp:151 indicator/messagingmenu.cpp:293 #: indicator/messagingmenu.cpp:360 msgid "Send" msgstr "" #. TRANSLATORS : %1 is the group name and %2 is the recipient name #: indicator/messagingmenu.cpp:262 indicator/textchannelobserver.cpp:671 #: indicator/textchannelobserver.cpp:675 #, qt-format msgid "Message to %1 from %2" msgstr "" #. TRANSLATORS : %1 is the recipient name #: indicator/messagingmenu.cpp:265 indicator/messagingmenu.cpp:269 #, qt-format msgid "Message to the group from %1" msgstr "" #: indicator/messagingmenu.cpp:345 msgid "Call back" msgstr "" #: indicator/messagingmenu.cpp:350 msgid "Missed your call — can you call me now?" msgstr "" #: indicator/messagingmenu.cpp:351 msgid "Running late. On my way." msgstr "" #: indicator/messagingmenu.cpp:352 msgid "Busy at the moment. Will call you later." msgstr "" #: indicator/messagingmenu.cpp:353 msgid "I am 20 minutes late." msgstr "" #: indicator/messagingmenu.cpp:354 msgid "Still busy. Will call you later." msgstr "" #: indicator/messagingmenu.cpp:409 #, qt-format msgid "%1 missed call" msgid_plural "%1 missed calls" msgstr[0] "" msgstr[1] "" #: indicator/messagingmenu.cpp:492 msgid "Voicemail messages" msgstr "" #: indicator/messagingmenu.cpp:495 #, qt-format msgid "%1 voicemail message" msgid_plural "%1 voicemail messages" msgstr[0] "" msgstr[1] "" #: indicator/messagingmenu.cpp:500 msgid "Voicemail" msgstr "" #: indicator/metrics.cpp:42 #, qt-format msgid "%1 text messages sent today" msgstr "" #: indicator/metrics.cpp:43 msgid "No text messages sent today" msgstr "" #: indicator/metrics.cpp:44 #, qt-format msgid "%1 text messages received today" msgstr "" #: indicator/metrics.cpp:45 msgid "No text messages received today" msgstr "" #: indicator/metrics.cpp:46 #, qt-format msgid "%1 calls received today" msgstr "" #: indicator/metrics.cpp:47 msgid "No calls received today" msgstr "" #: indicator/metrics.cpp:48 #, qt-format msgid "%1 calls made today" msgstr "" #: indicator/metrics.cpp:49 indicator/metrics.cpp:51 msgid "No calls made today" msgstr "" #: indicator/metrics.cpp:50 #, qt-format msgid "Spent %1 minutes in calls today" msgstr "" #: indicator/textchannelobserver.cpp:225 msgid "Unlock your sim card and try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:227 msgid "Deactivate flight mode and try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:230 msgid "Try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:236 msgid "The message could not be sent" msgstr "" #: indicator/textchannelobserver.cpp:249 indicator/textchannelobserver.cpp:713 msgid "View message" msgstr "" #: indicator/textchannelobserver.cpp:295 msgid "New Group" msgstr "" #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:302 #, qt-format msgid "You joined group %1 " msgstr "" #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:306 #, qt-format msgid "You joined group %1" msgstr "" #: indicator/textchannelobserver.cpp:309 msgid "You joined a new group" msgstr "" #: indicator/textchannelobserver.cpp:328 msgid "View Group" msgstr "" #: indicator/textchannelobserver.cpp:367 indicator/ussdindicator.cpp:116 msgid "Ok" msgstr "ঠিক আছে" #: indicator/textchannelobserver.cpp:373 msgid "Save" msgstr "" #: indicator/textchannelobserver.cpp:468 msgid "Emergency Alert" msgstr "" #: indicator/textchannelobserver.cpp:471 msgid "Emergency Alert: Extreme" msgstr "" #: indicator/textchannelobserver.cpp:474 msgid "Emergency Alert: Severe" msgstr "" #: indicator/textchannelobserver.cpp:477 msgid "Emergency Alert: Notice" msgstr "" #: indicator/textchannelobserver.cpp:482 msgid "AMBER Alert" msgstr "" #: indicator/textchannelobserver.cpp:485 msgid "Alert" msgstr "" #: indicator/textchannelobserver.cpp:531 msgid "Show alert" msgstr "" #: indicator/textchannelobserver.cpp:604 #, qt-format msgid "Attachment: %1 image" msgid_plural "Attachments: %1 images" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:606 #, qt-format msgid "Attachment: %1 video" msgid_plural "Attachments: %1 videos" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:608 #, qt-format msgid "Attachment: %1 contact" msgid_plural "Attachments: %1 contacts" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:610 #, qt-format msgid "Attachment: %1 audio clip" msgid_plural "Attachments: %1 audio clips" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:612 #, qt-format msgid "Attachment: %1 file" msgid_plural "Attachments: %1 files" msgstr[0] "" msgstr[1] "" #. TRANSLATORS : message displayed when any error occurred while receiving a MMS (case when cellular-data is off, or any downloading issue). Notify that there was a message, the user can find more about it in the messaging-app. #: indicator/textchannelobserver.cpp:615 msgid "New MMS message" msgstr "" #. TRANSLATORS : %1 is the recipient name #: indicator/textchannelobserver.cpp:679 indicator/textchannelobserver.cpp:683 #, qt-format msgid "Message to group from %1" msgstr "" #: indicator/textchannelobserver.cpp:749 #, qt-format msgid "Message from %1" msgstr "" #: indicator/textchannelobserver.cpp:910 msgid "Please, select a SIM card:" msgstr "" #: indicator/ussdindicator.cpp:119 msgid "Reply" msgstr "" #: indicator/ussdindicator.cpp:142 msgid "Cancel" msgstr "বাতিল" #: libtelephonyservice/callnotification.cpp:53 msgid "Conf call on hold" msgstr "" #: libtelephonyservice/callnotification.cpp:53 #, qt-format msgid "%1 call on hold" msgstr "" #: libtelephonyservice/callnotification.cpp:56 msgid "Conf call ended" msgstr "" #: libtelephonyservice/callnotification.cpp:56 #, qt-format msgid "%1 call ended" msgstr "" #: libtelephonyservice/callnotification.cpp:59 #, qt-format msgid "%1 call declined" msgstr "" #: libtelephonyservice/contactwatcher.cpp:157 msgid "Private Number" msgstr "" #: libtelephonyservice/contactwatcher.cpp:159 msgid "Unknown Number" msgstr "" telephony-service-0.5.3/po/bo.po000066400000000000000000000207321455543255600165640ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR Canonical Ltd. # This file is distributed under the same license as the telephony-service package. # FIRST AUTHOR , YEAR. # msgid "" msgstr "" "Project-Id-Version: telephony-service\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-12-16 17:03+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: Automatically generated\n" "Language-Team: none\n" "Language: bo\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" #: indicator/telephony-service-call.desktop.in:4 msgid "Phone Calls" msgstr "" #: indicator/telephony-service-sms.desktop.in:4 msgid "SMS" msgstr "" #: approver/approver.cpp:66 msgid "Unknown caller" msgstr "" #: approver/approver.cpp:94 msgid "I'm busy at the moment. I'll call later." msgstr "" #: approver/approver.cpp:95 msgid "I'm running late, on my way now." msgstr "" #: approver/approver.cpp:96 msgid "Please call me back later." msgstr "" #: approver/approver.cpp:457 #, qt-format msgid "On [%1]" msgstr "" #: approver/approver.cpp:461 indicator/messagingmenu.cpp:414 msgid "Private number" msgstr "" #: approver/approver.cpp:464 indicator/messagingmenu.cpp:244 #: indicator/messagingmenu.cpp:418 indicator/textchannelobserver.cpp:640 msgid "Unknown number" msgstr "" #: approver/approver.cpp:470 approver/approver.cpp:485 msgid "Caller number is not available" msgstr "" #: approver/approver.cpp:476 msgid "Calling from private number" msgstr "" #: approver/approver.cpp:479 msgid "Calling from unknown number" msgstr "" #: approver/approver.cpp:482 #, qt-format msgid "Calling from %1" msgstr "" #: approver/approver.cpp:529 msgid "Hold + Answer" msgstr "" #: approver/approver.cpp:530 msgid "Accept" msgstr "" #: approver/approver.cpp:543 msgid "End + Answer" msgstr "" #: approver/approver.cpp:552 msgid "Decline" msgstr "" #: approver/approver.cpp:560 msgid "Message & decline" msgstr "" #: approver/main.cpp:46 msgid "Telephony Service Approver" msgstr "" #: indicator/authhandler.cpp:72 msgid "Authentication failed. Do you want to review your credentials?" msgstr "" #: indicator/authhandler.cpp:91 msgid "Yes" msgstr "" #: indicator/authhandler.cpp:94 msgid "No" msgstr "" #: indicator/displaynamesettings.cpp:35 #, qt-format msgid "SIM %1" msgstr "" #: indicator/main.cpp:53 msgid "Telephony Service Indicator" msgstr "" #: indicator/messagingmenu.cpp:83 indicator/messagingmenu.cpp:87 msgid "Telephony Service" msgstr "" #: indicator/messagingmenu.cpp:151 indicator/messagingmenu.cpp:293 #: indicator/messagingmenu.cpp:360 msgid "Send" msgstr "" #. TRANSLATORS : %1 is the group name and %2 is the recipient name #: indicator/messagingmenu.cpp:262 indicator/textchannelobserver.cpp:671 #: indicator/textchannelobserver.cpp:675 #, qt-format msgid "Message to %1 from %2" msgstr "" #. TRANSLATORS : %1 is the recipient name #: indicator/messagingmenu.cpp:265 indicator/messagingmenu.cpp:269 #, qt-format msgid "Message to the group from %1" msgstr "" #: indicator/messagingmenu.cpp:345 msgid "Call back" msgstr "" #: indicator/messagingmenu.cpp:350 msgid "Missed your call — can you call me now?" msgstr "" #: indicator/messagingmenu.cpp:351 msgid "Running late. On my way." msgstr "" #: indicator/messagingmenu.cpp:352 msgid "Busy at the moment. Will call you later." msgstr "" #: indicator/messagingmenu.cpp:353 msgid "I am 20 minutes late." msgstr "" #: indicator/messagingmenu.cpp:354 msgid "Still busy. Will call you later." msgstr "" #: indicator/messagingmenu.cpp:409 #, qt-format msgid "%1 missed call" msgid_plural "%1 missed calls" msgstr[0] "" msgstr[1] "" #: indicator/messagingmenu.cpp:492 msgid "Voicemail messages" msgstr "" #: indicator/messagingmenu.cpp:495 #, qt-format msgid "%1 voicemail message" msgid_plural "%1 voicemail messages" msgstr[0] "" msgstr[1] "" #: indicator/messagingmenu.cpp:500 msgid "Voicemail" msgstr "" #: indicator/metrics.cpp:42 #, qt-format msgid "%1 text messages sent today" msgstr "" #: indicator/metrics.cpp:43 msgid "No text messages sent today" msgstr "" #: indicator/metrics.cpp:44 #, qt-format msgid "%1 text messages received today" msgstr "" #: indicator/metrics.cpp:45 msgid "No text messages received today" msgstr "" #: indicator/metrics.cpp:46 #, qt-format msgid "%1 calls received today" msgstr "" #: indicator/metrics.cpp:47 msgid "No calls received today" msgstr "" #: indicator/metrics.cpp:48 #, qt-format msgid "%1 calls made today" msgstr "" #: indicator/metrics.cpp:49 indicator/metrics.cpp:51 msgid "No calls made today" msgstr "" #: indicator/metrics.cpp:50 #, qt-format msgid "Spent %1 minutes in calls today" msgstr "" #: indicator/textchannelobserver.cpp:225 msgid "Unlock your sim card and try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:227 msgid "Deactivate flight mode and try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:230 msgid "Try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:236 msgid "The message could not be sent" msgstr "" #: indicator/textchannelobserver.cpp:249 indicator/textchannelobserver.cpp:713 msgid "View message" msgstr "" #: indicator/textchannelobserver.cpp:295 msgid "New Group" msgstr "" #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:302 #, qt-format msgid "You joined group %1 " msgstr "" #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:306 #, qt-format msgid "You joined group %1" msgstr "" #: indicator/textchannelobserver.cpp:309 msgid "You joined a new group" msgstr "" #: indicator/textchannelobserver.cpp:328 msgid "View Group" msgstr "" #: indicator/textchannelobserver.cpp:367 indicator/ussdindicator.cpp:116 msgid "Ok" msgstr "" #: indicator/textchannelobserver.cpp:373 msgid "Save" msgstr "" #: indicator/textchannelobserver.cpp:468 msgid "Emergency Alert" msgstr "" #: indicator/textchannelobserver.cpp:471 msgid "Emergency Alert: Extreme" msgstr "" #: indicator/textchannelobserver.cpp:474 msgid "Emergency Alert: Severe" msgstr "" #: indicator/textchannelobserver.cpp:477 msgid "Emergency Alert: Notice" msgstr "" #: indicator/textchannelobserver.cpp:482 msgid "AMBER Alert" msgstr "" #: indicator/textchannelobserver.cpp:485 msgid "Alert" msgstr "" #: indicator/textchannelobserver.cpp:531 msgid "Show alert" msgstr "" #: indicator/textchannelobserver.cpp:604 #, qt-format msgid "Attachment: %1 image" msgid_plural "Attachments: %1 images" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:606 #, qt-format msgid "Attachment: %1 video" msgid_plural "Attachments: %1 videos" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:608 #, qt-format msgid "Attachment: %1 contact" msgid_plural "Attachments: %1 contacts" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:610 #, qt-format msgid "Attachment: %1 audio clip" msgid_plural "Attachments: %1 audio clips" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:612 #, qt-format msgid "Attachment: %1 file" msgid_plural "Attachments: %1 files" msgstr[0] "" msgstr[1] "" #. TRANSLATORS : message displayed when any error occurred while receiving a MMS (case when cellular-data is off, or any downloading issue). Notify that there was a message, the user can find more about it in the messaging-app. #: indicator/textchannelobserver.cpp:615 msgid "New MMS message" msgstr "" #. TRANSLATORS : %1 is the recipient name #: indicator/textchannelobserver.cpp:679 indicator/textchannelobserver.cpp:683 #, qt-format msgid "Message to group from %1" msgstr "" #: indicator/textchannelobserver.cpp:749 #, qt-format msgid "Message from %1" msgstr "" #: indicator/textchannelobserver.cpp:910 msgid "Please, select a SIM card:" msgstr "" #: indicator/ussdindicator.cpp:119 msgid "Reply" msgstr "" #: indicator/ussdindicator.cpp:142 msgid "Cancel" msgstr "" #: libtelephonyservice/callnotification.cpp:53 msgid "Conf call on hold" msgstr "" #: libtelephonyservice/callnotification.cpp:53 #, qt-format msgid "%1 call on hold" msgstr "" #: libtelephonyservice/callnotification.cpp:56 msgid "Conf call ended" msgstr "" #: libtelephonyservice/callnotification.cpp:56 #, qt-format msgid "%1 call ended" msgstr "" #: libtelephonyservice/callnotification.cpp:59 #, qt-format msgid "%1 call declined" msgstr "" #: libtelephonyservice/contactwatcher.cpp:157 msgid "Private Number" msgstr "" #: libtelephonyservice/contactwatcher.cpp:159 msgid "Unknown Number" msgstr "" telephony-service-0.5.3/po/br.po000066400000000000000000000256471455543255600166010ustar00rootroot00000000000000# Breton translation for telephony-service # Copyright (c) 2014 Rosetta Contributors and Canonical Ltd 2014 # This file is distributed under the same license as the telephony-service package. # FIRST AUTHOR , 2014. # msgid "" msgstr "" "Project-Id-Version: telephony-service\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-12-16 17:03+0100\n" "PO-Revision-Date: 2015-03-13 12:38+0000\n" "Last-Translator: Fohanno Thierry \n" "Language-Team: Breton \n" "Language: br\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n > 1;\n" "X-Launchpad-Export-Date: 2017-01-04 06:02+0000\n" "X-Generator: Launchpad (build 18298)\n" #: indicator/telephony-service-call.desktop.in:4 msgid "Phone Calls" msgstr "Pellgomzadennoù" #: indicator/telephony-service-sms.desktop.in:4 msgid "SMS" msgstr "SMS" #: approver/approver.cpp:66 msgid "Unknown caller" msgstr "Galver dianav" #: approver/approver.cpp:94 msgid "I'm busy at the moment. I'll call later." msgstr "Dever zo warnon evit bremañ. Pellgomz a rin deoc'h diwezhatoc'h." #: approver/approver.cpp:95 msgid "I'm running late, on my way now." msgstr "Diwezhat on, ha war an hent emaon." #: approver/approver.cpp:96 msgid "Please call me back later." msgstr "Pellgomzit din en-dro diwezhatoc'h, mar plij." #: approver/approver.cpp:457 #, qt-format msgid "On [%1]" msgstr "" #: approver/approver.cpp:461 indicator/messagingmenu.cpp:414 msgid "Private number" msgstr "Niverenn brevez" #: approver/approver.cpp:464 indicator/messagingmenu.cpp:244 #: indicator/messagingmenu.cpp:418 indicator/textchannelobserver.cpp:640 msgid "Unknown number" msgstr "Niverenn dianav" #: approver/approver.cpp:470 approver/approver.cpp:485 msgid "Caller number is not available" msgstr "Ne c'haller ket gervel an niverenn" #: approver/approver.cpp:476 msgid "Calling from private number" msgstr "O pellgomz eus un niverenn brevez" #: approver/approver.cpp:479 msgid "Calling from unknown number" msgstr "O pellgomz eus un niverenn dianav" #: approver/approver.cpp:482 #, qt-format msgid "Calling from %1" msgstr "O pellgomz eus %1" #: approver/approver.cpp:529 msgid "Hold + Answer" msgstr "Lakaat da c'hortoz + Respont" #: approver/approver.cpp:530 msgid "Accept" msgstr "Asantiñ" #: approver/approver.cpp:543 msgid "End + Answer" msgstr "Echuiñ + Respont" #: approver/approver.cpp:552 msgid "Decline" msgstr "Nac'h" #: approver/approver.cpp:560 msgid "Message & decline" msgstr "Kas ur gemennadenn & nac'h" #: approver/main.cpp:46 msgid "Telephony Service Approver" msgstr "Aprouer servij pellgomzerezh" #: indicator/authhandler.cpp:72 msgid "Authentication failed. Do you want to review your credentials?" msgstr "" #: indicator/authhandler.cpp:91 msgid "Yes" msgstr "" #: indicator/authhandler.cpp:94 msgid "No" msgstr "" #: indicator/displaynamesettings.cpp:35 #, qt-format msgid "SIM %1" msgstr "SIM %1" #: indicator/main.cpp:53 msgid "Telephony Service Indicator" msgstr "Merker servij pellgomzerezh" #: indicator/messagingmenu.cpp:83 indicator/messagingmenu.cpp:87 msgid "Telephony Service" msgstr "Servij pellgomzerezh" #: indicator/messagingmenu.cpp:151 indicator/messagingmenu.cpp:293 #: indicator/messagingmenu.cpp:360 msgid "Send" msgstr "Kas" #. TRANSLATORS : %1 is the group name and %2 is the recipient name #: indicator/messagingmenu.cpp:262 indicator/textchannelobserver.cpp:671 #: indicator/textchannelobserver.cpp:675 #, qt-format msgid "Message to %1 from %2" msgstr "" #. TRANSLATORS : %1 is the recipient name #: indicator/messagingmenu.cpp:265 indicator/messagingmenu.cpp:269 #, fuzzy, qt-format #| msgid "Message from %1" msgid "Message to the group from %1" msgstr "Kemennadenn digant %1" #: indicator/messagingmenu.cpp:345 msgid "Call back" msgstr "Gervel en-dro" #: indicator/messagingmenu.cpp:350 #, fuzzy #| msgid "I missed your call - can you call me now?" msgid "Missed your call — can you call me now?" msgstr "" "C'hwitet em eus ho pellgomzadenn - ha gallout a rit gervel ac'hanon bremañ ?" #: indicator/messagingmenu.cpp:351 #, fuzzy #| msgid "I'm running late. I'm on my way." msgid "Running late. On my way." msgstr "Dale zo ganin. War an hent emaon." #: indicator/messagingmenu.cpp:352 #, fuzzy #| msgid "I'm busy at the moment. I'll call you later." msgid "Busy at the moment. Will call you later." msgstr "Prez zo warnon bremañ. Pellgomz a rin deoc'h diwezhatoc'h." #: indicator/messagingmenu.cpp:353 #, fuzzy #| msgid "I'll be 20 minutes late." msgid "I am 20 minutes late." msgstr "20 munut dale a vo ganin." #: indicator/messagingmenu.cpp:354 #, fuzzy #| msgid "Sorry, I'm still busy. I'll call you later." msgid "Still busy. Will call you later." msgstr "" "Digarezit ac'hanon, prez zo warnon bepred. Gervel a rin ac'hanoc'h " "diwezhatoc'h." #: indicator/messagingmenu.cpp:409 #, qt-format msgid "%1 missed call" msgid_plural "%1 missed calls" msgstr[0] "%1 bellgomzadenn c'hwitet" msgstr[1] "%1 a bellgomzadennoù c'hwitet" #: indicator/messagingmenu.cpp:492 msgid "Voicemail messages" msgstr "Kemennadennoù ar voest-komz" #: indicator/messagingmenu.cpp:495 #, qt-format msgid "%1 voicemail message" msgid_plural "%1 voicemail messages" msgstr[0] "%1 gemennadenn er voest-komz" msgstr[1] "%1 a gemennadennoù er voest-komz" #: indicator/messagingmenu.cpp:500 msgid "Voicemail" msgstr "Boest komz" #: indicator/metrics.cpp:42 #, qt-format msgid "%1 text messages sent today" msgstr "%1 a gemennadennoù testenn kaset hiziv" #: indicator/metrics.cpp:43 msgid "No text messages sent today" msgstr "N'eus bet kaset kemennadenn destenn ebet hiziv" #: indicator/metrics.cpp:44 #, qt-format msgid "%1 text messages received today" msgstr "%1 a gemennadennoù testenn resevet hiziv" #: indicator/metrics.cpp:45 msgid "No text messages received today" msgstr "N'eus bet resevet kemennadenn destenn ebet hiziv" #: indicator/metrics.cpp:46 #, qt-format msgid "%1 calls received today" msgstr "%1 a bellgomzadennoù resevet hiziv" #: indicator/metrics.cpp:47 msgid "No calls received today" msgstr "N'eus bet resevet pellgomzadenn ebet hiziv" #: indicator/metrics.cpp:48 #, qt-format msgid "%1 calls made today" msgstr "%1 a bellgomzadennoù graet hiziv" #: indicator/metrics.cpp:49 indicator/metrics.cpp:51 msgid "No calls made today" msgstr "N'eus bet graet pellgomzadenn ebet hiziv" #: indicator/metrics.cpp:50 #, qt-format msgid "Spent %1 minutes in calls today" msgstr "Tremenet %1 munut ouzh ar pellgomz hiziv" #: indicator/textchannelobserver.cpp:225 msgid "Unlock your sim card and try again from the messaging application." msgstr "" "Dibrennit ho kartenn SIM hag esaeit en-dro diwar an arload kemennadennoù." #: indicator/textchannelobserver.cpp:227 msgid "Deactivate flight mode and try again from the messaging application." msgstr "" "Diweredekait ar mod nijerez hag esaeit en-dro diwar an arload kemennadennoù." #: indicator/textchannelobserver.cpp:230 msgid "Try again from the messaging application." msgstr "Esaeit en-dro diwar an arload kemennadennoù" #: indicator/textchannelobserver.cpp:236 msgid "The message could not be sent" msgstr "N'eus ket bet gallet kas ar gemennadenn" #: indicator/textchannelobserver.cpp:249 indicator/textchannelobserver.cpp:713 msgid "View message" msgstr "Gwelet ar gemennadenn" #: indicator/textchannelobserver.cpp:295 msgid "New Group" msgstr "" #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:302 #, qt-format msgid "You joined group %1 " msgstr "" #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:306 #, qt-format msgid "You joined group %1" msgstr "" #: indicator/textchannelobserver.cpp:309 msgid "You joined a new group" msgstr "" #: indicator/textchannelobserver.cpp:328 msgid "View Group" msgstr "" #: indicator/textchannelobserver.cpp:367 indicator/ussdindicator.cpp:116 msgid "Ok" msgstr "Mat eo" #: indicator/textchannelobserver.cpp:373 msgid "Save" msgstr "Enrollañ" #: indicator/textchannelobserver.cpp:468 msgid "Emergency Alert" msgstr "" #: indicator/textchannelobserver.cpp:471 msgid "Emergency Alert: Extreme" msgstr "" #: indicator/textchannelobserver.cpp:474 msgid "Emergency Alert: Severe" msgstr "" #: indicator/textchannelobserver.cpp:477 msgid "Emergency Alert: Notice" msgstr "" #: indicator/textchannelobserver.cpp:482 msgid "AMBER Alert" msgstr "" #: indicator/textchannelobserver.cpp:485 msgid "Alert" msgstr "" #: indicator/textchannelobserver.cpp:531 msgid "Show alert" msgstr "" #: indicator/textchannelobserver.cpp:604 #, qt-format msgid "Attachment: %1 image" msgid_plural "Attachments: %1 images" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:606 #, qt-format msgid "Attachment: %1 video" msgid_plural "Attachments: %1 videos" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:608 #, qt-format msgid "Attachment: %1 contact" msgid_plural "Attachments: %1 contacts" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:610 #, qt-format msgid "Attachment: %1 audio clip" msgid_plural "Attachments: %1 audio clips" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:612 #, qt-format msgid "Attachment: %1 file" msgid_plural "Attachments: %1 files" msgstr[0] "" msgstr[1] "" #. TRANSLATORS : message displayed when any error occurred while receiving a MMS (case when cellular-data is off, or any downloading issue). Notify that there was a message, the user can find more about it in the messaging-app. #: indicator/textchannelobserver.cpp:615 #, fuzzy #| msgid "View message" msgid "New MMS message" msgstr "Gwelet ar gemennadenn" #. TRANSLATORS : %1 is the recipient name #: indicator/textchannelobserver.cpp:679 indicator/textchannelobserver.cpp:683 #, qt-format msgid "Message to group from %1" msgstr "" #: indicator/textchannelobserver.cpp:749 #, qt-format msgid "Message from %1" msgstr "Kemennadenn digant %1" #: indicator/textchannelobserver.cpp:910 msgid "Please, select a SIM card:" msgstr "Diuzit ur gartenn SIM, mar plij :" #: indicator/ussdindicator.cpp:119 msgid "Reply" msgstr "Respont" #: indicator/ussdindicator.cpp:142 msgid "Cancel" msgstr "Nullañ" #: libtelephonyservice/callnotification.cpp:53 msgid "Conf call on hold" msgstr "" #: libtelephonyservice/callnotification.cpp:53 #, qt-format msgid "%1 call on hold" msgstr "" #: libtelephonyservice/callnotification.cpp:56 msgid "Conf call ended" msgstr "" #: libtelephonyservice/callnotification.cpp:56 #, qt-format msgid "%1 call ended" msgstr "" #: libtelephonyservice/callnotification.cpp:59 #, qt-format msgid "%1 call declined" msgstr "" #: libtelephonyservice/contactwatcher.cpp:157 msgid "Private Number" msgstr "Niverenn brevez" #: libtelephonyservice/contactwatcher.cpp:159 msgid "Unknown Number" msgstr "Niverenn dianav" #, fuzzy #~| msgid "Telephony Service" #~ msgid "telephony-service-call" #~ msgstr "Servij pellgomzerezh" #, fuzzy #~| msgid "Telephony Service" #~ msgid "telephony-service-message" #~ msgstr "Servij pellgomzerezh" telephony-service-0.5.3/po/bs.po000066400000000000000000000261461455543255600165750ustar00rootroot00000000000000# Bosnian translation for telephony-service # Copyright (c) 2015 Rosetta Contributors and Canonical Ltd 2015 # This file is distributed under the same license as the telephony-service package. # FIRST AUTHOR , 2015. # msgid "" msgstr "" "Project-Id-Version: telephony-service\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-12-16 17:03+0100\n" "PO-Revision-Date: 2015-04-12 20:05+0000\n" "Last-Translator: FULL NAME \n" "Language-Team: Bosnian \n" "Language: bs\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && " "n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" "X-Launchpad-Export-Date: 2017-01-04 06:02+0000\n" "X-Generator: Launchpad (build 18298)\n" #: indicator/telephony-service-call.desktop.in:4 msgid "Phone Calls" msgstr "Telefonski pozivi" #: indicator/telephony-service-sms.desktop.in:4 msgid "SMS" msgstr "SMS" #: approver/approver.cpp:66 msgid "Unknown caller" msgstr "Nepoznat pozivalac" #: approver/approver.cpp:94 msgid "I'm busy at the moment. I'll call later." msgstr "Zauzet sam trenutno. Zvaću te kasnije." #: approver/approver.cpp:95 msgid "I'm running late, on my way now." msgstr "Kasnim, na putu sam sada." #: approver/approver.cpp:96 msgid "Please call me back later." msgstr "Molim te nazovi me kasnije." #: approver/approver.cpp:457 #, qt-format msgid "On [%1]" msgstr "On [%1]" #: approver/approver.cpp:461 indicator/messagingmenu.cpp:414 msgid "Private number" msgstr "Skriven broj" #: approver/approver.cpp:464 indicator/messagingmenu.cpp:244 #: indicator/messagingmenu.cpp:418 indicator/textchannelobserver.cpp:640 msgid "Unknown number" msgstr "Nepoznat broj" #: approver/approver.cpp:470 approver/approver.cpp:485 msgid "Caller number is not available" msgstr "Birani broj nije dostupan" #: approver/approver.cpp:476 msgid "Calling from private number" msgstr "Zvanje sa privatnog broja" #: approver/approver.cpp:479 msgid "Calling from unknown number" msgstr "Zvanje sa nepoznatog broja" #: approver/approver.cpp:482 #, qt-format msgid "Calling from %1" msgstr "Zovem iz %1" #: approver/approver.cpp:529 msgid "Hold + Answer" msgstr "Zadrži + Odgovori" #: approver/approver.cpp:530 msgid "Accept" msgstr "Prihvati" #: approver/approver.cpp:543 msgid "End + Answer" msgstr "Završetak + Odgovor" #: approver/approver.cpp:552 msgid "Decline" msgstr "Odbij" #: approver/approver.cpp:560 msgid "Message & decline" msgstr "Poruka & odbijanje" #: approver/main.cpp:46 msgid "Telephony Service Approver" msgstr "Telefonski servis odobravatelj" #: indicator/authhandler.cpp:72 msgid "Authentication failed. Do you want to review your credentials?" msgstr "Provjera autentičnosti nije uspjela. Želite li pregled vašeg statusa?" #: indicator/authhandler.cpp:91 msgid "Yes" msgstr "Da" #: indicator/authhandler.cpp:94 msgid "No" msgstr "Ne" #: indicator/displaynamesettings.cpp:35 #, qt-format msgid "SIM %1" msgstr "SIM %1" #: indicator/main.cpp:53 msgid "Telephony Service Indicator" msgstr "Telefonski servis pokazatelj" #: indicator/messagingmenu.cpp:83 indicator/messagingmenu.cpp:87 msgid "Telephony Service" msgstr "Telefonski Servis" #: indicator/messagingmenu.cpp:151 indicator/messagingmenu.cpp:293 #: indicator/messagingmenu.cpp:360 msgid "Send" msgstr "Šalji" #. TRANSLATORS : %1 is the group name and %2 is the recipient name #: indicator/messagingmenu.cpp:262 indicator/textchannelobserver.cpp:671 #: indicator/textchannelobserver.cpp:675 #, qt-format msgid "Message to %1 from %2" msgstr "" #. TRANSLATORS : %1 is the recipient name #: indicator/messagingmenu.cpp:265 indicator/messagingmenu.cpp:269 #, fuzzy, qt-format #| msgid "Message to group from %1" msgid "Message to the group from %1" msgstr "Poruka grupi od %1" #: indicator/messagingmenu.cpp:345 msgid "Call back" msgstr "Poziv nazad" #: indicator/messagingmenu.cpp:350 #, fuzzy #| msgid "I missed your call - can you call me now?" msgid "Missed your call — can you call me now?" msgstr "Propustio sam tvoj poziv - možeš li me nazvati sada?" #: indicator/messagingmenu.cpp:351 #, fuzzy #| msgid "I'm running late. I'm on my way." msgid "Running late. On my way." msgstr "Kasnim. Na putu sam." #: indicator/messagingmenu.cpp:352 #, fuzzy #| msgid "I'm busy at the moment. I'll call you later." msgid "Busy at the moment. Will call you later." msgstr "Zauzet sam trenutno. Zvaću te kasnije." #: indicator/messagingmenu.cpp:353 #, fuzzy #| msgid "I'll be 20 minutes late." msgid "I am 20 minutes late." msgstr "Kasniću 20 minuta." #: indicator/messagingmenu.cpp:354 #, fuzzy #| msgid "Sorry, I'm still busy. I'll call you later." msgid "Still busy. Will call you later." msgstr "Izvini, još uvijek sam zauzet. Zvaću te kasnije." #: indicator/messagingmenu.cpp:409 #, qt-format msgid "%1 missed call" msgid_plural "%1 missed calls" msgstr[0] "%1 propušten poziv" msgstr[1] "%1 propuštena poziva" msgstr[2] "%1 propuštenih poziva" #: indicator/messagingmenu.cpp:492 msgid "Voicemail messages" msgstr "Govorna pošta poruke" #: indicator/messagingmenu.cpp:495 #, qt-format msgid "%1 voicemail message" msgid_plural "%1 voicemail messages" msgstr[0] "%1 poruka govorne pošte" msgstr[1] "%1 poruke govorne pošte" msgstr[2] "%1 poruka govorne pošte" #: indicator/messagingmenu.cpp:500 msgid "Voicemail" msgstr "Govorna pošta" #: indicator/metrics.cpp:42 #, qt-format msgid "%1 text messages sent today" msgstr "%1 tekstualnih poruka poslanih danas" #: indicator/metrics.cpp:43 msgid "No text messages sent today" msgstr "Nema poslanih poruka danas" #: indicator/metrics.cpp:44 #, qt-format msgid "%1 text messages received today" msgstr "%1 tekstualnih poruka primljenih danas" #: indicator/metrics.cpp:45 msgid "No text messages received today" msgstr "Nema primljenih poruka danas" #: indicator/metrics.cpp:46 #, qt-format msgid "%1 calls received today" msgstr "%1 poziva primljenih danas" #: indicator/metrics.cpp:47 msgid "No calls received today" msgstr "Nema primljenih poziva danas" #: indicator/metrics.cpp:48 #, qt-format msgid "%1 calls made today" msgstr "%1 poziva napravljenih danas" #: indicator/metrics.cpp:49 indicator/metrics.cpp:51 msgid "No calls made today" msgstr "Nema napravljenih poziva danas" #: indicator/metrics.cpp:50 #, qt-format msgid "Spent %1 minutes in calls today" msgstr "Potrošene %1 minute na pozive danas" #: indicator/textchannelobserver.cpp:225 msgid "Unlock your sim card and try again from the messaging application." msgstr "Otključaj svoju sim karticu i pokušaj ponovo iz aplikacije za poruke." #: indicator/textchannelobserver.cpp:227 msgid "Deactivate flight mode and try again from the messaging application." msgstr "Deaktiviraj režim letenja i pokušaj ponovo iz aplikacije za poruke." #: indicator/textchannelobserver.cpp:230 msgid "Try again from the messaging application." msgstr "Pokušaj ponovo iz aplikacije za poruke." #: indicator/textchannelobserver.cpp:236 msgid "The message could not be sent" msgstr "Poruka ne može biti poslana" #: indicator/textchannelobserver.cpp:249 indicator/textchannelobserver.cpp:713 msgid "View message" msgstr "Vidi poruku" #: indicator/textchannelobserver.cpp:295 msgid "New Group" msgstr "" #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:302 #, qt-format msgid "You joined group %1 " msgstr "" #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:306 #, qt-format msgid "You joined group %1" msgstr "" #: indicator/textchannelobserver.cpp:309 msgid "You joined a new group" msgstr "" #: indicator/textchannelobserver.cpp:328 msgid "View Group" msgstr "" #: indicator/textchannelobserver.cpp:367 indicator/ussdindicator.cpp:116 msgid "Ok" msgstr "U redu" #: indicator/textchannelobserver.cpp:373 msgid "Save" msgstr "Snimi" #: indicator/textchannelobserver.cpp:468 msgid "Emergency Alert" msgstr "" #: indicator/textchannelobserver.cpp:471 msgid "Emergency Alert: Extreme" msgstr "" #: indicator/textchannelobserver.cpp:474 msgid "Emergency Alert: Severe" msgstr "" #: indicator/textchannelobserver.cpp:477 msgid "Emergency Alert: Notice" msgstr "" #: indicator/textchannelobserver.cpp:482 msgid "AMBER Alert" msgstr "" #: indicator/textchannelobserver.cpp:485 msgid "Alert" msgstr "" #: indicator/textchannelobserver.cpp:531 msgid "Show alert" msgstr "" #: indicator/textchannelobserver.cpp:604 #, qt-format msgid "Attachment: %1 image" msgid_plural "Attachments: %1 images" msgstr[0] "Prilog: %1 slika" msgstr[1] "Prilozi: %1 slike" msgstr[2] "Prilozi: %1 slika" #: indicator/textchannelobserver.cpp:606 #, qt-format msgid "Attachment: %1 video" msgid_plural "Attachments: %1 videos" msgstr[0] "Prilog: %1 video" msgstr[1] "Prilozi: %1 videa" msgstr[2] "Prilozi: %1 videa" #: indicator/textchannelobserver.cpp:608 #, qt-format msgid "Attachment: %1 contact" msgid_plural "Attachments: %1 contacts" msgstr[0] "Prilog: %1 kontakt" msgstr[1] "Prilozi: %1 kontakta" msgstr[2] "Prilozi: %1 kontakta" #: indicator/textchannelobserver.cpp:610 #, qt-format msgid "Attachment: %1 audio clip" msgid_plural "Attachments: %1 audio clips" msgstr[0] "Dodatak: %1 tonski snimak" msgstr[1] "Dodaci: %1 tonska snimka" msgstr[2] "Dodatak: %1 tonskih snimaka" #: indicator/textchannelobserver.cpp:612 #, qt-format msgid "Attachment: %1 file" msgid_plural "Attachments: %1 files" msgstr[0] "Prilog: %1 fajl" msgstr[1] "Prilozi: %1 fajla" msgstr[2] "Prilozi: %1 fajlova" #. TRANSLATORS : message displayed when any error occurred while receiving a MMS (case when cellular-data is off, or any downloading issue). Notify that there was a message, the user can find more about it in the messaging-app. #: indicator/textchannelobserver.cpp:615 #, fuzzy #| msgid "View message" msgid "New MMS message" msgstr "Vidi poruku" #. TRANSLATORS : %1 is the recipient name #: indicator/textchannelobserver.cpp:679 indicator/textchannelobserver.cpp:683 #, qt-format msgid "Message to group from %1" msgstr "Poruka grupi od %1" #: indicator/textchannelobserver.cpp:749 #, qt-format msgid "Message from %1" msgstr "Poruka od %1" #: indicator/textchannelobserver.cpp:910 msgid "Please, select a SIM card:" msgstr "Molim, odaberi SIM karticu:" #: indicator/ussdindicator.cpp:119 msgid "Reply" msgstr "Odgovori" #: indicator/ussdindicator.cpp:142 msgid "Cancel" msgstr "Otkaži" #: libtelephonyservice/callnotification.cpp:53 msgid "Conf call on hold" msgstr "" #: libtelephonyservice/callnotification.cpp:53 #, qt-format msgid "%1 call on hold" msgstr "" #: libtelephonyservice/callnotification.cpp:56 msgid "Conf call ended" msgstr "" #: libtelephonyservice/callnotification.cpp:56 #, qt-format msgid "%1 call ended" msgstr "" #: libtelephonyservice/callnotification.cpp:59 #, qt-format msgid "%1 call declined" msgstr "" #: libtelephonyservice/contactwatcher.cpp:157 msgid "Private Number" msgstr "Privatni Broj" #: libtelephonyservice/contactwatcher.cpp:159 msgid "Unknown Number" msgstr "Nepoznat broj" #, fuzzy #~| msgid "Telephony Service" #~ msgid "telephony-service-call" #~ msgstr "Telefonski Servis" #, fuzzy #~| msgid "Telephony Service" #~ msgid "telephony-service-message" #~ msgstr "Telefonski Servis" telephony-service-0.5.3/po/ca.po000066400000000000000000000272711455543255600165540ustar00rootroot00000000000000# Catalan translation for telephony-service # Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013 # This file is distributed under the same license as the telephony-service package. # FIRST AUTHOR , 2013. # msgid "" msgstr "" "Project-Id-Version: telephony-service\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-12-16 17:03+0100\n" "PO-Revision-Date: 2021-04-22 10:44+0000\n" "Last-Translator: Adria \n" "Language-Team: Catalan \n" "Language: ca\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Generator: Weblate 3.11.3\n" "X-Launchpad-Export-Date: 2017-01-04 06:02+0000\n" #: indicator/telephony-service-call.desktop.in:4 msgid "Phone Calls" msgstr "Trucades de telèfon" #: indicator/telephony-service-sms.desktop.in:4 msgid "SMS" msgstr "SMS" #: approver/approver.cpp:66 msgid "Unknown caller" msgstr "Número entrant desconegut" #: approver/approver.cpp:94 msgid "I'm busy at the moment. I'll call later." msgstr "Ara mateix tinc feina. Trucaré més tard." #: approver/approver.cpp:95 msgid "I'm running late, on my way now." msgstr "Vaig venint, però arribaré tard." #: approver/approver.cpp:96 msgid "Please call me back later." msgstr "Truca'm més tard." #: approver/approver.cpp:457 #, qt-format msgid "On [%1]" msgstr "Actiu [%1]" #: approver/approver.cpp:461 indicator/messagingmenu.cpp:414 msgid "Private number" msgstr "Número privat" #: approver/approver.cpp:464 indicator/messagingmenu.cpp:244 #: indicator/messagingmenu.cpp:418 indicator/textchannelobserver.cpp:640 msgid "Unknown number" msgstr "Número desconegut" #: approver/approver.cpp:470 approver/approver.cpp:485 msgid "Caller number is not available" msgstr "El número de la trucada entrant no està disponible" #: approver/approver.cpp:476 msgid "Calling from private number" msgstr "S'està trucant des d'un número privat" #: approver/approver.cpp:479 msgid "Calling from unknown number" msgstr "S'està trucant des d'un número desconegut" #: approver/approver.cpp:482 #, qt-format msgid "Calling from %1" msgstr "S'està trucant des de %1" #: approver/approver.cpp:529 msgid "Hold + Answer" msgstr "Retenció i resposta" #: approver/approver.cpp:530 msgid "Accept" msgstr "Accepta" #: approver/approver.cpp:543 msgid "End + Answer" msgstr "Finalitza i contesta" #: approver/approver.cpp:552 msgid "Decline" msgstr "Rebutja" #: approver/approver.cpp:560 msgid "Message & decline" msgstr "Envia un missatge i declina" #: approver/main.cpp:46 msgid "Telephony Service Approver" msgstr "Aprovador del servei de telefonia" #: indicator/authhandler.cpp:72 msgid "Authentication failed. Do you want to review your credentials?" msgstr "Ha fallat l'autenticació. Voleu revisar les credencials?" #: indicator/authhandler.cpp:91 msgid "Yes" msgstr "Sí" #: indicator/authhandler.cpp:94 msgid "No" msgstr "No" #: indicator/displaynamesettings.cpp:35 #, qt-format msgid "SIM %1" msgstr "SIM %1" #: indicator/main.cpp:53 msgid "Telephony Service Indicator" msgstr "Indicador del servei de telefonia" #: indicator/messagingmenu.cpp:83 indicator/messagingmenu.cpp:87 msgid "Telephony Service" msgstr "Servei de telefonia" #: indicator/messagingmenu.cpp:151 indicator/messagingmenu.cpp:293 #: indicator/messagingmenu.cpp:360 msgid "Send" msgstr "Envia" #. TRANSLATORS : %1 is the group name and %2 is the recipient name #: indicator/messagingmenu.cpp:262 indicator/textchannelobserver.cpp:671 #: indicator/textchannelobserver.cpp:675 #, qt-format msgid "Message to %1 from %2" msgstr "Missatge de %1 per a %2" #. TRANSLATORS : %1 is the recipient name #: indicator/messagingmenu.cpp:265 indicator/messagingmenu.cpp:269 #, fuzzy, qt-format #| msgid "Message to group from %1" msgid "Message to the group from %1" msgstr "Missatge al grup de %1" #: indicator/messagingmenu.cpp:345 msgid "Call back" msgstr "Torna la trucada" #: indicator/messagingmenu.cpp:350 #, fuzzy #| msgid "I missed your call - can you call me now?" msgid "Missed your call — can you call me now?" msgstr "No he pogut contestar - em pots trucar ara?" #: indicator/messagingmenu.cpp:351 #, fuzzy #| msgid "I'm running late. I'm on my way." msgid "Running late. On my way." msgstr "Arribo tard. Ja estic venint." #: indicator/messagingmenu.cpp:352 #, fuzzy #| msgid "I'm busy at the moment. I'll call you later." msgid "Busy at the moment. Will call you later." msgstr "Ara mateix estic enfeinat. Trucaré més tard." #: indicator/messagingmenu.cpp:353 #, fuzzy #| msgid "I'll be 20 minutes late." msgid "I am 20 minutes late." msgstr "Arribaré 20 minuts tard." #: indicator/messagingmenu.cpp:354 #, fuzzy #| msgid "Sorry, I'm still busy. I'll call you later." msgid "Still busy. Will call you later." msgstr "Tinc feina, et trucaré més tard." #: indicator/messagingmenu.cpp:409 #, qt-format msgid "%1 missed call" msgid_plural "%1 missed calls" msgstr[0] "%1 trucada perduda" msgstr[1] "%1 trucades perdudes" #: indicator/messagingmenu.cpp:492 msgid "Voicemail messages" msgstr "Missatges de veu" #: indicator/messagingmenu.cpp:495 #, qt-format msgid "%1 voicemail message" msgid_plural "%1 voicemail messages" msgstr[0] "%1 missatge de veu" msgstr[1] "%1 missatges de veu" #: indicator/messagingmenu.cpp:500 msgid "Voicemail" msgstr "Bústia de veu" #: indicator/metrics.cpp:42 #, qt-format msgid "%1 text messages sent today" msgstr "%1 missatges de text enviats avui" #: indicator/metrics.cpp:43 msgid "No text messages sent today" msgstr "Avui no heu enviat cap missatge de text" #: indicator/metrics.cpp:44 #, qt-format msgid "%1 text messages received today" msgstr "%1 missatges de text rebuts avui" #: indicator/metrics.cpp:45 msgid "No text messages received today" msgstr "Avui no heu rebut cap missatge de text" #: indicator/metrics.cpp:46 #, qt-format msgid "%1 calls received today" msgstr "%1 trucades rebudes avui" #: indicator/metrics.cpp:47 msgid "No calls received today" msgstr "Avui no heu rebut cap trucada" #: indicator/metrics.cpp:48 #, qt-format msgid "%1 calls made today" msgstr "%1 trucades fetes avui" #: indicator/metrics.cpp:49 indicator/metrics.cpp:51 msgid "No calls made today" msgstr "Avui no heu fet cap trucada" #: indicator/metrics.cpp:50 #, qt-format msgid "Spent %1 minutes in calls today" msgstr "Heu estat %1 minuts en trucades avui" #: indicator/textchannelobserver.cpp:225 msgid "Unlock your sim card and try again from the messaging application." msgstr "" "Desbloqueu la targeta SIM i torneu-ho a provar des de l'aplicació de " "missatgeria." #: indicator/textchannelobserver.cpp:227 msgid "Deactivate flight mode and try again from the messaging application." msgstr "" "Desactiveu el mode d'avió i torneu-ho a intentar des de l'aplicació de " "missatgeria." #: indicator/textchannelobserver.cpp:230 msgid "Try again from the messaging application." msgstr "Torneu-ho a intentar per a l'aplicació de missatgeria." #: indicator/textchannelobserver.cpp:236 msgid "The message could not be sent" msgstr "No s'ha pogut enviar el missatge" #: indicator/textchannelobserver.cpp:249 indicator/textchannelobserver.cpp:713 msgid "View message" msgstr "Mostra el missatge" #: indicator/textchannelobserver.cpp:295 msgid "New Group" msgstr "Grup nou" #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:302 #, qt-format msgid "You joined group %1 " msgstr "Us heu afegit al grup %1 " #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:306 #, qt-format msgid "You joined group %1" msgstr "Us heu afegit al trup %1" #: indicator/textchannelobserver.cpp:309 msgid "You joined a new group" msgstr "Us heu afegit a un grup nou" #: indicator/textchannelobserver.cpp:328 msgid "View Group" msgstr "Visualitza el grup" #: indicator/textchannelobserver.cpp:367 indicator/ussdindicator.cpp:116 msgid "Ok" msgstr "D'acord" #: indicator/textchannelobserver.cpp:373 msgid "Save" msgstr "Desa" #: indicator/textchannelobserver.cpp:468 msgid "Emergency Alert" msgstr "" #: indicator/textchannelobserver.cpp:471 msgid "Emergency Alert: Extreme" msgstr "" #: indicator/textchannelobserver.cpp:474 msgid "Emergency Alert: Severe" msgstr "" #: indicator/textchannelobserver.cpp:477 msgid "Emergency Alert: Notice" msgstr "" #: indicator/textchannelobserver.cpp:482 msgid "AMBER Alert" msgstr "" #: indicator/textchannelobserver.cpp:485 msgid "Alert" msgstr "" #: indicator/textchannelobserver.cpp:531 msgid "Show alert" msgstr "" #: indicator/textchannelobserver.cpp:604 #, qt-format msgid "Attachment: %1 image" msgid_plural "Attachments: %1 images" msgstr[0] "Adjunció: %1 imatge" msgstr[1] "Adjunció: %1 imatges" #: indicator/textchannelobserver.cpp:606 #, qt-format msgid "Attachment: %1 video" msgid_plural "Attachments: %1 videos" msgstr[0] "Adjunció: %1 vídeo" msgstr[1] "Adjunció: %1 vídeos" #: indicator/textchannelobserver.cpp:608 #, qt-format msgid "Attachment: %1 contact" msgid_plural "Attachments: %1 contacts" msgstr[0] "Adjunció: %1 contacte" msgstr[1] "Adjunció: %1 contactes" #: indicator/textchannelobserver.cpp:610 #, qt-format msgid "Attachment: %1 audio clip" msgid_plural "Attachments: %1 audio clips" msgstr[0] "Adjunció: %1 clip d'àudio" msgstr[1] "Adjunció: %1 clips d'àudio" #: indicator/textchannelobserver.cpp:612 #, qt-format msgid "Attachment: %1 file" msgid_plural "Attachments: %1 files" msgstr[0] "Adjunció: %1 fitxer" msgstr[1] "Adjunció: %1 fitxers" #. TRANSLATORS : message displayed when any error occurred while receiving a MMS (case when cellular-data is off, or any downloading issue). Notify that there was a message, the user can find more about it in the messaging-app. #: indicator/textchannelobserver.cpp:615 #, fuzzy #| msgid "View message" msgid "New MMS message" msgstr "Mostra el missatge" #. TRANSLATORS : %1 is the recipient name #: indicator/textchannelobserver.cpp:679 indicator/textchannelobserver.cpp:683 #, qt-format msgid "Message to group from %1" msgstr "Missatge al grup de %1" #: indicator/textchannelobserver.cpp:749 #, qt-format msgid "Message from %1" msgstr "Missatge d'en/na %1" #: indicator/textchannelobserver.cpp:910 msgid "Please, select a SIM card:" msgstr "Seleccioneu una targeta SIM:" #: indicator/ussdindicator.cpp:119 msgid "Reply" msgstr "Respon" #: indicator/ussdindicator.cpp:142 msgid "Cancel" msgstr "Cancel·la" #: libtelephonyservice/callnotification.cpp:53 msgid "Conf call on hold" msgstr "" #: libtelephonyservice/callnotification.cpp:53 #, qt-format msgid "%1 call on hold" msgstr "" #: libtelephonyservice/callnotification.cpp:56 msgid "Conf call ended" msgstr "" #: libtelephonyservice/callnotification.cpp:56 #, qt-format msgid "%1 call ended" msgstr "" #: libtelephonyservice/callnotification.cpp:59 #, qt-format msgid "%1 call declined" msgstr "" #: libtelephonyservice/contactwatcher.cpp:157 msgid "Private Number" msgstr "Númeor privat" #: libtelephonyservice/contactwatcher.cpp:159 msgid "Unknown Number" msgstr "Número desconegut" #, fuzzy #~| msgid "Telephony Service" #~ msgid "telephony-service-call" #~ msgstr "Servei de telefonia" #, fuzzy #~| msgid "Telephony Service" #~ msgid "telephony-service-message" #~ msgstr "Servei de telefonia" #~ msgid "" #~ "Oops, there has been an error with the MMS system and this message could " #~ "not be retrieved. Please ensure Cellular Data is ON and MMS settings are " #~ "correct, then ask the sender to try again." #~ msgstr "" #~ "Sembla que hi ha hagut un error amb el sistema MMS i aquest missatge no " #~ "s'ha pogut recuperar. Assegureu-vos de que la connexió de dades mòbils " #~ "està connectada i la configuració MMS és correcta. Llavors demaneu que " #~ "vos el tornin a enviar." telephony-service-0.5.3/po/ca@valencia.po000066400000000000000000000253021455543255600203500ustar00rootroot00000000000000# Catalan translation for telephony-service # Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013 # This file is distributed under the same license as the telephony-service package. # FIRST AUTHOR , 2013. # msgid "" msgstr "" "Project-Id-Version: telephony-service\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-12-16 17:03+0100\n" "PO-Revision-Date: 2015-02-22 15:22+0000\n" "Last-Translator: David Planella \n" "Language-Team: Catalan \n" "Language: ca\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Launchpad-Export-Date: 2017-01-04 06:03+0000\n" "X-Generator: Launchpad (build 18298)\n" #: indicator/telephony-service-call.desktop.in:4 msgid "Phone Calls" msgstr "Cridades de telèfon" #: indicator/telephony-service-sms.desktop.in:4 msgid "SMS" msgstr "SMS" #: approver/approver.cpp:66 msgid "Unknown caller" msgstr "Número entrant desconegut" #: approver/approver.cpp:94 msgid "I'm busy at the moment. I'll call later." msgstr "Ara mateix tinc faena. Cridaré més tard." #: approver/approver.cpp:95 msgid "I'm running late, on my way now." msgstr "Vaig venint, però arribaré tard." #: approver/approver.cpp:96 msgid "Please call me back later." msgstr "Crida'm més tard." #: approver/approver.cpp:457 #, qt-format msgid "On [%1]" msgstr "" #: approver/approver.cpp:461 indicator/messagingmenu.cpp:414 msgid "Private number" msgstr "Número privat" #: approver/approver.cpp:464 indicator/messagingmenu.cpp:244 #: indicator/messagingmenu.cpp:418 indicator/textchannelobserver.cpp:640 msgid "Unknown number" msgstr "Número desconegut" #: approver/approver.cpp:470 approver/approver.cpp:485 msgid "Caller number is not available" msgstr "El número de la cridada entrant no està disponible" #: approver/approver.cpp:476 msgid "Calling from private number" msgstr "S'està cridant des d'un número privat" #: approver/approver.cpp:479 msgid "Calling from unknown number" msgstr "S'està cridant des d'un número desconegut" #: approver/approver.cpp:482 #, qt-format msgid "Calling from %1" msgstr "S'està cridant des de %1" #: approver/approver.cpp:529 msgid "Hold + Answer" msgstr "Retenció i resposta" #: approver/approver.cpp:530 msgid "Accept" msgstr "Accepta" #: approver/approver.cpp:543 msgid "End + Answer" msgstr "Finalitza i contesta" #: approver/approver.cpp:552 msgid "Decline" msgstr "Rebutja" #: approver/approver.cpp:560 msgid "Message & decline" msgstr "Envia un missatge i declina" #: approver/main.cpp:46 msgid "Telephony Service Approver" msgstr "Aprovador del servei de telefonia" #: indicator/authhandler.cpp:72 msgid "Authentication failed. Do you want to review your credentials?" msgstr "" #: indicator/authhandler.cpp:91 msgid "Yes" msgstr "" #: indicator/authhandler.cpp:94 msgid "No" msgstr "" #: indicator/displaynamesettings.cpp:35 #, qt-format msgid "SIM %1" msgstr "SIM %1" #: indicator/main.cpp:53 msgid "Telephony Service Indicator" msgstr "Indicador del servei de telefonia" #: indicator/messagingmenu.cpp:83 indicator/messagingmenu.cpp:87 msgid "Telephony Service" msgstr "Servei de telefonia" #: indicator/messagingmenu.cpp:151 indicator/messagingmenu.cpp:293 #: indicator/messagingmenu.cpp:360 msgid "Send" msgstr "Envia" #. TRANSLATORS : %1 is the group name and %2 is the recipient name #: indicator/messagingmenu.cpp:262 indicator/textchannelobserver.cpp:671 #: indicator/textchannelobserver.cpp:675 #, qt-format msgid "Message to %1 from %2" msgstr "" #. TRANSLATORS : %1 is the recipient name #: indicator/messagingmenu.cpp:265 indicator/messagingmenu.cpp:269 #, fuzzy, qt-format #| msgid "Message from %1" msgid "Message to the group from %1" msgstr "Missatge d'en/na %1" #: indicator/messagingmenu.cpp:345 msgid "Call back" msgstr "Crida" #: indicator/messagingmenu.cpp:350 #, fuzzy #| msgid "I missed your call - can you call me now?" msgid "Missed your call — can you call me now?" msgstr "No he pogut contestar - em pots cridar ara?" #: indicator/messagingmenu.cpp:351 #, fuzzy #| msgid "I'm running late. I'm on my way." msgid "Running late. On my way." msgstr "Arribo tard. Ja estic venint." #: indicator/messagingmenu.cpp:352 #, fuzzy #| msgid "I'm busy at the moment. I'll call you later." msgid "Busy at the moment. Will call you later." msgstr "Ara mateix estic enfeina. Cridaré més tard." #: indicator/messagingmenu.cpp:353 #, fuzzy #| msgid "I'll be 20 minutes late." msgid "I am 20 minutes late." msgstr "Arribaré 20 minuts tard." #: indicator/messagingmenu.cpp:354 #, fuzzy #| msgid "Sorry, I'm still busy. I'll call you later." msgid "Still busy. Will call you later." msgstr "Tinc faena, et cridaré més tard" #: indicator/messagingmenu.cpp:409 #, qt-format msgid "%1 missed call" msgid_plural "%1 missed calls" msgstr[0] "%1 cridada perduda" msgstr[1] "%1 cridades perdudes" #: indicator/messagingmenu.cpp:492 msgid "Voicemail messages" msgstr "Missatges de veu" #: indicator/messagingmenu.cpp:495 #, qt-format msgid "%1 voicemail message" msgid_plural "%1 voicemail messages" msgstr[0] "%1 missatge de veu" msgstr[1] "%1 missatge de veu" #: indicator/messagingmenu.cpp:500 msgid "Voicemail" msgstr "Bústia de veu" #: indicator/metrics.cpp:42 #, qt-format msgid "%1 text messages sent today" msgstr "%1 missatges de text enviats hui" #: indicator/metrics.cpp:43 msgid "No text messages sent today" msgstr "Hui no heu enviat cap missatge de text" #: indicator/metrics.cpp:44 #, qt-format msgid "%1 text messages received today" msgstr "%1 missatges de text rebuts hui" #: indicator/metrics.cpp:45 msgid "No text messages received today" msgstr "Hui no heu rebut cap missatge de text" #: indicator/metrics.cpp:46 #, qt-format msgid "%1 calls received today" msgstr "%1 cridades rebudes hui" #: indicator/metrics.cpp:47 msgid "No calls received today" msgstr "Hui no heu rebut cap cridada" #: indicator/metrics.cpp:48 #, qt-format msgid "%1 calls made today" msgstr "%1 cridades fetes hui" #: indicator/metrics.cpp:49 indicator/metrics.cpp:51 msgid "No calls made today" msgstr "Hui no heu fet cap cridada" #: indicator/metrics.cpp:50 #, qt-format msgid "Spent %1 minutes in calls today" msgstr "Heu estat %1 minuts en cridades hui" #: indicator/textchannelobserver.cpp:225 msgid "Unlock your sim card and try again from the messaging application." msgstr "" "Desbloqueu la targeta SIM i torneu-ho a provar des de l'aplicació de " "missatgeria." #: indicator/textchannelobserver.cpp:227 msgid "Deactivate flight mode and try again from the messaging application." msgstr "" "Desactiveu el mode d'avió i torneu-ho a intentar des de l'aplicació de " "missatgeria." #: indicator/textchannelobserver.cpp:230 msgid "Try again from the messaging application." msgstr "Torneu-ho a intentar per a l'aplicació de missatgeria." #: indicator/textchannelobserver.cpp:236 msgid "The message could not be sent" msgstr "No s'ha pogut enviar el missatge" #: indicator/textchannelobserver.cpp:249 indicator/textchannelobserver.cpp:713 msgid "View message" msgstr "Mostra el missatge" #: indicator/textchannelobserver.cpp:295 msgid "New Group" msgstr "" #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:302 #, qt-format msgid "You joined group %1 " msgstr "" #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:306 #, qt-format msgid "You joined group %1" msgstr "" #: indicator/textchannelobserver.cpp:309 msgid "You joined a new group" msgstr "" #: indicator/textchannelobserver.cpp:328 msgid "View Group" msgstr "" #: indicator/textchannelobserver.cpp:367 indicator/ussdindicator.cpp:116 msgid "Ok" msgstr "D'acord" #: indicator/textchannelobserver.cpp:373 msgid "Save" msgstr "Guarda" #: indicator/textchannelobserver.cpp:468 msgid "Emergency Alert" msgstr "" #: indicator/textchannelobserver.cpp:471 msgid "Emergency Alert: Extreme" msgstr "" #: indicator/textchannelobserver.cpp:474 msgid "Emergency Alert: Severe" msgstr "" #: indicator/textchannelobserver.cpp:477 msgid "Emergency Alert: Notice" msgstr "" #: indicator/textchannelobserver.cpp:482 msgid "AMBER Alert" msgstr "" #: indicator/textchannelobserver.cpp:485 msgid "Alert" msgstr "" #: indicator/textchannelobserver.cpp:531 msgid "Show alert" msgstr "" #: indicator/textchannelobserver.cpp:604 #, qt-format msgid "Attachment: %1 image" msgid_plural "Attachments: %1 images" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:606 #, qt-format msgid "Attachment: %1 video" msgid_plural "Attachments: %1 videos" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:608 #, qt-format msgid "Attachment: %1 contact" msgid_plural "Attachments: %1 contacts" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:610 #, qt-format msgid "Attachment: %1 audio clip" msgid_plural "Attachments: %1 audio clips" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:612 #, qt-format msgid "Attachment: %1 file" msgid_plural "Attachments: %1 files" msgstr[0] "" msgstr[1] "" #. TRANSLATORS : message displayed when any error occurred while receiving a MMS (case when cellular-data is off, or any downloading issue). Notify that there was a message, the user can find more about it in the messaging-app. #: indicator/textchannelobserver.cpp:615 #, fuzzy #| msgid "View message" msgid "New MMS message" msgstr "Mostra el missatge" #. TRANSLATORS : %1 is the recipient name #: indicator/textchannelobserver.cpp:679 indicator/textchannelobserver.cpp:683 #, qt-format msgid "Message to group from %1" msgstr "" #: indicator/textchannelobserver.cpp:749 #, qt-format msgid "Message from %1" msgstr "Missatge d'en/na %1" #: indicator/textchannelobserver.cpp:910 msgid "Please, select a SIM card:" msgstr "Seleccioneu una targeta SIM:" #: indicator/ussdindicator.cpp:119 msgid "Reply" msgstr "Resposta" #: indicator/ussdindicator.cpp:142 msgid "Cancel" msgstr "Cancel·la" #: libtelephonyservice/callnotification.cpp:53 msgid "Conf call on hold" msgstr "" #: libtelephonyservice/callnotification.cpp:53 #, qt-format msgid "%1 call on hold" msgstr "" #: libtelephonyservice/callnotification.cpp:56 msgid "Conf call ended" msgstr "" #: libtelephonyservice/callnotification.cpp:56 #, qt-format msgid "%1 call ended" msgstr "" #: libtelephonyservice/callnotification.cpp:59 #, qt-format msgid "%1 call declined" msgstr "" #: libtelephonyservice/contactwatcher.cpp:157 msgid "Private Number" msgstr "Númeor privat" #: libtelephonyservice/contactwatcher.cpp:159 msgid "Unknown Number" msgstr "Número desconegut" #, fuzzy #~| msgid "Telephony Service" #~ msgid "telephony-service-call" #~ msgstr "Servei de telefonia" #, fuzzy #~| msgid "Telephony Service" #~ msgid "telephony-service-message" #~ msgstr "Servei de telefonia" telephony-service-0.5.3/po/ce.po000066400000000000000000000207371455543255600165600ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR Canonical Ltd. # This file is distributed under the same license as the telephony-service package. # FIRST AUTHOR , YEAR. # msgid "" msgstr "" "Project-Id-Version: telephony-service\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-12-16 17:03+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: Automatically generated\n" "Language-Team: none\n" "Language: ce\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" #: indicator/telephony-service-call.desktop.in:4 msgid "Phone Calls" msgstr "" #: indicator/telephony-service-sms.desktop.in:4 msgid "SMS" msgstr "" #: approver/approver.cpp:66 msgid "Unknown caller" msgstr "" #: approver/approver.cpp:94 msgid "I'm busy at the moment. I'll call later." msgstr "" #: approver/approver.cpp:95 msgid "I'm running late, on my way now." msgstr "" #: approver/approver.cpp:96 msgid "Please call me back later." msgstr "" #: approver/approver.cpp:457 #, qt-format msgid "On [%1]" msgstr "" #: approver/approver.cpp:461 indicator/messagingmenu.cpp:414 msgid "Private number" msgstr "" #: approver/approver.cpp:464 indicator/messagingmenu.cpp:244 #: indicator/messagingmenu.cpp:418 indicator/textchannelobserver.cpp:640 msgid "Unknown number" msgstr "" #: approver/approver.cpp:470 approver/approver.cpp:485 msgid "Caller number is not available" msgstr "" #: approver/approver.cpp:476 msgid "Calling from private number" msgstr "" #: approver/approver.cpp:479 msgid "Calling from unknown number" msgstr "" #: approver/approver.cpp:482 #, qt-format msgid "Calling from %1" msgstr "" #: approver/approver.cpp:529 msgid "Hold + Answer" msgstr "" #: approver/approver.cpp:530 msgid "Accept" msgstr "" #: approver/approver.cpp:543 msgid "End + Answer" msgstr "" #: approver/approver.cpp:552 msgid "Decline" msgstr "" #: approver/approver.cpp:560 msgid "Message & decline" msgstr "" #: approver/main.cpp:46 msgid "Telephony Service Approver" msgstr "" #: indicator/authhandler.cpp:72 msgid "Authentication failed. Do you want to review your credentials?" msgstr "" #: indicator/authhandler.cpp:91 msgid "Yes" msgstr "" #: indicator/authhandler.cpp:94 msgid "No" msgstr "" #: indicator/displaynamesettings.cpp:35 #, qt-format msgid "SIM %1" msgstr "" #: indicator/main.cpp:53 msgid "Telephony Service Indicator" msgstr "" #: indicator/messagingmenu.cpp:83 indicator/messagingmenu.cpp:87 msgid "Telephony Service" msgstr "" #: indicator/messagingmenu.cpp:151 indicator/messagingmenu.cpp:293 #: indicator/messagingmenu.cpp:360 msgid "Send" msgstr "" #. TRANSLATORS : %1 is the group name and %2 is the recipient name #: indicator/messagingmenu.cpp:262 indicator/textchannelobserver.cpp:671 #: indicator/textchannelobserver.cpp:675 #, qt-format msgid "Message to %1 from %2" msgstr "" #. TRANSLATORS : %1 is the recipient name #: indicator/messagingmenu.cpp:265 indicator/messagingmenu.cpp:269 #, qt-format msgid "Message to the group from %1" msgstr "" #: indicator/messagingmenu.cpp:345 msgid "Call back" msgstr "" #: indicator/messagingmenu.cpp:350 msgid "Missed your call — can you call me now?" msgstr "" #: indicator/messagingmenu.cpp:351 msgid "Running late. On my way." msgstr "" #: indicator/messagingmenu.cpp:352 msgid "Busy at the moment. Will call you later." msgstr "" #: indicator/messagingmenu.cpp:353 msgid "I am 20 minutes late." msgstr "" #: indicator/messagingmenu.cpp:354 msgid "Still busy. Will call you later." msgstr "" #: indicator/messagingmenu.cpp:409 #, qt-format msgid "%1 missed call" msgid_plural "%1 missed calls" msgstr[0] "" msgstr[1] "" #: indicator/messagingmenu.cpp:492 msgid "Voicemail messages" msgstr "" #: indicator/messagingmenu.cpp:495 #, qt-format msgid "%1 voicemail message" msgid_plural "%1 voicemail messages" msgstr[0] "" msgstr[1] "" #: indicator/messagingmenu.cpp:500 msgid "Voicemail" msgstr "" #: indicator/metrics.cpp:42 #, qt-format msgid "%1 text messages sent today" msgstr "" #: indicator/metrics.cpp:43 msgid "No text messages sent today" msgstr "" #: indicator/metrics.cpp:44 #, qt-format msgid "%1 text messages received today" msgstr "" #: indicator/metrics.cpp:45 msgid "No text messages received today" msgstr "" #: indicator/metrics.cpp:46 #, qt-format msgid "%1 calls received today" msgstr "" #: indicator/metrics.cpp:47 msgid "No calls received today" msgstr "" #: indicator/metrics.cpp:48 #, qt-format msgid "%1 calls made today" msgstr "" #: indicator/metrics.cpp:49 indicator/metrics.cpp:51 msgid "No calls made today" msgstr "" #: indicator/metrics.cpp:50 #, qt-format msgid "Spent %1 minutes in calls today" msgstr "" #: indicator/textchannelobserver.cpp:225 msgid "Unlock your sim card and try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:227 msgid "Deactivate flight mode and try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:230 msgid "Try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:236 msgid "The message could not be sent" msgstr "" #: indicator/textchannelobserver.cpp:249 indicator/textchannelobserver.cpp:713 msgid "View message" msgstr "" #: indicator/textchannelobserver.cpp:295 msgid "New Group" msgstr "" #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:302 #, qt-format msgid "You joined group %1 " msgstr "" #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:306 #, qt-format msgid "You joined group %1" msgstr "" #: indicator/textchannelobserver.cpp:309 msgid "You joined a new group" msgstr "" #: indicator/textchannelobserver.cpp:328 msgid "View Group" msgstr "" #: indicator/textchannelobserver.cpp:367 indicator/ussdindicator.cpp:116 msgid "Ok" msgstr "" #: indicator/textchannelobserver.cpp:373 msgid "Save" msgstr "" #: indicator/textchannelobserver.cpp:468 msgid "Emergency Alert" msgstr "" #: indicator/textchannelobserver.cpp:471 msgid "Emergency Alert: Extreme" msgstr "" #: indicator/textchannelobserver.cpp:474 msgid "Emergency Alert: Severe" msgstr "" #: indicator/textchannelobserver.cpp:477 msgid "Emergency Alert: Notice" msgstr "" #: indicator/textchannelobserver.cpp:482 msgid "AMBER Alert" msgstr "" #: indicator/textchannelobserver.cpp:485 msgid "Alert" msgstr "" #: indicator/textchannelobserver.cpp:531 msgid "Show alert" msgstr "" #: indicator/textchannelobserver.cpp:604 #, qt-format msgid "Attachment: %1 image" msgid_plural "Attachments: %1 images" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:606 #, qt-format msgid "Attachment: %1 video" msgid_plural "Attachments: %1 videos" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:608 #, qt-format msgid "Attachment: %1 contact" msgid_plural "Attachments: %1 contacts" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:610 #, qt-format msgid "Attachment: %1 audio clip" msgid_plural "Attachments: %1 audio clips" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:612 #, qt-format msgid "Attachment: %1 file" msgid_plural "Attachments: %1 files" msgstr[0] "" msgstr[1] "" #. TRANSLATORS : message displayed when any error occurred while receiving a MMS (case when cellular-data is off, or any downloading issue). Notify that there was a message, the user can find more about it in the messaging-app. #: indicator/textchannelobserver.cpp:615 msgid "New MMS message" msgstr "" #. TRANSLATORS : %1 is the recipient name #: indicator/textchannelobserver.cpp:679 indicator/textchannelobserver.cpp:683 #, qt-format msgid "Message to group from %1" msgstr "" #: indicator/textchannelobserver.cpp:749 #, qt-format msgid "Message from %1" msgstr "" #: indicator/textchannelobserver.cpp:910 msgid "Please, select a SIM card:" msgstr "" #: indicator/ussdindicator.cpp:119 msgid "Reply" msgstr "" #: indicator/ussdindicator.cpp:142 msgid "Cancel" msgstr "" #: libtelephonyservice/callnotification.cpp:53 msgid "Conf call on hold" msgstr "" #: libtelephonyservice/callnotification.cpp:53 #, qt-format msgid "%1 call on hold" msgstr "" #: libtelephonyservice/callnotification.cpp:56 msgid "Conf call ended" msgstr "" #: libtelephonyservice/callnotification.cpp:56 #, qt-format msgid "%1 call ended" msgstr "" #: libtelephonyservice/callnotification.cpp:59 #, qt-format msgid "%1 call declined" msgstr "" #: libtelephonyservice/contactwatcher.cpp:157 msgid "Private Number" msgstr "" #: libtelephonyservice/contactwatcher.cpp:159 msgid "Unknown Number" msgstr "" telephony-service-0.5.3/po/ckb.po000066400000000000000000000207401455543255600167220ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR Canonical Ltd. # This file is distributed under the same license as the telephony-service package. # FIRST AUTHOR , YEAR. # msgid "" msgstr "" "Project-Id-Version: telephony-service\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-12-16 17:03+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: Automatically generated\n" "Language-Team: none\n" "Language: ckb\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" #: indicator/telephony-service-call.desktop.in:4 msgid "Phone Calls" msgstr "" #: indicator/telephony-service-sms.desktop.in:4 msgid "SMS" msgstr "" #: approver/approver.cpp:66 msgid "Unknown caller" msgstr "" #: approver/approver.cpp:94 msgid "I'm busy at the moment. I'll call later." msgstr "" #: approver/approver.cpp:95 msgid "I'm running late, on my way now." msgstr "" #: approver/approver.cpp:96 msgid "Please call me back later." msgstr "" #: approver/approver.cpp:457 #, qt-format msgid "On [%1]" msgstr "" #: approver/approver.cpp:461 indicator/messagingmenu.cpp:414 msgid "Private number" msgstr "" #: approver/approver.cpp:464 indicator/messagingmenu.cpp:244 #: indicator/messagingmenu.cpp:418 indicator/textchannelobserver.cpp:640 msgid "Unknown number" msgstr "" #: approver/approver.cpp:470 approver/approver.cpp:485 msgid "Caller number is not available" msgstr "" #: approver/approver.cpp:476 msgid "Calling from private number" msgstr "" #: approver/approver.cpp:479 msgid "Calling from unknown number" msgstr "" #: approver/approver.cpp:482 #, qt-format msgid "Calling from %1" msgstr "" #: approver/approver.cpp:529 msgid "Hold + Answer" msgstr "" #: approver/approver.cpp:530 msgid "Accept" msgstr "" #: approver/approver.cpp:543 msgid "End + Answer" msgstr "" #: approver/approver.cpp:552 msgid "Decline" msgstr "" #: approver/approver.cpp:560 msgid "Message & decline" msgstr "" #: approver/main.cpp:46 msgid "Telephony Service Approver" msgstr "" #: indicator/authhandler.cpp:72 msgid "Authentication failed. Do you want to review your credentials?" msgstr "" #: indicator/authhandler.cpp:91 msgid "Yes" msgstr "" #: indicator/authhandler.cpp:94 msgid "No" msgstr "" #: indicator/displaynamesettings.cpp:35 #, qt-format msgid "SIM %1" msgstr "" #: indicator/main.cpp:53 msgid "Telephony Service Indicator" msgstr "" #: indicator/messagingmenu.cpp:83 indicator/messagingmenu.cpp:87 msgid "Telephony Service" msgstr "" #: indicator/messagingmenu.cpp:151 indicator/messagingmenu.cpp:293 #: indicator/messagingmenu.cpp:360 msgid "Send" msgstr "" #. TRANSLATORS : %1 is the group name and %2 is the recipient name #: indicator/messagingmenu.cpp:262 indicator/textchannelobserver.cpp:671 #: indicator/textchannelobserver.cpp:675 #, qt-format msgid "Message to %1 from %2" msgstr "" #. TRANSLATORS : %1 is the recipient name #: indicator/messagingmenu.cpp:265 indicator/messagingmenu.cpp:269 #, qt-format msgid "Message to the group from %1" msgstr "" #: indicator/messagingmenu.cpp:345 msgid "Call back" msgstr "" #: indicator/messagingmenu.cpp:350 msgid "Missed your call — can you call me now?" msgstr "" #: indicator/messagingmenu.cpp:351 msgid "Running late. On my way." msgstr "" #: indicator/messagingmenu.cpp:352 msgid "Busy at the moment. Will call you later." msgstr "" #: indicator/messagingmenu.cpp:353 msgid "I am 20 minutes late." msgstr "" #: indicator/messagingmenu.cpp:354 msgid "Still busy. Will call you later." msgstr "" #: indicator/messagingmenu.cpp:409 #, qt-format msgid "%1 missed call" msgid_plural "%1 missed calls" msgstr[0] "" msgstr[1] "" #: indicator/messagingmenu.cpp:492 msgid "Voicemail messages" msgstr "" #: indicator/messagingmenu.cpp:495 #, qt-format msgid "%1 voicemail message" msgid_plural "%1 voicemail messages" msgstr[0] "" msgstr[1] "" #: indicator/messagingmenu.cpp:500 msgid "Voicemail" msgstr "" #: indicator/metrics.cpp:42 #, qt-format msgid "%1 text messages sent today" msgstr "" #: indicator/metrics.cpp:43 msgid "No text messages sent today" msgstr "" #: indicator/metrics.cpp:44 #, qt-format msgid "%1 text messages received today" msgstr "" #: indicator/metrics.cpp:45 msgid "No text messages received today" msgstr "" #: indicator/metrics.cpp:46 #, qt-format msgid "%1 calls received today" msgstr "" #: indicator/metrics.cpp:47 msgid "No calls received today" msgstr "" #: indicator/metrics.cpp:48 #, qt-format msgid "%1 calls made today" msgstr "" #: indicator/metrics.cpp:49 indicator/metrics.cpp:51 msgid "No calls made today" msgstr "" #: indicator/metrics.cpp:50 #, qt-format msgid "Spent %1 minutes in calls today" msgstr "" #: indicator/textchannelobserver.cpp:225 msgid "Unlock your sim card and try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:227 msgid "Deactivate flight mode and try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:230 msgid "Try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:236 msgid "The message could not be sent" msgstr "" #: indicator/textchannelobserver.cpp:249 indicator/textchannelobserver.cpp:713 msgid "View message" msgstr "" #: indicator/textchannelobserver.cpp:295 msgid "New Group" msgstr "" #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:302 #, qt-format msgid "You joined group %1 " msgstr "" #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:306 #, qt-format msgid "You joined group %1" msgstr "" #: indicator/textchannelobserver.cpp:309 msgid "You joined a new group" msgstr "" #: indicator/textchannelobserver.cpp:328 msgid "View Group" msgstr "" #: indicator/textchannelobserver.cpp:367 indicator/ussdindicator.cpp:116 msgid "Ok" msgstr "" #: indicator/textchannelobserver.cpp:373 msgid "Save" msgstr "" #: indicator/textchannelobserver.cpp:468 msgid "Emergency Alert" msgstr "" #: indicator/textchannelobserver.cpp:471 msgid "Emergency Alert: Extreme" msgstr "" #: indicator/textchannelobserver.cpp:474 msgid "Emergency Alert: Severe" msgstr "" #: indicator/textchannelobserver.cpp:477 msgid "Emergency Alert: Notice" msgstr "" #: indicator/textchannelobserver.cpp:482 msgid "AMBER Alert" msgstr "" #: indicator/textchannelobserver.cpp:485 msgid "Alert" msgstr "" #: indicator/textchannelobserver.cpp:531 msgid "Show alert" msgstr "" #: indicator/textchannelobserver.cpp:604 #, qt-format msgid "Attachment: %1 image" msgid_plural "Attachments: %1 images" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:606 #, qt-format msgid "Attachment: %1 video" msgid_plural "Attachments: %1 videos" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:608 #, qt-format msgid "Attachment: %1 contact" msgid_plural "Attachments: %1 contacts" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:610 #, qt-format msgid "Attachment: %1 audio clip" msgid_plural "Attachments: %1 audio clips" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:612 #, qt-format msgid "Attachment: %1 file" msgid_plural "Attachments: %1 files" msgstr[0] "" msgstr[1] "" #. TRANSLATORS : message displayed when any error occurred while receiving a MMS (case when cellular-data is off, or any downloading issue). Notify that there was a message, the user can find more about it in the messaging-app. #: indicator/textchannelobserver.cpp:615 msgid "New MMS message" msgstr "" #. TRANSLATORS : %1 is the recipient name #: indicator/textchannelobserver.cpp:679 indicator/textchannelobserver.cpp:683 #, qt-format msgid "Message to group from %1" msgstr "" #: indicator/textchannelobserver.cpp:749 #, qt-format msgid "Message from %1" msgstr "" #: indicator/textchannelobserver.cpp:910 msgid "Please, select a SIM card:" msgstr "" #: indicator/ussdindicator.cpp:119 msgid "Reply" msgstr "" #: indicator/ussdindicator.cpp:142 msgid "Cancel" msgstr "" #: libtelephonyservice/callnotification.cpp:53 msgid "Conf call on hold" msgstr "" #: libtelephonyservice/callnotification.cpp:53 #, qt-format msgid "%1 call on hold" msgstr "" #: libtelephonyservice/callnotification.cpp:56 msgid "Conf call ended" msgstr "" #: libtelephonyservice/callnotification.cpp:56 #, qt-format msgid "%1 call ended" msgstr "" #: libtelephonyservice/callnotification.cpp:59 #, qt-format msgid "%1 call declined" msgstr "" #: libtelephonyservice/contactwatcher.cpp:157 msgid "Private Number" msgstr "" #: libtelephonyservice/contactwatcher.cpp:159 msgid "Unknown Number" msgstr "" telephony-service-0.5.3/po/co.po000066400000000000000000000207371455543255600165720ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR Canonical Ltd. # This file is distributed under the same license as the telephony-service package. # FIRST AUTHOR , YEAR. # msgid "" msgstr "" "Project-Id-Version: telephony-service\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-12-16 17:03+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: Automatically generated\n" "Language-Team: none\n" "Language: co\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" #: indicator/telephony-service-call.desktop.in:4 msgid "Phone Calls" msgstr "" #: indicator/telephony-service-sms.desktop.in:4 msgid "SMS" msgstr "" #: approver/approver.cpp:66 msgid "Unknown caller" msgstr "" #: approver/approver.cpp:94 msgid "I'm busy at the moment. I'll call later." msgstr "" #: approver/approver.cpp:95 msgid "I'm running late, on my way now." msgstr "" #: approver/approver.cpp:96 msgid "Please call me back later." msgstr "" #: approver/approver.cpp:457 #, qt-format msgid "On [%1]" msgstr "" #: approver/approver.cpp:461 indicator/messagingmenu.cpp:414 msgid "Private number" msgstr "" #: approver/approver.cpp:464 indicator/messagingmenu.cpp:244 #: indicator/messagingmenu.cpp:418 indicator/textchannelobserver.cpp:640 msgid "Unknown number" msgstr "" #: approver/approver.cpp:470 approver/approver.cpp:485 msgid "Caller number is not available" msgstr "" #: approver/approver.cpp:476 msgid "Calling from private number" msgstr "" #: approver/approver.cpp:479 msgid "Calling from unknown number" msgstr "" #: approver/approver.cpp:482 #, qt-format msgid "Calling from %1" msgstr "" #: approver/approver.cpp:529 msgid "Hold + Answer" msgstr "" #: approver/approver.cpp:530 msgid "Accept" msgstr "" #: approver/approver.cpp:543 msgid "End + Answer" msgstr "" #: approver/approver.cpp:552 msgid "Decline" msgstr "" #: approver/approver.cpp:560 msgid "Message & decline" msgstr "" #: approver/main.cpp:46 msgid "Telephony Service Approver" msgstr "" #: indicator/authhandler.cpp:72 msgid "Authentication failed. Do you want to review your credentials?" msgstr "" #: indicator/authhandler.cpp:91 msgid "Yes" msgstr "" #: indicator/authhandler.cpp:94 msgid "No" msgstr "" #: indicator/displaynamesettings.cpp:35 #, qt-format msgid "SIM %1" msgstr "" #: indicator/main.cpp:53 msgid "Telephony Service Indicator" msgstr "" #: indicator/messagingmenu.cpp:83 indicator/messagingmenu.cpp:87 msgid "Telephony Service" msgstr "" #: indicator/messagingmenu.cpp:151 indicator/messagingmenu.cpp:293 #: indicator/messagingmenu.cpp:360 msgid "Send" msgstr "" #. TRANSLATORS : %1 is the group name and %2 is the recipient name #: indicator/messagingmenu.cpp:262 indicator/textchannelobserver.cpp:671 #: indicator/textchannelobserver.cpp:675 #, qt-format msgid "Message to %1 from %2" msgstr "" #. TRANSLATORS : %1 is the recipient name #: indicator/messagingmenu.cpp:265 indicator/messagingmenu.cpp:269 #, qt-format msgid "Message to the group from %1" msgstr "" #: indicator/messagingmenu.cpp:345 msgid "Call back" msgstr "" #: indicator/messagingmenu.cpp:350 msgid "Missed your call — can you call me now?" msgstr "" #: indicator/messagingmenu.cpp:351 msgid "Running late. On my way." msgstr "" #: indicator/messagingmenu.cpp:352 msgid "Busy at the moment. Will call you later." msgstr "" #: indicator/messagingmenu.cpp:353 msgid "I am 20 minutes late." msgstr "" #: indicator/messagingmenu.cpp:354 msgid "Still busy. Will call you later." msgstr "" #: indicator/messagingmenu.cpp:409 #, qt-format msgid "%1 missed call" msgid_plural "%1 missed calls" msgstr[0] "" msgstr[1] "" #: indicator/messagingmenu.cpp:492 msgid "Voicemail messages" msgstr "" #: indicator/messagingmenu.cpp:495 #, qt-format msgid "%1 voicemail message" msgid_plural "%1 voicemail messages" msgstr[0] "" msgstr[1] "" #: indicator/messagingmenu.cpp:500 msgid "Voicemail" msgstr "" #: indicator/metrics.cpp:42 #, qt-format msgid "%1 text messages sent today" msgstr "" #: indicator/metrics.cpp:43 msgid "No text messages sent today" msgstr "" #: indicator/metrics.cpp:44 #, qt-format msgid "%1 text messages received today" msgstr "" #: indicator/metrics.cpp:45 msgid "No text messages received today" msgstr "" #: indicator/metrics.cpp:46 #, qt-format msgid "%1 calls received today" msgstr "" #: indicator/metrics.cpp:47 msgid "No calls received today" msgstr "" #: indicator/metrics.cpp:48 #, qt-format msgid "%1 calls made today" msgstr "" #: indicator/metrics.cpp:49 indicator/metrics.cpp:51 msgid "No calls made today" msgstr "" #: indicator/metrics.cpp:50 #, qt-format msgid "Spent %1 minutes in calls today" msgstr "" #: indicator/textchannelobserver.cpp:225 msgid "Unlock your sim card and try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:227 msgid "Deactivate flight mode and try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:230 msgid "Try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:236 msgid "The message could not be sent" msgstr "" #: indicator/textchannelobserver.cpp:249 indicator/textchannelobserver.cpp:713 msgid "View message" msgstr "" #: indicator/textchannelobserver.cpp:295 msgid "New Group" msgstr "" #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:302 #, qt-format msgid "You joined group %1 " msgstr "" #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:306 #, qt-format msgid "You joined group %1" msgstr "" #: indicator/textchannelobserver.cpp:309 msgid "You joined a new group" msgstr "" #: indicator/textchannelobserver.cpp:328 msgid "View Group" msgstr "" #: indicator/textchannelobserver.cpp:367 indicator/ussdindicator.cpp:116 msgid "Ok" msgstr "" #: indicator/textchannelobserver.cpp:373 msgid "Save" msgstr "" #: indicator/textchannelobserver.cpp:468 msgid "Emergency Alert" msgstr "" #: indicator/textchannelobserver.cpp:471 msgid "Emergency Alert: Extreme" msgstr "" #: indicator/textchannelobserver.cpp:474 msgid "Emergency Alert: Severe" msgstr "" #: indicator/textchannelobserver.cpp:477 msgid "Emergency Alert: Notice" msgstr "" #: indicator/textchannelobserver.cpp:482 msgid "AMBER Alert" msgstr "" #: indicator/textchannelobserver.cpp:485 msgid "Alert" msgstr "" #: indicator/textchannelobserver.cpp:531 msgid "Show alert" msgstr "" #: indicator/textchannelobserver.cpp:604 #, qt-format msgid "Attachment: %1 image" msgid_plural "Attachments: %1 images" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:606 #, qt-format msgid "Attachment: %1 video" msgid_plural "Attachments: %1 videos" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:608 #, qt-format msgid "Attachment: %1 contact" msgid_plural "Attachments: %1 contacts" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:610 #, qt-format msgid "Attachment: %1 audio clip" msgid_plural "Attachments: %1 audio clips" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:612 #, qt-format msgid "Attachment: %1 file" msgid_plural "Attachments: %1 files" msgstr[0] "" msgstr[1] "" #. TRANSLATORS : message displayed when any error occurred while receiving a MMS (case when cellular-data is off, or any downloading issue). Notify that there was a message, the user can find more about it in the messaging-app. #: indicator/textchannelobserver.cpp:615 msgid "New MMS message" msgstr "" #. TRANSLATORS : %1 is the recipient name #: indicator/textchannelobserver.cpp:679 indicator/textchannelobserver.cpp:683 #, qt-format msgid "Message to group from %1" msgstr "" #: indicator/textchannelobserver.cpp:749 #, qt-format msgid "Message from %1" msgstr "" #: indicator/textchannelobserver.cpp:910 msgid "Please, select a SIM card:" msgstr "" #: indicator/ussdindicator.cpp:119 msgid "Reply" msgstr "" #: indicator/ussdindicator.cpp:142 msgid "Cancel" msgstr "" #: libtelephonyservice/callnotification.cpp:53 msgid "Conf call on hold" msgstr "" #: libtelephonyservice/callnotification.cpp:53 #, qt-format msgid "%1 call on hold" msgstr "" #: libtelephonyservice/callnotification.cpp:56 msgid "Conf call ended" msgstr "" #: libtelephonyservice/callnotification.cpp:56 #, qt-format msgid "%1 call ended" msgstr "" #: libtelephonyservice/callnotification.cpp:59 #, qt-format msgid "%1 call declined" msgstr "" #: libtelephonyservice/contactwatcher.cpp:157 msgid "Private Number" msgstr "" #: libtelephonyservice/contactwatcher.cpp:159 msgid "Unknown Number" msgstr "" telephony-service-0.5.3/po/crh.po000066400000000000000000000207331455543255600167410ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR Canonical Ltd. # This file is distributed under the same license as the telephony-service package. # FIRST AUTHOR , YEAR. # msgid "" msgstr "" "Project-Id-Version: telephony-service\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-12-16 17:03+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: Automatically generated\n" "Language-Team: none\n" "Language: crh\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" #: indicator/telephony-service-call.desktop.in:4 msgid "Phone Calls" msgstr "" #: indicator/telephony-service-sms.desktop.in:4 msgid "SMS" msgstr "" #: approver/approver.cpp:66 msgid "Unknown caller" msgstr "" #: approver/approver.cpp:94 msgid "I'm busy at the moment. I'll call later." msgstr "" #: approver/approver.cpp:95 msgid "I'm running late, on my way now." msgstr "" #: approver/approver.cpp:96 msgid "Please call me back later." msgstr "" #: approver/approver.cpp:457 #, qt-format msgid "On [%1]" msgstr "" #: approver/approver.cpp:461 indicator/messagingmenu.cpp:414 msgid "Private number" msgstr "" #: approver/approver.cpp:464 indicator/messagingmenu.cpp:244 #: indicator/messagingmenu.cpp:418 indicator/textchannelobserver.cpp:640 msgid "Unknown number" msgstr "" #: approver/approver.cpp:470 approver/approver.cpp:485 msgid "Caller number is not available" msgstr "" #: approver/approver.cpp:476 msgid "Calling from private number" msgstr "" #: approver/approver.cpp:479 msgid "Calling from unknown number" msgstr "" #: approver/approver.cpp:482 #, qt-format msgid "Calling from %1" msgstr "" #: approver/approver.cpp:529 msgid "Hold + Answer" msgstr "" #: approver/approver.cpp:530 msgid "Accept" msgstr "" #: approver/approver.cpp:543 msgid "End + Answer" msgstr "" #: approver/approver.cpp:552 msgid "Decline" msgstr "" #: approver/approver.cpp:560 msgid "Message & decline" msgstr "" #: approver/main.cpp:46 msgid "Telephony Service Approver" msgstr "" #: indicator/authhandler.cpp:72 msgid "Authentication failed. Do you want to review your credentials?" msgstr "" #: indicator/authhandler.cpp:91 msgid "Yes" msgstr "" #: indicator/authhandler.cpp:94 msgid "No" msgstr "" #: indicator/displaynamesettings.cpp:35 #, qt-format msgid "SIM %1" msgstr "" #: indicator/main.cpp:53 msgid "Telephony Service Indicator" msgstr "" #: indicator/messagingmenu.cpp:83 indicator/messagingmenu.cpp:87 msgid "Telephony Service" msgstr "" #: indicator/messagingmenu.cpp:151 indicator/messagingmenu.cpp:293 #: indicator/messagingmenu.cpp:360 msgid "Send" msgstr "" #. TRANSLATORS : %1 is the group name and %2 is the recipient name #: indicator/messagingmenu.cpp:262 indicator/textchannelobserver.cpp:671 #: indicator/textchannelobserver.cpp:675 #, qt-format msgid "Message to %1 from %2" msgstr "" #. TRANSLATORS : %1 is the recipient name #: indicator/messagingmenu.cpp:265 indicator/messagingmenu.cpp:269 #, qt-format msgid "Message to the group from %1" msgstr "" #: indicator/messagingmenu.cpp:345 msgid "Call back" msgstr "" #: indicator/messagingmenu.cpp:350 msgid "Missed your call — can you call me now?" msgstr "" #: indicator/messagingmenu.cpp:351 msgid "Running late. On my way." msgstr "" #: indicator/messagingmenu.cpp:352 msgid "Busy at the moment. Will call you later." msgstr "" #: indicator/messagingmenu.cpp:353 msgid "I am 20 minutes late." msgstr "" #: indicator/messagingmenu.cpp:354 msgid "Still busy. Will call you later." msgstr "" #: indicator/messagingmenu.cpp:409 #, qt-format msgid "%1 missed call" msgid_plural "%1 missed calls" msgstr[0] "" msgstr[1] "" #: indicator/messagingmenu.cpp:492 msgid "Voicemail messages" msgstr "" #: indicator/messagingmenu.cpp:495 #, qt-format msgid "%1 voicemail message" msgid_plural "%1 voicemail messages" msgstr[0] "" msgstr[1] "" #: indicator/messagingmenu.cpp:500 msgid "Voicemail" msgstr "" #: indicator/metrics.cpp:42 #, qt-format msgid "%1 text messages sent today" msgstr "" #: indicator/metrics.cpp:43 msgid "No text messages sent today" msgstr "" #: indicator/metrics.cpp:44 #, qt-format msgid "%1 text messages received today" msgstr "" #: indicator/metrics.cpp:45 msgid "No text messages received today" msgstr "" #: indicator/metrics.cpp:46 #, qt-format msgid "%1 calls received today" msgstr "" #: indicator/metrics.cpp:47 msgid "No calls received today" msgstr "" #: indicator/metrics.cpp:48 #, qt-format msgid "%1 calls made today" msgstr "" #: indicator/metrics.cpp:49 indicator/metrics.cpp:51 msgid "No calls made today" msgstr "" #: indicator/metrics.cpp:50 #, qt-format msgid "Spent %1 minutes in calls today" msgstr "" #: indicator/textchannelobserver.cpp:225 msgid "Unlock your sim card and try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:227 msgid "Deactivate flight mode and try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:230 msgid "Try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:236 msgid "The message could not be sent" msgstr "" #: indicator/textchannelobserver.cpp:249 indicator/textchannelobserver.cpp:713 msgid "View message" msgstr "" #: indicator/textchannelobserver.cpp:295 msgid "New Group" msgstr "" #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:302 #, qt-format msgid "You joined group %1 " msgstr "" #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:306 #, qt-format msgid "You joined group %1" msgstr "" #: indicator/textchannelobserver.cpp:309 msgid "You joined a new group" msgstr "" #: indicator/textchannelobserver.cpp:328 msgid "View Group" msgstr "" #: indicator/textchannelobserver.cpp:367 indicator/ussdindicator.cpp:116 msgid "Ok" msgstr "" #: indicator/textchannelobserver.cpp:373 msgid "Save" msgstr "" #: indicator/textchannelobserver.cpp:468 msgid "Emergency Alert" msgstr "" #: indicator/textchannelobserver.cpp:471 msgid "Emergency Alert: Extreme" msgstr "" #: indicator/textchannelobserver.cpp:474 msgid "Emergency Alert: Severe" msgstr "" #: indicator/textchannelobserver.cpp:477 msgid "Emergency Alert: Notice" msgstr "" #: indicator/textchannelobserver.cpp:482 msgid "AMBER Alert" msgstr "" #: indicator/textchannelobserver.cpp:485 msgid "Alert" msgstr "" #: indicator/textchannelobserver.cpp:531 msgid "Show alert" msgstr "" #: indicator/textchannelobserver.cpp:604 #, qt-format msgid "Attachment: %1 image" msgid_plural "Attachments: %1 images" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:606 #, qt-format msgid "Attachment: %1 video" msgid_plural "Attachments: %1 videos" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:608 #, qt-format msgid "Attachment: %1 contact" msgid_plural "Attachments: %1 contacts" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:610 #, qt-format msgid "Attachment: %1 audio clip" msgid_plural "Attachments: %1 audio clips" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:612 #, qt-format msgid "Attachment: %1 file" msgid_plural "Attachments: %1 files" msgstr[0] "" msgstr[1] "" #. TRANSLATORS : message displayed when any error occurred while receiving a MMS (case when cellular-data is off, or any downloading issue). Notify that there was a message, the user can find more about it in the messaging-app. #: indicator/textchannelobserver.cpp:615 msgid "New MMS message" msgstr "" #. TRANSLATORS : %1 is the recipient name #: indicator/textchannelobserver.cpp:679 indicator/textchannelobserver.cpp:683 #, qt-format msgid "Message to group from %1" msgstr "" #: indicator/textchannelobserver.cpp:749 #, qt-format msgid "Message from %1" msgstr "" #: indicator/textchannelobserver.cpp:910 msgid "Please, select a SIM card:" msgstr "" #: indicator/ussdindicator.cpp:119 msgid "Reply" msgstr "" #: indicator/ussdindicator.cpp:142 msgid "Cancel" msgstr "" #: libtelephonyservice/callnotification.cpp:53 msgid "Conf call on hold" msgstr "" #: libtelephonyservice/callnotification.cpp:53 #, qt-format msgid "%1 call on hold" msgstr "" #: libtelephonyservice/callnotification.cpp:56 msgid "Conf call ended" msgstr "" #: libtelephonyservice/callnotification.cpp:56 #, qt-format msgid "%1 call ended" msgstr "" #: libtelephonyservice/callnotification.cpp:59 #, qt-format msgid "%1 call declined" msgstr "" #: libtelephonyservice/contactwatcher.cpp:157 msgid "Private Number" msgstr "" #: libtelephonyservice/contactwatcher.cpp:159 msgid "Unknown Number" msgstr "" telephony-service-0.5.3/po/cs.po000066400000000000000000000275171455543255600166010ustar00rootroot00000000000000# Czech translation for telephony-service # Copyright (c) 2015 Rosetta Contributors and Canonical Ltd 2015 # This file is distributed under the same license as the telephony-service package. # FIRST AUTHOR , 2015. # msgid "" msgstr "" "Project-Id-Version: telephony-service\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-12-16 17:03+0100\n" "PO-Revision-Date: 2023-03-30 13:46+0000\n" "Last-Translator: Jozef Mlich \n" "Language-Team: Czech \n" "Language: cs\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" "X-Generator: Weblate 4.17-dev\n" "X-Launchpad-Export-Date: 2017-01-04 06:02+0000\n" #: indicator/telephony-service-call.desktop.in:4 msgid "Phone Calls" msgstr "Telefonní hovory" #: indicator/telephony-service-sms.desktop.in:4 msgid "SMS" msgstr "SMS" #: approver/approver.cpp:66 msgid "Unknown caller" msgstr "Neznámý volající" #: approver/approver.cpp:94 msgid "I'm busy at the moment. I'll call later." msgstr "Momentálně jsem zaneprázdněný. Zavolám později." #: approver/approver.cpp:95 msgid "I'm running late, on my way now." msgstr "Mám zpoždění, jsem na cestě." #: approver/approver.cpp:96 msgid "Please call me back later." msgstr "Prosím, zavolete mi později." #: approver/approver.cpp:457 #, qt-format msgid "On [%1]" msgstr "Na [%1]" #: approver/approver.cpp:461 indicator/messagingmenu.cpp:414 msgid "Private number" msgstr "Soukromé číslo" #: approver/approver.cpp:464 indicator/messagingmenu.cpp:244 #: indicator/messagingmenu.cpp:418 indicator/textchannelobserver.cpp:640 msgid "Unknown number" msgstr "Neznámé číslo" #: approver/approver.cpp:470 approver/approver.cpp:485 msgid "Caller number is not available" msgstr "Číslo volajícího není dostupné" #: approver/approver.cpp:476 msgid "Calling from private number" msgstr "Volání ze soukromého čísla" #: approver/approver.cpp:479 msgid "Calling from unknown number" msgstr "Volání z neznámého čísla" #: approver/approver.cpp:482 #, qt-format msgid "Calling from %1" msgstr "Volání z %1" #: approver/approver.cpp:529 msgid "Hold + Answer" msgstr "Podržet + Odpověď" #: approver/approver.cpp:530 msgid "Accept" msgstr "Příjmout" #: approver/approver.cpp:543 msgid "End + Answer" msgstr "Ukončit + Odpověď" #: approver/approver.cpp:552 msgid "Decline" msgstr "Odmítnout" #: approver/approver.cpp:560 msgid "Message & decline" msgstr "Zpráva & odmítnout" #: approver/main.cpp:46 msgid "Telephony Service Approver" msgstr "Potvrzení telefonního servisu" #: indicator/authhandler.cpp:72 msgid "Authentication failed. Do you want to review your credentials?" msgstr "Ověření selhalo. Chcete zkontrolovat své přihlašovací údaje?" #: indicator/authhandler.cpp:91 msgid "Yes" msgstr "Ano" #: indicator/authhandler.cpp:94 msgid "No" msgstr "Ne" #: indicator/displaynamesettings.cpp:35 #, qt-format msgid "SIM %1" msgstr "SIM %1" #: indicator/main.cpp:53 msgid "Telephony Service Indicator" msgstr "Indikátor telefonního servisu" #: indicator/messagingmenu.cpp:83 indicator/messagingmenu.cpp:87 msgid "Telephony Service" msgstr "Telefonní servis" #: indicator/messagingmenu.cpp:151 indicator/messagingmenu.cpp:293 #: indicator/messagingmenu.cpp:360 msgid "Send" msgstr "Odeslat" #. TRANSLATORS : %1 is the group name and %2 is the recipient name #: indicator/messagingmenu.cpp:262 indicator/textchannelobserver.cpp:671 #: indicator/textchannelobserver.cpp:675 #, qt-format msgid "Message to %1 from %2" msgstr "Zpráva pro %1 od %2" #. TRANSLATORS : %1 is the recipient name #: indicator/messagingmenu.cpp:265 indicator/messagingmenu.cpp:269 #, qt-format msgid "Message to the group from %1" msgstr "Zpráva pro skupinu od %1" #: indicator/messagingmenu.cpp:345 msgid "Call back" msgstr "Zavolat zpět" #: indicator/messagingmenu.cpp:350 msgid "Missed your call — can you call me now?" msgstr "Zmeškal jsem Tvůj hovor. Můžeš mi zavolat nyní?" #: indicator/messagingmenu.cpp:351 msgid "Running late. On my way." msgstr "Mám zpoždění. Už jsem na cestě." #: indicator/messagingmenu.cpp:352 msgid "Busy at the moment. Will call you later." msgstr "Momentálně jsem zaneprázdněný. Zavolám Ti později." #: indicator/messagingmenu.cpp:353 msgid "I am 20 minutes late." msgstr "Budu mít 20 minut zpoždění." #: indicator/messagingmenu.cpp:354 msgid "Still busy. Will call you later." msgstr "Omlouvám se, stále jsem zaneprázdněn. Zavolám Vám později." #: indicator/messagingmenu.cpp:409 #, qt-format msgid "%1 missed call" msgid_plural "%1 missed calls" msgstr[0] "%1 zmeškaný hovor" msgstr[1] "%1 zmeškaných hovorů" msgstr[2] "%1 zmeškané hovory" #: indicator/messagingmenu.cpp:492 msgid "Voicemail messages" msgstr "Hlasové zprávy" #: indicator/messagingmenu.cpp:495 #, qt-format msgid "%1 voicemail message" msgid_plural "%1 voicemail messages" msgstr[0] "%1 hlasová zpráva" msgstr[1] "%1 hlasových zpráv" msgstr[2] "%1 hlasové zprávy" #: indicator/messagingmenu.cpp:500 msgid "Voicemail" msgstr "Hlasová schránka" #: indicator/metrics.cpp:42 #, qt-format msgid "%1 text messages sent today" msgstr "%1 dnes odeslaných textových zpráv" #: indicator/metrics.cpp:43 msgid "No text messages sent today" msgstr "Dnes nebyly odeslány žádné textové zprávy" #: indicator/metrics.cpp:44 #, qt-format msgid "%1 text messages received today" msgstr "%1 dnes přijatých textových zpráv" #: indicator/metrics.cpp:45 msgid "No text messages received today" msgstr "Dnes nebyly přijaty žádné textové zprávy" #: indicator/metrics.cpp:46 #, qt-format msgid "%1 calls received today" msgstr "%1 dnes přijatých hovorů" #: indicator/metrics.cpp:47 msgid "No calls received today" msgstr "Dnes nebyly přijaty žádné hovory" #: indicator/metrics.cpp:48 #, qt-format msgid "%1 calls made today" msgstr "%1 dnes realizovaných hovorů" #: indicator/metrics.cpp:49 indicator/metrics.cpp:51 msgid "No calls made today" msgstr "Dnes nebyly uskutečněny žádné hovory" #: indicator/metrics.cpp:50 #, qt-format msgid "Spent %1 minutes in calls today" msgstr "Dnes jste telefonoval %1 minut" #: indicator/textchannelobserver.cpp:225 msgid "Unlock your sim card and try again from the messaging application." msgstr "" "Odemkněte svou sim kartu a zkuste zprávu odeslat znovu z aplikace zpráv." #: indicator/textchannelobserver.cpp:227 msgid "Deactivate flight mode and try again from the messaging application." msgstr "Deaktivujte režim letadla a zkuste zprávu odeslat znovu." #: indicator/textchannelobserver.cpp:230 msgid "Try again from the messaging application." msgstr "Zkuste znovu z aplikace zpráv." #: indicator/textchannelobserver.cpp:236 msgid "The message could not be sent" msgstr "Zpráva nemohla být odeslána" #: indicator/textchannelobserver.cpp:249 indicator/textchannelobserver.cpp:713 msgid "View message" msgstr "Zobrazit zprávu" #: indicator/textchannelobserver.cpp:295 msgid "New Group" msgstr "Nová skupina" #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:302 #, qt-format msgid "You joined group %1 " msgstr "Připojili jste se ke skupině %1 " #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:306 #, qt-format msgid "You joined group %1" msgstr "Připojili jste se ke skupině %1" #: indicator/textchannelobserver.cpp:309 msgid "You joined a new group" msgstr "Připojili jste se k nové skupině" #: indicator/textchannelobserver.cpp:328 msgid "View Group" msgstr "Zobrazit skupinu" #: indicator/textchannelobserver.cpp:367 indicator/ussdindicator.cpp:116 msgid "Ok" msgstr "Přijmout" #: indicator/textchannelobserver.cpp:373 msgid "Save" msgstr "Uložit" #: indicator/textchannelobserver.cpp:468 msgid "Emergency Alert" msgstr "Nouzové upozornění" #: indicator/textchannelobserver.cpp:471 msgid "Emergency Alert: Extreme" msgstr "Nouzové upozornění: Extrémní" #: indicator/textchannelobserver.cpp:474 msgid "Emergency Alert: Severe" msgstr "Nouzové upozornění: Vážné" #: indicator/textchannelobserver.cpp:477 msgid "Emergency Alert: Notice" msgstr "Nouzové upozornění: Oznámení" #: indicator/textchannelobserver.cpp:482 msgid "AMBER Alert" msgstr "únos dítěte" #: indicator/textchannelobserver.cpp:485 msgid "Alert" msgstr "Výstražné upozorenění" #: indicator/textchannelobserver.cpp:531 msgid "Show alert" msgstr "Zobrazovat výstražné upozornění" #: indicator/textchannelobserver.cpp:604 #, qt-format msgid "Attachment: %1 image" msgid_plural "Attachments: %1 images" msgstr[0] "Příloha: %1 obrázek" msgstr[1] "Přílohy: %1 obrázky" msgstr[2] "Přílohy: %1 obrázků" #: indicator/textchannelobserver.cpp:606 #, qt-format msgid "Attachment: %1 video" msgid_plural "Attachments: %1 videos" msgstr[0] "Příloha: %1 video" msgstr[1] "Přílohy: %1 videa" msgstr[2] "Přílohy: %1 videí" #: indicator/textchannelobserver.cpp:608 #, qt-format msgid "Attachment: %1 contact" msgid_plural "Attachments: %1 contacts" msgstr[0] "Příloha: %1 kontakt" msgstr[1] "Přílohy: %1 kontakty" msgstr[2] "Přílohy: %1 kontaktů" #: indicator/textchannelobserver.cpp:610 #, qt-format msgid "Attachment: %1 audio clip" msgid_plural "Attachments: %1 audio clips" msgstr[0] "Příloha: %1 audio soubor" msgstr[1] "Přílohy: %1 audio soubory" msgstr[2] "Přílohy: %1 audio souborů" #: indicator/textchannelobserver.cpp:612 #, qt-format msgid "Attachment: %1 file" msgid_plural "Attachments: %1 files" msgstr[0] "Příloha: %1 soubor" msgstr[1] "Přílohy: %1 soubory" msgstr[2] "Přílohy: %1 souborů" #. TRANSLATORS : message displayed when any error occurred while receiving a MMS (case when cellular-data is off, or any downloading issue). Notify that there was a message, the user can find more about it in the messaging-app. #: indicator/textchannelobserver.cpp:615 msgid "New MMS message" msgstr "Nová MMS zpráva" #. TRANSLATORS : %1 is the recipient name #: indicator/textchannelobserver.cpp:679 indicator/textchannelobserver.cpp:683 #, qt-format msgid "Message to group from %1" msgstr "Zpráva pro skupinu od %1" #: indicator/textchannelobserver.cpp:749 #, qt-format msgid "Message from %1" msgstr "Zpráva od %1" #: indicator/textchannelobserver.cpp:910 msgid "Please, select a SIM card:" msgstr "Prosím, vložte SIM kartu:" #: indicator/ussdindicator.cpp:119 msgid "Reply" msgstr "Odpovědět" #: indicator/ussdindicator.cpp:142 msgid "Cancel" msgstr "Zrušit" #: libtelephonyservice/callnotification.cpp:53 msgid "Conf call on hold" msgstr "Podržen konferenční hovor" #: libtelephonyservice/callnotification.cpp:53 #, qt-format msgid "%1 call on hold" msgstr "Hovor %1 podržen" #: libtelephonyservice/callnotification.cpp:56 msgid "Conf call ended" msgstr "Konferenční hovor skončil" #: libtelephonyservice/callnotification.cpp:56 #, qt-format msgid "%1 call ended" msgstr "Hovor %1 skončil" #: libtelephonyservice/callnotification.cpp:59 #, qt-format msgid "%1 call declined" msgstr "Hovor %1 byl odmítnut" #: libtelephonyservice/contactwatcher.cpp:157 msgid "Private Number" msgstr "Soukromé číslo" #: libtelephonyservice/contactwatcher.cpp:159 msgid "Unknown Number" msgstr "Neznámé číslo" #~ msgid "telephony-service-call" #~ msgstr "Služba telefonování" #~ msgid "telephony-service-message" #~ msgstr "Služba odesílání zpráv" #~ msgid "" #~ "Oops, there has been an error with the MMS system and this message could " #~ "not be retrieved. Please ensure Cellular Data is ON and MMS settings are " #~ "correct, then ask the sender to try again." #~ msgstr "" #~ "Jejda, v systému MMS došlo k chybě a tuto zprávu nelze načíst. " #~ "Zkontrolujte, zda jsou mobilní data ZAPNUTÁ a nastavení MMS jsou správná, " #~ "a poté požádejte odesílatele, aby to zkusil znovu." telephony-service-0.5.3/po/csb.po000066400000000000000000000210351455543255600167300ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR Canonical Ltd. # This file is distributed under the same license as the telephony-service package. # FIRST AUTHOR , YEAR. # msgid "" msgstr "" "Project-Id-Version: telephony-service\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-12-16 17:03+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: Automatically generated\n" "Language-Team: none\n" "Language: csb\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 " "|| n%100>=20) ? 1 : 2;\n" #: indicator/telephony-service-call.desktop.in:4 msgid "Phone Calls" msgstr "" #: indicator/telephony-service-sms.desktop.in:4 msgid "SMS" msgstr "" #: approver/approver.cpp:66 msgid "Unknown caller" msgstr "" #: approver/approver.cpp:94 msgid "I'm busy at the moment. I'll call later." msgstr "" #: approver/approver.cpp:95 msgid "I'm running late, on my way now." msgstr "" #: approver/approver.cpp:96 msgid "Please call me back later." msgstr "" #: approver/approver.cpp:457 #, qt-format msgid "On [%1]" msgstr "" #: approver/approver.cpp:461 indicator/messagingmenu.cpp:414 msgid "Private number" msgstr "" #: approver/approver.cpp:464 indicator/messagingmenu.cpp:244 #: indicator/messagingmenu.cpp:418 indicator/textchannelobserver.cpp:640 msgid "Unknown number" msgstr "" #: approver/approver.cpp:470 approver/approver.cpp:485 msgid "Caller number is not available" msgstr "" #: approver/approver.cpp:476 msgid "Calling from private number" msgstr "" #: approver/approver.cpp:479 msgid "Calling from unknown number" msgstr "" #: approver/approver.cpp:482 #, qt-format msgid "Calling from %1" msgstr "" #: approver/approver.cpp:529 msgid "Hold + Answer" msgstr "" #: approver/approver.cpp:530 msgid "Accept" msgstr "" #: approver/approver.cpp:543 msgid "End + Answer" msgstr "" #: approver/approver.cpp:552 msgid "Decline" msgstr "" #: approver/approver.cpp:560 msgid "Message & decline" msgstr "" #: approver/main.cpp:46 msgid "Telephony Service Approver" msgstr "" #: indicator/authhandler.cpp:72 msgid "Authentication failed. Do you want to review your credentials?" msgstr "" #: indicator/authhandler.cpp:91 msgid "Yes" msgstr "" #: indicator/authhandler.cpp:94 msgid "No" msgstr "" #: indicator/displaynamesettings.cpp:35 #, qt-format msgid "SIM %1" msgstr "" #: indicator/main.cpp:53 msgid "Telephony Service Indicator" msgstr "" #: indicator/messagingmenu.cpp:83 indicator/messagingmenu.cpp:87 msgid "Telephony Service" msgstr "" #: indicator/messagingmenu.cpp:151 indicator/messagingmenu.cpp:293 #: indicator/messagingmenu.cpp:360 msgid "Send" msgstr "" #. TRANSLATORS : %1 is the group name and %2 is the recipient name #: indicator/messagingmenu.cpp:262 indicator/textchannelobserver.cpp:671 #: indicator/textchannelobserver.cpp:675 #, qt-format msgid "Message to %1 from %2" msgstr "" #. TRANSLATORS : %1 is the recipient name #: indicator/messagingmenu.cpp:265 indicator/messagingmenu.cpp:269 #, qt-format msgid "Message to the group from %1" msgstr "" #: indicator/messagingmenu.cpp:345 msgid "Call back" msgstr "" #: indicator/messagingmenu.cpp:350 msgid "Missed your call — can you call me now?" msgstr "" #: indicator/messagingmenu.cpp:351 msgid "Running late. On my way." msgstr "" #: indicator/messagingmenu.cpp:352 msgid "Busy at the moment. Will call you later." msgstr "" #: indicator/messagingmenu.cpp:353 msgid "I am 20 minutes late." msgstr "" #: indicator/messagingmenu.cpp:354 msgid "Still busy. Will call you later." msgstr "" #: indicator/messagingmenu.cpp:409 #, qt-format msgid "%1 missed call" msgid_plural "%1 missed calls" msgstr[0] "" msgstr[1] "" #: indicator/messagingmenu.cpp:492 msgid "Voicemail messages" msgstr "" #: indicator/messagingmenu.cpp:495 #, qt-format msgid "%1 voicemail message" msgid_plural "%1 voicemail messages" msgstr[0] "" msgstr[1] "" #: indicator/messagingmenu.cpp:500 msgid "Voicemail" msgstr "" #: indicator/metrics.cpp:42 #, qt-format msgid "%1 text messages sent today" msgstr "" #: indicator/metrics.cpp:43 msgid "No text messages sent today" msgstr "" #: indicator/metrics.cpp:44 #, qt-format msgid "%1 text messages received today" msgstr "" #: indicator/metrics.cpp:45 msgid "No text messages received today" msgstr "" #: indicator/metrics.cpp:46 #, qt-format msgid "%1 calls received today" msgstr "" #: indicator/metrics.cpp:47 msgid "No calls received today" msgstr "" #: indicator/metrics.cpp:48 #, qt-format msgid "%1 calls made today" msgstr "" #: indicator/metrics.cpp:49 indicator/metrics.cpp:51 msgid "No calls made today" msgstr "" #: indicator/metrics.cpp:50 #, qt-format msgid "Spent %1 minutes in calls today" msgstr "" #: indicator/textchannelobserver.cpp:225 msgid "Unlock your sim card and try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:227 msgid "Deactivate flight mode and try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:230 msgid "Try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:236 msgid "The message could not be sent" msgstr "" #: indicator/textchannelobserver.cpp:249 indicator/textchannelobserver.cpp:713 msgid "View message" msgstr "" #: indicator/textchannelobserver.cpp:295 msgid "New Group" msgstr "" #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:302 #, qt-format msgid "You joined group %1 " msgstr "" #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:306 #, qt-format msgid "You joined group %1" msgstr "" #: indicator/textchannelobserver.cpp:309 msgid "You joined a new group" msgstr "" #: indicator/textchannelobserver.cpp:328 msgid "View Group" msgstr "" #: indicator/textchannelobserver.cpp:367 indicator/ussdindicator.cpp:116 msgid "Ok" msgstr "" #: indicator/textchannelobserver.cpp:373 msgid "Save" msgstr "" #: indicator/textchannelobserver.cpp:468 msgid "Emergency Alert" msgstr "" #: indicator/textchannelobserver.cpp:471 msgid "Emergency Alert: Extreme" msgstr "" #: indicator/textchannelobserver.cpp:474 msgid "Emergency Alert: Severe" msgstr "" #: indicator/textchannelobserver.cpp:477 msgid "Emergency Alert: Notice" msgstr "" #: indicator/textchannelobserver.cpp:482 msgid "AMBER Alert" msgstr "" #: indicator/textchannelobserver.cpp:485 msgid "Alert" msgstr "" #: indicator/textchannelobserver.cpp:531 msgid "Show alert" msgstr "" #: indicator/textchannelobserver.cpp:604 #, qt-format msgid "Attachment: %1 image" msgid_plural "Attachments: %1 images" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:606 #, qt-format msgid "Attachment: %1 video" msgid_plural "Attachments: %1 videos" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:608 #, qt-format msgid "Attachment: %1 contact" msgid_plural "Attachments: %1 contacts" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:610 #, qt-format msgid "Attachment: %1 audio clip" msgid_plural "Attachments: %1 audio clips" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:612 #, qt-format msgid "Attachment: %1 file" msgid_plural "Attachments: %1 files" msgstr[0] "" msgstr[1] "" #. TRANSLATORS : message displayed when any error occurred while receiving a MMS (case when cellular-data is off, or any downloading issue). Notify that there was a message, the user can find more about it in the messaging-app. #: indicator/textchannelobserver.cpp:615 msgid "New MMS message" msgstr "" #. TRANSLATORS : %1 is the recipient name #: indicator/textchannelobserver.cpp:679 indicator/textchannelobserver.cpp:683 #, qt-format msgid "Message to group from %1" msgstr "" #: indicator/textchannelobserver.cpp:749 #, qt-format msgid "Message from %1" msgstr "" #: indicator/textchannelobserver.cpp:910 msgid "Please, select a SIM card:" msgstr "" #: indicator/ussdindicator.cpp:119 msgid "Reply" msgstr "" #: indicator/ussdindicator.cpp:142 msgid "Cancel" msgstr "" #: libtelephonyservice/callnotification.cpp:53 msgid "Conf call on hold" msgstr "" #: libtelephonyservice/callnotification.cpp:53 #, qt-format msgid "%1 call on hold" msgstr "" #: libtelephonyservice/callnotification.cpp:56 msgid "Conf call ended" msgstr "" #: libtelephonyservice/callnotification.cpp:56 #, qt-format msgid "%1 call ended" msgstr "" #: libtelephonyservice/callnotification.cpp:59 #, qt-format msgid "%1 call declined" msgstr "" #: libtelephonyservice/contactwatcher.cpp:157 msgid "Private Number" msgstr "" #: libtelephonyservice/contactwatcher.cpp:159 msgid "Unknown Number" msgstr "" telephony-service-0.5.3/po/cv.po000066400000000000000000000207371455543255600166010ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR Canonical Ltd. # This file is distributed under the same license as the telephony-service package. # FIRST AUTHOR , YEAR. # msgid "" msgstr "" "Project-Id-Version: telephony-service\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-12-16 17:03+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: Automatically generated\n" "Language-Team: none\n" "Language: cv\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" #: indicator/telephony-service-call.desktop.in:4 msgid "Phone Calls" msgstr "" #: indicator/telephony-service-sms.desktop.in:4 msgid "SMS" msgstr "" #: approver/approver.cpp:66 msgid "Unknown caller" msgstr "" #: approver/approver.cpp:94 msgid "I'm busy at the moment. I'll call later." msgstr "" #: approver/approver.cpp:95 msgid "I'm running late, on my way now." msgstr "" #: approver/approver.cpp:96 msgid "Please call me back later." msgstr "" #: approver/approver.cpp:457 #, qt-format msgid "On [%1]" msgstr "" #: approver/approver.cpp:461 indicator/messagingmenu.cpp:414 msgid "Private number" msgstr "" #: approver/approver.cpp:464 indicator/messagingmenu.cpp:244 #: indicator/messagingmenu.cpp:418 indicator/textchannelobserver.cpp:640 msgid "Unknown number" msgstr "" #: approver/approver.cpp:470 approver/approver.cpp:485 msgid "Caller number is not available" msgstr "" #: approver/approver.cpp:476 msgid "Calling from private number" msgstr "" #: approver/approver.cpp:479 msgid "Calling from unknown number" msgstr "" #: approver/approver.cpp:482 #, qt-format msgid "Calling from %1" msgstr "" #: approver/approver.cpp:529 msgid "Hold + Answer" msgstr "" #: approver/approver.cpp:530 msgid "Accept" msgstr "" #: approver/approver.cpp:543 msgid "End + Answer" msgstr "" #: approver/approver.cpp:552 msgid "Decline" msgstr "" #: approver/approver.cpp:560 msgid "Message & decline" msgstr "" #: approver/main.cpp:46 msgid "Telephony Service Approver" msgstr "" #: indicator/authhandler.cpp:72 msgid "Authentication failed. Do you want to review your credentials?" msgstr "" #: indicator/authhandler.cpp:91 msgid "Yes" msgstr "" #: indicator/authhandler.cpp:94 msgid "No" msgstr "" #: indicator/displaynamesettings.cpp:35 #, qt-format msgid "SIM %1" msgstr "" #: indicator/main.cpp:53 msgid "Telephony Service Indicator" msgstr "" #: indicator/messagingmenu.cpp:83 indicator/messagingmenu.cpp:87 msgid "Telephony Service" msgstr "" #: indicator/messagingmenu.cpp:151 indicator/messagingmenu.cpp:293 #: indicator/messagingmenu.cpp:360 msgid "Send" msgstr "" #. TRANSLATORS : %1 is the group name and %2 is the recipient name #: indicator/messagingmenu.cpp:262 indicator/textchannelobserver.cpp:671 #: indicator/textchannelobserver.cpp:675 #, qt-format msgid "Message to %1 from %2" msgstr "" #. TRANSLATORS : %1 is the recipient name #: indicator/messagingmenu.cpp:265 indicator/messagingmenu.cpp:269 #, qt-format msgid "Message to the group from %1" msgstr "" #: indicator/messagingmenu.cpp:345 msgid "Call back" msgstr "" #: indicator/messagingmenu.cpp:350 msgid "Missed your call — can you call me now?" msgstr "" #: indicator/messagingmenu.cpp:351 msgid "Running late. On my way." msgstr "" #: indicator/messagingmenu.cpp:352 msgid "Busy at the moment. Will call you later." msgstr "" #: indicator/messagingmenu.cpp:353 msgid "I am 20 minutes late." msgstr "" #: indicator/messagingmenu.cpp:354 msgid "Still busy. Will call you later." msgstr "" #: indicator/messagingmenu.cpp:409 #, qt-format msgid "%1 missed call" msgid_plural "%1 missed calls" msgstr[0] "" msgstr[1] "" #: indicator/messagingmenu.cpp:492 msgid "Voicemail messages" msgstr "" #: indicator/messagingmenu.cpp:495 #, qt-format msgid "%1 voicemail message" msgid_plural "%1 voicemail messages" msgstr[0] "" msgstr[1] "" #: indicator/messagingmenu.cpp:500 msgid "Voicemail" msgstr "" #: indicator/metrics.cpp:42 #, qt-format msgid "%1 text messages sent today" msgstr "" #: indicator/metrics.cpp:43 msgid "No text messages sent today" msgstr "" #: indicator/metrics.cpp:44 #, qt-format msgid "%1 text messages received today" msgstr "" #: indicator/metrics.cpp:45 msgid "No text messages received today" msgstr "" #: indicator/metrics.cpp:46 #, qt-format msgid "%1 calls received today" msgstr "" #: indicator/metrics.cpp:47 msgid "No calls received today" msgstr "" #: indicator/metrics.cpp:48 #, qt-format msgid "%1 calls made today" msgstr "" #: indicator/metrics.cpp:49 indicator/metrics.cpp:51 msgid "No calls made today" msgstr "" #: indicator/metrics.cpp:50 #, qt-format msgid "Spent %1 minutes in calls today" msgstr "" #: indicator/textchannelobserver.cpp:225 msgid "Unlock your sim card and try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:227 msgid "Deactivate flight mode and try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:230 msgid "Try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:236 msgid "The message could not be sent" msgstr "" #: indicator/textchannelobserver.cpp:249 indicator/textchannelobserver.cpp:713 msgid "View message" msgstr "" #: indicator/textchannelobserver.cpp:295 msgid "New Group" msgstr "" #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:302 #, qt-format msgid "You joined group %1 " msgstr "" #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:306 #, qt-format msgid "You joined group %1" msgstr "" #: indicator/textchannelobserver.cpp:309 msgid "You joined a new group" msgstr "" #: indicator/textchannelobserver.cpp:328 msgid "View Group" msgstr "" #: indicator/textchannelobserver.cpp:367 indicator/ussdindicator.cpp:116 msgid "Ok" msgstr "" #: indicator/textchannelobserver.cpp:373 msgid "Save" msgstr "" #: indicator/textchannelobserver.cpp:468 msgid "Emergency Alert" msgstr "" #: indicator/textchannelobserver.cpp:471 msgid "Emergency Alert: Extreme" msgstr "" #: indicator/textchannelobserver.cpp:474 msgid "Emergency Alert: Severe" msgstr "" #: indicator/textchannelobserver.cpp:477 msgid "Emergency Alert: Notice" msgstr "" #: indicator/textchannelobserver.cpp:482 msgid "AMBER Alert" msgstr "" #: indicator/textchannelobserver.cpp:485 msgid "Alert" msgstr "" #: indicator/textchannelobserver.cpp:531 msgid "Show alert" msgstr "" #: indicator/textchannelobserver.cpp:604 #, qt-format msgid "Attachment: %1 image" msgid_plural "Attachments: %1 images" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:606 #, qt-format msgid "Attachment: %1 video" msgid_plural "Attachments: %1 videos" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:608 #, qt-format msgid "Attachment: %1 contact" msgid_plural "Attachments: %1 contacts" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:610 #, qt-format msgid "Attachment: %1 audio clip" msgid_plural "Attachments: %1 audio clips" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:612 #, qt-format msgid "Attachment: %1 file" msgid_plural "Attachments: %1 files" msgstr[0] "" msgstr[1] "" #. TRANSLATORS : message displayed when any error occurred while receiving a MMS (case when cellular-data is off, or any downloading issue). Notify that there was a message, the user can find more about it in the messaging-app. #: indicator/textchannelobserver.cpp:615 msgid "New MMS message" msgstr "" #. TRANSLATORS : %1 is the recipient name #: indicator/textchannelobserver.cpp:679 indicator/textchannelobserver.cpp:683 #, qt-format msgid "Message to group from %1" msgstr "" #: indicator/textchannelobserver.cpp:749 #, qt-format msgid "Message from %1" msgstr "" #: indicator/textchannelobserver.cpp:910 msgid "Please, select a SIM card:" msgstr "" #: indicator/ussdindicator.cpp:119 msgid "Reply" msgstr "" #: indicator/ussdindicator.cpp:142 msgid "Cancel" msgstr "" #: libtelephonyservice/callnotification.cpp:53 msgid "Conf call on hold" msgstr "" #: libtelephonyservice/callnotification.cpp:53 #, qt-format msgid "%1 call on hold" msgstr "" #: libtelephonyservice/callnotification.cpp:56 msgid "Conf call ended" msgstr "" #: libtelephonyservice/callnotification.cpp:56 #, qt-format msgid "%1 call ended" msgstr "" #: libtelephonyservice/callnotification.cpp:59 #, qt-format msgid "%1 call declined" msgstr "" #: libtelephonyservice/contactwatcher.cpp:157 msgid "Private Number" msgstr "" #: libtelephonyservice/contactwatcher.cpp:159 msgid "Unknown Number" msgstr "" telephony-service-0.5.3/po/cy.po000066400000000000000000000250301455543255600165730ustar00rootroot00000000000000# Welsh translation for telephony-service # Copyright (c) 2015 Rosetta Contributors and Canonical Ltd 2015 # This file is distributed under the same license as the telephony-service package. # FIRST AUTHOR , 2015. # msgid "" msgstr "" "Project-Id-Version: telephony-service\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-12-16 17:03+0100\n" "PO-Revision-Date: 2015-07-19 22:43+0000\n" "Last-Translator: Owen Llywelyn \n" "Language-Team: Welsh \n" "Language: cy\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=4; plural=n==1 ? 0 : n==2 ? 1 : (n != 8 && n != 11) ? " "2 : 3;\n" "X-Launchpad-Export-Date: 2017-01-04 06:03+0000\n" "X-Generator: Launchpad (build 18298)\n" #: indicator/telephony-service-call.desktop.in:4 msgid "Phone Calls" msgstr "Galwadau Ffôn" #: indicator/telephony-service-sms.desktop.in:4 msgid "SMS" msgstr "SMS" #: approver/approver.cpp:66 msgid "Unknown caller" msgstr "Galwr anhysbys" #: approver/approver.cpp:94 msgid "I'm busy at the moment. I'll call later." msgstr "Rwy'n brysur nawr. Ffonia i wedyn." #: approver/approver.cpp:95 msgid "I'm running late, on my way now." msgstr "Rwy'n hwyr ond ar fy ffordd nawr." #: approver/approver.cpp:96 msgid "Please call me back later." msgstr "Ffoniwch fi wedyn." #: approver/approver.cpp:457 #, qt-format msgid "On [%1]" msgstr "" #: approver/approver.cpp:461 indicator/messagingmenu.cpp:414 msgid "Private number" msgstr "Rhif preifat" #: approver/approver.cpp:464 indicator/messagingmenu.cpp:244 #: indicator/messagingmenu.cpp:418 indicator/textchannelobserver.cpp:640 msgid "Unknown number" msgstr "Rhif anhysbys" #: approver/approver.cpp:470 approver/approver.cpp:485 msgid "Caller number is not available" msgstr "Rhif galw ddim ar gael" #: approver/approver.cpp:476 msgid "Calling from private number" msgstr "Yn galw o rif preifat" #: approver/approver.cpp:479 msgid "Calling from unknown number" msgstr "Yn galw o rif anhysbys" #: approver/approver.cpp:482 #, qt-format msgid "Calling from %1" msgstr "Yn galw o %1" #: approver/approver.cpp:529 msgid "Hold + Answer" msgstr "Dal + Ateb" #: approver/approver.cpp:530 msgid "Accept" msgstr "Derbyn" #: approver/approver.cpp:543 msgid "End + Answer" msgstr "Gorffen + Ateb" #: approver/approver.cpp:552 msgid "Decline" msgstr "Gwrthod" #: approver/approver.cpp:560 msgid "Message & decline" msgstr "Anfon neges & gwrthod" #: approver/main.cpp:46 msgid "Telephony Service Approver" msgstr "Darparwr Gwasanaeth Teleffoni" #: indicator/authhandler.cpp:72 msgid "Authentication failed. Do you want to review your credentials?" msgstr "" #: indicator/authhandler.cpp:91 msgid "Yes" msgstr "" #: indicator/authhandler.cpp:94 msgid "No" msgstr "" #: indicator/displaynamesettings.cpp:35 #, qt-format msgid "SIM %1" msgstr "SIM %1" #: indicator/main.cpp:53 msgid "Telephony Service Indicator" msgstr "Dangosydd Gwasanaeth Teleffoni" #: indicator/messagingmenu.cpp:83 indicator/messagingmenu.cpp:87 msgid "Telephony Service" msgstr "Gwasanaeth Teleffoni" #: indicator/messagingmenu.cpp:151 indicator/messagingmenu.cpp:293 #: indicator/messagingmenu.cpp:360 msgid "Send" msgstr "Anfon" #. TRANSLATORS : %1 is the group name and %2 is the recipient name #: indicator/messagingmenu.cpp:262 indicator/textchannelobserver.cpp:671 #: indicator/textchannelobserver.cpp:675 #, qt-format msgid "Message to %1 from %2" msgstr "" #. TRANSLATORS : %1 is the recipient name #: indicator/messagingmenu.cpp:265 indicator/messagingmenu.cpp:269 #, fuzzy, qt-format #| msgid "Message from %1" msgid "Message to the group from %1" msgstr "Anfon neges o %1" #: indicator/messagingmenu.cpp:345 msgid "Call back" msgstr "Galw nôl" #: indicator/messagingmenu.cpp:350 #, fuzzy #| msgid "I missed your call - can you call me now?" msgid "Missed your call — can you call me now?" msgstr "Methais eich galwad - allwch chi alw nawr?" #: indicator/messagingmenu.cpp:351 #, fuzzy #| msgid "I'm running late. I'm on my way." msgid "Running late. On my way." msgstr "Rwy'n hwyr ond ar fy ffordd." #: indicator/messagingmenu.cpp:352 #, fuzzy #| msgid "I'm busy at the moment. I'll call you later." msgid "Busy at the moment. Will call you later." msgstr "Rwy'n brysur nawr. Ffonia i wedyn." #: indicator/messagingmenu.cpp:353 #, fuzzy #| msgid "I'll be 20 minutes late." msgid "I am 20 minutes late." msgstr "Byddaf 20 munud yn hwyr." #: indicator/messagingmenu.cpp:354 #, fuzzy #| msgid "Sorry, I'm still busy. I'll call you later." msgid "Still busy. Will call you later." msgstr "Rwy'n brysur ac fe ffonia i wedyn." #: indicator/messagingmenu.cpp:409 #, qt-format msgid "%1 missed call" msgid_plural "%1 missed calls" msgstr[0] "Methwyd %1 galwad" msgstr[1] "Methwyd %1 galwad" msgstr[2] "Methwyd %1 galwad" msgstr[3] "Methwyd %1 galwad" #: indicator/messagingmenu.cpp:492 msgid "Voicemail messages" msgstr "Negeseuon llais" #: indicator/messagingmenu.cpp:495 #, qt-format msgid "%1 voicemail message" msgid_plural "%1 voicemail messages" msgstr[0] "%1 neges llais" msgstr[1] "%1 neges llais" msgstr[2] "%1 neges llais" msgstr[3] "%1 neges llais" #: indicator/messagingmenu.cpp:500 msgid "Voicemail" msgstr "Neges llais" #: indicator/metrics.cpp:42 #, qt-format msgid "%1 text messages sent today" msgstr "Anfonwyd %1 neges destun heddiw" #: indicator/metrics.cpp:43 msgid "No text messages sent today" msgstr "Heb anfon neges destun heddiw." #: indicator/metrics.cpp:44 #, qt-format msgid "%1 text messages received today" msgstr "Derbyniwyd %1 neges destun heddiw" #: indicator/metrics.cpp:45 msgid "No text messages received today" msgstr "Heb dderbyn neges destun heddiw." #: indicator/metrics.cpp:46 #, qt-format msgid "%1 calls received today" msgstr "Derbyniwyd %1 galwad heddiw" #: indicator/metrics.cpp:47 msgid "No calls received today" msgstr "Heb dderbyn galwad heddiw." #: indicator/metrics.cpp:48 #, qt-format msgid "%1 calls made today" msgstr "Gwnaed %1 galwad heddiw" #: indicator/metrics.cpp:49 indicator/metrics.cpp:51 msgid "No calls made today" msgstr "Heb wneud galwad heddiw." #: indicator/metrics.cpp:50 #, qt-format msgid "Spent %1 minutes in calls today" msgstr "Treuliwyd %1 munud ar alwadau heddiw" #: indicator/textchannelobserver.cpp:225 msgid "Unlock your sim card and try again from the messaging application." msgstr "Datglowch eich cerdyn SIM a cheisiwch eto o'r ap negeseuon." #: indicator/textchannelobserver.cpp:227 msgid "Deactivate flight mode and try again from the messaging application." msgstr "Dadweithredu modd hedfan a cheisio eto o'r ap negeseuon." #: indicator/textchannelobserver.cpp:230 msgid "Try again from the messaging application." msgstr "Ceisiwch eto o'r ap negeseuon." #: indicator/textchannelobserver.cpp:236 msgid "The message could not be sent" msgstr "Methwyd anfon y neges" #: indicator/textchannelobserver.cpp:249 indicator/textchannelobserver.cpp:713 msgid "View message" msgstr "Gweld neges" #: indicator/textchannelobserver.cpp:295 msgid "New Group" msgstr "" #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:302 #, qt-format msgid "You joined group %1 " msgstr "" #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:306 #, qt-format msgid "You joined group %1" msgstr "" #: indicator/textchannelobserver.cpp:309 msgid "You joined a new group" msgstr "" #: indicator/textchannelobserver.cpp:328 msgid "View Group" msgstr "" #: indicator/textchannelobserver.cpp:367 indicator/ussdindicator.cpp:116 msgid "Ok" msgstr "Iawn" #: indicator/textchannelobserver.cpp:373 msgid "Save" msgstr "Cadw" #: indicator/textchannelobserver.cpp:468 msgid "Emergency Alert" msgstr "" #: indicator/textchannelobserver.cpp:471 msgid "Emergency Alert: Extreme" msgstr "" #: indicator/textchannelobserver.cpp:474 msgid "Emergency Alert: Severe" msgstr "" #: indicator/textchannelobserver.cpp:477 msgid "Emergency Alert: Notice" msgstr "" #: indicator/textchannelobserver.cpp:482 msgid "AMBER Alert" msgstr "" #: indicator/textchannelobserver.cpp:485 msgid "Alert" msgstr "" #: indicator/textchannelobserver.cpp:531 msgid "Show alert" msgstr "" #: indicator/textchannelobserver.cpp:604 #, qt-format msgid "Attachment: %1 image" msgid_plural "Attachments: %1 images" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:606 #, qt-format msgid "Attachment: %1 video" msgid_plural "Attachments: %1 videos" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:608 #, qt-format msgid "Attachment: %1 contact" msgid_plural "Attachments: %1 contacts" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:610 #, qt-format msgid "Attachment: %1 audio clip" msgid_plural "Attachments: %1 audio clips" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:612 #, qt-format msgid "Attachment: %1 file" msgid_plural "Attachments: %1 files" msgstr[0] "" msgstr[1] "" #. TRANSLATORS : message displayed when any error occurred while receiving a MMS (case when cellular-data is off, or any downloading issue). Notify that there was a message, the user can find more about it in the messaging-app. #: indicator/textchannelobserver.cpp:615 #, fuzzy #| msgid "View message" msgid "New MMS message" msgstr "Gweld neges" #. TRANSLATORS : %1 is the recipient name #: indicator/textchannelobserver.cpp:679 indicator/textchannelobserver.cpp:683 #, qt-format msgid "Message to group from %1" msgstr "" #: indicator/textchannelobserver.cpp:749 #, qt-format msgid "Message from %1" msgstr "Anfon neges o %1" #: indicator/textchannelobserver.cpp:910 msgid "Please, select a SIM card:" msgstr "Dewiswch gerdyn SIM:" #: indicator/ussdindicator.cpp:119 msgid "Reply" msgstr "Ateb" #: indicator/ussdindicator.cpp:142 msgid "Cancel" msgstr "Diddymu" #: libtelephonyservice/callnotification.cpp:53 msgid "Conf call on hold" msgstr "" #: libtelephonyservice/callnotification.cpp:53 #, qt-format msgid "%1 call on hold" msgstr "" #: libtelephonyservice/callnotification.cpp:56 msgid "Conf call ended" msgstr "" #: libtelephonyservice/callnotification.cpp:56 #, qt-format msgid "%1 call ended" msgstr "" #: libtelephonyservice/callnotification.cpp:59 #, qt-format msgid "%1 call declined" msgstr "" #: libtelephonyservice/contactwatcher.cpp:157 msgid "Private Number" msgstr "Rhif Preifat" #: libtelephonyservice/contactwatcher.cpp:159 msgid "Unknown Number" msgstr "Rhif Anhysbys" #, fuzzy #~| msgid "Telephony Service" #~ msgid "telephony-service-call" #~ msgstr "Gwasanaeth Teleffoni" #, fuzzy #~| msgid "Telephony Service" #~ msgid "telephony-service-message" #~ msgstr "Gwasanaeth Teleffoni" telephony-service-0.5.3/po/da.po000066400000000000000000000254171455543255600165550ustar00rootroot00000000000000# Danish translation for telephony-service # Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013 # This file is distributed under the same license as the telephony-service package. # FIRST AUTHOR , 2013. # msgid "" msgstr "" "Project-Id-Version: telephony-service\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-12-16 17:03+0100\n" "PO-Revision-Date: 2014-08-03 02:46+0000\n" "Last-Translator: Ask Hjorth Larsen \n" "Language-Team: Danish \n" "Language: da\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Launchpad-Export-Date: 2017-01-04 06:02+0000\n" "X-Generator: Launchpad (build 18298)\n" #: indicator/telephony-service-call.desktop.in:4 msgid "Phone Calls" msgstr "Telefonopkald" #: indicator/telephony-service-sms.desktop.in:4 msgid "SMS" msgstr "SMS" #: approver/approver.cpp:66 msgid "Unknown caller" msgstr "Ukendt person" #: approver/approver.cpp:94 msgid "I'm busy at the moment. I'll call later." msgstr "Jeg er optaget i øjeblikket. Jeg ringer tilbage senere." #: approver/approver.cpp:95 msgid "I'm running late, on my way now." msgstr "Jeg er forskinket, men jeg er på vej nu." #: approver/approver.cpp:96 msgid "Please call me back later." msgstr "Ring venligst tilbage senere." #: approver/approver.cpp:457 #, qt-format msgid "On [%1]" msgstr "" #: approver/approver.cpp:461 indicator/messagingmenu.cpp:414 msgid "Private number" msgstr "Privat nummer" #: approver/approver.cpp:464 indicator/messagingmenu.cpp:244 #: indicator/messagingmenu.cpp:418 indicator/textchannelobserver.cpp:640 msgid "Unknown number" msgstr "Ukendt nummer" #: approver/approver.cpp:470 approver/approver.cpp:485 msgid "Caller number is not available" msgstr "Ophavsnummeret er ikke tilgængeligt" #: approver/approver.cpp:476 msgid "Calling from private number" msgstr "Ringer fra privat nummer" #: approver/approver.cpp:479 msgid "Calling from unknown number" msgstr "Ringer fra ukendt nummer" #: approver/approver.cpp:482 #, qt-format msgid "Calling from %1" msgstr "Ringer fra %1" #: approver/approver.cpp:529 msgid "Hold + Answer" msgstr "Ventetilstand + besvar" #: approver/approver.cpp:530 msgid "Accept" msgstr "Godkend" #: approver/approver.cpp:543 msgid "End + Answer" msgstr "Afslut + Svar" #: approver/approver.cpp:552 msgid "Decline" msgstr "Afvis" #: approver/approver.cpp:560 msgid "Message & decline" msgstr "" #: approver/main.cpp:46 msgid "Telephony Service Approver" msgstr "Telefontjenestegodkender" #: indicator/authhandler.cpp:72 msgid "Authentication failed. Do you want to review your credentials?" msgstr "Godkendelse fejlede. Vil du se dine brugeroplysninger" #: indicator/authhandler.cpp:91 msgid "Yes" msgstr "Ja" #: indicator/authhandler.cpp:94 msgid "No" msgstr "Nej" #: indicator/displaynamesettings.cpp:35 #, qt-format msgid "SIM %1" msgstr "SIM %1" #: indicator/main.cpp:53 msgid "Telephony Service Indicator" msgstr "Telefontjenesteindikator" #: indicator/messagingmenu.cpp:83 indicator/messagingmenu.cpp:87 msgid "Telephony Service" msgstr "Telefontjeneste" #: indicator/messagingmenu.cpp:151 indicator/messagingmenu.cpp:293 #: indicator/messagingmenu.cpp:360 msgid "Send" msgstr "Send" #. TRANSLATORS : %1 is the group name and %2 is the recipient name #: indicator/messagingmenu.cpp:262 indicator/textchannelobserver.cpp:671 #: indicator/textchannelobserver.cpp:675 #, qt-format msgid "Message to %1 from %2" msgstr "" #. TRANSLATORS : %1 is the recipient name #: indicator/messagingmenu.cpp:265 indicator/messagingmenu.cpp:269 #, fuzzy, qt-format #| msgid "Message to group from %1" msgid "Message to the group from %1" msgstr "Besked til gruppe fra %1" #: indicator/messagingmenu.cpp:345 msgid "Call back" msgstr "Ring tilbage" #: indicator/messagingmenu.cpp:350 #, fuzzy #| msgid "I missed your call - can you call me now?" msgid "Missed your call — can you call me now?" msgstr "Jeg fik ikke besvaret dit opkald - kan du ringe til mig nu?" #: indicator/messagingmenu.cpp:351 #, fuzzy #| msgid "I'm running late. I'm on my way." msgid "Running late. On my way." msgstr "Jeg bliver forsinket men er på vej." #: indicator/messagingmenu.cpp:352 #, fuzzy #| msgid "I'm busy at the moment. I'll call you later." msgid "Busy at the moment. Will call you later." msgstr "Jeg har travlt i øjeblikket. Jeg ringer til dig senere." #: indicator/messagingmenu.cpp:353 #, fuzzy #| msgid "I'll be 20 minutes late." msgid "I am 20 minutes late." msgstr "Jeg vil være 20 minutter forsinket." #: indicator/messagingmenu.cpp:354 #, fuzzy #| msgid "Sorry, I'm still busy. I'll call you later." msgid "Still busy. Will call you later." msgstr "Undskyld, jeg er stadig optaget. Jeg ringer til dig senere." #: indicator/messagingmenu.cpp:409 #, qt-format msgid "%1 missed call" msgid_plural "%1 missed calls" msgstr[0] "%1 ubesvaret opkald" msgstr[1] "%1 ubesvarede opkald" #: indicator/messagingmenu.cpp:492 msgid "Voicemail messages" msgstr "Talemeddelelser" #: indicator/messagingmenu.cpp:495 #, qt-format msgid "%1 voicemail message" msgid_plural "%1 voicemail messages" msgstr[0] "%1 talemeddelelse" msgstr[1] "%1 talemeddelelser" #: indicator/messagingmenu.cpp:500 msgid "Voicemail" msgstr "" #: indicator/metrics.cpp:42 #, qt-format msgid "%1 text messages sent today" msgstr "%1 tekstbeskeder sent i dag" #: indicator/metrics.cpp:43 msgid "No text messages sent today" msgstr "Ingen beskeder sendt i dag" #: indicator/metrics.cpp:44 #, qt-format msgid "%1 text messages received today" msgstr "%1 tekstbeskeder modtaget i dag" #: indicator/metrics.cpp:45 msgid "No text messages received today" msgstr "Ingen beskeder modtaget i dag" #: indicator/metrics.cpp:46 #, qt-format msgid "%1 calls received today" msgstr "%1 opkald modtaget i dag" #: indicator/metrics.cpp:47 msgid "No calls received today" msgstr "Ingen opkald modtaget i dag" #: indicator/metrics.cpp:48 #, qt-format msgid "%1 calls made today" msgstr "%1 opkald foretaget i dag" #: indicator/metrics.cpp:49 indicator/metrics.cpp:51 msgid "No calls made today" msgstr "Ingen opkald foretaget i dag" #: indicator/metrics.cpp:50 #, qt-format msgid "Spent %1 minutes in calls today" msgstr "%1 minutter brugt op opkald i dag." #: indicator/textchannelobserver.cpp:225 msgid "Unlock your sim card and try again from the messaging application." msgstr "Lås dit SIM kort op og forsøgen igen fra besked applikationen." #: indicator/textchannelobserver.cpp:227 msgid "Deactivate flight mode and try again from the messaging application." msgstr "Deaktiver flytilstand og prøv igen fra besked applikationen." #: indicator/textchannelobserver.cpp:230 msgid "Try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:236 msgid "The message could not be sent" msgstr "Beskeden kunne ikke sendes" #: indicator/textchannelobserver.cpp:249 indicator/textchannelobserver.cpp:713 msgid "View message" msgstr "Vis besked" #: indicator/textchannelobserver.cpp:295 msgid "New Group" msgstr "" #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:302 #, qt-format msgid "You joined group %1 " msgstr "" #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:306 #, qt-format msgid "You joined group %1" msgstr "" #: indicator/textchannelobserver.cpp:309 msgid "You joined a new group" msgstr "" #: indicator/textchannelobserver.cpp:328 msgid "View Group" msgstr "" #: indicator/textchannelobserver.cpp:367 indicator/ussdindicator.cpp:116 msgid "Ok" msgstr "O.k." #: indicator/textchannelobserver.cpp:373 msgid "Save" msgstr "Gem" #: indicator/textchannelobserver.cpp:468 msgid "Emergency Alert" msgstr "" #: indicator/textchannelobserver.cpp:471 msgid "Emergency Alert: Extreme" msgstr "" #: indicator/textchannelobserver.cpp:474 msgid "Emergency Alert: Severe" msgstr "" #: indicator/textchannelobserver.cpp:477 msgid "Emergency Alert: Notice" msgstr "" #: indicator/textchannelobserver.cpp:482 msgid "AMBER Alert" msgstr "" #: indicator/textchannelobserver.cpp:485 msgid "Alert" msgstr "" #: indicator/textchannelobserver.cpp:531 msgid "Show alert" msgstr "" #: indicator/textchannelobserver.cpp:604 #, qt-format msgid "Attachment: %1 image" msgid_plural "Attachments: %1 images" msgstr[0] "Vedhæftet: %1 billede" msgstr[1] "Vedhæftet: %1 billeder" #: indicator/textchannelobserver.cpp:606 #, qt-format msgid "Attachment: %1 video" msgid_plural "Attachments: %1 videos" msgstr[0] "Vedhæftet: %1 video" msgstr[1] "Vedhæftet: %1 videoer" #: indicator/textchannelobserver.cpp:608 #, qt-format msgid "Attachment: %1 contact" msgid_plural "Attachments: %1 contacts" msgstr[0] "Vedhæftet: %1 kontakt" msgstr[1] "Vedhæftet: %1 kontakter" #: indicator/textchannelobserver.cpp:610 #, qt-format msgid "Attachment: %1 audio clip" msgid_plural "Attachments: %1 audio clips" msgstr[0] "Attachment: %1 lyd klip" msgstr[1] "Attachments: %1 lyd klip" #: indicator/textchannelobserver.cpp:612 #, qt-format msgid "Attachment: %1 file" msgid_plural "Attachments: %1 files" msgstr[0] "Vedhæftet: %1 fil" msgstr[1] "Vedhæftet: %1 filer" #. TRANSLATORS : message displayed when any error occurred while receiving a MMS (case when cellular-data is off, or any downloading issue). Notify that there was a message, the user can find more about it in the messaging-app. #: indicator/textchannelobserver.cpp:615 #, fuzzy #| msgid "View message" msgid "New MMS message" msgstr "Vis besked" #. TRANSLATORS : %1 is the recipient name #: indicator/textchannelobserver.cpp:679 indicator/textchannelobserver.cpp:683 #, qt-format msgid "Message to group from %1" msgstr "Besked til gruppe fra %1" #: indicator/textchannelobserver.cpp:749 #, qt-format msgid "Message from %1" msgstr "Besked fra %1" #: indicator/textchannelobserver.cpp:910 msgid "Please, select a SIM card:" msgstr "Vælg venligst et SIM kort:" #: indicator/ussdindicator.cpp:119 msgid "Reply" msgstr "Svar" #: indicator/ussdindicator.cpp:142 msgid "Cancel" msgstr "Annullér" #: libtelephonyservice/callnotification.cpp:53 msgid "Conf call on hold" msgstr "" #: libtelephonyservice/callnotification.cpp:53 #, qt-format msgid "%1 call on hold" msgstr "" #: libtelephonyservice/callnotification.cpp:56 msgid "Conf call ended" msgstr "" #: libtelephonyservice/callnotification.cpp:56 #, qt-format msgid "%1 call ended" msgstr "" #: libtelephonyservice/callnotification.cpp:59 #, qt-format msgid "%1 call declined" msgstr "" #: libtelephonyservice/contactwatcher.cpp:157 msgid "Private Number" msgstr "Privat nummer" #: libtelephonyservice/contactwatcher.cpp:159 msgid "Unknown Number" msgstr "Ukendt nummer" #, fuzzy #~| msgid "Telephony Service" #~ msgid "telephony-service-call" #~ msgstr "Telefontjeneste" #, fuzzy #~| msgid "Telephony Service" #~ msgid "telephony-service-message" #~ msgstr "Telefontjeneste" telephony-service-0.5.3/po/de.po000066400000000000000000000270441455543255600165570ustar00rootroot00000000000000# German translation for telephony-service # Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013 # This file is distributed under the same license as the telephony-service package. # FIRST AUTHOR , 2013. # msgid "" msgstr "" "Project-Id-Version: telephony-service\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-12-16 17:03+0100\n" "PO-Revision-Date: 2023-02-16 22:38+0000\n" "Last-Translator: Mike Gabriel \n" "Language-Team: German \n" "Language: de\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Generator: Weblate 4.16-dev\n" "X-Launchpad-Export-Date: 2017-01-04 06:02+0000\n" #: indicator/telephony-service-call.desktop.in:4 msgid "Phone Calls" msgstr "Anrufe" #: indicator/telephony-service-sms.desktop.in:4 msgid "SMS" msgstr "SMS" #: approver/approver.cpp:66 msgid "Unknown caller" msgstr "Unbekannter Anrufer" #: approver/approver.cpp:94 msgid "I'm busy at the moment. I'll call later." msgstr "Ich bin gerade beschäftigt und rufe später zurück." #: approver/approver.cpp:95 msgid "I'm running late, on my way now." msgstr "Ich bin spät dran, aber schon auf dem Weg." #: approver/approver.cpp:96 msgid "Please call me back later." msgstr "Bitte später zurückrufen." #: approver/approver.cpp:457 #, qt-format msgid "On [%1]" msgstr "An [%1]" #: approver/approver.cpp:461 indicator/messagingmenu.cpp:414 msgid "Private number" msgstr "Private Nummer" #: approver/approver.cpp:464 indicator/messagingmenu.cpp:244 #: indicator/messagingmenu.cpp:418 indicator/textchannelobserver.cpp:640 msgid "Unknown number" msgstr "Unbekannte Nummer" #: approver/approver.cpp:470 approver/approver.cpp:485 msgid "Caller number is not available" msgstr "Die Nummer des Anrufers ist nicht verfügbar" #: approver/approver.cpp:476 msgid "Calling from private number" msgstr "Anruf von einer privaten Nummer" #: approver/approver.cpp:479 msgid "Calling from unknown number" msgstr "Anruf von einer unbekannten Nummer" #: approver/approver.cpp:482 #, qt-format msgid "Calling from %1" msgstr "Anruf von %1" #: approver/approver.cpp:529 msgid "Hold + Answer" msgstr "Halten + Antworten" #: approver/approver.cpp:530 msgid "Accept" msgstr "Akzeptieren" #: approver/approver.cpp:543 msgid "End + Answer" msgstr "Auflegen + Antworten" #: approver/approver.cpp:552 msgid "Decline" msgstr "Ablehnen" #: approver/approver.cpp:560 msgid "Message & decline" msgstr "Ablehnen & Nachricht senden" #: approver/main.cpp:46 msgid "Telephony Service Approver" msgstr "Telefondienstgenehmigung" #: indicator/authhandler.cpp:72 msgid "Authentication failed. Do you want to review your credentials?" msgstr "" "Legitimierung fehlgeschlagen. Möchten Sie Ihre Anmeldedaten überprüfen?" #: indicator/authhandler.cpp:91 msgid "Yes" msgstr "Ja" #: indicator/authhandler.cpp:94 msgid "No" msgstr "Nein" #: indicator/displaynamesettings.cpp:35 #, qt-format msgid "SIM %1" msgstr "SIM %1" #: indicator/main.cpp:53 msgid "Telephony Service Indicator" msgstr "Telefondienstbenachrichtigung" #: indicator/messagingmenu.cpp:83 indicator/messagingmenu.cpp:87 msgid "Telephony Service" msgstr "Telefondienst" #: indicator/messagingmenu.cpp:151 indicator/messagingmenu.cpp:293 #: indicator/messagingmenu.cpp:360 msgid "Send" msgstr "Senden" #. TRANSLATORS : %1 is the group name and %2 is the recipient name #: indicator/messagingmenu.cpp:262 indicator/textchannelobserver.cpp:671 #: indicator/textchannelobserver.cpp:675 #, qt-format msgid "Message to %1 from %2" msgstr "Nachricht in %1 von %2" #. TRANSLATORS : %1 is the recipient name #: indicator/messagingmenu.cpp:265 indicator/messagingmenu.cpp:269 #, qt-format msgid "Message to the group from %1" msgstr "Nachricht an die Gruppe von %1" #: indicator/messagingmenu.cpp:345 msgid "Call back" msgstr "Zurückrufen" #: indicator/messagingmenu.cpp:350 msgid "Missed your call — can you call me now?" msgstr "Ich habe Ihren Anruf verpasst – können Sie mich jetzt anrufen?" #: indicator/messagingmenu.cpp:351 msgid "Running late. On my way." msgstr "Ich bin spät dran, aber auf dem Weg." #: indicator/messagingmenu.cpp:352 msgid "Busy at the moment. Will call you later." msgstr "Ich bin im Augenblick beschäftigt. Ich werde Sie später anrufen." #: indicator/messagingmenu.cpp:353 msgid "I am 20 minutes late." msgstr "Ich komme 20 Minuten später." #: indicator/messagingmenu.cpp:354 msgid "Still busy. Will call you later." msgstr "Leider bin ich noch beschäftigt. Ich werde Sie später anrufen." #: indicator/messagingmenu.cpp:409 #, qt-format msgid "%1 missed call" msgid_plural "%1 missed calls" msgstr[0] "%1 verpasster Anruf" msgstr[1] "%1 verpasste Anrufe" #: indicator/messagingmenu.cpp:492 msgid "Voicemail messages" msgstr "Sprachnachrichten" #: indicator/messagingmenu.cpp:495 #, qt-format msgid "%1 voicemail message" msgid_plural "%1 voicemail messages" msgstr[0] "%1 Sprachnachricht" msgstr[1] "%1 Sprachnachrichten" #: indicator/messagingmenu.cpp:500 msgid "Voicemail" msgstr "Sprachnachricht" #: indicator/metrics.cpp:42 #, qt-format msgid "%1 text messages sent today" msgstr "Gesendete SMS heute: %1" #: indicator/metrics.cpp:43 msgid "No text messages sent today" msgstr "Heute keine SMS gesendet" #: indicator/metrics.cpp:44 #, qt-format msgid "%1 text messages received today" msgstr "Erhaltene SMS heute: %1" #: indicator/metrics.cpp:45 msgid "No text messages received today" msgstr "Heute keine SMS erhalten" #: indicator/metrics.cpp:46 #, qt-format msgid "%1 calls received today" msgstr "Erhaltene Anrufe heute: %1" #: indicator/metrics.cpp:47 msgid "No calls received today" msgstr "Heute keine Anrufe erhalten" #: indicator/metrics.cpp:48 #, qt-format msgid "%1 calls made today" msgstr "Ausgehende Anrufe heute: %1" #: indicator/metrics.cpp:49 indicator/metrics.cpp:51 msgid "No calls made today" msgstr "Heute niemanden angerufen" #: indicator/metrics.cpp:50 #, qt-format msgid "Spent %1 minutes in calls today" msgstr "%1 Minuten in Anrufen heute" #: indicator/textchannelobserver.cpp:225 msgid "Unlock your sim card and try again from the messaging application." msgstr "" "Bitte Ihre Sim-Karte entsperren und erneut von der Nachrichtenanwendung aus " "versuchen." #: indicator/textchannelobserver.cpp:227 msgid "Deactivate flight mode and try again from the messaging application." msgstr "" "Bitte den Flugmodus deaktivieren und mit der Nachrichtenanwendung erneut " "versuchen." #: indicator/textchannelobserver.cpp:230 msgid "Try again from the messaging application." msgstr "Bitte erneut von der Nachrichtenanwendung aus versuchen." #: indicator/textchannelobserver.cpp:236 msgid "The message could not be sent" msgstr "Nachricht konnte nicht gesendet werden" #: indicator/textchannelobserver.cpp:249 indicator/textchannelobserver.cpp:713 msgid "View message" msgstr "Nachricht anzeigen" #: indicator/textchannelobserver.cpp:295 msgid "New Group" msgstr "Neue Gruppe" #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:302 #, qt-format msgid "You joined group %1 " msgstr "Sie sind der Gruppe %1 beigetreten " #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:306 #, qt-format msgid "You joined group %1" msgstr "Sie sind der Gruppe %1 beigetreten" #: indicator/textchannelobserver.cpp:309 msgid "You joined a new group" msgstr "Sie sind einer neuen Gruppe beigetreten" #: indicator/textchannelobserver.cpp:328 msgid "View Group" msgstr "Gruppe ansehen" #: indicator/textchannelobserver.cpp:367 indicator/ussdindicator.cpp:116 msgid "Ok" msgstr "OK" #: indicator/textchannelobserver.cpp:373 msgid "Save" msgstr "Speichern" #: indicator/textchannelobserver.cpp:468 msgid "Emergency Alert" msgstr "Notfallalarm" #: indicator/textchannelobserver.cpp:471 msgid "Emergency Alert: Extreme" msgstr "Notfallalarm: Extrem" #: indicator/textchannelobserver.cpp:474 msgid "Emergency Alert: Severe" msgstr "Notfallalarm: Gefährlich" #: indicator/textchannelobserver.cpp:477 msgid "Emergency Alert: Notice" msgstr "Notfallalarm: Informierend" #: indicator/textchannelobserver.cpp:482 msgid "AMBER Alert" msgstr "AMBER Alarm" #: indicator/textchannelobserver.cpp:485 msgid "Alert" msgstr "Alarm" #: indicator/textchannelobserver.cpp:531 msgid "Show alert" msgstr "Alarm zeigen" #: indicator/textchannelobserver.cpp:604 #, qt-format msgid "Attachment: %1 image" msgid_plural "Attachments: %1 images" msgstr[0] "Anhang: %1 Bild" msgstr[1] "Anhänge: %1 Bilder" #: indicator/textchannelobserver.cpp:606 #, qt-format msgid "Attachment: %1 video" msgid_plural "Attachments: %1 videos" msgstr[0] "Anhang: %1 Video" msgstr[1] "Anhänge: %1 Videos" #: indicator/textchannelobserver.cpp:608 #, qt-format msgid "Attachment: %1 contact" msgid_plural "Attachments: %1 contacts" msgstr[0] "Anhang: %1 Kontakt" msgstr[1] "Anhänge: %1 Kontakte" #: indicator/textchannelobserver.cpp:610 #, qt-format msgid "Attachment: %1 audio clip" msgid_plural "Attachments: %1 audio clips" msgstr[0] "Anhang: %1 Audiodatei" msgstr[1] "Anhang: %1 Audiodateien" #: indicator/textchannelobserver.cpp:612 #, qt-format msgid "Attachment: %1 file" msgid_plural "Attachments: %1 files" msgstr[0] "Anhang: %1 Datei" msgstr[1] "Anhänge: %1 Dateien" #. TRANSLATORS : message displayed when any error occurred while receiving a MMS (case when cellular-data is off, or any downloading issue). Notify that there was a message, the user can find more about it in the messaging-app. #: indicator/textchannelobserver.cpp:615 msgid "New MMS message" msgstr "Neue MMS Nachricht" #. TRANSLATORS : %1 is the recipient name #: indicator/textchannelobserver.cpp:679 indicator/textchannelobserver.cpp:683 #, qt-format msgid "Message to group from %1" msgstr "Nachricht an Gruppe von %1" #: indicator/textchannelobserver.cpp:749 #, qt-format msgid "Message from %1" msgstr "Nachricht von %1" #: indicator/textchannelobserver.cpp:910 msgid "Please, select a SIM card:" msgstr "Bitte eine SIM-Karte auswählen:" #: indicator/ussdindicator.cpp:119 msgid "Reply" msgstr "Antworten" #: indicator/ussdindicator.cpp:142 msgid "Cancel" msgstr "Abbrechen" #: libtelephonyservice/callnotification.cpp:53 msgid "Conf call on hold" msgstr "Konferenzgespräch in der Warteschleife" #: libtelephonyservice/callnotification.cpp:53 #, qt-format msgid "%1 call on hold" msgstr "%1 Anruf in der Warteschleife" #: libtelephonyservice/callnotification.cpp:56 msgid "Conf call ended" msgstr "Konferenzgespräch beendet" #: libtelephonyservice/callnotification.cpp:56 #, qt-format msgid "%1 call ended" msgstr "%1 Anruf beendet" #: libtelephonyservice/callnotification.cpp:59 #, qt-format msgid "%1 call declined" msgstr "%1 Anruf abgelehnt" #: libtelephonyservice/contactwatcher.cpp:157 msgid "Private Number" msgstr "Private Nummer" #: libtelephonyservice/contactwatcher.cpp:159 msgid "Unknown Number" msgstr "Unbekannte Nummer" #~ msgid "telephony-service-call" #~ msgstr "telephony-service-call" #~ msgid "telephony-service-message" #~ msgstr "telephony-service-message" #~ msgid "" #~ "Oops, there has been an error with the MMS system and this message could " #~ "not be retrieved. Please ensure Cellular Data is ON and MMS settings are " #~ "correct, then ask the sender to try again." #~ msgstr "" #~ "Ups, es gab einen Fehler im MMS System und diese Nachricht konnte nicht " #~ "emfangen werden. Bitte stellen Sie sicher, dass Mobildaten aktiviert und " #~ "die MMS Einstellungen korrekt sind. Bitte bitten Sie den Absender " #~ "anschliessend die Nachricht nochmals zu senden." telephony-service-0.5.3/po/dv.po000066400000000000000000000211471455543255600165760ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-12-16 17:03+0100\n" "PO-Revision-Date: 2023-01-05 11:07+0000\n" "Last-Translator: Anonymous \n" "Language-Team: Dhivehi \n" "Language: dv\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Generator: Weblate 4.15.1-dev\n" #: indicator/telephony-service-call.desktop.in:4 msgid "Phone Calls" msgstr "" #: indicator/telephony-service-sms.desktop.in:4 msgid "SMS" msgstr "" #: approver/approver.cpp:66 msgid "Unknown caller" msgstr "" #: approver/approver.cpp:94 msgid "I'm busy at the moment. I'll call later." msgstr "" #: approver/approver.cpp:95 msgid "I'm running late, on my way now." msgstr "" #: approver/approver.cpp:96 msgid "Please call me back later." msgstr "" #: approver/approver.cpp:457 #, qt-format msgid "On [%1]" msgstr "" #: approver/approver.cpp:461 indicator/messagingmenu.cpp:414 msgid "Private number" msgstr "" #: approver/approver.cpp:464 indicator/messagingmenu.cpp:244 #: indicator/messagingmenu.cpp:418 indicator/textchannelobserver.cpp:640 msgid "Unknown number" msgstr "" #: approver/approver.cpp:470 approver/approver.cpp:485 msgid "Caller number is not available" msgstr "" #: approver/approver.cpp:476 msgid "Calling from private number" msgstr "" #: approver/approver.cpp:479 msgid "Calling from unknown number" msgstr "" #: approver/approver.cpp:482 #, qt-format msgid "Calling from %1" msgstr "" #: approver/approver.cpp:529 msgid "Hold + Answer" msgstr "" #: approver/approver.cpp:530 msgid "Accept" msgstr "" #: approver/approver.cpp:543 msgid "End + Answer" msgstr "" #: approver/approver.cpp:552 msgid "Decline" msgstr "" #: approver/approver.cpp:560 msgid "Message & decline" msgstr "" #: approver/main.cpp:46 msgid "Telephony Service Approver" msgstr "" #: indicator/authhandler.cpp:72 msgid "Authentication failed. Do you want to review your credentials?" msgstr "" #: indicator/authhandler.cpp:91 msgid "Yes" msgstr "" #: indicator/authhandler.cpp:94 msgid "No" msgstr "" #: indicator/displaynamesettings.cpp:35 #, qt-format msgid "SIM %1" msgstr "" #: indicator/main.cpp:53 msgid "Telephony Service Indicator" msgstr "" #: indicator/messagingmenu.cpp:83 indicator/messagingmenu.cpp:87 msgid "Telephony Service" msgstr "" #: indicator/messagingmenu.cpp:151 indicator/messagingmenu.cpp:293 #: indicator/messagingmenu.cpp:360 msgid "Send" msgstr "" #. TRANSLATORS : %1 is the group name and %2 is the recipient name #: indicator/messagingmenu.cpp:262 indicator/textchannelobserver.cpp:671 #: indicator/textchannelobserver.cpp:675 #, qt-format msgid "Message to %1 from %2" msgstr "" #. TRANSLATORS : %1 is the recipient name #: indicator/messagingmenu.cpp:265 indicator/messagingmenu.cpp:269 #, qt-format msgid "Message to the group from %1" msgstr "" #: indicator/messagingmenu.cpp:345 msgid "Call back" msgstr "" #: indicator/messagingmenu.cpp:350 msgid "Missed your call — can you call me now?" msgstr "" #: indicator/messagingmenu.cpp:351 msgid "Running late. On my way." msgstr "" #: indicator/messagingmenu.cpp:352 msgid "Busy at the moment. Will call you later." msgstr "" #: indicator/messagingmenu.cpp:353 msgid "I am 20 minutes late." msgstr "" #: indicator/messagingmenu.cpp:354 msgid "Still busy. Will call you later." msgstr "" #: indicator/messagingmenu.cpp:409 #, qt-format msgid "%1 missed call" msgid_plural "%1 missed calls" msgstr[0] "" msgstr[1] "" #: indicator/messagingmenu.cpp:492 msgid "Voicemail messages" msgstr "" #: indicator/messagingmenu.cpp:495 #, qt-format msgid "%1 voicemail message" msgid_plural "%1 voicemail messages" msgstr[0] "" msgstr[1] "" #: indicator/messagingmenu.cpp:500 msgid "Voicemail" msgstr "" #: indicator/metrics.cpp:42 #, qt-format msgid "%1 text messages sent today" msgstr "" #: indicator/metrics.cpp:43 msgid "No text messages sent today" msgstr "" #: indicator/metrics.cpp:44 #, qt-format msgid "%1 text messages received today" msgstr "" #: indicator/metrics.cpp:45 msgid "No text messages received today" msgstr "" #: indicator/metrics.cpp:46 #, qt-format msgid "%1 calls received today" msgstr "" #: indicator/metrics.cpp:47 msgid "No calls received today" msgstr "" #: indicator/metrics.cpp:48 #, qt-format msgid "%1 calls made today" msgstr "" #: indicator/metrics.cpp:49 indicator/metrics.cpp:51 msgid "No calls made today" msgstr "" #: indicator/metrics.cpp:50 #, qt-format msgid "Spent %1 minutes in calls today" msgstr "" #: indicator/textchannelobserver.cpp:225 msgid "Unlock your sim card and try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:227 msgid "Deactivate flight mode and try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:230 msgid "Try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:236 msgid "The message could not be sent" msgstr "" #: indicator/textchannelobserver.cpp:249 indicator/textchannelobserver.cpp:713 msgid "View message" msgstr "" #: indicator/textchannelobserver.cpp:295 msgid "New Group" msgstr "" #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:302 #, qt-format msgid "You joined group %1 " msgstr "" #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:306 #, qt-format msgid "You joined group %1" msgstr "" #: indicator/textchannelobserver.cpp:309 msgid "You joined a new group" msgstr "" #: indicator/textchannelobserver.cpp:328 msgid "View Group" msgstr "" #: indicator/textchannelobserver.cpp:367 indicator/ussdindicator.cpp:116 msgid "Ok" msgstr "" #: indicator/textchannelobserver.cpp:373 msgid "Save" msgstr "" #: indicator/textchannelobserver.cpp:468 msgid "Emergency Alert" msgstr "" #: indicator/textchannelobserver.cpp:471 msgid "Emergency Alert: Extreme" msgstr "" #: indicator/textchannelobserver.cpp:474 msgid "Emergency Alert: Severe" msgstr "" #: indicator/textchannelobserver.cpp:477 msgid "Emergency Alert: Notice" msgstr "" #: indicator/textchannelobserver.cpp:482 msgid "AMBER Alert" msgstr "" #: indicator/textchannelobserver.cpp:485 msgid "Alert" msgstr "" #: indicator/textchannelobserver.cpp:531 msgid "Show alert" msgstr "" #: indicator/textchannelobserver.cpp:604 #, qt-format msgid "Attachment: %1 image" msgid_plural "Attachments: %1 images" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:606 #, qt-format msgid "Attachment: %1 video" msgid_plural "Attachments: %1 videos" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:608 #, qt-format msgid "Attachment: %1 contact" msgid_plural "Attachments: %1 contacts" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:610 #, qt-format msgid "Attachment: %1 audio clip" msgid_plural "Attachments: %1 audio clips" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:612 #, qt-format msgid "Attachment: %1 file" msgid_plural "Attachments: %1 files" msgstr[0] "" msgstr[1] "" #. TRANSLATORS : message displayed when any error occurred while receiving a MMS (case when cellular-data is off, or any downloading issue). Notify that there was a message, the user can find more about it in the messaging-app. #: indicator/textchannelobserver.cpp:615 msgid "New MMS message" msgstr "" #. TRANSLATORS : %1 is the recipient name #: indicator/textchannelobserver.cpp:679 indicator/textchannelobserver.cpp:683 #, qt-format msgid "Message to group from %1" msgstr "" #: indicator/textchannelobserver.cpp:749 #, qt-format msgid "Message from %1" msgstr "" #: indicator/textchannelobserver.cpp:910 msgid "Please, select a SIM card:" msgstr "" #: indicator/ussdindicator.cpp:119 msgid "Reply" msgstr "" #: indicator/ussdindicator.cpp:142 #, fuzzy msgid "Cancel" msgstr "Cancel" #: libtelephonyservice/callnotification.cpp:53 msgid "Conf call on hold" msgstr "" #: libtelephonyservice/callnotification.cpp:53 #, qt-format msgid "%1 call on hold" msgstr "" #: libtelephonyservice/callnotification.cpp:56 msgid "Conf call ended" msgstr "" #: libtelephonyservice/callnotification.cpp:56 #, qt-format msgid "%1 call ended" msgstr "" #: libtelephonyservice/callnotification.cpp:59 #, qt-format msgid "%1 call declined" msgstr "" #: libtelephonyservice/contactwatcher.cpp:157 msgid "Private Number" msgstr "" #: libtelephonyservice/contactwatcher.cpp:159 msgid "Unknown Number" msgstr "" telephony-service-0.5.3/po/el.po000066400000000000000000000326071455543255600165700ustar00rootroot00000000000000# Greek translation for telephony-service # Copyright (c) 2014 Rosetta Contributors and Canonical Ltd 2014 # This file is distributed under the same license as the telephony-service package. # FIRST AUTHOR , 2014. # msgid "" msgstr "" "Project-Id-Version: telephony-service\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-12-16 17:03+0100\n" "PO-Revision-Date: 2020-12-19 13:26+0000\n" "Last-Translator: Efstathios Iosifidis \n" "Language-Team: Greek \n" "Language: el\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Generator: Weblate 3.11.3\n" "X-Launchpad-Export-Date: 2017-01-04 06:02+0000\n" #: indicator/telephony-service-call.desktop.in:4 msgid "Phone Calls" msgstr "Κλήσεις" #: indicator/telephony-service-sms.desktop.in:4 msgid "SMS" msgstr "SMS" #: approver/approver.cpp:66 msgid "Unknown caller" msgstr "Άγνωστος" #: approver/approver.cpp:94 msgid "I'm busy at the moment. I'll call later." msgstr "Είμαι απασχολημένος αυτή την στιγμή. Θα καλέσω αργότερα." #: approver/approver.cpp:95 msgid "I'm running late, on my way now." msgstr "Καθυστέρησα λιγάκι. Έρχομαι τώρα." #: approver/approver.cpp:96 msgid "Please call me back later." msgstr "Παρακαλώ καλέστε με αργότερα." #: approver/approver.cpp:457 #, qt-format msgid "On [%1]" msgstr "Σε [%1]" #: approver/approver.cpp:461 indicator/messagingmenu.cpp:414 msgid "Private number" msgstr "Με απόκρυψη" #: approver/approver.cpp:464 indicator/messagingmenu.cpp:244 #: indicator/messagingmenu.cpp:418 indicator/textchannelobserver.cpp:640 msgid "Unknown number" msgstr "Άγνωστος Αριθμός" #: approver/approver.cpp:470 approver/approver.cpp:485 msgid "Caller number is not available" msgstr "Ο αριθμός που καλείτε δεν είναι διαθέσιμος" #: approver/approver.cpp:476 msgid "Calling from private number" msgstr "Κλήση από αριθμό με απόκρυψη" #: approver/approver.cpp:479 msgid "Calling from unknown number" msgstr "Κλήση από άγνωστο αριθμό" #: approver/approver.cpp:482 #, qt-format msgid "Calling from %1" msgstr "Κλήση από %1" #: approver/approver.cpp:529 msgid "Hold + Answer" msgstr "Αναμονή + Απάντηση" #: approver/approver.cpp:530 msgid "Accept" msgstr "Αποδοχή" #: approver/approver.cpp:543 msgid "End + Answer" msgstr "Τέλος + Απάντηση" #: approver/approver.cpp:552 msgid "Decline" msgstr "Απόρριψη" #: approver/approver.cpp:560 msgid "Message & decline" msgstr "Μήνυμα & απόρριψη" #: approver/main.cpp:46 msgid "Telephony Service Approver" msgstr "Υποστήριξη τηλεφωνικής υπηρεσίας" #: indicator/authhandler.cpp:72 msgid "Authentication failed. Do you want to review your credentials?" msgstr "Αποτυχία πιστοποίησης. Θέλετε να ελέγξετε τα πιστοποιητικά σας;" #: indicator/authhandler.cpp:91 msgid "Yes" msgstr "Ναι" #: indicator/authhandler.cpp:94 msgid "No" msgstr "Όχι" #: indicator/displaynamesettings.cpp:35 #, qt-format msgid "SIM %1" msgstr "Κάρτα SIM %1" #: indicator/main.cpp:53 msgid "Telephony Service Indicator" msgstr "Ένδειξη τηλεφωνικής υπηρεσίας" #: indicator/messagingmenu.cpp:83 indicator/messagingmenu.cpp:87 msgid "Telephony Service" msgstr "Υπηρεσία τηλεφωνίας" #: indicator/messagingmenu.cpp:151 indicator/messagingmenu.cpp:293 #: indicator/messagingmenu.cpp:360 msgid "Send" msgstr "Αποστολή" #. TRANSLATORS : %1 is the group name and %2 is the recipient name #: indicator/messagingmenu.cpp:262 indicator/textchannelobserver.cpp:671 #: indicator/textchannelobserver.cpp:675 #, qt-format msgid "Message to %1 from %2" msgstr "Μήνυμα στον %1 από τον %2" #. TRANSLATORS : %1 is the recipient name #: indicator/messagingmenu.cpp:265 indicator/messagingmenu.cpp:269 #, fuzzy, qt-format #| msgid "Message to group from %1" msgid "Message to the group from %1" msgstr "Μήνυμα προς ομάδα από %1" #: indicator/messagingmenu.cpp:345 msgid "Call back" msgstr "Επανάκληση" #: indicator/messagingmenu.cpp:350 #, fuzzy #| msgid "I missed your call - can you call me now?" msgid "Missed your call — can you call me now?" msgstr "Δεν πρόλαβα την κλήση σου μπορείς να καλέσεις τώρα;" #: indicator/messagingmenu.cpp:351 #, fuzzy #| msgid "I'm running late. I'm on my way." msgid "Running late. On my way." msgstr "Καθυστέρησα λιγάκι. Έρχομαι." #: indicator/messagingmenu.cpp:352 #, fuzzy #| msgid "I'm busy at the moment. I'll call you later." msgid "Busy at the moment. Will call you later." msgstr "Είμαι απασχολημένος αυτή την στιγμή. Θα σε καλέσω αργότερα." #: indicator/messagingmenu.cpp:353 #, fuzzy #| msgid "I'll be 20 minutes late." msgid "I am 20 minutes late." msgstr "Θα καθυστερήσω 20 λεπτά." #: indicator/messagingmenu.cpp:354 #, fuzzy #| msgid "Sorry, I'm still busy. I'll call you later." msgid "Still busy. Will call you later." msgstr "Συγνώμη είμαι ακόμη απασχολημένος. Θα σε καλέσω αργότερα." #: indicator/messagingmenu.cpp:409 #, qt-format msgid "%1 missed call" msgid_plural "%1 missed calls" msgstr[0] "%1 αναπάντητη κλήση" msgstr[1] "%1 αναπάντητες κλήσεις" #: indicator/messagingmenu.cpp:492 msgid "Voicemail messages" msgstr "Μηνύματα τηλεφωνητή" #: indicator/messagingmenu.cpp:495 #, qt-format msgid "%1 voicemail message" msgid_plural "%1 voicemail messages" msgstr[0] "%1 μήνυμα στον τηλεφωνητή" msgstr[1] "%1 μηνύματα στον τηλεφωνητή" #: indicator/messagingmenu.cpp:500 msgid "Voicemail" msgstr "Τηλεφωνητής" #: indicator/metrics.cpp:42 #, qt-format msgid "%1 text messages sent today" msgstr "%1 μηνύματα στάλθηκαν σήμερα" #: indicator/metrics.cpp:43 msgid "No text messages sent today" msgstr "Δεν στάλθηκαν μηνύματα σήμερα" #: indicator/metrics.cpp:44 #, qt-format msgid "%1 text messages received today" msgstr "%1 μηνύματα ελήφθησαν σήμερα" #: indicator/metrics.cpp:45 msgid "No text messages received today" msgstr "Δεν ελήφθησαν μηνύματα σήμερα" #: indicator/metrics.cpp:46 #, qt-format msgid "%1 calls received today" msgstr "%1 κλήσεις δεχτήκατε σήμερα" #: indicator/metrics.cpp:47 msgid "No calls received today" msgstr "Δεν ελήφθησαν κλήσεις σήμερα" #: indicator/metrics.cpp:48 #, qt-format msgid "%1 calls made today" msgstr "%1 κλήσεις έγιναν σήμερα" #: indicator/metrics.cpp:49 indicator/metrics.cpp:51 msgid "No calls made today" msgstr "Δεν έγιναν κλήσεις σήμερα" #: indicator/metrics.cpp:50 #, qt-format msgid "Spent %1 minutes in calls today" msgstr "Μιλήσατε %1 λεπτά σήμερα" #: indicator/textchannelobserver.cpp:225 msgid "Unlock your sim card and try again from the messaging application." msgstr "" "Ξεκλειδώστε την κάρτα sim σας και προσπαθήστε ξανά από την εφαρμογή " "μηνυμάτων." #: indicator/textchannelobserver.cpp:227 msgid "Deactivate flight mode and try again from the messaging application." msgstr "" "Απενεργοποιείστε την λειτουργία πτήσης και προσπαθήστε ξανά από την εφαρμογή " "μηνυμάτων." #: indicator/textchannelobserver.cpp:230 msgid "Try again from the messaging application." msgstr "Προσπαθήστε ξανά από την εφαρμογή μηνυμάτων." #: indicator/textchannelobserver.cpp:236 msgid "The message could not be sent" msgstr "Το μήνυμα δεν μπόρεσε να σταλεί" #: indicator/textchannelobserver.cpp:249 indicator/textchannelobserver.cpp:713 msgid "View message" msgstr "Προβολή μηνύματος" #: indicator/textchannelobserver.cpp:295 msgid "New Group" msgstr "Νέα ομάδα" #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:302 #, qt-format msgid "You joined group %1 " msgstr "Συμμετέχετε στην ομάδα %1 " #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:306 #, qt-format msgid "You joined group %1" msgstr "Συμμετέχετε στην ομάδα %1" #: indicator/textchannelobserver.cpp:309 msgid "You joined a new group" msgstr "Συμμετέχετε σε νέα ομάδα" #: indicator/textchannelobserver.cpp:328 msgid "View Group" msgstr "Προβολή ομάδας" #: indicator/textchannelobserver.cpp:367 indicator/ussdindicator.cpp:116 msgid "Ok" msgstr "Εντάξει" #: indicator/textchannelobserver.cpp:373 msgid "Save" msgstr "Αποθήκευση" #: indicator/textchannelobserver.cpp:468 msgid "Emergency Alert" msgstr "" #: indicator/textchannelobserver.cpp:471 msgid "Emergency Alert: Extreme" msgstr "" #: indicator/textchannelobserver.cpp:474 msgid "Emergency Alert: Severe" msgstr "" #: indicator/textchannelobserver.cpp:477 msgid "Emergency Alert: Notice" msgstr "" #: indicator/textchannelobserver.cpp:482 msgid "AMBER Alert" msgstr "" #: indicator/textchannelobserver.cpp:485 msgid "Alert" msgstr "" #: indicator/textchannelobserver.cpp:531 msgid "Show alert" msgstr "" #: indicator/textchannelobserver.cpp:604 #, qt-format msgid "Attachment: %1 image" msgid_plural "Attachments: %1 images" msgstr[0] "Συνημμένη: %1 εικόνα" msgstr[1] "Συνημμένες: %1 εικόνες" #: indicator/textchannelobserver.cpp:606 #, qt-format msgid "Attachment: %1 video" msgid_plural "Attachments: %1 videos" msgstr[0] "Συνημμένο: %1 βίντεο" msgstr[1] "Συνημμένα: %1 βίντεο" #: indicator/textchannelobserver.cpp:608 #, qt-format msgid "Attachment: %1 contact" msgid_plural "Attachments: %1 contacts" msgstr[0] "Συνημμένη: %1 επαφή" msgstr[1] "Συνημμένες: %1 επαφές" #: indicator/textchannelobserver.cpp:610 #, qt-format msgid "Attachment: %1 audio clip" msgid_plural "Attachments: %1 audio clips" msgstr[0] "Συνημμένο: %1 ηχητικό κλπ" msgstr[1] "Συνημμένα: %1 ηχητικά κλπ" #: indicator/textchannelobserver.cpp:612 #, qt-format msgid "Attachment: %1 file" msgid_plural "Attachments: %1 files" msgstr[0] "Συνημμένο: %1 αρχείο" msgstr[1] "Συνημμένα: %1 αρχεία" #. TRANSLATORS : message displayed when any error occurred while receiving a MMS (case when cellular-data is off, or any downloading issue). Notify that there was a message, the user can find more about it in the messaging-app. #: indicator/textchannelobserver.cpp:615 #, fuzzy #| msgid "View message" msgid "New MMS message" msgstr "Προβολή μηνύματος" #. TRANSLATORS : %1 is the recipient name #: indicator/textchannelobserver.cpp:679 indicator/textchannelobserver.cpp:683 #, qt-format msgid "Message to group from %1" msgstr "Μήνυμα προς ομάδα από %1" #: indicator/textchannelobserver.cpp:749 #, qt-format msgid "Message from %1" msgstr "Μήνυμα από %1" #: indicator/textchannelobserver.cpp:910 msgid "Please, select a SIM card:" msgstr "Παρακαλώ επιλέξτε κάρτα SIM:" #: indicator/ussdindicator.cpp:119 msgid "Reply" msgstr "Απάντηση" #: indicator/ussdindicator.cpp:142 msgid "Cancel" msgstr "Ακύρωση" #: libtelephonyservice/callnotification.cpp:53 msgid "Conf call on hold" msgstr "" #: libtelephonyservice/callnotification.cpp:53 #, qt-format msgid "%1 call on hold" msgstr "" #: libtelephonyservice/callnotification.cpp:56 msgid "Conf call ended" msgstr "" #: libtelephonyservice/callnotification.cpp:56 #, qt-format msgid "%1 call ended" msgstr "" #: libtelephonyservice/callnotification.cpp:59 #, qt-format msgid "%1 call declined" msgstr "" #: libtelephonyservice/contactwatcher.cpp:157 msgid "Private Number" msgstr "Με απόκρυψη" #: libtelephonyservice/contactwatcher.cpp:159 msgid "Unknown Number" msgstr "Άγνωστος Αριθμός" #, fuzzy #~| msgid "Telephony Service" #~ msgid "telephony-service-call" #~ msgstr "Υπηρεσία τηλεφωνίας" #, fuzzy #~| msgid "Telephony Service" #~ msgid "telephony-service-message" #~ msgstr "Υπηρεσία τηλεφωνίας" #~ msgid "" #~ "Oops, there has been an error with the MMS system and this message could " #~ "not be retrieved. Please ensure Cellular Data is ON and MMS settings are " #~ "correct, then ask the sender to try again." #~ msgstr "" #~ "Ωχ, παρουσιάστηκε σφάλμα με το σύστημα MMS και δεν ήταν δυνατή η ανάκτηση " #~ "αυτού του μηνύματος. Βεβαιωθείτε ότι τα δεδομένα κινητής τηλεφωνίας είναι " #~ "ενεργοποιημένα και οι ρυθμίσεις MMS είναι σωστές και στη συνέχεια, " #~ "ζητήστε από τον αποστολέα να προσπαθήσει ξανά." telephony-service-0.5.3/po/en_AU.po000066400000000000000000000254421455543255600171560ustar00rootroot00000000000000# English (Australia) translation for telephony-service # Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013 # This file is distributed under the same license as the telephony-service package. # FIRST AUTHOR , 2013. # msgid "" msgstr "" "Project-Id-Version: telephony-service\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-12-16 17:03+0100\n" "PO-Revision-Date: 2015-01-25 05:46+0000\n" "Last-Translator: Jared Norris \n" "Language-Team: English (Australia) \n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Launchpad-Export-Date: 2017-01-04 06:03+0000\n" "X-Generator: Launchpad (build 18298)\n" #: indicator/telephony-service-call.desktop.in:4 msgid "Phone Calls" msgstr "Phone Calls" #: indicator/telephony-service-sms.desktop.in:4 msgid "SMS" msgstr "SMS" #: approver/approver.cpp:66 msgid "Unknown caller" msgstr "Unknown caller" #: approver/approver.cpp:94 msgid "I'm busy at the moment. I'll call later." msgstr "I'm busy at the moment. I'll call later." #: approver/approver.cpp:95 msgid "I'm running late, on my way now." msgstr "I'm running late, on my way now." #: approver/approver.cpp:96 msgid "Please call me back later." msgstr "Please call me back later." #: approver/approver.cpp:457 #, qt-format msgid "On [%1]" msgstr "On [%1]" #: approver/approver.cpp:461 indicator/messagingmenu.cpp:414 msgid "Private number" msgstr "Private number" #: approver/approver.cpp:464 indicator/messagingmenu.cpp:244 #: indicator/messagingmenu.cpp:418 indicator/textchannelobserver.cpp:640 msgid "Unknown number" msgstr "Unknown number" #: approver/approver.cpp:470 approver/approver.cpp:485 msgid "Caller number is not available" msgstr "Caller number is not available" #: approver/approver.cpp:476 msgid "Calling from private number" msgstr "Calling from private number" #: approver/approver.cpp:479 msgid "Calling from unknown number" msgstr "Calling from unknown number" #: approver/approver.cpp:482 #, qt-format msgid "Calling from %1" msgstr "Calling from %1" #: approver/approver.cpp:529 msgid "Hold + Answer" msgstr "Hold + Answer" #: approver/approver.cpp:530 msgid "Accept" msgstr "Accept" #: approver/approver.cpp:543 msgid "End + Answer" msgstr "End + Answer" #: approver/approver.cpp:552 msgid "Decline" msgstr "Decline" #: approver/approver.cpp:560 msgid "Message & decline" msgstr "Message & decline" #: approver/main.cpp:46 msgid "Telephony Service Approver" msgstr "Telephony Service Approver" #: indicator/authhandler.cpp:72 msgid "Authentication failed. Do you want to review your credentials?" msgstr "Authentication failed. Do you want to review your credentials?" #: indicator/authhandler.cpp:91 msgid "Yes" msgstr "Yes" #: indicator/authhandler.cpp:94 msgid "No" msgstr "No" #: indicator/displaynamesettings.cpp:35 #, qt-format msgid "SIM %1" msgstr "SIM %1" #: indicator/main.cpp:53 msgid "Telephony Service Indicator" msgstr "Telephony Service Indicator" #: indicator/messagingmenu.cpp:83 indicator/messagingmenu.cpp:87 msgid "Telephony Service" msgstr "Telephony Service" #: indicator/messagingmenu.cpp:151 indicator/messagingmenu.cpp:293 #: indicator/messagingmenu.cpp:360 msgid "Send" msgstr "Send" #. TRANSLATORS : %1 is the group name and %2 is the recipient name #: indicator/messagingmenu.cpp:262 indicator/textchannelobserver.cpp:671 #: indicator/textchannelobserver.cpp:675 #, qt-format msgid "Message to %1 from %2" msgstr "" #. TRANSLATORS : %1 is the recipient name #: indicator/messagingmenu.cpp:265 indicator/messagingmenu.cpp:269 #, fuzzy, qt-format #| msgid "Message to group from %1" msgid "Message to the group from %1" msgstr "Message to group from %1" #: indicator/messagingmenu.cpp:345 msgid "Call back" msgstr "Call back" #: indicator/messagingmenu.cpp:350 #, fuzzy #| msgid "I missed your call - can you call me now?" msgid "Missed your call — can you call me now?" msgstr "I missed your call - can you call me now?" #: indicator/messagingmenu.cpp:351 #, fuzzy #| msgid "I'm running late. I'm on my way." msgid "Running late. On my way." msgstr "I'm running late. I'm on my way." #: indicator/messagingmenu.cpp:352 #, fuzzy #| msgid "I'm busy at the moment. I'll call you later." msgid "Busy at the moment. Will call you later." msgstr "I'm busy at the moment. I'll call you later." #: indicator/messagingmenu.cpp:353 #, fuzzy #| msgid "I'll be 20 minutes late." msgid "I am 20 minutes late." msgstr "I'll be 20 minutes late." #: indicator/messagingmenu.cpp:354 #, fuzzy #| msgid "Sorry, I'm still busy. I'll call you later." msgid "Still busy. Will call you later." msgstr "Sorry, I'm still busy. I'll call you later." #: indicator/messagingmenu.cpp:409 #, qt-format msgid "%1 missed call" msgid_plural "%1 missed calls" msgstr[0] "%1 missed call" msgstr[1] "%1 missed calls" #: indicator/messagingmenu.cpp:492 msgid "Voicemail messages" msgstr "Voicemail messages" #: indicator/messagingmenu.cpp:495 #, qt-format msgid "%1 voicemail message" msgid_plural "%1 voicemail messages" msgstr[0] "%1 voicemail message" msgstr[1] "%1 voicemail messages" #: indicator/messagingmenu.cpp:500 msgid "Voicemail" msgstr "Voicemail" #: indicator/metrics.cpp:42 #, qt-format msgid "%1 text messages sent today" msgstr "%1 text messages sent today" #: indicator/metrics.cpp:43 msgid "No text messages sent today" msgstr "No text messages sent today" #: indicator/metrics.cpp:44 #, qt-format msgid "%1 text messages received today" msgstr "%1 text messages received today" #: indicator/metrics.cpp:45 msgid "No text messages received today" msgstr "No text messages received today" #: indicator/metrics.cpp:46 #, qt-format msgid "%1 calls received today" msgstr "%1 calls received today" #: indicator/metrics.cpp:47 msgid "No calls received today" msgstr "No calls received today" #: indicator/metrics.cpp:48 #, qt-format msgid "%1 calls made today" msgstr "%1 calls made today" #: indicator/metrics.cpp:49 indicator/metrics.cpp:51 msgid "No calls made today" msgstr "No calls made today" #: indicator/metrics.cpp:50 #, qt-format msgid "Spent %1 minutes in calls today" msgstr "Spent %1 minutes in calls today" #: indicator/textchannelobserver.cpp:225 msgid "Unlock your sim card and try again from the messaging application." msgstr "Unlock your sim card and try again from the messaging application." #: indicator/textchannelobserver.cpp:227 msgid "Deactivate flight mode and try again from the messaging application." msgstr "Deactivate flight mode and try again from the messaging application." #: indicator/textchannelobserver.cpp:230 msgid "Try again from the messaging application." msgstr "Try again from the messaging application." #: indicator/textchannelobserver.cpp:236 msgid "The message could not be sent" msgstr "The message could not be sent" #: indicator/textchannelobserver.cpp:249 indicator/textchannelobserver.cpp:713 msgid "View message" msgstr "View message" #: indicator/textchannelobserver.cpp:295 msgid "New Group" msgstr "" #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:302 #, qt-format msgid "You joined group %1 " msgstr "" #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:306 #, qt-format msgid "You joined group %1" msgstr "" #: indicator/textchannelobserver.cpp:309 msgid "You joined a new group" msgstr "" #: indicator/textchannelobserver.cpp:328 msgid "View Group" msgstr "" #: indicator/textchannelobserver.cpp:367 indicator/ussdindicator.cpp:116 msgid "Ok" msgstr "Ok" #: indicator/textchannelobserver.cpp:373 msgid "Save" msgstr "Save" #: indicator/textchannelobserver.cpp:468 msgid "Emergency Alert" msgstr "" #: indicator/textchannelobserver.cpp:471 msgid "Emergency Alert: Extreme" msgstr "" #: indicator/textchannelobserver.cpp:474 msgid "Emergency Alert: Severe" msgstr "" #: indicator/textchannelobserver.cpp:477 msgid "Emergency Alert: Notice" msgstr "" #: indicator/textchannelobserver.cpp:482 msgid "AMBER Alert" msgstr "" #: indicator/textchannelobserver.cpp:485 msgid "Alert" msgstr "" #: indicator/textchannelobserver.cpp:531 msgid "Show alert" msgstr "" #: indicator/textchannelobserver.cpp:604 #, qt-format msgid "Attachment: %1 image" msgid_plural "Attachments: %1 images" msgstr[0] "Attachment: %1 image" msgstr[1] "Attachments: %1 images" #: indicator/textchannelobserver.cpp:606 #, qt-format msgid "Attachment: %1 video" msgid_plural "Attachments: %1 videos" msgstr[0] "Attachment: %1 video" msgstr[1] "Attachments: %1 videos" #: indicator/textchannelobserver.cpp:608 #, qt-format msgid "Attachment: %1 contact" msgid_plural "Attachments: %1 contacts" msgstr[0] "Attachment: %1 contact" msgstr[1] "Attachments: %1 contacts" #: indicator/textchannelobserver.cpp:610 #, qt-format msgid "Attachment: %1 audio clip" msgid_plural "Attachments: %1 audio clips" msgstr[0] "Attachment: %1 audio clip" msgstr[1] "Attachments: %1 audio clips" #: indicator/textchannelobserver.cpp:612 #, qt-format msgid "Attachment: %1 file" msgid_plural "Attachments: %1 files" msgstr[0] "Attachment: %1 file" msgstr[1] "Attachments: %1 files" #. TRANSLATORS : message displayed when any error occurred while receiving a MMS (case when cellular-data is off, or any downloading issue). Notify that there was a message, the user can find more about it in the messaging-app. #: indicator/textchannelobserver.cpp:615 #, fuzzy #| msgid "View message" msgid "New MMS message" msgstr "View message" #. TRANSLATORS : %1 is the recipient name #: indicator/textchannelobserver.cpp:679 indicator/textchannelobserver.cpp:683 #, qt-format msgid "Message to group from %1" msgstr "Message to group from %1" #: indicator/textchannelobserver.cpp:749 #, qt-format msgid "Message from %1" msgstr "Message from %1" #: indicator/textchannelobserver.cpp:910 msgid "Please, select a SIM card:" msgstr "Please, select a SIM card:" #: indicator/ussdindicator.cpp:119 msgid "Reply" msgstr "Reply" #: indicator/ussdindicator.cpp:142 msgid "Cancel" msgstr "Cancel" #: libtelephonyservice/callnotification.cpp:53 msgid "Conf call on hold" msgstr "" #: libtelephonyservice/callnotification.cpp:53 #, qt-format msgid "%1 call on hold" msgstr "" #: libtelephonyservice/callnotification.cpp:56 msgid "Conf call ended" msgstr "" #: libtelephonyservice/callnotification.cpp:56 #, qt-format msgid "%1 call ended" msgstr "" #: libtelephonyservice/callnotification.cpp:59 #, qt-format msgid "%1 call declined" msgstr "" #: libtelephonyservice/contactwatcher.cpp:157 msgid "Private Number" msgstr "Private Number" #: libtelephonyservice/contactwatcher.cpp:159 msgid "Unknown Number" msgstr "Unknown Number" #, fuzzy #~| msgid "Telephony Service" #~ msgid "telephony-service-call" #~ msgstr "Telephony Service" #, fuzzy #~| msgid "Telephony Service" #~ msgid "telephony-service-message" #~ msgstr "Telephony Service" telephony-service-0.5.3/po/en_CA.po000066400000000000000000000212011455543255600171210ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-12-16 17:03+0100\n" "PO-Revision-Date: 2023-07-17 18:05+0000\n" "Last-Translator: \"Rudra Harsh V.Singh\" \n" "Language-Team: English (Canada) \n" "Language: en_CA\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Generator: Weblate 5.0-dev\n" #: indicator/telephony-service-call.desktop.in:4 msgid "Phone Calls" msgstr "" #: indicator/telephony-service-sms.desktop.in:4 msgid "SMS" msgstr "" #: approver/approver.cpp:66 msgid "Unknown caller" msgstr "" #: approver/approver.cpp:94 msgid "I'm busy at the moment. I'll call later." msgstr "" #: approver/approver.cpp:95 msgid "I'm running late, on my way now." msgstr "" #: approver/approver.cpp:96 msgid "Please call me back later." msgstr "" #: approver/approver.cpp:457 #, qt-format msgid "On [%1]" msgstr "" #: approver/approver.cpp:461 indicator/messagingmenu.cpp:414 msgid "Private number" msgstr "" #: approver/approver.cpp:464 indicator/messagingmenu.cpp:244 #: indicator/messagingmenu.cpp:418 indicator/textchannelobserver.cpp:640 msgid "Unknown number" msgstr "" #: approver/approver.cpp:470 approver/approver.cpp:485 msgid "Caller number is not available" msgstr "" #: approver/approver.cpp:476 msgid "Calling from private number" msgstr "" #: approver/approver.cpp:479 msgid "Calling from unknown number" msgstr "" #: approver/approver.cpp:482 #, qt-format msgid "Calling from %1" msgstr "" #: approver/approver.cpp:529 msgid "Hold + Answer" msgstr "" #: approver/approver.cpp:530 msgid "Accept" msgstr "" #: approver/approver.cpp:543 msgid "End + Answer" msgstr "" #: approver/approver.cpp:552 msgid "Decline" msgstr "" #: approver/approver.cpp:560 msgid "Message & decline" msgstr "" #: approver/main.cpp:46 msgid "Telephony Service Approver" msgstr "" #: indicator/authhandler.cpp:72 msgid "Authentication failed. Do you want to review your credentials?" msgstr "" #: indicator/authhandler.cpp:91 msgid "Yes" msgstr "" #: indicator/authhandler.cpp:94 msgid "No" msgstr "" #: indicator/displaynamesettings.cpp:35 #, qt-format msgid "SIM %1" msgstr "SIM %1" #: indicator/main.cpp:53 msgid "Telephony Service Indicator" msgstr "" #: indicator/messagingmenu.cpp:83 indicator/messagingmenu.cpp:87 msgid "Telephony Service" msgstr "" #: indicator/messagingmenu.cpp:151 indicator/messagingmenu.cpp:293 #: indicator/messagingmenu.cpp:360 msgid "Send" msgstr "" #. TRANSLATORS : %1 is the group name and %2 is the recipient name #: indicator/messagingmenu.cpp:262 indicator/textchannelobserver.cpp:671 #: indicator/textchannelobserver.cpp:675 #, qt-format msgid "Message to %1 from %2" msgstr "" #. TRANSLATORS : %1 is the recipient name #: indicator/messagingmenu.cpp:265 indicator/messagingmenu.cpp:269 #, qt-format msgid "Message to the group from %1" msgstr "" #: indicator/messagingmenu.cpp:345 msgid "Call back" msgstr "" #: indicator/messagingmenu.cpp:350 msgid "Missed your call — can you call me now?" msgstr "" #: indicator/messagingmenu.cpp:351 msgid "Running late. On my way." msgstr "" #: indicator/messagingmenu.cpp:352 msgid "Busy at the moment. Will call you later." msgstr "" #: indicator/messagingmenu.cpp:353 msgid "I am 20 minutes late." msgstr "" #: indicator/messagingmenu.cpp:354 msgid "Still busy. Will call you later." msgstr "" #: indicator/messagingmenu.cpp:409 #, qt-format msgid "%1 missed call" msgid_plural "%1 missed calls" msgstr[0] "" msgstr[1] "" #: indicator/messagingmenu.cpp:492 msgid "Voicemail messages" msgstr "" #: indicator/messagingmenu.cpp:495 #, qt-format msgid "%1 voicemail message" msgid_plural "%1 voicemail messages" msgstr[0] "" msgstr[1] "" #: indicator/messagingmenu.cpp:500 msgid "Voicemail" msgstr "" #: indicator/metrics.cpp:42 #, qt-format msgid "%1 text messages sent today" msgstr "" #: indicator/metrics.cpp:43 msgid "No text messages sent today" msgstr "" #: indicator/metrics.cpp:44 #, qt-format msgid "%1 text messages received today" msgstr "" #: indicator/metrics.cpp:45 msgid "No text messages received today" msgstr "" #: indicator/metrics.cpp:46 #, qt-format msgid "%1 calls received today" msgstr "" #: indicator/metrics.cpp:47 msgid "No calls received today" msgstr "" #: indicator/metrics.cpp:48 #, qt-format msgid "%1 calls made today" msgstr "" #: indicator/metrics.cpp:49 indicator/metrics.cpp:51 msgid "No calls made today" msgstr "" #: indicator/metrics.cpp:50 #, qt-format msgid "Spent %1 minutes in calls today" msgstr "" #: indicator/textchannelobserver.cpp:225 msgid "Unlock your sim card and try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:227 msgid "Deactivate flight mode and try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:230 msgid "Try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:236 msgid "The message could not be sent" msgstr "" #: indicator/textchannelobserver.cpp:249 indicator/textchannelobserver.cpp:713 msgid "View message" msgstr "" #: indicator/textchannelobserver.cpp:295 msgid "New Group" msgstr "" #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:302 #, qt-format msgid "You joined group %1 " msgstr "" #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:306 #, qt-format msgid "You joined group %1" msgstr "" #: indicator/textchannelobserver.cpp:309 msgid "You joined a new group" msgstr "" #: indicator/textchannelobserver.cpp:328 msgid "View Group" msgstr "" #: indicator/textchannelobserver.cpp:367 indicator/ussdindicator.cpp:116 msgid "Ok" msgstr "" #: indicator/textchannelobserver.cpp:373 msgid "Save" msgstr "" #: indicator/textchannelobserver.cpp:468 msgid "Emergency Alert" msgstr "" #: indicator/textchannelobserver.cpp:471 msgid "Emergency Alert: Extreme" msgstr "" #: indicator/textchannelobserver.cpp:474 msgid "Emergency Alert: Severe" msgstr "" #: indicator/textchannelobserver.cpp:477 msgid "Emergency Alert: Notice" msgstr "" #: indicator/textchannelobserver.cpp:482 msgid "AMBER Alert" msgstr "" #: indicator/textchannelobserver.cpp:485 msgid "Alert" msgstr "" #: indicator/textchannelobserver.cpp:531 msgid "Show alert" msgstr "" #: indicator/textchannelobserver.cpp:604 #, qt-format msgid "Attachment: %1 image" msgid_plural "Attachments: %1 images" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:606 #, qt-format msgid "Attachment: %1 video" msgid_plural "Attachments: %1 videos" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:608 #, qt-format msgid "Attachment: %1 contact" msgid_plural "Attachments: %1 contacts" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:610 #, qt-format msgid "Attachment: %1 audio clip" msgid_plural "Attachments: %1 audio clips" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:612 #, qt-format msgid "Attachment: %1 file" msgid_plural "Attachments: %1 files" msgstr[0] "" msgstr[1] "" #. TRANSLATORS : message displayed when any error occurred while receiving a MMS (case when cellular-data is off, or any downloading issue). Notify that there was a message, the user can find more about it in the messaging-app. #: indicator/textchannelobserver.cpp:615 msgid "New MMS message" msgstr "" #. TRANSLATORS : %1 is the recipient name #: indicator/textchannelobserver.cpp:679 indicator/textchannelobserver.cpp:683 #, qt-format msgid "Message to group from %1" msgstr "" #: indicator/textchannelobserver.cpp:749 #, qt-format msgid "Message from %1" msgstr "" #: indicator/textchannelobserver.cpp:910 msgid "Please, select a SIM card:" msgstr "" #: indicator/ussdindicator.cpp:119 msgid "Reply" msgstr "" #: indicator/ussdindicator.cpp:142 msgid "Cancel" msgstr "Cancel" #: libtelephonyservice/callnotification.cpp:53 msgid "Conf call on hold" msgstr "" #: libtelephonyservice/callnotification.cpp:53 #, qt-format msgid "%1 call on hold" msgstr "" #: libtelephonyservice/callnotification.cpp:56 msgid "Conf call ended" msgstr "" #: libtelephonyservice/callnotification.cpp:56 #, qt-format msgid "%1 call ended" msgstr "" #: libtelephonyservice/callnotification.cpp:59 #, qt-format msgid "%1 call declined" msgstr "" #: libtelephonyservice/contactwatcher.cpp:157 msgid "Private Number" msgstr "" #: libtelephonyservice/contactwatcher.cpp:159 msgid "Unknown Number" msgstr "" telephony-service-0.5.3/po/en_GB.po000066400000000000000000000254361455543255600171440ustar00rootroot00000000000000# English (United Kingdom) translation for telephony-service # Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013 # This file is distributed under the same license as the telephony-service package. # FIRST AUTHOR , 2013. # msgid "" msgstr "" "Project-Id-Version: telephony-service\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-12-16 17:03+0100\n" "PO-Revision-Date: 2014-08-01 16:48+0000\n" "Last-Translator: Andi Chandler \n" "Language-Team: English (United Kingdom) \n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Launchpad-Export-Date: 2017-01-04 06:03+0000\n" "X-Generator: Launchpad (build 18298)\n" #: indicator/telephony-service-call.desktop.in:4 msgid "Phone Calls" msgstr "Phone Calls" #: indicator/telephony-service-sms.desktop.in:4 msgid "SMS" msgstr "SMS" #: approver/approver.cpp:66 msgid "Unknown caller" msgstr "Unknown caller" #: approver/approver.cpp:94 msgid "I'm busy at the moment. I'll call later." msgstr "I'm busy at the moment. I'll call later." #: approver/approver.cpp:95 msgid "I'm running late, on my way now." msgstr "I'm running late, on my way now." #: approver/approver.cpp:96 msgid "Please call me back later." msgstr "Please call me back later." #: approver/approver.cpp:457 #, qt-format msgid "On [%1]" msgstr "On [%1]" #: approver/approver.cpp:461 indicator/messagingmenu.cpp:414 msgid "Private number" msgstr "Private number" #: approver/approver.cpp:464 indicator/messagingmenu.cpp:244 #: indicator/messagingmenu.cpp:418 indicator/textchannelobserver.cpp:640 msgid "Unknown number" msgstr "Unknown number" #: approver/approver.cpp:470 approver/approver.cpp:485 msgid "Caller number is not available" msgstr "Caller number is not available" #: approver/approver.cpp:476 msgid "Calling from private number" msgstr "Calling from private number" #: approver/approver.cpp:479 msgid "Calling from unknown number" msgstr "Calling from unknown number" #: approver/approver.cpp:482 #, qt-format msgid "Calling from %1" msgstr "Calling from %1" #: approver/approver.cpp:529 msgid "Hold + Answer" msgstr "Hold + Answer" #: approver/approver.cpp:530 msgid "Accept" msgstr "Accept" #: approver/approver.cpp:543 msgid "End + Answer" msgstr "End + Answer" #: approver/approver.cpp:552 msgid "Decline" msgstr "Decline" #: approver/approver.cpp:560 msgid "Message & decline" msgstr "Message & decline" #: approver/main.cpp:46 msgid "Telephony Service Approver" msgstr "Telephony Service Approver" #: indicator/authhandler.cpp:72 msgid "Authentication failed. Do you want to review your credentials?" msgstr "Authentication failed. Do you want to review your credentials?" #: indicator/authhandler.cpp:91 msgid "Yes" msgstr "Yes" #: indicator/authhandler.cpp:94 msgid "No" msgstr "No" #: indicator/displaynamesettings.cpp:35 #, qt-format msgid "SIM %1" msgstr "SIM %1" #: indicator/main.cpp:53 msgid "Telephony Service Indicator" msgstr "Telephony Service Indicator" #: indicator/messagingmenu.cpp:83 indicator/messagingmenu.cpp:87 msgid "Telephony Service" msgstr "Telephony Service" #: indicator/messagingmenu.cpp:151 indicator/messagingmenu.cpp:293 #: indicator/messagingmenu.cpp:360 msgid "Send" msgstr "Send" #. TRANSLATORS : %1 is the group name and %2 is the recipient name #: indicator/messagingmenu.cpp:262 indicator/textchannelobserver.cpp:671 #: indicator/textchannelobserver.cpp:675 #, qt-format msgid "Message to %1 from %2" msgstr "" #. TRANSLATORS : %1 is the recipient name #: indicator/messagingmenu.cpp:265 indicator/messagingmenu.cpp:269 #, fuzzy, qt-format #| msgid "Message to group from %1" msgid "Message to the group from %1" msgstr "Message to group from %1" #: indicator/messagingmenu.cpp:345 msgid "Call back" msgstr "Call back" #: indicator/messagingmenu.cpp:350 #, fuzzy #| msgid "I missed your call - can you call me now?" msgid "Missed your call — can you call me now?" msgstr "I missed your call - can you call me now?" #: indicator/messagingmenu.cpp:351 #, fuzzy #| msgid "I'm running late. I'm on my way." msgid "Running late. On my way." msgstr "I'm running late. I'm on my way." #: indicator/messagingmenu.cpp:352 #, fuzzy #| msgid "I'm busy at the moment. I'll call you later." msgid "Busy at the moment. Will call you later." msgstr "I'm busy at the moment. I'll call you later." #: indicator/messagingmenu.cpp:353 #, fuzzy #| msgid "I'll be 20 minutes late." msgid "I am 20 minutes late." msgstr "I'll be 20 minutes late." #: indicator/messagingmenu.cpp:354 #, fuzzy #| msgid "Sorry, I'm still busy. I'll call you later." msgid "Still busy. Will call you later." msgstr "Sorry, I'm still busy. I'll call you later." #: indicator/messagingmenu.cpp:409 #, qt-format msgid "%1 missed call" msgid_plural "%1 missed calls" msgstr[0] "%1 missed call" msgstr[1] "%1 missed calls" #: indicator/messagingmenu.cpp:492 msgid "Voicemail messages" msgstr "Voicemail messages" #: indicator/messagingmenu.cpp:495 #, qt-format msgid "%1 voicemail message" msgid_plural "%1 voicemail messages" msgstr[0] "%1 voicemail message" msgstr[1] "%1 voicemail messages" #: indicator/messagingmenu.cpp:500 msgid "Voicemail" msgstr "Voicemail" #: indicator/metrics.cpp:42 #, qt-format msgid "%1 text messages sent today" msgstr "%1 text messages sent today" #: indicator/metrics.cpp:43 msgid "No text messages sent today" msgstr "No text messages sent today" #: indicator/metrics.cpp:44 #, qt-format msgid "%1 text messages received today" msgstr "%1 text messages received today" #: indicator/metrics.cpp:45 msgid "No text messages received today" msgstr "No text messages received today" #: indicator/metrics.cpp:46 #, qt-format msgid "%1 calls received today" msgstr "%1 calls received today" #: indicator/metrics.cpp:47 msgid "No calls received today" msgstr "No calls received today" #: indicator/metrics.cpp:48 #, qt-format msgid "%1 calls made today" msgstr "%1 calls made today" #: indicator/metrics.cpp:49 indicator/metrics.cpp:51 msgid "No calls made today" msgstr "No calls made today" #: indicator/metrics.cpp:50 #, qt-format msgid "Spent %1 minutes in calls today" msgstr "Spent %1 minutes in calls today" #: indicator/textchannelobserver.cpp:225 msgid "Unlock your sim card and try again from the messaging application." msgstr "Unlock your SIM card and try again from the messaging application." #: indicator/textchannelobserver.cpp:227 msgid "Deactivate flight mode and try again from the messaging application." msgstr "Deactivate flight mode and try again from the messaging application." #: indicator/textchannelobserver.cpp:230 msgid "Try again from the messaging application." msgstr "Try again from the messaging application." #: indicator/textchannelobserver.cpp:236 msgid "The message could not be sent" msgstr "The message could not be sent" #: indicator/textchannelobserver.cpp:249 indicator/textchannelobserver.cpp:713 msgid "View message" msgstr "View message" #: indicator/textchannelobserver.cpp:295 msgid "New Group" msgstr "" #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:302 #, qt-format msgid "You joined group %1 " msgstr "" #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:306 #, qt-format msgid "You joined group %1" msgstr "" #: indicator/textchannelobserver.cpp:309 msgid "You joined a new group" msgstr "" #: indicator/textchannelobserver.cpp:328 msgid "View Group" msgstr "" #: indicator/textchannelobserver.cpp:367 indicator/ussdindicator.cpp:116 msgid "Ok" msgstr "Ok" #: indicator/textchannelobserver.cpp:373 msgid "Save" msgstr "Save" #: indicator/textchannelobserver.cpp:468 msgid "Emergency Alert" msgstr "" #: indicator/textchannelobserver.cpp:471 msgid "Emergency Alert: Extreme" msgstr "" #: indicator/textchannelobserver.cpp:474 msgid "Emergency Alert: Severe" msgstr "" #: indicator/textchannelobserver.cpp:477 msgid "Emergency Alert: Notice" msgstr "" #: indicator/textchannelobserver.cpp:482 msgid "AMBER Alert" msgstr "" #: indicator/textchannelobserver.cpp:485 msgid "Alert" msgstr "" #: indicator/textchannelobserver.cpp:531 msgid "Show alert" msgstr "" #: indicator/textchannelobserver.cpp:604 #, qt-format msgid "Attachment: %1 image" msgid_plural "Attachments: %1 images" msgstr[0] "Attachment: %1 image" msgstr[1] "Attachments: %1 images" #: indicator/textchannelobserver.cpp:606 #, qt-format msgid "Attachment: %1 video" msgid_plural "Attachments: %1 videos" msgstr[0] "Attachment: %1 video" msgstr[1] "Attachments: %1 videos" #: indicator/textchannelobserver.cpp:608 #, qt-format msgid "Attachment: %1 contact" msgid_plural "Attachments: %1 contacts" msgstr[0] "Attachment: %1 contact" msgstr[1] "Attachments: %1 contacts" #: indicator/textchannelobserver.cpp:610 #, qt-format msgid "Attachment: %1 audio clip" msgid_plural "Attachments: %1 audio clips" msgstr[0] "Attachment: %1 audio clip" msgstr[1] "Attachments: %1 audio clips" #: indicator/textchannelobserver.cpp:612 #, qt-format msgid "Attachment: %1 file" msgid_plural "Attachments: %1 files" msgstr[0] "Attachment: %1 file" msgstr[1] "Attachments: %1 files" #. TRANSLATORS : message displayed when any error occurred while receiving a MMS (case when cellular-data is off, or any downloading issue). Notify that there was a message, the user can find more about it in the messaging-app. #: indicator/textchannelobserver.cpp:615 #, fuzzy #| msgid "View message" msgid "New MMS message" msgstr "View message" #. TRANSLATORS : %1 is the recipient name #: indicator/textchannelobserver.cpp:679 indicator/textchannelobserver.cpp:683 #, qt-format msgid "Message to group from %1" msgstr "Message to group from %1" #: indicator/textchannelobserver.cpp:749 #, qt-format msgid "Message from %1" msgstr "Message from %1" #: indicator/textchannelobserver.cpp:910 msgid "Please, select a SIM card:" msgstr "Please, select a SIM card:" #: indicator/ussdindicator.cpp:119 msgid "Reply" msgstr "Reply" #: indicator/ussdindicator.cpp:142 msgid "Cancel" msgstr "Cancel" #: libtelephonyservice/callnotification.cpp:53 msgid "Conf call on hold" msgstr "" #: libtelephonyservice/callnotification.cpp:53 #, qt-format msgid "%1 call on hold" msgstr "" #: libtelephonyservice/callnotification.cpp:56 msgid "Conf call ended" msgstr "" #: libtelephonyservice/callnotification.cpp:56 #, qt-format msgid "%1 call ended" msgstr "" #: libtelephonyservice/callnotification.cpp:59 #, qt-format msgid "%1 call declined" msgstr "" #: libtelephonyservice/contactwatcher.cpp:157 msgid "Private Number" msgstr "Private Number" #: libtelephonyservice/contactwatcher.cpp:159 msgid "Unknown Number" msgstr "Unknown Number" #, fuzzy #~| msgid "Telephony Service" #~ msgid "telephony-service-call" #~ msgstr "Telephony Service" #, fuzzy #~| msgid "Telephony Service" #~ msgid "telephony-service-message" #~ msgstr "Telephony Service" telephony-service-0.5.3/po/en_US.po000066400000000000000000000207461455543255600172020ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-12-16 17:03+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: Automatically generated\n" "Language-Team: none\n" "Language: en_US\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" #: indicator/telephony-service-call.desktop.in:4 msgid "Phone Calls" msgstr "" #: indicator/telephony-service-sms.desktop.in:4 msgid "SMS" msgstr "" #: approver/approver.cpp:66 msgid "Unknown caller" msgstr "" #: approver/approver.cpp:94 msgid "I'm busy at the moment. I'll call later." msgstr "" #: approver/approver.cpp:95 msgid "I'm running late, on my way now." msgstr "" #: approver/approver.cpp:96 msgid "Please call me back later." msgstr "" #: approver/approver.cpp:457 #, qt-format msgid "On [%1]" msgstr "" #: approver/approver.cpp:461 indicator/messagingmenu.cpp:414 msgid "Private number" msgstr "" #: approver/approver.cpp:464 indicator/messagingmenu.cpp:244 #: indicator/messagingmenu.cpp:418 indicator/textchannelobserver.cpp:640 msgid "Unknown number" msgstr "" #: approver/approver.cpp:470 approver/approver.cpp:485 msgid "Caller number is not available" msgstr "" #: approver/approver.cpp:476 msgid "Calling from private number" msgstr "" #: approver/approver.cpp:479 msgid "Calling from unknown number" msgstr "" #: approver/approver.cpp:482 #, qt-format msgid "Calling from %1" msgstr "" #: approver/approver.cpp:529 msgid "Hold + Answer" msgstr "" #: approver/approver.cpp:530 msgid "Accept" msgstr "" #: approver/approver.cpp:543 msgid "End + Answer" msgstr "" #: approver/approver.cpp:552 msgid "Decline" msgstr "" #: approver/approver.cpp:560 msgid "Message & decline" msgstr "" #: approver/main.cpp:46 msgid "Telephony Service Approver" msgstr "" #: indicator/authhandler.cpp:72 msgid "Authentication failed. Do you want to review your credentials?" msgstr "" #: indicator/authhandler.cpp:91 msgid "Yes" msgstr "" #: indicator/authhandler.cpp:94 msgid "No" msgstr "" #: indicator/displaynamesettings.cpp:35 #, qt-format msgid "SIM %1" msgstr "" #: indicator/main.cpp:53 msgid "Telephony Service Indicator" msgstr "" #: indicator/messagingmenu.cpp:83 indicator/messagingmenu.cpp:87 msgid "Telephony Service" msgstr "" #: indicator/messagingmenu.cpp:151 indicator/messagingmenu.cpp:293 #: indicator/messagingmenu.cpp:360 msgid "Send" msgstr "" #. TRANSLATORS : %1 is the group name and %2 is the recipient name #: indicator/messagingmenu.cpp:262 indicator/textchannelobserver.cpp:671 #: indicator/textchannelobserver.cpp:675 #, qt-format msgid "Message to %1 from %2" msgstr "" #. TRANSLATORS : %1 is the recipient name #: indicator/messagingmenu.cpp:265 indicator/messagingmenu.cpp:269 #, qt-format msgid "Message to the group from %1" msgstr "" #: indicator/messagingmenu.cpp:345 msgid "Call back" msgstr "" #: indicator/messagingmenu.cpp:350 msgid "Missed your call — can you call me now?" msgstr "" #: indicator/messagingmenu.cpp:351 msgid "Running late. On my way." msgstr "" #: indicator/messagingmenu.cpp:352 msgid "Busy at the moment. Will call you later." msgstr "" #: indicator/messagingmenu.cpp:353 msgid "I am 20 minutes late." msgstr "" #: indicator/messagingmenu.cpp:354 msgid "Still busy. Will call you later." msgstr "" #: indicator/messagingmenu.cpp:409 #, qt-format msgid "%1 missed call" msgid_plural "%1 missed calls" msgstr[0] "" msgstr[1] "" #: indicator/messagingmenu.cpp:492 msgid "Voicemail messages" msgstr "" #: indicator/messagingmenu.cpp:495 #, qt-format msgid "%1 voicemail message" msgid_plural "%1 voicemail messages" msgstr[0] "" msgstr[1] "" #: indicator/messagingmenu.cpp:500 msgid "Voicemail" msgstr "" #: indicator/metrics.cpp:42 #, qt-format msgid "%1 text messages sent today" msgstr "" #: indicator/metrics.cpp:43 msgid "No text messages sent today" msgstr "" #: indicator/metrics.cpp:44 #, qt-format msgid "%1 text messages received today" msgstr "" #: indicator/metrics.cpp:45 msgid "No text messages received today" msgstr "" #: indicator/metrics.cpp:46 #, qt-format msgid "%1 calls received today" msgstr "" #: indicator/metrics.cpp:47 msgid "No calls received today" msgstr "" #: indicator/metrics.cpp:48 #, qt-format msgid "%1 calls made today" msgstr "" #: indicator/metrics.cpp:49 indicator/metrics.cpp:51 msgid "No calls made today" msgstr "" #: indicator/metrics.cpp:50 #, qt-format msgid "Spent %1 minutes in calls today" msgstr "" #: indicator/textchannelobserver.cpp:225 msgid "Unlock your sim card and try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:227 msgid "Deactivate flight mode and try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:230 msgid "Try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:236 msgid "The message could not be sent" msgstr "" #: indicator/textchannelobserver.cpp:249 indicator/textchannelobserver.cpp:713 msgid "View message" msgstr "" #: indicator/textchannelobserver.cpp:295 msgid "New Group" msgstr "" #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:302 #, qt-format msgid "You joined group %1 " msgstr "" #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:306 #, qt-format msgid "You joined group %1" msgstr "" #: indicator/textchannelobserver.cpp:309 msgid "You joined a new group" msgstr "" #: indicator/textchannelobserver.cpp:328 msgid "View Group" msgstr "" #: indicator/textchannelobserver.cpp:367 indicator/ussdindicator.cpp:116 msgid "Ok" msgstr "" #: indicator/textchannelobserver.cpp:373 msgid "Save" msgstr "" #: indicator/textchannelobserver.cpp:468 msgid "Emergency Alert" msgstr "" #: indicator/textchannelobserver.cpp:471 msgid "Emergency Alert: Extreme" msgstr "" #: indicator/textchannelobserver.cpp:474 msgid "Emergency Alert: Severe" msgstr "" #: indicator/textchannelobserver.cpp:477 msgid "Emergency Alert: Notice" msgstr "" #: indicator/textchannelobserver.cpp:482 msgid "AMBER Alert" msgstr "" #: indicator/textchannelobserver.cpp:485 msgid "Alert" msgstr "" #: indicator/textchannelobserver.cpp:531 msgid "Show alert" msgstr "" #: indicator/textchannelobserver.cpp:604 #, qt-format msgid "Attachment: %1 image" msgid_plural "Attachments: %1 images" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:606 #, qt-format msgid "Attachment: %1 video" msgid_plural "Attachments: %1 videos" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:608 #, qt-format msgid "Attachment: %1 contact" msgid_plural "Attachments: %1 contacts" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:610 #, qt-format msgid "Attachment: %1 audio clip" msgid_plural "Attachments: %1 audio clips" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:612 #, qt-format msgid "Attachment: %1 file" msgid_plural "Attachments: %1 files" msgstr[0] "" msgstr[1] "" #. TRANSLATORS : message displayed when any error occurred while receiving a MMS (case when cellular-data is off, or any downloading issue). Notify that there was a message, the user can find more about it in the messaging-app. #: indicator/textchannelobserver.cpp:615 msgid "New MMS message" msgstr "" #. TRANSLATORS : %1 is the recipient name #: indicator/textchannelobserver.cpp:679 indicator/textchannelobserver.cpp:683 #, qt-format msgid "Message to group from %1" msgstr "" #: indicator/textchannelobserver.cpp:749 #, qt-format msgid "Message from %1" msgstr "" #: indicator/textchannelobserver.cpp:910 msgid "Please, select a SIM card:" msgstr "" #: indicator/ussdindicator.cpp:119 msgid "Reply" msgstr "" #: indicator/ussdindicator.cpp:142 msgid "Cancel" msgstr "" #: libtelephonyservice/callnotification.cpp:53 msgid "Conf call on hold" msgstr "" #: libtelephonyservice/callnotification.cpp:53 #, qt-format msgid "%1 call on hold" msgstr "" #: libtelephonyservice/callnotification.cpp:56 msgid "Conf call ended" msgstr "" #: libtelephonyservice/callnotification.cpp:56 #, qt-format msgid "%1 call ended" msgstr "" #: libtelephonyservice/callnotification.cpp:59 #, qt-format msgid "%1 call declined" msgstr "" #: libtelephonyservice/contactwatcher.cpp:157 msgid "Private Number" msgstr "" #: libtelephonyservice/contactwatcher.cpp:159 msgid "Unknown Number" msgstr "" telephony-service-0.5.3/po/eo.po000066400000000000000000000211761455543255600165720ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-12-16 17:03+0100\n" "PO-Revision-Date: 2023-02-16 22:38+0000\n" "Last-Translator: phlostically \n" "Language-Team: Esperanto \n" "Language: eo\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Generator: Weblate 4.16-dev\n" #: indicator/telephony-service-call.desktop.in:4 msgid "Phone Calls" msgstr "" #: indicator/telephony-service-sms.desktop.in:4 msgid "SMS" msgstr "" #: approver/approver.cpp:66 msgid "Unknown caller" msgstr "" #: approver/approver.cpp:94 msgid "I'm busy at the moment. I'll call later." msgstr "" #: approver/approver.cpp:95 msgid "I'm running late, on my way now." msgstr "" #: approver/approver.cpp:96 msgid "Please call me back later." msgstr "" #: approver/approver.cpp:457 #, qt-format msgid "On [%1]" msgstr "" #: approver/approver.cpp:461 indicator/messagingmenu.cpp:414 msgid "Private number" msgstr "" #: approver/approver.cpp:464 indicator/messagingmenu.cpp:244 #: indicator/messagingmenu.cpp:418 indicator/textchannelobserver.cpp:640 msgid "Unknown number" msgstr "" #: approver/approver.cpp:470 approver/approver.cpp:485 msgid "Caller number is not available" msgstr "" #: approver/approver.cpp:476 msgid "Calling from private number" msgstr "" #: approver/approver.cpp:479 msgid "Calling from unknown number" msgstr "" #: approver/approver.cpp:482 #, qt-format msgid "Calling from %1" msgstr "" #: approver/approver.cpp:529 msgid "Hold + Answer" msgstr "" #: approver/approver.cpp:530 msgid "Accept" msgstr "Akcepti" #: approver/approver.cpp:543 msgid "End + Answer" msgstr "" #: approver/approver.cpp:552 msgid "Decline" msgstr "" #: approver/approver.cpp:560 msgid "Message & decline" msgstr "" #: approver/main.cpp:46 msgid "Telephony Service Approver" msgstr "" #: indicator/authhandler.cpp:72 msgid "Authentication failed. Do you want to review your credentials?" msgstr "" #: indicator/authhandler.cpp:91 msgid "Yes" msgstr "Jes" #: indicator/authhandler.cpp:94 msgid "No" msgstr "Ne" #: indicator/displaynamesettings.cpp:35 #, qt-format msgid "SIM %1" msgstr "" #: indicator/main.cpp:53 msgid "Telephony Service Indicator" msgstr "" #: indicator/messagingmenu.cpp:83 indicator/messagingmenu.cpp:87 msgid "Telephony Service" msgstr "" #: indicator/messagingmenu.cpp:151 indicator/messagingmenu.cpp:293 #: indicator/messagingmenu.cpp:360 msgid "Send" msgstr "Rendi" #. TRANSLATORS : %1 is the group name and %2 is the recipient name #: indicator/messagingmenu.cpp:262 indicator/textchannelobserver.cpp:671 #: indicator/textchannelobserver.cpp:675 #, qt-format msgid "Message to %1 from %2" msgstr "" #. TRANSLATORS : %1 is the recipient name #: indicator/messagingmenu.cpp:265 indicator/messagingmenu.cpp:269 #, qt-format msgid "Message to the group from %1" msgstr "" #: indicator/messagingmenu.cpp:345 msgid "Call back" msgstr "" #: indicator/messagingmenu.cpp:350 msgid "Missed your call — can you call me now?" msgstr "" #: indicator/messagingmenu.cpp:351 msgid "Running late. On my way." msgstr "" #: indicator/messagingmenu.cpp:352 msgid "Busy at the moment. Will call you later." msgstr "" #: indicator/messagingmenu.cpp:353 msgid "I am 20 minutes late." msgstr "" #: indicator/messagingmenu.cpp:354 msgid "Still busy. Will call you later." msgstr "" #: indicator/messagingmenu.cpp:409 #, qt-format msgid "%1 missed call" msgid_plural "%1 missed calls" msgstr[0] "" msgstr[1] "" #: indicator/messagingmenu.cpp:492 msgid "Voicemail messages" msgstr "" #: indicator/messagingmenu.cpp:495 #, qt-format msgid "%1 voicemail message" msgid_plural "%1 voicemail messages" msgstr[0] "" msgstr[1] "" #: indicator/messagingmenu.cpp:500 msgid "Voicemail" msgstr "" #: indicator/metrics.cpp:42 #, qt-format msgid "%1 text messages sent today" msgstr "" #: indicator/metrics.cpp:43 msgid "No text messages sent today" msgstr "" #: indicator/metrics.cpp:44 #, qt-format msgid "%1 text messages received today" msgstr "" #: indicator/metrics.cpp:45 msgid "No text messages received today" msgstr "" #: indicator/metrics.cpp:46 #, qt-format msgid "%1 calls received today" msgstr "" #: indicator/metrics.cpp:47 msgid "No calls received today" msgstr "" #: indicator/metrics.cpp:48 #, qt-format msgid "%1 calls made today" msgstr "" #: indicator/metrics.cpp:49 indicator/metrics.cpp:51 msgid "No calls made today" msgstr "" #: indicator/metrics.cpp:50 #, qt-format msgid "Spent %1 minutes in calls today" msgstr "" #: indicator/textchannelobserver.cpp:225 msgid "Unlock your sim card and try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:227 msgid "Deactivate flight mode and try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:230 msgid "Try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:236 msgid "The message could not be sent" msgstr "" #: indicator/textchannelobserver.cpp:249 indicator/textchannelobserver.cpp:713 msgid "View message" msgstr "" #: indicator/textchannelobserver.cpp:295 msgid "New Group" msgstr "" #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:302 #, qt-format msgid "You joined group %1 " msgstr "" #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:306 #, qt-format msgid "You joined group %1" msgstr "" #: indicator/textchannelobserver.cpp:309 msgid "You joined a new group" msgstr "" #: indicator/textchannelobserver.cpp:328 msgid "View Group" msgstr "" #: indicator/textchannelobserver.cpp:367 indicator/ussdindicator.cpp:116 msgid "Ok" msgstr "Bone" #: indicator/textchannelobserver.cpp:373 msgid "Save" msgstr "" #: indicator/textchannelobserver.cpp:468 msgid "Emergency Alert" msgstr "" #: indicator/textchannelobserver.cpp:471 msgid "Emergency Alert: Extreme" msgstr "" #: indicator/textchannelobserver.cpp:474 msgid "Emergency Alert: Severe" msgstr "" #: indicator/textchannelobserver.cpp:477 msgid "Emergency Alert: Notice" msgstr "" #: indicator/textchannelobserver.cpp:482 msgid "AMBER Alert" msgstr "" #: indicator/textchannelobserver.cpp:485 msgid "Alert" msgstr "" #: indicator/textchannelobserver.cpp:531 msgid "Show alert" msgstr "" #: indicator/textchannelobserver.cpp:604 #, qt-format msgid "Attachment: %1 image" msgid_plural "Attachments: %1 images" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:606 #, qt-format msgid "Attachment: %1 video" msgid_plural "Attachments: %1 videos" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:608 #, qt-format msgid "Attachment: %1 contact" msgid_plural "Attachments: %1 contacts" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:610 #, qt-format msgid "Attachment: %1 audio clip" msgid_plural "Attachments: %1 audio clips" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:612 #, qt-format msgid "Attachment: %1 file" msgid_plural "Attachments: %1 files" msgstr[0] "" msgstr[1] "" #. TRANSLATORS : message displayed when any error occurred while receiving a MMS (case when cellular-data is off, or any downloading issue). Notify that there was a message, the user can find more about it in the messaging-app. #: indicator/textchannelobserver.cpp:615 msgid "New MMS message" msgstr "" #. TRANSLATORS : %1 is the recipient name #: indicator/textchannelobserver.cpp:679 indicator/textchannelobserver.cpp:683 #, qt-format msgid "Message to group from %1" msgstr "" #: indicator/textchannelobserver.cpp:749 #, qt-format msgid "Message from %1" msgstr "" #: indicator/textchannelobserver.cpp:910 msgid "Please, select a SIM card:" msgstr "" #: indicator/ussdindicator.cpp:119 msgid "Reply" msgstr "" #: indicator/ussdindicator.cpp:142 msgid "Cancel" msgstr "Nuligi" #: libtelephonyservice/callnotification.cpp:53 msgid "Conf call on hold" msgstr "" #: libtelephonyservice/callnotification.cpp:53 #, qt-format msgid "%1 call on hold" msgstr "" #: libtelephonyservice/callnotification.cpp:56 msgid "Conf call ended" msgstr "" #: libtelephonyservice/callnotification.cpp:56 #, qt-format msgid "%1 call ended" msgstr "" #: libtelephonyservice/callnotification.cpp:59 #, qt-format msgid "%1 call declined" msgstr "" #: libtelephonyservice/contactwatcher.cpp:157 msgid "Private Number" msgstr "" #: libtelephonyservice/contactwatcher.cpp:159 msgid "Unknown Number" msgstr "" telephony-service-0.5.3/po/es.po000066400000000000000000000267471455543255600166070ustar00rootroot00000000000000# Spanish translation for telephony-service # Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013 # This file is distributed under the same license as the telephony-service package. # FIRST AUTHOR , 2013. # msgid "" msgstr "" "Project-Id-Version: telephony-service\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-12-16 17:03+0100\n" "PO-Revision-Date: 2023-12-06 00:23+0000\n" "Last-Translator: gallegonovato \n" "Language-Team: Spanish \n" "Language: es\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Generator: Weblate 5.3-dev\n" "X-Launchpad-Export-Date: 2017-01-04 06:03+0000\n" #: indicator/telephony-service-call.desktop.in:4 msgid "Phone Calls" msgstr "Llamadas telefónicas" #: indicator/telephony-service-sms.desktop.in:4 msgid "SMS" msgstr "SMS" #: approver/approver.cpp:66 msgid "Unknown caller" msgstr "Llamante desconocido" #: approver/approver.cpp:94 msgid "I'm busy at the moment. I'll call later." msgstr "Te llamaré en cuanto pueda." #: approver/approver.cpp:95 msgid "I'm running late, on my way now." msgstr "Llegaré tarde, estoy en camino." #: approver/approver.cpp:96 msgid "Please call me back later." msgstr "Por favor llámame luego." #: approver/approver.cpp:457 #, qt-format msgid "On [%1]" msgstr "En [%1]" #: approver/approver.cpp:461 indicator/messagingmenu.cpp:414 msgid "Private number" msgstr "Número privado" #: approver/approver.cpp:464 indicator/messagingmenu.cpp:244 #: indicator/messagingmenu.cpp:418 indicator/textchannelobserver.cpp:640 msgid "Unknown number" msgstr "Número desconocido" #: approver/approver.cpp:470 approver/approver.cpp:485 msgid "Caller number is not available" msgstr "El número del que llama no está disponible" #: approver/approver.cpp:476 msgid "Calling from private number" msgstr "Llamada desde un número privado" #: approver/approver.cpp:479 msgid "Calling from unknown number" msgstr "Llamada desde un número desconocido" #: approver/approver.cpp:482 #, qt-format msgid "Calling from %1" msgstr "Llamada de %1" #: approver/approver.cpp:529 msgid "Hold + Answer" msgstr "En espera y responder" #: approver/approver.cpp:530 msgid "Accept" msgstr "Aceptar" #: approver/approver.cpp:543 msgid "End + Answer" msgstr "Finalizar y responder" #: approver/approver.cpp:552 msgid "Decline" msgstr "Rechazar" #: approver/approver.cpp:560 msgid "Message & decline" msgstr "Rechazar con mensaje" #: approver/main.cpp:46 msgid "Telephony Service Approver" msgstr "Aprobador del servicio de telefonía" #: indicator/authhandler.cpp:72 msgid "Authentication failed. Do you want to review your credentials?" msgstr "Fallo de autentificación. ¿Quiere revisar sus credenciales?" #: indicator/authhandler.cpp:91 msgid "Yes" msgstr "Sí" #: indicator/authhandler.cpp:94 msgid "No" msgstr "No" #: indicator/displaynamesettings.cpp:35 #, qt-format msgid "SIM %1" msgstr "SIM %1" #: indicator/main.cpp:53 msgid "Telephony Service Indicator" msgstr "Indicador del servicio de telefonía" #: indicator/messagingmenu.cpp:83 indicator/messagingmenu.cpp:87 msgid "Telephony Service" msgstr "Servicio de telefonía" #: indicator/messagingmenu.cpp:151 indicator/messagingmenu.cpp:293 #: indicator/messagingmenu.cpp:360 msgid "Send" msgstr "Enviar" #. TRANSLATORS : %1 is the group name and %2 is the recipient name #: indicator/messagingmenu.cpp:262 indicator/textchannelobserver.cpp:671 #: indicator/textchannelobserver.cpp:675 #, qt-format msgid "Message to %1 from %2" msgstr "Mensaje para %1 de %2" #. TRANSLATORS : %1 is the recipient name #: indicator/messagingmenu.cpp:265 indicator/messagingmenu.cpp:269 #, qt-format msgid "Message to the group from %1" msgstr "Mensaje al grupo de %1" #: indicator/messagingmenu.cpp:345 msgid "Call back" msgstr "Devolver llamada" #: indicator/messagingmenu.cpp:350 msgid "Missed your call — can you call me now?" msgstr "No pude responderte; ¿podrías llamarme ahora?" #: indicator/messagingmenu.cpp:351 msgid "Running late. On my way." msgstr "Se me hizo tarde. Voy en camino." #: indicator/messagingmenu.cpp:352 msgid "Busy at the moment. Will call you later." msgstr "Estoy ocupado/a en este momento. Te llamaré luego." #: indicator/messagingmenu.cpp:353 msgid "I am 20 minutes late." msgstr "Llego 20 minutos tarde." #: indicator/messagingmenu.cpp:354 msgid "Still busy. Will call you later." msgstr "Sigo ocupado/a. Te llamaré luego." #: indicator/messagingmenu.cpp:409 #, qt-format msgid "%1 missed call" msgid_plural "%1 missed calls" msgstr[0] "%1 llamada perdida" msgstr[1] "%1 llamadas perdidas" #: indicator/messagingmenu.cpp:492 msgid "Voicemail messages" msgstr "Mensajes de voz" #: indicator/messagingmenu.cpp:495 #, qt-format msgid "%1 voicemail message" msgid_plural "%1 voicemail messages" msgstr[0] "%1 mensaje en el buzón de voz" msgstr[1] "%1 mensajes en el buzón de voz" #: indicator/messagingmenu.cpp:500 msgid "Voicemail" msgstr "Buzón de voz" #: indicator/metrics.cpp:42 #, qt-format msgid "%1 text messages sent today" msgstr "%1 mensajes de texto realizados hoy" #: indicator/metrics.cpp:43 msgid "No text messages sent today" msgstr "No se enviaron mensajes de texto hoy" #: indicator/metrics.cpp:44 #, qt-format msgid "%1 text messages received today" msgstr "%1 mensajes de texto recibidos hoy" #: indicator/metrics.cpp:45 msgid "No text messages received today" msgstr "No se recibieron mensajes de texto hoy" #: indicator/metrics.cpp:46 #, qt-format msgid "%1 calls received today" msgstr "%1 llamadas recibidas hoy" #: indicator/metrics.cpp:47 msgid "No calls received today" msgstr "No se recibieron llamadas hoy" #: indicator/metrics.cpp:48 #, qt-format msgid "%1 calls made today" msgstr "%1 llamadas realizadas hoy" #: indicator/metrics.cpp:49 indicator/metrics.cpp:51 msgid "No calls made today" msgstr "No se realizaron llamadas hoy" #: indicator/metrics.cpp:50 #, qt-format msgid "Spent %1 minutes in calls today" msgstr "Ha utilizado %1 minutos en llamadas hoy" #: indicator/textchannelobserver.cpp:225 msgid "Unlock your sim card and try again from the messaging application." msgstr "" "Desbloquee la tarjeta SIM e inténtelo de nuevo desde la aplicación de " "mensajería." #: indicator/textchannelobserver.cpp:227 msgid "Deactivate flight mode and try again from the messaging application." msgstr "" "Desactive el modo avión e inténtelo de nuevo desde la aplicación de " "mensajería." #: indicator/textchannelobserver.cpp:230 msgid "Try again from the messaging application." msgstr "Inténtelo de nuevo desde la aplicación de mensajería." #: indicator/textchannelobserver.cpp:236 msgid "The message could not be sent" msgstr "No se pudo enviar el mensaje" #: indicator/textchannelobserver.cpp:249 indicator/textchannelobserver.cpp:713 msgid "View message" msgstr "Ver mensaje" #: indicator/textchannelobserver.cpp:295 msgid "New Group" msgstr "Nuevo grupo" #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:302 #, qt-format msgid "You joined group %1 " msgstr "Se ha unido al grupo %1 " #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:306 #, qt-format msgid "You joined group %1" msgstr "Se ha unido al grupo %1" #: indicator/textchannelobserver.cpp:309 msgid "You joined a new group" msgstr "Se ha unido a un nuevo grupo" #: indicator/textchannelobserver.cpp:328 msgid "View Group" msgstr "Ver grupo" #: indicator/textchannelobserver.cpp:367 indicator/ussdindicator.cpp:116 msgid "Ok" msgstr "Aceptar" #: indicator/textchannelobserver.cpp:373 msgid "Save" msgstr "Guardar" #: indicator/textchannelobserver.cpp:468 msgid "Emergency Alert" msgstr "Alerta de emergencia" #: indicator/textchannelobserver.cpp:471 msgid "Emergency Alert: Extreme" msgstr "Alerta de emergencia: extrema" #: indicator/textchannelobserver.cpp:474 msgid "Emergency Alert: Severe" msgstr "Alerta de emergencia: grave" #: indicator/textchannelobserver.cpp:477 msgid "Emergency Alert: Notice" msgstr "Alerta de emergencia: aviso" #: indicator/textchannelobserver.cpp:482 msgid "AMBER Alert" msgstr "Alerta AMBER" #: indicator/textchannelobserver.cpp:485 msgid "Alert" msgstr "Alerta" #: indicator/textchannelobserver.cpp:531 msgid "Show alert" msgstr "Mostrar alerta" #: indicator/textchannelobserver.cpp:604 #, qt-format msgid "Attachment: %1 image" msgid_plural "Attachments: %1 images" msgstr[0] "Adjunto: %1 imagen" msgstr[1] "Adjuntos: %1 imágenes" #: indicator/textchannelobserver.cpp:606 #, qt-format msgid "Attachment: %1 video" msgid_plural "Attachments: %1 videos" msgstr[0] "Adjunto: %1 vídeo" msgstr[1] "Adjuntos: %1 vídeos" #: indicator/textchannelobserver.cpp:608 #, qt-format msgid "Attachment: %1 contact" msgid_plural "Attachments: %1 contacts" msgstr[0] "Adjunto: %1 contacto" msgstr[1] "Adjuntos: %1 contactos" #: indicator/textchannelobserver.cpp:610 #, qt-format msgid "Attachment: %1 audio clip" msgid_plural "Attachments: %1 audio clips" msgstr[0] "Adjunto: %1 archivo de audio" msgstr[1] "Adjuntos: %1 archivos de audio" #: indicator/textchannelobserver.cpp:612 #, qt-format msgid "Attachment: %1 file" msgid_plural "Attachments: %1 files" msgstr[0] "Adjunto: %1 archivo" msgstr[1] "Adjuntos: %1 archivos" #. TRANSLATORS : message displayed when any error occurred while receiving a MMS (case when cellular-data is off, or any downloading issue). Notify that there was a message, the user can find more about it in the messaging-app. #: indicator/textchannelobserver.cpp:615 msgid "New MMS message" msgstr "Mensaje MMS nuevo" #. TRANSLATORS : %1 is the recipient name #: indicator/textchannelobserver.cpp:679 indicator/textchannelobserver.cpp:683 #, qt-format msgid "Message to group from %1" msgstr "Mensajear a grupo desde %1" #: indicator/textchannelobserver.cpp:749 #, qt-format msgid "Message from %1" msgstr "Mensaje de %1" #: indicator/textchannelobserver.cpp:910 msgid "Please, select a SIM card:" msgstr "Seleccione una tarjeta SIM:" #: indicator/ussdindicator.cpp:119 msgid "Reply" msgstr "Responder" #: indicator/ussdindicator.cpp:142 msgid "Cancel" msgstr "Cancelar" #: libtelephonyservice/callnotification.cpp:53 msgid "Conf call on hold" msgstr "Llamada en espera" #: libtelephonyservice/callnotification.cpp:53 #, qt-format msgid "%1 call on hold" msgstr "%1 llamada en espera" #: libtelephonyservice/callnotification.cpp:56 msgid "Conf call ended" msgstr "Llamada de conferencia finalizada" #: libtelephonyservice/callnotification.cpp:56 #, qt-format msgid "%1 call ended" msgstr "%1 llamada finalizada" #: libtelephonyservice/callnotification.cpp:59 #, qt-format msgid "%1 call declined" msgstr "%1 llamada rechazada" #: libtelephonyservice/contactwatcher.cpp:157 msgid "Private Number" msgstr "Número privado" #: libtelephonyservice/contactwatcher.cpp:159 msgid "Unknown Number" msgstr "Número desconocido" #~ msgid "telephony-service-call" #~ msgstr "telephony-service-call" #~ msgid "telephony-service-message" #~ msgstr "telephony-service-message" #~ msgid "" #~ "Oops, there has been an error with the MMS system and this message could " #~ "not be retrieved. Please ensure Cellular Data is ON and MMS settings are " #~ "correct, then ask the sender to try again." #~ msgstr "" #~ "Vaya, ha habido un error con el sistema MMS y este mensaje no pudo ser " #~ "recuperado. Por favor, asegúrate de que los datos móviles están activados " #~ "y la configuración de MMS es correcta, luego pide al remitente que lo " #~ "intente de nuevo." telephony-service-0.5.3/po/et.po000066400000000000000000000207371455543255600166010ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR Canonical Ltd. # This file is distributed under the same license as the telephony-service package. # FIRST AUTHOR , YEAR. # msgid "" msgstr "" "Project-Id-Version: telephony-service\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-12-16 17:03+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: Automatically generated\n" "Language-Team: none\n" "Language: et\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" #: indicator/telephony-service-call.desktop.in:4 msgid "Phone Calls" msgstr "" #: indicator/telephony-service-sms.desktop.in:4 msgid "SMS" msgstr "" #: approver/approver.cpp:66 msgid "Unknown caller" msgstr "" #: approver/approver.cpp:94 msgid "I'm busy at the moment. I'll call later." msgstr "" #: approver/approver.cpp:95 msgid "I'm running late, on my way now." msgstr "" #: approver/approver.cpp:96 msgid "Please call me back later." msgstr "" #: approver/approver.cpp:457 #, qt-format msgid "On [%1]" msgstr "" #: approver/approver.cpp:461 indicator/messagingmenu.cpp:414 msgid "Private number" msgstr "" #: approver/approver.cpp:464 indicator/messagingmenu.cpp:244 #: indicator/messagingmenu.cpp:418 indicator/textchannelobserver.cpp:640 msgid "Unknown number" msgstr "" #: approver/approver.cpp:470 approver/approver.cpp:485 msgid "Caller number is not available" msgstr "" #: approver/approver.cpp:476 msgid "Calling from private number" msgstr "" #: approver/approver.cpp:479 msgid "Calling from unknown number" msgstr "" #: approver/approver.cpp:482 #, qt-format msgid "Calling from %1" msgstr "" #: approver/approver.cpp:529 msgid "Hold + Answer" msgstr "" #: approver/approver.cpp:530 msgid "Accept" msgstr "" #: approver/approver.cpp:543 msgid "End + Answer" msgstr "" #: approver/approver.cpp:552 msgid "Decline" msgstr "" #: approver/approver.cpp:560 msgid "Message & decline" msgstr "" #: approver/main.cpp:46 msgid "Telephony Service Approver" msgstr "" #: indicator/authhandler.cpp:72 msgid "Authentication failed. Do you want to review your credentials?" msgstr "" #: indicator/authhandler.cpp:91 msgid "Yes" msgstr "" #: indicator/authhandler.cpp:94 msgid "No" msgstr "" #: indicator/displaynamesettings.cpp:35 #, qt-format msgid "SIM %1" msgstr "" #: indicator/main.cpp:53 msgid "Telephony Service Indicator" msgstr "" #: indicator/messagingmenu.cpp:83 indicator/messagingmenu.cpp:87 msgid "Telephony Service" msgstr "" #: indicator/messagingmenu.cpp:151 indicator/messagingmenu.cpp:293 #: indicator/messagingmenu.cpp:360 msgid "Send" msgstr "" #. TRANSLATORS : %1 is the group name and %2 is the recipient name #: indicator/messagingmenu.cpp:262 indicator/textchannelobserver.cpp:671 #: indicator/textchannelobserver.cpp:675 #, qt-format msgid "Message to %1 from %2" msgstr "" #. TRANSLATORS : %1 is the recipient name #: indicator/messagingmenu.cpp:265 indicator/messagingmenu.cpp:269 #, qt-format msgid "Message to the group from %1" msgstr "" #: indicator/messagingmenu.cpp:345 msgid "Call back" msgstr "" #: indicator/messagingmenu.cpp:350 msgid "Missed your call — can you call me now?" msgstr "" #: indicator/messagingmenu.cpp:351 msgid "Running late. On my way." msgstr "" #: indicator/messagingmenu.cpp:352 msgid "Busy at the moment. Will call you later." msgstr "" #: indicator/messagingmenu.cpp:353 msgid "I am 20 minutes late." msgstr "" #: indicator/messagingmenu.cpp:354 msgid "Still busy. Will call you later." msgstr "" #: indicator/messagingmenu.cpp:409 #, qt-format msgid "%1 missed call" msgid_plural "%1 missed calls" msgstr[0] "" msgstr[1] "" #: indicator/messagingmenu.cpp:492 msgid "Voicemail messages" msgstr "" #: indicator/messagingmenu.cpp:495 #, qt-format msgid "%1 voicemail message" msgid_plural "%1 voicemail messages" msgstr[0] "" msgstr[1] "" #: indicator/messagingmenu.cpp:500 msgid "Voicemail" msgstr "" #: indicator/metrics.cpp:42 #, qt-format msgid "%1 text messages sent today" msgstr "" #: indicator/metrics.cpp:43 msgid "No text messages sent today" msgstr "" #: indicator/metrics.cpp:44 #, qt-format msgid "%1 text messages received today" msgstr "" #: indicator/metrics.cpp:45 msgid "No text messages received today" msgstr "" #: indicator/metrics.cpp:46 #, qt-format msgid "%1 calls received today" msgstr "" #: indicator/metrics.cpp:47 msgid "No calls received today" msgstr "" #: indicator/metrics.cpp:48 #, qt-format msgid "%1 calls made today" msgstr "" #: indicator/metrics.cpp:49 indicator/metrics.cpp:51 msgid "No calls made today" msgstr "" #: indicator/metrics.cpp:50 #, qt-format msgid "Spent %1 minutes in calls today" msgstr "" #: indicator/textchannelobserver.cpp:225 msgid "Unlock your sim card and try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:227 msgid "Deactivate flight mode and try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:230 msgid "Try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:236 msgid "The message could not be sent" msgstr "" #: indicator/textchannelobserver.cpp:249 indicator/textchannelobserver.cpp:713 msgid "View message" msgstr "" #: indicator/textchannelobserver.cpp:295 msgid "New Group" msgstr "" #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:302 #, qt-format msgid "You joined group %1 " msgstr "" #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:306 #, qt-format msgid "You joined group %1" msgstr "" #: indicator/textchannelobserver.cpp:309 msgid "You joined a new group" msgstr "" #: indicator/textchannelobserver.cpp:328 msgid "View Group" msgstr "" #: indicator/textchannelobserver.cpp:367 indicator/ussdindicator.cpp:116 msgid "Ok" msgstr "" #: indicator/textchannelobserver.cpp:373 msgid "Save" msgstr "" #: indicator/textchannelobserver.cpp:468 msgid "Emergency Alert" msgstr "" #: indicator/textchannelobserver.cpp:471 msgid "Emergency Alert: Extreme" msgstr "" #: indicator/textchannelobserver.cpp:474 msgid "Emergency Alert: Severe" msgstr "" #: indicator/textchannelobserver.cpp:477 msgid "Emergency Alert: Notice" msgstr "" #: indicator/textchannelobserver.cpp:482 msgid "AMBER Alert" msgstr "" #: indicator/textchannelobserver.cpp:485 msgid "Alert" msgstr "" #: indicator/textchannelobserver.cpp:531 msgid "Show alert" msgstr "" #: indicator/textchannelobserver.cpp:604 #, qt-format msgid "Attachment: %1 image" msgid_plural "Attachments: %1 images" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:606 #, qt-format msgid "Attachment: %1 video" msgid_plural "Attachments: %1 videos" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:608 #, qt-format msgid "Attachment: %1 contact" msgid_plural "Attachments: %1 contacts" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:610 #, qt-format msgid "Attachment: %1 audio clip" msgid_plural "Attachments: %1 audio clips" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:612 #, qt-format msgid "Attachment: %1 file" msgid_plural "Attachments: %1 files" msgstr[0] "" msgstr[1] "" #. TRANSLATORS : message displayed when any error occurred while receiving a MMS (case when cellular-data is off, or any downloading issue). Notify that there was a message, the user can find more about it in the messaging-app. #: indicator/textchannelobserver.cpp:615 msgid "New MMS message" msgstr "" #. TRANSLATORS : %1 is the recipient name #: indicator/textchannelobserver.cpp:679 indicator/textchannelobserver.cpp:683 #, qt-format msgid "Message to group from %1" msgstr "" #: indicator/textchannelobserver.cpp:749 #, qt-format msgid "Message from %1" msgstr "" #: indicator/textchannelobserver.cpp:910 msgid "Please, select a SIM card:" msgstr "" #: indicator/ussdindicator.cpp:119 msgid "Reply" msgstr "" #: indicator/ussdindicator.cpp:142 msgid "Cancel" msgstr "" #: libtelephonyservice/callnotification.cpp:53 msgid "Conf call on hold" msgstr "" #: libtelephonyservice/callnotification.cpp:53 #, qt-format msgid "%1 call on hold" msgstr "" #: libtelephonyservice/callnotification.cpp:56 msgid "Conf call ended" msgstr "" #: libtelephonyservice/callnotification.cpp:56 #, qt-format msgid "%1 call ended" msgstr "" #: libtelephonyservice/callnotification.cpp:59 #, qt-format msgid "%1 call declined" msgstr "" #: libtelephonyservice/contactwatcher.cpp:157 msgid "Private Number" msgstr "" #: libtelephonyservice/contactwatcher.cpp:159 msgid "Unknown Number" msgstr "" telephony-service-0.5.3/po/eu.po000066400000000000000000000251231455543255600165740ustar00rootroot00000000000000# Basque translation for telephony-service # Copyright (c) 2014 Rosetta Contributors and Canonical Ltd 2014 # This file is distributed under the same license as the telephony-service package. # FIRST AUTHOR , 2014. # msgid "" msgstr "" "Project-Id-Version: telephony-service\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-12-16 17:03+0100\n" "PO-Revision-Date: 2015-01-22 21:45+0000\n" "Last-Translator: Ibai Oihanguren Sala \n" "Language-Team: Basque \n" "Language: eu\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Launchpad-Export-Date: 2017-01-04 06:02+0000\n" "X-Generator: Launchpad (build 18298)\n" #: indicator/telephony-service-call.desktop.in:4 msgid "Phone Calls" msgstr "Telefono-deiak" #: indicator/telephony-service-sms.desktop.in:4 msgid "SMS" msgstr "SMSa" #: approver/approver.cpp:66 msgid "Unknown caller" msgstr "Deitzaile ezezaguna" #: approver/approver.cpp:94 msgid "I'm busy at the moment. I'll call later." msgstr "Orain lanpetuta nago. Deituko dizut geroago." #: approver/approver.cpp:95 msgid "I'm running late, on my way now." msgstr "Berandutu egin zait, bidean naiz." #: approver/approver.cpp:96 msgid "Please call me back later." msgstr "Dei nazazu berriro geroago, mesedez." #: approver/approver.cpp:457 #, qt-format msgid "On [%1]" msgstr "" #: approver/approver.cpp:461 indicator/messagingmenu.cpp:414 msgid "Private number" msgstr "Zenbaki pribatua" #: approver/approver.cpp:464 indicator/messagingmenu.cpp:244 #: indicator/messagingmenu.cpp:418 indicator/textchannelobserver.cpp:640 msgid "Unknown number" msgstr "Zenbaki ezezaguna" #: approver/approver.cpp:470 approver/approver.cpp:485 msgid "Caller number is not available" msgstr "Deitzailearen zenbakia ez dago eskuragarri" #: approver/approver.cpp:476 msgid "Calling from private number" msgstr "Zenbaki pribatutik deika" #: approver/approver.cpp:479 msgid "Calling from unknown number" msgstr "Zenbaki ezezagunetik deika" #: approver/approver.cpp:482 #, qt-format msgid "Calling from %1" msgstr "%1 zenbakitik deika" #: approver/approver.cpp:529 msgid "Hold + Answer" msgstr "Itxaron + Erantzun" #: approver/approver.cpp:530 msgid "Accept" msgstr "Onartu" #: approver/approver.cpp:543 msgid "End + Answer" msgstr "Amaitu + Erantzun" #: approver/approver.cpp:552 msgid "Decline" msgstr "Baztertu" #: approver/approver.cpp:560 msgid "Message & decline" msgstr "Mezua bidali eta baztertu" #: approver/main.cpp:46 msgid "Telephony Service Approver" msgstr "Telefonia-zerbitzuaren oneslea" #: indicator/authhandler.cpp:72 msgid "Authentication failed. Do you want to review your credentials?" msgstr "" #: indicator/authhandler.cpp:91 msgid "Yes" msgstr "" #: indicator/authhandler.cpp:94 msgid "No" msgstr "" #: indicator/displaynamesettings.cpp:35 #, qt-format msgid "SIM %1" msgstr "SIM %1" #: indicator/main.cpp:53 msgid "Telephony Service Indicator" msgstr "Telefonia-zerbitzuaren adierazlea" #: indicator/messagingmenu.cpp:83 indicator/messagingmenu.cpp:87 msgid "Telephony Service" msgstr "Telefonia-zerbitzua" #: indicator/messagingmenu.cpp:151 indicator/messagingmenu.cpp:293 #: indicator/messagingmenu.cpp:360 msgid "Send" msgstr "Bidali" #. TRANSLATORS : %1 is the group name and %2 is the recipient name #: indicator/messagingmenu.cpp:262 indicator/textchannelobserver.cpp:671 #: indicator/textchannelobserver.cpp:675 #, qt-format msgid "Message to %1 from %2" msgstr "" #. TRANSLATORS : %1 is the recipient name #: indicator/messagingmenu.cpp:265 indicator/messagingmenu.cpp:269 #, fuzzy, qt-format #| msgid "Message to group from %1" msgid "Message to the group from %1" msgstr "%1(r)en mezua taldearentzat" #: indicator/messagingmenu.cpp:345 msgid "Call back" msgstr "Itzuli deia" #: indicator/messagingmenu.cpp:350 #, fuzzy #| msgid "I missed your call - can you call me now?" msgid "Missed your call — can you call me now?" msgstr "Zure deia galdu dut - orain berriro deitzerik bai?" #: indicator/messagingmenu.cpp:351 #, fuzzy #| msgid "I'm running late. I'm on my way." msgid "Running late. On my way." msgstr "Berandutu egin zait. Bidean naiz." #: indicator/messagingmenu.cpp:352 #, fuzzy #| msgid "I'm busy at the moment. I'll call you later." msgid "Busy at the moment. Will call you later." msgstr "Une honetan lanpetuta nago. Gero deituko dizut." #: indicator/messagingmenu.cpp:353 #, fuzzy #| msgid "I'll be 20 minutes late." msgid "I am 20 minutes late." msgstr "20 minutu berandu iritsiko naiz." #: indicator/messagingmenu.cpp:354 #, fuzzy #| msgid "Sorry, I'm still busy. I'll call you later." msgid "Still busy. Will call you later." msgstr "Sentitzen dut, oraindik lanpetuta nago. Gero deituko dizut." #: indicator/messagingmenu.cpp:409 #, qt-format msgid "%1 missed call" msgid_plural "%1 missed calls" msgstr[0] "dei galdu %1" msgstr[1] "%1 dei galdu" #: indicator/messagingmenu.cpp:492 msgid "Voicemail messages" msgstr "Ahots-mezuak" #: indicator/messagingmenu.cpp:495 #, qt-format msgid "%1 voicemail message" msgid_plural "%1 voicemail messages" msgstr[0] "ahots-mezu %1" msgstr[1] "%1 ahots-mezu" #: indicator/messagingmenu.cpp:500 msgid "Voicemail" msgstr "Ahots-posta" #: indicator/metrics.cpp:42 #, qt-format msgid "%1 text messages sent today" msgstr "%1 testu-mezu bidali dituzu gaur" #: indicator/metrics.cpp:43 msgid "No text messages sent today" msgstr "Gaur ez duzu testu-mezurik bidali" #: indicator/metrics.cpp:44 #, qt-format msgid "%1 text messages received today" msgstr "%1 testu-mezu jaso dituzu gaur" #: indicator/metrics.cpp:45 msgid "No text messages received today" msgstr "Gaur ez duzu testu-mezurik jaso" #: indicator/metrics.cpp:46 #, qt-format msgid "%1 calls received today" msgstr "%1 dei jaso dituzu gaur" #: indicator/metrics.cpp:47 msgid "No calls received today" msgstr "Gaur ez duzu deirik jaso" #: indicator/metrics.cpp:48 #, qt-format msgid "%1 calls made today" msgstr "%1 dei egin dituzu gaur" #: indicator/metrics.cpp:49 indicator/metrics.cpp:51 msgid "No calls made today" msgstr "Gaur ez duzu deirik egin" #: indicator/metrics.cpp:50 #, qt-format msgid "Spent %1 minutes in calls today" msgstr "Gaur %1 minutu pasa dituzun deietan" #: indicator/textchannelobserver.cpp:225 msgid "Unlock your sim card and try again from the messaging application." msgstr "Desblokeatu SIM txartela eta saiatu berriz mezularitza aplikaziotik." #: indicator/textchannelobserver.cpp:227 msgid "Deactivate flight mode and try again from the messaging application." msgstr "Desaktibatu hegaldi modua eta saiatu berriz mezularitza aplikaziotik." #: indicator/textchannelobserver.cpp:230 msgid "Try again from the messaging application." msgstr "Saiatu berriz mezularitza aplikaziotik." #: indicator/textchannelobserver.cpp:236 msgid "The message could not be sent" msgstr "Mezua ezin izan da bidali" #: indicator/textchannelobserver.cpp:249 indicator/textchannelobserver.cpp:713 msgid "View message" msgstr "Ikusi mezua" #: indicator/textchannelobserver.cpp:295 msgid "New Group" msgstr "" #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:302 #, qt-format msgid "You joined group %1 " msgstr "" #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:306 #, qt-format msgid "You joined group %1" msgstr "" #: indicator/textchannelobserver.cpp:309 msgid "You joined a new group" msgstr "" #: indicator/textchannelobserver.cpp:328 msgid "View Group" msgstr "" #: indicator/textchannelobserver.cpp:367 indicator/ussdindicator.cpp:116 msgid "Ok" msgstr "Ados" #: indicator/textchannelobserver.cpp:373 msgid "Save" msgstr "Gorde" #: indicator/textchannelobserver.cpp:468 msgid "Emergency Alert" msgstr "" #: indicator/textchannelobserver.cpp:471 msgid "Emergency Alert: Extreme" msgstr "" #: indicator/textchannelobserver.cpp:474 msgid "Emergency Alert: Severe" msgstr "" #: indicator/textchannelobserver.cpp:477 msgid "Emergency Alert: Notice" msgstr "" #: indicator/textchannelobserver.cpp:482 msgid "AMBER Alert" msgstr "" #: indicator/textchannelobserver.cpp:485 msgid "Alert" msgstr "" #: indicator/textchannelobserver.cpp:531 msgid "Show alert" msgstr "" #: indicator/textchannelobserver.cpp:604 #, qt-format msgid "Attachment: %1 image" msgid_plural "Attachments: %1 images" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:606 #, qt-format msgid "Attachment: %1 video" msgid_plural "Attachments: %1 videos" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:608 #, qt-format msgid "Attachment: %1 contact" msgid_plural "Attachments: %1 contacts" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:610 #, qt-format msgid "Attachment: %1 audio clip" msgid_plural "Attachments: %1 audio clips" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:612 #, qt-format msgid "Attachment: %1 file" msgid_plural "Attachments: %1 files" msgstr[0] "" msgstr[1] "" #. TRANSLATORS : message displayed when any error occurred while receiving a MMS (case when cellular-data is off, or any downloading issue). Notify that there was a message, the user can find more about it in the messaging-app. #: indicator/textchannelobserver.cpp:615 #, fuzzy #| msgid "View message" msgid "New MMS message" msgstr "Ikusi mezua" #. TRANSLATORS : %1 is the recipient name #: indicator/textchannelobserver.cpp:679 indicator/textchannelobserver.cpp:683 #, qt-format msgid "Message to group from %1" msgstr "%1(r)en mezua taldearentzat" #: indicator/textchannelobserver.cpp:749 #, qt-format msgid "Message from %1" msgstr "%1(r)en mezua" #: indicator/textchannelobserver.cpp:910 msgid "Please, select a SIM card:" msgstr "Hautatu SIM txartel bat:" #: indicator/ussdindicator.cpp:119 msgid "Reply" msgstr "Erantzun" #: indicator/ussdindicator.cpp:142 msgid "Cancel" msgstr "Utzi" #: libtelephonyservice/callnotification.cpp:53 msgid "Conf call on hold" msgstr "" #: libtelephonyservice/callnotification.cpp:53 #, qt-format msgid "%1 call on hold" msgstr "" #: libtelephonyservice/callnotification.cpp:56 msgid "Conf call ended" msgstr "" #: libtelephonyservice/callnotification.cpp:56 #, qt-format msgid "%1 call ended" msgstr "" #: libtelephonyservice/callnotification.cpp:59 #, qt-format msgid "%1 call declined" msgstr "" #: libtelephonyservice/contactwatcher.cpp:157 msgid "Private Number" msgstr "Zenbaki pribatua" #: libtelephonyservice/contactwatcher.cpp:159 msgid "Unknown Number" msgstr "Zenbaki ezezaguna" #, fuzzy #~| msgid "Telephony Service" #~ msgid "telephony-service-call" #~ msgstr "Telefonia-zerbitzua" #, fuzzy #~| msgid "Telephony Service" #~ msgid "telephony-service-message" #~ msgstr "Telefonia-zerbitzua" telephony-service-0.5.3/po/fa.po000066400000000000000000000270731455543255600165570ustar00rootroot00000000000000# Persian translation for telephony-service # Copyright (c) 2014 Rosetta Contributors and Canonical Ltd 2014 # This file is distributed under the same license as the telephony-service package. # FIRST AUTHOR , 2014. # msgid "" msgstr "" "Project-Id-Version: telephony-service\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-12-16 17:03+0100\n" "PO-Revision-Date: 2014-11-27 00:47+0000\n" "Last-Translator: Danial Behzadi \n" "Language-Team: Persian \n" "Language: fa\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" "X-Launchpad-Export-Date: 2017-01-04 06:03+0000\n" "X-Generator: Launchpad (build 18298)\n" #: indicator/telephony-service-call.desktop.in:4 msgid "Phone Calls" msgstr "تماس‌های تلفنی" #: indicator/telephony-service-sms.desktop.in:4 msgid "SMS" msgstr "پیامک" #: approver/approver.cpp:66 msgid "Unknown caller" msgstr "تماس‌گیرنده‌ی ناشناس" #: approver/approver.cpp:94 msgid "I'm busy at the moment. I'll call later." msgstr "الآن گرفتارم. بعداً زنگ می‌زنم" #: approver/approver.cpp:95 msgid "I'm running late, on my way now." msgstr "تأخیر دارم، توی راهم." #: approver/approver.cpp:96 msgid "Please call me back later." msgstr "لطفاً بعداً باهام تماس بگیر." #: approver/approver.cpp:457 #, qt-format msgid "On [%1]" msgstr "در [%1]" #: approver/approver.cpp:461 indicator/messagingmenu.cpp:414 msgid "Private number" msgstr "شماره‌ی خصوصی" #: approver/approver.cpp:464 indicator/messagingmenu.cpp:244 #: indicator/messagingmenu.cpp:418 indicator/textchannelobserver.cpp:640 msgid "Unknown number" msgstr "شماره‌ی ناشناس" #: approver/approver.cpp:470 approver/approver.cpp:485 msgid "Caller number is not available" msgstr "شماره‌ی تماس‌گیرنده موجود نیست" #: approver/approver.cpp:476 msgid "Calling from private number" msgstr "در حال تماس از شماره‌ی خصوصی" #: approver/approver.cpp:479 msgid "Calling from unknown number" msgstr "درحال تماس از شماره‌ی نامشخص" #: approver/approver.cpp:482 #, qt-format msgid "Calling from %1" msgstr "در حال تماس از %1" #: approver/approver.cpp:529 msgid "Hold + Answer" msgstr "نگه داشتن + پاسخ" #: approver/approver.cpp:530 msgid "Accept" msgstr "پذیرش" #: approver/approver.cpp:543 msgid "End + Answer" msgstr "پایان + پاسخ" #: approver/approver.cpp:552 msgid "Decline" msgstr "رد" #: approver/approver.cpp:560 msgid "Message & decline" msgstr "پیام دادن و رد کردن" #: approver/main.cpp:46 msgid "Telephony Service Approver" msgstr "تأییدکننده‌ی خدمات تلفن" #: indicator/authhandler.cpp:72 msgid "Authentication failed. Do you want to review your credentials?" msgstr "تأیید هویت شکست خورد. می‌خواهید اعتبارنامه‌تان را بازبینی کنید؟" #: indicator/authhandler.cpp:91 msgid "Yes" msgstr "بله" #: indicator/authhandler.cpp:94 msgid "No" msgstr "خیر" #: indicator/displaynamesettings.cpp:35 #, qt-format msgid "SIM %1" msgstr "سیم‌کارت %1" #: indicator/main.cpp:53 msgid "Telephony Service Indicator" msgstr "نشانگر خدمات تلفن" #: indicator/messagingmenu.cpp:83 indicator/messagingmenu.cpp:87 msgid "Telephony Service" msgstr "خدمات تلفن" #: indicator/messagingmenu.cpp:151 indicator/messagingmenu.cpp:293 #: indicator/messagingmenu.cpp:360 msgid "Send" msgstr "فرستادن" #. TRANSLATORS : %1 is the group name and %2 is the recipient name #: indicator/messagingmenu.cpp:262 indicator/textchannelobserver.cpp:671 #: indicator/textchannelobserver.cpp:675 #, qt-format msgid "Message to %1 from %2" msgstr "" #. TRANSLATORS : %1 is the recipient name #: indicator/messagingmenu.cpp:265 indicator/messagingmenu.cpp:269 #, fuzzy, qt-format #| msgid "Message to group from %1" msgid "Message to the group from %1" msgstr "پیام دادن به گروه از %1" #: indicator/messagingmenu.cpp:345 msgid "Call back" msgstr "زنگ زدن" #: indicator/messagingmenu.cpp:350 #, fuzzy #| msgid "I missed your call - can you call me now?" msgid "Missed your call — can you call me now?" msgstr "تماستون رو از دست دادم. می‌شه الآن با من تماس بگیرید؟" #: indicator/messagingmenu.cpp:351 #, fuzzy #| msgid "I'm running late. I'm on my way." msgid "Running late. On my way." msgstr "دیر می‌رسم. تو راهم." #: indicator/messagingmenu.cpp:352 #, fuzzy #| msgid "I'm busy at the moment. I'll call you later." msgid "Busy at the moment. Will call you later." msgstr "الآن سرم شلوعه. بعداً باهاتون تماس می‌گیرم." #: indicator/messagingmenu.cpp:353 #, fuzzy #| msgid "I'll be 20 minutes late." msgid "I am 20 minutes late." msgstr "۲۰ دقیقه تأخیر خواهم داشت." #: indicator/messagingmenu.cpp:354 #, fuzzy #| msgid "Sorry, I'm still busy. I'll call you later." msgid "Still busy. Will call you later." msgstr "ببخشید، هنوز دگیرم. بعداً باهاتون تماس می‌گیرم." #: indicator/messagingmenu.cpp:409 #, qt-format msgid "%1 missed call" msgid_plural "%1 missed calls" msgstr[0] "%1 تماس بی‌پاسخ" #: indicator/messagingmenu.cpp:492 msgid "Voicemail messages" msgstr "پیام‌های پست صوتی" #: indicator/messagingmenu.cpp:495 #, qt-format msgid "%1 voicemail message" msgid_plural "%1 voicemail messages" msgstr[0] "%1 پیام پست صوتی" #: indicator/messagingmenu.cpp:500 msgid "Voicemail" msgstr "پست صوتی" #: indicator/metrics.cpp:42 #, qt-format msgid "%1 text messages sent today" msgstr "امروز %1 پیام متنی فرستاده شد" #: indicator/metrics.cpp:43 msgid "No text messages sent today" msgstr "امروز پیام متنی‌ای فرستاده نشد" #: indicator/metrics.cpp:44 #, qt-format msgid "%1 text messages received today" msgstr "امروز %1 پیام متنی دریافت شد" #: indicator/metrics.cpp:45 msgid "No text messages received today" msgstr "امروز پیام متنی‌ای دریافت نشد" #: indicator/metrics.cpp:46 #, qt-format msgid "%1 calls received today" msgstr "امروز %1 تماس دریافت شد" #: indicator/metrics.cpp:47 msgid "No calls received today" msgstr "امروز تماسی دریافت نشد" #: indicator/metrics.cpp:48 #, qt-format msgid "%1 calls made today" msgstr "امروز %1 تماس گرفته شد" #: indicator/metrics.cpp:49 indicator/metrics.cpp:51 msgid "No calls made today" msgstr "امروز تماسی گرفته نشد" #: indicator/metrics.cpp:50 #, qt-format msgid "Spent %1 minutes in calls today" msgstr "امروز %1 دقیقه صرف تماس شد" #: indicator/textchannelobserver.cpp:225 msgid "Unlock your sim card and try again from the messaging application." msgstr "قفل سیم‌کارتتان را باز کرده و دوباره از برنامه ی پیام‌رسان تلاش کنید." #: indicator/textchannelobserver.cpp:227 msgid "Deactivate flight mode and try again from the messaging application." msgstr "حالت پرواز را خاموش کرده و دوباره از برنامه ی پیام‌رسان تلاش کنید." #: indicator/textchannelobserver.cpp:230 msgid "Try again from the messaging application." msgstr "دوباره از برنامه ی پیام‌رسان تلاش کنید." #: indicator/textchannelobserver.cpp:236 msgid "The message could not be sent" msgstr "پیام نتوانست فرستاده شود" #: indicator/textchannelobserver.cpp:249 indicator/textchannelobserver.cpp:713 msgid "View message" msgstr "دیدن پیام" #: indicator/textchannelobserver.cpp:295 msgid "New Group" msgstr "" #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:302 #, qt-format msgid "You joined group %1 " msgstr "" #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:306 #, qt-format msgid "You joined group %1" msgstr "" #: indicator/textchannelobserver.cpp:309 msgid "You joined a new group" msgstr "" #: indicator/textchannelobserver.cpp:328 msgid "View Group" msgstr "" #: indicator/textchannelobserver.cpp:367 indicator/ussdindicator.cpp:116 msgid "Ok" msgstr "باشه" #: indicator/textchannelobserver.cpp:373 msgid "Save" msgstr "ذخیره" #: indicator/textchannelobserver.cpp:468 msgid "Emergency Alert" msgstr "" #: indicator/textchannelobserver.cpp:471 msgid "Emergency Alert: Extreme" msgstr "" #: indicator/textchannelobserver.cpp:474 msgid "Emergency Alert: Severe" msgstr "" #: indicator/textchannelobserver.cpp:477 msgid "Emergency Alert: Notice" msgstr "" #: indicator/textchannelobserver.cpp:482 msgid "AMBER Alert" msgstr "" #: indicator/textchannelobserver.cpp:485 msgid "Alert" msgstr "" #: indicator/textchannelobserver.cpp:531 msgid "Show alert" msgstr "" #: indicator/textchannelobserver.cpp:604 #, qt-format msgid "Attachment: %1 image" msgid_plural "Attachments: %1 images" msgstr[0] "پیوست: %1 تصویر" #: indicator/textchannelobserver.cpp:606 #, qt-format msgid "Attachment: %1 video" msgid_plural "Attachments: %1 videos" msgstr[0] "پیوست: %1 ویدیو" #: indicator/textchannelobserver.cpp:608 #, qt-format msgid "Attachment: %1 contact" msgid_plural "Attachments: %1 contacts" msgstr[0] "پیوست: %1 مخاطب" #: indicator/textchannelobserver.cpp:610 #, qt-format msgid "Attachment: %1 audio clip" msgid_plural "Attachments: %1 audio clips" msgstr[0] "پیوست: %1 کلیپ صوتی" #: indicator/textchannelobserver.cpp:612 #, qt-format msgid "Attachment: %1 file" msgid_plural "Attachments: %1 files" msgstr[0] "پیوست: %1 پرونده" #. TRANSLATORS : message displayed when any error occurred while receiving a MMS (case when cellular-data is off, or any downloading issue). Notify that there was a message, the user can find more about it in the messaging-app. #: indicator/textchannelobserver.cpp:615 #, fuzzy #| msgid "View message" msgid "New MMS message" msgstr "دیدن پیام" #. TRANSLATORS : %1 is the recipient name #: indicator/textchannelobserver.cpp:679 indicator/textchannelobserver.cpp:683 #, qt-format msgid "Message to group from %1" msgstr "پیام دادن به گروه از %1" #: indicator/textchannelobserver.cpp:749 #, qt-format msgid "Message from %1" msgstr "پیام از %1" #: indicator/textchannelobserver.cpp:910 msgid "Please, select a SIM card:" msgstr "لطفاً سیم‌کارتی را برگزینید:" #: indicator/ussdindicator.cpp:119 msgid "Reply" msgstr "پاسخ" #: indicator/ussdindicator.cpp:142 msgid "Cancel" msgstr "لغو" #: libtelephonyservice/callnotification.cpp:53 msgid "Conf call on hold" msgstr "" #: libtelephonyservice/callnotification.cpp:53 #, qt-format msgid "%1 call on hold" msgstr "" #: libtelephonyservice/callnotification.cpp:56 msgid "Conf call ended" msgstr "" #: libtelephonyservice/callnotification.cpp:56 #, qt-format msgid "%1 call ended" msgstr "" #: libtelephonyservice/callnotification.cpp:59 #, qt-format msgid "%1 call declined" msgstr "" #: libtelephonyservice/contactwatcher.cpp:157 msgid "Private Number" msgstr "شماره‌ی خصوصی" #: libtelephonyservice/contactwatcher.cpp:159 msgid "Unknown Number" msgstr "شماره‌ی ناشناس" #, fuzzy #~| msgid "Telephony Service" #~ msgid "telephony-service-call" #~ msgstr "خدمات تلفن" #, fuzzy #~| msgid "Telephony Service" #~ msgid "telephony-service-message" #~ msgstr "خدمات تلفن" telephony-service-0.5.3/po/fi.po000066400000000000000000000262261455543255600165660ustar00rootroot00000000000000# Finnish translation for telephony-service # Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013 # This file is distributed under the same license as the telephony-service package. # FIRST AUTHOR , 2013. # msgid "" msgstr "" "Project-Id-Version: telephony-service\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-12-16 17:03+0100\n" "PO-Revision-Date: 2014-12-14 19:49+0000\n" "Last-Translator: Jiri Grönroos \n" "Language-Team: Finnish \n" "Language: fi\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Launchpad-Export-Date: 2017-01-04 06:02+0000\n" "X-Generator: Launchpad (build 18298)\n" #: indicator/telephony-service-call.desktop.in:4 msgid "Phone Calls" msgstr "Puhelut" #: indicator/telephony-service-sms.desktop.in:4 msgid "SMS" msgstr "Tekstiviesti" #: approver/approver.cpp:66 msgid "Unknown caller" msgstr "Tuntematon soittaja" #: approver/approver.cpp:94 msgid "I'm busy at the moment. I'll call later." msgstr "Olen kiireinen juuri nyt. Soitan myöhemmin." #: approver/approver.cpp:95 msgid "I'm running late, on my way now." msgstr "Olen myöhässä, mutta matkalla." #: approver/approver.cpp:96 msgid "Please call me back later." msgstr "Soita minulle uudelleen myöhemmin." #: approver/approver.cpp:457 #, qt-format msgid "On [%1]" msgstr "Tilillä [%1]" #: approver/approver.cpp:461 indicator/messagingmenu.cpp:414 msgid "Private number" msgstr "Salainen numero" #: approver/approver.cpp:464 indicator/messagingmenu.cpp:244 #: indicator/messagingmenu.cpp:418 indicator/textchannelobserver.cpp:640 msgid "Unknown number" msgstr "Tuntematon numero" #: approver/approver.cpp:470 approver/approver.cpp:485 msgid "Caller number is not available" msgstr "Soittajan numero ei ole saatavilla" #: approver/approver.cpp:476 msgid "Calling from private number" msgstr "Puhelu salaisesta numerosta" #: approver/approver.cpp:479 msgid "Calling from unknown number" msgstr "Puhelu tuntemattomasta numerosta" #: approver/approver.cpp:482 #, qt-format msgid "Calling from %1" msgstr "Puhelu numerosta %1" #: approver/approver.cpp:529 msgid "Hold + Answer" msgstr "Laita pitoon + vastaa" #: approver/approver.cpp:530 msgid "Accept" msgstr "Hyväksy" #: approver/approver.cpp:543 msgid "End + Answer" msgstr "Lopeta + vastaa" #: approver/approver.cpp:552 msgid "Decline" msgstr "Hylkää" #: approver/approver.cpp:560 msgid "Message & decline" msgstr "Viesti + hylkää" #: approver/main.cpp:46 msgid "Telephony Service Approver" msgstr "Puhelinpalvelujen hyväksyjä" #: indicator/authhandler.cpp:72 msgid "Authentication failed. Do you want to review your credentials?" msgstr "" "Tunnistautuminen epäonnistui. Haluatko tarkistaa tunnistautumistietosi?" #: indicator/authhandler.cpp:91 msgid "Yes" msgstr "Kyllä" #: indicator/authhandler.cpp:94 msgid "No" msgstr "Ei" #: indicator/displaynamesettings.cpp:35 #, qt-format msgid "SIM %1" msgstr "SIM %1" #: indicator/main.cpp:53 msgid "Telephony Service Indicator" msgstr "Puhelinpalvelujen ilmaisin" #: indicator/messagingmenu.cpp:83 indicator/messagingmenu.cpp:87 msgid "Telephony Service" msgstr "Puhelinpalvelu" #: indicator/messagingmenu.cpp:151 indicator/messagingmenu.cpp:293 #: indicator/messagingmenu.cpp:360 msgid "Send" msgstr "Lähetä" #. TRANSLATORS : %1 is the group name and %2 is the recipient name #: indicator/messagingmenu.cpp:262 indicator/textchannelobserver.cpp:671 #: indicator/textchannelobserver.cpp:675 #, qt-format msgid "Message to %1 from %2" msgstr "Viesti ryhmälle %1 lähettäjältä %2" #. TRANSLATORS : %1 is the recipient name #: indicator/messagingmenu.cpp:265 indicator/messagingmenu.cpp:269 #, fuzzy, qt-format #| msgid "Message to group from %1" msgid "Message to the group from %1" msgstr "Viesti ryhmälle lähettäjältä %1" #: indicator/messagingmenu.cpp:345 msgid "Call back" msgstr "Soita takaisin" #: indicator/messagingmenu.cpp:350 #, fuzzy #| msgid "I missed your call - can you call me now?" msgid "Missed your call — can you call me now?" msgstr "En huomannut puheluasi, voitko soittaa nyt?" #: indicator/messagingmenu.cpp:351 #, fuzzy #| msgid "I'm running late. I'm on my way." msgid "Running late. On my way." msgstr "Olen myöhässä, mutta silti tulossa." #: indicator/messagingmenu.cpp:352 #, fuzzy #| msgid "I'm busy at the moment. I'll call you later." msgid "Busy at the moment. Will call you later." msgstr "Olen kiireinen. Soitan myöhemmin." #: indicator/messagingmenu.cpp:353 #, fuzzy #| msgid "I'll be 20 minutes late." msgid "I am 20 minutes late." msgstr "Olen 20 minuuttia myöhässä." #: indicator/messagingmenu.cpp:354 #, fuzzy #| msgid "Sorry, I'm still busy. I'll call you later." msgid "Still busy. Will call you later." msgstr "Olen valitettavasti edelleen kiireinen. Soitan myöhemmin." #: indicator/messagingmenu.cpp:409 #, qt-format msgid "%1 missed call" msgid_plural "%1 missed calls" msgstr[0] "%1 vastaamaton puhelu" msgstr[1] "%1 vastaamatonta puhelua" #: indicator/messagingmenu.cpp:492 msgid "Voicemail messages" msgstr "Vastaajaviestit" #: indicator/messagingmenu.cpp:495 #, qt-format msgid "%1 voicemail message" msgid_plural "%1 voicemail messages" msgstr[0] "%1 vastaajaviesti" msgstr[1] "%1 vastaajaviestiä" #: indicator/messagingmenu.cpp:500 msgid "Voicemail" msgstr "Vastaaja" #: indicator/metrics.cpp:42 #, qt-format msgid "%1 text messages sent today" msgstr "Lähetettyjä tekstiviestejä tänään %1" #: indicator/metrics.cpp:43 msgid "No text messages sent today" msgstr "Ei lähetettyjä tekstiviestejä tänään" #: indicator/metrics.cpp:44 #, qt-format msgid "%1 text messages received today" msgstr "Vastaanotettuja tekstiviestejä tänään %1" #: indicator/metrics.cpp:45 msgid "No text messages received today" msgstr "Ei vastaanotettuja tekstiviestejä tänään" #: indicator/metrics.cpp:46 #, qt-format msgid "%1 calls received today" msgstr "Vastaanotettuja puheluita tänään %1" #: indicator/metrics.cpp:47 msgid "No calls received today" msgstr "Ei vastaanotettuja puheluita tänään" #: indicator/metrics.cpp:48 #, qt-format msgid "%1 calls made today" msgstr "Soitettuja puheluita tänään %1" #: indicator/metrics.cpp:49 indicator/metrics.cpp:51 msgid "No calls made today" msgstr "Ei soitettuja puheluita tänään" #: indicator/metrics.cpp:50 #, qt-format msgid "Spent %1 minutes in calls today" msgstr "Puheluihin käytetty tänään %1 minuuttia" #: indicator/textchannelobserver.cpp:225 msgid "Unlock your sim card and try again from the messaging application." msgstr "" "Avaa SIM-kortin lukitus ja yritä lähettää viesti uudelleen " "viestisovelluksesta." #: indicator/textchannelobserver.cpp:227 msgid "Deactivate flight mode and try again from the messaging application." msgstr "" "Poista lentotila käytöstä ja yritä lähettää viesti uudelleen " "viestisovelluksesta." #: indicator/textchannelobserver.cpp:230 msgid "Try again from the messaging application." msgstr "Yritä uudelleen viestisovelluksesta." #: indicator/textchannelobserver.cpp:236 msgid "The message could not be sent" msgstr "Viestin lähetys epäonnistui" #: indicator/textchannelobserver.cpp:249 indicator/textchannelobserver.cpp:713 msgid "View message" msgstr "Näytä viesti" #: indicator/textchannelobserver.cpp:295 msgid "New Group" msgstr "Uusi ryhmä" #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:302 #, qt-format msgid "You joined group %1 " msgstr "Liityit ryhmään %1 " #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:306 #, qt-format msgid "You joined group %1" msgstr "Liityit ryhmään %1" #: indicator/textchannelobserver.cpp:309 msgid "You joined a new group" msgstr "Liityit uuteen ryhmään" #: indicator/textchannelobserver.cpp:328 msgid "View Group" msgstr "Näytä ryhmä" #: indicator/textchannelobserver.cpp:367 indicator/ussdindicator.cpp:116 msgid "Ok" msgstr "OK" #: indicator/textchannelobserver.cpp:373 msgid "Save" msgstr "Tallenna" #: indicator/textchannelobserver.cpp:468 msgid "Emergency Alert" msgstr "" #: indicator/textchannelobserver.cpp:471 msgid "Emergency Alert: Extreme" msgstr "" #: indicator/textchannelobserver.cpp:474 msgid "Emergency Alert: Severe" msgstr "" #: indicator/textchannelobserver.cpp:477 msgid "Emergency Alert: Notice" msgstr "" #: indicator/textchannelobserver.cpp:482 msgid "AMBER Alert" msgstr "" #: indicator/textchannelobserver.cpp:485 msgid "Alert" msgstr "" #: indicator/textchannelobserver.cpp:531 msgid "Show alert" msgstr "" #: indicator/textchannelobserver.cpp:604 #, qt-format msgid "Attachment: %1 image" msgid_plural "Attachments: %1 images" msgstr[0] "Liite: %1 kuva" msgstr[1] "Liitteet: %1 kuvaa" #: indicator/textchannelobserver.cpp:606 #, qt-format msgid "Attachment: %1 video" msgid_plural "Attachments: %1 videos" msgstr[0] "Liite: %1 video" msgstr[1] "Liitteet: %1 videota" #: indicator/textchannelobserver.cpp:608 #, qt-format msgid "Attachment: %1 contact" msgid_plural "Attachments: %1 contacts" msgstr[0] "Liite: %1 yhteystieto" msgstr[1] "Liitteet: %1 yhteystietoa" #: indicator/textchannelobserver.cpp:610 #, qt-format msgid "Attachment: %1 audio clip" msgid_plural "Attachments: %1 audio clips" msgstr[0] "Liite: %1 äänitiedosto" msgstr[1] "Liitteet: %1 äänitiedostoa" #: indicator/textchannelobserver.cpp:612 #, qt-format msgid "Attachment: %1 file" msgid_plural "Attachments: %1 files" msgstr[0] "Liite: %1 tiedosto" msgstr[1] "Liitteet: %1 tiedostoa" #. TRANSLATORS : message displayed when any error occurred while receiving a MMS (case when cellular-data is off, or any downloading issue). Notify that there was a message, the user can find more about it in the messaging-app. #: indicator/textchannelobserver.cpp:615 #, fuzzy #| msgid "View message" msgid "New MMS message" msgstr "Näytä viesti" #. TRANSLATORS : %1 is the recipient name #: indicator/textchannelobserver.cpp:679 indicator/textchannelobserver.cpp:683 #, qt-format msgid "Message to group from %1" msgstr "Viesti ryhmälle lähettäjältä %1" #: indicator/textchannelobserver.cpp:749 #, qt-format msgid "Message from %1" msgstr "Viesti (%1)" #: indicator/textchannelobserver.cpp:910 msgid "Please, select a SIM card:" msgstr "Aseta SIM-kortti:" #: indicator/ussdindicator.cpp:119 msgid "Reply" msgstr "Vastaa" #: indicator/ussdindicator.cpp:142 msgid "Cancel" msgstr "Peru" #: libtelephonyservice/callnotification.cpp:53 msgid "Conf call on hold" msgstr "" #: libtelephonyservice/callnotification.cpp:53 #, qt-format msgid "%1 call on hold" msgstr "" #: libtelephonyservice/callnotification.cpp:56 msgid "Conf call ended" msgstr "" #: libtelephonyservice/callnotification.cpp:56 #, qt-format msgid "%1 call ended" msgstr "" #: libtelephonyservice/callnotification.cpp:59 #, qt-format msgid "%1 call declined" msgstr "" #: libtelephonyservice/contactwatcher.cpp:157 msgid "Private Number" msgstr "Salainen numero" #: libtelephonyservice/contactwatcher.cpp:159 msgid "Unknown Number" msgstr "Tuntematon numero" #, fuzzy #~| msgid "Telephony Service" #~ msgid "telephony-service-call" #~ msgstr "Puhelinpalvelu" #, fuzzy #~| msgid "Telephony Service" #~ msgid "telephony-service-message" #~ msgstr "Puhelinpalvelu" telephony-service-0.5.3/po/fil.po000066400000000000000000000210461455543255600167350ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR Canonical Ltd. # This file is distributed under the same license as the telephony-service package. # FIRST AUTHOR , YEAR. # msgid "" msgstr "" "Project-Id-Version: telephony-service\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-12-16 17:03+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: Automatically generated\n" "Language-Team: none\n" "Language: fil\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1 && n != 2 && n != 3 && (n % 10 == 4 " "|| n % 10 == 6 || n % 10 == 9);\n" #: indicator/telephony-service-call.desktop.in:4 msgid "Phone Calls" msgstr "" #: indicator/telephony-service-sms.desktop.in:4 msgid "SMS" msgstr "" #: approver/approver.cpp:66 msgid "Unknown caller" msgstr "" #: approver/approver.cpp:94 msgid "I'm busy at the moment. I'll call later." msgstr "" #: approver/approver.cpp:95 msgid "I'm running late, on my way now." msgstr "" #: approver/approver.cpp:96 msgid "Please call me back later." msgstr "" #: approver/approver.cpp:457 #, qt-format msgid "On [%1]" msgstr "" #: approver/approver.cpp:461 indicator/messagingmenu.cpp:414 msgid "Private number" msgstr "" #: approver/approver.cpp:464 indicator/messagingmenu.cpp:244 #: indicator/messagingmenu.cpp:418 indicator/textchannelobserver.cpp:640 msgid "Unknown number" msgstr "" #: approver/approver.cpp:470 approver/approver.cpp:485 msgid "Caller number is not available" msgstr "" #: approver/approver.cpp:476 msgid "Calling from private number" msgstr "" #: approver/approver.cpp:479 msgid "Calling from unknown number" msgstr "" #: approver/approver.cpp:482 #, qt-format msgid "Calling from %1" msgstr "" #: approver/approver.cpp:529 msgid "Hold + Answer" msgstr "" #: approver/approver.cpp:530 msgid "Accept" msgstr "" #: approver/approver.cpp:543 msgid "End + Answer" msgstr "" #: approver/approver.cpp:552 msgid "Decline" msgstr "" #: approver/approver.cpp:560 msgid "Message & decline" msgstr "" #: approver/main.cpp:46 msgid "Telephony Service Approver" msgstr "" #: indicator/authhandler.cpp:72 msgid "Authentication failed. Do you want to review your credentials?" msgstr "" #: indicator/authhandler.cpp:91 msgid "Yes" msgstr "" #: indicator/authhandler.cpp:94 msgid "No" msgstr "" #: indicator/displaynamesettings.cpp:35 #, qt-format msgid "SIM %1" msgstr "" #: indicator/main.cpp:53 msgid "Telephony Service Indicator" msgstr "" #: indicator/messagingmenu.cpp:83 indicator/messagingmenu.cpp:87 msgid "Telephony Service" msgstr "" #: indicator/messagingmenu.cpp:151 indicator/messagingmenu.cpp:293 #: indicator/messagingmenu.cpp:360 msgid "Send" msgstr "" #. TRANSLATORS : %1 is the group name and %2 is the recipient name #: indicator/messagingmenu.cpp:262 indicator/textchannelobserver.cpp:671 #: indicator/textchannelobserver.cpp:675 #, qt-format msgid "Message to %1 from %2" msgstr "" #. TRANSLATORS : %1 is the recipient name #: indicator/messagingmenu.cpp:265 indicator/messagingmenu.cpp:269 #, qt-format msgid "Message to the group from %1" msgstr "" #: indicator/messagingmenu.cpp:345 msgid "Call back" msgstr "" #: indicator/messagingmenu.cpp:350 msgid "Missed your call — can you call me now?" msgstr "" #: indicator/messagingmenu.cpp:351 msgid "Running late. On my way." msgstr "" #: indicator/messagingmenu.cpp:352 msgid "Busy at the moment. Will call you later." msgstr "" #: indicator/messagingmenu.cpp:353 msgid "I am 20 minutes late." msgstr "" #: indicator/messagingmenu.cpp:354 msgid "Still busy. Will call you later." msgstr "" #: indicator/messagingmenu.cpp:409 #, qt-format msgid "%1 missed call" msgid_plural "%1 missed calls" msgstr[0] "" msgstr[1] "" #: indicator/messagingmenu.cpp:492 msgid "Voicemail messages" msgstr "" #: indicator/messagingmenu.cpp:495 #, qt-format msgid "%1 voicemail message" msgid_plural "%1 voicemail messages" msgstr[0] "" msgstr[1] "" #: indicator/messagingmenu.cpp:500 msgid "Voicemail" msgstr "" #: indicator/metrics.cpp:42 #, qt-format msgid "%1 text messages sent today" msgstr "" #: indicator/metrics.cpp:43 msgid "No text messages sent today" msgstr "" #: indicator/metrics.cpp:44 #, qt-format msgid "%1 text messages received today" msgstr "" #: indicator/metrics.cpp:45 msgid "No text messages received today" msgstr "" #: indicator/metrics.cpp:46 #, qt-format msgid "%1 calls received today" msgstr "" #: indicator/metrics.cpp:47 msgid "No calls received today" msgstr "" #: indicator/metrics.cpp:48 #, qt-format msgid "%1 calls made today" msgstr "" #: indicator/metrics.cpp:49 indicator/metrics.cpp:51 msgid "No calls made today" msgstr "" #: indicator/metrics.cpp:50 #, qt-format msgid "Spent %1 minutes in calls today" msgstr "" #: indicator/textchannelobserver.cpp:225 msgid "Unlock your sim card and try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:227 msgid "Deactivate flight mode and try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:230 msgid "Try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:236 msgid "The message could not be sent" msgstr "" #: indicator/textchannelobserver.cpp:249 indicator/textchannelobserver.cpp:713 msgid "View message" msgstr "" #: indicator/textchannelobserver.cpp:295 msgid "New Group" msgstr "" #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:302 #, qt-format msgid "You joined group %1 " msgstr "" #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:306 #, qt-format msgid "You joined group %1" msgstr "" #: indicator/textchannelobserver.cpp:309 msgid "You joined a new group" msgstr "" #: indicator/textchannelobserver.cpp:328 msgid "View Group" msgstr "" #: indicator/textchannelobserver.cpp:367 indicator/ussdindicator.cpp:116 msgid "Ok" msgstr "" #: indicator/textchannelobserver.cpp:373 msgid "Save" msgstr "" #: indicator/textchannelobserver.cpp:468 msgid "Emergency Alert" msgstr "" #: indicator/textchannelobserver.cpp:471 msgid "Emergency Alert: Extreme" msgstr "" #: indicator/textchannelobserver.cpp:474 msgid "Emergency Alert: Severe" msgstr "" #: indicator/textchannelobserver.cpp:477 msgid "Emergency Alert: Notice" msgstr "" #: indicator/textchannelobserver.cpp:482 msgid "AMBER Alert" msgstr "" #: indicator/textchannelobserver.cpp:485 msgid "Alert" msgstr "" #: indicator/textchannelobserver.cpp:531 msgid "Show alert" msgstr "" #: indicator/textchannelobserver.cpp:604 #, qt-format msgid "Attachment: %1 image" msgid_plural "Attachments: %1 images" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:606 #, qt-format msgid "Attachment: %1 video" msgid_plural "Attachments: %1 videos" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:608 #, qt-format msgid "Attachment: %1 contact" msgid_plural "Attachments: %1 contacts" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:610 #, qt-format msgid "Attachment: %1 audio clip" msgid_plural "Attachments: %1 audio clips" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:612 #, qt-format msgid "Attachment: %1 file" msgid_plural "Attachments: %1 files" msgstr[0] "" msgstr[1] "" #. TRANSLATORS : message displayed when any error occurred while receiving a MMS (case when cellular-data is off, or any downloading issue). Notify that there was a message, the user can find more about it in the messaging-app. #: indicator/textchannelobserver.cpp:615 msgid "New MMS message" msgstr "" #. TRANSLATORS : %1 is the recipient name #: indicator/textchannelobserver.cpp:679 indicator/textchannelobserver.cpp:683 #, qt-format msgid "Message to group from %1" msgstr "" #: indicator/textchannelobserver.cpp:749 #, qt-format msgid "Message from %1" msgstr "" #: indicator/textchannelobserver.cpp:910 msgid "Please, select a SIM card:" msgstr "" #: indicator/ussdindicator.cpp:119 msgid "Reply" msgstr "" #: indicator/ussdindicator.cpp:142 msgid "Cancel" msgstr "" #: libtelephonyservice/callnotification.cpp:53 msgid "Conf call on hold" msgstr "" #: libtelephonyservice/callnotification.cpp:53 #, qt-format msgid "%1 call on hold" msgstr "" #: libtelephonyservice/callnotification.cpp:56 msgid "Conf call ended" msgstr "" #: libtelephonyservice/callnotification.cpp:56 #, qt-format msgid "%1 call ended" msgstr "" #: libtelephonyservice/callnotification.cpp:59 #, qt-format msgid "%1 call declined" msgstr "" #: libtelephonyservice/contactwatcher.cpp:157 msgid "Private Number" msgstr "" #: libtelephonyservice/contactwatcher.cpp:159 msgid "Unknown Number" msgstr "" telephony-service-0.5.3/po/fo.po000066400000000000000000000207371455543255600165750ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR Canonical Ltd. # This file is distributed under the same license as the telephony-service package. # FIRST AUTHOR , YEAR. # msgid "" msgstr "" "Project-Id-Version: telephony-service\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-12-16 17:03+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: Automatically generated\n" "Language-Team: none\n" "Language: fo\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" #: indicator/telephony-service-call.desktop.in:4 msgid "Phone Calls" msgstr "" #: indicator/telephony-service-sms.desktop.in:4 msgid "SMS" msgstr "" #: approver/approver.cpp:66 msgid "Unknown caller" msgstr "" #: approver/approver.cpp:94 msgid "I'm busy at the moment. I'll call later." msgstr "" #: approver/approver.cpp:95 msgid "I'm running late, on my way now." msgstr "" #: approver/approver.cpp:96 msgid "Please call me back later." msgstr "" #: approver/approver.cpp:457 #, qt-format msgid "On [%1]" msgstr "" #: approver/approver.cpp:461 indicator/messagingmenu.cpp:414 msgid "Private number" msgstr "" #: approver/approver.cpp:464 indicator/messagingmenu.cpp:244 #: indicator/messagingmenu.cpp:418 indicator/textchannelobserver.cpp:640 msgid "Unknown number" msgstr "" #: approver/approver.cpp:470 approver/approver.cpp:485 msgid "Caller number is not available" msgstr "" #: approver/approver.cpp:476 msgid "Calling from private number" msgstr "" #: approver/approver.cpp:479 msgid "Calling from unknown number" msgstr "" #: approver/approver.cpp:482 #, qt-format msgid "Calling from %1" msgstr "" #: approver/approver.cpp:529 msgid "Hold + Answer" msgstr "" #: approver/approver.cpp:530 msgid "Accept" msgstr "" #: approver/approver.cpp:543 msgid "End + Answer" msgstr "" #: approver/approver.cpp:552 msgid "Decline" msgstr "" #: approver/approver.cpp:560 msgid "Message & decline" msgstr "" #: approver/main.cpp:46 msgid "Telephony Service Approver" msgstr "" #: indicator/authhandler.cpp:72 msgid "Authentication failed. Do you want to review your credentials?" msgstr "" #: indicator/authhandler.cpp:91 msgid "Yes" msgstr "" #: indicator/authhandler.cpp:94 msgid "No" msgstr "" #: indicator/displaynamesettings.cpp:35 #, qt-format msgid "SIM %1" msgstr "" #: indicator/main.cpp:53 msgid "Telephony Service Indicator" msgstr "" #: indicator/messagingmenu.cpp:83 indicator/messagingmenu.cpp:87 msgid "Telephony Service" msgstr "" #: indicator/messagingmenu.cpp:151 indicator/messagingmenu.cpp:293 #: indicator/messagingmenu.cpp:360 msgid "Send" msgstr "" #. TRANSLATORS : %1 is the group name and %2 is the recipient name #: indicator/messagingmenu.cpp:262 indicator/textchannelobserver.cpp:671 #: indicator/textchannelobserver.cpp:675 #, qt-format msgid "Message to %1 from %2" msgstr "" #. TRANSLATORS : %1 is the recipient name #: indicator/messagingmenu.cpp:265 indicator/messagingmenu.cpp:269 #, qt-format msgid "Message to the group from %1" msgstr "" #: indicator/messagingmenu.cpp:345 msgid "Call back" msgstr "" #: indicator/messagingmenu.cpp:350 msgid "Missed your call — can you call me now?" msgstr "" #: indicator/messagingmenu.cpp:351 msgid "Running late. On my way." msgstr "" #: indicator/messagingmenu.cpp:352 msgid "Busy at the moment. Will call you later." msgstr "" #: indicator/messagingmenu.cpp:353 msgid "I am 20 minutes late." msgstr "" #: indicator/messagingmenu.cpp:354 msgid "Still busy. Will call you later." msgstr "" #: indicator/messagingmenu.cpp:409 #, qt-format msgid "%1 missed call" msgid_plural "%1 missed calls" msgstr[0] "" msgstr[1] "" #: indicator/messagingmenu.cpp:492 msgid "Voicemail messages" msgstr "" #: indicator/messagingmenu.cpp:495 #, qt-format msgid "%1 voicemail message" msgid_plural "%1 voicemail messages" msgstr[0] "" msgstr[1] "" #: indicator/messagingmenu.cpp:500 msgid "Voicemail" msgstr "" #: indicator/metrics.cpp:42 #, qt-format msgid "%1 text messages sent today" msgstr "" #: indicator/metrics.cpp:43 msgid "No text messages sent today" msgstr "" #: indicator/metrics.cpp:44 #, qt-format msgid "%1 text messages received today" msgstr "" #: indicator/metrics.cpp:45 msgid "No text messages received today" msgstr "" #: indicator/metrics.cpp:46 #, qt-format msgid "%1 calls received today" msgstr "" #: indicator/metrics.cpp:47 msgid "No calls received today" msgstr "" #: indicator/metrics.cpp:48 #, qt-format msgid "%1 calls made today" msgstr "" #: indicator/metrics.cpp:49 indicator/metrics.cpp:51 msgid "No calls made today" msgstr "" #: indicator/metrics.cpp:50 #, qt-format msgid "Spent %1 minutes in calls today" msgstr "" #: indicator/textchannelobserver.cpp:225 msgid "Unlock your sim card and try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:227 msgid "Deactivate flight mode and try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:230 msgid "Try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:236 msgid "The message could not be sent" msgstr "" #: indicator/textchannelobserver.cpp:249 indicator/textchannelobserver.cpp:713 msgid "View message" msgstr "" #: indicator/textchannelobserver.cpp:295 msgid "New Group" msgstr "" #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:302 #, qt-format msgid "You joined group %1 " msgstr "" #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:306 #, qt-format msgid "You joined group %1" msgstr "" #: indicator/textchannelobserver.cpp:309 msgid "You joined a new group" msgstr "" #: indicator/textchannelobserver.cpp:328 msgid "View Group" msgstr "" #: indicator/textchannelobserver.cpp:367 indicator/ussdindicator.cpp:116 msgid "Ok" msgstr "" #: indicator/textchannelobserver.cpp:373 msgid "Save" msgstr "" #: indicator/textchannelobserver.cpp:468 msgid "Emergency Alert" msgstr "" #: indicator/textchannelobserver.cpp:471 msgid "Emergency Alert: Extreme" msgstr "" #: indicator/textchannelobserver.cpp:474 msgid "Emergency Alert: Severe" msgstr "" #: indicator/textchannelobserver.cpp:477 msgid "Emergency Alert: Notice" msgstr "" #: indicator/textchannelobserver.cpp:482 msgid "AMBER Alert" msgstr "" #: indicator/textchannelobserver.cpp:485 msgid "Alert" msgstr "" #: indicator/textchannelobserver.cpp:531 msgid "Show alert" msgstr "" #: indicator/textchannelobserver.cpp:604 #, qt-format msgid "Attachment: %1 image" msgid_plural "Attachments: %1 images" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:606 #, qt-format msgid "Attachment: %1 video" msgid_plural "Attachments: %1 videos" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:608 #, qt-format msgid "Attachment: %1 contact" msgid_plural "Attachments: %1 contacts" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:610 #, qt-format msgid "Attachment: %1 audio clip" msgid_plural "Attachments: %1 audio clips" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:612 #, qt-format msgid "Attachment: %1 file" msgid_plural "Attachments: %1 files" msgstr[0] "" msgstr[1] "" #. TRANSLATORS : message displayed when any error occurred while receiving a MMS (case when cellular-data is off, or any downloading issue). Notify that there was a message, the user can find more about it in the messaging-app. #: indicator/textchannelobserver.cpp:615 msgid "New MMS message" msgstr "" #. TRANSLATORS : %1 is the recipient name #: indicator/textchannelobserver.cpp:679 indicator/textchannelobserver.cpp:683 #, qt-format msgid "Message to group from %1" msgstr "" #: indicator/textchannelobserver.cpp:749 #, qt-format msgid "Message from %1" msgstr "" #: indicator/textchannelobserver.cpp:910 msgid "Please, select a SIM card:" msgstr "" #: indicator/ussdindicator.cpp:119 msgid "Reply" msgstr "" #: indicator/ussdindicator.cpp:142 msgid "Cancel" msgstr "" #: libtelephonyservice/callnotification.cpp:53 msgid "Conf call on hold" msgstr "" #: libtelephonyservice/callnotification.cpp:53 #, qt-format msgid "%1 call on hold" msgstr "" #: libtelephonyservice/callnotification.cpp:56 msgid "Conf call ended" msgstr "" #: libtelephonyservice/callnotification.cpp:56 #, qt-format msgid "%1 call ended" msgstr "" #: libtelephonyservice/callnotification.cpp:59 #, qt-format msgid "%1 call declined" msgstr "" #: libtelephonyservice/contactwatcher.cpp:157 msgid "Private Number" msgstr "" #: libtelephonyservice/contactwatcher.cpp:159 msgid "Unknown Number" msgstr "" telephony-service-0.5.3/po/fr.po000066400000000000000000000272671455543255600166050ustar00rootroot00000000000000# French translation for telephony-service # Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013 # This file is distributed under the same license as the telephony-service package. # FIRST AUTHOR , 2013. # msgid "" msgstr "" "Project-Id-Version: telephony-service\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-12-16 17:03+0100\n" "PO-Revision-Date: 2023-06-28 04:33+0000\n" "Last-Translator: Lionel Duboeuf \n" "Language-Team: French \n" "Language: fr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n > 1;\n" "X-Generator: Weblate 4.18.1\n" "X-Launchpad-Export-Date: 2017-01-04 06:02+0000\n" #: indicator/telephony-service-call.desktop.in:4 msgid "Phone Calls" msgstr "Appels téléphoniques" #: indicator/telephony-service-sms.desktop.in:4 msgid "SMS" msgstr "Texto" #: approver/approver.cpp:66 msgid "Unknown caller" msgstr "Numéro inconnu" #: approver/approver.cpp:94 msgid "I'm busy at the moment. I'll call later." msgstr "Je suis occupé pour le moment. Je vous rappellerai plus tard." #: approver/approver.cpp:95 msgid "I'm running late, on my way now." msgstr "Je suis en retard et actuellement en chemin." #: approver/approver.cpp:96 msgid "Please call me back later." msgstr "Veuillez me rappeler plus tard." #: approver/approver.cpp:457 #, qt-format msgid "On [%1]" msgstr "Sur [%1]" #: approver/approver.cpp:461 indicator/messagingmenu.cpp:414 msgid "Private number" msgstr "Numéro privé" #: approver/approver.cpp:464 indicator/messagingmenu.cpp:244 #: indicator/messagingmenu.cpp:418 indicator/textchannelobserver.cpp:640 msgid "Unknown number" msgstr "Numéro inconnu" #: approver/approver.cpp:470 approver/approver.cpp:485 msgid "Caller number is not available" msgstr "Le numéro d'appel n'est pas disponible" #: approver/approver.cpp:476 msgid "Calling from private number" msgstr "Appel depuis un numéro privé" #: approver/approver.cpp:479 msgid "Calling from unknown number" msgstr "Appel depuis un numéro inconnu" #: approver/approver.cpp:482 #, qt-format msgid "Calling from %1" msgstr "Appel depuis %1" #: approver/approver.cpp:529 msgid "Hold + Answer" msgstr "Rester en ligne + Répondre" #: approver/approver.cpp:530 msgid "Accept" msgstr "Accepter" #: approver/approver.cpp:543 msgid "End + Answer" msgstr "Terminer + Répondre" #: approver/approver.cpp:552 msgid "Decline" msgstr "Refuser" #: approver/approver.cpp:560 msgid "Message & decline" msgstr "Envoyer un message & décliner" #: approver/main.cpp:46 msgid "Telephony Service Approver" msgstr "Approbateur de service téléphonique" #: indicator/authhandler.cpp:72 msgid "Authentication failed. Do you want to review your credentials?" msgstr "L'authentification a échoué. Souhaitez-vous revoir vos identifiants ?" #: indicator/authhandler.cpp:91 msgid "Yes" msgstr "Oui" #: indicator/authhandler.cpp:94 msgid "No" msgstr "Non" #: indicator/displaynamesettings.cpp:35 #, qt-format msgid "SIM %1" msgstr "SIM %1" #: indicator/main.cpp:53 msgid "Telephony Service Indicator" msgstr "Indicateur de service téléphonique" #: indicator/messagingmenu.cpp:83 indicator/messagingmenu.cpp:87 msgid "Telephony Service" msgstr "Service téléphonique" #: indicator/messagingmenu.cpp:151 indicator/messagingmenu.cpp:293 #: indicator/messagingmenu.cpp:360 msgid "Send" msgstr "Envoyer" #. TRANSLATORS : %1 is the group name and %2 is the recipient name #: indicator/messagingmenu.cpp:262 indicator/textchannelobserver.cpp:671 #: indicator/textchannelobserver.cpp:675 #, qt-format msgid "Message to %1 from %2" msgstr "Message à %1 de %2" #. TRANSLATORS : %1 is the recipient name #: indicator/messagingmenu.cpp:265 indicator/messagingmenu.cpp:269 #, qt-format msgid "Message to the group from %1" msgstr "Message de %1 au groupe" #: indicator/messagingmenu.cpp:345 msgid "Call back" msgstr "Rappeler" #: indicator/messagingmenu.cpp:350 msgid "Missed your call — can you call me now?" msgstr "J'ai manqué votre appel - pouvez-vous m'appeler maintenant ?" #: indicator/messagingmenu.cpp:351 msgid "Running late. On my way." msgstr "Je suis en retard. Je suis en chemin." #: indicator/messagingmenu.cpp:352 msgid "Busy at the moment. Will call you later." msgstr "Je suis occupé(e) pour le moment. Je vous rappelle plus tard." #: indicator/messagingmenu.cpp:353 msgid "I am 20 minutes late." msgstr "J'aurai 20 minutes de retard." #: indicator/messagingmenu.cpp:354 msgid "Still busy. Will call you later." msgstr "Désolé, je suis encore occupé. Je vous rappelle plus tard." #: indicator/messagingmenu.cpp:409 #, qt-format msgid "%1 missed call" msgid_plural "%1 missed calls" msgstr[0] "%1 appel manqué" msgstr[1] "%1 appels manqués" #: indicator/messagingmenu.cpp:492 msgid "Voicemail messages" msgstr "Messages vocaux" #: indicator/messagingmenu.cpp:495 #, qt-format msgid "%1 voicemail message" msgid_plural "%1 voicemail messages" msgstr[0] "%1 message vocal" msgstr[1] "%1 messages vocaux" #: indicator/messagingmenu.cpp:500 msgid "Voicemail" msgstr "Messagerie vocale" #: indicator/metrics.cpp:42 #, qt-format msgid "%1 text messages sent today" msgstr "%1 SMS envoyés aujourd'hui" #: indicator/metrics.cpp:43 msgid "No text messages sent today" msgstr "Pas de SMS envoyés aujourd'hui" #: indicator/metrics.cpp:44 #, qt-format msgid "%1 text messages received today" msgstr "%1 SMS reçus aujourd'hui" #: indicator/metrics.cpp:45 msgid "No text messages received today" msgstr "Pas de SMS reçus aujourd'hui" #: indicator/metrics.cpp:46 #, qt-format msgid "%1 calls received today" msgstr "%1 appels reçus aujourd'hui" #: indicator/metrics.cpp:47 msgid "No calls received today" msgstr "Pas d'appels reçus aujourd'hui" #: indicator/metrics.cpp:48 #, qt-format msgid "%1 calls made today" msgstr "%1 appels émis aujourd'hui" #: indicator/metrics.cpp:49 indicator/metrics.cpp:51 msgid "No calls made today" msgstr "Pas d'appels émis aujourd'hui" #: indicator/metrics.cpp:50 #, qt-format msgid "Spent %1 minutes in calls today" msgstr "%1 minutes passées à appeler aujourd'hui" #: indicator/textchannelobserver.cpp:225 msgid "Unlock your sim card and try again from the messaging application." msgstr "" "Déverrouillez votre carte SIM et essayez à nouveau depuis l'application de " "messagerie." #: indicator/textchannelobserver.cpp:227 msgid "Deactivate flight mode and try again from the messaging application." msgstr "" "Désactivez le mode avion, relancez l'application et réessayez à nouveau." #: indicator/textchannelobserver.cpp:230 msgid "Try again from the messaging application." msgstr "Essayez à nouveau depuis l'application." #: indicator/textchannelobserver.cpp:236 msgid "The message could not be sent" msgstr "Le message n'a pas pu être envoyé" #: indicator/textchannelobserver.cpp:249 indicator/textchannelobserver.cpp:713 msgid "View message" msgstr "Voir le message" #: indicator/textchannelobserver.cpp:295 msgid "New Group" msgstr "Nouveau groupe" #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:302 #, qt-format msgid "You joined group %1 " msgstr "Vous avez rejoint le groupe %1 " #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:306 #, qt-format msgid "You joined group %1" msgstr "Vous avez rejoint le groupe %1" #: indicator/textchannelobserver.cpp:309 msgid "You joined a new group" msgstr "Vous avez rejoint un nouveau groupe" #: indicator/textchannelobserver.cpp:328 msgid "View Group" msgstr "Afficher le groupe" #: indicator/textchannelobserver.cpp:367 indicator/ussdindicator.cpp:116 msgid "Ok" msgstr "Valider" #: indicator/textchannelobserver.cpp:373 msgid "Save" msgstr "Enregistrer" #: indicator/textchannelobserver.cpp:468 msgid "Emergency Alert" msgstr "Alerte d'urgence" #: indicator/textchannelobserver.cpp:471 msgid "Emergency Alert: Extreme" msgstr "Alerte d'urgence: Extrême" #: indicator/textchannelobserver.cpp:474 msgid "Emergency Alert: Severe" msgstr "Alerte d'urgence: Sévère" #: indicator/textchannelobserver.cpp:477 msgid "Emergency Alert: Notice" msgstr "Alerte d'urgence: Notification" #: indicator/textchannelobserver.cpp:482 msgid "AMBER Alert" msgstr "Alerte enlèvement" #: indicator/textchannelobserver.cpp:485 msgid "Alert" msgstr "Alerte" #: indicator/textchannelobserver.cpp:531 msgid "Show alert" msgstr "Voir les alertes" #: indicator/textchannelobserver.cpp:604 #, qt-format msgid "Attachment: %1 image" msgid_plural "Attachments: %1 images" msgstr[0] "Pièce jointe : %1 image" msgstr[1] "Pièces jointes : %1 images" #: indicator/textchannelobserver.cpp:606 #, qt-format msgid "Attachment: %1 video" msgid_plural "Attachments: %1 videos" msgstr[0] "Pièce jointe : %1 vidéo" msgstr[1] "Pièces jointes : %1 vidéos" #: indicator/textchannelobserver.cpp:608 #, qt-format msgid "Attachment: %1 contact" msgid_plural "Attachments: %1 contacts" msgstr[0] "Pièce jointe : %1 contact" msgstr[1] "Pièces jointes : %1 contacts" #: indicator/textchannelobserver.cpp:610 #, qt-format msgid "Attachment: %1 audio clip" msgid_plural "Attachments: %1 audio clips" msgstr[0] "Pièce jointe : %1 clip audio" msgstr[1] "Pièces jointes : %1 clips audio" #: indicator/textchannelobserver.cpp:612 #, qt-format msgid "Attachment: %1 file" msgid_plural "Attachments: %1 files" msgstr[0] "Pièce jointe : %1 fichier" msgstr[1] "Pièces jointes : %1 fichiers" #. TRANSLATORS : message displayed when any error occurred while receiving a MMS (case when cellular-data is off, or any downloading issue). Notify that there was a message, the user can find more about it in the messaging-app. #: indicator/textchannelobserver.cpp:615 msgid "New MMS message" msgstr "Nouveau MMS" #. TRANSLATORS : %1 is the recipient name #: indicator/textchannelobserver.cpp:679 indicator/textchannelobserver.cpp:683 #, qt-format msgid "Message to group from %1" msgstr "Message de %1 au groupe" #: indicator/textchannelobserver.cpp:749 #, qt-format msgid "Message from %1" msgstr "Message de %1" #: indicator/textchannelobserver.cpp:910 msgid "Please, select a SIM card:" msgstr "Veuillez choisir une carte SIM :" #: indicator/ussdindicator.cpp:119 msgid "Reply" msgstr "Répondre" #: indicator/ussdindicator.cpp:142 msgid "Cancel" msgstr "Annuler" #: libtelephonyservice/callnotification.cpp:53 msgid "Conf call on hold" msgstr "Appel conférence téléphonique en attente" #: libtelephonyservice/callnotification.cpp:53 #, qt-format msgid "%1 call on hold" msgstr "%1 appel en attente" #: libtelephonyservice/callnotification.cpp:56 msgid "Conf call ended" msgstr "Conférence téléphonique terminée" #: libtelephonyservice/callnotification.cpp:56 #, qt-format msgid "%1 call ended" msgstr "%1 appel terminé" #: libtelephonyservice/callnotification.cpp:59 #, qt-format msgid "%1 call declined" msgstr "%1 appel refusé" #: libtelephonyservice/contactwatcher.cpp:157 msgid "Private Number" msgstr "Numéro privé" #: libtelephonyservice/contactwatcher.cpp:159 msgid "Unknown Number" msgstr "Numéro inconnu" #~ msgid "telephony-service-call" #~ msgstr "telephony-service-call" #~ msgid "telephony-service-message" #~ msgstr "telephony-service-message" #~ msgid "" #~ "Oops, there has been an error with the MMS system and this message could " #~ "not be retrieved. Please ensure Cellular Data is ON and MMS settings are " #~ "correct, then ask the sender to try again." #~ msgstr "" #~ "Oups, il y a eu une erreur avec le système de MMS et ce message n'a pas " #~ "pu être récupéré. Veuillez vous assurer que la fonction « Données " #~ "cellulaires » est activée et que les paramètres des MMS sont corrects, " #~ "puis demandez à l'expéditeur/trice de réessayer." telephony-service-0.5.3/po/fr_CA.po000066400000000000000000000207451455543255600171420ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-12-16 17:03+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: Automatically generated\n" "Language-Team: none\n" "Language: fr_CA\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n > 1;\n" #: indicator/telephony-service-call.desktop.in:4 msgid "Phone Calls" msgstr "" #: indicator/telephony-service-sms.desktop.in:4 msgid "SMS" msgstr "" #: approver/approver.cpp:66 msgid "Unknown caller" msgstr "" #: approver/approver.cpp:94 msgid "I'm busy at the moment. I'll call later." msgstr "" #: approver/approver.cpp:95 msgid "I'm running late, on my way now." msgstr "" #: approver/approver.cpp:96 msgid "Please call me back later." msgstr "" #: approver/approver.cpp:457 #, qt-format msgid "On [%1]" msgstr "" #: approver/approver.cpp:461 indicator/messagingmenu.cpp:414 msgid "Private number" msgstr "" #: approver/approver.cpp:464 indicator/messagingmenu.cpp:244 #: indicator/messagingmenu.cpp:418 indicator/textchannelobserver.cpp:640 msgid "Unknown number" msgstr "" #: approver/approver.cpp:470 approver/approver.cpp:485 msgid "Caller number is not available" msgstr "" #: approver/approver.cpp:476 msgid "Calling from private number" msgstr "" #: approver/approver.cpp:479 msgid "Calling from unknown number" msgstr "" #: approver/approver.cpp:482 #, qt-format msgid "Calling from %1" msgstr "" #: approver/approver.cpp:529 msgid "Hold + Answer" msgstr "" #: approver/approver.cpp:530 msgid "Accept" msgstr "" #: approver/approver.cpp:543 msgid "End + Answer" msgstr "" #: approver/approver.cpp:552 msgid "Decline" msgstr "" #: approver/approver.cpp:560 msgid "Message & decline" msgstr "" #: approver/main.cpp:46 msgid "Telephony Service Approver" msgstr "" #: indicator/authhandler.cpp:72 msgid "Authentication failed. Do you want to review your credentials?" msgstr "" #: indicator/authhandler.cpp:91 msgid "Yes" msgstr "" #: indicator/authhandler.cpp:94 msgid "No" msgstr "" #: indicator/displaynamesettings.cpp:35 #, qt-format msgid "SIM %1" msgstr "" #: indicator/main.cpp:53 msgid "Telephony Service Indicator" msgstr "" #: indicator/messagingmenu.cpp:83 indicator/messagingmenu.cpp:87 msgid "Telephony Service" msgstr "" #: indicator/messagingmenu.cpp:151 indicator/messagingmenu.cpp:293 #: indicator/messagingmenu.cpp:360 msgid "Send" msgstr "" #. TRANSLATORS : %1 is the group name and %2 is the recipient name #: indicator/messagingmenu.cpp:262 indicator/textchannelobserver.cpp:671 #: indicator/textchannelobserver.cpp:675 #, qt-format msgid "Message to %1 from %2" msgstr "" #. TRANSLATORS : %1 is the recipient name #: indicator/messagingmenu.cpp:265 indicator/messagingmenu.cpp:269 #, qt-format msgid "Message to the group from %1" msgstr "" #: indicator/messagingmenu.cpp:345 msgid "Call back" msgstr "" #: indicator/messagingmenu.cpp:350 msgid "Missed your call — can you call me now?" msgstr "" #: indicator/messagingmenu.cpp:351 msgid "Running late. On my way." msgstr "" #: indicator/messagingmenu.cpp:352 msgid "Busy at the moment. Will call you later." msgstr "" #: indicator/messagingmenu.cpp:353 msgid "I am 20 minutes late." msgstr "" #: indicator/messagingmenu.cpp:354 msgid "Still busy. Will call you later." msgstr "" #: indicator/messagingmenu.cpp:409 #, qt-format msgid "%1 missed call" msgid_plural "%1 missed calls" msgstr[0] "" msgstr[1] "" #: indicator/messagingmenu.cpp:492 msgid "Voicemail messages" msgstr "" #: indicator/messagingmenu.cpp:495 #, qt-format msgid "%1 voicemail message" msgid_plural "%1 voicemail messages" msgstr[0] "" msgstr[1] "" #: indicator/messagingmenu.cpp:500 msgid "Voicemail" msgstr "" #: indicator/metrics.cpp:42 #, qt-format msgid "%1 text messages sent today" msgstr "" #: indicator/metrics.cpp:43 msgid "No text messages sent today" msgstr "" #: indicator/metrics.cpp:44 #, qt-format msgid "%1 text messages received today" msgstr "" #: indicator/metrics.cpp:45 msgid "No text messages received today" msgstr "" #: indicator/metrics.cpp:46 #, qt-format msgid "%1 calls received today" msgstr "" #: indicator/metrics.cpp:47 msgid "No calls received today" msgstr "" #: indicator/metrics.cpp:48 #, qt-format msgid "%1 calls made today" msgstr "" #: indicator/metrics.cpp:49 indicator/metrics.cpp:51 msgid "No calls made today" msgstr "" #: indicator/metrics.cpp:50 #, qt-format msgid "Spent %1 minutes in calls today" msgstr "" #: indicator/textchannelobserver.cpp:225 msgid "Unlock your sim card and try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:227 msgid "Deactivate flight mode and try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:230 msgid "Try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:236 msgid "The message could not be sent" msgstr "" #: indicator/textchannelobserver.cpp:249 indicator/textchannelobserver.cpp:713 msgid "View message" msgstr "" #: indicator/textchannelobserver.cpp:295 msgid "New Group" msgstr "" #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:302 #, qt-format msgid "You joined group %1 " msgstr "" #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:306 #, qt-format msgid "You joined group %1" msgstr "" #: indicator/textchannelobserver.cpp:309 msgid "You joined a new group" msgstr "" #: indicator/textchannelobserver.cpp:328 msgid "View Group" msgstr "" #: indicator/textchannelobserver.cpp:367 indicator/ussdindicator.cpp:116 msgid "Ok" msgstr "" #: indicator/textchannelobserver.cpp:373 msgid "Save" msgstr "" #: indicator/textchannelobserver.cpp:468 msgid "Emergency Alert" msgstr "" #: indicator/textchannelobserver.cpp:471 msgid "Emergency Alert: Extreme" msgstr "" #: indicator/textchannelobserver.cpp:474 msgid "Emergency Alert: Severe" msgstr "" #: indicator/textchannelobserver.cpp:477 msgid "Emergency Alert: Notice" msgstr "" #: indicator/textchannelobserver.cpp:482 msgid "AMBER Alert" msgstr "" #: indicator/textchannelobserver.cpp:485 msgid "Alert" msgstr "" #: indicator/textchannelobserver.cpp:531 msgid "Show alert" msgstr "" #: indicator/textchannelobserver.cpp:604 #, qt-format msgid "Attachment: %1 image" msgid_plural "Attachments: %1 images" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:606 #, qt-format msgid "Attachment: %1 video" msgid_plural "Attachments: %1 videos" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:608 #, qt-format msgid "Attachment: %1 contact" msgid_plural "Attachments: %1 contacts" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:610 #, qt-format msgid "Attachment: %1 audio clip" msgid_plural "Attachments: %1 audio clips" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:612 #, qt-format msgid "Attachment: %1 file" msgid_plural "Attachments: %1 files" msgstr[0] "" msgstr[1] "" #. TRANSLATORS : message displayed when any error occurred while receiving a MMS (case when cellular-data is off, or any downloading issue). Notify that there was a message, the user can find more about it in the messaging-app. #: indicator/textchannelobserver.cpp:615 msgid "New MMS message" msgstr "" #. TRANSLATORS : %1 is the recipient name #: indicator/textchannelobserver.cpp:679 indicator/textchannelobserver.cpp:683 #, qt-format msgid "Message to group from %1" msgstr "" #: indicator/textchannelobserver.cpp:749 #, qt-format msgid "Message from %1" msgstr "" #: indicator/textchannelobserver.cpp:910 msgid "Please, select a SIM card:" msgstr "" #: indicator/ussdindicator.cpp:119 msgid "Reply" msgstr "" #: indicator/ussdindicator.cpp:142 msgid "Cancel" msgstr "" #: libtelephonyservice/callnotification.cpp:53 msgid "Conf call on hold" msgstr "" #: libtelephonyservice/callnotification.cpp:53 #, qt-format msgid "%1 call on hold" msgstr "" #: libtelephonyservice/callnotification.cpp:56 msgid "Conf call ended" msgstr "" #: libtelephonyservice/callnotification.cpp:56 #, qt-format msgid "%1 call ended" msgstr "" #: libtelephonyservice/callnotification.cpp:59 #, qt-format msgid "%1 call declined" msgstr "" #: libtelephonyservice/contactwatcher.cpp:157 msgid "Private Number" msgstr "" #: libtelephonyservice/contactwatcher.cpp:159 msgid "Unknown Number" msgstr "" telephony-service-0.5.3/po/fr_CH.po000066400000000000000000000211711455543255600171430ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-12-16 17:03+0100\n" "PO-Revision-Date: 2023-01-05 11:07+0000\n" "Last-Translator: Anonymous \n" "Language-Team: French (Switzerland) \n" "Language: fr_CH\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n > 1;\n" "X-Generator: Weblate 4.15.1-dev\n" #: indicator/telephony-service-call.desktop.in:4 msgid "Phone Calls" msgstr "" #: indicator/telephony-service-sms.desktop.in:4 msgid "SMS" msgstr "" #: approver/approver.cpp:66 msgid "Unknown caller" msgstr "" #: approver/approver.cpp:94 msgid "I'm busy at the moment. I'll call later." msgstr "" #: approver/approver.cpp:95 msgid "I'm running late, on my way now." msgstr "" #: approver/approver.cpp:96 msgid "Please call me back later." msgstr "" #: approver/approver.cpp:457 #, qt-format msgid "On [%1]" msgstr "" #: approver/approver.cpp:461 indicator/messagingmenu.cpp:414 msgid "Private number" msgstr "" #: approver/approver.cpp:464 indicator/messagingmenu.cpp:244 #: indicator/messagingmenu.cpp:418 indicator/textchannelobserver.cpp:640 msgid "Unknown number" msgstr "" #: approver/approver.cpp:470 approver/approver.cpp:485 msgid "Caller number is not available" msgstr "" #: approver/approver.cpp:476 msgid "Calling from private number" msgstr "" #: approver/approver.cpp:479 msgid "Calling from unknown number" msgstr "" #: approver/approver.cpp:482 #, qt-format msgid "Calling from %1" msgstr "" #: approver/approver.cpp:529 msgid "Hold + Answer" msgstr "" #: approver/approver.cpp:530 msgid "Accept" msgstr "" #: approver/approver.cpp:543 msgid "End + Answer" msgstr "" #: approver/approver.cpp:552 msgid "Decline" msgstr "" #: approver/approver.cpp:560 msgid "Message & decline" msgstr "" #: approver/main.cpp:46 msgid "Telephony Service Approver" msgstr "" #: indicator/authhandler.cpp:72 msgid "Authentication failed. Do you want to review your credentials?" msgstr "" #: indicator/authhandler.cpp:91 msgid "Yes" msgstr "" #: indicator/authhandler.cpp:94 msgid "No" msgstr "" #: indicator/displaynamesettings.cpp:35 #, qt-format msgid "SIM %1" msgstr "" #: indicator/main.cpp:53 msgid "Telephony Service Indicator" msgstr "" #: indicator/messagingmenu.cpp:83 indicator/messagingmenu.cpp:87 msgid "Telephony Service" msgstr "" #: indicator/messagingmenu.cpp:151 indicator/messagingmenu.cpp:293 #: indicator/messagingmenu.cpp:360 msgid "Send" msgstr "" #. TRANSLATORS : %1 is the group name and %2 is the recipient name #: indicator/messagingmenu.cpp:262 indicator/textchannelobserver.cpp:671 #: indicator/textchannelobserver.cpp:675 #, qt-format msgid "Message to %1 from %2" msgstr "" #. TRANSLATORS : %1 is the recipient name #: indicator/messagingmenu.cpp:265 indicator/messagingmenu.cpp:269 #, qt-format msgid "Message to the group from %1" msgstr "" #: indicator/messagingmenu.cpp:345 msgid "Call back" msgstr "" #: indicator/messagingmenu.cpp:350 msgid "Missed your call — can you call me now?" msgstr "" #: indicator/messagingmenu.cpp:351 msgid "Running late. On my way." msgstr "" #: indicator/messagingmenu.cpp:352 msgid "Busy at the moment. Will call you later." msgstr "" #: indicator/messagingmenu.cpp:353 msgid "I am 20 minutes late." msgstr "" #: indicator/messagingmenu.cpp:354 msgid "Still busy. Will call you later." msgstr "" #: indicator/messagingmenu.cpp:409 #, qt-format msgid "%1 missed call" msgid_plural "%1 missed calls" msgstr[0] "" msgstr[1] "" #: indicator/messagingmenu.cpp:492 msgid "Voicemail messages" msgstr "" #: indicator/messagingmenu.cpp:495 #, qt-format msgid "%1 voicemail message" msgid_plural "%1 voicemail messages" msgstr[0] "" msgstr[1] "" #: indicator/messagingmenu.cpp:500 msgid "Voicemail" msgstr "" #: indicator/metrics.cpp:42 #, qt-format msgid "%1 text messages sent today" msgstr "" #: indicator/metrics.cpp:43 msgid "No text messages sent today" msgstr "" #: indicator/metrics.cpp:44 #, qt-format msgid "%1 text messages received today" msgstr "" #: indicator/metrics.cpp:45 msgid "No text messages received today" msgstr "" #: indicator/metrics.cpp:46 #, qt-format msgid "%1 calls received today" msgstr "" #: indicator/metrics.cpp:47 msgid "No calls received today" msgstr "" #: indicator/metrics.cpp:48 #, qt-format msgid "%1 calls made today" msgstr "" #: indicator/metrics.cpp:49 indicator/metrics.cpp:51 msgid "No calls made today" msgstr "" #: indicator/metrics.cpp:50 #, qt-format msgid "Spent %1 minutes in calls today" msgstr "" #: indicator/textchannelobserver.cpp:225 msgid "Unlock your sim card and try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:227 msgid "Deactivate flight mode and try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:230 msgid "Try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:236 msgid "The message could not be sent" msgstr "" #: indicator/textchannelobserver.cpp:249 indicator/textchannelobserver.cpp:713 msgid "View message" msgstr "" #: indicator/textchannelobserver.cpp:295 msgid "New Group" msgstr "" #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:302 #, qt-format msgid "You joined group %1 " msgstr "" #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:306 #, qt-format msgid "You joined group %1" msgstr "" #: indicator/textchannelobserver.cpp:309 msgid "You joined a new group" msgstr "" #: indicator/textchannelobserver.cpp:328 msgid "View Group" msgstr "" #: indicator/textchannelobserver.cpp:367 indicator/ussdindicator.cpp:116 msgid "Ok" msgstr "" #: indicator/textchannelobserver.cpp:373 msgid "Save" msgstr "" #: indicator/textchannelobserver.cpp:468 msgid "Emergency Alert" msgstr "" #: indicator/textchannelobserver.cpp:471 msgid "Emergency Alert: Extreme" msgstr "" #: indicator/textchannelobserver.cpp:474 msgid "Emergency Alert: Severe" msgstr "" #: indicator/textchannelobserver.cpp:477 msgid "Emergency Alert: Notice" msgstr "" #: indicator/textchannelobserver.cpp:482 msgid "AMBER Alert" msgstr "" #: indicator/textchannelobserver.cpp:485 msgid "Alert" msgstr "" #: indicator/textchannelobserver.cpp:531 msgid "Show alert" msgstr "" #: indicator/textchannelobserver.cpp:604 #, qt-format msgid "Attachment: %1 image" msgid_plural "Attachments: %1 images" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:606 #, qt-format msgid "Attachment: %1 video" msgid_plural "Attachments: %1 videos" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:608 #, qt-format msgid "Attachment: %1 contact" msgid_plural "Attachments: %1 contacts" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:610 #, qt-format msgid "Attachment: %1 audio clip" msgid_plural "Attachments: %1 audio clips" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:612 #, qt-format msgid "Attachment: %1 file" msgid_plural "Attachments: %1 files" msgstr[0] "" msgstr[1] "" #. TRANSLATORS : message displayed when any error occurred while receiving a MMS (case when cellular-data is off, or any downloading issue). Notify that there was a message, the user can find more about it in the messaging-app. #: indicator/textchannelobserver.cpp:615 msgid "New MMS message" msgstr "" #. TRANSLATORS : %1 is the recipient name #: indicator/textchannelobserver.cpp:679 indicator/textchannelobserver.cpp:683 #, qt-format msgid "Message to group from %1" msgstr "" #: indicator/textchannelobserver.cpp:749 #, qt-format msgid "Message from %1" msgstr "" #: indicator/textchannelobserver.cpp:910 msgid "Please, select a SIM card:" msgstr "" #: indicator/ussdindicator.cpp:119 msgid "Reply" msgstr "" #: indicator/ussdindicator.cpp:142 #, fuzzy msgid "Cancel" msgstr "Cancel" #: libtelephonyservice/callnotification.cpp:53 msgid "Conf call on hold" msgstr "" #: libtelephonyservice/callnotification.cpp:53 #, qt-format msgid "%1 call on hold" msgstr "" #: libtelephonyservice/callnotification.cpp:56 msgid "Conf call ended" msgstr "" #: libtelephonyservice/callnotification.cpp:56 #, qt-format msgid "%1 call ended" msgstr "" #: libtelephonyservice/callnotification.cpp:59 #, qt-format msgid "%1 call declined" msgstr "" #: libtelephonyservice/contactwatcher.cpp:157 msgid "Private Number" msgstr "" #: libtelephonyservice/contactwatcher.cpp:159 msgid "Unknown Number" msgstr "" telephony-service-0.5.3/po/frp.po000066400000000000000000000211621455543255600167510ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-12-16 17:03+0100\n" "PO-Revision-Date: 2023-01-05 11:07+0000\n" "Last-Translator: Anonymous \n" "Language-Team: Franco-Provençal \n" "Language: frp\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n > 1;\n" "X-Generator: Weblate 4.15.1-dev\n" #: indicator/telephony-service-call.desktop.in:4 msgid "Phone Calls" msgstr "" #: indicator/telephony-service-sms.desktop.in:4 msgid "SMS" msgstr "" #: approver/approver.cpp:66 msgid "Unknown caller" msgstr "" #: approver/approver.cpp:94 msgid "I'm busy at the moment. I'll call later." msgstr "" #: approver/approver.cpp:95 msgid "I'm running late, on my way now." msgstr "" #: approver/approver.cpp:96 msgid "Please call me back later." msgstr "" #: approver/approver.cpp:457 #, qt-format msgid "On [%1]" msgstr "" #: approver/approver.cpp:461 indicator/messagingmenu.cpp:414 msgid "Private number" msgstr "" #: approver/approver.cpp:464 indicator/messagingmenu.cpp:244 #: indicator/messagingmenu.cpp:418 indicator/textchannelobserver.cpp:640 msgid "Unknown number" msgstr "" #: approver/approver.cpp:470 approver/approver.cpp:485 msgid "Caller number is not available" msgstr "" #: approver/approver.cpp:476 msgid "Calling from private number" msgstr "" #: approver/approver.cpp:479 msgid "Calling from unknown number" msgstr "" #: approver/approver.cpp:482 #, qt-format msgid "Calling from %1" msgstr "" #: approver/approver.cpp:529 msgid "Hold + Answer" msgstr "" #: approver/approver.cpp:530 msgid "Accept" msgstr "" #: approver/approver.cpp:543 msgid "End + Answer" msgstr "" #: approver/approver.cpp:552 msgid "Decline" msgstr "" #: approver/approver.cpp:560 msgid "Message & decline" msgstr "" #: approver/main.cpp:46 msgid "Telephony Service Approver" msgstr "" #: indicator/authhandler.cpp:72 msgid "Authentication failed. Do you want to review your credentials?" msgstr "" #: indicator/authhandler.cpp:91 msgid "Yes" msgstr "" #: indicator/authhandler.cpp:94 msgid "No" msgstr "" #: indicator/displaynamesettings.cpp:35 #, qt-format msgid "SIM %1" msgstr "" #: indicator/main.cpp:53 msgid "Telephony Service Indicator" msgstr "" #: indicator/messagingmenu.cpp:83 indicator/messagingmenu.cpp:87 msgid "Telephony Service" msgstr "" #: indicator/messagingmenu.cpp:151 indicator/messagingmenu.cpp:293 #: indicator/messagingmenu.cpp:360 msgid "Send" msgstr "" #. TRANSLATORS : %1 is the group name and %2 is the recipient name #: indicator/messagingmenu.cpp:262 indicator/textchannelobserver.cpp:671 #: indicator/textchannelobserver.cpp:675 #, qt-format msgid "Message to %1 from %2" msgstr "" #. TRANSLATORS : %1 is the recipient name #: indicator/messagingmenu.cpp:265 indicator/messagingmenu.cpp:269 #, qt-format msgid "Message to the group from %1" msgstr "" #: indicator/messagingmenu.cpp:345 msgid "Call back" msgstr "" #: indicator/messagingmenu.cpp:350 msgid "Missed your call — can you call me now?" msgstr "" #: indicator/messagingmenu.cpp:351 msgid "Running late. On my way." msgstr "" #: indicator/messagingmenu.cpp:352 msgid "Busy at the moment. Will call you later." msgstr "" #: indicator/messagingmenu.cpp:353 msgid "I am 20 minutes late." msgstr "" #: indicator/messagingmenu.cpp:354 msgid "Still busy. Will call you later." msgstr "" #: indicator/messagingmenu.cpp:409 #, qt-format msgid "%1 missed call" msgid_plural "%1 missed calls" msgstr[0] "" msgstr[1] "" #: indicator/messagingmenu.cpp:492 msgid "Voicemail messages" msgstr "" #: indicator/messagingmenu.cpp:495 #, qt-format msgid "%1 voicemail message" msgid_plural "%1 voicemail messages" msgstr[0] "" msgstr[1] "" #: indicator/messagingmenu.cpp:500 msgid "Voicemail" msgstr "" #: indicator/metrics.cpp:42 #, qt-format msgid "%1 text messages sent today" msgstr "" #: indicator/metrics.cpp:43 msgid "No text messages sent today" msgstr "" #: indicator/metrics.cpp:44 #, qt-format msgid "%1 text messages received today" msgstr "" #: indicator/metrics.cpp:45 msgid "No text messages received today" msgstr "" #: indicator/metrics.cpp:46 #, qt-format msgid "%1 calls received today" msgstr "" #: indicator/metrics.cpp:47 msgid "No calls received today" msgstr "" #: indicator/metrics.cpp:48 #, qt-format msgid "%1 calls made today" msgstr "" #: indicator/metrics.cpp:49 indicator/metrics.cpp:51 msgid "No calls made today" msgstr "" #: indicator/metrics.cpp:50 #, qt-format msgid "Spent %1 minutes in calls today" msgstr "" #: indicator/textchannelobserver.cpp:225 msgid "Unlock your sim card and try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:227 msgid "Deactivate flight mode and try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:230 msgid "Try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:236 msgid "The message could not be sent" msgstr "" #: indicator/textchannelobserver.cpp:249 indicator/textchannelobserver.cpp:713 msgid "View message" msgstr "" #: indicator/textchannelobserver.cpp:295 msgid "New Group" msgstr "" #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:302 #, qt-format msgid "You joined group %1 " msgstr "" #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:306 #, qt-format msgid "You joined group %1" msgstr "" #: indicator/textchannelobserver.cpp:309 msgid "You joined a new group" msgstr "" #: indicator/textchannelobserver.cpp:328 msgid "View Group" msgstr "" #: indicator/textchannelobserver.cpp:367 indicator/ussdindicator.cpp:116 msgid "Ok" msgstr "" #: indicator/textchannelobserver.cpp:373 msgid "Save" msgstr "" #: indicator/textchannelobserver.cpp:468 msgid "Emergency Alert" msgstr "" #: indicator/textchannelobserver.cpp:471 msgid "Emergency Alert: Extreme" msgstr "" #: indicator/textchannelobserver.cpp:474 msgid "Emergency Alert: Severe" msgstr "" #: indicator/textchannelobserver.cpp:477 msgid "Emergency Alert: Notice" msgstr "" #: indicator/textchannelobserver.cpp:482 msgid "AMBER Alert" msgstr "" #: indicator/textchannelobserver.cpp:485 msgid "Alert" msgstr "" #: indicator/textchannelobserver.cpp:531 msgid "Show alert" msgstr "" #: indicator/textchannelobserver.cpp:604 #, qt-format msgid "Attachment: %1 image" msgid_plural "Attachments: %1 images" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:606 #, qt-format msgid "Attachment: %1 video" msgid_plural "Attachments: %1 videos" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:608 #, qt-format msgid "Attachment: %1 contact" msgid_plural "Attachments: %1 contacts" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:610 #, qt-format msgid "Attachment: %1 audio clip" msgid_plural "Attachments: %1 audio clips" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:612 #, qt-format msgid "Attachment: %1 file" msgid_plural "Attachments: %1 files" msgstr[0] "" msgstr[1] "" #. TRANSLATORS : message displayed when any error occurred while receiving a MMS (case when cellular-data is off, or any downloading issue). Notify that there was a message, the user can find more about it in the messaging-app. #: indicator/textchannelobserver.cpp:615 msgid "New MMS message" msgstr "" #. TRANSLATORS : %1 is the recipient name #: indicator/textchannelobserver.cpp:679 indicator/textchannelobserver.cpp:683 #, qt-format msgid "Message to group from %1" msgstr "" #: indicator/textchannelobserver.cpp:749 #, qt-format msgid "Message from %1" msgstr "" #: indicator/textchannelobserver.cpp:910 msgid "Please, select a SIM card:" msgstr "" #: indicator/ussdindicator.cpp:119 msgid "Reply" msgstr "" #: indicator/ussdindicator.cpp:142 #, fuzzy msgid "Cancel" msgstr "Cancel" #: libtelephonyservice/callnotification.cpp:53 msgid "Conf call on hold" msgstr "" #: libtelephonyservice/callnotification.cpp:53 #, qt-format msgid "%1 call on hold" msgstr "" #: libtelephonyservice/callnotification.cpp:56 msgid "Conf call ended" msgstr "" #: libtelephonyservice/callnotification.cpp:56 #, qt-format msgid "%1 call ended" msgstr "" #: libtelephonyservice/callnotification.cpp:59 #, qt-format msgid "%1 call declined" msgstr "" #: libtelephonyservice/contactwatcher.cpp:157 msgid "Private Number" msgstr "" #: libtelephonyservice/contactwatcher.cpp:159 msgid "Unknown Number" msgstr "" telephony-service-0.5.3/po/fur.po000066400000000000000000000211521455543255600167550ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-12-16 17:03+0100\n" "PO-Revision-Date: 2023-01-05 11:07+0000\n" "Last-Translator: Anonymous \n" "Language-Team: Friulian \n" "Language: fur\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Generator: Weblate 4.15.1-dev\n" #: indicator/telephony-service-call.desktop.in:4 msgid "Phone Calls" msgstr "" #: indicator/telephony-service-sms.desktop.in:4 msgid "SMS" msgstr "" #: approver/approver.cpp:66 msgid "Unknown caller" msgstr "" #: approver/approver.cpp:94 msgid "I'm busy at the moment. I'll call later." msgstr "" #: approver/approver.cpp:95 msgid "I'm running late, on my way now." msgstr "" #: approver/approver.cpp:96 msgid "Please call me back later." msgstr "" #: approver/approver.cpp:457 #, qt-format msgid "On [%1]" msgstr "" #: approver/approver.cpp:461 indicator/messagingmenu.cpp:414 msgid "Private number" msgstr "" #: approver/approver.cpp:464 indicator/messagingmenu.cpp:244 #: indicator/messagingmenu.cpp:418 indicator/textchannelobserver.cpp:640 msgid "Unknown number" msgstr "" #: approver/approver.cpp:470 approver/approver.cpp:485 msgid "Caller number is not available" msgstr "" #: approver/approver.cpp:476 msgid "Calling from private number" msgstr "" #: approver/approver.cpp:479 msgid "Calling from unknown number" msgstr "" #: approver/approver.cpp:482 #, qt-format msgid "Calling from %1" msgstr "" #: approver/approver.cpp:529 msgid "Hold + Answer" msgstr "" #: approver/approver.cpp:530 msgid "Accept" msgstr "" #: approver/approver.cpp:543 msgid "End + Answer" msgstr "" #: approver/approver.cpp:552 msgid "Decline" msgstr "" #: approver/approver.cpp:560 msgid "Message & decline" msgstr "" #: approver/main.cpp:46 msgid "Telephony Service Approver" msgstr "" #: indicator/authhandler.cpp:72 msgid "Authentication failed. Do you want to review your credentials?" msgstr "" #: indicator/authhandler.cpp:91 msgid "Yes" msgstr "" #: indicator/authhandler.cpp:94 msgid "No" msgstr "" #: indicator/displaynamesettings.cpp:35 #, qt-format msgid "SIM %1" msgstr "" #: indicator/main.cpp:53 msgid "Telephony Service Indicator" msgstr "" #: indicator/messagingmenu.cpp:83 indicator/messagingmenu.cpp:87 msgid "Telephony Service" msgstr "" #: indicator/messagingmenu.cpp:151 indicator/messagingmenu.cpp:293 #: indicator/messagingmenu.cpp:360 msgid "Send" msgstr "" #. TRANSLATORS : %1 is the group name and %2 is the recipient name #: indicator/messagingmenu.cpp:262 indicator/textchannelobserver.cpp:671 #: indicator/textchannelobserver.cpp:675 #, qt-format msgid "Message to %1 from %2" msgstr "" #. TRANSLATORS : %1 is the recipient name #: indicator/messagingmenu.cpp:265 indicator/messagingmenu.cpp:269 #, qt-format msgid "Message to the group from %1" msgstr "" #: indicator/messagingmenu.cpp:345 msgid "Call back" msgstr "" #: indicator/messagingmenu.cpp:350 msgid "Missed your call — can you call me now?" msgstr "" #: indicator/messagingmenu.cpp:351 msgid "Running late. On my way." msgstr "" #: indicator/messagingmenu.cpp:352 msgid "Busy at the moment. Will call you later." msgstr "" #: indicator/messagingmenu.cpp:353 msgid "I am 20 minutes late." msgstr "" #: indicator/messagingmenu.cpp:354 msgid "Still busy. Will call you later." msgstr "" #: indicator/messagingmenu.cpp:409 #, qt-format msgid "%1 missed call" msgid_plural "%1 missed calls" msgstr[0] "" msgstr[1] "" #: indicator/messagingmenu.cpp:492 msgid "Voicemail messages" msgstr "" #: indicator/messagingmenu.cpp:495 #, qt-format msgid "%1 voicemail message" msgid_plural "%1 voicemail messages" msgstr[0] "" msgstr[1] "" #: indicator/messagingmenu.cpp:500 msgid "Voicemail" msgstr "" #: indicator/metrics.cpp:42 #, qt-format msgid "%1 text messages sent today" msgstr "" #: indicator/metrics.cpp:43 msgid "No text messages sent today" msgstr "" #: indicator/metrics.cpp:44 #, qt-format msgid "%1 text messages received today" msgstr "" #: indicator/metrics.cpp:45 msgid "No text messages received today" msgstr "" #: indicator/metrics.cpp:46 #, qt-format msgid "%1 calls received today" msgstr "" #: indicator/metrics.cpp:47 msgid "No calls received today" msgstr "" #: indicator/metrics.cpp:48 #, qt-format msgid "%1 calls made today" msgstr "" #: indicator/metrics.cpp:49 indicator/metrics.cpp:51 msgid "No calls made today" msgstr "" #: indicator/metrics.cpp:50 #, qt-format msgid "Spent %1 minutes in calls today" msgstr "" #: indicator/textchannelobserver.cpp:225 msgid "Unlock your sim card and try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:227 msgid "Deactivate flight mode and try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:230 msgid "Try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:236 msgid "The message could not be sent" msgstr "" #: indicator/textchannelobserver.cpp:249 indicator/textchannelobserver.cpp:713 msgid "View message" msgstr "" #: indicator/textchannelobserver.cpp:295 msgid "New Group" msgstr "" #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:302 #, qt-format msgid "You joined group %1 " msgstr "" #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:306 #, qt-format msgid "You joined group %1" msgstr "" #: indicator/textchannelobserver.cpp:309 msgid "You joined a new group" msgstr "" #: indicator/textchannelobserver.cpp:328 msgid "View Group" msgstr "" #: indicator/textchannelobserver.cpp:367 indicator/ussdindicator.cpp:116 msgid "Ok" msgstr "" #: indicator/textchannelobserver.cpp:373 msgid "Save" msgstr "" #: indicator/textchannelobserver.cpp:468 msgid "Emergency Alert" msgstr "" #: indicator/textchannelobserver.cpp:471 msgid "Emergency Alert: Extreme" msgstr "" #: indicator/textchannelobserver.cpp:474 msgid "Emergency Alert: Severe" msgstr "" #: indicator/textchannelobserver.cpp:477 msgid "Emergency Alert: Notice" msgstr "" #: indicator/textchannelobserver.cpp:482 msgid "AMBER Alert" msgstr "" #: indicator/textchannelobserver.cpp:485 msgid "Alert" msgstr "" #: indicator/textchannelobserver.cpp:531 msgid "Show alert" msgstr "" #: indicator/textchannelobserver.cpp:604 #, qt-format msgid "Attachment: %1 image" msgid_plural "Attachments: %1 images" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:606 #, qt-format msgid "Attachment: %1 video" msgid_plural "Attachments: %1 videos" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:608 #, qt-format msgid "Attachment: %1 contact" msgid_plural "Attachments: %1 contacts" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:610 #, qt-format msgid "Attachment: %1 audio clip" msgid_plural "Attachments: %1 audio clips" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:612 #, qt-format msgid "Attachment: %1 file" msgid_plural "Attachments: %1 files" msgstr[0] "" msgstr[1] "" #. TRANSLATORS : message displayed when any error occurred while receiving a MMS (case when cellular-data is off, or any downloading issue). Notify that there was a message, the user can find more about it in the messaging-app. #: indicator/textchannelobserver.cpp:615 msgid "New MMS message" msgstr "" #. TRANSLATORS : %1 is the recipient name #: indicator/textchannelobserver.cpp:679 indicator/textchannelobserver.cpp:683 #, qt-format msgid "Message to group from %1" msgstr "" #: indicator/textchannelobserver.cpp:749 #, qt-format msgid "Message from %1" msgstr "" #: indicator/textchannelobserver.cpp:910 msgid "Please, select a SIM card:" msgstr "" #: indicator/ussdindicator.cpp:119 msgid "Reply" msgstr "" #: indicator/ussdindicator.cpp:142 #, fuzzy msgid "Cancel" msgstr "Cancel" #: libtelephonyservice/callnotification.cpp:53 msgid "Conf call on hold" msgstr "" #: libtelephonyservice/callnotification.cpp:53 #, qt-format msgid "%1 call on hold" msgstr "" #: libtelephonyservice/callnotification.cpp:56 msgid "Conf call ended" msgstr "" #: libtelephonyservice/callnotification.cpp:56 #, qt-format msgid "%1 call ended" msgstr "" #: libtelephonyservice/callnotification.cpp:59 #, qt-format msgid "%1 call declined" msgstr "" #: libtelephonyservice/contactwatcher.cpp:157 msgid "Private Number" msgstr "" #: libtelephonyservice/contactwatcher.cpp:159 msgid "Unknown Number" msgstr "" telephony-service-0.5.3/po/fy.po000066400000000000000000000207371455543255600166070ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR Canonical Ltd. # This file is distributed under the same license as the telephony-service package. # FIRST AUTHOR , YEAR. # msgid "" msgstr "" "Project-Id-Version: telephony-service\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-12-16 17:03+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: Automatically generated\n" "Language-Team: none\n" "Language: fy\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" #: indicator/telephony-service-call.desktop.in:4 msgid "Phone Calls" msgstr "" #: indicator/telephony-service-sms.desktop.in:4 msgid "SMS" msgstr "" #: approver/approver.cpp:66 msgid "Unknown caller" msgstr "" #: approver/approver.cpp:94 msgid "I'm busy at the moment. I'll call later." msgstr "" #: approver/approver.cpp:95 msgid "I'm running late, on my way now." msgstr "" #: approver/approver.cpp:96 msgid "Please call me back later." msgstr "" #: approver/approver.cpp:457 #, qt-format msgid "On [%1]" msgstr "" #: approver/approver.cpp:461 indicator/messagingmenu.cpp:414 msgid "Private number" msgstr "" #: approver/approver.cpp:464 indicator/messagingmenu.cpp:244 #: indicator/messagingmenu.cpp:418 indicator/textchannelobserver.cpp:640 msgid "Unknown number" msgstr "" #: approver/approver.cpp:470 approver/approver.cpp:485 msgid "Caller number is not available" msgstr "" #: approver/approver.cpp:476 msgid "Calling from private number" msgstr "" #: approver/approver.cpp:479 msgid "Calling from unknown number" msgstr "" #: approver/approver.cpp:482 #, qt-format msgid "Calling from %1" msgstr "" #: approver/approver.cpp:529 msgid "Hold + Answer" msgstr "" #: approver/approver.cpp:530 msgid "Accept" msgstr "" #: approver/approver.cpp:543 msgid "End + Answer" msgstr "" #: approver/approver.cpp:552 msgid "Decline" msgstr "" #: approver/approver.cpp:560 msgid "Message & decline" msgstr "" #: approver/main.cpp:46 msgid "Telephony Service Approver" msgstr "" #: indicator/authhandler.cpp:72 msgid "Authentication failed. Do you want to review your credentials?" msgstr "" #: indicator/authhandler.cpp:91 msgid "Yes" msgstr "" #: indicator/authhandler.cpp:94 msgid "No" msgstr "" #: indicator/displaynamesettings.cpp:35 #, qt-format msgid "SIM %1" msgstr "" #: indicator/main.cpp:53 msgid "Telephony Service Indicator" msgstr "" #: indicator/messagingmenu.cpp:83 indicator/messagingmenu.cpp:87 msgid "Telephony Service" msgstr "" #: indicator/messagingmenu.cpp:151 indicator/messagingmenu.cpp:293 #: indicator/messagingmenu.cpp:360 msgid "Send" msgstr "" #. TRANSLATORS : %1 is the group name and %2 is the recipient name #: indicator/messagingmenu.cpp:262 indicator/textchannelobserver.cpp:671 #: indicator/textchannelobserver.cpp:675 #, qt-format msgid "Message to %1 from %2" msgstr "" #. TRANSLATORS : %1 is the recipient name #: indicator/messagingmenu.cpp:265 indicator/messagingmenu.cpp:269 #, qt-format msgid "Message to the group from %1" msgstr "" #: indicator/messagingmenu.cpp:345 msgid "Call back" msgstr "" #: indicator/messagingmenu.cpp:350 msgid "Missed your call — can you call me now?" msgstr "" #: indicator/messagingmenu.cpp:351 msgid "Running late. On my way." msgstr "" #: indicator/messagingmenu.cpp:352 msgid "Busy at the moment. Will call you later." msgstr "" #: indicator/messagingmenu.cpp:353 msgid "I am 20 minutes late." msgstr "" #: indicator/messagingmenu.cpp:354 msgid "Still busy. Will call you later." msgstr "" #: indicator/messagingmenu.cpp:409 #, qt-format msgid "%1 missed call" msgid_plural "%1 missed calls" msgstr[0] "" msgstr[1] "" #: indicator/messagingmenu.cpp:492 msgid "Voicemail messages" msgstr "" #: indicator/messagingmenu.cpp:495 #, qt-format msgid "%1 voicemail message" msgid_plural "%1 voicemail messages" msgstr[0] "" msgstr[1] "" #: indicator/messagingmenu.cpp:500 msgid "Voicemail" msgstr "" #: indicator/metrics.cpp:42 #, qt-format msgid "%1 text messages sent today" msgstr "" #: indicator/metrics.cpp:43 msgid "No text messages sent today" msgstr "" #: indicator/metrics.cpp:44 #, qt-format msgid "%1 text messages received today" msgstr "" #: indicator/metrics.cpp:45 msgid "No text messages received today" msgstr "" #: indicator/metrics.cpp:46 #, qt-format msgid "%1 calls received today" msgstr "" #: indicator/metrics.cpp:47 msgid "No calls received today" msgstr "" #: indicator/metrics.cpp:48 #, qt-format msgid "%1 calls made today" msgstr "" #: indicator/metrics.cpp:49 indicator/metrics.cpp:51 msgid "No calls made today" msgstr "" #: indicator/metrics.cpp:50 #, qt-format msgid "Spent %1 minutes in calls today" msgstr "" #: indicator/textchannelobserver.cpp:225 msgid "Unlock your sim card and try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:227 msgid "Deactivate flight mode and try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:230 msgid "Try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:236 msgid "The message could not be sent" msgstr "" #: indicator/textchannelobserver.cpp:249 indicator/textchannelobserver.cpp:713 msgid "View message" msgstr "" #: indicator/textchannelobserver.cpp:295 msgid "New Group" msgstr "" #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:302 #, qt-format msgid "You joined group %1 " msgstr "" #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:306 #, qt-format msgid "You joined group %1" msgstr "" #: indicator/textchannelobserver.cpp:309 msgid "You joined a new group" msgstr "" #: indicator/textchannelobserver.cpp:328 msgid "View Group" msgstr "" #: indicator/textchannelobserver.cpp:367 indicator/ussdindicator.cpp:116 msgid "Ok" msgstr "" #: indicator/textchannelobserver.cpp:373 msgid "Save" msgstr "" #: indicator/textchannelobserver.cpp:468 msgid "Emergency Alert" msgstr "" #: indicator/textchannelobserver.cpp:471 msgid "Emergency Alert: Extreme" msgstr "" #: indicator/textchannelobserver.cpp:474 msgid "Emergency Alert: Severe" msgstr "" #: indicator/textchannelobserver.cpp:477 msgid "Emergency Alert: Notice" msgstr "" #: indicator/textchannelobserver.cpp:482 msgid "AMBER Alert" msgstr "" #: indicator/textchannelobserver.cpp:485 msgid "Alert" msgstr "" #: indicator/textchannelobserver.cpp:531 msgid "Show alert" msgstr "" #: indicator/textchannelobserver.cpp:604 #, qt-format msgid "Attachment: %1 image" msgid_plural "Attachments: %1 images" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:606 #, qt-format msgid "Attachment: %1 video" msgid_plural "Attachments: %1 videos" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:608 #, qt-format msgid "Attachment: %1 contact" msgid_plural "Attachments: %1 contacts" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:610 #, qt-format msgid "Attachment: %1 audio clip" msgid_plural "Attachments: %1 audio clips" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:612 #, qt-format msgid "Attachment: %1 file" msgid_plural "Attachments: %1 files" msgstr[0] "" msgstr[1] "" #. TRANSLATORS : message displayed when any error occurred while receiving a MMS (case when cellular-data is off, or any downloading issue). Notify that there was a message, the user can find more about it in the messaging-app. #: indicator/textchannelobserver.cpp:615 msgid "New MMS message" msgstr "" #. TRANSLATORS : %1 is the recipient name #: indicator/textchannelobserver.cpp:679 indicator/textchannelobserver.cpp:683 #, qt-format msgid "Message to group from %1" msgstr "" #: indicator/textchannelobserver.cpp:749 #, qt-format msgid "Message from %1" msgstr "" #: indicator/textchannelobserver.cpp:910 msgid "Please, select a SIM card:" msgstr "" #: indicator/ussdindicator.cpp:119 msgid "Reply" msgstr "" #: indicator/ussdindicator.cpp:142 msgid "Cancel" msgstr "" #: libtelephonyservice/callnotification.cpp:53 msgid "Conf call on hold" msgstr "" #: libtelephonyservice/callnotification.cpp:53 #, qt-format msgid "%1 call on hold" msgstr "" #: libtelephonyservice/callnotification.cpp:56 msgid "Conf call ended" msgstr "" #: libtelephonyservice/callnotification.cpp:56 #, qt-format msgid "%1 call ended" msgstr "" #: libtelephonyservice/callnotification.cpp:59 #, qt-format msgid "%1 call declined" msgstr "" #: libtelephonyservice/contactwatcher.cpp:157 msgid "Private Number" msgstr "" #: libtelephonyservice/contactwatcher.cpp:159 msgid "Unknown Number" msgstr "" telephony-service-0.5.3/po/ga.po000066400000000000000000000210311455543255600165440ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR Canonical Ltd. # This file is distributed under the same license as the telephony-service package. # FIRST AUTHOR , YEAR. # msgid "" msgstr "" "Project-Id-Version: telephony-service\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-12-16 17:03+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: Automatically generated\n" "Language-Team: none\n" "Language: ga\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=5; plural=n==1 ? 0 : n==2 ? 1 : (n>2 && n<7) ? 2 :" "(n>6 && n<11) ? 3 : 4;\n" #: indicator/telephony-service-call.desktop.in:4 msgid "Phone Calls" msgstr "" #: indicator/telephony-service-sms.desktop.in:4 msgid "SMS" msgstr "" #: approver/approver.cpp:66 msgid "Unknown caller" msgstr "" #: approver/approver.cpp:94 msgid "I'm busy at the moment. I'll call later." msgstr "" #: approver/approver.cpp:95 msgid "I'm running late, on my way now." msgstr "" #: approver/approver.cpp:96 msgid "Please call me back later." msgstr "" #: approver/approver.cpp:457 #, qt-format msgid "On [%1]" msgstr "" #: approver/approver.cpp:461 indicator/messagingmenu.cpp:414 msgid "Private number" msgstr "" #: approver/approver.cpp:464 indicator/messagingmenu.cpp:244 #: indicator/messagingmenu.cpp:418 indicator/textchannelobserver.cpp:640 msgid "Unknown number" msgstr "" #: approver/approver.cpp:470 approver/approver.cpp:485 msgid "Caller number is not available" msgstr "" #: approver/approver.cpp:476 msgid "Calling from private number" msgstr "" #: approver/approver.cpp:479 msgid "Calling from unknown number" msgstr "" #: approver/approver.cpp:482 #, qt-format msgid "Calling from %1" msgstr "" #: approver/approver.cpp:529 msgid "Hold + Answer" msgstr "" #: approver/approver.cpp:530 msgid "Accept" msgstr "" #: approver/approver.cpp:543 msgid "End + Answer" msgstr "" #: approver/approver.cpp:552 msgid "Decline" msgstr "" #: approver/approver.cpp:560 msgid "Message & decline" msgstr "" #: approver/main.cpp:46 msgid "Telephony Service Approver" msgstr "" #: indicator/authhandler.cpp:72 msgid "Authentication failed. Do you want to review your credentials?" msgstr "" #: indicator/authhandler.cpp:91 msgid "Yes" msgstr "" #: indicator/authhandler.cpp:94 msgid "No" msgstr "" #: indicator/displaynamesettings.cpp:35 #, qt-format msgid "SIM %1" msgstr "" #: indicator/main.cpp:53 msgid "Telephony Service Indicator" msgstr "" #: indicator/messagingmenu.cpp:83 indicator/messagingmenu.cpp:87 msgid "Telephony Service" msgstr "" #: indicator/messagingmenu.cpp:151 indicator/messagingmenu.cpp:293 #: indicator/messagingmenu.cpp:360 msgid "Send" msgstr "" #. TRANSLATORS : %1 is the group name and %2 is the recipient name #: indicator/messagingmenu.cpp:262 indicator/textchannelobserver.cpp:671 #: indicator/textchannelobserver.cpp:675 #, qt-format msgid "Message to %1 from %2" msgstr "" #. TRANSLATORS : %1 is the recipient name #: indicator/messagingmenu.cpp:265 indicator/messagingmenu.cpp:269 #, qt-format msgid "Message to the group from %1" msgstr "" #: indicator/messagingmenu.cpp:345 msgid "Call back" msgstr "" #: indicator/messagingmenu.cpp:350 msgid "Missed your call — can you call me now?" msgstr "" #: indicator/messagingmenu.cpp:351 msgid "Running late. On my way." msgstr "" #: indicator/messagingmenu.cpp:352 msgid "Busy at the moment. Will call you later." msgstr "" #: indicator/messagingmenu.cpp:353 msgid "I am 20 minutes late." msgstr "" #: indicator/messagingmenu.cpp:354 msgid "Still busy. Will call you later." msgstr "" #: indicator/messagingmenu.cpp:409 #, qt-format msgid "%1 missed call" msgid_plural "%1 missed calls" msgstr[0] "" msgstr[1] "" #: indicator/messagingmenu.cpp:492 msgid "Voicemail messages" msgstr "" #: indicator/messagingmenu.cpp:495 #, qt-format msgid "%1 voicemail message" msgid_plural "%1 voicemail messages" msgstr[0] "" msgstr[1] "" #: indicator/messagingmenu.cpp:500 msgid "Voicemail" msgstr "" #: indicator/metrics.cpp:42 #, qt-format msgid "%1 text messages sent today" msgstr "" #: indicator/metrics.cpp:43 msgid "No text messages sent today" msgstr "" #: indicator/metrics.cpp:44 #, qt-format msgid "%1 text messages received today" msgstr "" #: indicator/metrics.cpp:45 msgid "No text messages received today" msgstr "" #: indicator/metrics.cpp:46 #, qt-format msgid "%1 calls received today" msgstr "" #: indicator/metrics.cpp:47 msgid "No calls received today" msgstr "" #: indicator/metrics.cpp:48 #, qt-format msgid "%1 calls made today" msgstr "" #: indicator/metrics.cpp:49 indicator/metrics.cpp:51 msgid "No calls made today" msgstr "" #: indicator/metrics.cpp:50 #, qt-format msgid "Spent %1 minutes in calls today" msgstr "" #: indicator/textchannelobserver.cpp:225 msgid "Unlock your sim card and try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:227 msgid "Deactivate flight mode and try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:230 msgid "Try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:236 msgid "The message could not be sent" msgstr "" #: indicator/textchannelobserver.cpp:249 indicator/textchannelobserver.cpp:713 msgid "View message" msgstr "" #: indicator/textchannelobserver.cpp:295 msgid "New Group" msgstr "" #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:302 #, qt-format msgid "You joined group %1 " msgstr "" #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:306 #, qt-format msgid "You joined group %1" msgstr "" #: indicator/textchannelobserver.cpp:309 msgid "You joined a new group" msgstr "" #: indicator/textchannelobserver.cpp:328 msgid "View Group" msgstr "" #: indicator/textchannelobserver.cpp:367 indicator/ussdindicator.cpp:116 msgid "Ok" msgstr "" #: indicator/textchannelobserver.cpp:373 msgid "Save" msgstr "" #: indicator/textchannelobserver.cpp:468 msgid "Emergency Alert" msgstr "" #: indicator/textchannelobserver.cpp:471 msgid "Emergency Alert: Extreme" msgstr "" #: indicator/textchannelobserver.cpp:474 msgid "Emergency Alert: Severe" msgstr "" #: indicator/textchannelobserver.cpp:477 msgid "Emergency Alert: Notice" msgstr "" #: indicator/textchannelobserver.cpp:482 msgid "AMBER Alert" msgstr "" #: indicator/textchannelobserver.cpp:485 msgid "Alert" msgstr "" #: indicator/textchannelobserver.cpp:531 msgid "Show alert" msgstr "" #: indicator/textchannelobserver.cpp:604 #, qt-format msgid "Attachment: %1 image" msgid_plural "Attachments: %1 images" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:606 #, qt-format msgid "Attachment: %1 video" msgid_plural "Attachments: %1 videos" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:608 #, qt-format msgid "Attachment: %1 contact" msgid_plural "Attachments: %1 contacts" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:610 #, qt-format msgid "Attachment: %1 audio clip" msgid_plural "Attachments: %1 audio clips" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:612 #, qt-format msgid "Attachment: %1 file" msgid_plural "Attachments: %1 files" msgstr[0] "" msgstr[1] "" #. TRANSLATORS : message displayed when any error occurred while receiving a MMS (case when cellular-data is off, or any downloading issue). Notify that there was a message, the user can find more about it in the messaging-app. #: indicator/textchannelobserver.cpp:615 msgid "New MMS message" msgstr "" #. TRANSLATORS : %1 is the recipient name #: indicator/textchannelobserver.cpp:679 indicator/textchannelobserver.cpp:683 #, qt-format msgid "Message to group from %1" msgstr "" #: indicator/textchannelobserver.cpp:749 #, qt-format msgid "Message from %1" msgstr "" #: indicator/textchannelobserver.cpp:910 msgid "Please, select a SIM card:" msgstr "" #: indicator/ussdindicator.cpp:119 msgid "Reply" msgstr "" #: indicator/ussdindicator.cpp:142 msgid "Cancel" msgstr "" #: libtelephonyservice/callnotification.cpp:53 msgid "Conf call on hold" msgstr "" #: libtelephonyservice/callnotification.cpp:53 #, qt-format msgid "%1 call on hold" msgstr "" #: libtelephonyservice/callnotification.cpp:56 msgid "Conf call ended" msgstr "" #: libtelephonyservice/callnotification.cpp:56 #, qt-format msgid "%1 call ended" msgstr "" #: libtelephonyservice/callnotification.cpp:59 #, qt-format msgid "%1 call declined" msgstr "" #: libtelephonyservice/contactwatcher.cpp:157 msgid "Private Number" msgstr "" #: libtelephonyservice/contactwatcher.cpp:159 msgid "Unknown Number" msgstr "" telephony-service-0.5.3/po/gd.po000066400000000000000000000303301455543255600165510ustar00rootroot00000000000000# Gaelic; Scottish translation for telephony-service # Copyright (c) 2014 Rosetta Contributors and Canonical Ltd 2014 # This file is distributed under the same license as the telephony-service package. # FIRST AUTHOR , 2014. # GunChleoc , 2014, 2016. msgid "" msgstr "" "Project-Id-Version: telephony-service\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-12-16 17:03+0100\n" "PO-Revision-Date: 2015-02-27 00:54+0000\n" "Last-Translator: Akerbeltz \n" "Language-Team: Fòram na Gàidhlig\n" "Language: gd\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=4; plural=(n==1 || n==11) ? 0 : (n==2 || n==12) ? 1 : " "(n > 2 && n < 20) ? 2 : 3;\n" "X-Launchpad-Export-Date: 2017-01-04 06:02+0000\n" "X-Generator: Launchpad (build 18298)\n" #: indicator/telephony-service-call.desktop.in:4 msgid "Phone Calls" msgstr "Gairmean fòn" #: indicator/telephony-service-sms.desktop.in:4 msgid "SMS" msgstr "SMS" #: approver/approver.cpp:66 msgid "Unknown caller" msgstr "Chan eil fhios cò tha fònadh" #: approver/approver.cpp:94 msgid "I'm busy at the moment. I'll call later." msgstr "Tha mi trang an-dràsta fhèin. Bruidhnidh mi riut an ceann greis." #: approver/approver.cpp:95 msgid "I'm running late, on my way now." msgstr "Tha mi fadalach ach air an t-slighe a-nis." #: approver/approver.cpp:96 msgid "Please call me back later." msgstr "Saoil an cuir thu fòn air ais thugam an ceann greis?" #: approver/approver.cpp:457 #, qt-format msgid "On [%1]" msgstr "Air [%1]" #: approver/approver.cpp:461 indicator/messagingmenu.cpp:414 msgid "Private number" msgstr "Àireamh phrìobhaideach" #: approver/approver.cpp:464 indicator/messagingmenu.cpp:244 #: indicator/messagingmenu.cpp:418 indicator/textchannelobserver.cpp:640 msgid "Unknown number" msgstr "Àireamh nach aithne dhuinn" #: approver/approver.cpp:470 approver/approver.cpp:485 msgid "Caller number is not available" msgstr "Chan eil fhios dè àireamh a tha aig an neach eile" #: approver/approver.cpp:476 msgid "Calling from private number" msgstr "Fòn o àireamh phrìobhaideach" #: approver/approver.cpp:479 msgid "Calling from unknown number" msgstr "Fòn o àireamh nach aithne dhuinn" #: approver/approver.cpp:482 #, qt-format msgid "Calling from %1" msgstr "Fòn o %1" #: approver/approver.cpp:529 msgid "Hold + Answer" msgstr "Cum ⁊ freagair" #: approver/approver.cpp:530 msgid "Accept" msgstr "Freagair" #: approver/approver.cpp:543 msgid "End + Answer" msgstr "Crìochnaich + Freagair" #: approver/approver.cpp:552 msgid "Decline" msgstr "Diùlt" #: approver/approver.cpp:560 msgid "Message & decline" msgstr "Teachdaireachd ⁊ diùlt" #: approver/main.cpp:46 msgid "Telephony Service Approver" msgstr "Aontaichear na seirbheise fòn" #: indicator/authhandler.cpp:72 msgid "Authentication failed. Do you want to review your credentials?" msgstr "" "Dh’fhàillig an dearbhadh. A bheil thu airson sùil a thoirt air an ainm is " "facal-faire?" #: indicator/authhandler.cpp:91 msgid "Yes" msgstr "Tha" #: indicator/authhandler.cpp:94 msgid "No" msgstr "Chan eil" #: indicator/displaynamesettings.cpp:35 #, qt-format msgid "SIM %1" msgstr "SIM %1" #: indicator/main.cpp:53 msgid "Telephony Service Indicator" msgstr "Taisbeanair na seirbheise fòn" #: indicator/messagingmenu.cpp:83 indicator/messagingmenu.cpp:87 msgid "Telephony Service" msgstr "Seirbheis fòn" #: indicator/messagingmenu.cpp:151 indicator/messagingmenu.cpp:293 #: indicator/messagingmenu.cpp:360 msgid "Send" msgstr "Cuir" #. TRANSLATORS : %1 is the group name and %2 is the recipient name #: indicator/messagingmenu.cpp:262 indicator/textchannelobserver.cpp:671 #: indicator/textchannelobserver.cpp:675 #, qt-format msgid "Message to %1 from %2" msgstr "Teachdaireachd gu %1 o %2" #. TRANSLATORS : %1 is the recipient name #: indicator/messagingmenu.cpp:265 indicator/messagingmenu.cpp:269 #, fuzzy, qt-format #| msgid "Message to group from %1" msgid "Message to the group from %1" msgstr "Teachdaireachd gu buidheann o %1" #: indicator/messagingmenu.cpp:345 msgid "Call back" msgstr "Fònaig air ais" #: indicator/messagingmenu.cpp:350 #, fuzzy #| msgid "I missed your call - can you call me now?" msgid "Missed your call — can you call me now?" msgstr "Chaill mi do ghairm - an cuir thu fòn air ais thugam an-dràsta?" #: indicator/messagingmenu.cpp:351 #, fuzzy #| msgid "I'm running late. I'm on my way." msgid "Running late. On my way." msgstr "Tha mi fadalach ach air an t-slighe." #: indicator/messagingmenu.cpp:352 #, fuzzy #| msgid "I'm busy at the moment. I'll call you later." msgid "Busy at the moment. Will call you later." msgstr "Tha mi trang an-dràsta fhèin. Cuiridh mi fòn air ais thugad." #: indicator/messagingmenu.cpp:353 #, fuzzy #| msgid "I'll be 20 minutes late." msgid "I am 20 minutes late." msgstr "Bidh mi fadalach 20 mionaidean" #: indicator/messagingmenu.cpp:354 #, fuzzy #| msgid "Sorry, I'm still busy. I'll call you later." msgid "Still busy. Will call you later." msgstr "" "Tha mi duilich, tha mi trang fhathast. Cuiridh mi fòn air ais thugad as a " "dhèidh seo." #: indicator/messagingmenu.cpp:409 #, qt-format msgid "%1 missed call" msgid_plural "%1 missed calls" msgstr[0] "Chaill thu %1 ghairm" msgstr[1] "Chaill thu %1 ghairm" msgstr[2] "Chaill thu %1 gairmean" msgstr[3] "Chaill thu %1 gairm" #: indicator/messagingmenu.cpp:492 msgid "Voicemail messages" msgstr "Teachdaireachdan gutha" #: indicator/messagingmenu.cpp:495 #, qt-format msgid "%1 voicemail message" msgid_plural "%1 voicemail messages" msgstr[0] "%1 teachdaireachd gutha" msgstr[1] "%1 theachdaireachd gutha" msgstr[2] "%1 teachdaireachd angutha" msgstr[3] "%1 teachdaireachd gutha" #: indicator/messagingmenu.cpp:500 msgid "Voicemail" msgstr "Post-gutha" #: indicator/metrics.cpp:42 #, qt-format msgid "%1 text messages sent today" msgstr "Chaidh %1 teachdaireachdan a chur an-diugh" #: indicator/metrics.cpp:43 msgid "No text messages sent today" msgstr "Cha do chuireadh teachdaireachd an-diugh" #: indicator/metrics.cpp:44 #, qt-format msgid "%1 text messages received today" msgstr "Chaidh %1 teachdaireachdan fhaighinn an-diugh" #: indicator/metrics.cpp:45 msgid "No text messages received today" msgstr "Cha d' fhuaireadh teachdaireachd an-diugh" #: indicator/metrics.cpp:46 #, qt-format msgid "%1 calls received today" msgstr "Chaidh %1 gairmean fhaighinn an-diugh" #: indicator/metrics.cpp:47 msgid "No calls received today" msgstr "Cha d' fhuaireadh gairm an-diugh" #: indicator/metrics.cpp:48 #, qt-format msgid "%1 calls made today" msgstr "Chaidh %1 gairmean a chur an-diugh" #: indicator/metrics.cpp:49 indicator/metrics.cpp:51 msgid "No calls made today" msgstr "Cha do chuireadh gairm an-diugh" #: indicator/metrics.cpp:50 #, qt-format msgid "Spent %1 minutes in calls today" msgstr "Chuireadh seachad %1 mionaidean ann an gairmean an-diugh" #: indicator/textchannelobserver.cpp:225 msgid "Unlock your sim card and try again from the messaging application." msgstr "" "Thoir a' ghlas far na cairt SIM agad is feuch ris a-rithist o aplacaid nan " "teachdaireachdan." #: indicator/textchannelobserver.cpp:227 msgid "Deactivate flight mode and try again from the messaging application." msgstr "" "Cuir am modh itealain à comas is feuch ris a-rithist o aplacaid nan " "teachdaireachdan." #: indicator/textchannelobserver.cpp:230 msgid "Try again from the messaging application." msgstr "Feuch ris a-rithist o aplacaid nan teachdaireachdan." #: indicator/textchannelobserver.cpp:236 msgid "The message could not be sent" msgstr "Cha b' urrainn dhuinn an teachdaireachd a chur" #: indicator/textchannelobserver.cpp:249 indicator/textchannelobserver.cpp:713 msgid "View message" msgstr "Seall an teachdaireachd" #: indicator/textchannelobserver.cpp:295 msgid "New Group" msgstr "Buidheann ùr" #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:302 #, qt-format msgid "You joined group %1 " msgstr "Tha thu 'nad bhall sa bhuidheann %1 a-nis " #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:306 #, qt-format msgid "You joined group %1" msgstr "Tha thu 'nad bhall sa bhuidheann %1 a-nis" #: indicator/textchannelobserver.cpp:309 msgid "You joined a new group" msgstr "Tha thu air dol an sàs ann am buidheann ùr" #: indicator/textchannelobserver.cpp:328 msgid "View Group" msgstr "Seall am buidheann" #: indicator/textchannelobserver.cpp:367 indicator/ussdindicator.cpp:116 msgid "Ok" msgstr "Ceart ma-thà" #: indicator/textchannelobserver.cpp:373 msgid "Save" msgstr "Sàbhail" #: indicator/textchannelobserver.cpp:468 msgid "Emergency Alert" msgstr "" #: indicator/textchannelobserver.cpp:471 msgid "Emergency Alert: Extreme" msgstr "" #: indicator/textchannelobserver.cpp:474 msgid "Emergency Alert: Severe" msgstr "" #: indicator/textchannelobserver.cpp:477 msgid "Emergency Alert: Notice" msgstr "" #: indicator/textchannelobserver.cpp:482 msgid "AMBER Alert" msgstr "" #: indicator/textchannelobserver.cpp:485 msgid "Alert" msgstr "" #: indicator/textchannelobserver.cpp:531 msgid "Show alert" msgstr "" #: indicator/textchannelobserver.cpp:604 #, qt-format msgid "Attachment: %1 image" msgid_plural "Attachments: %1 images" msgstr[0] "Ceanglachan: %1 dealbh" msgstr[1] "Ceanglachain: %1 dhealbh" msgstr[2] "Ceanglachain: %1 dealbhan" msgstr[3] "Ceanglachain: %1 dealbh" #: indicator/textchannelobserver.cpp:606 #, qt-format msgid "Attachment: %1 video" msgid_plural "Attachments: %1 videos" msgstr[0] "Ceanglachan: %1 video" msgstr[1] "Ceanglachain: %1 video" msgstr[2] "Ceanglachain: %1 videothan" msgstr[3] "Ceanglachain: %1 video" #: indicator/textchannelobserver.cpp:608 #, qt-format msgid "Attachment: %1 contact" msgid_plural "Attachments: %1 contacts" msgstr[0] "Ceanglachan: %1 neach-aithne" msgstr[1] "Ceanglachain: %1 luchd-aithne" msgstr[2] "Ceanglachain: %1 luchd-aithne" msgstr[3] "Ceanglachain: %1 luchd-aithne" #: indicator/textchannelobserver.cpp:610 #, qt-format msgid "Attachment: %1 audio clip" msgid_plural "Attachments: %1 audio clips" msgstr[0] "Ceanglachan: %1 chliop fuaime" msgstr[1] "Ceanglachain: %1 chliop fuaime" msgstr[2] "Ceanglachain: %1 cliopaichean fuaime" msgstr[3] "Ceanglachain: %1 cliop fuaime" #: indicator/textchannelobserver.cpp:612 #, qt-format msgid "Attachment: %1 file" msgid_plural "Attachments: %1 files" msgstr[0] "Ceanglachan: %1 fhaidhle" msgstr[1] "Ceanglachain: %1 fhaidhle" msgstr[2] "Ceanglachain: %1 faidhlichean" msgstr[3] "Ceanglachain: %1 faidhle" #. TRANSLATORS : message displayed when any error occurred while receiving a MMS (case when cellular-data is off, or any downloading issue). Notify that there was a message, the user can find more about it in the messaging-app. #: indicator/textchannelobserver.cpp:615 #, fuzzy #| msgid "View message" msgid "New MMS message" msgstr "Seall an teachdaireachd" #. TRANSLATORS : %1 is the recipient name #: indicator/textchannelobserver.cpp:679 indicator/textchannelobserver.cpp:683 #, qt-format msgid "Message to group from %1" msgstr "Teachdaireachd gu buidheann o %1" #: indicator/textchannelobserver.cpp:749 #, qt-format msgid "Message from %1" msgstr "Teachdaireachd o %1" #: indicator/textchannelobserver.cpp:910 msgid "Please, select a SIM card:" msgstr "Tagh cairt SIM:" #: indicator/ussdindicator.cpp:119 msgid "Reply" msgstr "Freagair" #: indicator/ussdindicator.cpp:142 msgid "Cancel" msgstr "Sguir dheth" #: libtelephonyservice/callnotification.cpp:53 msgid "Conf call on hold" msgstr "" #: libtelephonyservice/callnotification.cpp:53 #, qt-format msgid "%1 call on hold" msgstr "" #: libtelephonyservice/callnotification.cpp:56 msgid "Conf call ended" msgstr "" #: libtelephonyservice/callnotification.cpp:56 #, qt-format msgid "%1 call ended" msgstr "" #: libtelephonyservice/callnotification.cpp:59 #, qt-format msgid "%1 call declined" msgstr "" #: libtelephonyservice/contactwatcher.cpp:157 msgid "Private Number" msgstr "Àireamh phrìobhaideach" #: libtelephonyservice/contactwatcher.cpp:159 msgid "Unknown Number" msgstr "Àireamh nach aithne dhuinn" #, fuzzy #~| msgid "Telephony Service" #~ msgid "telephony-service-call" #~ msgstr "Seirbheis fòn" #, fuzzy #~| msgid "Telephony Service" #~ msgid "telephony-service-message" #~ msgstr "Seirbheis fòn" telephony-service-0.5.3/po/gl.po000066400000000000000000000267571455543255600166030ustar00rootroot00000000000000# Galician translation for telephony-service # Copyright (c) 2014 Rosetta Contributors and Canonical Ltd 2014 # This file is distributed under the same license as the telephony-service package. # FIRST AUTHOR , 2014. # msgid "" msgstr "" "Project-Id-Version: telephony-service\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-12-16 17:03+0100\n" "PO-Revision-Date: 2021-05-19 23:40+0000\n" "Last-Translator: Davidrebolomaga \n" "Language-Team: Galician \n" "Language: gl\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Generator: Weblate 3.11.3\n" "X-Launchpad-Export-Date: 2017-01-04 06:02+0000\n" #: indicator/telephony-service-call.desktop.in:4 msgid "Phone Calls" msgstr "Chamadas telefónicas" #: indicator/telephony-service-sms.desktop.in:4 msgid "SMS" msgstr "SMS" #: approver/approver.cpp:66 msgid "Unknown caller" msgstr "Comunicante descoñecido" #: approver/approver.cpp:94 msgid "I'm busy at the moment. I'll call later." msgstr "Estou ocupado neste intre. Chamarei máis tarde." #: approver/approver.cpp:95 msgid "I'm running late, on my way now." msgstr "Chego tarde, estou en camiño." #: approver/approver.cpp:96 msgid "Please call me back later." msgstr "Por favor, chámeme máis tarde." #: approver/approver.cpp:457 #, qt-format msgid "On [%1]" msgstr "En [%1]" #: approver/approver.cpp:461 indicator/messagingmenu.cpp:414 msgid "Private number" msgstr "Número privado" #: approver/approver.cpp:464 indicator/messagingmenu.cpp:244 #: indicator/messagingmenu.cpp:418 indicator/textchannelobserver.cpp:640 msgid "Unknown number" msgstr "Número descoñecido" #: approver/approver.cpp:470 approver/approver.cpp:485 msgid "Caller number is not available" msgstr "O número do comunicante non está dispoñíbel" #: approver/approver.cpp:476 msgid "Calling from private number" msgstr "Chamada desde un número privado" #: approver/approver.cpp:479 msgid "Calling from unknown number" msgstr "Chamada desde un número descoñecido" #: approver/approver.cpp:482 #, qt-format msgid "Calling from %1" msgstr "Chamada de %1" #: approver/approver.cpp:529 msgid "Hold + Answer" msgstr "Manter + Contestar" #: approver/approver.cpp:530 msgid "Accept" msgstr "Aceptar" #: approver/approver.cpp:543 msgid "End + Answer" msgstr "Rematar + Responder" #: approver/approver.cpp:552 msgid "Decline" msgstr "Rexeitar" #: approver/approver.cpp:560 msgid "Message & decline" msgstr "Rexeitar cunha mensaxe" #: approver/main.cpp:46 msgid "Telephony Service Approver" msgstr "Aprobador do sevizo telefónico" #: indicator/authhandler.cpp:72 msgid "Authentication failed. Do you want to review your credentials?" msgstr "Fallou a autenticación. Desexa revisar as súas credenciais?" #: indicator/authhandler.cpp:91 msgid "Yes" msgstr "Si" #: indicator/authhandler.cpp:94 msgid "No" msgstr "Non" #: indicator/displaynamesettings.cpp:35 #, qt-format msgid "SIM %1" msgstr "SIM %1" #: indicator/main.cpp:53 msgid "Telephony Service Indicator" msgstr "Indicador do servizo de telefonía" #: indicator/messagingmenu.cpp:83 indicator/messagingmenu.cpp:87 msgid "Telephony Service" msgstr "Servizo de telefonía" #: indicator/messagingmenu.cpp:151 indicator/messagingmenu.cpp:293 #: indicator/messagingmenu.cpp:360 msgid "Send" msgstr "Enviar" #. TRANSLATORS : %1 is the group name and %2 is the recipient name #: indicator/messagingmenu.cpp:262 indicator/textchannelobserver.cpp:671 #: indicator/textchannelobserver.cpp:675 #, qt-format msgid "Message to %1 from %2" msgstr "Mensaxe a %1 de %2" #. TRANSLATORS : %1 is the recipient name #: indicator/messagingmenu.cpp:265 indicator/messagingmenu.cpp:269 #, fuzzy, qt-format #| msgid "Message to group from %1" msgid "Message to the group from %1" msgstr "Mensaxe ao grupo de %1" #: indicator/messagingmenu.cpp:345 msgid "Call back" msgstr "Chamar de volta" #: indicator/messagingmenu.cpp:350 #, fuzzy #| msgid "I missed your call - can you call me now?" msgid "Missed your call — can you call me now?" msgstr "Perdín a súa chamada, pode chamarme agora?" #: indicator/messagingmenu.cpp:351 #, fuzzy #| msgid "I'm running late. I'm on my way." msgid "Running late. On my way." msgstr "Chego tarde. Estou en camiño." #: indicator/messagingmenu.cpp:352 #, fuzzy #| msgid "I'm busy at the moment. I'll call you later." msgid "Busy at the moment. Will call you later." msgstr "Neste intre estou ocupado. Chamarei máis tarde." #: indicator/messagingmenu.cpp:353 #, fuzzy #| msgid "I'll be 20 minutes late." msgid "I am 20 minutes late." msgstr "Chegarei 20 minutos tarde." #: indicator/messagingmenu.cpp:354 #, fuzzy #| msgid "Sorry, I'm still busy. I'll call you later." msgid "Still busy. Will call you later." msgstr "Síntoo, estou ocupado. Chamarei máis tarde." #: indicator/messagingmenu.cpp:409 #, qt-format msgid "%1 missed call" msgid_plural "%1 missed calls" msgstr[0] "%1 chamada perdida" msgstr[1] "%1 chamadas perdidas" #: indicator/messagingmenu.cpp:492 msgid "Voicemail messages" msgstr "Correos de voz" #: indicator/messagingmenu.cpp:495 #, qt-format msgid "%1 voicemail message" msgid_plural "%1 voicemail messages" msgstr[0] "%1 correo de voz" msgstr[1] "%1 correos de voz" #: indicator/messagingmenu.cpp:500 msgid "Voicemail" msgstr "Correo de voz" #: indicator/metrics.cpp:42 #, qt-format msgid "%1 text messages sent today" msgstr "Hoxe enviou %1 mensaxes" #: indicator/metrics.cpp:43 msgid "No text messages sent today" msgstr "Hoxe non enviou mensaxes de texto" #: indicator/metrics.cpp:44 #, qt-format msgid "%1 text messages received today" msgstr "Hoxe recibiu %1 mensaxes" #: indicator/metrics.cpp:45 msgid "No text messages received today" msgstr "Hoxe non recibiu mensaxes de texto" #: indicator/metrics.cpp:46 #, qt-format msgid "%1 calls received today" msgstr "Hoxe recibiu %1 chamadas" #: indicator/metrics.cpp:47 msgid "No calls received today" msgstr "Hoxe non recibiu chamadas" #: indicator/metrics.cpp:48 #, qt-format msgid "%1 calls made today" msgstr "Hoxe fixo %1 chamada(s)" #: indicator/metrics.cpp:49 indicator/metrics.cpp:51 msgid "No calls made today" msgstr "Hoxe non fixo chamadas" #: indicator/metrics.cpp:50 #, qt-format msgid "Spent %1 minutes in calls today" msgstr "Hoxe ten %1 minutos de chamadas" #: indicator/textchannelobserver.cpp:225 msgid "Unlock your sim card and try again from the messaging application." msgstr "Desbloquee a SIM e volva probar dede o aplicativo de mensaxería." #: indicator/textchannelobserver.cpp:227 msgid "Deactivate flight mode and try again from the messaging application." msgstr "Desactive o modo avión e probe desde o aplicativo de mensaxería." #: indicator/textchannelobserver.cpp:230 msgid "Try again from the messaging application." msgstr "Volva probar desde o aplicativo de mensaxería." #: indicator/textchannelobserver.cpp:236 msgid "The message could not be sent" msgstr "Non foi posíbel enviar a mensaxe" #: indicator/textchannelobserver.cpp:249 indicator/textchannelobserver.cpp:713 msgid "View message" msgstr "Ver mensaxe" #: indicator/textchannelobserver.cpp:295 msgid "New Group" msgstr "Novo grupo" #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:302 #, qt-format msgid "You joined group %1 " msgstr "Uniuse ao grupo %1 " #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:306 #, qt-format msgid "You joined group %1" msgstr "Uniuse ao grupo %1" #: indicator/textchannelobserver.cpp:309 msgid "You joined a new group" msgstr "Uniuse a un novo grupo" #: indicator/textchannelobserver.cpp:328 msgid "View Group" msgstr "Ver o grupo" #: indicator/textchannelobserver.cpp:367 indicator/ussdindicator.cpp:116 msgid "Ok" msgstr "Aceptar" #: indicator/textchannelobserver.cpp:373 msgid "Save" msgstr "Gardar" #: indicator/textchannelobserver.cpp:468 msgid "Emergency Alert" msgstr "" #: indicator/textchannelobserver.cpp:471 msgid "Emergency Alert: Extreme" msgstr "" #: indicator/textchannelobserver.cpp:474 msgid "Emergency Alert: Severe" msgstr "" #: indicator/textchannelobserver.cpp:477 msgid "Emergency Alert: Notice" msgstr "" #: indicator/textchannelobserver.cpp:482 msgid "AMBER Alert" msgstr "" #: indicator/textchannelobserver.cpp:485 msgid "Alert" msgstr "" #: indicator/textchannelobserver.cpp:531 msgid "Show alert" msgstr "" #: indicator/textchannelobserver.cpp:604 #, qt-format msgid "Attachment: %1 image" msgid_plural "Attachments: %1 images" msgstr[0] "Anexo: %1 imaxe" msgstr[1] "Anexos: %1 imaxes" #: indicator/textchannelobserver.cpp:606 #, qt-format msgid "Attachment: %1 video" msgid_plural "Attachments: %1 videos" msgstr[0] "Anexo: %1 vídeo" msgstr[1] "Anexos: %1 vídeos" #: indicator/textchannelobserver.cpp:608 #, qt-format msgid "Attachment: %1 contact" msgid_plural "Attachments: %1 contacts" msgstr[0] "Anexo: %1 contacto" msgstr[1] "Anexos: %1 contactos" #: indicator/textchannelobserver.cpp:610 #, qt-format msgid "Attachment: %1 audio clip" msgid_plural "Attachments: %1 audio clips" msgstr[0] "Anexo: %1 ficheiro de son" msgstr[1] "Anexos: %1 ficheiros de son" #: indicator/textchannelobserver.cpp:612 #, qt-format msgid "Attachment: %1 file" msgid_plural "Attachments: %1 files" msgstr[0] "Anexo: %1 ficheiro" msgstr[1] "Anexos: %1 ficheiros" #. TRANSLATORS : message displayed when any error occurred while receiving a MMS (case when cellular-data is off, or any downloading issue). Notify that there was a message, the user can find more about it in the messaging-app. #: indicator/textchannelobserver.cpp:615 #, fuzzy #| msgid "View message" msgid "New MMS message" msgstr "Ver mensaxe" #. TRANSLATORS : %1 is the recipient name #: indicator/textchannelobserver.cpp:679 indicator/textchannelobserver.cpp:683 #, qt-format msgid "Message to group from %1" msgstr "Mensaxe ao grupo de %1" #: indicator/textchannelobserver.cpp:749 #, qt-format msgid "Message from %1" msgstr "Mensaxe de %1" #: indicator/textchannelobserver.cpp:910 msgid "Please, select a SIM card:" msgstr "Escolla unha tarxeta SIM:" #: indicator/ussdindicator.cpp:119 msgid "Reply" msgstr "Responder" #: indicator/ussdindicator.cpp:142 msgid "Cancel" msgstr "Cancelar" #: libtelephonyservice/callnotification.cpp:53 msgid "Conf call on hold" msgstr "" #: libtelephonyservice/callnotification.cpp:53 #, qt-format msgid "%1 call on hold" msgstr "" #: libtelephonyservice/callnotification.cpp:56 msgid "Conf call ended" msgstr "" #: libtelephonyservice/callnotification.cpp:56 #, qt-format msgid "%1 call ended" msgstr "" #: libtelephonyservice/callnotification.cpp:59 #, qt-format msgid "%1 call declined" msgstr "" #: libtelephonyservice/contactwatcher.cpp:157 msgid "Private Number" msgstr "Número privado" #: libtelephonyservice/contactwatcher.cpp:159 msgid "Unknown Number" msgstr "Número descoñecido" #, fuzzy #~| msgid "Telephony Service" #~ msgid "telephony-service-call" #~ msgstr "Servizo de telefonía" #, fuzzy #~| msgid "Telephony Service" #~ msgid "telephony-service-message" #~ msgstr "Servizo de telefonía" #~ msgid "" #~ "Oops, there has been an error with the MMS system and this message could " #~ "not be retrieved. Please ensure Cellular Data is ON and MMS settings are " #~ "correct, then ask the sender to try again." #~ msgstr "" #~ "Ocorreu un erro co sistema de MMS e esta mensaxe non pode ser obtida. Por " #~ "favor, asegúrese que os datos móbiles están acendidos e a configuración " #~ "correcta. Despois pida ao remitente para intentalo de novo." telephony-service-0.5.3/po/gu.po000066400000000000000000000207421455543255600166000ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-12-16 17:03+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: Automatically generated\n" "Language-Team: none\n" "Language: gu\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n > 1;\n" #: indicator/telephony-service-call.desktop.in:4 msgid "Phone Calls" msgstr "" #: indicator/telephony-service-sms.desktop.in:4 msgid "SMS" msgstr "" #: approver/approver.cpp:66 msgid "Unknown caller" msgstr "" #: approver/approver.cpp:94 msgid "I'm busy at the moment. I'll call later." msgstr "" #: approver/approver.cpp:95 msgid "I'm running late, on my way now." msgstr "" #: approver/approver.cpp:96 msgid "Please call me back later." msgstr "" #: approver/approver.cpp:457 #, qt-format msgid "On [%1]" msgstr "" #: approver/approver.cpp:461 indicator/messagingmenu.cpp:414 msgid "Private number" msgstr "" #: approver/approver.cpp:464 indicator/messagingmenu.cpp:244 #: indicator/messagingmenu.cpp:418 indicator/textchannelobserver.cpp:640 msgid "Unknown number" msgstr "" #: approver/approver.cpp:470 approver/approver.cpp:485 msgid "Caller number is not available" msgstr "" #: approver/approver.cpp:476 msgid "Calling from private number" msgstr "" #: approver/approver.cpp:479 msgid "Calling from unknown number" msgstr "" #: approver/approver.cpp:482 #, qt-format msgid "Calling from %1" msgstr "" #: approver/approver.cpp:529 msgid "Hold + Answer" msgstr "" #: approver/approver.cpp:530 msgid "Accept" msgstr "" #: approver/approver.cpp:543 msgid "End + Answer" msgstr "" #: approver/approver.cpp:552 msgid "Decline" msgstr "" #: approver/approver.cpp:560 msgid "Message & decline" msgstr "" #: approver/main.cpp:46 msgid "Telephony Service Approver" msgstr "" #: indicator/authhandler.cpp:72 msgid "Authentication failed. Do you want to review your credentials?" msgstr "" #: indicator/authhandler.cpp:91 msgid "Yes" msgstr "" #: indicator/authhandler.cpp:94 msgid "No" msgstr "" #: indicator/displaynamesettings.cpp:35 #, qt-format msgid "SIM %1" msgstr "" #: indicator/main.cpp:53 msgid "Telephony Service Indicator" msgstr "" #: indicator/messagingmenu.cpp:83 indicator/messagingmenu.cpp:87 msgid "Telephony Service" msgstr "" #: indicator/messagingmenu.cpp:151 indicator/messagingmenu.cpp:293 #: indicator/messagingmenu.cpp:360 msgid "Send" msgstr "" #. TRANSLATORS : %1 is the group name and %2 is the recipient name #: indicator/messagingmenu.cpp:262 indicator/textchannelobserver.cpp:671 #: indicator/textchannelobserver.cpp:675 #, qt-format msgid "Message to %1 from %2" msgstr "" #. TRANSLATORS : %1 is the recipient name #: indicator/messagingmenu.cpp:265 indicator/messagingmenu.cpp:269 #, qt-format msgid "Message to the group from %1" msgstr "" #: indicator/messagingmenu.cpp:345 msgid "Call back" msgstr "" #: indicator/messagingmenu.cpp:350 msgid "Missed your call — can you call me now?" msgstr "" #: indicator/messagingmenu.cpp:351 msgid "Running late. On my way." msgstr "" #: indicator/messagingmenu.cpp:352 msgid "Busy at the moment. Will call you later." msgstr "" #: indicator/messagingmenu.cpp:353 msgid "I am 20 minutes late." msgstr "" #: indicator/messagingmenu.cpp:354 msgid "Still busy. Will call you later." msgstr "" #: indicator/messagingmenu.cpp:409 #, qt-format msgid "%1 missed call" msgid_plural "%1 missed calls" msgstr[0] "" msgstr[1] "" #: indicator/messagingmenu.cpp:492 msgid "Voicemail messages" msgstr "" #: indicator/messagingmenu.cpp:495 #, qt-format msgid "%1 voicemail message" msgid_plural "%1 voicemail messages" msgstr[0] "" msgstr[1] "" #: indicator/messagingmenu.cpp:500 msgid "Voicemail" msgstr "" #: indicator/metrics.cpp:42 #, qt-format msgid "%1 text messages sent today" msgstr "" #: indicator/metrics.cpp:43 msgid "No text messages sent today" msgstr "" #: indicator/metrics.cpp:44 #, qt-format msgid "%1 text messages received today" msgstr "" #: indicator/metrics.cpp:45 msgid "No text messages received today" msgstr "" #: indicator/metrics.cpp:46 #, qt-format msgid "%1 calls received today" msgstr "" #: indicator/metrics.cpp:47 msgid "No calls received today" msgstr "" #: indicator/metrics.cpp:48 #, qt-format msgid "%1 calls made today" msgstr "" #: indicator/metrics.cpp:49 indicator/metrics.cpp:51 msgid "No calls made today" msgstr "" #: indicator/metrics.cpp:50 #, qt-format msgid "Spent %1 minutes in calls today" msgstr "" #: indicator/textchannelobserver.cpp:225 msgid "Unlock your sim card and try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:227 msgid "Deactivate flight mode and try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:230 msgid "Try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:236 msgid "The message could not be sent" msgstr "" #: indicator/textchannelobserver.cpp:249 indicator/textchannelobserver.cpp:713 msgid "View message" msgstr "" #: indicator/textchannelobserver.cpp:295 msgid "New Group" msgstr "" #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:302 #, qt-format msgid "You joined group %1 " msgstr "" #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:306 #, qt-format msgid "You joined group %1" msgstr "" #: indicator/textchannelobserver.cpp:309 msgid "You joined a new group" msgstr "" #: indicator/textchannelobserver.cpp:328 msgid "View Group" msgstr "" #: indicator/textchannelobserver.cpp:367 indicator/ussdindicator.cpp:116 msgid "Ok" msgstr "" #: indicator/textchannelobserver.cpp:373 msgid "Save" msgstr "" #: indicator/textchannelobserver.cpp:468 msgid "Emergency Alert" msgstr "" #: indicator/textchannelobserver.cpp:471 msgid "Emergency Alert: Extreme" msgstr "" #: indicator/textchannelobserver.cpp:474 msgid "Emergency Alert: Severe" msgstr "" #: indicator/textchannelobserver.cpp:477 msgid "Emergency Alert: Notice" msgstr "" #: indicator/textchannelobserver.cpp:482 msgid "AMBER Alert" msgstr "" #: indicator/textchannelobserver.cpp:485 msgid "Alert" msgstr "" #: indicator/textchannelobserver.cpp:531 msgid "Show alert" msgstr "" #: indicator/textchannelobserver.cpp:604 #, qt-format msgid "Attachment: %1 image" msgid_plural "Attachments: %1 images" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:606 #, qt-format msgid "Attachment: %1 video" msgid_plural "Attachments: %1 videos" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:608 #, qt-format msgid "Attachment: %1 contact" msgid_plural "Attachments: %1 contacts" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:610 #, qt-format msgid "Attachment: %1 audio clip" msgid_plural "Attachments: %1 audio clips" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:612 #, qt-format msgid "Attachment: %1 file" msgid_plural "Attachments: %1 files" msgstr[0] "" msgstr[1] "" #. TRANSLATORS : message displayed when any error occurred while receiving a MMS (case when cellular-data is off, or any downloading issue). Notify that there was a message, the user can find more about it in the messaging-app. #: indicator/textchannelobserver.cpp:615 msgid "New MMS message" msgstr "" #. TRANSLATORS : %1 is the recipient name #: indicator/textchannelobserver.cpp:679 indicator/textchannelobserver.cpp:683 #, qt-format msgid "Message to group from %1" msgstr "" #: indicator/textchannelobserver.cpp:749 #, qt-format msgid "Message from %1" msgstr "" #: indicator/textchannelobserver.cpp:910 msgid "Please, select a SIM card:" msgstr "" #: indicator/ussdindicator.cpp:119 msgid "Reply" msgstr "" #: indicator/ussdindicator.cpp:142 msgid "Cancel" msgstr "" #: libtelephonyservice/callnotification.cpp:53 msgid "Conf call on hold" msgstr "" #: libtelephonyservice/callnotification.cpp:53 #, qt-format msgid "%1 call on hold" msgstr "" #: libtelephonyservice/callnotification.cpp:56 msgid "Conf call ended" msgstr "" #: libtelephonyservice/callnotification.cpp:56 #, qt-format msgid "%1 call ended" msgstr "" #: libtelephonyservice/callnotification.cpp:59 #, qt-format msgid "%1 call declined" msgstr "" #: libtelephonyservice/contactwatcher.cpp:157 msgid "Private Number" msgstr "" #: libtelephonyservice/contactwatcher.cpp:159 msgid "Unknown Number" msgstr "" telephony-service-0.5.3/po/gv.po000066400000000000000000000211451455543255600165770ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR Canonical Ltd. # This file is distributed under the same license as the telephony-service package. # FIRST AUTHOR , YEAR. # msgid "" msgstr "" "Project-Id-Version: telephony-service\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-12-16 17:03+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: Automatically generated\n" "Language-Team: none\n" "Language: gv\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=4; plural=(n % 10 == 1) ? 0 : ((n % 10 == 2) ? 1 : " "((n % 100 == 0 || n % 100 == 20 || n % 100 == 40 || n % 100 == 60 || n % 100 " "== 80) ? 2 : 3));\n" #: indicator/telephony-service-call.desktop.in:4 msgid "Phone Calls" msgstr "" #: indicator/telephony-service-sms.desktop.in:4 msgid "SMS" msgstr "" #: approver/approver.cpp:66 msgid "Unknown caller" msgstr "" #: approver/approver.cpp:94 msgid "I'm busy at the moment. I'll call later." msgstr "" #: approver/approver.cpp:95 msgid "I'm running late, on my way now." msgstr "" #: approver/approver.cpp:96 msgid "Please call me back later." msgstr "" #: approver/approver.cpp:457 #, qt-format msgid "On [%1]" msgstr "" #: approver/approver.cpp:461 indicator/messagingmenu.cpp:414 msgid "Private number" msgstr "" #: approver/approver.cpp:464 indicator/messagingmenu.cpp:244 #: indicator/messagingmenu.cpp:418 indicator/textchannelobserver.cpp:640 msgid "Unknown number" msgstr "" #: approver/approver.cpp:470 approver/approver.cpp:485 msgid "Caller number is not available" msgstr "" #: approver/approver.cpp:476 msgid "Calling from private number" msgstr "" #: approver/approver.cpp:479 msgid "Calling from unknown number" msgstr "" #: approver/approver.cpp:482 #, qt-format msgid "Calling from %1" msgstr "" #: approver/approver.cpp:529 msgid "Hold + Answer" msgstr "" #: approver/approver.cpp:530 msgid "Accept" msgstr "" #: approver/approver.cpp:543 msgid "End + Answer" msgstr "" #: approver/approver.cpp:552 msgid "Decline" msgstr "" #: approver/approver.cpp:560 msgid "Message & decline" msgstr "" #: approver/main.cpp:46 msgid "Telephony Service Approver" msgstr "" #: indicator/authhandler.cpp:72 msgid "Authentication failed. Do you want to review your credentials?" msgstr "" #: indicator/authhandler.cpp:91 msgid "Yes" msgstr "" #: indicator/authhandler.cpp:94 msgid "No" msgstr "" #: indicator/displaynamesettings.cpp:35 #, qt-format msgid "SIM %1" msgstr "" #: indicator/main.cpp:53 msgid "Telephony Service Indicator" msgstr "" #: indicator/messagingmenu.cpp:83 indicator/messagingmenu.cpp:87 msgid "Telephony Service" msgstr "" #: indicator/messagingmenu.cpp:151 indicator/messagingmenu.cpp:293 #: indicator/messagingmenu.cpp:360 msgid "Send" msgstr "" #. TRANSLATORS : %1 is the group name and %2 is the recipient name #: indicator/messagingmenu.cpp:262 indicator/textchannelobserver.cpp:671 #: indicator/textchannelobserver.cpp:675 #, qt-format msgid "Message to %1 from %2" msgstr "" #. TRANSLATORS : %1 is the recipient name #: indicator/messagingmenu.cpp:265 indicator/messagingmenu.cpp:269 #, qt-format msgid "Message to the group from %1" msgstr "" #: indicator/messagingmenu.cpp:345 msgid "Call back" msgstr "" #: indicator/messagingmenu.cpp:350 msgid "Missed your call — can you call me now?" msgstr "" #: indicator/messagingmenu.cpp:351 msgid "Running late. On my way." msgstr "" #: indicator/messagingmenu.cpp:352 msgid "Busy at the moment. Will call you later." msgstr "" #: indicator/messagingmenu.cpp:353 msgid "I am 20 minutes late." msgstr "" #: indicator/messagingmenu.cpp:354 msgid "Still busy. Will call you later." msgstr "" #: indicator/messagingmenu.cpp:409 #, qt-format msgid "%1 missed call" msgid_plural "%1 missed calls" msgstr[0] "" msgstr[1] "" #: indicator/messagingmenu.cpp:492 msgid "Voicemail messages" msgstr "" #: indicator/messagingmenu.cpp:495 #, qt-format msgid "%1 voicemail message" msgid_plural "%1 voicemail messages" msgstr[0] "" msgstr[1] "" #: indicator/messagingmenu.cpp:500 msgid "Voicemail" msgstr "" #: indicator/metrics.cpp:42 #, qt-format msgid "%1 text messages sent today" msgstr "" #: indicator/metrics.cpp:43 msgid "No text messages sent today" msgstr "" #: indicator/metrics.cpp:44 #, qt-format msgid "%1 text messages received today" msgstr "" #: indicator/metrics.cpp:45 msgid "No text messages received today" msgstr "" #: indicator/metrics.cpp:46 #, qt-format msgid "%1 calls received today" msgstr "" #: indicator/metrics.cpp:47 msgid "No calls received today" msgstr "" #: indicator/metrics.cpp:48 #, qt-format msgid "%1 calls made today" msgstr "" #: indicator/metrics.cpp:49 indicator/metrics.cpp:51 msgid "No calls made today" msgstr "" #: indicator/metrics.cpp:50 #, qt-format msgid "Spent %1 minutes in calls today" msgstr "" #: indicator/textchannelobserver.cpp:225 msgid "Unlock your sim card and try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:227 msgid "Deactivate flight mode and try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:230 msgid "Try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:236 msgid "The message could not be sent" msgstr "" #: indicator/textchannelobserver.cpp:249 indicator/textchannelobserver.cpp:713 msgid "View message" msgstr "" #: indicator/textchannelobserver.cpp:295 msgid "New Group" msgstr "" #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:302 #, qt-format msgid "You joined group %1 " msgstr "" #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:306 #, qt-format msgid "You joined group %1" msgstr "" #: indicator/textchannelobserver.cpp:309 msgid "You joined a new group" msgstr "" #: indicator/textchannelobserver.cpp:328 msgid "View Group" msgstr "" #: indicator/textchannelobserver.cpp:367 indicator/ussdindicator.cpp:116 msgid "Ok" msgstr "" #: indicator/textchannelobserver.cpp:373 msgid "Save" msgstr "" #: indicator/textchannelobserver.cpp:468 msgid "Emergency Alert" msgstr "" #: indicator/textchannelobserver.cpp:471 msgid "Emergency Alert: Extreme" msgstr "" #: indicator/textchannelobserver.cpp:474 msgid "Emergency Alert: Severe" msgstr "" #: indicator/textchannelobserver.cpp:477 msgid "Emergency Alert: Notice" msgstr "" #: indicator/textchannelobserver.cpp:482 msgid "AMBER Alert" msgstr "" #: indicator/textchannelobserver.cpp:485 msgid "Alert" msgstr "" #: indicator/textchannelobserver.cpp:531 msgid "Show alert" msgstr "" #: indicator/textchannelobserver.cpp:604 #, qt-format msgid "Attachment: %1 image" msgid_plural "Attachments: %1 images" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:606 #, qt-format msgid "Attachment: %1 video" msgid_plural "Attachments: %1 videos" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:608 #, qt-format msgid "Attachment: %1 contact" msgid_plural "Attachments: %1 contacts" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:610 #, qt-format msgid "Attachment: %1 audio clip" msgid_plural "Attachments: %1 audio clips" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:612 #, qt-format msgid "Attachment: %1 file" msgid_plural "Attachments: %1 files" msgstr[0] "" msgstr[1] "" #. TRANSLATORS : message displayed when any error occurred while receiving a MMS (case when cellular-data is off, or any downloading issue). Notify that there was a message, the user can find more about it in the messaging-app. #: indicator/textchannelobserver.cpp:615 msgid "New MMS message" msgstr "" #. TRANSLATORS : %1 is the recipient name #: indicator/textchannelobserver.cpp:679 indicator/textchannelobserver.cpp:683 #, qt-format msgid "Message to group from %1" msgstr "" #: indicator/textchannelobserver.cpp:749 #, qt-format msgid "Message from %1" msgstr "" #: indicator/textchannelobserver.cpp:910 msgid "Please, select a SIM card:" msgstr "" #: indicator/ussdindicator.cpp:119 msgid "Reply" msgstr "" #: indicator/ussdindicator.cpp:142 msgid "Cancel" msgstr "" #: libtelephonyservice/callnotification.cpp:53 msgid "Conf call on hold" msgstr "" #: libtelephonyservice/callnotification.cpp:53 #, qt-format msgid "%1 call on hold" msgstr "" #: libtelephonyservice/callnotification.cpp:56 msgid "Conf call ended" msgstr "" #: libtelephonyservice/callnotification.cpp:56 #, qt-format msgid "%1 call ended" msgstr "" #: libtelephonyservice/callnotification.cpp:59 #, qt-format msgid "%1 call declined" msgstr "" #: libtelephonyservice/contactwatcher.cpp:157 msgid "Private Number" msgstr "" #: libtelephonyservice/contactwatcher.cpp:159 msgid "Unknown Number" msgstr "" telephony-service-0.5.3/po/he.po000066400000000000000000000302071455543255600165560ustar00rootroot00000000000000# Hebrew translation for telephony-service # Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013 # This file is distributed under the same license as the telephony-service package. # FIRST AUTHOR , 2013. # msgid "" msgstr "" "Project-Id-Version: telephony-service\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-12-16 17:03+0100\n" "PO-Revision-Date: 2020-12-23 10:26+0000\n" "Last-Translator: Yaron Shahrabani \n" "Language-Team: Hebrew \n" "Language: he\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: Weblate 3.11.3\n" "X-Launchpad-Export-Date: 2017-01-04 06:02+0000\n" #: indicator/telephony-service-call.desktop.in:4 msgid "Phone Calls" msgstr "שיחות טלפון" #: indicator/telephony-service-sms.desktop.in:4 msgid "SMS" msgstr "SMS" #: approver/approver.cpp:66 msgid "Unknown caller" msgstr "מתקשר לא ידוע" #: approver/approver.cpp:94 msgid "I'm busy at the moment. I'll call later." msgstr "אין לי אפשרות לענות, אתקשר מאוחר יותר." #: approver/approver.cpp:95 msgid "I'm running late, on my way now." msgstr "באיחור, בדרך." #: approver/approver.cpp:96 msgid "Please call me back later." msgstr "נא להתקשר אלי מאוחר יותר." #: approver/approver.cpp:457 #, qt-format msgid "On [%1]" msgstr "פעיל [%1]" #: approver/approver.cpp:461 indicator/messagingmenu.cpp:414 msgid "Private number" msgstr "מספר פרטי" #: approver/approver.cpp:464 indicator/messagingmenu.cpp:244 #: indicator/messagingmenu.cpp:418 indicator/textchannelobserver.cpp:640 msgid "Unknown number" msgstr "מספר לא ידוע" #: approver/approver.cpp:470 approver/approver.cpp:485 msgid "Caller number is not available" msgstr "מספר המען אינו זמין" #: approver/approver.cpp:476 msgid "Calling from private number" msgstr "שיחה ממספר פרטי" #: approver/approver.cpp:479 msgid "Calling from unknown number" msgstr "שיחה ממספר לא ידוע" #: approver/approver.cpp:482 #, qt-format msgid "Calling from %1" msgstr "שיחה מ%1" #: approver/approver.cpp:529 msgid "Hold + Answer" msgstr "החזקה + מענה" #: approver/approver.cpp:530 msgid "Accept" msgstr "קבלה" #: approver/approver.cpp:543 msgid "End + Answer" msgstr "ניתוק + מענה" #: approver/approver.cpp:552 msgid "Decline" msgstr "דחיה" #: approver/approver.cpp:560 msgid "Message & decline" msgstr "הודעה ודחייה" #: approver/main.cpp:46 msgid "Telephony Service Approver" msgstr "מאשר שירות טלפוניה" #: indicator/authhandler.cpp:72 msgid "Authentication failed. Do you want to review your credentials?" msgstr "האימות נכשל. לסקור את פרטי הגישה שלך?" #: indicator/authhandler.cpp:91 msgid "Yes" msgstr "כן" #: indicator/authhandler.cpp:94 msgid "No" msgstr "לא" #: indicator/displaynamesettings.cpp:35 #, qt-format msgid "SIM %1" msgstr "SIM %1" #: indicator/main.cpp:53 msgid "Telephony Service Indicator" msgstr "מחוון שירות טלפוניה" #: indicator/messagingmenu.cpp:83 indicator/messagingmenu.cpp:87 msgid "Telephony Service" msgstr "שירות טלפוניה" #: indicator/messagingmenu.cpp:151 indicator/messagingmenu.cpp:293 #: indicator/messagingmenu.cpp:360 msgid "Send" msgstr "שליחה" #. TRANSLATORS : %1 is the group name and %2 is the recipient name #: indicator/messagingmenu.cpp:262 indicator/textchannelobserver.cpp:671 #: indicator/textchannelobserver.cpp:675 #, qt-format msgid "Message to %1 from %2" msgstr "הודעה אל %1 מאת %2" #. TRANSLATORS : %1 is the recipient name #: indicator/messagingmenu.cpp:265 indicator/messagingmenu.cpp:269 #, fuzzy, qt-format #| msgid "Message to group from %1" msgid "Message to the group from %1" msgstr "הודעה לקבוצה מאת %1" #: indicator/messagingmenu.cpp:345 msgid "Call back" msgstr "להתקשר בחזרה" #: indicator/messagingmenu.cpp:350 #, fuzzy #| msgid "I missed your call - can you call me now?" msgid "Missed your call — can you call me now?" msgstr "פספסתי את שיחתך - אפשר להתקשר אלי בחזרה?" #: indicator/messagingmenu.cpp:351 #, fuzzy #| msgid "I'm running late. I'm on my way." msgid "Running late. On my way." msgstr "אאחר. אני בדרך." #: indicator/messagingmenu.cpp:352 #, fuzzy #| msgid "I'm busy at the moment. I'll call you later." msgid "Busy at the moment. Will call you later." msgstr "אין לי אפשרות לענות כרגע. אתקשר מאוחר יותר." #: indicator/messagingmenu.cpp:353 #, fuzzy #| msgid "I'll be 20 minutes late." msgid "I am 20 minutes late." msgstr "אאחר ב־20 דקות." #: indicator/messagingmenu.cpp:354 #, fuzzy #| msgid "Sorry, I'm still busy. I'll call you later." msgid "Still busy. Will call you later." msgstr "עדיין עסוק. אתקשר מאוחר יותר. סליחה." #: indicator/messagingmenu.cpp:409 #, qt-format msgid "%1 missed call" msgid_plural "%1 missed calls" msgstr[0] "שיחה %1 שלא נענתה" msgstr[1] "%1 שיחות שלא נענו" #: indicator/messagingmenu.cpp:492 msgid "Voicemail messages" msgstr "הודעות בתא הקולי" #: indicator/messagingmenu.cpp:495 #, qt-format msgid "%1 voicemail message" msgid_plural "%1 voicemail messages" msgstr[0] "הודעה %1 בתא הקולי" msgstr[1] "%1 הודעות בתא הקולי" #: indicator/messagingmenu.cpp:500 msgid "Voicemail" msgstr "תא קולי" #: indicator/metrics.cpp:42 #, qt-format msgid "%1 text messages sent today" msgstr "%1 הודעות נשלחו היום" #: indicator/metrics.cpp:43 msgid "No text messages sent today" msgstr "לא נשלחו הודעות היום" #: indicator/metrics.cpp:44 #, qt-format msgid "%1 text messages received today" msgstr "%1 הודעות התקבלו היום" #: indicator/metrics.cpp:45 msgid "No text messages received today" msgstr "לא התקבלו הודעות היום" #: indicator/metrics.cpp:46 #, qt-format msgid "%1 calls received today" msgstr "%1 שיחות התקבלו היום" #: indicator/metrics.cpp:47 msgid "No calls received today" msgstr "לא התקבלו שיחות היום" #: indicator/metrics.cpp:48 #, qt-format msgid "%1 calls made today" msgstr "%1 שיחות בוצעו היום" #: indicator/metrics.cpp:49 indicator/metrics.cpp:51 msgid "No calls made today" msgstr "לא בוצעו שיחות היום" #: indicator/metrics.cpp:50 #, qt-format msgid "Spent %1 minutes in calls today" msgstr "בזבזת %1 דקות בשיחות היום" #: indicator/textchannelobserver.cpp:225 msgid "Unlock your sim card and try again from the messaging application." msgstr "ניתן לשחרר את נעילת ה־SIM שלך ולנסות שוב דרך יישום ההודעות." #: indicator/textchannelobserver.cpp:227 msgid "Deactivate flight mode and try again from the messaging application." msgstr "מוטב לנטרל את מצב הטיסה ולנסות שוב מיישום ההודעות." #: indicator/textchannelobserver.cpp:230 msgid "Try again from the messaging application." msgstr "כדאי לנסות שוב מיישום ההודעות." #: indicator/textchannelobserver.cpp:236 msgid "The message could not be sent" msgstr "לא ניתן לשלוח את ההודעה" #: indicator/textchannelobserver.cpp:249 indicator/textchannelobserver.cpp:713 msgid "View message" msgstr "צפייה בהודעה" #: indicator/textchannelobserver.cpp:295 msgid "New Group" msgstr "קבוצה חדשה" #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:302 #, qt-format msgid "You joined group %1 " msgstr "הצטרפת לקבוצה %1 " #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:306 #, qt-format msgid "You joined group %1" msgstr "הצטרפת לקבוצה %1" #: indicator/textchannelobserver.cpp:309 msgid "You joined a new group" msgstr "הצטרפת לקבוצה חדשה" #: indicator/textchannelobserver.cpp:328 msgid "View Group" msgstr "הצגת קבוצה" #: indicator/textchannelobserver.cpp:367 indicator/ussdindicator.cpp:116 msgid "Ok" msgstr "אישור" #: indicator/textchannelobserver.cpp:373 msgid "Save" msgstr "שמירה" #: indicator/textchannelobserver.cpp:468 msgid "Emergency Alert" msgstr "" #: indicator/textchannelobserver.cpp:471 msgid "Emergency Alert: Extreme" msgstr "" #: indicator/textchannelobserver.cpp:474 msgid "Emergency Alert: Severe" msgstr "" #: indicator/textchannelobserver.cpp:477 msgid "Emergency Alert: Notice" msgstr "" #: indicator/textchannelobserver.cpp:482 msgid "AMBER Alert" msgstr "" #: indicator/textchannelobserver.cpp:485 msgid "Alert" msgstr "" #: indicator/textchannelobserver.cpp:531 msgid "Show alert" msgstr "" #: indicator/textchannelobserver.cpp:604 #, qt-format msgid "Attachment: %1 image" msgid_plural "Attachments: %1 images" msgstr[0] "מצורפת: תמונה אחת" msgstr[1] "מצורפות: %1 תמונות" #: indicator/textchannelobserver.cpp:606 #, qt-format msgid "Attachment: %1 video" msgid_plural "Attachments: %1 videos" msgstr[0] "מצורף: סרטון אחד" msgstr[1] "מצורפים: %1 סרטונים" #: indicator/textchannelobserver.cpp:608 #, qt-format msgid "Attachment: %1 contact" msgid_plural "Attachments: %1 contacts" msgstr[0] "מצורף: איש קשר אחד" msgstr[1] "מצורפים: %1 אנשי קשר" #: indicator/textchannelobserver.cpp:610 #, qt-format msgid "Attachment: %1 audio clip" msgid_plural "Attachments: %1 audio clips" msgstr[0] "מצורף: מקטע שמע אחד" msgstr[1] "מצורפים: %1 מקטעי שמע" #: indicator/textchannelobserver.cpp:612 #, qt-format msgid "Attachment: %1 file" msgid_plural "Attachments: %1 files" msgstr[0] "מצורף: קובץ אחד" msgstr[1] "מצורפים: %1 קבצים" #. TRANSLATORS : message displayed when any error occurred while receiving a MMS (case when cellular-data is off, or any downloading issue). Notify that there was a message, the user can find more about it in the messaging-app. #: indicator/textchannelobserver.cpp:615 #, fuzzy #| msgid "View message" msgid "New MMS message" msgstr "צפייה בהודעה" #. TRANSLATORS : %1 is the recipient name #: indicator/textchannelobserver.cpp:679 indicator/textchannelobserver.cpp:683 #, qt-format msgid "Message to group from %1" msgstr "הודעה לקבוצה מאת %1" #: indicator/textchannelobserver.cpp:749 #, qt-format msgid "Message from %1" msgstr "הודעת מאת %1" #: indicator/textchannelobserver.cpp:910 msgid "Please, select a SIM card:" msgstr "נא לבחור כרטיס SIM:" #: indicator/ussdindicator.cpp:119 msgid "Reply" msgstr "מענה" #: indicator/ussdindicator.cpp:142 msgid "Cancel" msgstr "ביטול" #: libtelephonyservice/callnotification.cpp:53 msgid "Conf call on hold" msgstr "" #: libtelephonyservice/callnotification.cpp:53 #, qt-format msgid "%1 call on hold" msgstr "" #: libtelephonyservice/callnotification.cpp:56 msgid "Conf call ended" msgstr "" #: libtelephonyservice/callnotification.cpp:56 #, qt-format msgid "%1 call ended" msgstr "" #: libtelephonyservice/callnotification.cpp:59 #, qt-format msgid "%1 call declined" msgstr "" #: libtelephonyservice/contactwatcher.cpp:157 msgid "Private Number" msgstr "מספר חסוי" #: libtelephonyservice/contactwatcher.cpp:159 msgid "Unknown Number" msgstr "מספר לא ידוע" #, fuzzy #~| msgid "Telephony Service" #~ msgid "telephony-service-call" #~ msgstr "שירות טלפוניה" #, fuzzy #~| msgid "Telephony Service" #~ msgid "telephony-service-message" #~ msgstr "שירות טלפוניה" #~ msgid "" #~ "Oops, there has been an error with the MMS system and this message could " #~ "not be retrieved. Please ensure Cellular Data is ON and MMS settings are " #~ "correct, then ask the sender to try again." #~ msgstr "" #~ "אופס, הייתה איזו תקלה עם מערכת ה־MMS וקבלת ההודעה נכשלה. נא לוודא שתקשורת " #~ "הנתונים הסלולרית פעילה ושהגדרות ה־MMS נכונות ואז לבקש ממי ששלח לשלוח שוב." telephony-service-0.5.3/po/hi.po000066400000000000000000000211731455543255600165640ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-12-16 17:03+0100\n" "PO-Revision-Date: 2023-06-28 04:33+0000\n" "Last-Translator: \"Rudra Harsh V.Singh\" \n" "Language-Team: Hindi \n" "Language: hi\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n > 1;\n" "X-Generator: Weblate 4.18.1\n" #: indicator/telephony-service-call.desktop.in:4 msgid "Phone Calls" msgstr "" #: indicator/telephony-service-sms.desktop.in:4 msgid "SMS" msgstr "" #: approver/approver.cpp:66 msgid "Unknown caller" msgstr "" #: approver/approver.cpp:94 msgid "I'm busy at the moment. I'll call later." msgstr "" #: approver/approver.cpp:95 msgid "I'm running late, on my way now." msgstr "" #: approver/approver.cpp:96 msgid "Please call me back later." msgstr "" #: approver/approver.cpp:457 #, qt-format msgid "On [%1]" msgstr "" #: approver/approver.cpp:461 indicator/messagingmenu.cpp:414 msgid "Private number" msgstr "" #: approver/approver.cpp:464 indicator/messagingmenu.cpp:244 #: indicator/messagingmenu.cpp:418 indicator/textchannelobserver.cpp:640 msgid "Unknown number" msgstr "" #: approver/approver.cpp:470 approver/approver.cpp:485 msgid "Caller number is not available" msgstr "" #: approver/approver.cpp:476 msgid "Calling from private number" msgstr "" #: approver/approver.cpp:479 msgid "Calling from unknown number" msgstr "" #: approver/approver.cpp:482 #, qt-format msgid "Calling from %1" msgstr "" #: approver/approver.cpp:529 msgid "Hold + Answer" msgstr "" #: approver/approver.cpp:530 msgid "Accept" msgstr "" #: approver/approver.cpp:543 msgid "End + Answer" msgstr "" #: approver/approver.cpp:552 msgid "Decline" msgstr "" #: approver/approver.cpp:560 msgid "Message & decline" msgstr "" #: approver/main.cpp:46 msgid "Telephony Service Approver" msgstr "" #: indicator/authhandler.cpp:72 msgid "Authentication failed. Do you want to review your credentials?" msgstr "" #: indicator/authhandler.cpp:91 msgid "Yes" msgstr "" #: indicator/authhandler.cpp:94 msgid "No" msgstr "" #: indicator/displaynamesettings.cpp:35 #, qt-format msgid "SIM %1" msgstr "" #: indicator/main.cpp:53 msgid "Telephony Service Indicator" msgstr "" #: indicator/messagingmenu.cpp:83 indicator/messagingmenu.cpp:87 msgid "Telephony Service" msgstr "" #: indicator/messagingmenu.cpp:151 indicator/messagingmenu.cpp:293 #: indicator/messagingmenu.cpp:360 msgid "Send" msgstr "" #. TRANSLATORS : %1 is the group name and %2 is the recipient name #: indicator/messagingmenu.cpp:262 indicator/textchannelobserver.cpp:671 #: indicator/textchannelobserver.cpp:675 #, qt-format msgid "Message to %1 from %2" msgstr "" #. TRANSLATORS : %1 is the recipient name #: indicator/messagingmenu.cpp:265 indicator/messagingmenu.cpp:269 #, qt-format msgid "Message to the group from %1" msgstr "" #: indicator/messagingmenu.cpp:345 msgid "Call back" msgstr "" #: indicator/messagingmenu.cpp:350 msgid "Missed your call — can you call me now?" msgstr "" #: indicator/messagingmenu.cpp:351 msgid "Running late. On my way." msgstr "" #: indicator/messagingmenu.cpp:352 msgid "Busy at the moment. Will call you later." msgstr "" #: indicator/messagingmenu.cpp:353 msgid "I am 20 minutes late." msgstr "" #: indicator/messagingmenu.cpp:354 msgid "Still busy. Will call you later." msgstr "" #: indicator/messagingmenu.cpp:409 #, qt-format msgid "%1 missed call" msgid_plural "%1 missed calls" msgstr[0] "" msgstr[1] "" #: indicator/messagingmenu.cpp:492 msgid "Voicemail messages" msgstr "" #: indicator/messagingmenu.cpp:495 #, qt-format msgid "%1 voicemail message" msgid_plural "%1 voicemail messages" msgstr[0] "" msgstr[1] "" #: indicator/messagingmenu.cpp:500 msgid "Voicemail" msgstr "" #: indicator/metrics.cpp:42 #, qt-format msgid "%1 text messages sent today" msgstr "" #: indicator/metrics.cpp:43 msgid "No text messages sent today" msgstr "" #: indicator/metrics.cpp:44 #, qt-format msgid "%1 text messages received today" msgstr "" #: indicator/metrics.cpp:45 msgid "No text messages received today" msgstr "" #: indicator/metrics.cpp:46 #, qt-format msgid "%1 calls received today" msgstr "" #: indicator/metrics.cpp:47 msgid "No calls received today" msgstr "" #: indicator/metrics.cpp:48 #, qt-format msgid "%1 calls made today" msgstr "" #: indicator/metrics.cpp:49 indicator/metrics.cpp:51 msgid "No calls made today" msgstr "" #: indicator/metrics.cpp:50 #, qt-format msgid "Spent %1 minutes in calls today" msgstr "" #: indicator/textchannelobserver.cpp:225 msgid "Unlock your sim card and try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:227 msgid "Deactivate flight mode and try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:230 msgid "Try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:236 msgid "The message could not be sent" msgstr "" #: indicator/textchannelobserver.cpp:249 indicator/textchannelobserver.cpp:713 msgid "View message" msgstr "" #: indicator/textchannelobserver.cpp:295 msgid "New Group" msgstr "" #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:302 #, qt-format msgid "You joined group %1 " msgstr "" #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:306 #, qt-format msgid "You joined group %1" msgstr "" #: indicator/textchannelobserver.cpp:309 msgid "You joined a new group" msgstr "" #: indicator/textchannelobserver.cpp:328 msgid "View Group" msgstr "" #: indicator/textchannelobserver.cpp:367 indicator/ussdindicator.cpp:116 msgid "Ok" msgstr "" #: indicator/textchannelobserver.cpp:373 msgid "Save" msgstr "" #: indicator/textchannelobserver.cpp:468 msgid "Emergency Alert" msgstr "" #: indicator/textchannelobserver.cpp:471 msgid "Emergency Alert: Extreme" msgstr "" #: indicator/textchannelobserver.cpp:474 msgid "Emergency Alert: Severe" msgstr "" #: indicator/textchannelobserver.cpp:477 msgid "Emergency Alert: Notice" msgstr "" #: indicator/textchannelobserver.cpp:482 msgid "AMBER Alert" msgstr "" #: indicator/textchannelobserver.cpp:485 msgid "Alert" msgstr "" #: indicator/textchannelobserver.cpp:531 msgid "Show alert" msgstr "" #: indicator/textchannelobserver.cpp:604 #, qt-format msgid "Attachment: %1 image" msgid_plural "Attachments: %1 images" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:606 #, qt-format msgid "Attachment: %1 video" msgid_plural "Attachments: %1 videos" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:608 #, qt-format msgid "Attachment: %1 contact" msgid_plural "Attachments: %1 contacts" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:610 #, qt-format msgid "Attachment: %1 audio clip" msgid_plural "Attachments: %1 audio clips" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:612 #, qt-format msgid "Attachment: %1 file" msgid_plural "Attachments: %1 files" msgstr[0] "" msgstr[1] "" #. TRANSLATORS : message displayed when any error occurred while receiving a MMS (case when cellular-data is off, or any downloading issue). Notify that there was a message, the user can find more about it in the messaging-app. #: indicator/textchannelobserver.cpp:615 msgid "New MMS message" msgstr "" #. TRANSLATORS : %1 is the recipient name #: indicator/textchannelobserver.cpp:679 indicator/textchannelobserver.cpp:683 #, qt-format msgid "Message to group from %1" msgstr "" #: indicator/textchannelobserver.cpp:749 #, qt-format msgid "Message from %1" msgstr "" #: indicator/textchannelobserver.cpp:910 msgid "Please, select a SIM card:" msgstr "" #: indicator/ussdindicator.cpp:119 msgid "Reply" msgstr "" #: indicator/ussdindicator.cpp:142 msgid "Cancel" msgstr "रद्द करें" #: libtelephonyservice/callnotification.cpp:53 msgid "Conf call on hold" msgstr "" #: libtelephonyservice/callnotification.cpp:53 #, qt-format msgid "%1 call on hold" msgstr "" #: libtelephonyservice/callnotification.cpp:56 msgid "Conf call ended" msgstr "" #: libtelephonyservice/callnotification.cpp:56 #, qt-format msgid "%1 call ended" msgstr "" #: libtelephonyservice/callnotification.cpp:59 #, qt-format msgid "%1 call declined" msgstr "" #: libtelephonyservice/contactwatcher.cpp:157 msgid "Private Number" msgstr "" #: libtelephonyservice/contactwatcher.cpp:159 msgid "Unknown Number" msgstr "" telephony-service-0.5.3/po/hr.po000066400000000000000000000262311455543255600165750ustar00rootroot00000000000000# Croatian translation for telephony-service # Copyright (c) 2015 Rosetta Contributors and Canonical Ltd 2015 # This file is distributed under the same license as the telephony-service package. # FIRST AUTHOR , 2015. # msgid "" msgstr "" "Project-Id-Version: telephony-service\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-12-16 17:03+0100\n" "PO-Revision-Date: 2015-10-16 10:35+0000\n" "Last-Translator: FULL NAME \n" "Language-Team: Croatian \n" "Language: hr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && " "n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" "X-Launchpad-Export-Date: 2017-01-04 06:03+0000\n" "X-Generator: Launchpad (build 18298)\n" #: indicator/telephony-service-call.desktop.in:4 msgid "Phone Calls" msgstr "Telefonski pozivi" #: indicator/telephony-service-sms.desktop.in:4 msgid "SMS" msgstr "SMS" #: approver/approver.cpp:66 msgid "Unknown caller" msgstr "Nepoznat pozivatelj" #: approver/approver.cpp:94 msgid "I'm busy at the moment. I'll call later." msgstr "Trenutno sam zaposlen. Nazvat ću vas kasnije." #: approver/approver.cpp:95 msgid "I'm running late, on my way now." msgstr "Kasnim, na putu sam." #: approver/approver.cpp:96 msgid "Please call me back later." msgstr "Nazovite me natrag kasnije." #: approver/approver.cpp:457 #, qt-format msgid "On [%1]" msgstr "Na [%1]" #: approver/approver.cpp:461 indicator/messagingmenu.cpp:414 msgid "Private number" msgstr "Privatan broj" #: approver/approver.cpp:464 indicator/messagingmenu.cpp:244 #: indicator/messagingmenu.cpp:418 indicator/textchannelobserver.cpp:640 msgid "Unknown number" msgstr "Nepoznat broj" #: approver/approver.cpp:470 approver/approver.cpp:485 msgid "Caller number is not available" msgstr "Broj pozivatelja nije dostupan" #: approver/approver.cpp:476 msgid "Calling from private number" msgstr "Poziv od privatnog broja" #: approver/approver.cpp:479 msgid "Calling from unknown number" msgstr "Poziv od nepoznatnog broja" #: approver/approver.cpp:482 #, qt-format msgid "Calling from %1" msgstr "Poziv od %1" #: approver/approver.cpp:529 msgid "Hold + Answer" msgstr "Zadrži + Poziv" #: approver/approver.cpp:530 msgid "Accept" msgstr "Prihvati" #: approver/approver.cpp:543 msgid "End + Answer" msgstr "Završi + Poziv" #: approver/approver.cpp:552 msgid "Decline" msgstr "Odbaci" #: approver/approver.cpp:560 msgid "Message & decline" msgstr "Poruke i otkazivanje" #: approver/main.cpp:46 msgid "Telephony Service Approver" msgstr "Pružatelj telefonskih usluga" #: indicator/authhandler.cpp:72 msgid "Authentication failed. Do you want to review your credentials?" msgstr "Ovjera je neuspjela. Želite li pregledati svoje vjerodajnice?" #: indicator/authhandler.cpp:91 msgid "Yes" msgstr "Da" #: indicator/authhandler.cpp:94 msgid "No" msgstr "Ne" #: indicator/displaynamesettings.cpp:35 #, qt-format msgid "SIM %1" msgstr "SIM %1" #: indicator/main.cpp:53 msgid "Telephony Service Indicator" msgstr "Pokazatelj telefonskih usluga" #: indicator/messagingmenu.cpp:83 indicator/messagingmenu.cpp:87 msgid "Telephony Service" msgstr "Usluga telefoniranja" #: indicator/messagingmenu.cpp:151 indicator/messagingmenu.cpp:293 #: indicator/messagingmenu.cpp:360 msgid "Send" msgstr "Pošalji" #. TRANSLATORS : %1 is the group name and %2 is the recipient name #: indicator/messagingmenu.cpp:262 indicator/textchannelobserver.cpp:671 #: indicator/textchannelobserver.cpp:675 #, qt-format msgid "Message to %1 from %2" msgstr "" #. TRANSLATORS : %1 is the recipient name #: indicator/messagingmenu.cpp:265 indicator/messagingmenu.cpp:269 #, fuzzy, qt-format #| msgid "Message to group from %1" msgid "Message to the group from %1" msgstr "Grupna poruka od %1" #: indicator/messagingmenu.cpp:345 msgid "Call back" msgstr "Uzvrati poziv" #: indicator/messagingmenu.cpp:350 #, fuzzy #| msgid "I missed your call - can you call me now?" msgid "Missed your call — can you call me now?" msgstr "Propustio sam vaš poziv, želite li me sada nazvati?" #: indicator/messagingmenu.cpp:351 #, fuzzy #| msgid "I'm running late. I'm on my way." msgid "Running late. On my way." msgstr "Kasnim, na putu sam." #: indicator/messagingmenu.cpp:352 #, fuzzy #| msgid "I'm busy at the moment. I'll call you later." msgid "Busy at the moment. Will call you later." msgstr "Trenutno sam zauzet. Nazvat ću vas kasnije." #: indicator/messagingmenu.cpp:353 #, fuzzy #| msgid "I'll be 20 minutes late." msgid "I am 20 minutes late." msgstr "Kasnit ću 20 minuta." #: indicator/messagingmenu.cpp:354 #, fuzzy #| msgid "Sorry, I'm still busy. I'll call you later." msgid "Still busy. Will call you later." msgstr "Isprika, Još sam zauzet. Nazvat ću vas kasnije." #: indicator/messagingmenu.cpp:409 #, qt-format msgid "%1 missed call" msgid_plural "%1 missed calls" msgstr[0] "%1 propušteni poziv" msgstr[1] "%1 propuštena poziva" msgstr[2] "%1 propuštenih poziva" #: indicator/messagingmenu.cpp:492 msgid "Voicemail messages" msgstr "Poruke govorne pošte" #: indicator/messagingmenu.cpp:495 #, qt-format msgid "%1 voicemail message" msgid_plural "%1 voicemail messages" msgstr[0] "%1 glasovna poruka" msgstr[1] "%1 glasovne poruke" msgstr[2] "%1 glasovnih poruka" #: indicator/messagingmenu.cpp:500 msgid "Voicemail" msgstr "Govorna pošta" #: indicator/metrics.cpp:42 #, qt-format msgid "%1 text messages sent today" msgstr "%1 danas poslane poruke" #: indicator/metrics.cpp:43 msgid "No text messages sent today" msgstr "Danas nema poslanih poruka" #: indicator/metrics.cpp:44 #, qt-format msgid "%1 text messages received today" msgstr "%1 danas primljene poruke" #: indicator/metrics.cpp:45 msgid "No text messages received today" msgstr "Danas nema primljenih poruka" #: indicator/metrics.cpp:46 #, qt-format msgid "%1 calls received today" msgstr "%1 jučerašnji pozivi" #: indicator/metrics.cpp:47 msgid "No calls received today" msgstr "Danas nema dolaznih poziva" #: indicator/metrics.cpp:48 #, qt-format msgid "%1 calls made today" msgstr "%1 današnji pozivi" #: indicator/metrics.cpp:49 indicator/metrics.cpp:51 msgid "No calls made today" msgstr "Danas nema ostvarenih poziva" #: indicator/metrics.cpp:50 #, qt-format msgid "Spent %1 minutes in calls today" msgstr "Potrošeno %1 minuta na pozive danas" #: indicator/textchannelobserver.cpp:225 msgid "Unlock your sim card and try again from the messaging application." msgstr "" "Otključajte svoju SIM karticu i pokušajte ponovno iz aplikacije za poruke." #: indicator/textchannelobserver.cpp:227 msgid "Deactivate flight mode and try again from the messaging application." msgstr "" "Isključite način rada u zrakoplovu i pokušajte ponovno iz aplikacije za " "poruke." #: indicator/textchannelobserver.cpp:230 msgid "Try again from the messaging application." msgstr "Pokušajte kasnije iz aplikacije za poruke" #: indicator/textchannelobserver.cpp:236 msgid "The message could not be sent" msgstr "Tekstovna poruka ne može biti poslana" #: indicator/textchannelobserver.cpp:249 indicator/textchannelobserver.cpp:713 msgid "View message" msgstr "Pogledaj poruku" #: indicator/textchannelobserver.cpp:295 msgid "New Group" msgstr "" #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:302 #, qt-format msgid "You joined group %1 " msgstr "" #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:306 #, qt-format msgid "You joined group %1" msgstr "" #: indicator/textchannelobserver.cpp:309 msgid "You joined a new group" msgstr "" #: indicator/textchannelobserver.cpp:328 msgid "View Group" msgstr "" #: indicator/textchannelobserver.cpp:367 indicator/ussdindicator.cpp:116 msgid "Ok" msgstr "U redu" #: indicator/textchannelobserver.cpp:373 msgid "Save" msgstr "Spremi" #: indicator/textchannelobserver.cpp:468 msgid "Emergency Alert" msgstr "" #: indicator/textchannelobserver.cpp:471 msgid "Emergency Alert: Extreme" msgstr "" #: indicator/textchannelobserver.cpp:474 msgid "Emergency Alert: Severe" msgstr "" #: indicator/textchannelobserver.cpp:477 msgid "Emergency Alert: Notice" msgstr "" #: indicator/textchannelobserver.cpp:482 msgid "AMBER Alert" msgstr "" #: indicator/textchannelobserver.cpp:485 msgid "Alert" msgstr "" #: indicator/textchannelobserver.cpp:531 msgid "Show alert" msgstr "" #: indicator/textchannelobserver.cpp:604 #, qt-format msgid "Attachment: %1 image" msgid_plural "Attachments: %1 images" msgstr[0] "Privitak: %1 slika" msgstr[1] "Privitci: %1 slike" msgstr[2] "Privitci: %1 slika" #: indicator/textchannelobserver.cpp:606 #, qt-format msgid "Attachment: %1 video" msgid_plural "Attachments: %1 videos" msgstr[0] "Privitak: %1 video snimka" msgstr[1] "Privitci: %1 video snimke" msgstr[2] "Privitci: %1 video snimaka" #: indicator/textchannelobserver.cpp:608 #, qt-format msgid "Attachment: %1 contact" msgid_plural "Attachments: %1 contacts" msgstr[0] "Privitak: %1 kontakt" msgstr[1] "Privitci: %1 kontakta" msgstr[2] "Privitci: %1 kontakta" #: indicator/textchannelobserver.cpp:610 #, qt-format msgid "Attachment: %1 audio clip" msgid_plural "Attachments: %1 audio clips" msgstr[0] "Privitak: %1 zvučni zapis" msgstr[1] "Privitci: %1 zvučna zapisa" msgstr[2] "Privitci: %1 zvučnih zapisa" #: indicator/textchannelobserver.cpp:612 #, qt-format msgid "Attachment: %1 file" msgid_plural "Attachments: %1 files" msgstr[0] "Privitak: %1 datoteka" msgstr[1] "Privitci: %1 datoteke" msgstr[2] "Privitci: %1 datoteka" #. TRANSLATORS : message displayed when any error occurred while receiving a MMS (case when cellular-data is off, or any downloading issue). Notify that there was a message, the user can find more about it in the messaging-app. #: indicator/textchannelobserver.cpp:615 #, fuzzy #| msgid "View message" msgid "New MMS message" msgstr "Pogledaj poruku" #. TRANSLATORS : %1 is the recipient name #: indicator/textchannelobserver.cpp:679 indicator/textchannelobserver.cpp:683 #, qt-format msgid "Message to group from %1" msgstr "Grupna poruka od %1" #: indicator/textchannelobserver.cpp:749 #, qt-format msgid "Message from %1" msgstr "Poruka od %1" #: indicator/textchannelobserver.cpp:910 msgid "Please, select a SIM card:" msgstr "Odaberite SIM karticu:" #: indicator/ussdindicator.cpp:119 msgid "Reply" msgstr "Odgovori" #: indicator/ussdindicator.cpp:142 msgid "Cancel" msgstr "Odustani" #: libtelephonyservice/callnotification.cpp:53 msgid "Conf call on hold" msgstr "" #: libtelephonyservice/callnotification.cpp:53 #, qt-format msgid "%1 call on hold" msgstr "" #: libtelephonyservice/callnotification.cpp:56 msgid "Conf call ended" msgstr "" #: libtelephonyservice/callnotification.cpp:56 #, qt-format msgid "%1 call ended" msgstr "" #: libtelephonyservice/callnotification.cpp:59 #, qt-format msgid "%1 call declined" msgstr "" #: libtelephonyservice/contactwatcher.cpp:157 msgid "Private Number" msgstr "Privatni broj" #: libtelephonyservice/contactwatcher.cpp:159 msgid "Unknown Number" msgstr "Nepoznat broj" #, fuzzy #~| msgid "Telephony Service" #~ msgid "telephony-service-call" #~ msgstr "Usluga telefoniranja" #, fuzzy #~| msgid "Telephony Service" #~ msgid "telephony-service-message" #~ msgstr "Usluga telefoniranja" telephony-service-0.5.3/po/ht.po000066400000000000000000000207371455543255600166040ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR Canonical Ltd. # This file is distributed under the same license as the telephony-service package. # FIRST AUTHOR , YEAR. # msgid "" msgstr "" "Project-Id-Version: telephony-service\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-12-16 17:03+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: Automatically generated\n" "Language-Team: none\n" "Language: ht\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" #: indicator/telephony-service-call.desktop.in:4 msgid "Phone Calls" msgstr "" #: indicator/telephony-service-sms.desktop.in:4 msgid "SMS" msgstr "" #: approver/approver.cpp:66 msgid "Unknown caller" msgstr "" #: approver/approver.cpp:94 msgid "I'm busy at the moment. I'll call later." msgstr "" #: approver/approver.cpp:95 msgid "I'm running late, on my way now." msgstr "" #: approver/approver.cpp:96 msgid "Please call me back later." msgstr "" #: approver/approver.cpp:457 #, qt-format msgid "On [%1]" msgstr "" #: approver/approver.cpp:461 indicator/messagingmenu.cpp:414 msgid "Private number" msgstr "" #: approver/approver.cpp:464 indicator/messagingmenu.cpp:244 #: indicator/messagingmenu.cpp:418 indicator/textchannelobserver.cpp:640 msgid "Unknown number" msgstr "" #: approver/approver.cpp:470 approver/approver.cpp:485 msgid "Caller number is not available" msgstr "" #: approver/approver.cpp:476 msgid "Calling from private number" msgstr "" #: approver/approver.cpp:479 msgid "Calling from unknown number" msgstr "" #: approver/approver.cpp:482 #, qt-format msgid "Calling from %1" msgstr "" #: approver/approver.cpp:529 msgid "Hold + Answer" msgstr "" #: approver/approver.cpp:530 msgid "Accept" msgstr "" #: approver/approver.cpp:543 msgid "End + Answer" msgstr "" #: approver/approver.cpp:552 msgid "Decline" msgstr "" #: approver/approver.cpp:560 msgid "Message & decline" msgstr "" #: approver/main.cpp:46 msgid "Telephony Service Approver" msgstr "" #: indicator/authhandler.cpp:72 msgid "Authentication failed. Do you want to review your credentials?" msgstr "" #: indicator/authhandler.cpp:91 msgid "Yes" msgstr "" #: indicator/authhandler.cpp:94 msgid "No" msgstr "" #: indicator/displaynamesettings.cpp:35 #, qt-format msgid "SIM %1" msgstr "" #: indicator/main.cpp:53 msgid "Telephony Service Indicator" msgstr "" #: indicator/messagingmenu.cpp:83 indicator/messagingmenu.cpp:87 msgid "Telephony Service" msgstr "" #: indicator/messagingmenu.cpp:151 indicator/messagingmenu.cpp:293 #: indicator/messagingmenu.cpp:360 msgid "Send" msgstr "" #. TRANSLATORS : %1 is the group name and %2 is the recipient name #: indicator/messagingmenu.cpp:262 indicator/textchannelobserver.cpp:671 #: indicator/textchannelobserver.cpp:675 #, qt-format msgid "Message to %1 from %2" msgstr "" #. TRANSLATORS : %1 is the recipient name #: indicator/messagingmenu.cpp:265 indicator/messagingmenu.cpp:269 #, qt-format msgid "Message to the group from %1" msgstr "" #: indicator/messagingmenu.cpp:345 msgid "Call back" msgstr "" #: indicator/messagingmenu.cpp:350 msgid "Missed your call — can you call me now?" msgstr "" #: indicator/messagingmenu.cpp:351 msgid "Running late. On my way." msgstr "" #: indicator/messagingmenu.cpp:352 msgid "Busy at the moment. Will call you later." msgstr "" #: indicator/messagingmenu.cpp:353 msgid "I am 20 minutes late." msgstr "" #: indicator/messagingmenu.cpp:354 msgid "Still busy. Will call you later." msgstr "" #: indicator/messagingmenu.cpp:409 #, qt-format msgid "%1 missed call" msgid_plural "%1 missed calls" msgstr[0] "" msgstr[1] "" #: indicator/messagingmenu.cpp:492 msgid "Voicemail messages" msgstr "" #: indicator/messagingmenu.cpp:495 #, qt-format msgid "%1 voicemail message" msgid_plural "%1 voicemail messages" msgstr[0] "" msgstr[1] "" #: indicator/messagingmenu.cpp:500 msgid "Voicemail" msgstr "" #: indicator/metrics.cpp:42 #, qt-format msgid "%1 text messages sent today" msgstr "" #: indicator/metrics.cpp:43 msgid "No text messages sent today" msgstr "" #: indicator/metrics.cpp:44 #, qt-format msgid "%1 text messages received today" msgstr "" #: indicator/metrics.cpp:45 msgid "No text messages received today" msgstr "" #: indicator/metrics.cpp:46 #, qt-format msgid "%1 calls received today" msgstr "" #: indicator/metrics.cpp:47 msgid "No calls received today" msgstr "" #: indicator/metrics.cpp:48 #, qt-format msgid "%1 calls made today" msgstr "" #: indicator/metrics.cpp:49 indicator/metrics.cpp:51 msgid "No calls made today" msgstr "" #: indicator/metrics.cpp:50 #, qt-format msgid "Spent %1 minutes in calls today" msgstr "" #: indicator/textchannelobserver.cpp:225 msgid "Unlock your sim card and try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:227 msgid "Deactivate flight mode and try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:230 msgid "Try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:236 msgid "The message could not be sent" msgstr "" #: indicator/textchannelobserver.cpp:249 indicator/textchannelobserver.cpp:713 msgid "View message" msgstr "" #: indicator/textchannelobserver.cpp:295 msgid "New Group" msgstr "" #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:302 #, qt-format msgid "You joined group %1 " msgstr "" #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:306 #, qt-format msgid "You joined group %1" msgstr "" #: indicator/textchannelobserver.cpp:309 msgid "You joined a new group" msgstr "" #: indicator/textchannelobserver.cpp:328 msgid "View Group" msgstr "" #: indicator/textchannelobserver.cpp:367 indicator/ussdindicator.cpp:116 msgid "Ok" msgstr "" #: indicator/textchannelobserver.cpp:373 msgid "Save" msgstr "" #: indicator/textchannelobserver.cpp:468 msgid "Emergency Alert" msgstr "" #: indicator/textchannelobserver.cpp:471 msgid "Emergency Alert: Extreme" msgstr "" #: indicator/textchannelobserver.cpp:474 msgid "Emergency Alert: Severe" msgstr "" #: indicator/textchannelobserver.cpp:477 msgid "Emergency Alert: Notice" msgstr "" #: indicator/textchannelobserver.cpp:482 msgid "AMBER Alert" msgstr "" #: indicator/textchannelobserver.cpp:485 msgid "Alert" msgstr "" #: indicator/textchannelobserver.cpp:531 msgid "Show alert" msgstr "" #: indicator/textchannelobserver.cpp:604 #, qt-format msgid "Attachment: %1 image" msgid_plural "Attachments: %1 images" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:606 #, qt-format msgid "Attachment: %1 video" msgid_plural "Attachments: %1 videos" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:608 #, qt-format msgid "Attachment: %1 contact" msgid_plural "Attachments: %1 contacts" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:610 #, qt-format msgid "Attachment: %1 audio clip" msgid_plural "Attachments: %1 audio clips" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:612 #, qt-format msgid "Attachment: %1 file" msgid_plural "Attachments: %1 files" msgstr[0] "" msgstr[1] "" #. TRANSLATORS : message displayed when any error occurred while receiving a MMS (case when cellular-data is off, or any downloading issue). Notify that there was a message, the user can find more about it in the messaging-app. #: indicator/textchannelobserver.cpp:615 msgid "New MMS message" msgstr "" #. TRANSLATORS : %1 is the recipient name #: indicator/textchannelobserver.cpp:679 indicator/textchannelobserver.cpp:683 #, qt-format msgid "Message to group from %1" msgstr "" #: indicator/textchannelobserver.cpp:749 #, qt-format msgid "Message from %1" msgstr "" #: indicator/textchannelobserver.cpp:910 msgid "Please, select a SIM card:" msgstr "" #: indicator/ussdindicator.cpp:119 msgid "Reply" msgstr "" #: indicator/ussdindicator.cpp:142 msgid "Cancel" msgstr "" #: libtelephonyservice/callnotification.cpp:53 msgid "Conf call on hold" msgstr "" #: libtelephonyservice/callnotification.cpp:53 #, qt-format msgid "%1 call on hold" msgstr "" #: libtelephonyservice/callnotification.cpp:56 msgid "Conf call ended" msgstr "" #: libtelephonyservice/callnotification.cpp:56 #, qt-format msgid "%1 call ended" msgstr "" #: libtelephonyservice/callnotification.cpp:59 #, qt-format msgid "%1 call declined" msgstr "" #: libtelephonyservice/contactwatcher.cpp:157 msgid "Private Number" msgstr "" #: libtelephonyservice/contactwatcher.cpp:159 msgid "Unknown Number" msgstr "" telephony-service-0.5.3/po/hu.po000066400000000000000000000262301455543255600165770ustar00rootroot00000000000000# Hungarian translation for telephony-service # Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013 # This file is distributed under the same license as the telephony-service package. # FIRST AUTHOR , 2013. # msgid "" msgstr "" "Project-Id-Version: telephony-service\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-12-16 17:03+0100\n" "PO-Revision-Date: 2023-04-22 17:52+0000\n" "Last-Translator: Lundrin \n" "Language-Team: Hungarian \n" "Language: hu\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Generator: Weblate 4.18-dev\n" "X-Launchpad-Export-Date: 2017-01-04 06:02+0000\n" #: indicator/telephony-service-call.desktop.in:4 msgid "Phone Calls" msgstr "Telefonhívások" #: indicator/telephony-service-sms.desktop.in:4 msgid "SMS" msgstr "SMS" #: approver/approver.cpp:66 msgid "Unknown caller" msgstr "Ismeretlen hívó" #: approver/approver.cpp:94 msgid "I'm busy at the moment. I'll call later." msgstr "Elfoglalt vagyok, később visszahívom." #: approver/approver.cpp:95 msgid "I'm running late, on my way now." msgstr "Már úton vagyok, de késni fogok." #: approver/approver.cpp:96 msgid "Please call me back later." msgstr "Kérem hívjon vissza később." #: approver/approver.cpp:457 #, qt-format msgid "On [%1]" msgstr "Ezen: [%1]" #: approver/approver.cpp:461 indicator/messagingmenu.cpp:414 msgid "Private number" msgstr "Rejtett szám" #: approver/approver.cpp:464 indicator/messagingmenu.cpp:244 #: indicator/messagingmenu.cpp:418 indicator/textchannelobserver.cpp:640 msgid "Unknown number" msgstr "Ismeretlen szám" #: approver/approver.cpp:470 approver/approver.cpp:485 msgid "Caller number is not available" msgstr "A hívó száma nem érhető el" #: approver/approver.cpp:476 msgid "Calling from private number" msgstr "Hívás rejtett számról" #: approver/approver.cpp:479 msgid "Calling from unknown number" msgstr "Hívás ismeretlen számról" #: approver/approver.cpp:482 #, qt-format msgid "Calling from %1" msgstr "Hívás innen: %1" #: approver/approver.cpp:529 msgid "Hold + Answer" msgstr "Várakoztat és válaszol" #: approver/approver.cpp:530 msgid "Accept" msgstr "Elfogadás" #: approver/approver.cpp:543 msgid "End + Answer" msgstr "Befejez és válaszol" #: approver/approver.cpp:552 msgid "Decline" msgstr "Elutasítás" #: approver/approver.cpp:560 msgid "Message & decline" msgstr "Üzenet és elutasítás" #: approver/main.cpp:46 msgid "Telephony Service Approver" msgstr "Telefonszolgáltatás jóváhagyó" #: indicator/authhandler.cpp:72 msgid "Authentication failed. Do you want to review your credentials?" msgstr "Sikertelen hitelesítés. Szeretné átnézni a megadott adatokat?" #: indicator/authhandler.cpp:91 msgid "Yes" msgstr "Igen" #: indicator/authhandler.cpp:94 msgid "No" msgstr "Nem" #: indicator/displaynamesettings.cpp:35 #, qt-format msgid "SIM %1" msgstr "SIM %1" #: indicator/main.cpp:53 msgid "Telephony Service Indicator" msgstr "Telefonszolgáltatás indikátor" #: indicator/messagingmenu.cpp:83 indicator/messagingmenu.cpp:87 msgid "Telephony Service" msgstr "Telefonszolgáltatás" #: indicator/messagingmenu.cpp:151 indicator/messagingmenu.cpp:293 #: indicator/messagingmenu.cpp:360 msgid "Send" msgstr "Küldés" #. TRANSLATORS : %1 is the group name and %2 is the recipient name #: indicator/messagingmenu.cpp:262 indicator/textchannelobserver.cpp:671 #: indicator/textchannelobserver.cpp:675 #, qt-format msgid "Message to %1 from %2" msgstr "Üzenet a(z) %1 csoportban tőle: %2" #. TRANSLATORS : %1 is the recipient name #: indicator/messagingmenu.cpp:265 indicator/messagingmenu.cpp:269 #, qt-format msgid "Message to the group from %1" msgstr "Üzenet a csoportnak tőle: %1" #: indicator/messagingmenu.cpp:345 msgid "Call back" msgstr "Visszahívás" #: indicator/messagingmenu.cpp:350 msgid "Missed your call — can you call me now?" msgstr "Elmulasztottam a hívását. Vissza tudna hívni most?" #: indicator/messagingmenu.cpp:351 msgid "Running late. On my way." msgstr "Kicsit kések. Sietek." #: indicator/messagingmenu.cpp:352 msgid "Busy at the moment. Will call you later." msgstr "Elfoglalt vagyok. Később visszahívom." #: indicator/messagingmenu.cpp:353 msgid "I am 20 minutes late." msgstr "20 percet kések." #: indicator/messagingmenu.cpp:354 msgid "Still busy. Will call you later." msgstr "Még elfoglalt vagyok. Később visszahívom." #: indicator/messagingmenu.cpp:409 #, qt-format msgid "%1 missed call" msgid_plural "%1 missed calls" msgstr[0] "%1 nem fogadott hívás" msgstr[1] "%1 nem fogadott hívás" #: indicator/messagingmenu.cpp:492 msgid "Voicemail messages" msgstr "Hangposta üzenetek" #: indicator/messagingmenu.cpp:495 #, qt-format msgid "%1 voicemail message" msgid_plural "%1 voicemail messages" msgstr[0] "%1 hangposta üzenet" msgstr[1] "%1 hangposta üzenet" #: indicator/messagingmenu.cpp:500 msgid "Voicemail" msgstr "Hangposta" #: indicator/metrics.cpp:42 #, qt-format msgid "%1 text messages sent today" msgstr "%1 szöveges üzenetet küldött ma" #: indicator/metrics.cpp:43 msgid "No text messages sent today" msgstr "Nem küldött szöveges üzenetet ma" #: indicator/metrics.cpp:44 #, qt-format msgid "%1 text messages received today" msgstr "%1 szöveges üzenetet fogadott ma" #: indicator/metrics.cpp:45 msgid "No text messages received today" msgstr "Nem kapott szöveges üzenetet ma" #: indicator/metrics.cpp:46 #, qt-format msgid "%1 calls received today" msgstr "%1 hívást fogadott ma" #: indicator/metrics.cpp:47 msgid "No calls received today" msgstr "Nem fogadott hívást ma" #: indicator/metrics.cpp:48 #, qt-format msgid "%1 calls made today" msgstr "%1 hívást indított ma" #: indicator/metrics.cpp:49 indicator/metrics.cpp:51 msgid "No calls made today" msgstr "Nem indított hívást ma" #: indicator/metrics.cpp:50 #, qt-format msgid "Spent %1 minutes in calls today" msgstr "%1 percet telefonált ma" #: indicator/textchannelobserver.cpp:225 msgid "Unlock your sim card and try again from the messaging application." msgstr "Oldja fel a SIM kártyáját és próbálja újra az üzenetek alkalmazásból." #: indicator/textchannelobserver.cpp:227 msgid "Deactivate flight mode and try again from the messaging application." msgstr "" "Kapcsolja ki a repülőgépes módot , és próbálja újra az üzenetek " "alkalmazásból." #: indicator/textchannelobserver.cpp:230 msgid "Try again from the messaging application." msgstr "Próbálja űjra az üzenetek alkalmazásból." #: indicator/textchannelobserver.cpp:236 msgid "The message could not be sent" msgstr "Az üzenetet nem sikerült elküldeni" #: indicator/textchannelobserver.cpp:249 indicator/textchannelobserver.cpp:713 msgid "View message" msgstr "Üzenet megtekintése" #: indicator/textchannelobserver.cpp:295 msgid "New Group" msgstr "Új csoport" #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:302 #, qt-format msgid "You joined group %1 " msgstr "Csatlakozott a(z) %1 csoporthoz " #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:306 #, qt-format msgid "You joined group %1" msgstr "Csatlakozott a(z) %1 csoporthoz" #: indicator/textchannelobserver.cpp:309 msgid "You joined a new group" msgstr "Csatlakozott egy új csoporthoz" #: indicator/textchannelobserver.cpp:328 msgid "View Group" msgstr "Csoport megtekintése" #: indicator/textchannelobserver.cpp:367 indicator/ussdindicator.cpp:116 msgid "Ok" msgstr "OK" #: indicator/textchannelobserver.cpp:373 msgid "Save" msgstr "Mentés" #: indicator/textchannelobserver.cpp:468 msgid "Emergency Alert" msgstr "Vészhelyzeti riasztás" #: indicator/textchannelobserver.cpp:471 msgid "Emergency Alert: Extreme" msgstr "Vészhelyzeti riasztás: Extrém" #: indicator/textchannelobserver.cpp:474 msgid "Emergency Alert: Severe" msgstr "Vészhelyzeti riasztás: Súlyos" #: indicator/textchannelobserver.cpp:477 msgid "Emergency Alert: Notice" msgstr "Vészhelyzeti riasztás: Tájékoztatás" #: indicator/textchannelobserver.cpp:482 msgid "AMBER Alert" msgstr "AMBER riasztás" #: indicator/textchannelobserver.cpp:485 msgid "Alert" msgstr "Riasztás" #: indicator/textchannelobserver.cpp:531 msgid "Show alert" msgstr "Riasztás mutatása" #: indicator/textchannelobserver.cpp:604 #, qt-format msgid "Attachment: %1 image" msgid_plural "Attachments: %1 images" msgstr[0] "Melléklet: %1 kép" msgstr[1] "Melléklet: %1 kép" #: indicator/textchannelobserver.cpp:606 #, qt-format msgid "Attachment: %1 video" msgid_plural "Attachments: %1 videos" msgstr[0] "Melléklet: %1 videó" msgstr[1] "Melléklet: %1 videó" #: indicator/textchannelobserver.cpp:608 #, qt-format msgid "Attachment: %1 contact" msgid_plural "Attachments: %1 contacts" msgstr[0] "Melléklet: %1 névjegy" msgstr[1] "Melléklet: %1 névjegy" #: indicator/textchannelobserver.cpp:610 #, qt-format msgid "Attachment: %1 audio clip" msgid_plural "Attachments: %1 audio clips" msgstr[0] "Melléklet: %1 audiofájl" msgstr[1] "Melléklet: %1 audiofájl" #: indicator/textchannelobserver.cpp:612 #, qt-format msgid "Attachment: %1 file" msgid_plural "Attachments: %1 files" msgstr[0] "Melléklet: %1 fájl" msgstr[1] "Melléklet: %1 fájl" #. TRANSLATORS : message displayed when any error occurred while receiving a MMS (case when cellular-data is off, or any downloading issue). Notify that there was a message, the user can find more about it in the messaging-app. #: indicator/textchannelobserver.cpp:615 msgid "New MMS message" msgstr "Új MMS üzenet" #. TRANSLATORS : %1 is the recipient name #: indicator/textchannelobserver.cpp:679 indicator/textchannelobserver.cpp:683 #, qt-format msgid "Message to group from %1" msgstr "Csoportos üzenet innen: %1" #: indicator/textchannelobserver.cpp:749 #, qt-format msgid "Message from %1" msgstr "Üzenet tőle: %1" #: indicator/textchannelobserver.cpp:910 msgid "Please, select a SIM card:" msgstr "Válasszon SIM kártyát:" #: indicator/ussdindicator.cpp:119 msgid "Reply" msgstr "Válasz" #: indicator/ussdindicator.cpp:142 msgid "Cancel" msgstr "Mégse" #: libtelephonyservice/callnotification.cpp:53 #, fuzzy msgid "Conf call on hold" msgstr "Konferenciahívás várakoztatva" #: libtelephonyservice/callnotification.cpp:53 #, fuzzy, qt-format msgid "%1 call on hold" msgstr "%1 hívás várakoztatva" #: libtelephonyservice/callnotification.cpp:56 msgid "Conf call ended" msgstr "Konferenciahívás véget ért" #: libtelephonyservice/callnotification.cpp:56 #, qt-format msgid "%1 call ended" msgstr "%1 hívás véget ért" #: libtelephonyservice/callnotification.cpp:59 #, qt-format msgid "%1 call declined" msgstr "%1 hívás visszautasítva" #: libtelephonyservice/contactwatcher.cpp:157 msgid "Private Number" msgstr "Rejtett szám" #: libtelephonyservice/contactwatcher.cpp:159 msgid "Unknown Number" msgstr "Ismeretlen szám" #, fuzzy #~| msgid "Telephony Service" #~ msgid "telephony-service-call" #~ msgstr "Telefonszolgáltatás-hívás" #, fuzzy #~| msgid "Telephony Service" #~ msgid "telephony-service-message" #~ msgstr "Telefonszolgáltatás-üzenet" telephony-service-0.5.3/po/hy.po000066400000000000000000000207421455543255600166050ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-12-16 17:03+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: Automatically generated\n" "Language-Team: none\n" "Language: hy\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n > 1;\n" #: indicator/telephony-service-call.desktop.in:4 msgid "Phone Calls" msgstr "" #: indicator/telephony-service-sms.desktop.in:4 msgid "SMS" msgstr "" #: approver/approver.cpp:66 msgid "Unknown caller" msgstr "" #: approver/approver.cpp:94 msgid "I'm busy at the moment. I'll call later." msgstr "" #: approver/approver.cpp:95 msgid "I'm running late, on my way now." msgstr "" #: approver/approver.cpp:96 msgid "Please call me back later." msgstr "" #: approver/approver.cpp:457 #, qt-format msgid "On [%1]" msgstr "" #: approver/approver.cpp:461 indicator/messagingmenu.cpp:414 msgid "Private number" msgstr "" #: approver/approver.cpp:464 indicator/messagingmenu.cpp:244 #: indicator/messagingmenu.cpp:418 indicator/textchannelobserver.cpp:640 msgid "Unknown number" msgstr "" #: approver/approver.cpp:470 approver/approver.cpp:485 msgid "Caller number is not available" msgstr "" #: approver/approver.cpp:476 msgid "Calling from private number" msgstr "" #: approver/approver.cpp:479 msgid "Calling from unknown number" msgstr "" #: approver/approver.cpp:482 #, qt-format msgid "Calling from %1" msgstr "" #: approver/approver.cpp:529 msgid "Hold + Answer" msgstr "" #: approver/approver.cpp:530 msgid "Accept" msgstr "" #: approver/approver.cpp:543 msgid "End + Answer" msgstr "" #: approver/approver.cpp:552 msgid "Decline" msgstr "" #: approver/approver.cpp:560 msgid "Message & decline" msgstr "" #: approver/main.cpp:46 msgid "Telephony Service Approver" msgstr "" #: indicator/authhandler.cpp:72 msgid "Authentication failed. Do you want to review your credentials?" msgstr "" #: indicator/authhandler.cpp:91 msgid "Yes" msgstr "" #: indicator/authhandler.cpp:94 msgid "No" msgstr "" #: indicator/displaynamesettings.cpp:35 #, qt-format msgid "SIM %1" msgstr "" #: indicator/main.cpp:53 msgid "Telephony Service Indicator" msgstr "" #: indicator/messagingmenu.cpp:83 indicator/messagingmenu.cpp:87 msgid "Telephony Service" msgstr "" #: indicator/messagingmenu.cpp:151 indicator/messagingmenu.cpp:293 #: indicator/messagingmenu.cpp:360 msgid "Send" msgstr "" #. TRANSLATORS : %1 is the group name and %2 is the recipient name #: indicator/messagingmenu.cpp:262 indicator/textchannelobserver.cpp:671 #: indicator/textchannelobserver.cpp:675 #, qt-format msgid "Message to %1 from %2" msgstr "" #. TRANSLATORS : %1 is the recipient name #: indicator/messagingmenu.cpp:265 indicator/messagingmenu.cpp:269 #, qt-format msgid "Message to the group from %1" msgstr "" #: indicator/messagingmenu.cpp:345 msgid "Call back" msgstr "" #: indicator/messagingmenu.cpp:350 msgid "Missed your call — can you call me now?" msgstr "" #: indicator/messagingmenu.cpp:351 msgid "Running late. On my way." msgstr "" #: indicator/messagingmenu.cpp:352 msgid "Busy at the moment. Will call you later." msgstr "" #: indicator/messagingmenu.cpp:353 msgid "I am 20 minutes late." msgstr "" #: indicator/messagingmenu.cpp:354 msgid "Still busy. Will call you later." msgstr "" #: indicator/messagingmenu.cpp:409 #, qt-format msgid "%1 missed call" msgid_plural "%1 missed calls" msgstr[0] "" msgstr[1] "" #: indicator/messagingmenu.cpp:492 msgid "Voicemail messages" msgstr "" #: indicator/messagingmenu.cpp:495 #, qt-format msgid "%1 voicemail message" msgid_plural "%1 voicemail messages" msgstr[0] "" msgstr[1] "" #: indicator/messagingmenu.cpp:500 msgid "Voicemail" msgstr "" #: indicator/metrics.cpp:42 #, qt-format msgid "%1 text messages sent today" msgstr "" #: indicator/metrics.cpp:43 msgid "No text messages sent today" msgstr "" #: indicator/metrics.cpp:44 #, qt-format msgid "%1 text messages received today" msgstr "" #: indicator/metrics.cpp:45 msgid "No text messages received today" msgstr "" #: indicator/metrics.cpp:46 #, qt-format msgid "%1 calls received today" msgstr "" #: indicator/metrics.cpp:47 msgid "No calls received today" msgstr "" #: indicator/metrics.cpp:48 #, qt-format msgid "%1 calls made today" msgstr "" #: indicator/metrics.cpp:49 indicator/metrics.cpp:51 msgid "No calls made today" msgstr "" #: indicator/metrics.cpp:50 #, qt-format msgid "Spent %1 minutes in calls today" msgstr "" #: indicator/textchannelobserver.cpp:225 msgid "Unlock your sim card and try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:227 msgid "Deactivate flight mode and try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:230 msgid "Try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:236 msgid "The message could not be sent" msgstr "" #: indicator/textchannelobserver.cpp:249 indicator/textchannelobserver.cpp:713 msgid "View message" msgstr "" #: indicator/textchannelobserver.cpp:295 msgid "New Group" msgstr "" #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:302 #, qt-format msgid "You joined group %1 " msgstr "" #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:306 #, qt-format msgid "You joined group %1" msgstr "" #: indicator/textchannelobserver.cpp:309 msgid "You joined a new group" msgstr "" #: indicator/textchannelobserver.cpp:328 msgid "View Group" msgstr "" #: indicator/textchannelobserver.cpp:367 indicator/ussdindicator.cpp:116 msgid "Ok" msgstr "" #: indicator/textchannelobserver.cpp:373 msgid "Save" msgstr "" #: indicator/textchannelobserver.cpp:468 msgid "Emergency Alert" msgstr "" #: indicator/textchannelobserver.cpp:471 msgid "Emergency Alert: Extreme" msgstr "" #: indicator/textchannelobserver.cpp:474 msgid "Emergency Alert: Severe" msgstr "" #: indicator/textchannelobserver.cpp:477 msgid "Emergency Alert: Notice" msgstr "" #: indicator/textchannelobserver.cpp:482 msgid "AMBER Alert" msgstr "" #: indicator/textchannelobserver.cpp:485 msgid "Alert" msgstr "" #: indicator/textchannelobserver.cpp:531 msgid "Show alert" msgstr "" #: indicator/textchannelobserver.cpp:604 #, qt-format msgid "Attachment: %1 image" msgid_plural "Attachments: %1 images" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:606 #, qt-format msgid "Attachment: %1 video" msgid_plural "Attachments: %1 videos" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:608 #, qt-format msgid "Attachment: %1 contact" msgid_plural "Attachments: %1 contacts" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:610 #, qt-format msgid "Attachment: %1 audio clip" msgid_plural "Attachments: %1 audio clips" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:612 #, qt-format msgid "Attachment: %1 file" msgid_plural "Attachments: %1 files" msgstr[0] "" msgstr[1] "" #. TRANSLATORS : message displayed when any error occurred while receiving a MMS (case when cellular-data is off, or any downloading issue). Notify that there was a message, the user can find more about it in the messaging-app. #: indicator/textchannelobserver.cpp:615 msgid "New MMS message" msgstr "" #. TRANSLATORS : %1 is the recipient name #: indicator/textchannelobserver.cpp:679 indicator/textchannelobserver.cpp:683 #, qt-format msgid "Message to group from %1" msgstr "" #: indicator/textchannelobserver.cpp:749 #, qt-format msgid "Message from %1" msgstr "" #: indicator/textchannelobserver.cpp:910 msgid "Please, select a SIM card:" msgstr "" #: indicator/ussdindicator.cpp:119 msgid "Reply" msgstr "" #: indicator/ussdindicator.cpp:142 msgid "Cancel" msgstr "" #: libtelephonyservice/callnotification.cpp:53 msgid "Conf call on hold" msgstr "" #: libtelephonyservice/callnotification.cpp:53 #, qt-format msgid "%1 call on hold" msgstr "" #: libtelephonyservice/callnotification.cpp:56 msgid "Conf call ended" msgstr "" #: libtelephonyservice/callnotification.cpp:56 #, qt-format msgid "%1 call ended" msgstr "" #: libtelephonyservice/callnotification.cpp:59 #, qt-format msgid "%1 call declined" msgstr "" #: libtelephonyservice/contactwatcher.cpp:157 msgid "Private Number" msgstr "" #: libtelephonyservice/contactwatcher.cpp:159 msgid "Unknown Number" msgstr "" telephony-service-0.5.3/po/ia.po000066400000000000000000000262401455543255600165550ustar00rootroot00000000000000# Interlingua translation for telephony-service # Copyright (c) 2015 Rosetta Contributors and Canonical Ltd 2015 # This file is distributed under the same license as the telephony-service package. # FIRST AUTHOR , 2015. # msgid "" msgstr "" "Project-Id-Version: telephony-service\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-12-16 17:03+0100\n" "PO-Revision-Date: 2015-05-17 11:09+0000\n" "Last-Translator: FULL NAME \n" "Language-Team: Interlingua \n" "Language: ia\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Launchpad-Export-Date: 2017-01-04 06:02+0000\n" "X-Generator: Launchpad (build 18298)\n" #: indicator/telephony-service-call.desktop.in:4 msgid "Phone Calls" msgstr "Appellos telephonic" #: indicator/telephony-service-sms.desktop.in:4 msgid "SMS" msgstr "SMS" #: approver/approver.cpp:66 msgid "Unknown caller" msgstr "Appellator incognite" #: approver/approver.cpp:94 msgid "I'm busy at the moment. I'll call later." msgstr "Io es occupate al momento. Io appellara plus tarde." #: approver/approver.cpp:95 msgid "I'm running late, on my way now." msgstr "Io es fluente in retardo, sur mi cammino ora." #: approver/approver.cpp:96 msgid "Please call me back later." msgstr "Per favor appella me retro plus tarde." #: approver/approver.cpp:457 #, qt-format msgid "On [%1]" msgstr "Activate [%1]" #: approver/approver.cpp:461 indicator/messagingmenu.cpp:414 msgid "Private number" msgstr "Numero private" #: approver/approver.cpp:464 indicator/messagingmenu.cpp:244 #: indicator/messagingmenu.cpp:418 indicator/textchannelobserver.cpp:640 msgid "Unknown number" msgstr "Numero incognite" #: approver/approver.cpp:470 approver/approver.cpp:485 msgid "Caller number is not available" msgstr "Le numero del appellante non es disponibile" #: approver/approver.cpp:476 msgid "Calling from private number" msgstr "Appello per un numero private" #: approver/approver.cpp:479 msgid "Calling from unknown number" msgstr "Appello per un numero incognite" #: approver/approver.cpp:482 #, qt-format msgid "Calling from %1" msgstr "Appello de %1" #: approver/approver.cpp:529 msgid "Hold + Answer" msgstr "Suspender + responder" #: approver/approver.cpp:530 msgid "Accept" msgstr "Acceptar" #: approver/approver.cpp:543 msgid "End + Answer" msgstr "Finir + responder" #: approver/approver.cpp:552 msgid "Decline" msgstr "Declinar" #: approver/approver.cpp:560 msgid "Message & decline" msgstr "Message & declination" #: approver/main.cpp:46 msgid "Telephony Service Approver" msgstr "Approbator del servicio de telephonia" #: indicator/authhandler.cpp:72 msgid "Authentication failed. Do you want to review your credentials?" msgstr "Authentication fallite. Desira tu revider tu credentiales?" #: indicator/authhandler.cpp:91 msgid "Yes" msgstr "Si" #: indicator/authhandler.cpp:94 msgid "No" msgstr "No" #: indicator/displaynamesettings.cpp:35 #, qt-format msgid "SIM %1" msgstr "SIM %1" #: indicator/main.cpp:53 msgid "Telephony Service Indicator" msgstr "Indicator del servicio de telephonia" #: indicator/messagingmenu.cpp:83 indicator/messagingmenu.cpp:87 msgid "Telephony Service" msgstr "Servicio de telephonia" #: indicator/messagingmenu.cpp:151 indicator/messagingmenu.cpp:293 #: indicator/messagingmenu.cpp:360 msgid "Send" msgstr "Mandar" #. TRANSLATORS : %1 is the group name and %2 is the recipient name #: indicator/messagingmenu.cpp:262 indicator/textchannelobserver.cpp:671 #: indicator/textchannelobserver.cpp:675 #, qt-format msgid "Message to %1 from %2" msgstr "Message a %1 ab %2" #. TRANSLATORS : %1 is the recipient name #: indicator/messagingmenu.cpp:265 indicator/messagingmenu.cpp:269 #, fuzzy, qt-format #| msgid "Message to group from %1" msgid "Message to the group from %1" msgstr "Message al gruppo per %1" #: indicator/messagingmenu.cpp:345 msgid "Call back" msgstr "Appellar retro" #: indicator/messagingmenu.cpp:350 #, fuzzy #| msgid "I missed your call - can you call me now?" msgid "Missed your call — can you call me now?" msgstr "Io ha perdite tu appello - pote tu appellar me ora?" #: indicator/messagingmenu.cpp:351 #, fuzzy #| msgid "I'm running late. I'm on my way." msgid "Running late. On my way." msgstr "Io es fluente in retardo. Io es sur mi cammino." #: indicator/messagingmenu.cpp:352 #, fuzzy #| msgid "I'm busy at the moment. I'll call you later." msgid "Busy at the moment. Will call you later." msgstr "Io es occupate al momento. Io appellara te plus tarde." #: indicator/messagingmenu.cpp:353 #, fuzzy #| msgid "I'll be 20 minutes late." msgid "I am 20 minutes late." msgstr "Io essera 20 minutas in retardo." #: indicator/messagingmenu.cpp:354 #, fuzzy #| msgid "Sorry, I'm still busy. I'll call you later." msgid "Still busy. Will call you later." msgstr "Displacente, io es ancora occupate. Io appellara te plus tarde." #: indicator/messagingmenu.cpp:409 #, qt-format msgid "%1 missed call" msgid_plural "%1 missed calls" msgstr[0] "%1 appello perdite" msgstr[1] "%1 appellos perdite" #: indicator/messagingmenu.cpp:492 msgid "Voicemail messages" msgstr "Messages vocal" #: indicator/messagingmenu.cpp:495 #, qt-format msgid "%1 voicemail message" msgid_plural "%1 voicemail messages" msgstr[0] "%1 message de posta vocal" msgstr[1] "%1 messages de posta vocal" #: indicator/messagingmenu.cpp:500 msgid "Voicemail" msgstr "Message vocal" #: indicator/metrics.cpp:42 #, qt-format msgid "%1 text messages sent today" msgstr "%1 messages de texto expedite hodie" #: indicator/metrics.cpp:43 msgid "No text messages sent today" msgstr "Necun messages de texto expedite hodie" #: indicator/metrics.cpp:44 #, qt-format msgid "%1 text messages received today" msgstr "%1 messages de texto recipite hodie" #: indicator/metrics.cpp:45 msgid "No text messages received today" msgstr "Necun messages de texto recipite hodie" #: indicator/metrics.cpp:46 #, qt-format msgid "%1 calls received today" msgstr "%1 appellos recipite hodie" #: indicator/metrics.cpp:47 msgid "No calls received today" msgstr "Necun appellos recipite hodie" #: indicator/metrics.cpp:48 #, qt-format msgid "%1 calls made today" msgstr "%1 appellos facite hodie" #: indicator/metrics.cpp:49 indicator/metrics.cpp:51 msgid "No calls made today" msgstr "Necun appellos facite hodie" #: indicator/metrics.cpp:50 #, qt-format msgid "Spent %1 minutes in calls today" msgstr "Pagate %1 minutas in appellos hodie" #: indicator/textchannelobserver.cpp:225 msgid "Unlock your sim card and try again from the messaging application." msgstr "Disbloca tu carta SIM e reproba ex le application de messages." #: indicator/textchannelobserver.cpp:227 msgid "Deactivate flight mode and try again from the messaging application." msgstr "Disactivar le modo volo et reprobar ex le application de messages." #: indicator/textchannelobserver.cpp:230 msgid "Try again from the messaging application." msgstr "Reprobar per le application de messages." #: indicator/textchannelobserver.cpp:236 msgid "The message could not be sent" msgstr "Le message non pote esser expedite" #: indicator/textchannelobserver.cpp:249 indicator/textchannelobserver.cpp:713 msgid "View message" msgstr "Vider le message" #: indicator/textchannelobserver.cpp:295 msgid "New Group" msgstr "Nove gruppo" #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:302 #, qt-format msgid "You joined group %1 " msgstr "Tu te ha aggregate al gruppo %1 " #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:306 #, qt-format msgid "You joined group %1" msgstr "Tu te ha aggregate al gruppo %1" #: indicator/textchannelobserver.cpp:309 msgid "You joined a new group" msgstr "Tu te ha aggregate a un gruppo nove" #: indicator/textchannelobserver.cpp:328 msgid "View Group" msgstr "Vider gruppo" #: indicator/textchannelobserver.cpp:367 indicator/ussdindicator.cpp:116 msgid "Ok" msgstr "OK" #: indicator/textchannelobserver.cpp:373 msgid "Save" msgstr "Salvar" #: indicator/textchannelobserver.cpp:468 msgid "Emergency Alert" msgstr "" #: indicator/textchannelobserver.cpp:471 msgid "Emergency Alert: Extreme" msgstr "" #: indicator/textchannelobserver.cpp:474 msgid "Emergency Alert: Severe" msgstr "" #: indicator/textchannelobserver.cpp:477 msgid "Emergency Alert: Notice" msgstr "" #: indicator/textchannelobserver.cpp:482 msgid "AMBER Alert" msgstr "" #: indicator/textchannelobserver.cpp:485 msgid "Alert" msgstr "" #: indicator/textchannelobserver.cpp:531 msgid "Show alert" msgstr "" #: indicator/textchannelobserver.cpp:604 #, qt-format msgid "Attachment: %1 image" msgid_plural "Attachments: %1 images" msgstr[0] "Alligato: %1 imagine" msgstr[1] "Alligatos: %1 imagines" #: indicator/textchannelobserver.cpp:606 #, qt-format msgid "Attachment: %1 video" msgid_plural "Attachments: %1 videos" msgstr[0] "Alligato: %1 video" msgstr[1] "Alligatos: %1 videos" #: indicator/textchannelobserver.cpp:608 #, qt-format msgid "Attachment: %1 contact" msgid_plural "Attachments: %1 contacts" msgstr[0] "Alligato: %1 contacto" msgstr[1] "Alligatos: %1 contactos" #: indicator/textchannelobserver.cpp:610 #, qt-format msgid "Attachment: %1 audio clip" msgid_plural "Attachments: %1 audio clips" msgstr[0] "Alligato: %1 audio clip" msgstr[1] "Alligatos: %1 audio clips" #: indicator/textchannelobserver.cpp:612 #, qt-format msgid "Attachment: %1 file" msgid_plural "Attachments: %1 files" msgstr[0] "Alligato: %1 file" msgstr[1] "Alligatos: %1 files" #. TRANSLATORS : message displayed when any error occurred while receiving a MMS (case when cellular-data is off, or any downloading issue). Notify that there was a message, the user can find more about it in the messaging-app. #: indicator/textchannelobserver.cpp:615 #, fuzzy #| msgid "View message" msgid "New MMS message" msgstr "Vider le message" #. TRANSLATORS : %1 is the recipient name #: indicator/textchannelobserver.cpp:679 indicator/textchannelobserver.cpp:683 #, qt-format msgid "Message to group from %1" msgstr "Message al gruppo per %1" #: indicator/textchannelobserver.cpp:749 #, qt-format msgid "Message from %1" msgstr "Message ex %1" #: indicator/textchannelobserver.cpp:910 msgid "Please, select a SIM card:" msgstr "Per favor, selige un carta SIM:" #: indicator/ussdindicator.cpp:119 msgid "Reply" msgstr "Responder" #: indicator/ussdindicator.cpp:142 msgid "Cancel" msgstr "Deler" #: libtelephonyservice/callnotification.cpp:53 msgid "Conf call on hold" msgstr "" #: libtelephonyservice/callnotification.cpp:53 #, qt-format msgid "%1 call on hold" msgstr "" #: libtelephonyservice/callnotification.cpp:56 msgid "Conf call ended" msgstr "" #: libtelephonyservice/callnotification.cpp:56 #, qt-format msgid "%1 call ended" msgstr "" #: libtelephonyservice/callnotification.cpp:59 #, qt-format msgid "%1 call declined" msgstr "" #: libtelephonyservice/contactwatcher.cpp:157 msgid "Private Number" msgstr "Numero private" #: libtelephonyservice/contactwatcher.cpp:159 msgid "Unknown Number" msgstr "Numero incognite" #, fuzzy #~| msgid "Telephony Service" #~ msgid "telephony-service-call" #~ msgstr "Servicio de telephonia" #, fuzzy #~| msgid "Telephony Service" #~ msgid "telephony-service-message" #~ msgstr "Servicio de telephonia" telephony-service-0.5.3/po/id.po000066400000000000000000000213141455543255600165550ustar00rootroot00000000000000# Indonesian translation for telephony-service # Copyright (c) 2015 Rosetta Contributors and Canonical Ltd 2015 # This file is distributed under the same license as the telephony-service package. # FIRST AUTHOR , 2015. # msgid "" msgstr "" "Project-Id-Version: telephony-service\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-12-16 17:03+0100\n" "PO-Revision-Date: 2023-12-06 00:23+0000\n" "Last-Translator: Reza Almanda \n" "Language-Team: Indonesian \n" "Language: id\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" "X-Generator: Weblate 5.3-dev\n" "X-Launchpad-Export-Date: 2017-01-04 06:02+0000\n" #: indicator/telephony-service-call.desktop.in:4 msgid "Phone Calls" msgstr "Panggilan Telepon" #: indicator/telephony-service-sms.desktop.in:4 msgid "SMS" msgstr "" #: approver/approver.cpp:66 msgid "Unknown caller" msgstr "" #: approver/approver.cpp:94 msgid "I'm busy at the moment. I'll call later." msgstr "" #: approver/approver.cpp:95 msgid "I'm running late, on my way now." msgstr "" #: approver/approver.cpp:96 msgid "Please call me back later." msgstr "" #: approver/approver.cpp:457 #, qt-format msgid "On [%1]" msgstr "" #: approver/approver.cpp:461 indicator/messagingmenu.cpp:414 msgid "Private number" msgstr "" #: approver/approver.cpp:464 indicator/messagingmenu.cpp:244 #: indicator/messagingmenu.cpp:418 indicator/textchannelobserver.cpp:640 msgid "Unknown number" msgstr "" #: approver/approver.cpp:470 approver/approver.cpp:485 msgid "Caller number is not available" msgstr "" #: approver/approver.cpp:476 msgid "Calling from private number" msgstr "" #: approver/approver.cpp:479 msgid "Calling from unknown number" msgstr "" #: approver/approver.cpp:482 #, qt-format msgid "Calling from %1" msgstr "" #: approver/approver.cpp:529 msgid "Hold + Answer" msgstr "" #: approver/approver.cpp:530 msgid "Accept" msgstr "" #: approver/approver.cpp:543 msgid "End + Answer" msgstr "" #: approver/approver.cpp:552 msgid "Decline" msgstr "" #: approver/approver.cpp:560 msgid "Message & decline" msgstr "" #: approver/main.cpp:46 msgid "Telephony Service Approver" msgstr "" #: indicator/authhandler.cpp:72 msgid "Authentication failed. Do you want to review your credentials?" msgstr "" #: indicator/authhandler.cpp:91 msgid "Yes" msgstr "" #: indicator/authhandler.cpp:94 msgid "No" msgstr "" #: indicator/displaynamesettings.cpp:35 #, qt-format msgid "SIM %1" msgstr "" #: indicator/main.cpp:53 msgid "Telephony Service Indicator" msgstr "" #: indicator/messagingmenu.cpp:83 indicator/messagingmenu.cpp:87 msgid "Telephony Service" msgstr "" #: indicator/messagingmenu.cpp:151 indicator/messagingmenu.cpp:293 #: indicator/messagingmenu.cpp:360 msgid "Send" msgstr "" #. TRANSLATORS : %1 is the group name and %2 is the recipient name #: indicator/messagingmenu.cpp:262 indicator/textchannelobserver.cpp:671 #: indicator/textchannelobserver.cpp:675 #, qt-format msgid "Message to %1 from %2" msgstr "" #. TRANSLATORS : %1 is the recipient name #: indicator/messagingmenu.cpp:265 indicator/messagingmenu.cpp:269 #, qt-format msgid "Message to the group from %1" msgstr "" #: indicator/messagingmenu.cpp:345 msgid "Call back" msgstr "" #: indicator/messagingmenu.cpp:350 msgid "Missed your call — can you call me now?" msgstr "" #: indicator/messagingmenu.cpp:351 msgid "Running late. On my way." msgstr "" #: indicator/messagingmenu.cpp:352 msgid "Busy at the moment. Will call you later." msgstr "" #: indicator/messagingmenu.cpp:353 msgid "I am 20 minutes late." msgstr "" #: indicator/messagingmenu.cpp:354 msgid "Still busy. Will call you later." msgstr "" #: indicator/messagingmenu.cpp:409 #, qt-format msgid "%1 missed call" msgid_plural "%1 missed calls" msgstr[0] "" msgstr[1] "" #: indicator/messagingmenu.cpp:492 msgid "Voicemail messages" msgstr "" #: indicator/messagingmenu.cpp:495 #, qt-format msgid "%1 voicemail message" msgid_plural "%1 voicemail messages" msgstr[0] "" msgstr[1] "" #: indicator/messagingmenu.cpp:500 msgid "Voicemail" msgstr "" #: indicator/metrics.cpp:42 #, qt-format msgid "%1 text messages sent today" msgstr "" #: indicator/metrics.cpp:43 msgid "No text messages sent today" msgstr "" #: indicator/metrics.cpp:44 #, qt-format msgid "%1 text messages received today" msgstr "" #: indicator/metrics.cpp:45 msgid "No text messages received today" msgstr "" #: indicator/metrics.cpp:46 #, qt-format msgid "%1 calls received today" msgstr "" #: indicator/metrics.cpp:47 msgid "No calls received today" msgstr "" #: indicator/metrics.cpp:48 #, qt-format msgid "%1 calls made today" msgstr "" #: indicator/metrics.cpp:49 indicator/metrics.cpp:51 msgid "No calls made today" msgstr "" #: indicator/metrics.cpp:50 #, qt-format msgid "Spent %1 minutes in calls today" msgstr "" #: indicator/textchannelobserver.cpp:225 msgid "Unlock your sim card and try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:227 msgid "Deactivate flight mode and try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:230 msgid "Try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:236 msgid "The message could not be sent" msgstr "" #: indicator/textchannelobserver.cpp:249 indicator/textchannelobserver.cpp:713 msgid "View message" msgstr "" #: indicator/textchannelobserver.cpp:295 msgid "New Group" msgstr "" #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:302 #, qt-format msgid "You joined group %1 " msgstr "" #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:306 #, qt-format msgid "You joined group %1" msgstr "" #: indicator/textchannelobserver.cpp:309 msgid "You joined a new group" msgstr "" #: indicator/textchannelobserver.cpp:328 msgid "View Group" msgstr "" #: indicator/textchannelobserver.cpp:367 indicator/ussdindicator.cpp:116 msgid "Ok" msgstr "" #: indicator/textchannelobserver.cpp:373 msgid "Save" msgstr "" #: indicator/textchannelobserver.cpp:468 msgid "Emergency Alert" msgstr "" #: indicator/textchannelobserver.cpp:471 msgid "Emergency Alert: Extreme" msgstr "" #: indicator/textchannelobserver.cpp:474 msgid "Emergency Alert: Severe" msgstr "" #: indicator/textchannelobserver.cpp:477 msgid "Emergency Alert: Notice" msgstr "" #: indicator/textchannelobserver.cpp:482 msgid "AMBER Alert" msgstr "" #: indicator/textchannelobserver.cpp:485 msgid "Alert" msgstr "" #: indicator/textchannelobserver.cpp:531 msgid "Show alert" msgstr "" #: indicator/textchannelobserver.cpp:604 #, qt-format msgid "Attachment: %1 image" msgid_plural "Attachments: %1 images" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:606 #, qt-format msgid "Attachment: %1 video" msgid_plural "Attachments: %1 videos" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:608 #, qt-format msgid "Attachment: %1 contact" msgid_plural "Attachments: %1 contacts" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:610 #, qt-format msgid "Attachment: %1 audio clip" msgid_plural "Attachments: %1 audio clips" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:612 #, qt-format msgid "Attachment: %1 file" msgid_plural "Attachments: %1 files" msgstr[0] "" msgstr[1] "" #. TRANSLATORS : message displayed when any error occurred while receiving a MMS (case when cellular-data is off, or any downloading issue). Notify that there was a message, the user can find more about it in the messaging-app. #: indicator/textchannelobserver.cpp:615 msgid "New MMS message" msgstr "" #. TRANSLATORS : %1 is the recipient name #: indicator/textchannelobserver.cpp:679 indicator/textchannelobserver.cpp:683 #, qt-format msgid "Message to group from %1" msgstr "" #: indicator/textchannelobserver.cpp:749 #, qt-format msgid "Message from %1" msgstr "" #: indicator/textchannelobserver.cpp:910 msgid "Please, select a SIM card:" msgstr "" #: indicator/ussdindicator.cpp:119 msgid "Reply" msgstr "" #: indicator/ussdindicator.cpp:142 msgid "Cancel" msgstr "" #: libtelephonyservice/callnotification.cpp:53 msgid "Conf call on hold" msgstr "" #: libtelephonyservice/callnotification.cpp:53 #, qt-format msgid "%1 call on hold" msgstr "" #: libtelephonyservice/callnotification.cpp:56 msgid "Conf call ended" msgstr "" #: libtelephonyservice/callnotification.cpp:56 #, qt-format msgid "%1 call ended" msgstr "" #: libtelephonyservice/callnotification.cpp:59 #, qt-format msgid "%1 call declined" msgstr "" #: libtelephonyservice/contactwatcher.cpp:157 msgid "Private Number" msgstr "" #: libtelephonyservice/contactwatcher.cpp:159 msgid "Unknown Number" msgstr "" telephony-service-0.5.3/po/io.po000066400000000000000000000211431455543255600165700ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-12-16 17:03+0100\n" "PO-Revision-Date: 2023-01-05 11:07+0000\n" "Last-Translator: Anonymous \n" "Language-Team: Ido \n" "Language: io\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Generator: Weblate 4.15.1-dev\n" #: indicator/telephony-service-call.desktop.in:4 msgid "Phone Calls" msgstr "" #: indicator/telephony-service-sms.desktop.in:4 msgid "SMS" msgstr "" #: approver/approver.cpp:66 msgid "Unknown caller" msgstr "" #: approver/approver.cpp:94 msgid "I'm busy at the moment. I'll call later." msgstr "" #: approver/approver.cpp:95 msgid "I'm running late, on my way now." msgstr "" #: approver/approver.cpp:96 msgid "Please call me back later." msgstr "" #: approver/approver.cpp:457 #, qt-format msgid "On [%1]" msgstr "" #: approver/approver.cpp:461 indicator/messagingmenu.cpp:414 msgid "Private number" msgstr "" #: approver/approver.cpp:464 indicator/messagingmenu.cpp:244 #: indicator/messagingmenu.cpp:418 indicator/textchannelobserver.cpp:640 msgid "Unknown number" msgstr "" #: approver/approver.cpp:470 approver/approver.cpp:485 msgid "Caller number is not available" msgstr "" #: approver/approver.cpp:476 msgid "Calling from private number" msgstr "" #: approver/approver.cpp:479 msgid "Calling from unknown number" msgstr "" #: approver/approver.cpp:482 #, qt-format msgid "Calling from %1" msgstr "" #: approver/approver.cpp:529 msgid "Hold + Answer" msgstr "" #: approver/approver.cpp:530 msgid "Accept" msgstr "" #: approver/approver.cpp:543 msgid "End + Answer" msgstr "" #: approver/approver.cpp:552 msgid "Decline" msgstr "" #: approver/approver.cpp:560 msgid "Message & decline" msgstr "" #: approver/main.cpp:46 msgid "Telephony Service Approver" msgstr "" #: indicator/authhandler.cpp:72 msgid "Authentication failed. Do you want to review your credentials?" msgstr "" #: indicator/authhandler.cpp:91 msgid "Yes" msgstr "" #: indicator/authhandler.cpp:94 msgid "No" msgstr "" #: indicator/displaynamesettings.cpp:35 #, qt-format msgid "SIM %1" msgstr "" #: indicator/main.cpp:53 msgid "Telephony Service Indicator" msgstr "" #: indicator/messagingmenu.cpp:83 indicator/messagingmenu.cpp:87 msgid "Telephony Service" msgstr "" #: indicator/messagingmenu.cpp:151 indicator/messagingmenu.cpp:293 #: indicator/messagingmenu.cpp:360 msgid "Send" msgstr "" #. TRANSLATORS : %1 is the group name and %2 is the recipient name #: indicator/messagingmenu.cpp:262 indicator/textchannelobserver.cpp:671 #: indicator/textchannelobserver.cpp:675 #, qt-format msgid "Message to %1 from %2" msgstr "" #. TRANSLATORS : %1 is the recipient name #: indicator/messagingmenu.cpp:265 indicator/messagingmenu.cpp:269 #, qt-format msgid "Message to the group from %1" msgstr "" #: indicator/messagingmenu.cpp:345 msgid "Call back" msgstr "" #: indicator/messagingmenu.cpp:350 msgid "Missed your call — can you call me now?" msgstr "" #: indicator/messagingmenu.cpp:351 msgid "Running late. On my way." msgstr "" #: indicator/messagingmenu.cpp:352 msgid "Busy at the moment. Will call you later." msgstr "" #: indicator/messagingmenu.cpp:353 msgid "I am 20 minutes late." msgstr "" #: indicator/messagingmenu.cpp:354 msgid "Still busy. Will call you later." msgstr "" #: indicator/messagingmenu.cpp:409 #, qt-format msgid "%1 missed call" msgid_plural "%1 missed calls" msgstr[0] "" msgstr[1] "" #: indicator/messagingmenu.cpp:492 msgid "Voicemail messages" msgstr "" #: indicator/messagingmenu.cpp:495 #, qt-format msgid "%1 voicemail message" msgid_plural "%1 voicemail messages" msgstr[0] "" msgstr[1] "" #: indicator/messagingmenu.cpp:500 msgid "Voicemail" msgstr "" #: indicator/metrics.cpp:42 #, qt-format msgid "%1 text messages sent today" msgstr "" #: indicator/metrics.cpp:43 msgid "No text messages sent today" msgstr "" #: indicator/metrics.cpp:44 #, qt-format msgid "%1 text messages received today" msgstr "" #: indicator/metrics.cpp:45 msgid "No text messages received today" msgstr "" #: indicator/metrics.cpp:46 #, qt-format msgid "%1 calls received today" msgstr "" #: indicator/metrics.cpp:47 msgid "No calls received today" msgstr "" #: indicator/metrics.cpp:48 #, qt-format msgid "%1 calls made today" msgstr "" #: indicator/metrics.cpp:49 indicator/metrics.cpp:51 msgid "No calls made today" msgstr "" #: indicator/metrics.cpp:50 #, qt-format msgid "Spent %1 minutes in calls today" msgstr "" #: indicator/textchannelobserver.cpp:225 msgid "Unlock your sim card and try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:227 msgid "Deactivate flight mode and try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:230 msgid "Try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:236 msgid "The message could not be sent" msgstr "" #: indicator/textchannelobserver.cpp:249 indicator/textchannelobserver.cpp:713 msgid "View message" msgstr "" #: indicator/textchannelobserver.cpp:295 msgid "New Group" msgstr "" #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:302 #, qt-format msgid "You joined group %1 " msgstr "" #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:306 #, qt-format msgid "You joined group %1" msgstr "" #: indicator/textchannelobserver.cpp:309 msgid "You joined a new group" msgstr "" #: indicator/textchannelobserver.cpp:328 msgid "View Group" msgstr "" #: indicator/textchannelobserver.cpp:367 indicator/ussdindicator.cpp:116 msgid "Ok" msgstr "" #: indicator/textchannelobserver.cpp:373 msgid "Save" msgstr "" #: indicator/textchannelobserver.cpp:468 msgid "Emergency Alert" msgstr "" #: indicator/textchannelobserver.cpp:471 msgid "Emergency Alert: Extreme" msgstr "" #: indicator/textchannelobserver.cpp:474 msgid "Emergency Alert: Severe" msgstr "" #: indicator/textchannelobserver.cpp:477 msgid "Emergency Alert: Notice" msgstr "" #: indicator/textchannelobserver.cpp:482 msgid "AMBER Alert" msgstr "" #: indicator/textchannelobserver.cpp:485 msgid "Alert" msgstr "" #: indicator/textchannelobserver.cpp:531 msgid "Show alert" msgstr "" #: indicator/textchannelobserver.cpp:604 #, qt-format msgid "Attachment: %1 image" msgid_plural "Attachments: %1 images" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:606 #, qt-format msgid "Attachment: %1 video" msgid_plural "Attachments: %1 videos" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:608 #, qt-format msgid "Attachment: %1 contact" msgid_plural "Attachments: %1 contacts" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:610 #, qt-format msgid "Attachment: %1 audio clip" msgid_plural "Attachments: %1 audio clips" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:612 #, qt-format msgid "Attachment: %1 file" msgid_plural "Attachments: %1 files" msgstr[0] "" msgstr[1] "" #. TRANSLATORS : message displayed when any error occurred while receiving a MMS (case when cellular-data is off, or any downloading issue). Notify that there was a message, the user can find more about it in the messaging-app. #: indicator/textchannelobserver.cpp:615 msgid "New MMS message" msgstr "" #. TRANSLATORS : %1 is the recipient name #: indicator/textchannelobserver.cpp:679 indicator/textchannelobserver.cpp:683 #, qt-format msgid "Message to group from %1" msgstr "" #: indicator/textchannelobserver.cpp:749 #, qt-format msgid "Message from %1" msgstr "" #: indicator/textchannelobserver.cpp:910 msgid "Please, select a SIM card:" msgstr "" #: indicator/ussdindicator.cpp:119 msgid "Reply" msgstr "" #: indicator/ussdindicator.cpp:142 #, fuzzy msgid "Cancel" msgstr "Cancel" #: libtelephonyservice/callnotification.cpp:53 msgid "Conf call on hold" msgstr "" #: libtelephonyservice/callnotification.cpp:53 #, qt-format msgid "%1 call on hold" msgstr "" #: libtelephonyservice/callnotification.cpp:56 msgid "Conf call ended" msgstr "" #: libtelephonyservice/callnotification.cpp:56 #, qt-format msgid "%1 call ended" msgstr "" #: libtelephonyservice/callnotification.cpp:59 #, qt-format msgid "%1 call declined" msgstr "" #: libtelephonyservice/contactwatcher.cpp:157 msgid "Private Number" msgstr "" #: libtelephonyservice/contactwatcher.cpp:159 msgid "Unknown Number" msgstr "" telephony-service-0.5.3/po/is.po000066400000000000000000000243571455543255600166060ustar00rootroot00000000000000# Icelandic translation for telephony-service # Copyright (c) 2014 Rosetta Contributors and Canonical Ltd 2014 # This file is distributed under the same license as the telephony-service package. # FIRST AUTHOR , 2014. # msgid "" msgstr "" "Project-Id-Version: telephony-service\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-12-16 17:03+0100\n" "PO-Revision-Date: 2023-03-02 17:38+0000\n" "Last-Translator: Allan Nordhøy \n" "Language-Team: Icelandic \n" "Language: is\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Generator: Weblate 4.16.2-dev\n" "X-Launchpad-Export-Date: 2017-01-04 06:02+0000\n" #: indicator/telephony-service-call.desktop.in:4 msgid "Phone Calls" msgstr "Símtöl" #: indicator/telephony-service-sms.desktop.in:4 msgid "SMS" msgstr "SMS" #: approver/approver.cpp:66 msgid "Unknown caller" msgstr "Óþekktur símnotandi" #: approver/approver.cpp:94 msgid "I'm busy at the moment. I'll call later." msgstr "" #: approver/approver.cpp:95 msgid "I'm running late, on my way now." msgstr "" #: approver/approver.cpp:96 msgid "Please call me back later." msgstr "" #: approver/approver.cpp:457 #, qt-format msgid "On [%1]" msgstr "" #: approver/approver.cpp:461 indicator/messagingmenu.cpp:414 msgid "Private number" msgstr "Leyninúmer" #: approver/approver.cpp:464 indicator/messagingmenu.cpp:244 #: indicator/messagingmenu.cpp:418 indicator/textchannelobserver.cpp:640 msgid "Unknown number" msgstr "Óþekkt númer" #: approver/approver.cpp:470 approver/approver.cpp:485 msgid "Caller number is not available" msgstr "Númer símnotanda ekki tiltækt" #: approver/approver.cpp:476 msgid "Calling from private number" msgstr "Hringir úr leyninúmeri" #: approver/approver.cpp:479 msgid "Calling from unknown number" msgstr "Hringir úr óþekktu númeri" #: approver/approver.cpp:482 #, qt-format msgid "Calling from %1" msgstr "Hringir úr %1" #: approver/approver.cpp:529 msgid "Hold + Answer" msgstr "Halda + Svara" #: approver/approver.cpp:530 msgid "Accept" msgstr "Samþykkja" #: approver/approver.cpp:543 msgid "End + Answer" msgstr "" #: approver/approver.cpp:552 msgid "Decline" msgstr "Hafna" #: approver/approver.cpp:560 msgid "Message & decline" msgstr "" #: approver/main.cpp:46 msgid "Telephony Service Approver" msgstr "Umsjón símaþjónustu" #: indicator/authhandler.cpp:72 msgid "Authentication failed. Do you want to review your credentials?" msgstr "" #: indicator/authhandler.cpp:91 msgid "Yes" msgstr "" #: indicator/authhandler.cpp:94 msgid "No" msgstr "" #: indicator/displaynamesettings.cpp:35 #, qt-format msgid "SIM %1" msgstr "SIM %1" #: indicator/main.cpp:53 msgid "Telephony Service Indicator" msgstr "Vaktari símaþjónustu" #: indicator/messagingmenu.cpp:83 indicator/messagingmenu.cpp:87 msgid "Telephony Service" msgstr "Símaþjónusta" #: indicator/messagingmenu.cpp:151 indicator/messagingmenu.cpp:293 #: indicator/messagingmenu.cpp:360 msgid "Send" msgstr "" #. TRANSLATORS : %1 is the group name and %2 is the recipient name #: indicator/messagingmenu.cpp:262 indicator/textchannelobserver.cpp:671 #: indicator/textchannelobserver.cpp:675 #, qt-format msgid "Message to %1 from %2" msgstr "" #. TRANSLATORS : %1 is the recipient name #: indicator/messagingmenu.cpp:265 indicator/messagingmenu.cpp:269 #, fuzzy, qt-format #| msgid "Message from %1" msgid "Message to the group from %1" msgstr "Skilaboð frá %1" #: indicator/messagingmenu.cpp:345 msgid "Call back" msgstr "" #: indicator/messagingmenu.cpp:350 #, fuzzy #| msgid "I missed your call - can you call me now?" msgid "Missed your call — can you call me now?" msgstr "Ég missti af því þegar þú hringdir - geturðu hringt núna?" #: indicator/messagingmenu.cpp:351 #, fuzzy #| msgid "I'm running late. I'm on my way." msgid "Running late. On my way." msgstr "Er að verða of seinn. Kem innan skamms." #: indicator/messagingmenu.cpp:352 #, fuzzy #| msgid "I'm busy at the moment. I'll call you later." msgid "Busy at the moment. Will call you later." msgstr "Ég er upptekinn í augnablikinu. Hringi í þig síðar." #: indicator/messagingmenu.cpp:353 #, fuzzy #| msgid "I'll be 20 minutes late." msgid "I am 20 minutes late." msgstr "Ég verð 20 mínútum of seinn." #: indicator/messagingmenu.cpp:354 #, fuzzy #| msgid "Sorry, I'm still busy. I'll call you later." msgid "Still busy. Will call you later." msgstr "Ég er ennþá upptekinn. Hringi í þig síðar." #: indicator/messagingmenu.cpp:409 #, qt-format msgid "%1 missed call" msgid_plural "%1 missed calls" msgstr[0] "%1 ósvarað símtal" msgstr[1] "%1 ósvöruð símtöl" #: indicator/messagingmenu.cpp:492 msgid "Voicemail messages" msgstr "Talskilaboð" #: indicator/messagingmenu.cpp:495 #, qt-format msgid "%1 voicemail message" msgid_plural "%1 voicemail messages" msgstr[0] "%1 talskilaboð" msgstr[1] "%1 talskilaboð" #: indicator/messagingmenu.cpp:500 msgid "Voicemail" msgstr "" #: indicator/metrics.cpp:42 #, qt-format msgid "%1 text messages sent today" msgstr "%1 textaskilaboð send í dag" #: indicator/metrics.cpp:43 msgid "No text messages sent today" msgstr "Engin textaskilaboð send í dag" #: indicator/metrics.cpp:44 #, qt-format msgid "%1 text messages received today" msgstr "%1 textaskilaboð móttekin í dag" #: indicator/metrics.cpp:45 msgid "No text messages received today" msgstr "Engin símtöl móttekin í dag" #: indicator/metrics.cpp:46 #, qt-format msgid "%1 calls received today" msgstr "%1 símtöl móttekin í dag" #: indicator/metrics.cpp:47 msgid "No calls received today" msgstr "Engin textaskilaboð móttekin í dag" #: indicator/metrics.cpp:48 #, qt-format msgid "%1 calls made today" msgstr "%1 símtöl héðan í dag" #: indicator/metrics.cpp:49 indicator/metrics.cpp:51 msgid "No calls made today" msgstr "Engin símtöl héðan í dag" #: indicator/metrics.cpp:50 #, qt-format msgid "Spent %1 minutes in calls today" msgstr "Alls %1 mínútur í símtöl í dag" #: indicator/textchannelobserver.cpp:225 msgid "Unlock your sim card and try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:227 msgid "Deactivate flight mode and try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:230 msgid "Try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:236 msgid "The message could not be sent" msgstr "" #: indicator/textchannelobserver.cpp:249 indicator/textchannelobserver.cpp:713 msgid "View message" msgstr "Skoða skilaboð" #: indicator/textchannelobserver.cpp:295 msgid "New Group" msgstr "" #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:302 #, qt-format msgid "You joined group %1 " msgstr "" #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:306 #, qt-format msgid "You joined group %1" msgstr "" #: indicator/textchannelobserver.cpp:309 msgid "You joined a new group" msgstr "" #: indicator/textchannelobserver.cpp:328 msgid "View Group" msgstr "" #: indicator/textchannelobserver.cpp:367 indicator/ussdindicator.cpp:116 msgid "Ok" msgstr "Í lagi" #: indicator/textchannelobserver.cpp:373 msgid "Save" msgstr "Vista" #: indicator/textchannelobserver.cpp:468 msgid "Emergency Alert" msgstr "" #: indicator/textchannelobserver.cpp:471 msgid "Emergency Alert: Extreme" msgstr "" #: indicator/textchannelobserver.cpp:474 msgid "Emergency Alert: Severe" msgstr "" #: indicator/textchannelobserver.cpp:477 msgid "Emergency Alert: Notice" msgstr "" #: indicator/textchannelobserver.cpp:482 msgid "AMBER Alert" msgstr "" #: indicator/textchannelobserver.cpp:485 msgid "Alert" msgstr "" #: indicator/textchannelobserver.cpp:531 msgid "Show alert" msgstr "" #: indicator/textchannelobserver.cpp:604 #, qt-format msgid "Attachment: %1 image" msgid_plural "Attachments: %1 images" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:606 #, qt-format msgid "Attachment: %1 video" msgid_plural "Attachments: %1 videos" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:608 #, qt-format msgid "Attachment: %1 contact" msgid_plural "Attachments: %1 contacts" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:610 #, qt-format msgid "Attachment: %1 audio clip" msgid_plural "Attachments: %1 audio clips" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:612 #, qt-format msgid "Attachment: %1 file" msgid_plural "Attachments: %1 files" msgstr[0] "" msgstr[1] "" #. TRANSLATORS : message displayed when any error occurred while receiving a MMS (case when cellular-data is off, or any downloading issue). Notify that there was a message, the user can find more about it in the messaging-app. #: indicator/textchannelobserver.cpp:615 #, fuzzy #| msgid "View message" msgid "New MMS message" msgstr "Skoða skilaboð" #. TRANSLATORS : %1 is the recipient name #: indicator/textchannelobserver.cpp:679 indicator/textchannelobserver.cpp:683 #, qt-format msgid "Message to group from %1" msgstr "" #: indicator/textchannelobserver.cpp:749 #, qt-format msgid "Message from %1" msgstr "Skilaboð frá %1" #: indicator/textchannelobserver.cpp:910 msgid "Please, select a SIM card:" msgstr "" #: indicator/ussdindicator.cpp:119 msgid "Reply" msgstr "Svara" #: indicator/ussdindicator.cpp:142 msgid "Cancel" msgstr "Hætta við" #: libtelephonyservice/callnotification.cpp:53 msgid "Conf call on hold" msgstr "" #: libtelephonyservice/callnotification.cpp:53 #, qt-format msgid "%1 call on hold" msgstr "" #: libtelephonyservice/callnotification.cpp:56 msgid "Conf call ended" msgstr "" #: libtelephonyservice/callnotification.cpp:56 #, qt-format msgid "%1 call ended" msgstr "" #: libtelephonyservice/callnotification.cpp:59 #, qt-format msgid "%1 call declined" msgstr "" #: libtelephonyservice/contactwatcher.cpp:157 msgid "Private Number" msgstr "Leyninúmer" #: libtelephonyservice/contactwatcher.cpp:159 msgid "Unknown Number" msgstr "Óþekkt númer" #, fuzzy #~| msgid "Telephony Service" #~ msgid "telephony-service-call" #~ msgstr "Símaþjónusta" #, fuzzy #~| msgid "Telephony Service" #~ msgid "telephony-service-message" #~ msgstr "Símaþjónusta" telephony-service-0.5.3/po/it.po000066400000000000000000000266241455543255600166060ustar00rootroot00000000000000# Italian translation for telephony-service # Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013 # This file is distributed under the same license as the telephony-service package. # FIRST AUTHOR , 2013. # msgid "" msgstr "" "Project-Id-Version: telephony-service\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-12-16 17:03+0100\n" "PO-Revision-Date: 2023-04-02 03:46+0000\n" "Last-Translator: Sylke Vicious \n" "Language-Team: Italian \n" "Language: it\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Generator: Weblate 4.17-dev\n" "X-Launchpad-Export-Date: 2017-01-04 06:02+0000\n" #: indicator/telephony-service-call.desktop.in:4 msgid "Phone Calls" msgstr "Chiamate telefoniche" #: indicator/telephony-service-sms.desktop.in:4 msgid "SMS" msgstr "SMS" #: approver/approver.cpp:66 msgid "Unknown caller" msgstr "Chiamante sconosciuto" #: approver/approver.cpp:94 msgid "I'm busy at the moment. I'll call later." msgstr "Sono momentaneamente occupato/a. Richiamerò più tardi." #: approver/approver.cpp:95 msgid "I'm running late, on my way now." msgstr "Sono in ritardo, sto arrivando." #: approver/approver.cpp:96 msgid "Please call me back later." msgstr "Per cortesia richiamami più tardi." #: approver/approver.cpp:457 #, qt-format msgid "On [%1]" msgstr "Su [%1]" #: approver/approver.cpp:461 indicator/messagingmenu.cpp:414 msgid "Private number" msgstr "Numero privato" #: approver/approver.cpp:464 indicator/messagingmenu.cpp:244 #: indicator/messagingmenu.cpp:418 indicator/textchannelobserver.cpp:640 msgid "Unknown number" msgstr "Numero sconosciuto" #: approver/approver.cpp:470 approver/approver.cpp:485 msgid "Caller number is not available" msgstr "Numero chiamante non disponibile" #: approver/approver.cpp:476 msgid "Calling from private number" msgstr "Chiamata da numero privato" #: approver/approver.cpp:479 msgid "Calling from unknown number" msgstr "Chiamata da numero sconosciuto" #: approver/approver.cpp:482 #, qt-format msgid "Calling from %1" msgstr "Chiamata da %1" #: approver/approver.cpp:529 msgid "Hold + Answer" msgstr "Tenere premuto + risposta" #: approver/approver.cpp:530 msgid "Accept" msgstr "Accetta" #: approver/approver.cpp:543 msgid "End + Answer" msgstr "Termina + Rispondi" #: approver/approver.cpp:552 msgid "Decline" msgstr "Rifiuta" #: approver/approver.cpp:560 msgid "Message & decline" msgstr "Messaggio e rifiuta" #: approver/main.cpp:46 msgid "Telephony Service Approver" msgstr "Servizio di telefonia" #: indicator/authhandler.cpp:72 msgid "Authentication failed. Do you want to review your credentials?" msgstr "Autenticazione non riuscita. Verificare le proprie credenziali?" #: indicator/authhandler.cpp:91 msgid "Yes" msgstr "Si" #: indicator/authhandler.cpp:94 msgid "No" msgstr "No" #: indicator/displaynamesettings.cpp:35 #, qt-format msgid "SIM %1" msgstr "SIM %1" #: indicator/main.cpp:53 msgid "Telephony Service Indicator" msgstr "Indicatore servizio di telefonia" #: indicator/messagingmenu.cpp:83 indicator/messagingmenu.cpp:87 msgid "Telephony Service" msgstr "Servizio di telefonia" #: indicator/messagingmenu.cpp:151 indicator/messagingmenu.cpp:293 #: indicator/messagingmenu.cpp:360 msgid "Send" msgstr "Invia" #. TRANSLATORS : %1 is the group name and %2 is the recipient name #: indicator/messagingmenu.cpp:262 indicator/textchannelobserver.cpp:671 #: indicator/textchannelobserver.cpp:675 #, qt-format msgid "Message to %1 from %2" msgstr "Messaggio in %1 da %2" #. TRANSLATORS : %1 is the recipient name #: indicator/messagingmenu.cpp:265 indicator/messagingmenu.cpp:269 #, qt-format msgid "Message to the group from %1" msgstr "Messaggio al gruppo da %1" #: indicator/messagingmenu.cpp:345 msgid "Call back" msgstr "Richiama" #: indicator/messagingmenu.cpp:350 msgid "Missed your call — can you call me now?" msgstr "Ho perso la tua chiamata — Puoi richiamarmi ora?" #: indicator/messagingmenu.cpp:351 msgid "Running late. On my way." msgstr "Sono in ritardo. Sto per arrivare." #: indicator/messagingmenu.cpp:352 msgid "Busy at the moment. Will call you later." msgstr "Sono momentaneamente occupato/a. Ti richiamerò più tardi." #: indicator/messagingmenu.cpp:353 msgid "I am 20 minutes late." msgstr "Sono in ritardo di 20 minuti." #: indicator/messagingmenu.cpp:354 msgid "Still busy. Will call you later." msgstr "Sono ancora occupato/a. Ti richiamerò più tardi." #: indicator/messagingmenu.cpp:409 #, qt-format msgid "%1 missed call" msgid_plural "%1 missed calls" msgstr[0] "%1 chiamata persa" msgstr[1] "%1 chiamate perse" #: indicator/messagingmenu.cpp:492 msgid "Voicemail messages" msgstr "Messaggi in segreteria" #: indicator/messagingmenu.cpp:495 #, qt-format msgid "%1 voicemail message" msgid_plural "%1 voicemail messages" msgstr[0] "%1 messaggio in segreteria" msgstr[1] "%1 messaggi in segreteria" #: indicator/messagingmenu.cpp:500 msgid "Voicemail" msgstr "Segreteria" #: indicator/metrics.cpp:42 #, qt-format msgid "%1 text messages sent today" msgstr "Messaggi di testo inviati oggi %1" #: indicator/metrics.cpp:43 msgid "No text messages sent today" msgstr "Nessun messaggio di testo inviato oggi" #: indicator/metrics.cpp:44 #, qt-format msgid "%1 text messages received today" msgstr "Messaggi di testo ricevuti oggi %1" #: indicator/metrics.cpp:45 msgid "No text messages received today" msgstr "Nessun messaggio di testo ricevuto oggi" #: indicator/metrics.cpp:46 #, qt-format msgid "%1 calls received today" msgstr "Chiamate ricevute oggi %1" #: indicator/metrics.cpp:47 msgid "No calls received today" msgstr "Nessuna chiamata ricevuta oggi" #: indicator/metrics.cpp:48 #, qt-format msgid "%1 calls made today" msgstr "Chiamate fatte oggi %1" #: indicator/metrics.cpp:49 indicator/metrics.cpp:51 msgid "No calls made today" msgstr "Nessuna chiamata effettuata oggi" #: indicator/metrics.cpp:50 #, qt-format msgid "Spent %1 minutes in calls today" msgstr "Effettuati %1 minuti di chiamate oggi" #: indicator/textchannelobserver.cpp:225 msgid "Unlock your sim card and try again from the messaging application." msgstr "Sbloccare la scheda SIM e riprovare dall'app dei messaggi." #: indicator/textchannelobserver.cpp:227 msgid "Deactivate flight mode and try again from the messaging application." msgstr "Disattivare la modalità aereo e riprovare dall'app dei messaggi." #: indicator/textchannelobserver.cpp:230 msgid "Try again from the messaging application." msgstr "Riprivare dall'app dei messaggi." #: indicator/textchannelobserver.cpp:236 msgid "The message could not be sent" msgstr "Impossibile inviare il messaggio" #: indicator/textchannelobserver.cpp:249 indicator/textchannelobserver.cpp:713 msgid "View message" msgstr "Vedi messaggio" #: indicator/textchannelobserver.cpp:295 msgid "New Group" msgstr "Nuovo gruppo" #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:302 #, qt-format msgid "You joined group %1 " msgstr "Ti sei unito al gruppo %1 " #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:306 #, qt-format msgid "You joined group %1" msgstr "Ti sei unito al gruppo %1" #: indicator/textchannelobserver.cpp:309 msgid "You joined a new group" msgstr "Ti sei unito a un gruppo" #: indicator/textchannelobserver.cpp:328 msgid "View Group" msgstr "Vedi gruppo" #: indicator/textchannelobserver.cpp:367 indicator/ussdindicator.cpp:116 msgid "Ok" msgstr "Ok" #: indicator/textchannelobserver.cpp:373 msgid "Save" msgstr "Salva" #: indicator/textchannelobserver.cpp:468 msgid "Emergency Alert" msgstr "Allerta di Emergenza" #: indicator/textchannelobserver.cpp:471 msgid "Emergency Alert: Extreme" msgstr "Allerta di Emergenza: Estrema" #: indicator/textchannelobserver.cpp:474 msgid "Emergency Alert: Severe" msgstr "Allerta di Emergenza: Importante" #: indicator/textchannelobserver.cpp:477 msgid "Emergency Alert: Notice" msgstr "Allerta di Emergenza: Notifica" #: indicator/textchannelobserver.cpp:482 msgid "AMBER Alert" msgstr "Allerta AMBER" #: indicator/textchannelobserver.cpp:485 msgid "Alert" msgstr "Allerta" #: indicator/textchannelobserver.cpp:531 msgid "Show alert" msgstr "Mostra allerta" #: indicator/textchannelobserver.cpp:604 #, qt-format msgid "Attachment: %1 image" msgid_plural "Attachments: %1 images" msgstr[0] "Allegata: %1 immagine" msgstr[1] "Allegate: %1 immagini" #: indicator/textchannelobserver.cpp:606 #, qt-format msgid "Attachment: %1 video" msgid_plural "Attachments: %1 videos" msgstr[0] "Allegato: %1 video" msgstr[1] "Allegati: %1 video" #: indicator/textchannelobserver.cpp:608 #, qt-format msgid "Attachment: %1 contact" msgid_plural "Attachments: %1 contacts" msgstr[0] "Allegato: %1 contatto" msgstr[1] "Allegati: %1 contatti" #: indicator/textchannelobserver.cpp:610 #, qt-format msgid "Attachment: %1 audio clip" msgid_plural "Attachments: %1 audio clips" msgstr[0] "Allegato: %1 clip audio" msgstr[1] "Allegati: %1 clip audio" #: indicator/textchannelobserver.cpp:612 #, qt-format msgid "Attachment: %1 file" msgid_plural "Attachments: %1 files" msgstr[0] "Allegato: %1 file" msgstr[1] "Allegati: %1 file" #. TRANSLATORS : message displayed when any error occurred while receiving a MMS (case when cellular-data is off, or any downloading issue). Notify that there was a message, the user can find more about it in the messaging-app. #: indicator/textchannelobserver.cpp:615 msgid "New MMS message" msgstr "Nuovo messaggio MMS" #. TRANSLATORS : %1 is the recipient name #: indicator/textchannelobserver.cpp:679 indicator/textchannelobserver.cpp:683 #, qt-format msgid "Message to group from %1" msgstr "Messaggio al gruppo da %1" #: indicator/textchannelobserver.cpp:749 #, qt-format msgid "Message from %1" msgstr "Messaggio da %1" #: indicator/textchannelobserver.cpp:910 msgid "Please, select a SIM card:" msgstr "Selezionare una scheda SIM:" #: indicator/ussdindicator.cpp:119 msgid "Reply" msgstr "Rispondi" #: indicator/ussdindicator.cpp:142 msgid "Cancel" msgstr "Annulla" #: libtelephonyservice/callnotification.cpp:53 msgid "Conf call on hold" msgstr "Chiamata conferenza in attesa" #: libtelephonyservice/callnotification.cpp:53 #, qt-format msgid "%1 call on hold" msgstr "%1 chiamata in attesa" #: libtelephonyservice/callnotification.cpp:56 msgid "Conf call ended" msgstr "Chiamata conferenza terminata" #: libtelephonyservice/callnotification.cpp:56 #, qt-format msgid "%1 call ended" msgstr "%1 chiamata terminata" #: libtelephonyservice/callnotification.cpp:59 #, qt-format msgid "%1 call declined" msgstr "%1 chiamata rifiutata" #: libtelephonyservice/contactwatcher.cpp:157 msgid "Private Number" msgstr "Numero privato" #: libtelephonyservice/contactwatcher.cpp:159 msgid "Unknown Number" msgstr "Numero sconosciuto" #~ msgid "telephony-service-call" #~ msgstr "Servizio di Telefonia Chiamate" #~ msgid "telephony-service-message" #~ msgstr "Servizio di Telefonia Messaggi" #~ msgid "" #~ "Oops, there has been an error with the MMS system and this message could " #~ "not be retrieved. Please ensure Cellular Data is ON and MMS settings are " #~ "correct, then ask the sender to try again." #~ msgstr "" #~ "Oops, c'è stato un errore con il sistema MMS e questo messaggio non ha " #~ "potuto essere stato ricevuto. Assicurati che i dati mobili siano attivi e " #~ "le impostazioni MMS corrette, poi chiedi al mittente di riprovare." telephony-service-0.5.3/po/it_CARES.po000066400000000000000000000207451455543255600175210ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR Canonical Ltd. # This file is distributed under the same license as the telephony-service package. # FIRST AUTHOR , YEAR. # msgid "" msgstr "" "Project-Id-Version: telephony-service\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-12-16 17:03+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: Automatically generated\n" "Language-Team: none\n" "Language: it_CARES\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" #: indicator/telephony-service-call.desktop.in:4 msgid "Phone Calls" msgstr "" #: indicator/telephony-service-sms.desktop.in:4 msgid "SMS" msgstr "" #: approver/approver.cpp:66 msgid "Unknown caller" msgstr "" #: approver/approver.cpp:94 msgid "I'm busy at the moment. I'll call later." msgstr "" #: approver/approver.cpp:95 msgid "I'm running late, on my way now." msgstr "" #: approver/approver.cpp:96 msgid "Please call me back later." msgstr "" #: approver/approver.cpp:457 #, qt-format msgid "On [%1]" msgstr "" #: approver/approver.cpp:461 indicator/messagingmenu.cpp:414 msgid "Private number" msgstr "" #: approver/approver.cpp:464 indicator/messagingmenu.cpp:244 #: indicator/messagingmenu.cpp:418 indicator/textchannelobserver.cpp:640 msgid "Unknown number" msgstr "" #: approver/approver.cpp:470 approver/approver.cpp:485 msgid "Caller number is not available" msgstr "" #: approver/approver.cpp:476 msgid "Calling from private number" msgstr "" #: approver/approver.cpp:479 msgid "Calling from unknown number" msgstr "" #: approver/approver.cpp:482 #, qt-format msgid "Calling from %1" msgstr "" #: approver/approver.cpp:529 msgid "Hold + Answer" msgstr "" #: approver/approver.cpp:530 msgid "Accept" msgstr "" #: approver/approver.cpp:543 msgid "End + Answer" msgstr "" #: approver/approver.cpp:552 msgid "Decline" msgstr "" #: approver/approver.cpp:560 msgid "Message & decline" msgstr "" #: approver/main.cpp:46 msgid "Telephony Service Approver" msgstr "" #: indicator/authhandler.cpp:72 msgid "Authentication failed. Do you want to review your credentials?" msgstr "" #: indicator/authhandler.cpp:91 msgid "Yes" msgstr "" #: indicator/authhandler.cpp:94 msgid "No" msgstr "" #: indicator/displaynamesettings.cpp:35 #, qt-format msgid "SIM %1" msgstr "" #: indicator/main.cpp:53 msgid "Telephony Service Indicator" msgstr "" #: indicator/messagingmenu.cpp:83 indicator/messagingmenu.cpp:87 msgid "Telephony Service" msgstr "" #: indicator/messagingmenu.cpp:151 indicator/messagingmenu.cpp:293 #: indicator/messagingmenu.cpp:360 msgid "Send" msgstr "" #. TRANSLATORS : %1 is the group name and %2 is the recipient name #: indicator/messagingmenu.cpp:262 indicator/textchannelobserver.cpp:671 #: indicator/textchannelobserver.cpp:675 #, qt-format msgid "Message to %1 from %2" msgstr "" #. TRANSLATORS : %1 is the recipient name #: indicator/messagingmenu.cpp:265 indicator/messagingmenu.cpp:269 #, qt-format msgid "Message to the group from %1" msgstr "" #: indicator/messagingmenu.cpp:345 msgid "Call back" msgstr "" #: indicator/messagingmenu.cpp:350 msgid "Missed your call — can you call me now?" msgstr "" #: indicator/messagingmenu.cpp:351 msgid "Running late. On my way." msgstr "" #: indicator/messagingmenu.cpp:352 msgid "Busy at the moment. Will call you later." msgstr "" #: indicator/messagingmenu.cpp:353 msgid "I am 20 minutes late." msgstr "" #: indicator/messagingmenu.cpp:354 msgid "Still busy. Will call you later." msgstr "" #: indicator/messagingmenu.cpp:409 #, qt-format msgid "%1 missed call" msgid_plural "%1 missed calls" msgstr[0] "" msgstr[1] "" #: indicator/messagingmenu.cpp:492 msgid "Voicemail messages" msgstr "" #: indicator/messagingmenu.cpp:495 #, qt-format msgid "%1 voicemail message" msgid_plural "%1 voicemail messages" msgstr[0] "" msgstr[1] "" #: indicator/messagingmenu.cpp:500 msgid "Voicemail" msgstr "" #: indicator/metrics.cpp:42 #, qt-format msgid "%1 text messages sent today" msgstr "" #: indicator/metrics.cpp:43 msgid "No text messages sent today" msgstr "" #: indicator/metrics.cpp:44 #, qt-format msgid "%1 text messages received today" msgstr "" #: indicator/metrics.cpp:45 msgid "No text messages received today" msgstr "" #: indicator/metrics.cpp:46 #, qt-format msgid "%1 calls received today" msgstr "" #: indicator/metrics.cpp:47 msgid "No calls received today" msgstr "" #: indicator/metrics.cpp:48 #, qt-format msgid "%1 calls made today" msgstr "" #: indicator/metrics.cpp:49 indicator/metrics.cpp:51 msgid "No calls made today" msgstr "" #: indicator/metrics.cpp:50 #, qt-format msgid "Spent %1 minutes in calls today" msgstr "" #: indicator/textchannelobserver.cpp:225 msgid "Unlock your sim card and try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:227 msgid "Deactivate flight mode and try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:230 msgid "Try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:236 msgid "The message could not be sent" msgstr "" #: indicator/textchannelobserver.cpp:249 indicator/textchannelobserver.cpp:713 msgid "View message" msgstr "" #: indicator/textchannelobserver.cpp:295 msgid "New Group" msgstr "" #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:302 #, qt-format msgid "You joined group %1 " msgstr "" #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:306 #, qt-format msgid "You joined group %1" msgstr "" #: indicator/textchannelobserver.cpp:309 msgid "You joined a new group" msgstr "" #: indicator/textchannelobserver.cpp:328 msgid "View Group" msgstr "" #: indicator/textchannelobserver.cpp:367 indicator/ussdindicator.cpp:116 msgid "Ok" msgstr "" #: indicator/textchannelobserver.cpp:373 msgid "Save" msgstr "" #: indicator/textchannelobserver.cpp:468 msgid "Emergency Alert" msgstr "" #: indicator/textchannelobserver.cpp:471 msgid "Emergency Alert: Extreme" msgstr "" #: indicator/textchannelobserver.cpp:474 msgid "Emergency Alert: Severe" msgstr "" #: indicator/textchannelobserver.cpp:477 msgid "Emergency Alert: Notice" msgstr "" #: indicator/textchannelobserver.cpp:482 msgid "AMBER Alert" msgstr "" #: indicator/textchannelobserver.cpp:485 msgid "Alert" msgstr "" #: indicator/textchannelobserver.cpp:531 msgid "Show alert" msgstr "" #: indicator/textchannelobserver.cpp:604 #, qt-format msgid "Attachment: %1 image" msgid_plural "Attachments: %1 images" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:606 #, qt-format msgid "Attachment: %1 video" msgid_plural "Attachments: %1 videos" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:608 #, qt-format msgid "Attachment: %1 contact" msgid_plural "Attachments: %1 contacts" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:610 #, qt-format msgid "Attachment: %1 audio clip" msgid_plural "Attachments: %1 audio clips" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:612 #, qt-format msgid "Attachment: %1 file" msgid_plural "Attachments: %1 files" msgstr[0] "" msgstr[1] "" #. TRANSLATORS : message displayed when any error occurred while receiving a MMS (case when cellular-data is off, or any downloading issue). Notify that there was a message, the user can find more about it in the messaging-app. #: indicator/textchannelobserver.cpp:615 msgid "New MMS message" msgstr "" #. TRANSLATORS : %1 is the recipient name #: indicator/textchannelobserver.cpp:679 indicator/textchannelobserver.cpp:683 #, qt-format msgid "Message to group from %1" msgstr "" #: indicator/textchannelobserver.cpp:749 #, qt-format msgid "Message from %1" msgstr "" #: indicator/textchannelobserver.cpp:910 msgid "Please, select a SIM card:" msgstr "" #: indicator/ussdindicator.cpp:119 msgid "Reply" msgstr "" #: indicator/ussdindicator.cpp:142 msgid "Cancel" msgstr "" #: libtelephonyservice/callnotification.cpp:53 msgid "Conf call on hold" msgstr "" #: libtelephonyservice/callnotification.cpp:53 #, qt-format msgid "%1 call on hold" msgstr "" #: libtelephonyservice/callnotification.cpp:56 msgid "Conf call ended" msgstr "" #: libtelephonyservice/callnotification.cpp:56 #, qt-format msgid "%1 call ended" msgstr "" #: libtelephonyservice/callnotification.cpp:59 #, qt-format msgid "%1 call declined" msgstr "" #: libtelephonyservice/contactwatcher.cpp:157 msgid "Private Number" msgstr "" #: libtelephonyservice/contactwatcher.cpp:159 msgid "Unknown Number" msgstr "" telephony-service-0.5.3/po/ja.po000066400000000000000000000250261455543255600165570ustar00rootroot00000000000000# Japanese translation for telephony-service # Copyright (c) 2014 Rosetta Contributors and Canonical Ltd 2014 # This file is distributed under the same license as the telephony-service package. # FIRST AUTHOR , 2014. # msgid "" msgstr "" "Project-Id-Version: telephony-service\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-12-16 17:03+0100\n" "PO-Revision-Date: 2023-08-28 00:55+0000\n" "Last-Translator: NPL \n" "Language-Team: Japanese \n" "Language: ja\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" "X-Generator: Weblate 5.0.1-dev\n" "X-Launchpad-Export-Date: 2017-01-04 06:02+0000\n" #: indicator/telephony-service-call.desktop.in:4 msgid "Phone Calls" msgstr "電話" #: indicator/telephony-service-sms.desktop.in:4 msgid "SMS" msgstr "SMS" #: approver/approver.cpp:66 msgid "Unknown caller" msgstr "不明な発信者" #: approver/approver.cpp:94 msgid "I'm busy at the moment. I'll call later." msgstr "" #: approver/approver.cpp:95 msgid "I'm running late, on my way now." msgstr "" #: approver/approver.cpp:96 msgid "Please call me back later." msgstr "" #: approver/approver.cpp:457 #, qt-format msgid "On [%1]" msgstr "" #: approver/approver.cpp:461 indicator/messagingmenu.cpp:414 msgid "Private number" msgstr "内線番号" #: approver/approver.cpp:464 indicator/messagingmenu.cpp:244 #: indicator/messagingmenu.cpp:418 indicator/textchannelobserver.cpp:640 msgid "Unknown number" msgstr "不明な番号" #: approver/approver.cpp:470 approver/approver.cpp:485 msgid "Caller number is not available" msgstr "その電話番号は利用できません" #: approver/approver.cpp:476 msgid "Calling from private number" msgstr "内線番号から着信中" #: approver/approver.cpp:479 msgid "Calling from unknown number" msgstr "不明な番号から着信中" #: approver/approver.cpp:482 #, qt-format msgid "Calling from %1" msgstr "%1から着信中" #: approver/approver.cpp:529 msgid "Hold + Answer" msgstr "保留して応答" #: approver/approver.cpp:530 msgid "Accept" msgstr "応答" #: approver/approver.cpp:543 msgid "End + Answer" msgstr "" #: approver/approver.cpp:552 msgid "Decline" msgstr "終了" #: approver/approver.cpp:560 msgid "Message & decline" msgstr "" #: approver/main.cpp:46 msgid "Telephony Service Approver" msgstr "Telephony Service Approver" #: indicator/authhandler.cpp:72 msgid "Authentication failed. Do you want to review your credentials?" msgstr "" #: indicator/authhandler.cpp:91 msgid "Yes" msgstr "はい" #: indicator/authhandler.cpp:94 msgid "No" msgstr "いいえ" #: indicator/displaynamesettings.cpp:35 #, qt-format msgid "SIM %1" msgstr "SIM %1" #: indicator/main.cpp:53 msgid "Telephony Service Indicator" msgstr "Telephony Service Indicator" #: indicator/messagingmenu.cpp:83 indicator/messagingmenu.cpp:87 msgid "Telephony Service" msgstr "Telephony Service" #: indicator/messagingmenu.cpp:151 indicator/messagingmenu.cpp:293 #: indicator/messagingmenu.cpp:360 msgid "Send" msgstr "送信" #. TRANSLATORS : %1 is the group name and %2 is the recipient name #: indicator/messagingmenu.cpp:262 indicator/textchannelobserver.cpp:671 #: indicator/textchannelobserver.cpp:675 #, qt-format msgid "Message to %1 from %2" msgstr "" #. TRANSLATORS : %1 is the recipient name #: indicator/messagingmenu.cpp:265 indicator/messagingmenu.cpp:269 #, fuzzy, qt-format #| msgid "Message from %1" msgid "Message to the group from %1" msgstr "%1からのメッセージ" #: indicator/messagingmenu.cpp:345 msgid "Call back" msgstr "折り返し電話" #: indicator/messagingmenu.cpp:350 #, fuzzy #| msgid "I missed your call - can you call me now?" msgid "Missed your call — can you call me now?" msgstr "電話をとれませんでした。今からかけてもらっていいですか?" #: indicator/messagingmenu.cpp:351 #, fuzzy #| msgid "I'm running late. I'm on my way." msgid "Running late. On my way." msgstr "遅れています。今向かっているところです。" #: indicator/messagingmenu.cpp:352 #, fuzzy #| msgid "I'm busy at the moment. I'll call you later." msgid "Busy at the moment. Will call you later." msgstr "今忙しいので、あとで電話します。" #: indicator/messagingmenu.cpp:353 #, fuzzy #| msgid "I'll be 20 minutes late." msgid "I am 20 minutes late." msgstr "20分ぐらい遅れます。" #: indicator/messagingmenu.cpp:354 #, fuzzy #| msgid "Sorry, I'm still busy. I'll call you later." msgid "Still busy. Will call you later." msgstr "すみません、まだ忙しいので、あとからかけなおします。" #: indicator/messagingmenu.cpp:409 #, qt-format msgid "%1 missed call" msgid_plural "%1 missed calls" msgstr[0] "%1件の不在着信" #: indicator/messagingmenu.cpp:492 msgid "Voicemail messages" msgstr "ボイスメールメッセージ" #: indicator/messagingmenu.cpp:495 #, qt-format msgid "%1 voicemail message" msgid_plural "%1 voicemail messages" msgstr[0] "%1件のボイスメール" #: indicator/messagingmenu.cpp:500 msgid "Voicemail" msgstr "ボイスメール" #: indicator/metrics.cpp:42 #, qt-format msgid "%1 text messages sent today" msgstr "本日、%1件のメッセージ送信" #: indicator/metrics.cpp:43 msgid "No text messages sent today" msgstr "本日のメッセージの送信なし" #: indicator/metrics.cpp:44 #, qt-format msgid "%1 text messages received today" msgstr "本日、%1件のメッセージ受信" #: indicator/metrics.cpp:45 msgid "No text messages received today" msgstr "本日のメッセージの受信なし" #: indicator/metrics.cpp:46 #, qt-format msgid "%1 calls received today" msgstr "本日、%1件の着信" #: indicator/metrics.cpp:47 msgid "No calls received today" msgstr "本日の着信なし" #: indicator/metrics.cpp:48 #, qt-format msgid "%1 calls made today" msgstr "本日、%1件の発信" #: indicator/metrics.cpp:49 indicator/metrics.cpp:51 msgid "No calls made today" msgstr "本日の発信なし" #: indicator/metrics.cpp:50 #, qt-format msgid "Spent %1 minutes in calls today" msgstr "本日、%1分間の通話" #: indicator/textchannelobserver.cpp:225 msgid "Unlock your sim card and try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:227 msgid "Deactivate flight mode and try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:230 msgid "Try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:236 msgid "The message could not be sent" msgstr "" #: indicator/textchannelobserver.cpp:249 indicator/textchannelobserver.cpp:713 msgid "View message" msgstr "メッセージを表示する" #: indicator/textchannelobserver.cpp:295 msgid "New Group" msgstr "" #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:302 #, qt-format msgid "You joined group %1 " msgstr "グループ%1に参加しました " #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:306 #, qt-format msgid "You joined group %1" msgstr "グループ%1に参加しました" #: indicator/textchannelobserver.cpp:309 msgid "You joined a new group" msgstr "新しいグループに参加しました" #: indicator/textchannelobserver.cpp:328 msgid "View Group" msgstr "" #: indicator/textchannelobserver.cpp:367 indicator/ussdindicator.cpp:116 msgid "Ok" msgstr "OK" #: indicator/textchannelobserver.cpp:373 msgid "Save" msgstr "保存" #: indicator/textchannelobserver.cpp:468 msgid "Emergency Alert" msgstr "" #: indicator/textchannelobserver.cpp:471 msgid "Emergency Alert: Extreme" msgstr "" #: indicator/textchannelobserver.cpp:474 msgid "Emergency Alert: Severe" msgstr "" #: indicator/textchannelobserver.cpp:477 msgid "Emergency Alert: Notice" msgstr "" #: indicator/textchannelobserver.cpp:482 msgid "AMBER Alert" msgstr "" #: indicator/textchannelobserver.cpp:485 msgid "Alert" msgstr "" #: indicator/textchannelobserver.cpp:531 msgid "Show alert" msgstr "" #: indicator/textchannelobserver.cpp:604 #, qt-format msgid "Attachment: %1 image" msgid_plural "Attachments: %1 images" msgstr[0] "添付:%1個の画像" #: indicator/textchannelobserver.cpp:606 #, qt-format msgid "Attachment: %1 video" msgid_plural "Attachments: %1 videos" msgstr[0] "添付:%1個の動画" #: indicator/textchannelobserver.cpp:608 #, qt-format msgid "Attachment: %1 contact" msgid_plural "Attachments: %1 contacts" msgstr[0] "添付:%1件の連絡先" #: indicator/textchannelobserver.cpp:610 #, qt-format msgid "Attachment: %1 audio clip" msgid_plural "Attachments: %1 audio clips" msgstr[0] "添付: %1 個の録音" #: indicator/textchannelobserver.cpp:612 #, qt-format msgid "Attachment: %1 file" msgid_plural "Attachments: %1 files" msgstr[0] "添付:%1個のファイル" #. TRANSLATORS : message displayed when any error occurred while receiving a MMS (case when cellular-data is off, or any downloading issue). Notify that there was a message, the user can find more about it in the messaging-app. #: indicator/textchannelobserver.cpp:615 #, fuzzy #| msgid "View message" msgid "New MMS message" msgstr "メッセージを表示する" #. TRANSLATORS : %1 is the recipient name #: indicator/textchannelobserver.cpp:679 indicator/textchannelobserver.cpp:683 #, qt-format msgid "Message to group from %1" msgstr "" #: indicator/textchannelobserver.cpp:749 #, qt-format msgid "Message from %1" msgstr "%1からのメッセージ" #: indicator/textchannelobserver.cpp:910 msgid "Please, select a SIM card:" msgstr "" #: indicator/ussdindicator.cpp:119 msgid "Reply" msgstr "返信" #: indicator/ussdindicator.cpp:142 msgid "Cancel" msgstr "キャンセル" #: libtelephonyservice/callnotification.cpp:53 msgid "Conf call on hold" msgstr "" #: libtelephonyservice/callnotification.cpp:53 #, qt-format msgid "%1 call on hold" msgstr "" #: libtelephonyservice/callnotification.cpp:56 msgid "Conf call ended" msgstr "" #: libtelephonyservice/callnotification.cpp:56 #, qt-format msgid "%1 call ended" msgstr "" #: libtelephonyservice/callnotification.cpp:59 #, qt-format msgid "%1 call declined" msgstr "" #: libtelephonyservice/contactwatcher.cpp:157 msgid "Private Number" msgstr "内線番号" #: libtelephonyservice/contactwatcher.cpp:159 msgid "Unknown Number" msgstr "非通知番号" #, fuzzy #~| msgid "Telephony Service" #~ msgid "telephony-service-call" #~ msgstr "Telephony Service" #, fuzzy #~| msgid "Telephony Service" #~ msgid "telephony-service-message" #~ msgstr "Telephony Service" telephony-service-0.5.3/po/jbo.po000066400000000000000000000211431455543255600167330ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-12-16 17:03+0100\n" "PO-Revision-Date: 2023-01-05 11:07+0000\n" "Last-Translator: Anonymous \n" "Language-Team: Lojban \n" "Language: jbo\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" "X-Generator: Weblate 4.15.1-dev\n" #: indicator/telephony-service-call.desktop.in:4 msgid "Phone Calls" msgstr "" #: indicator/telephony-service-sms.desktop.in:4 msgid "SMS" msgstr "" #: approver/approver.cpp:66 msgid "Unknown caller" msgstr "" #: approver/approver.cpp:94 msgid "I'm busy at the moment. I'll call later." msgstr "" #: approver/approver.cpp:95 msgid "I'm running late, on my way now." msgstr "" #: approver/approver.cpp:96 msgid "Please call me back later." msgstr "" #: approver/approver.cpp:457 #, qt-format msgid "On [%1]" msgstr "" #: approver/approver.cpp:461 indicator/messagingmenu.cpp:414 msgid "Private number" msgstr "" #: approver/approver.cpp:464 indicator/messagingmenu.cpp:244 #: indicator/messagingmenu.cpp:418 indicator/textchannelobserver.cpp:640 msgid "Unknown number" msgstr "" #: approver/approver.cpp:470 approver/approver.cpp:485 msgid "Caller number is not available" msgstr "" #: approver/approver.cpp:476 msgid "Calling from private number" msgstr "" #: approver/approver.cpp:479 msgid "Calling from unknown number" msgstr "" #: approver/approver.cpp:482 #, qt-format msgid "Calling from %1" msgstr "" #: approver/approver.cpp:529 msgid "Hold + Answer" msgstr "" #: approver/approver.cpp:530 msgid "Accept" msgstr "" #: approver/approver.cpp:543 msgid "End + Answer" msgstr "" #: approver/approver.cpp:552 msgid "Decline" msgstr "" #: approver/approver.cpp:560 msgid "Message & decline" msgstr "" #: approver/main.cpp:46 msgid "Telephony Service Approver" msgstr "" #: indicator/authhandler.cpp:72 msgid "Authentication failed. Do you want to review your credentials?" msgstr "" #: indicator/authhandler.cpp:91 msgid "Yes" msgstr "" #: indicator/authhandler.cpp:94 msgid "No" msgstr "" #: indicator/displaynamesettings.cpp:35 #, qt-format msgid "SIM %1" msgstr "" #: indicator/main.cpp:53 msgid "Telephony Service Indicator" msgstr "" #: indicator/messagingmenu.cpp:83 indicator/messagingmenu.cpp:87 msgid "Telephony Service" msgstr "" #: indicator/messagingmenu.cpp:151 indicator/messagingmenu.cpp:293 #: indicator/messagingmenu.cpp:360 msgid "Send" msgstr "" #. TRANSLATORS : %1 is the group name and %2 is the recipient name #: indicator/messagingmenu.cpp:262 indicator/textchannelobserver.cpp:671 #: indicator/textchannelobserver.cpp:675 #, qt-format msgid "Message to %1 from %2" msgstr "" #. TRANSLATORS : %1 is the recipient name #: indicator/messagingmenu.cpp:265 indicator/messagingmenu.cpp:269 #, qt-format msgid "Message to the group from %1" msgstr "" #: indicator/messagingmenu.cpp:345 msgid "Call back" msgstr "" #: indicator/messagingmenu.cpp:350 msgid "Missed your call — can you call me now?" msgstr "" #: indicator/messagingmenu.cpp:351 msgid "Running late. On my way." msgstr "" #: indicator/messagingmenu.cpp:352 msgid "Busy at the moment. Will call you later." msgstr "" #: indicator/messagingmenu.cpp:353 msgid "I am 20 minutes late." msgstr "" #: indicator/messagingmenu.cpp:354 msgid "Still busy. Will call you later." msgstr "" #: indicator/messagingmenu.cpp:409 #, qt-format msgid "%1 missed call" msgid_plural "%1 missed calls" msgstr[0] "" msgstr[1] "" #: indicator/messagingmenu.cpp:492 msgid "Voicemail messages" msgstr "" #: indicator/messagingmenu.cpp:495 #, qt-format msgid "%1 voicemail message" msgid_plural "%1 voicemail messages" msgstr[0] "" msgstr[1] "" #: indicator/messagingmenu.cpp:500 msgid "Voicemail" msgstr "" #: indicator/metrics.cpp:42 #, qt-format msgid "%1 text messages sent today" msgstr "" #: indicator/metrics.cpp:43 msgid "No text messages sent today" msgstr "" #: indicator/metrics.cpp:44 #, qt-format msgid "%1 text messages received today" msgstr "" #: indicator/metrics.cpp:45 msgid "No text messages received today" msgstr "" #: indicator/metrics.cpp:46 #, qt-format msgid "%1 calls received today" msgstr "" #: indicator/metrics.cpp:47 msgid "No calls received today" msgstr "" #: indicator/metrics.cpp:48 #, qt-format msgid "%1 calls made today" msgstr "" #: indicator/metrics.cpp:49 indicator/metrics.cpp:51 msgid "No calls made today" msgstr "" #: indicator/metrics.cpp:50 #, qt-format msgid "Spent %1 minutes in calls today" msgstr "" #: indicator/textchannelobserver.cpp:225 msgid "Unlock your sim card and try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:227 msgid "Deactivate flight mode and try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:230 msgid "Try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:236 msgid "The message could not be sent" msgstr "" #: indicator/textchannelobserver.cpp:249 indicator/textchannelobserver.cpp:713 msgid "View message" msgstr "" #: indicator/textchannelobserver.cpp:295 msgid "New Group" msgstr "" #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:302 #, qt-format msgid "You joined group %1 " msgstr "" #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:306 #, qt-format msgid "You joined group %1" msgstr "" #: indicator/textchannelobserver.cpp:309 msgid "You joined a new group" msgstr "" #: indicator/textchannelobserver.cpp:328 msgid "View Group" msgstr "" #: indicator/textchannelobserver.cpp:367 indicator/ussdindicator.cpp:116 msgid "Ok" msgstr "" #: indicator/textchannelobserver.cpp:373 msgid "Save" msgstr "" #: indicator/textchannelobserver.cpp:468 msgid "Emergency Alert" msgstr "" #: indicator/textchannelobserver.cpp:471 msgid "Emergency Alert: Extreme" msgstr "" #: indicator/textchannelobserver.cpp:474 msgid "Emergency Alert: Severe" msgstr "" #: indicator/textchannelobserver.cpp:477 msgid "Emergency Alert: Notice" msgstr "" #: indicator/textchannelobserver.cpp:482 msgid "AMBER Alert" msgstr "" #: indicator/textchannelobserver.cpp:485 msgid "Alert" msgstr "" #: indicator/textchannelobserver.cpp:531 msgid "Show alert" msgstr "" #: indicator/textchannelobserver.cpp:604 #, qt-format msgid "Attachment: %1 image" msgid_plural "Attachments: %1 images" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:606 #, qt-format msgid "Attachment: %1 video" msgid_plural "Attachments: %1 videos" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:608 #, qt-format msgid "Attachment: %1 contact" msgid_plural "Attachments: %1 contacts" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:610 #, qt-format msgid "Attachment: %1 audio clip" msgid_plural "Attachments: %1 audio clips" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:612 #, qt-format msgid "Attachment: %1 file" msgid_plural "Attachments: %1 files" msgstr[0] "" msgstr[1] "" #. TRANSLATORS : message displayed when any error occurred while receiving a MMS (case when cellular-data is off, or any downloading issue). Notify that there was a message, the user can find more about it in the messaging-app. #: indicator/textchannelobserver.cpp:615 msgid "New MMS message" msgstr "" #. TRANSLATORS : %1 is the recipient name #: indicator/textchannelobserver.cpp:679 indicator/textchannelobserver.cpp:683 #, qt-format msgid "Message to group from %1" msgstr "" #: indicator/textchannelobserver.cpp:749 #, qt-format msgid "Message from %1" msgstr "" #: indicator/textchannelobserver.cpp:910 msgid "Please, select a SIM card:" msgstr "" #: indicator/ussdindicator.cpp:119 msgid "Reply" msgstr "" #: indicator/ussdindicator.cpp:142 #, fuzzy msgid "Cancel" msgstr "Cancel" #: libtelephonyservice/callnotification.cpp:53 msgid "Conf call on hold" msgstr "" #: libtelephonyservice/callnotification.cpp:53 #, qt-format msgid "%1 call on hold" msgstr "" #: libtelephonyservice/callnotification.cpp:56 msgid "Conf call ended" msgstr "" #: libtelephonyservice/callnotification.cpp:56 #, qt-format msgid "%1 call ended" msgstr "" #: libtelephonyservice/callnotification.cpp:59 #, qt-format msgid "%1 call declined" msgstr "" #: libtelephonyservice/contactwatcher.cpp:157 msgid "Private Number" msgstr "" #: libtelephonyservice/contactwatcher.cpp:159 msgid "Unknown Number" msgstr "" telephony-service-0.5.3/po/ka.po000066400000000000000000000216151455543255600165600ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-12-16 17:03+0100\n" "PO-Revision-Date: 2023-04-13 05:14+0000\n" "Last-Translator: Temuri Doghonadze \n" "Language-Team: Georgian \n" "Language: ka\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Generator: Weblate 4.17-dev\n" #: indicator/telephony-service-call.desktop.in:4 msgid "Phone Calls" msgstr "" #: indicator/telephony-service-sms.desktop.in:4 msgid "SMS" msgstr "" #: approver/approver.cpp:66 msgid "Unknown caller" msgstr "" #: approver/approver.cpp:94 msgid "I'm busy at the moment. I'll call later." msgstr "" #: approver/approver.cpp:95 msgid "I'm running late, on my way now." msgstr "" #: approver/approver.cpp:96 msgid "Please call me back later." msgstr "" #: approver/approver.cpp:457 #, qt-format msgid "On [%1]" msgstr "" #: approver/approver.cpp:461 indicator/messagingmenu.cpp:414 msgid "Private number" msgstr "კონფიდენციალური ნომერი" #: approver/approver.cpp:464 indicator/messagingmenu.cpp:244 #: indicator/messagingmenu.cpp:418 indicator/textchannelobserver.cpp:640 msgid "Unknown number" msgstr "უცნობი ნომერი" #: approver/approver.cpp:470 approver/approver.cpp:485 msgid "Caller number is not available" msgstr "" #: approver/approver.cpp:476 msgid "Calling from private number" msgstr "" #: approver/approver.cpp:479 msgid "Calling from unknown number" msgstr "" #: approver/approver.cpp:482 #, qt-format msgid "Calling from %1" msgstr "" #: approver/approver.cpp:529 msgid "Hold + Answer" msgstr "" #: approver/approver.cpp:530 msgid "Accept" msgstr "დასტური" #: approver/approver.cpp:543 msgid "End + Answer" msgstr "" #: approver/approver.cpp:552 msgid "Decline" msgstr "" #: approver/approver.cpp:560 msgid "Message & decline" msgstr "" #: approver/main.cpp:46 msgid "Telephony Service Approver" msgstr "" #: indicator/authhandler.cpp:72 msgid "Authentication failed. Do you want to review your credentials?" msgstr "" #: indicator/authhandler.cpp:91 msgid "Yes" msgstr "დიახ" #: indicator/authhandler.cpp:94 msgid "No" msgstr "არა" #: indicator/displaynamesettings.cpp:35 #, qt-format msgid "SIM %1" msgstr "SIM %1" #: indicator/main.cpp:53 msgid "Telephony Service Indicator" msgstr "" #: indicator/messagingmenu.cpp:83 indicator/messagingmenu.cpp:87 msgid "Telephony Service" msgstr "" #: indicator/messagingmenu.cpp:151 indicator/messagingmenu.cpp:293 #: indicator/messagingmenu.cpp:360 msgid "Send" msgstr "გაგზავნა" #. TRANSLATORS : %1 is the group name and %2 is the recipient name #: indicator/messagingmenu.cpp:262 indicator/textchannelobserver.cpp:671 #: indicator/textchannelobserver.cpp:675 #, qt-format msgid "Message to %1 from %2" msgstr "" #. TRANSLATORS : %1 is the recipient name #: indicator/messagingmenu.cpp:265 indicator/messagingmenu.cpp:269 #, qt-format msgid "Message to the group from %1" msgstr "" #: indicator/messagingmenu.cpp:345 msgid "Call back" msgstr "გადარეკვა" #: indicator/messagingmenu.cpp:350 msgid "Missed your call — can you call me now?" msgstr "" #: indicator/messagingmenu.cpp:351 msgid "Running late. On my way." msgstr "" #: indicator/messagingmenu.cpp:352 msgid "Busy at the moment. Will call you later." msgstr "" #: indicator/messagingmenu.cpp:353 msgid "I am 20 minutes late." msgstr "" #: indicator/messagingmenu.cpp:354 msgid "Still busy. Will call you later." msgstr "" #: indicator/messagingmenu.cpp:409 #, qt-format msgid "%1 missed call" msgid_plural "%1 missed calls" msgstr[0] "" msgstr[1] "" #: indicator/messagingmenu.cpp:492 msgid "Voicemail messages" msgstr "" #: indicator/messagingmenu.cpp:495 #, qt-format msgid "%1 voicemail message" msgid_plural "%1 voicemail messages" msgstr[0] "" msgstr[1] "" #: indicator/messagingmenu.cpp:500 msgid "Voicemail" msgstr "ხმოვანი ფოსტა" #: indicator/metrics.cpp:42 #, qt-format msgid "%1 text messages sent today" msgstr "" #: indicator/metrics.cpp:43 msgid "No text messages sent today" msgstr "" #: indicator/metrics.cpp:44 #, qt-format msgid "%1 text messages received today" msgstr "" #: indicator/metrics.cpp:45 msgid "No text messages received today" msgstr "" #: indicator/metrics.cpp:46 #, qt-format msgid "%1 calls received today" msgstr "" #: indicator/metrics.cpp:47 msgid "No calls received today" msgstr "" #: indicator/metrics.cpp:48 #, qt-format msgid "%1 calls made today" msgstr "" #: indicator/metrics.cpp:49 indicator/metrics.cpp:51 msgid "No calls made today" msgstr "" #: indicator/metrics.cpp:50 #, qt-format msgid "Spent %1 minutes in calls today" msgstr "" #: indicator/textchannelobserver.cpp:225 msgid "Unlock your sim card and try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:227 msgid "Deactivate flight mode and try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:230 msgid "Try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:236 msgid "The message could not be sent" msgstr "" #: indicator/textchannelobserver.cpp:249 indicator/textchannelobserver.cpp:713 msgid "View message" msgstr "" #: indicator/textchannelobserver.cpp:295 msgid "New Group" msgstr "" #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:302 #, qt-format msgid "You joined group %1 " msgstr "" #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:306 #, qt-format msgid "You joined group %1" msgstr "" #: indicator/textchannelobserver.cpp:309 msgid "You joined a new group" msgstr "" #: indicator/textchannelobserver.cpp:328 msgid "View Group" msgstr "" #: indicator/textchannelobserver.cpp:367 indicator/ussdindicator.cpp:116 msgid "Ok" msgstr "დიახ" #: indicator/textchannelobserver.cpp:373 msgid "Save" msgstr "შენახვა" #: indicator/textchannelobserver.cpp:468 msgid "Emergency Alert" msgstr "" #: indicator/textchannelobserver.cpp:471 msgid "Emergency Alert: Extreme" msgstr "" #: indicator/textchannelobserver.cpp:474 msgid "Emergency Alert: Severe" msgstr "" #: indicator/textchannelobserver.cpp:477 msgid "Emergency Alert: Notice" msgstr "" #: indicator/textchannelobserver.cpp:482 msgid "AMBER Alert" msgstr "" #: indicator/textchannelobserver.cpp:485 msgid "Alert" msgstr "" #: indicator/textchannelobserver.cpp:531 msgid "Show alert" msgstr "" #: indicator/textchannelobserver.cpp:604 #, qt-format msgid "Attachment: %1 image" msgid_plural "Attachments: %1 images" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:606 #, qt-format msgid "Attachment: %1 video" msgid_plural "Attachments: %1 videos" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:608 #, qt-format msgid "Attachment: %1 contact" msgid_plural "Attachments: %1 contacts" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:610 #, qt-format msgid "Attachment: %1 audio clip" msgid_plural "Attachments: %1 audio clips" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:612 #, qt-format msgid "Attachment: %1 file" msgid_plural "Attachments: %1 files" msgstr[0] "" msgstr[1] "" #. TRANSLATORS : message displayed when any error occurred while receiving a MMS (case when cellular-data is off, or any downloading issue). Notify that there was a message, the user can find more about it in the messaging-app. #: indicator/textchannelobserver.cpp:615 msgid "New MMS message" msgstr "" #. TRANSLATORS : %1 is the recipient name #: indicator/textchannelobserver.cpp:679 indicator/textchannelobserver.cpp:683 #, qt-format msgid "Message to group from %1" msgstr "" #: indicator/textchannelobserver.cpp:749 #, qt-format msgid "Message from %1" msgstr "" #: indicator/textchannelobserver.cpp:910 msgid "Please, select a SIM card:" msgstr "" #: indicator/ussdindicator.cpp:119 msgid "Reply" msgstr "" #: indicator/ussdindicator.cpp:142 msgid "Cancel" msgstr "გაუქმება" #: libtelephonyservice/callnotification.cpp:53 msgid "Conf call on hold" msgstr "" #: libtelephonyservice/callnotification.cpp:53 #, qt-format msgid "%1 call on hold" msgstr "" #: libtelephonyservice/callnotification.cpp:56 msgid "Conf call ended" msgstr "" #: libtelephonyservice/callnotification.cpp:56 #, qt-format msgid "%1 call ended" msgstr "" #: libtelephonyservice/callnotification.cpp:59 #, qt-format msgid "%1 call declined" msgstr "" #: libtelephonyservice/contactwatcher.cpp:157 msgid "Private Number" msgstr "" #: libtelephonyservice/contactwatcher.cpp:159 msgid "Unknown Number" msgstr "" telephony-service-0.5.3/po/kab.po000066400000000000000000000211471455543255600167220ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-12-16 17:03+0100\n" "PO-Revision-Date: 2023-01-05 11:07+0000\n" "Last-Translator: Anonymous \n" "Language-Team: Kabyle \n" "Language: kab\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n > 1;\n" "X-Generator: Weblate 4.15.1-dev\n" #: indicator/telephony-service-call.desktop.in:4 msgid "Phone Calls" msgstr "" #: indicator/telephony-service-sms.desktop.in:4 msgid "SMS" msgstr "" #: approver/approver.cpp:66 msgid "Unknown caller" msgstr "" #: approver/approver.cpp:94 msgid "I'm busy at the moment. I'll call later." msgstr "" #: approver/approver.cpp:95 msgid "I'm running late, on my way now." msgstr "" #: approver/approver.cpp:96 msgid "Please call me back later." msgstr "" #: approver/approver.cpp:457 #, qt-format msgid "On [%1]" msgstr "" #: approver/approver.cpp:461 indicator/messagingmenu.cpp:414 msgid "Private number" msgstr "" #: approver/approver.cpp:464 indicator/messagingmenu.cpp:244 #: indicator/messagingmenu.cpp:418 indicator/textchannelobserver.cpp:640 msgid "Unknown number" msgstr "" #: approver/approver.cpp:470 approver/approver.cpp:485 msgid "Caller number is not available" msgstr "" #: approver/approver.cpp:476 msgid "Calling from private number" msgstr "" #: approver/approver.cpp:479 msgid "Calling from unknown number" msgstr "" #: approver/approver.cpp:482 #, qt-format msgid "Calling from %1" msgstr "" #: approver/approver.cpp:529 msgid "Hold + Answer" msgstr "" #: approver/approver.cpp:530 msgid "Accept" msgstr "" #: approver/approver.cpp:543 msgid "End + Answer" msgstr "" #: approver/approver.cpp:552 msgid "Decline" msgstr "" #: approver/approver.cpp:560 msgid "Message & decline" msgstr "" #: approver/main.cpp:46 msgid "Telephony Service Approver" msgstr "" #: indicator/authhandler.cpp:72 msgid "Authentication failed. Do you want to review your credentials?" msgstr "" #: indicator/authhandler.cpp:91 msgid "Yes" msgstr "" #: indicator/authhandler.cpp:94 msgid "No" msgstr "" #: indicator/displaynamesettings.cpp:35 #, qt-format msgid "SIM %1" msgstr "" #: indicator/main.cpp:53 msgid "Telephony Service Indicator" msgstr "" #: indicator/messagingmenu.cpp:83 indicator/messagingmenu.cpp:87 msgid "Telephony Service" msgstr "" #: indicator/messagingmenu.cpp:151 indicator/messagingmenu.cpp:293 #: indicator/messagingmenu.cpp:360 msgid "Send" msgstr "" #. TRANSLATORS : %1 is the group name and %2 is the recipient name #: indicator/messagingmenu.cpp:262 indicator/textchannelobserver.cpp:671 #: indicator/textchannelobserver.cpp:675 #, qt-format msgid "Message to %1 from %2" msgstr "" #. TRANSLATORS : %1 is the recipient name #: indicator/messagingmenu.cpp:265 indicator/messagingmenu.cpp:269 #, qt-format msgid "Message to the group from %1" msgstr "" #: indicator/messagingmenu.cpp:345 msgid "Call back" msgstr "" #: indicator/messagingmenu.cpp:350 msgid "Missed your call — can you call me now?" msgstr "" #: indicator/messagingmenu.cpp:351 msgid "Running late. On my way." msgstr "" #: indicator/messagingmenu.cpp:352 msgid "Busy at the moment. Will call you later." msgstr "" #: indicator/messagingmenu.cpp:353 msgid "I am 20 minutes late." msgstr "" #: indicator/messagingmenu.cpp:354 msgid "Still busy. Will call you later." msgstr "" #: indicator/messagingmenu.cpp:409 #, qt-format msgid "%1 missed call" msgid_plural "%1 missed calls" msgstr[0] "" msgstr[1] "" #: indicator/messagingmenu.cpp:492 msgid "Voicemail messages" msgstr "" #: indicator/messagingmenu.cpp:495 #, qt-format msgid "%1 voicemail message" msgid_plural "%1 voicemail messages" msgstr[0] "" msgstr[1] "" #: indicator/messagingmenu.cpp:500 msgid "Voicemail" msgstr "" #: indicator/metrics.cpp:42 #, qt-format msgid "%1 text messages sent today" msgstr "" #: indicator/metrics.cpp:43 msgid "No text messages sent today" msgstr "" #: indicator/metrics.cpp:44 #, qt-format msgid "%1 text messages received today" msgstr "" #: indicator/metrics.cpp:45 msgid "No text messages received today" msgstr "" #: indicator/metrics.cpp:46 #, qt-format msgid "%1 calls received today" msgstr "" #: indicator/metrics.cpp:47 msgid "No calls received today" msgstr "" #: indicator/metrics.cpp:48 #, qt-format msgid "%1 calls made today" msgstr "" #: indicator/metrics.cpp:49 indicator/metrics.cpp:51 msgid "No calls made today" msgstr "" #: indicator/metrics.cpp:50 #, qt-format msgid "Spent %1 minutes in calls today" msgstr "" #: indicator/textchannelobserver.cpp:225 msgid "Unlock your sim card and try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:227 msgid "Deactivate flight mode and try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:230 msgid "Try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:236 msgid "The message could not be sent" msgstr "" #: indicator/textchannelobserver.cpp:249 indicator/textchannelobserver.cpp:713 msgid "View message" msgstr "" #: indicator/textchannelobserver.cpp:295 msgid "New Group" msgstr "" #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:302 #, qt-format msgid "You joined group %1 " msgstr "" #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:306 #, qt-format msgid "You joined group %1" msgstr "" #: indicator/textchannelobserver.cpp:309 msgid "You joined a new group" msgstr "" #: indicator/textchannelobserver.cpp:328 msgid "View Group" msgstr "" #: indicator/textchannelobserver.cpp:367 indicator/ussdindicator.cpp:116 msgid "Ok" msgstr "" #: indicator/textchannelobserver.cpp:373 msgid "Save" msgstr "" #: indicator/textchannelobserver.cpp:468 msgid "Emergency Alert" msgstr "" #: indicator/textchannelobserver.cpp:471 msgid "Emergency Alert: Extreme" msgstr "" #: indicator/textchannelobserver.cpp:474 msgid "Emergency Alert: Severe" msgstr "" #: indicator/textchannelobserver.cpp:477 msgid "Emergency Alert: Notice" msgstr "" #: indicator/textchannelobserver.cpp:482 msgid "AMBER Alert" msgstr "" #: indicator/textchannelobserver.cpp:485 msgid "Alert" msgstr "" #: indicator/textchannelobserver.cpp:531 msgid "Show alert" msgstr "" #: indicator/textchannelobserver.cpp:604 #, qt-format msgid "Attachment: %1 image" msgid_plural "Attachments: %1 images" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:606 #, qt-format msgid "Attachment: %1 video" msgid_plural "Attachments: %1 videos" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:608 #, qt-format msgid "Attachment: %1 contact" msgid_plural "Attachments: %1 contacts" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:610 #, qt-format msgid "Attachment: %1 audio clip" msgid_plural "Attachments: %1 audio clips" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:612 #, qt-format msgid "Attachment: %1 file" msgid_plural "Attachments: %1 files" msgstr[0] "" msgstr[1] "" #. TRANSLATORS : message displayed when any error occurred while receiving a MMS (case when cellular-data is off, or any downloading issue). Notify that there was a message, the user can find more about it in the messaging-app. #: indicator/textchannelobserver.cpp:615 msgid "New MMS message" msgstr "" #. TRANSLATORS : %1 is the recipient name #: indicator/textchannelobserver.cpp:679 indicator/textchannelobserver.cpp:683 #, qt-format msgid "Message to group from %1" msgstr "" #: indicator/textchannelobserver.cpp:749 #, qt-format msgid "Message from %1" msgstr "" #: indicator/textchannelobserver.cpp:910 msgid "Please, select a SIM card:" msgstr "" #: indicator/ussdindicator.cpp:119 msgid "Reply" msgstr "" #: indicator/ussdindicator.cpp:142 #, fuzzy msgid "Cancel" msgstr "Cancel" #: libtelephonyservice/callnotification.cpp:53 msgid "Conf call on hold" msgstr "" #: libtelephonyservice/callnotification.cpp:53 #, qt-format msgid "%1 call on hold" msgstr "" #: libtelephonyservice/callnotification.cpp:56 msgid "Conf call ended" msgstr "" #: libtelephonyservice/callnotification.cpp:56 #, qt-format msgid "%1 call ended" msgstr "" #: libtelephonyservice/callnotification.cpp:59 #, qt-format msgid "%1 call declined" msgstr "" #: libtelephonyservice/contactwatcher.cpp:157 msgid "Private Number" msgstr "" #: libtelephonyservice/contactwatcher.cpp:159 msgid "Unknown Number" msgstr "" telephony-service-0.5.3/po/kk.po000066400000000000000000000207371455543255600165760ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR Canonical Ltd. # This file is distributed under the same license as the telephony-service package. # FIRST AUTHOR , YEAR. # msgid "" msgstr "" "Project-Id-Version: telephony-service\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-12-16 17:03+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: Automatically generated\n" "Language-Team: none\n" "Language: kk\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" #: indicator/telephony-service-call.desktop.in:4 msgid "Phone Calls" msgstr "" #: indicator/telephony-service-sms.desktop.in:4 msgid "SMS" msgstr "" #: approver/approver.cpp:66 msgid "Unknown caller" msgstr "" #: approver/approver.cpp:94 msgid "I'm busy at the moment. I'll call later." msgstr "" #: approver/approver.cpp:95 msgid "I'm running late, on my way now." msgstr "" #: approver/approver.cpp:96 msgid "Please call me back later." msgstr "" #: approver/approver.cpp:457 #, qt-format msgid "On [%1]" msgstr "" #: approver/approver.cpp:461 indicator/messagingmenu.cpp:414 msgid "Private number" msgstr "" #: approver/approver.cpp:464 indicator/messagingmenu.cpp:244 #: indicator/messagingmenu.cpp:418 indicator/textchannelobserver.cpp:640 msgid "Unknown number" msgstr "" #: approver/approver.cpp:470 approver/approver.cpp:485 msgid "Caller number is not available" msgstr "" #: approver/approver.cpp:476 msgid "Calling from private number" msgstr "" #: approver/approver.cpp:479 msgid "Calling from unknown number" msgstr "" #: approver/approver.cpp:482 #, qt-format msgid "Calling from %1" msgstr "" #: approver/approver.cpp:529 msgid "Hold + Answer" msgstr "" #: approver/approver.cpp:530 msgid "Accept" msgstr "" #: approver/approver.cpp:543 msgid "End + Answer" msgstr "" #: approver/approver.cpp:552 msgid "Decline" msgstr "" #: approver/approver.cpp:560 msgid "Message & decline" msgstr "" #: approver/main.cpp:46 msgid "Telephony Service Approver" msgstr "" #: indicator/authhandler.cpp:72 msgid "Authentication failed. Do you want to review your credentials?" msgstr "" #: indicator/authhandler.cpp:91 msgid "Yes" msgstr "" #: indicator/authhandler.cpp:94 msgid "No" msgstr "" #: indicator/displaynamesettings.cpp:35 #, qt-format msgid "SIM %1" msgstr "" #: indicator/main.cpp:53 msgid "Telephony Service Indicator" msgstr "" #: indicator/messagingmenu.cpp:83 indicator/messagingmenu.cpp:87 msgid "Telephony Service" msgstr "" #: indicator/messagingmenu.cpp:151 indicator/messagingmenu.cpp:293 #: indicator/messagingmenu.cpp:360 msgid "Send" msgstr "" #. TRANSLATORS : %1 is the group name and %2 is the recipient name #: indicator/messagingmenu.cpp:262 indicator/textchannelobserver.cpp:671 #: indicator/textchannelobserver.cpp:675 #, qt-format msgid "Message to %1 from %2" msgstr "" #. TRANSLATORS : %1 is the recipient name #: indicator/messagingmenu.cpp:265 indicator/messagingmenu.cpp:269 #, qt-format msgid "Message to the group from %1" msgstr "" #: indicator/messagingmenu.cpp:345 msgid "Call back" msgstr "" #: indicator/messagingmenu.cpp:350 msgid "Missed your call — can you call me now?" msgstr "" #: indicator/messagingmenu.cpp:351 msgid "Running late. On my way." msgstr "" #: indicator/messagingmenu.cpp:352 msgid "Busy at the moment. Will call you later." msgstr "" #: indicator/messagingmenu.cpp:353 msgid "I am 20 minutes late." msgstr "" #: indicator/messagingmenu.cpp:354 msgid "Still busy. Will call you later." msgstr "" #: indicator/messagingmenu.cpp:409 #, qt-format msgid "%1 missed call" msgid_plural "%1 missed calls" msgstr[0] "" msgstr[1] "" #: indicator/messagingmenu.cpp:492 msgid "Voicemail messages" msgstr "" #: indicator/messagingmenu.cpp:495 #, qt-format msgid "%1 voicemail message" msgid_plural "%1 voicemail messages" msgstr[0] "" msgstr[1] "" #: indicator/messagingmenu.cpp:500 msgid "Voicemail" msgstr "" #: indicator/metrics.cpp:42 #, qt-format msgid "%1 text messages sent today" msgstr "" #: indicator/metrics.cpp:43 msgid "No text messages sent today" msgstr "" #: indicator/metrics.cpp:44 #, qt-format msgid "%1 text messages received today" msgstr "" #: indicator/metrics.cpp:45 msgid "No text messages received today" msgstr "" #: indicator/metrics.cpp:46 #, qt-format msgid "%1 calls received today" msgstr "" #: indicator/metrics.cpp:47 msgid "No calls received today" msgstr "" #: indicator/metrics.cpp:48 #, qt-format msgid "%1 calls made today" msgstr "" #: indicator/metrics.cpp:49 indicator/metrics.cpp:51 msgid "No calls made today" msgstr "" #: indicator/metrics.cpp:50 #, qt-format msgid "Spent %1 minutes in calls today" msgstr "" #: indicator/textchannelobserver.cpp:225 msgid "Unlock your sim card and try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:227 msgid "Deactivate flight mode and try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:230 msgid "Try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:236 msgid "The message could not be sent" msgstr "" #: indicator/textchannelobserver.cpp:249 indicator/textchannelobserver.cpp:713 msgid "View message" msgstr "" #: indicator/textchannelobserver.cpp:295 msgid "New Group" msgstr "" #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:302 #, qt-format msgid "You joined group %1 " msgstr "" #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:306 #, qt-format msgid "You joined group %1" msgstr "" #: indicator/textchannelobserver.cpp:309 msgid "You joined a new group" msgstr "" #: indicator/textchannelobserver.cpp:328 msgid "View Group" msgstr "" #: indicator/textchannelobserver.cpp:367 indicator/ussdindicator.cpp:116 msgid "Ok" msgstr "" #: indicator/textchannelobserver.cpp:373 msgid "Save" msgstr "" #: indicator/textchannelobserver.cpp:468 msgid "Emergency Alert" msgstr "" #: indicator/textchannelobserver.cpp:471 msgid "Emergency Alert: Extreme" msgstr "" #: indicator/textchannelobserver.cpp:474 msgid "Emergency Alert: Severe" msgstr "" #: indicator/textchannelobserver.cpp:477 msgid "Emergency Alert: Notice" msgstr "" #: indicator/textchannelobserver.cpp:482 msgid "AMBER Alert" msgstr "" #: indicator/textchannelobserver.cpp:485 msgid "Alert" msgstr "" #: indicator/textchannelobserver.cpp:531 msgid "Show alert" msgstr "" #: indicator/textchannelobserver.cpp:604 #, qt-format msgid "Attachment: %1 image" msgid_plural "Attachments: %1 images" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:606 #, qt-format msgid "Attachment: %1 video" msgid_plural "Attachments: %1 videos" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:608 #, qt-format msgid "Attachment: %1 contact" msgid_plural "Attachments: %1 contacts" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:610 #, qt-format msgid "Attachment: %1 audio clip" msgid_plural "Attachments: %1 audio clips" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:612 #, qt-format msgid "Attachment: %1 file" msgid_plural "Attachments: %1 files" msgstr[0] "" msgstr[1] "" #. TRANSLATORS : message displayed when any error occurred while receiving a MMS (case when cellular-data is off, or any downloading issue). Notify that there was a message, the user can find more about it in the messaging-app. #: indicator/textchannelobserver.cpp:615 msgid "New MMS message" msgstr "" #. TRANSLATORS : %1 is the recipient name #: indicator/textchannelobserver.cpp:679 indicator/textchannelobserver.cpp:683 #, qt-format msgid "Message to group from %1" msgstr "" #: indicator/textchannelobserver.cpp:749 #, qt-format msgid "Message from %1" msgstr "" #: indicator/textchannelobserver.cpp:910 msgid "Please, select a SIM card:" msgstr "" #: indicator/ussdindicator.cpp:119 msgid "Reply" msgstr "" #: indicator/ussdindicator.cpp:142 msgid "Cancel" msgstr "" #: libtelephonyservice/callnotification.cpp:53 msgid "Conf call on hold" msgstr "" #: libtelephonyservice/callnotification.cpp:53 #, qt-format msgid "%1 call on hold" msgstr "" #: libtelephonyservice/callnotification.cpp:56 msgid "Conf call ended" msgstr "" #: libtelephonyservice/callnotification.cpp:56 #, qt-format msgid "%1 call ended" msgstr "" #: libtelephonyservice/callnotification.cpp:59 #, qt-format msgid "%1 call declined" msgstr "" #: libtelephonyservice/contactwatcher.cpp:157 msgid "Private Number" msgstr "" #: libtelephonyservice/contactwatcher.cpp:159 msgid "Unknown Number" msgstr "" telephony-service-0.5.3/po/kl.po000066400000000000000000000207371455543255600165770ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR Canonical Ltd. # This file is distributed under the same license as the telephony-service package. # FIRST AUTHOR , YEAR. # msgid "" msgstr "" "Project-Id-Version: telephony-service\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-12-16 17:03+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: Automatically generated\n" "Language-Team: none\n" "Language: kl\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" #: indicator/telephony-service-call.desktop.in:4 msgid "Phone Calls" msgstr "" #: indicator/telephony-service-sms.desktop.in:4 msgid "SMS" msgstr "" #: approver/approver.cpp:66 msgid "Unknown caller" msgstr "" #: approver/approver.cpp:94 msgid "I'm busy at the moment. I'll call later." msgstr "" #: approver/approver.cpp:95 msgid "I'm running late, on my way now." msgstr "" #: approver/approver.cpp:96 msgid "Please call me back later." msgstr "" #: approver/approver.cpp:457 #, qt-format msgid "On [%1]" msgstr "" #: approver/approver.cpp:461 indicator/messagingmenu.cpp:414 msgid "Private number" msgstr "" #: approver/approver.cpp:464 indicator/messagingmenu.cpp:244 #: indicator/messagingmenu.cpp:418 indicator/textchannelobserver.cpp:640 msgid "Unknown number" msgstr "" #: approver/approver.cpp:470 approver/approver.cpp:485 msgid "Caller number is not available" msgstr "" #: approver/approver.cpp:476 msgid "Calling from private number" msgstr "" #: approver/approver.cpp:479 msgid "Calling from unknown number" msgstr "" #: approver/approver.cpp:482 #, qt-format msgid "Calling from %1" msgstr "" #: approver/approver.cpp:529 msgid "Hold + Answer" msgstr "" #: approver/approver.cpp:530 msgid "Accept" msgstr "" #: approver/approver.cpp:543 msgid "End + Answer" msgstr "" #: approver/approver.cpp:552 msgid "Decline" msgstr "" #: approver/approver.cpp:560 msgid "Message & decline" msgstr "" #: approver/main.cpp:46 msgid "Telephony Service Approver" msgstr "" #: indicator/authhandler.cpp:72 msgid "Authentication failed. Do you want to review your credentials?" msgstr "" #: indicator/authhandler.cpp:91 msgid "Yes" msgstr "" #: indicator/authhandler.cpp:94 msgid "No" msgstr "" #: indicator/displaynamesettings.cpp:35 #, qt-format msgid "SIM %1" msgstr "" #: indicator/main.cpp:53 msgid "Telephony Service Indicator" msgstr "" #: indicator/messagingmenu.cpp:83 indicator/messagingmenu.cpp:87 msgid "Telephony Service" msgstr "" #: indicator/messagingmenu.cpp:151 indicator/messagingmenu.cpp:293 #: indicator/messagingmenu.cpp:360 msgid "Send" msgstr "" #. TRANSLATORS : %1 is the group name and %2 is the recipient name #: indicator/messagingmenu.cpp:262 indicator/textchannelobserver.cpp:671 #: indicator/textchannelobserver.cpp:675 #, qt-format msgid "Message to %1 from %2" msgstr "" #. TRANSLATORS : %1 is the recipient name #: indicator/messagingmenu.cpp:265 indicator/messagingmenu.cpp:269 #, qt-format msgid "Message to the group from %1" msgstr "" #: indicator/messagingmenu.cpp:345 msgid "Call back" msgstr "" #: indicator/messagingmenu.cpp:350 msgid "Missed your call — can you call me now?" msgstr "" #: indicator/messagingmenu.cpp:351 msgid "Running late. On my way." msgstr "" #: indicator/messagingmenu.cpp:352 msgid "Busy at the moment. Will call you later." msgstr "" #: indicator/messagingmenu.cpp:353 msgid "I am 20 minutes late." msgstr "" #: indicator/messagingmenu.cpp:354 msgid "Still busy. Will call you later." msgstr "" #: indicator/messagingmenu.cpp:409 #, qt-format msgid "%1 missed call" msgid_plural "%1 missed calls" msgstr[0] "" msgstr[1] "" #: indicator/messagingmenu.cpp:492 msgid "Voicemail messages" msgstr "" #: indicator/messagingmenu.cpp:495 #, qt-format msgid "%1 voicemail message" msgid_plural "%1 voicemail messages" msgstr[0] "" msgstr[1] "" #: indicator/messagingmenu.cpp:500 msgid "Voicemail" msgstr "" #: indicator/metrics.cpp:42 #, qt-format msgid "%1 text messages sent today" msgstr "" #: indicator/metrics.cpp:43 msgid "No text messages sent today" msgstr "" #: indicator/metrics.cpp:44 #, qt-format msgid "%1 text messages received today" msgstr "" #: indicator/metrics.cpp:45 msgid "No text messages received today" msgstr "" #: indicator/metrics.cpp:46 #, qt-format msgid "%1 calls received today" msgstr "" #: indicator/metrics.cpp:47 msgid "No calls received today" msgstr "" #: indicator/metrics.cpp:48 #, qt-format msgid "%1 calls made today" msgstr "" #: indicator/metrics.cpp:49 indicator/metrics.cpp:51 msgid "No calls made today" msgstr "" #: indicator/metrics.cpp:50 #, qt-format msgid "Spent %1 minutes in calls today" msgstr "" #: indicator/textchannelobserver.cpp:225 msgid "Unlock your sim card and try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:227 msgid "Deactivate flight mode and try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:230 msgid "Try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:236 msgid "The message could not be sent" msgstr "" #: indicator/textchannelobserver.cpp:249 indicator/textchannelobserver.cpp:713 msgid "View message" msgstr "" #: indicator/textchannelobserver.cpp:295 msgid "New Group" msgstr "" #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:302 #, qt-format msgid "You joined group %1 " msgstr "" #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:306 #, qt-format msgid "You joined group %1" msgstr "" #: indicator/textchannelobserver.cpp:309 msgid "You joined a new group" msgstr "" #: indicator/textchannelobserver.cpp:328 msgid "View Group" msgstr "" #: indicator/textchannelobserver.cpp:367 indicator/ussdindicator.cpp:116 msgid "Ok" msgstr "" #: indicator/textchannelobserver.cpp:373 msgid "Save" msgstr "" #: indicator/textchannelobserver.cpp:468 msgid "Emergency Alert" msgstr "" #: indicator/textchannelobserver.cpp:471 msgid "Emergency Alert: Extreme" msgstr "" #: indicator/textchannelobserver.cpp:474 msgid "Emergency Alert: Severe" msgstr "" #: indicator/textchannelobserver.cpp:477 msgid "Emergency Alert: Notice" msgstr "" #: indicator/textchannelobserver.cpp:482 msgid "AMBER Alert" msgstr "" #: indicator/textchannelobserver.cpp:485 msgid "Alert" msgstr "" #: indicator/textchannelobserver.cpp:531 msgid "Show alert" msgstr "" #: indicator/textchannelobserver.cpp:604 #, qt-format msgid "Attachment: %1 image" msgid_plural "Attachments: %1 images" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:606 #, qt-format msgid "Attachment: %1 video" msgid_plural "Attachments: %1 videos" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:608 #, qt-format msgid "Attachment: %1 contact" msgid_plural "Attachments: %1 contacts" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:610 #, qt-format msgid "Attachment: %1 audio clip" msgid_plural "Attachments: %1 audio clips" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:612 #, qt-format msgid "Attachment: %1 file" msgid_plural "Attachments: %1 files" msgstr[0] "" msgstr[1] "" #. TRANSLATORS : message displayed when any error occurred while receiving a MMS (case when cellular-data is off, or any downloading issue). Notify that there was a message, the user can find more about it in the messaging-app. #: indicator/textchannelobserver.cpp:615 msgid "New MMS message" msgstr "" #. TRANSLATORS : %1 is the recipient name #: indicator/textchannelobserver.cpp:679 indicator/textchannelobserver.cpp:683 #, qt-format msgid "Message to group from %1" msgstr "" #: indicator/textchannelobserver.cpp:749 #, qt-format msgid "Message from %1" msgstr "" #: indicator/textchannelobserver.cpp:910 msgid "Please, select a SIM card:" msgstr "" #: indicator/ussdindicator.cpp:119 msgid "Reply" msgstr "" #: indicator/ussdindicator.cpp:142 msgid "Cancel" msgstr "" #: libtelephonyservice/callnotification.cpp:53 msgid "Conf call on hold" msgstr "" #: libtelephonyservice/callnotification.cpp:53 #, qt-format msgid "%1 call on hold" msgstr "" #: libtelephonyservice/callnotification.cpp:56 msgid "Conf call ended" msgstr "" #: libtelephonyservice/callnotification.cpp:56 #, qt-format msgid "%1 call ended" msgstr "" #: libtelephonyservice/callnotification.cpp:59 #, qt-format msgid "%1 call declined" msgstr "" #: libtelephonyservice/contactwatcher.cpp:157 msgid "Private Number" msgstr "" #: libtelephonyservice/contactwatcher.cpp:159 msgid "Unknown Number" msgstr "" telephony-service-0.5.3/po/km.po000066400000000000000000000276441455543255600166040ustar00rootroot00000000000000# Khmer translation for telephony-service # Copyright (c) 2014 Rosetta Contributors and Canonical Ltd 2014 # This file is distributed under the same license as the telephony-service package. # FIRST AUTHOR , 2014. # msgid "" msgstr "" "Project-Id-Version: telephony-service\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-12-16 17:03+0100\n" "PO-Revision-Date: 2014-09-01 10:08+0000\n" "Last-Translator: Sophea Sok \n" "Language-Team: Khmer \n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" "X-Launchpad-Export-Date: 2017-01-04 06:02+0000\n" "X-Generator: Launchpad (build 18298)\n" #: indicator/telephony-service-call.desktop.in:4 msgid "Phone Calls" msgstr "ការ​ហៅ​ទូរស័ព្ទ" #: indicator/telephony-service-sms.desktop.in:4 msgid "SMS" msgstr "សារ SMS" #: approver/approver.cpp:66 msgid "Unknown caller" msgstr "មិន​ស្គាល់​អ្នក​ហៅ" #: approver/approver.cpp:94 msgid "I'm busy at the moment. I'll call later." msgstr "" #: approver/approver.cpp:95 msgid "I'm running late, on my way now." msgstr "" #: approver/approver.cpp:96 msgid "Please call me back later." msgstr "" #: approver/approver.cpp:457 #, qt-format msgid "On [%1]" msgstr "" #: approver/approver.cpp:461 indicator/messagingmenu.cpp:414 msgid "Private number" msgstr "លេខ​ឯកជន" #: approver/approver.cpp:464 indicator/messagingmenu.cpp:244 #: indicator/messagingmenu.cpp:418 indicator/textchannelobserver.cpp:640 msgid "Unknown number" msgstr "មិន​ស្គាល់​លេខ" #: approver/approver.cpp:470 approver/approver.cpp:485 msgid "Caller number is not available" msgstr "មិន​មាន​លេខ​អ្នក​ហៅ" #: approver/approver.cpp:476 msgid "Calling from private number" msgstr "កំពុង​ហៅ​ពី​លេខ​ឯកជន" #: approver/approver.cpp:479 msgid "Calling from unknown number" msgstr "កំពុង​ហៅ​ពី​លេខ​មិន​ស្គាល់" #: approver/approver.cpp:482 #, qt-format msgid "Calling from %1" msgstr "កំពុង​ហៅ​ពី %1" #: approver/approver.cpp:529 msgid "Hold + Answer" msgstr "ចុច​ជាប់ + ឆ្លើយ" #: approver/approver.cpp:530 msgid "Accept" msgstr "ព្រម​ទទួល" #: approver/approver.cpp:543 msgid "End + Answer" msgstr "" #: approver/approver.cpp:552 msgid "Decline" msgstr "បដិសេធ" #: approver/approver.cpp:560 msgid "Message & decline" msgstr "" #: approver/main.cpp:46 msgid "Telephony Service Approver" msgstr "ក្រុមហ៊ុន​អនុម័ត​សេវាកម្ម​ទូរស័ព្ទ" #: indicator/authhandler.cpp:72 msgid "Authentication failed. Do you want to review your credentials?" msgstr "" #: indicator/authhandler.cpp:91 msgid "Yes" msgstr "" #: indicator/authhandler.cpp:94 msgid "No" msgstr "" #: indicator/displaynamesettings.cpp:35 #, qt-format msgid "SIM %1" msgstr "ស៊ីម %1" #: indicator/main.cpp:53 msgid "Telephony Service Indicator" msgstr "សូចនាករ​សេវាកម្ម​ទូរស័ព្ទ" #: indicator/messagingmenu.cpp:83 indicator/messagingmenu.cpp:87 msgid "Telephony Service" msgstr "សេវាកម្ម​ទូរស័ព្ទ" #: indicator/messagingmenu.cpp:151 indicator/messagingmenu.cpp:293 #: indicator/messagingmenu.cpp:360 msgid "Send" msgstr "" #. TRANSLATORS : %1 is the group name and %2 is the recipient name #: indicator/messagingmenu.cpp:262 indicator/textchannelobserver.cpp:671 #: indicator/textchannelobserver.cpp:675 #, qt-format msgid "Message to %1 from %2" msgstr "" #. TRANSLATORS : %1 is the recipient name #: indicator/messagingmenu.cpp:265 indicator/messagingmenu.cpp:269 #, fuzzy, qt-format #| msgid "Message from %1" msgid "Message to the group from %1" msgstr "សារ​ពី %1" #: indicator/messagingmenu.cpp:345 msgid "Call back" msgstr "" #: indicator/messagingmenu.cpp:350 #, fuzzy #| msgid "I missed your call - can you call me now?" msgid "Missed your call — can you call me now?" msgstr "ខ្ញុំមិន​បាន​ទទួលការ​ហៅ​របស់​អ្នក- តើ​អ្នក​អាច​ហៅ​មក​ខ្ញុំ​ឥឡូវ​បាន​ទេ?" #: indicator/messagingmenu.cpp:351 #, fuzzy #| msgid "I'm running late. I'm on my way." msgid "Running late. On my way." msgstr "ខ្ញុំ​យឺត​ហើយ។ ខ្ញុំ​នៅ​តាម​ផ្លូវ។" #: indicator/messagingmenu.cpp:352 #, fuzzy #| msgid "I'm busy at the moment. I'll call you later." msgid "Busy at the moment. Will call you later." msgstr "ខ្ញុំ​រវល់​ណាស់​ពេល​នេះ។ ខ្ញុំ​នឹង​ហៅ​អ្នក​ពេល​ក្រោយ។" #: indicator/messagingmenu.cpp:353 #, fuzzy #| msgid "I'll be 20 minutes late." msgid "I am 20 minutes late." msgstr "ខ្ញុំ​នឹង​យឺត ២០នាទី។" #: indicator/messagingmenu.cpp:354 #, fuzzy #| msgid "Sorry, I'm still busy. I'll call you later." msgid "Still busy. Will call you later." msgstr "សូម​ទោស ខ្ញុំ​កំពុង​រវល់។ ខ្ញុំ​នឹង​ហៅ​ទៅ​អ្នក​ពេល​ក្រោយ។" #: indicator/messagingmenu.cpp:409 #, qt-format msgid "%1 missed call" msgid_plural "%1 missed calls" msgstr[0] "ខកខាន​ទទួល %1" #: indicator/messagingmenu.cpp:492 msgid "Voicemail messages" msgstr "សារ​ជា​សំឡេង" #: indicator/messagingmenu.cpp:495 #, qt-format msgid "%1 voicemail message" msgid_plural "%1 voicemail messages" msgstr[0] "សារ​ជា​សំឡេង %1" #: indicator/messagingmenu.cpp:500 msgid "Voicemail" msgstr "" #: indicator/metrics.cpp:42 #, qt-format msgid "%1 text messages sent today" msgstr "ថ្ងៃនេះ​បាន​ផ្ញើ​សារ %1" #: indicator/metrics.cpp:43 msgid "No text messages sent today" msgstr "ថ្ងៃនេះ​មិន​បាន​ផ្ញើ​សារ" #: indicator/metrics.cpp:44 #, qt-format msgid "%1 text messages received today" msgstr "ថ្ងៃនេះ​បាន​ទទួល​សារ %1" #: indicator/metrics.cpp:45 msgid "No text messages received today" msgstr "ថ្ងៃនេះ​មិន​បាន​ទទួល​សារ​អត្ថបទ" #: indicator/metrics.cpp:46 #, qt-format msgid "%1 calls received today" msgstr "ថ្ងៃនេះ​បាន​ទទួល​ការ​ហៅ​ចូល %1 ដង" #: indicator/metrics.cpp:47 msgid "No calls received today" msgstr "ថ្ងៃនេះ​មិន​បាន​ទទួល​ការ​ហៅ" #: indicator/metrics.cpp:48 #, qt-format msgid "%1 calls made today" msgstr "ថ្ងៃនេះ​បាន​ហៅ %1 ដង" #: indicator/metrics.cpp:49 indicator/metrics.cpp:51 msgid "No calls made today" msgstr "ថ្ងៃនេះ​មិន​បាន​ហៅ" #: indicator/metrics.cpp:50 #, qt-format msgid "Spent %1 minutes in calls today" msgstr "ថ្ងៃនេះ​អ្នក​បាន​ហៅ %1 នាទី" #: indicator/textchannelobserver.cpp:225 msgid "Unlock your sim card and try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:227 msgid "Deactivate flight mode and try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:230 msgid "Try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:236 msgid "The message could not be sent" msgstr "" #: indicator/textchannelobserver.cpp:249 indicator/textchannelobserver.cpp:713 msgid "View message" msgstr "មើល​សារ" #: indicator/textchannelobserver.cpp:295 msgid "New Group" msgstr "" #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:302 #, qt-format msgid "You joined group %1 " msgstr "" #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:306 #, qt-format msgid "You joined group %1" msgstr "" #: indicator/textchannelobserver.cpp:309 msgid "You joined a new group" msgstr "" #: indicator/textchannelobserver.cpp:328 msgid "View Group" msgstr "" #: indicator/textchannelobserver.cpp:367 indicator/ussdindicator.cpp:116 msgid "Ok" msgstr "យល់ព្រម" #: indicator/textchannelobserver.cpp:373 msgid "Save" msgstr "រក្សា​ទុក" #: indicator/textchannelobserver.cpp:468 msgid "Emergency Alert" msgstr "" #: indicator/textchannelobserver.cpp:471 msgid "Emergency Alert: Extreme" msgstr "" #: indicator/textchannelobserver.cpp:474 msgid "Emergency Alert: Severe" msgstr "" #: indicator/textchannelobserver.cpp:477 msgid "Emergency Alert: Notice" msgstr "" #: indicator/textchannelobserver.cpp:482 msgid "AMBER Alert" msgstr "" #: indicator/textchannelobserver.cpp:485 msgid "Alert" msgstr "" #: indicator/textchannelobserver.cpp:531 msgid "Show alert" msgstr "" #: indicator/textchannelobserver.cpp:604 #, qt-format msgid "Attachment: %1 image" msgid_plural "Attachments: %1 images" msgstr[0] "ឯកសារ​ភ្ជាប់៖ %1 រូបភាព" #: indicator/textchannelobserver.cpp:606 #, qt-format msgid "Attachment: %1 video" msgid_plural "Attachments: %1 videos" msgstr[0] "ឯកសារ​ភ្ជាប់៖ %1 វីដេអូ" #: indicator/textchannelobserver.cpp:608 #, qt-format msgid "Attachment: %1 contact" msgid_plural "Attachments: %1 contacts" msgstr[0] "ឯកសារ​ភ្ជាប់៖ %1 ទំនាក់ទំនង" #: indicator/textchannelobserver.cpp:610 #, qt-format msgid "Attachment: %1 audio clip" msgid_plural "Attachments: %1 audio clips" msgstr[0] "ឯកសារ​ភ្ជាប់៖ %1 ឈុតសំឡេង" #: indicator/textchannelobserver.cpp:612 #, qt-format msgid "Attachment: %1 file" msgid_plural "Attachments: %1 files" msgstr[0] "ឯកសារ​ភ្ជាប់៖ %1 ឯកសារ" #. TRANSLATORS : message displayed when any error occurred while receiving a MMS (case when cellular-data is off, or any downloading issue). Notify that there was a message, the user can find more about it in the messaging-app. #: indicator/textchannelobserver.cpp:615 #, fuzzy #| msgid "View message" msgid "New MMS message" msgstr "មើល​សារ" #. TRANSLATORS : %1 is the recipient name #: indicator/textchannelobserver.cpp:679 indicator/textchannelobserver.cpp:683 #, qt-format msgid "Message to group from %1" msgstr "" #: indicator/textchannelobserver.cpp:749 #, qt-format msgid "Message from %1" msgstr "សារ​ពី %1" #: indicator/textchannelobserver.cpp:910 msgid "Please, select a SIM card:" msgstr "សូមជ្រើសស៊ី​ម​កាត ៖" #: indicator/ussdindicator.cpp:119 msgid "Reply" msgstr "ឆ្លើយតប" #: indicator/ussdindicator.cpp:142 msgid "Cancel" msgstr "បោះបង់" #: libtelephonyservice/callnotification.cpp:53 msgid "Conf call on hold" msgstr "" #: libtelephonyservice/callnotification.cpp:53 #, qt-format msgid "%1 call on hold" msgstr "" #: libtelephonyservice/callnotification.cpp:56 msgid "Conf call ended" msgstr "" #: libtelephonyservice/callnotification.cpp:56 #, qt-format msgid "%1 call ended" msgstr "" #: libtelephonyservice/callnotification.cpp:59 #, qt-format msgid "%1 call declined" msgstr "" #: libtelephonyservice/contactwatcher.cpp:157 msgid "Private Number" msgstr "លេខ​ឯកជន" #: libtelephonyservice/contactwatcher.cpp:159 msgid "Unknown Number" msgstr "មិន​ស្គាល់​លេខ" #, fuzzy #~| msgid "Telephony Service" #~ msgid "telephony-service-call" #~ msgstr "សេវាកម្ម​ទូរស័ព្ទ" #, fuzzy #~| msgid "Telephony Service" #~ msgid "telephony-service-message" #~ msgstr "សេវាកម្ម​ទូរស័ព្ទ" telephony-service-0.5.3/po/kmr.po000066400000000000000000000211641455543255600167550ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-12-16 17:03+0100\n" "PO-Revision-Date: 2023-01-05 11:07+0000\n" "Last-Translator: Anonymous \n" "Language-Team: Kurdish (Northern) \n" "Language: kmr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Generator: Weblate 4.15.1-dev\n" #: indicator/telephony-service-call.desktop.in:4 msgid "Phone Calls" msgstr "" #: indicator/telephony-service-sms.desktop.in:4 msgid "SMS" msgstr "" #: approver/approver.cpp:66 msgid "Unknown caller" msgstr "" #: approver/approver.cpp:94 msgid "I'm busy at the moment. I'll call later." msgstr "" #: approver/approver.cpp:95 msgid "I'm running late, on my way now." msgstr "" #: approver/approver.cpp:96 msgid "Please call me back later." msgstr "" #: approver/approver.cpp:457 #, qt-format msgid "On [%1]" msgstr "" #: approver/approver.cpp:461 indicator/messagingmenu.cpp:414 msgid "Private number" msgstr "" #: approver/approver.cpp:464 indicator/messagingmenu.cpp:244 #: indicator/messagingmenu.cpp:418 indicator/textchannelobserver.cpp:640 msgid "Unknown number" msgstr "" #: approver/approver.cpp:470 approver/approver.cpp:485 msgid "Caller number is not available" msgstr "" #: approver/approver.cpp:476 msgid "Calling from private number" msgstr "" #: approver/approver.cpp:479 msgid "Calling from unknown number" msgstr "" #: approver/approver.cpp:482 #, qt-format msgid "Calling from %1" msgstr "" #: approver/approver.cpp:529 msgid "Hold + Answer" msgstr "" #: approver/approver.cpp:530 msgid "Accept" msgstr "" #: approver/approver.cpp:543 msgid "End + Answer" msgstr "" #: approver/approver.cpp:552 msgid "Decline" msgstr "" #: approver/approver.cpp:560 msgid "Message & decline" msgstr "" #: approver/main.cpp:46 msgid "Telephony Service Approver" msgstr "" #: indicator/authhandler.cpp:72 msgid "Authentication failed. Do you want to review your credentials?" msgstr "" #: indicator/authhandler.cpp:91 msgid "Yes" msgstr "" #: indicator/authhandler.cpp:94 msgid "No" msgstr "" #: indicator/displaynamesettings.cpp:35 #, qt-format msgid "SIM %1" msgstr "" #: indicator/main.cpp:53 msgid "Telephony Service Indicator" msgstr "" #: indicator/messagingmenu.cpp:83 indicator/messagingmenu.cpp:87 msgid "Telephony Service" msgstr "" #: indicator/messagingmenu.cpp:151 indicator/messagingmenu.cpp:293 #: indicator/messagingmenu.cpp:360 msgid "Send" msgstr "" #. TRANSLATORS : %1 is the group name and %2 is the recipient name #: indicator/messagingmenu.cpp:262 indicator/textchannelobserver.cpp:671 #: indicator/textchannelobserver.cpp:675 #, qt-format msgid "Message to %1 from %2" msgstr "" #. TRANSLATORS : %1 is the recipient name #: indicator/messagingmenu.cpp:265 indicator/messagingmenu.cpp:269 #, qt-format msgid "Message to the group from %1" msgstr "" #: indicator/messagingmenu.cpp:345 msgid "Call back" msgstr "" #: indicator/messagingmenu.cpp:350 msgid "Missed your call — can you call me now?" msgstr "" #: indicator/messagingmenu.cpp:351 msgid "Running late. On my way." msgstr "" #: indicator/messagingmenu.cpp:352 msgid "Busy at the moment. Will call you later." msgstr "" #: indicator/messagingmenu.cpp:353 msgid "I am 20 minutes late." msgstr "" #: indicator/messagingmenu.cpp:354 msgid "Still busy. Will call you later." msgstr "" #: indicator/messagingmenu.cpp:409 #, qt-format msgid "%1 missed call" msgid_plural "%1 missed calls" msgstr[0] "" msgstr[1] "" #: indicator/messagingmenu.cpp:492 msgid "Voicemail messages" msgstr "" #: indicator/messagingmenu.cpp:495 #, qt-format msgid "%1 voicemail message" msgid_plural "%1 voicemail messages" msgstr[0] "" msgstr[1] "" #: indicator/messagingmenu.cpp:500 msgid "Voicemail" msgstr "" #: indicator/metrics.cpp:42 #, qt-format msgid "%1 text messages sent today" msgstr "" #: indicator/metrics.cpp:43 msgid "No text messages sent today" msgstr "" #: indicator/metrics.cpp:44 #, qt-format msgid "%1 text messages received today" msgstr "" #: indicator/metrics.cpp:45 msgid "No text messages received today" msgstr "" #: indicator/metrics.cpp:46 #, qt-format msgid "%1 calls received today" msgstr "" #: indicator/metrics.cpp:47 msgid "No calls received today" msgstr "" #: indicator/metrics.cpp:48 #, qt-format msgid "%1 calls made today" msgstr "" #: indicator/metrics.cpp:49 indicator/metrics.cpp:51 msgid "No calls made today" msgstr "" #: indicator/metrics.cpp:50 #, qt-format msgid "Spent %1 minutes in calls today" msgstr "" #: indicator/textchannelobserver.cpp:225 msgid "Unlock your sim card and try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:227 msgid "Deactivate flight mode and try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:230 msgid "Try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:236 msgid "The message could not be sent" msgstr "" #: indicator/textchannelobserver.cpp:249 indicator/textchannelobserver.cpp:713 msgid "View message" msgstr "" #: indicator/textchannelobserver.cpp:295 msgid "New Group" msgstr "" #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:302 #, qt-format msgid "You joined group %1 " msgstr "" #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:306 #, qt-format msgid "You joined group %1" msgstr "" #: indicator/textchannelobserver.cpp:309 msgid "You joined a new group" msgstr "" #: indicator/textchannelobserver.cpp:328 msgid "View Group" msgstr "" #: indicator/textchannelobserver.cpp:367 indicator/ussdindicator.cpp:116 msgid "Ok" msgstr "" #: indicator/textchannelobserver.cpp:373 msgid "Save" msgstr "" #: indicator/textchannelobserver.cpp:468 msgid "Emergency Alert" msgstr "" #: indicator/textchannelobserver.cpp:471 msgid "Emergency Alert: Extreme" msgstr "" #: indicator/textchannelobserver.cpp:474 msgid "Emergency Alert: Severe" msgstr "" #: indicator/textchannelobserver.cpp:477 msgid "Emergency Alert: Notice" msgstr "" #: indicator/textchannelobserver.cpp:482 msgid "AMBER Alert" msgstr "" #: indicator/textchannelobserver.cpp:485 msgid "Alert" msgstr "" #: indicator/textchannelobserver.cpp:531 msgid "Show alert" msgstr "" #: indicator/textchannelobserver.cpp:604 #, qt-format msgid "Attachment: %1 image" msgid_plural "Attachments: %1 images" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:606 #, qt-format msgid "Attachment: %1 video" msgid_plural "Attachments: %1 videos" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:608 #, qt-format msgid "Attachment: %1 contact" msgid_plural "Attachments: %1 contacts" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:610 #, qt-format msgid "Attachment: %1 audio clip" msgid_plural "Attachments: %1 audio clips" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:612 #, qt-format msgid "Attachment: %1 file" msgid_plural "Attachments: %1 files" msgstr[0] "" msgstr[1] "" #. TRANSLATORS : message displayed when any error occurred while receiving a MMS (case when cellular-data is off, or any downloading issue). Notify that there was a message, the user can find more about it in the messaging-app. #: indicator/textchannelobserver.cpp:615 msgid "New MMS message" msgstr "" #. TRANSLATORS : %1 is the recipient name #: indicator/textchannelobserver.cpp:679 indicator/textchannelobserver.cpp:683 #, qt-format msgid "Message to group from %1" msgstr "" #: indicator/textchannelobserver.cpp:749 #, qt-format msgid "Message from %1" msgstr "" #: indicator/textchannelobserver.cpp:910 msgid "Please, select a SIM card:" msgstr "" #: indicator/ussdindicator.cpp:119 msgid "Reply" msgstr "" #: indicator/ussdindicator.cpp:142 #, fuzzy msgid "Cancel" msgstr "Cancel" #: libtelephonyservice/callnotification.cpp:53 msgid "Conf call on hold" msgstr "" #: libtelephonyservice/callnotification.cpp:53 #, qt-format msgid "%1 call on hold" msgstr "" #: libtelephonyservice/callnotification.cpp:56 msgid "Conf call ended" msgstr "" #: libtelephonyservice/callnotification.cpp:56 #, qt-format msgid "%1 call ended" msgstr "" #: libtelephonyservice/callnotification.cpp:59 #, qt-format msgid "%1 call declined" msgstr "" #: libtelephonyservice/contactwatcher.cpp:157 msgid "Private Number" msgstr "" #: libtelephonyservice/contactwatcher.cpp:159 msgid "Unknown Number" msgstr "" telephony-service-0.5.3/po/kn.po000066400000000000000000000207361455543255600166000ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR Canonical Ltd. # This file is distributed under the same license as the telephony-service package. # FIRST AUTHOR , YEAR. # msgid "" msgstr "" "Project-Id-Version: telephony-service\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-12-16 17:03+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: Automatically generated\n" "Language-Team: none\n" "Language: kn\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n > 1;\n" #: indicator/telephony-service-call.desktop.in:4 msgid "Phone Calls" msgstr "" #: indicator/telephony-service-sms.desktop.in:4 msgid "SMS" msgstr "" #: approver/approver.cpp:66 msgid "Unknown caller" msgstr "" #: approver/approver.cpp:94 msgid "I'm busy at the moment. I'll call later." msgstr "" #: approver/approver.cpp:95 msgid "I'm running late, on my way now." msgstr "" #: approver/approver.cpp:96 msgid "Please call me back later." msgstr "" #: approver/approver.cpp:457 #, qt-format msgid "On [%1]" msgstr "" #: approver/approver.cpp:461 indicator/messagingmenu.cpp:414 msgid "Private number" msgstr "" #: approver/approver.cpp:464 indicator/messagingmenu.cpp:244 #: indicator/messagingmenu.cpp:418 indicator/textchannelobserver.cpp:640 msgid "Unknown number" msgstr "" #: approver/approver.cpp:470 approver/approver.cpp:485 msgid "Caller number is not available" msgstr "" #: approver/approver.cpp:476 msgid "Calling from private number" msgstr "" #: approver/approver.cpp:479 msgid "Calling from unknown number" msgstr "" #: approver/approver.cpp:482 #, qt-format msgid "Calling from %1" msgstr "" #: approver/approver.cpp:529 msgid "Hold + Answer" msgstr "" #: approver/approver.cpp:530 msgid "Accept" msgstr "" #: approver/approver.cpp:543 msgid "End + Answer" msgstr "" #: approver/approver.cpp:552 msgid "Decline" msgstr "" #: approver/approver.cpp:560 msgid "Message & decline" msgstr "" #: approver/main.cpp:46 msgid "Telephony Service Approver" msgstr "" #: indicator/authhandler.cpp:72 msgid "Authentication failed. Do you want to review your credentials?" msgstr "" #: indicator/authhandler.cpp:91 msgid "Yes" msgstr "" #: indicator/authhandler.cpp:94 msgid "No" msgstr "" #: indicator/displaynamesettings.cpp:35 #, qt-format msgid "SIM %1" msgstr "" #: indicator/main.cpp:53 msgid "Telephony Service Indicator" msgstr "" #: indicator/messagingmenu.cpp:83 indicator/messagingmenu.cpp:87 msgid "Telephony Service" msgstr "" #: indicator/messagingmenu.cpp:151 indicator/messagingmenu.cpp:293 #: indicator/messagingmenu.cpp:360 msgid "Send" msgstr "" #. TRANSLATORS : %1 is the group name and %2 is the recipient name #: indicator/messagingmenu.cpp:262 indicator/textchannelobserver.cpp:671 #: indicator/textchannelobserver.cpp:675 #, qt-format msgid "Message to %1 from %2" msgstr "" #. TRANSLATORS : %1 is the recipient name #: indicator/messagingmenu.cpp:265 indicator/messagingmenu.cpp:269 #, qt-format msgid "Message to the group from %1" msgstr "" #: indicator/messagingmenu.cpp:345 msgid "Call back" msgstr "" #: indicator/messagingmenu.cpp:350 msgid "Missed your call — can you call me now?" msgstr "" #: indicator/messagingmenu.cpp:351 msgid "Running late. On my way." msgstr "" #: indicator/messagingmenu.cpp:352 msgid "Busy at the moment. Will call you later." msgstr "" #: indicator/messagingmenu.cpp:353 msgid "I am 20 minutes late." msgstr "" #: indicator/messagingmenu.cpp:354 msgid "Still busy. Will call you later." msgstr "" #: indicator/messagingmenu.cpp:409 #, qt-format msgid "%1 missed call" msgid_plural "%1 missed calls" msgstr[0] "" msgstr[1] "" #: indicator/messagingmenu.cpp:492 msgid "Voicemail messages" msgstr "" #: indicator/messagingmenu.cpp:495 #, qt-format msgid "%1 voicemail message" msgid_plural "%1 voicemail messages" msgstr[0] "" msgstr[1] "" #: indicator/messagingmenu.cpp:500 msgid "Voicemail" msgstr "" #: indicator/metrics.cpp:42 #, qt-format msgid "%1 text messages sent today" msgstr "" #: indicator/metrics.cpp:43 msgid "No text messages sent today" msgstr "" #: indicator/metrics.cpp:44 #, qt-format msgid "%1 text messages received today" msgstr "" #: indicator/metrics.cpp:45 msgid "No text messages received today" msgstr "" #: indicator/metrics.cpp:46 #, qt-format msgid "%1 calls received today" msgstr "" #: indicator/metrics.cpp:47 msgid "No calls received today" msgstr "" #: indicator/metrics.cpp:48 #, qt-format msgid "%1 calls made today" msgstr "" #: indicator/metrics.cpp:49 indicator/metrics.cpp:51 msgid "No calls made today" msgstr "" #: indicator/metrics.cpp:50 #, qt-format msgid "Spent %1 minutes in calls today" msgstr "" #: indicator/textchannelobserver.cpp:225 msgid "Unlock your sim card and try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:227 msgid "Deactivate flight mode and try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:230 msgid "Try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:236 msgid "The message could not be sent" msgstr "" #: indicator/textchannelobserver.cpp:249 indicator/textchannelobserver.cpp:713 msgid "View message" msgstr "" #: indicator/textchannelobserver.cpp:295 msgid "New Group" msgstr "" #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:302 #, qt-format msgid "You joined group %1 " msgstr "" #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:306 #, qt-format msgid "You joined group %1" msgstr "" #: indicator/textchannelobserver.cpp:309 msgid "You joined a new group" msgstr "" #: indicator/textchannelobserver.cpp:328 msgid "View Group" msgstr "" #: indicator/textchannelobserver.cpp:367 indicator/ussdindicator.cpp:116 msgid "Ok" msgstr "" #: indicator/textchannelobserver.cpp:373 msgid "Save" msgstr "" #: indicator/textchannelobserver.cpp:468 msgid "Emergency Alert" msgstr "" #: indicator/textchannelobserver.cpp:471 msgid "Emergency Alert: Extreme" msgstr "" #: indicator/textchannelobserver.cpp:474 msgid "Emergency Alert: Severe" msgstr "" #: indicator/textchannelobserver.cpp:477 msgid "Emergency Alert: Notice" msgstr "" #: indicator/textchannelobserver.cpp:482 msgid "AMBER Alert" msgstr "" #: indicator/textchannelobserver.cpp:485 msgid "Alert" msgstr "" #: indicator/textchannelobserver.cpp:531 msgid "Show alert" msgstr "" #: indicator/textchannelobserver.cpp:604 #, qt-format msgid "Attachment: %1 image" msgid_plural "Attachments: %1 images" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:606 #, qt-format msgid "Attachment: %1 video" msgid_plural "Attachments: %1 videos" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:608 #, qt-format msgid "Attachment: %1 contact" msgid_plural "Attachments: %1 contacts" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:610 #, qt-format msgid "Attachment: %1 audio clip" msgid_plural "Attachments: %1 audio clips" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:612 #, qt-format msgid "Attachment: %1 file" msgid_plural "Attachments: %1 files" msgstr[0] "" msgstr[1] "" #. TRANSLATORS : message displayed when any error occurred while receiving a MMS (case when cellular-data is off, or any downloading issue). Notify that there was a message, the user can find more about it in the messaging-app. #: indicator/textchannelobserver.cpp:615 msgid "New MMS message" msgstr "" #. TRANSLATORS : %1 is the recipient name #: indicator/textchannelobserver.cpp:679 indicator/textchannelobserver.cpp:683 #, qt-format msgid "Message to group from %1" msgstr "" #: indicator/textchannelobserver.cpp:749 #, qt-format msgid "Message from %1" msgstr "" #: indicator/textchannelobserver.cpp:910 msgid "Please, select a SIM card:" msgstr "" #: indicator/ussdindicator.cpp:119 msgid "Reply" msgstr "" #: indicator/ussdindicator.cpp:142 msgid "Cancel" msgstr "" #: libtelephonyservice/callnotification.cpp:53 msgid "Conf call on hold" msgstr "" #: libtelephonyservice/callnotification.cpp:53 #, qt-format msgid "%1 call on hold" msgstr "" #: libtelephonyservice/callnotification.cpp:56 msgid "Conf call ended" msgstr "" #: libtelephonyservice/callnotification.cpp:56 #, qt-format msgid "%1 call ended" msgstr "" #: libtelephonyservice/callnotification.cpp:59 #, qt-format msgid "%1 call declined" msgstr "" #: libtelephonyservice/contactwatcher.cpp:157 msgid "Private Number" msgstr "" #: libtelephonyservice/contactwatcher.cpp:159 msgid "Unknown Number" msgstr "" telephony-service-0.5.3/po/ko.po000066400000000000000000000263201455543255600165740ustar00rootroot00000000000000# Korean translation for telephony-service # Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013 # This file is distributed under the same license as the telephony-service package. # FIRST AUTHOR , 2013. # msgid "" msgstr "" "Project-Id-Version: telephony-service\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-12-16 17:03+0100\n" "PO-Revision-Date: 2014-08-20 04:06+0000\n" "Last-Translator: MinSik CHO \n" "Language-Team: Korean \n" "Language: ko\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" "X-Launchpad-Export-Date: 2017-01-04 06:02+0000\n" "X-Generator: Launchpad (build 18298)\n" #: indicator/telephony-service-call.desktop.in:4 msgid "Phone Calls" msgstr "전화 통화" #: indicator/telephony-service-sms.desktop.in:4 msgid "SMS" msgstr "문자 메세지" #: approver/approver.cpp:66 msgid "Unknown caller" msgstr "알 수 없는 발신자" #: approver/approver.cpp:94 msgid "I'm busy at the moment. I'll call later." msgstr "지금은 바쁘니 나중에 다시 걸겠습니다." #: approver/approver.cpp:95 msgid "I'm running late, on my way now." msgstr "지금 가고 있지만 늦을 것 같습니다." #: approver/approver.cpp:96 msgid "Please call me back later." msgstr "나중에 다시 걸어주십시오." #: approver/approver.cpp:457 #, qt-format msgid "On [%1]" msgstr "[%1]에" #: approver/approver.cpp:461 indicator/messagingmenu.cpp:414 msgid "Private number" msgstr "개인 전용 번호" #: approver/approver.cpp:464 indicator/messagingmenu.cpp:244 #: indicator/messagingmenu.cpp:418 indicator/textchannelobserver.cpp:640 msgid "Unknown number" msgstr "알 수 없는 번호" #: approver/approver.cpp:470 approver/approver.cpp:485 msgid "Caller number is not available" msgstr "발신자 번호를 표시할 수 없습니다" #: approver/approver.cpp:476 msgid "Calling from private number" msgstr "개인 전용 번호로 전화가 걸려오는 중" #: approver/approver.cpp:479 msgid "Calling from unknown number" msgstr "알 수 없는 번호로 전화가 왔습니다." #: approver/approver.cpp:482 #, qt-format msgid "Calling from %1" msgstr "%1에서 전화가 걸러오는 중" #: approver/approver.cpp:529 msgid "Hold + Answer" msgstr "대기 + 받기" #: approver/approver.cpp:530 msgid "Accept" msgstr "승인" #: approver/approver.cpp:543 msgid "End + Answer" msgstr "끝내기 + 받기" #: approver/approver.cpp:552 msgid "Decline" msgstr "거부" #: approver/approver.cpp:560 msgid "Message & decline" msgstr "메시지 & 거절" #: approver/main.cpp:46 msgid "Telephony Service Approver" msgstr "전화 서비스 관리자" #: indicator/authhandler.cpp:72 msgid "Authentication failed. Do you want to review your credentials?" msgstr "인증에 실패했습니다. 사용자의 인증서를 확인하시겠습니까?" #: indicator/authhandler.cpp:91 msgid "Yes" msgstr "예" #: indicator/authhandler.cpp:94 msgid "No" msgstr "아니요" #: indicator/displaynamesettings.cpp:35 #, qt-format msgid "SIM %1" msgstr "심 카드 %1" #: indicator/main.cpp:53 msgid "Telephony Service Indicator" msgstr "전화 서비스 확인자" #: indicator/messagingmenu.cpp:83 indicator/messagingmenu.cpp:87 msgid "Telephony Service" msgstr "전화 서비스" #: indicator/messagingmenu.cpp:151 indicator/messagingmenu.cpp:293 #: indicator/messagingmenu.cpp:360 msgid "Send" msgstr "보내기" #. TRANSLATORS : %1 is the group name and %2 is the recipient name #: indicator/messagingmenu.cpp:262 indicator/textchannelobserver.cpp:671 #: indicator/textchannelobserver.cpp:675 #, qt-format msgid "Message to %1 from %2" msgstr "" #. TRANSLATORS : %1 is the recipient name #: indicator/messagingmenu.cpp:265 indicator/messagingmenu.cpp:269 #, fuzzy, qt-format #| msgid "Message to group from %1" msgid "Message to the group from %1" msgstr "%1의 그룹에 메시지" #: indicator/messagingmenu.cpp:345 msgid "Call back" msgstr "부재중 번호로 전화" #: indicator/messagingmenu.cpp:350 #, fuzzy #| msgid "I missed your call - can you call me now?" msgid "Missed your call — can you call me now?" msgstr "전화를 받지 못했습니다. 지금 전화드려도 괜찮으십니까?" #: indicator/messagingmenu.cpp:351 #, fuzzy #| msgid "I'm running late. I'm on my way." msgid "Running late. On my way." msgstr "조금 늦어서 지금 가고 있습니다." #: indicator/messagingmenu.cpp:352 #, fuzzy #| msgid "I'm busy at the moment. I'll call you later." msgid "Busy at the moment. Will call you later." msgstr "지금 전화를 받을 수 없습니다. 곧 연락드리겠습니다." #: indicator/messagingmenu.cpp:353 #, fuzzy #| msgid "I'll be 20 minutes late." msgid "I am 20 minutes late." msgstr "20분 정도 늦을 것 같습니다." #: indicator/messagingmenu.cpp:354 #, fuzzy #| msgid "Sorry, I'm still busy. I'll call you later." msgid "Still busy. Will call you later." msgstr "죄송합니다. 지금 전화를 받을 수 없습니다. 조금 뒤 전화드리겠습니다." #: indicator/messagingmenu.cpp:409 #, qt-format msgid "%1 missed call" msgid_plural "%1 missed calls" msgstr[0] "%1개의 부재중 전화" #: indicator/messagingmenu.cpp:492 msgid "Voicemail messages" msgstr "음성 메세지" #: indicator/messagingmenu.cpp:495 #, qt-format msgid "%1 voicemail message" msgid_plural "%1 voicemail messages" msgstr[0] "%1개의 음성 메세지" #: indicator/messagingmenu.cpp:500 msgid "Voicemail" msgstr "음성 메일" #: indicator/metrics.cpp:42 #, qt-format msgid "%1 text messages sent today" msgstr "오늘 %1개의 텍스트 메시지를 보냈습니다." #: indicator/metrics.cpp:43 msgid "No text messages sent today" msgstr "오늘 보낸 텍스트 메시지가 없습니다." #: indicator/metrics.cpp:44 #, qt-format msgid "%1 text messages received today" msgstr "오늘 %1개의 텍스트 메시지를 받았습니다." #: indicator/metrics.cpp:45 msgid "No text messages received today" msgstr "오늘 받은 텍스트 메시지가 없습니다." #: indicator/metrics.cpp:46 #, qt-format msgid "%1 calls received today" msgstr "오늘 %1통의 전화를 받았습니다." #: indicator/metrics.cpp:47 msgid "No calls received today" msgstr "오늘 받은 전화가 없습니다." #: indicator/metrics.cpp:48 #, qt-format msgid "%1 calls made today" msgstr "오늘 %1통의 전화를 걸었습니다." #: indicator/metrics.cpp:49 indicator/metrics.cpp:51 msgid "No calls made today" msgstr "오늘 건 전화가 없습니다." #: indicator/metrics.cpp:50 #, qt-format msgid "Spent %1 minutes in calls today" msgstr "오늘 전체 통화 시간은 %1분 입니다." #: indicator/textchannelobserver.cpp:225 msgid "Unlock your sim card and try again from the messaging application." msgstr "" "심 카드의 잠긴 상태를 해제한 후 메시지 프로그램에서 다시 시도해주십시오." #: indicator/textchannelobserver.cpp:227 msgid "Deactivate flight mode and try again from the messaging application." msgstr "비행 모드를 해제한 후 메시지 프로그램에서 다시 시도해주십시오." #: indicator/textchannelobserver.cpp:230 msgid "Try again from the messaging application." msgstr "메시지 프로그램에서 다시 시도해주십시오." #: indicator/textchannelobserver.cpp:236 msgid "The message could not be sent" msgstr "메시지를 보낼 수 없습니다." #: indicator/textchannelobserver.cpp:249 indicator/textchannelobserver.cpp:713 msgid "View message" msgstr "메세지 보기" #: indicator/textchannelobserver.cpp:295 msgid "New Group" msgstr "" #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:302 #, qt-format msgid "You joined group %1 " msgstr "" #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:306 #, qt-format msgid "You joined group %1" msgstr "" #: indicator/textchannelobserver.cpp:309 msgid "You joined a new group" msgstr "" #: indicator/textchannelobserver.cpp:328 msgid "View Group" msgstr "" #: indicator/textchannelobserver.cpp:367 indicator/ussdindicator.cpp:116 msgid "Ok" msgstr "확인" #: indicator/textchannelobserver.cpp:373 msgid "Save" msgstr "저장" #: indicator/textchannelobserver.cpp:468 msgid "Emergency Alert" msgstr "" #: indicator/textchannelobserver.cpp:471 msgid "Emergency Alert: Extreme" msgstr "" #: indicator/textchannelobserver.cpp:474 msgid "Emergency Alert: Severe" msgstr "" #: indicator/textchannelobserver.cpp:477 msgid "Emergency Alert: Notice" msgstr "" #: indicator/textchannelobserver.cpp:482 msgid "AMBER Alert" msgstr "" #: indicator/textchannelobserver.cpp:485 msgid "Alert" msgstr "" #: indicator/textchannelobserver.cpp:531 msgid "Show alert" msgstr "" #: indicator/textchannelobserver.cpp:604 #, qt-format msgid "Attachment: %1 image" msgid_plural "Attachments: %1 images" msgstr[0] "첨부 파일: 이미지 %1" #: indicator/textchannelobserver.cpp:606 #, qt-format msgid "Attachment: %1 video" msgid_plural "Attachments: %1 videos" msgstr[0] "첨부 파일: 동영상 %1" #: indicator/textchannelobserver.cpp:608 #, qt-format msgid "Attachment: %1 contact" msgid_plural "Attachments: %1 contacts" msgstr[0] "첨부 파일: 연락처 %1" #: indicator/textchannelobserver.cpp:610 #, qt-format msgid "Attachment: %1 audio clip" msgid_plural "Attachments: %1 audio clips" msgstr[0] "첨부 파일: 오디오 클립 %1" #: indicator/textchannelobserver.cpp:612 #, qt-format msgid "Attachment: %1 file" msgid_plural "Attachments: %1 files" msgstr[0] "첨부 파일: 파일 %1" #. TRANSLATORS : message displayed when any error occurred while receiving a MMS (case when cellular-data is off, or any downloading issue). Notify that there was a message, the user can find more about it in the messaging-app. #: indicator/textchannelobserver.cpp:615 #, fuzzy #| msgid "View message" msgid "New MMS message" msgstr "메세지 보기" #. TRANSLATORS : %1 is the recipient name #: indicator/textchannelobserver.cpp:679 indicator/textchannelobserver.cpp:683 #, qt-format msgid "Message to group from %1" msgstr "%1의 그룹에 메시지" #: indicator/textchannelobserver.cpp:749 #, qt-format msgid "Message from %1" msgstr "%1이(가) 보낸 메시지" #: indicator/textchannelobserver.cpp:910 msgid "Please, select a SIM card:" msgstr "심 카드를 선택하십시오:" #: indicator/ussdindicator.cpp:119 msgid "Reply" msgstr "답장" #: indicator/ussdindicator.cpp:142 msgid "Cancel" msgstr "취소" #: libtelephonyservice/callnotification.cpp:53 msgid "Conf call on hold" msgstr "" #: libtelephonyservice/callnotification.cpp:53 #, qt-format msgid "%1 call on hold" msgstr "" #: libtelephonyservice/callnotification.cpp:56 msgid "Conf call ended" msgstr "" #: libtelephonyservice/callnotification.cpp:56 #, qt-format msgid "%1 call ended" msgstr "" #: libtelephonyservice/callnotification.cpp:59 #, qt-format msgid "%1 call declined" msgstr "" #: libtelephonyservice/contactwatcher.cpp:157 msgid "Private Number" msgstr "개인 전용 번호" #: libtelephonyservice/contactwatcher.cpp:159 msgid "Unknown Number" msgstr "알 수 없는 번호" #, fuzzy #~| msgid "Telephony Service" #~ msgid "telephony-service-call" #~ msgstr "전화 서비스" #, fuzzy #~| msgid "Telephony Service" #~ msgid "telephony-service-message" #~ msgstr "전화 서비스" telephony-service-0.5.3/po/ku.po000066400000000000000000000207371455543255600166100ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR Canonical Ltd. # This file is distributed under the same license as the telephony-service package. # FIRST AUTHOR , YEAR. # msgid "" msgstr "" "Project-Id-Version: telephony-service\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-12-16 17:03+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: Automatically generated\n" "Language-Team: none\n" "Language: ku\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" #: indicator/telephony-service-call.desktop.in:4 msgid "Phone Calls" msgstr "" #: indicator/telephony-service-sms.desktop.in:4 msgid "SMS" msgstr "" #: approver/approver.cpp:66 msgid "Unknown caller" msgstr "" #: approver/approver.cpp:94 msgid "I'm busy at the moment. I'll call later." msgstr "" #: approver/approver.cpp:95 msgid "I'm running late, on my way now." msgstr "" #: approver/approver.cpp:96 msgid "Please call me back later." msgstr "" #: approver/approver.cpp:457 #, qt-format msgid "On [%1]" msgstr "" #: approver/approver.cpp:461 indicator/messagingmenu.cpp:414 msgid "Private number" msgstr "" #: approver/approver.cpp:464 indicator/messagingmenu.cpp:244 #: indicator/messagingmenu.cpp:418 indicator/textchannelobserver.cpp:640 msgid "Unknown number" msgstr "" #: approver/approver.cpp:470 approver/approver.cpp:485 msgid "Caller number is not available" msgstr "" #: approver/approver.cpp:476 msgid "Calling from private number" msgstr "" #: approver/approver.cpp:479 msgid "Calling from unknown number" msgstr "" #: approver/approver.cpp:482 #, qt-format msgid "Calling from %1" msgstr "" #: approver/approver.cpp:529 msgid "Hold + Answer" msgstr "" #: approver/approver.cpp:530 msgid "Accept" msgstr "" #: approver/approver.cpp:543 msgid "End + Answer" msgstr "" #: approver/approver.cpp:552 msgid "Decline" msgstr "" #: approver/approver.cpp:560 msgid "Message & decline" msgstr "" #: approver/main.cpp:46 msgid "Telephony Service Approver" msgstr "" #: indicator/authhandler.cpp:72 msgid "Authentication failed. Do you want to review your credentials?" msgstr "" #: indicator/authhandler.cpp:91 msgid "Yes" msgstr "" #: indicator/authhandler.cpp:94 msgid "No" msgstr "" #: indicator/displaynamesettings.cpp:35 #, qt-format msgid "SIM %1" msgstr "" #: indicator/main.cpp:53 msgid "Telephony Service Indicator" msgstr "" #: indicator/messagingmenu.cpp:83 indicator/messagingmenu.cpp:87 msgid "Telephony Service" msgstr "" #: indicator/messagingmenu.cpp:151 indicator/messagingmenu.cpp:293 #: indicator/messagingmenu.cpp:360 msgid "Send" msgstr "" #. TRANSLATORS : %1 is the group name and %2 is the recipient name #: indicator/messagingmenu.cpp:262 indicator/textchannelobserver.cpp:671 #: indicator/textchannelobserver.cpp:675 #, qt-format msgid "Message to %1 from %2" msgstr "" #. TRANSLATORS : %1 is the recipient name #: indicator/messagingmenu.cpp:265 indicator/messagingmenu.cpp:269 #, qt-format msgid "Message to the group from %1" msgstr "" #: indicator/messagingmenu.cpp:345 msgid "Call back" msgstr "" #: indicator/messagingmenu.cpp:350 msgid "Missed your call — can you call me now?" msgstr "" #: indicator/messagingmenu.cpp:351 msgid "Running late. On my way." msgstr "" #: indicator/messagingmenu.cpp:352 msgid "Busy at the moment. Will call you later." msgstr "" #: indicator/messagingmenu.cpp:353 msgid "I am 20 minutes late." msgstr "" #: indicator/messagingmenu.cpp:354 msgid "Still busy. Will call you later." msgstr "" #: indicator/messagingmenu.cpp:409 #, qt-format msgid "%1 missed call" msgid_plural "%1 missed calls" msgstr[0] "" msgstr[1] "" #: indicator/messagingmenu.cpp:492 msgid "Voicemail messages" msgstr "" #: indicator/messagingmenu.cpp:495 #, qt-format msgid "%1 voicemail message" msgid_plural "%1 voicemail messages" msgstr[0] "" msgstr[1] "" #: indicator/messagingmenu.cpp:500 msgid "Voicemail" msgstr "" #: indicator/metrics.cpp:42 #, qt-format msgid "%1 text messages sent today" msgstr "" #: indicator/metrics.cpp:43 msgid "No text messages sent today" msgstr "" #: indicator/metrics.cpp:44 #, qt-format msgid "%1 text messages received today" msgstr "" #: indicator/metrics.cpp:45 msgid "No text messages received today" msgstr "" #: indicator/metrics.cpp:46 #, qt-format msgid "%1 calls received today" msgstr "" #: indicator/metrics.cpp:47 msgid "No calls received today" msgstr "" #: indicator/metrics.cpp:48 #, qt-format msgid "%1 calls made today" msgstr "" #: indicator/metrics.cpp:49 indicator/metrics.cpp:51 msgid "No calls made today" msgstr "" #: indicator/metrics.cpp:50 #, qt-format msgid "Spent %1 minutes in calls today" msgstr "" #: indicator/textchannelobserver.cpp:225 msgid "Unlock your sim card and try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:227 msgid "Deactivate flight mode and try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:230 msgid "Try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:236 msgid "The message could not be sent" msgstr "" #: indicator/textchannelobserver.cpp:249 indicator/textchannelobserver.cpp:713 msgid "View message" msgstr "" #: indicator/textchannelobserver.cpp:295 msgid "New Group" msgstr "" #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:302 #, qt-format msgid "You joined group %1 " msgstr "" #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:306 #, qt-format msgid "You joined group %1" msgstr "" #: indicator/textchannelobserver.cpp:309 msgid "You joined a new group" msgstr "" #: indicator/textchannelobserver.cpp:328 msgid "View Group" msgstr "" #: indicator/textchannelobserver.cpp:367 indicator/ussdindicator.cpp:116 msgid "Ok" msgstr "" #: indicator/textchannelobserver.cpp:373 msgid "Save" msgstr "" #: indicator/textchannelobserver.cpp:468 msgid "Emergency Alert" msgstr "" #: indicator/textchannelobserver.cpp:471 msgid "Emergency Alert: Extreme" msgstr "" #: indicator/textchannelobserver.cpp:474 msgid "Emergency Alert: Severe" msgstr "" #: indicator/textchannelobserver.cpp:477 msgid "Emergency Alert: Notice" msgstr "" #: indicator/textchannelobserver.cpp:482 msgid "AMBER Alert" msgstr "" #: indicator/textchannelobserver.cpp:485 msgid "Alert" msgstr "" #: indicator/textchannelobserver.cpp:531 msgid "Show alert" msgstr "" #: indicator/textchannelobserver.cpp:604 #, qt-format msgid "Attachment: %1 image" msgid_plural "Attachments: %1 images" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:606 #, qt-format msgid "Attachment: %1 video" msgid_plural "Attachments: %1 videos" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:608 #, qt-format msgid "Attachment: %1 contact" msgid_plural "Attachments: %1 contacts" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:610 #, qt-format msgid "Attachment: %1 audio clip" msgid_plural "Attachments: %1 audio clips" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:612 #, qt-format msgid "Attachment: %1 file" msgid_plural "Attachments: %1 files" msgstr[0] "" msgstr[1] "" #. TRANSLATORS : message displayed when any error occurred while receiving a MMS (case when cellular-data is off, or any downloading issue). Notify that there was a message, the user can find more about it in the messaging-app. #: indicator/textchannelobserver.cpp:615 msgid "New MMS message" msgstr "" #. TRANSLATORS : %1 is the recipient name #: indicator/textchannelobserver.cpp:679 indicator/textchannelobserver.cpp:683 #, qt-format msgid "Message to group from %1" msgstr "" #: indicator/textchannelobserver.cpp:749 #, qt-format msgid "Message from %1" msgstr "" #: indicator/textchannelobserver.cpp:910 msgid "Please, select a SIM card:" msgstr "" #: indicator/ussdindicator.cpp:119 msgid "Reply" msgstr "" #: indicator/ussdindicator.cpp:142 msgid "Cancel" msgstr "" #: libtelephonyservice/callnotification.cpp:53 msgid "Conf call on hold" msgstr "" #: libtelephonyservice/callnotification.cpp:53 #, qt-format msgid "%1 call on hold" msgstr "" #: libtelephonyservice/callnotification.cpp:56 msgid "Conf call ended" msgstr "" #: libtelephonyservice/callnotification.cpp:56 #, qt-format msgid "%1 call ended" msgstr "" #: libtelephonyservice/callnotification.cpp:59 #, qt-format msgid "%1 call declined" msgstr "" #: libtelephonyservice/contactwatcher.cpp:157 msgid "Private Number" msgstr "" #: libtelephonyservice/contactwatcher.cpp:159 msgid "Unknown Number" msgstr "" telephony-service-0.5.3/po/kw.po000066400000000000000000000217231455543255600166060ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR Canonical Ltd. # This file is distributed under the same license as the telephony-service package. # FIRST AUTHOR , YEAR. # msgid "" msgstr "" "Project-Id-Version: telephony-service\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-12-16 17:03+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: Automatically generated\n" "Language-Team: none\n" "Language: kw\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=6; plural=(n == 0) ? 0 : ((n == 1) ? 1 : (((n % 100 " "== 2 || n % 100 == 22 || n % 100 == 42 || n % 100 == 62 || n % 100 == 82) || " "n % 1000 == 0 && (n % 100000 >= 1000 && n % 100000 <= 20000 || n % 100000 == " "40000 || n % 100000 == 60000 || n % 100000 == 80000) || n != 0 && n % " "1000000 == 100000) ? 2 : ((n % 100 == 3 || n % 100 == 23 || n % 100 == 43 || " "n % 100 == 63 || n % 100 == 83) ? 3 : ((n != 1 && (n % 100 == 1 || n % 100 " "== 21 || n % 100 == 41 || n % 100 == 61 || n % 100 == 81)) ? 4 : 5))));\n" #: indicator/telephony-service-call.desktop.in:4 msgid "Phone Calls" msgstr "" #: indicator/telephony-service-sms.desktop.in:4 msgid "SMS" msgstr "" #: approver/approver.cpp:66 msgid "Unknown caller" msgstr "" #: approver/approver.cpp:94 msgid "I'm busy at the moment. I'll call later." msgstr "" #: approver/approver.cpp:95 msgid "I'm running late, on my way now." msgstr "" #: approver/approver.cpp:96 msgid "Please call me back later." msgstr "" #: approver/approver.cpp:457 #, qt-format msgid "On [%1]" msgstr "" #: approver/approver.cpp:461 indicator/messagingmenu.cpp:414 msgid "Private number" msgstr "" #: approver/approver.cpp:464 indicator/messagingmenu.cpp:244 #: indicator/messagingmenu.cpp:418 indicator/textchannelobserver.cpp:640 msgid "Unknown number" msgstr "" #: approver/approver.cpp:470 approver/approver.cpp:485 msgid "Caller number is not available" msgstr "" #: approver/approver.cpp:476 msgid "Calling from private number" msgstr "" #: approver/approver.cpp:479 msgid "Calling from unknown number" msgstr "" #: approver/approver.cpp:482 #, qt-format msgid "Calling from %1" msgstr "" #: approver/approver.cpp:529 msgid "Hold + Answer" msgstr "" #: approver/approver.cpp:530 msgid "Accept" msgstr "" #: approver/approver.cpp:543 msgid "End + Answer" msgstr "" #: approver/approver.cpp:552 msgid "Decline" msgstr "" #: approver/approver.cpp:560 msgid "Message & decline" msgstr "" #: approver/main.cpp:46 msgid "Telephony Service Approver" msgstr "" #: indicator/authhandler.cpp:72 msgid "Authentication failed. Do you want to review your credentials?" msgstr "" #: indicator/authhandler.cpp:91 msgid "Yes" msgstr "" #: indicator/authhandler.cpp:94 msgid "No" msgstr "" #: indicator/displaynamesettings.cpp:35 #, qt-format msgid "SIM %1" msgstr "" #: indicator/main.cpp:53 msgid "Telephony Service Indicator" msgstr "" #: indicator/messagingmenu.cpp:83 indicator/messagingmenu.cpp:87 msgid "Telephony Service" msgstr "" #: indicator/messagingmenu.cpp:151 indicator/messagingmenu.cpp:293 #: indicator/messagingmenu.cpp:360 msgid "Send" msgstr "" #. TRANSLATORS : %1 is the group name and %2 is the recipient name #: indicator/messagingmenu.cpp:262 indicator/textchannelobserver.cpp:671 #: indicator/textchannelobserver.cpp:675 #, qt-format msgid "Message to %1 from %2" msgstr "" #. TRANSLATORS : %1 is the recipient name #: indicator/messagingmenu.cpp:265 indicator/messagingmenu.cpp:269 #, qt-format msgid "Message to the group from %1" msgstr "" #: indicator/messagingmenu.cpp:345 msgid "Call back" msgstr "" #: indicator/messagingmenu.cpp:350 msgid "Missed your call — can you call me now?" msgstr "" #: indicator/messagingmenu.cpp:351 msgid "Running late. On my way." msgstr "" #: indicator/messagingmenu.cpp:352 msgid "Busy at the moment. Will call you later." msgstr "" #: indicator/messagingmenu.cpp:353 msgid "I am 20 minutes late." msgstr "" #: indicator/messagingmenu.cpp:354 msgid "Still busy. Will call you later." msgstr "" #: indicator/messagingmenu.cpp:409 #, qt-format msgid "%1 missed call" msgid_plural "%1 missed calls" msgstr[0] "" msgstr[1] "" #: indicator/messagingmenu.cpp:492 msgid "Voicemail messages" msgstr "" #: indicator/messagingmenu.cpp:495 #, qt-format msgid "%1 voicemail message" msgid_plural "%1 voicemail messages" msgstr[0] "" msgstr[1] "" #: indicator/messagingmenu.cpp:500 msgid "Voicemail" msgstr "" #: indicator/metrics.cpp:42 #, qt-format msgid "%1 text messages sent today" msgstr "" #: indicator/metrics.cpp:43 msgid "No text messages sent today" msgstr "" #: indicator/metrics.cpp:44 #, qt-format msgid "%1 text messages received today" msgstr "" #: indicator/metrics.cpp:45 msgid "No text messages received today" msgstr "" #: indicator/metrics.cpp:46 #, qt-format msgid "%1 calls received today" msgstr "" #: indicator/metrics.cpp:47 msgid "No calls received today" msgstr "" #: indicator/metrics.cpp:48 #, qt-format msgid "%1 calls made today" msgstr "" #: indicator/metrics.cpp:49 indicator/metrics.cpp:51 msgid "No calls made today" msgstr "" #: indicator/metrics.cpp:50 #, qt-format msgid "Spent %1 minutes in calls today" msgstr "" #: indicator/textchannelobserver.cpp:225 msgid "Unlock your sim card and try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:227 msgid "Deactivate flight mode and try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:230 msgid "Try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:236 msgid "The message could not be sent" msgstr "" #: indicator/textchannelobserver.cpp:249 indicator/textchannelobserver.cpp:713 msgid "View message" msgstr "" #: indicator/textchannelobserver.cpp:295 msgid "New Group" msgstr "" #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:302 #, qt-format msgid "You joined group %1 " msgstr "" #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:306 #, qt-format msgid "You joined group %1" msgstr "" #: indicator/textchannelobserver.cpp:309 msgid "You joined a new group" msgstr "" #: indicator/textchannelobserver.cpp:328 msgid "View Group" msgstr "" #: indicator/textchannelobserver.cpp:367 indicator/ussdindicator.cpp:116 msgid "Ok" msgstr "" #: indicator/textchannelobserver.cpp:373 msgid "Save" msgstr "" #: indicator/textchannelobserver.cpp:468 msgid "Emergency Alert" msgstr "" #: indicator/textchannelobserver.cpp:471 msgid "Emergency Alert: Extreme" msgstr "" #: indicator/textchannelobserver.cpp:474 msgid "Emergency Alert: Severe" msgstr "" #: indicator/textchannelobserver.cpp:477 msgid "Emergency Alert: Notice" msgstr "" #: indicator/textchannelobserver.cpp:482 msgid "AMBER Alert" msgstr "" #: indicator/textchannelobserver.cpp:485 msgid "Alert" msgstr "" #: indicator/textchannelobserver.cpp:531 msgid "Show alert" msgstr "" #: indicator/textchannelobserver.cpp:604 #, qt-format msgid "Attachment: %1 image" msgid_plural "Attachments: %1 images" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:606 #, qt-format msgid "Attachment: %1 video" msgid_plural "Attachments: %1 videos" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:608 #, qt-format msgid "Attachment: %1 contact" msgid_plural "Attachments: %1 contacts" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:610 #, qt-format msgid "Attachment: %1 audio clip" msgid_plural "Attachments: %1 audio clips" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:612 #, qt-format msgid "Attachment: %1 file" msgid_plural "Attachments: %1 files" msgstr[0] "" msgstr[1] "" #. TRANSLATORS : message displayed when any error occurred while receiving a MMS (case when cellular-data is off, or any downloading issue). Notify that there was a message, the user can find more about it in the messaging-app. #: indicator/textchannelobserver.cpp:615 msgid "New MMS message" msgstr "" #. TRANSLATORS : %1 is the recipient name #: indicator/textchannelobserver.cpp:679 indicator/textchannelobserver.cpp:683 #, qt-format msgid "Message to group from %1" msgstr "" #: indicator/textchannelobserver.cpp:749 #, qt-format msgid "Message from %1" msgstr "" #: indicator/textchannelobserver.cpp:910 msgid "Please, select a SIM card:" msgstr "" #: indicator/ussdindicator.cpp:119 msgid "Reply" msgstr "" #: indicator/ussdindicator.cpp:142 msgid "Cancel" msgstr "" #: libtelephonyservice/callnotification.cpp:53 msgid "Conf call on hold" msgstr "" #: libtelephonyservice/callnotification.cpp:53 #, qt-format msgid "%1 call on hold" msgstr "" #: libtelephonyservice/callnotification.cpp:56 msgid "Conf call ended" msgstr "" #: libtelephonyservice/callnotification.cpp:56 #, qt-format msgid "%1 call ended" msgstr "" #: libtelephonyservice/callnotification.cpp:59 #, qt-format msgid "%1 call declined" msgstr "" #: libtelephonyservice/contactwatcher.cpp:157 msgid "Private Number" msgstr "" #: libtelephonyservice/contactwatcher.cpp:159 msgid "Unknown Number" msgstr "" telephony-service-0.5.3/po/ky.po000066400000000000000000000207371455543255600166140ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR Canonical Ltd. # This file is distributed under the same license as the telephony-service package. # FIRST AUTHOR , YEAR. # msgid "" msgstr "" "Project-Id-Version: telephony-service\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-12-16 17:03+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: Automatically generated\n" "Language-Team: none\n" "Language: ky\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" #: indicator/telephony-service-call.desktop.in:4 msgid "Phone Calls" msgstr "" #: indicator/telephony-service-sms.desktop.in:4 msgid "SMS" msgstr "" #: approver/approver.cpp:66 msgid "Unknown caller" msgstr "" #: approver/approver.cpp:94 msgid "I'm busy at the moment. I'll call later." msgstr "" #: approver/approver.cpp:95 msgid "I'm running late, on my way now." msgstr "" #: approver/approver.cpp:96 msgid "Please call me back later." msgstr "" #: approver/approver.cpp:457 #, qt-format msgid "On [%1]" msgstr "" #: approver/approver.cpp:461 indicator/messagingmenu.cpp:414 msgid "Private number" msgstr "" #: approver/approver.cpp:464 indicator/messagingmenu.cpp:244 #: indicator/messagingmenu.cpp:418 indicator/textchannelobserver.cpp:640 msgid "Unknown number" msgstr "" #: approver/approver.cpp:470 approver/approver.cpp:485 msgid "Caller number is not available" msgstr "" #: approver/approver.cpp:476 msgid "Calling from private number" msgstr "" #: approver/approver.cpp:479 msgid "Calling from unknown number" msgstr "" #: approver/approver.cpp:482 #, qt-format msgid "Calling from %1" msgstr "" #: approver/approver.cpp:529 msgid "Hold + Answer" msgstr "" #: approver/approver.cpp:530 msgid "Accept" msgstr "" #: approver/approver.cpp:543 msgid "End + Answer" msgstr "" #: approver/approver.cpp:552 msgid "Decline" msgstr "" #: approver/approver.cpp:560 msgid "Message & decline" msgstr "" #: approver/main.cpp:46 msgid "Telephony Service Approver" msgstr "" #: indicator/authhandler.cpp:72 msgid "Authentication failed. Do you want to review your credentials?" msgstr "" #: indicator/authhandler.cpp:91 msgid "Yes" msgstr "" #: indicator/authhandler.cpp:94 msgid "No" msgstr "" #: indicator/displaynamesettings.cpp:35 #, qt-format msgid "SIM %1" msgstr "" #: indicator/main.cpp:53 msgid "Telephony Service Indicator" msgstr "" #: indicator/messagingmenu.cpp:83 indicator/messagingmenu.cpp:87 msgid "Telephony Service" msgstr "" #: indicator/messagingmenu.cpp:151 indicator/messagingmenu.cpp:293 #: indicator/messagingmenu.cpp:360 msgid "Send" msgstr "" #. TRANSLATORS : %1 is the group name and %2 is the recipient name #: indicator/messagingmenu.cpp:262 indicator/textchannelobserver.cpp:671 #: indicator/textchannelobserver.cpp:675 #, qt-format msgid "Message to %1 from %2" msgstr "" #. TRANSLATORS : %1 is the recipient name #: indicator/messagingmenu.cpp:265 indicator/messagingmenu.cpp:269 #, qt-format msgid "Message to the group from %1" msgstr "" #: indicator/messagingmenu.cpp:345 msgid "Call back" msgstr "" #: indicator/messagingmenu.cpp:350 msgid "Missed your call — can you call me now?" msgstr "" #: indicator/messagingmenu.cpp:351 msgid "Running late. On my way." msgstr "" #: indicator/messagingmenu.cpp:352 msgid "Busy at the moment. Will call you later." msgstr "" #: indicator/messagingmenu.cpp:353 msgid "I am 20 minutes late." msgstr "" #: indicator/messagingmenu.cpp:354 msgid "Still busy. Will call you later." msgstr "" #: indicator/messagingmenu.cpp:409 #, qt-format msgid "%1 missed call" msgid_plural "%1 missed calls" msgstr[0] "" msgstr[1] "" #: indicator/messagingmenu.cpp:492 msgid "Voicemail messages" msgstr "" #: indicator/messagingmenu.cpp:495 #, qt-format msgid "%1 voicemail message" msgid_plural "%1 voicemail messages" msgstr[0] "" msgstr[1] "" #: indicator/messagingmenu.cpp:500 msgid "Voicemail" msgstr "" #: indicator/metrics.cpp:42 #, qt-format msgid "%1 text messages sent today" msgstr "" #: indicator/metrics.cpp:43 msgid "No text messages sent today" msgstr "" #: indicator/metrics.cpp:44 #, qt-format msgid "%1 text messages received today" msgstr "" #: indicator/metrics.cpp:45 msgid "No text messages received today" msgstr "" #: indicator/metrics.cpp:46 #, qt-format msgid "%1 calls received today" msgstr "" #: indicator/metrics.cpp:47 msgid "No calls received today" msgstr "" #: indicator/metrics.cpp:48 #, qt-format msgid "%1 calls made today" msgstr "" #: indicator/metrics.cpp:49 indicator/metrics.cpp:51 msgid "No calls made today" msgstr "" #: indicator/metrics.cpp:50 #, qt-format msgid "Spent %1 minutes in calls today" msgstr "" #: indicator/textchannelobserver.cpp:225 msgid "Unlock your sim card and try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:227 msgid "Deactivate flight mode and try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:230 msgid "Try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:236 msgid "The message could not be sent" msgstr "" #: indicator/textchannelobserver.cpp:249 indicator/textchannelobserver.cpp:713 msgid "View message" msgstr "" #: indicator/textchannelobserver.cpp:295 msgid "New Group" msgstr "" #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:302 #, qt-format msgid "You joined group %1 " msgstr "" #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:306 #, qt-format msgid "You joined group %1" msgstr "" #: indicator/textchannelobserver.cpp:309 msgid "You joined a new group" msgstr "" #: indicator/textchannelobserver.cpp:328 msgid "View Group" msgstr "" #: indicator/textchannelobserver.cpp:367 indicator/ussdindicator.cpp:116 msgid "Ok" msgstr "" #: indicator/textchannelobserver.cpp:373 msgid "Save" msgstr "" #: indicator/textchannelobserver.cpp:468 msgid "Emergency Alert" msgstr "" #: indicator/textchannelobserver.cpp:471 msgid "Emergency Alert: Extreme" msgstr "" #: indicator/textchannelobserver.cpp:474 msgid "Emergency Alert: Severe" msgstr "" #: indicator/textchannelobserver.cpp:477 msgid "Emergency Alert: Notice" msgstr "" #: indicator/textchannelobserver.cpp:482 msgid "AMBER Alert" msgstr "" #: indicator/textchannelobserver.cpp:485 msgid "Alert" msgstr "" #: indicator/textchannelobserver.cpp:531 msgid "Show alert" msgstr "" #: indicator/textchannelobserver.cpp:604 #, qt-format msgid "Attachment: %1 image" msgid_plural "Attachments: %1 images" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:606 #, qt-format msgid "Attachment: %1 video" msgid_plural "Attachments: %1 videos" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:608 #, qt-format msgid "Attachment: %1 contact" msgid_plural "Attachments: %1 contacts" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:610 #, qt-format msgid "Attachment: %1 audio clip" msgid_plural "Attachments: %1 audio clips" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:612 #, qt-format msgid "Attachment: %1 file" msgid_plural "Attachments: %1 files" msgstr[0] "" msgstr[1] "" #. TRANSLATORS : message displayed when any error occurred while receiving a MMS (case when cellular-data is off, or any downloading issue). Notify that there was a message, the user can find more about it in the messaging-app. #: indicator/textchannelobserver.cpp:615 msgid "New MMS message" msgstr "" #. TRANSLATORS : %1 is the recipient name #: indicator/textchannelobserver.cpp:679 indicator/textchannelobserver.cpp:683 #, qt-format msgid "Message to group from %1" msgstr "" #: indicator/textchannelobserver.cpp:749 #, qt-format msgid "Message from %1" msgstr "" #: indicator/textchannelobserver.cpp:910 msgid "Please, select a SIM card:" msgstr "" #: indicator/ussdindicator.cpp:119 msgid "Reply" msgstr "" #: indicator/ussdindicator.cpp:142 msgid "Cancel" msgstr "" #: libtelephonyservice/callnotification.cpp:53 msgid "Conf call on hold" msgstr "" #: libtelephonyservice/callnotification.cpp:53 #, qt-format msgid "%1 call on hold" msgstr "" #: libtelephonyservice/callnotification.cpp:56 msgid "Conf call ended" msgstr "" #: libtelephonyservice/callnotification.cpp:56 #, qt-format msgid "%1 call ended" msgstr "" #: libtelephonyservice/callnotification.cpp:59 #, qt-format msgid "%1 call declined" msgstr "" #: libtelephonyservice/contactwatcher.cpp:157 msgid "Private Number" msgstr "" #: libtelephonyservice/contactwatcher.cpp:159 msgid "Unknown Number" msgstr "" telephony-service-0.5.3/po/la.po000066400000000000000000000207371455543255600165650ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR Canonical Ltd. # This file is distributed under the same license as the telephony-service package. # FIRST AUTHOR , YEAR. # msgid "" msgstr "" "Project-Id-Version: telephony-service\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-12-16 17:03+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: Automatically generated\n" "Language-Team: none\n" "Language: la\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" #: indicator/telephony-service-call.desktop.in:4 msgid "Phone Calls" msgstr "" #: indicator/telephony-service-sms.desktop.in:4 msgid "SMS" msgstr "" #: approver/approver.cpp:66 msgid "Unknown caller" msgstr "" #: approver/approver.cpp:94 msgid "I'm busy at the moment. I'll call later." msgstr "" #: approver/approver.cpp:95 msgid "I'm running late, on my way now." msgstr "" #: approver/approver.cpp:96 msgid "Please call me back later." msgstr "" #: approver/approver.cpp:457 #, qt-format msgid "On [%1]" msgstr "" #: approver/approver.cpp:461 indicator/messagingmenu.cpp:414 msgid "Private number" msgstr "" #: approver/approver.cpp:464 indicator/messagingmenu.cpp:244 #: indicator/messagingmenu.cpp:418 indicator/textchannelobserver.cpp:640 msgid "Unknown number" msgstr "" #: approver/approver.cpp:470 approver/approver.cpp:485 msgid "Caller number is not available" msgstr "" #: approver/approver.cpp:476 msgid "Calling from private number" msgstr "" #: approver/approver.cpp:479 msgid "Calling from unknown number" msgstr "" #: approver/approver.cpp:482 #, qt-format msgid "Calling from %1" msgstr "" #: approver/approver.cpp:529 msgid "Hold + Answer" msgstr "" #: approver/approver.cpp:530 msgid "Accept" msgstr "" #: approver/approver.cpp:543 msgid "End + Answer" msgstr "" #: approver/approver.cpp:552 msgid "Decline" msgstr "" #: approver/approver.cpp:560 msgid "Message & decline" msgstr "" #: approver/main.cpp:46 msgid "Telephony Service Approver" msgstr "" #: indicator/authhandler.cpp:72 msgid "Authentication failed. Do you want to review your credentials?" msgstr "" #: indicator/authhandler.cpp:91 msgid "Yes" msgstr "" #: indicator/authhandler.cpp:94 msgid "No" msgstr "" #: indicator/displaynamesettings.cpp:35 #, qt-format msgid "SIM %1" msgstr "" #: indicator/main.cpp:53 msgid "Telephony Service Indicator" msgstr "" #: indicator/messagingmenu.cpp:83 indicator/messagingmenu.cpp:87 msgid "Telephony Service" msgstr "" #: indicator/messagingmenu.cpp:151 indicator/messagingmenu.cpp:293 #: indicator/messagingmenu.cpp:360 msgid "Send" msgstr "" #. TRANSLATORS : %1 is the group name and %2 is the recipient name #: indicator/messagingmenu.cpp:262 indicator/textchannelobserver.cpp:671 #: indicator/textchannelobserver.cpp:675 #, qt-format msgid "Message to %1 from %2" msgstr "" #. TRANSLATORS : %1 is the recipient name #: indicator/messagingmenu.cpp:265 indicator/messagingmenu.cpp:269 #, qt-format msgid "Message to the group from %1" msgstr "" #: indicator/messagingmenu.cpp:345 msgid "Call back" msgstr "" #: indicator/messagingmenu.cpp:350 msgid "Missed your call — can you call me now?" msgstr "" #: indicator/messagingmenu.cpp:351 msgid "Running late. On my way." msgstr "" #: indicator/messagingmenu.cpp:352 msgid "Busy at the moment. Will call you later." msgstr "" #: indicator/messagingmenu.cpp:353 msgid "I am 20 minutes late." msgstr "" #: indicator/messagingmenu.cpp:354 msgid "Still busy. Will call you later." msgstr "" #: indicator/messagingmenu.cpp:409 #, qt-format msgid "%1 missed call" msgid_plural "%1 missed calls" msgstr[0] "" msgstr[1] "" #: indicator/messagingmenu.cpp:492 msgid "Voicemail messages" msgstr "" #: indicator/messagingmenu.cpp:495 #, qt-format msgid "%1 voicemail message" msgid_plural "%1 voicemail messages" msgstr[0] "" msgstr[1] "" #: indicator/messagingmenu.cpp:500 msgid "Voicemail" msgstr "" #: indicator/metrics.cpp:42 #, qt-format msgid "%1 text messages sent today" msgstr "" #: indicator/metrics.cpp:43 msgid "No text messages sent today" msgstr "" #: indicator/metrics.cpp:44 #, qt-format msgid "%1 text messages received today" msgstr "" #: indicator/metrics.cpp:45 msgid "No text messages received today" msgstr "" #: indicator/metrics.cpp:46 #, qt-format msgid "%1 calls received today" msgstr "" #: indicator/metrics.cpp:47 msgid "No calls received today" msgstr "" #: indicator/metrics.cpp:48 #, qt-format msgid "%1 calls made today" msgstr "" #: indicator/metrics.cpp:49 indicator/metrics.cpp:51 msgid "No calls made today" msgstr "" #: indicator/metrics.cpp:50 #, qt-format msgid "Spent %1 minutes in calls today" msgstr "" #: indicator/textchannelobserver.cpp:225 msgid "Unlock your sim card and try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:227 msgid "Deactivate flight mode and try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:230 msgid "Try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:236 msgid "The message could not be sent" msgstr "" #: indicator/textchannelobserver.cpp:249 indicator/textchannelobserver.cpp:713 msgid "View message" msgstr "" #: indicator/textchannelobserver.cpp:295 msgid "New Group" msgstr "" #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:302 #, qt-format msgid "You joined group %1 " msgstr "" #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:306 #, qt-format msgid "You joined group %1" msgstr "" #: indicator/textchannelobserver.cpp:309 msgid "You joined a new group" msgstr "" #: indicator/textchannelobserver.cpp:328 msgid "View Group" msgstr "" #: indicator/textchannelobserver.cpp:367 indicator/ussdindicator.cpp:116 msgid "Ok" msgstr "" #: indicator/textchannelobserver.cpp:373 msgid "Save" msgstr "" #: indicator/textchannelobserver.cpp:468 msgid "Emergency Alert" msgstr "" #: indicator/textchannelobserver.cpp:471 msgid "Emergency Alert: Extreme" msgstr "" #: indicator/textchannelobserver.cpp:474 msgid "Emergency Alert: Severe" msgstr "" #: indicator/textchannelobserver.cpp:477 msgid "Emergency Alert: Notice" msgstr "" #: indicator/textchannelobserver.cpp:482 msgid "AMBER Alert" msgstr "" #: indicator/textchannelobserver.cpp:485 msgid "Alert" msgstr "" #: indicator/textchannelobserver.cpp:531 msgid "Show alert" msgstr "" #: indicator/textchannelobserver.cpp:604 #, qt-format msgid "Attachment: %1 image" msgid_plural "Attachments: %1 images" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:606 #, qt-format msgid "Attachment: %1 video" msgid_plural "Attachments: %1 videos" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:608 #, qt-format msgid "Attachment: %1 contact" msgid_plural "Attachments: %1 contacts" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:610 #, qt-format msgid "Attachment: %1 audio clip" msgid_plural "Attachments: %1 audio clips" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:612 #, qt-format msgid "Attachment: %1 file" msgid_plural "Attachments: %1 files" msgstr[0] "" msgstr[1] "" #. TRANSLATORS : message displayed when any error occurred while receiving a MMS (case when cellular-data is off, or any downloading issue). Notify that there was a message, the user can find more about it in the messaging-app. #: indicator/textchannelobserver.cpp:615 msgid "New MMS message" msgstr "" #. TRANSLATORS : %1 is the recipient name #: indicator/textchannelobserver.cpp:679 indicator/textchannelobserver.cpp:683 #, qt-format msgid "Message to group from %1" msgstr "" #: indicator/textchannelobserver.cpp:749 #, qt-format msgid "Message from %1" msgstr "" #: indicator/textchannelobserver.cpp:910 msgid "Please, select a SIM card:" msgstr "" #: indicator/ussdindicator.cpp:119 msgid "Reply" msgstr "" #: indicator/ussdindicator.cpp:142 msgid "Cancel" msgstr "" #: libtelephonyservice/callnotification.cpp:53 msgid "Conf call on hold" msgstr "" #: libtelephonyservice/callnotification.cpp:53 #, qt-format msgid "%1 call on hold" msgstr "" #: libtelephonyservice/callnotification.cpp:56 msgid "Conf call ended" msgstr "" #: libtelephonyservice/callnotification.cpp:56 #, qt-format msgid "%1 call ended" msgstr "" #: libtelephonyservice/callnotification.cpp:59 #, qt-format msgid "%1 call declined" msgstr "" #: libtelephonyservice/contactwatcher.cpp:157 msgid "Private Number" msgstr "" #: libtelephonyservice/contactwatcher.cpp:159 msgid "Unknown Number" msgstr "" telephony-service-0.5.3/po/lb.po000066400000000000000000000211551455543255600165610ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-12-16 17:03+0100\n" "PO-Revision-Date: 2023-01-05 11:07+0000\n" "Last-Translator: Anonymous \n" "Language-Team: Luxembourgish \n" "Language: lb\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Generator: Weblate 4.15.1-dev\n" #: indicator/telephony-service-call.desktop.in:4 msgid "Phone Calls" msgstr "" #: indicator/telephony-service-sms.desktop.in:4 msgid "SMS" msgstr "" #: approver/approver.cpp:66 msgid "Unknown caller" msgstr "" #: approver/approver.cpp:94 msgid "I'm busy at the moment. I'll call later." msgstr "" #: approver/approver.cpp:95 msgid "I'm running late, on my way now." msgstr "" #: approver/approver.cpp:96 msgid "Please call me back later." msgstr "" #: approver/approver.cpp:457 #, qt-format msgid "On [%1]" msgstr "" #: approver/approver.cpp:461 indicator/messagingmenu.cpp:414 msgid "Private number" msgstr "" #: approver/approver.cpp:464 indicator/messagingmenu.cpp:244 #: indicator/messagingmenu.cpp:418 indicator/textchannelobserver.cpp:640 msgid "Unknown number" msgstr "" #: approver/approver.cpp:470 approver/approver.cpp:485 msgid "Caller number is not available" msgstr "" #: approver/approver.cpp:476 msgid "Calling from private number" msgstr "" #: approver/approver.cpp:479 msgid "Calling from unknown number" msgstr "" #: approver/approver.cpp:482 #, qt-format msgid "Calling from %1" msgstr "" #: approver/approver.cpp:529 msgid "Hold + Answer" msgstr "" #: approver/approver.cpp:530 msgid "Accept" msgstr "" #: approver/approver.cpp:543 msgid "End + Answer" msgstr "" #: approver/approver.cpp:552 msgid "Decline" msgstr "" #: approver/approver.cpp:560 msgid "Message & decline" msgstr "" #: approver/main.cpp:46 msgid "Telephony Service Approver" msgstr "" #: indicator/authhandler.cpp:72 msgid "Authentication failed. Do you want to review your credentials?" msgstr "" #: indicator/authhandler.cpp:91 msgid "Yes" msgstr "" #: indicator/authhandler.cpp:94 msgid "No" msgstr "" #: indicator/displaynamesettings.cpp:35 #, qt-format msgid "SIM %1" msgstr "" #: indicator/main.cpp:53 msgid "Telephony Service Indicator" msgstr "" #: indicator/messagingmenu.cpp:83 indicator/messagingmenu.cpp:87 msgid "Telephony Service" msgstr "" #: indicator/messagingmenu.cpp:151 indicator/messagingmenu.cpp:293 #: indicator/messagingmenu.cpp:360 msgid "Send" msgstr "" #. TRANSLATORS : %1 is the group name and %2 is the recipient name #: indicator/messagingmenu.cpp:262 indicator/textchannelobserver.cpp:671 #: indicator/textchannelobserver.cpp:675 #, qt-format msgid "Message to %1 from %2" msgstr "" #. TRANSLATORS : %1 is the recipient name #: indicator/messagingmenu.cpp:265 indicator/messagingmenu.cpp:269 #, qt-format msgid "Message to the group from %1" msgstr "" #: indicator/messagingmenu.cpp:345 msgid "Call back" msgstr "" #: indicator/messagingmenu.cpp:350 msgid "Missed your call — can you call me now?" msgstr "" #: indicator/messagingmenu.cpp:351 msgid "Running late. On my way." msgstr "" #: indicator/messagingmenu.cpp:352 msgid "Busy at the moment. Will call you later." msgstr "" #: indicator/messagingmenu.cpp:353 msgid "I am 20 minutes late." msgstr "" #: indicator/messagingmenu.cpp:354 msgid "Still busy. Will call you later." msgstr "" #: indicator/messagingmenu.cpp:409 #, qt-format msgid "%1 missed call" msgid_plural "%1 missed calls" msgstr[0] "" msgstr[1] "" #: indicator/messagingmenu.cpp:492 msgid "Voicemail messages" msgstr "" #: indicator/messagingmenu.cpp:495 #, qt-format msgid "%1 voicemail message" msgid_plural "%1 voicemail messages" msgstr[0] "" msgstr[1] "" #: indicator/messagingmenu.cpp:500 msgid "Voicemail" msgstr "" #: indicator/metrics.cpp:42 #, qt-format msgid "%1 text messages sent today" msgstr "" #: indicator/metrics.cpp:43 msgid "No text messages sent today" msgstr "" #: indicator/metrics.cpp:44 #, qt-format msgid "%1 text messages received today" msgstr "" #: indicator/metrics.cpp:45 msgid "No text messages received today" msgstr "" #: indicator/metrics.cpp:46 #, qt-format msgid "%1 calls received today" msgstr "" #: indicator/metrics.cpp:47 msgid "No calls received today" msgstr "" #: indicator/metrics.cpp:48 #, qt-format msgid "%1 calls made today" msgstr "" #: indicator/metrics.cpp:49 indicator/metrics.cpp:51 msgid "No calls made today" msgstr "" #: indicator/metrics.cpp:50 #, qt-format msgid "Spent %1 minutes in calls today" msgstr "" #: indicator/textchannelobserver.cpp:225 msgid "Unlock your sim card and try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:227 msgid "Deactivate flight mode and try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:230 msgid "Try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:236 msgid "The message could not be sent" msgstr "" #: indicator/textchannelobserver.cpp:249 indicator/textchannelobserver.cpp:713 msgid "View message" msgstr "" #: indicator/textchannelobserver.cpp:295 msgid "New Group" msgstr "" #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:302 #, qt-format msgid "You joined group %1 " msgstr "" #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:306 #, qt-format msgid "You joined group %1" msgstr "" #: indicator/textchannelobserver.cpp:309 msgid "You joined a new group" msgstr "" #: indicator/textchannelobserver.cpp:328 msgid "View Group" msgstr "" #: indicator/textchannelobserver.cpp:367 indicator/ussdindicator.cpp:116 msgid "Ok" msgstr "" #: indicator/textchannelobserver.cpp:373 msgid "Save" msgstr "" #: indicator/textchannelobserver.cpp:468 msgid "Emergency Alert" msgstr "" #: indicator/textchannelobserver.cpp:471 msgid "Emergency Alert: Extreme" msgstr "" #: indicator/textchannelobserver.cpp:474 msgid "Emergency Alert: Severe" msgstr "" #: indicator/textchannelobserver.cpp:477 msgid "Emergency Alert: Notice" msgstr "" #: indicator/textchannelobserver.cpp:482 msgid "AMBER Alert" msgstr "" #: indicator/textchannelobserver.cpp:485 msgid "Alert" msgstr "" #: indicator/textchannelobserver.cpp:531 msgid "Show alert" msgstr "" #: indicator/textchannelobserver.cpp:604 #, qt-format msgid "Attachment: %1 image" msgid_plural "Attachments: %1 images" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:606 #, qt-format msgid "Attachment: %1 video" msgid_plural "Attachments: %1 videos" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:608 #, qt-format msgid "Attachment: %1 contact" msgid_plural "Attachments: %1 contacts" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:610 #, qt-format msgid "Attachment: %1 audio clip" msgid_plural "Attachments: %1 audio clips" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:612 #, qt-format msgid "Attachment: %1 file" msgid_plural "Attachments: %1 files" msgstr[0] "" msgstr[1] "" #. TRANSLATORS : message displayed when any error occurred while receiving a MMS (case when cellular-data is off, or any downloading issue). Notify that there was a message, the user can find more about it in the messaging-app. #: indicator/textchannelobserver.cpp:615 msgid "New MMS message" msgstr "" #. TRANSLATORS : %1 is the recipient name #: indicator/textchannelobserver.cpp:679 indicator/textchannelobserver.cpp:683 #, qt-format msgid "Message to group from %1" msgstr "" #: indicator/textchannelobserver.cpp:749 #, qt-format msgid "Message from %1" msgstr "" #: indicator/textchannelobserver.cpp:910 msgid "Please, select a SIM card:" msgstr "" #: indicator/ussdindicator.cpp:119 msgid "Reply" msgstr "" #: indicator/ussdindicator.cpp:142 #, fuzzy msgid "Cancel" msgstr "Cancel" #: libtelephonyservice/callnotification.cpp:53 msgid "Conf call on hold" msgstr "" #: libtelephonyservice/callnotification.cpp:53 #, qt-format msgid "%1 call on hold" msgstr "" #: libtelephonyservice/callnotification.cpp:56 msgid "Conf call ended" msgstr "" #: libtelephonyservice/callnotification.cpp:56 #, qt-format msgid "%1 call ended" msgstr "" #: libtelephonyservice/callnotification.cpp:59 #, qt-format msgid "%1 call declined" msgstr "" #: libtelephonyservice/contactwatcher.cpp:157 msgid "Private Number" msgstr "" #: libtelephonyservice/contactwatcher.cpp:159 msgid "Unknown Number" msgstr "" telephony-service-0.5.3/po/ln.po000066400000000000000000000211461455543255600165750ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-12-16 17:03+0100\n" "PO-Revision-Date: 2023-01-05 11:07+0000\n" "Last-Translator: Anonymous \n" "Language-Team: Lingala \n" "Language: ln\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n > 1;\n" "X-Generator: Weblate 4.15.1-dev\n" #: indicator/telephony-service-call.desktop.in:4 msgid "Phone Calls" msgstr "" #: indicator/telephony-service-sms.desktop.in:4 msgid "SMS" msgstr "" #: approver/approver.cpp:66 msgid "Unknown caller" msgstr "" #: approver/approver.cpp:94 msgid "I'm busy at the moment. I'll call later." msgstr "" #: approver/approver.cpp:95 msgid "I'm running late, on my way now." msgstr "" #: approver/approver.cpp:96 msgid "Please call me back later." msgstr "" #: approver/approver.cpp:457 #, qt-format msgid "On [%1]" msgstr "" #: approver/approver.cpp:461 indicator/messagingmenu.cpp:414 msgid "Private number" msgstr "" #: approver/approver.cpp:464 indicator/messagingmenu.cpp:244 #: indicator/messagingmenu.cpp:418 indicator/textchannelobserver.cpp:640 msgid "Unknown number" msgstr "" #: approver/approver.cpp:470 approver/approver.cpp:485 msgid "Caller number is not available" msgstr "" #: approver/approver.cpp:476 msgid "Calling from private number" msgstr "" #: approver/approver.cpp:479 msgid "Calling from unknown number" msgstr "" #: approver/approver.cpp:482 #, qt-format msgid "Calling from %1" msgstr "" #: approver/approver.cpp:529 msgid "Hold + Answer" msgstr "" #: approver/approver.cpp:530 msgid "Accept" msgstr "" #: approver/approver.cpp:543 msgid "End + Answer" msgstr "" #: approver/approver.cpp:552 msgid "Decline" msgstr "" #: approver/approver.cpp:560 msgid "Message & decline" msgstr "" #: approver/main.cpp:46 msgid "Telephony Service Approver" msgstr "" #: indicator/authhandler.cpp:72 msgid "Authentication failed. Do you want to review your credentials?" msgstr "" #: indicator/authhandler.cpp:91 msgid "Yes" msgstr "" #: indicator/authhandler.cpp:94 msgid "No" msgstr "" #: indicator/displaynamesettings.cpp:35 #, qt-format msgid "SIM %1" msgstr "" #: indicator/main.cpp:53 msgid "Telephony Service Indicator" msgstr "" #: indicator/messagingmenu.cpp:83 indicator/messagingmenu.cpp:87 msgid "Telephony Service" msgstr "" #: indicator/messagingmenu.cpp:151 indicator/messagingmenu.cpp:293 #: indicator/messagingmenu.cpp:360 msgid "Send" msgstr "" #. TRANSLATORS : %1 is the group name and %2 is the recipient name #: indicator/messagingmenu.cpp:262 indicator/textchannelobserver.cpp:671 #: indicator/textchannelobserver.cpp:675 #, qt-format msgid "Message to %1 from %2" msgstr "" #. TRANSLATORS : %1 is the recipient name #: indicator/messagingmenu.cpp:265 indicator/messagingmenu.cpp:269 #, qt-format msgid "Message to the group from %1" msgstr "" #: indicator/messagingmenu.cpp:345 msgid "Call back" msgstr "" #: indicator/messagingmenu.cpp:350 msgid "Missed your call — can you call me now?" msgstr "" #: indicator/messagingmenu.cpp:351 msgid "Running late. On my way." msgstr "" #: indicator/messagingmenu.cpp:352 msgid "Busy at the moment. Will call you later." msgstr "" #: indicator/messagingmenu.cpp:353 msgid "I am 20 minutes late." msgstr "" #: indicator/messagingmenu.cpp:354 msgid "Still busy. Will call you later." msgstr "" #: indicator/messagingmenu.cpp:409 #, qt-format msgid "%1 missed call" msgid_plural "%1 missed calls" msgstr[0] "" msgstr[1] "" #: indicator/messagingmenu.cpp:492 msgid "Voicemail messages" msgstr "" #: indicator/messagingmenu.cpp:495 #, qt-format msgid "%1 voicemail message" msgid_plural "%1 voicemail messages" msgstr[0] "" msgstr[1] "" #: indicator/messagingmenu.cpp:500 msgid "Voicemail" msgstr "" #: indicator/metrics.cpp:42 #, qt-format msgid "%1 text messages sent today" msgstr "" #: indicator/metrics.cpp:43 msgid "No text messages sent today" msgstr "" #: indicator/metrics.cpp:44 #, qt-format msgid "%1 text messages received today" msgstr "" #: indicator/metrics.cpp:45 msgid "No text messages received today" msgstr "" #: indicator/metrics.cpp:46 #, qt-format msgid "%1 calls received today" msgstr "" #: indicator/metrics.cpp:47 msgid "No calls received today" msgstr "" #: indicator/metrics.cpp:48 #, qt-format msgid "%1 calls made today" msgstr "" #: indicator/metrics.cpp:49 indicator/metrics.cpp:51 msgid "No calls made today" msgstr "" #: indicator/metrics.cpp:50 #, qt-format msgid "Spent %1 minutes in calls today" msgstr "" #: indicator/textchannelobserver.cpp:225 msgid "Unlock your sim card and try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:227 msgid "Deactivate flight mode and try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:230 msgid "Try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:236 msgid "The message could not be sent" msgstr "" #: indicator/textchannelobserver.cpp:249 indicator/textchannelobserver.cpp:713 msgid "View message" msgstr "" #: indicator/textchannelobserver.cpp:295 msgid "New Group" msgstr "" #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:302 #, qt-format msgid "You joined group %1 " msgstr "" #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:306 #, qt-format msgid "You joined group %1" msgstr "" #: indicator/textchannelobserver.cpp:309 msgid "You joined a new group" msgstr "" #: indicator/textchannelobserver.cpp:328 msgid "View Group" msgstr "" #: indicator/textchannelobserver.cpp:367 indicator/ussdindicator.cpp:116 msgid "Ok" msgstr "" #: indicator/textchannelobserver.cpp:373 msgid "Save" msgstr "" #: indicator/textchannelobserver.cpp:468 msgid "Emergency Alert" msgstr "" #: indicator/textchannelobserver.cpp:471 msgid "Emergency Alert: Extreme" msgstr "" #: indicator/textchannelobserver.cpp:474 msgid "Emergency Alert: Severe" msgstr "" #: indicator/textchannelobserver.cpp:477 msgid "Emergency Alert: Notice" msgstr "" #: indicator/textchannelobserver.cpp:482 msgid "AMBER Alert" msgstr "" #: indicator/textchannelobserver.cpp:485 msgid "Alert" msgstr "" #: indicator/textchannelobserver.cpp:531 msgid "Show alert" msgstr "" #: indicator/textchannelobserver.cpp:604 #, qt-format msgid "Attachment: %1 image" msgid_plural "Attachments: %1 images" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:606 #, qt-format msgid "Attachment: %1 video" msgid_plural "Attachments: %1 videos" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:608 #, qt-format msgid "Attachment: %1 contact" msgid_plural "Attachments: %1 contacts" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:610 #, qt-format msgid "Attachment: %1 audio clip" msgid_plural "Attachments: %1 audio clips" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:612 #, qt-format msgid "Attachment: %1 file" msgid_plural "Attachments: %1 files" msgstr[0] "" msgstr[1] "" #. TRANSLATORS : message displayed when any error occurred while receiving a MMS (case when cellular-data is off, or any downloading issue). Notify that there was a message, the user can find more about it in the messaging-app. #: indicator/textchannelobserver.cpp:615 msgid "New MMS message" msgstr "" #. TRANSLATORS : %1 is the recipient name #: indicator/textchannelobserver.cpp:679 indicator/textchannelobserver.cpp:683 #, qt-format msgid "Message to group from %1" msgstr "" #: indicator/textchannelobserver.cpp:749 #, qt-format msgid "Message from %1" msgstr "" #: indicator/textchannelobserver.cpp:910 msgid "Please, select a SIM card:" msgstr "" #: indicator/ussdindicator.cpp:119 msgid "Reply" msgstr "" #: indicator/ussdindicator.cpp:142 #, fuzzy msgid "Cancel" msgstr "Cancel" #: libtelephonyservice/callnotification.cpp:53 msgid "Conf call on hold" msgstr "" #: libtelephonyservice/callnotification.cpp:53 #, qt-format msgid "%1 call on hold" msgstr "" #: libtelephonyservice/callnotification.cpp:56 msgid "Conf call ended" msgstr "" #: libtelephonyservice/callnotification.cpp:56 #, qt-format msgid "%1 call ended" msgstr "" #: libtelephonyservice/callnotification.cpp:59 #, qt-format msgid "%1 call declined" msgstr "" #: libtelephonyservice/contactwatcher.cpp:157 msgid "Private Number" msgstr "" #: libtelephonyservice/contactwatcher.cpp:159 msgid "Unknown Number" msgstr "" telephony-service-0.5.3/po/lo.po000066400000000000000000000211361455543255600165750ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-12-16 17:03+0100\n" "PO-Revision-Date: 2023-01-05 11:07+0000\n" "Last-Translator: Anonymous \n" "Language-Team: Lao \n" "Language: lo\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" "X-Generator: Weblate 4.15.1-dev\n" #: indicator/telephony-service-call.desktop.in:4 msgid "Phone Calls" msgstr "" #: indicator/telephony-service-sms.desktop.in:4 msgid "SMS" msgstr "" #: approver/approver.cpp:66 msgid "Unknown caller" msgstr "" #: approver/approver.cpp:94 msgid "I'm busy at the moment. I'll call later." msgstr "" #: approver/approver.cpp:95 msgid "I'm running late, on my way now." msgstr "" #: approver/approver.cpp:96 msgid "Please call me back later." msgstr "" #: approver/approver.cpp:457 #, qt-format msgid "On [%1]" msgstr "" #: approver/approver.cpp:461 indicator/messagingmenu.cpp:414 msgid "Private number" msgstr "" #: approver/approver.cpp:464 indicator/messagingmenu.cpp:244 #: indicator/messagingmenu.cpp:418 indicator/textchannelobserver.cpp:640 msgid "Unknown number" msgstr "" #: approver/approver.cpp:470 approver/approver.cpp:485 msgid "Caller number is not available" msgstr "" #: approver/approver.cpp:476 msgid "Calling from private number" msgstr "" #: approver/approver.cpp:479 msgid "Calling from unknown number" msgstr "" #: approver/approver.cpp:482 #, qt-format msgid "Calling from %1" msgstr "" #: approver/approver.cpp:529 msgid "Hold + Answer" msgstr "" #: approver/approver.cpp:530 msgid "Accept" msgstr "" #: approver/approver.cpp:543 msgid "End + Answer" msgstr "" #: approver/approver.cpp:552 msgid "Decline" msgstr "" #: approver/approver.cpp:560 msgid "Message & decline" msgstr "" #: approver/main.cpp:46 msgid "Telephony Service Approver" msgstr "" #: indicator/authhandler.cpp:72 msgid "Authentication failed. Do you want to review your credentials?" msgstr "" #: indicator/authhandler.cpp:91 msgid "Yes" msgstr "" #: indicator/authhandler.cpp:94 msgid "No" msgstr "" #: indicator/displaynamesettings.cpp:35 #, qt-format msgid "SIM %1" msgstr "" #: indicator/main.cpp:53 msgid "Telephony Service Indicator" msgstr "" #: indicator/messagingmenu.cpp:83 indicator/messagingmenu.cpp:87 msgid "Telephony Service" msgstr "" #: indicator/messagingmenu.cpp:151 indicator/messagingmenu.cpp:293 #: indicator/messagingmenu.cpp:360 msgid "Send" msgstr "" #. TRANSLATORS : %1 is the group name and %2 is the recipient name #: indicator/messagingmenu.cpp:262 indicator/textchannelobserver.cpp:671 #: indicator/textchannelobserver.cpp:675 #, qt-format msgid "Message to %1 from %2" msgstr "" #. TRANSLATORS : %1 is the recipient name #: indicator/messagingmenu.cpp:265 indicator/messagingmenu.cpp:269 #, qt-format msgid "Message to the group from %1" msgstr "" #: indicator/messagingmenu.cpp:345 msgid "Call back" msgstr "" #: indicator/messagingmenu.cpp:350 msgid "Missed your call — can you call me now?" msgstr "" #: indicator/messagingmenu.cpp:351 msgid "Running late. On my way." msgstr "" #: indicator/messagingmenu.cpp:352 msgid "Busy at the moment. Will call you later." msgstr "" #: indicator/messagingmenu.cpp:353 msgid "I am 20 minutes late." msgstr "" #: indicator/messagingmenu.cpp:354 msgid "Still busy. Will call you later." msgstr "" #: indicator/messagingmenu.cpp:409 #, qt-format msgid "%1 missed call" msgid_plural "%1 missed calls" msgstr[0] "" msgstr[1] "" #: indicator/messagingmenu.cpp:492 msgid "Voicemail messages" msgstr "" #: indicator/messagingmenu.cpp:495 #, qt-format msgid "%1 voicemail message" msgid_plural "%1 voicemail messages" msgstr[0] "" msgstr[1] "" #: indicator/messagingmenu.cpp:500 msgid "Voicemail" msgstr "" #: indicator/metrics.cpp:42 #, qt-format msgid "%1 text messages sent today" msgstr "" #: indicator/metrics.cpp:43 msgid "No text messages sent today" msgstr "" #: indicator/metrics.cpp:44 #, qt-format msgid "%1 text messages received today" msgstr "" #: indicator/metrics.cpp:45 msgid "No text messages received today" msgstr "" #: indicator/metrics.cpp:46 #, qt-format msgid "%1 calls received today" msgstr "" #: indicator/metrics.cpp:47 msgid "No calls received today" msgstr "" #: indicator/metrics.cpp:48 #, qt-format msgid "%1 calls made today" msgstr "" #: indicator/metrics.cpp:49 indicator/metrics.cpp:51 msgid "No calls made today" msgstr "" #: indicator/metrics.cpp:50 #, qt-format msgid "Spent %1 minutes in calls today" msgstr "" #: indicator/textchannelobserver.cpp:225 msgid "Unlock your sim card and try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:227 msgid "Deactivate flight mode and try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:230 msgid "Try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:236 msgid "The message could not be sent" msgstr "" #: indicator/textchannelobserver.cpp:249 indicator/textchannelobserver.cpp:713 msgid "View message" msgstr "" #: indicator/textchannelobserver.cpp:295 msgid "New Group" msgstr "" #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:302 #, qt-format msgid "You joined group %1 " msgstr "" #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:306 #, qt-format msgid "You joined group %1" msgstr "" #: indicator/textchannelobserver.cpp:309 msgid "You joined a new group" msgstr "" #: indicator/textchannelobserver.cpp:328 msgid "View Group" msgstr "" #: indicator/textchannelobserver.cpp:367 indicator/ussdindicator.cpp:116 msgid "Ok" msgstr "" #: indicator/textchannelobserver.cpp:373 msgid "Save" msgstr "" #: indicator/textchannelobserver.cpp:468 msgid "Emergency Alert" msgstr "" #: indicator/textchannelobserver.cpp:471 msgid "Emergency Alert: Extreme" msgstr "" #: indicator/textchannelobserver.cpp:474 msgid "Emergency Alert: Severe" msgstr "" #: indicator/textchannelobserver.cpp:477 msgid "Emergency Alert: Notice" msgstr "" #: indicator/textchannelobserver.cpp:482 msgid "AMBER Alert" msgstr "" #: indicator/textchannelobserver.cpp:485 msgid "Alert" msgstr "" #: indicator/textchannelobserver.cpp:531 msgid "Show alert" msgstr "" #: indicator/textchannelobserver.cpp:604 #, qt-format msgid "Attachment: %1 image" msgid_plural "Attachments: %1 images" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:606 #, qt-format msgid "Attachment: %1 video" msgid_plural "Attachments: %1 videos" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:608 #, qt-format msgid "Attachment: %1 contact" msgid_plural "Attachments: %1 contacts" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:610 #, qt-format msgid "Attachment: %1 audio clip" msgid_plural "Attachments: %1 audio clips" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:612 #, qt-format msgid "Attachment: %1 file" msgid_plural "Attachments: %1 files" msgstr[0] "" msgstr[1] "" #. TRANSLATORS : message displayed when any error occurred while receiving a MMS (case when cellular-data is off, or any downloading issue). Notify that there was a message, the user can find more about it in the messaging-app. #: indicator/textchannelobserver.cpp:615 msgid "New MMS message" msgstr "" #. TRANSLATORS : %1 is the recipient name #: indicator/textchannelobserver.cpp:679 indicator/textchannelobserver.cpp:683 #, qt-format msgid "Message to group from %1" msgstr "" #: indicator/textchannelobserver.cpp:749 #, qt-format msgid "Message from %1" msgstr "" #: indicator/textchannelobserver.cpp:910 msgid "Please, select a SIM card:" msgstr "" #: indicator/ussdindicator.cpp:119 msgid "Reply" msgstr "" #: indicator/ussdindicator.cpp:142 #, fuzzy msgid "Cancel" msgstr "Cancel" #: libtelephonyservice/callnotification.cpp:53 msgid "Conf call on hold" msgstr "" #: libtelephonyservice/callnotification.cpp:53 #, qt-format msgid "%1 call on hold" msgstr "" #: libtelephonyservice/callnotification.cpp:56 msgid "Conf call ended" msgstr "" #: libtelephonyservice/callnotification.cpp:56 #, qt-format msgid "%1 call ended" msgstr "" #: libtelephonyservice/callnotification.cpp:59 #, qt-format msgid "%1 call declined" msgstr "" #: libtelephonyservice/contactwatcher.cpp:157 msgid "Private Number" msgstr "" #: libtelephonyservice/contactwatcher.cpp:159 msgid "Unknown Number" msgstr "" telephony-service-0.5.3/po/lt.po000066400000000000000000000211411455543255600165760ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-12-16 17:03+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: Automatically generated\n" "Language-Team: none\n" "Language: lt\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n % 10 == 1 && (n % 100 < 11 || n % 100 > " "19)) ? 0 : ((n % 10 >= 2 && n % 10 <= 9 && (n % 100 < 11 || n % 100 > 19)) ? " "1 : 2);\n" #: indicator/telephony-service-call.desktop.in:4 msgid "Phone Calls" msgstr "" #: indicator/telephony-service-sms.desktop.in:4 msgid "SMS" msgstr "" #: approver/approver.cpp:66 msgid "Unknown caller" msgstr "" #: approver/approver.cpp:94 msgid "I'm busy at the moment. I'll call later." msgstr "" #: approver/approver.cpp:95 msgid "I'm running late, on my way now." msgstr "" #: approver/approver.cpp:96 msgid "Please call me back later." msgstr "" #: approver/approver.cpp:457 #, qt-format msgid "On [%1]" msgstr "" #: approver/approver.cpp:461 indicator/messagingmenu.cpp:414 msgid "Private number" msgstr "" #: approver/approver.cpp:464 indicator/messagingmenu.cpp:244 #: indicator/messagingmenu.cpp:418 indicator/textchannelobserver.cpp:640 msgid "Unknown number" msgstr "" #: approver/approver.cpp:470 approver/approver.cpp:485 msgid "Caller number is not available" msgstr "" #: approver/approver.cpp:476 msgid "Calling from private number" msgstr "" #: approver/approver.cpp:479 msgid "Calling from unknown number" msgstr "" #: approver/approver.cpp:482 #, qt-format msgid "Calling from %1" msgstr "" #: approver/approver.cpp:529 msgid "Hold + Answer" msgstr "" #: approver/approver.cpp:530 msgid "Accept" msgstr "" #: approver/approver.cpp:543 msgid "End + Answer" msgstr "" #: approver/approver.cpp:552 msgid "Decline" msgstr "" #: approver/approver.cpp:560 msgid "Message & decline" msgstr "" #: approver/main.cpp:46 msgid "Telephony Service Approver" msgstr "" #: indicator/authhandler.cpp:72 msgid "Authentication failed. Do you want to review your credentials?" msgstr "" #: indicator/authhandler.cpp:91 msgid "Yes" msgstr "" #: indicator/authhandler.cpp:94 msgid "No" msgstr "" #: indicator/displaynamesettings.cpp:35 #, qt-format msgid "SIM %1" msgstr "" #: indicator/main.cpp:53 msgid "Telephony Service Indicator" msgstr "" #: indicator/messagingmenu.cpp:83 indicator/messagingmenu.cpp:87 msgid "Telephony Service" msgstr "" #: indicator/messagingmenu.cpp:151 indicator/messagingmenu.cpp:293 #: indicator/messagingmenu.cpp:360 msgid "Send" msgstr "" #. TRANSLATORS : %1 is the group name and %2 is the recipient name #: indicator/messagingmenu.cpp:262 indicator/textchannelobserver.cpp:671 #: indicator/textchannelobserver.cpp:675 #, qt-format msgid "Message to %1 from %2" msgstr "" #. TRANSLATORS : %1 is the recipient name #: indicator/messagingmenu.cpp:265 indicator/messagingmenu.cpp:269 #, qt-format msgid "Message to the group from %1" msgstr "" #: indicator/messagingmenu.cpp:345 msgid "Call back" msgstr "" #: indicator/messagingmenu.cpp:350 msgid "Missed your call — can you call me now?" msgstr "" #: indicator/messagingmenu.cpp:351 msgid "Running late. On my way." msgstr "" #: indicator/messagingmenu.cpp:352 msgid "Busy at the moment. Will call you later." msgstr "" #: indicator/messagingmenu.cpp:353 msgid "I am 20 minutes late." msgstr "" #: indicator/messagingmenu.cpp:354 msgid "Still busy. Will call you later." msgstr "" #: indicator/messagingmenu.cpp:409 #, qt-format msgid "%1 missed call" msgid_plural "%1 missed calls" msgstr[0] "" msgstr[1] "" #: indicator/messagingmenu.cpp:492 msgid "Voicemail messages" msgstr "" #: indicator/messagingmenu.cpp:495 #, qt-format msgid "%1 voicemail message" msgid_plural "%1 voicemail messages" msgstr[0] "" msgstr[1] "" #: indicator/messagingmenu.cpp:500 msgid "Voicemail" msgstr "" #: indicator/metrics.cpp:42 #, qt-format msgid "%1 text messages sent today" msgstr "" #: indicator/metrics.cpp:43 msgid "No text messages sent today" msgstr "" #: indicator/metrics.cpp:44 #, qt-format msgid "%1 text messages received today" msgstr "" #: indicator/metrics.cpp:45 msgid "No text messages received today" msgstr "" #: indicator/metrics.cpp:46 #, qt-format msgid "%1 calls received today" msgstr "" #: indicator/metrics.cpp:47 msgid "No calls received today" msgstr "" #: indicator/metrics.cpp:48 #, qt-format msgid "%1 calls made today" msgstr "" #: indicator/metrics.cpp:49 indicator/metrics.cpp:51 msgid "No calls made today" msgstr "" #: indicator/metrics.cpp:50 #, qt-format msgid "Spent %1 minutes in calls today" msgstr "" #: indicator/textchannelobserver.cpp:225 msgid "Unlock your sim card and try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:227 msgid "Deactivate flight mode and try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:230 msgid "Try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:236 msgid "The message could not be sent" msgstr "" #: indicator/textchannelobserver.cpp:249 indicator/textchannelobserver.cpp:713 msgid "View message" msgstr "" #: indicator/textchannelobserver.cpp:295 msgid "New Group" msgstr "" #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:302 #, qt-format msgid "You joined group %1 " msgstr "" #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:306 #, qt-format msgid "You joined group %1" msgstr "" #: indicator/textchannelobserver.cpp:309 msgid "You joined a new group" msgstr "" #: indicator/textchannelobserver.cpp:328 msgid "View Group" msgstr "" #: indicator/textchannelobserver.cpp:367 indicator/ussdindicator.cpp:116 msgid "Ok" msgstr "" #: indicator/textchannelobserver.cpp:373 msgid "Save" msgstr "" #: indicator/textchannelobserver.cpp:468 msgid "Emergency Alert" msgstr "" #: indicator/textchannelobserver.cpp:471 msgid "Emergency Alert: Extreme" msgstr "" #: indicator/textchannelobserver.cpp:474 msgid "Emergency Alert: Severe" msgstr "" #: indicator/textchannelobserver.cpp:477 msgid "Emergency Alert: Notice" msgstr "" #: indicator/textchannelobserver.cpp:482 msgid "AMBER Alert" msgstr "" #: indicator/textchannelobserver.cpp:485 msgid "Alert" msgstr "" #: indicator/textchannelobserver.cpp:531 msgid "Show alert" msgstr "" #: indicator/textchannelobserver.cpp:604 #, qt-format msgid "Attachment: %1 image" msgid_plural "Attachments: %1 images" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:606 #, qt-format msgid "Attachment: %1 video" msgid_plural "Attachments: %1 videos" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:608 #, qt-format msgid "Attachment: %1 contact" msgid_plural "Attachments: %1 contacts" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:610 #, qt-format msgid "Attachment: %1 audio clip" msgid_plural "Attachments: %1 audio clips" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:612 #, qt-format msgid "Attachment: %1 file" msgid_plural "Attachments: %1 files" msgstr[0] "" msgstr[1] "" #. TRANSLATORS : message displayed when any error occurred while receiving a MMS (case when cellular-data is off, or any downloading issue). Notify that there was a message, the user can find more about it in the messaging-app. #: indicator/textchannelobserver.cpp:615 msgid "New MMS message" msgstr "" #. TRANSLATORS : %1 is the recipient name #: indicator/textchannelobserver.cpp:679 indicator/textchannelobserver.cpp:683 #, qt-format msgid "Message to group from %1" msgstr "" #: indicator/textchannelobserver.cpp:749 #, qt-format msgid "Message from %1" msgstr "" #: indicator/textchannelobserver.cpp:910 msgid "Please, select a SIM card:" msgstr "" #: indicator/ussdindicator.cpp:119 msgid "Reply" msgstr "" #: indicator/ussdindicator.cpp:142 msgid "Cancel" msgstr "" #: libtelephonyservice/callnotification.cpp:53 msgid "Conf call on hold" msgstr "" #: libtelephonyservice/callnotification.cpp:53 #, qt-format msgid "%1 call on hold" msgstr "" #: libtelephonyservice/callnotification.cpp:56 msgid "Conf call ended" msgstr "" #: libtelephonyservice/callnotification.cpp:56 #, qt-format msgid "%1 call ended" msgstr "" #: libtelephonyservice/callnotification.cpp:59 #, qt-format msgid "%1 call declined" msgstr "" #: libtelephonyservice/contactwatcher.cpp:157 msgid "Private Number" msgstr "" #: libtelephonyservice/contactwatcher.cpp:159 msgid "Unknown Number" msgstr "" telephony-service-0.5.3/po/lv.po000066400000000000000000000254701455543255600166110ustar00rootroot00000000000000# Latvian translation for telephony-service # Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013 # This file is distributed under the same license as the telephony-service package. # # FIRST AUTHOR , 2013. # Rūdolfs Mazurs , 2015. msgid "" msgstr "" "Project-Id-Version: telephony-service\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-12-16 17:03+0100\n" "PO-Revision-Date: 2015-03-01 07:38+0000\n" "Last-Translator: Rūdolfs Mazurs \n" "Language-Team: Latvian \n" "Language: lv\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 : 2;\n" "X-Launchpad-Export-Date: 2017-01-04 06:02+0000\n" "X-Generator: Launchpad (build 18298)\n" #: indicator/telephony-service-call.desktop.in:4 msgid "Phone Calls" msgstr "Tālruņa zvani" #: indicator/telephony-service-sms.desktop.in:4 msgid "SMS" msgstr "SMS" #: approver/approver.cpp:66 msgid "Unknown caller" msgstr "Nezināms zvanītājs" #: approver/approver.cpp:94 msgid "I'm busy at the moment. I'll call later." msgstr "Pašlaik esmu aizņemts. Piezvanīšu vēlāk." #: approver/approver.cpp:95 msgid "I'm running late, on my way now." msgstr "Esmu aizkavējies, jau esmu ceļā." #: approver/approver.cpp:96 msgid "Please call me back later." msgstr "Lūdzu, atzvaniet man vēlāk." #: approver/approver.cpp:457 #, qt-format msgid "On [%1]" msgstr "" #: approver/approver.cpp:461 indicator/messagingmenu.cpp:414 msgid "Private number" msgstr "Privāts numurs" #: approver/approver.cpp:464 indicator/messagingmenu.cpp:244 #: indicator/messagingmenu.cpp:418 indicator/textchannelobserver.cpp:640 msgid "Unknown number" msgstr "Nezināms numurs" #: approver/approver.cpp:470 approver/approver.cpp:485 msgid "Caller number is not available" msgstr "Zvanītāja numurs nav pieejams" #: approver/approver.cpp:476 msgid "Calling from private number" msgstr "Zvanīšana no privātā numura" #: approver/approver.cpp:479 msgid "Calling from unknown number" msgstr "Zvanīšana no nezināma numura" #: approver/approver.cpp:482 #, qt-format msgid "Calling from %1" msgstr "Zvana no %1" #: approver/approver.cpp:529 msgid "Hold + Answer" msgstr "Aizturēt + atbildēt" #: approver/approver.cpp:530 msgid "Accept" msgstr "Piekrist" #: approver/approver.cpp:543 msgid "End + Answer" msgstr "Beigt + atbildēt" #: approver/approver.cpp:552 msgid "Decline" msgstr "Noraidīt" #: approver/approver.cpp:560 msgid "Message & decline" msgstr "Sūtīt īsziņu un noraidīt" #: approver/main.cpp:46 msgid "Telephony Service Approver" msgstr "Telefonijas pakalpojumu apstiprinātājs" #: indicator/authhandler.cpp:72 msgid "Authentication failed. Do you want to review your credentials?" msgstr "" #: indicator/authhandler.cpp:91 msgid "Yes" msgstr "" #: indicator/authhandler.cpp:94 msgid "No" msgstr "" #: indicator/displaynamesettings.cpp:35 #, qt-format msgid "SIM %1" msgstr "SIM %1" #: indicator/main.cpp:53 msgid "Telephony Service Indicator" msgstr "Telefonijas pakalpojumu indikators" #: indicator/messagingmenu.cpp:83 indicator/messagingmenu.cpp:87 msgid "Telephony Service" msgstr "Telefonijas pakalpojumi" #: indicator/messagingmenu.cpp:151 indicator/messagingmenu.cpp:293 #: indicator/messagingmenu.cpp:360 msgid "Send" msgstr "Sūtīt" #. TRANSLATORS : %1 is the group name and %2 is the recipient name #: indicator/messagingmenu.cpp:262 indicator/textchannelobserver.cpp:671 #: indicator/textchannelobserver.cpp:675 #, qt-format msgid "Message to %1 from %2" msgstr "" #. TRANSLATORS : %1 is the recipient name #: indicator/messagingmenu.cpp:265 indicator/messagingmenu.cpp:269 #, fuzzy, qt-format #| msgid "Message from %1" msgid "Message to the group from %1" msgstr "Īsziņa no %1" #: indicator/messagingmenu.cpp:345 msgid "Call back" msgstr "Atzvans" #: indicator/messagingmenu.cpp:350 #, fuzzy #| msgid "I missed your call - can you call me now?" msgid "Missed your call — can you call me now?" msgstr "Es palaidu garām tavu zvanu - vai vari man piezvanīt tagad?" #: indicator/messagingmenu.cpp:351 #, fuzzy #| msgid "I'm running late. I'm on my way." msgid "Running late. On my way." msgstr "Es esmu aizkavējies. Es tūlīt būšu." #: indicator/messagingmenu.cpp:352 #, fuzzy #| msgid "I'm busy at the moment. I'll call you later." msgid "Busy at the moment. Will call you later." msgstr "Pašlaik esmu aizņemts. Piezvanīšu jums vēlāk." #: indicator/messagingmenu.cpp:353 #, fuzzy #| msgid "I'll be 20 minutes late." msgid "I am 20 minutes late." msgstr "Es nokavēšu 20 minūtes." #: indicator/messagingmenu.cpp:354 #, fuzzy #| msgid "Sorry, I'm still busy. I'll call you later." msgid "Still busy. Will call you later." msgstr "Piedod, es vēl esmu aizņemts. Es tev piezvanīšu vēlāk." #: indicator/messagingmenu.cpp:409 #, qt-format msgid "%1 missed call" msgid_plural "%1 missed calls" msgstr[0] "%1 neatbildēts zvans" msgstr[1] "%1 neatbildēti zvanu" msgstr[2] "%1 neatbildētu zvanu" #: indicator/messagingmenu.cpp:492 msgid "Voicemail messages" msgstr "Balss pasta ziņojumi" #: indicator/messagingmenu.cpp:495 #, qt-format msgid "%1 voicemail message" msgid_plural "%1 voicemail messages" msgstr[0] "%1 balss pasta ziņa" msgstr[1] "%1 balss pasta ziņas" msgstr[2] "%1 balss pasta ziņu" #: indicator/messagingmenu.cpp:500 msgid "Voicemail" msgstr "Balss pasts" #: indicator/metrics.cpp:42 #, qt-format msgid "%1 text messages sent today" msgstr "Šodien nosūtītas %1 īsziņas" #: indicator/metrics.cpp:43 msgid "No text messages sent today" msgstr "Šodien nav sūtītu īsziņu" #: indicator/metrics.cpp:44 #, qt-format msgid "%1 text messages received today" msgstr "Šodien saņemtas %1 īsziņas" #: indicator/metrics.cpp:45 msgid "No text messages received today" msgstr "Šodien nav saņemtu īsziņu" #: indicator/metrics.cpp:46 #, qt-format msgid "%1 calls received today" msgstr "Šodien saņemti %1 zvani" #: indicator/metrics.cpp:47 msgid "No calls received today" msgstr "Šodien nav saņemtu zvanu" #: indicator/metrics.cpp:48 #, qt-format msgid "%1 calls made today" msgstr "Šodien veikti %1 zvani" #: indicator/metrics.cpp:49 indicator/metrics.cpp:51 msgid "No calls made today" msgstr "Šodien nav veiktu zvanu" #: indicator/metrics.cpp:50 #, qt-format msgid "Spent %1 minutes in calls today" msgstr "Šodien zvanot pavadīju %1 minūtes" #: indicator/textchannelobserver.cpp:225 msgid "Unlock your sim card and try again from the messaging application." msgstr "Atbloķējiet savu SIM karti un mēģiniet vēlreiz no īsziņu lietotnes." #: indicator/textchannelobserver.cpp:227 msgid "Deactivate flight mode and try again from the messaging application." msgstr "Izslēdziet lidmašīnas režīmu un mēģiniet vēlreiz no īsziņu lietotnes." #: indicator/textchannelobserver.cpp:230 msgid "Try again from the messaging application." msgstr "Mēģiniet vēlreiz no īsziņu lietotnes." #: indicator/textchannelobserver.cpp:236 msgid "The message could not be sent" msgstr "Šo īsziņu nevarēja nosūtīt" #: indicator/textchannelobserver.cpp:249 indicator/textchannelobserver.cpp:713 msgid "View message" msgstr "Skatīt īsziņu" #: indicator/textchannelobserver.cpp:295 msgid "New Group" msgstr "" #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:302 #, qt-format msgid "You joined group %1 " msgstr "" #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:306 #, qt-format msgid "You joined group %1" msgstr "" #: indicator/textchannelobserver.cpp:309 msgid "You joined a new group" msgstr "" #: indicator/textchannelobserver.cpp:328 msgid "View Group" msgstr "" #: indicator/textchannelobserver.cpp:367 indicator/ussdindicator.cpp:116 msgid "Ok" msgstr "Labi" #: indicator/textchannelobserver.cpp:373 msgid "Save" msgstr "Saglabāt" #: indicator/textchannelobserver.cpp:468 msgid "Emergency Alert" msgstr "" #: indicator/textchannelobserver.cpp:471 msgid "Emergency Alert: Extreme" msgstr "" #: indicator/textchannelobserver.cpp:474 msgid "Emergency Alert: Severe" msgstr "" #: indicator/textchannelobserver.cpp:477 msgid "Emergency Alert: Notice" msgstr "" #: indicator/textchannelobserver.cpp:482 msgid "AMBER Alert" msgstr "" #: indicator/textchannelobserver.cpp:485 msgid "Alert" msgstr "" #: indicator/textchannelobserver.cpp:531 msgid "Show alert" msgstr "" #: indicator/textchannelobserver.cpp:604 #, qt-format msgid "Attachment: %1 image" msgid_plural "Attachments: %1 images" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:606 #, qt-format msgid "Attachment: %1 video" msgid_plural "Attachments: %1 videos" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:608 #, qt-format msgid "Attachment: %1 contact" msgid_plural "Attachments: %1 contacts" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:610 #, qt-format msgid "Attachment: %1 audio clip" msgid_plural "Attachments: %1 audio clips" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:612 #, qt-format msgid "Attachment: %1 file" msgid_plural "Attachments: %1 files" msgstr[0] "" msgstr[1] "" #. TRANSLATORS : message displayed when any error occurred while receiving a MMS (case when cellular-data is off, or any downloading issue). Notify that there was a message, the user can find more about it in the messaging-app. #: indicator/textchannelobserver.cpp:615 #, fuzzy #| msgid "View message" msgid "New MMS message" msgstr "Skatīt īsziņu" #. TRANSLATORS : %1 is the recipient name #: indicator/textchannelobserver.cpp:679 indicator/textchannelobserver.cpp:683 #, qt-format msgid "Message to group from %1" msgstr "" #: indicator/textchannelobserver.cpp:749 #, qt-format msgid "Message from %1" msgstr "Īsziņa no %1" #: indicator/textchannelobserver.cpp:910 msgid "Please, select a SIM card:" msgstr "Lūdzu, ievietojiet SIM karti:" #: indicator/ussdindicator.cpp:119 msgid "Reply" msgstr "Atbildēt" #: indicator/ussdindicator.cpp:142 msgid "Cancel" msgstr "Atcelt" #: libtelephonyservice/callnotification.cpp:53 msgid "Conf call on hold" msgstr "" #: libtelephonyservice/callnotification.cpp:53 #, qt-format msgid "%1 call on hold" msgstr "" #: libtelephonyservice/callnotification.cpp:56 msgid "Conf call ended" msgstr "" #: libtelephonyservice/callnotification.cpp:56 #, qt-format msgid "%1 call ended" msgstr "" #: libtelephonyservice/callnotification.cpp:59 #, qt-format msgid "%1 call declined" msgstr "" #: libtelephonyservice/contactwatcher.cpp:157 msgid "Private Number" msgstr "Privāts numurs" #: libtelephonyservice/contactwatcher.cpp:159 msgid "Unknown Number" msgstr "Nezināms numurs" #, fuzzy #~| msgid "Telephony Service" #~ msgid "telephony-service-call" #~ msgstr "Telefonijas pakalpojumi" #, fuzzy #~| msgid "Telephony Service" #~ msgid "telephony-service-message" #~ msgstr "Telefonijas pakalpojumi" telephony-service-0.5.3/po/mg.po000066400000000000000000000211471455543255600165700ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-12-16 17:03+0100\n" "PO-Revision-Date: 2023-01-05 11:07+0000\n" "Last-Translator: Anonymous \n" "Language-Team: Malagasy \n" "Language: mg\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n > 1;\n" "X-Generator: Weblate 4.15.1-dev\n" #: indicator/telephony-service-call.desktop.in:4 msgid "Phone Calls" msgstr "" #: indicator/telephony-service-sms.desktop.in:4 msgid "SMS" msgstr "" #: approver/approver.cpp:66 msgid "Unknown caller" msgstr "" #: approver/approver.cpp:94 msgid "I'm busy at the moment. I'll call later." msgstr "" #: approver/approver.cpp:95 msgid "I'm running late, on my way now." msgstr "" #: approver/approver.cpp:96 msgid "Please call me back later." msgstr "" #: approver/approver.cpp:457 #, qt-format msgid "On [%1]" msgstr "" #: approver/approver.cpp:461 indicator/messagingmenu.cpp:414 msgid "Private number" msgstr "" #: approver/approver.cpp:464 indicator/messagingmenu.cpp:244 #: indicator/messagingmenu.cpp:418 indicator/textchannelobserver.cpp:640 msgid "Unknown number" msgstr "" #: approver/approver.cpp:470 approver/approver.cpp:485 msgid "Caller number is not available" msgstr "" #: approver/approver.cpp:476 msgid "Calling from private number" msgstr "" #: approver/approver.cpp:479 msgid "Calling from unknown number" msgstr "" #: approver/approver.cpp:482 #, qt-format msgid "Calling from %1" msgstr "" #: approver/approver.cpp:529 msgid "Hold + Answer" msgstr "" #: approver/approver.cpp:530 msgid "Accept" msgstr "" #: approver/approver.cpp:543 msgid "End + Answer" msgstr "" #: approver/approver.cpp:552 msgid "Decline" msgstr "" #: approver/approver.cpp:560 msgid "Message & decline" msgstr "" #: approver/main.cpp:46 msgid "Telephony Service Approver" msgstr "" #: indicator/authhandler.cpp:72 msgid "Authentication failed. Do you want to review your credentials?" msgstr "" #: indicator/authhandler.cpp:91 msgid "Yes" msgstr "" #: indicator/authhandler.cpp:94 msgid "No" msgstr "" #: indicator/displaynamesettings.cpp:35 #, qt-format msgid "SIM %1" msgstr "" #: indicator/main.cpp:53 msgid "Telephony Service Indicator" msgstr "" #: indicator/messagingmenu.cpp:83 indicator/messagingmenu.cpp:87 msgid "Telephony Service" msgstr "" #: indicator/messagingmenu.cpp:151 indicator/messagingmenu.cpp:293 #: indicator/messagingmenu.cpp:360 msgid "Send" msgstr "" #. TRANSLATORS : %1 is the group name and %2 is the recipient name #: indicator/messagingmenu.cpp:262 indicator/textchannelobserver.cpp:671 #: indicator/textchannelobserver.cpp:675 #, qt-format msgid "Message to %1 from %2" msgstr "" #. TRANSLATORS : %1 is the recipient name #: indicator/messagingmenu.cpp:265 indicator/messagingmenu.cpp:269 #, qt-format msgid "Message to the group from %1" msgstr "" #: indicator/messagingmenu.cpp:345 msgid "Call back" msgstr "" #: indicator/messagingmenu.cpp:350 msgid "Missed your call — can you call me now?" msgstr "" #: indicator/messagingmenu.cpp:351 msgid "Running late. On my way." msgstr "" #: indicator/messagingmenu.cpp:352 msgid "Busy at the moment. Will call you later." msgstr "" #: indicator/messagingmenu.cpp:353 msgid "I am 20 minutes late." msgstr "" #: indicator/messagingmenu.cpp:354 msgid "Still busy. Will call you later." msgstr "" #: indicator/messagingmenu.cpp:409 #, qt-format msgid "%1 missed call" msgid_plural "%1 missed calls" msgstr[0] "" msgstr[1] "" #: indicator/messagingmenu.cpp:492 msgid "Voicemail messages" msgstr "" #: indicator/messagingmenu.cpp:495 #, qt-format msgid "%1 voicemail message" msgid_plural "%1 voicemail messages" msgstr[0] "" msgstr[1] "" #: indicator/messagingmenu.cpp:500 msgid "Voicemail" msgstr "" #: indicator/metrics.cpp:42 #, qt-format msgid "%1 text messages sent today" msgstr "" #: indicator/metrics.cpp:43 msgid "No text messages sent today" msgstr "" #: indicator/metrics.cpp:44 #, qt-format msgid "%1 text messages received today" msgstr "" #: indicator/metrics.cpp:45 msgid "No text messages received today" msgstr "" #: indicator/metrics.cpp:46 #, qt-format msgid "%1 calls received today" msgstr "" #: indicator/metrics.cpp:47 msgid "No calls received today" msgstr "" #: indicator/metrics.cpp:48 #, qt-format msgid "%1 calls made today" msgstr "" #: indicator/metrics.cpp:49 indicator/metrics.cpp:51 msgid "No calls made today" msgstr "" #: indicator/metrics.cpp:50 #, qt-format msgid "Spent %1 minutes in calls today" msgstr "" #: indicator/textchannelobserver.cpp:225 msgid "Unlock your sim card and try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:227 msgid "Deactivate flight mode and try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:230 msgid "Try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:236 msgid "The message could not be sent" msgstr "" #: indicator/textchannelobserver.cpp:249 indicator/textchannelobserver.cpp:713 msgid "View message" msgstr "" #: indicator/textchannelobserver.cpp:295 msgid "New Group" msgstr "" #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:302 #, qt-format msgid "You joined group %1 " msgstr "" #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:306 #, qt-format msgid "You joined group %1" msgstr "" #: indicator/textchannelobserver.cpp:309 msgid "You joined a new group" msgstr "" #: indicator/textchannelobserver.cpp:328 msgid "View Group" msgstr "" #: indicator/textchannelobserver.cpp:367 indicator/ussdindicator.cpp:116 msgid "Ok" msgstr "" #: indicator/textchannelobserver.cpp:373 msgid "Save" msgstr "" #: indicator/textchannelobserver.cpp:468 msgid "Emergency Alert" msgstr "" #: indicator/textchannelobserver.cpp:471 msgid "Emergency Alert: Extreme" msgstr "" #: indicator/textchannelobserver.cpp:474 msgid "Emergency Alert: Severe" msgstr "" #: indicator/textchannelobserver.cpp:477 msgid "Emergency Alert: Notice" msgstr "" #: indicator/textchannelobserver.cpp:482 msgid "AMBER Alert" msgstr "" #: indicator/textchannelobserver.cpp:485 msgid "Alert" msgstr "" #: indicator/textchannelobserver.cpp:531 msgid "Show alert" msgstr "" #: indicator/textchannelobserver.cpp:604 #, qt-format msgid "Attachment: %1 image" msgid_plural "Attachments: %1 images" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:606 #, qt-format msgid "Attachment: %1 video" msgid_plural "Attachments: %1 videos" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:608 #, qt-format msgid "Attachment: %1 contact" msgid_plural "Attachments: %1 contacts" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:610 #, qt-format msgid "Attachment: %1 audio clip" msgid_plural "Attachments: %1 audio clips" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:612 #, qt-format msgid "Attachment: %1 file" msgid_plural "Attachments: %1 files" msgstr[0] "" msgstr[1] "" #. TRANSLATORS : message displayed when any error occurred while receiving a MMS (case when cellular-data is off, or any downloading issue). Notify that there was a message, the user can find more about it in the messaging-app. #: indicator/textchannelobserver.cpp:615 msgid "New MMS message" msgstr "" #. TRANSLATORS : %1 is the recipient name #: indicator/textchannelobserver.cpp:679 indicator/textchannelobserver.cpp:683 #, qt-format msgid "Message to group from %1" msgstr "" #: indicator/textchannelobserver.cpp:749 #, qt-format msgid "Message from %1" msgstr "" #: indicator/textchannelobserver.cpp:910 msgid "Please, select a SIM card:" msgstr "" #: indicator/ussdindicator.cpp:119 msgid "Reply" msgstr "" #: indicator/ussdindicator.cpp:142 #, fuzzy msgid "Cancel" msgstr "Cancel" #: libtelephonyservice/callnotification.cpp:53 msgid "Conf call on hold" msgstr "" #: libtelephonyservice/callnotification.cpp:53 #, qt-format msgid "%1 call on hold" msgstr "" #: libtelephonyservice/callnotification.cpp:56 msgid "Conf call ended" msgstr "" #: libtelephonyservice/callnotification.cpp:56 #, qt-format msgid "%1 call ended" msgstr "" #: libtelephonyservice/callnotification.cpp:59 #, qt-format msgid "%1 call declined" msgstr "" #: libtelephonyservice/contactwatcher.cpp:157 msgid "Private Number" msgstr "" #: libtelephonyservice/contactwatcher.cpp:159 msgid "Unknown Number" msgstr "" telephony-service-0.5.3/po/mhr.po000066400000000000000000000207401455543255600167510ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR Canonical Ltd. # This file is distributed under the same license as the telephony-service package. # FIRST AUTHOR , YEAR. # msgid "" msgstr "" "Project-Id-Version: telephony-service\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-12-16 17:03+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: Automatically generated\n" "Language-Team: none\n" "Language: mhr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" #: indicator/telephony-service-call.desktop.in:4 msgid "Phone Calls" msgstr "" #: indicator/telephony-service-sms.desktop.in:4 msgid "SMS" msgstr "" #: approver/approver.cpp:66 msgid "Unknown caller" msgstr "" #: approver/approver.cpp:94 msgid "I'm busy at the moment. I'll call later." msgstr "" #: approver/approver.cpp:95 msgid "I'm running late, on my way now." msgstr "" #: approver/approver.cpp:96 msgid "Please call me back later." msgstr "" #: approver/approver.cpp:457 #, qt-format msgid "On [%1]" msgstr "" #: approver/approver.cpp:461 indicator/messagingmenu.cpp:414 msgid "Private number" msgstr "" #: approver/approver.cpp:464 indicator/messagingmenu.cpp:244 #: indicator/messagingmenu.cpp:418 indicator/textchannelobserver.cpp:640 msgid "Unknown number" msgstr "" #: approver/approver.cpp:470 approver/approver.cpp:485 msgid "Caller number is not available" msgstr "" #: approver/approver.cpp:476 msgid "Calling from private number" msgstr "" #: approver/approver.cpp:479 msgid "Calling from unknown number" msgstr "" #: approver/approver.cpp:482 #, qt-format msgid "Calling from %1" msgstr "" #: approver/approver.cpp:529 msgid "Hold + Answer" msgstr "" #: approver/approver.cpp:530 msgid "Accept" msgstr "" #: approver/approver.cpp:543 msgid "End + Answer" msgstr "" #: approver/approver.cpp:552 msgid "Decline" msgstr "" #: approver/approver.cpp:560 msgid "Message & decline" msgstr "" #: approver/main.cpp:46 msgid "Telephony Service Approver" msgstr "" #: indicator/authhandler.cpp:72 msgid "Authentication failed. Do you want to review your credentials?" msgstr "" #: indicator/authhandler.cpp:91 msgid "Yes" msgstr "" #: indicator/authhandler.cpp:94 msgid "No" msgstr "" #: indicator/displaynamesettings.cpp:35 #, qt-format msgid "SIM %1" msgstr "" #: indicator/main.cpp:53 msgid "Telephony Service Indicator" msgstr "" #: indicator/messagingmenu.cpp:83 indicator/messagingmenu.cpp:87 msgid "Telephony Service" msgstr "" #: indicator/messagingmenu.cpp:151 indicator/messagingmenu.cpp:293 #: indicator/messagingmenu.cpp:360 msgid "Send" msgstr "" #. TRANSLATORS : %1 is the group name and %2 is the recipient name #: indicator/messagingmenu.cpp:262 indicator/textchannelobserver.cpp:671 #: indicator/textchannelobserver.cpp:675 #, qt-format msgid "Message to %1 from %2" msgstr "" #. TRANSLATORS : %1 is the recipient name #: indicator/messagingmenu.cpp:265 indicator/messagingmenu.cpp:269 #, qt-format msgid "Message to the group from %1" msgstr "" #: indicator/messagingmenu.cpp:345 msgid "Call back" msgstr "" #: indicator/messagingmenu.cpp:350 msgid "Missed your call — can you call me now?" msgstr "" #: indicator/messagingmenu.cpp:351 msgid "Running late. On my way." msgstr "" #: indicator/messagingmenu.cpp:352 msgid "Busy at the moment. Will call you later." msgstr "" #: indicator/messagingmenu.cpp:353 msgid "I am 20 minutes late." msgstr "" #: indicator/messagingmenu.cpp:354 msgid "Still busy. Will call you later." msgstr "" #: indicator/messagingmenu.cpp:409 #, qt-format msgid "%1 missed call" msgid_plural "%1 missed calls" msgstr[0] "" msgstr[1] "" #: indicator/messagingmenu.cpp:492 msgid "Voicemail messages" msgstr "" #: indicator/messagingmenu.cpp:495 #, qt-format msgid "%1 voicemail message" msgid_plural "%1 voicemail messages" msgstr[0] "" msgstr[1] "" #: indicator/messagingmenu.cpp:500 msgid "Voicemail" msgstr "" #: indicator/metrics.cpp:42 #, qt-format msgid "%1 text messages sent today" msgstr "" #: indicator/metrics.cpp:43 msgid "No text messages sent today" msgstr "" #: indicator/metrics.cpp:44 #, qt-format msgid "%1 text messages received today" msgstr "" #: indicator/metrics.cpp:45 msgid "No text messages received today" msgstr "" #: indicator/metrics.cpp:46 #, qt-format msgid "%1 calls received today" msgstr "" #: indicator/metrics.cpp:47 msgid "No calls received today" msgstr "" #: indicator/metrics.cpp:48 #, qt-format msgid "%1 calls made today" msgstr "" #: indicator/metrics.cpp:49 indicator/metrics.cpp:51 msgid "No calls made today" msgstr "" #: indicator/metrics.cpp:50 #, qt-format msgid "Spent %1 minutes in calls today" msgstr "" #: indicator/textchannelobserver.cpp:225 msgid "Unlock your sim card and try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:227 msgid "Deactivate flight mode and try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:230 msgid "Try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:236 msgid "The message could not be sent" msgstr "" #: indicator/textchannelobserver.cpp:249 indicator/textchannelobserver.cpp:713 msgid "View message" msgstr "" #: indicator/textchannelobserver.cpp:295 msgid "New Group" msgstr "" #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:302 #, qt-format msgid "You joined group %1 " msgstr "" #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:306 #, qt-format msgid "You joined group %1" msgstr "" #: indicator/textchannelobserver.cpp:309 msgid "You joined a new group" msgstr "" #: indicator/textchannelobserver.cpp:328 msgid "View Group" msgstr "" #: indicator/textchannelobserver.cpp:367 indicator/ussdindicator.cpp:116 msgid "Ok" msgstr "" #: indicator/textchannelobserver.cpp:373 msgid "Save" msgstr "" #: indicator/textchannelobserver.cpp:468 msgid "Emergency Alert" msgstr "" #: indicator/textchannelobserver.cpp:471 msgid "Emergency Alert: Extreme" msgstr "" #: indicator/textchannelobserver.cpp:474 msgid "Emergency Alert: Severe" msgstr "" #: indicator/textchannelobserver.cpp:477 msgid "Emergency Alert: Notice" msgstr "" #: indicator/textchannelobserver.cpp:482 msgid "AMBER Alert" msgstr "" #: indicator/textchannelobserver.cpp:485 msgid "Alert" msgstr "" #: indicator/textchannelobserver.cpp:531 msgid "Show alert" msgstr "" #: indicator/textchannelobserver.cpp:604 #, qt-format msgid "Attachment: %1 image" msgid_plural "Attachments: %1 images" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:606 #, qt-format msgid "Attachment: %1 video" msgid_plural "Attachments: %1 videos" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:608 #, qt-format msgid "Attachment: %1 contact" msgid_plural "Attachments: %1 contacts" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:610 #, qt-format msgid "Attachment: %1 audio clip" msgid_plural "Attachments: %1 audio clips" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:612 #, qt-format msgid "Attachment: %1 file" msgid_plural "Attachments: %1 files" msgstr[0] "" msgstr[1] "" #. TRANSLATORS : message displayed when any error occurred while receiving a MMS (case when cellular-data is off, or any downloading issue). Notify that there was a message, the user can find more about it in the messaging-app. #: indicator/textchannelobserver.cpp:615 msgid "New MMS message" msgstr "" #. TRANSLATORS : %1 is the recipient name #: indicator/textchannelobserver.cpp:679 indicator/textchannelobserver.cpp:683 #, qt-format msgid "Message to group from %1" msgstr "" #: indicator/textchannelobserver.cpp:749 #, qt-format msgid "Message from %1" msgstr "" #: indicator/textchannelobserver.cpp:910 msgid "Please, select a SIM card:" msgstr "" #: indicator/ussdindicator.cpp:119 msgid "Reply" msgstr "" #: indicator/ussdindicator.cpp:142 msgid "Cancel" msgstr "" #: libtelephonyservice/callnotification.cpp:53 msgid "Conf call on hold" msgstr "" #: libtelephonyservice/callnotification.cpp:53 #, qt-format msgid "%1 call on hold" msgstr "" #: libtelephonyservice/callnotification.cpp:56 msgid "Conf call ended" msgstr "" #: libtelephonyservice/callnotification.cpp:56 #, qt-format msgid "%1 call ended" msgstr "" #: libtelephonyservice/callnotification.cpp:59 #, qt-format msgid "%1 call declined" msgstr "" #: libtelephonyservice/contactwatcher.cpp:157 msgid "Private Number" msgstr "" #: libtelephonyservice/contactwatcher.cpp:159 msgid "Unknown Number" msgstr "" telephony-service-0.5.3/po/mi.po000066400000000000000000000211441455543255600165670ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-12-16 17:03+0100\n" "PO-Revision-Date: 2023-01-05 11:07+0000\n" "Last-Translator: Anonymous \n" "Language-Team: Maori \n" "Language: mi\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n > 1;\n" "X-Generator: Weblate 4.15.1-dev\n" #: indicator/telephony-service-call.desktop.in:4 msgid "Phone Calls" msgstr "" #: indicator/telephony-service-sms.desktop.in:4 msgid "SMS" msgstr "" #: approver/approver.cpp:66 msgid "Unknown caller" msgstr "" #: approver/approver.cpp:94 msgid "I'm busy at the moment. I'll call later." msgstr "" #: approver/approver.cpp:95 msgid "I'm running late, on my way now." msgstr "" #: approver/approver.cpp:96 msgid "Please call me back later." msgstr "" #: approver/approver.cpp:457 #, qt-format msgid "On [%1]" msgstr "" #: approver/approver.cpp:461 indicator/messagingmenu.cpp:414 msgid "Private number" msgstr "" #: approver/approver.cpp:464 indicator/messagingmenu.cpp:244 #: indicator/messagingmenu.cpp:418 indicator/textchannelobserver.cpp:640 msgid "Unknown number" msgstr "" #: approver/approver.cpp:470 approver/approver.cpp:485 msgid "Caller number is not available" msgstr "" #: approver/approver.cpp:476 msgid "Calling from private number" msgstr "" #: approver/approver.cpp:479 msgid "Calling from unknown number" msgstr "" #: approver/approver.cpp:482 #, qt-format msgid "Calling from %1" msgstr "" #: approver/approver.cpp:529 msgid "Hold + Answer" msgstr "" #: approver/approver.cpp:530 msgid "Accept" msgstr "" #: approver/approver.cpp:543 msgid "End + Answer" msgstr "" #: approver/approver.cpp:552 msgid "Decline" msgstr "" #: approver/approver.cpp:560 msgid "Message & decline" msgstr "" #: approver/main.cpp:46 msgid "Telephony Service Approver" msgstr "" #: indicator/authhandler.cpp:72 msgid "Authentication failed. Do you want to review your credentials?" msgstr "" #: indicator/authhandler.cpp:91 msgid "Yes" msgstr "" #: indicator/authhandler.cpp:94 msgid "No" msgstr "" #: indicator/displaynamesettings.cpp:35 #, qt-format msgid "SIM %1" msgstr "" #: indicator/main.cpp:53 msgid "Telephony Service Indicator" msgstr "" #: indicator/messagingmenu.cpp:83 indicator/messagingmenu.cpp:87 msgid "Telephony Service" msgstr "" #: indicator/messagingmenu.cpp:151 indicator/messagingmenu.cpp:293 #: indicator/messagingmenu.cpp:360 msgid "Send" msgstr "" #. TRANSLATORS : %1 is the group name and %2 is the recipient name #: indicator/messagingmenu.cpp:262 indicator/textchannelobserver.cpp:671 #: indicator/textchannelobserver.cpp:675 #, qt-format msgid "Message to %1 from %2" msgstr "" #. TRANSLATORS : %1 is the recipient name #: indicator/messagingmenu.cpp:265 indicator/messagingmenu.cpp:269 #, qt-format msgid "Message to the group from %1" msgstr "" #: indicator/messagingmenu.cpp:345 msgid "Call back" msgstr "" #: indicator/messagingmenu.cpp:350 msgid "Missed your call — can you call me now?" msgstr "" #: indicator/messagingmenu.cpp:351 msgid "Running late. On my way." msgstr "" #: indicator/messagingmenu.cpp:352 msgid "Busy at the moment. Will call you later." msgstr "" #: indicator/messagingmenu.cpp:353 msgid "I am 20 minutes late." msgstr "" #: indicator/messagingmenu.cpp:354 msgid "Still busy. Will call you later." msgstr "" #: indicator/messagingmenu.cpp:409 #, qt-format msgid "%1 missed call" msgid_plural "%1 missed calls" msgstr[0] "" msgstr[1] "" #: indicator/messagingmenu.cpp:492 msgid "Voicemail messages" msgstr "" #: indicator/messagingmenu.cpp:495 #, qt-format msgid "%1 voicemail message" msgid_plural "%1 voicemail messages" msgstr[0] "" msgstr[1] "" #: indicator/messagingmenu.cpp:500 msgid "Voicemail" msgstr "" #: indicator/metrics.cpp:42 #, qt-format msgid "%1 text messages sent today" msgstr "" #: indicator/metrics.cpp:43 msgid "No text messages sent today" msgstr "" #: indicator/metrics.cpp:44 #, qt-format msgid "%1 text messages received today" msgstr "" #: indicator/metrics.cpp:45 msgid "No text messages received today" msgstr "" #: indicator/metrics.cpp:46 #, qt-format msgid "%1 calls received today" msgstr "" #: indicator/metrics.cpp:47 msgid "No calls received today" msgstr "" #: indicator/metrics.cpp:48 #, qt-format msgid "%1 calls made today" msgstr "" #: indicator/metrics.cpp:49 indicator/metrics.cpp:51 msgid "No calls made today" msgstr "" #: indicator/metrics.cpp:50 #, qt-format msgid "Spent %1 minutes in calls today" msgstr "" #: indicator/textchannelobserver.cpp:225 msgid "Unlock your sim card and try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:227 msgid "Deactivate flight mode and try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:230 msgid "Try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:236 msgid "The message could not be sent" msgstr "" #: indicator/textchannelobserver.cpp:249 indicator/textchannelobserver.cpp:713 msgid "View message" msgstr "" #: indicator/textchannelobserver.cpp:295 msgid "New Group" msgstr "" #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:302 #, qt-format msgid "You joined group %1 " msgstr "" #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:306 #, qt-format msgid "You joined group %1" msgstr "" #: indicator/textchannelobserver.cpp:309 msgid "You joined a new group" msgstr "" #: indicator/textchannelobserver.cpp:328 msgid "View Group" msgstr "" #: indicator/textchannelobserver.cpp:367 indicator/ussdindicator.cpp:116 msgid "Ok" msgstr "" #: indicator/textchannelobserver.cpp:373 msgid "Save" msgstr "" #: indicator/textchannelobserver.cpp:468 msgid "Emergency Alert" msgstr "" #: indicator/textchannelobserver.cpp:471 msgid "Emergency Alert: Extreme" msgstr "" #: indicator/textchannelobserver.cpp:474 msgid "Emergency Alert: Severe" msgstr "" #: indicator/textchannelobserver.cpp:477 msgid "Emergency Alert: Notice" msgstr "" #: indicator/textchannelobserver.cpp:482 msgid "AMBER Alert" msgstr "" #: indicator/textchannelobserver.cpp:485 msgid "Alert" msgstr "" #: indicator/textchannelobserver.cpp:531 msgid "Show alert" msgstr "" #: indicator/textchannelobserver.cpp:604 #, qt-format msgid "Attachment: %1 image" msgid_plural "Attachments: %1 images" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:606 #, qt-format msgid "Attachment: %1 video" msgid_plural "Attachments: %1 videos" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:608 #, qt-format msgid "Attachment: %1 contact" msgid_plural "Attachments: %1 contacts" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:610 #, qt-format msgid "Attachment: %1 audio clip" msgid_plural "Attachments: %1 audio clips" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:612 #, qt-format msgid "Attachment: %1 file" msgid_plural "Attachments: %1 files" msgstr[0] "" msgstr[1] "" #. TRANSLATORS : message displayed when any error occurred while receiving a MMS (case when cellular-data is off, or any downloading issue). Notify that there was a message, the user can find more about it in the messaging-app. #: indicator/textchannelobserver.cpp:615 msgid "New MMS message" msgstr "" #. TRANSLATORS : %1 is the recipient name #: indicator/textchannelobserver.cpp:679 indicator/textchannelobserver.cpp:683 #, qt-format msgid "Message to group from %1" msgstr "" #: indicator/textchannelobserver.cpp:749 #, qt-format msgid "Message from %1" msgstr "" #: indicator/textchannelobserver.cpp:910 msgid "Please, select a SIM card:" msgstr "" #: indicator/ussdindicator.cpp:119 msgid "Reply" msgstr "" #: indicator/ussdindicator.cpp:142 #, fuzzy msgid "Cancel" msgstr "Cancel" #: libtelephonyservice/callnotification.cpp:53 msgid "Conf call on hold" msgstr "" #: libtelephonyservice/callnotification.cpp:53 #, qt-format msgid "%1 call on hold" msgstr "" #: libtelephonyservice/callnotification.cpp:56 msgid "Conf call ended" msgstr "" #: libtelephonyservice/callnotification.cpp:56 #, qt-format msgid "%1 call ended" msgstr "" #: libtelephonyservice/callnotification.cpp:59 #, qt-format msgid "%1 call declined" msgstr "" #: libtelephonyservice/contactwatcher.cpp:157 msgid "Private Number" msgstr "" #: libtelephonyservice/contactwatcher.cpp:159 msgid "Unknown Number" msgstr "" telephony-service-0.5.3/po/mk.po000066400000000000000000000211731455543255600165730ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-12-16 17:03+0100\n" "PO-Revision-Date: 2023-01-05 11:07+0000\n" "Last-Translator: Anonymous \n" "Language-Team: Macedonian \n" "Language: mk\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n==1 || n%10==1 ? 0 : 1;\n" "X-Generator: Weblate 4.15.1-dev\n" #: indicator/telephony-service-call.desktop.in:4 msgid "Phone Calls" msgstr "" #: indicator/telephony-service-sms.desktop.in:4 msgid "SMS" msgstr "" #: approver/approver.cpp:66 msgid "Unknown caller" msgstr "" #: approver/approver.cpp:94 msgid "I'm busy at the moment. I'll call later." msgstr "" #: approver/approver.cpp:95 msgid "I'm running late, on my way now." msgstr "" #: approver/approver.cpp:96 msgid "Please call me back later." msgstr "" #: approver/approver.cpp:457 #, qt-format msgid "On [%1]" msgstr "" #: approver/approver.cpp:461 indicator/messagingmenu.cpp:414 msgid "Private number" msgstr "" #: approver/approver.cpp:464 indicator/messagingmenu.cpp:244 #: indicator/messagingmenu.cpp:418 indicator/textchannelobserver.cpp:640 msgid "Unknown number" msgstr "" #: approver/approver.cpp:470 approver/approver.cpp:485 msgid "Caller number is not available" msgstr "" #: approver/approver.cpp:476 msgid "Calling from private number" msgstr "" #: approver/approver.cpp:479 msgid "Calling from unknown number" msgstr "" #: approver/approver.cpp:482 #, qt-format msgid "Calling from %1" msgstr "" #: approver/approver.cpp:529 msgid "Hold + Answer" msgstr "" #: approver/approver.cpp:530 msgid "Accept" msgstr "" #: approver/approver.cpp:543 msgid "End + Answer" msgstr "" #: approver/approver.cpp:552 msgid "Decline" msgstr "" #: approver/approver.cpp:560 msgid "Message & decline" msgstr "" #: approver/main.cpp:46 msgid "Telephony Service Approver" msgstr "" #: indicator/authhandler.cpp:72 msgid "Authentication failed. Do you want to review your credentials?" msgstr "" #: indicator/authhandler.cpp:91 msgid "Yes" msgstr "" #: indicator/authhandler.cpp:94 msgid "No" msgstr "" #: indicator/displaynamesettings.cpp:35 #, qt-format msgid "SIM %1" msgstr "" #: indicator/main.cpp:53 msgid "Telephony Service Indicator" msgstr "" #: indicator/messagingmenu.cpp:83 indicator/messagingmenu.cpp:87 msgid "Telephony Service" msgstr "" #: indicator/messagingmenu.cpp:151 indicator/messagingmenu.cpp:293 #: indicator/messagingmenu.cpp:360 msgid "Send" msgstr "" #. TRANSLATORS : %1 is the group name and %2 is the recipient name #: indicator/messagingmenu.cpp:262 indicator/textchannelobserver.cpp:671 #: indicator/textchannelobserver.cpp:675 #, qt-format msgid "Message to %1 from %2" msgstr "" #. TRANSLATORS : %1 is the recipient name #: indicator/messagingmenu.cpp:265 indicator/messagingmenu.cpp:269 #, qt-format msgid "Message to the group from %1" msgstr "" #: indicator/messagingmenu.cpp:345 msgid "Call back" msgstr "" #: indicator/messagingmenu.cpp:350 msgid "Missed your call — can you call me now?" msgstr "" #: indicator/messagingmenu.cpp:351 msgid "Running late. On my way." msgstr "" #: indicator/messagingmenu.cpp:352 msgid "Busy at the moment. Will call you later." msgstr "" #: indicator/messagingmenu.cpp:353 msgid "I am 20 minutes late." msgstr "" #: indicator/messagingmenu.cpp:354 msgid "Still busy. Will call you later." msgstr "" #: indicator/messagingmenu.cpp:409 #, qt-format msgid "%1 missed call" msgid_plural "%1 missed calls" msgstr[0] "" msgstr[1] "" #: indicator/messagingmenu.cpp:492 msgid "Voicemail messages" msgstr "" #: indicator/messagingmenu.cpp:495 #, qt-format msgid "%1 voicemail message" msgid_plural "%1 voicemail messages" msgstr[0] "" msgstr[1] "" #: indicator/messagingmenu.cpp:500 msgid "Voicemail" msgstr "" #: indicator/metrics.cpp:42 #, qt-format msgid "%1 text messages sent today" msgstr "" #: indicator/metrics.cpp:43 msgid "No text messages sent today" msgstr "" #: indicator/metrics.cpp:44 #, qt-format msgid "%1 text messages received today" msgstr "" #: indicator/metrics.cpp:45 msgid "No text messages received today" msgstr "" #: indicator/metrics.cpp:46 #, qt-format msgid "%1 calls received today" msgstr "" #: indicator/metrics.cpp:47 msgid "No calls received today" msgstr "" #: indicator/metrics.cpp:48 #, qt-format msgid "%1 calls made today" msgstr "" #: indicator/metrics.cpp:49 indicator/metrics.cpp:51 msgid "No calls made today" msgstr "" #: indicator/metrics.cpp:50 #, qt-format msgid "Spent %1 minutes in calls today" msgstr "" #: indicator/textchannelobserver.cpp:225 msgid "Unlock your sim card and try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:227 msgid "Deactivate flight mode and try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:230 msgid "Try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:236 msgid "The message could not be sent" msgstr "" #: indicator/textchannelobserver.cpp:249 indicator/textchannelobserver.cpp:713 msgid "View message" msgstr "" #: indicator/textchannelobserver.cpp:295 msgid "New Group" msgstr "" #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:302 #, qt-format msgid "You joined group %1 " msgstr "" #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:306 #, qt-format msgid "You joined group %1" msgstr "" #: indicator/textchannelobserver.cpp:309 msgid "You joined a new group" msgstr "" #: indicator/textchannelobserver.cpp:328 msgid "View Group" msgstr "" #: indicator/textchannelobserver.cpp:367 indicator/ussdindicator.cpp:116 msgid "Ok" msgstr "" #: indicator/textchannelobserver.cpp:373 msgid "Save" msgstr "" #: indicator/textchannelobserver.cpp:468 msgid "Emergency Alert" msgstr "" #: indicator/textchannelobserver.cpp:471 msgid "Emergency Alert: Extreme" msgstr "" #: indicator/textchannelobserver.cpp:474 msgid "Emergency Alert: Severe" msgstr "" #: indicator/textchannelobserver.cpp:477 msgid "Emergency Alert: Notice" msgstr "" #: indicator/textchannelobserver.cpp:482 msgid "AMBER Alert" msgstr "" #: indicator/textchannelobserver.cpp:485 msgid "Alert" msgstr "" #: indicator/textchannelobserver.cpp:531 msgid "Show alert" msgstr "" #: indicator/textchannelobserver.cpp:604 #, qt-format msgid "Attachment: %1 image" msgid_plural "Attachments: %1 images" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:606 #, qt-format msgid "Attachment: %1 video" msgid_plural "Attachments: %1 videos" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:608 #, qt-format msgid "Attachment: %1 contact" msgid_plural "Attachments: %1 contacts" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:610 #, qt-format msgid "Attachment: %1 audio clip" msgid_plural "Attachments: %1 audio clips" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:612 #, qt-format msgid "Attachment: %1 file" msgid_plural "Attachments: %1 files" msgstr[0] "" msgstr[1] "" #. TRANSLATORS : message displayed when any error occurred while receiving a MMS (case when cellular-data is off, or any downloading issue). Notify that there was a message, the user can find more about it in the messaging-app. #: indicator/textchannelobserver.cpp:615 msgid "New MMS message" msgstr "" #. TRANSLATORS : %1 is the recipient name #: indicator/textchannelobserver.cpp:679 indicator/textchannelobserver.cpp:683 #, qt-format msgid "Message to group from %1" msgstr "" #: indicator/textchannelobserver.cpp:749 #, qt-format msgid "Message from %1" msgstr "" #: indicator/textchannelobserver.cpp:910 msgid "Please, select a SIM card:" msgstr "" #: indicator/ussdindicator.cpp:119 msgid "Reply" msgstr "" #: indicator/ussdindicator.cpp:142 #, fuzzy msgid "Cancel" msgstr "Cancel" #: libtelephonyservice/callnotification.cpp:53 msgid "Conf call on hold" msgstr "" #: libtelephonyservice/callnotification.cpp:53 #, qt-format msgid "%1 call on hold" msgstr "" #: libtelephonyservice/callnotification.cpp:56 msgid "Conf call ended" msgstr "" #: libtelephonyservice/callnotification.cpp:56 #, qt-format msgid "%1 call ended" msgstr "" #: libtelephonyservice/callnotification.cpp:59 #, qt-format msgid "%1 call declined" msgstr "" #: libtelephonyservice/contactwatcher.cpp:157 msgid "Private Number" msgstr "" #: libtelephonyservice/contactwatcher.cpp:159 msgid "Unknown Number" msgstr "" telephony-service-0.5.3/po/ml.po000066400000000000000000000211511455543255600165700ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-12-16 17:03+0100\n" "PO-Revision-Date: 2023-01-05 11:07+0000\n" "Last-Translator: Anonymous \n" "Language-Team: Malayalam \n" "Language: ml\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Generator: Weblate 4.15.1-dev\n" #: indicator/telephony-service-call.desktop.in:4 msgid "Phone Calls" msgstr "" #: indicator/telephony-service-sms.desktop.in:4 msgid "SMS" msgstr "" #: approver/approver.cpp:66 msgid "Unknown caller" msgstr "" #: approver/approver.cpp:94 msgid "I'm busy at the moment. I'll call later." msgstr "" #: approver/approver.cpp:95 msgid "I'm running late, on my way now." msgstr "" #: approver/approver.cpp:96 msgid "Please call me back later." msgstr "" #: approver/approver.cpp:457 #, qt-format msgid "On [%1]" msgstr "" #: approver/approver.cpp:461 indicator/messagingmenu.cpp:414 msgid "Private number" msgstr "" #: approver/approver.cpp:464 indicator/messagingmenu.cpp:244 #: indicator/messagingmenu.cpp:418 indicator/textchannelobserver.cpp:640 msgid "Unknown number" msgstr "" #: approver/approver.cpp:470 approver/approver.cpp:485 msgid "Caller number is not available" msgstr "" #: approver/approver.cpp:476 msgid "Calling from private number" msgstr "" #: approver/approver.cpp:479 msgid "Calling from unknown number" msgstr "" #: approver/approver.cpp:482 #, qt-format msgid "Calling from %1" msgstr "" #: approver/approver.cpp:529 msgid "Hold + Answer" msgstr "" #: approver/approver.cpp:530 msgid "Accept" msgstr "" #: approver/approver.cpp:543 msgid "End + Answer" msgstr "" #: approver/approver.cpp:552 msgid "Decline" msgstr "" #: approver/approver.cpp:560 msgid "Message & decline" msgstr "" #: approver/main.cpp:46 msgid "Telephony Service Approver" msgstr "" #: indicator/authhandler.cpp:72 msgid "Authentication failed. Do you want to review your credentials?" msgstr "" #: indicator/authhandler.cpp:91 msgid "Yes" msgstr "" #: indicator/authhandler.cpp:94 msgid "No" msgstr "" #: indicator/displaynamesettings.cpp:35 #, qt-format msgid "SIM %1" msgstr "" #: indicator/main.cpp:53 msgid "Telephony Service Indicator" msgstr "" #: indicator/messagingmenu.cpp:83 indicator/messagingmenu.cpp:87 msgid "Telephony Service" msgstr "" #: indicator/messagingmenu.cpp:151 indicator/messagingmenu.cpp:293 #: indicator/messagingmenu.cpp:360 msgid "Send" msgstr "" #. TRANSLATORS : %1 is the group name and %2 is the recipient name #: indicator/messagingmenu.cpp:262 indicator/textchannelobserver.cpp:671 #: indicator/textchannelobserver.cpp:675 #, qt-format msgid "Message to %1 from %2" msgstr "" #. TRANSLATORS : %1 is the recipient name #: indicator/messagingmenu.cpp:265 indicator/messagingmenu.cpp:269 #, qt-format msgid "Message to the group from %1" msgstr "" #: indicator/messagingmenu.cpp:345 msgid "Call back" msgstr "" #: indicator/messagingmenu.cpp:350 msgid "Missed your call — can you call me now?" msgstr "" #: indicator/messagingmenu.cpp:351 msgid "Running late. On my way." msgstr "" #: indicator/messagingmenu.cpp:352 msgid "Busy at the moment. Will call you later." msgstr "" #: indicator/messagingmenu.cpp:353 msgid "I am 20 minutes late." msgstr "" #: indicator/messagingmenu.cpp:354 msgid "Still busy. Will call you later." msgstr "" #: indicator/messagingmenu.cpp:409 #, qt-format msgid "%1 missed call" msgid_plural "%1 missed calls" msgstr[0] "" msgstr[1] "" #: indicator/messagingmenu.cpp:492 msgid "Voicemail messages" msgstr "" #: indicator/messagingmenu.cpp:495 #, qt-format msgid "%1 voicemail message" msgid_plural "%1 voicemail messages" msgstr[0] "" msgstr[1] "" #: indicator/messagingmenu.cpp:500 msgid "Voicemail" msgstr "" #: indicator/metrics.cpp:42 #, qt-format msgid "%1 text messages sent today" msgstr "" #: indicator/metrics.cpp:43 msgid "No text messages sent today" msgstr "" #: indicator/metrics.cpp:44 #, qt-format msgid "%1 text messages received today" msgstr "" #: indicator/metrics.cpp:45 msgid "No text messages received today" msgstr "" #: indicator/metrics.cpp:46 #, qt-format msgid "%1 calls received today" msgstr "" #: indicator/metrics.cpp:47 msgid "No calls received today" msgstr "" #: indicator/metrics.cpp:48 #, qt-format msgid "%1 calls made today" msgstr "" #: indicator/metrics.cpp:49 indicator/metrics.cpp:51 msgid "No calls made today" msgstr "" #: indicator/metrics.cpp:50 #, qt-format msgid "Spent %1 minutes in calls today" msgstr "" #: indicator/textchannelobserver.cpp:225 msgid "Unlock your sim card and try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:227 msgid "Deactivate flight mode and try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:230 msgid "Try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:236 msgid "The message could not be sent" msgstr "" #: indicator/textchannelobserver.cpp:249 indicator/textchannelobserver.cpp:713 msgid "View message" msgstr "" #: indicator/textchannelobserver.cpp:295 msgid "New Group" msgstr "" #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:302 #, qt-format msgid "You joined group %1 " msgstr "" #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:306 #, qt-format msgid "You joined group %1" msgstr "" #: indicator/textchannelobserver.cpp:309 msgid "You joined a new group" msgstr "" #: indicator/textchannelobserver.cpp:328 msgid "View Group" msgstr "" #: indicator/textchannelobserver.cpp:367 indicator/ussdindicator.cpp:116 msgid "Ok" msgstr "" #: indicator/textchannelobserver.cpp:373 msgid "Save" msgstr "" #: indicator/textchannelobserver.cpp:468 msgid "Emergency Alert" msgstr "" #: indicator/textchannelobserver.cpp:471 msgid "Emergency Alert: Extreme" msgstr "" #: indicator/textchannelobserver.cpp:474 msgid "Emergency Alert: Severe" msgstr "" #: indicator/textchannelobserver.cpp:477 msgid "Emergency Alert: Notice" msgstr "" #: indicator/textchannelobserver.cpp:482 msgid "AMBER Alert" msgstr "" #: indicator/textchannelobserver.cpp:485 msgid "Alert" msgstr "" #: indicator/textchannelobserver.cpp:531 msgid "Show alert" msgstr "" #: indicator/textchannelobserver.cpp:604 #, qt-format msgid "Attachment: %1 image" msgid_plural "Attachments: %1 images" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:606 #, qt-format msgid "Attachment: %1 video" msgid_plural "Attachments: %1 videos" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:608 #, qt-format msgid "Attachment: %1 contact" msgid_plural "Attachments: %1 contacts" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:610 #, qt-format msgid "Attachment: %1 audio clip" msgid_plural "Attachments: %1 audio clips" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:612 #, qt-format msgid "Attachment: %1 file" msgid_plural "Attachments: %1 files" msgstr[0] "" msgstr[1] "" #. TRANSLATORS : message displayed when any error occurred while receiving a MMS (case when cellular-data is off, or any downloading issue). Notify that there was a message, the user can find more about it in the messaging-app. #: indicator/textchannelobserver.cpp:615 msgid "New MMS message" msgstr "" #. TRANSLATORS : %1 is the recipient name #: indicator/textchannelobserver.cpp:679 indicator/textchannelobserver.cpp:683 #, qt-format msgid "Message to group from %1" msgstr "" #: indicator/textchannelobserver.cpp:749 #, qt-format msgid "Message from %1" msgstr "" #: indicator/textchannelobserver.cpp:910 msgid "Please, select a SIM card:" msgstr "" #: indicator/ussdindicator.cpp:119 msgid "Reply" msgstr "" #: indicator/ussdindicator.cpp:142 #, fuzzy msgid "Cancel" msgstr "Cancel" #: libtelephonyservice/callnotification.cpp:53 msgid "Conf call on hold" msgstr "" #: libtelephonyservice/callnotification.cpp:53 #, qt-format msgid "%1 call on hold" msgstr "" #: libtelephonyservice/callnotification.cpp:56 msgid "Conf call ended" msgstr "" #: libtelephonyservice/callnotification.cpp:56 #, qt-format msgid "%1 call ended" msgstr "" #: libtelephonyservice/callnotification.cpp:59 #, qt-format msgid "%1 call declined" msgstr "" #: libtelephonyservice/contactwatcher.cpp:157 msgid "Private Number" msgstr "" #: libtelephonyservice/contactwatcher.cpp:159 msgid "Unknown Number" msgstr "" telephony-service-0.5.3/po/mr.po000066400000000000000000000207371455543255600166070ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR Canonical Ltd. # This file is distributed under the same license as the telephony-service package. # FIRST AUTHOR , YEAR. # msgid "" msgstr "" "Project-Id-Version: telephony-service\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-12-16 17:03+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: Automatically generated\n" "Language-Team: none\n" "Language: mr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" #: indicator/telephony-service-call.desktop.in:4 msgid "Phone Calls" msgstr "" #: indicator/telephony-service-sms.desktop.in:4 msgid "SMS" msgstr "" #: approver/approver.cpp:66 msgid "Unknown caller" msgstr "" #: approver/approver.cpp:94 msgid "I'm busy at the moment. I'll call later." msgstr "" #: approver/approver.cpp:95 msgid "I'm running late, on my way now." msgstr "" #: approver/approver.cpp:96 msgid "Please call me back later." msgstr "" #: approver/approver.cpp:457 #, qt-format msgid "On [%1]" msgstr "" #: approver/approver.cpp:461 indicator/messagingmenu.cpp:414 msgid "Private number" msgstr "" #: approver/approver.cpp:464 indicator/messagingmenu.cpp:244 #: indicator/messagingmenu.cpp:418 indicator/textchannelobserver.cpp:640 msgid "Unknown number" msgstr "" #: approver/approver.cpp:470 approver/approver.cpp:485 msgid "Caller number is not available" msgstr "" #: approver/approver.cpp:476 msgid "Calling from private number" msgstr "" #: approver/approver.cpp:479 msgid "Calling from unknown number" msgstr "" #: approver/approver.cpp:482 #, qt-format msgid "Calling from %1" msgstr "" #: approver/approver.cpp:529 msgid "Hold + Answer" msgstr "" #: approver/approver.cpp:530 msgid "Accept" msgstr "" #: approver/approver.cpp:543 msgid "End + Answer" msgstr "" #: approver/approver.cpp:552 msgid "Decline" msgstr "" #: approver/approver.cpp:560 msgid "Message & decline" msgstr "" #: approver/main.cpp:46 msgid "Telephony Service Approver" msgstr "" #: indicator/authhandler.cpp:72 msgid "Authentication failed. Do you want to review your credentials?" msgstr "" #: indicator/authhandler.cpp:91 msgid "Yes" msgstr "" #: indicator/authhandler.cpp:94 msgid "No" msgstr "" #: indicator/displaynamesettings.cpp:35 #, qt-format msgid "SIM %1" msgstr "" #: indicator/main.cpp:53 msgid "Telephony Service Indicator" msgstr "" #: indicator/messagingmenu.cpp:83 indicator/messagingmenu.cpp:87 msgid "Telephony Service" msgstr "" #: indicator/messagingmenu.cpp:151 indicator/messagingmenu.cpp:293 #: indicator/messagingmenu.cpp:360 msgid "Send" msgstr "" #. TRANSLATORS : %1 is the group name and %2 is the recipient name #: indicator/messagingmenu.cpp:262 indicator/textchannelobserver.cpp:671 #: indicator/textchannelobserver.cpp:675 #, qt-format msgid "Message to %1 from %2" msgstr "" #. TRANSLATORS : %1 is the recipient name #: indicator/messagingmenu.cpp:265 indicator/messagingmenu.cpp:269 #, qt-format msgid "Message to the group from %1" msgstr "" #: indicator/messagingmenu.cpp:345 msgid "Call back" msgstr "" #: indicator/messagingmenu.cpp:350 msgid "Missed your call — can you call me now?" msgstr "" #: indicator/messagingmenu.cpp:351 msgid "Running late. On my way." msgstr "" #: indicator/messagingmenu.cpp:352 msgid "Busy at the moment. Will call you later." msgstr "" #: indicator/messagingmenu.cpp:353 msgid "I am 20 minutes late." msgstr "" #: indicator/messagingmenu.cpp:354 msgid "Still busy. Will call you later." msgstr "" #: indicator/messagingmenu.cpp:409 #, qt-format msgid "%1 missed call" msgid_plural "%1 missed calls" msgstr[0] "" msgstr[1] "" #: indicator/messagingmenu.cpp:492 msgid "Voicemail messages" msgstr "" #: indicator/messagingmenu.cpp:495 #, qt-format msgid "%1 voicemail message" msgid_plural "%1 voicemail messages" msgstr[0] "" msgstr[1] "" #: indicator/messagingmenu.cpp:500 msgid "Voicemail" msgstr "" #: indicator/metrics.cpp:42 #, qt-format msgid "%1 text messages sent today" msgstr "" #: indicator/metrics.cpp:43 msgid "No text messages sent today" msgstr "" #: indicator/metrics.cpp:44 #, qt-format msgid "%1 text messages received today" msgstr "" #: indicator/metrics.cpp:45 msgid "No text messages received today" msgstr "" #: indicator/metrics.cpp:46 #, qt-format msgid "%1 calls received today" msgstr "" #: indicator/metrics.cpp:47 msgid "No calls received today" msgstr "" #: indicator/metrics.cpp:48 #, qt-format msgid "%1 calls made today" msgstr "" #: indicator/metrics.cpp:49 indicator/metrics.cpp:51 msgid "No calls made today" msgstr "" #: indicator/metrics.cpp:50 #, qt-format msgid "Spent %1 minutes in calls today" msgstr "" #: indicator/textchannelobserver.cpp:225 msgid "Unlock your sim card and try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:227 msgid "Deactivate flight mode and try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:230 msgid "Try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:236 msgid "The message could not be sent" msgstr "" #: indicator/textchannelobserver.cpp:249 indicator/textchannelobserver.cpp:713 msgid "View message" msgstr "" #: indicator/textchannelobserver.cpp:295 msgid "New Group" msgstr "" #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:302 #, qt-format msgid "You joined group %1 " msgstr "" #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:306 #, qt-format msgid "You joined group %1" msgstr "" #: indicator/textchannelobserver.cpp:309 msgid "You joined a new group" msgstr "" #: indicator/textchannelobserver.cpp:328 msgid "View Group" msgstr "" #: indicator/textchannelobserver.cpp:367 indicator/ussdindicator.cpp:116 msgid "Ok" msgstr "" #: indicator/textchannelobserver.cpp:373 msgid "Save" msgstr "" #: indicator/textchannelobserver.cpp:468 msgid "Emergency Alert" msgstr "" #: indicator/textchannelobserver.cpp:471 msgid "Emergency Alert: Extreme" msgstr "" #: indicator/textchannelobserver.cpp:474 msgid "Emergency Alert: Severe" msgstr "" #: indicator/textchannelobserver.cpp:477 msgid "Emergency Alert: Notice" msgstr "" #: indicator/textchannelobserver.cpp:482 msgid "AMBER Alert" msgstr "" #: indicator/textchannelobserver.cpp:485 msgid "Alert" msgstr "" #: indicator/textchannelobserver.cpp:531 msgid "Show alert" msgstr "" #: indicator/textchannelobserver.cpp:604 #, qt-format msgid "Attachment: %1 image" msgid_plural "Attachments: %1 images" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:606 #, qt-format msgid "Attachment: %1 video" msgid_plural "Attachments: %1 videos" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:608 #, qt-format msgid "Attachment: %1 contact" msgid_plural "Attachments: %1 contacts" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:610 #, qt-format msgid "Attachment: %1 audio clip" msgid_plural "Attachments: %1 audio clips" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:612 #, qt-format msgid "Attachment: %1 file" msgid_plural "Attachments: %1 files" msgstr[0] "" msgstr[1] "" #. TRANSLATORS : message displayed when any error occurred while receiving a MMS (case when cellular-data is off, or any downloading issue). Notify that there was a message, the user can find more about it in the messaging-app. #: indicator/textchannelobserver.cpp:615 msgid "New MMS message" msgstr "" #. TRANSLATORS : %1 is the recipient name #: indicator/textchannelobserver.cpp:679 indicator/textchannelobserver.cpp:683 #, qt-format msgid "Message to group from %1" msgstr "" #: indicator/textchannelobserver.cpp:749 #, qt-format msgid "Message from %1" msgstr "" #: indicator/textchannelobserver.cpp:910 msgid "Please, select a SIM card:" msgstr "" #: indicator/ussdindicator.cpp:119 msgid "Reply" msgstr "" #: indicator/ussdindicator.cpp:142 msgid "Cancel" msgstr "" #: libtelephonyservice/callnotification.cpp:53 msgid "Conf call on hold" msgstr "" #: libtelephonyservice/callnotification.cpp:53 #, qt-format msgid "%1 call on hold" msgstr "" #: libtelephonyservice/callnotification.cpp:56 msgid "Conf call ended" msgstr "" #: libtelephonyservice/callnotification.cpp:56 #, qt-format msgid "%1 call ended" msgstr "" #: libtelephonyservice/callnotification.cpp:59 #, qt-format msgid "%1 call declined" msgstr "" #: libtelephonyservice/contactwatcher.cpp:157 msgid "Private Number" msgstr "" #: libtelephonyservice/contactwatcher.cpp:159 msgid "Unknown Number" msgstr "" telephony-service-0.5.3/po/ms.po000066400000000000000000000257441455543255600166130ustar00rootroot00000000000000# Malay translation for telephony-service # Copyright (c) 2014 Rosetta Contributors and Canonical Ltd 2014 # This file is distributed under the same license as the telephony-service package. # FIRST AUTHOR , 2014. # msgid "" msgstr "" "Project-Id-Version: telephony-service\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-12-16 17:03+0100\n" "PO-Revision-Date: 2014-10-22 09:26+0000\n" "Last-Translator: FULL NAME \n" "Language-Team: Malay \n" "Language: ms\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Launchpad-Export-Date: 2017-01-04 06:02+0000\n" "X-Generator: Launchpad (build 18298)\n" #: indicator/telephony-service-call.desktop.in:4 msgid "Phone Calls" msgstr "Panggilan Telefon" #: indicator/telephony-service-sms.desktop.in:4 msgid "SMS" msgstr "SMS" #: approver/approver.cpp:66 msgid "Unknown caller" msgstr "Pemanggil tidak diketahui" #: approver/approver.cpp:94 msgid "I'm busy at the moment. I'll call later." msgstr "Saya sibuk pada masa ini. Saya akan menghubungi kemudian." #: approver/approver.cpp:95 msgid "I'm running late, on my way now." msgstr "Saya terlambat, dalam perjalanan sekarang." #: approver/approver.cpp:96 msgid "Please call me back later." msgstr "Sila hubungi saya semula." #: approver/approver.cpp:457 #, qt-format msgid "On [%1]" msgstr "Pada [%1]" #: approver/approver.cpp:461 indicator/messagingmenu.cpp:414 msgid "Private number" msgstr "Nombor persendirian" #: approver/approver.cpp:464 indicator/messagingmenu.cpp:244 #: indicator/messagingmenu.cpp:418 indicator/textchannelobserver.cpp:640 msgid "Unknown number" msgstr "Nombor tidak diketahui" #: approver/approver.cpp:470 approver/approver.cpp:485 msgid "Caller number is not available" msgstr "Nombor pemanggil tidak tersedia" #: approver/approver.cpp:476 msgid "Calling from private number" msgstr "Panggilan dari nombor persendirian" #: approver/approver.cpp:479 msgid "Calling from unknown number" msgstr "Panggilan dari nombor tidak diketahui" #: approver/approver.cpp:482 #, qt-format msgid "Calling from %1" msgstr "Panggilan daripada %1" #: approver/approver.cpp:529 msgid "Hold + Answer" msgstr "Tangguh + Jawab" #: approver/approver.cpp:530 msgid "Accept" msgstr "Terima" #: approver/approver.cpp:543 msgid "End + Answer" msgstr "Tamat + Jawab" #: approver/approver.cpp:552 msgid "Decline" msgstr "Tolak" #: approver/approver.cpp:560 msgid "Message & decline" msgstr "Mesej & abai" #: approver/main.cpp:46 msgid "Telephony Service Approver" msgstr "Approver Perkhidmatan Telefoni" #: indicator/authhandler.cpp:72 msgid "Authentication failed. Do you want to review your credentials?" msgstr "Pengesahihan gagal. Anda mahu kaji semula kelayakan anda?" #: indicator/authhandler.cpp:91 msgid "Yes" msgstr "Ya" #: indicator/authhandler.cpp:94 msgid "No" msgstr "Tidak" #: indicator/displaynamesettings.cpp:35 #, qt-format msgid "SIM %1" msgstr "SIM %1" #: indicator/main.cpp:53 msgid "Telephony Service Indicator" msgstr "Penunjuk Perkhidmatan Telefoni" #: indicator/messagingmenu.cpp:83 indicator/messagingmenu.cpp:87 msgid "Telephony Service" msgstr "Perkhidmatan Telefoni" #: indicator/messagingmenu.cpp:151 indicator/messagingmenu.cpp:293 #: indicator/messagingmenu.cpp:360 msgid "Send" msgstr "Hantar" #. TRANSLATORS : %1 is the group name and %2 is the recipient name #: indicator/messagingmenu.cpp:262 indicator/textchannelobserver.cpp:671 #: indicator/textchannelobserver.cpp:675 #, qt-format msgid "Message to %1 from %2" msgstr "" #. TRANSLATORS : %1 is the recipient name #: indicator/messagingmenu.cpp:265 indicator/messagingmenu.cpp:269 #, fuzzy, qt-format #| msgid "Message to group from %1" msgid "Message to the group from %1" msgstr "Mesej ke kumpulan daripada %1" #: indicator/messagingmenu.cpp:345 msgid "Call back" msgstr "Panggilan semula" #: indicator/messagingmenu.cpp:350 #, fuzzy #| msgid "I missed your call - can you call me now?" msgid "Missed your call — can you call me now?" msgstr "Saya terlepas panggilan anda - boleh anda telefon saya sekarang?" #: indicator/messagingmenu.cpp:351 #, fuzzy #| msgid "I'm running late. I'm on my way." msgid "Running late. On my way." msgstr "Saya terlewat. Saya masih dalam perjalanan." #: indicator/messagingmenu.cpp:352 #, fuzzy #| msgid "I'm busy at the moment. I'll call you later." msgid "Busy at the moment. Will call you later." msgstr "Saya sibuk buat masa ini. Saya akan telefon anda kemudian." #: indicator/messagingmenu.cpp:353 #, fuzzy #| msgid "I'll be 20 minutes late." msgid "I am 20 minutes late." msgstr "Saya akan terlambat 20 minit." #: indicator/messagingmenu.cpp:354 #, fuzzy #| msgid "Sorry, I'm still busy. I'll call you later." msgid "Still busy. Will call you later." msgstr "Maaf, Saya masih sibuk. Saya akan telefon anda nanti." #: indicator/messagingmenu.cpp:409 #, qt-format msgid "%1 missed call" msgid_plural "%1 missed calls" msgstr[0] "%1 panggilan terlepas" msgstr[1] "%1 panggilan terlepas" #: indicator/messagingmenu.cpp:492 msgid "Voicemail messages" msgstr "Mesej mel bersuara" #: indicator/messagingmenu.cpp:495 #, qt-format msgid "%1 voicemail message" msgid_plural "%1 voicemail messages" msgstr[0] "%1 panggilan mel bersuara" msgstr[1] "%1 panggilan mel bersuara" #: indicator/messagingmenu.cpp:500 msgid "Voicemail" msgstr "Mel bersuara" #: indicator/metrics.cpp:42 #, qt-format msgid "%1 text messages sent today" msgstr "Mesej teks %1 dihantar hari ini" #: indicator/metrics.cpp:43 msgid "No text messages sent today" msgstr "Tiada mesej teks dihantar hari ini" #: indicator/metrics.cpp:44 #, qt-format msgid "%1 text messages received today" msgstr "Mesej teks %1 diterima hari ini" #: indicator/metrics.cpp:45 msgid "No text messages received today" msgstr "Tiada mesej teks diterima hari ini" #: indicator/metrics.cpp:46 #, qt-format msgid "%1 calls received today" msgstr "Panggilan %1 diterima hari ini" #: indicator/metrics.cpp:47 msgid "No calls received today" msgstr "Tiada panggilan diterima hari ini" #: indicator/metrics.cpp:48 #, qt-format msgid "%1 calls made today" msgstr "Panggilan %1 dibuat hari ini" #: indicator/metrics.cpp:49 indicator/metrics.cpp:51 msgid "No calls made today" msgstr "Tiada panggilan dibuat hari ini" #: indicator/metrics.cpp:50 #, qt-format msgid "Spent %1 minutes in calls today" msgstr "Guna sebanyak %1 miniy panggilan hari ini" #: indicator/textchannelobserver.cpp:225 msgid "Unlock your sim card and try again from the messaging application." msgstr "Nyahsekat kad sim anda dan cuba lagi melalui aplikasi pemesejan." #: indicator/textchannelobserver.cpp:227 msgid "Deactivate flight mode and try again from the messaging application." msgstr "Nyahaktifkan mod penerbangan dan cuba lagi dari aplikasi pemesejan." #: indicator/textchannelobserver.cpp:230 msgid "Try again from the messaging application." msgstr "Cuba lagi menerusi aplikasi pemesejan." #: indicator/textchannelobserver.cpp:236 msgid "The message could not be sent" msgstr "Mesej tidak dapat dihantar" #: indicator/textchannelobserver.cpp:249 indicator/textchannelobserver.cpp:713 msgid "View message" msgstr "Lihat mesej" #: indicator/textchannelobserver.cpp:295 msgid "New Group" msgstr "" #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:302 #, qt-format msgid "You joined group %1 " msgstr "" #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:306 #, qt-format msgid "You joined group %1" msgstr "" #: indicator/textchannelobserver.cpp:309 msgid "You joined a new group" msgstr "" #: indicator/textchannelobserver.cpp:328 msgid "View Group" msgstr "" #: indicator/textchannelobserver.cpp:367 indicator/ussdindicator.cpp:116 msgid "Ok" msgstr "Ok" #: indicator/textchannelobserver.cpp:373 msgid "Save" msgstr "Simpan" #: indicator/textchannelobserver.cpp:468 msgid "Emergency Alert" msgstr "" #: indicator/textchannelobserver.cpp:471 msgid "Emergency Alert: Extreme" msgstr "" #: indicator/textchannelobserver.cpp:474 msgid "Emergency Alert: Severe" msgstr "" #: indicator/textchannelobserver.cpp:477 msgid "Emergency Alert: Notice" msgstr "" #: indicator/textchannelobserver.cpp:482 msgid "AMBER Alert" msgstr "" #: indicator/textchannelobserver.cpp:485 msgid "Alert" msgstr "" #: indicator/textchannelobserver.cpp:531 msgid "Show alert" msgstr "" #: indicator/textchannelobserver.cpp:604 #, qt-format msgid "Attachment: %1 image" msgid_plural "Attachments: %1 images" msgstr[0] "Lampiran: %1 imej" msgstr[1] "Lampiran: %1 imej" #: indicator/textchannelobserver.cpp:606 #, qt-format msgid "Attachment: %1 video" msgid_plural "Attachments: %1 videos" msgstr[0] "Lampiran: %1 video" msgstr[1] "Lampiran: %1 video" #: indicator/textchannelobserver.cpp:608 #, qt-format msgid "Attachment: %1 contact" msgid_plural "Attachments: %1 contacts" msgstr[0] "Lampiran: %1 kenalan" msgstr[1] "Lampiran: %1 kenalan" #: indicator/textchannelobserver.cpp:610 #, qt-format msgid "Attachment: %1 audio clip" msgid_plural "Attachments: %1 audio clips" msgstr[0] "Lampiran: %1 klip audio" msgstr[1] "Lampiran: %1 klip audio" #: indicator/textchannelobserver.cpp:612 #, qt-format msgid "Attachment: %1 file" msgid_plural "Attachments: %1 files" msgstr[0] "Lampiran: %1 fail" msgstr[1] "Lampiran: %1 fail" #. TRANSLATORS : message displayed when any error occurred while receiving a MMS (case when cellular-data is off, or any downloading issue). Notify that there was a message, the user can find more about it in the messaging-app. #: indicator/textchannelobserver.cpp:615 #, fuzzy #| msgid "View message" msgid "New MMS message" msgstr "Lihat mesej" #. TRANSLATORS : %1 is the recipient name #: indicator/textchannelobserver.cpp:679 indicator/textchannelobserver.cpp:683 #, qt-format msgid "Message to group from %1" msgstr "Mesej ke kumpulan daripada %1" #: indicator/textchannelobserver.cpp:749 #, qt-format msgid "Message from %1" msgstr "Mesej daripada %1" #: indicator/textchannelobserver.cpp:910 msgid "Please, select a SIM card:" msgstr "Sila, pilih satu kad SIM:" #: indicator/ussdindicator.cpp:119 msgid "Reply" msgstr "Balas" #: indicator/ussdindicator.cpp:142 msgid "Cancel" msgstr "Batal" #: libtelephonyservice/callnotification.cpp:53 msgid "Conf call on hold" msgstr "" #: libtelephonyservice/callnotification.cpp:53 #, qt-format msgid "%1 call on hold" msgstr "" #: libtelephonyservice/callnotification.cpp:56 msgid "Conf call ended" msgstr "" #: libtelephonyservice/callnotification.cpp:56 #, qt-format msgid "%1 call ended" msgstr "" #: libtelephonyservice/callnotification.cpp:59 #, qt-format msgid "%1 call declined" msgstr "" #: libtelephonyservice/contactwatcher.cpp:157 msgid "Private Number" msgstr "Nombor Persendirian" #: libtelephonyservice/contactwatcher.cpp:159 msgid "Unknown Number" msgstr "Nombor Tidak Diketahui" #, fuzzy #~| msgid "Telephony Service" #~ msgid "telephony-service-call" #~ msgstr "Perkhidmatan Telefoni" #, fuzzy #~| msgid "Telephony Service" #~ msgid "telephony-service-message" #~ msgstr "Perkhidmatan Telefoni" telephony-service-0.5.3/po/my.po000066400000000000000000000245161455543255600166150ustar00rootroot00000000000000# Burmese translation for telephony-service # Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013 # This file is distributed under the same license as the telephony-service package. # FIRST AUTHOR , 2013. # msgid "" msgstr "" "Project-Id-Version: telephony-service\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-12-16 17:03+0100\n" "PO-Revision-Date: 2023-01-05 11:07+0000\n" "Last-Translator: Anonymous \n" "Language-Team: Burmese \n" "Language: my\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" "X-Generator: Weblate 4.15.1-dev\n" "X-Launchpad-Export-Date: 2017-01-04 06:02+0000\n" #: indicator/telephony-service-call.desktop.in:4 msgid "Phone Calls" msgstr "ဖုန်းခေါ်ဆိုမည်" #: indicator/telephony-service-sms.desktop.in:4 msgid "SMS" msgstr "စာတိုပို့စနစ်" #: approver/approver.cpp:66 msgid "Unknown caller" msgstr "မသိသောခေါ်ဆိုသူ" #: approver/approver.cpp:94 msgid "I'm busy at the moment. I'll call later." msgstr "" #: approver/approver.cpp:95 msgid "I'm running late, on my way now." msgstr "" #: approver/approver.cpp:96 msgid "Please call me back later." msgstr "" #: approver/approver.cpp:457 #, qt-format msgid "On [%1]" msgstr "" #: approver/approver.cpp:461 indicator/messagingmenu.cpp:414 msgid "Private number" msgstr "" #: approver/approver.cpp:464 indicator/messagingmenu.cpp:244 #: indicator/messagingmenu.cpp:418 indicator/textchannelobserver.cpp:640 msgid "Unknown number" msgstr "" #: approver/approver.cpp:470 approver/approver.cpp:485 msgid "Caller number is not available" msgstr "ခေါ်ဆိုသည့်နံပါတ်မှာမရရှိနိုင်ပါ" #: approver/approver.cpp:476 msgid "Calling from private number" msgstr "လျှို့ဝှက်နံပါတ်မှခေါ်နေသည်" #: approver/approver.cpp:479 msgid "Calling from unknown number" msgstr "မသိရှိသောနံပါတ်မှခေါ်နေသည်" #: approver/approver.cpp:482 #, qt-format msgid "Calling from %1" msgstr "%1 မှခေါ်နေသည်" #: approver/approver.cpp:529 msgid "Hold + Answer" msgstr "" #: approver/approver.cpp:530 msgid "Accept" msgstr "လက်ခံ" #: approver/approver.cpp:543 msgid "End + Answer" msgstr "" #: approver/approver.cpp:552 msgid "Decline" msgstr "ငြင်းပယ်" #: approver/approver.cpp:560 msgid "Message & decline" msgstr "" #: approver/main.cpp:46 msgid "Telephony Service Approver" msgstr "" #: indicator/authhandler.cpp:72 msgid "Authentication failed. Do you want to review your credentials?" msgstr "" #: indicator/authhandler.cpp:91 msgid "Yes" msgstr "" #: indicator/authhandler.cpp:94 msgid "No" msgstr "" #: indicator/displaynamesettings.cpp:35 #, qt-format msgid "SIM %1" msgstr "" #: indicator/main.cpp:53 msgid "Telephony Service Indicator" msgstr "" #: indicator/messagingmenu.cpp:83 indicator/messagingmenu.cpp:87 msgid "Telephony Service" msgstr "" #: indicator/messagingmenu.cpp:151 indicator/messagingmenu.cpp:293 #: indicator/messagingmenu.cpp:360 msgid "Send" msgstr "" #. TRANSLATORS : %1 is the group name and %2 is the recipient name #: indicator/messagingmenu.cpp:262 indicator/textchannelobserver.cpp:671 #: indicator/textchannelobserver.cpp:675 #, qt-format msgid "Message to %1 from %2" msgstr "" #. TRANSLATORS : %1 is the recipient name #: indicator/messagingmenu.cpp:265 indicator/messagingmenu.cpp:269 #, qt-format msgid "Message to the group from %1" msgstr "" #: indicator/messagingmenu.cpp:345 msgid "Call back" msgstr "" #: indicator/messagingmenu.cpp:350 #, fuzzy #| msgid "I missed your call - can you call me now?" msgid "Missed your call — can you call me now?" msgstr "ကျွန်ုပ်သင်၏ခေါ်ဆိုမှု့ကိုမကိုင်မိပါ။ အခုပြန်လည်ခေါ်ဆိုနိုင်သလား။" #: indicator/messagingmenu.cpp:351 #, fuzzy #| msgid "I'm running late. I'm on my way." msgid "Running late. On my way." msgstr "ကျွန်ုပ်သွားတာနောက်ကျနေပြီ။လမ်းတွင်ရောက်နေပြီ။" #: indicator/messagingmenu.cpp:352 #, fuzzy #| msgid "I'm busy at the moment. I'll call you later." msgid "Busy at the moment. Will call you later." msgstr "ကျွန်ုပ်ယခုအလုပ်များနေသည်။နောက်မှ ပြန်လည်ခေါ်ဆိုလိုက်မည်" #: indicator/messagingmenu.cpp:353 #, fuzzy #| msgid "I'll be 20 minutes late." msgid "I am 20 minutes late." msgstr "ကျွန်ုပ် မိနစ် ၂၀ နောက်ကျမည်" #: indicator/messagingmenu.cpp:354 #, fuzzy #| msgid "Sorry, I'm still busy. I'll call you later." msgid "Still busy. Will call you later." msgstr "ဆောရီး၊ အလုပ်များနေသေးသည်။ နောက်မှပြန်ခေါ်လိုက်မည်" #: indicator/messagingmenu.cpp:409 #, qt-format msgid "%1 missed call" msgid_plural "%1 missed calls" msgstr[0] "%1 လွတ်သွားသောခေါ်ဆိုမှု့" #: indicator/messagingmenu.cpp:492 msgid "Voicemail messages" msgstr "အသံနှင့်စာများ" #: indicator/messagingmenu.cpp:495 #, qt-format msgid "%1 voicemail message" msgid_plural "%1 voicemail messages" msgstr[0] "%1 အသံ message" #: indicator/messagingmenu.cpp:500 msgid "Voicemail" msgstr "" #: indicator/metrics.cpp:42 #, qt-format msgid "%1 text messages sent today" msgstr "" #: indicator/metrics.cpp:43 msgid "No text messages sent today" msgstr "" #: indicator/metrics.cpp:44 #, qt-format msgid "%1 text messages received today" msgstr "" #: indicator/metrics.cpp:45 msgid "No text messages received today" msgstr "" #: indicator/metrics.cpp:46 #, qt-format msgid "%1 calls received today" msgstr "" #: indicator/metrics.cpp:47 msgid "No calls received today" msgstr "" #: indicator/metrics.cpp:48 #, qt-format msgid "%1 calls made today" msgstr "" #: indicator/metrics.cpp:49 indicator/metrics.cpp:51 msgid "No calls made today" msgstr "" #: indicator/metrics.cpp:50 #, qt-format msgid "Spent %1 minutes in calls today" msgstr "" #: indicator/textchannelobserver.cpp:225 msgid "Unlock your sim card and try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:227 msgid "Deactivate flight mode and try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:230 msgid "Try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:236 msgid "The message could not be sent" msgstr "" #: indicator/textchannelobserver.cpp:249 indicator/textchannelobserver.cpp:713 msgid "View message" msgstr "" #: indicator/textchannelobserver.cpp:295 msgid "New Group" msgstr "" #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:302 #, qt-format msgid "You joined group %1 " msgstr "" #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:306 #, qt-format msgid "You joined group %1" msgstr "" #: indicator/textchannelobserver.cpp:309 msgid "You joined a new group" msgstr "" #: indicator/textchannelobserver.cpp:328 msgid "View Group" msgstr "" #: indicator/textchannelobserver.cpp:367 indicator/ussdindicator.cpp:116 msgid "Ok" msgstr "" #: indicator/textchannelobserver.cpp:373 msgid "Save" msgstr "သိမ်းမည်" #: indicator/textchannelobserver.cpp:468 msgid "Emergency Alert" msgstr "" #: indicator/textchannelobserver.cpp:471 msgid "Emergency Alert: Extreme" msgstr "" #: indicator/textchannelobserver.cpp:474 msgid "Emergency Alert: Severe" msgstr "" #: indicator/textchannelobserver.cpp:477 msgid "Emergency Alert: Notice" msgstr "" #: indicator/textchannelobserver.cpp:482 msgid "AMBER Alert" msgstr "" #: indicator/textchannelobserver.cpp:485 msgid "Alert" msgstr "" #: indicator/textchannelobserver.cpp:531 msgid "Show alert" msgstr "" #: indicator/textchannelobserver.cpp:604 #, qt-format msgid "Attachment: %1 image" msgid_plural "Attachments: %1 images" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:606 #, qt-format msgid "Attachment: %1 video" msgid_plural "Attachments: %1 videos" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:608 #, qt-format msgid "Attachment: %1 contact" msgid_plural "Attachments: %1 contacts" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:610 #, qt-format msgid "Attachment: %1 audio clip" msgid_plural "Attachments: %1 audio clips" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:612 #, qt-format msgid "Attachment: %1 file" msgid_plural "Attachments: %1 files" msgstr[0] "" msgstr[1] "" #. TRANSLATORS : message displayed when any error occurred while receiving a MMS (case when cellular-data is off, or any downloading issue). Notify that there was a message, the user can find more about it in the messaging-app. #: indicator/textchannelobserver.cpp:615 msgid "New MMS message" msgstr "" #. TRANSLATORS : %1 is the recipient name #: indicator/textchannelobserver.cpp:679 indicator/textchannelobserver.cpp:683 #, qt-format msgid "Message to group from %1" msgstr "" #: indicator/textchannelobserver.cpp:749 #, qt-format msgid "Message from %1" msgstr "" #: indicator/textchannelobserver.cpp:910 msgid "Please, select a SIM card:" msgstr "" #: indicator/ussdindicator.cpp:119 msgid "Reply" msgstr "" #: indicator/ussdindicator.cpp:142 #, fuzzy msgid "Cancel" msgstr "Cancel" #: libtelephonyservice/callnotification.cpp:53 msgid "Conf call on hold" msgstr "" #: libtelephonyservice/callnotification.cpp:53 #, qt-format msgid "%1 call on hold" msgstr "" #: libtelephonyservice/callnotification.cpp:56 msgid "Conf call ended" msgstr "" #: libtelephonyservice/callnotification.cpp:56 #, qt-format msgid "%1 call ended" msgstr "" #: libtelephonyservice/callnotification.cpp:59 #, qt-format msgid "%1 call declined" msgstr "" #: libtelephonyservice/contactwatcher.cpp:157 msgid "Private Number" msgstr "" #: libtelephonyservice/contactwatcher.cpp:159 #, fuzzy #| msgid "Unknown caller" msgid "Unknown Number" msgstr "မသိသောခေါ်ဆိုသူ" telephony-service-0.5.3/po/nan.po000066400000000000000000000211631455543255600167370ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-12-16 17:03+0100\n" "PO-Revision-Date: 2023-01-05 11:07+0000\n" "Last-Translator: Anonymous \n" "Language-Team: Chinese (Min Nan) \n" "Language: nan\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Generator: Weblate 4.15.1-dev\n" #: indicator/telephony-service-call.desktop.in:4 msgid "Phone Calls" msgstr "" #: indicator/telephony-service-sms.desktop.in:4 msgid "SMS" msgstr "" #: approver/approver.cpp:66 msgid "Unknown caller" msgstr "" #: approver/approver.cpp:94 msgid "I'm busy at the moment. I'll call later." msgstr "" #: approver/approver.cpp:95 msgid "I'm running late, on my way now." msgstr "" #: approver/approver.cpp:96 msgid "Please call me back later." msgstr "" #: approver/approver.cpp:457 #, qt-format msgid "On [%1]" msgstr "" #: approver/approver.cpp:461 indicator/messagingmenu.cpp:414 msgid "Private number" msgstr "" #: approver/approver.cpp:464 indicator/messagingmenu.cpp:244 #: indicator/messagingmenu.cpp:418 indicator/textchannelobserver.cpp:640 msgid "Unknown number" msgstr "" #: approver/approver.cpp:470 approver/approver.cpp:485 msgid "Caller number is not available" msgstr "" #: approver/approver.cpp:476 msgid "Calling from private number" msgstr "" #: approver/approver.cpp:479 msgid "Calling from unknown number" msgstr "" #: approver/approver.cpp:482 #, qt-format msgid "Calling from %1" msgstr "" #: approver/approver.cpp:529 msgid "Hold + Answer" msgstr "" #: approver/approver.cpp:530 msgid "Accept" msgstr "" #: approver/approver.cpp:543 msgid "End + Answer" msgstr "" #: approver/approver.cpp:552 msgid "Decline" msgstr "" #: approver/approver.cpp:560 msgid "Message & decline" msgstr "" #: approver/main.cpp:46 msgid "Telephony Service Approver" msgstr "" #: indicator/authhandler.cpp:72 msgid "Authentication failed. Do you want to review your credentials?" msgstr "" #: indicator/authhandler.cpp:91 msgid "Yes" msgstr "" #: indicator/authhandler.cpp:94 msgid "No" msgstr "" #: indicator/displaynamesettings.cpp:35 #, qt-format msgid "SIM %1" msgstr "" #: indicator/main.cpp:53 msgid "Telephony Service Indicator" msgstr "" #: indicator/messagingmenu.cpp:83 indicator/messagingmenu.cpp:87 msgid "Telephony Service" msgstr "" #: indicator/messagingmenu.cpp:151 indicator/messagingmenu.cpp:293 #: indicator/messagingmenu.cpp:360 msgid "Send" msgstr "" #. TRANSLATORS : %1 is the group name and %2 is the recipient name #: indicator/messagingmenu.cpp:262 indicator/textchannelobserver.cpp:671 #: indicator/textchannelobserver.cpp:675 #, qt-format msgid "Message to %1 from %2" msgstr "" #. TRANSLATORS : %1 is the recipient name #: indicator/messagingmenu.cpp:265 indicator/messagingmenu.cpp:269 #, qt-format msgid "Message to the group from %1" msgstr "" #: indicator/messagingmenu.cpp:345 msgid "Call back" msgstr "" #: indicator/messagingmenu.cpp:350 msgid "Missed your call — can you call me now?" msgstr "" #: indicator/messagingmenu.cpp:351 msgid "Running late. On my way." msgstr "" #: indicator/messagingmenu.cpp:352 msgid "Busy at the moment. Will call you later." msgstr "" #: indicator/messagingmenu.cpp:353 msgid "I am 20 minutes late." msgstr "" #: indicator/messagingmenu.cpp:354 msgid "Still busy. Will call you later." msgstr "" #: indicator/messagingmenu.cpp:409 #, qt-format msgid "%1 missed call" msgid_plural "%1 missed calls" msgstr[0] "" msgstr[1] "" #: indicator/messagingmenu.cpp:492 msgid "Voicemail messages" msgstr "" #: indicator/messagingmenu.cpp:495 #, qt-format msgid "%1 voicemail message" msgid_plural "%1 voicemail messages" msgstr[0] "" msgstr[1] "" #: indicator/messagingmenu.cpp:500 msgid "Voicemail" msgstr "" #: indicator/metrics.cpp:42 #, qt-format msgid "%1 text messages sent today" msgstr "" #: indicator/metrics.cpp:43 msgid "No text messages sent today" msgstr "" #: indicator/metrics.cpp:44 #, qt-format msgid "%1 text messages received today" msgstr "" #: indicator/metrics.cpp:45 msgid "No text messages received today" msgstr "" #: indicator/metrics.cpp:46 #, qt-format msgid "%1 calls received today" msgstr "" #: indicator/metrics.cpp:47 msgid "No calls received today" msgstr "" #: indicator/metrics.cpp:48 #, qt-format msgid "%1 calls made today" msgstr "" #: indicator/metrics.cpp:49 indicator/metrics.cpp:51 msgid "No calls made today" msgstr "" #: indicator/metrics.cpp:50 #, qt-format msgid "Spent %1 minutes in calls today" msgstr "" #: indicator/textchannelobserver.cpp:225 msgid "Unlock your sim card and try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:227 msgid "Deactivate flight mode and try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:230 msgid "Try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:236 msgid "The message could not be sent" msgstr "" #: indicator/textchannelobserver.cpp:249 indicator/textchannelobserver.cpp:713 msgid "View message" msgstr "" #: indicator/textchannelobserver.cpp:295 msgid "New Group" msgstr "" #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:302 #, qt-format msgid "You joined group %1 " msgstr "" #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:306 #, qt-format msgid "You joined group %1" msgstr "" #: indicator/textchannelobserver.cpp:309 msgid "You joined a new group" msgstr "" #: indicator/textchannelobserver.cpp:328 msgid "View Group" msgstr "" #: indicator/textchannelobserver.cpp:367 indicator/ussdindicator.cpp:116 msgid "Ok" msgstr "" #: indicator/textchannelobserver.cpp:373 msgid "Save" msgstr "" #: indicator/textchannelobserver.cpp:468 msgid "Emergency Alert" msgstr "" #: indicator/textchannelobserver.cpp:471 msgid "Emergency Alert: Extreme" msgstr "" #: indicator/textchannelobserver.cpp:474 msgid "Emergency Alert: Severe" msgstr "" #: indicator/textchannelobserver.cpp:477 msgid "Emergency Alert: Notice" msgstr "" #: indicator/textchannelobserver.cpp:482 msgid "AMBER Alert" msgstr "" #: indicator/textchannelobserver.cpp:485 msgid "Alert" msgstr "" #: indicator/textchannelobserver.cpp:531 msgid "Show alert" msgstr "" #: indicator/textchannelobserver.cpp:604 #, qt-format msgid "Attachment: %1 image" msgid_plural "Attachments: %1 images" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:606 #, qt-format msgid "Attachment: %1 video" msgid_plural "Attachments: %1 videos" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:608 #, qt-format msgid "Attachment: %1 contact" msgid_plural "Attachments: %1 contacts" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:610 #, qt-format msgid "Attachment: %1 audio clip" msgid_plural "Attachments: %1 audio clips" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:612 #, qt-format msgid "Attachment: %1 file" msgid_plural "Attachments: %1 files" msgstr[0] "" msgstr[1] "" #. TRANSLATORS : message displayed when any error occurred while receiving a MMS (case when cellular-data is off, or any downloading issue). Notify that there was a message, the user can find more about it in the messaging-app. #: indicator/textchannelobserver.cpp:615 msgid "New MMS message" msgstr "" #. TRANSLATORS : %1 is the recipient name #: indicator/textchannelobserver.cpp:679 indicator/textchannelobserver.cpp:683 #, qt-format msgid "Message to group from %1" msgstr "" #: indicator/textchannelobserver.cpp:749 #, qt-format msgid "Message from %1" msgstr "" #: indicator/textchannelobserver.cpp:910 msgid "Please, select a SIM card:" msgstr "" #: indicator/ussdindicator.cpp:119 msgid "Reply" msgstr "" #: indicator/ussdindicator.cpp:142 #, fuzzy msgid "Cancel" msgstr "Cancel" #: libtelephonyservice/callnotification.cpp:53 msgid "Conf call on hold" msgstr "" #: libtelephonyservice/callnotification.cpp:53 #, qt-format msgid "%1 call on hold" msgstr "" #: libtelephonyservice/callnotification.cpp:56 msgid "Conf call ended" msgstr "" #: libtelephonyservice/callnotification.cpp:56 #, qt-format msgid "%1 call ended" msgstr "" #: libtelephonyservice/callnotification.cpp:59 #, qt-format msgid "%1 call declined" msgstr "" #: libtelephonyservice/contactwatcher.cpp:157 msgid "Private Number" msgstr "" #: libtelephonyservice/contactwatcher.cpp:159 msgid "Unknown Number" msgstr "" telephony-service-0.5.3/po/nb.po000066400000000000000000000271021455543255600165610ustar00rootroot00000000000000# Norwegian Bokmal translation for telephony-service # Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013 # This file is distributed under the same license as the telephony-service package. # FIRST AUTHOR , 2013. # msgid "" msgstr "" "Project-Id-Version: telephony-service\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-12-16 17:03+0100\n" "PO-Revision-Date: 2023-02-07 09:55+0000\n" "Last-Translator: Allan Nordhøy \n" "Language-Team: Norwegian Bokmål \n" "Language: nb\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Generator: Weblate 4.16-dev\n" "X-Launchpad-Export-Date: 2017-01-04 06:03+0000\n" #: indicator/telephony-service-call.desktop.in:4 msgid "Phone Calls" msgstr "Telefonsamtaler" #: indicator/telephony-service-sms.desktop.in:4 msgid "SMS" msgstr "SMS" #: approver/approver.cpp:66 msgid "Unknown caller" msgstr "Ukjent anropsperson" #: approver/approver.cpp:94 msgid "I'm busy at the moment. I'll call later." msgstr "Jeg er opptatt for øyeblikket. Ringer deg senere." #: approver/approver.cpp:95 msgid "I'm running late, on my way now." msgstr "Jeg blir forsinket. Er på vei nå." #: approver/approver.cpp:96 msgid "Please call me back later." msgstr "Ring meg heller senere." #: approver/approver.cpp:457 #, qt-format msgid "On [%1]" msgstr "På [%1]" #: approver/approver.cpp:461 indicator/messagingmenu.cpp:414 msgid "Private number" msgstr "Skjult nummer" #: approver/approver.cpp:464 indicator/messagingmenu.cpp:244 #: indicator/messagingmenu.cpp:418 indicator/textchannelobserver.cpp:640 msgid "Unknown number" msgstr "Ukjent nummer" #: approver/approver.cpp:470 approver/approver.cpp:485 msgid "Caller number is not available" msgstr "Anropsnummer er ikke tilgjengelig" #: approver/approver.cpp:476 msgid "Calling from private number" msgstr "Ringer fra skjult nummer" #: approver/approver.cpp:479 msgid "Calling from unknown number" msgstr "Ringer fra ukjent nummer" #: approver/approver.cpp:482 #, qt-format msgid "Calling from %1" msgstr "Ringer fra %1" #: approver/approver.cpp:529 msgid "Hold + Answer" msgstr "Hold + svar" #: approver/approver.cpp:530 msgid "Accept" msgstr "Godta" #: approver/approver.cpp:543 msgid "End + Answer" msgstr "Avslutt + svar" #: approver/approver.cpp:552 msgid "Decline" msgstr "Avslå" #: approver/approver.cpp:560 msgid "Message & decline" msgstr "Send melding og avvis" #: approver/main.cpp:46 msgid "Telephony Service Approver" msgstr "Telefontjeneste-godkjenning" #: indicator/authhandler.cpp:72 msgid "Authentication failed. Do you want to review your credentials?" msgstr "Autentisering mislyktes. VIl du se gjennom akkreditivene dine?" #: indicator/authhandler.cpp:91 msgid "Yes" msgstr "Ja" #: indicator/authhandler.cpp:94 msgid "No" msgstr "Nei" #: indicator/displaynamesettings.cpp:35 #, qt-format msgid "SIM %1" msgstr "SIM %1" #: indicator/main.cpp:53 msgid "Telephony Service Indicator" msgstr "Telefontjeneste-indikator" #: indicator/messagingmenu.cpp:83 indicator/messagingmenu.cpp:87 msgid "Telephony Service" msgstr "Telefontjeneste" #: indicator/messagingmenu.cpp:151 indicator/messagingmenu.cpp:293 #: indicator/messagingmenu.cpp:360 msgid "Send" msgstr "Send" #. TRANSLATORS : %1 is the group name and %2 is the recipient name #: indicator/messagingmenu.cpp:262 indicator/textchannelobserver.cpp:671 #: indicator/textchannelobserver.cpp:675 #, qt-format msgid "Message to %1 from %2" msgstr "Melding til %1 fra %2" #. TRANSLATORS : %1 is the recipient name #: indicator/messagingmenu.cpp:265 indicator/messagingmenu.cpp:269 #, fuzzy, qt-format #| msgid "Message to group from %1" msgid "Message to the group from %1" msgstr "Melding til gruppe fra %1" #: indicator/messagingmenu.cpp:345 msgid "Call back" msgstr "Ring tilbake" #: indicator/messagingmenu.cpp:350 #, fuzzy #| msgid "I missed your call - can you call me now?" msgid "Missed your call — can you call me now?" msgstr "Fikk ikke tatt telefonen. Kan du ringe meg nå?" #: indicator/messagingmenu.cpp:351 #, fuzzy #| msgid "I'm running late. I'm on my way." msgid "Running late. On my way." msgstr "Jeg blir noe forsinket. Er på vei." #: indicator/messagingmenu.cpp:352 #, fuzzy #| msgid "I'm busy at the moment. I'll call you later." msgid "Busy at the moment. Will call you later." msgstr "Jeg er opptatt akkurat nå. Ringer deg senere." #: indicator/messagingmenu.cpp:353 #, fuzzy #| msgid "I'll be 20 minutes late." msgid "I am 20 minutes late." msgstr "Jeg blir 20 minutter forsinket." #: indicator/messagingmenu.cpp:354 #, fuzzy #| msgid "Sorry, I'm still busy. I'll call you later." msgid "Still busy. Will call you later." msgstr "Beklager, men jeg er fortsatt opptatt. Ringer deg senere." #: indicator/messagingmenu.cpp:409 #, qt-format msgid "%1 missed call" msgid_plural "%1 missed calls" msgstr[0] "%1 ubesvart anrop" msgstr[1] "%1 ubesvarte anrop" #: indicator/messagingmenu.cpp:492 msgid "Voicemail messages" msgstr "Talemeldinger" #: indicator/messagingmenu.cpp:495 #, qt-format msgid "%1 voicemail message" msgid_plural "%1 voicemail messages" msgstr[0] "%1 talemelding" msgstr[1] "%1 talemeldinger" #: indicator/messagingmenu.cpp:500 msgid "Voicemail" msgstr "Mobilsvar" #: indicator/metrics.cpp:42 #, qt-format msgid "%1 text messages sent today" msgstr "Sendt %1 tekstmeldinger i dag" #: indicator/metrics.cpp:43 msgid "No text messages sent today" msgstr "Ingen sendte tekstmeldinger i dag" #: indicator/metrics.cpp:44 #, qt-format msgid "%1 text messages received today" msgstr "Mottatt %1 tekstmeldinger i dag" #: indicator/metrics.cpp:45 msgid "No text messages received today" msgstr "Ingen mottatte tekstmeldinger i dag" #: indicator/metrics.cpp:46 #, qt-format msgid "%1 calls received today" msgstr "Mottatt %1 anrop i dag" #: indicator/metrics.cpp:47 msgid "No calls received today" msgstr "Ingen mottatte anrop i dag" #: indicator/metrics.cpp:48 #, qt-format msgid "%1 calls made today" msgstr "Ringt ut %1 ganger i dag" #: indicator/metrics.cpp:49 indicator/metrics.cpp:51 msgid "No calls made today" msgstr "Ingen utgående anrop i dag" #: indicator/metrics.cpp:50 #, qt-format msgid "Spent %1 minutes in calls today" msgstr "Vært i anrop i %1 minutter i dag" #: indicator/textchannelobserver.cpp:225 msgid "Unlock your sim card and try again from the messaging application." msgstr "Lås opp SIM-kortet og prøv på nytt fra meldingsprogrammet." #: indicator/textchannelobserver.cpp:227 msgid "Deactivate flight mode and try again from the messaging application." msgstr "Slå av flymodus og prøv igjen fra meldingsprogrammet." #: indicator/textchannelobserver.cpp:230 msgid "Try again from the messaging application." msgstr "Prøv på nytt fra meldingsprogrammet." #: indicator/textchannelobserver.cpp:236 msgid "The message could not be sent" msgstr "Meldinga ble ikke sendt" #: indicator/textchannelobserver.cpp:249 indicator/textchannelobserver.cpp:713 msgid "View message" msgstr "Vis melding" #: indicator/textchannelobserver.cpp:295 msgid "New Group" msgstr "Ny gruppe" #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:302 #, qt-format msgid "You joined group %1 " msgstr "Du tok del i gruppe %1 " #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:306 #, qt-format msgid "You joined group %1" msgstr "Du tok del i gruppe %1" #: indicator/textchannelobserver.cpp:309 msgid "You joined a new group" msgstr "Du tok del i en ny gruppe" #: indicator/textchannelobserver.cpp:328 msgid "View Group" msgstr "Vis gruppe" #: indicator/textchannelobserver.cpp:367 indicator/ussdindicator.cpp:116 msgid "Ok" msgstr "OK" #: indicator/textchannelobserver.cpp:373 msgid "Save" msgstr "Lagre" #: indicator/textchannelobserver.cpp:468 msgid "Emergency Alert" msgstr "Nødalarm" #: indicator/textchannelobserver.cpp:471 #, fuzzy msgid "Emergency Alert: Extreme" msgstr "Nødalarm: Ekstrem" #: indicator/textchannelobserver.cpp:474 msgid "Emergency Alert: Severe" msgstr "Nødalarm: Alvorlig" #: indicator/textchannelobserver.cpp:477 msgid "Emergency Alert: Notice" msgstr "Nødalarm: Merknad" #: indicator/textchannelobserver.cpp:482 #, fuzzy msgid "AMBER Alert" msgstr "Savnet person" #: indicator/textchannelobserver.cpp:485 msgid "Alert" msgstr "Alarm" #: indicator/textchannelobserver.cpp:531 msgid "Show alert" msgstr "Vis alarm" #: indicator/textchannelobserver.cpp:604 #, qt-format msgid "Attachment: %1 image" msgid_plural "Attachments: %1 images" msgstr[0] "Vedlegg: %1 bilde" msgstr[1] "Vedlegg: %1 bilder" #: indicator/textchannelobserver.cpp:606 #, qt-format msgid "Attachment: %1 video" msgid_plural "Attachments: %1 videos" msgstr[0] "Vedlegg: %1 video" msgstr[1] "Vedlegg: %1 videoer" #: indicator/textchannelobserver.cpp:608 #, qt-format msgid "Attachment: %1 contact" msgid_plural "Attachments: %1 contacts" msgstr[0] "Vedlegg: %1 kontakt" msgstr[1] "Vedlegg: %1 kontakter" #: indicator/textchannelobserver.cpp:610 #, qt-format msgid "Attachment: %1 audio clip" msgid_plural "Attachments: %1 audio clips" msgstr[0] "Vedlegg: %1 lydklipp" msgstr[1] "Vedlegg: %1 lydklipp" #: indicator/textchannelobserver.cpp:612 #, qt-format msgid "Attachment: %1 file" msgid_plural "Attachments: %1 files" msgstr[0] "Vedlegg: %1 fil" msgstr[1] "Vedlegg: %1 filer" #. TRANSLATORS : message displayed when any error occurred while receiving a MMS (case when cellular-data is off, or any downloading issue). Notify that there was a message, the user can find more about it in the messaging-app. #: indicator/textchannelobserver.cpp:615 #, fuzzy #| msgid "View message" msgid "New MMS message" msgstr "Vis melding" #. TRANSLATORS : %1 is the recipient name #: indicator/textchannelobserver.cpp:679 indicator/textchannelobserver.cpp:683 #, qt-format msgid "Message to group from %1" msgstr "Melding til gruppe fra %1" #: indicator/textchannelobserver.cpp:749 #, qt-format msgid "Message from %1" msgstr "Melding fra %1" #: indicator/textchannelobserver.cpp:910 msgid "Please, select a SIM card:" msgstr "Velg et SIM-kort:" #: indicator/ussdindicator.cpp:119 msgid "Reply" msgstr "Svar" #: indicator/ussdindicator.cpp:142 msgid "Cancel" msgstr "Avbryt" #: libtelephonyservice/callnotification.cpp:53 msgid "Conf call on hold" msgstr "Konf.-samtale på vent" #: libtelephonyservice/callnotification.cpp:53 #, qt-format msgid "%1 call on hold" msgstr "%1 samtale på vent" #: libtelephonyservice/callnotification.cpp:56 msgid "Conf call ended" msgstr "Konf.-samtale over" #: libtelephonyservice/callnotification.cpp:56 #, qt-format msgid "%1 call ended" msgstr "%1 samtale over" #: libtelephonyservice/callnotification.cpp:59 #, qt-format msgid "%1 call declined" msgstr "%1 anrop avslått" #: libtelephonyservice/contactwatcher.cpp:157 msgid "Private Number" msgstr "Skjult nummer" #: libtelephonyservice/contactwatcher.cpp:159 msgid "Unknown Number" msgstr "Ukjent nummer" #, fuzzy #~| msgid "Telephony Service" #~ msgid "telephony-service-call" #~ msgstr "Telefontjeneste" #, fuzzy #~| msgid "Telephony Service" #~ msgid "telephony-service-message" #~ msgstr "Telefontjeneste" #~ msgid "" #~ "Oops, there has been an error with the MMS system and this message could " #~ "not be retrieved. Please ensure Cellular Data is ON and MMS settings are " #~ "correct, then ask the sender to try again." #~ msgstr "" #~ "Beklager, det har oppstått en feil med MMS-systemet, og denne meldingen " #~ "kunne ikke hentes. Forsikre deg om at mobildata er PÅ og MMS-" #~ "innstillinger er riktige, og be deretter avsenderen om å prøve igjen." telephony-service-0.5.3/po/ne.po000066400000000000000000000243521455543255600165700ustar00rootroot00000000000000# Nepali translation for telephony-service # Copyright (c) 2015 Rosetta Contributors and Canonical Ltd 2015 # This file is distributed under the same license as the telephony-service package. # FIRST AUTHOR , 2015. # msgid "" msgstr "" "Project-Id-Version: telephony-service\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-12-16 17:03+0100\n" "PO-Revision-Date: 2023-01-05 11:07+0000\n" "Last-Translator: Anonymous \n" "Language-Team: Nepali \n" "Language: ne\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Generator: Weblate 4.15.1-dev\n" "X-Launchpad-Export-Date: 2017-01-04 06:03+0000\n" #: indicator/telephony-service-call.desktop.in:4 msgid "Phone Calls" msgstr "फोन कलहरू" #: indicator/telephony-service-sms.desktop.in:4 msgid "SMS" msgstr "एसएमएस" #: approver/approver.cpp:66 msgid "Unknown caller" msgstr "अज्ञात कलर" #: approver/approver.cpp:94 msgid "I'm busy at the moment. I'll call later." msgstr "म अहिले व्यस्त छु। पछि कल गर्छु।" #: approver/approver.cpp:95 msgid "I'm running late, on my way now." msgstr "" #: approver/approver.cpp:96 msgid "Please call me back later." msgstr "कृपया मलाई पछि कल गर्नुहोस्।" #: approver/approver.cpp:457 #, qt-format msgid "On [%1]" msgstr "" #: approver/approver.cpp:461 indicator/messagingmenu.cpp:414 msgid "Private number" msgstr "निजी नम्बर" #: approver/approver.cpp:464 indicator/messagingmenu.cpp:244 #: indicator/messagingmenu.cpp:418 indicator/textchannelobserver.cpp:640 msgid "Unknown number" msgstr "अज्ञात नम्बर" #: approver/approver.cpp:470 approver/approver.cpp:485 msgid "Caller number is not available" msgstr "" #: approver/approver.cpp:476 msgid "Calling from private number" msgstr "" #: approver/approver.cpp:479 msgid "Calling from unknown number" msgstr "अज्ञात नम्बर देखि कल" #: approver/approver.cpp:482 #, qt-format msgid "Calling from %1" msgstr "" #: approver/approver.cpp:529 msgid "Hold + Answer" msgstr "" #: approver/approver.cpp:530 msgid "Accept" msgstr "स्विकार गर्नुहोस्" #: approver/approver.cpp:543 msgid "End + Answer" msgstr "" #: approver/approver.cpp:552 msgid "Decline" msgstr "अस्वीकार गर्नुहोस्" #: approver/approver.cpp:560 msgid "Message & decline" msgstr "" #: approver/main.cpp:46 msgid "Telephony Service Approver" msgstr "" #: indicator/authhandler.cpp:72 msgid "Authentication failed. Do you want to review your credentials?" msgstr "" #: indicator/authhandler.cpp:91 msgid "Yes" msgstr "" #: indicator/authhandler.cpp:94 msgid "No" msgstr "" #: indicator/displaynamesettings.cpp:35 #, qt-format msgid "SIM %1" msgstr "" #: indicator/main.cpp:53 msgid "Telephony Service Indicator" msgstr "" #: indicator/messagingmenu.cpp:83 indicator/messagingmenu.cpp:87 msgid "Telephony Service" msgstr "" #: indicator/messagingmenu.cpp:151 indicator/messagingmenu.cpp:293 #: indicator/messagingmenu.cpp:360 msgid "Send" msgstr "पठाउनुहोस्" #. TRANSLATORS : %1 is the group name and %2 is the recipient name #: indicator/messagingmenu.cpp:262 indicator/textchannelobserver.cpp:671 #: indicator/textchannelobserver.cpp:675 #, qt-format msgid "Message to %1 from %2" msgstr "" #. TRANSLATORS : %1 is the recipient name #: indicator/messagingmenu.cpp:265 indicator/messagingmenu.cpp:269 #, qt-format msgid "Message to the group from %1" msgstr "" #: indicator/messagingmenu.cpp:345 msgid "Call back" msgstr "" #: indicator/messagingmenu.cpp:350 #, fuzzy #| msgid "I missed your call - can you call me now?" msgid "Missed your call — can you call me now?" msgstr "मैले तपाइको कल छुटाए-के तपाई अब मलाई फोन गर्न सक्नुहुन्छ?" #: indicator/messagingmenu.cpp:351 msgid "Running late. On my way." msgstr "" #: indicator/messagingmenu.cpp:352 #, fuzzy #| msgid "I'm busy at the moment. I'll call you later." msgid "Busy at the moment. Will call you later." msgstr "म अहिले व्यस्त छु। तपाइलाई पछि कल गर्छु।" #: indicator/messagingmenu.cpp:353 #, fuzzy #| msgid "I'll be 20 minutes late." msgid "I am 20 minutes late." msgstr "म २० मिनेट ढिला हुनेछु।" #: indicator/messagingmenu.cpp:354 #, fuzzy #| msgid "Sorry, I'm still busy. I'll call you later." msgid "Still busy. Will call you later." msgstr "माफ गर्नुहोस्, म अझै पनि व्यस्त छु। तपाईंलाई पछी कल गर्नेछू।" #: indicator/messagingmenu.cpp:409 #, qt-format msgid "%1 missed call" msgid_plural "%1 missed calls" msgstr[0] "" msgstr[1] "" #: indicator/messagingmenu.cpp:492 msgid "Voicemail messages" msgstr "" #: indicator/messagingmenu.cpp:495 #, qt-format msgid "%1 voicemail message" msgid_plural "%1 voicemail messages" msgstr[0] "" msgstr[1] "" #: indicator/messagingmenu.cpp:500 msgid "Voicemail" msgstr "भ्वाइसमेल" #: indicator/metrics.cpp:42 #, qt-format msgid "%1 text messages sent today" msgstr "" #: indicator/metrics.cpp:43 msgid "No text messages sent today" msgstr "" #: indicator/metrics.cpp:44 #, qt-format msgid "%1 text messages received today" msgstr "" #: indicator/metrics.cpp:45 msgid "No text messages received today" msgstr "" #: indicator/metrics.cpp:46 #, qt-format msgid "%1 calls received today" msgstr "" #: indicator/metrics.cpp:47 msgid "No calls received today" msgstr "" #: indicator/metrics.cpp:48 #, qt-format msgid "%1 calls made today" msgstr "" #: indicator/metrics.cpp:49 indicator/metrics.cpp:51 msgid "No calls made today" msgstr "आज कुनै कलहरू गरिएन" #: indicator/metrics.cpp:50 #, qt-format msgid "Spent %1 minutes in calls today" msgstr "" #: indicator/textchannelobserver.cpp:225 msgid "Unlock your sim card and try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:227 msgid "Deactivate flight mode and try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:230 msgid "Try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:236 msgid "The message could not be sent" msgstr "" #: indicator/textchannelobserver.cpp:249 indicator/textchannelobserver.cpp:713 msgid "View message" msgstr "संदेश हेर्नुहोस्" #: indicator/textchannelobserver.cpp:295 msgid "New Group" msgstr "" #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:302 #, qt-format msgid "You joined group %1 " msgstr "" #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:306 #, qt-format msgid "You joined group %1" msgstr "" #: indicator/textchannelobserver.cpp:309 msgid "You joined a new group" msgstr "" #: indicator/textchannelobserver.cpp:328 msgid "View Group" msgstr "" #: indicator/textchannelobserver.cpp:367 indicator/ussdindicator.cpp:116 msgid "Ok" msgstr "ठिक छ" #: indicator/textchannelobserver.cpp:373 msgid "Save" msgstr "बचत गर्नुहोस्" #: indicator/textchannelobserver.cpp:468 msgid "Emergency Alert" msgstr "" #: indicator/textchannelobserver.cpp:471 msgid "Emergency Alert: Extreme" msgstr "" #: indicator/textchannelobserver.cpp:474 msgid "Emergency Alert: Severe" msgstr "" #: indicator/textchannelobserver.cpp:477 msgid "Emergency Alert: Notice" msgstr "" #: indicator/textchannelobserver.cpp:482 msgid "AMBER Alert" msgstr "" #: indicator/textchannelobserver.cpp:485 msgid "Alert" msgstr "" #: indicator/textchannelobserver.cpp:531 msgid "Show alert" msgstr "" #: indicator/textchannelobserver.cpp:604 #, qt-format msgid "Attachment: %1 image" msgid_plural "Attachments: %1 images" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:606 #, qt-format msgid "Attachment: %1 video" msgid_plural "Attachments: %1 videos" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:608 #, qt-format msgid "Attachment: %1 contact" msgid_plural "Attachments: %1 contacts" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:610 #, qt-format msgid "Attachment: %1 audio clip" msgid_plural "Attachments: %1 audio clips" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:612 #, qt-format msgid "Attachment: %1 file" msgid_plural "Attachments: %1 files" msgstr[0] "" msgstr[1] "" #. TRANSLATORS : message displayed when any error occurred while receiving a MMS (case when cellular-data is off, or any downloading issue). Notify that there was a message, the user can find more about it in the messaging-app. #: indicator/textchannelobserver.cpp:615 #, fuzzy #| msgid "View message" msgid "New MMS message" msgstr "संदेश हेर्नुहोस्" #. TRANSLATORS : %1 is the recipient name #: indicator/textchannelobserver.cpp:679 indicator/textchannelobserver.cpp:683 #, qt-format msgid "Message to group from %1" msgstr "" #: indicator/textchannelobserver.cpp:749 #, qt-format msgid "Message from %1" msgstr "" #: indicator/textchannelobserver.cpp:910 msgid "Please, select a SIM card:" msgstr "" #: indicator/ussdindicator.cpp:119 msgid "Reply" msgstr "जवाफ दिनुहोस्" #: indicator/ussdindicator.cpp:142 #, fuzzy msgid "Cancel" msgstr "Cancel" #: libtelephonyservice/callnotification.cpp:53 msgid "Conf call on hold" msgstr "" #: libtelephonyservice/callnotification.cpp:53 #, qt-format msgid "%1 call on hold" msgstr "" #: libtelephonyservice/callnotification.cpp:56 msgid "Conf call ended" msgstr "" #: libtelephonyservice/callnotification.cpp:56 #, qt-format msgid "%1 call ended" msgstr "" #: libtelephonyservice/callnotification.cpp:59 #, qt-format msgid "%1 call declined" msgstr "" #: libtelephonyservice/contactwatcher.cpp:157 msgid "Private Number" msgstr "निजी नम्बर" #: libtelephonyservice/contactwatcher.cpp:159 #, fuzzy #| msgid "Unknown number" msgid "Unknown Number" msgstr "अज्ञात नम्बर" telephony-service-0.5.3/po/nl.po000066400000000000000000000266401455543255600166010ustar00rootroot00000000000000# Dutch translation for telephony-service # Copyright (c) 2014 Rosetta Contributors and Canonical Ltd 2014 # This file is distributed under the same license as the telephony-service package. # FIRST AUTHOR , 2014. # msgid "" msgstr "" "Project-Id-Version: telephony-service\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-12-16 17:03+0100\n" "PO-Revision-Date: 2023-02-22 19:39+0000\n" "Last-Translator: Heimen Stoffels \n" "Language-Team: Dutch \n" "Language: nl\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Generator: Weblate 4.16-dev\n" "X-Launchpad-Export-Date: 2017-01-04 06:02+0000\n" #: indicator/telephony-service-call.desktop.in:4 msgid "Phone Calls" msgstr "Telefoongesprekken" #: indicator/telephony-service-sms.desktop.in:4 msgid "SMS" msgstr "Sms" #: approver/approver.cpp:66 msgid "Unknown caller" msgstr "Onbekende beller" #: approver/approver.cpp:94 msgid "I'm busy at the moment. I'll call later." msgstr "Ik ben momenteel bezig — ik bel later terug." #: approver/approver.cpp:95 msgid "I'm running late, on my way now." msgstr "Ik ben laat, maar ik ben onderweg." #: approver/approver.cpp:96 msgid "Please call me back later." msgstr "Bel me a.u.b. later terug." #: approver/approver.cpp:457 #, qt-format msgid "On [%1]" msgstr "Aan [%1]" #: approver/approver.cpp:461 indicator/messagingmenu.cpp:414 msgid "Private number" msgstr "Privénummer" #: approver/approver.cpp:464 indicator/messagingmenu.cpp:244 #: indicator/messagingmenu.cpp:418 indicator/textchannelobserver.cpp:640 msgid "Unknown number" msgstr "Onbekend nummer" #: approver/approver.cpp:470 approver/approver.cpp:485 msgid "Caller number is not available" msgstr "Nummer is niet beschikbaar" #: approver/approver.cpp:476 msgid "Calling from private number" msgstr "Oproep van privénummer" #: approver/approver.cpp:479 msgid "Calling from unknown number" msgstr "Oproep van onbekend nummer" #: approver/approver.cpp:482 #, qt-format msgid "Calling from %1" msgstr "Oproep van %1" #: approver/approver.cpp:529 msgid "Hold + Answer" msgstr "In de wacht en beantwoorden" #: approver/approver.cpp:530 msgid "Accept" msgstr "Goedkeuren" #: approver/approver.cpp:543 msgid "End + Answer" msgstr "Beëindigen en beantwoorden" #: approver/approver.cpp:552 msgid "Decline" msgstr "Weigeren" #: approver/approver.cpp:560 msgid "Message & decline" msgstr "Bericht en weigeren" #: approver/main.cpp:46 msgid "Telephony Service Approver" msgstr "Telefoondienst-goedkeuring" #: indicator/authhandler.cpp:72 msgid "Authentication failed. Do you want to review your credentials?" msgstr "De authenticatie is mislukt - controleer je inloggegevens." #: indicator/authhandler.cpp:91 msgid "Yes" msgstr "Ja" #: indicator/authhandler.cpp:94 msgid "No" msgstr "Nee" #: indicator/displaynamesettings.cpp:35 #, qt-format msgid "SIM %1" msgstr "Simkaart %1" #: indicator/main.cpp:53 msgid "Telephony Service Indicator" msgstr "Telefoondienstindicator" #: indicator/messagingmenu.cpp:83 indicator/messagingmenu.cpp:87 msgid "Telephony Service" msgstr "Telefoondienst" #: indicator/messagingmenu.cpp:151 indicator/messagingmenu.cpp:293 #: indicator/messagingmenu.cpp:360 msgid "Send" msgstr "Versturen" #. TRANSLATORS : %1 is the group name and %2 is the recipient name #: indicator/messagingmenu.cpp:262 indicator/textchannelobserver.cpp:671 #: indicator/textchannelobserver.cpp:675 #, qt-format msgid "Message to %1 from %2" msgstr "Bericht van %2 aan %1" #. TRANSLATORS : %1 is the recipient name #: indicator/messagingmenu.cpp:265 indicator/messagingmenu.cpp:269 #, qt-format msgid "Message to the group from %1" msgstr "Groepsbericht afkomstig van %1" #: indicator/messagingmenu.cpp:345 msgid "Call back" msgstr "Terugbellen" #: indicator/messagingmenu.cpp:350 msgid "Missed your call — can you call me now?" msgstr "Ik heb uw oproep gemist — kunt u me nu bellen?" #: indicator/messagingmenu.cpp:351 msgid "Running late. On my way." msgstr "Ik ben laat, maar ik ben onderweg." #: indicator/messagingmenu.cpp:352 msgid "Busy at the moment. Will call you later." msgstr "Ik ben momenteel bezig - ik bel later terug." #: indicator/messagingmenu.cpp:353 msgid "I am 20 minutes late." msgstr "Ik ben 20 minuten later." #: indicator/messagingmenu.cpp:354 msgid "Still busy. Will call you later." msgstr "Ik ben nog bezig, maar bel later terug." #: indicator/messagingmenu.cpp:409 #, qt-format msgid "%1 missed call" msgid_plural "%1 missed calls" msgstr[0] "%1 gemiste oproep" msgstr[1] "%1 gemiste oproepen" #: indicator/messagingmenu.cpp:492 msgid "Voicemail messages" msgstr "Voicemailberichten" #: indicator/messagingmenu.cpp:495 #, qt-format msgid "%1 voicemail message" msgid_plural "%1 voicemail messages" msgstr[0] "%1 voicemailbericht" msgstr[1] "%1 voicemailberichten" #: indicator/messagingmenu.cpp:500 msgid "Voicemail" msgstr "Voicemail" #: indicator/metrics.cpp:42 #, qt-format msgid "%1 text messages sent today" msgstr "Je hebt vandaag %1 sms-berichten verstuurd" #: indicator/metrics.cpp:43 msgid "No text messages sent today" msgstr "Je hebt vandaag geen sms-berichten verstuurd" #: indicator/metrics.cpp:44 #, qt-format msgid "%1 text messages received today" msgstr "Je hebt vandaag %1 sms-berichten ontvangen" #: indicator/metrics.cpp:45 msgid "No text messages received today" msgstr "Je hebt vandaag geen sms-berichten ontvangen" #: indicator/metrics.cpp:46 #, qt-format msgid "%1 calls received today" msgstr "Je bent vandaag %1 keer gebeld" #: indicator/metrics.cpp:47 msgid "No calls received today" msgstr "Je bent vandaag niet gebeld" #: indicator/metrics.cpp:48 #, qt-format msgid "%1 calls made today" msgstr "Je hebt vandaag %1 keer gebeld" #: indicator/metrics.cpp:49 indicator/metrics.cpp:51 msgid "No calls made today" msgstr "Je hebt vandaag niet gebeld" #: indicator/metrics.cpp:50 #, qt-format msgid "Spent %1 minutes in calls today" msgstr "Je hebt vandaag %1 minuten getelefoneerd" #: indicator/textchannelobserver.cpp:225 msgid "Unlock your sim card and try again from the messaging application." msgstr "Ontgrendel je simkaart en probeer het opnieuw met de berichtenapp." #: indicator/textchannelobserver.cpp:227 msgid "Deactivate flight mode and try again from the messaging application." msgstr "" "Schakel de vliegtuigstand uit en probeer het opnieuw met de berichtenapp." #: indicator/textchannelobserver.cpp:230 msgid "Try again from the messaging application." msgstr "Probeer het opnieuw met de berichtenapp." #: indicator/textchannelobserver.cpp:236 msgid "The message could not be sent" msgstr "Het bericht kan niet worden verstuurd" #: indicator/textchannelobserver.cpp:249 indicator/textchannelobserver.cpp:713 msgid "View message" msgstr "Bericht bekijken" #: indicator/textchannelobserver.cpp:295 msgid "New Group" msgstr "Nieuwe groep" #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:302 #, qt-format msgid "You joined group %1 " msgstr "Je bent lid geworden van %1. " #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:306 #, qt-format msgid "You joined group %1" msgstr "Je bent lid geworden van %1" #: indicator/textchannelobserver.cpp:309 msgid "You joined a new group" msgstr "Je bent lid geworden van een groep" #: indicator/textchannelobserver.cpp:328 msgid "View Group" msgstr "Groep bekijken" #: indicator/textchannelobserver.cpp:367 indicator/ussdindicator.cpp:116 msgid "Ok" msgstr "Oké" #: indicator/textchannelobserver.cpp:373 msgid "Save" msgstr "Opslaan" #: indicator/textchannelobserver.cpp:468 msgid "Emergency Alert" msgstr "Noodbericht" #: indicator/textchannelobserver.cpp:471 msgid "Emergency Alert: Extreme" msgstr "Noodbericht: extreem" #: indicator/textchannelobserver.cpp:474 msgid "Emergency Alert: Severe" msgstr "Noodbericht: ernstig" #: indicator/textchannelobserver.cpp:477 msgid "Emergency Alert: Notice" msgstr "Noodbericht: mededeling" #: indicator/textchannelobserver.cpp:482 msgid "AMBER Alert" msgstr "AMBER Alert" #: indicator/textchannelobserver.cpp:485 msgid "Alert" msgstr "Waarschuwing" #: indicator/textchannelobserver.cpp:531 msgid "Show alert" msgstr "Waarschuwing tonen" #: indicator/textchannelobserver.cpp:604 #, qt-format msgid "Attachment: %1 image" msgid_plural "Attachments: %1 images" msgstr[0] "Bijlage: %1 afbeelding" msgstr[1] "Bijlage: %1 afbeeldingen" #: indicator/textchannelobserver.cpp:606 #, qt-format msgid "Attachment: %1 video" msgid_plural "Attachments: %1 videos" msgstr[0] "Bijlage: %1 video" msgstr[1] "Bijlage: %1 video's" #: indicator/textchannelobserver.cpp:608 #, qt-format msgid "Attachment: %1 contact" msgid_plural "Attachments: %1 contacts" msgstr[0] "Bijlage: %1 contactpersoon" msgstr[1] "Bijlage: %1 contactpersonen" #: indicator/textchannelobserver.cpp:610 #, qt-format msgid "Attachment: %1 audio clip" msgid_plural "Attachments: %1 audio clips" msgstr[0] "Bijlage: %1 audiobericht" msgstr[1] "Bijlagen: %1 audioberichten" #: indicator/textchannelobserver.cpp:612 #, qt-format msgid "Attachment: %1 file" msgid_plural "Attachments: %1 files" msgstr[0] "Bijlage: %1 bestand" msgstr[1] "Bijlage: %1 bestanden" #. TRANSLATORS : message displayed when any error occurred while receiving a MMS (case when cellular-data is off, or any downloading issue). Notify that there was a message, the user can find more about it in the messaging-app. #: indicator/textchannelobserver.cpp:615 msgid "New MMS message" msgstr "Nieuw mms-bericht" #. TRANSLATORS : %1 is the recipient name #: indicator/textchannelobserver.cpp:679 indicator/textchannelobserver.cpp:683 #, qt-format msgid "Message to group from %1" msgstr "Groepsbericht afkomstig van %1" #: indicator/textchannelobserver.cpp:749 #, qt-format msgid "Message from %1" msgstr "Bericht van %1" #: indicator/textchannelobserver.cpp:910 msgid "Please, select a SIM card:" msgstr "Kies een simkaart:" #: indicator/ussdindicator.cpp:119 msgid "Reply" msgstr "Beantwoorden" #: indicator/ussdindicator.cpp:142 msgid "Cancel" msgstr "Annuleren" #: libtelephonyservice/callnotification.cpp:53 msgid "Conf call on hold" msgstr "Vergadergesprek in de wacht" #: libtelephonyservice/callnotification.cpp:53 #, qt-format msgid "%1 call on hold" msgstr "%1 oproep in de wacht" #: libtelephonyservice/callnotification.cpp:56 msgid "Conf call ended" msgstr "Vergadergesprek beëindigd" #: libtelephonyservice/callnotification.cpp:56 #, qt-format msgid "%1 call ended" msgstr "%1 gesprek beëindigd" #: libtelephonyservice/callnotification.cpp:59 #, qt-format msgid "%1 call declined" msgstr "%1 oproep geweigerd" #: libtelephonyservice/contactwatcher.cpp:157 msgid "Private Number" msgstr "Privénummer" #: libtelephonyservice/contactwatcher.cpp:159 msgid "Unknown Number" msgstr "Onbekend nummer" #~ msgid "telephony-service-call" #~ msgstr "telephony-service-call" #~ msgid "telephony-service-message" #~ msgstr "telephony-service-message" #~ msgid "" #~ "Oops, there has been an error with the MMS system and this message could " #~ "not be retrieved. Please ensure Cellular Data is ON and MMS settings are " #~ "correct, then ask the sender to try again." #~ msgstr "" #~ "Dit bericht kan niet worden opgehaald omdat er een fout is opgetreden in " #~ "het mms-systeem. Zorg er voor dat mobiel internet is ingeschakeld en de " #~ "mms-instellingen juist zijn en vraag de afzender het bericht opnieuw te " #~ "versturen." telephony-service-0.5.3/po/nn.po000066400000000000000000000207371455543255600166040ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR Canonical Ltd. # This file is distributed under the same license as the telephony-service package. # FIRST AUTHOR , YEAR. # msgid "" msgstr "" "Project-Id-Version: telephony-service\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-12-16 17:03+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: Automatically generated\n" "Language-Team: none\n" "Language: nn\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" #: indicator/telephony-service-call.desktop.in:4 msgid "Phone Calls" msgstr "" #: indicator/telephony-service-sms.desktop.in:4 msgid "SMS" msgstr "" #: approver/approver.cpp:66 msgid "Unknown caller" msgstr "" #: approver/approver.cpp:94 msgid "I'm busy at the moment. I'll call later." msgstr "" #: approver/approver.cpp:95 msgid "I'm running late, on my way now." msgstr "" #: approver/approver.cpp:96 msgid "Please call me back later." msgstr "" #: approver/approver.cpp:457 #, qt-format msgid "On [%1]" msgstr "" #: approver/approver.cpp:461 indicator/messagingmenu.cpp:414 msgid "Private number" msgstr "" #: approver/approver.cpp:464 indicator/messagingmenu.cpp:244 #: indicator/messagingmenu.cpp:418 indicator/textchannelobserver.cpp:640 msgid "Unknown number" msgstr "" #: approver/approver.cpp:470 approver/approver.cpp:485 msgid "Caller number is not available" msgstr "" #: approver/approver.cpp:476 msgid "Calling from private number" msgstr "" #: approver/approver.cpp:479 msgid "Calling from unknown number" msgstr "" #: approver/approver.cpp:482 #, qt-format msgid "Calling from %1" msgstr "" #: approver/approver.cpp:529 msgid "Hold + Answer" msgstr "" #: approver/approver.cpp:530 msgid "Accept" msgstr "" #: approver/approver.cpp:543 msgid "End + Answer" msgstr "" #: approver/approver.cpp:552 msgid "Decline" msgstr "" #: approver/approver.cpp:560 msgid "Message & decline" msgstr "" #: approver/main.cpp:46 msgid "Telephony Service Approver" msgstr "" #: indicator/authhandler.cpp:72 msgid "Authentication failed. Do you want to review your credentials?" msgstr "" #: indicator/authhandler.cpp:91 msgid "Yes" msgstr "" #: indicator/authhandler.cpp:94 msgid "No" msgstr "" #: indicator/displaynamesettings.cpp:35 #, qt-format msgid "SIM %1" msgstr "" #: indicator/main.cpp:53 msgid "Telephony Service Indicator" msgstr "" #: indicator/messagingmenu.cpp:83 indicator/messagingmenu.cpp:87 msgid "Telephony Service" msgstr "" #: indicator/messagingmenu.cpp:151 indicator/messagingmenu.cpp:293 #: indicator/messagingmenu.cpp:360 msgid "Send" msgstr "" #. TRANSLATORS : %1 is the group name and %2 is the recipient name #: indicator/messagingmenu.cpp:262 indicator/textchannelobserver.cpp:671 #: indicator/textchannelobserver.cpp:675 #, qt-format msgid "Message to %1 from %2" msgstr "" #. TRANSLATORS : %1 is the recipient name #: indicator/messagingmenu.cpp:265 indicator/messagingmenu.cpp:269 #, qt-format msgid "Message to the group from %1" msgstr "" #: indicator/messagingmenu.cpp:345 msgid "Call back" msgstr "" #: indicator/messagingmenu.cpp:350 msgid "Missed your call — can you call me now?" msgstr "" #: indicator/messagingmenu.cpp:351 msgid "Running late. On my way." msgstr "" #: indicator/messagingmenu.cpp:352 msgid "Busy at the moment. Will call you later." msgstr "" #: indicator/messagingmenu.cpp:353 msgid "I am 20 minutes late." msgstr "" #: indicator/messagingmenu.cpp:354 msgid "Still busy. Will call you later." msgstr "" #: indicator/messagingmenu.cpp:409 #, qt-format msgid "%1 missed call" msgid_plural "%1 missed calls" msgstr[0] "" msgstr[1] "" #: indicator/messagingmenu.cpp:492 msgid "Voicemail messages" msgstr "" #: indicator/messagingmenu.cpp:495 #, qt-format msgid "%1 voicemail message" msgid_plural "%1 voicemail messages" msgstr[0] "" msgstr[1] "" #: indicator/messagingmenu.cpp:500 msgid "Voicemail" msgstr "" #: indicator/metrics.cpp:42 #, qt-format msgid "%1 text messages sent today" msgstr "" #: indicator/metrics.cpp:43 msgid "No text messages sent today" msgstr "" #: indicator/metrics.cpp:44 #, qt-format msgid "%1 text messages received today" msgstr "" #: indicator/metrics.cpp:45 msgid "No text messages received today" msgstr "" #: indicator/metrics.cpp:46 #, qt-format msgid "%1 calls received today" msgstr "" #: indicator/metrics.cpp:47 msgid "No calls received today" msgstr "" #: indicator/metrics.cpp:48 #, qt-format msgid "%1 calls made today" msgstr "" #: indicator/metrics.cpp:49 indicator/metrics.cpp:51 msgid "No calls made today" msgstr "" #: indicator/metrics.cpp:50 #, qt-format msgid "Spent %1 minutes in calls today" msgstr "" #: indicator/textchannelobserver.cpp:225 msgid "Unlock your sim card and try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:227 msgid "Deactivate flight mode and try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:230 msgid "Try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:236 msgid "The message could not be sent" msgstr "" #: indicator/textchannelobserver.cpp:249 indicator/textchannelobserver.cpp:713 msgid "View message" msgstr "" #: indicator/textchannelobserver.cpp:295 msgid "New Group" msgstr "" #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:302 #, qt-format msgid "You joined group %1 " msgstr "" #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:306 #, qt-format msgid "You joined group %1" msgstr "" #: indicator/textchannelobserver.cpp:309 msgid "You joined a new group" msgstr "" #: indicator/textchannelobserver.cpp:328 msgid "View Group" msgstr "" #: indicator/textchannelobserver.cpp:367 indicator/ussdindicator.cpp:116 msgid "Ok" msgstr "" #: indicator/textchannelobserver.cpp:373 msgid "Save" msgstr "" #: indicator/textchannelobserver.cpp:468 msgid "Emergency Alert" msgstr "" #: indicator/textchannelobserver.cpp:471 msgid "Emergency Alert: Extreme" msgstr "" #: indicator/textchannelobserver.cpp:474 msgid "Emergency Alert: Severe" msgstr "" #: indicator/textchannelobserver.cpp:477 msgid "Emergency Alert: Notice" msgstr "" #: indicator/textchannelobserver.cpp:482 msgid "AMBER Alert" msgstr "" #: indicator/textchannelobserver.cpp:485 msgid "Alert" msgstr "" #: indicator/textchannelobserver.cpp:531 msgid "Show alert" msgstr "" #: indicator/textchannelobserver.cpp:604 #, qt-format msgid "Attachment: %1 image" msgid_plural "Attachments: %1 images" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:606 #, qt-format msgid "Attachment: %1 video" msgid_plural "Attachments: %1 videos" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:608 #, qt-format msgid "Attachment: %1 contact" msgid_plural "Attachments: %1 contacts" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:610 #, qt-format msgid "Attachment: %1 audio clip" msgid_plural "Attachments: %1 audio clips" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:612 #, qt-format msgid "Attachment: %1 file" msgid_plural "Attachments: %1 files" msgstr[0] "" msgstr[1] "" #. TRANSLATORS : message displayed when any error occurred while receiving a MMS (case when cellular-data is off, or any downloading issue). Notify that there was a message, the user can find more about it in the messaging-app. #: indicator/textchannelobserver.cpp:615 msgid "New MMS message" msgstr "" #. TRANSLATORS : %1 is the recipient name #: indicator/textchannelobserver.cpp:679 indicator/textchannelobserver.cpp:683 #, qt-format msgid "Message to group from %1" msgstr "" #: indicator/textchannelobserver.cpp:749 #, qt-format msgid "Message from %1" msgstr "" #: indicator/textchannelobserver.cpp:910 msgid "Please, select a SIM card:" msgstr "" #: indicator/ussdindicator.cpp:119 msgid "Reply" msgstr "" #: indicator/ussdindicator.cpp:142 msgid "Cancel" msgstr "" #: libtelephonyservice/callnotification.cpp:53 msgid "Conf call on hold" msgstr "" #: libtelephonyservice/callnotification.cpp:53 #, qt-format msgid "%1 call on hold" msgstr "" #: libtelephonyservice/callnotification.cpp:56 msgid "Conf call ended" msgstr "" #: libtelephonyservice/callnotification.cpp:56 #, qt-format msgid "%1 call ended" msgstr "" #: libtelephonyservice/callnotification.cpp:59 #, qt-format msgid "%1 call declined" msgstr "" #: libtelephonyservice/contactwatcher.cpp:157 msgid "Private Number" msgstr "" #: libtelephonyservice/contactwatcher.cpp:159 msgid "Unknown Number" msgstr "" telephony-service-0.5.3/po/ny.po000066400000000000000000000211461455543255600166120ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-12-16 17:03+0100\n" "PO-Revision-Date: 2023-01-05 11:07+0000\n" "Last-Translator: Anonymous \n" "Language-Team: Nyanja \n" "Language: ny\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Generator: Weblate 4.15.1-dev\n" #: indicator/telephony-service-call.desktop.in:4 msgid "Phone Calls" msgstr "" #: indicator/telephony-service-sms.desktop.in:4 msgid "SMS" msgstr "" #: approver/approver.cpp:66 msgid "Unknown caller" msgstr "" #: approver/approver.cpp:94 msgid "I'm busy at the moment. I'll call later." msgstr "" #: approver/approver.cpp:95 msgid "I'm running late, on my way now." msgstr "" #: approver/approver.cpp:96 msgid "Please call me back later." msgstr "" #: approver/approver.cpp:457 #, qt-format msgid "On [%1]" msgstr "" #: approver/approver.cpp:461 indicator/messagingmenu.cpp:414 msgid "Private number" msgstr "" #: approver/approver.cpp:464 indicator/messagingmenu.cpp:244 #: indicator/messagingmenu.cpp:418 indicator/textchannelobserver.cpp:640 msgid "Unknown number" msgstr "" #: approver/approver.cpp:470 approver/approver.cpp:485 msgid "Caller number is not available" msgstr "" #: approver/approver.cpp:476 msgid "Calling from private number" msgstr "" #: approver/approver.cpp:479 msgid "Calling from unknown number" msgstr "" #: approver/approver.cpp:482 #, qt-format msgid "Calling from %1" msgstr "" #: approver/approver.cpp:529 msgid "Hold + Answer" msgstr "" #: approver/approver.cpp:530 msgid "Accept" msgstr "" #: approver/approver.cpp:543 msgid "End + Answer" msgstr "" #: approver/approver.cpp:552 msgid "Decline" msgstr "" #: approver/approver.cpp:560 msgid "Message & decline" msgstr "" #: approver/main.cpp:46 msgid "Telephony Service Approver" msgstr "" #: indicator/authhandler.cpp:72 msgid "Authentication failed. Do you want to review your credentials?" msgstr "" #: indicator/authhandler.cpp:91 msgid "Yes" msgstr "" #: indicator/authhandler.cpp:94 msgid "No" msgstr "" #: indicator/displaynamesettings.cpp:35 #, qt-format msgid "SIM %1" msgstr "" #: indicator/main.cpp:53 msgid "Telephony Service Indicator" msgstr "" #: indicator/messagingmenu.cpp:83 indicator/messagingmenu.cpp:87 msgid "Telephony Service" msgstr "" #: indicator/messagingmenu.cpp:151 indicator/messagingmenu.cpp:293 #: indicator/messagingmenu.cpp:360 msgid "Send" msgstr "" #. TRANSLATORS : %1 is the group name and %2 is the recipient name #: indicator/messagingmenu.cpp:262 indicator/textchannelobserver.cpp:671 #: indicator/textchannelobserver.cpp:675 #, qt-format msgid "Message to %1 from %2" msgstr "" #. TRANSLATORS : %1 is the recipient name #: indicator/messagingmenu.cpp:265 indicator/messagingmenu.cpp:269 #, qt-format msgid "Message to the group from %1" msgstr "" #: indicator/messagingmenu.cpp:345 msgid "Call back" msgstr "" #: indicator/messagingmenu.cpp:350 msgid "Missed your call — can you call me now?" msgstr "" #: indicator/messagingmenu.cpp:351 msgid "Running late. On my way." msgstr "" #: indicator/messagingmenu.cpp:352 msgid "Busy at the moment. Will call you later." msgstr "" #: indicator/messagingmenu.cpp:353 msgid "I am 20 minutes late." msgstr "" #: indicator/messagingmenu.cpp:354 msgid "Still busy. Will call you later." msgstr "" #: indicator/messagingmenu.cpp:409 #, qt-format msgid "%1 missed call" msgid_plural "%1 missed calls" msgstr[0] "" msgstr[1] "" #: indicator/messagingmenu.cpp:492 msgid "Voicemail messages" msgstr "" #: indicator/messagingmenu.cpp:495 #, qt-format msgid "%1 voicemail message" msgid_plural "%1 voicemail messages" msgstr[0] "" msgstr[1] "" #: indicator/messagingmenu.cpp:500 msgid "Voicemail" msgstr "" #: indicator/metrics.cpp:42 #, qt-format msgid "%1 text messages sent today" msgstr "" #: indicator/metrics.cpp:43 msgid "No text messages sent today" msgstr "" #: indicator/metrics.cpp:44 #, qt-format msgid "%1 text messages received today" msgstr "" #: indicator/metrics.cpp:45 msgid "No text messages received today" msgstr "" #: indicator/metrics.cpp:46 #, qt-format msgid "%1 calls received today" msgstr "" #: indicator/metrics.cpp:47 msgid "No calls received today" msgstr "" #: indicator/metrics.cpp:48 #, qt-format msgid "%1 calls made today" msgstr "" #: indicator/metrics.cpp:49 indicator/metrics.cpp:51 msgid "No calls made today" msgstr "" #: indicator/metrics.cpp:50 #, qt-format msgid "Spent %1 minutes in calls today" msgstr "" #: indicator/textchannelobserver.cpp:225 msgid "Unlock your sim card and try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:227 msgid "Deactivate flight mode and try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:230 msgid "Try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:236 msgid "The message could not be sent" msgstr "" #: indicator/textchannelobserver.cpp:249 indicator/textchannelobserver.cpp:713 msgid "View message" msgstr "" #: indicator/textchannelobserver.cpp:295 msgid "New Group" msgstr "" #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:302 #, qt-format msgid "You joined group %1 " msgstr "" #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:306 #, qt-format msgid "You joined group %1" msgstr "" #: indicator/textchannelobserver.cpp:309 msgid "You joined a new group" msgstr "" #: indicator/textchannelobserver.cpp:328 msgid "View Group" msgstr "" #: indicator/textchannelobserver.cpp:367 indicator/ussdindicator.cpp:116 msgid "Ok" msgstr "" #: indicator/textchannelobserver.cpp:373 msgid "Save" msgstr "" #: indicator/textchannelobserver.cpp:468 msgid "Emergency Alert" msgstr "" #: indicator/textchannelobserver.cpp:471 msgid "Emergency Alert: Extreme" msgstr "" #: indicator/textchannelobserver.cpp:474 msgid "Emergency Alert: Severe" msgstr "" #: indicator/textchannelobserver.cpp:477 msgid "Emergency Alert: Notice" msgstr "" #: indicator/textchannelobserver.cpp:482 msgid "AMBER Alert" msgstr "" #: indicator/textchannelobserver.cpp:485 msgid "Alert" msgstr "" #: indicator/textchannelobserver.cpp:531 msgid "Show alert" msgstr "" #: indicator/textchannelobserver.cpp:604 #, qt-format msgid "Attachment: %1 image" msgid_plural "Attachments: %1 images" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:606 #, qt-format msgid "Attachment: %1 video" msgid_plural "Attachments: %1 videos" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:608 #, qt-format msgid "Attachment: %1 contact" msgid_plural "Attachments: %1 contacts" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:610 #, qt-format msgid "Attachment: %1 audio clip" msgid_plural "Attachments: %1 audio clips" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:612 #, qt-format msgid "Attachment: %1 file" msgid_plural "Attachments: %1 files" msgstr[0] "" msgstr[1] "" #. TRANSLATORS : message displayed when any error occurred while receiving a MMS (case when cellular-data is off, or any downloading issue). Notify that there was a message, the user can find more about it in the messaging-app. #: indicator/textchannelobserver.cpp:615 msgid "New MMS message" msgstr "" #. TRANSLATORS : %1 is the recipient name #: indicator/textchannelobserver.cpp:679 indicator/textchannelobserver.cpp:683 #, qt-format msgid "Message to group from %1" msgstr "" #: indicator/textchannelobserver.cpp:749 #, qt-format msgid "Message from %1" msgstr "" #: indicator/textchannelobserver.cpp:910 msgid "Please, select a SIM card:" msgstr "" #: indicator/ussdindicator.cpp:119 msgid "Reply" msgstr "" #: indicator/ussdindicator.cpp:142 #, fuzzy msgid "Cancel" msgstr "Cancel" #: libtelephonyservice/callnotification.cpp:53 msgid "Conf call on hold" msgstr "" #: libtelephonyservice/callnotification.cpp:53 #, qt-format msgid "%1 call on hold" msgstr "" #: libtelephonyservice/callnotification.cpp:56 msgid "Conf call ended" msgstr "" #: libtelephonyservice/callnotification.cpp:56 #, qt-format msgid "%1 call ended" msgstr "" #: libtelephonyservice/callnotification.cpp:59 #, qt-format msgid "%1 call declined" msgstr "" #: libtelephonyservice/contactwatcher.cpp:157 msgid "Private Number" msgstr "" #: libtelephonyservice/contactwatcher.cpp:159 msgid "Unknown Number" msgstr "" telephony-service-0.5.3/po/oc.po000066400000000000000000000246711455543255600165730ustar00rootroot00000000000000# Occitan (post 1500) translation for telephony-service # Copyright (c) 2015 Rosetta Contributors and Canonical Ltd 2015 # This file is distributed under the same license as the telephony-service package. # FIRST AUTHOR , 2015. # msgid "" msgstr "" "Project-Id-Version: telephony-service\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-12-16 17:03+0100\n" "PO-Revision-Date: 2015-02-20 13:40+0000\n" "Last-Translator: FULL NAME \n" "Language-Team: Occitan (post 1500) \n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n > 1;\n" "X-Launchpad-Export-Date: 2017-01-04 06:03+0000\n" "X-Generator: Launchpad (build 18298)\n" #: indicator/telephony-service-call.desktop.in:4 msgid "Phone Calls" msgstr "Sonadas telefonicas" #: indicator/telephony-service-sms.desktop.in:4 msgid "SMS" msgstr "SMS" #: approver/approver.cpp:66 msgid "Unknown caller" msgstr "Sonaire desconegut" #: approver/approver.cpp:94 msgid "I'm busy at the moment. I'll call later." msgstr "" #: approver/approver.cpp:95 msgid "I'm running late, on my way now." msgstr "" #: approver/approver.cpp:96 msgid "Please call me back later." msgstr "" #: approver/approver.cpp:457 #, qt-format msgid "On [%1]" msgstr "" #: approver/approver.cpp:461 indicator/messagingmenu.cpp:414 msgid "Private number" msgstr "Numèro privat" #: approver/approver.cpp:464 indicator/messagingmenu.cpp:244 #: indicator/messagingmenu.cpp:418 indicator/textchannelobserver.cpp:640 msgid "Unknown number" msgstr "Numèro desconegut" #: approver/approver.cpp:470 approver/approver.cpp:485 msgid "Caller number is not available" msgstr "Lo numèro de sonada es pas disponible" #: approver/approver.cpp:476 msgid "Calling from private number" msgstr "Sonada dempuèi un numèro privat" #: approver/approver.cpp:479 msgid "Calling from unknown number" msgstr "Sonada dempuèi un numèro desconegut" #: approver/approver.cpp:482 #, qt-format msgid "Calling from %1" msgstr "Sonada dempuèi %1" #: approver/approver.cpp:529 msgid "Hold + Answer" msgstr "Demorar en linha + Respondre" #: approver/approver.cpp:530 msgid "Accept" msgstr "Acceptar" #: approver/approver.cpp:543 msgid "End + Answer" msgstr "" #: approver/approver.cpp:552 msgid "Decline" msgstr "Refusar" #: approver/approver.cpp:560 msgid "Message & decline" msgstr "" #: approver/main.cpp:46 msgid "Telephony Service Approver" msgstr "Aprovador de servici telefonic" #: indicator/authhandler.cpp:72 msgid "Authentication failed. Do you want to review your credentials?" msgstr "" #: indicator/authhandler.cpp:91 msgid "Yes" msgstr "Òc" #: indicator/authhandler.cpp:94 msgid "No" msgstr "Non" #: indicator/displaynamesettings.cpp:35 #, qt-format msgid "SIM %1" msgstr "SIM %1" #: indicator/main.cpp:53 msgid "Telephony Service Indicator" msgstr "Indicador de servici telefonic" #: indicator/messagingmenu.cpp:83 indicator/messagingmenu.cpp:87 msgid "Telephony Service" msgstr "Servici telefonic" #: indicator/messagingmenu.cpp:151 indicator/messagingmenu.cpp:293 #: indicator/messagingmenu.cpp:360 msgid "Send" msgstr "Mandar" #. TRANSLATORS : %1 is the group name and %2 is the recipient name #: indicator/messagingmenu.cpp:262 indicator/textchannelobserver.cpp:671 #: indicator/textchannelobserver.cpp:675 #, qt-format msgid "Message to %1 from %2" msgstr "" #. TRANSLATORS : %1 is the recipient name #: indicator/messagingmenu.cpp:265 indicator/messagingmenu.cpp:269 #, fuzzy, qt-format #| msgid "Message from %1" msgid "Message to the group from %1" msgstr "Messatge de %1" #: indicator/messagingmenu.cpp:345 msgid "Call back" msgstr "Rapelar" #: indicator/messagingmenu.cpp:350 msgid "Missed your call — can you call me now?" msgstr "" #: indicator/messagingmenu.cpp:351 #, fuzzy #| msgid "I'm running late. I'm on my way." msgid "Running late. On my way." msgstr "Soi tardièr. Soi en camin." #: indicator/messagingmenu.cpp:352 #, fuzzy #| msgid "Sorry, I'm still busy. I'll call you later." msgid "Busy at the moment. Will call you later." msgstr "O planhi, soi encara ocupat. Vos rapelarai pus tard." #: indicator/messagingmenu.cpp:353 #, fuzzy #| msgid "I'll be 20 minutes late." msgid "I am 20 minutes late." msgstr "Serai tardièr de 20 minutas." #: indicator/messagingmenu.cpp:354 #, fuzzy #| msgid "Sorry, I'm still busy. I'll call you later." msgid "Still busy. Will call you later." msgstr "O planhi, soi encara ocupat. Vos rapelarai pus tard." #: indicator/messagingmenu.cpp:409 #, qt-format msgid "%1 missed call" msgid_plural "%1 missed calls" msgstr[0] "%1 sonada mancada" msgstr[1] "%1 sonadas mancadas" #: indicator/messagingmenu.cpp:492 msgid "Voicemail messages" msgstr "" #: indicator/messagingmenu.cpp:495 #, qt-format msgid "%1 voicemail message" msgid_plural "%1 voicemail messages" msgstr[0] "%1 messatge vocal" msgstr[1] "%1 messatges vocals" #: indicator/messagingmenu.cpp:500 msgid "Voicemail" msgstr "Messatjariá Vocala" #: indicator/metrics.cpp:42 #, qt-format msgid "%1 text messages sent today" msgstr "%1 SMS mandats uèi" #: indicator/metrics.cpp:43 msgid "No text messages sent today" msgstr "Pas de SMS recebuts uèi" #: indicator/metrics.cpp:44 #, qt-format msgid "%1 text messages received today" msgstr "%1 SMS recebuts uèi" #: indicator/metrics.cpp:45 msgid "No text messages received today" msgstr "Pas de SMS recebuts uèi" #: indicator/metrics.cpp:46 #, qt-format msgid "%1 calls received today" msgstr "%1 sonadas recebudas uèi" #: indicator/metrics.cpp:47 msgid "No calls received today" msgstr "Pas cap de sonada emesa uèi" #: indicator/metrics.cpp:48 #, qt-format msgid "%1 calls made today" msgstr "%1 sonadas emesas uèi" #: indicator/metrics.cpp:49 indicator/metrics.cpp:51 msgid "No calls made today" msgstr "Pas cap de sonada emesa uèi" #: indicator/metrics.cpp:50 #, qt-format msgid "Spent %1 minutes in calls today" msgstr "%1 minutas passadas a sonar uèi" #: indicator/textchannelobserver.cpp:225 msgid "Unlock your sim card and try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:227 msgid "Deactivate flight mode and try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:230 msgid "Try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:236 msgid "The message could not be sent" msgstr "Lo messatge pòt pas èsser mandat." #: indicator/textchannelobserver.cpp:249 indicator/textchannelobserver.cpp:713 msgid "View message" msgstr "Veire lo messatge" #: indicator/textchannelobserver.cpp:295 msgid "New Group" msgstr "" #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:302 #, qt-format msgid "You joined group %1 " msgstr "" #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:306 #, qt-format msgid "You joined group %1" msgstr "" #: indicator/textchannelobserver.cpp:309 msgid "You joined a new group" msgstr "" #: indicator/textchannelobserver.cpp:328 msgid "View Group" msgstr "" #: indicator/textchannelobserver.cpp:367 indicator/ussdindicator.cpp:116 msgid "Ok" msgstr "D'acòrdi" #: indicator/textchannelobserver.cpp:373 msgid "Save" msgstr "Enregistrar" #: indicator/textchannelobserver.cpp:468 msgid "Emergency Alert" msgstr "" #: indicator/textchannelobserver.cpp:471 msgid "Emergency Alert: Extreme" msgstr "" #: indicator/textchannelobserver.cpp:474 msgid "Emergency Alert: Severe" msgstr "" #: indicator/textchannelobserver.cpp:477 msgid "Emergency Alert: Notice" msgstr "" #: indicator/textchannelobserver.cpp:482 msgid "AMBER Alert" msgstr "" #: indicator/textchannelobserver.cpp:485 msgid "Alert" msgstr "" #: indicator/textchannelobserver.cpp:531 msgid "Show alert" msgstr "" #: indicator/textchannelobserver.cpp:604 #, qt-format msgid "Attachment: %1 image" msgid_plural "Attachments: %1 images" msgstr[0] "Pèça junta : %1 imatge" msgstr[1] "Pèças juntas : %1 imatges" #: indicator/textchannelobserver.cpp:606 #, qt-format msgid "Attachment: %1 video" msgid_plural "Attachments: %1 videos" msgstr[0] "Pèça junta : %1 vidèo" msgstr[1] "Pèças juntas : %1 vidèos" #: indicator/textchannelobserver.cpp:608 #, qt-format msgid "Attachment: %1 contact" msgid_plural "Attachments: %1 contacts" msgstr[0] "Pèça junta : %1 contacte" msgstr[1] "Pèças juntas : %1 contactes" #: indicator/textchannelobserver.cpp:610 #, qt-format msgid "Attachment: %1 audio clip" msgid_plural "Attachments: %1 audio clips" msgstr[0] "Pèça junta : %1 clip àudio" msgstr[1] "Pèças juntas : %1 clips àudio" #: indicator/textchannelobserver.cpp:612 #, qt-format msgid "Attachment: %1 file" msgid_plural "Attachments: %1 files" msgstr[0] "Pèça junta : %1 fichièr" msgstr[1] "Pèças juntas : %1 fichièrs" #. TRANSLATORS : message displayed when any error occurred while receiving a MMS (case when cellular-data is off, or any downloading issue). Notify that there was a message, the user can find more about it in the messaging-app. #: indicator/textchannelobserver.cpp:615 #, fuzzy #| msgid "View message" msgid "New MMS message" msgstr "Veire lo messatge" #. TRANSLATORS : %1 is the recipient name #: indicator/textchannelobserver.cpp:679 indicator/textchannelobserver.cpp:683 #, qt-format msgid "Message to group from %1" msgstr "" #: indicator/textchannelobserver.cpp:749 #, qt-format msgid "Message from %1" msgstr "Messatge de %1" #: indicator/textchannelobserver.cpp:910 msgid "Please, select a SIM card:" msgstr "Causissètz una carta SIM :" #: indicator/ussdindicator.cpp:119 msgid "Reply" msgstr "Respondre" #: indicator/ussdindicator.cpp:142 msgid "Cancel" msgstr "Anullar" #: libtelephonyservice/callnotification.cpp:53 msgid "Conf call on hold" msgstr "" #: libtelephonyservice/callnotification.cpp:53 #, qt-format msgid "%1 call on hold" msgstr "" #: libtelephonyservice/callnotification.cpp:56 msgid "Conf call ended" msgstr "" #: libtelephonyservice/callnotification.cpp:56 #, qt-format msgid "%1 call ended" msgstr "" #: libtelephonyservice/callnotification.cpp:59 #, qt-format msgid "%1 call declined" msgstr "" #: libtelephonyservice/contactwatcher.cpp:157 msgid "Private Number" msgstr "Numèro privat" #: libtelephonyservice/contactwatcher.cpp:159 msgid "Unknown Number" msgstr "Numèro desconegut" #, fuzzy #~| msgid "Telephony Service" #~ msgid "telephony-service-call" #~ msgstr "Servici telefonic" #, fuzzy #~| msgid "Telephony Service" #~ msgid "telephony-service-message" #~ msgstr "Servici telefonic" telephony-service-0.5.3/po/om.po000066400000000000000000000211451455543255600165760ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-12-16 17:03+0100\n" "PO-Revision-Date: 2023-01-05 11:07+0000\n" "Last-Translator: Anonymous \n" "Language-Team: Oromo \n" "Language: om\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Generator: Weblate 4.15.1-dev\n" #: indicator/telephony-service-call.desktop.in:4 msgid "Phone Calls" msgstr "" #: indicator/telephony-service-sms.desktop.in:4 msgid "SMS" msgstr "" #: approver/approver.cpp:66 msgid "Unknown caller" msgstr "" #: approver/approver.cpp:94 msgid "I'm busy at the moment. I'll call later." msgstr "" #: approver/approver.cpp:95 msgid "I'm running late, on my way now." msgstr "" #: approver/approver.cpp:96 msgid "Please call me back later." msgstr "" #: approver/approver.cpp:457 #, qt-format msgid "On [%1]" msgstr "" #: approver/approver.cpp:461 indicator/messagingmenu.cpp:414 msgid "Private number" msgstr "" #: approver/approver.cpp:464 indicator/messagingmenu.cpp:244 #: indicator/messagingmenu.cpp:418 indicator/textchannelobserver.cpp:640 msgid "Unknown number" msgstr "" #: approver/approver.cpp:470 approver/approver.cpp:485 msgid "Caller number is not available" msgstr "" #: approver/approver.cpp:476 msgid "Calling from private number" msgstr "" #: approver/approver.cpp:479 msgid "Calling from unknown number" msgstr "" #: approver/approver.cpp:482 #, qt-format msgid "Calling from %1" msgstr "" #: approver/approver.cpp:529 msgid "Hold + Answer" msgstr "" #: approver/approver.cpp:530 msgid "Accept" msgstr "" #: approver/approver.cpp:543 msgid "End + Answer" msgstr "" #: approver/approver.cpp:552 msgid "Decline" msgstr "" #: approver/approver.cpp:560 msgid "Message & decline" msgstr "" #: approver/main.cpp:46 msgid "Telephony Service Approver" msgstr "" #: indicator/authhandler.cpp:72 msgid "Authentication failed. Do you want to review your credentials?" msgstr "" #: indicator/authhandler.cpp:91 msgid "Yes" msgstr "" #: indicator/authhandler.cpp:94 msgid "No" msgstr "" #: indicator/displaynamesettings.cpp:35 #, qt-format msgid "SIM %1" msgstr "" #: indicator/main.cpp:53 msgid "Telephony Service Indicator" msgstr "" #: indicator/messagingmenu.cpp:83 indicator/messagingmenu.cpp:87 msgid "Telephony Service" msgstr "" #: indicator/messagingmenu.cpp:151 indicator/messagingmenu.cpp:293 #: indicator/messagingmenu.cpp:360 msgid "Send" msgstr "" #. TRANSLATORS : %1 is the group name and %2 is the recipient name #: indicator/messagingmenu.cpp:262 indicator/textchannelobserver.cpp:671 #: indicator/textchannelobserver.cpp:675 #, qt-format msgid "Message to %1 from %2" msgstr "" #. TRANSLATORS : %1 is the recipient name #: indicator/messagingmenu.cpp:265 indicator/messagingmenu.cpp:269 #, qt-format msgid "Message to the group from %1" msgstr "" #: indicator/messagingmenu.cpp:345 msgid "Call back" msgstr "" #: indicator/messagingmenu.cpp:350 msgid "Missed your call — can you call me now?" msgstr "" #: indicator/messagingmenu.cpp:351 msgid "Running late. On my way." msgstr "" #: indicator/messagingmenu.cpp:352 msgid "Busy at the moment. Will call you later." msgstr "" #: indicator/messagingmenu.cpp:353 msgid "I am 20 minutes late." msgstr "" #: indicator/messagingmenu.cpp:354 msgid "Still busy. Will call you later." msgstr "" #: indicator/messagingmenu.cpp:409 #, qt-format msgid "%1 missed call" msgid_plural "%1 missed calls" msgstr[0] "" msgstr[1] "" #: indicator/messagingmenu.cpp:492 msgid "Voicemail messages" msgstr "" #: indicator/messagingmenu.cpp:495 #, qt-format msgid "%1 voicemail message" msgid_plural "%1 voicemail messages" msgstr[0] "" msgstr[1] "" #: indicator/messagingmenu.cpp:500 msgid "Voicemail" msgstr "" #: indicator/metrics.cpp:42 #, qt-format msgid "%1 text messages sent today" msgstr "" #: indicator/metrics.cpp:43 msgid "No text messages sent today" msgstr "" #: indicator/metrics.cpp:44 #, qt-format msgid "%1 text messages received today" msgstr "" #: indicator/metrics.cpp:45 msgid "No text messages received today" msgstr "" #: indicator/metrics.cpp:46 #, qt-format msgid "%1 calls received today" msgstr "" #: indicator/metrics.cpp:47 msgid "No calls received today" msgstr "" #: indicator/metrics.cpp:48 #, qt-format msgid "%1 calls made today" msgstr "" #: indicator/metrics.cpp:49 indicator/metrics.cpp:51 msgid "No calls made today" msgstr "" #: indicator/metrics.cpp:50 #, qt-format msgid "Spent %1 minutes in calls today" msgstr "" #: indicator/textchannelobserver.cpp:225 msgid "Unlock your sim card and try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:227 msgid "Deactivate flight mode and try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:230 msgid "Try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:236 msgid "The message could not be sent" msgstr "" #: indicator/textchannelobserver.cpp:249 indicator/textchannelobserver.cpp:713 msgid "View message" msgstr "" #: indicator/textchannelobserver.cpp:295 msgid "New Group" msgstr "" #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:302 #, qt-format msgid "You joined group %1 " msgstr "" #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:306 #, qt-format msgid "You joined group %1" msgstr "" #: indicator/textchannelobserver.cpp:309 msgid "You joined a new group" msgstr "" #: indicator/textchannelobserver.cpp:328 msgid "View Group" msgstr "" #: indicator/textchannelobserver.cpp:367 indicator/ussdindicator.cpp:116 msgid "Ok" msgstr "" #: indicator/textchannelobserver.cpp:373 msgid "Save" msgstr "" #: indicator/textchannelobserver.cpp:468 msgid "Emergency Alert" msgstr "" #: indicator/textchannelobserver.cpp:471 msgid "Emergency Alert: Extreme" msgstr "" #: indicator/textchannelobserver.cpp:474 msgid "Emergency Alert: Severe" msgstr "" #: indicator/textchannelobserver.cpp:477 msgid "Emergency Alert: Notice" msgstr "" #: indicator/textchannelobserver.cpp:482 msgid "AMBER Alert" msgstr "" #: indicator/textchannelobserver.cpp:485 msgid "Alert" msgstr "" #: indicator/textchannelobserver.cpp:531 msgid "Show alert" msgstr "" #: indicator/textchannelobserver.cpp:604 #, qt-format msgid "Attachment: %1 image" msgid_plural "Attachments: %1 images" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:606 #, qt-format msgid "Attachment: %1 video" msgid_plural "Attachments: %1 videos" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:608 #, qt-format msgid "Attachment: %1 contact" msgid_plural "Attachments: %1 contacts" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:610 #, qt-format msgid "Attachment: %1 audio clip" msgid_plural "Attachments: %1 audio clips" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:612 #, qt-format msgid "Attachment: %1 file" msgid_plural "Attachments: %1 files" msgstr[0] "" msgstr[1] "" #. TRANSLATORS : message displayed when any error occurred while receiving a MMS (case when cellular-data is off, or any downloading issue). Notify that there was a message, the user can find more about it in the messaging-app. #: indicator/textchannelobserver.cpp:615 msgid "New MMS message" msgstr "" #. TRANSLATORS : %1 is the recipient name #: indicator/textchannelobserver.cpp:679 indicator/textchannelobserver.cpp:683 #, qt-format msgid "Message to group from %1" msgstr "" #: indicator/textchannelobserver.cpp:749 #, qt-format msgid "Message from %1" msgstr "" #: indicator/textchannelobserver.cpp:910 msgid "Please, select a SIM card:" msgstr "" #: indicator/ussdindicator.cpp:119 msgid "Reply" msgstr "" #: indicator/ussdindicator.cpp:142 #, fuzzy msgid "Cancel" msgstr "Cancel" #: libtelephonyservice/callnotification.cpp:53 msgid "Conf call on hold" msgstr "" #: libtelephonyservice/callnotification.cpp:53 #, qt-format msgid "%1 call on hold" msgstr "" #: libtelephonyservice/callnotification.cpp:56 msgid "Conf call ended" msgstr "" #: libtelephonyservice/callnotification.cpp:56 #, qt-format msgid "%1 call ended" msgstr "" #: libtelephonyservice/callnotification.cpp:59 #, qt-format msgid "%1 call declined" msgstr "" #: libtelephonyservice/contactwatcher.cpp:157 msgid "Private Number" msgstr "" #: libtelephonyservice/contactwatcher.cpp:159 msgid "Unknown Number" msgstr "" telephony-service-0.5.3/po/or.po000066400000000000000000000207371455543255600166110ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR Canonical Ltd. # This file is distributed under the same license as the telephony-service package. # FIRST AUTHOR , YEAR. # msgid "" msgstr "" "Project-Id-Version: telephony-service\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-12-16 17:03+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: Automatically generated\n" "Language-Team: none\n" "Language: or\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" #: indicator/telephony-service-call.desktop.in:4 msgid "Phone Calls" msgstr "" #: indicator/telephony-service-sms.desktop.in:4 msgid "SMS" msgstr "" #: approver/approver.cpp:66 msgid "Unknown caller" msgstr "" #: approver/approver.cpp:94 msgid "I'm busy at the moment. I'll call later." msgstr "" #: approver/approver.cpp:95 msgid "I'm running late, on my way now." msgstr "" #: approver/approver.cpp:96 msgid "Please call me back later." msgstr "" #: approver/approver.cpp:457 #, qt-format msgid "On [%1]" msgstr "" #: approver/approver.cpp:461 indicator/messagingmenu.cpp:414 msgid "Private number" msgstr "" #: approver/approver.cpp:464 indicator/messagingmenu.cpp:244 #: indicator/messagingmenu.cpp:418 indicator/textchannelobserver.cpp:640 msgid "Unknown number" msgstr "" #: approver/approver.cpp:470 approver/approver.cpp:485 msgid "Caller number is not available" msgstr "" #: approver/approver.cpp:476 msgid "Calling from private number" msgstr "" #: approver/approver.cpp:479 msgid "Calling from unknown number" msgstr "" #: approver/approver.cpp:482 #, qt-format msgid "Calling from %1" msgstr "" #: approver/approver.cpp:529 msgid "Hold + Answer" msgstr "" #: approver/approver.cpp:530 msgid "Accept" msgstr "" #: approver/approver.cpp:543 msgid "End + Answer" msgstr "" #: approver/approver.cpp:552 msgid "Decline" msgstr "" #: approver/approver.cpp:560 msgid "Message & decline" msgstr "" #: approver/main.cpp:46 msgid "Telephony Service Approver" msgstr "" #: indicator/authhandler.cpp:72 msgid "Authentication failed. Do you want to review your credentials?" msgstr "" #: indicator/authhandler.cpp:91 msgid "Yes" msgstr "" #: indicator/authhandler.cpp:94 msgid "No" msgstr "" #: indicator/displaynamesettings.cpp:35 #, qt-format msgid "SIM %1" msgstr "" #: indicator/main.cpp:53 msgid "Telephony Service Indicator" msgstr "" #: indicator/messagingmenu.cpp:83 indicator/messagingmenu.cpp:87 msgid "Telephony Service" msgstr "" #: indicator/messagingmenu.cpp:151 indicator/messagingmenu.cpp:293 #: indicator/messagingmenu.cpp:360 msgid "Send" msgstr "" #. TRANSLATORS : %1 is the group name and %2 is the recipient name #: indicator/messagingmenu.cpp:262 indicator/textchannelobserver.cpp:671 #: indicator/textchannelobserver.cpp:675 #, qt-format msgid "Message to %1 from %2" msgstr "" #. TRANSLATORS : %1 is the recipient name #: indicator/messagingmenu.cpp:265 indicator/messagingmenu.cpp:269 #, qt-format msgid "Message to the group from %1" msgstr "" #: indicator/messagingmenu.cpp:345 msgid "Call back" msgstr "" #: indicator/messagingmenu.cpp:350 msgid "Missed your call — can you call me now?" msgstr "" #: indicator/messagingmenu.cpp:351 msgid "Running late. On my way." msgstr "" #: indicator/messagingmenu.cpp:352 msgid "Busy at the moment. Will call you later." msgstr "" #: indicator/messagingmenu.cpp:353 msgid "I am 20 minutes late." msgstr "" #: indicator/messagingmenu.cpp:354 msgid "Still busy. Will call you later." msgstr "" #: indicator/messagingmenu.cpp:409 #, qt-format msgid "%1 missed call" msgid_plural "%1 missed calls" msgstr[0] "" msgstr[1] "" #: indicator/messagingmenu.cpp:492 msgid "Voicemail messages" msgstr "" #: indicator/messagingmenu.cpp:495 #, qt-format msgid "%1 voicemail message" msgid_plural "%1 voicemail messages" msgstr[0] "" msgstr[1] "" #: indicator/messagingmenu.cpp:500 msgid "Voicemail" msgstr "" #: indicator/metrics.cpp:42 #, qt-format msgid "%1 text messages sent today" msgstr "" #: indicator/metrics.cpp:43 msgid "No text messages sent today" msgstr "" #: indicator/metrics.cpp:44 #, qt-format msgid "%1 text messages received today" msgstr "" #: indicator/metrics.cpp:45 msgid "No text messages received today" msgstr "" #: indicator/metrics.cpp:46 #, qt-format msgid "%1 calls received today" msgstr "" #: indicator/metrics.cpp:47 msgid "No calls received today" msgstr "" #: indicator/metrics.cpp:48 #, qt-format msgid "%1 calls made today" msgstr "" #: indicator/metrics.cpp:49 indicator/metrics.cpp:51 msgid "No calls made today" msgstr "" #: indicator/metrics.cpp:50 #, qt-format msgid "Spent %1 minutes in calls today" msgstr "" #: indicator/textchannelobserver.cpp:225 msgid "Unlock your sim card and try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:227 msgid "Deactivate flight mode and try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:230 msgid "Try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:236 msgid "The message could not be sent" msgstr "" #: indicator/textchannelobserver.cpp:249 indicator/textchannelobserver.cpp:713 msgid "View message" msgstr "" #: indicator/textchannelobserver.cpp:295 msgid "New Group" msgstr "" #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:302 #, qt-format msgid "You joined group %1 " msgstr "" #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:306 #, qt-format msgid "You joined group %1" msgstr "" #: indicator/textchannelobserver.cpp:309 msgid "You joined a new group" msgstr "" #: indicator/textchannelobserver.cpp:328 msgid "View Group" msgstr "" #: indicator/textchannelobserver.cpp:367 indicator/ussdindicator.cpp:116 msgid "Ok" msgstr "" #: indicator/textchannelobserver.cpp:373 msgid "Save" msgstr "" #: indicator/textchannelobserver.cpp:468 msgid "Emergency Alert" msgstr "" #: indicator/textchannelobserver.cpp:471 msgid "Emergency Alert: Extreme" msgstr "" #: indicator/textchannelobserver.cpp:474 msgid "Emergency Alert: Severe" msgstr "" #: indicator/textchannelobserver.cpp:477 msgid "Emergency Alert: Notice" msgstr "" #: indicator/textchannelobserver.cpp:482 msgid "AMBER Alert" msgstr "" #: indicator/textchannelobserver.cpp:485 msgid "Alert" msgstr "" #: indicator/textchannelobserver.cpp:531 msgid "Show alert" msgstr "" #: indicator/textchannelobserver.cpp:604 #, qt-format msgid "Attachment: %1 image" msgid_plural "Attachments: %1 images" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:606 #, qt-format msgid "Attachment: %1 video" msgid_plural "Attachments: %1 videos" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:608 #, qt-format msgid "Attachment: %1 contact" msgid_plural "Attachments: %1 contacts" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:610 #, qt-format msgid "Attachment: %1 audio clip" msgid_plural "Attachments: %1 audio clips" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:612 #, qt-format msgid "Attachment: %1 file" msgid_plural "Attachments: %1 files" msgstr[0] "" msgstr[1] "" #. TRANSLATORS : message displayed when any error occurred while receiving a MMS (case when cellular-data is off, or any downloading issue). Notify that there was a message, the user can find more about it in the messaging-app. #: indicator/textchannelobserver.cpp:615 msgid "New MMS message" msgstr "" #. TRANSLATORS : %1 is the recipient name #: indicator/textchannelobserver.cpp:679 indicator/textchannelobserver.cpp:683 #, qt-format msgid "Message to group from %1" msgstr "" #: indicator/textchannelobserver.cpp:749 #, qt-format msgid "Message from %1" msgstr "" #: indicator/textchannelobserver.cpp:910 msgid "Please, select a SIM card:" msgstr "" #: indicator/ussdindicator.cpp:119 msgid "Reply" msgstr "" #: indicator/ussdindicator.cpp:142 msgid "Cancel" msgstr "" #: libtelephonyservice/callnotification.cpp:53 msgid "Conf call on hold" msgstr "" #: libtelephonyservice/callnotification.cpp:53 #, qt-format msgid "%1 call on hold" msgstr "" #: libtelephonyservice/callnotification.cpp:56 msgid "Conf call ended" msgstr "" #: libtelephonyservice/callnotification.cpp:56 #, qt-format msgid "%1 call ended" msgstr "" #: libtelephonyservice/callnotification.cpp:59 #, qt-format msgid "%1 call declined" msgstr "" #: libtelephonyservice/contactwatcher.cpp:157 msgid "Private Number" msgstr "" #: libtelephonyservice/contactwatcher.cpp:159 msgid "Unknown Number" msgstr "" telephony-service-0.5.3/po/os.po000066400000000000000000000207371455543255600166120ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR Canonical Ltd. # This file is distributed under the same license as the telephony-service package. # FIRST AUTHOR , YEAR. # msgid "" msgstr "" "Project-Id-Version: telephony-service\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-12-16 17:03+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: Automatically generated\n" "Language-Team: none\n" "Language: os\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" #: indicator/telephony-service-call.desktop.in:4 msgid "Phone Calls" msgstr "" #: indicator/telephony-service-sms.desktop.in:4 msgid "SMS" msgstr "" #: approver/approver.cpp:66 msgid "Unknown caller" msgstr "" #: approver/approver.cpp:94 msgid "I'm busy at the moment. I'll call later." msgstr "" #: approver/approver.cpp:95 msgid "I'm running late, on my way now." msgstr "" #: approver/approver.cpp:96 msgid "Please call me back later." msgstr "" #: approver/approver.cpp:457 #, qt-format msgid "On [%1]" msgstr "" #: approver/approver.cpp:461 indicator/messagingmenu.cpp:414 msgid "Private number" msgstr "" #: approver/approver.cpp:464 indicator/messagingmenu.cpp:244 #: indicator/messagingmenu.cpp:418 indicator/textchannelobserver.cpp:640 msgid "Unknown number" msgstr "" #: approver/approver.cpp:470 approver/approver.cpp:485 msgid "Caller number is not available" msgstr "" #: approver/approver.cpp:476 msgid "Calling from private number" msgstr "" #: approver/approver.cpp:479 msgid "Calling from unknown number" msgstr "" #: approver/approver.cpp:482 #, qt-format msgid "Calling from %1" msgstr "" #: approver/approver.cpp:529 msgid "Hold + Answer" msgstr "" #: approver/approver.cpp:530 msgid "Accept" msgstr "" #: approver/approver.cpp:543 msgid "End + Answer" msgstr "" #: approver/approver.cpp:552 msgid "Decline" msgstr "" #: approver/approver.cpp:560 msgid "Message & decline" msgstr "" #: approver/main.cpp:46 msgid "Telephony Service Approver" msgstr "" #: indicator/authhandler.cpp:72 msgid "Authentication failed. Do you want to review your credentials?" msgstr "" #: indicator/authhandler.cpp:91 msgid "Yes" msgstr "" #: indicator/authhandler.cpp:94 msgid "No" msgstr "" #: indicator/displaynamesettings.cpp:35 #, qt-format msgid "SIM %1" msgstr "" #: indicator/main.cpp:53 msgid "Telephony Service Indicator" msgstr "" #: indicator/messagingmenu.cpp:83 indicator/messagingmenu.cpp:87 msgid "Telephony Service" msgstr "" #: indicator/messagingmenu.cpp:151 indicator/messagingmenu.cpp:293 #: indicator/messagingmenu.cpp:360 msgid "Send" msgstr "" #. TRANSLATORS : %1 is the group name and %2 is the recipient name #: indicator/messagingmenu.cpp:262 indicator/textchannelobserver.cpp:671 #: indicator/textchannelobserver.cpp:675 #, qt-format msgid "Message to %1 from %2" msgstr "" #. TRANSLATORS : %1 is the recipient name #: indicator/messagingmenu.cpp:265 indicator/messagingmenu.cpp:269 #, qt-format msgid "Message to the group from %1" msgstr "" #: indicator/messagingmenu.cpp:345 msgid "Call back" msgstr "" #: indicator/messagingmenu.cpp:350 msgid "Missed your call — can you call me now?" msgstr "" #: indicator/messagingmenu.cpp:351 msgid "Running late. On my way." msgstr "" #: indicator/messagingmenu.cpp:352 msgid "Busy at the moment. Will call you later." msgstr "" #: indicator/messagingmenu.cpp:353 msgid "I am 20 minutes late." msgstr "" #: indicator/messagingmenu.cpp:354 msgid "Still busy. Will call you later." msgstr "" #: indicator/messagingmenu.cpp:409 #, qt-format msgid "%1 missed call" msgid_plural "%1 missed calls" msgstr[0] "" msgstr[1] "" #: indicator/messagingmenu.cpp:492 msgid "Voicemail messages" msgstr "" #: indicator/messagingmenu.cpp:495 #, qt-format msgid "%1 voicemail message" msgid_plural "%1 voicemail messages" msgstr[0] "" msgstr[1] "" #: indicator/messagingmenu.cpp:500 msgid "Voicemail" msgstr "" #: indicator/metrics.cpp:42 #, qt-format msgid "%1 text messages sent today" msgstr "" #: indicator/metrics.cpp:43 msgid "No text messages sent today" msgstr "" #: indicator/metrics.cpp:44 #, qt-format msgid "%1 text messages received today" msgstr "" #: indicator/metrics.cpp:45 msgid "No text messages received today" msgstr "" #: indicator/metrics.cpp:46 #, qt-format msgid "%1 calls received today" msgstr "" #: indicator/metrics.cpp:47 msgid "No calls received today" msgstr "" #: indicator/metrics.cpp:48 #, qt-format msgid "%1 calls made today" msgstr "" #: indicator/metrics.cpp:49 indicator/metrics.cpp:51 msgid "No calls made today" msgstr "" #: indicator/metrics.cpp:50 #, qt-format msgid "Spent %1 minutes in calls today" msgstr "" #: indicator/textchannelobserver.cpp:225 msgid "Unlock your sim card and try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:227 msgid "Deactivate flight mode and try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:230 msgid "Try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:236 msgid "The message could not be sent" msgstr "" #: indicator/textchannelobserver.cpp:249 indicator/textchannelobserver.cpp:713 msgid "View message" msgstr "" #: indicator/textchannelobserver.cpp:295 msgid "New Group" msgstr "" #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:302 #, qt-format msgid "You joined group %1 " msgstr "" #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:306 #, qt-format msgid "You joined group %1" msgstr "" #: indicator/textchannelobserver.cpp:309 msgid "You joined a new group" msgstr "" #: indicator/textchannelobserver.cpp:328 msgid "View Group" msgstr "" #: indicator/textchannelobserver.cpp:367 indicator/ussdindicator.cpp:116 msgid "Ok" msgstr "" #: indicator/textchannelobserver.cpp:373 msgid "Save" msgstr "" #: indicator/textchannelobserver.cpp:468 msgid "Emergency Alert" msgstr "" #: indicator/textchannelobserver.cpp:471 msgid "Emergency Alert: Extreme" msgstr "" #: indicator/textchannelobserver.cpp:474 msgid "Emergency Alert: Severe" msgstr "" #: indicator/textchannelobserver.cpp:477 msgid "Emergency Alert: Notice" msgstr "" #: indicator/textchannelobserver.cpp:482 msgid "AMBER Alert" msgstr "" #: indicator/textchannelobserver.cpp:485 msgid "Alert" msgstr "" #: indicator/textchannelobserver.cpp:531 msgid "Show alert" msgstr "" #: indicator/textchannelobserver.cpp:604 #, qt-format msgid "Attachment: %1 image" msgid_plural "Attachments: %1 images" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:606 #, qt-format msgid "Attachment: %1 video" msgid_plural "Attachments: %1 videos" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:608 #, qt-format msgid "Attachment: %1 contact" msgid_plural "Attachments: %1 contacts" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:610 #, qt-format msgid "Attachment: %1 audio clip" msgid_plural "Attachments: %1 audio clips" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:612 #, qt-format msgid "Attachment: %1 file" msgid_plural "Attachments: %1 files" msgstr[0] "" msgstr[1] "" #. TRANSLATORS : message displayed when any error occurred while receiving a MMS (case when cellular-data is off, or any downloading issue). Notify that there was a message, the user can find more about it in the messaging-app. #: indicator/textchannelobserver.cpp:615 msgid "New MMS message" msgstr "" #. TRANSLATORS : %1 is the recipient name #: indicator/textchannelobserver.cpp:679 indicator/textchannelobserver.cpp:683 #, qt-format msgid "Message to group from %1" msgstr "" #: indicator/textchannelobserver.cpp:749 #, qt-format msgid "Message from %1" msgstr "" #: indicator/textchannelobserver.cpp:910 msgid "Please, select a SIM card:" msgstr "" #: indicator/ussdindicator.cpp:119 msgid "Reply" msgstr "" #: indicator/ussdindicator.cpp:142 msgid "Cancel" msgstr "" #: libtelephonyservice/callnotification.cpp:53 msgid "Conf call on hold" msgstr "" #: libtelephonyservice/callnotification.cpp:53 #, qt-format msgid "%1 call on hold" msgstr "" #: libtelephonyservice/callnotification.cpp:56 msgid "Conf call ended" msgstr "" #: libtelephonyservice/callnotification.cpp:56 #, qt-format msgid "%1 call ended" msgstr "" #: libtelephonyservice/callnotification.cpp:59 #, qt-format msgid "%1 call declined" msgstr "" #: libtelephonyservice/contactwatcher.cpp:157 msgid "Private Number" msgstr "" #: libtelephonyservice/contactwatcher.cpp:159 msgid "Unknown Number" msgstr "" telephony-service-0.5.3/po/pa.po000066400000000000000000000307201455543255600165620ustar00rootroot00000000000000# Punjabi translation for telephony-service # Copyright (c) 2015 Rosetta Contributors and Canonical Ltd 2015 # This file is distributed under the same license as the telephony-service package. # FIRST AUTHOR , 2015. # msgid "" msgstr "" "Project-Id-Version: telephony-service\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-12-16 17:03+0100\n" "PO-Revision-Date: 2015-02-15 05:43+0000\n" "Last-Translator: Gursharnjit_Singh \n" "Language-Team: Punjabi \n" "Language: pa\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Launchpad-Export-Date: 2017-01-04 06:03+0000\n" "X-Generator: Launchpad (build 18298)\n" #: indicator/telephony-service-call.desktop.in:4 msgid "Phone Calls" msgstr "ਫ਼ੋਨ ਕਾਲਾਂ" #: indicator/telephony-service-sms.desktop.in:4 msgid "SMS" msgstr "SMS" #: approver/approver.cpp:66 msgid "Unknown caller" msgstr "ਅਣਪਛਾਤਾ ਕਾਲਰ" #: approver/approver.cpp:94 msgid "I'm busy at the moment. I'll call later." msgstr "ਇਸ ਵੇਲੇ ਮੈਂ ਰੁਝਿਆ ਹਾਂ। ਮੈਂ ਬਾਅਦ ਵਿੱਚ ਕਾਲ ਕਰਾਂਗਾ।" #: approver/approver.cpp:95 msgid "I'm running late, on my way now." msgstr "ਮੈਨੂੰ ਦੇਰੀ ਹੋ ਰਹੀ ਹੈ, ਮੈਂ ਹਾਲੇ ਰਾਹ ਵਿੱਚ ਹਾਂ।" #: approver/approver.cpp:96 msgid "Please call me back later." msgstr "ਕਿਰਪਾ ਕਰਕੇ ਮੈਨੂੰ ਬਾਅਦ ਵਿੱਚ ਕਾਲ ਕਰੋ।" #: approver/approver.cpp:457 #, qt-format msgid "On [%1]" msgstr "" #: approver/approver.cpp:461 indicator/messagingmenu.cpp:414 msgid "Private number" msgstr "ਨਿੱਜੀ ਨੰਬਰ" #: approver/approver.cpp:464 indicator/messagingmenu.cpp:244 #: indicator/messagingmenu.cpp:418 indicator/textchannelobserver.cpp:640 msgid "Unknown number" msgstr "ਅਣਜਾਣ ਨੰਬਰ" #: approver/approver.cpp:470 approver/approver.cpp:485 msgid "Caller number is not available" msgstr "ਕਾਲਰ ਨੰਬਰ ਮੌਜੂਦ ਨਹੀਂ" #: approver/approver.cpp:476 msgid "Calling from private number" msgstr "ਨਿੱਜੀ ਨੰਬਰ ਤੋਂ ਕਾਲ ਕਰ ਰਿਹਾ" #: approver/approver.cpp:479 msgid "Calling from unknown number" msgstr "ਅਣਪਛਾਤੇ ਨੰਬਰ ਤੋਂ ਕਾਲ ਕਰ ਰਿਹਾ" #: approver/approver.cpp:482 #, qt-format msgid "Calling from %1" msgstr "%1 ਤੋਂ ਕਾਲ ਕਰ ਰਿਹਾ" #: approver/approver.cpp:529 msgid "Hold + Answer" msgstr "ਰੱਖੋ + ਜਵਾਬ" #: approver/approver.cpp:530 msgid "Accept" msgstr "ਮਨਜ਼ੂਰ" #: approver/approver.cpp:543 msgid "End + Answer" msgstr "ਅੰਤ + ਜਵਾਬ" #: approver/approver.cpp:552 msgid "Decline" msgstr "ਇਨਕਾਰ" #: approver/approver.cpp:560 msgid "Message & decline" msgstr "ਸੁਨੇਹਾ ਅਤੇ ਇਨਕਾਰ" #: approver/main.cpp:46 msgid "Telephony Service Approver" msgstr "ਟੈਲੀਫ਼ੋਨੀ ਸੇਵਾ ਪ੍ਰਵਾਨਗੀ" #: indicator/authhandler.cpp:72 msgid "Authentication failed. Do you want to review your credentials?" msgstr "" #: indicator/authhandler.cpp:91 msgid "Yes" msgstr "" #: indicator/authhandler.cpp:94 msgid "No" msgstr "" #: indicator/displaynamesettings.cpp:35 #, qt-format msgid "SIM %1" msgstr "ਸਿਮ %1" #: indicator/main.cpp:53 msgid "Telephony Service Indicator" msgstr "ਟੈਲੀਫ਼ੋਨੀ ਸੇਵਾ ਸੂਚਕ" #: indicator/messagingmenu.cpp:83 indicator/messagingmenu.cpp:87 msgid "Telephony Service" msgstr "ਟੈਲੀਫ਼ੋਨੀ ਸੇਵਾ" #: indicator/messagingmenu.cpp:151 indicator/messagingmenu.cpp:293 #: indicator/messagingmenu.cpp:360 msgid "Send" msgstr "ਭੇਜੋ" #. TRANSLATORS : %1 is the group name and %2 is the recipient name #: indicator/messagingmenu.cpp:262 indicator/textchannelobserver.cpp:671 #: indicator/textchannelobserver.cpp:675 #, qt-format msgid "Message to %1 from %2" msgstr "" #. TRANSLATORS : %1 is the recipient name #: indicator/messagingmenu.cpp:265 indicator/messagingmenu.cpp:269 #, fuzzy, qt-format #| msgid "Message from %1" msgid "Message to the group from %1" msgstr "%1 ਤੋਂ ਸੁਨੇਹਾ" #: indicator/messagingmenu.cpp:345 msgid "Call back" msgstr "ਮੁੜ ਕਾਲ ਕਰੋ" #: indicator/messagingmenu.cpp:350 #, fuzzy #| msgid "I missed your call - can you call me now?" msgid "Missed your call — can you call me now?" msgstr "ਮੈਂ ਤੁਹਾਡੀ ਕਾਲ ਤੋਂ ਖੁੰਝ ਗਿਆ - ਕੀ ਤੁਸੀਂ ਮੈਨੂੰ ਹੁਣ ਕਾਲ ਕਰ ਸਕਦੇ ਹੋ?" #: indicator/messagingmenu.cpp:351 #, fuzzy #| msgid "I'm running late. I'm on my way." msgid "Running late. On my way." msgstr "ਮੈਨੂੰ ਦੇਰੀ ਹੋ ਰਹੀ ਹੈ, ਮੈਂ ਰਾਹ ਵਿੱਚ ਹਾਂ।" #: indicator/messagingmenu.cpp:352 #, fuzzy #| msgid "I'm busy at the moment. I'll call you later." msgid "Busy at the moment. Will call you later." msgstr "ਮੈਂ ਇਸ ਵੇਲੇ ਰੁਝਿਆ ਹਾਂ। ਮੈਂ ਤੁਹਾਨੂੰ ਬਾਅਦ ਵਿੱਚ ਕਾਲ ਕਰਾਂਗਾ।" #: indicator/messagingmenu.cpp:353 #, fuzzy #| msgid "I'll be 20 minutes late." msgid "I am 20 minutes late." msgstr "ਮੈਨੂੰ 20 ਮਿੰਟਾਂ ਦੀ ਦੇਰੀ ਹੋਵੇਗੀ।" #: indicator/messagingmenu.cpp:354 #, fuzzy #| msgid "Sorry, I'm still busy. I'll call you later." msgid "Still busy. Will call you later." msgstr "ਮੁਆਫ਼ੀ, ਮੈਂ ਹਾਲੇ ਵੀ ਰੁਝਿਆ ਹਾਂ। ਮੈਂ ਤੁਹਾਨੂੰ ਬਾਅਦ ਵਿੱਚ ਕਾਲ ਕਰਾਂਗਾ।" #: indicator/messagingmenu.cpp:409 #, qt-format msgid "%1 missed call" msgid_plural "%1 missed calls" msgstr[0] "%1 ਮਿਸ ਕਾਲ" msgstr[1] "%1 ਮਿਸ ਕਾਲਾਂ" #: indicator/messagingmenu.cpp:492 msgid "Voicemail messages" msgstr "ਵੋਆਇਸਮੇਲ ਸੁਨੇਹੇ" #: indicator/messagingmenu.cpp:495 #, qt-format msgid "%1 voicemail message" msgid_plural "%1 voicemail messages" msgstr[0] "%1 ਵੋਆਇਸਮੇਲ ਸੁਨੇਹਾ" msgstr[1] "%1 ਵੋਆਇਸਮੇਲ ਸੁਨੇਹੇ" #: indicator/messagingmenu.cpp:500 msgid "Voicemail" msgstr "ਵੋਆਇਸਮੇਲ" #: indicator/metrics.cpp:42 #, qt-format msgid "%1 text messages sent today" msgstr "%1 ਅੱਜ ਭੇਜੇ ਗਏ ਟੈਕਸਟ ਸੁਨੇਹੇ" #: indicator/metrics.cpp:43 msgid "No text messages sent today" msgstr "ਅੱਜ ਕੋਈ ਟੈਕਸਟ ਸੁਨੇਹਾ ਨਹੀਂ ਭੇਜਿਆ" #: indicator/metrics.cpp:44 #, qt-format msgid "%1 text messages received today" msgstr "%1 ਅੱਜ ਮਿਲੇ ਟੈਕਸਟ ਸੁਨੇਹੇ" #: indicator/metrics.cpp:45 msgid "No text messages received today" msgstr "ਅੱਜ ਕੋਈ ਟੈਕਸਟ ਸੁਨੇਹਾ ਨਹੀਂ ਮਿਲਿਆ" #: indicator/metrics.cpp:46 #, qt-format msgid "%1 calls received today" msgstr "%1 ਅੱਜ ਮਿਲੀਆਂ ਕਾਲਾਂ" #: indicator/metrics.cpp:47 msgid "No calls received today" msgstr "ਅੱਜ ਕੋਈ ਕਾਲ ਨਹੀਂ ਮਿਲੀ" #: indicator/metrics.cpp:48 #, qt-format msgid "%1 calls made today" msgstr "%1 ਅੱਜ ਕੀਤੀਆਂ ਕਾਲਾਂ" #: indicator/metrics.cpp:49 indicator/metrics.cpp:51 msgid "No calls made today" msgstr "ਅੱਜ ਕੋਈ ਕਾਲ ਨਹੀਂ ਕੀਤੀ" #: indicator/metrics.cpp:50 #, qt-format msgid "Spent %1 minutes in calls today" msgstr "ਅੱਜ %1 ਮਿੰਟ ਕਾਲਾਂ ਵਿੱਚ ਬਿਤਾਏ" #: indicator/textchannelobserver.cpp:225 msgid "Unlock your sim card and try again from the messaging application." msgstr "ਆਪਣੇ ਸਿਮ ਕਾਰਡ ਦਾ ਲਾੱਕ ਖੋਲ੍ਹੋ ਅਤੇ ਮੈਸੇਜ਼ਿੰਗ ਸੇਵਾ ਤੋਂ ਮੁੜ ਕੋਸ਼ਿਸ ਕਰੋ।" #: indicator/textchannelobserver.cpp:227 msgid "Deactivate flight mode and try again from the messaging application." msgstr "ਹਵਾਈ ਮੋਡ ਬੰਦ ਕਰੋ ਅਤੇ ਮੈਸੇਜ਼ਿੰਗ ਐਪਲੀਕੇਸ਼ਨ ਤੋਂ ਮੁੜ ਕੋਸ਼ਿਸ ਕਰੋ।" #: indicator/textchannelobserver.cpp:230 msgid "Try again from the messaging application." msgstr "ਮੈਸੇਜ਼ਿੰਗ ਐਪਲੀਕੇਸ਼ਨ ਤੋਂ ਮੁੜ ਕੋਸ਼ਿਸ ਕਰੋ।" #: indicator/textchannelobserver.cpp:236 msgid "The message could not be sent" msgstr "ਸੁਨੇਹਾ ਭੇਜਿਆ ਨਹੀਂ ਜਾ ਸਕਦਾ" #: indicator/textchannelobserver.cpp:249 indicator/textchannelobserver.cpp:713 msgid "View message" msgstr "ਸੁਨੇਹਾ ਵਿਖਾਓ" #: indicator/textchannelobserver.cpp:295 msgid "New Group" msgstr "" #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:302 #, qt-format msgid "You joined group %1 " msgstr "" #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:306 #, qt-format msgid "You joined group %1" msgstr "" #: indicator/textchannelobserver.cpp:309 msgid "You joined a new group" msgstr "" #: indicator/textchannelobserver.cpp:328 msgid "View Group" msgstr "" #: indicator/textchannelobserver.cpp:367 indicator/ussdindicator.cpp:116 msgid "Ok" msgstr "ਠੀਕ" #: indicator/textchannelobserver.cpp:373 msgid "Save" msgstr "ਸੰਭਾਲ੍ਹੋ" #: indicator/textchannelobserver.cpp:468 msgid "Emergency Alert" msgstr "" #: indicator/textchannelobserver.cpp:471 msgid "Emergency Alert: Extreme" msgstr "" #: indicator/textchannelobserver.cpp:474 msgid "Emergency Alert: Severe" msgstr "" #: indicator/textchannelobserver.cpp:477 msgid "Emergency Alert: Notice" msgstr "" #: indicator/textchannelobserver.cpp:482 msgid "AMBER Alert" msgstr "" #: indicator/textchannelobserver.cpp:485 msgid "Alert" msgstr "" #: indicator/textchannelobserver.cpp:531 msgid "Show alert" msgstr "" #: indicator/textchannelobserver.cpp:604 #, qt-format msgid "Attachment: %1 image" msgid_plural "Attachments: %1 images" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:606 #, qt-format msgid "Attachment: %1 video" msgid_plural "Attachments: %1 videos" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:608 #, qt-format msgid "Attachment: %1 contact" msgid_plural "Attachments: %1 contacts" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:610 #, qt-format msgid "Attachment: %1 audio clip" msgid_plural "Attachments: %1 audio clips" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:612 #, qt-format msgid "Attachment: %1 file" msgid_plural "Attachments: %1 files" msgstr[0] "" msgstr[1] "" #. TRANSLATORS : message displayed when any error occurred while receiving a MMS (case when cellular-data is off, or any downloading issue). Notify that there was a message, the user can find more about it in the messaging-app. #: indicator/textchannelobserver.cpp:615 #, fuzzy #| msgid "View message" msgid "New MMS message" msgstr "ਸੁਨੇਹਾ ਵਿਖਾਓ" #. TRANSLATORS : %1 is the recipient name #: indicator/textchannelobserver.cpp:679 indicator/textchannelobserver.cpp:683 #, qt-format msgid "Message to group from %1" msgstr "" #: indicator/textchannelobserver.cpp:749 #, qt-format msgid "Message from %1" msgstr "%1 ਤੋਂ ਸੁਨੇਹਾ" #: indicator/textchannelobserver.cpp:910 msgid "Please, select a SIM card:" msgstr "ਕਿਰਪਾ ਕਰਕੇ, ਸਿਮ ਕਾਰਡ ਚੁਣੋ:" #: indicator/ussdindicator.cpp:119 msgid "Reply" msgstr "ਜਵਾਬ" #: indicator/ussdindicator.cpp:142 msgid "Cancel" msgstr "ਰੱਦ" #: libtelephonyservice/callnotification.cpp:53 msgid "Conf call on hold" msgstr "" #: libtelephonyservice/callnotification.cpp:53 #, qt-format msgid "%1 call on hold" msgstr "" #: libtelephonyservice/callnotification.cpp:56 msgid "Conf call ended" msgstr "" #: libtelephonyservice/callnotification.cpp:56 #, qt-format msgid "%1 call ended" msgstr "" #: libtelephonyservice/callnotification.cpp:59 #, qt-format msgid "%1 call declined" msgstr "" #: libtelephonyservice/contactwatcher.cpp:157 msgid "Private Number" msgstr "ਨਿੱਜੀ ਨੰਬਰ" #: libtelephonyservice/contactwatcher.cpp:159 msgid "Unknown Number" msgstr "ਅਣਪਛਾਤਾ ਨੰਬਰ" #, fuzzy #~| msgid "Telephony Service" #~ msgid "telephony-service-call" #~ msgstr "ਟੈਲੀਫ਼ੋਨੀ ਸੇਵਾ" #, fuzzy #~| msgid "Telephony Service" #~ msgid "telephony-service-message" #~ msgstr "ਟੈਲੀਫ਼ੋਨੀ ਸੇਵਾ" telephony-service-0.5.3/po/pam.po000066400000000000000000000211521455543255600167360ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-12-16 17:03+0100\n" "PO-Revision-Date: 2023-01-05 11:07+0000\n" "Last-Translator: Anonymous \n" "Language-Team: Pampanga \n" "Language: pam\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Generator: Weblate 4.15.1-dev\n" #: indicator/telephony-service-call.desktop.in:4 msgid "Phone Calls" msgstr "" #: indicator/telephony-service-sms.desktop.in:4 msgid "SMS" msgstr "" #: approver/approver.cpp:66 msgid "Unknown caller" msgstr "" #: approver/approver.cpp:94 msgid "I'm busy at the moment. I'll call later." msgstr "" #: approver/approver.cpp:95 msgid "I'm running late, on my way now." msgstr "" #: approver/approver.cpp:96 msgid "Please call me back later." msgstr "" #: approver/approver.cpp:457 #, qt-format msgid "On [%1]" msgstr "" #: approver/approver.cpp:461 indicator/messagingmenu.cpp:414 msgid "Private number" msgstr "" #: approver/approver.cpp:464 indicator/messagingmenu.cpp:244 #: indicator/messagingmenu.cpp:418 indicator/textchannelobserver.cpp:640 msgid "Unknown number" msgstr "" #: approver/approver.cpp:470 approver/approver.cpp:485 msgid "Caller number is not available" msgstr "" #: approver/approver.cpp:476 msgid "Calling from private number" msgstr "" #: approver/approver.cpp:479 msgid "Calling from unknown number" msgstr "" #: approver/approver.cpp:482 #, qt-format msgid "Calling from %1" msgstr "" #: approver/approver.cpp:529 msgid "Hold + Answer" msgstr "" #: approver/approver.cpp:530 msgid "Accept" msgstr "" #: approver/approver.cpp:543 msgid "End + Answer" msgstr "" #: approver/approver.cpp:552 msgid "Decline" msgstr "" #: approver/approver.cpp:560 msgid "Message & decline" msgstr "" #: approver/main.cpp:46 msgid "Telephony Service Approver" msgstr "" #: indicator/authhandler.cpp:72 msgid "Authentication failed. Do you want to review your credentials?" msgstr "" #: indicator/authhandler.cpp:91 msgid "Yes" msgstr "" #: indicator/authhandler.cpp:94 msgid "No" msgstr "" #: indicator/displaynamesettings.cpp:35 #, qt-format msgid "SIM %1" msgstr "" #: indicator/main.cpp:53 msgid "Telephony Service Indicator" msgstr "" #: indicator/messagingmenu.cpp:83 indicator/messagingmenu.cpp:87 msgid "Telephony Service" msgstr "" #: indicator/messagingmenu.cpp:151 indicator/messagingmenu.cpp:293 #: indicator/messagingmenu.cpp:360 msgid "Send" msgstr "" #. TRANSLATORS : %1 is the group name and %2 is the recipient name #: indicator/messagingmenu.cpp:262 indicator/textchannelobserver.cpp:671 #: indicator/textchannelobserver.cpp:675 #, qt-format msgid "Message to %1 from %2" msgstr "" #. TRANSLATORS : %1 is the recipient name #: indicator/messagingmenu.cpp:265 indicator/messagingmenu.cpp:269 #, qt-format msgid "Message to the group from %1" msgstr "" #: indicator/messagingmenu.cpp:345 msgid "Call back" msgstr "" #: indicator/messagingmenu.cpp:350 msgid "Missed your call — can you call me now?" msgstr "" #: indicator/messagingmenu.cpp:351 msgid "Running late. On my way." msgstr "" #: indicator/messagingmenu.cpp:352 msgid "Busy at the moment. Will call you later." msgstr "" #: indicator/messagingmenu.cpp:353 msgid "I am 20 minutes late." msgstr "" #: indicator/messagingmenu.cpp:354 msgid "Still busy. Will call you later." msgstr "" #: indicator/messagingmenu.cpp:409 #, qt-format msgid "%1 missed call" msgid_plural "%1 missed calls" msgstr[0] "" msgstr[1] "" #: indicator/messagingmenu.cpp:492 msgid "Voicemail messages" msgstr "" #: indicator/messagingmenu.cpp:495 #, qt-format msgid "%1 voicemail message" msgid_plural "%1 voicemail messages" msgstr[0] "" msgstr[1] "" #: indicator/messagingmenu.cpp:500 msgid "Voicemail" msgstr "" #: indicator/metrics.cpp:42 #, qt-format msgid "%1 text messages sent today" msgstr "" #: indicator/metrics.cpp:43 msgid "No text messages sent today" msgstr "" #: indicator/metrics.cpp:44 #, qt-format msgid "%1 text messages received today" msgstr "" #: indicator/metrics.cpp:45 msgid "No text messages received today" msgstr "" #: indicator/metrics.cpp:46 #, qt-format msgid "%1 calls received today" msgstr "" #: indicator/metrics.cpp:47 msgid "No calls received today" msgstr "" #: indicator/metrics.cpp:48 #, qt-format msgid "%1 calls made today" msgstr "" #: indicator/metrics.cpp:49 indicator/metrics.cpp:51 msgid "No calls made today" msgstr "" #: indicator/metrics.cpp:50 #, qt-format msgid "Spent %1 minutes in calls today" msgstr "" #: indicator/textchannelobserver.cpp:225 msgid "Unlock your sim card and try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:227 msgid "Deactivate flight mode and try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:230 msgid "Try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:236 msgid "The message could not be sent" msgstr "" #: indicator/textchannelobserver.cpp:249 indicator/textchannelobserver.cpp:713 msgid "View message" msgstr "" #: indicator/textchannelobserver.cpp:295 msgid "New Group" msgstr "" #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:302 #, qt-format msgid "You joined group %1 " msgstr "" #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:306 #, qt-format msgid "You joined group %1" msgstr "" #: indicator/textchannelobserver.cpp:309 msgid "You joined a new group" msgstr "" #: indicator/textchannelobserver.cpp:328 msgid "View Group" msgstr "" #: indicator/textchannelobserver.cpp:367 indicator/ussdindicator.cpp:116 msgid "Ok" msgstr "" #: indicator/textchannelobserver.cpp:373 msgid "Save" msgstr "" #: indicator/textchannelobserver.cpp:468 msgid "Emergency Alert" msgstr "" #: indicator/textchannelobserver.cpp:471 msgid "Emergency Alert: Extreme" msgstr "" #: indicator/textchannelobserver.cpp:474 msgid "Emergency Alert: Severe" msgstr "" #: indicator/textchannelobserver.cpp:477 msgid "Emergency Alert: Notice" msgstr "" #: indicator/textchannelobserver.cpp:482 msgid "AMBER Alert" msgstr "" #: indicator/textchannelobserver.cpp:485 msgid "Alert" msgstr "" #: indicator/textchannelobserver.cpp:531 msgid "Show alert" msgstr "" #: indicator/textchannelobserver.cpp:604 #, qt-format msgid "Attachment: %1 image" msgid_plural "Attachments: %1 images" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:606 #, qt-format msgid "Attachment: %1 video" msgid_plural "Attachments: %1 videos" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:608 #, qt-format msgid "Attachment: %1 contact" msgid_plural "Attachments: %1 contacts" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:610 #, qt-format msgid "Attachment: %1 audio clip" msgid_plural "Attachments: %1 audio clips" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:612 #, qt-format msgid "Attachment: %1 file" msgid_plural "Attachments: %1 files" msgstr[0] "" msgstr[1] "" #. TRANSLATORS : message displayed when any error occurred while receiving a MMS (case when cellular-data is off, or any downloading issue). Notify that there was a message, the user can find more about it in the messaging-app. #: indicator/textchannelobserver.cpp:615 msgid "New MMS message" msgstr "" #. TRANSLATORS : %1 is the recipient name #: indicator/textchannelobserver.cpp:679 indicator/textchannelobserver.cpp:683 #, qt-format msgid "Message to group from %1" msgstr "" #: indicator/textchannelobserver.cpp:749 #, qt-format msgid "Message from %1" msgstr "" #: indicator/textchannelobserver.cpp:910 msgid "Please, select a SIM card:" msgstr "" #: indicator/ussdindicator.cpp:119 msgid "Reply" msgstr "" #: indicator/ussdindicator.cpp:142 #, fuzzy msgid "Cancel" msgstr "Cancel" #: libtelephonyservice/callnotification.cpp:53 msgid "Conf call on hold" msgstr "" #: libtelephonyservice/callnotification.cpp:53 #, qt-format msgid "%1 call on hold" msgstr "" #: libtelephonyservice/callnotification.cpp:56 msgid "Conf call ended" msgstr "" #: libtelephonyservice/callnotification.cpp:56 #, qt-format msgid "%1 call ended" msgstr "" #: libtelephonyservice/callnotification.cpp:59 #, qt-format msgid "%1 call declined" msgstr "" #: libtelephonyservice/contactwatcher.cpp:157 msgid "Private Number" msgstr "" #: libtelephonyservice/contactwatcher.cpp:159 msgid "Unknown Number" msgstr "" telephony-service-0.5.3/po/pl.po000066400000000000000000000277371455543255600166130ustar00rootroot00000000000000# Polish translation for telephony-service # Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013 # This file is distributed under the same license as the telephony-service package. # FIRST AUTHOR , 2013. # msgid "" msgstr "" "Project-Id-Version: telephony-service\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-12-16 17:03+0100\n" "PO-Revision-Date: 2023-02-09 16:36+0000\n" "Last-Translator: gnu-ewm \n" "Language-Team: Polish \n" "Language: pl\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 " "|| n%100>=20) ? 1 : 2;\n" "X-Generator: Weblate 4.16-dev\n" "X-Launchpad-Export-Date: 2017-01-04 06:03+0000\n" #: indicator/telephony-service-call.desktop.in:4 msgid "Phone Calls" msgstr "Rozmowy telefoniczne" #: indicator/telephony-service-sms.desktop.in:4 msgid "SMS" msgstr "SMS" #: approver/approver.cpp:66 msgid "Unknown caller" msgstr "Nieznany" #: approver/approver.cpp:94 msgid "I'm busy at the moment. I'll call later." msgstr "Jestem zajęty w tym momencie. Zadzwonię później." #: approver/approver.cpp:95 msgid "I'm running late, on my way now." msgstr "Pędzę z całych sił. Jestem już w drodze." #: approver/approver.cpp:96 msgid "Please call me back later." msgstr "Proszę zadzwoń do mnie później." #: approver/approver.cpp:457 #, qt-format msgid "On [%1]" msgstr "Na [%1]" #: approver/approver.cpp:461 indicator/messagingmenu.cpp:414 msgid "Private number" msgstr "Numer zastrzeżony" #: approver/approver.cpp:464 indicator/messagingmenu.cpp:244 #: indicator/messagingmenu.cpp:418 indicator/textchannelobserver.cpp:640 msgid "Unknown number" msgstr "Nieznany numer" #: approver/approver.cpp:470 approver/approver.cpp:485 msgid "Caller number is not available" msgstr "Numer rozmówcy jest niedostępny" #: approver/approver.cpp:476 msgid "Calling from private number" msgstr "Połączenie z numerem prywatnym" #: approver/approver.cpp:479 msgid "Calling from unknown number" msgstr "Połączenie z nieznanym numerem" #: approver/approver.cpp:482 #, qt-format msgid "Calling from %1" msgstr "Połączenie z %1" #: approver/approver.cpp:529 msgid "Hold + Answer" msgstr "Wstrzymaj i odbierz" #: approver/approver.cpp:530 msgid "Accept" msgstr "Akceptuj" #: approver/approver.cpp:543 msgid "End + Answer" msgstr "Zakończ i odbierz" #: approver/approver.cpp:552 msgid "Decline" msgstr "Odrzuć" #: approver/approver.cpp:560 msgid "Message & decline" msgstr "Odrzucenie + wiadomość" #: approver/main.cpp:46 msgid "Telephony Service Approver" msgstr "Zatwierdzanie obsługi telefonu" #: indicator/authhandler.cpp:72 msgid "Authentication failed. Do you want to review your credentials?" msgstr "" "Uwierzytelnianie nie powiodło się. Chcesz przejrzeć dane uwierzytelniające?" #: indicator/authhandler.cpp:91 msgid "Yes" msgstr "Tak" #: indicator/authhandler.cpp:94 msgid "No" msgstr "Nie" #: indicator/displaynamesettings.cpp:35 #, qt-format msgid "SIM %1" msgstr "SIM %1" #: indicator/main.cpp:53 msgid "Telephony Service Indicator" msgstr "Wskaźnik obsługi telefonu" #: indicator/messagingmenu.cpp:83 indicator/messagingmenu.cpp:87 msgid "Telephony Service" msgstr "Obsługa telefonu" #: indicator/messagingmenu.cpp:151 indicator/messagingmenu.cpp:293 #: indicator/messagingmenu.cpp:360 msgid "Send" msgstr "Wyślij" #. TRANSLATORS : %1 is the group name and %2 is the recipient name #: indicator/messagingmenu.cpp:262 indicator/textchannelobserver.cpp:671 #: indicator/textchannelobserver.cpp:675 #, qt-format msgid "Message to %1 from %2" msgstr "Wiadomość do %1 od %2" #. TRANSLATORS : %1 is the recipient name #: indicator/messagingmenu.cpp:265 indicator/messagingmenu.cpp:269 #, qt-format msgid "Message to the group from %1" msgstr "Wiadomość do grupy od %1" #: indicator/messagingmenu.cpp:345 msgid "Call back" msgstr "Oddzwoń" #: indicator/messagingmenu.cpp:350 msgid "Missed your call — can you call me now?" msgstr "Nieodebrane połączenie — czy możesz do mnie zadzwonić teraz?" #: indicator/messagingmenu.cpp:351 msgid "Running late. On my way." msgstr "Spóźnię się. Jestem w drodze." #: indicator/messagingmenu.cpp:352 msgid "Busy at the moment. Will call you later." msgstr "Niestety nie mogę teraz odebrać. Oddzwonię później." #: indicator/messagingmenu.cpp:353 msgid "I am 20 minutes late." msgstr "Spóźnię się 20 minut." #: indicator/messagingmenu.cpp:354 msgid "Still busy. Will call you later." msgstr "Nadal nie mogę rozmawiać. Oddzwonię później." #: indicator/messagingmenu.cpp:409 #, qt-format msgid "%1 missed call" msgid_plural "%1 missed calls" msgstr[0] "%1 nieodebrane połączenie" msgstr[1] "%1 nieodebrane połączenia" msgstr[2] "%1 nieodebranych połączeń" #: indicator/messagingmenu.cpp:492 msgid "Voicemail messages" msgstr "Wiadomości głosowe" #: indicator/messagingmenu.cpp:495 #, qt-format msgid "%1 voicemail message" msgid_plural "%1 voicemail messages" msgstr[0] "%1 wiadomość głosowa" msgstr[1] "%1 wiadomości głosowe" msgstr[2] "%1 wiadomości głosowych" #: indicator/messagingmenu.cpp:500 msgid "Voicemail" msgstr "Poczta głosowa" #: indicator/metrics.cpp:42 #, qt-format msgid "%1 text messages sent today" msgstr "Wysłanych wiadomości: %1" #: indicator/metrics.cpp:43 msgid "No text messages sent today" msgstr "Dziś nie wysyłano wiadomości" #: indicator/metrics.cpp:44 #, qt-format msgid "%1 text messages received today" msgstr "Otrzymanych wiadomości: %1" #: indicator/metrics.cpp:45 msgid "No text messages received today" msgstr "Dziś nie otrzymano wiadomości" #: indicator/metrics.cpp:46 #, qt-format msgid "%1 calls received today" msgstr "Odebranych połączeń: %1" #: indicator/metrics.cpp:47 msgid "No calls received today" msgstr "Dziś nie odebrano połączeń" #: indicator/metrics.cpp:48 #, qt-format msgid "%1 calls made today" msgstr "Wykonanych połączeń: %1" #: indicator/metrics.cpp:49 indicator/metrics.cpp:51 msgid "No calls made today" msgstr "Dziś nie wykonano połączeń" #: indicator/metrics.cpp:50 #, qt-format msgid "Spent %1 minutes in calls today" msgstr "Połączenia telefoniczne trwały dziś %1 minut" #: indicator/textchannelobserver.cpp:225 msgid "Unlock your sim card and try again from the messaging application." msgstr "" "Odblokuj kartę SIM i spróbuj ponownie z aplikacji wysyłania wiadomości." #: indicator/textchannelobserver.cpp:227 msgid "Deactivate flight mode and try again from the messaging application." msgstr "" "Wyłącz tryb samolotowy oraz spróbuj ponownie poprzez aplikację do wysyłania " "wiadomości." #: indicator/textchannelobserver.cpp:230 msgid "Try again from the messaging application." msgstr "Spróbuj jeszcze raz z aplikacji wiadomości." #: indicator/textchannelobserver.cpp:236 msgid "The message could not be sent" msgstr "Wiadomość nie może być wysłana" #: indicator/textchannelobserver.cpp:249 indicator/textchannelobserver.cpp:713 msgid "View message" msgstr "Pokaż wiadomość" #: indicator/textchannelobserver.cpp:295 msgid "New Group" msgstr "Nowa grupa" #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:302 #, qt-format msgid "You joined group %1 " msgstr "Dołączyłeś do grupy %1 " #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:306 #, qt-format msgid "You joined group %1" msgstr "Dołączyłeś do grupy %1" #: indicator/textchannelobserver.cpp:309 msgid "You joined a new group" msgstr "Dołączyłeś do nowej grupy" #: indicator/textchannelobserver.cpp:328 msgid "View Group" msgstr "Wyświetl grupę" #: indicator/textchannelobserver.cpp:367 indicator/ussdindicator.cpp:116 msgid "Ok" msgstr "Ok" #: indicator/textchannelobserver.cpp:373 msgid "Save" msgstr "Zapisz" #: indicator/textchannelobserver.cpp:468 msgid "Emergency Alert" msgstr "Ostrzeżenie awaryjne" #: indicator/textchannelobserver.cpp:471 msgid "Emergency Alert: Extreme" msgstr "Ostrzeżenie awaryjne: ekstremalne" #: indicator/textchannelobserver.cpp:474 msgid "Emergency Alert: Severe" msgstr "Ostrzeżenie awaryjne: poważne" #: indicator/textchannelobserver.cpp:477 msgid "Emergency Alert: Notice" msgstr "Ostrzeżenie awaryjne: powiadominie" #: indicator/textchannelobserver.cpp:482 msgid "AMBER Alert" msgstr "Ostrzeżenie AMBER" #: indicator/textchannelobserver.cpp:485 msgid "Alert" msgstr "Ostrzeżenie" #: indicator/textchannelobserver.cpp:531 msgid "Show alert" msgstr "Pokaż ostrzeżenie" #: indicator/textchannelobserver.cpp:604 #, qt-format msgid "Attachment: %1 image" msgid_plural "Attachments: %1 images" msgstr[0] "Załącznik: %1 obraz" msgstr[1] "Załączniki: %1 obrazy" msgstr[2] "Załączniki: %1 obrazów" #: indicator/textchannelobserver.cpp:606 #, qt-format msgid "Attachment: %1 video" msgid_plural "Attachments: %1 videos" msgstr[0] "Załącznik: %1 film" msgstr[1] "Załączniki: %1 filmy" msgstr[2] "Załączniki: %1 filmów" #: indicator/textchannelobserver.cpp:608 #, qt-format msgid "Attachment: %1 contact" msgid_plural "Attachments: %1 contacts" msgstr[0] "Załącznik: %1 kontakt" msgstr[1] "Załączniki: %1 kontakty" msgstr[2] "Załączniki: %1 kontaktów" #: indicator/textchannelobserver.cpp:610 #, qt-format msgid "Attachment: %1 audio clip" msgid_plural "Attachments: %1 audio clips" msgstr[0] "Załącznik: %1 wiadomość głosowa" msgstr[1] "Załączniki: %1 wiadomości głosowe" msgstr[2] "Załączniki: %1 wiadomości głosowych" #: indicator/textchannelobserver.cpp:612 #, qt-format msgid "Attachment: %1 file" msgid_plural "Attachments: %1 files" msgstr[0] "Załącznik: %1 plik" msgstr[1] "Załączniki: %1 pliki" msgstr[2] "Załączniki: %1 plików" #. TRANSLATORS : message displayed when any error occurred while receiving a MMS (case when cellular-data is off, or any downloading issue). Notify that there was a message, the user can find more about it in the messaging-app. #: indicator/textchannelobserver.cpp:615 msgid "New MMS message" msgstr "Mowa wiadomość MMS" #. TRANSLATORS : %1 is the recipient name #: indicator/textchannelobserver.cpp:679 indicator/textchannelobserver.cpp:683 #, qt-format msgid "Message to group from %1" msgstr "Wiadomość do grupy z %1" #: indicator/textchannelobserver.cpp:749 #, qt-format msgid "Message from %1" msgstr "Wiadomość od %1" #: indicator/textchannelobserver.cpp:910 msgid "Please, select a SIM card:" msgstr "Proszę wybrać kartę SIM:" #: indicator/ussdindicator.cpp:119 msgid "Reply" msgstr "Odpowiedz" #: indicator/ussdindicator.cpp:142 msgid "Cancel" msgstr "Anuluj" #: libtelephonyservice/callnotification.cpp:53 msgid "Conf call on hold" msgstr "Połączenie konferencyjne wstrzymane" #: libtelephonyservice/callnotification.cpp:53 #, qt-format msgid "%1 call on hold" msgstr "%1 połączenie wstrzymane" #: libtelephonyservice/callnotification.cpp:56 msgid "Conf call ended" msgstr "Połączenie konferencyjne zakończone" #: libtelephonyservice/callnotification.cpp:56 #, qt-format msgid "%1 call ended" msgstr "%1 połączenie zakończone" #: libtelephonyservice/callnotification.cpp:59 #, qt-format msgid "%1 call declined" msgstr "%1 połączenie odrzucone" #: libtelephonyservice/contactwatcher.cpp:157 msgid "Private Number" msgstr "Numer zastrzeżony" #: libtelephonyservice/contactwatcher.cpp:159 msgid "Unknown Number" msgstr "Numer nieznany" #~ msgid "telephony-service-call" #~ msgstr "usługa-połączeń-telefonicznych" #~ msgid "telephony-service-message" #~ msgstr "usługa-wiadomości" #~ msgid "" #~ "Oops, there has been an error with the MMS system and this message could " #~ "not be retrieved. Please ensure Cellular Data is ON and MMS settings are " #~ "correct, then ask the sender to try again." #~ msgstr "" #~ "Ups, wystąpił błąd w systemie MMS i nie można pobrać tej wiadomości. " #~ "Upewnij się, że dane komórkowe są włączone, a ustawienia wiadomości MMS " #~ "są prawidłowe, a następnie poproś nadawcę, aby spróbował ponownie." telephony-service-0.5.3/po/ps.po000066400000000000000000000211461455543255600166060ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-12-16 17:03+0100\n" "PO-Revision-Date: 2023-01-05 11:07+0000\n" "Last-Translator: Anonymous \n" "Language-Team: Pashto \n" "Language: ps\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Generator: Weblate 4.15.1-dev\n" #: indicator/telephony-service-call.desktop.in:4 msgid "Phone Calls" msgstr "" #: indicator/telephony-service-sms.desktop.in:4 msgid "SMS" msgstr "" #: approver/approver.cpp:66 msgid "Unknown caller" msgstr "" #: approver/approver.cpp:94 msgid "I'm busy at the moment. I'll call later." msgstr "" #: approver/approver.cpp:95 msgid "I'm running late, on my way now." msgstr "" #: approver/approver.cpp:96 msgid "Please call me back later." msgstr "" #: approver/approver.cpp:457 #, qt-format msgid "On [%1]" msgstr "" #: approver/approver.cpp:461 indicator/messagingmenu.cpp:414 msgid "Private number" msgstr "" #: approver/approver.cpp:464 indicator/messagingmenu.cpp:244 #: indicator/messagingmenu.cpp:418 indicator/textchannelobserver.cpp:640 msgid "Unknown number" msgstr "" #: approver/approver.cpp:470 approver/approver.cpp:485 msgid "Caller number is not available" msgstr "" #: approver/approver.cpp:476 msgid "Calling from private number" msgstr "" #: approver/approver.cpp:479 msgid "Calling from unknown number" msgstr "" #: approver/approver.cpp:482 #, qt-format msgid "Calling from %1" msgstr "" #: approver/approver.cpp:529 msgid "Hold + Answer" msgstr "" #: approver/approver.cpp:530 msgid "Accept" msgstr "" #: approver/approver.cpp:543 msgid "End + Answer" msgstr "" #: approver/approver.cpp:552 msgid "Decline" msgstr "" #: approver/approver.cpp:560 msgid "Message & decline" msgstr "" #: approver/main.cpp:46 msgid "Telephony Service Approver" msgstr "" #: indicator/authhandler.cpp:72 msgid "Authentication failed. Do you want to review your credentials?" msgstr "" #: indicator/authhandler.cpp:91 msgid "Yes" msgstr "" #: indicator/authhandler.cpp:94 msgid "No" msgstr "" #: indicator/displaynamesettings.cpp:35 #, qt-format msgid "SIM %1" msgstr "" #: indicator/main.cpp:53 msgid "Telephony Service Indicator" msgstr "" #: indicator/messagingmenu.cpp:83 indicator/messagingmenu.cpp:87 msgid "Telephony Service" msgstr "" #: indicator/messagingmenu.cpp:151 indicator/messagingmenu.cpp:293 #: indicator/messagingmenu.cpp:360 msgid "Send" msgstr "" #. TRANSLATORS : %1 is the group name and %2 is the recipient name #: indicator/messagingmenu.cpp:262 indicator/textchannelobserver.cpp:671 #: indicator/textchannelobserver.cpp:675 #, qt-format msgid "Message to %1 from %2" msgstr "" #. TRANSLATORS : %1 is the recipient name #: indicator/messagingmenu.cpp:265 indicator/messagingmenu.cpp:269 #, qt-format msgid "Message to the group from %1" msgstr "" #: indicator/messagingmenu.cpp:345 msgid "Call back" msgstr "" #: indicator/messagingmenu.cpp:350 msgid "Missed your call — can you call me now?" msgstr "" #: indicator/messagingmenu.cpp:351 msgid "Running late. On my way." msgstr "" #: indicator/messagingmenu.cpp:352 msgid "Busy at the moment. Will call you later." msgstr "" #: indicator/messagingmenu.cpp:353 msgid "I am 20 minutes late." msgstr "" #: indicator/messagingmenu.cpp:354 msgid "Still busy. Will call you later." msgstr "" #: indicator/messagingmenu.cpp:409 #, qt-format msgid "%1 missed call" msgid_plural "%1 missed calls" msgstr[0] "" msgstr[1] "" #: indicator/messagingmenu.cpp:492 msgid "Voicemail messages" msgstr "" #: indicator/messagingmenu.cpp:495 #, qt-format msgid "%1 voicemail message" msgid_plural "%1 voicemail messages" msgstr[0] "" msgstr[1] "" #: indicator/messagingmenu.cpp:500 msgid "Voicemail" msgstr "" #: indicator/metrics.cpp:42 #, qt-format msgid "%1 text messages sent today" msgstr "" #: indicator/metrics.cpp:43 msgid "No text messages sent today" msgstr "" #: indicator/metrics.cpp:44 #, qt-format msgid "%1 text messages received today" msgstr "" #: indicator/metrics.cpp:45 msgid "No text messages received today" msgstr "" #: indicator/metrics.cpp:46 #, qt-format msgid "%1 calls received today" msgstr "" #: indicator/metrics.cpp:47 msgid "No calls received today" msgstr "" #: indicator/metrics.cpp:48 #, qt-format msgid "%1 calls made today" msgstr "" #: indicator/metrics.cpp:49 indicator/metrics.cpp:51 msgid "No calls made today" msgstr "" #: indicator/metrics.cpp:50 #, qt-format msgid "Spent %1 minutes in calls today" msgstr "" #: indicator/textchannelobserver.cpp:225 msgid "Unlock your sim card and try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:227 msgid "Deactivate flight mode and try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:230 msgid "Try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:236 msgid "The message could not be sent" msgstr "" #: indicator/textchannelobserver.cpp:249 indicator/textchannelobserver.cpp:713 msgid "View message" msgstr "" #: indicator/textchannelobserver.cpp:295 msgid "New Group" msgstr "" #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:302 #, qt-format msgid "You joined group %1 " msgstr "" #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:306 #, qt-format msgid "You joined group %1" msgstr "" #: indicator/textchannelobserver.cpp:309 msgid "You joined a new group" msgstr "" #: indicator/textchannelobserver.cpp:328 msgid "View Group" msgstr "" #: indicator/textchannelobserver.cpp:367 indicator/ussdindicator.cpp:116 msgid "Ok" msgstr "" #: indicator/textchannelobserver.cpp:373 msgid "Save" msgstr "" #: indicator/textchannelobserver.cpp:468 msgid "Emergency Alert" msgstr "" #: indicator/textchannelobserver.cpp:471 msgid "Emergency Alert: Extreme" msgstr "" #: indicator/textchannelobserver.cpp:474 msgid "Emergency Alert: Severe" msgstr "" #: indicator/textchannelobserver.cpp:477 msgid "Emergency Alert: Notice" msgstr "" #: indicator/textchannelobserver.cpp:482 msgid "AMBER Alert" msgstr "" #: indicator/textchannelobserver.cpp:485 msgid "Alert" msgstr "" #: indicator/textchannelobserver.cpp:531 msgid "Show alert" msgstr "" #: indicator/textchannelobserver.cpp:604 #, qt-format msgid "Attachment: %1 image" msgid_plural "Attachments: %1 images" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:606 #, qt-format msgid "Attachment: %1 video" msgid_plural "Attachments: %1 videos" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:608 #, qt-format msgid "Attachment: %1 contact" msgid_plural "Attachments: %1 contacts" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:610 #, qt-format msgid "Attachment: %1 audio clip" msgid_plural "Attachments: %1 audio clips" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:612 #, qt-format msgid "Attachment: %1 file" msgid_plural "Attachments: %1 files" msgstr[0] "" msgstr[1] "" #. TRANSLATORS : message displayed when any error occurred while receiving a MMS (case when cellular-data is off, or any downloading issue). Notify that there was a message, the user can find more about it in the messaging-app. #: indicator/textchannelobserver.cpp:615 msgid "New MMS message" msgstr "" #. TRANSLATORS : %1 is the recipient name #: indicator/textchannelobserver.cpp:679 indicator/textchannelobserver.cpp:683 #, qt-format msgid "Message to group from %1" msgstr "" #: indicator/textchannelobserver.cpp:749 #, qt-format msgid "Message from %1" msgstr "" #: indicator/textchannelobserver.cpp:910 msgid "Please, select a SIM card:" msgstr "" #: indicator/ussdindicator.cpp:119 msgid "Reply" msgstr "" #: indicator/ussdindicator.cpp:142 #, fuzzy msgid "Cancel" msgstr "Cancel" #: libtelephonyservice/callnotification.cpp:53 msgid "Conf call on hold" msgstr "" #: libtelephonyservice/callnotification.cpp:53 #, qt-format msgid "%1 call on hold" msgstr "" #: libtelephonyservice/callnotification.cpp:56 msgid "Conf call ended" msgstr "" #: libtelephonyservice/callnotification.cpp:56 #, qt-format msgid "%1 call ended" msgstr "" #: libtelephonyservice/callnotification.cpp:59 #, qt-format msgid "%1 call declined" msgstr "" #: libtelephonyservice/contactwatcher.cpp:157 msgid "Private Number" msgstr "" #: libtelephonyservice/contactwatcher.cpp:159 msgid "Unknown Number" msgstr "" telephony-service-0.5.3/po/pt.po000066400000000000000000000266251455543255600166160ustar00rootroot00000000000000# Portuguese translation for telephony-service # Copyright (c) 2014 Rosetta Contributors and Canonical Ltd 2014 # This file is distributed under the same license as the telephony-service package. # FIRST AUTHOR , 2014. # msgid "" msgstr "" "Project-Id-Version: telephony-service\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-12-16 17:03+0100\n" "PO-Revision-Date: 2023-02-07 21:41+0000\n" "Last-Translator: Ivo Xavier \n" "Language-Team: Portuguese \n" "Language: pt\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Generator: Weblate 4.16-dev\n" "X-Launchpad-Export-Date: 2017-01-04 06:03+0000\n" #: indicator/telephony-service-call.desktop.in:4 msgid "Phone Calls" msgstr "Chamadas telefónicas" #: indicator/telephony-service-sms.desktop.in:4 msgid "SMS" msgstr "SMS" #: approver/approver.cpp:66 msgid "Unknown caller" msgstr "Chamador desconhecido" #: approver/approver.cpp:94 msgid "I'm busy at the moment. I'll call later." msgstr "Estou ocupado neste momento. Ligo de volta mais tarde." #: approver/approver.cpp:95 msgid "I'm running late, on my way now." msgstr "Estou atrasado, já estou a ir." #: approver/approver.cpp:96 msgid "Please call me back later." msgstr "Por favor, telefone mais tarde." #: approver/approver.cpp:457 #, qt-format msgid "On [%1]" msgstr "Em [%1]" #: approver/approver.cpp:461 indicator/messagingmenu.cpp:414 msgid "Private number" msgstr "Número privado" #: approver/approver.cpp:464 indicator/messagingmenu.cpp:244 #: indicator/messagingmenu.cpp:418 indicator/textchannelobserver.cpp:640 msgid "Unknown number" msgstr "Número desconhecido" #: approver/approver.cpp:470 approver/approver.cpp:485 msgid "Caller number is not available" msgstr "Número desconhecido" #: approver/approver.cpp:476 msgid "Calling from private number" msgstr "A chamar de um número privado" #: approver/approver.cpp:479 msgid "Calling from unknown number" msgstr "A chamar de um número desconhecido" #: approver/approver.cpp:482 #, qt-format msgid "Calling from %1" msgstr "A chamar de %1" #: approver/approver.cpp:529 msgid "Hold + Answer" msgstr "Segurar + Responder" #: approver/approver.cpp:530 msgid "Accept" msgstr "Aceitar" #: approver/approver.cpp:543 msgid "End + Answer" msgstr "Fim + Resposta" #: approver/approver.cpp:552 msgid "Decline" msgstr "Recusar" #: approver/approver.cpp:560 msgid "Message & decline" msgstr "Mensagem e declinar" #: approver/main.cpp:46 msgid "Telephony Service Approver" msgstr "Aprovador de serviço telefónico" #: indicator/authhandler.cpp:72 msgid "Authentication failed. Do you want to review your credentials?" msgstr "Autenticação falhou. Deseja rever as suas credenciais?" #: indicator/authhandler.cpp:91 msgid "Yes" msgstr "Sim" #: indicator/authhandler.cpp:94 msgid "No" msgstr "Não" #: indicator/displaynamesettings.cpp:35 #, qt-format msgid "SIM %1" msgstr "SIM %1" #: indicator/main.cpp:53 msgid "Telephony Service Indicator" msgstr "Indicador de serviço telefónico" #: indicator/messagingmenu.cpp:83 indicator/messagingmenu.cpp:87 msgid "Telephony Service" msgstr "Serviço telefónico" #: indicator/messagingmenu.cpp:151 indicator/messagingmenu.cpp:293 #: indicator/messagingmenu.cpp:360 msgid "Send" msgstr "Enviar" #. TRANSLATORS : %1 is the group name and %2 is the recipient name #: indicator/messagingmenu.cpp:262 indicator/textchannelobserver.cpp:671 #: indicator/textchannelobserver.cpp:675 #, qt-format msgid "Message to %1 from %2" msgstr "Mensagem para %1de %2" #. TRANSLATORS : %1 is the recipient name #: indicator/messagingmenu.cpp:265 indicator/messagingmenu.cpp:269 #, qt-format msgid "Message to the group from %1" msgstr "Mensagem para o grupo de %1" #: indicator/messagingmenu.cpp:345 msgid "Call back" msgstr "Ligar de volta" #: indicator/messagingmenu.cpp:350 msgid "Missed your call — can you call me now?" msgstr "Não atendi a sua chamada — pode ligar agora?" #: indicator/messagingmenu.cpp:351 msgid "Running late. On my way." msgstr "Estou atrasado. Vou a caminho." #: indicator/messagingmenu.cpp:352 msgid "Busy at the moment. Will call you later." msgstr "De momento estou ocupado. Telefono mais tarde." #: indicator/messagingmenu.cpp:353 msgid "I am 20 minutes late." msgstr "Estou 20 minutos atrasado." #: indicator/messagingmenu.cpp:354 msgid "Still busy. Will call you later." msgstr "Ainda estou ocupado. Telefono mais tarde." #: indicator/messagingmenu.cpp:409 #, qt-format msgid "%1 missed call" msgid_plural "%1 missed calls" msgstr[0] "%1 chamada perdida" msgstr[1] "%1 chamadas perdidas" #: indicator/messagingmenu.cpp:492 msgid "Voicemail messages" msgstr "Mensagens voicemail" #: indicator/messagingmenu.cpp:495 #, qt-format msgid "%1 voicemail message" msgid_plural "%1 voicemail messages" msgstr[0] "%1 mensagem de voicemail" msgstr[1] "%1 mensagens de voicemail" #: indicator/messagingmenu.cpp:500 msgid "Voicemail" msgstr "Correio de voz" #: indicator/metrics.cpp:42 #, qt-format msgid "%1 text messages sent today" msgstr "%1 mensagens de texto enviadas hoje" #: indicator/metrics.cpp:43 msgid "No text messages sent today" msgstr "Sem mensagens de texto enviadas hoje" #: indicator/metrics.cpp:44 #, qt-format msgid "%1 text messages received today" msgstr "%1 mensagens de texto recebidas hoje" #: indicator/metrics.cpp:45 msgid "No text messages received today" msgstr "Sem mensagens de texto recebidas hoje" #: indicator/metrics.cpp:46 #, qt-format msgid "%1 calls received today" msgstr "%1 chamadas recebidas hoje" #: indicator/metrics.cpp:47 msgid "No calls received today" msgstr "Sem chamadas recebidas hoje" #: indicator/metrics.cpp:48 #, qt-format msgid "%1 calls made today" msgstr "%1 chamadas feitas hoje" #: indicator/metrics.cpp:49 indicator/metrics.cpp:51 msgid "No calls made today" msgstr "Sem chamadas feitas hoje" #: indicator/metrics.cpp:50 #, qt-format msgid "Spent %1 minutes in calls today" msgstr "Falou %1 minutos em chamadas hoje" #: indicator/textchannelobserver.cpp:225 msgid "Unlock your sim card and try again from the messaging application." msgstr "" "Desbloqueie o seu cartão SIM e tente novamente através da app mensagens." #: indicator/textchannelobserver.cpp:227 msgid "Deactivate flight mode and try again from the messaging application." msgstr "Desative o modo avião e tente novamente através da app mensagens." #: indicator/textchannelobserver.cpp:230 msgid "Try again from the messaging application." msgstr "Tente novamente através da app mensagens." #: indicator/textchannelobserver.cpp:236 msgid "The message could not be sent" msgstr "A mensagem não foi enviada" #: indicator/textchannelobserver.cpp:249 indicator/textchannelobserver.cpp:713 msgid "View message" msgstr "Ver mensagem" #: indicator/textchannelobserver.cpp:295 msgid "New Group" msgstr "Novo grupo" #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:302 #, qt-format msgid "You joined group %1 " msgstr "Juntou-se ao grupo %1 " #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:306 #, qt-format msgid "You joined group %1" msgstr "Juntou-se ao grupo %1" #: indicator/textchannelobserver.cpp:309 msgid "You joined a new group" msgstr "Juntou-se a um novo grupo" #: indicator/textchannelobserver.cpp:328 msgid "View Group" msgstr "Ver grupo" #: indicator/textchannelobserver.cpp:367 indicator/ussdindicator.cpp:116 msgid "Ok" msgstr "Ok" #: indicator/textchannelobserver.cpp:373 msgid "Save" msgstr "Guardar" #: indicator/textchannelobserver.cpp:468 msgid "Emergency Alert" msgstr "Alerta de Emergência" #: indicator/textchannelobserver.cpp:471 msgid "Emergency Alert: Extreme" msgstr "Alerta de Emergência: Extremo" #: indicator/textchannelobserver.cpp:474 msgid "Emergency Alert: Severe" msgstr "Alerta de Emergência: Grave" #: indicator/textchannelobserver.cpp:477 msgid "Emergency Alert: Notice" msgstr "Alerta de Emergência: Aviso" #: indicator/textchannelobserver.cpp:482 msgid "AMBER Alert" msgstr "Alerta de Emergência de Rapto de Criança" #: indicator/textchannelobserver.cpp:485 msgid "Alert" msgstr "Alerta" #: indicator/textchannelobserver.cpp:531 msgid "Show alert" msgstr "Mostrar alerta" #: indicator/textchannelobserver.cpp:604 #, qt-format msgid "Attachment: %1 image" msgid_plural "Attachments: %1 images" msgstr[0] "Anexo: %1 imagem" msgstr[1] "Anexos: %1 imagens" #: indicator/textchannelobserver.cpp:606 #, qt-format msgid "Attachment: %1 video" msgid_plural "Attachments: %1 videos" msgstr[0] "Anexo: %1 vídeo" msgstr[1] "Anexos: %1 vídeos" #: indicator/textchannelobserver.cpp:608 #, qt-format msgid "Attachment: %1 contact" msgid_plural "Attachments: %1 contacts" msgstr[0] "Anexo: %1 contacto" msgstr[1] "Anexos: %1 contactos" #: indicator/textchannelobserver.cpp:610 #, qt-format msgid "Attachment: %1 audio clip" msgid_plural "Attachments: %1 audio clips" msgstr[0] "Anexo: %1 clip de som" msgstr[1] "Anexos: %1 clips de som" #: indicator/textchannelobserver.cpp:612 #, qt-format msgid "Attachment: %1 file" msgid_plural "Attachments: %1 files" msgstr[0] "Anexo: %1 ficheiro" msgstr[1] "Anexos: %1 ficheiros" #. TRANSLATORS : message displayed when any error occurred while receiving a MMS (case when cellular-data is off, or any downloading issue). Notify that there was a message, the user can find more about it in the messaging-app. #: indicator/textchannelobserver.cpp:615 msgid "New MMS message" msgstr "Nova mensagem de MMS" #. TRANSLATORS : %1 is the recipient name #: indicator/textchannelobserver.cpp:679 indicator/textchannelobserver.cpp:683 #, qt-format msgid "Message to group from %1" msgstr "Mensagem para grupo de %1" #: indicator/textchannelobserver.cpp:749 #, qt-format msgid "Message from %1" msgstr "Mensagem de %1" #: indicator/textchannelobserver.cpp:910 msgid "Please, select a SIM card:" msgstr "Por favor, selecione um cartão SIM:" #: indicator/ussdindicator.cpp:119 msgid "Reply" msgstr "Responder" #: indicator/ussdindicator.cpp:142 msgid "Cancel" msgstr "Cancelar" #: libtelephonyservice/callnotification.cpp:53 msgid "Conf call on hold" msgstr "Chamada conferência em espera" #: libtelephonyservice/callnotification.cpp:53 #, qt-format msgid "%1 call on hold" msgstr "chamada %1 em espera" #: libtelephonyservice/callnotification.cpp:56 msgid "Conf call ended" msgstr "Chamada conferência terminada" #: libtelephonyservice/callnotification.cpp:56 #, qt-format msgid "%1 call ended" msgstr "chamada %1 terminada" #: libtelephonyservice/callnotification.cpp:59 #, qt-format msgid "%1 call declined" msgstr "chamada %1 rejeitada" #: libtelephonyservice/contactwatcher.cpp:157 msgid "Private Number" msgstr "Número privado" #: libtelephonyservice/contactwatcher.cpp:159 msgid "Unknown Number" msgstr "Número desconhecido" #~ msgid "telephony-service-call" #~ msgstr "chamar-serviço-telefónico" #~ msgid "telephony-service-message" #~ msgstr "mensagem-serviço-telefónico" #~ msgid "" #~ "Oops, there has been an error with the MMS system and this message could " #~ "not be retrieved. Please ensure Cellular Data is ON and MMS settings are " #~ "correct, then ask the sender to try again." #~ msgstr "" #~ "Ocorreu um erro com o sistema de MMS e esta mensagem não pode ser obtida. " #~ "Por favor, assegure que os Dados móveis estão ligados e as configurações " #~ "corretas. Depois peça ao remetente para enviar novamente." telephony-service-0.5.3/po/pt_BR.po000066400000000000000000000253241455543255600171740ustar00rootroot00000000000000# Brazilian Portuguese translation for telephony-service # Copyright (c) 2013 Canonical Ltd 2013 # This file is distributed under the same license as the telephony-service package. # FIRST AUTHOR , 2013. # msgid "" msgstr "" "Project-Id-Version: telephony-service\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-12-16 17:03+0100\n" "PO-Revision-Date: 2015-03-28 13:48+0000\n" "Last-Translator: Deyvison Rocha \n" "Language-Team: Brazilian Portuguese \n" "Language: pt_BR\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n > 1;\n" "X-Launchpad-Export-Date: 2017-01-04 06:03+0000\n" "X-Generator: Launchpad (build 18298)\n" #: indicator/telephony-service-call.desktop.in:4 msgid "Phone Calls" msgstr "Chamadas telefônicas" #: indicator/telephony-service-sms.desktop.in:4 msgid "SMS" msgstr "SMS" #: approver/approver.cpp:66 msgid "Unknown caller" msgstr "Contato desconhecido" #: approver/approver.cpp:94 msgid "I'm busy at the moment. I'll call later." msgstr "Eu estou ocupado no momento. Vou ligar mais tarde." #: approver/approver.cpp:95 msgid "I'm running late, on my way now." msgstr "Estou atrasado, a caminho agora." #: approver/approver.cpp:96 msgid "Please call me back later." msgstr "Por favor, me ligue de volta mais tarde." #: approver/approver.cpp:457 #, qt-format msgid "On [%1]" msgstr "" #: approver/approver.cpp:461 indicator/messagingmenu.cpp:414 msgid "Private number" msgstr "Número privado" #: approver/approver.cpp:464 indicator/messagingmenu.cpp:244 #: indicator/messagingmenu.cpp:418 indicator/textchannelobserver.cpp:640 msgid "Unknown number" msgstr "Número desconhecido" #: approver/approver.cpp:470 approver/approver.cpp:485 msgid "Caller number is not available" msgstr "Número não disponível" #: approver/approver.cpp:476 msgid "Calling from private number" msgstr "Chamando de um número privado" #: approver/approver.cpp:479 msgid "Calling from unknown number" msgstr "Chamando de um número desconhecido" #: approver/approver.cpp:482 #, qt-format msgid "Calling from %1" msgstr "Chamando de %1" #: approver/approver.cpp:529 msgid "Hold + Answer" msgstr "Segurar + Responder" #: approver/approver.cpp:530 msgid "Accept" msgstr "Aceitar" #: approver/approver.cpp:543 msgid "End + Answer" msgstr "Responder e finalizar" #: approver/approver.cpp:552 msgid "Decline" msgstr "Rejeitar" #: approver/approver.cpp:560 msgid "Message & decline" msgstr "Mensagem & Recusar" #: approver/main.cpp:46 msgid "Telephony Service Approver" msgstr "Aprovador do serviço de telefonia" #: indicator/authhandler.cpp:72 msgid "Authentication failed. Do you want to review your credentials?" msgstr "" #: indicator/authhandler.cpp:91 msgid "Yes" msgstr "" #: indicator/authhandler.cpp:94 msgid "No" msgstr "" #: indicator/displaynamesettings.cpp:35 #, qt-format msgid "SIM %1" msgstr "SIM %1" #: indicator/main.cpp:53 msgid "Telephony Service Indicator" msgstr "Indicador do serviço de telefonia" #: indicator/messagingmenu.cpp:83 indicator/messagingmenu.cpp:87 msgid "Telephony Service" msgstr "Serviço de telefonia" #: indicator/messagingmenu.cpp:151 indicator/messagingmenu.cpp:293 #: indicator/messagingmenu.cpp:360 msgid "Send" msgstr "Enviar" #. TRANSLATORS : %1 is the group name and %2 is the recipient name #: indicator/messagingmenu.cpp:262 indicator/textchannelobserver.cpp:671 #: indicator/textchannelobserver.cpp:675 #, qt-format msgid "Message to %1 from %2" msgstr "" #. TRANSLATORS : %1 is the recipient name #: indicator/messagingmenu.cpp:265 indicator/messagingmenu.cpp:269 #, fuzzy, qt-format #| msgid "Message from %1" msgid "Message to the group from %1" msgstr "Mensagem de %1" #: indicator/messagingmenu.cpp:345 msgid "Call back" msgstr "Ligar de volta" #: indicator/messagingmenu.cpp:350 #, fuzzy #| msgid "I missed your call - can you call me now?" msgid "Missed your call — can you call me now?" msgstr "Eu perdi sua ligação - você pode me ligar agora?" #: indicator/messagingmenu.cpp:351 #, fuzzy #| msgid "I'm running late. I'm on my way." msgid "Running late. On my way." msgstr "Eu estou atrasado. Eu estou a caminho." #: indicator/messagingmenu.cpp:352 #, fuzzy #| msgid "I'm busy at the moment. I'll call you later." msgid "Busy at the moment. Will call you later." msgstr "Estou ocupado no momento. Te ligo mais tarde." #: indicator/messagingmenu.cpp:353 #, fuzzy #| msgid "I'll be 20 minutes late." msgid "I am 20 minutes late." msgstr "Vou chegar 20 minutos atrasado." #: indicator/messagingmenu.cpp:354 #, fuzzy #| msgid "Sorry, I'm still busy. I'll call you later." msgid "Still busy. Will call you later." msgstr "Desculpe, ainda estou ocupado. Te ligo mais tarde." #: indicator/messagingmenu.cpp:409 #, qt-format msgid "%1 missed call" msgid_plural "%1 missed calls" msgstr[0] "%1 chamada perdida" msgstr[1] "%1 chamadas perdidas" #: indicator/messagingmenu.cpp:492 msgid "Voicemail messages" msgstr "Mensagens do correio de voz" #: indicator/messagingmenu.cpp:495 #, qt-format msgid "%1 voicemail message" msgid_plural "%1 voicemail messages" msgstr[0] "%1 mensagem de voz" msgstr[1] "%1 mensagens de voz" #: indicator/messagingmenu.cpp:500 msgid "Voicemail" msgstr "Correio de voz" #: indicator/metrics.cpp:42 #, qt-format msgid "%1 text messages sent today" msgstr "%1 mensagens enviadas hoje" #: indicator/metrics.cpp:43 msgid "No text messages sent today" msgstr "Nenhuma mensagem de texto enviada hoje" #: indicator/metrics.cpp:44 #, qt-format msgid "%1 text messages received today" msgstr "%1 mensagens de texto recebidas hoje" #: indicator/metrics.cpp:45 msgid "No text messages received today" msgstr "Nenhuma mensagem de texto recebida hoje" #: indicator/metrics.cpp:46 #, qt-format msgid "%1 calls received today" msgstr "%1 chamadas recebidas hoje" #: indicator/metrics.cpp:47 msgid "No calls received today" msgstr "Nenhuma chamada recebida hoje" #: indicator/metrics.cpp:48 #, qt-format msgid "%1 calls made today" msgstr "%1 chamadas realizadas hoje" #: indicator/metrics.cpp:49 indicator/metrics.cpp:51 msgid "No calls made today" msgstr "Nenhuma chamada realizada hoje" #: indicator/metrics.cpp:50 #, qt-format msgid "Spent %1 minutes in calls today" msgstr "%1 minutos gastos em chamadas hoje" #: indicator/textchannelobserver.cpp:225 msgid "Unlock your sim card and try again from the messaging application." msgstr "" "Desbloquear o cartão SIM e tentar novamente a partir do aplicativo de " "mensagens." #: indicator/textchannelobserver.cpp:227 msgid "Deactivate flight mode and try again from the messaging application." msgstr "" "Desative o modo de voo e tente novamente a partir do aplicativo de mensagens." #: indicator/textchannelobserver.cpp:230 msgid "Try again from the messaging application." msgstr "Tente novamente a partir do aplicativo de mensagens." #: indicator/textchannelobserver.cpp:236 msgid "The message could not be sent" msgstr "Não foi possível enviar a mensagem" #: indicator/textchannelobserver.cpp:249 indicator/textchannelobserver.cpp:713 msgid "View message" msgstr "Ver mensagem" #: indicator/textchannelobserver.cpp:295 msgid "New Group" msgstr "" #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:302 #, qt-format msgid "You joined group %1 " msgstr "" #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:306 #, qt-format msgid "You joined group %1" msgstr "" #: indicator/textchannelobserver.cpp:309 msgid "You joined a new group" msgstr "" #: indicator/textchannelobserver.cpp:328 msgid "View Group" msgstr "" #: indicator/textchannelobserver.cpp:367 indicator/ussdindicator.cpp:116 msgid "Ok" msgstr "Ok" #: indicator/textchannelobserver.cpp:373 msgid "Save" msgstr "Salvar" #: indicator/textchannelobserver.cpp:468 msgid "Emergency Alert" msgstr "" #: indicator/textchannelobserver.cpp:471 msgid "Emergency Alert: Extreme" msgstr "" #: indicator/textchannelobserver.cpp:474 msgid "Emergency Alert: Severe" msgstr "" #: indicator/textchannelobserver.cpp:477 msgid "Emergency Alert: Notice" msgstr "" #: indicator/textchannelobserver.cpp:482 msgid "AMBER Alert" msgstr "" #: indicator/textchannelobserver.cpp:485 msgid "Alert" msgstr "" #: indicator/textchannelobserver.cpp:531 msgid "Show alert" msgstr "" #: indicator/textchannelobserver.cpp:604 #, qt-format msgid "Attachment: %1 image" msgid_plural "Attachments: %1 images" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:606 #, qt-format msgid "Attachment: %1 video" msgid_plural "Attachments: %1 videos" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:608 #, qt-format msgid "Attachment: %1 contact" msgid_plural "Attachments: %1 contacts" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:610 #, qt-format msgid "Attachment: %1 audio clip" msgid_plural "Attachments: %1 audio clips" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:612 #, qt-format msgid "Attachment: %1 file" msgid_plural "Attachments: %1 files" msgstr[0] "" msgstr[1] "" #. TRANSLATORS : message displayed when any error occurred while receiving a MMS (case when cellular-data is off, or any downloading issue). Notify that there was a message, the user can find more about it in the messaging-app. #: indicator/textchannelobserver.cpp:615 #, fuzzy #| msgid "View message" msgid "New MMS message" msgstr "Ver mensagem" #. TRANSLATORS : %1 is the recipient name #: indicator/textchannelobserver.cpp:679 indicator/textchannelobserver.cpp:683 #, qt-format msgid "Message to group from %1" msgstr "" #: indicator/textchannelobserver.cpp:749 #, qt-format msgid "Message from %1" msgstr "Mensagem de %1" #: indicator/textchannelobserver.cpp:910 msgid "Please, select a SIM card:" msgstr "Por favor, selecione um cartão SIM:" #: indicator/ussdindicator.cpp:119 msgid "Reply" msgstr "Responder" #: indicator/ussdindicator.cpp:142 msgid "Cancel" msgstr "Cancelar" #: libtelephonyservice/callnotification.cpp:53 msgid "Conf call on hold" msgstr "" #: libtelephonyservice/callnotification.cpp:53 #, qt-format msgid "%1 call on hold" msgstr "" #: libtelephonyservice/callnotification.cpp:56 msgid "Conf call ended" msgstr "" #: libtelephonyservice/callnotification.cpp:56 #, qt-format msgid "%1 call ended" msgstr "" #: libtelephonyservice/callnotification.cpp:59 #, qt-format msgid "%1 call declined" msgstr "" #: libtelephonyservice/contactwatcher.cpp:157 msgid "Private Number" msgstr "Número privado" #: libtelephonyservice/contactwatcher.cpp:159 msgid "Unknown Number" msgstr "Número desconhecido" #, fuzzy #~| msgid "Telephony Service" #~ msgid "telephony-service-call" #~ msgstr "Serviço de telefonia" #, fuzzy #~| msgid "Telephony Service" #~ msgid "telephony-service-message" #~ msgstr "Serviço de telefonia" telephony-service-0.5.3/po/ro.po000066400000000000000000000255411455543255600166070ustar00rootroot00000000000000# Romanian translation for telephony-service # Copyright (c) 2014 Rosetta Contributors and Canonical Ltd 2014 # This file is distributed under the same license as the telephony-service package. # FIRST AUTHOR , 2014. # msgid "" msgstr "" "Project-Id-Version: telephony-service\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-12-16 17:03+0100\n" "PO-Revision-Date: 2015-02-08 17:04+0000\n" "Last-Translator: Marian Vasile \n" "Language-Team: Romanian \n" "Language: ro\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n == 1 ? 0: (((n % 100 > 19) || ((n % 100 " "== 0) && (n != 0))) ? 2: 1));\n" "X-Launchpad-Export-Date: 2017-01-04 06:03+0000\n" "X-Generator: Launchpad (build 18298)\n" #: indicator/telephony-service-call.desktop.in:4 msgid "Phone Calls" msgstr "Apeluri telefonice" #: indicator/telephony-service-sms.desktop.in:4 msgid "SMS" msgstr "SMS" #: approver/approver.cpp:66 msgid "Unknown caller" msgstr "Apelant necunoscut" #: approver/approver.cpp:94 msgid "I'm busy at the moment. I'll call later." msgstr "Momentan sunt ocupat. Vă sun mai târziu." #: approver/approver.cpp:95 msgid "I'm running late, on my way now." msgstr "Sunt înîntârziere, sunt pe drum acum." #: approver/approver.cpp:96 msgid "Please call me back later." msgstr "Vă rog să mă sunați înapoi mai târziu." #: approver/approver.cpp:457 #, qt-format msgid "On [%1]" msgstr "" #: approver/approver.cpp:461 indicator/messagingmenu.cpp:414 msgid "Private number" msgstr "Număr privat" #: approver/approver.cpp:464 indicator/messagingmenu.cpp:244 #: indicator/messagingmenu.cpp:418 indicator/textchannelobserver.cpp:640 msgid "Unknown number" msgstr "Număr necunoscut" #: approver/approver.cpp:470 approver/approver.cpp:485 msgid "Caller number is not available" msgstr "Numărul apelantului nu este disponibil" #: approver/approver.cpp:476 msgid "Calling from private number" msgstr "Apel de la un număr privat" #: approver/approver.cpp:479 msgid "Calling from unknown number" msgstr "Apel de la un număr necunoscut" #: approver/approver.cpp:482 #, qt-format msgid "Calling from %1" msgstr "Apel de la %1" #: approver/approver.cpp:529 msgid "Hold + Answer" msgstr "Reține + Răspunde" #: approver/approver.cpp:530 msgid "Accept" msgstr "Accept" #: approver/approver.cpp:543 msgid "End + Answer" msgstr "Sfârșit + Răspuns" #: approver/approver.cpp:552 msgid "Decline" msgstr "Refuz" #: approver/approver.cpp:560 msgid "Message & decline" msgstr "Mesaj & respingere" #: approver/main.cpp:46 msgid "Telephony Service Approver" msgstr "Aprobator serviciu de telefonie" #: indicator/authhandler.cpp:72 msgid "Authentication failed. Do you want to review your credentials?" msgstr "" #: indicator/authhandler.cpp:91 msgid "Yes" msgstr "" #: indicator/authhandler.cpp:94 msgid "No" msgstr "" #: indicator/displaynamesettings.cpp:35 #, qt-format msgid "SIM %1" msgstr "SIM %1" #: indicator/main.cpp:53 msgid "Telephony Service Indicator" msgstr "Indicator serviciu de telefonie" #: indicator/messagingmenu.cpp:83 indicator/messagingmenu.cpp:87 msgid "Telephony Service" msgstr "Serviciu de telefonie" #: indicator/messagingmenu.cpp:151 indicator/messagingmenu.cpp:293 #: indicator/messagingmenu.cpp:360 msgid "Send" msgstr "Trimiteți" #. TRANSLATORS : %1 is the group name and %2 is the recipient name #: indicator/messagingmenu.cpp:262 indicator/textchannelobserver.cpp:671 #: indicator/textchannelobserver.cpp:675 #, qt-format msgid "Message to %1 from %2" msgstr "" #. TRANSLATORS : %1 is the recipient name #: indicator/messagingmenu.cpp:265 indicator/messagingmenu.cpp:269 #, fuzzy, qt-format #| msgid "Message to group from %1" msgid "Message to the group from %1" msgstr "Mesaje către grup de la %1" #: indicator/messagingmenu.cpp:345 msgid "Call back" msgstr "Apelează inapoi" #: indicator/messagingmenu.cpp:350 #, fuzzy #| msgid "I missed your call - can you call me now?" msgid "Missed your call — can you call me now?" msgstr "Am pierdut apelul dumneavoastră - Vă pot suna acum?" #: indicator/messagingmenu.cpp:351 #, fuzzy #| msgid "I'm running late. I'm on my way." msgid "Running late. On my way." msgstr "Sunt în întârziere. Sunt deja pe drum." #: indicator/messagingmenu.cpp:352 #, fuzzy #| msgid "I'm busy at the moment. I'll call you later." msgid "Busy at the moment. Will call you later." msgstr "Acum sunt ocupat. Voi suna mai târziu." #: indicator/messagingmenu.cpp:353 #, fuzzy #| msgid "I'll be 20 minutes late." msgid "I am 20 minutes late." msgstr "Voi întârzia 20 de minute." #: indicator/messagingmenu.cpp:354 #, fuzzy #| msgid "Sorry, I'm still busy. I'll call you later." msgid "Still busy. Will call you later." msgstr "Îmi pare rău, sunt în continuare ocupat. Voi suna mai târziu." #: indicator/messagingmenu.cpp:409 #, qt-format msgid "%1 missed call" msgid_plural "%1 missed calls" msgstr[0] "%1 apel pierdut" msgstr[1] "%1 apeluri pierdute" msgstr[2] "%1 de apeluri pierdute" #: indicator/messagingmenu.cpp:492 msgid "Voicemail messages" msgstr "Mesaje vocale" #: indicator/messagingmenu.cpp:495 #, qt-format msgid "%1 voicemail message" msgid_plural "%1 voicemail messages" msgstr[0] "%1 mesaj vocal" msgstr[1] "%1 mesaje vocale" msgstr[2] "%1 de mesaje vocale" #: indicator/messagingmenu.cpp:500 msgid "Voicemail" msgstr "Mesagerie vocală" #: indicator/metrics.cpp:42 #, qt-format msgid "%1 text messages sent today" msgstr "%1 mesaje text trimise astăzi" #: indicator/metrics.cpp:43 msgid "No text messages sent today" msgstr "Niciun mesaj text trimis astăzi" #: indicator/metrics.cpp:44 #, qt-format msgid "%1 text messages received today" msgstr "%1 mesaje text primite astăzi" #: indicator/metrics.cpp:45 msgid "No text messages received today" msgstr "Niciun mesaj text primit astăzi" #: indicator/metrics.cpp:46 #, qt-format msgid "%1 calls received today" msgstr "%1 apeluri primite astăzi" #: indicator/metrics.cpp:47 msgid "No calls received today" msgstr "Niciun apel primit astăzi" #: indicator/metrics.cpp:48 #, qt-format msgid "%1 calls made today" msgstr "%1 apeluri efectuate astăzi" #: indicator/metrics.cpp:49 indicator/metrics.cpp:51 msgid "No calls made today" msgstr "Niciun apel efectuat astăzi" #: indicator/metrics.cpp:50 #, qt-format msgid "Spent %1 minutes in calls today" msgstr "Astăzi ați consumat în apeluri %1 minute" #: indicator/textchannelobserver.cpp:225 msgid "Unlock your sim card and try again from the messaging application." msgstr "Deblocați cartela SIM și încercați din nou din aplicația de mesagerie." #: indicator/textchannelobserver.cpp:227 msgid "Deactivate flight mode and try again from the messaging application." msgstr "" "Dezactivați modul avion și încercați din nou din aplicația de mesagerie." #: indicator/textchannelobserver.cpp:230 msgid "Try again from the messaging application." msgstr "Încercați din nou din aplicația de mesagerie" #: indicator/textchannelobserver.cpp:236 msgid "The message could not be sent" msgstr "Mesajul nu a putut fi trimis" #: indicator/textchannelobserver.cpp:249 indicator/textchannelobserver.cpp:713 msgid "View message" msgstr "Vizualizare mesaj" #: indicator/textchannelobserver.cpp:295 msgid "New Group" msgstr "" #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:302 #, qt-format msgid "You joined group %1 " msgstr "" #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:306 #, qt-format msgid "You joined group %1" msgstr "" #: indicator/textchannelobserver.cpp:309 msgid "You joined a new group" msgstr "" #: indicator/textchannelobserver.cpp:328 msgid "View Group" msgstr "" #: indicator/textchannelobserver.cpp:367 indicator/ussdindicator.cpp:116 msgid "Ok" msgstr "În regulă" #: indicator/textchannelobserver.cpp:373 msgid "Save" msgstr "Salvează" #: indicator/textchannelobserver.cpp:468 msgid "Emergency Alert" msgstr "" #: indicator/textchannelobserver.cpp:471 msgid "Emergency Alert: Extreme" msgstr "" #: indicator/textchannelobserver.cpp:474 msgid "Emergency Alert: Severe" msgstr "" #: indicator/textchannelobserver.cpp:477 msgid "Emergency Alert: Notice" msgstr "" #: indicator/textchannelobserver.cpp:482 msgid "AMBER Alert" msgstr "" #: indicator/textchannelobserver.cpp:485 msgid "Alert" msgstr "" #: indicator/textchannelobserver.cpp:531 msgid "Show alert" msgstr "" #: indicator/textchannelobserver.cpp:604 #, qt-format msgid "Attachment: %1 image" msgid_plural "Attachments: %1 images" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:606 #, qt-format msgid "Attachment: %1 video" msgid_plural "Attachments: %1 videos" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:608 #, qt-format msgid "Attachment: %1 contact" msgid_plural "Attachments: %1 contacts" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:610 #, qt-format msgid "Attachment: %1 audio clip" msgid_plural "Attachments: %1 audio clips" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:612 #, qt-format msgid "Attachment: %1 file" msgid_plural "Attachments: %1 files" msgstr[0] "" msgstr[1] "" #. TRANSLATORS : message displayed when any error occurred while receiving a MMS (case when cellular-data is off, or any downloading issue). Notify that there was a message, the user can find more about it in the messaging-app. #: indicator/textchannelobserver.cpp:615 #, fuzzy #| msgid "View message" msgid "New MMS message" msgstr "Vizualizare mesaj" #. TRANSLATORS : %1 is the recipient name #: indicator/textchannelobserver.cpp:679 indicator/textchannelobserver.cpp:683 #, qt-format msgid "Message to group from %1" msgstr "Mesaje către grup de la %1" #: indicator/textchannelobserver.cpp:749 #, qt-format msgid "Message from %1" msgstr "Mesaj de la %1" #: indicator/textchannelobserver.cpp:910 msgid "Please, select a SIM card:" msgstr "Selectați un card SIM:" #: indicator/ussdindicator.cpp:119 msgid "Reply" msgstr "Răspuns" #: indicator/ussdindicator.cpp:142 msgid "Cancel" msgstr "Anulează" #: libtelephonyservice/callnotification.cpp:53 msgid "Conf call on hold" msgstr "" #: libtelephonyservice/callnotification.cpp:53 #, qt-format msgid "%1 call on hold" msgstr "" #: libtelephonyservice/callnotification.cpp:56 msgid "Conf call ended" msgstr "" #: libtelephonyservice/callnotification.cpp:56 #, qt-format msgid "%1 call ended" msgstr "" #: libtelephonyservice/callnotification.cpp:59 #, qt-format msgid "%1 call declined" msgstr "" #: libtelephonyservice/contactwatcher.cpp:157 msgid "Private Number" msgstr "Număr privat" #: libtelephonyservice/contactwatcher.cpp:159 msgid "Unknown Number" msgstr "Număr necunoscut" #, fuzzy #~| msgid "Telephony Service" #~ msgid "telephony-service-call" #~ msgstr "Serviciu de telefonie" #, fuzzy #~| msgid "Telephony Service" #~ msgid "telephony-service-message" #~ msgstr "Serviciu de telefonie" telephony-service-0.5.3/po/ru.po000066400000000000000000000331631455543255600166140ustar00rootroot00000000000000# Russian translation for telephony-service # Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013 # This file is distributed under the same license as the telephony-service package. # FIRST AUTHOR , 2013. # msgid "" msgstr "" "Project-Id-Version: telephony-service\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-12-16 17:03+0100\n" "PO-Revision-Date: 2023-02-20 15:37+0000\n" "Last-Translator: Sergii Horichenko \n" "Language-Team: Russian \n" "Language: ru\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && " "n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" "X-Generator: Weblate 4.16-dev\n" "X-Launchpad-Export-Date: 2017-01-04 06:03+0000\n" #: indicator/telephony-service-call.desktop.in:4 msgid "Phone Calls" msgstr "Вызовы" #: indicator/telephony-service-sms.desktop.in:4 msgid "SMS" msgstr "СМС" #: approver/approver.cpp:66 msgid "Unknown caller" msgstr "Неизвестный вызов" #: approver/approver.cpp:94 msgid "I'm busy at the moment. I'll call later." msgstr "В данный момент я занят. Перезвоню позже." #: approver/approver.cpp:95 msgid "I'm running late, on my way now." msgstr "Задерживаюсь, уже еду." #: approver/approver.cpp:96 msgid "Please call me back later." msgstr "Пожалуйста, перезвоните мне позже." #: approver/approver.cpp:457 #, qt-format msgid "On [%1]" msgstr "На [%1]" #: approver/approver.cpp:461 indicator/messagingmenu.cpp:414 msgid "Private number" msgstr "Скрытый номер" #: approver/approver.cpp:464 indicator/messagingmenu.cpp:244 #: indicator/messagingmenu.cpp:418 indicator/textchannelobserver.cpp:640 msgid "Unknown number" msgstr "Неизвестный номер" #: approver/approver.cpp:470 approver/approver.cpp:485 msgid "Caller number is not available" msgstr "Номер абонента не доступен" #: approver/approver.cpp:476 msgid "Calling from private number" msgstr "Приватный вызов" #: approver/approver.cpp:479 msgid "Calling from unknown number" msgstr "Звонок с неизвестного номера" #: approver/approver.cpp:482 #, qt-format msgid "Calling from %1" msgstr "Вызов от %1" #: approver/approver.cpp:529 msgid "Hold + Answer" msgstr "Удерживать + Ответить" #: approver/approver.cpp:530 msgid "Accept" msgstr "Принять" #: approver/approver.cpp:543 msgid "End + Answer" msgstr "Завершить + Ответить" #: approver/approver.cpp:552 msgid "Decline" msgstr "Отклонить" #: approver/approver.cpp:560 msgid "Message & decline" msgstr "Сообщение и отклонить" #: approver/main.cpp:46 msgid "Telephony Service Approver" msgstr "Учредитель службы телефонии" #: indicator/authhandler.cpp:72 msgid "Authentication failed. Do you want to review your credentials?" msgstr "Неудачная аутентификация. Хотите проверить учётные данные?" #: indicator/authhandler.cpp:91 msgid "Yes" msgstr "Да" #: indicator/authhandler.cpp:94 msgid "No" msgstr "Нет" #: indicator/displaynamesettings.cpp:35 #, qt-format msgid "SIM %1" msgstr "SIM %1" #: indicator/main.cpp:53 msgid "Telephony Service Indicator" msgstr "Индикатор службы телефонии" #: indicator/messagingmenu.cpp:83 indicator/messagingmenu.cpp:87 msgid "Telephony Service" msgstr "Служба телефонии" #: indicator/messagingmenu.cpp:151 indicator/messagingmenu.cpp:293 #: indicator/messagingmenu.cpp:360 msgid "Send" msgstr "Отправить" #. TRANSLATORS : %1 is the group name and %2 is the recipient name #: indicator/messagingmenu.cpp:262 indicator/textchannelobserver.cpp:671 #: indicator/textchannelobserver.cpp:675 #, qt-format msgid "Message to %1 from %2" msgstr "Сообщение в адрес %1 от %2" #. TRANSLATORS : %1 is the recipient name #: indicator/messagingmenu.cpp:265 indicator/messagingmenu.cpp:269 #, qt-format msgid "Message to the group from %1" msgstr "Сообщение в группу от %1" #: indicator/messagingmenu.cpp:345 msgid "Call back" msgstr "Перезвонить" #: indicator/messagingmenu.cpp:350 msgid "Missed your call — can you call me now?" msgstr "У меня пропущен Ваш звонок. Не могли бы Вы перезвонить сейчас?" #: indicator/messagingmenu.cpp:351 msgid "Running late. On my way." msgstr "Опаздываю. В пути." #: indicator/messagingmenu.cpp:352 msgid "Busy at the moment. Will call you later." msgstr "В данный момент я не могу говорить. Перезвоню Вам позже." #: indicator/messagingmenu.cpp:353 msgid "I am 20 minutes late." msgstr "Я опаздываю на 20 минут." #: indicator/messagingmenu.cpp:354 msgid "Still busy. Will call you later." msgstr "Всё еще не могу говорить. Перезвоню Вам позже." #: indicator/messagingmenu.cpp:409 #, qt-format msgid "%1 missed call" msgid_plural "%1 missed calls" msgstr[0] "%1 пропущенный вызов" msgstr[1] "%1 пропущенных вызова" msgstr[2] "%1 пропущенных вызовов" #: indicator/messagingmenu.cpp:492 msgid "Voicemail messages" msgstr "Голосовые сообщения" #: indicator/messagingmenu.cpp:495 #, qt-format msgid "%1 voicemail message" msgid_plural "%1 voicemail messages" msgstr[0] "%1 голосовое сообщение" msgstr[1] "%1 голосовых сообщения" msgstr[2] "%1 голосовых сообщений" #: indicator/messagingmenu.cpp:500 msgid "Voicemail" msgstr "Голосовая почта" #: indicator/metrics.cpp:42 #, qt-format msgid "%1 text messages sent today" msgstr "%1 отправлено сообщений сегодня" #: indicator/metrics.cpp:43 msgid "No text messages sent today" msgstr "Нет отправленных сообщений сегодня" #: indicator/metrics.cpp:44 #, qt-format msgid "%1 text messages received today" msgstr "%1 получено сообщений сегодня" #: indicator/metrics.cpp:45 msgid "No text messages received today" msgstr "Нет полученных сообщений сегодня" #: indicator/metrics.cpp:46 #, qt-format msgid "%1 calls received today" msgstr "%1 входящих вызовов сегодня" #: indicator/metrics.cpp:47 msgid "No calls received today" msgstr "Нет входящих сегодня" #: indicator/metrics.cpp:48 #, qt-format msgid "%1 calls made today" msgstr "%1 исходящих вызовов сегодня" #: indicator/metrics.cpp:49 indicator/metrics.cpp:51 msgid "No calls made today" msgstr "Нет исходящих сегодня" #: indicator/metrics.cpp:50 #, qt-format msgid "Spent %1 minutes in calls today" msgstr "Продолжительность вызовов сегодня: %1 минут" #: indicator/textchannelobserver.cpp:225 msgid "Unlock your sim card and try again from the messaging application." msgstr "Разблокируйте SIM-карту и попробуйте отправить сообщение снова." #: indicator/textchannelobserver.cpp:227 msgid "Deactivate flight mode and try again from the messaging application." msgstr "Отключите режим \"В полёте\" и попробуйте отправить сообщение снова." #: indicator/textchannelobserver.cpp:230 msgid "Try again from the messaging application." msgstr "Попробуйте отправить сообщение снова." #: indicator/textchannelobserver.cpp:236 msgid "The message could not be sent" msgstr "Сообщение не может быть отправлено" #: indicator/textchannelobserver.cpp:249 indicator/textchannelobserver.cpp:713 msgid "View message" msgstr "Показать сообщение" #: indicator/textchannelobserver.cpp:295 msgid "New Group" msgstr "Новая группа" #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:302 #, qt-format msgid "You joined group %1 " msgstr "Вы присоединились к группе %1 " #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:306 #, qt-format msgid "You joined group %1" msgstr "Вы присоединились к группе %1" #: indicator/textchannelobserver.cpp:309 msgid "You joined a new group" msgstr "Вы присоединились к новой группе" #: indicator/textchannelobserver.cpp:328 msgid "View Group" msgstr "Посмотреть группу" #: indicator/textchannelobserver.cpp:367 indicator/ussdindicator.cpp:116 msgid "Ok" msgstr "ОК" #: indicator/textchannelobserver.cpp:373 msgid "Save" msgstr "Сохранить" #: indicator/textchannelobserver.cpp:468 msgid "Emergency Alert" msgstr "Аварийное оповещение" #: indicator/textchannelobserver.cpp:471 msgid "Emergency Alert: Extreme" msgstr "Аварийное оповещение: Экстремальное" #: indicator/textchannelobserver.cpp:474 msgid "Emergency Alert: Severe" msgstr "Аварийное оповещение: Cерьёзное" #: indicator/textchannelobserver.cpp:477 msgid "Emergency Alert: Notice" msgstr "Аварийное оповещение: Уведомление" #: indicator/textchannelobserver.cpp:482 msgid "AMBER Alert" msgstr "Оповещение AMBER" #: indicator/textchannelobserver.cpp:485 msgid "Alert" msgstr "Оповещение" #: indicator/textchannelobserver.cpp:531 msgid "Show alert" msgstr "Показывать оповещение" #: indicator/textchannelobserver.cpp:604 #, qt-format msgid "Attachment: %1 image" msgid_plural "Attachments: %1 images" msgstr[0] "Приложение: %1 изображение" msgstr[1] "Приложение: %1 изображения" msgstr[2] "Приложение: %1 изображений" #: indicator/textchannelobserver.cpp:606 #, qt-format msgid "Attachment: %1 video" msgid_plural "Attachments: %1 videos" msgstr[0] "Вложение: %1 видео" msgstr[1] "Вложения: %1 видео" msgstr[2] "Вложения: %1 видео" #: indicator/textchannelobserver.cpp:608 #, qt-format msgid "Attachment: %1 contact" msgid_plural "Attachments: %1 contacts" msgstr[0] "Приложение: %1 контакт" msgstr[1] "Приложение: %1 контактов" msgstr[2] "Приложение: %1 контактов" #: indicator/textchannelobserver.cpp:610 #, qt-format msgid "Attachment: %1 audio clip" msgid_plural "Attachments: %1 audio clips" msgstr[0] "Вложение: %1 аудио файл" msgstr[1] "Вложения: %1 аудио файлов" msgstr[2] "Вложения: %1 аудио файлов" #: indicator/textchannelobserver.cpp:612 #, qt-format msgid "Attachment: %1 file" msgid_plural "Attachments: %1 files" msgstr[0] "Приложение: %1 файл" msgstr[1] "Приложение: %1 файла" msgstr[2] "Приложение: %1 файлов" #. TRANSLATORS : message displayed when any error occurred while receiving a MMS (case when cellular-data is off, or any downloading issue). Notify that there was a message, the user can find more about it in the messaging-app. #: indicator/textchannelobserver.cpp:615 msgid "New MMS message" msgstr "Новое MMS-сообщение" #. TRANSLATORS : %1 is the recipient name #: indicator/textchannelobserver.cpp:679 indicator/textchannelobserver.cpp:683 #, qt-format msgid "Message to group from %1" msgstr "Сообщение группе от %1" #: indicator/textchannelobserver.cpp:749 #, qt-format msgid "Message from %1" msgstr "Сообщение от %1" #: indicator/textchannelobserver.cpp:910 msgid "Please, select a SIM card:" msgstr "Укажите SIM-карту:" #: indicator/ussdindicator.cpp:119 msgid "Reply" msgstr "Ответить" #: indicator/ussdindicator.cpp:142 msgid "Cancel" msgstr "Отмена" #: libtelephonyservice/callnotification.cpp:53 msgid "Conf call on hold" msgstr "Конференц-звонок на удержании" #: libtelephonyservice/callnotification.cpp:53 #, qt-format msgid "%1 call on hold" msgstr "Звонок %1 на удержании" #: libtelephonyservice/callnotification.cpp:56 msgid "Conf call ended" msgstr "Конференц-звонок завершен" #: libtelephonyservice/callnotification.cpp:56 #, qt-format msgid "%1 call ended" msgstr "Вызов %1 завершен" #: libtelephonyservice/callnotification.cpp:59 #, qt-format msgid "%1 call declined" msgstr "Вызов %1 отклонен" #: libtelephonyservice/contactwatcher.cpp:157 msgid "Private Number" msgstr "Скрытый номер" #: libtelephonyservice/contactwatcher.cpp:159 msgid "Unknown Number" msgstr "Неизвестный номер" #~ msgid "telephony-service-call" #~ msgstr "telephony-service-call" #~ msgid "telephony-service-message" #~ msgstr "telephony-service-message" #~ msgid "" #~ "Oops, there has been an error with the MMS system and this message could " #~ "not be retrieved. Please ensure Cellular Data is ON and MMS settings are " #~ "correct, then ask the sender to try again." #~ msgstr "" #~ "К сожалению, в системе MMS произошла ошибка, и это сообщение не может " #~ "быть получено. Убедитесь, что сотовые данные включены и настройки MMS " #~ "верны, а затем попросите отправителя повторить попытку." telephony-service-0.5.3/po/sa.po000066400000000000000000000212111455543255600165600ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR Canonical Ltd. # This file is distributed under the same license as the telephony-service package. # FIRST AUTHOR , YEAR. # msgid "" msgstr "" "Project-Id-Version: telephony-service\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-12-16 17:03+0100\n" "PO-Revision-Date: 2023-07-07 11:52+0000\n" "Last-Translator: \"Rudra Harsh V.Singh\" \n" "Language-Team: Sanskrit \n" "Language: sa\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=n==1 ? 0 : n==2 ? 1 : 2;\n" "X-Generator: Weblate 5.0-dev\n" #: indicator/telephony-service-call.desktop.in:4 msgid "Phone Calls" msgstr "" #: indicator/telephony-service-sms.desktop.in:4 msgid "SMS" msgstr "" #: approver/approver.cpp:66 msgid "Unknown caller" msgstr "" #: approver/approver.cpp:94 msgid "I'm busy at the moment. I'll call later." msgstr "" #: approver/approver.cpp:95 msgid "I'm running late, on my way now." msgstr "" #: approver/approver.cpp:96 msgid "Please call me back later." msgstr "" #: approver/approver.cpp:457 #, qt-format msgid "On [%1]" msgstr "" #: approver/approver.cpp:461 indicator/messagingmenu.cpp:414 msgid "Private number" msgstr "" #: approver/approver.cpp:464 indicator/messagingmenu.cpp:244 #: indicator/messagingmenu.cpp:418 indicator/textchannelobserver.cpp:640 msgid "Unknown number" msgstr "" #: approver/approver.cpp:470 approver/approver.cpp:485 msgid "Caller number is not available" msgstr "" #: approver/approver.cpp:476 msgid "Calling from private number" msgstr "" #: approver/approver.cpp:479 msgid "Calling from unknown number" msgstr "" #: approver/approver.cpp:482 #, qt-format msgid "Calling from %1" msgstr "" #: approver/approver.cpp:529 msgid "Hold + Answer" msgstr "" #: approver/approver.cpp:530 msgid "Accept" msgstr "" #: approver/approver.cpp:543 msgid "End + Answer" msgstr "" #: approver/approver.cpp:552 msgid "Decline" msgstr "" #: approver/approver.cpp:560 msgid "Message & decline" msgstr "" #: approver/main.cpp:46 msgid "Telephony Service Approver" msgstr "" #: indicator/authhandler.cpp:72 msgid "Authentication failed. Do you want to review your credentials?" msgstr "" #: indicator/authhandler.cpp:91 msgid "Yes" msgstr "" #: indicator/authhandler.cpp:94 msgid "No" msgstr "" #: indicator/displaynamesettings.cpp:35 #, qt-format msgid "SIM %1" msgstr "" #: indicator/main.cpp:53 msgid "Telephony Service Indicator" msgstr "" #: indicator/messagingmenu.cpp:83 indicator/messagingmenu.cpp:87 msgid "Telephony Service" msgstr "" #: indicator/messagingmenu.cpp:151 indicator/messagingmenu.cpp:293 #: indicator/messagingmenu.cpp:360 msgid "Send" msgstr "" #. TRANSLATORS : %1 is the group name and %2 is the recipient name #: indicator/messagingmenu.cpp:262 indicator/textchannelobserver.cpp:671 #: indicator/textchannelobserver.cpp:675 #, qt-format msgid "Message to %1 from %2" msgstr "" #. TRANSLATORS : %1 is the recipient name #: indicator/messagingmenu.cpp:265 indicator/messagingmenu.cpp:269 #, qt-format msgid "Message to the group from %1" msgstr "" #: indicator/messagingmenu.cpp:345 msgid "Call back" msgstr "" #: indicator/messagingmenu.cpp:350 msgid "Missed your call — can you call me now?" msgstr "" #: indicator/messagingmenu.cpp:351 msgid "Running late. On my way." msgstr "" #: indicator/messagingmenu.cpp:352 msgid "Busy at the moment. Will call you later." msgstr "" #: indicator/messagingmenu.cpp:353 msgid "I am 20 minutes late." msgstr "" #: indicator/messagingmenu.cpp:354 msgid "Still busy. Will call you later." msgstr "" #: indicator/messagingmenu.cpp:409 #, qt-format msgid "%1 missed call" msgid_plural "%1 missed calls" msgstr[0] "" msgstr[1] "" #: indicator/messagingmenu.cpp:492 msgid "Voicemail messages" msgstr "" #: indicator/messagingmenu.cpp:495 #, qt-format msgid "%1 voicemail message" msgid_plural "%1 voicemail messages" msgstr[0] "" msgstr[1] "" #: indicator/messagingmenu.cpp:500 msgid "Voicemail" msgstr "" #: indicator/metrics.cpp:42 #, qt-format msgid "%1 text messages sent today" msgstr "" #: indicator/metrics.cpp:43 msgid "No text messages sent today" msgstr "" #: indicator/metrics.cpp:44 #, qt-format msgid "%1 text messages received today" msgstr "" #: indicator/metrics.cpp:45 msgid "No text messages received today" msgstr "" #: indicator/metrics.cpp:46 #, qt-format msgid "%1 calls received today" msgstr "" #: indicator/metrics.cpp:47 msgid "No calls received today" msgstr "" #: indicator/metrics.cpp:48 #, qt-format msgid "%1 calls made today" msgstr "" #: indicator/metrics.cpp:49 indicator/metrics.cpp:51 msgid "No calls made today" msgstr "" #: indicator/metrics.cpp:50 #, qt-format msgid "Spent %1 minutes in calls today" msgstr "" #: indicator/textchannelobserver.cpp:225 msgid "Unlock your sim card and try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:227 msgid "Deactivate flight mode and try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:230 msgid "Try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:236 msgid "The message could not be sent" msgstr "" #: indicator/textchannelobserver.cpp:249 indicator/textchannelobserver.cpp:713 msgid "View message" msgstr "" #: indicator/textchannelobserver.cpp:295 msgid "New Group" msgstr "" #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:302 #, qt-format msgid "You joined group %1 " msgstr "" #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:306 #, qt-format msgid "You joined group %1" msgstr "" #: indicator/textchannelobserver.cpp:309 msgid "You joined a new group" msgstr "" #: indicator/textchannelobserver.cpp:328 msgid "View Group" msgstr "" #: indicator/textchannelobserver.cpp:367 indicator/ussdindicator.cpp:116 msgid "Ok" msgstr "" #: indicator/textchannelobserver.cpp:373 msgid "Save" msgstr "" #: indicator/textchannelobserver.cpp:468 msgid "Emergency Alert" msgstr "" #: indicator/textchannelobserver.cpp:471 msgid "Emergency Alert: Extreme" msgstr "" #: indicator/textchannelobserver.cpp:474 msgid "Emergency Alert: Severe" msgstr "" #: indicator/textchannelobserver.cpp:477 msgid "Emergency Alert: Notice" msgstr "" #: indicator/textchannelobserver.cpp:482 msgid "AMBER Alert" msgstr "" #: indicator/textchannelobserver.cpp:485 msgid "Alert" msgstr "" #: indicator/textchannelobserver.cpp:531 msgid "Show alert" msgstr "" #: indicator/textchannelobserver.cpp:604 #, qt-format msgid "Attachment: %1 image" msgid_plural "Attachments: %1 images" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:606 #, qt-format msgid "Attachment: %1 video" msgid_plural "Attachments: %1 videos" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:608 #, qt-format msgid "Attachment: %1 contact" msgid_plural "Attachments: %1 contacts" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:610 #, qt-format msgid "Attachment: %1 audio clip" msgid_plural "Attachments: %1 audio clips" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:612 #, qt-format msgid "Attachment: %1 file" msgid_plural "Attachments: %1 files" msgstr[0] "" msgstr[1] "" #. TRANSLATORS : message displayed when any error occurred while receiving a MMS (case when cellular-data is off, or any downloading issue). Notify that there was a message, the user can find more about it in the messaging-app. #: indicator/textchannelobserver.cpp:615 msgid "New MMS message" msgstr "" #. TRANSLATORS : %1 is the recipient name #: indicator/textchannelobserver.cpp:679 indicator/textchannelobserver.cpp:683 #, qt-format msgid "Message to group from %1" msgstr "" #: indicator/textchannelobserver.cpp:749 #, qt-format msgid "Message from %1" msgstr "" #: indicator/textchannelobserver.cpp:910 msgid "Please, select a SIM card:" msgstr "" #: indicator/ussdindicator.cpp:119 msgid "Reply" msgstr "" #: indicator/ussdindicator.cpp:142 msgid "Cancel" msgstr "निरसयतु" #: libtelephonyservice/callnotification.cpp:53 msgid "Conf call on hold" msgstr "" #: libtelephonyservice/callnotification.cpp:53 #, qt-format msgid "%1 call on hold" msgstr "" #: libtelephonyservice/callnotification.cpp:56 msgid "Conf call ended" msgstr "" #: libtelephonyservice/callnotification.cpp:56 #, qt-format msgid "%1 call ended" msgstr "" #: libtelephonyservice/callnotification.cpp:59 #, qt-format msgid "%1 call declined" msgstr "" #: libtelephonyservice/contactwatcher.cpp:157 msgid "Private Number" msgstr "" #: libtelephonyservice/contactwatcher.cpp:159 msgid "Unknown Number" msgstr "" telephony-service-0.5.3/po/sc.po000066400000000000000000000272211455543255600165710ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-12-16 17:03+0100\n" "PO-Revision-Date: 2021-04-22 10:44+0000\n" "Last-Translator: Adria \n" "Language-Team: Sardinian \n" "Language: sc\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Generator: Weblate 3.11.3\n" #: indicator/telephony-service-call.desktop.in:4 msgid "Phone Calls" msgstr "Mutidas de telèfonu" #: indicator/telephony-service-sms.desktop.in:4 msgid "SMS" msgstr "SMS" #: approver/approver.cpp:66 msgid "Unknown caller" msgstr "Nùmeru in intrada disconnotu" #: approver/approver.cpp:94 msgid "I'm busy at the moment. I'll call later." msgstr "Non potzo rispòndere immoe. Ti muto a pustis." #: approver/approver.cpp:95 msgid "I'm running late, on my way now." msgstr "So arribende, so in ritardu." #: approver/approver.cpp:96 msgid "Please call me back later." msgstr "Muti·mi a pustis." #: approver/approver.cpp:457 #, qt-format msgid "On [%1]" msgstr "In [%1]" #: approver/approver.cpp:461 indicator/messagingmenu.cpp:414 msgid "Private number" msgstr "Nùmeru privadu" #: approver/approver.cpp:464 indicator/messagingmenu.cpp:244 #: indicator/messagingmenu.cpp:418 indicator/textchannelobserver.cpp:640 msgid "Unknown number" msgstr "Nùmeru disconnotu" #: approver/approver.cpp:470 approver/approver.cpp:485 msgid "Caller number is not available" msgstr "Su nùmeru de sa mutida in intrada no est a disponimentu" #: approver/approver.cpp:476 msgid "Calling from private number" msgstr "Mutida dae unu nùmeru privadu" #: approver/approver.cpp:479 msgid "Calling from unknown number" msgstr "Mutida dae unu nùmeru disconnotu" #: approver/approver.cpp:482 #, qt-format msgid "Calling from %1" msgstr "Mutida dae %1" #: approver/approver.cpp:529 msgid "Hold + Answer" msgstr "Pone in ispera e risponde" #: approver/approver.cpp:530 msgid "Accept" msgstr "Atzeta" #: approver/approver.cpp:543 msgid "End + Answer" msgstr "Acabba e risponde" #: approver/approver.cpp:552 msgid "Decline" msgstr "Refuda" #: approver/approver.cpp:560 msgid "Message & decline" msgstr "Imbia unu messàgiu e refuda" #: approver/main.cpp:46 msgid "Telephony Service Approver" msgstr "Aprovatzione de su servìtziu de telefonia" #: indicator/authhandler.cpp:72 msgid "Authentication failed. Do you want to review your credentials?" msgstr "Autenticatzione faddida. Boles verificare is credentziales?" #: indicator/authhandler.cpp:91 msgid "Yes" msgstr "Eja" #: indicator/authhandler.cpp:94 msgid "No" msgstr "Nono" #: indicator/displaynamesettings.cpp:35 #, qt-format msgid "SIM %1" msgstr "SIM %1" #: indicator/main.cpp:53 msgid "Telephony Service Indicator" msgstr "Indicadore de servìtziu de telefonia" #: indicator/messagingmenu.cpp:83 indicator/messagingmenu.cpp:87 msgid "Telephony Service" msgstr "Servìtziu de telefonia" #: indicator/messagingmenu.cpp:151 indicator/messagingmenu.cpp:293 #: indicator/messagingmenu.cpp:360 msgid "Send" msgstr "Imbia" #. TRANSLATORS : %1 is the group name and %2 is the recipient name #: indicator/messagingmenu.cpp:262 indicator/textchannelobserver.cpp:671 #: indicator/textchannelobserver.cpp:675 #, qt-format msgid "Message to %1 from %2" msgstr "Messàgiu a %1 dae %2" #. TRANSLATORS : %1 is the recipient name #: indicator/messagingmenu.cpp:265 indicator/messagingmenu.cpp:269 #, fuzzy, qt-format #| msgid "Message to group from %1" msgid "Message to the group from %1" msgstr "Messàgiu a su grupu dae %1" #: indicator/messagingmenu.cpp:345 msgid "Call back" msgstr "Torra sa mutida" #: indicator/messagingmenu.cpp:350 #, fuzzy #| msgid "I missed your call - can you call me now?" msgid "Missed your call — can you call me now?" msgstr "Apo pèrdidu sa mutida. Mi podes mutire immoe?" #: indicator/messagingmenu.cpp:351 #, fuzzy #| msgid "I'm running late. I'm on my way." msgid "Running late. On my way." msgstr "So arribende. So in ritardu." #: indicator/messagingmenu.cpp:352 #, fuzzy #| msgid "I'm busy at the moment. I'll call you later." msgid "Busy at the moment. Will call you later." msgstr "Non potzo rispòndere immoe. Ti muto a pustis." #: indicator/messagingmenu.cpp:353 #, fuzzy #| msgid "I'll be 20 minutes late." msgid "I am 20 minutes late." msgstr "So in ritardu de 20 minutos." #: indicator/messagingmenu.cpp:354 #, fuzzy #| msgid "Sorry, I'm still busy. I'll call you later." msgid "Still busy. Will call you later." msgstr "Non potzo rispòndere; ti muto a pustis." #: indicator/messagingmenu.cpp:409 #, qt-format msgid "%1 missed call" msgid_plural "%1 missed calls" msgstr[0] "%1 mutida pèrdida" msgstr[1] "%1 mutidas pèrdidas" #: indicator/messagingmenu.cpp:492 msgid "Voicemail messages" msgstr "Messàgios in segreteria" #: indicator/messagingmenu.cpp:495 #, qt-format msgid "%1 voicemail message" msgid_plural "%1 voicemail messages" msgstr[0] "%1 messàgiu de boghe" msgstr[1] "%1 messàgios de boghe" #: indicator/messagingmenu.cpp:500 msgid "Voicemail" msgstr "Segreteria" #: indicator/metrics.cpp:42 #, qt-format msgid "%1 text messages sent today" msgstr "%1 messàgios de testu imbiados oe" #: indicator/metrics.cpp:43 msgid "No text messages sent today" msgstr "Oe no as imbiadu perunu messàgiu" #: indicator/metrics.cpp:44 #, qt-format msgid "%1 text messages received today" msgstr "%1 messàgios de testu retzidos oe" #: indicator/metrics.cpp:45 msgid "No text messages received today" msgstr "Oe no as retzidu perunu messàgiu" #: indicator/metrics.cpp:46 #, qt-format msgid "%1 calls received today" msgstr "%1 mutidas retzidas oe" #: indicator/metrics.cpp:47 msgid "No calls received today" msgstr "Oe no as retzidu peruna mutida" #: indicator/metrics.cpp:48 #, qt-format msgid "%1 calls made today" msgstr "%1 mutidas fatas oe" #: indicator/metrics.cpp:49 indicator/metrics.cpp:51 msgid "No calls made today" msgstr "Oe no as fatu peruna mutida" #: indicator/metrics.cpp:50 #, qt-format msgid "Spent %1 minutes in calls today" msgstr "%1 minutos in mutidas oe" #: indicator/textchannelobserver.cpp:225 msgid "Unlock your sim card and try again from the messaging application." msgstr "" "Isbloca sa carta SIM e torra·bi a proare dae s'aplicatzione de messagìstica." #: indicator/textchannelobserver.cpp:227 msgid "Deactivate flight mode and try again from the messaging application." msgstr "" "Disativa sa modalidade aèreu e torra·bi a proare dae s'aplicatzione de " "messagìstica." #: indicator/textchannelobserver.cpp:230 msgid "Try again from the messaging application." msgstr "Torra·bi a proare dae s'aplicatzione de messagìstica." #: indicator/textchannelobserver.cpp:236 msgid "The message could not be sent" msgstr "Impossìbile imbiare su messàgiu" #: indicator/textchannelobserver.cpp:249 indicator/textchannelobserver.cpp:713 msgid "View message" msgstr "Ammustra su messàgiu" #: indicator/textchannelobserver.cpp:295 msgid "New Group" msgstr "Grupu nou" #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:302 #, qt-format msgid "You joined group %1 " msgstr "As aderidu a su grupu %1 " #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:306 #, qt-format msgid "You joined group %1" msgstr "As aderidu a su grupu %1" #: indicator/textchannelobserver.cpp:309 msgid "You joined a new group" msgstr "As aderidu a unu grupu nou" #: indicator/textchannelobserver.cpp:328 msgid "View Group" msgstr "Ammustra su grupu" #: indicator/textchannelobserver.cpp:367 indicator/ussdindicator.cpp:116 msgid "Ok" msgstr "AB" #: indicator/textchannelobserver.cpp:373 msgid "Save" msgstr "Sarva" #: indicator/textchannelobserver.cpp:468 msgid "Emergency Alert" msgstr "" #: indicator/textchannelobserver.cpp:471 msgid "Emergency Alert: Extreme" msgstr "" #: indicator/textchannelobserver.cpp:474 msgid "Emergency Alert: Severe" msgstr "" #: indicator/textchannelobserver.cpp:477 msgid "Emergency Alert: Notice" msgstr "" #: indicator/textchannelobserver.cpp:482 msgid "AMBER Alert" msgstr "" #: indicator/textchannelobserver.cpp:485 msgid "Alert" msgstr "" #: indicator/textchannelobserver.cpp:531 msgid "Show alert" msgstr "" #: indicator/textchannelobserver.cpp:604 #, qt-format msgid "Attachment: %1 image" msgid_plural "Attachments: %1 images" msgstr[0] "Allegadu: %1 immàgine" msgstr[1] "Allegados: %1 immàgines" #: indicator/textchannelobserver.cpp:606 #, qt-format msgid "Attachment: %1 video" msgid_plural "Attachments: %1 videos" msgstr[0] "Allegadu: %1 vìdeu" msgstr[1] "Allegados: %1 vìdeos" #: indicator/textchannelobserver.cpp:608 #, qt-format msgid "Attachment: %1 contact" msgid_plural "Attachments: %1 contacts" msgstr[0] "Allegadu: %1 cuntatu" msgstr[1] "Allegados: %1 cuntatos" #: indicator/textchannelobserver.cpp:610 #, qt-format msgid "Attachment: %1 audio clip" msgid_plural "Attachments: %1 audio clips" msgstr[0] "Allegadu: %1 clip de àudio" msgstr[1] "Allegados: %1 clips de àudio" #: indicator/textchannelobserver.cpp:612 #, qt-format msgid "Attachment: %1 file" msgid_plural "Attachments: %1 files" msgstr[0] "Allegadu: %1 archìviu" msgstr[1] "Allegados: %1 archìvios" #. TRANSLATORS : message displayed when any error occurred while receiving a MMS (case when cellular-data is off, or any downloading issue). Notify that there was a message, the user can find more about it in the messaging-app. #: indicator/textchannelobserver.cpp:615 #, fuzzy #| msgid "View message" msgid "New MMS message" msgstr "Ammustra su messàgiu" #. TRANSLATORS : %1 is the recipient name #: indicator/textchannelobserver.cpp:679 indicator/textchannelobserver.cpp:683 #, qt-format msgid "Message to group from %1" msgstr "Messàgiu a su grupu dae %1" #: indicator/textchannelobserver.cpp:749 #, qt-format msgid "Message from %1" msgstr "Messàgiu dae %1" #: indicator/textchannelobserver.cpp:910 msgid "Please, select a SIM card:" msgstr "Sèbera una carta SIM:" #: indicator/ussdindicator.cpp:119 msgid "Reply" msgstr "Risponde" #: indicator/ussdindicator.cpp:142 msgid "Cancel" msgstr "Annulla" #: libtelephonyservice/callnotification.cpp:53 msgid "Conf call on hold" msgstr "" #: libtelephonyservice/callnotification.cpp:53 #, qt-format msgid "%1 call on hold" msgstr "" #: libtelephonyservice/callnotification.cpp:56 msgid "Conf call ended" msgstr "" #: libtelephonyservice/callnotification.cpp:56 #, qt-format msgid "%1 call ended" msgstr "" #: libtelephonyservice/callnotification.cpp:59 #, qt-format msgid "%1 call declined" msgstr "" #: libtelephonyservice/contactwatcher.cpp:157 #, fuzzy #| msgid "Private number" msgid "Private Number" msgstr "Nùmeru privadu" #: libtelephonyservice/contactwatcher.cpp:159 #, fuzzy #| msgid "Unknown number" msgid "Unknown Number" msgstr "Nùmeru disconnotu" #, fuzzy #~| msgid "Telephony Service" #~ msgid "telephony-service-call" #~ msgstr "Servìtziu de telefonia" #, fuzzy #~| msgid "Telephony Service" #~ msgid "telephony-service-message" #~ msgstr "Servìtziu de telefonia" #~ msgid "" #~ "Oops, there has been an error with the MMS system and this message could " #~ "not be retrieved. Please ensure Cellular Data is ON and MMS settings are " #~ "correct, then ask the sender to try again." #~ msgstr "" #~ "Impossìbile recuperare su messàgiu pro more de una faddina in su sistema " #~ "MMS. Assegura·ti chi sa connessione de datos mòbiles est ativa e sa " #~ "cunfiguratzione MMS est curreta; pustis, dimanda chi ti ddu torrant a " #~ "imbiare." telephony-service-0.5.3/po/sco.po000066400000000000000000000211471455543255600167510ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-12-16 17:03+0100\n" "PO-Revision-Date: 2023-01-05 11:07+0000\n" "Last-Translator: Anonymous \n" "Language-Team: Scots \n" "Language: sco\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Generator: Weblate 4.15.1-dev\n" #: indicator/telephony-service-call.desktop.in:4 msgid "Phone Calls" msgstr "" #: indicator/telephony-service-sms.desktop.in:4 msgid "SMS" msgstr "" #: approver/approver.cpp:66 msgid "Unknown caller" msgstr "" #: approver/approver.cpp:94 msgid "I'm busy at the moment. I'll call later." msgstr "" #: approver/approver.cpp:95 msgid "I'm running late, on my way now." msgstr "" #: approver/approver.cpp:96 msgid "Please call me back later." msgstr "" #: approver/approver.cpp:457 #, qt-format msgid "On [%1]" msgstr "" #: approver/approver.cpp:461 indicator/messagingmenu.cpp:414 msgid "Private number" msgstr "" #: approver/approver.cpp:464 indicator/messagingmenu.cpp:244 #: indicator/messagingmenu.cpp:418 indicator/textchannelobserver.cpp:640 msgid "Unknown number" msgstr "" #: approver/approver.cpp:470 approver/approver.cpp:485 msgid "Caller number is not available" msgstr "" #: approver/approver.cpp:476 msgid "Calling from private number" msgstr "" #: approver/approver.cpp:479 msgid "Calling from unknown number" msgstr "" #: approver/approver.cpp:482 #, qt-format msgid "Calling from %1" msgstr "" #: approver/approver.cpp:529 msgid "Hold + Answer" msgstr "" #: approver/approver.cpp:530 msgid "Accept" msgstr "" #: approver/approver.cpp:543 msgid "End + Answer" msgstr "" #: approver/approver.cpp:552 msgid "Decline" msgstr "" #: approver/approver.cpp:560 msgid "Message & decline" msgstr "" #: approver/main.cpp:46 msgid "Telephony Service Approver" msgstr "" #: indicator/authhandler.cpp:72 msgid "Authentication failed. Do you want to review your credentials?" msgstr "" #: indicator/authhandler.cpp:91 msgid "Yes" msgstr "" #: indicator/authhandler.cpp:94 msgid "No" msgstr "" #: indicator/displaynamesettings.cpp:35 #, qt-format msgid "SIM %1" msgstr "" #: indicator/main.cpp:53 msgid "Telephony Service Indicator" msgstr "" #: indicator/messagingmenu.cpp:83 indicator/messagingmenu.cpp:87 msgid "Telephony Service" msgstr "" #: indicator/messagingmenu.cpp:151 indicator/messagingmenu.cpp:293 #: indicator/messagingmenu.cpp:360 msgid "Send" msgstr "" #. TRANSLATORS : %1 is the group name and %2 is the recipient name #: indicator/messagingmenu.cpp:262 indicator/textchannelobserver.cpp:671 #: indicator/textchannelobserver.cpp:675 #, qt-format msgid "Message to %1 from %2" msgstr "" #. TRANSLATORS : %1 is the recipient name #: indicator/messagingmenu.cpp:265 indicator/messagingmenu.cpp:269 #, qt-format msgid "Message to the group from %1" msgstr "" #: indicator/messagingmenu.cpp:345 msgid "Call back" msgstr "" #: indicator/messagingmenu.cpp:350 msgid "Missed your call — can you call me now?" msgstr "" #: indicator/messagingmenu.cpp:351 msgid "Running late. On my way." msgstr "" #: indicator/messagingmenu.cpp:352 msgid "Busy at the moment. Will call you later." msgstr "" #: indicator/messagingmenu.cpp:353 msgid "I am 20 minutes late." msgstr "" #: indicator/messagingmenu.cpp:354 msgid "Still busy. Will call you later." msgstr "" #: indicator/messagingmenu.cpp:409 #, qt-format msgid "%1 missed call" msgid_plural "%1 missed calls" msgstr[0] "" msgstr[1] "" #: indicator/messagingmenu.cpp:492 msgid "Voicemail messages" msgstr "" #: indicator/messagingmenu.cpp:495 #, qt-format msgid "%1 voicemail message" msgid_plural "%1 voicemail messages" msgstr[0] "" msgstr[1] "" #: indicator/messagingmenu.cpp:500 msgid "Voicemail" msgstr "" #: indicator/metrics.cpp:42 #, qt-format msgid "%1 text messages sent today" msgstr "" #: indicator/metrics.cpp:43 msgid "No text messages sent today" msgstr "" #: indicator/metrics.cpp:44 #, qt-format msgid "%1 text messages received today" msgstr "" #: indicator/metrics.cpp:45 msgid "No text messages received today" msgstr "" #: indicator/metrics.cpp:46 #, qt-format msgid "%1 calls received today" msgstr "" #: indicator/metrics.cpp:47 msgid "No calls received today" msgstr "" #: indicator/metrics.cpp:48 #, qt-format msgid "%1 calls made today" msgstr "" #: indicator/metrics.cpp:49 indicator/metrics.cpp:51 msgid "No calls made today" msgstr "" #: indicator/metrics.cpp:50 #, qt-format msgid "Spent %1 minutes in calls today" msgstr "" #: indicator/textchannelobserver.cpp:225 msgid "Unlock your sim card and try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:227 msgid "Deactivate flight mode and try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:230 msgid "Try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:236 msgid "The message could not be sent" msgstr "" #: indicator/textchannelobserver.cpp:249 indicator/textchannelobserver.cpp:713 msgid "View message" msgstr "" #: indicator/textchannelobserver.cpp:295 msgid "New Group" msgstr "" #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:302 #, qt-format msgid "You joined group %1 " msgstr "" #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:306 #, qt-format msgid "You joined group %1" msgstr "" #: indicator/textchannelobserver.cpp:309 msgid "You joined a new group" msgstr "" #: indicator/textchannelobserver.cpp:328 msgid "View Group" msgstr "" #: indicator/textchannelobserver.cpp:367 indicator/ussdindicator.cpp:116 msgid "Ok" msgstr "" #: indicator/textchannelobserver.cpp:373 msgid "Save" msgstr "" #: indicator/textchannelobserver.cpp:468 msgid "Emergency Alert" msgstr "" #: indicator/textchannelobserver.cpp:471 msgid "Emergency Alert: Extreme" msgstr "" #: indicator/textchannelobserver.cpp:474 msgid "Emergency Alert: Severe" msgstr "" #: indicator/textchannelobserver.cpp:477 msgid "Emergency Alert: Notice" msgstr "" #: indicator/textchannelobserver.cpp:482 msgid "AMBER Alert" msgstr "" #: indicator/textchannelobserver.cpp:485 msgid "Alert" msgstr "" #: indicator/textchannelobserver.cpp:531 msgid "Show alert" msgstr "" #: indicator/textchannelobserver.cpp:604 #, qt-format msgid "Attachment: %1 image" msgid_plural "Attachments: %1 images" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:606 #, qt-format msgid "Attachment: %1 video" msgid_plural "Attachments: %1 videos" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:608 #, qt-format msgid "Attachment: %1 contact" msgid_plural "Attachments: %1 contacts" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:610 #, qt-format msgid "Attachment: %1 audio clip" msgid_plural "Attachments: %1 audio clips" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:612 #, qt-format msgid "Attachment: %1 file" msgid_plural "Attachments: %1 files" msgstr[0] "" msgstr[1] "" #. TRANSLATORS : message displayed when any error occurred while receiving a MMS (case when cellular-data is off, or any downloading issue). Notify that there was a message, the user can find more about it in the messaging-app. #: indicator/textchannelobserver.cpp:615 msgid "New MMS message" msgstr "" #. TRANSLATORS : %1 is the recipient name #: indicator/textchannelobserver.cpp:679 indicator/textchannelobserver.cpp:683 #, qt-format msgid "Message to group from %1" msgstr "" #: indicator/textchannelobserver.cpp:749 #, qt-format msgid "Message from %1" msgstr "" #: indicator/textchannelobserver.cpp:910 msgid "Please, select a SIM card:" msgstr "" #: indicator/ussdindicator.cpp:119 msgid "Reply" msgstr "" #: indicator/ussdindicator.cpp:142 #, fuzzy msgid "Cancel" msgstr "Cancel" #: libtelephonyservice/callnotification.cpp:53 msgid "Conf call on hold" msgstr "" #: libtelephonyservice/callnotification.cpp:53 #, qt-format msgid "%1 call on hold" msgstr "" #: libtelephonyservice/callnotification.cpp:56 msgid "Conf call ended" msgstr "" #: libtelephonyservice/callnotification.cpp:56 #, qt-format msgid "%1 call ended" msgstr "" #: libtelephonyservice/callnotification.cpp:59 #, qt-format msgid "%1 call declined" msgstr "" #: libtelephonyservice/contactwatcher.cpp:157 msgid "Private Number" msgstr "" #: libtelephonyservice/contactwatcher.cpp:159 msgid "Unknown Number" msgstr "" telephony-service-0.5.3/po/sd.po000066400000000000000000000211461455543255600165720ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-12-16 17:03+0100\n" "PO-Revision-Date: 2023-01-05 11:07+0000\n" "Last-Translator: Anonymous \n" "Language-Team: Sindhi \n" "Language: sd\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Generator: Weblate 4.15.1-dev\n" #: indicator/telephony-service-call.desktop.in:4 msgid "Phone Calls" msgstr "" #: indicator/telephony-service-sms.desktop.in:4 msgid "SMS" msgstr "" #: approver/approver.cpp:66 msgid "Unknown caller" msgstr "" #: approver/approver.cpp:94 msgid "I'm busy at the moment. I'll call later." msgstr "" #: approver/approver.cpp:95 msgid "I'm running late, on my way now." msgstr "" #: approver/approver.cpp:96 msgid "Please call me back later." msgstr "" #: approver/approver.cpp:457 #, qt-format msgid "On [%1]" msgstr "" #: approver/approver.cpp:461 indicator/messagingmenu.cpp:414 msgid "Private number" msgstr "" #: approver/approver.cpp:464 indicator/messagingmenu.cpp:244 #: indicator/messagingmenu.cpp:418 indicator/textchannelobserver.cpp:640 msgid "Unknown number" msgstr "" #: approver/approver.cpp:470 approver/approver.cpp:485 msgid "Caller number is not available" msgstr "" #: approver/approver.cpp:476 msgid "Calling from private number" msgstr "" #: approver/approver.cpp:479 msgid "Calling from unknown number" msgstr "" #: approver/approver.cpp:482 #, qt-format msgid "Calling from %1" msgstr "" #: approver/approver.cpp:529 msgid "Hold + Answer" msgstr "" #: approver/approver.cpp:530 msgid "Accept" msgstr "" #: approver/approver.cpp:543 msgid "End + Answer" msgstr "" #: approver/approver.cpp:552 msgid "Decline" msgstr "" #: approver/approver.cpp:560 msgid "Message & decline" msgstr "" #: approver/main.cpp:46 msgid "Telephony Service Approver" msgstr "" #: indicator/authhandler.cpp:72 msgid "Authentication failed. Do you want to review your credentials?" msgstr "" #: indicator/authhandler.cpp:91 msgid "Yes" msgstr "" #: indicator/authhandler.cpp:94 msgid "No" msgstr "" #: indicator/displaynamesettings.cpp:35 #, qt-format msgid "SIM %1" msgstr "" #: indicator/main.cpp:53 msgid "Telephony Service Indicator" msgstr "" #: indicator/messagingmenu.cpp:83 indicator/messagingmenu.cpp:87 msgid "Telephony Service" msgstr "" #: indicator/messagingmenu.cpp:151 indicator/messagingmenu.cpp:293 #: indicator/messagingmenu.cpp:360 msgid "Send" msgstr "" #. TRANSLATORS : %1 is the group name and %2 is the recipient name #: indicator/messagingmenu.cpp:262 indicator/textchannelobserver.cpp:671 #: indicator/textchannelobserver.cpp:675 #, qt-format msgid "Message to %1 from %2" msgstr "" #. TRANSLATORS : %1 is the recipient name #: indicator/messagingmenu.cpp:265 indicator/messagingmenu.cpp:269 #, qt-format msgid "Message to the group from %1" msgstr "" #: indicator/messagingmenu.cpp:345 msgid "Call back" msgstr "" #: indicator/messagingmenu.cpp:350 msgid "Missed your call — can you call me now?" msgstr "" #: indicator/messagingmenu.cpp:351 msgid "Running late. On my way." msgstr "" #: indicator/messagingmenu.cpp:352 msgid "Busy at the moment. Will call you later." msgstr "" #: indicator/messagingmenu.cpp:353 msgid "I am 20 minutes late." msgstr "" #: indicator/messagingmenu.cpp:354 msgid "Still busy. Will call you later." msgstr "" #: indicator/messagingmenu.cpp:409 #, qt-format msgid "%1 missed call" msgid_plural "%1 missed calls" msgstr[0] "" msgstr[1] "" #: indicator/messagingmenu.cpp:492 msgid "Voicemail messages" msgstr "" #: indicator/messagingmenu.cpp:495 #, qt-format msgid "%1 voicemail message" msgid_plural "%1 voicemail messages" msgstr[0] "" msgstr[1] "" #: indicator/messagingmenu.cpp:500 msgid "Voicemail" msgstr "" #: indicator/metrics.cpp:42 #, qt-format msgid "%1 text messages sent today" msgstr "" #: indicator/metrics.cpp:43 msgid "No text messages sent today" msgstr "" #: indicator/metrics.cpp:44 #, qt-format msgid "%1 text messages received today" msgstr "" #: indicator/metrics.cpp:45 msgid "No text messages received today" msgstr "" #: indicator/metrics.cpp:46 #, qt-format msgid "%1 calls received today" msgstr "" #: indicator/metrics.cpp:47 msgid "No calls received today" msgstr "" #: indicator/metrics.cpp:48 #, qt-format msgid "%1 calls made today" msgstr "" #: indicator/metrics.cpp:49 indicator/metrics.cpp:51 msgid "No calls made today" msgstr "" #: indicator/metrics.cpp:50 #, qt-format msgid "Spent %1 minutes in calls today" msgstr "" #: indicator/textchannelobserver.cpp:225 msgid "Unlock your sim card and try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:227 msgid "Deactivate flight mode and try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:230 msgid "Try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:236 msgid "The message could not be sent" msgstr "" #: indicator/textchannelobserver.cpp:249 indicator/textchannelobserver.cpp:713 msgid "View message" msgstr "" #: indicator/textchannelobserver.cpp:295 msgid "New Group" msgstr "" #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:302 #, qt-format msgid "You joined group %1 " msgstr "" #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:306 #, qt-format msgid "You joined group %1" msgstr "" #: indicator/textchannelobserver.cpp:309 msgid "You joined a new group" msgstr "" #: indicator/textchannelobserver.cpp:328 msgid "View Group" msgstr "" #: indicator/textchannelobserver.cpp:367 indicator/ussdindicator.cpp:116 msgid "Ok" msgstr "" #: indicator/textchannelobserver.cpp:373 msgid "Save" msgstr "" #: indicator/textchannelobserver.cpp:468 msgid "Emergency Alert" msgstr "" #: indicator/textchannelobserver.cpp:471 msgid "Emergency Alert: Extreme" msgstr "" #: indicator/textchannelobserver.cpp:474 msgid "Emergency Alert: Severe" msgstr "" #: indicator/textchannelobserver.cpp:477 msgid "Emergency Alert: Notice" msgstr "" #: indicator/textchannelobserver.cpp:482 msgid "AMBER Alert" msgstr "" #: indicator/textchannelobserver.cpp:485 msgid "Alert" msgstr "" #: indicator/textchannelobserver.cpp:531 msgid "Show alert" msgstr "" #: indicator/textchannelobserver.cpp:604 #, qt-format msgid "Attachment: %1 image" msgid_plural "Attachments: %1 images" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:606 #, qt-format msgid "Attachment: %1 video" msgid_plural "Attachments: %1 videos" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:608 #, qt-format msgid "Attachment: %1 contact" msgid_plural "Attachments: %1 contacts" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:610 #, qt-format msgid "Attachment: %1 audio clip" msgid_plural "Attachments: %1 audio clips" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:612 #, qt-format msgid "Attachment: %1 file" msgid_plural "Attachments: %1 files" msgstr[0] "" msgstr[1] "" #. TRANSLATORS : message displayed when any error occurred while receiving a MMS (case when cellular-data is off, or any downloading issue). Notify that there was a message, the user can find more about it in the messaging-app. #: indicator/textchannelobserver.cpp:615 msgid "New MMS message" msgstr "" #. TRANSLATORS : %1 is the recipient name #: indicator/textchannelobserver.cpp:679 indicator/textchannelobserver.cpp:683 #, qt-format msgid "Message to group from %1" msgstr "" #: indicator/textchannelobserver.cpp:749 #, qt-format msgid "Message from %1" msgstr "" #: indicator/textchannelobserver.cpp:910 msgid "Please, select a SIM card:" msgstr "" #: indicator/ussdindicator.cpp:119 msgid "Reply" msgstr "" #: indicator/ussdindicator.cpp:142 #, fuzzy msgid "Cancel" msgstr "Cancel" #: libtelephonyservice/callnotification.cpp:53 msgid "Conf call on hold" msgstr "" #: libtelephonyservice/callnotification.cpp:53 #, qt-format msgid "%1 call on hold" msgstr "" #: libtelephonyservice/callnotification.cpp:56 msgid "Conf call ended" msgstr "" #: libtelephonyservice/callnotification.cpp:56 #, qt-format msgid "%1 call ended" msgstr "" #: libtelephonyservice/callnotification.cpp:59 #, qt-format msgid "%1 call declined" msgstr "" #: libtelephonyservice/contactwatcher.cpp:157 msgid "Private Number" msgstr "" #: libtelephonyservice/contactwatcher.cpp:159 msgid "Unknown Number" msgstr "" telephony-service-0.5.3/po/sdh.po000066400000000000000000000211641455543255600167420ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-12-16 17:03+0100\n" "PO-Revision-Date: 2023-01-05 11:07+0000\n" "Last-Translator: Anonymous \n" "Language-Team: Kurdish (Southern) \n" "Language: sdh\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Generator: Weblate 4.15.1-dev\n" #: indicator/telephony-service-call.desktop.in:4 msgid "Phone Calls" msgstr "" #: indicator/telephony-service-sms.desktop.in:4 msgid "SMS" msgstr "" #: approver/approver.cpp:66 msgid "Unknown caller" msgstr "" #: approver/approver.cpp:94 msgid "I'm busy at the moment. I'll call later." msgstr "" #: approver/approver.cpp:95 msgid "I'm running late, on my way now." msgstr "" #: approver/approver.cpp:96 msgid "Please call me back later." msgstr "" #: approver/approver.cpp:457 #, qt-format msgid "On [%1]" msgstr "" #: approver/approver.cpp:461 indicator/messagingmenu.cpp:414 msgid "Private number" msgstr "" #: approver/approver.cpp:464 indicator/messagingmenu.cpp:244 #: indicator/messagingmenu.cpp:418 indicator/textchannelobserver.cpp:640 msgid "Unknown number" msgstr "" #: approver/approver.cpp:470 approver/approver.cpp:485 msgid "Caller number is not available" msgstr "" #: approver/approver.cpp:476 msgid "Calling from private number" msgstr "" #: approver/approver.cpp:479 msgid "Calling from unknown number" msgstr "" #: approver/approver.cpp:482 #, qt-format msgid "Calling from %1" msgstr "" #: approver/approver.cpp:529 msgid "Hold + Answer" msgstr "" #: approver/approver.cpp:530 msgid "Accept" msgstr "" #: approver/approver.cpp:543 msgid "End + Answer" msgstr "" #: approver/approver.cpp:552 msgid "Decline" msgstr "" #: approver/approver.cpp:560 msgid "Message & decline" msgstr "" #: approver/main.cpp:46 msgid "Telephony Service Approver" msgstr "" #: indicator/authhandler.cpp:72 msgid "Authentication failed. Do you want to review your credentials?" msgstr "" #: indicator/authhandler.cpp:91 msgid "Yes" msgstr "" #: indicator/authhandler.cpp:94 msgid "No" msgstr "" #: indicator/displaynamesettings.cpp:35 #, qt-format msgid "SIM %1" msgstr "" #: indicator/main.cpp:53 msgid "Telephony Service Indicator" msgstr "" #: indicator/messagingmenu.cpp:83 indicator/messagingmenu.cpp:87 msgid "Telephony Service" msgstr "" #: indicator/messagingmenu.cpp:151 indicator/messagingmenu.cpp:293 #: indicator/messagingmenu.cpp:360 msgid "Send" msgstr "" #. TRANSLATORS : %1 is the group name and %2 is the recipient name #: indicator/messagingmenu.cpp:262 indicator/textchannelobserver.cpp:671 #: indicator/textchannelobserver.cpp:675 #, qt-format msgid "Message to %1 from %2" msgstr "" #. TRANSLATORS : %1 is the recipient name #: indicator/messagingmenu.cpp:265 indicator/messagingmenu.cpp:269 #, qt-format msgid "Message to the group from %1" msgstr "" #: indicator/messagingmenu.cpp:345 msgid "Call back" msgstr "" #: indicator/messagingmenu.cpp:350 msgid "Missed your call — can you call me now?" msgstr "" #: indicator/messagingmenu.cpp:351 msgid "Running late. On my way." msgstr "" #: indicator/messagingmenu.cpp:352 msgid "Busy at the moment. Will call you later." msgstr "" #: indicator/messagingmenu.cpp:353 msgid "I am 20 minutes late." msgstr "" #: indicator/messagingmenu.cpp:354 msgid "Still busy. Will call you later." msgstr "" #: indicator/messagingmenu.cpp:409 #, qt-format msgid "%1 missed call" msgid_plural "%1 missed calls" msgstr[0] "" msgstr[1] "" #: indicator/messagingmenu.cpp:492 msgid "Voicemail messages" msgstr "" #: indicator/messagingmenu.cpp:495 #, qt-format msgid "%1 voicemail message" msgid_plural "%1 voicemail messages" msgstr[0] "" msgstr[1] "" #: indicator/messagingmenu.cpp:500 msgid "Voicemail" msgstr "" #: indicator/metrics.cpp:42 #, qt-format msgid "%1 text messages sent today" msgstr "" #: indicator/metrics.cpp:43 msgid "No text messages sent today" msgstr "" #: indicator/metrics.cpp:44 #, qt-format msgid "%1 text messages received today" msgstr "" #: indicator/metrics.cpp:45 msgid "No text messages received today" msgstr "" #: indicator/metrics.cpp:46 #, qt-format msgid "%1 calls received today" msgstr "" #: indicator/metrics.cpp:47 msgid "No calls received today" msgstr "" #: indicator/metrics.cpp:48 #, qt-format msgid "%1 calls made today" msgstr "" #: indicator/metrics.cpp:49 indicator/metrics.cpp:51 msgid "No calls made today" msgstr "" #: indicator/metrics.cpp:50 #, qt-format msgid "Spent %1 minutes in calls today" msgstr "" #: indicator/textchannelobserver.cpp:225 msgid "Unlock your sim card and try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:227 msgid "Deactivate flight mode and try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:230 msgid "Try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:236 msgid "The message could not be sent" msgstr "" #: indicator/textchannelobserver.cpp:249 indicator/textchannelobserver.cpp:713 msgid "View message" msgstr "" #: indicator/textchannelobserver.cpp:295 msgid "New Group" msgstr "" #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:302 #, qt-format msgid "You joined group %1 " msgstr "" #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:306 #, qt-format msgid "You joined group %1" msgstr "" #: indicator/textchannelobserver.cpp:309 msgid "You joined a new group" msgstr "" #: indicator/textchannelobserver.cpp:328 msgid "View Group" msgstr "" #: indicator/textchannelobserver.cpp:367 indicator/ussdindicator.cpp:116 msgid "Ok" msgstr "" #: indicator/textchannelobserver.cpp:373 msgid "Save" msgstr "" #: indicator/textchannelobserver.cpp:468 msgid "Emergency Alert" msgstr "" #: indicator/textchannelobserver.cpp:471 msgid "Emergency Alert: Extreme" msgstr "" #: indicator/textchannelobserver.cpp:474 msgid "Emergency Alert: Severe" msgstr "" #: indicator/textchannelobserver.cpp:477 msgid "Emergency Alert: Notice" msgstr "" #: indicator/textchannelobserver.cpp:482 msgid "AMBER Alert" msgstr "" #: indicator/textchannelobserver.cpp:485 msgid "Alert" msgstr "" #: indicator/textchannelobserver.cpp:531 msgid "Show alert" msgstr "" #: indicator/textchannelobserver.cpp:604 #, qt-format msgid "Attachment: %1 image" msgid_plural "Attachments: %1 images" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:606 #, qt-format msgid "Attachment: %1 video" msgid_plural "Attachments: %1 videos" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:608 #, qt-format msgid "Attachment: %1 contact" msgid_plural "Attachments: %1 contacts" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:610 #, qt-format msgid "Attachment: %1 audio clip" msgid_plural "Attachments: %1 audio clips" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:612 #, qt-format msgid "Attachment: %1 file" msgid_plural "Attachments: %1 files" msgstr[0] "" msgstr[1] "" #. TRANSLATORS : message displayed when any error occurred while receiving a MMS (case when cellular-data is off, or any downloading issue). Notify that there was a message, the user can find more about it in the messaging-app. #: indicator/textchannelobserver.cpp:615 msgid "New MMS message" msgstr "" #. TRANSLATORS : %1 is the recipient name #: indicator/textchannelobserver.cpp:679 indicator/textchannelobserver.cpp:683 #, qt-format msgid "Message to group from %1" msgstr "" #: indicator/textchannelobserver.cpp:749 #, qt-format msgid "Message from %1" msgstr "" #: indicator/textchannelobserver.cpp:910 msgid "Please, select a SIM card:" msgstr "" #: indicator/ussdindicator.cpp:119 msgid "Reply" msgstr "" #: indicator/ussdindicator.cpp:142 #, fuzzy msgid "Cancel" msgstr "Cancel" #: libtelephonyservice/callnotification.cpp:53 msgid "Conf call on hold" msgstr "" #: libtelephonyservice/callnotification.cpp:53 #, qt-format msgid "%1 call on hold" msgstr "" #: libtelephonyservice/callnotification.cpp:56 msgid "Conf call ended" msgstr "" #: libtelephonyservice/callnotification.cpp:56 #, qt-format msgid "%1 call ended" msgstr "" #: libtelephonyservice/callnotification.cpp:59 #, qt-format msgid "%1 call declined" msgstr "" #: libtelephonyservice/contactwatcher.cpp:157 msgid "Private Number" msgstr "" #: libtelephonyservice/contactwatcher.cpp:159 msgid "Unknown Number" msgstr "" telephony-service-0.5.3/po/se.po000066400000000000000000000207721455543255600165770ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR Canonical Ltd. # This file is distributed under the same license as the telephony-service package. # FIRST AUTHOR , YEAR. # msgid "" msgstr "" "Project-Id-Version: telephony-service\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-12-16 17:03+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: Automatically generated\n" "Language-Team: none\n" "Language: se\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n == 1) ? 0 : ((n == 2) ? 1 : 2);\n" #: indicator/telephony-service-call.desktop.in:4 msgid "Phone Calls" msgstr "" #: indicator/telephony-service-sms.desktop.in:4 msgid "SMS" msgstr "" #: approver/approver.cpp:66 msgid "Unknown caller" msgstr "" #: approver/approver.cpp:94 msgid "I'm busy at the moment. I'll call later." msgstr "" #: approver/approver.cpp:95 msgid "I'm running late, on my way now." msgstr "" #: approver/approver.cpp:96 msgid "Please call me back later." msgstr "" #: approver/approver.cpp:457 #, qt-format msgid "On [%1]" msgstr "" #: approver/approver.cpp:461 indicator/messagingmenu.cpp:414 msgid "Private number" msgstr "" #: approver/approver.cpp:464 indicator/messagingmenu.cpp:244 #: indicator/messagingmenu.cpp:418 indicator/textchannelobserver.cpp:640 msgid "Unknown number" msgstr "" #: approver/approver.cpp:470 approver/approver.cpp:485 msgid "Caller number is not available" msgstr "" #: approver/approver.cpp:476 msgid "Calling from private number" msgstr "" #: approver/approver.cpp:479 msgid "Calling from unknown number" msgstr "" #: approver/approver.cpp:482 #, qt-format msgid "Calling from %1" msgstr "" #: approver/approver.cpp:529 msgid "Hold + Answer" msgstr "" #: approver/approver.cpp:530 msgid "Accept" msgstr "" #: approver/approver.cpp:543 msgid "End + Answer" msgstr "" #: approver/approver.cpp:552 msgid "Decline" msgstr "" #: approver/approver.cpp:560 msgid "Message & decline" msgstr "" #: approver/main.cpp:46 msgid "Telephony Service Approver" msgstr "" #: indicator/authhandler.cpp:72 msgid "Authentication failed. Do you want to review your credentials?" msgstr "" #: indicator/authhandler.cpp:91 msgid "Yes" msgstr "" #: indicator/authhandler.cpp:94 msgid "No" msgstr "" #: indicator/displaynamesettings.cpp:35 #, qt-format msgid "SIM %1" msgstr "" #: indicator/main.cpp:53 msgid "Telephony Service Indicator" msgstr "" #: indicator/messagingmenu.cpp:83 indicator/messagingmenu.cpp:87 msgid "Telephony Service" msgstr "" #: indicator/messagingmenu.cpp:151 indicator/messagingmenu.cpp:293 #: indicator/messagingmenu.cpp:360 msgid "Send" msgstr "" #. TRANSLATORS : %1 is the group name and %2 is the recipient name #: indicator/messagingmenu.cpp:262 indicator/textchannelobserver.cpp:671 #: indicator/textchannelobserver.cpp:675 #, qt-format msgid "Message to %1 from %2" msgstr "" #. TRANSLATORS : %1 is the recipient name #: indicator/messagingmenu.cpp:265 indicator/messagingmenu.cpp:269 #, qt-format msgid "Message to the group from %1" msgstr "" #: indicator/messagingmenu.cpp:345 msgid "Call back" msgstr "" #: indicator/messagingmenu.cpp:350 msgid "Missed your call — can you call me now?" msgstr "" #: indicator/messagingmenu.cpp:351 msgid "Running late. On my way." msgstr "" #: indicator/messagingmenu.cpp:352 msgid "Busy at the moment. Will call you later." msgstr "" #: indicator/messagingmenu.cpp:353 msgid "I am 20 minutes late." msgstr "" #: indicator/messagingmenu.cpp:354 msgid "Still busy. Will call you later." msgstr "" #: indicator/messagingmenu.cpp:409 #, qt-format msgid "%1 missed call" msgid_plural "%1 missed calls" msgstr[0] "" msgstr[1] "" #: indicator/messagingmenu.cpp:492 msgid "Voicemail messages" msgstr "" #: indicator/messagingmenu.cpp:495 #, qt-format msgid "%1 voicemail message" msgid_plural "%1 voicemail messages" msgstr[0] "" msgstr[1] "" #: indicator/messagingmenu.cpp:500 msgid "Voicemail" msgstr "" #: indicator/metrics.cpp:42 #, qt-format msgid "%1 text messages sent today" msgstr "" #: indicator/metrics.cpp:43 msgid "No text messages sent today" msgstr "" #: indicator/metrics.cpp:44 #, qt-format msgid "%1 text messages received today" msgstr "" #: indicator/metrics.cpp:45 msgid "No text messages received today" msgstr "" #: indicator/metrics.cpp:46 #, qt-format msgid "%1 calls received today" msgstr "" #: indicator/metrics.cpp:47 msgid "No calls received today" msgstr "" #: indicator/metrics.cpp:48 #, qt-format msgid "%1 calls made today" msgstr "" #: indicator/metrics.cpp:49 indicator/metrics.cpp:51 msgid "No calls made today" msgstr "" #: indicator/metrics.cpp:50 #, qt-format msgid "Spent %1 minutes in calls today" msgstr "" #: indicator/textchannelobserver.cpp:225 msgid "Unlock your sim card and try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:227 msgid "Deactivate flight mode and try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:230 msgid "Try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:236 msgid "The message could not be sent" msgstr "" #: indicator/textchannelobserver.cpp:249 indicator/textchannelobserver.cpp:713 msgid "View message" msgstr "" #: indicator/textchannelobserver.cpp:295 msgid "New Group" msgstr "" #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:302 #, qt-format msgid "You joined group %1 " msgstr "" #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:306 #, qt-format msgid "You joined group %1" msgstr "" #: indicator/textchannelobserver.cpp:309 msgid "You joined a new group" msgstr "" #: indicator/textchannelobserver.cpp:328 msgid "View Group" msgstr "" #: indicator/textchannelobserver.cpp:367 indicator/ussdindicator.cpp:116 msgid "Ok" msgstr "" #: indicator/textchannelobserver.cpp:373 msgid "Save" msgstr "" #: indicator/textchannelobserver.cpp:468 msgid "Emergency Alert" msgstr "" #: indicator/textchannelobserver.cpp:471 msgid "Emergency Alert: Extreme" msgstr "" #: indicator/textchannelobserver.cpp:474 msgid "Emergency Alert: Severe" msgstr "" #: indicator/textchannelobserver.cpp:477 msgid "Emergency Alert: Notice" msgstr "" #: indicator/textchannelobserver.cpp:482 msgid "AMBER Alert" msgstr "" #: indicator/textchannelobserver.cpp:485 msgid "Alert" msgstr "" #: indicator/textchannelobserver.cpp:531 msgid "Show alert" msgstr "" #: indicator/textchannelobserver.cpp:604 #, qt-format msgid "Attachment: %1 image" msgid_plural "Attachments: %1 images" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:606 #, qt-format msgid "Attachment: %1 video" msgid_plural "Attachments: %1 videos" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:608 #, qt-format msgid "Attachment: %1 contact" msgid_plural "Attachments: %1 contacts" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:610 #, qt-format msgid "Attachment: %1 audio clip" msgid_plural "Attachments: %1 audio clips" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:612 #, qt-format msgid "Attachment: %1 file" msgid_plural "Attachments: %1 files" msgstr[0] "" msgstr[1] "" #. TRANSLATORS : message displayed when any error occurred while receiving a MMS (case when cellular-data is off, or any downloading issue). Notify that there was a message, the user can find more about it in the messaging-app. #: indicator/textchannelobserver.cpp:615 msgid "New MMS message" msgstr "" #. TRANSLATORS : %1 is the recipient name #: indicator/textchannelobserver.cpp:679 indicator/textchannelobserver.cpp:683 #, qt-format msgid "Message to group from %1" msgstr "" #: indicator/textchannelobserver.cpp:749 #, qt-format msgid "Message from %1" msgstr "" #: indicator/textchannelobserver.cpp:910 msgid "Please, select a SIM card:" msgstr "" #: indicator/ussdindicator.cpp:119 msgid "Reply" msgstr "" #: indicator/ussdindicator.cpp:142 msgid "Cancel" msgstr "" #: libtelephonyservice/callnotification.cpp:53 msgid "Conf call on hold" msgstr "" #: libtelephonyservice/callnotification.cpp:53 #, qt-format msgid "%1 call on hold" msgstr "" #: libtelephonyservice/callnotification.cpp:56 msgid "Conf call ended" msgstr "" #: libtelephonyservice/callnotification.cpp:56 #, qt-format msgid "%1 call ended" msgstr "" #: libtelephonyservice/callnotification.cpp:59 #, qt-format msgid "%1 call declined" msgstr "" #: libtelephonyservice/contactwatcher.cpp:157 msgid "Private Number" msgstr "" #: libtelephonyservice/contactwatcher.cpp:159 msgid "Unknown Number" msgstr "" telephony-service-0.5.3/po/shn.po000066400000000000000000000211461455543255600167540ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-12-16 17:03+0100\n" "PO-Revision-Date: 2023-01-05 11:07+0000\n" "Last-Translator: Anonymous \n" "Language-Team: Shan \n" "Language: shn\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Generator: Weblate 4.15.1-dev\n" #: indicator/telephony-service-call.desktop.in:4 msgid "Phone Calls" msgstr "" #: indicator/telephony-service-sms.desktop.in:4 msgid "SMS" msgstr "" #: approver/approver.cpp:66 msgid "Unknown caller" msgstr "" #: approver/approver.cpp:94 msgid "I'm busy at the moment. I'll call later." msgstr "" #: approver/approver.cpp:95 msgid "I'm running late, on my way now." msgstr "" #: approver/approver.cpp:96 msgid "Please call me back later." msgstr "" #: approver/approver.cpp:457 #, qt-format msgid "On [%1]" msgstr "" #: approver/approver.cpp:461 indicator/messagingmenu.cpp:414 msgid "Private number" msgstr "" #: approver/approver.cpp:464 indicator/messagingmenu.cpp:244 #: indicator/messagingmenu.cpp:418 indicator/textchannelobserver.cpp:640 msgid "Unknown number" msgstr "" #: approver/approver.cpp:470 approver/approver.cpp:485 msgid "Caller number is not available" msgstr "" #: approver/approver.cpp:476 msgid "Calling from private number" msgstr "" #: approver/approver.cpp:479 msgid "Calling from unknown number" msgstr "" #: approver/approver.cpp:482 #, qt-format msgid "Calling from %1" msgstr "" #: approver/approver.cpp:529 msgid "Hold + Answer" msgstr "" #: approver/approver.cpp:530 msgid "Accept" msgstr "" #: approver/approver.cpp:543 msgid "End + Answer" msgstr "" #: approver/approver.cpp:552 msgid "Decline" msgstr "" #: approver/approver.cpp:560 msgid "Message & decline" msgstr "" #: approver/main.cpp:46 msgid "Telephony Service Approver" msgstr "" #: indicator/authhandler.cpp:72 msgid "Authentication failed. Do you want to review your credentials?" msgstr "" #: indicator/authhandler.cpp:91 msgid "Yes" msgstr "" #: indicator/authhandler.cpp:94 msgid "No" msgstr "" #: indicator/displaynamesettings.cpp:35 #, qt-format msgid "SIM %1" msgstr "" #: indicator/main.cpp:53 msgid "Telephony Service Indicator" msgstr "" #: indicator/messagingmenu.cpp:83 indicator/messagingmenu.cpp:87 msgid "Telephony Service" msgstr "" #: indicator/messagingmenu.cpp:151 indicator/messagingmenu.cpp:293 #: indicator/messagingmenu.cpp:360 msgid "Send" msgstr "" #. TRANSLATORS : %1 is the group name and %2 is the recipient name #: indicator/messagingmenu.cpp:262 indicator/textchannelobserver.cpp:671 #: indicator/textchannelobserver.cpp:675 #, qt-format msgid "Message to %1 from %2" msgstr "" #. TRANSLATORS : %1 is the recipient name #: indicator/messagingmenu.cpp:265 indicator/messagingmenu.cpp:269 #, qt-format msgid "Message to the group from %1" msgstr "" #: indicator/messagingmenu.cpp:345 msgid "Call back" msgstr "" #: indicator/messagingmenu.cpp:350 msgid "Missed your call — can you call me now?" msgstr "" #: indicator/messagingmenu.cpp:351 msgid "Running late. On my way." msgstr "" #: indicator/messagingmenu.cpp:352 msgid "Busy at the moment. Will call you later." msgstr "" #: indicator/messagingmenu.cpp:353 msgid "I am 20 minutes late." msgstr "" #: indicator/messagingmenu.cpp:354 msgid "Still busy. Will call you later." msgstr "" #: indicator/messagingmenu.cpp:409 #, qt-format msgid "%1 missed call" msgid_plural "%1 missed calls" msgstr[0] "" msgstr[1] "" #: indicator/messagingmenu.cpp:492 msgid "Voicemail messages" msgstr "" #: indicator/messagingmenu.cpp:495 #, qt-format msgid "%1 voicemail message" msgid_plural "%1 voicemail messages" msgstr[0] "" msgstr[1] "" #: indicator/messagingmenu.cpp:500 msgid "Voicemail" msgstr "" #: indicator/metrics.cpp:42 #, qt-format msgid "%1 text messages sent today" msgstr "" #: indicator/metrics.cpp:43 msgid "No text messages sent today" msgstr "" #: indicator/metrics.cpp:44 #, qt-format msgid "%1 text messages received today" msgstr "" #: indicator/metrics.cpp:45 msgid "No text messages received today" msgstr "" #: indicator/metrics.cpp:46 #, qt-format msgid "%1 calls received today" msgstr "" #: indicator/metrics.cpp:47 msgid "No calls received today" msgstr "" #: indicator/metrics.cpp:48 #, qt-format msgid "%1 calls made today" msgstr "" #: indicator/metrics.cpp:49 indicator/metrics.cpp:51 msgid "No calls made today" msgstr "" #: indicator/metrics.cpp:50 #, qt-format msgid "Spent %1 minutes in calls today" msgstr "" #: indicator/textchannelobserver.cpp:225 msgid "Unlock your sim card and try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:227 msgid "Deactivate flight mode and try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:230 msgid "Try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:236 msgid "The message could not be sent" msgstr "" #: indicator/textchannelobserver.cpp:249 indicator/textchannelobserver.cpp:713 msgid "View message" msgstr "" #: indicator/textchannelobserver.cpp:295 msgid "New Group" msgstr "" #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:302 #, qt-format msgid "You joined group %1 " msgstr "" #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:306 #, qt-format msgid "You joined group %1" msgstr "" #: indicator/textchannelobserver.cpp:309 msgid "You joined a new group" msgstr "" #: indicator/textchannelobserver.cpp:328 msgid "View Group" msgstr "" #: indicator/textchannelobserver.cpp:367 indicator/ussdindicator.cpp:116 msgid "Ok" msgstr "" #: indicator/textchannelobserver.cpp:373 msgid "Save" msgstr "" #: indicator/textchannelobserver.cpp:468 msgid "Emergency Alert" msgstr "" #: indicator/textchannelobserver.cpp:471 msgid "Emergency Alert: Extreme" msgstr "" #: indicator/textchannelobserver.cpp:474 msgid "Emergency Alert: Severe" msgstr "" #: indicator/textchannelobserver.cpp:477 msgid "Emergency Alert: Notice" msgstr "" #: indicator/textchannelobserver.cpp:482 msgid "AMBER Alert" msgstr "" #: indicator/textchannelobserver.cpp:485 msgid "Alert" msgstr "" #: indicator/textchannelobserver.cpp:531 msgid "Show alert" msgstr "" #: indicator/textchannelobserver.cpp:604 #, qt-format msgid "Attachment: %1 image" msgid_plural "Attachments: %1 images" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:606 #, qt-format msgid "Attachment: %1 video" msgid_plural "Attachments: %1 videos" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:608 #, qt-format msgid "Attachment: %1 contact" msgid_plural "Attachments: %1 contacts" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:610 #, qt-format msgid "Attachment: %1 audio clip" msgid_plural "Attachments: %1 audio clips" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:612 #, qt-format msgid "Attachment: %1 file" msgid_plural "Attachments: %1 files" msgstr[0] "" msgstr[1] "" #. TRANSLATORS : message displayed when any error occurred while receiving a MMS (case when cellular-data is off, or any downloading issue). Notify that there was a message, the user can find more about it in the messaging-app. #: indicator/textchannelobserver.cpp:615 msgid "New MMS message" msgstr "" #. TRANSLATORS : %1 is the recipient name #: indicator/textchannelobserver.cpp:679 indicator/textchannelobserver.cpp:683 #, qt-format msgid "Message to group from %1" msgstr "" #: indicator/textchannelobserver.cpp:749 #, qt-format msgid "Message from %1" msgstr "" #: indicator/textchannelobserver.cpp:910 msgid "Please, select a SIM card:" msgstr "" #: indicator/ussdindicator.cpp:119 msgid "Reply" msgstr "" #: indicator/ussdindicator.cpp:142 #, fuzzy msgid "Cancel" msgstr "Cancel" #: libtelephonyservice/callnotification.cpp:53 msgid "Conf call on hold" msgstr "" #: libtelephonyservice/callnotification.cpp:53 #, qt-format msgid "%1 call on hold" msgstr "" #: libtelephonyservice/callnotification.cpp:56 msgid "Conf call ended" msgstr "" #: libtelephonyservice/callnotification.cpp:56 #, qt-format msgid "%1 call ended" msgstr "" #: libtelephonyservice/callnotification.cpp:59 #, qt-format msgid "%1 call declined" msgstr "" #: libtelephonyservice/contactwatcher.cpp:157 msgid "Private Number" msgstr "" #: libtelephonyservice/contactwatcher.cpp:159 msgid "Unknown Number" msgstr "" telephony-service-0.5.3/po/si.po000066400000000000000000000211541455543255600165760ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-12-16 17:03+0100\n" "PO-Revision-Date: 2021-03-04 00:27+0000\n" "Last-Translator: helabasa \n" "Language-Team: Sinhala \n" "Language: si\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n > 1;\n" "X-Generator: Weblate 3.11.3\n" #: indicator/telephony-service-call.desktop.in:4 msgid "Phone Calls" msgstr "" #: indicator/telephony-service-sms.desktop.in:4 msgid "SMS" msgstr "" #: approver/approver.cpp:66 msgid "Unknown caller" msgstr "" #: approver/approver.cpp:94 msgid "I'm busy at the moment. I'll call later." msgstr "" #: approver/approver.cpp:95 msgid "I'm running late, on my way now." msgstr "" #: approver/approver.cpp:96 msgid "Please call me back later." msgstr "" #: approver/approver.cpp:457 #, qt-format msgid "On [%1]" msgstr "" #: approver/approver.cpp:461 indicator/messagingmenu.cpp:414 msgid "Private number" msgstr "" #: approver/approver.cpp:464 indicator/messagingmenu.cpp:244 #: indicator/messagingmenu.cpp:418 indicator/textchannelobserver.cpp:640 msgid "Unknown number" msgstr "" #: approver/approver.cpp:470 approver/approver.cpp:485 msgid "Caller number is not available" msgstr "" #: approver/approver.cpp:476 msgid "Calling from private number" msgstr "" #: approver/approver.cpp:479 msgid "Calling from unknown number" msgstr "" #: approver/approver.cpp:482 #, qt-format msgid "Calling from %1" msgstr "" #: approver/approver.cpp:529 msgid "Hold + Answer" msgstr "" #: approver/approver.cpp:530 msgid "Accept" msgstr "" #: approver/approver.cpp:543 msgid "End + Answer" msgstr "" #: approver/approver.cpp:552 msgid "Decline" msgstr "" #: approver/approver.cpp:560 msgid "Message & decline" msgstr "" #: approver/main.cpp:46 msgid "Telephony Service Approver" msgstr "" #: indicator/authhandler.cpp:72 msgid "Authentication failed. Do you want to review your credentials?" msgstr "" #: indicator/authhandler.cpp:91 msgid "Yes" msgstr "හරි" #: indicator/authhandler.cpp:94 msgid "No" msgstr "" #: indicator/displaynamesettings.cpp:35 #, qt-format msgid "SIM %1" msgstr "" #: indicator/main.cpp:53 msgid "Telephony Service Indicator" msgstr "" #: indicator/messagingmenu.cpp:83 indicator/messagingmenu.cpp:87 msgid "Telephony Service" msgstr "" #: indicator/messagingmenu.cpp:151 indicator/messagingmenu.cpp:293 #: indicator/messagingmenu.cpp:360 msgid "Send" msgstr "" #. TRANSLATORS : %1 is the group name and %2 is the recipient name #: indicator/messagingmenu.cpp:262 indicator/textchannelobserver.cpp:671 #: indicator/textchannelobserver.cpp:675 #, qt-format msgid "Message to %1 from %2" msgstr "" #. TRANSLATORS : %1 is the recipient name #: indicator/messagingmenu.cpp:265 indicator/messagingmenu.cpp:269 #, qt-format msgid "Message to the group from %1" msgstr "" #: indicator/messagingmenu.cpp:345 msgid "Call back" msgstr "" #: indicator/messagingmenu.cpp:350 msgid "Missed your call — can you call me now?" msgstr "" #: indicator/messagingmenu.cpp:351 msgid "Running late. On my way." msgstr "" #: indicator/messagingmenu.cpp:352 msgid "Busy at the moment. Will call you later." msgstr "" #: indicator/messagingmenu.cpp:353 msgid "I am 20 minutes late." msgstr "" #: indicator/messagingmenu.cpp:354 msgid "Still busy. Will call you later." msgstr "" #: indicator/messagingmenu.cpp:409 #, qt-format msgid "%1 missed call" msgid_plural "%1 missed calls" msgstr[0] "" msgstr[1] "" #: indicator/messagingmenu.cpp:492 msgid "Voicemail messages" msgstr "" #: indicator/messagingmenu.cpp:495 #, qt-format msgid "%1 voicemail message" msgid_plural "%1 voicemail messages" msgstr[0] "" msgstr[1] "" #: indicator/messagingmenu.cpp:500 msgid "Voicemail" msgstr "" #: indicator/metrics.cpp:42 #, qt-format msgid "%1 text messages sent today" msgstr "" #: indicator/metrics.cpp:43 msgid "No text messages sent today" msgstr "" #: indicator/metrics.cpp:44 #, qt-format msgid "%1 text messages received today" msgstr "" #: indicator/metrics.cpp:45 msgid "No text messages received today" msgstr "" #: indicator/metrics.cpp:46 #, qt-format msgid "%1 calls received today" msgstr "" #: indicator/metrics.cpp:47 msgid "No calls received today" msgstr "" #: indicator/metrics.cpp:48 #, qt-format msgid "%1 calls made today" msgstr "" #: indicator/metrics.cpp:49 indicator/metrics.cpp:51 msgid "No calls made today" msgstr "" #: indicator/metrics.cpp:50 #, qt-format msgid "Spent %1 minutes in calls today" msgstr "" #: indicator/textchannelobserver.cpp:225 msgid "Unlock your sim card and try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:227 msgid "Deactivate flight mode and try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:230 msgid "Try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:236 msgid "The message could not be sent" msgstr "" #: indicator/textchannelobserver.cpp:249 indicator/textchannelobserver.cpp:713 msgid "View message" msgstr "" #: indicator/textchannelobserver.cpp:295 msgid "New Group" msgstr "" #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:302 #, qt-format msgid "You joined group %1 " msgstr "" #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:306 #, qt-format msgid "You joined group %1" msgstr "" #: indicator/textchannelobserver.cpp:309 msgid "You joined a new group" msgstr "" #: indicator/textchannelobserver.cpp:328 msgid "View Group" msgstr "" #: indicator/textchannelobserver.cpp:367 indicator/ussdindicator.cpp:116 msgid "Ok" msgstr "" #: indicator/textchannelobserver.cpp:373 msgid "Save" msgstr "" #: indicator/textchannelobserver.cpp:468 msgid "Emergency Alert" msgstr "" #: indicator/textchannelobserver.cpp:471 msgid "Emergency Alert: Extreme" msgstr "" #: indicator/textchannelobserver.cpp:474 msgid "Emergency Alert: Severe" msgstr "" #: indicator/textchannelobserver.cpp:477 msgid "Emergency Alert: Notice" msgstr "" #: indicator/textchannelobserver.cpp:482 msgid "AMBER Alert" msgstr "" #: indicator/textchannelobserver.cpp:485 msgid "Alert" msgstr "" #: indicator/textchannelobserver.cpp:531 msgid "Show alert" msgstr "" #: indicator/textchannelobserver.cpp:604 #, qt-format msgid "Attachment: %1 image" msgid_plural "Attachments: %1 images" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:606 #, qt-format msgid "Attachment: %1 video" msgid_plural "Attachments: %1 videos" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:608 #, qt-format msgid "Attachment: %1 contact" msgid_plural "Attachments: %1 contacts" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:610 #, qt-format msgid "Attachment: %1 audio clip" msgid_plural "Attachments: %1 audio clips" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:612 #, qt-format msgid "Attachment: %1 file" msgid_plural "Attachments: %1 files" msgstr[0] "" msgstr[1] "" #. TRANSLATORS : message displayed when any error occurred while receiving a MMS (case when cellular-data is off, or any downloading issue). Notify that there was a message, the user can find more about it in the messaging-app. #: indicator/textchannelobserver.cpp:615 msgid "New MMS message" msgstr "" #. TRANSLATORS : %1 is the recipient name #: indicator/textchannelobserver.cpp:679 indicator/textchannelobserver.cpp:683 #, qt-format msgid "Message to group from %1" msgstr "" #: indicator/textchannelobserver.cpp:749 #, qt-format msgid "Message from %1" msgstr "" #: indicator/textchannelobserver.cpp:910 msgid "Please, select a SIM card:" msgstr "" #: indicator/ussdindicator.cpp:119 msgid "Reply" msgstr "" #: indicator/ussdindicator.cpp:142 msgid "Cancel" msgstr "අවලංගු" #: libtelephonyservice/callnotification.cpp:53 msgid "Conf call on hold" msgstr "" #: libtelephonyservice/callnotification.cpp:53 #, qt-format msgid "%1 call on hold" msgstr "" #: libtelephonyservice/callnotification.cpp:56 msgid "Conf call ended" msgstr "" #: libtelephonyservice/callnotification.cpp:56 #, qt-format msgid "%1 call ended" msgstr "" #: libtelephonyservice/callnotification.cpp:59 #, qt-format msgid "%1 call declined" msgstr "" #: libtelephonyservice/contactwatcher.cpp:157 msgid "Private Number" msgstr "" #: libtelephonyservice/contactwatcher.cpp:159 msgid "Unknown Number" msgstr "" telephony-service-0.5.3/po/sk.po000066400000000000000000000274651455543255600166130ustar00rootroot00000000000000# Slovak translation for telephony-service # Copyright (c) 2016 Rosetta Contributors and Canonical Ltd 2016 # This file is distributed under the same license as the telephony-service package. # FIRST AUTHOR , 2016. # msgid "" msgstr "" "Project-Id-Version: telephony-service\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-12-16 17:03+0100\n" "PO-Revision-Date: 2020-11-30 09:55+0000\n" "Last-Translator: dano6 \n" "Language-Team: Slovak \n" "Language: sk\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n==1) ? 1 : (n>=2 && n<=4) ? 2 : 0;\n" "X-Generator: Weblate 3.11.3\n" "X-Launchpad-Export-Date: 2017-01-04 06:03+0000\n" #: indicator/telephony-service-call.desktop.in:4 msgid "Phone Calls" msgstr "Hovory" #: indicator/telephony-service-sms.desktop.in:4 msgid "SMS" msgstr "SMS" #: approver/approver.cpp:66 msgid "Unknown caller" msgstr "Neznámy volajúci" #: approver/approver.cpp:94 msgid "I'm busy at the moment. I'll call later." msgstr "Som zaneprázdnený. Zavolám neskôr." #: approver/approver.cpp:95 msgid "I'm running late, on my way now." msgstr "Budem meškať, som na ceste." #: approver/approver.cpp:96 msgid "Please call me back later." msgstr "Prosím, zavolajte neskôr." #: approver/approver.cpp:457 #, qt-format msgid "On [%1]" msgstr "Na [%1]" #: approver/approver.cpp:461 indicator/messagingmenu.cpp:414 msgid "Private number" msgstr "Súkromné číslo" #: approver/approver.cpp:464 indicator/messagingmenu.cpp:244 #: indicator/messagingmenu.cpp:418 indicator/textchannelobserver.cpp:640 msgid "Unknown number" msgstr "Neznáme číslo" #: approver/approver.cpp:470 approver/approver.cpp:485 msgid "Caller number is not available" msgstr "Volané číslo je nedostupné" #: approver/approver.cpp:476 msgid "Calling from private number" msgstr "Volané zo súkromného čísla" #: approver/approver.cpp:479 msgid "Calling from unknown number" msgstr "Volané z neznámeho čísla" #: approver/approver.cpp:482 #, qt-format msgid "Calling from %1" msgstr "Volané z %1" #: approver/approver.cpp:529 msgid "Hold + Answer" msgstr "Podržať + Odpovedať" #: approver/approver.cpp:530 msgid "Accept" msgstr "Prijať" #: approver/approver.cpp:543 msgid "End + Answer" msgstr "Ukončiť + Odpovedať" #: approver/approver.cpp:552 msgid "Decline" msgstr "Odmietnuť" #: approver/approver.cpp:560 msgid "Message & decline" msgstr "Odmietnuť so správou" #: approver/main.cpp:46 msgid "Telephony Service Approver" msgstr "Schvaľovateľ telefónnej služby" #: indicator/authhandler.cpp:72 msgid "Authentication failed. Do you want to review your credentials?" msgstr "Overenie zlyhalo. Chcete skontrolovať svoje prihlasovacie údaje?" #: indicator/authhandler.cpp:91 msgid "Yes" msgstr "Áno" #: indicator/authhandler.cpp:94 msgid "No" msgstr "Nie" #: indicator/displaynamesettings.cpp:35 #, qt-format msgid "SIM %1" msgstr "SIM %1" #: indicator/main.cpp:53 msgid "Telephony Service Indicator" msgstr "Indikátor telefónnej služby" #: indicator/messagingmenu.cpp:83 indicator/messagingmenu.cpp:87 msgid "Telephony Service" msgstr "Telefónna služba" #: indicator/messagingmenu.cpp:151 indicator/messagingmenu.cpp:293 #: indicator/messagingmenu.cpp:360 msgid "Send" msgstr "Odoslať" #. TRANSLATORS : %1 is the group name and %2 is the recipient name #: indicator/messagingmenu.cpp:262 indicator/textchannelobserver.cpp:671 #: indicator/textchannelobserver.cpp:675 #, qt-format msgid "Message to %1 from %2" msgstr "Správa pre %1 od %2" #. TRANSLATORS : %1 is the recipient name #: indicator/messagingmenu.cpp:265 indicator/messagingmenu.cpp:269 #, fuzzy, qt-format #| msgid "Message to group from %1" msgid "Message to the group from %1" msgstr "Správa pre skupinu od %1" #: indicator/messagingmenu.cpp:345 msgid "Call back" msgstr "Zavolať naspäť" #: indicator/messagingmenu.cpp:350 #, fuzzy #| msgid "I missed your call - can you call me now?" msgid "Missed your call — can you call me now?" msgstr "Zmeškal som Váš hovor - môžete mi zavolať?" #: indicator/messagingmenu.cpp:351 #, fuzzy #| msgid "I'm running late. I'm on my way." msgid "Running late. On my way." msgstr "Budem meškať. Som na ceste." #: indicator/messagingmenu.cpp:352 #, fuzzy #| msgid "I'm busy at the moment. I'll call you later." msgid "Busy at the moment. Will call you later." msgstr "Som zaneprázdnený. Zavolám neskôr." #: indicator/messagingmenu.cpp:353 #, fuzzy #| msgid "I'll be 20 minutes late." msgid "I am 20 minutes late." msgstr "Budem meškať 20 minút." #: indicator/messagingmenu.cpp:354 #, fuzzy #| msgid "Sorry, I'm still busy. I'll call you later." msgid "Still busy. Will call you later." msgstr "Prepáčte, som stále zaneprázdnený. Zavolám neskôr." #: indicator/messagingmenu.cpp:409 #, qt-format msgid "%1 missed call" msgid_plural "%1 missed calls" msgstr[0] "%1 zmeškaných hovorov" msgstr[1] "%1 zmeškaný hovor" msgstr[2] "%1 zmeškané hovory" #: indicator/messagingmenu.cpp:492 msgid "Voicemail messages" msgstr "Správy hlasovej schránky" #: indicator/messagingmenu.cpp:495 #, qt-format msgid "%1 voicemail message" msgid_plural "%1 voicemail messages" msgstr[0] "%1 hlasových správ" msgstr[1] "%1 hlasová správa" msgstr[2] "%1 hlasové správy" #: indicator/messagingmenu.cpp:500 msgid "Voicemail" msgstr "Hlasová schránka" #: indicator/metrics.cpp:42 #, qt-format msgid "%1 text messages sent today" msgstr "Počet dnešných odoslaných správ: %1" #: indicator/metrics.cpp:43 msgid "No text messages sent today" msgstr "Dnes žiadna odoslaná správa" #: indicator/metrics.cpp:44 #, qt-format msgid "%1 text messages received today" msgstr "Počet dnešných prijatých správ: %1" #: indicator/metrics.cpp:45 msgid "No text messages received today" msgstr "Dnes žiadna prijatá správa" #: indicator/metrics.cpp:46 #, qt-format msgid "%1 calls received today" msgstr "Počet dnešných prijatých hovorov: %1" #: indicator/metrics.cpp:47 msgid "No calls received today" msgstr "Dnes žiadne prijaté hovory" #: indicator/metrics.cpp:48 #, qt-format msgid "%1 calls made today" msgstr "Počet dnešných hovorov: %1" #: indicator/metrics.cpp:49 indicator/metrics.cpp:51 msgid "No calls made today" msgstr "Dnes žiadne hovory" #: indicator/metrics.cpp:50 #, qt-format msgid "Spent %1 minutes in calls today" msgstr "Dnes strávených minút v hovore: %1" #: indicator/textchannelobserver.cpp:225 msgid "Unlock your sim card and try again from the messaging application." msgstr "Odomknite SIM kartu a skúste to znova z aplikácie Správy." #: indicator/textchannelobserver.cpp:227 msgid "Deactivate flight mode and try again from the messaging application." msgstr "Deaktivujte režim Lietadlo a skúste to znova z aplikácie Správy." #: indicator/textchannelobserver.cpp:230 msgid "Try again from the messaging application." msgstr "Skúste to znova z aplikácie Správy." #: indicator/textchannelobserver.cpp:236 msgid "The message could not be sent" msgstr "Správa nemohla byť odoslaná" #: indicator/textchannelobserver.cpp:249 indicator/textchannelobserver.cpp:713 msgid "View message" msgstr "Zobraziť správu" #: indicator/textchannelobserver.cpp:295 msgid "New Group" msgstr "Nová skupina" #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:302 #, qt-format msgid "You joined group %1 " msgstr "Pripojili ste sa k skupine %1 " #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:306 #, qt-format msgid "You joined group %1" msgstr "Pripojili ste sa k skupine %1" #: indicator/textchannelobserver.cpp:309 msgid "You joined a new group" msgstr "Pripojili ste sa k novej skupine" #: indicator/textchannelobserver.cpp:328 msgid "View Group" msgstr "Zobraziť skupinu" #: indicator/textchannelobserver.cpp:367 indicator/ussdindicator.cpp:116 msgid "Ok" msgstr "Ok" #: indicator/textchannelobserver.cpp:373 msgid "Save" msgstr "Uložiť" #: indicator/textchannelobserver.cpp:468 msgid "Emergency Alert" msgstr "" #: indicator/textchannelobserver.cpp:471 msgid "Emergency Alert: Extreme" msgstr "" #: indicator/textchannelobserver.cpp:474 msgid "Emergency Alert: Severe" msgstr "" #: indicator/textchannelobserver.cpp:477 msgid "Emergency Alert: Notice" msgstr "" #: indicator/textchannelobserver.cpp:482 msgid "AMBER Alert" msgstr "" #: indicator/textchannelobserver.cpp:485 msgid "Alert" msgstr "" #: indicator/textchannelobserver.cpp:531 msgid "Show alert" msgstr "" #: indicator/textchannelobserver.cpp:604 #, qt-format msgid "Attachment: %1 image" msgid_plural "Attachments: %1 images" msgstr[0] "Príloha: %1 obrázkov" msgstr[1] "Príloha: %1 obrázok" msgstr[2] "Príloha: %1 obrázky" #: indicator/textchannelobserver.cpp:606 #, qt-format msgid "Attachment: %1 video" msgid_plural "Attachments: %1 videos" msgstr[0] "Príloha: %1 videí" msgstr[1] "Príloha: %1 video" msgstr[2] "Príloha: %1 videá" #: indicator/textchannelobserver.cpp:608 #, qt-format msgid "Attachment: %1 contact" msgid_plural "Attachments: %1 contacts" msgstr[0] "Príloha: %1 kontaktov" msgstr[1] "Príloha: %1 kontakt" msgstr[2] "Príloha: %1 kontakty" #: indicator/textchannelobserver.cpp:610 #, qt-format msgid "Attachment: %1 audio clip" msgid_plural "Attachments: %1 audio clips" msgstr[0] "Príloha: %1 audio klipov" msgstr[1] "Príloha: %1 audio klip" msgstr[2] "Príloha: %1 audio klipy" #: indicator/textchannelobserver.cpp:612 #, qt-format msgid "Attachment: %1 file" msgid_plural "Attachments: %1 files" msgstr[0] "Príloha: %1 súborov" msgstr[1] "Príloha: %1 súbor" msgstr[2] "Príloha: %1 súbory" #. TRANSLATORS : message displayed when any error occurred while receiving a MMS (case when cellular-data is off, or any downloading issue). Notify that there was a message, the user can find more about it in the messaging-app. #: indicator/textchannelobserver.cpp:615 #, fuzzy #| msgid "View message" msgid "New MMS message" msgstr "Zobraziť správu" #. TRANSLATORS : %1 is the recipient name #: indicator/textchannelobserver.cpp:679 indicator/textchannelobserver.cpp:683 #, qt-format msgid "Message to group from %1" msgstr "Správa pre skupinu od %1" #: indicator/textchannelobserver.cpp:749 #, qt-format msgid "Message from %1" msgstr "Správa od %1" #: indicator/textchannelobserver.cpp:910 msgid "Please, select a SIM card:" msgstr "Prosím, vyberte SIM kartu:" #: indicator/ussdindicator.cpp:119 msgid "Reply" msgstr "Odpovedať" #: indicator/ussdindicator.cpp:142 msgid "Cancel" msgstr "Zrušiť" #: libtelephonyservice/callnotification.cpp:53 msgid "Conf call on hold" msgstr "" #: libtelephonyservice/callnotification.cpp:53 #, qt-format msgid "%1 call on hold" msgstr "" #: libtelephonyservice/callnotification.cpp:56 msgid "Conf call ended" msgstr "" #: libtelephonyservice/callnotification.cpp:56 #, qt-format msgid "%1 call ended" msgstr "" #: libtelephonyservice/callnotification.cpp:59 #, qt-format msgid "%1 call declined" msgstr "" #: libtelephonyservice/contactwatcher.cpp:157 msgid "Private Number" msgstr "Súkromné číslo" #: libtelephonyservice/contactwatcher.cpp:159 msgid "Unknown Number" msgstr "Neznáme číslo" #, fuzzy #~| msgid "Telephony Service" #~ msgid "telephony-service-call" #~ msgstr "Telefónna služba" #, fuzzy #~| msgid "Telephony Service" #~ msgid "telephony-service-message" #~ msgstr "Telefónna služba" #~ msgid "" #~ "Oops, there has been an error with the MMS system and this message could " #~ "not be retrieved. Please ensure Cellular Data is ON and MMS settings are " #~ "correct, then ask the sender to try again." #~ msgstr "" #~ "V systéme MMS prišlo k chybe a túto správu nemožno prečítať. " #~ "Skontrolujte, či sú mobilné dáta ZAPNUTÉ a nastavenie MMS správne, a " #~ "potom požiadajte odosielateľa správu odoslať znovu." telephony-service-0.5.3/po/sl.po000066400000000000000000000266651455543255600166150ustar00rootroot00000000000000# Slovenian translation for telephony-service # Copyright (c) 2014 Rosetta Contributors and Canonical Ltd 2014 # This file is distributed under the same license as the telephony-service package. # FIRST AUTHOR , 2014. # msgid "" msgstr "" "Project-Id-Version: telephony-service\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-12-16 17:03+0100\n" "PO-Revision-Date: 2015-03-25 09:39+0000\n" "Last-Translator: Dražen Matešić \n" "Language-Team: Slovenian \n" "Language: sl\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=4; plural=(n%100==1 ? 1 : n%100==2 ? 2 : n%100==3 || " "n%100==4 ? 3 : 0);\n" "X-Launchpad-Export-Date: 2017-01-04 06:03+0000\n" "X-Generator: Launchpad (build 18298)\n" #: indicator/telephony-service-call.desktop.in:4 msgid "Phone Calls" msgstr "Telefonski klici" #: indicator/telephony-service-sms.desktop.in:4 msgid "SMS" msgstr "SMS" #: approver/approver.cpp:66 msgid "Unknown caller" msgstr "Neznan klicatelj" #: approver/approver.cpp:94 msgid "I'm busy at the moment. I'll call later." msgstr "Trenutno sem zaseden. Pokličem kasneje." #: approver/approver.cpp:95 msgid "I'm running late, on my way now." msgstr "Pozen sem, sem že na poti" #: approver/approver.cpp:96 msgid "Please call me back later." msgstr "Kasneje me prosim pokliči nazaj." #: approver/approver.cpp:457 #, qt-format msgid "On [%1]" msgstr "Na [%1]" #: approver/approver.cpp:461 indicator/messagingmenu.cpp:414 msgid "Private number" msgstr "Zasebna številka" #: approver/approver.cpp:464 indicator/messagingmenu.cpp:244 #: indicator/messagingmenu.cpp:418 indicator/textchannelobserver.cpp:640 msgid "Unknown number" msgstr "Neznana številka" #: approver/approver.cpp:470 approver/approver.cpp:485 msgid "Caller number is not available" msgstr "Številka klicatelja ni na voljo" #: approver/approver.cpp:476 msgid "Calling from private number" msgstr "Klic od zasebne številke" #: approver/approver.cpp:479 msgid "Calling from unknown number" msgstr "Klic od neznane številke" #: approver/approver.cpp:482 #, qt-format msgid "Calling from %1" msgstr "Klic od %1" #: approver/approver.cpp:529 msgid "Hold + Answer" msgstr "Zadrži + Odgovori" #: approver/approver.cpp:530 msgid "Accept" msgstr "Sprejmi" #: approver/approver.cpp:543 msgid "End + Answer" msgstr "Končaj + Odgovori" #: approver/approver.cpp:552 msgid "Decline" msgstr "Zavrni" #: approver/approver.cpp:560 msgid "Message & decline" msgstr "Sporoči in zavrni" #: approver/main.cpp:46 msgid "Telephony Service Approver" msgstr "Odobritelj telefonske storitve" #: indicator/authhandler.cpp:72 msgid "Authentication failed. Do you want to review your credentials?" msgstr "Overitev spodletela. Ali želite pregledati vaša poverila?" #: indicator/authhandler.cpp:91 msgid "Yes" msgstr "Da" #: indicator/authhandler.cpp:94 msgid "No" msgstr "Ne" #: indicator/displaynamesettings.cpp:35 #, qt-format msgid "SIM %1" msgstr "SIM %1" #: indicator/main.cpp:53 msgid "Telephony Service Indicator" msgstr "Kazalnik telefonske storitve" #: indicator/messagingmenu.cpp:83 indicator/messagingmenu.cpp:87 msgid "Telephony Service" msgstr "Telefonska storitev" #: indicator/messagingmenu.cpp:151 indicator/messagingmenu.cpp:293 #: indicator/messagingmenu.cpp:360 msgid "Send" msgstr "Pošlji" #. TRANSLATORS : %1 is the group name and %2 is the recipient name #: indicator/messagingmenu.cpp:262 indicator/textchannelobserver.cpp:671 #: indicator/textchannelobserver.cpp:675 #, qt-format msgid "Message to %1 from %2" msgstr "" #. TRANSLATORS : %1 is the recipient name #: indicator/messagingmenu.cpp:265 indicator/messagingmenu.cpp:269 #, fuzzy, qt-format #| msgid "Message to group from %1" msgid "Message to the group from %1" msgstr "Sporočilo skupini iz %1" #: indicator/messagingmenu.cpp:345 msgid "Call back" msgstr "Povratni klic" #: indicator/messagingmenu.cpp:350 #, fuzzy #| msgid "I missed your call - can you call me now?" msgid "Missed your call — can you call me now?" msgstr "Zgrešil sem tvoj klic - me lahko pokličeš zdaj?" #: indicator/messagingmenu.cpp:351 #, fuzzy #| msgid "I'm running late. I'm on my way." msgid "Running late. On my way." msgstr "Zamujam. Sem že na poti." #: indicator/messagingmenu.cpp:352 #, fuzzy #| msgid "I'm busy at the moment. I'll call you later." msgid "Busy at the moment. Will call you later." msgstr "Trenutno sem zaseden. Poklical te bom kasneje." #: indicator/messagingmenu.cpp:353 #, fuzzy #| msgid "I'll be 20 minutes late." msgid "I am 20 minutes late." msgstr "Zamudil bom 20 minut." #: indicator/messagingmenu.cpp:354 #, fuzzy #| msgid "Sorry, I'm still busy. I'll call you later." msgid "Still busy. Will call you later." msgstr "Oprosti, še vedno sem zaseden. Poklical te bom kasneje." #: indicator/messagingmenu.cpp:409 #, qt-format msgid "%1 missed call" msgid_plural "%1 missed calls" msgstr[0] "%1 zgrešenih klicev" msgstr[1] "%1 zgrešen klic" msgstr[2] "%1 zgrešena klica" msgstr[3] "%1 zgrešeni klici" #: indicator/messagingmenu.cpp:492 msgid "Voicemail messages" msgstr "Sporočila glasovne pošte" #: indicator/messagingmenu.cpp:495 #, qt-format msgid "%1 voicemail message" msgid_plural "%1 voicemail messages" msgstr[0] "%1 glasovnih sporočil" msgstr[1] "%1 glasovno sporočilo" msgstr[2] "%1 glasovni sporočili" msgstr[3] "%1 glasovna sporočila" #: indicator/messagingmenu.cpp:500 msgid "Voicemail" msgstr "Glasovna pošta" #: indicator/metrics.cpp:42 #, qt-format msgid "%1 text messages sent today" msgstr "%1 danes poslanih besedilnih sporočil" #: indicator/metrics.cpp:43 msgid "No text messages sent today" msgstr "Danes ni bilo poslanih besedilnih sporočil" #: indicator/metrics.cpp:44 #, qt-format msgid "%1 text messages received today" msgstr "%1 danes prejetih besedilnih sporočil" #: indicator/metrics.cpp:45 msgid "No text messages received today" msgstr "Danes ni bilo prejetih besedilnih sporočil" #: indicator/metrics.cpp:46 #, qt-format msgid "%1 calls received today" msgstr "%1 danes prejetih klicev" #: indicator/metrics.cpp:47 msgid "No calls received today" msgstr "Danes ni bilo prejetih klicev" #: indicator/metrics.cpp:48 #, qt-format msgid "%1 calls made today" msgstr "%1 današnjih opravljenih klicev" #: indicator/metrics.cpp:49 indicator/metrics.cpp:51 msgid "No calls made today" msgstr "Danes ni bilo opravljenih klicev" #: indicator/metrics.cpp:50 #, qt-format msgid "Spent %1 minutes in calls today" msgstr "%1 danes porabljenih minut za klice" #: indicator/textchannelobserver.cpp:225 msgid "Unlock your sim card and try again from the messaging application." msgstr "Odklenite kartico sim ter poskusite znova iz programa za sporočanje." #: indicator/textchannelobserver.cpp:227 msgid "Deactivate flight mode and try again from the messaging application." msgstr "Onemogočite letalski način ter poskusite znova iz programa sporočanja." #: indicator/textchannelobserver.cpp:230 msgid "Try again from the messaging application." msgstr "Poskusite znova iz programa za sporočanje." #: indicator/textchannelobserver.cpp:236 msgid "The message could not be sent" msgstr "Tega sporočila ni bilo mogoče poslati" #: indicator/textchannelobserver.cpp:249 indicator/textchannelobserver.cpp:713 msgid "View message" msgstr "Ogled sporočila" #: indicator/textchannelobserver.cpp:295 msgid "New Group" msgstr "" #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:302 #, qt-format msgid "You joined group %1 " msgstr "" #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:306 #, qt-format msgid "You joined group %1" msgstr "" #: indicator/textchannelobserver.cpp:309 msgid "You joined a new group" msgstr "" #: indicator/textchannelobserver.cpp:328 msgid "View Group" msgstr "" #: indicator/textchannelobserver.cpp:367 indicator/ussdindicator.cpp:116 msgid "Ok" msgstr "V redu" #: indicator/textchannelobserver.cpp:373 msgid "Save" msgstr "Shrani" #: indicator/textchannelobserver.cpp:468 msgid "Emergency Alert" msgstr "" #: indicator/textchannelobserver.cpp:471 msgid "Emergency Alert: Extreme" msgstr "" #: indicator/textchannelobserver.cpp:474 msgid "Emergency Alert: Severe" msgstr "" #: indicator/textchannelobserver.cpp:477 msgid "Emergency Alert: Notice" msgstr "" #: indicator/textchannelobserver.cpp:482 msgid "AMBER Alert" msgstr "" #: indicator/textchannelobserver.cpp:485 msgid "Alert" msgstr "" #: indicator/textchannelobserver.cpp:531 msgid "Show alert" msgstr "" #: indicator/textchannelobserver.cpp:604 #, qt-format msgid "Attachment: %1 image" msgid_plural "Attachments: %1 images" msgstr[0] "Priloga: %1 slik" msgstr[1] "Priloga: %1 slika" msgstr[2] "Priloga: %1 sliki" msgstr[3] "Priloga: %1 slike" #: indicator/textchannelobserver.cpp:606 #, qt-format msgid "Attachment: %1 video" msgid_plural "Attachments: %1 videos" msgstr[0] "Priloga: %1 videov" msgstr[1] "Priloga: %1 video" msgstr[2] "Priloga: %1 videa" msgstr[3] "Priloga: %1 videi" #: indicator/textchannelobserver.cpp:608 #, qt-format msgid "Attachment: %1 contact" msgid_plural "Attachments: %1 contacts" msgstr[0] "Priloga: %1 stikov" msgstr[1] "Priloga: %1 stik" msgstr[2] "Priloga: %1 stika" msgstr[3] "Priloga: %1 stiki" #: indicator/textchannelobserver.cpp:610 #, qt-format msgid "Attachment: %1 audio clip" msgid_plural "Attachments: %1 audio clips" msgstr[0] "Priloge: %1 zvočnih posnetkov" msgstr[1] "Priloga: %1 zvočni posnetek" msgstr[2] "Prilogi: %1 zvočna posnetka" msgstr[3] "Priloge: %1 zvočni posnetki" #: indicator/textchannelobserver.cpp:612 #, qt-format msgid "Attachment: %1 file" msgid_plural "Attachments: %1 files" msgstr[0] "Priloga: %1 datotek" msgstr[1] "Priloga: %1 datoteka" msgstr[2] "Priloga: %1 datoteki" msgstr[3] "Priloga: %1 datoteke" #. TRANSLATORS : message displayed when any error occurred while receiving a MMS (case when cellular-data is off, or any downloading issue). Notify that there was a message, the user can find more about it in the messaging-app. #: indicator/textchannelobserver.cpp:615 #, fuzzy #| msgid "View message" msgid "New MMS message" msgstr "Ogled sporočila" #. TRANSLATORS : %1 is the recipient name #: indicator/textchannelobserver.cpp:679 indicator/textchannelobserver.cpp:683 #, qt-format msgid "Message to group from %1" msgstr "Sporočilo skupini iz %1" #: indicator/textchannelobserver.cpp:749 #, qt-format msgid "Message from %1" msgstr "Sporočilo od %1" #: indicator/textchannelobserver.cpp:910 msgid "Please, select a SIM card:" msgstr "Izberite kartico SIM:" #: indicator/ussdindicator.cpp:119 msgid "Reply" msgstr "Odgovori" #: indicator/ussdindicator.cpp:142 msgid "Cancel" msgstr "Prekliči" #: libtelephonyservice/callnotification.cpp:53 msgid "Conf call on hold" msgstr "" #: libtelephonyservice/callnotification.cpp:53 #, qt-format msgid "%1 call on hold" msgstr "" #: libtelephonyservice/callnotification.cpp:56 msgid "Conf call ended" msgstr "" #: libtelephonyservice/callnotification.cpp:56 #, qt-format msgid "%1 call ended" msgstr "" #: libtelephonyservice/callnotification.cpp:59 #, qt-format msgid "%1 call declined" msgstr "" #: libtelephonyservice/contactwatcher.cpp:157 msgid "Private Number" msgstr "Zasebna številka" #: libtelephonyservice/contactwatcher.cpp:159 msgid "Unknown Number" msgstr "Neznana številka" #, fuzzy #~| msgid "Telephony Service" #~ msgid "telephony-service-call" #~ msgstr "Telefonska storitev" #, fuzzy #~| msgid "Telephony Service" #~ msgid "telephony-service-message" #~ msgstr "Telefonska storitev" telephony-service-0.5.3/po/sq.po000066400000000000000000000221751455543255600166120ustar00rootroot00000000000000# Albanian translation for telephony-service # Copyright (c) 2016 Rosetta Contributors and Canonical Ltd 2016 # This file is distributed under the same license as the telephony-service package. # FIRST AUTHOR , 2016. # msgid "" msgstr "" "Project-Id-Version: telephony-service\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-12-16 17:03+0100\n" "PO-Revision-Date: 2020-12-19 13:26+0000\n" "Last-Translator: Enkli Ylli \n" "Language-Team: Albanian \n" "Language: sq\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Generator: Weblate 3.11.3\n" "X-Launchpad-Export-Date: 2017-01-04 06:02+0000\n" #: indicator/telephony-service-call.desktop.in:4 msgid "Phone Calls" msgstr "" #: indicator/telephony-service-sms.desktop.in:4 msgid "SMS" msgstr "SMS" #: approver/approver.cpp:66 msgid "Unknown caller" msgstr "" #: approver/approver.cpp:94 msgid "I'm busy at the moment. I'll call later." msgstr "" #: approver/approver.cpp:95 msgid "I'm running late, on my way now." msgstr "" #: approver/approver.cpp:96 msgid "Please call me back later." msgstr "" #: approver/approver.cpp:457 #, qt-format msgid "On [%1]" msgstr "" #: approver/approver.cpp:461 indicator/messagingmenu.cpp:414 msgid "Private number" msgstr "" #: approver/approver.cpp:464 indicator/messagingmenu.cpp:244 #: indicator/messagingmenu.cpp:418 indicator/textchannelobserver.cpp:640 msgid "Unknown number" msgstr "" #: approver/approver.cpp:470 approver/approver.cpp:485 msgid "Caller number is not available" msgstr "" #: approver/approver.cpp:476 msgid "Calling from private number" msgstr "Thirrje nga numër privat" #: approver/approver.cpp:479 msgid "Calling from unknown number" msgstr "Thirrje nga numër i panjohur" #: approver/approver.cpp:482 #, qt-format msgid "Calling from %1" msgstr "Thirrje nga %1" #: approver/approver.cpp:529 msgid "Hold + Answer" msgstr "" #: approver/approver.cpp:530 msgid "Accept" msgstr "Prano" #: approver/approver.cpp:543 msgid "End + Answer" msgstr "" #: approver/approver.cpp:552 msgid "Decline" msgstr "" #: approver/approver.cpp:560 msgid "Message & decline" msgstr "" #: approver/main.cpp:46 msgid "Telephony Service Approver" msgstr "" #: indicator/authhandler.cpp:72 msgid "Authentication failed. Do you want to review your credentials?" msgstr "" #: indicator/authhandler.cpp:91 msgid "Yes" msgstr "Po" #: indicator/authhandler.cpp:94 msgid "No" msgstr "Jo" #: indicator/displaynamesettings.cpp:35 #, qt-format msgid "SIM %1" msgstr "SIM %1" #: indicator/main.cpp:53 msgid "Telephony Service Indicator" msgstr "" #: indicator/messagingmenu.cpp:83 indicator/messagingmenu.cpp:87 msgid "Telephony Service" msgstr "" #: indicator/messagingmenu.cpp:151 indicator/messagingmenu.cpp:293 #: indicator/messagingmenu.cpp:360 msgid "Send" msgstr "Dërgo" #. TRANSLATORS : %1 is the group name and %2 is the recipient name #: indicator/messagingmenu.cpp:262 indicator/textchannelobserver.cpp:671 #: indicator/textchannelobserver.cpp:675 #, qt-format msgid "Message to %1 from %2" msgstr "" #. TRANSLATORS : %1 is the recipient name #: indicator/messagingmenu.cpp:265 indicator/messagingmenu.cpp:269 #, fuzzy, qt-format #| msgid "Message from %1" msgid "Message to the group from %1" msgstr "Mesazh nga %1" #: indicator/messagingmenu.cpp:345 msgid "Call back" msgstr "" #: indicator/messagingmenu.cpp:350 msgid "Missed your call — can you call me now?" msgstr "" #: indicator/messagingmenu.cpp:351 msgid "Running late. On my way." msgstr "" #: indicator/messagingmenu.cpp:352 msgid "Busy at the moment. Will call you later." msgstr "" #: indicator/messagingmenu.cpp:353 #, fuzzy #| msgid "I'll be 20 minutes late." msgid "I am 20 minutes late." msgstr "Do vonohem 20 minuta." #: indicator/messagingmenu.cpp:354 msgid "Still busy. Will call you later." msgstr "" #: indicator/messagingmenu.cpp:409 #, qt-format msgid "%1 missed call" msgid_plural "%1 missed calls" msgstr[0] "%1 thirrje e humbur" msgstr[1] "%1 thirrje të humbura" #: indicator/messagingmenu.cpp:492 msgid "Voicemail messages" msgstr "" #: indicator/messagingmenu.cpp:495 #, qt-format msgid "%1 voicemail message" msgid_plural "%1 voicemail messages" msgstr[0] "" msgstr[1] "" #: indicator/messagingmenu.cpp:500 msgid "Voicemail" msgstr "" #: indicator/metrics.cpp:42 #, qt-format msgid "%1 text messages sent today" msgstr "" #: indicator/metrics.cpp:43 msgid "No text messages sent today" msgstr "" #: indicator/metrics.cpp:44 #, qt-format msgid "%1 text messages received today" msgstr "" #: indicator/metrics.cpp:45 msgid "No text messages received today" msgstr "" #: indicator/metrics.cpp:46 #, qt-format msgid "%1 calls received today" msgstr "%1 thirrje të ardhura sot" #: indicator/metrics.cpp:47 msgid "No calls received today" msgstr "" #: indicator/metrics.cpp:48 #, qt-format msgid "%1 calls made today" msgstr "%1 thirrje të bëra sot" #: indicator/metrics.cpp:49 indicator/metrics.cpp:51 msgid "No calls made today" msgstr "Asnjë thirrje e bërë sot" #: indicator/metrics.cpp:50 #, qt-format msgid "Spent %1 minutes in calls today" msgstr "" #: indicator/textchannelobserver.cpp:225 msgid "Unlock your sim card and try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:227 msgid "Deactivate flight mode and try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:230 msgid "Try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:236 msgid "The message could not be sent" msgstr "" #: indicator/textchannelobserver.cpp:249 indicator/textchannelobserver.cpp:713 msgid "View message" msgstr "Shiko mesazhin" #: indicator/textchannelobserver.cpp:295 msgid "New Group" msgstr "" #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:302 #, qt-format msgid "You joined group %1 " msgstr "" #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:306 #, qt-format msgid "You joined group %1" msgstr "" #: indicator/textchannelobserver.cpp:309 msgid "You joined a new group" msgstr "" #: indicator/textchannelobserver.cpp:328 msgid "View Group" msgstr "" #: indicator/textchannelobserver.cpp:367 indicator/ussdindicator.cpp:116 msgid "Ok" msgstr "Ok" #: indicator/textchannelobserver.cpp:373 msgid "Save" msgstr "Ruaj" #: indicator/textchannelobserver.cpp:468 msgid "Emergency Alert" msgstr "" #: indicator/textchannelobserver.cpp:471 msgid "Emergency Alert: Extreme" msgstr "" #: indicator/textchannelobserver.cpp:474 msgid "Emergency Alert: Severe" msgstr "" #: indicator/textchannelobserver.cpp:477 msgid "Emergency Alert: Notice" msgstr "" #: indicator/textchannelobserver.cpp:482 msgid "AMBER Alert" msgstr "" #: indicator/textchannelobserver.cpp:485 msgid "Alert" msgstr "" #: indicator/textchannelobserver.cpp:531 msgid "Show alert" msgstr "" #: indicator/textchannelobserver.cpp:604 #, qt-format msgid "Attachment: %1 image" msgid_plural "Attachments: %1 images" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:606 #, qt-format msgid "Attachment: %1 video" msgid_plural "Attachments: %1 videos" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:608 #, qt-format msgid "Attachment: %1 contact" msgid_plural "Attachments: %1 contacts" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:610 #, qt-format msgid "Attachment: %1 audio clip" msgid_plural "Attachments: %1 audio clips" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:612 #, qt-format msgid "Attachment: %1 file" msgid_plural "Attachments: %1 files" msgstr[0] "" msgstr[1] "" #. TRANSLATORS : message displayed when any error occurred while receiving a MMS (case when cellular-data is off, or any downloading issue). Notify that there was a message, the user can find more about it in the messaging-app. #: indicator/textchannelobserver.cpp:615 #, fuzzy #| msgid "View message" msgid "New MMS message" msgstr "Shiko mesazhin" #. TRANSLATORS : %1 is the recipient name #: indicator/textchannelobserver.cpp:679 indicator/textchannelobserver.cpp:683 #, qt-format msgid "Message to group from %1" msgstr "" #: indicator/textchannelobserver.cpp:749 #, qt-format msgid "Message from %1" msgstr "Mesazh nga %1" #: indicator/textchannelobserver.cpp:910 msgid "Please, select a SIM card:" msgstr "Zgjidh një skedë SIM:" #: indicator/ussdindicator.cpp:119 msgid "Reply" msgstr "Përgjigju" #: indicator/ussdindicator.cpp:142 msgid "Cancel" msgstr "Anullo" #: libtelephonyservice/callnotification.cpp:53 msgid "Conf call on hold" msgstr "" #: libtelephonyservice/callnotification.cpp:53 #, qt-format msgid "%1 call on hold" msgstr "" #: libtelephonyservice/callnotification.cpp:56 msgid "Conf call ended" msgstr "" #: libtelephonyservice/callnotification.cpp:56 #, qt-format msgid "%1 call ended" msgstr "" #: libtelephonyservice/callnotification.cpp:59 #, qt-format msgid "%1 call declined" msgstr "" #: libtelephonyservice/contactwatcher.cpp:157 msgid "Private Number" msgstr "" #: libtelephonyservice/contactwatcher.cpp:159 msgid "Unknown Number" msgstr "" telephony-service-0.5.3/po/sr.po000066400000000000000000000310001455543255600165760ustar00rootroot00000000000000# Serbian translation for telephony-service # Copyright (c) 2014 Rosetta Contributors and Canonical Ltd 2014 # This file is distributed under the same license as the telephony-service package. # FIRST AUTHOR , 2014. # msgid "" msgstr "" "Project-Id-Version: telephony-service\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-12-16 17:03+0100\n" "PO-Revision-Date: 2016-03-04 15:24+0000\n" "Last-Translator: Данило Шеган \n" "Language-Team: Serbian \n" "Language: sr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && " "n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" "X-Launchpad-Export-Date: 2017-01-04 06:03+0000\n" "X-Generator: Launchpad (build 18298)\n" #: indicator/telephony-service-call.desktop.in:4 msgid "Phone Calls" msgstr "Телефонски позиви" #: indicator/telephony-service-sms.desktop.in:4 msgid "SMS" msgstr "СМС" #: approver/approver.cpp:66 msgid "Unknown caller" msgstr "Непознат позивалац" #: approver/approver.cpp:94 msgid "I'm busy at the moment. I'll call later." msgstr "Тренутно сам заузет. Назваћу касније." #: approver/approver.cpp:95 msgid "I'm running late, on my way now." msgstr "Касним, на путу сам." #: approver/approver.cpp:96 msgid "Please call me back later." msgstr "Назовите ме касније." #: approver/approver.cpp:457 #, qt-format msgid "On [%1]" msgstr "На [%1]" #: approver/approver.cpp:461 indicator/messagingmenu.cpp:414 msgid "Private number" msgstr "Скривени број" #: approver/approver.cpp:464 indicator/messagingmenu.cpp:244 #: indicator/messagingmenu.cpp:418 indicator/textchannelobserver.cpp:640 msgid "Unknown number" msgstr "Непознат број" #: approver/approver.cpp:470 approver/approver.cpp:485 msgid "Caller number is not available" msgstr "Број позиваоца није доступан" #: approver/approver.cpp:476 msgid "Calling from private number" msgstr "Позив са скривеног броја" #: approver/approver.cpp:479 msgid "Calling from unknown number" msgstr "Позив са непознатог броја" #: approver/approver.cpp:482 #, qt-format msgid "Calling from %1" msgstr "Зове са %1" #: approver/approver.cpp:529 msgid "Hold + Answer" msgstr "Задржи и одговори" #: approver/approver.cpp:530 msgid "Accept" msgstr "Прихвати" #: approver/approver.cpp:543 msgid "End + Answer" msgstr "Заврши и Одговори" #: approver/approver.cpp:552 msgid "Decline" msgstr "Одбиј" #: approver/approver.cpp:560 msgid "Message & decline" msgstr "Поручи и одбиј" #: approver/main.cpp:46 msgid "Telephony Service Approver" msgstr "Одобравање услуге телефонирања" #: indicator/authhandler.cpp:72 msgid "Authentication failed. Do you want to review your credentials?" msgstr "Потврда идентитета није успела. Да ли желите да обновите ваша уверења?" #: indicator/authhandler.cpp:91 msgid "Yes" msgstr "Да" #: indicator/authhandler.cpp:94 msgid "No" msgstr "Не" #: indicator/displaynamesettings.cpp:35 #, qt-format msgid "SIM %1" msgstr "СИМ %1" #: indicator/main.cpp:53 msgid "Telephony Service Indicator" msgstr "Индикатор услуге телефонирања" #: indicator/messagingmenu.cpp:83 indicator/messagingmenu.cpp:87 msgid "Telephony Service" msgstr "Услуга телефонирања" #: indicator/messagingmenu.cpp:151 indicator/messagingmenu.cpp:293 #: indicator/messagingmenu.cpp:360 msgid "Send" msgstr "Пошаљи" #. TRANSLATORS : %1 is the group name and %2 is the recipient name #: indicator/messagingmenu.cpp:262 indicator/textchannelobserver.cpp:671 #: indicator/textchannelobserver.cpp:675 #, qt-format msgid "Message to %1 from %2" msgstr "" #. TRANSLATORS : %1 is the recipient name #: indicator/messagingmenu.cpp:265 indicator/messagingmenu.cpp:269 #, fuzzy, qt-format #| msgid "Message to group from %1" msgid "Message to the group from %1" msgstr "Пошаљи поруку групи са %1" #: indicator/messagingmenu.cpp:345 msgid "Call back" msgstr "Узврати позив" #: indicator/messagingmenu.cpp:350 #, fuzzy #| msgid "I missed your call - can you call me now?" msgid "Missed your call — can you call me now?" msgstr "Пропустио сам твој позив — можеш ли ме сада позвати?" #: indicator/messagingmenu.cpp:351 #, fuzzy #| msgid "I'm running late. I'm on my way." msgid "Running late. On my way." msgstr "Касним. На путу сам." #: indicator/messagingmenu.cpp:352 #, fuzzy #| msgid "I'm busy at the moment. I'll call you later." msgid "Busy at the moment. Will call you later." msgstr "Тренутно сам заузет. Назваћу вас касније." #: indicator/messagingmenu.cpp:353 #, fuzzy #| msgid "I'll be 20 minutes late." msgid "I am 20 minutes late." msgstr "Касним 20 минута." #: indicator/messagingmenu.cpp:354 #, fuzzy #| msgid "Sorry, I'm still busy. I'll call you later." msgid "Still busy. Will call you later." msgstr "Извините, и даље сам заузет. Назваћу вас касније." #: indicator/messagingmenu.cpp:409 #, qt-format msgid "%1 missed call" msgid_plural "%1 missed calls" msgstr[0] "%1 пропуштен позив" msgstr[1] "%1 пропуштена позива" msgstr[2] "%1 пропуштених позива" #: indicator/messagingmenu.cpp:492 msgid "Voicemail messages" msgstr "Поруке говорне поште" #: indicator/messagingmenu.cpp:495 #, qt-format msgid "%1 voicemail message" msgid_plural "%1 voicemail messages" msgstr[0] "%1 говорна порука" msgstr[1] "%1 говорне поруке" msgstr[2] "%1 говорних порука" #: indicator/messagingmenu.cpp:500 msgid "Voicemail" msgstr "Говорна пошта" #: indicator/metrics.cpp:42 #, qt-format msgid "%1 text messages sent today" msgstr "Данас је послато %1 текстуалних порука" #: indicator/metrics.cpp:43 msgid "No text messages sent today" msgstr "Данас није било послатих порука" #: indicator/metrics.cpp:44 #, qt-format msgid "%1 text messages received today" msgstr "Данас је примљено %1 текстуалних порука" #: indicator/metrics.cpp:45 msgid "No text messages received today" msgstr "Данас нема примљених порука" #: indicator/metrics.cpp:46 #, qt-format msgid "%1 calls received today" msgstr "Данас је примљено %1 позива" #: indicator/metrics.cpp:47 msgid "No calls received today" msgstr "Данас нема примљених позива" #: indicator/metrics.cpp:48 #, qt-format msgid "%1 calls made today" msgstr "Данас је направљено %1 позива" #: indicator/metrics.cpp:49 indicator/metrics.cpp:51 msgid "No calls made today" msgstr "Данас није било позива" #: indicator/metrics.cpp:50 #, qt-format msgid "Spent %1 minutes in calls today" msgstr "Данас сте потрошили %1 минута на позиве" #: indicator/textchannelobserver.cpp:225 msgid "Unlock your sim card and try again from the messaging application." msgstr "Откључајте сим картицу и покушајте поново из програма за поруке." #: indicator/textchannelobserver.cpp:227 msgid "Deactivate flight mode and try again from the messaging application." msgstr "Искључите режим у авиону и покушајте поново из програма за поруке." #: indicator/textchannelobserver.cpp:230 msgid "Try again from the messaging application." msgstr "Покушајте поново из програма за поруке." #: indicator/textchannelobserver.cpp:236 msgid "The message could not be sent" msgstr "Не могу да пошаљем поруку" #: indicator/textchannelobserver.cpp:249 indicator/textchannelobserver.cpp:713 msgid "View message" msgstr "Погледај поруку" #: indicator/textchannelobserver.cpp:295 msgid "New Group" msgstr "" #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:302 #, qt-format msgid "You joined group %1 " msgstr "" #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:306 #, qt-format msgid "You joined group %1" msgstr "" #: indicator/textchannelobserver.cpp:309 msgid "You joined a new group" msgstr "" #: indicator/textchannelobserver.cpp:328 msgid "View Group" msgstr "" #: indicator/textchannelobserver.cpp:367 indicator/ussdindicator.cpp:116 msgid "Ok" msgstr "У реду" #: indicator/textchannelobserver.cpp:373 msgid "Save" msgstr "Сачувај" #: indicator/textchannelobserver.cpp:468 msgid "Emergency Alert" msgstr "" #: indicator/textchannelobserver.cpp:471 msgid "Emergency Alert: Extreme" msgstr "" #: indicator/textchannelobserver.cpp:474 msgid "Emergency Alert: Severe" msgstr "" #: indicator/textchannelobserver.cpp:477 msgid "Emergency Alert: Notice" msgstr "" #: indicator/textchannelobserver.cpp:482 msgid "AMBER Alert" msgstr "" #: indicator/textchannelobserver.cpp:485 msgid "Alert" msgstr "" #: indicator/textchannelobserver.cpp:531 msgid "Show alert" msgstr "" #: indicator/textchannelobserver.cpp:604 #, qt-format msgid "Attachment: %1 image" msgid_plural "Attachments: %1 images" msgstr[0] "Прилог: %1 слика" msgstr[1] "Прилози: %1 слике" msgstr[2] "Прилози: %1 слика" #: indicator/textchannelobserver.cpp:606 #, qt-format msgid "Attachment: %1 video" msgid_plural "Attachments: %1 videos" msgstr[0] "Прилог: %1 видео" msgstr[1] "Прилози: %1 видеа" msgstr[2] "Прилози: %1 видеа" #: indicator/textchannelobserver.cpp:608 #, qt-format msgid "Attachment: %1 contact" msgid_plural "Attachments: %1 contacts" msgstr[0] "Прилог: %1 контакт" msgstr[1] "Прилози: %1 контакта" msgstr[2] "Прилози: %1 контаката" #: indicator/textchannelobserver.cpp:610 #, qt-format msgid "Attachment: %1 audio clip" msgid_plural "Attachments: %1 audio clips" msgstr[0] "Прилог: %1 аудио запис" msgstr[1] "Прилози: %1 аудио записа" msgstr[2] "Прилози: %1 аудио записа" #: indicator/textchannelobserver.cpp:612 #, qt-format msgid "Attachment: %1 file" msgid_plural "Attachments: %1 files" msgstr[0] "Прилог: %1 датотека" msgstr[1] "Прилози: %1 датотеке" msgstr[2] "Прилози: %1 датотека" #. TRANSLATORS : message displayed when any error occurred while receiving a MMS (case when cellular-data is off, or any downloading issue). Notify that there was a message, the user can find more about it in the messaging-app. #: indicator/textchannelobserver.cpp:615 #, fuzzy #| msgid "View message" msgid "New MMS message" msgstr "Погледај поруку" #. TRANSLATORS : %1 is the recipient name #: indicator/textchannelobserver.cpp:679 indicator/textchannelobserver.cpp:683 #, qt-format msgid "Message to group from %1" msgstr "Пошаљи поруку групи са %1" #: indicator/textchannelobserver.cpp:749 #, qt-format msgid "Message from %1" msgstr "Поруку шаље %1" #: indicator/textchannelobserver.cpp:910 msgid "Please, select a SIM card:" msgstr "Изаберите СИМ картицу:" #: indicator/ussdindicator.cpp:119 msgid "Reply" msgstr "Одговори" #: indicator/ussdindicator.cpp:142 msgid "Cancel" msgstr "Откажи" #: libtelephonyservice/callnotification.cpp:53 msgid "Conf call on hold" msgstr "" #: libtelephonyservice/callnotification.cpp:53 #, qt-format msgid "%1 call on hold" msgstr "" #: libtelephonyservice/callnotification.cpp:56 msgid "Conf call ended" msgstr "" #: libtelephonyservice/callnotification.cpp:56 #, qt-format msgid "%1 call ended" msgstr "" #: libtelephonyservice/callnotification.cpp:59 #, qt-format msgid "%1 call declined" msgstr "" #: libtelephonyservice/contactwatcher.cpp:157 msgid "Private Number" msgstr "Скривени број" #: libtelephonyservice/contactwatcher.cpp:159 msgid "Unknown Number" msgstr "Непознат број" #, fuzzy #~| msgid "Telephony Service" #~ msgid "telephony-service-call" #~ msgstr "Услуга телефонирања" #, fuzzy #~| msgid "Telephony Service" #~ msgid "telephony-service-message" #~ msgstr "Услуга телефонирања" telephony-service-0.5.3/po/st.po000066400000000000000000000207371455543255600166170ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR Canonical Ltd. # This file is distributed under the same license as the telephony-service package. # FIRST AUTHOR , YEAR. # msgid "" msgstr "" "Project-Id-Version: telephony-service\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-12-16 17:03+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: Automatically generated\n" "Language-Team: none\n" "Language: st\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" #: indicator/telephony-service-call.desktop.in:4 msgid "Phone Calls" msgstr "" #: indicator/telephony-service-sms.desktop.in:4 msgid "SMS" msgstr "" #: approver/approver.cpp:66 msgid "Unknown caller" msgstr "" #: approver/approver.cpp:94 msgid "I'm busy at the moment. I'll call later." msgstr "" #: approver/approver.cpp:95 msgid "I'm running late, on my way now." msgstr "" #: approver/approver.cpp:96 msgid "Please call me back later." msgstr "" #: approver/approver.cpp:457 #, qt-format msgid "On [%1]" msgstr "" #: approver/approver.cpp:461 indicator/messagingmenu.cpp:414 msgid "Private number" msgstr "" #: approver/approver.cpp:464 indicator/messagingmenu.cpp:244 #: indicator/messagingmenu.cpp:418 indicator/textchannelobserver.cpp:640 msgid "Unknown number" msgstr "" #: approver/approver.cpp:470 approver/approver.cpp:485 msgid "Caller number is not available" msgstr "" #: approver/approver.cpp:476 msgid "Calling from private number" msgstr "" #: approver/approver.cpp:479 msgid "Calling from unknown number" msgstr "" #: approver/approver.cpp:482 #, qt-format msgid "Calling from %1" msgstr "" #: approver/approver.cpp:529 msgid "Hold + Answer" msgstr "" #: approver/approver.cpp:530 msgid "Accept" msgstr "" #: approver/approver.cpp:543 msgid "End + Answer" msgstr "" #: approver/approver.cpp:552 msgid "Decline" msgstr "" #: approver/approver.cpp:560 msgid "Message & decline" msgstr "" #: approver/main.cpp:46 msgid "Telephony Service Approver" msgstr "" #: indicator/authhandler.cpp:72 msgid "Authentication failed. Do you want to review your credentials?" msgstr "" #: indicator/authhandler.cpp:91 msgid "Yes" msgstr "" #: indicator/authhandler.cpp:94 msgid "No" msgstr "" #: indicator/displaynamesettings.cpp:35 #, qt-format msgid "SIM %1" msgstr "" #: indicator/main.cpp:53 msgid "Telephony Service Indicator" msgstr "" #: indicator/messagingmenu.cpp:83 indicator/messagingmenu.cpp:87 msgid "Telephony Service" msgstr "" #: indicator/messagingmenu.cpp:151 indicator/messagingmenu.cpp:293 #: indicator/messagingmenu.cpp:360 msgid "Send" msgstr "" #. TRANSLATORS : %1 is the group name and %2 is the recipient name #: indicator/messagingmenu.cpp:262 indicator/textchannelobserver.cpp:671 #: indicator/textchannelobserver.cpp:675 #, qt-format msgid "Message to %1 from %2" msgstr "" #. TRANSLATORS : %1 is the recipient name #: indicator/messagingmenu.cpp:265 indicator/messagingmenu.cpp:269 #, qt-format msgid "Message to the group from %1" msgstr "" #: indicator/messagingmenu.cpp:345 msgid "Call back" msgstr "" #: indicator/messagingmenu.cpp:350 msgid "Missed your call — can you call me now?" msgstr "" #: indicator/messagingmenu.cpp:351 msgid "Running late. On my way." msgstr "" #: indicator/messagingmenu.cpp:352 msgid "Busy at the moment. Will call you later." msgstr "" #: indicator/messagingmenu.cpp:353 msgid "I am 20 minutes late." msgstr "" #: indicator/messagingmenu.cpp:354 msgid "Still busy. Will call you later." msgstr "" #: indicator/messagingmenu.cpp:409 #, qt-format msgid "%1 missed call" msgid_plural "%1 missed calls" msgstr[0] "" msgstr[1] "" #: indicator/messagingmenu.cpp:492 msgid "Voicemail messages" msgstr "" #: indicator/messagingmenu.cpp:495 #, qt-format msgid "%1 voicemail message" msgid_plural "%1 voicemail messages" msgstr[0] "" msgstr[1] "" #: indicator/messagingmenu.cpp:500 msgid "Voicemail" msgstr "" #: indicator/metrics.cpp:42 #, qt-format msgid "%1 text messages sent today" msgstr "" #: indicator/metrics.cpp:43 msgid "No text messages sent today" msgstr "" #: indicator/metrics.cpp:44 #, qt-format msgid "%1 text messages received today" msgstr "" #: indicator/metrics.cpp:45 msgid "No text messages received today" msgstr "" #: indicator/metrics.cpp:46 #, qt-format msgid "%1 calls received today" msgstr "" #: indicator/metrics.cpp:47 msgid "No calls received today" msgstr "" #: indicator/metrics.cpp:48 #, qt-format msgid "%1 calls made today" msgstr "" #: indicator/metrics.cpp:49 indicator/metrics.cpp:51 msgid "No calls made today" msgstr "" #: indicator/metrics.cpp:50 #, qt-format msgid "Spent %1 minutes in calls today" msgstr "" #: indicator/textchannelobserver.cpp:225 msgid "Unlock your sim card and try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:227 msgid "Deactivate flight mode and try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:230 msgid "Try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:236 msgid "The message could not be sent" msgstr "" #: indicator/textchannelobserver.cpp:249 indicator/textchannelobserver.cpp:713 msgid "View message" msgstr "" #: indicator/textchannelobserver.cpp:295 msgid "New Group" msgstr "" #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:302 #, qt-format msgid "You joined group %1 " msgstr "" #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:306 #, qt-format msgid "You joined group %1" msgstr "" #: indicator/textchannelobserver.cpp:309 msgid "You joined a new group" msgstr "" #: indicator/textchannelobserver.cpp:328 msgid "View Group" msgstr "" #: indicator/textchannelobserver.cpp:367 indicator/ussdindicator.cpp:116 msgid "Ok" msgstr "" #: indicator/textchannelobserver.cpp:373 msgid "Save" msgstr "" #: indicator/textchannelobserver.cpp:468 msgid "Emergency Alert" msgstr "" #: indicator/textchannelobserver.cpp:471 msgid "Emergency Alert: Extreme" msgstr "" #: indicator/textchannelobserver.cpp:474 msgid "Emergency Alert: Severe" msgstr "" #: indicator/textchannelobserver.cpp:477 msgid "Emergency Alert: Notice" msgstr "" #: indicator/textchannelobserver.cpp:482 msgid "AMBER Alert" msgstr "" #: indicator/textchannelobserver.cpp:485 msgid "Alert" msgstr "" #: indicator/textchannelobserver.cpp:531 msgid "Show alert" msgstr "" #: indicator/textchannelobserver.cpp:604 #, qt-format msgid "Attachment: %1 image" msgid_plural "Attachments: %1 images" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:606 #, qt-format msgid "Attachment: %1 video" msgid_plural "Attachments: %1 videos" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:608 #, qt-format msgid "Attachment: %1 contact" msgid_plural "Attachments: %1 contacts" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:610 #, qt-format msgid "Attachment: %1 audio clip" msgid_plural "Attachments: %1 audio clips" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:612 #, qt-format msgid "Attachment: %1 file" msgid_plural "Attachments: %1 files" msgstr[0] "" msgstr[1] "" #. TRANSLATORS : message displayed when any error occurred while receiving a MMS (case when cellular-data is off, or any downloading issue). Notify that there was a message, the user can find more about it in the messaging-app. #: indicator/textchannelobserver.cpp:615 msgid "New MMS message" msgstr "" #. TRANSLATORS : %1 is the recipient name #: indicator/textchannelobserver.cpp:679 indicator/textchannelobserver.cpp:683 #, qt-format msgid "Message to group from %1" msgstr "" #: indicator/textchannelobserver.cpp:749 #, qt-format msgid "Message from %1" msgstr "" #: indicator/textchannelobserver.cpp:910 msgid "Please, select a SIM card:" msgstr "" #: indicator/ussdindicator.cpp:119 msgid "Reply" msgstr "" #: indicator/ussdindicator.cpp:142 msgid "Cancel" msgstr "" #: libtelephonyservice/callnotification.cpp:53 msgid "Conf call on hold" msgstr "" #: libtelephonyservice/callnotification.cpp:53 #, qt-format msgid "%1 call on hold" msgstr "" #: libtelephonyservice/callnotification.cpp:56 msgid "Conf call ended" msgstr "" #: libtelephonyservice/callnotification.cpp:56 #, qt-format msgid "%1 call ended" msgstr "" #: libtelephonyservice/callnotification.cpp:59 #, qt-format msgid "%1 call declined" msgstr "" #: libtelephonyservice/contactwatcher.cpp:157 msgid "Private Number" msgstr "" #: libtelephonyservice/contactwatcher.cpp:159 msgid "Unknown Number" msgstr "" telephony-service-0.5.3/po/sv.po000066400000000000000000000255121455543255600166150ustar00rootroot00000000000000# Swedish translation for telephony-service # Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013 # This file is distributed under the same license as the telephony-service package. # FIRST AUTHOR , 2013. # clone , 2015. msgid "" msgstr "" "Project-Id-Version: telephony-service\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-12-16 17:03+0100\n" "PO-Revision-Date: 2023-03-01 09:37+0000\n" "Last-Translator: Luna Jernberg \n" "Language-Team: Swedish \n" "Language: sv\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Generator: Weblate 4.16-rc\n" "X-Launchpad-Export-Date: 2017-01-04 06:03+0000\n" #: indicator/telephony-service-call.desktop.in:4 msgid "Phone Calls" msgstr "Telefonsamtal" #: indicator/telephony-service-sms.desktop.in:4 msgid "SMS" msgstr "SMS" #: approver/approver.cpp:66 msgid "Unknown caller" msgstr "Okänd uppringare" #: approver/approver.cpp:94 msgid "I'm busy at the moment. I'll call later." msgstr "Jag är upptagen för tillfället. Jag ringer upp senare." #: approver/approver.cpp:95 msgid "I'm running late, on my way now." msgstr "Jag är sen, men är på väg nu." #: approver/approver.cpp:96 msgid "Please call me back later." msgstr "Ring upp mig senare." #: approver/approver.cpp:457 #, qt-format msgid "On [%1]" msgstr "På [%1]" #: approver/approver.cpp:461 indicator/messagingmenu.cpp:414 msgid "Private number" msgstr "Dolt nummer" #: approver/approver.cpp:464 indicator/messagingmenu.cpp:244 #: indicator/messagingmenu.cpp:418 indicator/textchannelobserver.cpp:640 msgid "Unknown number" msgstr "Okänt nummer" #: approver/approver.cpp:470 approver/approver.cpp:485 msgid "Caller number is not available" msgstr "Uppringarens nummer är inte tillgängligt" #: approver/approver.cpp:476 msgid "Calling from private number" msgstr "Ringer från dolt nummer" #: approver/approver.cpp:479 msgid "Calling from unknown number" msgstr "Ringer från okänt nummer" #: approver/approver.cpp:482 #, qt-format msgid "Calling from %1" msgstr "Ringer från %1" #: approver/approver.cpp:529 msgid "Hold + Answer" msgstr "Vänta + Svara" #: approver/approver.cpp:530 msgid "Accept" msgstr "Acceptera" #: approver/approver.cpp:543 msgid "End + Answer" msgstr "Avsluta + Svara" #: approver/approver.cpp:552 msgid "Decline" msgstr "Avvisa" #: approver/approver.cpp:560 msgid "Message & decline" msgstr "Meddela och neka" #: approver/main.cpp:46 msgid "Telephony Service Approver" msgstr "Godkännare av telefonitjänst" #: indicator/authhandler.cpp:72 msgid "Authentication failed. Do you want to review your credentials?" msgstr "" "Autentisering misslyckades. Vill du granska din inloggningsinformation?" #: indicator/authhandler.cpp:91 msgid "Yes" msgstr "Ja" #: indicator/authhandler.cpp:94 msgid "No" msgstr "Nej" #: indicator/displaynamesettings.cpp:35 #, qt-format msgid "SIM %1" msgstr "SIM %1" #: indicator/main.cpp:53 msgid "Telephony Service Indicator" msgstr "Telefonitjänstindikator" #: indicator/messagingmenu.cpp:83 indicator/messagingmenu.cpp:87 msgid "Telephony Service" msgstr "Telefonitjänst" #: indicator/messagingmenu.cpp:151 indicator/messagingmenu.cpp:293 #: indicator/messagingmenu.cpp:360 msgid "Send" msgstr "Skicka" #. TRANSLATORS : %1 is the group name and %2 is the recipient name #: indicator/messagingmenu.cpp:262 indicator/textchannelobserver.cpp:671 #: indicator/textchannelobserver.cpp:675 #, qt-format msgid "Message to %1 from %2" msgstr "Meddelande till %1 från %2" #. TRANSLATORS : %1 is the recipient name #: indicator/messagingmenu.cpp:265 indicator/messagingmenu.cpp:269 #, qt-format msgid "Message to the group from %1" msgstr "Meddelande till en grupp från %1" #: indicator/messagingmenu.cpp:345 msgid "Call back" msgstr "Ring tillbaka" #: indicator/messagingmenu.cpp:350 msgid "Missed your call — can you call me now?" msgstr "Missade ditt samtal - kan du ringa mig nu?" #: indicator/messagingmenu.cpp:351 msgid "Running late. On my way." msgstr "Försenad, men jag är på väg." #: indicator/messagingmenu.cpp:352 msgid "Busy at the moment. Will call you later." msgstr "Upptagen just nu. Kommer att ringa dig senare." #: indicator/messagingmenu.cpp:353 msgid "I am 20 minutes late." msgstr "Jag är 20 minuter sen." #: indicator/messagingmenu.cpp:354 msgid "Still busy. Will call you later." msgstr "Fortfarande upptagen. Kommer att ringa dig senare." #: indicator/messagingmenu.cpp:409 #, qt-format msgid "%1 missed call" msgid_plural "%1 missed calls" msgstr[0] "%1 missat samtal" msgstr[1] "%1 missade samtal" #: indicator/messagingmenu.cpp:492 msgid "Voicemail messages" msgstr "Meddelanden på telefonsvararen" #: indicator/messagingmenu.cpp:495 #, qt-format msgid "%1 voicemail message" msgid_plural "%1 voicemail messages" msgstr[0] "%1 röstmeddelande" msgstr[1] "%1 röstmeddelanden" #: indicator/messagingmenu.cpp:500 msgid "Voicemail" msgstr "Röstbrevlåda" #: indicator/metrics.cpp:42 #, qt-format msgid "%1 text messages sent today" msgstr "%1 textmeddelanden skickade idag" #: indicator/metrics.cpp:43 msgid "No text messages sent today" msgstr "Inga textmeddelanden skickade idag" #: indicator/metrics.cpp:44 #, qt-format msgid "%1 text messages received today" msgstr "%1 textmeddelanden mottagna idag" #: indicator/metrics.cpp:45 msgid "No text messages received today" msgstr "Inga textmeddelanden mottagna idag" #: indicator/metrics.cpp:46 #, qt-format msgid "%1 calls received today" msgstr "%1 samtal mottagna idag" #: indicator/metrics.cpp:47 msgid "No calls received today" msgstr "Inga samtal mottagna idag" #: indicator/metrics.cpp:48 #, qt-format msgid "%1 calls made today" msgstr "%1 samtal gjorda idag" #: indicator/metrics.cpp:49 indicator/metrics.cpp:51 msgid "No calls made today" msgstr "Inga samtal gjorda idag" #: indicator/metrics.cpp:50 #, qt-format msgid "Spent %1 minutes in calls today" msgstr "Spenderat %1 minuter i samtal idag" #: indicator/textchannelobserver.cpp:225 msgid "Unlock your sim card and try again from the messaging application." msgstr "Lås upp ditt simkort och prova igen från meddelandeprogrammet." #: indicator/textchannelobserver.cpp:227 msgid "Deactivate flight mode and try again from the messaging application." msgstr "Inaktivera flygläge och prova igen från meddelandeprogrammet." #: indicator/textchannelobserver.cpp:230 msgid "Try again from the messaging application." msgstr "Prova igen från meddelandeprogrammet." #: indicator/textchannelobserver.cpp:236 msgid "The message could not be sent" msgstr "Meddelandet kunde inte skickas" #: indicator/textchannelobserver.cpp:249 indicator/textchannelobserver.cpp:713 msgid "View message" msgstr "Visa meddelande" #: indicator/textchannelobserver.cpp:295 msgid "New Group" msgstr "Ny grupp" #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:302 #, qt-format msgid "You joined group %1 " msgstr "Du gick med i grupp %1 " #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:306 #, qt-format msgid "You joined group %1" msgstr "Du gick med i grupp %1" #: indicator/textchannelobserver.cpp:309 msgid "You joined a new group" msgstr "Du gick med i en ny grupp" #: indicator/textchannelobserver.cpp:328 msgid "View Group" msgstr "Visa grupp" #: indicator/textchannelobserver.cpp:367 indicator/ussdindicator.cpp:116 msgid "Ok" msgstr "Ok" #: indicator/textchannelobserver.cpp:373 msgid "Save" msgstr "Spara" #: indicator/textchannelobserver.cpp:468 msgid "Emergency Alert" msgstr "Akutvarning" #: indicator/textchannelobserver.cpp:471 msgid "Emergency Alert: Extreme" msgstr "Akutvarning: Extrem" #: indicator/textchannelobserver.cpp:474 msgid "Emergency Alert: Severe" msgstr "Akutvarning: Svår" #: indicator/textchannelobserver.cpp:477 msgid "Emergency Alert: Notice" msgstr "Akutvarning: Notis" #: indicator/textchannelobserver.cpp:482 msgid "AMBER Alert" msgstr "AMBER Varning" #: indicator/textchannelobserver.cpp:485 msgid "Alert" msgstr "Varning" #: indicator/textchannelobserver.cpp:531 msgid "Show alert" msgstr "Visa varning" #: indicator/textchannelobserver.cpp:604 #, qt-format msgid "Attachment: %1 image" msgid_plural "Attachments: %1 images" msgstr[0] "Bilaga: %1 bild" msgstr[1] "Bilagor: %1 bilder" #: indicator/textchannelobserver.cpp:606 #, qt-format msgid "Attachment: %1 video" msgid_plural "Attachments: %1 videos" msgstr[0] "Bilaga: %1 videofilm" msgstr[1] "Bilagor: %1 videofilmer" #: indicator/textchannelobserver.cpp:608 #, qt-format msgid "Attachment: %1 contact" msgid_plural "Attachments: %1 contacts" msgstr[0] "Bilaga: %1 kontakt" msgstr[1] "Bilagor: %1 kontakter" #: indicator/textchannelobserver.cpp:610 #, qt-format msgid "Attachment: %1 audio clip" msgid_plural "Attachments: %1 audio clips" msgstr[0] "Bilaga: %1 ljudklipp" msgstr[1] "Bilagor: %1 ljudklipp" #: indicator/textchannelobserver.cpp:612 #, qt-format msgid "Attachment: %1 file" msgid_plural "Attachments: %1 files" msgstr[0] "Bilaga: %1 fil" msgstr[1] "Bilagor: %1 filer" #. TRANSLATORS : message displayed when any error occurred while receiving a MMS (case when cellular-data is off, or any downloading issue). Notify that there was a message, the user can find more about it in the messaging-app. #: indicator/textchannelobserver.cpp:615 msgid "New MMS message" msgstr "Nytt MMS-meddelande" #. TRANSLATORS : %1 is the recipient name #: indicator/textchannelobserver.cpp:679 indicator/textchannelobserver.cpp:683 #, qt-format msgid "Message to group from %1" msgstr "Meddelande till grupp från %1" #: indicator/textchannelobserver.cpp:749 #, qt-format msgid "Message from %1" msgstr "Meddelande från %1" #: indicator/textchannelobserver.cpp:910 msgid "Please, select a SIM card:" msgstr "Välj ett SIM-kort:" #: indicator/ussdindicator.cpp:119 msgid "Reply" msgstr "Svara" #: indicator/ussdindicator.cpp:142 msgid "Cancel" msgstr "Avbryt" #: libtelephonyservice/callnotification.cpp:53 msgid "Conf call on hold" msgstr "Konferans samtal placerat i kö" #: libtelephonyservice/callnotification.cpp:53 #, qt-format msgid "%1 call on hold" msgstr "%1 samtal placerat i kö" #: libtelephonyservice/callnotification.cpp:56 msgid "Conf call ended" msgstr "Konferans samtal avslutat" #: libtelephonyservice/callnotification.cpp:56 #, qt-format msgid "%1 call ended" msgstr "%1 samtal avslutat" #: libtelephonyservice/callnotification.cpp:59 #, qt-format msgid "%1 call declined" msgstr "%1 samtal avvisat" #: libtelephonyservice/contactwatcher.cpp:157 msgid "Private Number" msgstr "Dolt nummer" #: libtelephonyservice/contactwatcher.cpp:159 msgid "Unknown Number" msgstr "Okänt nummer" #~ msgid "telephony-service-call" #~ msgstr "Telefonitjänst-samtal" #~ msgid "telephony-service-message" #~ msgstr "Telefonitjänst-meddelande" telephony-service-0.5.3/po/sw.po000066400000000000000000000207371455543255600166220ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR Canonical Ltd. # This file is distributed under the same license as the telephony-service package. # FIRST AUTHOR , YEAR. # msgid "" msgstr "" "Project-Id-Version: telephony-service\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-12-16 17:03+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: Automatically generated\n" "Language-Team: none\n" "Language: sw\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" #: indicator/telephony-service-call.desktop.in:4 msgid "Phone Calls" msgstr "" #: indicator/telephony-service-sms.desktop.in:4 msgid "SMS" msgstr "" #: approver/approver.cpp:66 msgid "Unknown caller" msgstr "" #: approver/approver.cpp:94 msgid "I'm busy at the moment. I'll call later." msgstr "" #: approver/approver.cpp:95 msgid "I'm running late, on my way now." msgstr "" #: approver/approver.cpp:96 msgid "Please call me back later." msgstr "" #: approver/approver.cpp:457 #, qt-format msgid "On [%1]" msgstr "" #: approver/approver.cpp:461 indicator/messagingmenu.cpp:414 msgid "Private number" msgstr "" #: approver/approver.cpp:464 indicator/messagingmenu.cpp:244 #: indicator/messagingmenu.cpp:418 indicator/textchannelobserver.cpp:640 msgid "Unknown number" msgstr "" #: approver/approver.cpp:470 approver/approver.cpp:485 msgid "Caller number is not available" msgstr "" #: approver/approver.cpp:476 msgid "Calling from private number" msgstr "" #: approver/approver.cpp:479 msgid "Calling from unknown number" msgstr "" #: approver/approver.cpp:482 #, qt-format msgid "Calling from %1" msgstr "" #: approver/approver.cpp:529 msgid "Hold + Answer" msgstr "" #: approver/approver.cpp:530 msgid "Accept" msgstr "" #: approver/approver.cpp:543 msgid "End + Answer" msgstr "" #: approver/approver.cpp:552 msgid "Decline" msgstr "" #: approver/approver.cpp:560 msgid "Message & decline" msgstr "" #: approver/main.cpp:46 msgid "Telephony Service Approver" msgstr "" #: indicator/authhandler.cpp:72 msgid "Authentication failed. Do you want to review your credentials?" msgstr "" #: indicator/authhandler.cpp:91 msgid "Yes" msgstr "" #: indicator/authhandler.cpp:94 msgid "No" msgstr "" #: indicator/displaynamesettings.cpp:35 #, qt-format msgid "SIM %1" msgstr "" #: indicator/main.cpp:53 msgid "Telephony Service Indicator" msgstr "" #: indicator/messagingmenu.cpp:83 indicator/messagingmenu.cpp:87 msgid "Telephony Service" msgstr "" #: indicator/messagingmenu.cpp:151 indicator/messagingmenu.cpp:293 #: indicator/messagingmenu.cpp:360 msgid "Send" msgstr "" #. TRANSLATORS : %1 is the group name and %2 is the recipient name #: indicator/messagingmenu.cpp:262 indicator/textchannelobserver.cpp:671 #: indicator/textchannelobserver.cpp:675 #, qt-format msgid "Message to %1 from %2" msgstr "" #. TRANSLATORS : %1 is the recipient name #: indicator/messagingmenu.cpp:265 indicator/messagingmenu.cpp:269 #, qt-format msgid "Message to the group from %1" msgstr "" #: indicator/messagingmenu.cpp:345 msgid "Call back" msgstr "" #: indicator/messagingmenu.cpp:350 msgid "Missed your call — can you call me now?" msgstr "" #: indicator/messagingmenu.cpp:351 msgid "Running late. On my way." msgstr "" #: indicator/messagingmenu.cpp:352 msgid "Busy at the moment. Will call you later." msgstr "" #: indicator/messagingmenu.cpp:353 msgid "I am 20 minutes late." msgstr "" #: indicator/messagingmenu.cpp:354 msgid "Still busy. Will call you later." msgstr "" #: indicator/messagingmenu.cpp:409 #, qt-format msgid "%1 missed call" msgid_plural "%1 missed calls" msgstr[0] "" msgstr[1] "" #: indicator/messagingmenu.cpp:492 msgid "Voicemail messages" msgstr "" #: indicator/messagingmenu.cpp:495 #, qt-format msgid "%1 voicemail message" msgid_plural "%1 voicemail messages" msgstr[0] "" msgstr[1] "" #: indicator/messagingmenu.cpp:500 msgid "Voicemail" msgstr "" #: indicator/metrics.cpp:42 #, qt-format msgid "%1 text messages sent today" msgstr "" #: indicator/metrics.cpp:43 msgid "No text messages sent today" msgstr "" #: indicator/metrics.cpp:44 #, qt-format msgid "%1 text messages received today" msgstr "" #: indicator/metrics.cpp:45 msgid "No text messages received today" msgstr "" #: indicator/metrics.cpp:46 #, qt-format msgid "%1 calls received today" msgstr "" #: indicator/metrics.cpp:47 msgid "No calls received today" msgstr "" #: indicator/metrics.cpp:48 #, qt-format msgid "%1 calls made today" msgstr "" #: indicator/metrics.cpp:49 indicator/metrics.cpp:51 msgid "No calls made today" msgstr "" #: indicator/metrics.cpp:50 #, qt-format msgid "Spent %1 minutes in calls today" msgstr "" #: indicator/textchannelobserver.cpp:225 msgid "Unlock your sim card and try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:227 msgid "Deactivate flight mode and try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:230 msgid "Try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:236 msgid "The message could not be sent" msgstr "" #: indicator/textchannelobserver.cpp:249 indicator/textchannelobserver.cpp:713 msgid "View message" msgstr "" #: indicator/textchannelobserver.cpp:295 msgid "New Group" msgstr "" #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:302 #, qt-format msgid "You joined group %1 " msgstr "" #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:306 #, qt-format msgid "You joined group %1" msgstr "" #: indicator/textchannelobserver.cpp:309 msgid "You joined a new group" msgstr "" #: indicator/textchannelobserver.cpp:328 msgid "View Group" msgstr "" #: indicator/textchannelobserver.cpp:367 indicator/ussdindicator.cpp:116 msgid "Ok" msgstr "" #: indicator/textchannelobserver.cpp:373 msgid "Save" msgstr "" #: indicator/textchannelobserver.cpp:468 msgid "Emergency Alert" msgstr "" #: indicator/textchannelobserver.cpp:471 msgid "Emergency Alert: Extreme" msgstr "" #: indicator/textchannelobserver.cpp:474 msgid "Emergency Alert: Severe" msgstr "" #: indicator/textchannelobserver.cpp:477 msgid "Emergency Alert: Notice" msgstr "" #: indicator/textchannelobserver.cpp:482 msgid "AMBER Alert" msgstr "" #: indicator/textchannelobserver.cpp:485 msgid "Alert" msgstr "" #: indicator/textchannelobserver.cpp:531 msgid "Show alert" msgstr "" #: indicator/textchannelobserver.cpp:604 #, qt-format msgid "Attachment: %1 image" msgid_plural "Attachments: %1 images" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:606 #, qt-format msgid "Attachment: %1 video" msgid_plural "Attachments: %1 videos" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:608 #, qt-format msgid "Attachment: %1 contact" msgid_plural "Attachments: %1 contacts" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:610 #, qt-format msgid "Attachment: %1 audio clip" msgid_plural "Attachments: %1 audio clips" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:612 #, qt-format msgid "Attachment: %1 file" msgid_plural "Attachments: %1 files" msgstr[0] "" msgstr[1] "" #. TRANSLATORS : message displayed when any error occurred while receiving a MMS (case when cellular-data is off, or any downloading issue). Notify that there was a message, the user can find more about it in the messaging-app. #: indicator/textchannelobserver.cpp:615 msgid "New MMS message" msgstr "" #. TRANSLATORS : %1 is the recipient name #: indicator/textchannelobserver.cpp:679 indicator/textchannelobserver.cpp:683 #, qt-format msgid "Message to group from %1" msgstr "" #: indicator/textchannelobserver.cpp:749 #, qt-format msgid "Message from %1" msgstr "" #: indicator/textchannelobserver.cpp:910 msgid "Please, select a SIM card:" msgstr "" #: indicator/ussdindicator.cpp:119 msgid "Reply" msgstr "" #: indicator/ussdindicator.cpp:142 msgid "Cancel" msgstr "" #: libtelephonyservice/callnotification.cpp:53 msgid "Conf call on hold" msgstr "" #: libtelephonyservice/callnotification.cpp:53 #, qt-format msgid "%1 call on hold" msgstr "" #: libtelephonyservice/callnotification.cpp:56 msgid "Conf call ended" msgstr "" #: libtelephonyservice/callnotification.cpp:56 #, qt-format msgid "%1 call ended" msgstr "" #: libtelephonyservice/callnotification.cpp:59 #, qt-format msgid "%1 call declined" msgstr "" #: libtelephonyservice/contactwatcher.cpp:157 msgid "Private Number" msgstr "" #: libtelephonyservice/contactwatcher.cpp:159 msgid "Unknown Number" msgstr "" telephony-service-0.5.3/po/szl.po000066400000000000000000000210351455543255600167710ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR Canonical Ltd. # This file is distributed under the same license as the telephony-service package. # FIRST AUTHOR , YEAR. # msgid "" msgstr "" "Project-Id-Version: telephony-service\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-12-16 17:03+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: Automatically generated\n" "Language-Team: none\n" "Language: szl\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 " "|| n%100>=20) ? 1 : 2;\n" #: indicator/telephony-service-call.desktop.in:4 msgid "Phone Calls" msgstr "" #: indicator/telephony-service-sms.desktop.in:4 msgid "SMS" msgstr "" #: approver/approver.cpp:66 msgid "Unknown caller" msgstr "" #: approver/approver.cpp:94 msgid "I'm busy at the moment. I'll call later." msgstr "" #: approver/approver.cpp:95 msgid "I'm running late, on my way now." msgstr "" #: approver/approver.cpp:96 msgid "Please call me back later." msgstr "" #: approver/approver.cpp:457 #, qt-format msgid "On [%1]" msgstr "" #: approver/approver.cpp:461 indicator/messagingmenu.cpp:414 msgid "Private number" msgstr "" #: approver/approver.cpp:464 indicator/messagingmenu.cpp:244 #: indicator/messagingmenu.cpp:418 indicator/textchannelobserver.cpp:640 msgid "Unknown number" msgstr "" #: approver/approver.cpp:470 approver/approver.cpp:485 msgid "Caller number is not available" msgstr "" #: approver/approver.cpp:476 msgid "Calling from private number" msgstr "" #: approver/approver.cpp:479 msgid "Calling from unknown number" msgstr "" #: approver/approver.cpp:482 #, qt-format msgid "Calling from %1" msgstr "" #: approver/approver.cpp:529 msgid "Hold + Answer" msgstr "" #: approver/approver.cpp:530 msgid "Accept" msgstr "" #: approver/approver.cpp:543 msgid "End + Answer" msgstr "" #: approver/approver.cpp:552 msgid "Decline" msgstr "" #: approver/approver.cpp:560 msgid "Message & decline" msgstr "" #: approver/main.cpp:46 msgid "Telephony Service Approver" msgstr "" #: indicator/authhandler.cpp:72 msgid "Authentication failed. Do you want to review your credentials?" msgstr "" #: indicator/authhandler.cpp:91 msgid "Yes" msgstr "" #: indicator/authhandler.cpp:94 msgid "No" msgstr "" #: indicator/displaynamesettings.cpp:35 #, qt-format msgid "SIM %1" msgstr "" #: indicator/main.cpp:53 msgid "Telephony Service Indicator" msgstr "" #: indicator/messagingmenu.cpp:83 indicator/messagingmenu.cpp:87 msgid "Telephony Service" msgstr "" #: indicator/messagingmenu.cpp:151 indicator/messagingmenu.cpp:293 #: indicator/messagingmenu.cpp:360 msgid "Send" msgstr "" #. TRANSLATORS : %1 is the group name and %2 is the recipient name #: indicator/messagingmenu.cpp:262 indicator/textchannelobserver.cpp:671 #: indicator/textchannelobserver.cpp:675 #, qt-format msgid "Message to %1 from %2" msgstr "" #. TRANSLATORS : %1 is the recipient name #: indicator/messagingmenu.cpp:265 indicator/messagingmenu.cpp:269 #, qt-format msgid "Message to the group from %1" msgstr "" #: indicator/messagingmenu.cpp:345 msgid "Call back" msgstr "" #: indicator/messagingmenu.cpp:350 msgid "Missed your call — can you call me now?" msgstr "" #: indicator/messagingmenu.cpp:351 msgid "Running late. On my way." msgstr "" #: indicator/messagingmenu.cpp:352 msgid "Busy at the moment. Will call you later." msgstr "" #: indicator/messagingmenu.cpp:353 msgid "I am 20 minutes late." msgstr "" #: indicator/messagingmenu.cpp:354 msgid "Still busy. Will call you later." msgstr "" #: indicator/messagingmenu.cpp:409 #, qt-format msgid "%1 missed call" msgid_plural "%1 missed calls" msgstr[0] "" msgstr[1] "" #: indicator/messagingmenu.cpp:492 msgid "Voicemail messages" msgstr "" #: indicator/messagingmenu.cpp:495 #, qt-format msgid "%1 voicemail message" msgid_plural "%1 voicemail messages" msgstr[0] "" msgstr[1] "" #: indicator/messagingmenu.cpp:500 msgid "Voicemail" msgstr "" #: indicator/metrics.cpp:42 #, qt-format msgid "%1 text messages sent today" msgstr "" #: indicator/metrics.cpp:43 msgid "No text messages sent today" msgstr "" #: indicator/metrics.cpp:44 #, qt-format msgid "%1 text messages received today" msgstr "" #: indicator/metrics.cpp:45 msgid "No text messages received today" msgstr "" #: indicator/metrics.cpp:46 #, qt-format msgid "%1 calls received today" msgstr "" #: indicator/metrics.cpp:47 msgid "No calls received today" msgstr "" #: indicator/metrics.cpp:48 #, qt-format msgid "%1 calls made today" msgstr "" #: indicator/metrics.cpp:49 indicator/metrics.cpp:51 msgid "No calls made today" msgstr "" #: indicator/metrics.cpp:50 #, qt-format msgid "Spent %1 minutes in calls today" msgstr "" #: indicator/textchannelobserver.cpp:225 msgid "Unlock your sim card and try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:227 msgid "Deactivate flight mode and try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:230 msgid "Try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:236 msgid "The message could not be sent" msgstr "" #: indicator/textchannelobserver.cpp:249 indicator/textchannelobserver.cpp:713 msgid "View message" msgstr "" #: indicator/textchannelobserver.cpp:295 msgid "New Group" msgstr "" #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:302 #, qt-format msgid "You joined group %1 " msgstr "" #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:306 #, qt-format msgid "You joined group %1" msgstr "" #: indicator/textchannelobserver.cpp:309 msgid "You joined a new group" msgstr "" #: indicator/textchannelobserver.cpp:328 msgid "View Group" msgstr "" #: indicator/textchannelobserver.cpp:367 indicator/ussdindicator.cpp:116 msgid "Ok" msgstr "" #: indicator/textchannelobserver.cpp:373 msgid "Save" msgstr "" #: indicator/textchannelobserver.cpp:468 msgid "Emergency Alert" msgstr "" #: indicator/textchannelobserver.cpp:471 msgid "Emergency Alert: Extreme" msgstr "" #: indicator/textchannelobserver.cpp:474 msgid "Emergency Alert: Severe" msgstr "" #: indicator/textchannelobserver.cpp:477 msgid "Emergency Alert: Notice" msgstr "" #: indicator/textchannelobserver.cpp:482 msgid "AMBER Alert" msgstr "" #: indicator/textchannelobserver.cpp:485 msgid "Alert" msgstr "" #: indicator/textchannelobserver.cpp:531 msgid "Show alert" msgstr "" #: indicator/textchannelobserver.cpp:604 #, qt-format msgid "Attachment: %1 image" msgid_plural "Attachments: %1 images" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:606 #, qt-format msgid "Attachment: %1 video" msgid_plural "Attachments: %1 videos" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:608 #, qt-format msgid "Attachment: %1 contact" msgid_plural "Attachments: %1 contacts" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:610 #, qt-format msgid "Attachment: %1 audio clip" msgid_plural "Attachments: %1 audio clips" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:612 #, qt-format msgid "Attachment: %1 file" msgid_plural "Attachments: %1 files" msgstr[0] "" msgstr[1] "" #. TRANSLATORS : message displayed when any error occurred while receiving a MMS (case when cellular-data is off, or any downloading issue). Notify that there was a message, the user can find more about it in the messaging-app. #: indicator/textchannelobserver.cpp:615 msgid "New MMS message" msgstr "" #. TRANSLATORS : %1 is the recipient name #: indicator/textchannelobserver.cpp:679 indicator/textchannelobserver.cpp:683 #, qt-format msgid "Message to group from %1" msgstr "" #: indicator/textchannelobserver.cpp:749 #, qt-format msgid "Message from %1" msgstr "" #: indicator/textchannelobserver.cpp:910 msgid "Please, select a SIM card:" msgstr "" #: indicator/ussdindicator.cpp:119 msgid "Reply" msgstr "" #: indicator/ussdindicator.cpp:142 msgid "Cancel" msgstr "" #: libtelephonyservice/callnotification.cpp:53 msgid "Conf call on hold" msgstr "" #: libtelephonyservice/callnotification.cpp:53 #, qt-format msgid "%1 call on hold" msgstr "" #: libtelephonyservice/callnotification.cpp:56 msgid "Conf call ended" msgstr "" #: libtelephonyservice/callnotification.cpp:56 #, qt-format msgid "%1 call ended" msgstr "" #: libtelephonyservice/callnotification.cpp:59 #, qt-format msgid "%1 call declined" msgstr "" #: libtelephonyservice/contactwatcher.cpp:157 msgid "Private Number" msgstr "" #: libtelephonyservice/contactwatcher.cpp:159 msgid "Unknown Number" msgstr "" telephony-service-0.5.3/po/ta.po000066400000000000000000000416461455543255600165770ustar00rootroot00000000000000# Tamil translation for telephony-service # Copyright (c) 2015 Rosetta Contributors and Canonical Ltd 2015 # This file is distributed under the same license as the telephony-service package. # FIRST AUTHOR , 2015. # msgid "" msgstr "" "Project-Id-Version: telephony-service\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-12-16 17:03+0100\n" "PO-Revision-Date: 2021-01-05 23:26+0000\n" "Last-Translator: GK \n" "Language-Team: Tamil \n" "Language: ta\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Generator: Weblate 3.11.3\n" "X-Launchpad-Export-Date: 2017-01-04 06:03+0000\n" #: indicator/telephony-service-call.desktop.in:4 msgid "Phone Calls" msgstr "தொலைப்பேசி அழைப்புகள்" #: indicator/telephony-service-sms.desktop.in:4 msgid "SMS" msgstr "குறுஞ்செய்தி" #: approver/approver.cpp:66 msgid "Unknown caller" msgstr "தெறியாத நபர்" #: approver/approver.cpp:94 msgid "I'm busy at the moment. I'll call later." msgstr "நான் இப்பொழுது வேறொரு வேலையில் ஈடுபட்டுள்ளேன். பின்னர் அழைக்கிறேன்." #: approver/approver.cpp:95 msgid "I'm running late, on my way now." msgstr "சற்று தாமதமாகிவிட்டேன், வந்துகொண்டிருக்கிறேன்." #: approver/approver.cpp:96 msgid "Please call me back later." msgstr "எனக்கு பின்னர் அழைக்கவும்." #: approver/approver.cpp:457 #, qt-format msgid "On [%1]" msgstr "இயக்கத்தில் உள்ளது [%1]" #: approver/approver.cpp:461 indicator/messagingmenu.cpp:414 msgid "Private number" msgstr "தனியார் எண்" #: approver/approver.cpp:464 indicator/messagingmenu.cpp:244 #: indicator/messagingmenu.cpp:418 indicator/textchannelobserver.cpp:640 msgid "Unknown number" msgstr "தெறியாத எண்" #: approver/approver.cpp:470 approver/approver.cpp:485 msgid "Caller number is not available" msgstr "அழைப்பவர் எண்ணிற்கு இணைப்பு கிடைக்கவில்லை" #: approver/approver.cpp:476 msgid "Calling from private number" msgstr "தனியார் எண்ணிலிருந்து வரும் அழைப்பு" #: approver/approver.cpp:479 msgid "Calling from unknown number" msgstr "எண் இல்லாத அழைப்பு" #: approver/approver.cpp:482 #, qt-format msgid "Calling from %1" msgstr "%1 என்பவரிடமிருந்து வரும் அழைப்பு" #: approver/approver.cpp:529 msgid "Hold + Answer" msgstr "நிலுவையில் வைத்து + அழைப்பை எடு" #: approver/approver.cpp:530 msgid "Accept" msgstr "ஒப்புதல்" #: approver/approver.cpp:543 msgid "End + Answer" msgstr "முடி + அழைப்பை எடு" #: approver/approver.cpp:552 msgid "Decline" msgstr "மறுக்க" #: approver/approver.cpp:560 msgid "Message & decline" msgstr "அழைப்பை மறுத்து குறுஞ்செய்தி அனுப்பு" #: approver/main.cpp:46 msgid "Telephony Service Approver" msgstr "தொலைப்பேசி சேவையை அனுமதிப்பவர்" #: indicator/authhandler.cpp:72 msgid "Authentication failed. Do you want to review your credentials?" msgstr "" "உறுதிப்பாடு தோல்வியுற்றது. தாங்கள் பதிவிட்ட உறிதிச் சான்றுகளை மீள்ப்பார்வை செய்ய " "விரும்புகுறீர்களா?" #: indicator/authhandler.cpp:91 msgid "Yes" msgstr "ஆம்" #: indicator/authhandler.cpp:94 msgid "No" msgstr "இல்லை" #: indicator/displaynamesettings.cpp:35 #, qt-format msgid "SIM %1" msgstr "செறிவட்டை %1" #: indicator/main.cpp:53 msgid "Telephony Service Indicator" msgstr "தொலைப்பேசி சேவை சுட்டிக்காட்டி" #: indicator/messagingmenu.cpp:83 indicator/messagingmenu.cpp:87 msgid "Telephony Service" msgstr "தொலைப்பேசி சேவை" #: indicator/messagingmenu.cpp:151 indicator/messagingmenu.cpp:293 #: indicator/messagingmenu.cpp:360 msgid "Send" msgstr "அனுப்பு" #. TRANSLATORS : %1 is the group name and %2 is the recipient name #: indicator/messagingmenu.cpp:262 indicator/textchannelobserver.cpp:671 #: indicator/textchannelobserver.cpp:675 #, qt-format msgid "Message to %1 from %2" msgstr "%1 என்ற குழுவிற்கு %2 - டமிருந்து வந்த குறுஞ்செய்தி" #. TRANSLATORS : %1 is the recipient name #: indicator/messagingmenu.cpp:265 indicator/messagingmenu.cpp:269 #, fuzzy, qt-format #| msgid "Message to group from %1" msgid "Message to the group from %1" msgstr "குழுவிற்கு %1 - டமிருந்து வந்த குறுஞ்செய்தி" #: indicator/messagingmenu.cpp:345 msgid "Call back" msgstr "பின்னர் அழைக்கவும்" #: indicator/messagingmenu.cpp:350 #, fuzzy #| msgid "I missed your call - can you call me now?" msgid "Missed your call — can you call me now?" msgstr "நான் தங்களின் அழைப்பை தவறவிட்டுவிட்டேன். தங்களால் இப்பொழுது அழைக்க முடியுமா?" #: indicator/messagingmenu.cpp:351 #, fuzzy #| msgid "I'm running late. I'm on my way." msgid "Running late. On my way." msgstr "நான் சற்று தாமதமாகிவிட்டேன். வந்துகொண்டிருக்கிறேன்." #: indicator/messagingmenu.cpp:352 #, fuzzy #| msgid "I'm busy at the moment. I'll call you later." msgid "Busy at the moment. Will call you later." msgstr "நான் இப்பொழுது வேறொரு வேலையில் ஈடுபட்டுள்ளேன். தங்களுக்கு பின்னர் அழைக்கிறேன்." #: indicator/messagingmenu.cpp:353 #, fuzzy #| msgid "I'll be 20 minutes late." msgid "I am 20 minutes late." msgstr "எனக்கு 20 நிமிடங்கள் தாமதமாகும்." #: indicator/messagingmenu.cpp:354 #, fuzzy #| msgid "Sorry, I'm still busy. I'll call you later." msgid "Still busy. Will call you later." msgstr "மன்னிக்கவும். இதுவரை வேலை முடியவில்லை. தங்களை பின்னர் அழைக்கிறேன்." #: indicator/messagingmenu.cpp:409 #, qt-format msgid "%1 missed call" msgid_plural "%1 missed calls" msgstr[0] "%1 தவறிய அழைப்பு" msgstr[1] "%1 தவறிய அழைப்புக்கள்" #: indicator/messagingmenu.cpp:492 msgid "Voicemail messages" msgstr "குரல் மடல் குறுஞ்செய்திகள்" #: indicator/messagingmenu.cpp:495 #, qt-format msgid "%1 voicemail message" msgid_plural "%1 voicemail messages" msgstr[0] "%1 குரல் மடல் செய்தி" msgstr[1] "%1 குரல் மடல் செய்திகள்" #: indicator/messagingmenu.cpp:500 msgid "Voicemail" msgstr "குரல் மடல்" #: indicator/metrics.cpp:42 #, qt-format msgid "%1 text messages sent today" msgstr "இன்று அனுப்பியக் குறுஞ்செய்திகள் - %1" #: indicator/metrics.cpp:43 msgid "No text messages sent today" msgstr "இன்று எவறுக்கும் குறுஞ்செய்தி அனுப்பவில்லை" #: indicator/metrics.cpp:44 #, qt-format msgid "%1 text messages received today" msgstr "இன்று பெறப்பட்ட குறுஞ்செய்திகள் - %1" #: indicator/metrics.cpp:45 msgid "No text messages received today" msgstr "இன்று எவறிடமிருந்தும் குறுஞ்செய்தி பெறப்படவில்லை" #: indicator/metrics.cpp:46 #, qt-format msgid "%1 calls received today" msgstr "இன்று பெறப்பட்ட அழைப்புக்கள் - %1" #: indicator/metrics.cpp:47 msgid "No calls received today" msgstr "இன்று எவறும் அழைக்கவில்லை" #: indicator/metrics.cpp:48 #, qt-format msgid "%1 calls made today" msgstr "இன்று செய்யப்பட்ட அழைப்புக்கள் - %1" #: indicator/metrics.cpp:49 indicator/metrics.cpp:51 msgid "No calls made today" msgstr "இன்று எவறுக்கும் அழைக்கவில்லை" #: indicator/metrics.cpp:50 #, qt-format msgid "Spent %1 minutes in calls today" msgstr "" "இன்று, தங்களின் பொன்னான %1 நிமிடங்களை தொலைப்பேசி அழைப்புகளில் செலவிட்டுள்ளீர்கள்" #: indicator/textchannelobserver.cpp:225 msgid "Unlock your sim card and try again from the messaging application." msgstr "" "செறிவட்டையின் (SIM) பூட்டை நீக்கிய பின்னர், குறுஞ்செய்திச் செயலியிலிருந்து மீண்டும் " "முயற்சிக்கவும்." #: indicator/textchannelobserver.cpp:227 msgid "Deactivate flight mode and try again from the messaging application." msgstr "" "விமான முறையிலிருந்து வெளியேறிவிட்டு, மீண்டும் குறுஞ்செய்தி செயலியிலிருந்து " "முயற்சிக்கவும்." #: indicator/textchannelobserver.cpp:230 msgid "Try again from the messaging application." msgstr "குறுஞ்செய்திச் செயலியிலிருந்து மீண்டும் முயற்சிக்கவும்." #: indicator/textchannelobserver.cpp:236 msgid "The message could not be sent" msgstr "இந்தக் குறுஞ்செய்தியை அனுப்ப இயலபது" #: indicator/textchannelobserver.cpp:249 indicator/textchannelobserver.cpp:713 msgid "View message" msgstr "குறுஞ்செய்தியைக்க காண்க" #: indicator/textchannelobserver.cpp:295 msgid "New Group" msgstr "புதிய குழு" #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:302 #, qt-format msgid "You joined group %1 " msgstr "நீங்கள் %1 குழுவில் இணைந்துள்ளீர்கள் " #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:306 #, qt-format msgid "You joined group %1" msgstr "நீங்கள் %1 குழுவில் இணைந்துள்ளீர்கள்" #: indicator/textchannelobserver.cpp:309 msgid "You joined a new group" msgstr "நீங்கள் புதியக் குழுவொன்றில் இணந்துள்ளீர்கள்" #: indicator/textchannelobserver.cpp:328 msgid "View Group" msgstr "குழுவைக் காண்க" #: indicator/textchannelobserver.cpp:367 indicator/ussdindicator.cpp:116 msgid "Ok" msgstr "சரி" #: indicator/textchannelobserver.cpp:373 msgid "Save" msgstr "சேமி" #: indicator/textchannelobserver.cpp:468 msgid "Emergency Alert" msgstr "" #: indicator/textchannelobserver.cpp:471 msgid "Emergency Alert: Extreme" msgstr "" #: indicator/textchannelobserver.cpp:474 msgid "Emergency Alert: Severe" msgstr "" #: indicator/textchannelobserver.cpp:477 msgid "Emergency Alert: Notice" msgstr "" #: indicator/textchannelobserver.cpp:482 msgid "AMBER Alert" msgstr "" #: indicator/textchannelobserver.cpp:485 msgid "Alert" msgstr "" #: indicator/textchannelobserver.cpp:531 msgid "Show alert" msgstr "" #: indicator/textchannelobserver.cpp:604 #, qt-format msgid "Attachment: %1 image" msgid_plural "Attachments: %1 images" msgstr[0] "உடனிணைப்பு: %1 படிம்ம" msgstr[1] "உடனிணைப்புகள்: %1 படிமங்கள்" #: indicator/textchannelobserver.cpp:606 #, qt-format msgid "Attachment: %1 video" msgid_plural "Attachments: %1 videos" msgstr[0] "உடனிணைப்பு: %1 ஒளித்தோற்றம்" msgstr[1] "உடனிணைப்புகள்: %1 ஒளித்தோற்றங்கள்" #: indicator/textchannelobserver.cpp:608 #, qt-format msgid "Attachment: %1 contact" msgid_plural "Attachments: %1 contacts" msgstr[0] "உடனிணைப்பு: %1 தொடர்பு" msgstr[1] "உடனிணைப்புகள்: %1 தொடர்புகள்" #: indicator/textchannelobserver.cpp:610 #, qt-format msgid "Attachment: %1 audio clip" msgid_plural "Attachments: %1 audio clips" msgstr[0] "உடனிணைப்பு: %1 குரல் பதிவு" msgstr[1] "உடனிணைப்புகள்: %1 குரல் பதிவுகள்" #: indicator/textchannelobserver.cpp:612 #, qt-format msgid "Attachment: %1 file" msgid_plural "Attachments: %1 files" msgstr[0] "உடனிணைப்பு: %1 கோப்பு" msgstr[1] "உடனிணைப்புகள்: %1 கோப்புகள்" #. TRANSLATORS : message displayed when any error occurred while receiving a MMS (case when cellular-data is off, or any downloading issue). Notify that there was a message, the user can find more about it in the messaging-app. #: indicator/textchannelobserver.cpp:615 #, fuzzy #| msgid "View message" msgid "New MMS message" msgstr "குறுஞ்செய்தியைக்க காண்க" #. TRANSLATORS : %1 is the recipient name #: indicator/textchannelobserver.cpp:679 indicator/textchannelobserver.cpp:683 #, qt-format msgid "Message to group from %1" msgstr "குழுவிற்கு %1 - டமிருந்து வந்த குறுஞ்செய்தி" #: indicator/textchannelobserver.cpp:749 #, qt-format msgid "Message from %1" msgstr "%1 - டமிருந்து வந்த குறுஞ்செய்தி" #: indicator/textchannelobserver.cpp:910 msgid "Please, select a SIM card:" msgstr "செறிவட்டையைத்(SIM card) தேர்வு செய்க:" #: indicator/ussdindicator.cpp:119 msgid "Reply" msgstr "பதிலளி" #: indicator/ussdindicator.cpp:142 msgid "Cancel" msgstr "தவிர்க்க" #: libtelephonyservice/callnotification.cpp:53 msgid "Conf call on hold" msgstr "" #: libtelephonyservice/callnotification.cpp:53 #, qt-format msgid "%1 call on hold" msgstr "" #: libtelephonyservice/callnotification.cpp:56 msgid "Conf call ended" msgstr "" #: libtelephonyservice/callnotification.cpp:56 #, qt-format msgid "%1 call ended" msgstr "" #: libtelephonyservice/callnotification.cpp:59 #, qt-format msgid "%1 call declined" msgstr "" #: libtelephonyservice/contactwatcher.cpp:157 #, fuzzy #| msgid "Private number" msgid "Private Number" msgstr "தனியார் எண்" #: libtelephonyservice/contactwatcher.cpp:159 #, fuzzy #| msgid "Unknown number" msgid "Unknown Number" msgstr "தெறியாத எண்" #, fuzzy #~| msgid "Telephony Service" #~ msgid "telephony-service-call" #~ msgstr "தொலைப்பேசி சேவை" #, fuzzy #~| msgid "Telephony Service" #~ msgid "telephony-service-message" #~ msgstr "தொலைப்பேசி சேவை" #~ msgid "" #~ "Oops, there has been an error with the MMS system and this message could " #~ "not be retrieved. Please ensure Cellular Data is ON and MMS settings are " #~ "correct, then ask the sender to try again." #~ msgstr "" #~ "பல்லூடகச் செய்திச் சேவையில் (MMS) சிக்கல் ஏற்பட்டுவிட்டதால் இந்தச் செய்தியை பெற " #~ "இயலவில்லை. தஙகள் கைப்பேசி இணைப்பின் தரவு இயக்கத்தில் உள்ளதா என்பதையும், ப.செ.சே " #~ "(MMS) - வின் அமைப்புக்கள் சரியாக உள்ளனவா என்பதையும் பார்த்துவிட்டு, அனுப்புனரை மீண்டுட் " #~ "அனுப்பச் சொல்லவும்." telephony-service-0.5.3/po/ta_LK.po000066400000000000000000000207421455543255600171570ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR Canonical Ltd. # This file is distributed under the same license as the telephony-service package. # FIRST AUTHOR , YEAR. # msgid "" msgstr "" "Project-Id-Version: telephony-service\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-12-16 17:03+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: Automatically generated\n" "Language-Team: none\n" "Language: ta_LK\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" #: indicator/telephony-service-call.desktop.in:4 msgid "Phone Calls" msgstr "" #: indicator/telephony-service-sms.desktop.in:4 msgid "SMS" msgstr "" #: approver/approver.cpp:66 msgid "Unknown caller" msgstr "" #: approver/approver.cpp:94 msgid "I'm busy at the moment. I'll call later." msgstr "" #: approver/approver.cpp:95 msgid "I'm running late, on my way now." msgstr "" #: approver/approver.cpp:96 msgid "Please call me back later." msgstr "" #: approver/approver.cpp:457 #, qt-format msgid "On [%1]" msgstr "" #: approver/approver.cpp:461 indicator/messagingmenu.cpp:414 msgid "Private number" msgstr "" #: approver/approver.cpp:464 indicator/messagingmenu.cpp:244 #: indicator/messagingmenu.cpp:418 indicator/textchannelobserver.cpp:640 msgid "Unknown number" msgstr "" #: approver/approver.cpp:470 approver/approver.cpp:485 msgid "Caller number is not available" msgstr "" #: approver/approver.cpp:476 msgid "Calling from private number" msgstr "" #: approver/approver.cpp:479 msgid "Calling from unknown number" msgstr "" #: approver/approver.cpp:482 #, qt-format msgid "Calling from %1" msgstr "" #: approver/approver.cpp:529 msgid "Hold + Answer" msgstr "" #: approver/approver.cpp:530 msgid "Accept" msgstr "" #: approver/approver.cpp:543 msgid "End + Answer" msgstr "" #: approver/approver.cpp:552 msgid "Decline" msgstr "" #: approver/approver.cpp:560 msgid "Message & decline" msgstr "" #: approver/main.cpp:46 msgid "Telephony Service Approver" msgstr "" #: indicator/authhandler.cpp:72 msgid "Authentication failed. Do you want to review your credentials?" msgstr "" #: indicator/authhandler.cpp:91 msgid "Yes" msgstr "" #: indicator/authhandler.cpp:94 msgid "No" msgstr "" #: indicator/displaynamesettings.cpp:35 #, qt-format msgid "SIM %1" msgstr "" #: indicator/main.cpp:53 msgid "Telephony Service Indicator" msgstr "" #: indicator/messagingmenu.cpp:83 indicator/messagingmenu.cpp:87 msgid "Telephony Service" msgstr "" #: indicator/messagingmenu.cpp:151 indicator/messagingmenu.cpp:293 #: indicator/messagingmenu.cpp:360 msgid "Send" msgstr "" #. TRANSLATORS : %1 is the group name and %2 is the recipient name #: indicator/messagingmenu.cpp:262 indicator/textchannelobserver.cpp:671 #: indicator/textchannelobserver.cpp:675 #, qt-format msgid "Message to %1 from %2" msgstr "" #. TRANSLATORS : %1 is the recipient name #: indicator/messagingmenu.cpp:265 indicator/messagingmenu.cpp:269 #, qt-format msgid "Message to the group from %1" msgstr "" #: indicator/messagingmenu.cpp:345 msgid "Call back" msgstr "" #: indicator/messagingmenu.cpp:350 msgid "Missed your call — can you call me now?" msgstr "" #: indicator/messagingmenu.cpp:351 msgid "Running late. On my way." msgstr "" #: indicator/messagingmenu.cpp:352 msgid "Busy at the moment. Will call you later." msgstr "" #: indicator/messagingmenu.cpp:353 msgid "I am 20 minutes late." msgstr "" #: indicator/messagingmenu.cpp:354 msgid "Still busy. Will call you later." msgstr "" #: indicator/messagingmenu.cpp:409 #, qt-format msgid "%1 missed call" msgid_plural "%1 missed calls" msgstr[0] "" msgstr[1] "" #: indicator/messagingmenu.cpp:492 msgid "Voicemail messages" msgstr "" #: indicator/messagingmenu.cpp:495 #, qt-format msgid "%1 voicemail message" msgid_plural "%1 voicemail messages" msgstr[0] "" msgstr[1] "" #: indicator/messagingmenu.cpp:500 msgid "Voicemail" msgstr "" #: indicator/metrics.cpp:42 #, qt-format msgid "%1 text messages sent today" msgstr "" #: indicator/metrics.cpp:43 msgid "No text messages sent today" msgstr "" #: indicator/metrics.cpp:44 #, qt-format msgid "%1 text messages received today" msgstr "" #: indicator/metrics.cpp:45 msgid "No text messages received today" msgstr "" #: indicator/metrics.cpp:46 #, qt-format msgid "%1 calls received today" msgstr "" #: indicator/metrics.cpp:47 msgid "No calls received today" msgstr "" #: indicator/metrics.cpp:48 #, qt-format msgid "%1 calls made today" msgstr "" #: indicator/metrics.cpp:49 indicator/metrics.cpp:51 msgid "No calls made today" msgstr "" #: indicator/metrics.cpp:50 #, qt-format msgid "Spent %1 minutes in calls today" msgstr "" #: indicator/textchannelobserver.cpp:225 msgid "Unlock your sim card and try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:227 msgid "Deactivate flight mode and try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:230 msgid "Try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:236 msgid "The message could not be sent" msgstr "" #: indicator/textchannelobserver.cpp:249 indicator/textchannelobserver.cpp:713 msgid "View message" msgstr "" #: indicator/textchannelobserver.cpp:295 msgid "New Group" msgstr "" #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:302 #, qt-format msgid "You joined group %1 " msgstr "" #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:306 #, qt-format msgid "You joined group %1" msgstr "" #: indicator/textchannelobserver.cpp:309 msgid "You joined a new group" msgstr "" #: indicator/textchannelobserver.cpp:328 msgid "View Group" msgstr "" #: indicator/textchannelobserver.cpp:367 indicator/ussdindicator.cpp:116 msgid "Ok" msgstr "" #: indicator/textchannelobserver.cpp:373 msgid "Save" msgstr "" #: indicator/textchannelobserver.cpp:468 msgid "Emergency Alert" msgstr "" #: indicator/textchannelobserver.cpp:471 msgid "Emergency Alert: Extreme" msgstr "" #: indicator/textchannelobserver.cpp:474 msgid "Emergency Alert: Severe" msgstr "" #: indicator/textchannelobserver.cpp:477 msgid "Emergency Alert: Notice" msgstr "" #: indicator/textchannelobserver.cpp:482 msgid "AMBER Alert" msgstr "" #: indicator/textchannelobserver.cpp:485 msgid "Alert" msgstr "" #: indicator/textchannelobserver.cpp:531 msgid "Show alert" msgstr "" #: indicator/textchannelobserver.cpp:604 #, qt-format msgid "Attachment: %1 image" msgid_plural "Attachments: %1 images" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:606 #, qt-format msgid "Attachment: %1 video" msgid_plural "Attachments: %1 videos" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:608 #, qt-format msgid "Attachment: %1 contact" msgid_plural "Attachments: %1 contacts" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:610 #, qt-format msgid "Attachment: %1 audio clip" msgid_plural "Attachments: %1 audio clips" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:612 #, qt-format msgid "Attachment: %1 file" msgid_plural "Attachments: %1 files" msgstr[0] "" msgstr[1] "" #. TRANSLATORS : message displayed when any error occurred while receiving a MMS (case when cellular-data is off, or any downloading issue). Notify that there was a message, the user can find more about it in the messaging-app. #: indicator/textchannelobserver.cpp:615 msgid "New MMS message" msgstr "" #. TRANSLATORS : %1 is the recipient name #: indicator/textchannelobserver.cpp:679 indicator/textchannelobserver.cpp:683 #, qt-format msgid "Message to group from %1" msgstr "" #: indicator/textchannelobserver.cpp:749 #, qt-format msgid "Message from %1" msgstr "" #: indicator/textchannelobserver.cpp:910 msgid "Please, select a SIM card:" msgstr "" #: indicator/ussdindicator.cpp:119 msgid "Reply" msgstr "" #: indicator/ussdindicator.cpp:142 msgid "Cancel" msgstr "" #: libtelephonyservice/callnotification.cpp:53 msgid "Conf call on hold" msgstr "" #: libtelephonyservice/callnotification.cpp:53 #, qt-format msgid "%1 call on hold" msgstr "" #: libtelephonyservice/callnotification.cpp:56 msgid "Conf call ended" msgstr "" #: libtelephonyservice/callnotification.cpp:56 #, qt-format msgid "%1 call ended" msgstr "" #: libtelephonyservice/callnotification.cpp:59 #, qt-format msgid "%1 call declined" msgstr "" #: libtelephonyservice/contactwatcher.cpp:157 msgid "Private Number" msgstr "" #: libtelephonyservice/contactwatcher.cpp:159 msgid "Unknown Number" msgstr "" telephony-service-0.5.3/po/te.po000066400000000000000000000211461455543255600165740ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-12-16 17:03+0100\n" "PO-Revision-Date: 2023-01-05 11:07+0000\n" "Last-Translator: Anonymous \n" "Language-Team: Telugu \n" "Language: te\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Generator: Weblate 4.15.1-dev\n" #: indicator/telephony-service-call.desktop.in:4 msgid "Phone Calls" msgstr "" #: indicator/telephony-service-sms.desktop.in:4 msgid "SMS" msgstr "" #: approver/approver.cpp:66 msgid "Unknown caller" msgstr "" #: approver/approver.cpp:94 msgid "I'm busy at the moment. I'll call later." msgstr "" #: approver/approver.cpp:95 msgid "I'm running late, on my way now." msgstr "" #: approver/approver.cpp:96 msgid "Please call me back later." msgstr "" #: approver/approver.cpp:457 #, qt-format msgid "On [%1]" msgstr "" #: approver/approver.cpp:461 indicator/messagingmenu.cpp:414 msgid "Private number" msgstr "" #: approver/approver.cpp:464 indicator/messagingmenu.cpp:244 #: indicator/messagingmenu.cpp:418 indicator/textchannelobserver.cpp:640 msgid "Unknown number" msgstr "" #: approver/approver.cpp:470 approver/approver.cpp:485 msgid "Caller number is not available" msgstr "" #: approver/approver.cpp:476 msgid "Calling from private number" msgstr "" #: approver/approver.cpp:479 msgid "Calling from unknown number" msgstr "" #: approver/approver.cpp:482 #, qt-format msgid "Calling from %1" msgstr "" #: approver/approver.cpp:529 msgid "Hold + Answer" msgstr "" #: approver/approver.cpp:530 msgid "Accept" msgstr "" #: approver/approver.cpp:543 msgid "End + Answer" msgstr "" #: approver/approver.cpp:552 msgid "Decline" msgstr "" #: approver/approver.cpp:560 msgid "Message & decline" msgstr "" #: approver/main.cpp:46 msgid "Telephony Service Approver" msgstr "" #: indicator/authhandler.cpp:72 msgid "Authentication failed. Do you want to review your credentials?" msgstr "" #: indicator/authhandler.cpp:91 msgid "Yes" msgstr "" #: indicator/authhandler.cpp:94 msgid "No" msgstr "" #: indicator/displaynamesettings.cpp:35 #, qt-format msgid "SIM %1" msgstr "" #: indicator/main.cpp:53 msgid "Telephony Service Indicator" msgstr "" #: indicator/messagingmenu.cpp:83 indicator/messagingmenu.cpp:87 msgid "Telephony Service" msgstr "" #: indicator/messagingmenu.cpp:151 indicator/messagingmenu.cpp:293 #: indicator/messagingmenu.cpp:360 msgid "Send" msgstr "" #. TRANSLATORS : %1 is the group name and %2 is the recipient name #: indicator/messagingmenu.cpp:262 indicator/textchannelobserver.cpp:671 #: indicator/textchannelobserver.cpp:675 #, qt-format msgid "Message to %1 from %2" msgstr "" #. TRANSLATORS : %1 is the recipient name #: indicator/messagingmenu.cpp:265 indicator/messagingmenu.cpp:269 #, qt-format msgid "Message to the group from %1" msgstr "" #: indicator/messagingmenu.cpp:345 msgid "Call back" msgstr "" #: indicator/messagingmenu.cpp:350 msgid "Missed your call — can you call me now?" msgstr "" #: indicator/messagingmenu.cpp:351 msgid "Running late. On my way." msgstr "" #: indicator/messagingmenu.cpp:352 msgid "Busy at the moment. Will call you later." msgstr "" #: indicator/messagingmenu.cpp:353 msgid "I am 20 minutes late." msgstr "" #: indicator/messagingmenu.cpp:354 msgid "Still busy. Will call you later." msgstr "" #: indicator/messagingmenu.cpp:409 #, qt-format msgid "%1 missed call" msgid_plural "%1 missed calls" msgstr[0] "" msgstr[1] "" #: indicator/messagingmenu.cpp:492 msgid "Voicemail messages" msgstr "" #: indicator/messagingmenu.cpp:495 #, qt-format msgid "%1 voicemail message" msgid_plural "%1 voicemail messages" msgstr[0] "" msgstr[1] "" #: indicator/messagingmenu.cpp:500 msgid "Voicemail" msgstr "" #: indicator/metrics.cpp:42 #, qt-format msgid "%1 text messages sent today" msgstr "" #: indicator/metrics.cpp:43 msgid "No text messages sent today" msgstr "" #: indicator/metrics.cpp:44 #, qt-format msgid "%1 text messages received today" msgstr "" #: indicator/metrics.cpp:45 msgid "No text messages received today" msgstr "" #: indicator/metrics.cpp:46 #, qt-format msgid "%1 calls received today" msgstr "" #: indicator/metrics.cpp:47 msgid "No calls received today" msgstr "" #: indicator/metrics.cpp:48 #, qt-format msgid "%1 calls made today" msgstr "" #: indicator/metrics.cpp:49 indicator/metrics.cpp:51 msgid "No calls made today" msgstr "" #: indicator/metrics.cpp:50 #, qt-format msgid "Spent %1 minutes in calls today" msgstr "" #: indicator/textchannelobserver.cpp:225 msgid "Unlock your sim card and try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:227 msgid "Deactivate flight mode and try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:230 msgid "Try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:236 msgid "The message could not be sent" msgstr "" #: indicator/textchannelobserver.cpp:249 indicator/textchannelobserver.cpp:713 msgid "View message" msgstr "" #: indicator/textchannelobserver.cpp:295 msgid "New Group" msgstr "" #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:302 #, qt-format msgid "You joined group %1 " msgstr "" #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:306 #, qt-format msgid "You joined group %1" msgstr "" #: indicator/textchannelobserver.cpp:309 msgid "You joined a new group" msgstr "" #: indicator/textchannelobserver.cpp:328 msgid "View Group" msgstr "" #: indicator/textchannelobserver.cpp:367 indicator/ussdindicator.cpp:116 msgid "Ok" msgstr "" #: indicator/textchannelobserver.cpp:373 msgid "Save" msgstr "" #: indicator/textchannelobserver.cpp:468 msgid "Emergency Alert" msgstr "" #: indicator/textchannelobserver.cpp:471 msgid "Emergency Alert: Extreme" msgstr "" #: indicator/textchannelobserver.cpp:474 msgid "Emergency Alert: Severe" msgstr "" #: indicator/textchannelobserver.cpp:477 msgid "Emergency Alert: Notice" msgstr "" #: indicator/textchannelobserver.cpp:482 msgid "AMBER Alert" msgstr "" #: indicator/textchannelobserver.cpp:485 msgid "Alert" msgstr "" #: indicator/textchannelobserver.cpp:531 msgid "Show alert" msgstr "" #: indicator/textchannelobserver.cpp:604 #, qt-format msgid "Attachment: %1 image" msgid_plural "Attachments: %1 images" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:606 #, qt-format msgid "Attachment: %1 video" msgid_plural "Attachments: %1 videos" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:608 #, qt-format msgid "Attachment: %1 contact" msgid_plural "Attachments: %1 contacts" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:610 #, qt-format msgid "Attachment: %1 audio clip" msgid_plural "Attachments: %1 audio clips" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:612 #, qt-format msgid "Attachment: %1 file" msgid_plural "Attachments: %1 files" msgstr[0] "" msgstr[1] "" #. TRANSLATORS : message displayed when any error occurred while receiving a MMS (case when cellular-data is off, or any downloading issue). Notify that there was a message, the user can find more about it in the messaging-app. #: indicator/textchannelobserver.cpp:615 msgid "New MMS message" msgstr "" #. TRANSLATORS : %1 is the recipient name #: indicator/textchannelobserver.cpp:679 indicator/textchannelobserver.cpp:683 #, qt-format msgid "Message to group from %1" msgstr "" #: indicator/textchannelobserver.cpp:749 #, qt-format msgid "Message from %1" msgstr "" #: indicator/textchannelobserver.cpp:910 msgid "Please, select a SIM card:" msgstr "" #: indicator/ussdindicator.cpp:119 msgid "Reply" msgstr "" #: indicator/ussdindicator.cpp:142 #, fuzzy msgid "Cancel" msgstr "Cancel" #: libtelephonyservice/callnotification.cpp:53 msgid "Conf call on hold" msgstr "" #: libtelephonyservice/callnotification.cpp:53 #, qt-format msgid "%1 call on hold" msgstr "" #: libtelephonyservice/callnotification.cpp:56 msgid "Conf call ended" msgstr "" #: libtelephonyservice/callnotification.cpp:56 #, qt-format msgid "%1 call ended" msgstr "" #: libtelephonyservice/callnotification.cpp:59 #, qt-format msgid "%1 call declined" msgstr "" #: libtelephonyservice/contactwatcher.cpp:157 msgid "Private Number" msgstr "" #: libtelephonyservice/contactwatcher.cpp:159 msgid "Unknown Number" msgstr "" telephony-service-0.5.3/po/telephony-service.pot000066400000000000000000000210021455543255600220040ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR Canonical Ltd. # This file is distributed under the same license as the telephony-service package. # FIRST AUTHOR , YEAR. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: telephony-service\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-12-16 17:03+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n" #: indicator/telephony-service-call.desktop.in:4 msgid "Phone Calls" msgstr "" #: indicator/telephony-service-sms.desktop.in:4 msgid "SMS" msgstr "" #: approver/approver.cpp:66 msgid "Unknown caller" msgstr "" #: approver/approver.cpp:94 msgid "I'm busy at the moment. I'll call later." msgstr "" #: approver/approver.cpp:95 msgid "I'm running late, on my way now." msgstr "" #: approver/approver.cpp:96 msgid "Please call me back later." msgstr "" #: approver/approver.cpp:457 #, qt-format msgid "On [%1]" msgstr "" #: approver/approver.cpp:461 indicator/messagingmenu.cpp:414 msgid "Private number" msgstr "" #: approver/approver.cpp:464 indicator/messagingmenu.cpp:244 #: indicator/messagingmenu.cpp:418 indicator/textchannelobserver.cpp:640 msgid "Unknown number" msgstr "" #: approver/approver.cpp:470 approver/approver.cpp:485 msgid "Caller number is not available" msgstr "" #: approver/approver.cpp:476 msgid "Calling from private number" msgstr "" #: approver/approver.cpp:479 msgid "Calling from unknown number" msgstr "" #: approver/approver.cpp:482 #, qt-format msgid "Calling from %1" msgstr "" #: approver/approver.cpp:529 msgid "Hold + Answer" msgstr "" #: approver/approver.cpp:530 msgid "Accept" msgstr "" #: approver/approver.cpp:543 msgid "End + Answer" msgstr "" #: approver/approver.cpp:552 msgid "Decline" msgstr "" #: approver/approver.cpp:560 msgid "Message & decline" msgstr "" #: approver/main.cpp:46 msgid "Telephony Service Approver" msgstr "" #: indicator/authhandler.cpp:72 msgid "Authentication failed. Do you want to review your credentials?" msgstr "" #: indicator/authhandler.cpp:91 msgid "Yes" msgstr "" #: indicator/authhandler.cpp:94 msgid "No" msgstr "" #: indicator/displaynamesettings.cpp:35 #, qt-format msgid "SIM %1" msgstr "" #: indicator/main.cpp:53 msgid "Telephony Service Indicator" msgstr "" #: indicator/messagingmenu.cpp:83 indicator/messagingmenu.cpp:87 msgid "Telephony Service" msgstr "" #: indicator/messagingmenu.cpp:151 indicator/messagingmenu.cpp:293 #: indicator/messagingmenu.cpp:360 msgid "Send" msgstr "" #. TRANSLATORS : %1 is the group name and %2 is the recipient name #: indicator/messagingmenu.cpp:262 indicator/textchannelobserver.cpp:671 #: indicator/textchannelobserver.cpp:675 #, qt-format msgid "Message to %1 from %2" msgstr "" #. TRANSLATORS : %1 is the recipient name #: indicator/messagingmenu.cpp:265 indicator/messagingmenu.cpp:269 #, qt-format msgid "Message to the group from %1" msgstr "" #: indicator/messagingmenu.cpp:345 msgid "Call back" msgstr "" #: indicator/messagingmenu.cpp:350 msgid "Missed your call — can you call me now?" msgstr "" #: indicator/messagingmenu.cpp:351 msgid "Running late. On my way." msgstr "" #: indicator/messagingmenu.cpp:352 msgid "Busy at the moment. Will call you later." msgstr "" #: indicator/messagingmenu.cpp:353 msgid "I am 20 minutes late." msgstr "" #: indicator/messagingmenu.cpp:354 msgid "Still busy. Will call you later." msgstr "" #: indicator/messagingmenu.cpp:409 #, qt-format msgid "%1 missed call" msgid_plural "%1 missed calls" msgstr[0] "" msgstr[1] "" #: indicator/messagingmenu.cpp:492 msgid "Voicemail messages" msgstr "" #: indicator/messagingmenu.cpp:495 #, qt-format msgid "%1 voicemail message" msgid_plural "%1 voicemail messages" msgstr[0] "" msgstr[1] "" #: indicator/messagingmenu.cpp:500 msgid "Voicemail" msgstr "" #: indicator/metrics.cpp:42 #, qt-format msgid "%1 text messages sent today" msgstr "" #: indicator/metrics.cpp:43 msgid "No text messages sent today" msgstr "" #: indicator/metrics.cpp:44 #, qt-format msgid "%1 text messages received today" msgstr "" #: indicator/metrics.cpp:45 msgid "No text messages received today" msgstr "" #: indicator/metrics.cpp:46 #, qt-format msgid "%1 calls received today" msgstr "" #: indicator/metrics.cpp:47 msgid "No calls received today" msgstr "" #: indicator/metrics.cpp:48 #, qt-format msgid "%1 calls made today" msgstr "" #: indicator/metrics.cpp:49 indicator/metrics.cpp:51 msgid "No calls made today" msgstr "" #: indicator/metrics.cpp:50 #, qt-format msgid "Spent %1 minutes in calls today" msgstr "" #: indicator/textchannelobserver.cpp:225 msgid "Unlock your sim card and try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:227 msgid "Deactivate flight mode and try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:230 msgid "Try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:236 msgid "The message could not be sent" msgstr "" #: indicator/textchannelobserver.cpp:249 indicator/textchannelobserver.cpp:713 msgid "View message" msgstr "" #: indicator/textchannelobserver.cpp:295 msgid "New Group" msgstr "" #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:302 #, qt-format msgid "You joined group %1 " msgstr "" #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:306 #, qt-format msgid "You joined group %1" msgstr "" #: indicator/textchannelobserver.cpp:309 msgid "You joined a new group" msgstr "" #: indicator/textchannelobserver.cpp:328 msgid "View Group" msgstr "" #: indicator/textchannelobserver.cpp:367 indicator/ussdindicator.cpp:116 msgid "Ok" msgstr "" #: indicator/textchannelobserver.cpp:373 msgid "Save" msgstr "" #: indicator/textchannelobserver.cpp:468 msgid "Emergency Alert" msgstr "" #: indicator/textchannelobserver.cpp:471 msgid "Emergency Alert: Extreme" msgstr "" #: indicator/textchannelobserver.cpp:474 msgid "Emergency Alert: Severe" msgstr "" #: indicator/textchannelobserver.cpp:477 msgid "Emergency Alert: Notice" msgstr "" #: indicator/textchannelobserver.cpp:482 msgid "AMBER Alert" msgstr "" #: indicator/textchannelobserver.cpp:485 msgid "Alert" msgstr "" #: indicator/textchannelobserver.cpp:531 msgid "Show alert" msgstr "" #: indicator/textchannelobserver.cpp:604 #, qt-format msgid "Attachment: %1 image" msgid_plural "Attachments: %1 images" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:606 #, qt-format msgid "Attachment: %1 video" msgid_plural "Attachments: %1 videos" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:608 #, qt-format msgid "Attachment: %1 contact" msgid_plural "Attachments: %1 contacts" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:610 #, qt-format msgid "Attachment: %1 audio clip" msgid_plural "Attachments: %1 audio clips" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:612 #, qt-format msgid "Attachment: %1 file" msgid_plural "Attachments: %1 files" msgstr[0] "" msgstr[1] "" #. TRANSLATORS : message displayed when any error occurred while receiving a MMS (case when cellular-data is off, or any downloading issue). Notify that there was a message, the user can find more about it in the messaging-app. #: indicator/textchannelobserver.cpp:615 msgid "New MMS message" msgstr "" #. TRANSLATORS : %1 is the recipient name #: indicator/textchannelobserver.cpp:679 indicator/textchannelobserver.cpp:683 #, qt-format msgid "Message to group from %1" msgstr "" #: indicator/textchannelobserver.cpp:749 #, qt-format msgid "Message from %1" msgstr "" #: indicator/textchannelobserver.cpp:910 msgid "Please, select a SIM card:" msgstr "" #: indicator/ussdindicator.cpp:119 msgid "Reply" msgstr "" #: indicator/ussdindicator.cpp:142 msgid "Cancel" msgstr "" #: libtelephonyservice/callnotification.cpp:53 msgid "Conf call on hold" msgstr "" #: libtelephonyservice/callnotification.cpp:53 #, qt-format msgid "%1 call on hold" msgstr "" #: libtelephonyservice/callnotification.cpp:56 msgid "Conf call ended" msgstr "" #: libtelephonyservice/callnotification.cpp:56 #, qt-format msgid "%1 call ended" msgstr "" #: libtelephonyservice/callnotification.cpp:59 #, qt-format msgid "%1 call declined" msgstr "" #: libtelephonyservice/contactwatcher.cpp:157 msgid "Private Number" msgstr "" #: libtelephonyservice/contactwatcher.cpp:159 msgid "Unknown Number" msgstr "" telephony-service-0.5.3/po/tet.po000066400000000000000000000211471455543255600167610ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-12-16 17:03+0100\n" "PO-Revision-Date: 2023-01-05 11:07+0000\n" "Last-Translator: Anonymous \n" "Language-Team: Tetum \n" "Language: tet\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Generator: Weblate 4.15.1-dev\n" #: indicator/telephony-service-call.desktop.in:4 msgid "Phone Calls" msgstr "" #: indicator/telephony-service-sms.desktop.in:4 msgid "SMS" msgstr "" #: approver/approver.cpp:66 msgid "Unknown caller" msgstr "" #: approver/approver.cpp:94 msgid "I'm busy at the moment. I'll call later." msgstr "" #: approver/approver.cpp:95 msgid "I'm running late, on my way now." msgstr "" #: approver/approver.cpp:96 msgid "Please call me back later." msgstr "" #: approver/approver.cpp:457 #, qt-format msgid "On [%1]" msgstr "" #: approver/approver.cpp:461 indicator/messagingmenu.cpp:414 msgid "Private number" msgstr "" #: approver/approver.cpp:464 indicator/messagingmenu.cpp:244 #: indicator/messagingmenu.cpp:418 indicator/textchannelobserver.cpp:640 msgid "Unknown number" msgstr "" #: approver/approver.cpp:470 approver/approver.cpp:485 msgid "Caller number is not available" msgstr "" #: approver/approver.cpp:476 msgid "Calling from private number" msgstr "" #: approver/approver.cpp:479 msgid "Calling from unknown number" msgstr "" #: approver/approver.cpp:482 #, qt-format msgid "Calling from %1" msgstr "" #: approver/approver.cpp:529 msgid "Hold + Answer" msgstr "" #: approver/approver.cpp:530 msgid "Accept" msgstr "" #: approver/approver.cpp:543 msgid "End + Answer" msgstr "" #: approver/approver.cpp:552 msgid "Decline" msgstr "" #: approver/approver.cpp:560 msgid "Message & decline" msgstr "" #: approver/main.cpp:46 msgid "Telephony Service Approver" msgstr "" #: indicator/authhandler.cpp:72 msgid "Authentication failed. Do you want to review your credentials?" msgstr "" #: indicator/authhandler.cpp:91 msgid "Yes" msgstr "" #: indicator/authhandler.cpp:94 msgid "No" msgstr "" #: indicator/displaynamesettings.cpp:35 #, qt-format msgid "SIM %1" msgstr "" #: indicator/main.cpp:53 msgid "Telephony Service Indicator" msgstr "" #: indicator/messagingmenu.cpp:83 indicator/messagingmenu.cpp:87 msgid "Telephony Service" msgstr "" #: indicator/messagingmenu.cpp:151 indicator/messagingmenu.cpp:293 #: indicator/messagingmenu.cpp:360 msgid "Send" msgstr "" #. TRANSLATORS : %1 is the group name and %2 is the recipient name #: indicator/messagingmenu.cpp:262 indicator/textchannelobserver.cpp:671 #: indicator/textchannelobserver.cpp:675 #, qt-format msgid "Message to %1 from %2" msgstr "" #. TRANSLATORS : %1 is the recipient name #: indicator/messagingmenu.cpp:265 indicator/messagingmenu.cpp:269 #, qt-format msgid "Message to the group from %1" msgstr "" #: indicator/messagingmenu.cpp:345 msgid "Call back" msgstr "" #: indicator/messagingmenu.cpp:350 msgid "Missed your call — can you call me now?" msgstr "" #: indicator/messagingmenu.cpp:351 msgid "Running late. On my way." msgstr "" #: indicator/messagingmenu.cpp:352 msgid "Busy at the moment. Will call you later." msgstr "" #: indicator/messagingmenu.cpp:353 msgid "I am 20 minutes late." msgstr "" #: indicator/messagingmenu.cpp:354 msgid "Still busy. Will call you later." msgstr "" #: indicator/messagingmenu.cpp:409 #, qt-format msgid "%1 missed call" msgid_plural "%1 missed calls" msgstr[0] "" msgstr[1] "" #: indicator/messagingmenu.cpp:492 msgid "Voicemail messages" msgstr "" #: indicator/messagingmenu.cpp:495 #, qt-format msgid "%1 voicemail message" msgid_plural "%1 voicemail messages" msgstr[0] "" msgstr[1] "" #: indicator/messagingmenu.cpp:500 msgid "Voicemail" msgstr "" #: indicator/metrics.cpp:42 #, qt-format msgid "%1 text messages sent today" msgstr "" #: indicator/metrics.cpp:43 msgid "No text messages sent today" msgstr "" #: indicator/metrics.cpp:44 #, qt-format msgid "%1 text messages received today" msgstr "" #: indicator/metrics.cpp:45 msgid "No text messages received today" msgstr "" #: indicator/metrics.cpp:46 #, qt-format msgid "%1 calls received today" msgstr "" #: indicator/metrics.cpp:47 msgid "No calls received today" msgstr "" #: indicator/metrics.cpp:48 #, qt-format msgid "%1 calls made today" msgstr "" #: indicator/metrics.cpp:49 indicator/metrics.cpp:51 msgid "No calls made today" msgstr "" #: indicator/metrics.cpp:50 #, qt-format msgid "Spent %1 minutes in calls today" msgstr "" #: indicator/textchannelobserver.cpp:225 msgid "Unlock your sim card and try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:227 msgid "Deactivate flight mode and try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:230 msgid "Try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:236 msgid "The message could not be sent" msgstr "" #: indicator/textchannelobserver.cpp:249 indicator/textchannelobserver.cpp:713 msgid "View message" msgstr "" #: indicator/textchannelobserver.cpp:295 msgid "New Group" msgstr "" #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:302 #, qt-format msgid "You joined group %1 " msgstr "" #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:306 #, qt-format msgid "You joined group %1" msgstr "" #: indicator/textchannelobserver.cpp:309 msgid "You joined a new group" msgstr "" #: indicator/textchannelobserver.cpp:328 msgid "View Group" msgstr "" #: indicator/textchannelobserver.cpp:367 indicator/ussdindicator.cpp:116 msgid "Ok" msgstr "" #: indicator/textchannelobserver.cpp:373 msgid "Save" msgstr "" #: indicator/textchannelobserver.cpp:468 msgid "Emergency Alert" msgstr "" #: indicator/textchannelobserver.cpp:471 msgid "Emergency Alert: Extreme" msgstr "" #: indicator/textchannelobserver.cpp:474 msgid "Emergency Alert: Severe" msgstr "" #: indicator/textchannelobserver.cpp:477 msgid "Emergency Alert: Notice" msgstr "" #: indicator/textchannelobserver.cpp:482 msgid "AMBER Alert" msgstr "" #: indicator/textchannelobserver.cpp:485 msgid "Alert" msgstr "" #: indicator/textchannelobserver.cpp:531 msgid "Show alert" msgstr "" #: indicator/textchannelobserver.cpp:604 #, qt-format msgid "Attachment: %1 image" msgid_plural "Attachments: %1 images" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:606 #, qt-format msgid "Attachment: %1 video" msgid_plural "Attachments: %1 videos" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:608 #, qt-format msgid "Attachment: %1 contact" msgid_plural "Attachments: %1 contacts" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:610 #, qt-format msgid "Attachment: %1 audio clip" msgid_plural "Attachments: %1 audio clips" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:612 #, qt-format msgid "Attachment: %1 file" msgid_plural "Attachments: %1 files" msgstr[0] "" msgstr[1] "" #. TRANSLATORS : message displayed when any error occurred while receiving a MMS (case when cellular-data is off, or any downloading issue). Notify that there was a message, the user can find more about it in the messaging-app. #: indicator/textchannelobserver.cpp:615 msgid "New MMS message" msgstr "" #. TRANSLATORS : %1 is the recipient name #: indicator/textchannelobserver.cpp:679 indicator/textchannelobserver.cpp:683 #, qt-format msgid "Message to group from %1" msgstr "" #: indicator/textchannelobserver.cpp:749 #, qt-format msgid "Message from %1" msgstr "" #: indicator/textchannelobserver.cpp:910 msgid "Please, select a SIM card:" msgstr "" #: indicator/ussdindicator.cpp:119 msgid "Reply" msgstr "" #: indicator/ussdindicator.cpp:142 #, fuzzy msgid "Cancel" msgstr "Cancel" #: libtelephonyservice/callnotification.cpp:53 msgid "Conf call on hold" msgstr "" #: libtelephonyservice/callnotification.cpp:53 #, qt-format msgid "%1 call on hold" msgstr "" #: libtelephonyservice/callnotification.cpp:56 msgid "Conf call ended" msgstr "" #: libtelephonyservice/callnotification.cpp:56 #, qt-format msgid "%1 call ended" msgstr "" #: libtelephonyservice/callnotification.cpp:59 #, qt-format msgid "%1 call declined" msgstr "" #: libtelephonyservice/contactwatcher.cpp:157 msgid "Private Number" msgstr "" #: libtelephonyservice/contactwatcher.cpp:159 msgid "Unknown Number" msgstr "" telephony-service-0.5.3/po/tg.po000066400000000000000000000211401455543255600165700ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-12-16 17:03+0100\n" "PO-Revision-Date: 2023-01-05 11:07+0000\n" "Last-Translator: Anonymous \n" "Language-Team: Tajik \n" "Language: tg\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" "X-Generator: Weblate 4.15.1-dev\n" #: indicator/telephony-service-call.desktop.in:4 msgid "Phone Calls" msgstr "" #: indicator/telephony-service-sms.desktop.in:4 msgid "SMS" msgstr "" #: approver/approver.cpp:66 msgid "Unknown caller" msgstr "" #: approver/approver.cpp:94 msgid "I'm busy at the moment. I'll call later." msgstr "" #: approver/approver.cpp:95 msgid "I'm running late, on my way now." msgstr "" #: approver/approver.cpp:96 msgid "Please call me back later." msgstr "" #: approver/approver.cpp:457 #, qt-format msgid "On [%1]" msgstr "" #: approver/approver.cpp:461 indicator/messagingmenu.cpp:414 msgid "Private number" msgstr "" #: approver/approver.cpp:464 indicator/messagingmenu.cpp:244 #: indicator/messagingmenu.cpp:418 indicator/textchannelobserver.cpp:640 msgid "Unknown number" msgstr "" #: approver/approver.cpp:470 approver/approver.cpp:485 msgid "Caller number is not available" msgstr "" #: approver/approver.cpp:476 msgid "Calling from private number" msgstr "" #: approver/approver.cpp:479 msgid "Calling from unknown number" msgstr "" #: approver/approver.cpp:482 #, qt-format msgid "Calling from %1" msgstr "" #: approver/approver.cpp:529 msgid "Hold + Answer" msgstr "" #: approver/approver.cpp:530 msgid "Accept" msgstr "" #: approver/approver.cpp:543 msgid "End + Answer" msgstr "" #: approver/approver.cpp:552 msgid "Decline" msgstr "" #: approver/approver.cpp:560 msgid "Message & decline" msgstr "" #: approver/main.cpp:46 msgid "Telephony Service Approver" msgstr "" #: indicator/authhandler.cpp:72 msgid "Authentication failed. Do you want to review your credentials?" msgstr "" #: indicator/authhandler.cpp:91 msgid "Yes" msgstr "" #: indicator/authhandler.cpp:94 msgid "No" msgstr "" #: indicator/displaynamesettings.cpp:35 #, qt-format msgid "SIM %1" msgstr "" #: indicator/main.cpp:53 msgid "Telephony Service Indicator" msgstr "" #: indicator/messagingmenu.cpp:83 indicator/messagingmenu.cpp:87 msgid "Telephony Service" msgstr "" #: indicator/messagingmenu.cpp:151 indicator/messagingmenu.cpp:293 #: indicator/messagingmenu.cpp:360 msgid "Send" msgstr "" #. TRANSLATORS : %1 is the group name and %2 is the recipient name #: indicator/messagingmenu.cpp:262 indicator/textchannelobserver.cpp:671 #: indicator/textchannelobserver.cpp:675 #, qt-format msgid "Message to %1 from %2" msgstr "" #. TRANSLATORS : %1 is the recipient name #: indicator/messagingmenu.cpp:265 indicator/messagingmenu.cpp:269 #, qt-format msgid "Message to the group from %1" msgstr "" #: indicator/messagingmenu.cpp:345 msgid "Call back" msgstr "" #: indicator/messagingmenu.cpp:350 msgid "Missed your call — can you call me now?" msgstr "" #: indicator/messagingmenu.cpp:351 msgid "Running late. On my way." msgstr "" #: indicator/messagingmenu.cpp:352 msgid "Busy at the moment. Will call you later." msgstr "" #: indicator/messagingmenu.cpp:353 msgid "I am 20 minutes late." msgstr "" #: indicator/messagingmenu.cpp:354 msgid "Still busy. Will call you later." msgstr "" #: indicator/messagingmenu.cpp:409 #, qt-format msgid "%1 missed call" msgid_plural "%1 missed calls" msgstr[0] "" msgstr[1] "" #: indicator/messagingmenu.cpp:492 msgid "Voicemail messages" msgstr "" #: indicator/messagingmenu.cpp:495 #, qt-format msgid "%1 voicemail message" msgid_plural "%1 voicemail messages" msgstr[0] "" msgstr[1] "" #: indicator/messagingmenu.cpp:500 msgid "Voicemail" msgstr "" #: indicator/metrics.cpp:42 #, qt-format msgid "%1 text messages sent today" msgstr "" #: indicator/metrics.cpp:43 msgid "No text messages sent today" msgstr "" #: indicator/metrics.cpp:44 #, qt-format msgid "%1 text messages received today" msgstr "" #: indicator/metrics.cpp:45 msgid "No text messages received today" msgstr "" #: indicator/metrics.cpp:46 #, qt-format msgid "%1 calls received today" msgstr "" #: indicator/metrics.cpp:47 msgid "No calls received today" msgstr "" #: indicator/metrics.cpp:48 #, qt-format msgid "%1 calls made today" msgstr "" #: indicator/metrics.cpp:49 indicator/metrics.cpp:51 msgid "No calls made today" msgstr "" #: indicator/metrics.cpp:50 #, qt-format msgid "Spent %1 minutes in calls today" msgstr "" #: indicator/textchannelobserver.cpp:225 msgid "Unlock your sim card and try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:227 msgid "Deactivate flight mode and try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:230 msgid "Try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:236 msgid "The message could not be sent" msgstr "" #: indicator/textchannelobserver.cpp:249 indicator/textchannelobserver.cpp:713 msgid "View message" msgstr "" #: indicator/textchannelobserver.cpp:295 msgid "New Group" msgstr "" #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:302 #, qt-format msgid "You joined group %1 " msgstr "" #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:306 #, qt-format msgid "You joined group %1" msgstr "" #: indicator/textchannelobserver.cpp:309 msgid "You joined a new group" msgstr "" #: indicator/textchannelobserver.cpp:328 msgid "View Group" msgstr "" #: indicator/textchannelobserver.cpp:367 indicator/ussdindicator.cpp:116 msgid "Ok" msgstr "" #: indicator/textchannelobserver.cpp:373 msgid "Save" msgstr "" #: indicator/textchannelobserver.cpp:468 msgid "Emergency Alert" msgstr "" #: indicator/textchannelobserver.cpp:471 msgid "Emergency Alert: Extreme" msgstr "" #: indicator/textchannelobserver.cpp:474 msgid "Emergency Alert: Severe" msgstr "" #: indicator/textchannelobserver.cpp:477 msgid "Emergency Alert: Notice" msgstr "" #: indicator/textchannelobserver.cpp:482 msgid "AMBER Alert" msgstr "" #: indicator/textchannelobserver.cpp:485 msgid "Alert" msgstr "" #: indicator/textchannelobserver.cpp:531 msgid "Show alert" msgstr "" #: indicator/textchannelobserver.cpp:604 #, qt-format msgid "Attachment: %1 image" msgid_plural "Attachments: %1 images" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:606 #, qt-format msgid "Attachment: %1 video" msgid_plural "Attachments: %1 videos" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:608 #, qt-format msgid "Attachment: %1 contact" msgid_plural "Attachments: %1 contacts" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:610 #, qt-format msgid "Attachment: %1 audio clip" msgid_plural "Attachments: %1 audio clips" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:612 #, qt-format msgid "Attachment: %1 file" msgid_plural "Attachments: %1 files" msgstr[0] "" msgstr[1] "" #. TRANSLATORS : message displayed when any error occurred while receiving a MMS (case when cellular-data is off, or any downloading issue). Notify that there was a message, the user can find more about it in the messaging-app. #: indicator/textchannelobserver.cpp:615 msgid "New MMS message" msgstr "" #. TRANSLATORS : %1 is the recipient name #: indicator/textchannelobserver.cpp:679 indicator/textchannelobserver.cpp:683 #, qt-format msgid "Message to group from %1" msgstr "" #: indicator/textchannelobserver.cpp:749 #, qt-format msgid "Message from %1" msgstr "" #: indicator/textchannelobserver.cpp:910 msgid "Please, select a SIM card:" msgstr "" #: indicator/ussdindicator.cpp:119 msgid "Reply" msgstr "" #: indicator/ussdindicator.cpp:142 #, fuzzy msgid "Cancel" msgstr "Cancel" #: libtelephonyservice/callnotification.cpp:53 msgid "Conf call on hold" msgstr "" #: libtelephonyservice/callnotification.cpp:53 #, qt-format msgid "%1 call on hold" msgstr "" #: libtelephonyservice/callnotification.cpp:56 msgid "Conf call ended" msgstr "" #: libtelephonyservice/callnotification.cpp:56 #, qt-format msgid "%1 call ended" msgstr "" #: libtelephonyservice/callnotification.cpp:59 #, qt-format msgid "%1 call declined" msgstr "" #: libtelephonyservice/contactwatcher.cpp:157 msgid "Private Number" msgstr "" #: libtelephonyservice/contactwatcher.cpp:159 msgid "Unknown Number" msgstr "" telephony-service-0.5.3/po/th.po000066400000000000000000000236661455543255600166100ustar00rootroot00000000000000# Thai translation for telephony-service # Copyright (c) 2016 Rosetta Contributors and Canonical Ltd 2016 # This file is distributed under the same license as the telephony-service package. # FIRST AUTHOR , 2016. # msgid "" msgstr "" "Project-Id-Version: telephony-service\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-12-16 17:03+0100\n" "PO-Revision-Date: 2021-07-16 19:12+0000\n" "Last-Translator: PPNplus \n" "Language-Team: Thai \n" "Language: th\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" "X-Generator: Weblate 3.11.3\n" "X-Launchpad-Export-Date: 2017-01-04 06:03+0000\n" #: indicator/telephony-service-call.desktop.in:4 msgid "Phone Calls" msgstr "" #: indicator/telephony-service-sms.desktop.in:4 msgid "SMS" msgstr "" #: approver/approver.cpp:66 msgid "Unknown caller" msgstr "" #: approver/approver.cpp:94 msgid "I'm busy at the moment. I'll call later." msgstr "ตอนนี้ฉันไม่ว่าง เดี๋ยวฉันโทรกลับ" #: approver/approver.cpp:95 msgid "I'm running late, on my way now." msgstr "" #: approver/approver.cpp:96 msgid "Please call me back later." msgstr "" #: approver/approver.cpp:457 #, qt-format msgid "On [%1]" msgstr "" #: approver/approver.cpp:461 indicator/messagingmenu.cpp:414 msgid "Private number" msgstr "" #: approver/approver.cpp:464 indicator/messagingmenu.cpp:244 #: indicator/messagingmenu.cpp:418 indicator/textchannelobserver.cpp:640 msgid "Unknown number" msgstr "" #: approver/approver.cpp:470 approver/approver.cpp:485 msgid "Caller number is not available" msgstr "" #: approver/approver.cpp:476 msgid "Calling from private number" msgstr "กำลังโทรจากหมายเลขส่วนตัว" #: approver/approver.cpp:479 msgid "Calling from unknown number" msgstr "กำลังโทรจากหมายเลขที่ไม่รู้จัก" #: approver/approver.cpp:482 #, qt-format msgid "Calling from %1" msgstr "กำลังโทรจาก %1" #: approver/approver.cpp:529 msgid "Hold + Answer" msgstr "" #: approver/approver.cpp:530 msgid "Accept" msgstr "รับสาย" #: approver/approver.cpp:543 msgid "End + Answer" msgstr "" #: approver/approver.cpp:552 msgid "Decline" msgstr "ปฏิเสธ" #: approver/approver.cpp:560 msgid "Message & decline" msgstr "ส่งข้อความ & ปฏิเสธ" #: approver/main.cpp:46 msgid "Telephony Service Approver" msgstr "" #: indicator/authhandler.cpp:72 msgid "Authentication failed. Do you want to review your credentials?" msgstr "" #: indicator/authhandler.cpp:91 msgid "Yes" msgstr "" #: indicator/authhandler.cpp:94 msgid "No" msgstr "" #: indicator/displaynamesettings.cpp:35 #, qt-format msgid "SIM %1" msgstr "ซิม %1" #: indicator/main.cpp:53 msgid "Telephony Service Indicator" msgstr "" #: indicator/messagingmenu.cpp:83 indicator/messagingmenu.cpp:87 msgid "Telephony Service" msgstr "" #: indicator/messagingmenu.cpp:151 indicator/messagingmenu.cpp:293 #: indicator/messagingmenu.cpp:360 msgid "Send" msgstr "" #. TRANSLATORS : %1 is the group name and %2 is the recipient name #: indicator/messagingmenu.cpp:262 indicator/textchannelobserver.cpp:671 #: indicator/textchannelobserver.cpp:675 #, qt-format msgid "Message to %1 from %2" msgstr "ข้อความไปยัง %1 จาก %2" #. TRANSLATORS : %1 is the recipient name #: indicator/messagingmenu.cpp:265 indicator/messagingmenu.cpp:269 #, fuzzy, qt-format #| msgid "Message to %1 from %2" msgid "Message to the group from %1" msgstr "ข้อความไปยัง %1 จาก %2" #: indicator/messagingmenu.cpp:345 msgid "Call back" msgstr "โทรกลับ" #: indicator/messagingmenu.cpp:350 #, fuzzy #| msgid "I missed your call - can you call me now?" msgid "Missed your call — can you call me now?" msgstr "ฉันไม่ได้รับสาย ช่วยโทรกลับมาเลยได้ไหม" #: indicator/messagingmenu.cpp:351 msgid "Running late. On my way." msgstr "" #: indicator/messagingmenu.cpp:352 #, fuzzy #| msgid "I'm busy at the moment. I'll call you later." msgid "Busy at the moment. Will call you later." msgstr "ตอนนี้ฉันไม่ว่าง เดี๋ยวฉันโทรกลับ" #: indicator/messagingmenu.cpp:353 #, fuzzy #| msgid "I'll be 20 minutes late." msgid "I am 20 minutes late." msgstr "ฉันจะมาถึงช้า 20 นาที" #: indicator/messagingmenu.cpp:354 #, fuzzy #| msgid "I'm busy at the moment. I'll call you later." msgid "Still busy. Will call you later." msgstr "ตอนนี้ฉันไม่ว่าง เดี๋ยวฉันโทรกลับ" #: indicator/messagingmenu.cpp:409 #, qt-format msgid "%1 missed call" msgid_plural "%1 missed calls" msgstr[0] "%1 สายที่ไม่ได้รับ" #: indicator/messagingmenu.cpp:492 msgid "Voicemail messages" msgstr "" #: indicator/messagingmenu.cpp:495 #, qt-format msgid "%1 voicemail message" msgid_plural "%1 voicemail messages" msgstr[0] "%1 ข้อความเสียง" #: indicator/messagingmenu.cpp:500 msgid "Voicemail" msgstr "" #: indicator/metrics.cpp:42 #, qt-format msgid "%1 text messages sent today" msgstr "" #: indicator/metrics.cpp:43 msgid "No text messages sent today" msgstr "" #: indicator/metrics.cpp:44 #, qt-format msgid "%1 text messages received today" msgstr "" #: indicator/metrics.cpp:45 msgid "No text messages received today" msgstr "" #: indicator/metrics.cpp:46 #, qt-format msgid "%1 calls received today" msgstr "" #: indicator/metrics.cpp:47 msgid "No calls received today" msgstr "" #: indicator/metrics.cpp:48 #, qt-format msgid "%1 calls made today" msgstr "" #: indicator/metrics.cpp:49 indicator/metrics.cpp:51 msgid "No calls made today" msgstr "" #: indicator/metrics.cpp:50 #, qt-format msgid "Spent %1 minutes in calls today" msgstr "" #: indicator/textchannelobserver.cpp:225 msgid "Unlock your sim card and try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:227 msgid "Deactivate flight mode and try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:230 msgid "Try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:236 msgid "The message could not be sent" msgstr "" #: indicator/textchannelobserver.cpp:249 indicator/textchannelobserver.cpp:713 msgid "View message" msgstr "" #: indicator/textchannelobserver.cpp:295 msgid "New Group" msgstr "" #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:302 #, qt-format msgid "You joined group %1 " msgstr "" #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:306 #, qt-format msgid "You joined group %1" msgstr "" #: indicator/textchannelobserver.cpp:309 msgid "You joined a new group" msgstr "" #: indicator/textchannelobserver.cpp:328 msgid "View Group" msgstr "" #: indicator/textchannelobserver.cpp:367 indicator/ussdindicator.cpp:116 msgid "Ok" msgstr "" #: indicator/textchannelobserver.cpp:373 msgid "Save" msgstr "บันทึก" #: indicator/textchannelobserver.cpp:468 msgid "Emergency Alert" msgstr "" #: indicator/textchannelobserver.cpp:471 msgid "Emergency Alert: Extreme" msgstr "" #: indicator/textchannelobserver.cpp:474 msgid "Emergency Alert: Severe" msgstr "" #: indicator/textchannelobserver.cpp:477 msgid "Emergency Alert: Notice" msgstr "" #: indicator/textchannelobserver.cpp:482 msgid "AMBER Alert" msgstr "" #: indicator/textchannelobserver.cpp:485 msgid "Alert" msgstr "" #: indicator/textchannelobserver.cpp:531 msgid "Show alert" msgstr "" #: indicator/textchannelobserver.cpp:604 #, qt-format msgid "Attachment: %1 image" msgid_plural "Attachments: %1 images" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:606 #, qt-format msgid "Attachment: %1 video" msgid_plural "Attachments: %1 videos" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:608 #, qt-format msgid "Attachment: %1 contact" msgid_plural "Attachments: %1 contacts" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:610 #, qt-format msgid "Attachment: %1 audio clip" msgid_plural "Attachments: %1 audio clips" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:612 #, qt-format msgid "Attachment: %1 file" msgid_plural "Attachments: %1 files" msgstr[0] "" msgstr[1] "" #. TRANSLATORS : message displayed when any error occurred while receiving a MMS (case when cellular-data is off, or any downloading issue). Notify that there was a message, the user can find more about it in the messaging-app. #: indicator/textchannelobserver.cpp:615 msgid "New MMS message" msgstr "" #. TRANSLATORS : %1 is the recipient name #: indicator/textchannelobserver.cpp:679 indicator/textchannelobserver.cpp:683 #, qt-format msgid "Message to group from %1" msgstr "" #: indicator/textchannelobserver.cpp:749 #, qt-format msgid "Message from %1" msgstr "ข้อความจาก %1" #: indicator/textchannelobserver.cpp:910 msgid "Please, select a SIM card:" msgstr "" #: indicator/ussdindicator.cpp:119 msgid "Reply" msgstr "" #: indicator/ussdindicator.cpp:142 msgid "Cancel" msgstr "ยกเลิก" #: libtelephonyservice/callnotification.cpp:53 msgid "Conf call on hold" msgstr "" #: libtelephonyservice/callnotification.cpp:53 #, qt-format msgid "%1 call on hold" msgstr "" #: libtelephonyservice/callnotification.cpp:56 msgid "Conf call ended" msgstr "" #: libtelephonyservice/callnotification.cpp:56 #, qt-format msgid "%1 call ended" msgstr "" #: libtelephonyservice/callnotification.cpp:59 #, qt-format msgid "%1 call declined" msgstr "" #: libtelephonyservice/contactwatcher.cpp:157 msgid "Private Number" msgstr "" #: libtelephonyservice/contactwatcher.cpp:159 msgid "Unknown Number" msgstr "" telephony-service-0.5.3/po/ti.po000066400000000000000000000207361455543255600166040ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR Canonical Ltd. # This file is distributed under the same license as the telephony-service package. # FIRST AUTHOR , YEAR. # msgid "" msgstr "" "Project-Id-Version: telephony-service\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-12-16 17:03+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: Automatically generated\n" "Language-Team: none\n" "Language: ti\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n > 1;\n" #: indicator/telephony-service-call.desktop.in:4 msgid "Phone Calls" msgstr "" #: indicator/telephony-service-sms.desktop.in:4 msgid "SMS" msgstr "" #: approver/approver.cpp:66 msgid "Unknown caller" msgstr "" #: approver/approver.cpp:94 msgid "I'm busy at the moment. I'll call later." msgstr "" #: approver/approver.cpp:95 msgid "I'm running late, on my way now." msgstr "" #: approver/approver.cpp:96 msgid "Please call me back later." msgstr "" #: approver/approver.cpp:457 #, qt-format msgid "On [%1]" msgstr "" #: approver/approver.cpp:461 indicator/messagingmenu.cpp:414 msgid "Private number" msgstr "" #: approver/approver.cpp:464 indicator/messagingmenu.cpp:244 #: indicator/messagingmenu.cpp:418 indicator/textchannelobserver.cpp:640 msgid "Unknown number" msgstr "" #: approver/approver.cpp:470 approver/approver.cpp:485 msgid "Caller number is not available" msgstr "" #: approver/approver.cpp:476 msgid "Calling from private number" msgstr "" #: approver/approver.cpp:479 msgid "Calling from unknown number" msgstr "" #: approver/approver.cpp:482 #, qt-format msgid "Calling from %1" msgstr "" #: approver/approver.cpp:529 msgid "Hold + Answer" msgstr "" #: approver/approver.cpp:530 msgid "Accept" msgstr "" #: approver/approver.cpp:543 msgid "End + Answer" msgstr "" #: approver/approver.cpp:552 msgid "Decline" msgstr "" #: approver/approver.cpp:560 msgid "Message & decline" msgstr "" #: approver/main.cpp:46 msgid "Telephony Service Approver" msgstr "" #: indicator/authhandler.cpp:72 msgid "Authentication failed. Do you want to review your credentials?" msgstr "" #: indicator/authhandler.cpp:91 msgid "Yes" msgstr "" #: indicator/authhandler.cpp:94 msgid "No" msgstr "" #: indicator/displaynamesettings.cpp:35 #, qt-format msgid "SIM %1" msgstr "" #: indicator/main.cpp:53 msgid "Telephony Service Indicator" msgstr "" #: indicator/messagingmenu.cpp:83 indicator/messagingmenu.cpp:87 msgid "Telephony Service" msgstr "" #: indicator/messagingmenu.cpp:151 indicator/messagingmenu.cpp:293 #: indicator/messagingmenu.cpp:360 msgid "Send" msgstr "" #. TRANSLATORS : %1 is the group name and %2 is the recipient name #: indicator/messagingmenu.cpp:262 indicator/textchannelobserver.cpp:671 #: indicator/textchannelobserver.cpp:675 #, qt-format msgid "Message to %1 from %2" msgstr "" #. TRANSLATORS : %1 is the recipient name #: indicator/messagingmenu.cpp:265 indicator/messagingmenu.cpp:269 #, qt-format msgid "Message to the group from %1" msgstr "" #: indicator/messagingmenu.cpp:345 msgid "Call back" msgstr "" #: indicator/messagingmenu.cpp:350 msgid "Missed your call — can you call me now?" msgstr "" #: indicator/messagingmenu.cpp:351 msgid "Running late. On my way." msgstr "" #: indicator/messagingmenu.cpp:352 msgid "Busy at the moment. Will call you later." msgstr "" #: indicator/messagingmenu.cpp:353 msgid "I am 20 minutes late." msgstr "" #: indicator/messagingmenu.cpp:354 msgid "Still busy. Will call you later." msgstr "" #: indicator/messagingmenu.cpp:409 #, qt-format msgid "%1 missed call" msgid_plural "%1 missed calls" msgstr[0] "" msgstr[1] "" #: indicator/messagingmenu.cpp:492 msgid "Voicemail messages" msgstr "" #: indicator/messagingmenu.cpp:495 #, qt-format msgid "%1 voicemail message" msgid_plural "%1 voicemail messages" msgstr[0] "" msgstr[1] "" #: indicator/messagingmenu.cpp:500 msgid "Voicemail" msgstr "" #: indicator/metrics.cpp:42 #, qt-format msgid "%1 text messages sent today" msgstr "" #: indicator/metrics.cpp:43 msgid "No text messages sent today" msgstr "" #: indicator/metrics.cpp:44 #, qt-format msgid "%1 text messages received today" msgstr "" #: indicator/metrics.cpp:45 msgid "No text messages received today" msgstr "" #: indicator/metrics.cpp:46 #, qt-format msgid "%1 calls received today" msgstr "" #: indicator/metrics.cpp:47 msgid "No calls received today" msgstr "" #: indicator/metrics.cpp:48 #, qt-format msgid "%1 calls made today" msgstr "" #: indicator/metrics.cpp:49 indicator/metrics.cpp:51 msgid "No calls made today" msgstr "" #: indicator/metrics.cpp:50 #, qt-format msgid "Spent %1 minutes in calls today" msgstr "" #: indicator/textchannelobserver.cpp:225 msgid "Unlock your sim card and try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:227 msgid "Deactivate flight mode and try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:230 msgid "Try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:236 msgid "The message could not be sent" msgstr "" #: indicator/textchannelobserver.cpp:249 indicator/textchannelobserver.cpp:713 msgid "View message" msgstr "" #: indicator/textchannelobserver.cpp:295 msgid "New Group" msgstr "" #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:302 #, qt-format msgid "You joined group %1 " msgstr "" #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:306 #, qt-format msgid "You joined group %1" msgstr "" #: indicator/textchannelobserver.cpp:309 msgid "You joined a new group" msgstr "" #: indicator/textchannelobserver.cpp:328 msgid "View Group" msgstr "" #: indicator/textchannelobserver.cpp:367 indicator/ussdindicator.cpp:116 msgid "Ok" msgstr "" #: indicator/textchannelobserver.cpp:373 msgid "Save" msgstr "" #: indicator/textchannelobserver.cpp:468 msgid "Emergency Alert" msgstr "" #: indicator/textchannelobserver.cpp:471 msgid "Emergency Alert: Extreme" msgstr "" #: indicator/textchannelobserver.cpp:474 msgid "Emergency Alert: Severe" msgstr "" #: indicator/textchannelobserver.cpp:477 msgid "Emergency Alert: Notice" msgstr "" #: indicator/textchannelobserver.cpp:482 msgid "AMBER Alert" msgstr "" #: indicator/textchannelobserver.cpp:485 msgid "Alert" msgstr "" #: indicator/textchannelobserver.cpp:531 msgid "Show alert" msgstr "" #: indicator/textchannelobserver.cpp:604 #, qt-format msgid "Attachment: %1 image" msgid_plural "Attachments: %1 images" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:606 #, qt-format msgid "Attachment: %1 video" msgid_plural "Attachments: %1 videos" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:608 #, qt-format msgid "Attachment: %1 contact" msgid_plural "Attachments: %1 contacts" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:610 #, qt-format msgid "Attachment: %1 audio clip" msgid_plural "Attachments: %1 audio clips" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:612 #, qt-format msgid "Attachment: %1 file" msgid_plural "Attachments: %1 files" msgstr[0] "" msgstr[1] "" #. TRANSLATORS : message displayed when any error occurred while receiving a MMS (case when cellular-data is off, or any downloading issue). Notify that there was a message, the user can find more about it in the messaging-app. #: indicator/textchannelobserver.cpp:615 msgid "New MMS message" msgstr "" #. TRANSLATORS : %1 is the recipient name #: indicator/textchannelobserver.cpp:679 indicator/textchannelobserver.cpp:683 #, qt-format msgid "Message to group from %1" msgstr "" #: indicator/textchannelobserver.cpp:749 #, qt-format msgid "Message from %1" msgstr "" #: indicator/textchannelobserver.cpp:910 msgid "Please, select a SIM card:" msgstr "" #: indicator/ussdindicator.cpp:119 msgid "Reply" msgstr "" #: indicator/ussdindicator.cpp:142 msgid "Cancel" msgstr "" #: libtelephonyservice/callnotification.cpp:53 msgid "Conf call on hold" msgstr "" #: libtelephonyservice/callnotification.cpp:53 #, qt-format msgid "%1 call on hold" msgstr "" #: libtelephonyservice/callnotification.cpp:56 msgid "Conf call ended" msgstr "" #: libtelephonyservice/callnotification.cpp:56 #, qt-format msgid "%1 call ended" msgstr "" #: libtelephonyservice/callnotification.cpp:59 #, qt-format msgid "%1 call declined" msgstr "" #: libtelephonyservice/contactwatcher.cpp:157 msgid "Private Number" msgstr "" #: libtelephonyservice/contactwatcher.cpp:159 msgid "Unknown Number" msgstr "" telephony-service-0.5.3/po/tk.po000066400000000000000000000211471455543255600166030ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-12-16 17:03+0100\n" "PO-Revision-Date: 2023-01-05 11:07+0000\n" "Last-Translator: Anonymous \n" "Language-Team: Turkmen \n" "Language: tk\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Generator: Weblate 4.15.1-dev\n" #: indicator/telephony-service-call.desktop.in:4 msgid "Phone Calls" msgstr "" #: indicator/telephony-service-sms.desktop.in:4 msgid "SMS" msgstr "" #: approver/approver.cpp:66 msgid "Unknown caller" msgstr "" #: approver/approver.cpp:94 msgid "I'm busy at the moment. I'll call later." msgstr "" #: approver/approver.cpp:95 msgid "I'm running late, on my way now." msgstr "" #: approver/approver.cpp:96 msgid "Please call me back later." msgstr "" #: approver/approver.cpp:457 #, qt-format msgid "On [%1]" msgstr "" #: approver/approver.cpp:461 indicator/messagingmenu.cpp:414 msgid "Private number" msgstr "" #: approver/approver.cpp:464 indicator/messagingmenu.cpp:244 #: indicator/messagingmenu.cpp:418 indicator/textchannelobserver.cpp:640 msgid "Unknown number" msgstr "" #: approver/approver.cpp:470 approver/approver.cpp:485 msgid "Caller number is not available" msgstr "" #: approver/approver.cpp:476 msgid "Calling from private number" msgstr "" #: approver/approver.cpp:479 msgid "Calling from unknown number" msgstr "" #: approver/approver.cpp:482 #, qt-format msgid "Calling from %1" msgstr "" #: approver/approver.cpp:529 msgid "Hold + Answer" msgstr "" #: approver/approver.cpp:530 msgid "Accept" msgstr "" #: approver/approver.cpp:543 msgid "End + Answer" msgstr "" #: approver/approver.cpp:552 msgid "Decline" msgstr "" #: approver/approver.cpp:560 msgid "Message & decline" msgstr "" #: approver/main.cpp:46 msgid "Telephony Service Approver" msgstr "" #: indicator/authhandler.cpp:72 msgid "Authentication failed. Do you want to review your credentials?" msgstr "" #: indicator/authhandler.cpp:91 msgid "Yes" msgstr "" #: indicator/authhandler.cpp:94 msgid "No" msgstr "" #: indicator/displaynamesettings.cpp:35 #, qt-format msgid "SIM %1" msgstr "" #: indicator/main.cpp:53 msgid "Telephony Service Indicator" msgstr "" #: indicator/messagingmenu.cpp:83 indicator/messagingmenu.cpp:87 msgid "Telephony Service" msgstr "" #: indicator/messagingmenu.cpp:151 indicator/messagingmenu.cpp:293 #: indicator/messagingmenu.cpp:360 msgid "Send" msgstr "" #. TRANSLATORS : %1 is the group name and %2 is the recipient name #: indicator/messagingmenu.cpp:262 indicator/textchannelobserver.cpp:671 #: indicator/textchannelobserver.cpp:675 #, qt-format msgid "Message to %1 from %2" msgstr "" #. TRANSLATORS : %1 is the recipient name #: indicator/messagingmenu.cpp:265 indicator/messagingmenu.cpp:269 #, qt-format msgid "Message to the group from %1" msgstr "" #: indicator/messagingmenu.cpp:345 msgid "Call back" msgstr "" #: indicator/messagingmenu.cpp:350 msgid "Missed your call — can you call me now?" msgstr "" #: indicator/messagingmenu.cpp:351 msgid "Running late. On my way." msgstr "" #: indicator/messagingmenu.cpp:352 msgid "Busy at the moment. Will call you later." msgstr "" #: indicator/messagingmenu.cpp:353 msgid "I am 20 minutes late." msgstr "" #: indicator/messagingmenu.cpp:354 msgid "Still busy. Will call you later." msgstr "" #: indicator/messagingmenu.cpp:409 #, qt-format msgid "%1 missed call" msgid_plural "%1 missed calls" msgstr[0] "" msgstr[1] "" #: indicator/messagingmenu.cpp:492 msgid "Voicemail messages" msgstr "" #: indicator/messagingmenu.cpp:495 #, qt-format msgid "%1 voicemail message" msgid_plural "%1 voicemail messages" msgstr[0] "" msgstr[1] "" #: indicator/messagingmenu.cpp:500 msgid "Voicemail" msgstr "" #: indicator/metrics.cpp:42 #, qt-format msgid "%1 text messages sent today" msgstr "" #: indicator/metrics.cpp:43 msgid "No text messages sent today" msgstr "" #: indicator/metrics.cpp:44 #, qt-format msgid "%1 text messages received today" msgstr "" #: indicator/metrics.cpp:45 msgid "No text messages received today" msgstr "" #: indicator/metrics.cpp:46 #, qt-format msgid "%1 calls received today" msgstr "" #: indicator/metrics.cpp:47 msgid "No calls received today" msgstr "" #: indicator/metrics.cpp:48 #, qt-format msgid "%1 calls made today" msgstr "" #: indicator/metrics.cpp:49 indicator/metrics.cpp:51 msgid "No calls made today" msgstr "" #: indicator/metrics.cpp:50 #, qt-format msgid "Spent %1 minutes in calls today" msgstr "" #: indicator/textchannelobserver.cpp:225 msgid "Unlock your sim card and try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:227 msgid "Deactivate flight mode and try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:230 msgid "Try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:236 msgid "The message could not be sent" msgstr "" #: indicator/textchannelobserver.cpp:249 indicator/textchannelobserver.cpp:713 msgid "View message" msgstr "" #: indicator/textchannelobserver.cpp:295 msgid "New Group" msgstr "" #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:302 #, qt-format msgid "You joined group %1 " msgstr "" #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:306 #, qt-format msgid "You joined group %1" msgstr "" #: indicator/textchannelobserver.cpp:309 msgid "You joined a new group" msgstr "" #: indicator/textchannelobserver.cpp:328 msgid "View Group" msgstr "" #: indicator/textchannelobserver.cpp:367 indicator/ussdindicator.cpp:116 msgid "Ok" msgstr "" #: indicator/textchannelobserver.cpp:373 msgid "Save" msgstr "" #: indicator/textchannelobserver.cpp:468 msgid "Emergency Alert" msgstr "" #: indicator/textchannelobserver.cpp:471 msgid "Emergency Alert: Extreme" msgstr "" #: indicator/textchannelobserver.cpp:474 msgid "Emergency Alert: Severe" msgstr "" #: indicator/textchannelobserver.cpp:477 msgid "Emergency Alert: Notice" msgstr "" #: indicator/textchannelobserver.cpp:482 msgid "AMBER Alert" msgstr "" #: indicator/textchannelobserver.cpp:485 msgid "Alert" msgstr "" #: indicator/textchannelobserver.cpp:531 msgid "Show alert" msgstr "" #: indicator/textchannelobserver.cpp:604 #, qt-format msgid "Attachment: %1 image" msgid_plural "Attachments: %1 images" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:606 #, qt-format msgid "Attachment: %1 video" msgid_plural "Attachments: %1 videos" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:608 #, qt-format msgid "Attachment: %1 contact" msgid_plural "Attachments: %1 contacts" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:610 #, qt-format msgid "Attachment: %1 audio clip" msgid_plural "Attachments: %1 audio clips" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:612 #, qt-format msgid "Attachment: %1 file" msgid_plural "Attachments: %1 files" msgstr[0] "" msgstr[1] "" #. TRANSLATORS : message displayed when any error occurred while receiving a MMS (case when cellular-data is off, or any downloading issue). Notify that there was a message, the user can find more about it in the messaging-app. #: indicator/textchannelobserver.cpp:615 msgid "New MMS message" msgstr "" #. TRANSLATORS : %1 is the recipient name #: indicator/textchannelobserver.cpp:679 indicator/textchannelobserver.cpp:683 #, qt-format msgid "Message to group from %1" msgstr "" #: indicator/textchannelobserver.cpp:749 #, qt-format msgid "Message from %1" msgstr "" #: indicator/textchannelobserver.cpp:910 msgid "Please, select a SIM card:" msgstr "" #: indicator/ussdindicator.cpp:119 msgid "Reply" msgstr "" #: indicator/ussdindicator.cpp:142 #, fuzzy msgid "Cancel" msgstr "Cancel" #: libtelephonyservice/callnotification.cpp:53 msgid "Conf call on hold" msgstr "" #: libtelephonyservice/callnotification.cpp:53 #, qt-format msgid "%1 call on hold" msgstr "" #: libtelephonyservice/callnotification.cpp:56 msgid "Conf call ended" msgstr "" #: libtelephonyservice/callnotification.cpp:56 #, qt-format msgid "%1 call ended" msgstr "" #: libtelephonyservice/callnotification.cpp:59 #, qt-format msgid "%1 call declined" msgstr "" #: libtelephonyservice/contactwatcher.cpp:157 msgid "Private Number" msgstr "" #: libtelephonyservice/contactwatcher.cpp:159 msgid "Unknown Number" msgstr "" telephony-service-0.5.3/po/tr.po000066400000000000000000000254471455543255600166210ustar00rootroot00000000000000# Turkish translation for telephony-service # Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013 # This file is distributed under the same license as the telephony-service package. # FIRST AUTHOR , 2013. # msgid "" msgstr "" "Project-Id-Version: telephony-service\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-12-16 17:03+0100\n" "PO-Revision-Date: 2015-03-22 15:38+0000\n" "Last-Translator: Arda Ünlü \n" "Language-Team: Turkish \n" "Language: tr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Launchpad-Export-Date: 2017-01-04 06:03+0000\n" "X-Generator: Launchpad (build 18298)\n" #: indicator/telephony-service-call.desktop.in:4 msgid "Phone Calls" msgstr "Telefon Çağrıları" #: indicator/telephony-service-sms.desktop.in:4 msgid "SMS" msgstr "SMS" #: approver/approver.cpp:66 msgid "Unknown caller" msgstr "Bilinmeyen arayan" #: approver/approver.cpp:94 msgid "I'm busy at the moment. I'll call later." msgstr "Şuanda meşgulüm. Daha sonra arayacağım." #: approver/approver.cpp:95 msgid "I'm running late, on my way now." msgstr "Geç kalıyorum, yoldayım." #: approver/approver.cpp:96 msgid "Please call me back later." msgstr "Lütfen beni tekrar arayın." #: approver/approver.cpp:457 #, qt-format msgid "On [%1]" msgstr "" #: approver/approver.cpp:461 indicator/messagingmenu.cpp:414 msgid "Private number" msgstr "Özel numara" #: approver/approver.cpp:464 indicator/messagingmenu.cpp:244 #: indicator/messagingmenu.cpp:418 indicator/textchannelobserver.cpp:640 msgid "Unknown number" msgstr "Bilinmeyen numara" #: approver/approver.cpp:470 approver/approver.cpp:485 msgid "Caller number is not available" msgstr "Arayan numarası kullanılamıyor" #: approver/approver.cpp:476 msgid "Calling from private number" msgstr "Özel numaradan arıyor" #: approver/approver.cpp:479 msgid "Calling from unknown number" msgstr "Bilinmeyen numaradan arıyor" #: approver/approver.cpp:482 #, qt-format msgid "Calling from %1" msgstr "%1 kişisinden arama" #: approver/approver.cpp:529 msgid "Hold + Answer" msgstr "Basılı tut + Yanıtla" #: approver/approver.cpp:530 msgid "Accept" msgstr "Kabul Et" #: approver/approver.cpp:543 msgid "End + Answer" msgstr "Bitir + Yanıtla" #: approver/approver.cpp:552 msgid "Decline" msgstr "Reddet" #: approver/approver.cpp:560 msgid "Message & decline" msgstr "İleti & geri çevirme" #: approver/main.cpp:46 msgid "Telephony Service Approver" msgstr "Telephony Hizmet Onaylayıcı" #: indicator/authhandler.cpp:72 msgid "Authentication failed. Do you want to review your credentials?" msgstr "" "Kimlik denetleme başarısız. Tanıtım belgelerinizi gözden geçirmek ister " "misiniz?" #: indicator/authhandler.cpp:91 msgid "Yes" msgstr "Evet" #: indicator/authhandler.cpp:94 msgid "No" msgstr "Hayır" #: indicator/displaynamesettings.cpp:35 #, qt-format msgid "SIM %1" msgstr "SIM %1" #: indicator/main.cpp:53 msgid "Telephony Service Indicator" msgstr "Telephony Hizmet Göstergesi" #: indicator/messagingmenu.cpp:83 indicator/messagingmenu.cpp:87 msgid "Telephony Service" msgstr "Telephony Hizmeti" #: indicator/messagingmenu.cpp:151 indicator/messagingmenu.cpp:293 #: indicator/messagingmenu.cpp:360 msgid "Send" msgstr "Gönder" #. TRANSLATORS : %1 is the group name and %2 is the recipient name #: indicator/messagingmenu.cpp:262 indicator/textchannelobserver.cpp:671 #: indicator/textchannelobserver.cpp:675 #, qt-format msgid "Message to %1 from %2" msgstr "" #. TRANSLATORS : %1 is the recipient name #: indicator/messagingmenu.cpp:265 indicator/messagingmenu.cpp:269 #, fuzzy, qt-format #| msgid "Message from %1" msgid "Message to the group from %1" msgstr "%1 kişisinden mesaj" #: indicator/messagingmenu.cpp:345 msgid "Call back" msgstr "Geri ara" #: indicator/messagingmenu.cpp:350 #, fuzzy #| msgid "I missed your call - can you call me now?" msgid "Missed your call — can you call me now?" msgstr "Telefona yetişemedim - beni şimdi arar mısın?" #: indicator/messagingmenu.cpp:351 #, fuzzy #| msgid "I'm running late. I'm on my way." msgid "Running late. On my way." msgstr "Geç kalıyorum. Yoldayım." #: indicator/messagingmenu.cpp:352 #, fuzzy #| msgid "I'm busy at the moment. I'll call you later." msgid "Busy at the moment. Will call you later." msgstr "Şu anda meşgulüm. Seni sonra arayacağım." #: indicator/messagingmenu.cpp:353 #, fuzzy #| msgid "I'll be 20 minutes late." msgid "I am 20 minutes late." msgstr "20 dakika geç kalacağım." #: indicator/messagingmenu.cpp:354 #, fuzzy #| msgid "Sorry, I'm still busy. I'll call you later." msgid "Still busy. Will call you later." msgstr "Üzgünüm, hala meşgulüm. Seni sonra arayacağım." #: indicator/messagingmenu.cpp:409 #, qt-format msgid "%1 missed call" msgid_plural "%1 missed calls" msgstr[0] "%1 cevapsız arama" msgstr[1] "%1 cevapsız arama" #: indicator/messagingmenu.cpp:492 msgid "Voicemail messages" msgstr "Telesekreter mesajları" #: indicator/messagingmenu.cpp:495 #, qt-format msgid "%1 voicemail message" msgid_plural "%1 voicemail messages" msgstr[0] "%1 sesli mesaj" msgstr[1] "%1 sesli mesaj" #: indicator/messagingmenu.cpp:500 msgid "Voicemail" msgstr "Sesli mesaj" #: indicator/metrics.cpp:42 #, qt-format msgid "%1 text messages sent today" msgstr "Bugün %1mesaj gönderildi." #: indicator/metrics.cpp:43 msgid "No text messages sent today" msgstr "Bugün mesaj gönderilmedi" #: indicator/metrics.cpp:44 #, qt-format msgid "%1 text messages received today" msgstr "Bugün %1 mesaj alındı" #: indicator/metrics.cpp:45 msgid "No text messages received today" msgstr "Bugün mesaj alınmadı" #: indicator/metrics.cpp:46 #, qt-format msgid "%1 calls received today" msgstr "Bugün %1 çağrı alındı" #: indicator/metrics.cpp:47 msgid "No calls received today" msgstr "Bugün çağrı alınmadı" #: indicator/metrics.cpp:48 #, qt-format msgid "%1 calls made today" msgstr "%1, çağrılar yaptı" #: indicator/metrics.cpp:49 indicator/metrics.cpp:51 msgid "No calls made today" msgstr "Bugün çağrı yapılmadı" #: indicator/metrics.cpp:50 #, qt-format msgid "Spent %1 minutes in calls today" msgstr "Bugün konuşmalarda %1 dakika harcandı" #: indicator/textchannelobserver.cpp:225 msgid "Unlock your sim card and try again from the messaging application." msgstr "" "Sim kartınızın kilidini kaldırın ve ileti uygulaması ile yeniden deneyin." #: indicator/textchannelobserver.cpp:227 msgid "Deactivate flight mode and try again from the messaging application." msgstr "" "Uçak kipini devre dışı bırakın ve mesajlaşma uygulamasından tekrar deneyin." #: indicator/textchannelobserver.cpp:230 msgid "Try again from the messaging application." msgstr "Mesajlaşma uygulamasından tekrar deneyin." #: indicator/textchannelobserver.cpp:236 msgid "The message could not be sent" msgstr "Mesaj gönderilemedi" #: indicator/textchannelobserver.cpp:249 indicator/textchannelobserver.cpp:713 msgid "View message" msgstr "Mesajı göster" #: indicator/textchannelobserver.cpp:295 msgid "New Group" msgstr "" #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:302 #, qt-format msgid "You joined group %1 " msgstr "" #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:306 #, qt-format msgid "You joined group %1" msgstr "" #: indicator/textchannelobserver.cpp:309 msgid "You joined a new group" msgstr "" #: indicator/textchannelobserver.cpp:328 msgid "View Group" msgstr "" #: indicator/textchannelobserver.cpp:367 indicator/ussdindicator.cpp:116 msgid "Ok" msgstr "Tamam" #: indicator/textchannelobserver.cpp:373 msgid "Save" msgstr "Kaydet" #: indicator/textchannelobserver.cpp:468 msgid "Emergency Alert" msgstr "" #: indicator/textchannelobserver.cpp:471 msgid "Emergency Alert: Extreme" msgstr "" #: indicator/textchannelobserver.cpp:474 msgid "Emergency Alert: Severe" msgstr "" #: indicator/textchannelobserver.cpp:477 msgid "Emergency Alert: Notice" msgstr "" #: indicator/textchannelobserver.cpp:482 msgid "AMBER Alert" msgstr "" #: indicator/textchannelobserver.cpp:485 msgid "Alert" msgstr "" #: indicator/textchannelobserver.cpp:531 msgid "Show alert" msgstr "" #: indicator/textchannelobserver.cpp:604 #, qt-format msgid "Attachment: %1 image" msgid_plural "Attachments: %1 images" msgstr[0] "Ek: %1 görsel" msgstr[1] "Ek: %1 görsel" #: indicator/textchannelobserver.cpp:606 #, qt-format msgid "Attachment: %1 video" msgid_plural "Attachments: %1 videos" msgstr[0] "Ek: %1 video" msgstr[1] "Ek: %1 video" #: indicator/textchannelobserver.cpp:608 #, qt-format msgid "Attachment: %1 contact" msgid_plural "Attachments: %1 contacts" msgstr[0] "Ek: %1 kişi" msgstr[1] "Ek: %1 kişi" #: indicator/textchannelobserver.cpp:610 #, qt-format msgid "Attachment: %1 audio clip" msgid_plural "Attachments: %1 audio clips" msgstr[0] "Ek: %1 ses dosyası" msgstr[1] "Ek: %1 ses dosyası" #: indicator/textchannelobserver.cpp:612 #, qt-format msgid "Attachment: %1 file" msgid_plural "Attachments: %1 files" msgstr[0] "Ek: %1 dosya" msgstr[1] "Ek: %1 dosya" #. TRANSLATORS : message displayed when any error occurred while receiving a MMS (case when cellular-data is off, or any downloading issue). Notify that there was a message, the user can find more about it in the messaging-app. #: indicator/textchannelobserver.cpp:615 #, fuzzy #| msgid "View message" msgid "New MMS message" msgstr "Mesajı göster" #. TRANSLATORS : %1 is the recipient name #: indicator/textchannelobserver.cpp:679 indicator/textchannelobserver.cpp:683 #, qt-format msgid "Message to group from %1" msgstr "" #: indicator/textchannelobserver.cpp:749 #, qt-format msgid "Message from %1" msgstr "%1 kişisinden mesaj" #: indicator/textchannelobserver.cpp:910 msgid "Please, select a SIM card:" msgstr "Lütfen bir SIM kart seçin:" #: indicator/ussdindicator.cpp:119 msgid "Reply" msgstr "Yanıtla" #: indicator/ussdindicator.cpp:142 msgid "Cancel" msgstr "İptal" #: libtelephonyservice/callnotification.cpp:53 msgid "Conf call on hold" msgstr "" #: libtelephonyservice/callnotification.cpp:53 #, qt-format msgid "%1 call on hold" msgstr "" #: libtelephonyservice/callnotification.cpp:56 msgid "Conf call ended" msgstr "" #: libtelephonyservice/callnotification.cpp:56 #, qt-format msgid "%1 call ended" msgstr "" #: libtelephonyservice/callnotification.cpp:59 #, qt-format msgid "%1 call declined" msgstr "" #: libtelephonyservice/contactwatcher.cpp:157 msgid "Private Number" msgstr "Özek Numara" #: libtelephonyservice/contactwatcher.cpp:159 msgid "Unknown Number" msgstr "Bilinmeyen Numara" #, fuzzy #~| msgid "Telephony Service" #~ msgid "telephony-service-call" #~ msgstr "Telephony Hizmeti" #, fuzzy #~| msgid "Telephony Service" #~ msgid "telephony-service-message" #~ msgstr "Telephony Hizmeti" telephony-service-0.5.3/po/tt.po000066400000000000000000000207321455543255600166130ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR Canonical Ltd. # This file is distributed under the same license as the telephony-service package. # FIRST AUTHOR , YEAR. # msgid "" msgstr "" "Project-Id-Version: telephony-service\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-12-16 17:03+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: Automatically generated\n" "Language-Team: none\n" "Language: tt\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" #: indicator/telephony-service-call.desktop.in:4 msgid "Phone Calls" msgstr "" #: indicator/telephony-service-sms.desktop.in:4 msgid "SMS" msgstr "" #: approver/approver.cpp:66 msgid "Unknown caller" msgstr "" #: approver/approver.cpp:94 msgid "I'm busy at the moment. I'll call later." msgstr "" #: approver/approver.cpp:95 msgid "I'm running late, on my way now." msgstr "" #: approver/approver.cpp:96 msgid "Please call me back later." msgstr "" #: approver/approver.cpp:457 #, qt-format msgid "On [%1]" msgstr "" #: approver/approver.cpp:461 indicator/messagingmenu.cpp:414 msgid "Private number" msgstr "" #: approver/approver.cpp:464 indicator/messagingmenu.cpp:244 #: indicator/messagingmenu.cpp:418 indicator/textchannelobserver.cpp:640 msgid "Unknown number" msgstr "" #: approver/approver.cpp:470 approver/approver.cpp:485 msgid "Caller number is not available" msgstr "" #: approver/approver.cpp:476 msgid "Calling from private number" msgstr "" #: approver/approver.cpp:479 msgid "Calling from unknown number" msgstr "" #: approver/approver.cpp:482 #, qt-format msgid "Calling from %1" msgstr "" #: approver/approver.cpp:529 msgid "Hold + Answer" msgstr "" #: approver/approver.cpp:530 msgid "Accept" msgstr "" #: approver/approver.cpp:543 msgid "End + Answer" msgstr "" #: approver/approver.cpp:552 msgid "Decline" msgstr "" #: approver/approver.cpp:560 msgid "Message & decline" msgstr "" #: approver/main.cpp:46 msgid "Telephony Service Approver" msgstr "" #: indicator/authhandler.cpp:72 msgid "Authentication failed. Do you want to review your credentials?" msgstr "" #: indicator/authhandler.cpp:91 msgid "Yes" msgstr "" #: indicator/authhandler.cpp:94 msgid "No" msgstr "" #: indicator/displaynamesettings.cpp:35 #, qt-format msgid "SIM %1" msgstr "" #: indicator/main.cpp:53 msgid "Telephony Service Indicator" msgstr "" #: indicator/messagingmenu.cpp:83 indicator/messagingmenu.cpp:87 msgid "Telephony Service" msgstr "" #: indicator/messagingmenu.cpp:151 indicator/messagingmenu.cpp:293 #: indicator/messagingmenu.cpp:360 msgid "Send" msgstr "" #. TRANSLATORS : %1 is the group name and %2 is the recipient name #: indicator/messagingmenu.cpp:262 indicator/textchannelobserver.cpp:671 #: indicator/textchannelobserver.cpp:675 #, qt-format msgid "Message to %1 from %2" msgstr "" #. TRANSLATORS : %1 is the recipient name #: indicator/messagingmenu.cpp:265 indicator/messagingmenu.cpp:269 #, qt-format msgid "Message to the group from %1" msgstr "" #: indicator/messagingmenu.cpp:345 msgid "Call back" msgstr "" #: indicator/messagingmenu.cpp:350 msgid "Missed your call — can you call me now?" msgstr "" #: indicator/messagingmenu.cpp:351 msgid "Running late. On my way." msgstr "" #: indicator/messagingmenu.cpp:352 msgid "Busy at the moment. Will call you later." msgstr "" #: indicator/messagingmenu.cpp:353 msgid "I am 20 minutes late." msgstr "" #: indicator/messagingmenu.cpp:354 msgid "Still busy. Will call you later." msgstr "" #: indicator/messagingmenu.cpp:409 #, qt-format msgid "%1 missed call" msgid_plural "%1 missed calls" msgstr[0] "" msgstr[1] "" #: indicator/messagingmenu.cpp:492 msgid "Voicemail messages" msgstr "" #: indicator/messagingmenu.cpp:495 #, qt-format msgid "%1 voicemail message" msgid_plural "%1 voicemail messages" msgstr[0] "" msgstr[1] "" #: indicator/messagingmenu.cpp:500 msgid "Voicemail" msgstr "" #: indicator/metrics.cpp:42 #, qt-format msgid "%1 text messages sent today" msgstr "" #: indicator/metrics.cpp:43 msgid "No text messages sent today" msgstr "" #: indicator/metrics.cpp:44 #, qt-format msgid "%1 text messages received today" msgstr "" #: indicator/metrics.cpp:45 msgid "No text messages received today" msgstr "" #: indicator/metrics.cpp:46 #, qt-format msgid "%1 calls received today" msgstr "" #: indicator/metrics.cpp:47 msgid "No calls received today" msgstr "" #: indicator/metrics.cpp:48 #, qt-format msgid "%1 calls made today" msgstr "" #: indicator/metrics.cpp:49 indicator/metrics.cpp:51 msgid "No calls made today" msgstr "" #: indicator/metrics.cpp:50 #, qt-format msgid "Spent %1 minutes in calls today" msgstr "" #: indicator/textchannelobserver.cpp:225 msgid "Unlock your sim card and try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:227 msgid "Deactivate flight mode and try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:230 msgid "Try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:236 msgid "The message could not be sent" msgstr "" #: indicator/textchannelobserver.cpp:249 indicator/textchannelobserver.cpp:713 msgid "View message" msgstr "" #: indicator/textchannelobserver.cpp:295 msgid "New Group" msgstr "" #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:302 #, qt-format msgid "You joined group %1 " msgstr "" #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:306 #, qt-format msgid "You joined group %1" msgstr "" #: indicator/textchannelobserver.cpp:309 msgid "You joined a new group" msgstr "" #: indicator/textchannelobserver.cpp:328 msgid "View Group" msgstr "" #: indicator/textchannelobserver.cpp:367 indicator/ussdindicator.cpp:116 msgid "Ok" msgstr "" #: indicator/textchannelobserver.cpp:373 msgid "Save" msgstr "" #: indicator/textchannelobserver.cpp:468 msgid "Emergency Alert" msgstr "" #: indicator/textchannelobserver.cpp:471 msgid "Emergency Alert: Extreme" msgstr "" #: indicator/textchannelobserver.cpp:474 msgid "Emergency Alert: Severe" msgstr "" #: indicator/textchannelobserver.cpp:477 msgid "Emergency Alert: Notice" msgstr "" #: indicator/textchannelobserver.cpp:482 msgid "AMBER Alert" msgstr "" #: indicator/textchannelobserver.cpp:485 msgid "Alert" msgstr "" #: indicator/textchannelobserver.cpp:531 msgid "Show alert" msgstr "" #: indicator/textchannelobserver.cpp:604 #, qt-format msgid "Attachment: %1 image" msgid_plural "Attachments: %1 images" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:606 #, qt-format msgid "Attachment: %1 video" msgid_plural "Attachments: %1 videos" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:608 #, qt-format msgid "Attachment: %1 contact" msgid_plural "Attachments: %1 contacts" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:610 #, qt-format msgid "Attachment: %1 audio clip" msgid_plural "Attachments: %1 audio clips" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:612 #, qt-format msgid "Attachment: %1 file" msgid_plural "Attachments: %1 files" msgstr[0] "" msgstr[1] "" #. TRANSLATORS : message displayed when any error occurred while receiving a MMS (case when cellular-data is off, or any downloading issue). Notify that there was a message, the user can find more about it in the messaging-app. #: indicator/textchannelobserver.cpp:615 msgid "New MMS message" msgstr "" #. TRANSLATORS : %1 is the recipient name #: indicator/textchannelobserver.cpp:679 indicator/textchannelobserver.cpp:683 #, qt-format msgid "Message to group from %1" msgstr "" #: indicator/textchannelobserver.cpp:749 #, qt-format msgid "Message from %1" msgstr "" #: indicator/textchannelobserver.cpp:910 msgid "Please, select a SIM card:" msgstr "" #: indicator/ussdindicator.cpp:119 msgid "Reply" msgstr "" #: indicator/ussdindicator.cpp:142 msgid "Cancel" msgstr "" #: libtelephonyservice/callnotification.cpp:53 msgid "Conf call on hold" msgstr "" #: libtelephonyservice/callnotification.cpp:53 #, qt-format msgid "%1 call on hold" msgstr "" #: libtelephonyservice/callnotification.cpp:56 msgid "Conf call ended" msgstr "" #: libtelephonyservice/callnotification.cpp:56 #, qt-format msgid "%1 call ended" msgstr "" #: libtelephonyservice/callnotification.cpp:59 #, qt-format msgid "%1 call declined" msgstr "" #: libtelephonyservice/contactwatcher.cpp:157 msgid "Private Number" msgstr "" #: libtelephonyservice/contactwatcher.cpp:159 msgid "Unknown Number" msgstr "" telephony-service-0.5.3/po/ug.po000066400000000000000000000270701455543255600166010ustar00rootroot00000000000000# Uyghur translation for telephony-service # Copyright (c) 2014 Rosetta Contributors and Canonical Ltd 2014 # This file is distributed under the same license as the telephony-service package. # FIRST AUTHOR , 2014. # msgid "" msgstr "" "Project-Id-Version: telephony-service\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-12-16 17:03+0100\n" "PO-Revision-Date: 2014-09-23 02:42+0000\n" "Last-Translator: Gheyret T.Kenji \n" "Language-Team: Uyghur \n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" "X-Launchpad-Export-Date: 2017-01-04 06:03+0000\n" "X-Generator: Launchpad (build 18298)\n" #: indicator/telephony-service-call.desktop.in:4 msgid "Phone Calls" msgstr "تېلېفونلار" #: indicator/telephony-service-sms.desktop.in:4 msgid "SMS" msgstr "SMS" #: approver/approver.cpp:66 msgid "Unknown caller" msgstr "ناتونۇش تېلېفون" #: approver/approver.cpp:94 msgid "I'm busy at the moment. I'll call later." msgstr "ھازىر بىرئاز ئالدىراش سەل تۈرۇپ ئۈزۈم تىلفۇن قايتۇراي" #: approver/approver.cpp:95 msgid "I'm running late, on my way now." msgstr "كچېكىپ قالدىم ھازىر يولدا" #: approver/approver.cpp:96 msgid "Please call me back later." msgstr "بىر ئازدىن كېيىن قايتىدىن چاقىرىڭ" #: approver/approver.cpp:457 #, qt-format msgid "On [%1]" msgstr "" #: approver/approver.cpp:461 indicator/messagingmenu.cpp:414 msgid "Private number" msgstr "شەخسىي نومۇر" #: approver/approver.cpp:464 indicator/messagingmenu.cpp:244 #: indicator/messagingmenu.cpp:418 indicator/textchannelobserver.cpp:640 msgid "Unknown number" msgstr "نامەلۇم نومۇر" #: approver/approver.cpp:470 approver/approver.cpp:485 msgid "Caller number is not available" msgstr "تېلېفون نومۇرى يوق" #: approver/approver.cpp:476 msgid "Calling from private number" msgstr "شەخسىي نومۇردىن تېلېفون كەلدى" #: approver/approver.cpp:479 msgid "Calling from unknown number" msgstr "ناتونۇش تېلېفون كەلدى" #: approver/approver.cpp:482 #, qt-format msgid "Calling from %1" msgstr "تېلېفون %1 دىن كەلدى" #: approver/approver.cpp:529 msgid "Hold + Answer" msgstr "ساقلىتىپ قويۇپ جاۋاب بەر" #: approver/approver.cpp:530 msgid "Accept" msgstr "قوشۇل" #: approver/approver.cpp:543 msgid "End + Answer" msgstr "ئۈز+جاۋاپ" #: approver/approver.cpp:552 msgid "Decline" msgstr "قوشۇلما" #: approver/approver.cpp:560 msgid "Message & decline" msgstr "" #: approver/main.cpp:46 msgid "Telephony Service Approver" msgstr "Telephony Service Approver" #: indicator/authhandler.cpp:72 msgid "Authentication failed. Do you want to review your credentials?" msgstr "" #: indicator/authhandler.cpp:91 msgid "Yes" msgstr "" #: indicator/authhandler.cpp:94 msgid "No" msgstr "" #: indicator/displaynamesettings.cpp:35 #, qt-format msgid "SIM %1" msgstr "SIM %1" #: indicator/main.cpp:53 msgid "Telephony Service Indicator" msgstr "Telephony Service Indicator" #: indicator/messagingmenu.cpp:83 indicator/messagingmenu.cpp:87 msgid "Telephony Service" msgstr "تېلېفون مۇلازىمىتى" #: indicator/messagingmenu.cpp:151 indicator/messagingmenu.cpp:293 #: indicator/messagingmenu.cpp:360 msgid "Send" msgstr "يوللا" #. TRANSLATORS : %1 is the group name and %2 is the recipient name #: indicator/messagingmenu.cpp:262 indicator/textchannelobserver.cpp:671 #: indicator/textchannelobserver.cpp:675 #, qt-format msgid "Message to %1 from %2" msgstr "" #. TRANSLATORS : %1 is the recipient name #: indicator/messagingmenu.cpp:265 indicator/messagingmenu.cpp:269 #, fuzzy, qt-format #| msgid "Message from %1" msgid "Message to the group from %1" msgstr "%1 دىن كەلگەن ئۇچۇر" #: indicator/messagingmenu.cpp:345 msgid "Call back" msgstr "تىلفۇن ئۇرلىۋاتىدۇ" #: indicator/messagingmenu.cpp:350 #, fuzzy #| msgid "I missed your call - can you call me now?" msgid "Missed your call — can you call me now?" msgstr "تېلېفونىڭىزنى ئالالماي قالدىم، ھازىر تېلېفون قىلالامسىز؟" #: indicator/messagingmenu.cpp:351 #, fuzzy #| msgid "I'm running late. I'm on my way." msgid "Running late. On my way." msgstr "كېچىكىپ قالدىم. ھازىر يولدا." #: indicator/messagingmenu.cpp:352 #, fuzzy #| msgid "I'm busy at the moment. I'll call you later." msgid "Busy at the moment. Will call you later." msgstr "ھازىر ئالدىراش. كېيىن تېلېفون قىلاي." #: indicator/messagingmenu.cpp:353 #, fuzzy #| msgid "I'll be 20 minutes late." msgid "I am 20 minutes late." msgstr "مەن 20 مىنۇت كېچىكىمەن." #: indicator/messagingmenu.cpp:354 #, fuzzy #| msgid "Sorry, I'm still busy. I'll call you later." msgid "Still busy. Will call you later." msgstr "كەچۈرۈڭ، ئالدىراشچىلىقىم تۈگىمىدى. كېيىن تېلېفون قىلاي." #: indicator/messagingmenu.cpp:409 #, qt-format msgid "%1 missed call" msgid_plural "%1 missed calls" msgstr[0] "ئالمىغان تېلېفون %1" #: indicator/messagingmenu.cpp:492 msgid "Voicemail messages" msgstr "ئۈنخەتلەر" #: indicator/messagingmenu.cpp:495 #, qt-format msgid "%1 voicemail message" msgid_plural "%1 voicemail messages" msgstr[0] "ئۈنخەت %1" #: indicator/messagingmenu.cpp:500 msgid "Voicemail" msgstr "ئۈنخەت" #: indicator/metrics.cpp:42 #, qt-format msgid "%1 text messages sent today" msgstr "بۈگۈن %1 دانە تېكىست ئۇچۇرى ئەۋەتىلدى" #: indicator/metrics.cpp:43 msgid "No text messages sent today" msgstr "بۈگۈن ھېچقانداق تېكىست ئۇچۇرى ئەۋەتىلمىدى" #: indicator/metrics.cpp:44 #, qt-format msgid "%1 text messages received today" msgstr "بۈگۈن %1 دانە تېكىست ئۇچۇرى قوبۇل قىلىندى" #: indicator/metrics.cpp:45 msgid "No text messages received today" msgstr "بۈگۈن ھېچقانداق تېكىست ئۇچۇرى كەلمىدى" #: indicator/metrics.cpp:46 #, qt-format msgid "%1 calls received today" msgstr "بۈگۈن %1 قېتىم تېلېفون قوبۇل قىلىندى" #: indicator/metrics.cpp:47 msgid "No calls received today" msgstr "بۈگۈن ھېچقانداق تېلېفون كەلمىدى" #: indicator/metrics.cpp:48 #, qt-format msgid "%1 calls made today" msgstr "بۈگۈن %1 قېتىم تېلېفون قىلىندى" #: indicator/metrics.cpp:49 indicator/metrics.cpp:51 msgid "No calls made today" msgstr "بۈگۈن ھېچقانداق تېلېفون قىلىنمىدى" #: indicator/metrics.cpp:50 #, qt-format msgid "Spent %1 minutes in calls today" msgstr "بۈگۈن تېلېفونغا %1 مىنۇت سەرپ قىلىندى" #: indicator/textchannelobserver.cpp:225 msgid "Unlock your sim card and try again from the messaging application." msgstr "سىم كارتىڭىزنى قۇلۇپسىزلاڭ ۋە ئۇچۇر پروگراممىسىدا قايتا سىناپ كۆرۈڭ." #: indicator/textchannelobserver.cpp:227 msgid "Deactivate flight mode and try again from the messaging application." msgstr "" "ئايروپىلان ھالىتىنى ئاكتىپسىزلاڭ ۋە ئۇچۇر پروگراممىسىدا قايتا سىناپ كۆرۈڭ." #: indicator/textchannelobserver.cpp:230 msgid "Try again from the messaging application." msgstr "ئۇچۇر پروگراممىسىدا قايتا سىناپ كۆرۈڭ." #: indicator/textchannelobserver.cpp:236 msgid "The message could not be sent" msgstr "ئۇچۇرنى ئەۋەتكىلى بولمىدى" #: indicator/textchannelobserver.cpp:249 indicator/textchannelobserver.cpp:713 msgid "View message" msgstr "ئۇچۇر كۆرسەت" #: indicator/textchannelobserver.cpp:295 msgid "New Group" msgstr "" #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:302 #, qt-format msgid "You joined group %1 " msgstr "" #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:306 #, qt-format msgid "You joined group %1" msgstr "" #: indicator/textchannelobserver.cpp:309 msgid "You joined a new group" msgstr "" #: indicator/textchannelobserver.cpp:328 msgid "View Group" msgstr "" #: indicator/textchannelobserver.cpp:367 indicator/ussdindicator.cpp:116 msgid "Ok" msgstr "تامام" #: indicator/textchannelobserver.cpp:373 msgid "Save" msgstr "ساقلا" #: indicator/textchannelobserver.cpp:468 msgid "Emergency Alert" msgstr "" #: indicator/textchannelobserver.cpp:471 msgid "Emergency Alert: Extreme" msgstr "" #: indicator/textchannelobserver.cpp:474 msgid "Emergency Alert: Severe" msgstr "" #: indicator/textchannelobserver.cpp:477 msgid "Emergency Alert: Notice" msgstr "" #: indicator/textchannelobserver.cpp:482 msgid "AMBER Alert" msgstr "" #: indicator/textchannelobserver.cpp:485 msgid "Alert" msgstr "" #: indicator/textchannelobserver.cpp:531 msgid "Show alert" msgstr "" #: indicator/textchannelobserver.cpp:604 #, qt-format msgid "Attachment: %1 image" msgid_plural "Attachments: %1 images" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:606 #, qt-format msgid "Attachment: %1 video" msgid_plural "Attachments: %1 videos" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:608 #, qt-format msgid "Attachment: %1 contact" msgid_plural "Attachments: %1 contacts" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:610 #, qt-format msgid "Attachment: %1 audio clip" msgid_plural "Attachments: %1 audio clips" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:612 #, qt-format msgid "Attachment: %1 file" msgid_plural "Attachments: %1 files" msgstr[0] "" msgstr[1] "" #. TRANSLATORS : message displayed when any error occurred while receiving a MMS (case when cellular-data is off, or any downloading issue). Notify that there was a message, the user can find more about it in the messaging-app. #: indicator/textchannelobserver.cpp:615 #, fuzzy #| msgid "View message" msgid "New MMS message" msgstr "ئۇچۇر كۆرسەت" #. TRANSLATORS : %1 is the recipient name #: indicator/textchannelobserver.cpp:679 indicator/textchannelobserver.cpp:683 #, qt-format msgid "Message to group from %1" msgstr "" #: indicator/textchannelobserver.cpp:749 #, qt-format msgid "Message from %1" msgstr "%1 دىن كەلگەن ئۇچۇر" #: indicator/textchannelobserver.cpp:910 msgid "Please, select a SIM card:" msgstr "بىر سىم كارتىسى تاللاڭ:" #: indicator/ussdindicator.cpp:119 msgid "Reply" msgstr "جاۋاب قايتۇر" #: indicator/ussdindicator.cpp:142 msgid "Cancel" msgstr "ئەمەلدىن قالدۇر" #: libtelephonyservice/callnotification.cpp:53 msgid "Conf call on hold" msgstr "" #: libtelephonyservice/callnotification.cpp:53 #, qt-format msgid "%1 call on hold" msgstr "" #: libtelephonyservice/callnotification.cpp:56 msgid "Conf call ended" msgstr "" #: libtelephonyservice/callnotification.cpp:56 #, qt-format msgid "%1 call ended" msgstr "" #: libtelephonyservice/callnotification.cpp:59 #, qt-format msgid "%1 call declined" msgstr "" #: libtelephonyservice/contactwatcher.cpp:157 msgid "Private Number" msgstr "شەخسىي نومۇر" #: libtelephonyservice/contactwatcher.cpp:159 msgid "Unknown Number" msgstr "ناتونۇش نومۇر" #, fuzzy #~| msgid "Telephony Service" #~ msgid "telephony-service-call" #~ msgstr "تېلېفون مۇلازىمىتى" #, fuzzy #~| msgid "Telephony Service" #~ msgid "telephony-service-message" #~ msgstr "تېلېفون مۇلازىمىتى" telephony-service-0.5.3/po/uk.po000066400000000000000000000341531455543255600166050ustar00rootroot00000000000000# Ukrainian translation for telephony-service # Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013 # This file is distributed under the same license as the telephony-service package. # FIRST AUTHOR , 2013. # msgid "" msgstr "" "Project-Id-Version: telephony-service\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-12-16 17:03+0100\n" "PO-Revision-Date: 2023-02-22 19:39+0000\n" "Last-Translator: Sergii Horichenko \n" "Language-Team: Ukrainian \n" "Language: uk\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && " "n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" "X-Generator: Weblate 4.16-dev\n" "X-Launchpad-Export-Date: 2017-01-04 06:03+0000\n" #: indicator/telephony-service-call.desktop.in:4 msgid "Phone Calls" msgstr "Телефонні дзвінки" #: indicator/telephony-service-sms.desktop.in:4 msgid "SMS" msgstr "СМС" #: approver/approver.cpp:66 msgid "Unknown caller" msgstr "Невідома особа" #: approver/approver.cpp:94 msgid "I'm busy at the moment. I'll call later." msgstr "Зараз немає часу. Відповім пізніше." #: approver/approver.cpp:95 msgid "I'm running late, on my way now." msgstr "Запізнююся, зараз у дорозі." #: approver/approver.cpp:96 msgid "Please call me back later." msgstr "Будь ласка, передзвоніть пізніше." #: approver/approver.cpp:457 #, qt-format msgid "On [%1]" msgstr "На [%1]" #: approver/approver.cpp:461 indicator/messagingmenu.cpp:414 msgid "Private number" msgstr "Особистий номер" #: approver/approver.cpp:464 indicator/messagingmenu.cpp:244 #: indicator/messagingmenu.cpp:418 indicator/textchannelobserver.cpp:640 msgid "Unknown number" msgstr "Невідомий номер" #: approver/approver.cpp:470 approver/approver.cpp:485 msgid "Caller number is not available" msgstr "Номер вхідного дзвінка недоступний" #: approver/approver.cpp:476 msgid "Calling from private number" msgstr "Дзвінок з приватного номера" #: approver/approver.cpp:479 msgid "Calling from unknown number" msgstr "Дзвінок з невідомого номера" #: approver/approver.cpp:482 #, qt-format msgid "Calling from %1" msgstr "Дзвінок від %1" #: approver/approver.cpp:529 msgid "Hold + Answer" msgstr "Утримання + Відповідь" #: approver/approver.cpp:530 msgid "Accept" msgstr "Прийняти" #: approver/approver.cpp:543 msgid "End + Answer" msgstr "Завершити + Відповісти" #: approver/approver.cpp:552 msgid "Decline" msgstr "Відхилити" #: approver/approver.cpp:560 msgid "Message & decline" msgstr "Повідомити і відхилити" #: approver/main.cpp:46 msgid "Telephony Service Approver" msgstr "Підтверджувач служби телефонії" #: indicator/authhandler.cpp:72 msgid "Authentication failed. Do you want to review your credentials?" msgstr "" "Не вдалося пройти розпізнавання. Хочете змінити ваші реєстраційні дані?" #: indicator/authhandler.cpp:91 msgid "Yes" msgstr "Так" #: indicator/authhandler.cpp:94 msgid "No" msgstr "Ні" #: indicator/displaynamesettings.cpp:35 #, qt-format msgid "SIM %1" msgstr "SIM %1" #: indicator/main.cpp:53 msgid "Telephony Service Indicator" msgstr "Індикатор служби телефонії" #: indicator/messagingmenu.cpp:83 indicator/messagingmenu.cpp:87 msgid "Telephony Service" msgstr "Служба телефонії" #: indicator/messagingmenu.cpp:151 indicator/messagingmenu.cpp:293 #: indicator/messagingmenu.cpp:360 msgid "Send" msgstr "Надіслати" #. TRANSLATORS : %1 is the group name and %2 is the recipient name #: indicator/messagingmenu.cpp:262 indicator/textchannelobserver.cpp:671 #: indicator/textchannelobserver.cpp:675 #, qt-format msgid "Message to %1 from %2" msgstr "Повідомлення %1 від %2" #. TRANSLATORS : %1 is the recipient name #: indicator/messagingmenu.cpp:265 indicator/messagingmenu.cpp:269 #, qt-format msgid "Message to the group from %1" msgstr "Повідомлення до групи від %1" #: indicator/messagingmenu.cpp:345 msgid "Call back" msgstr "Зворотній виклик" #: indicator/messagingmenu.cpp:350 msgid "Missed your call — can you call me now?" msgstr "У мене пропущений дзвінок від Вас. Не могли б Ви зателефонувати зараз?" #: indicator/messagingmenu.cpp:351 msgid "Running late. On my way." msgstr "Запізнююся. Вже скоро буду." #: indicator/messagingmenu.cpp:352 msgid "Busy at the moment. Will call you later." msgstr "Зараз не можу розмовляти. Зателефоную Вам пізніше." #: indicator/messagingmenu.cpp:353 msgid "I am 20 minutes late." msgstr "Я запізнююсь на 20 хвилин." #: indicator/messagingmenu.cpp:354 msgid "Still busy. Will call you later." msgstr "Досі у справах. Зателефоную Вам пізніше." #: indicator/messagingmenu.cpp:409 #, qt-format msgid "%1 missed call" msgid_plural "%1 missed calls" msgstr[0] "%1 пропущений дзвінок" msgstr[1] "%1 пропущені дзвінки" msgstr[2] "%1 пропущених дзвінків" #: indicator/messagingmenu.cpp:492 msgid "Voicemail messages" msgstr "Повідомлення голосової пошти" #: indicator/messagingmenu.cpp:495 #, qt-format msgid "%1 voicemail message" msgid_plural "%1 voicemail messages" msgstr[0] "%1 голосове повідомлення" msgstr[1] "%1 голосових повідомлення" msgstr[2] "%1 голосових повідомлень" #: indicator/messagingmenu.cpp:500 msgid "Voicemail" msgstr "Голосова пошта" #: indicator/metrics.cpp:42 #, qt-format msgid "%1 text messages sent today" msgstr "Сьогодні надіслано %1 текстових повідомлень" #: indicator/metrics.cpp:43 msgid "No text messages sent today" msgstr "Сьогодні текстових повідомлень не надсилалося" #: indicator/metrics.cpp:44 #, qt-format msgid "%1 text messages received today" msgstr "Сьогодні отримано %1 текстових повідомлень" #: indicator/metrics.cpp:45 msgid "No text messages received today" msgstr "Сьогодні текстових повідомлень не надходило" #: indicator/metrics.cpp:46 #, qt-format msgid "%1 calls received today" msgstr "Сьогодні отримано %1 дзвінки" #: indicator/metrics.cpp:47 msgid "No calls received today" msgstr "Сьогодні вхідних дзвінків не було" #: indicator/metrics.cpp:48 #, qt-format msgid "%1 calls made today" msgstr "Сьогодні здійснено %1 дзвінки" #: indicator/metrics.cpp:49 indicator/metrics.cpp:51 msgid "No calls made today" msgstr "Сьогодні вихідних дзвінків не було" #: indicator/metrics.cpp:50 #, qt-format msgid "Spent %1 minutes in calls today" msgstr "Сьогодні загальна тривалість дзвінків - %1 хвилин" #: indicator/textchannelobserver.cpp:225 msgid "Unlock your sim card and try again from the messaging application." msgstr "" "Розблокуйте SIM-картку і повторіть спробу за допомогою програми для " "повідомлень." #: indicator/textchannelobserver.cpp:227 msgid "Deactivate flight mode and try again from the messaging application." msgstr "" "Вимкніть режим польоту і повторіть спробу за допомогою програми для " "повідомлень." #: indicator/textchannelobserver.cpp:230 msgid "Try again from the messaging application." msgstr "Повторіть спробу за допомогою програми для повідомлень." #: indicator/textchannelobserver.cpp:236 msgid "The message could not be sent" msgstr "Не вдалося надіслати повідомлення" #: indicator/textchannelobserver.cpp:249 indicator/textchannelobserver.cpp:713 msgid "View message" msgstr "Переглянути повідомлення" #: indicator/textchannelobserver.cpp:295 msgid "New Group" msgstr "Нова група" #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:302 #, qt-format msgid "You joined group %1 " msgstr "Ви приєдналися до групи %1 " #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:306 #, qt-format msgid "You joined group %1" msgstr "Ви приєдналися до групи %1" #: indicator/textchannelobserver.cpp:309 msgid "You joined a new group" msgstr "Ви приєдналися до нової групи" #: indicator/textchannelobserver.cpp:328 msgid "View Group" msgstr "Переглянути групу" #: indicator/textchannelobserver.cpp:367 indicator/ussdindicator.cpp:116 msgid "Ok" msgstr "Гаразд" #: indicator/textchannelobserver.cpp:373 msgid "Save" msgstr "Зберегти" #: indicator/textchannelobserver.cpp:468 msgid "Emergency Alert" msgstr "Екстрене оповіщення" #: indicator/textchannelobserver.cpp:471 msgid "Emergency Alert: Extreme" msgstr "Термінове оповіщення: Екстремальне" #: indicator/textchannelobserver.cpp:474 msgid "Emergency Alert: Severe" msgstr "Термінове оповіщення: Серйозне" #: indicator/textchannelobserver.cpp:477 msgid "Emergency Alert: Notice" msgstr "Термінове оповіщення: Повідомлення" #: indicator/textchannelobserver.cpp:482 msgid "AMBER Alert" msgstr "AMBER-сповіщення" #: indicator/textchannelobserver.cpp:485 msgid "Alert" msgstr "Сповіщення" #: indicator/textchannelobserver.cpp:531 msgid "Show alert" msgstr "Показати оповіщення" #: indicator/textchannelobserver.cpp:604 #, qt-format msgid "Attachment: %1 image" msgid_plural "Attachments: %1 images" msgstr[0] "Долучення: %1 зображення" msgstr[1] "Долучення: %1 зображення" msgstr[2] "Долучення: %1 зображень" #: indicator/textchannelobserver.cpp:606 #, qt-format msgid "Attachment: %1 video" msgid_plural "Attachments: %1 videos" msgstr[0] "Вкладення: %1 відео" msgstr[1] "Вкладення: %1 відео" msgstr[2] "Вкладення: %1 відео" #: indicator/textchannelobserver.cpp:608 #, qt-format msgid "Attachment: %1 contact" msgid_plural "Attachments: %1 contacts" msgstr[0] "Долучення: %1 запис контакту" msgstr[1] "Долучення: %1 записи контактів" msgstr[2] "Долучення: %1 записів контактів" #: indicator/textchannelobserver.cpp:610 #, qt-format msgid "Attachment: %1 audio clip" msgid_plural "Attachments: %1 audio clips" msgstr[0] "Долучення: %1 аудіо кліп" msgstr[1] "Долучення: %1 аудіо кліпи" msgstr[2] "Долучення: %1 аудіо кліпів" #: indicator/textchannelobserver.cpp:612 #, qt-format msgid "Attachment: %1 file" msgid_plural "Attachments: %1 files" msgstr[0] "Долучення: %1 файл" msgstr[1] "Долучення: %1 файли" msgstr[2] "Долучення: %1 файлів" #. TRANSLATORS : message displayed when any error occurred while receiving a MMS (case when cellular-data is off, or any downloading issue). Notify that there was a message, the user can find more about it in the messaging-app. #: indicator/textchannelobserver.cpp:615 msgid "New MMS message" msgstr "Нове MMS-повідомлення" #. TRANSLATORS : %1 is the recipient name #: indicator/textchannelobserver.cpp:679 indicator/textchannelobserver.cpp:683 #, qt-format msgid "Message to group from %1" msgstr "Повідомлення до групи від %1" #: indicator/textchannelobserver.cpp:749 #, qt-format msgid "Message from %1" msgstr "Повідомлення від %1" #: indicator/textchannelobserver.cpp:910 msgid "Please, select a SIM card:" msgstr "Будь ласка, виберіть SIM-картку:" #: indicator/ussdindicator.cpp:119 msgid "Reply" msgstr "Відповісти" #: indicator/ussdindicator.cpp:142 msgid "Cancel" msgstr "Скасувати" #: libtelephonyservice/callnotification.cpp:53 msgid "Conf call on hold" msgstr "Конференц-виклик на утриманні" #: libtelephonyservice/callnotification.cpp:53 #, qt-format msgid "%1 call on hold" msgstr "Виклик %1 на утриманні" #: libtelephonyservice/callnotification.cpp:56 msgid "Conf call ended" msgstr "Конференц-виклик завершений" #: libtelephonyservice/callnotification.cpp:56 #, qt-format msgid "%1 call ended" msgstr "Виклик %1 завершений" #: libtelephonyservice/callnotification.cpp:59 #, qt-format msgid "%1 call declined" msgstr "Виклик %1 відхилений" #: libtelephonyservice/contactwatcher.cpp:157 msgid "Private Number" msgstr "Особистий номер" #: libtelephonyservice/contactwatcher.cpp:159 msgid "Unknown Number" msgstr "Невідомий номер" #~ msgid "telephony-service-call" #~ msgstr "telephony-service-call" #~ msgid "telephony-service-message" #~ msgstr "telephony-service-message" #~ msgid "" #~ "Oops, there has been an error with the MMS system and this message could " #~ "not be retrieved. Please ensure Cellular Data is ON and MMS settings are " #~ "correct, then ask the sender to try again." #~ msgstr "" #~ "На жаль, у системі MMS сталася помилка, і це повідомлення не вдалося " #~ "отримати. Переконайтеся, що мобільні дані ввімкнено, а налаштування MMS " #~ "правильні, а потім попросіть відправника повторити спробу." telephony-service-0.5.3/po/ur.po000066400000000000000000000211761455543255600166150ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-12-16 17:03+0100\n" "PO-Revision-Date: 2023-01-05 11:07+0000\n" "Last-Translator: Muhammad \n" "Language-Team: Urdu \n" "Language: ur\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Generator: Weblate 4.15.1-dev\n" #: indicator/telephony-service-call.desktop.in:4 msgid "Phone Calls" msgstr "" #: indicator/telephony-service-sms.desktop.in:4 msgid "SMS" msgstr "" #: approver/approver.cpp:66 msgid "Unknown caller" msgstr "" #: approver/approver.cpp:94 msgid "I'm busy at the moment. I'll call later." msgstr "" #: approver/approver.cpp:95 msgid "I'm running late, on my way now." msgstr "" #: approver/approver.cpp:96 msgid "Please call me back later." msgstr "" #: approver/approver.cpp:457 #, qt-format msgid "On [%1]" msgstr "" #: approver/approver.cpp:461 indicator/messagingmenu.cpp:414 msgid "Private number" msgstr "" #: approver/approver.cpp:464 indicator/messagingmenu.cpp:244 #: indicator/messagingmenu.cpp:418 indicator/textchannelobserver.cpp:640 msgid "Unknown number" msgstr "" #: approver/approver.cpp:470 approver/approver.cpp:485 msgid "Caller number is not available" msgstr "" #: approver/approver.cpp:476 msgid "Calling from private number" msgstr "" #: approver/approver.cpp:479 msgid "Calling from unknown number" msgstr "" #: approver/approver.cpp:482 #, qt-format msgid "Calling from %1" msgstr "" #: approver/approver.cpp:529 msgid "Hold + Answer" msgstr "" #: approver/approver.cpp:530 msgid "Accept" msgstr "" #: approver/approver.cpp:543 msgid "End + Answer" msgstr "" #: approver/approver.cpp:552 msgid "Decline" msgstr "" #: approver/approver.cpp:560 msgid "Message & decline" msgstr "" #: approver/main.cpp:46 msgid "Telephony Service Approver" msgstr "" #: indicator/authhandler.cpp:72 msgid "Authentication failed. Do you want to review your credentials?" msgstr "" #: indicator/authhandler.cpp:91 msgid "Yes" msgstr "ہاں" #: indicator/authhandler.cpp:94 msgid "No" msgstr "نہیں" #: indicator/displaynamesettings.cpp:35 #, qt-format msgid "SIM %1" msgstr "" #: indicator/main.cpp:53 msgid "Telephony Service Indicator" msgstr "" #: indicator/messagingmenu.cpp:83 indicator/messagingmenu.cpp:87 msgid "Telephony Service" msgstr "" #: indicator/messagingmenu.cpp:151 indicator/messagingmenu.cpp:293 #: indicator/messagingmenu.cpp:360 msgid "Send" msgstr "" #. TRANSLATORS : %1 is the group name and %2 is the recipient name #: indicator/messagingmenu.cpp:262 indicator/textchannelobserver.cpp:671 #: indicator/textchannelobserver.cpp:675 #, qt-format msgid "Message to %1 from %2" msgstr "" #. TRANSLATORS : %1 is the recipient name #: indicator/messagingmenu.cpp:265 indicator/messagingmenu.cpp:269 #, qt-format msgid "Message to the group from %1" msgstr "" #: indicator/messagingmenu.cpp:345 msgid "Call back" msgstr "" #: indicator/messagingmenu.cpp:350 msgid "Missed your call — can you call me now?" msgstr "" #: indicator/messagingmenu.cpp:351 msgid "Running late. On my way." msgstr "" #: indicator/messagingmenu.cpp:352 msgid "Busy at the moment. Will call you later." msgstr "" #: indicator/messagingmenu.cpp:353 msgid "I am 20 minutes late." msgstr "" #: indicator/messagingmenu.cpp:354 msgid "Still busy. Will call you later." msgstr "" #: indicator/messagingmenu.cpp:409 #, qt-format msgid "%1 missed call" msgid_plural "%1 missed calls" msgstr[0] "" msgstr[1] "" #: indicator/messagingmenu.cpp:492 msgid "Voicemail messages" msgstr "" #: indicator/messagingmenu.cpp:495 #, qt-format msgid "%1 voicemail message" msgid_plural "%1 voicemail messages" msgstr[0] "" msgstr[1] "" #: indicator/messagingmenu.cpp:500 msgid "Voicemail" msgstr "" #: indicator/metrics.cpp:42 #, qt-format msgid "%1 text messages sent today" msgstr "" #: indicator/metrics.cpp:43 msgid "No text messages sent today" msgstr "" #: indicator/metrics.cpp:44 #, qt-format msgid "%1 text messages received today" msgstr "" #: indicator/metrics.cpp:45 msgid "No text messages received today" msgstr "" #: indicator/metrics.cpp:46 #, qt-format msgid "%1 calls received today" msgstr "" #: indicator/metrics.cpp:47 msgid "No calls received today" msgstr "" #: indicator/metrics.cpp:48 #, qt-format msgid "%1 calls made today" msgstr "" #: indicator/metrics.cpp:49 indicator/metrics.cpp:51 msgid "No calls made today" msgstr "" #: indicator/metrics.cpp:50 #, qt-format msgid "Spent %1 minutes in calls today" msgstr "" #: indicator/textchannelobserver.cpp:225 msgid "Unlock your sim card and try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:227 msgid "Deactivate flight mode and try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:230 msgid "Try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:236 msgid "The message could not be sent" msgstr "" #: indicator/textchannelobserver.cpp:249 indicator/textchannelobserver.cpp:713 msgid "View message" msgstr "" #: indicator/textchannelobserver.cpp:295 msgid "New Group" msgstr "" #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:302 #, qt-format msgid "You joined group %1 " msgstr "" #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:306 #, qt-format msgid "You joined group %1" msgstr "" #: indicator/textchannelobserver.cpp:309 msgid "You joined a new group" msgstr "" #: indicator/textchannelobserver.cpp:328 msgid "View Group" msgstr "" #: indicator/textchannelobserver.cpp:367 indicator/ussdindicator.cpp:116 msgid "Ok" msgstr "" #: indicator/textchannelobserver.cpp:373 msgid "Save" msgstr "" #: indicator/textchannelobserver.cpp:468 msgid "Emergency Alert" msgstr "" #: indicator/textchannelobserver.cpp:471 msgid "Emergency Alert: Extreme" msgstr "" #: indicator/textchannelobserver.cpp:474 msgid "Emergency Alert: Severe" msgstr "" #: indicator/textchannelobserver.cpp:477 msgid "Emergency Alert: Notice" msgstr "" #: indicator/textchannelobserver.cpp:482 msgid "AMBER Alert" msgstr "" #: indicator/textchannelobserver.cpp:485 msgid "Alert" msgstr "" #: indicator/textchannelobserver.cpp:531 msgid "Show alert" msgstr "" #: indicator/textchannelobserver.cpp:604 #, qt-format msgid "Attachment: %1 image" msgid_plural "Attachments: %1 images" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:606 #, qt-format msgid "Attachment: %1 video" msgid_plural "Attachments: %1 videos" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:608 #, qt-format msgid "Attachment: %1 contact" msgid_plural "Attachments: %1 contacts" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:610 #, qt-format msgid "Attachment: %1 audio clip" msgid_plural "Attachments: %1 audio clips" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:612 #, qt-format msgid "Attachment: %1 file" msgid_plural "Attachments: %1 files" msgstr[0] "" msgstr[1] "" #. TRANSLATORS : message displayed when any error occurred while receiving a MMS (case when cellular-data is off, or any downloading issue). Notify that there was a message, the user can find more about it in the messaging-app. #: indicator/textchannelobserver.cpp:615 msgid "New MMS message" msgstr "" #. TRANSLATORS : %1 is the recipient name #: indicator/textchannelobserver.cpp:679 indicator/textchannelobserver.cpp:683 #, qt-format msgid "Message to group from %1" msgstr "" #: indicator/textchannelobserver.cpp:749 #, qt-format msgid "Message from %1" msgstr "" #: indicator/textchannelobserver.cpp:910 msgid "Please, select a SIM card:" msgstr "" #: indicator/ussdindicator.cpp:119 msgid "Reply" msgstr "" #: indicator/ussdindicator.cpp:142 msgid "Cancel" msgstr "منسوخ کریں" #: libtelephonyservice/callnotification.cpp:53 msgid "Conf call on hold" msgstr "" #: libtelephonyservice/callnotification.cpp:53 #, qt-format msgid "%1 call on hold" msgstr "" #: libtelephonyservice/callnotification.cpp:56 msgid "Conf call ended" msgstr "" #: libtelephonyservice/callnotification.cpp:56 #, qt-format msgid "%1 call ended" msgstr "" #: libtelephonyservice/callnotification.cpp:59 #, qt-format msgid "%1 call declined" msgstr "" #: libtelephonyservice/contactwatcher.cpp:157 msgid "Private Number" msgstr "" #: libtelephonyservice/contactwatcher.cpp:159 msgid "Unknown Number" msgstr "" telephony-service-0.5.3/po/uz.po000066400000000000000000000207371455543255600166270ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR Canonical Ltd. # This file is distributed under the same license as the telephony-service package. # FIRST AUTHOR , YEAR. # msgid "" msgstr "" "Project-Id-Version: telephony-service\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-12-16 17:03+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: Automatically generated\n" "Language-Team: none\n" "Language: uz\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" #: indicator/telephony-service-call.desktop.in:4 msgid "Phone Calls" msgstr "" #: indicator/telephony-service-sms.desktop.in:4 msgid "SMS" msgstr "" #: approver/approver.cpp:66 msgid "Unknown caller" msgstr "" #: approver/approver.cpp:94 msgid "I'm busy at the moment. I'll call later." msgstr "" #: approver/approver.cpp:95 msgid "I'm running late, on my way now." msgstr "" #: approver/approver.cpp:96 msgid "Please call me back later." msgstr "" #: approver/approver.cpp:457 #, qt-format msgid "On [%1]" msgstr "" #: approver/approver.cpp:461 indicator/messagingmenu.cpp:414 msgid "Private number" msgstr "" #: approver/approver.cpp:464 indicator/messagingmenu.cpp:244 #: indicator/messagingmenu.cpp:418 indicator/textchannelobserver.cpp:640 msgid "Unknown number" msgstr "" #: approver/approver.cpp:470 approver/approver.cpp:485 msgid "Caller number is not available" msgstr "" #: approver/approver.cpp:476 msgid "Calling from private number" msgstr "" #: approver/approver.cpp:479 msgid "Calling from unknown number" msgstr "" #: approver/approver.cpp:482 #, qt-format msgid "Calling from %1" msgstr "" #: approver/approver.cpp:529 msgid "Hold + Answer" msgstr "" #: approver/approver.cpp:530 msgid "Accept" msgstr "" #: approver/approver.cpp:543 msgid "End + Answer" msgstr "" #: approver/approver.cpp:552 msgid "Decline" msgstr "" #: approver/approver.cpp:560 msgid "Message & decline" msgstr "" #: approver/main.cpp:46 msgid "Telephony Service Approver" msgstr "" #: indicator/authhandler.cpp:72 msgid "Authentication failed. Do you want to review your credentials?" msgstr "" #: indicator/authhandler.cpp:91 msgid "Yes" msgstr "" #: indicator/authhandler.cpp:94 msgid "No" msgstr "" #: indicator/displaynamesettings.cpp:35 #, qt-format msgid "SIM %1" msgstr "" #: indicator/main.cpp:53 msgid "Telephony Service Indicator" msgstr "" #: indicator/messagingmenu.cpp:83 indicator/messagingmenu.cpp:87 msgid "Telephony Service" msgstr "" #: indicator/messagingmenu.cpp:151 indicator/messagingmenu.cpp:293 #: indicator/messagingmenu.cpp:360 msgid "Send" msgstr "" #. TRANSLATORS : %1 is the group name and %2 is the recipient name #: indicator/messagingmenu.cpp:262 indicator/textchannelobserver.cpp:671 #: indicator/textchannelobserver.cpp:675 #, qt-format msgid "Message to %1 from %2" msgstr "" #. TRANSLATORS : %1 is the recipient name #: indicator/messagingmenu.cpp:265 indicator/messagingmenu.cpp:269 #, qt-format msgid "Message to the group from %1" msgstr "" #: indicator/messagingmenu.cpp:345 msgid "Call back" msgstr "" #: indicator/messagingmenu.cpp:350 msgid "Missed your call — can you call me now?" msgstr "" #: indicator/messagingmenu.cpp:351 msgid "Running late. On my way." msgstr "" #: indicator/messagingmenu.cpp:352 msgid "Busy at the moment. Will call you later." msgstr "" #: indicator/messagingmenu.cpp:353 msgid "I am 20 minutes late." msgstr "" #: indicator/messagingmenu.cpp:354 msgid "Still busy. Will call you later." msgstr "" #: indicator/messagingmenu.cpp:409 #, qt-format msgid "%1 missed call" msgid_plural "%1 missed calls" msgstr[0] "" msgstr[1] "" #: indicator/messagingmenu.cpp:492 msgid "Voicemail messages" msgstr "" #: indicator/messagingmenu.cpp:495 #, qt-format msgid "%1 voicemail message" msgid_plural "%1 voicemail messages" msgstr[0] "" msgstr[1] "" #: indicator/messagingmenu.cpp:500 msgid "Voicemail" msgstr "" #: indicator/metrics.cpp:42 #, qt-format msgid "%1 text messages sent today" msgstr "" #: indicator/metrics.cpp:43 msgid "No text messages sent today" msgstr "" #: indicator/metrics.cpp:44 #, qt-format msgid "%1 text messages received today" msgstr "" #: indicator/metrics.cpp:45 msgid "No text messages received today" msgstr "" #: indicator/metrics.cpp:46 #, qt-format msgid "%1 calls received today" msgstr "" #: indicator/metrics.cpp:47 msgid "No calls received today" msgstr "" #: indicator/metrics.cpp:48 #, qt-format msgid "%1 calls made today" msgstr "" #: indicator/metrics.cpp:49 indicator/metrics.cpp:51 msgid "No calls made today" msgstr "" #: indicator/metrics.cpp:50 #, qt-format msgid "Spent %1 minutes in calls today" msgstr "" #: indicator/textchannelobserver.cpp:225 msgid "Unlock your sim card and try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:227 msgid "Deactivate flight mode and try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:230 msgid "Try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:236 msgid "The message could not be sent" msgstr "" #: indicator/textchannelobserver.cpp:249 indicator/textchannelobserver.cpp:713 msgid "View message" msgstr "" #: indicator/textchannelobserver.cpp:295 msgid "New Group" msgstr "" #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:302 #, qt-format msgid "You joined group %1 " msgstr "" #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:306 #, qt-format msgid "You joined group %1" msgstr "" #: indicator/textchannelobserver.cpp:309 msgid "You joined a new group" msgstr "" #: indicator/textchannelobserver.cpp:328 msgid "View Group" msgstr "" #: indicator/textchannelobserver.cpp:367 indicator/ussdindicator.cpp:116 msgid "Ok" msgstr "" #: indicator/textchannelobserver.cpp:373 msgid "Save" msgstr "" #: indicator/textchannelobserver.cpp:468 msgid "Emergency Alert" msgstr "" #: indicator/textchannelobserver.cpp:471 msgid "Emergency Alert: Extreme" msgstr "" #: indicator/textchannelobserver.cpp:474 msgid "Emergency Alert: Severe" msgstr "" #: indicator/textchannelobserver.cpp:477 msgid "Emergency Alert: Notice" msgstr "" #: indicator/textchannelobserver.cpp:482 msgid "AMBER Alert" msgstr "" #: indicator/textchannelobserver.cpp:485 msgid "Alert" msgstr "" #: indicator/textchannelobserver.cpp:531 msgid "Show alert" msgstr "" #: indicator/textchannelobserver.cpp:604 #, qt-format msgid "Attachment: %1 image" msgid_plural "Attachments: %1 images" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:606 #, qt-format msgid "Attachment: %1 video" msgid_plural "Attachments: %1 videos" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:608 #, qt-format msgid "Attachment: %1 contact" msgid_plural "Attachments: %1 contacts" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:610 #, qt-format msgid "Attachment: %1 audio clip" msgid_plural "Attachments: %1 audio clips" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:612 #, qt-format msgid "Attachment: %1 file" msgid_plural "Attachments: %1 files" msgstr[0] "" msgstr[1] "" #. TRANSLATORS : message displayed when any error occurred while receiving a MMS (case when cellular-data is off, or any downloading issue). Notify that there was a message, the user can find more about it in the messaging-app. #: indicator/textchannelobserver.cpp:615 msgid "New MMS message" msgstr "" #. TRANSLATORS : %1 is the recipient name #: indicator/textchannelobserver.cpp:679 indicator/textchannelobserver.cpp:683 #, qt-format msgid "Message to group from %1" msgstr "" #: indicator/textchannelobserver.cpp:749 #, qt-format msgid "Message from %1" msgstr "" #: indicator/textchannelobserver.cpp:910 msgid "Please, select a SIM card:" msgstr "" #: indicator/ussdindicator.cpp:119 msgid "Reply" msgstr "" #: indicator/ussdindicator.cpp:142 msgid "Cancel" msgstr "" #: libtelephonyservice/callnotification.cpp:53 msgid "Conf call on hold" msgstr "" #: libtelephonyservice/callnotification.cpp:53 #, qt-format msgid "%1 call on hold" msgstr "" #: libtelephonyservice/callnotification.cpp:56 msgid "Conf call ended" msgstr "" #: libtelephonyservice/callnotification.cpp:56 #, qt-format msgid "%1 call ended" msgstr "" #: libtelephonyservice/callnotification.cpp:59 #, qt-format msgid "%1 call declined" msgstr "" #: libtelephonyservice/contactwatcher.cpp:157 msgid "Private Number" msgstr "" #: libtelephonyservice/contactwatcher.cpp:159 msgid "Unknown Number" msgstr "" telephony-service-0.5.3/po/vec.po000066400000000000000000000207401455543255600167400ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR Canonical Ltd. # This file is distributed under the same license as the telephony-service package. # FIRST AUTHOR , YEAR. # msgid "" msgstr "" "Project-Id-Version: telephony-service\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-12-16 17:03+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: Automatically generated\n" "Language-Team: none\n" "Language: vec\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" #: indicator/telephony-service-call.desktop.in:4 msgid "Phone Calls" msgstr "" #: indicator/telephony-service-sms.desktop.in:4 msgid "SMS" msgstr "" #: approver/approver.cpp:66 msgid "Unknown caller" msgstr "" #: approver/approver.cpp:94 msgid "I'm busy at the moment. I'll call later." msgstr "" #: approver/approver.cpp:95 msgid "I'm running late, on my way now." msgstr "" #: approver/approver.cpp:96 msgid "Please call me back later." msgstr "" #: approver/approver.cpp:457 #, qt-format msgid "On [%1]" msgstr "" #: approver/approver.cpp:461 indicator/messagingmenu.cpp:414 msgid "Private number" msgstr "" #: approver/approver.cpp:464 indicator/messagingmenu.cpp:244 #: indicator/messagingmenu.cpp:418 indicator/textchannelobserver.cpp:640 msgid "Unknown number" msgstr "" #: approver/approver.cpp:470 approver/approver.cpp:485 msgid "Caller number is not available" msgstr "" #: approver/approver.cpp:476 msgid "Calling from private number" msgstr "" #: approver/approver.cpp:479 msgid "Calling from unknown number" msgstr "" #: approver/approver.cpp:482 #, qt-format msgid "Calling from %1" msgstr "" #: approver/approver.cpp:529 msgid "Hold + Answer" msgstr "" #: approver/approver.cpp:530 msgid "Accept" msgstr "" #: approver/approver.cpp:543 msgid "End + Answer" msgstr "" #: approver/approver.cpp:552 msgid "Decline" msgstr "" #: approver/approver.cpp:560 msgid "Message & decline" msgstr "" #: approver/main.cpp:46 msgid "Telephony Service Approver" msgstr "" #: indicator/authhandler.cpp:72 msgid "Authentication failed. Do you want to review your credentials?" msgstr "" #: indicator/authhandler.cpp:91 msgid "Yes" msgstr "" #: indicator/authhandler.cpp:94 msgid "No" msgstr "" #: indicator/displaynamesettings.cpp:35 #, qt-format msgid "SIM %1" msgstr "" #: indicator/main.cpp:53 msgid "Telephony Service Indicator" msgstr "" #: indicator/messagingmenu.cpp:83 indicator/messagingmenu.cpp:87 msgid "Telephony Service" msgstr "" #: indicator/messagingmenu.cpp:151 indicator/messagingmenu.cpp:293 #: indicator/messagingmenu.cpp:360 msgid "Send" msgstr "" #. TRANSLATORS : %1 is the group name and %2 is the recipient name #: indicator/messagingmenu.cpp:262 indicator/textchannelobserver.cpp:671 #: indicator/textchannelobserver.cpp:675 #, qt-format msgid "Message to %1 from %2" msgstr "" #. TRANSLATORS : %1 is the recipient name #: indicator/messagingmenu.cpp:265 indicator/messagingmenu.cpp:269 #, qt-format msgid "Message to the group from %1" msgstr "" #: indicator/messagingmenu.cpp:345 msgid "Call back" msgstr "" #: indicator/messagingmenu.cpp:350 msgid "Missed your call — can you call me now?" msgstr "" #: indicator/messagingmenu.cpp:351 msgid "Running late. On my way." msgstr "" #: indicator/messagingmenu.cpp:352 msgid "Busy at the moment. Will call you later." msgstr "" #: indicator/messagingmenu.cpp:353 msgid "I am 20 minutes late." msgstr "" #: indicator/messagingmenu.cpp:354 msgid "Still busy. Will call you later." msgstr "" #: indicator/messagingmenu.cpp:409 #, qt-format msgid "%1 missed call" msgid_plural "%1 missed calls" msgstr[0] "" msgstr[1] "" #: indicator/messagingmenu.cpp:492 msgid "Voicemail messages" msgstr "" #: indicator/messagingmenu.cpp:495 #, qt-format msgid "%1 voicemail message" msgid_plural "%1 voicemail messages" msgstr[0] "" msgstr[1] "" #: indicator/messagingmenu.cpp:500 msgid "Voicemail" msgstr "" #: indicator/metrics.cpp:42 #, qt-format msgid "%1 text messages sent today" msgstr "" #: indicator/metrics.cpp:43 msgid "No text messages sent today" msgstr "" #: indicator/metrics.cpp:44 #, qt-format msgid "%1 text messages received today" msgstr "" #: indicator/metrics.cpp:45 msgid "No text messages received today" msgstr "" #: indicator/metrics.cpp:46 #, qt-format msgid "%1 calls received today" msgstr "" #: indicator/metrics.cpp:47 msgid "No calls received today" msgstr "" #: indicator/metrics.cpp:48 #, qt-format msgid "%1 calls made today" msgstr "" #: indicator/metrics.cpp:49 indicator/metrics.cpp:51 msgid "No calls made today" msgstr "" #: indicator/metrics.cpp:50 #, qt-format msgid "Spent %1 minutes in calls today" msgstr "" #: indicator/textchannelobserver.cpp:225 msgid "Unlock your sim card and try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:227 msgid "Deactivate flight mode and try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:230 msgid "Try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:236 msgid "The message could not be sent" msgstr "" #: indicator/textchannelobserver.cpp:249 indicator/textchannelobserver.cpp:713 msgid "View message" msgstr "" #: indicator/textchannelobserver.cpp:295 msgid "New Group" msgstr "" #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:302 #, qt-format msgid "You joined group %1 " msgstr "" #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:306 #, qt-format msgid "You joined group %1" msgstr "" #: indicator/textchannelobserver.cpp:309 msgid "You joined a new group" msgstr "" #: indicator/textchannelobserver.cpp:328 msgid "View Group" msgstr "" #: indicator/textchannelobserver.cpp:367 indicator/ussdindicator.cpp:116 msgid "Ok" msgstr "" #: indicator/textchannelobserver.cpp:373 msgid "Save" msgstr "" #: indicator/textchannelobserver.cpp:468 msgid "Emergency Alert" msgstr "" #: indicator/textchannelobserver.cpp:471 msgid "Emergency Alert: Extreme" msgstr "" #: indicator/textchannelobserver.cpp:474 msgid "Emergency Alert: Severe" msgstr "" #: indicator/textchannelobserver.cpp:477 msgid "Emergency Alert: Notice" msgstr "" #: indicator/textchannelobserver.cpp:482 msgid "AMBER Alert" msgstr "" #: indicator/textchannelobserver.cpp:485 msgid "Alert" msgstr "" #: indicator/textchannelobserver.cpp:531 msgid "Show alert" msgstr "" #: indicator/textchannelobserver.cpp:604 #, qt-format msgid "Attachment: %1 image" msgid_plural "Attachments: %1 images" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:606 #, qt-format msgid "Attachment: %1 video" msgid_plural "Attachments: %1 videos" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:608 #, qt-format msgid "Attachment: %1 contact" msgid_plural "Attachments: %1 contacts" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:610 #, qt-format msgid "Attachment: %1 audio clip" msgid_plural "Attachments: %1 audio clips" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:612 #, qt-format msgid "Attachment: %1 file" msgid_plural "Attachments: %1 files" msgstr[0] "" msgstr[1] "" #. TRANSLATORS : message displayed when any error occurred while receiving a MMS (case when cellular-data is off, or any downloading issue). Notify that there was a message, the user can find more about it in the messaging-app. #: indicator/textchannelobserver.cpp:615 msgid "New MMS message" msgstr "" #. TRANSLATORS : %1 is the recipient name #: indicator/textchannelobserver.cpp:679 indicator/textchannelobserver.cpp:683 #, qt-format msgid "Message to group from %1" msgstr "" #: indicator/textchannelobserver.cpp:749 #, qt-format msgid "Message from %1" msgstr "" #: indicator/textchannelobserver.cpp:910 msgid "Please, select a SIM card:" msgstr "" #: indicator/ussdindicator.cpp:119 msgid "Reply" msgstr "" #: indicator/ussdindicator.cpp:142 msgid "Cancel" msgstr "" #: libtelephonyservice/callnotification.cpp:53 msgid "Conf call on hold" msgstr "" #: libtelephonyservice/callnotification.cpp:53 #, qt-format msgid "%1 call on hold" msgstr "" #: libtelephonyservice/callnotification.cpp:56 msgid "Conf call ended" msgstr "" #: libtelephonyservice/callnotification.cpp:56 #, qt-format msgid "%1 call ended" msgstr "" #: libtelephonyservice/callnotification.cpp:59 #, qt-format msgid "%1 call declined" msgstr "" #: libtelephonyservice/contactwatcher.cpp:157 msgid "Private Number" msgstr "" #: libtelephonyservice/contactwatcher.cpp:159 msgid "Unknown Number" msgstr "" telephony-service-0.5.3/po/vi.po000066400000000000000000000207321455543255600166020ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR Canonical Ltd. # This file is distributed under the same license as the telephony-service package. # FIRST AUTHOR , YEAR. # msgid "" msgstr "" "Project-Id-Version: telephony-service\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-12-16 17:03+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: Automatically generated\n" "Language-Team: none\n" "Language: vi\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" #: indicator/telephony-service-call.desktop.in:4 msgid "Phone Calls" msgstr "" #: indicator/telephony-service-sms.desktop.in:4 msgid "SMS" msgstr "" #: approver/approver.cpp:66 msgid "Unknown caller" msgstr "" #: approver/approver.cpp:94 msgid "I'm busy at the moment. I'll call later." msgstr "" #: approver/approver.cpp:95 msgid "I'm running late, on my way now." msgstr "" #: approver/approver.cpp:96 msgid "Please call me back later." msgstr "" #: approver/approver.cpp:457 #, qt-format msgid "On [%1]" msgstr "" #: approver/approver.cpp:461 indicator/messagingmenu.cpp:414 msgid "Private number" msgstr "" #: approver/approver.cpp:464 indicator/messagingmenu.cpp:244 #: indicator/messagingmenu.cpp:418 indicator/textchannelobserver.cpp:640 msgid "Unknown number" msgstr "" #: approver/approver.cpp:470 approver/approver.cpp:485 msgid "Caller number is not available" msgstr "" #: approver/approver.cpp:476 msgid "Calling from private number" msgstr "" #: approver/approver.cpp:479 msgid "Calling from unknown number" msgstr "" #: approver/approver.cpp:482 #, qt-format msgid "Calling from %1" msgstr "" #: approver/approver.cpp:529 msgid "Hold + Answer" msgstr "" #: approver/approver.cpp:530 msgid "Accept" msgstr "" #: approver/approver.cpp:543 msgid "End + Answer" msgstr "" #: approver/approver.cpp:552 msgid "Decline" msgstr "" #: approver/approver.cpp:560 msgid "Message & decline" msgstr "" #: approver/main.cpp:46 msgid "Telephony Service Approver" msgstr "" #: indicator/authhandler.cpp:72 msgid "Authentication failed. Do you want to review your credentials?" msgstr "" #: indicator/authhandler.cpp:91 msgid "Yes" msgstr "" #: indicator/authhandler.cpp:94 msgid "No" msgstr "" #: indicator/displaynamesettings.cpp:35 #, qt-format msgid "SIM %1" msgstr "" #: indicator/main.cpp:53 msgid "Telephony Service Indicator" msgstr "" #: indicator/messagingmenu.cpp:83 indicator/messagingmenu.cpp:87 msgid "Telephony Service" msgstr "" #: indicator/messagingmenu.cpp:151 indicator/messagingmenu.cpp:293 #: indicator/messagingmenu.cpp:360 msgid "Send" msgstr "" #. TRANSLATORS : %1 is the group name and %2 is the recipient name #: indicator/messagingmenu.cpp:262 indicator/textchannelobserver.cpp:671 #: indicator/textchannelobserver.cpp:675 #, qt-format msgid "Message to %1 from %2" msgstr "" #. TRANSLATORS : %1 is the recipient name #: indicator/messagingmenu.cpp:265 indicator/messagingmenu.cpp:269 #, qt-format msgid "Message to the group from %1" msgstr "" #: indicator/messagingmenu.cpp:345 msgid "Call back" msgstr "" #: indicator/messagingmenu.cpp:350 msgid "Missed your call — can you call me now?" msgstr "" #: indicator/messagingmenu.cpp:351 msgid "Running late. On my way." msgstr "" #: indicator/messagingmenu.cpp:352 msgid "Busy at the moment. Will call you later." msgstr "" #: indicator/messagingmenu.cpp:353 msgid "I am 20 minutes late." msgstr "" #: indicator/messagingmenu.cpp:354 msgid "Still busy. Will call you later." msgstr "" #: indicator/messagingmenu.cpp:409 #, qt-format msgid "%1 missed call" msgid_plural "%1 missed calls" msgstr[0] "" msgstr[1] "" #: indicator/messagingmenu.cpp:492 msgid "Voicemail messages" msgstr "" #: indicator/messagingmenu.cpp:495 #, qt-format msgid "%1 voicemail message" msgid_plural "%1 voicemail messages" msgstr[0] "" msgstr[1] "" #: indicator/messagingmenu.cpp:500 msgid "Voicemail" msgstr "" #: indicator/metrics.cpp:42 #, qt-format msgid "%1 text messages sent today" msgstr "" #: indicator/metrics.cpp:43 msgid "No text messages sent today" msgstr "" #: indicator/metrics.cpp:44 #, qt-format msgid "%1 text messages received today" msgstr "" #: indicator/metrics.cpp:45 msgid "No text messages received today" msgstr "" #: indicator/metrics.cpp:46 #, qt-format msgid "%1 calls received today" msgstr "" #: indicator/metrics.cpp:47 msgid "No calls received today" msgstr "" #: indicator/metrics.cpp:48 #, qt-format msgid "%1 calls made today" msgstr "" #: indicator/metrics.cpp:49 indicator/metrics.cpp:51 msgid "No calls made today" msgstr "" #: indicator/metrics.cpp:50 #, qt-format msgid "Spent %1 minutes in calls today" msgstr "" #: indicator/textchannelobserver.cpp:225 msgid "Unlock your sim card and try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:227 msgid "Deactivate flight mode and try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:230 msgid "Try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:236 msgid "The message could not be sent" msgstr "" #: indicator/textchannelobserver.cpp:249 indicator/textchannelobserver.cpp:713 msgid "View message" msgstr "" #: indicator/textchannelobserver.cpp:295 msgid "New Group" msgstr "" #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:302 #, qt-format msgid "You joined group %1 " msgstr "" #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:306 #, qt-format msgid "You joined group %1" msgstr "" #: indicator/textchannelobserver.cpp:309 msgid "You joined a new group" msgstr "" #: indicator/textchannelobserver.cpp:328 msgid "View Group" msgstr "" #: indicator/textchannelobserver.cpp:367 indicator/ussdindicator.cpp:116 msgid "Ok" msgstr "" #: indicator/textchannelobserver.cpp:373 msgid "Save" msgstr "" #: indicator/textchannelobserver.cpp:468 msgid "Emergency Alert" msgstr "" #: indicator/textchannelobserver.cpp:471 msgid "Emergency Alert: Extreme" msgstr "" #: indicator/textchannelobserver.cpp:474 msgid "Emergency Alert: Severe" msgstr "" #: indicator/textchannelobserver.cpp:477 msgid "Emergency Alert: Notice" msgstr "" #: indicator/textchannelobserver.cpp:482 msgid "AMBER Alert" msgstr "" #: indicator/textchannelobserver.cpp:485 msgid "Alert" msgstr "" #: indicator/textchannelobserver.cpp:531 msgid "Show alert" msgstr "" #: indicator/textchannelobserver.cpp:604 #, qt-format msgid "Attachment: %1 image" msgid_plural "Attachments: %1 images" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:606 #, qt-format msgid "Attachment: %1 video" msgid_plural "Attachments: %1 videos" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:608 #, qt-format msgid "Attachment: %1 contact" msgid_plural "Attachments: %1 contacts" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:610 #, qt-format msgid "Attachment: %1 audio clip" msgid_plural "Attachments: %1 audio clips" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:612 #, qt-format msgid "Attachment: %1 file" msgid_plural "Attachments: %1 files" msgstr[0] "" msgstr[1] "" #. TRANSLATORS : message displayed when any error occurred while receiving a MMS (case when cellular-data is off, or any downloading issue). Notify that there was a message, the user can find more about it in the messaging-app. #: indicator/textchannelobserver.cpp:615 msgid "New MMS message" msgstr "" #. TRANSLATORS : %1 is the recipient name #: indicator/textchannelobserver.cpp:679 indicator/textchannelobserver.cpp:683 #, qt-format msgid "Message to group from %1" msgstr "" #: indicator/textchannelobserver.cpp:749 #, qt-format msgid "Message from %1" msgstr "" #: indicator/textchannelobserver.cpp:910 msgid "Please, select a SIM card:" msgstr "" #: indicator/ussdindicator.cpp:119 msgid "Reply" msgstr "" #: indicator/ussdindicator.cpp:142 msgid "Cancel" msgstr "" #: libtelephonyservice/callnotification.cpp:53 msgid "Conf call on hold" msgstr "" #: libtelephonyservice/callnotification.cpp:53 #, qt-format msgid "%1 call on hold" msgstr "" #: libtelephonyservice/callnotification.cpp:56 msgid "Conf call ended" msgstr "" #: libtelephonyservice/callnotification.cpp:56 #, qt-format msgid "%1 call ended" msgstr "" #: libtelephonyservice/callnotification.cpp:59 #, qt-format msgid "%1 call declined" msgstr "" #: libtelephonyservice/contactwatcher.cpp:157 msgid "Private Number" msgstr "" #: libtelephonyservice/contactwatcher.cpp:159 msgid "Unknown Number" msgstr "" telephony-service-0.5.3/po/wae.po000066400000000000000000000207401455543255600167370ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR Canonical Ltd. # This file is distributed under the same license as the telephony-service package. # FIRST AUTHOR , YEAR. # msgid "" msgstr "" "Project-Id-Version: telephony-service\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-12-16 17:03+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: Automatically generated\n" "Language-Team: none\n" "Language: wae\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" #: indicator/telephony-service-call.desktop.in:4 msgid "Phone Calls" msgstr "" #: indicator/telephony-service-sms.desktop.in:4 msgid "SMS" msgstr "" #: approver/approver.cpp:66 msgid "Unknown caller" msgstr "" #: approver/approver.cpp:94 msgid "I'm busy at the moment. I'll call later." msgstr "" #: approver/approver.cpp:95 msgid "I'm running late, on my way now." msgstr "" #: approver/approver.cpp:96 msgid "Please call me back later." msgstr "" #: approver/approver.cpp:457 #, qt-format msgid "On [%1]" msgstr "" #: approver/approver.cpp:461 indicator/messagingmenu.cpp:414 msgid "Private number" msgstr "" #: approver/approver.cpp:464 indicator/messagingmenu.cpp:244 #: indicator/messagingmenu.cpp:418 indicator/textchannelobserver.cpp:640 msgid "Unknown number" msgstr "" #: approver/approver.cpp:470 approver/approver.cpp:485 msgid "Caller number is not available" msgstr "" #: approver/approver.cpp:476 msgid "Calling from private number" msgstr "" #: approver/approver.cpp:479 msgid "Calling from unknown number" msgstr "" #: approver/approver.cpp:482 #, qt-format msgid "Calling from %1" msgstr "" #: approver/approver.cpp:529 msgid "Hold + Answer" msgstr "" #: approver/approver.cpp:530 msgid "Accept" msgstr "" #: approver/approver.cpp:543 msgid "End + Answer" msgstr "" #: approver/approver.cpp:552 msgid "Decline" msgstr "" #: approver/approver.cpp:560 msgid "Message & decline" msgstr "" #: approver/main.cpp:46 msgid "Telephony Service Approver" msgstr "" #: indicator/authhandler.cpp:72 msgid "Authentication failed. Do you want to review your credentials?" msgstr "" #: indicator/authhandler.cpp:91 msgid "Yes" msgstr "" #: indicator/authhandler.cpp:94 msgid "No" msgstr "" #: indicator/displaynamesettings.cpp:35 #, qt-format msgid "SIM %1" msgstr "" #: indicator/main.cpp:53 msgid "Telephony Service Indicator" msgstr "" #: indicator/messagingmenu.cpp:83 indicator/messagingmenu.cpp:87 msgid "Telephony Service" msgstr "" #: indicator/messagingmenu.cpp:151 indicator/messagingmenu.cpp:293 #: indicator/messagingmenu.cpp:360 msgid "Send" msgstr "" #. TRANSLATORS : %1 is the group name and %2 is the recipient name #: indicator/messagingmenu.cpp:262 indicator/textchannelobserver.cpp:671 #: indicator/textchannelobserver.cpp:675 #, qt-format msgid "Message to %1 from %2" msgstr "" #. TRANSLATORS : %1 is the recipient name #: indicator/messagingmenu.cpp:265 indicator/messagingmenu.cpp:269 #, qt-format msgid "Message to the group from %1" msgstr "" #: indicator/messagingmenu.cpp:345 msgid "Call back" msgstr "" #: indicator/messagingmenu.cpp:350 msgid "Missed your call — can you call me now?" msgstr "" #: indicator/messagingmenu.cpp:351 msgid "Running late. On my way." msgstr "" #: indicator/messagingmenu.cpp:352 msgid "Busy at the moment. Will call you later." msgstr "" #: indicator/messagingmenu.cpp:353 msgid "I am 20 minutes late." msgstr "" #: indicator/messagingmenu.cpp:354 msgid "Still busy. Will call you later." msgstr "" #: indicator/messagingmenu.cpp:409 #, qt-format msgid "%1 missed call" msgid_plural "%1 missed calls" msgstr[0] "" msgstr[1] "" #: indicator/messagingmenu.cpp:492 msgid "Voicemail messages" msgstr "" #: indicator/messagingmenu.cpp:495 #, qt-format msgid "%1 voicemail message" msgid_plural "%1 voicemail messages" msgstr[0] "" msgstr[1] "" #: indicator/messagingmenu.cpp:500 msgid "Voicemail" msgstr "" #: indicator/metrics.cpp:42 #, qt-format msgid "%1 text messages sent today" msgstr "" #: indicator/metrics.cpp:43 msgid "No text messages sent today" msgstr "" #: indicator/metrics.cpp:44 #, qt-format msgid "%1 text messages received today" msgstr "" #: indicator/metrics.cpp:45 msgid "No text messages received today" msgstr "" #: indicator/metrics.cpp:46 #, qt-format msgid "%1 calls received today" msgstr "" #: indicator/metrics.cpp:47 msgid "No calls received today" msgstr "" #: indicator/metrics.cpp:48 #, qt-format msgid "%1 calls made today" msgstr "" #: indicator/metrics.cpp:49 indicator/metrics.cpp:51 msgid "No calls made today" msgstr "" #: indicator/metrics.cpp:50 #, qt-format msgid "Spent %1 minutes in calls today" msgstr "" #: indicator/textchannelobserver.cpp:225 msgid "Unlock your sim card and try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:227 msgid "Deactivate flight mode and try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:230 msgid "Try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:236 msgid "The message could not be sent" msgstr "" #: indicator/textchannelobserver.cpp:249 indicator/textchannelobserver.cpp:713 msgid "View message" msgstr "" #: indicator/textchannelobserver.cpp:295 msgid "New Group" msgstr "" #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:302 #, qt-format msgid "You joined group %1 " msgstr "" #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:306 #, qt-format msgid "You joined group %1" msgstr "" #: indicator/textchannelobserver.cpp:309 msgid "You joined a new group" msgstr "" #: indicator/textchannelobserver.cpp:328 msgid "View Group" msgstr "" #: indicator/textchannelobserver.cpp:367 indicator/ussdindicator.cpp:116 msgid "Ok" msgstr "" #: indicator/textchannelobserver.cpp:373 msgid "Save" msgstr "" #: indicator/textchannelobserver.cpp:468 msgid "Emergency Alert" msgstr "" #: indicator/textchannelobserver.cpp:471 msgid "Emergency Alert: Extreme" msgstr "" #: indicator/textchannelobserver.cpp:474 msgid "Emergency Alert: Severe" msgstr "" #: indicator/textchannelobserver.cpp:477 msgid "Emergency Alert: Notice" msgstr "" #: indicator/textchannelobserver.cpp:482 msgid "AMBER Alert" msgstr "" #: indicator/textchannelobserver.cpp:485 msgid "Alert" msgstr "" #: indicator/textchannelobserver.cpp:531 msgid "Show alert" msgstr "" #: indicator/textchannelobserver.cpp:604 #, qt-format msgid "Attachment: %1 image" msgid_plural "Attachments: %1 images" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:606 #, qt-format msgid "Attachment: %1 video" msgid_plural "Attachments: %1 videos" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:608 #, qt-format msgid "Attachment: %1 contact" msgid_plural "Attachments: %1 contacts" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:610 #, qt-format msgid "Attachment: %1 audio clip" msgid_plural "Attachments: %1 audio clips" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:612 #, qt-format msgid "Attachment: %1 file" msgid_plural "Attachments: %1 files" msgstr[0] "" msgstr[1] "" #. TRANSLATORS : message displayed when any error occurred while receiving a MMS (case when cellular-data is off, or any downloading issue). Notify that there was a message, the user can find more about it in the messaging-app. #: indicator/textchannelobserver.cpp:615 msgid "New MMS message" msgstr "" #. TRANSLATORS : %1 is the recipient name #: indicator/textchannelobserver.cpp:679 indicator/textchannelobserver.cpp:683 #, qt-format msgid "Message to group from %1" msgstr "" #: indicator/textchannelobserver.cpp:749 #, qt-format msgid "Message from %1" msgstr "" #: indicator/textchannelobserver.cpp:910 msgid "Please, select a SIM card:" msgstr "" #: indicator/ussdindicator.cpp:119 msgid "Reply" msgstr "" #: indicator/ussdindicator.cpp:142 msgid "Cancel" msgstr "" #: libtelephonyservice/callnotification.cpp:53 msgid "Conf call on hold" msgstr "" #: libtelephonyservice/callnotification.cpp:53 #, qt-format msgid "%1 call on hold" msgstr "" #: libtelephonyservice/callnotification.cpp:56 msgid "Conf call ended" msgstr "" #: libtelephonyservice/callnotification.cpp:56 #, qt-format msgid "%1 call ended" msgstr "" #: libtelephonyservice/callnotification.cpp:59 #, qt-format msgid "%1 call declined" msgstr "" #: libtelephonyservice/contactwatcher.cpp:157 msgid "Private Number" msgstr "" #: libtelephonyservice/contactwatcher.cpp:159 msgid "Unknown Number" msgstr "" telephony-service-0.5.3/po/wo.po000066400000000000000000000207321455543255600166110ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR Canonical Ltd. # This file is distributed under the same license as the telephony-service package. # FIRST AUTHOR , YEAR. # msgid "" msgstr "" "Project-Id-Version: telephony-service\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-12-16 17:03+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: Automatically generated\n" "Language-Team: none\n" "Language: wo\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" #: indicator/telephony-service-call.desktop.in:4 msgid "Phone Calls" msgstr "" #: indicator/telephony-service-sms.desktop.in:4 msgid "SMS" msgstr "" #: approver/approver.cpp:66 msgid "Unknown caller" msgstr "" #: approver/approver.cpp:94 msgid "I'm busy at the moment. I'll call later." msgstr "" #: approver/approver.cpp:95 msgid "I'm running late, on my way now." msgstr "" #: approver/approver.cpp:96 msgid "Please call me back later." msgstr "" #: approver/approver.cpp:457 #, qt-format msgid "On [%1]" msgstr "" #: approver/approver.cpp:461 indicator/messagingmenu.cpp:414 msgid "Private number" msgstr "" #: approver/approver.cpp:464 indicator/messagingmenu.cpp:244 #: indicator/messagingmenu.cpp:418 indicator/textchannelobserver.cpp:640 msgid "Unknown number" msgstr "" #: approver/approver.cpp:470 approver/approver.cpp:485 msgid "Caller number is not available" msgstr "" #: approver/approver.cpp:476 msgid "Calling from private number" msgstr "" #: approver/approver.cpp:479 msgid "Calling from unknown number" msgstr "" #: approver/approver.cpp:482 #, qt-format msgid "Calling from %1" msgstr "" #: approver/approver.cpp:529 msgid "Hold + Answer" msgstr "" #: approver/approver.cpp:530 msgid "Accept" msgstr "" #: approver/approver.cpp:543 msgid "End + Answer" msgstr "" #: approver/approver.cpp:552 msgid "Decline" msgstr "" #: approver/approver.cpp:560 msgid "Message & decline" msgstr "" #: approver/main.cpp:46 msgid "Telephony Service Approver" msgstr "" #: indicator/authhandler.cpp:72 msgid "Authentication failed. Do you want to review your credentials?" msgstr "" #: indicator/authhandler.cpp:91 msgid "Yes" msgstr "" #: indicator/authhandler.cpp:94 msgid "No" msgstr "" #: indicator/displaynamesettings.cpp:35 #, qt-format msgid "SIM %1" msgstr "" #: indicator/main.cpp:53 msgid "Telephony Service Indicator" msgstr "" #: indicator/messagingmenu.cpp:83 indicator/messagingmenu.cpp:87 msgid "Telephony Service" msgstr "" #: indicator/messagingmenu.cpp:151 indicator/messagingmenu.cpp:293 #: indicator/messagingmenu.cpp:360 msgid "Send" msgstr "" #. TRANSLATORS : %1 is the group name and %2 is the recipient name #: indicator/messagingmenu.cpp:262 indicator/textchannelobserver.cpp:671 #: indicator/textchannelobserver.cpp:675 #, qt-format msgid "Message to %1 from %2" msgstr "" #. TRANSLATORS : %1 is the recipient name #: indicator/messagingmenu.cpp:265 indicator/messagingmenu.cpp:269 #, qt-format msgid "Message to the group from %1" msgstr "" #: indicator/messagingmenu.cpp:345 msgid "Call back" msgstr "" #: indicator/messagingmenu.cpp:350 msgid "Missed your call — can you call me now?" msgstr "" #: indicator/messagingmenu.cpp:351 msgid "Running late. On my way." msgstr "" #: indicator/messagingmenu.cpp:352 msgid "Busy at the moment. Will call you later." msgstr "" #: indicator/messagingmenu.cpp:353 msgid "I am 20 minutes late." msgstr "" #: indicator/messagingmenu.cpp:354 msgid "Still busy. Will call you later." msgstr "" #: indicator/messagingmenu.cpp:409 #, qt-format msgid "%1 missed call" msgid_plural "%1 missed calls" msgstr[0] "" msgstr[1] "" #: indicator/messagingmenu.cpp:492 msgid "Voicemail messages" msgstr "" #: indicator/messagingmenu.cpp:495 #, qt-format msgid "%1 voicemail message" msgid_plural "%1 voicemail messages" msgstr[0] "" msgstr[1] "" #: indicator/messagingmenu.cpp:500 msgid "Voicemail" msgstr "" #: indicator/metrics.cpp:42 #, qt-format msgid "%1 text messages sent today" msgstr "" #: indicator/metrics.cpp:43 msgid "No text messages sent today" msgstr "" #: indicator/metrics.cpp:44 #, qt-format msgid "%1 text messages received today" msgstr "" #: indicator/metrics.cpp:45 msgid "No text messages received today" msgstr "" #: indicator/metrics.cpp:46 #, qt-format msgid "%1 calls received today" msgstr "" #: indicator/metrics.cpp:47 msgid "No calls received today" msgstr "" #: indicator/metrics.cpp:48 #, qt-format msgid "%1 calls made today" msgstr "" #: indicator/metrics.cpp:49 indicator/metrics.cpp:51 msgid "No calls made today" msgstr "" #: indicator/metrics.cpp:50 #, qt-format msgid "Spent %1 minutes in calls today" msgstr "" #: indicator/textchannelobserver.cpp:225 msgid "Unlock your sim card and try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:227 msgid "Deactivate flight mode and try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:230 msgid "Try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:236 msgid "The message could not be sent" msgstr "" #: indicator/textchannelobserver.cpp:249 indicator/textchannelobserver.cpp:713 msgid "View message" msgstr "" #: indicator/textchannelobserver.cpp:295 msgid "New Group" msgstr "" #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:302 #, qt-format msgid "You joined group %1 " msgstr "" #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:306 #, qt-format msgid "You joined group %1" msgstr "" #: indicator/textchannelobserver.cpp:309 msgid "You joined a new group" msgstr "" #: indicator/textchannelobserver.cpp:328 msgid "View Group" msgstr "" #: indicator/textchannelobserver.cpp:367 indicator/ussdindicator.cpp:116 msgid "Ok" msgstr "" #: indicator/textchannelobserver.cpp:373 msgid "Save" msgstr "" #: indicator/textchannelobserver.cpp:468 msgid "Emergency Alert" msgstr "" #: indicator/textchannelobserver.cpp:471 msgid "Emergency Alert: Extreme" msgstr "" #: indicator/textchannelobserver.cpp:474 msgid "Emergency Alert: Severe" msgstr "" #: indicator/textchannelobserver.cpp:477 msgid "Emergency Alert: Notice" msgstr "" #: indicator/textchannelobserver.cpp:482 msgid "AMBER Alert" msgstr "" #: indicator/textchannelobserver.cpp:485 msgid "Alert" msgstr "" #: indicator/textchannelobserver.cpp:531 msgid "Show alert" msgstr "" #: indicator/textchannelobserver.cpp:604 #, qt-format msgid "Attachment: %1 image" msgid_plural "Attachments: %1 images" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:606 #, qt-format msgid "Attachment: %1 video" msgid_plural "Attachments: %1 videos" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:608 #, qt-format msgid "Attachment: %1 contact" msgid_plural "Attachments: %1 contacts" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:610 #, qt-format msgid "Attachment: %1 audio clip" msgid_plural "Attachments: %1 audio clips" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:612 #, qt-format msgid "Attachment: %1 file" msgid_plural "Attachments: %1 files" msgstr[0] "" msgstr[1] "" #. TRANSLATORS : message displayed when any error occurred while receiving a MMS (case when cellular-data is off, or any downloading issue). Notify that there was a message, the user can find more about it in the messaging-app. #: indicator/textchannelobserver.cpp:615 msgid "New MMS message" msgstr "" #. TRANSLATORS : %1 is the recipient name #: indicator/textchannelobserver.cpp:679 indicator/textchannelobserver.cpp:683 #, qt-format msgid "Message to group from %1" msgstr "" #: indicator/textchannelobserver.cpp:749 #, qt-format msgid "Message from %1" msgstr "" #: indicator/textchannelobserver.cpp:910 msgid "Please, select a SIM card:" msgstr "" #: indicator/ussdindicator.cpp:119 msgid "Reply" msgstr "" #: indicator/ussdindicator.cpp:142 msgid "Cancel" msgstr "" #: libtelephonyservice/callnotification.cpp:53 msgid "Conf call on hold" msgstr "" #: libtelephonyservice/callnotification.cpp:53 #, qt-format msgid "%1 call on hold" msgstr "" #: libtelephonyservice/callnotification.cpp:56 msgid "Conf call ended" msgstr "" #: libtelephonyservice/callnotification.cpp:56 #, qt-format msgid "%1 call ended" msgstr "" #: libtelephonyservice/callnotification.cpp:59 #, qt-format msgid "%1 call declined" msgstr "" #: libtelephonyservice/contactwatcher.cpp:157 msgid "Private Number" msgstr "" #: libtelephonyservice/contactwatcher.cpp:159 msgid "Unknown Number" msgstr "" telephony-service-0.5.3/po/xh.po000066400000000000000000000207371455543255600166100ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR Canonical Ltd. # This file is distributed under the same license as the telephony-service package. # FIRST AUTHOR , YEAR. # msgid "" msgstr "" "Project-Id-Version: telephony-service\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-12-16 17:03+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: Automatically generated\n" "Language-Team: none\n" "Language: xh\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" #: indicator/telephony-service-call.desktop.in:4 msgid "Phone Calls" msgstr "" #: indicator/telephony-service-sms.desktop.in:4 msgid "SMS" msgstr "" #: approver/approver.cpp:66 msgid "Unknown caller" msgstr "" #: approver/approver.cpp:94 msgid "I'm busy at the moment. I'll call later." msgstr "" #: approver/approver.cpp:95 msgid "I'm running late, on my way now." msgstr "" #: approver/approver.cpp:96 msgid "Please call me back later." msgstr "" #: approver/approver.cpp:457 #, qt-format msgid "On [%1]" msgstr "" #: approver/approver.cpp:461 indicator/messagingmenu.cpp:414 msgid "Private number" msgstr "" #: approver/approver.cpp:464 indicator/messagingmenu.cpp:244 #: indicator/messagingmenu.cpp:418 indicator/textchannelobserver.cpp:640 msgid "Unknown number" msgstr "" #: approver/approver.cpp:470 approver/approver.cpp:485 msgid "Caller number is not available" msgstr "" #: approver/approver.cpp:476 msgid "Calling from private number" msgstr "" #: approver/approver.cpp:479 msgid "Calling from unknown number" msgstr "" #: approver/approver.cpp:482 #, qt-format msgid "Calling from %1" msgstr "" #: approver/approver.cpp:529 msgid "Hold + Answer" msgstr "" #: approver/approver.cpp:530 msgid "Accept" msgstr "" #: approver/approver.cpp:543 msgid "End + Answer" msgstr "" #: approver/approver.cpp:552 msgid "Decline" msgstr "" #: approver/approver.cpp:560 msgid "Message & decline" msgstr "" #: approver/main.cpp:46 msgid "Telephony Service Approver" msgstr "" #: indicator/authhandler.cpp:72 msgid "Authentication failed. Do you want to review your credentials?" msgstr "" #: indicator/authhandler.cpp:91 msgid "Yes" msgstr "" #: indicator/authhandler.cpp:94 msgid "No" msgstr "" #: indicator/displaynamesettings.cpp:35 #, qt-format msgid "SIM %1" msgstr "" #: indicator/main.cpp:53 msgid "Telephony Service Indicator" msgstr "" #: indicator/messagingmenu.cpp:83 indicator/messagingmenu.cpp:87 msgid "Telephony Service" msgstr "" #: indicator/messagingmenu.cpp:151 indicator/messagingmenu.cpp:293 #: indicator/messagingmenu.cpp:360 msgid "Send" msgstr "" #. TRANSLATORS : %1 is the group name and %2 is the recipient name #: indicator/messagingmenu.cpp:262 indicator/textchannelobserver.cpp:671 #: indicator/textchannelobserver.cpp:675 #, qt-format msgid "Message to %1 from %2" msgstr "" #. TRANSLATORS : %1 is the recipient name #: indicator/messagingmenu.cpp:265 indicator/messagingmenu.cpp:269 #, qt-format msgid "Message to the group from %1" msgstr "" #: indicator/messagingmenu.cpp:345 msgid "Call back" msgstr "" #: indicator/messagingmenu.cpp:350 msgid "Missed your call — can you call me now?" msgstr "" #: indicator/messagingmenu.cpp:351 msgid "Running late. On my way." msgstr "" #: indicator/messagingmenu.cpp:352 msgid "Busy at the moment. Will call you later." msgstr "" #: indicator/messagingmenu.cpp:353 msgid "I am 20 minutes late." msgstr "" #: indicator/messagingmenu.cpp:354 msgid "Still busy. Will call you later." msgstr "" #: indicator/messagingmenu.cpp:409 #, qt-format msgid "%1 missed call" msgid_plural "%1 missed calls" msgstr[0] "" msgstr[1] "" #: indicator/messagingmenu.cpp:492 msgid "Voicemail messages" msgstr "" #: indicator/messagingmenu.cpp:495 #, qt-format msgid "%1 voicemail message" msgid_plural "%1 voicemail messages" msgstr[0] "" msgstr[1] "" #: indicator/messagingmenu.cpp:500 msgid "Voicemail" msgstr "" #: indicator/metrics.cpp:42 #, qt-format msgid "%1 text messages sent today" msgstr "" #: indicator/metrics.cpp:43 msgid "No text messages sent today" msgstr "" #: indicator/metrics.cpp:44 #, qt-format msgid "%1 text messages received today" msgstr "" #: indicator/metrics.cpp:45 msgid "No text messages received today" msgstr "" #: indicator/metrics.cpp:46 #, qt-format msgid "%1 calls received today" msgstr "" #: indicator/metrics.cpp:47 msgid "No calls received today" msgstr "" #: indicator/metrics.cpp:48 #, qt-format msgid "%1 calls made today" msgstr "" #: indicator/metrics.cpp:49 indicator/metrics.cpp:51 msgid "No calls made today" msgstr "" #: indicator/metrics.cpp:50 #, qt-format msgid "Spent %1 minutes in calls today" msgstr "" #: indicator/textchannelobserver.cpp:225 msgid "Unlock your sim card and try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:227 msgid "Deactivate flight mode and try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:230 msgid "Try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:236 msgid "The message could not be sent" msgstr "" #: indicator/textchannelobserver.cpp:249 indicator/textchannelobserver.cpp:713 msgid "View message" msgstr "" #: indicator/textchannelobserver.cpp:295 msgid "New Group" msgstr "" #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:302 #, qt-format msgid "You joined group %1 " msgstr "" #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:306 #, qt-format msgid "You joined group %1" msgstr "" #: indicator/textchannelobserver.cpp:309 msgid "You joined a new group" msgstr "" #: indicator/textchannelobserver.cpp:328 msgid "View Group" msgstr "" #: indicator/textchannelobserver.cpp:367 indicator/ussdindicator.cpp:116 msgid "Ok" msgstr "" #: indicator/textchannelobserver.cpp:373 msgid "Save" msgstr "" #: indicator/textchannelobserver.cpp:468 msgid "Emergency Alert" msgstr "" #: indicator/textchannelobserver.cpp:471 msgid "Emergency Alert: Extreme" msgstr "" #: indicator/textchannelobserver.cpp:474 msgid "Emergency Alert: Severe" msgstr "" #: indicator/textchannelobserver.cpp:477 msgid "Emergency Alert: Notice" msgstr "" #: indicator/textchannelobserver.cpp:482 msgid "AMBER Alert" msgstr "" #: indicator/textchannelobserver.cpp:485 msgid "Alert" msgstr "" #: indicator/textchannelobserver.cpp:531 msgid "Show alert" msgstr "" #: indicator/textchannelobserver.cpp:604 #, qt-format msgid "Attachment: %1 image" msgid_plural "Attachments: %1 images" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:606 #, qt-format msgid "Attachment: %1 video" msgid_plural "Attachments: %1 videos" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:608 #, qt-format msgid "Attachment: %1 contact" msgid_plural "Attachments: %1 contacts" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:610 #, qt-format msgid "Attachment: %1 audio clip" msgid_plural "Attachments: %1 audio clips" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:612 #, qt-format msgid "Attachment: %1 file" msgid_plural "Attachments: %1 files" msgstr[0] "" msgstr[1] "" #. TRANSLATORS : message displayed when any error occurred while receiving a MMS (case when cellular-data is off, or any downloading issue). Notify that there was a message, the user can find more about it in the messaging-app. #: indicator/textchannelobserver.cpp:615 msgid "New MMS message" msgstr "" #. TRANSLATORS : %1 is the recipient name #: indicator/textchannelobserver.cpp:679 indicator/textchannelobserver.cpp:683 #, qt-format msgid "Message to group from %1" msgstr "" #: indicator/textchannelobserver.cpp:749 #, qt-format msgid "Message from %1" msgstr "" #: indicator/textchannelobserver.cpp:910 msgid "Please, select a SIM card:" msgstr "" #: indicator/ussdindicator.cpp:119 msgid "Reply" msgstr "" #: indicator/ussdindicator.cpp:142 msgid "Cancel" msgstr "" #: libtelephonyservice/callnotification.cpp:53 msgid "Conf call on hold" msgstr "" #: libtelephonyservice/callnotification.cpp:53 #, qt-format msgid "%1 call on hold" msgstr "" #: libtelephonyservice/callnotification.cpp:56 msgid "Conf call ended" msgstr "" #: libtelephonyservice/callnotification.cpp:56 #, qt-format msgid "%1 call ended" msgstr "" #: libtelephonyservice/callnotification.cpp:59 #, qt-format msgid "%1 call declined" msgstr "" #: libtelephonyservice/contactwatcher.cpp:157 msgid "Private Number" msgstr "" #: libtelephonyservice/contactwatcher.cpp:159 msgid "Unknown Number" msgstr "" telephony-service-0.5.3/po/zh_CN.po000066400000000000000000000257331455543255600171730ustar00rootroot00000000000000# Chinese (Simplified) translation for telephony-service # Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013 # This file is distributed under the same license as the telephony-service package. # FIRST AUTHOR , 2013. # msgid "" msgstr "" "Project-Id-Version: telephony-service\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-12-16 17:03+0100\n" "PO-Revision-Date: 2021-05-03 03:41+0000\n" "Last-Translator: Enceka \n" "Language-Team: Chinese (Simplified) \n" "Language: zh_CN\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" "X-Generator: Weblate 3.11.3\n" "X-Launchpad-Export-Date: 2017-01-04 06:03+0000\n" #: indicator/telephony-service-call.desktop.in:4 msgid "Phone Calls" msgstr "手机通话" #: indicator/telephony-service-sms.desktop.in:4 msgid "SMS" msgstr "信息" #: approver/approver.cpp:66 msgid "Unknown caller" msgstr "未知来电者" #: approver/approver.cpp:94 msgid "I'm busy at the moment. I'll call later." msgstr "此刻我正忙。稍后我将回电。" #: approver/approver.cpp:95 msgid "I'm running late, on my way now." msgstr "我迟了,正在路上。" #: approver/approver.cpp:96 msgid "Please call me back later." msgstr "请稍后再呼叫我。" #: approver/approver.cpp:457 #, qt-format msgid "On [%1]" msgstr "在 [%1]" #: approver/approver.cpp:461 indicator/messagingmenu.cpp:414 msgid "Private number" msgstr "私密号码" #: approver/approver.cpp:464 indicator/messagingmenu.cpp:244 #: indicator/messagingmenu.cpp:418 indicator/textchannelobserver.cpp:640 msgid "Unknown number" msgstr "未知号码" #: approver/approver.cpp:470 approver/approver.cpp:485 msgid "Caller number is not available" msgstr "没有对方来电号码" #: approver/approver.cpp:476 msgid "Calling from private number" msgstr "私密号码来电" #: approver/approver.cpp:479 msgid "Calling from unknown number" msgstr "陌生号码来电" #: approver/approver.cpp:482 #, qt-format msgid "Calling from %1" msgstr "%1 的来电" #: approver/approver.cpp:529 msgid "Hold + Answer" msgstr "挂起 + 应答" #: approver/approver.cpp:530 msgid "Accept" msgstr "接听" #: approver/approver.cpp:543 msgid "End + Answer" msgstr "挂断 + 应答" #: approver/approver.cpp:552 msgid "Decline" msgstr "拒绝" #: approver/approver.cpp:560 msgid "Message & decline" msgstr "拒接并发送短信" #: approver/main.cpp:46 msgid "Telephony Service Approver" msgstr "电话服务核准" #: indicator/authhandler.cpp:72 msgid "Authentication failed. Do you want to review your credentials?" msgstr "验证失败。你是否想检查你的凭证?" #: indicator/authhandler.cpp:91 msgid "Yes" msgstr "是" #: indicator/authhandler.cpp:94 msgid "No" msgstr "否" #: indicator/displaynamesettings.cpp:35 #, qt-format msgid "SIM %1" msgstr "SIM卡 %1" #: indicator/main.cpp:53 msgid "Telephony Service Indicator" msgstr "电话服务指示器" #: indicator/messagingmenu.cpp:83 indicator/messagingmenu.cpp:87 msgid "Telephony Service" msgstr "电话服务" #: indicator/messagingmenu.cpp:151 indicator/messagingmenu.cpp:293 #: indicator/messagingmenu.cpp:360 msgid "Send" msgstr "发送" #. TRANSLATORS : %1 is the group name and %2 is the recipient name #: indicator/messagingmenu.cpp:262 indicator/textchannelobserver.cpp:671 #: indicator/textchannelobserver.cpp:675 #, qt-format msgid "Message to %1 from %2" msgstr "从%2发送到%1的消息" #. TRANSLATORS : %1 is the recipient name #: indicator/messagingmenu.cpp:265 indicator/messagingmenu.cpp:269 #, fuzzy, qt-format #| msgid "Message to group from %1" msgid "Message to the group from %1" msgstr "来自%1的群消息" #: indicator/messagingmenu.cpp:345 msgid "Call back" msgstr "回电" #: indicator/messagingmenu.cpp:350 #, fuzzy #| msgid "I missed your call - can you call me now?" msgid "Missed your call — can you call me now?" msgstr "我错过了您的电话,您可以现在打给我吗?" #: indicator/messagingmenu.cpp:351 #, fuzzy #| msgid "I'm running late. I'm on my way." msgid "Running late. On my way." msgstr "快迟到了,我这就动身。" #: indicator/messagingmenu.cpp:352 #, fuzzy #| msgid "I'm busy at the moment. I'll call you later." msgid "Busy at the moment. Will call you later." msgstr "现在正忙,待会儿回您电话。" #: indicator/messagingmenu.cpp:353 #, fuzzy #| msgid "I'll be 20 minutes late." msgid "I am 20 minutes late." msgstr "我将会迟到20分钟。" #: indicator/messagingmenu.cpp:354 #, fuzzy #| msgid "Sorry, I'm still busy. I'll call you later." msgid "Still busy. Will call you later." msgstr "抱歉,我还在忙,待会儿给您回电话。" #: indicator/messagingmenu.cpp:409 #, qt-format msgid "%1 missed call" msgid_plural "%1 missed calls" msgstr[0] "%1 个未接来电" #: indicator/messagingmenu.cpp:492 msgid "Voicemail messages" msgstr "语音信箱信息" #: indicator/messagingmenu.cpp:495 #, qt-format msgid "%1 voicemail message" msgid_plural "%1 voicemail messages" msgstr[0] "%1 个语音信息" #: indicator/messagingmenu.cpp:500 msgid "Voicemail" msgstr "语音信箱" #: indicator/metrics.cpp:42 #, qt-format msgid "%1 text messages sent today" msgstr "今日发送 %1 条短信" #: indicator/metrics.cpp:43 msgid "No text messages sent today" msgstr "今日未发送短信" #: indicator/metrics.cpp:44 #, qt-format msgid "%1 text messages received today" msgstr "今日收到 %1 条短信" #: indicator/metrics.cpp:45 msgid "No text messages received today" msgstr "今日未收到短信" #: indicator/metrics.cpp:46 #, qt-format msgid "%1 calls received today" msgstr "今日接听 %1 个通话" #: indicator/metrics.cpp:47 msgid "No calls received today" msgstr "今日无接听" #: indicator/metrics.cpp:48 #, qt-format msgid "%1 calls made today" msgstr "今日呼出 %1 个通话" #: indicator/metrics.cpp:49 indicator/metrics.cpp:51 msgid "No calls made today" msgstr "今日无呼出" #: indicator/metrics.cpp:50 #, qt-format msgid "Spent %1 minutes in calls today" msgstr "今日通话时长 %1 分钟" #: indicator/textchannelobserver.cpp:225 msgid "Unlock your sim card and try again from the messaging application." msgstr "请解锁你的SIM卡,然后在短信应用中重试。" #: indicator/textchannelobserver.cpp:227 msgid "Deactivate flight mode and try again from the messaging application." msgstr "关闭飞行模式并在短信应用中重试。" #: indicator/textchannelobserver.cpp:230 msgid "Try again from the messaging application." msgstr "请使用短信应用重试。" #: indicator/textchannelobserver.cpp:236 msgid "The message could not be sent" msgstr "本短信无法被发送" #: indicator/textchannelobserver.cpp:249 indicator/textchannelobserver.cpp:713 msgid "View message" msgstr "检视讯息" #: indicator/textchannelobserver.cpp:295 msgid "New Group" msgstr "新的群组" #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:302 #, qt-format msgid "You joined group %1 " msgstr "你加入了%1 " #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:306 #, qt-format msgid "You joined group %1" msgstr "你加入了%1" #: indicator/textchannelobserver.cpp:309 msgid "You joined a new group" msgstr "你加入了一个新群组" #: indicator/textchannelobserver.cpp:328 msgid "View Group" msgstr "查看群组" #: indicator/textchannelobserver.cpp:367 indicator/ussdindicator.cpp:116 msgid "Ok" msgstr "确定" #: indicator/textchannelobserver.cpp:373 msgid "Save" msgstr "保存" #: indicator/textchannelobserver.cpp:468 msgid "Emergency Alert" msgstr "" #: indicator/textchannelobserver.cpp:471 msgid "Emergency Alert: Extreme" msgstr "" #: indicator/textchannelobserver.cpp:474 msgid "Emergency Alert: Severe" msgstr "" #: indicator/textchannelobserver.cpp:477 msgid "Emergency Alert: Notice" msgstr "" #: indicator/textchannelobserver.cpp:482 msgid "AMBER Alert" msgstr "" #: indicator/textchannelobserver.cpp:485 msgid "Alert" msgstr "" #: indicator/textchannelobserver.cpp:531 msgid "Show alert" msgstr "" #: indicator/textchannelobserver.cpp:604 #, qt-format msgid "Attachment: %1 image" msgid_plural "Attachments: %1 images" msgstr[0] "附件: %1 张图片" #: indicator/textchannelobserver.cpp:606 #, qt-format msgid "Attachment: %1 video" msgid_plural "Attachments: %1 videos" msgstr[0] "附件: %1 段视频" #: indicator/textchannelobserver.cpp:608 #, qt-format msgid "Attachment: %1 contact" msgid_plural "Attachments: %1 contacts" msgstr[0] "附件: %1 个联系人" #: indicator/textchannelobserver.cpp:610 #, qt-format msgid "Attachment: %1 audio clip" msgid_plural "Attachments: %1 audio clips" msgstr[0] "附件: %1 个音频片段" #: indicator/textchannelobserver.cpp:612 #, qt-format msgid "Attachment: %1 file" msgid_plural "Attachments: %1 files" msgstr[0] "附件: %1 个文件" #. TRANSLATORS : message displayed when any error occurred while receiving a MMS (case when cellular-data is off, or any downloading issue). Notify that there was a message, the user can find more about it in the messaging-app. #: indicator/textchannelobserver.cpp:615 #, fuzzy #| msgid "View message" msgid "New MMS message" msgstr "检视讯息" #. TRANSLATORS : %1 is the recipient name #: indicator/textchannelobserver.cpp:679 indicator/textchannelobserver.cpp:683 #, qt-format msgid "Message to group from %1" msgstr "来自%1的群消息" #: indicator/textchannelobserver.cpp:749 #, qt-format msgid "Message from %1" msgstr "来自 %1 的短信" #: indicator/textchannelobserver.cpp:910 msgid "Please, select a SIM card:" msgstr "请选择一张SIM卡:" #: indicator/ussdindicator.cpp:119 msgid "Reply" msgstr "回复" #: indicator/ussdindicator.cpp:142 msgid "Cancel" msgstr "取消" #: libtelephonyservice/callnotification.cpp:53 msgid "Conf call on hold" msgstr "" #: libtelephonyservice/callnotification.cpp:53 #, qt-format msgid "%1 call on hold" msgstr "" #: libtelephonyservice/callnotification.cpp:56 msgid "Conf call ended" msgstr "" #: libtelephonyservice/callnotification.cpp:56 #, qt-format msgid "%1 call ended" msgstr "" #: libtelephonyservice/callnotification.cpp:59 #, qt-format msgid "%1 call declined" msgstr "" #: libtelephonyservice/contactwatcher.cpp:157 msgid "Private Number" msgstr "私密号码" #: libtelephonyservice/contactwatcher.cpp:159 msgid "Unknown Number" msgstr "不明号码" #, fuzzy #~| msgid "Telephony Service" #~ msgid "telephony-service-call" #~ msgstr "电话服务" #, fuzzy #~| msgid "Telephony Service" #~ msgid "telephony-service-message" #~ msgstr "电话服务" #~ msgid "" #~ "Oops, there has been an error with the MMS system and this message could " #~ "not be retrieved. Please ensure Cellular Data is ON and MMS settings are " #~ "correct, then ask the sender to try again." #~ msgstr "" #~ "糟糕,MMS系统出现错误并且无法检索到此消息。 请确保蜂窝数据已打开并且MMS设" #~ "置正确,然后请发件人再试一次。" telephony-service-0.5.3/po/zh_HK.po000066400000000000000000000212471455543255600171710ustar00rootroot00000000000000# Chinese (Hong Kong) translation for telephony-service # Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013 # This file is distributed under the same license as the telephony-service package. # FIRST AUTHOR , 2013. # msgid "" msgstr "" "Project-Id-Version: telephony-service\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-12-16 17:03+0100\n" "PO-Revision-Date: 2014-07-29 19:27+0000\n" "Last-Translator: Anthony Wong \n" "Language-Team: Chinese (Hong Kong) \n" "Language: zh_HK\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" "X-Launchpad-Export-Date: 2017-01-04 06:03+0000\n" "X-Generator: Launchpad (build 18298)\n" #: indicator/telephony-service-call.desktop.in:4 msgid "Phone Calls" msgstr "" #: indicator/telephony-service-sms.desktop.in:4 msgid "SMS" msgstr "" #: approver/approver.cpp:66 msgid "Unknown caller" msgstr "" #: approver/approver.cpp:94 msgid "I'm busy at the moment. I'll call later." msgstr "" #: approver/approver.cpp:95 msgid "I'm running late, on my way now." msgstr "" #: approver/approver.cpp:96 msgid "Please call me back later." msgstr "" #: approver/approver.cpp:457 #, qt-format msgid "On [%1]" msgstr "" #: approver/approver.cpp:461 indicator/messagingmenu.cpp:414 msgid "Private number" msgstr "" #: approver/approver.cpp:464 indicator/messagingmenu.cpp:244 #: indicator/messagingmenu.cpp:418 indicator/textchannelobserver.cpp:640 msgid "Unknown number" msgstr "" #: approver/approver.cpp:470 approver/approver.cpp:485 msgid "Caller number is not available" msgstr "" #: approver/approver.cpp:476 msgid "Calling from private number" msgstr "" #: approver/approver.cpp:479 msgid "Calling from unknown number" msgstr "" #: approver/approver.cpp:482 #, qt-format msgid "Calling from %1" msgstr "" #: approver/approver.cpp:529 msgid "Hold + Answer" msgstr "" #: approver/approver.cpp:530 msgid "Accept" msgstr "接聽" #: approver/approver.cpp:543 msgid "End + Answer" msgstr "" #: approver/approver.cpp:552 msgid "Decline" msgstr "" #: approver/approver.cpp:560 msgid "Message & decline" msgstr "" #: approver/main.cpp:46 msgid "Telephony Service Approver" msgstr "" #: indicator/authhandler.cpp:72 msgid "Authentication failed. Do you want to review your credentials?" msgstr "" #: indicator/authhandler.cpp:91 msgid "Yes" msgstr "" #: indicator/authhandler.cpp:94 msgid "No" msgstr "" #: indicator/displaynamesettings.cpp:35 #, qt-format msgid "SIM %1" msgstr "" #: indicator/main.cpp:53 msgid "Telephony Service Indicator" msgstr "" #: indicator/messagingmenu.cpp:83 indicator/messagingmenu.cpp:87 msgid "Telephony Service" msgstr "" #: indicator/messagingmenu.cpp:151 indicator/messagingmenu.cpp:293 #: indicator/messagingmenu.cpp:360 msgid "Send" msgstr "" #. TRANSLATORS : %1 is the group name and %2 is the recipient name #: indicator/messagingmenu.cpp:262 indicator/textchannelobserver.cpp:671 #: indicator/textchannelobserver.cpp:675 #, qt-format msgid "Message to %1 from %2" msgstr "" #. TRANSLATORS : %1 is the recipient name #: indicator/messagingmenu.cpp:265 indicator/messagingmenu.cpp:269 #, qt-format msgid "Message to the group from %1" msgstr "" #: indicator/messagingmenu.cpp:345 msgid "Call back" msgstr "" #: indicator/messagingmenu.cpp:350 msgid "Missed your call — can you call me now?" msgstr "" #: indicator/messagingmenu.cpp:351 msgid "Running late. On my way." msgstr "" #: indicator/messagingmenu.cpp:352 msgid "Busy at the moment. Will call you later." msgstr "" #: indicator/messagingmenu.cpp:353 msgid "I am 20 minutes late." msgstr "" #: indicator/messagingmenu.cpp:354 msgid "Still busy. Will call you later." msgstr "" #: indicator/messagingmenu.cpp:409 #, qt-format msgid "%1 missed call" msgid_plural "%1 missed calls" msgstr[0] "" msgstr[1] "" #: indicator/messagingmenu.cpp:492 msgid "Voicemail messages" msgstr "" #: indicator/messagingmenu.cpp:495 #, qt-format msgid "%1 voicemail message" msgid_plural "%1 voicemail messages" msgstr[0] "" msgstr[1] "" #: indicator/messagingmenu.cpp:500 msgid "Voicemail" msgstr "" #: indicator/metrics.cpp:42 #, qt-format msgid "%1 text messages sent today" msgstr "" #: indicator/metrics.cpp:43 msgid "No text messages sent today" msgstr "" #: indicator/metrics.cpp:44 #, qt-format msgid "%1 text messages received today" msgstr "" #: indicator/metrics.cpp:45 msgid "No text messages received today" msgstr "" #: indicator/metrics.cpp:46 #, qt-format msgid "%1 calls received today" msgstr "" #: indicator/metrics.cpp:47 msgid "No calls received today" msgstr "" #: indicator/metrics.cpp:48 #, qt-format msgid "%1 calls made today" msgstr "" #: indicator/metrics.cpp:49 indicator/metrics.cpp:51 msgid "No calls made today" msgstr "" #: indicator/metrics.cpp:50 #, qt-format msgid "Spent %1 minutes in calls today" msgstr "" #: indicator/textchannelobserver.cpp:225 msgid "Unlock your sim card and try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:227 msgid "Deactivate flight mode and try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:230 msgid "Try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:236 msgid "The message could not be sent" msgstr "" #: indicator/textchannelobserver.cpp:249 indicator/textchannelobserver.cpp:713 msgid "View message" msgstr "" #: indicator/textchannelobserver.cpp:295 msgid "New Group" msgstr "" #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:302 #, qt-format msgid "You joined group %1 " msgstr "" #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:306 #, qt-format msgid "You joined group %1" msgstr "" #: indicator/textchannelobserver.cpp:309 msgid "You joined a new group" msgstr "" #: indicator/textchannelobserver.cpp:328 msgid "View Group" msgstr "" #: indicator/textchannelobserver.cpp:367 indicator/ussdindicator.cpp:116 msgid "Ok" msgstr "" #: indicator/textchannelobserver.cpp:373 msgid "Save" msgstr "" #: indicator/textchannelobserver.cpp:468 msgid "Emergency Alert" msgstr "" #: indicator/textchannelobserver.cpp:471 msgid "Emergency Alert: Extreme" msgstr "" #: indicator/textchannelobserver.cpp:474 msgid "Emergency Alert: Severe" msgstr "" #: indicator/textchannelobserver.cpp:477 msgid "Emergency Alert: Notice" msgstr "" #: indicator/textchannelobserver.cpp:482 msgid "AMBER Alert" msgstr "" #: indicator/textchannelobserver.cpp:485 msgid "Alert" msgstr "" #: indicator/textchannelobserver.cpp:531 msgid "Show alert" msgstr "" #: indicator/textchannelobserver.cpp:604 #, qt-format msgid "Attachment: %1 image" msgid_plural "Attachments: %1 images" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:606 #, qt-format msgid "Attachment: %1 video" msgid_plural "Attachments: %1 videos" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:608 #, qt-format msgid "Attachment: %1 contact" msgid_plural "Attachments: %1 contacts" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:610 #, qt-format msgid "Attachment: %1 audio clip" msgid_plural "Attachments: %1 audio clips" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:612 #, qt-format msgid "Attachment: %1 file" msgid_plural "Attachments: %1 files" msgstr[0] "" msgstr[1] "" #. TRANSLATORS : message displayed when any error occurred while receiving a MMS (case when cellular-data is off, or any downloading issue). Notify that there was a message, the user can find more about it in the messaging-app. #: indicator/textchannelobserver.cpp:615 msgid "New MMS message" msgstr "" #. TRANSLATORS : %1 is the recipient name #: indicator/textchannelobserver.cpp:679 indicator/textchannelobserver.cpp:683 #, qt-format msgid "Message to group from %1" msgstr "" #: indicator/textchannelobserver.cpp:749 #, qt-format msgid "Message from %1" msgstr "" #: indicator/textchannelobserver.cpp:910 msgid "Please, select a SIM card:" msgstr "" #: indicator/ussdindicator.cpp:119 msgid "Reply" msgstr "" #: indicator/ussdindicator.cpp:142 msgid "Cancel" msgstr "" #: libtelephonyservice/callnotification.cpp:53 msgid "Conf call on hold" msgstr "" #: libtelephonyservice/callnotification.cpp:53 #, qt-format msgid "%1 call on hold" msgstr "" #: libtelephonyservice/callnotification.cpp:56 msgid "Conf call ended" msgstr "" #: libtelephonyservice/callnotification.cpp:56 #, qt-format msgid "%1 call ended" msgstr "" #: libtelephonyservice/callnotification.cpp:59 #, qt-format msgid "%1 call declined" msgstr "" #: libtelephonyservice/contactwatcher.cpp:157 msgid "Private Number" msgstr "" #: libtelephonyservice/contactwatcher.cpp:159 msgid "Unknown Number" msgstr "" telephony-service-0.5.3/po/zh_LATN@pinyin.po000066400000000000000000000207531455543255600207550ustar00rootroot00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR Canonical Ltd. # This file is distributed under the same license as the telephony-service package. # FIRST AUTHOR , YEAR. # msgid "" msgstr "" "Project-Id-Version: telephony-service\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-12-16 17:03+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: Automatically generated\n" "Language-Team: none\n" "Language: zh_LATN@pinyin\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" #: indicator/telephony-service-call.desktop.in:4 msgid "Phone Calls" msgstr "" #: indicator/telephony-service-sms.desktop.in:4 msgid "SMS" msgstr "" #: approver/approver.cpp:66 msgid "Unknown caller" msgstr "" #: approver/approver.cpp:94 msgid "I'm busy at the moment. I'll call later." msgstr "" #: approver/approver.cpp:95 msgid "I'm running late, on my way now." msgstr "" #: approver/approver.cpp:96 msgid "Please call me back later." msgstr "" #: approver/approver.cpp:457 #, qt-format msgid "On [%1]" msgstr "" #: approver/approver.cpp:461 indicator/messagingmenu.cpp:414 msgid "Private number" msgstr "" #: approver/approver.cpp:464 indicator/messagingmenu.cpp:244 #: indicator/messagingmenu.cpp:418 indicator/textchannelobserver.cpp:640 msgid "Unknown number" msgstr "" #: approver/approver.cpp:470 approver/approver.cpp:485 msgid "Caller number is not available" msgstr "" #: approver/approver.cpp:476 msgid "Calling from private number" msgstr "" #: approver/approver.cpp:479 msgid "Calling from unknown number" msgstr "" #: approver/approver.cpp:482 #, qt-format msgid "Calling from %1" msgstr "" #: approver/approver.cpp:529 msgid "Hold + Answer" msgstr "" #: approver/approver.cpp:530 msgid "Accept" msgstr "" #: approver/approver.cpp:543 msgid "End + Answer" msgstr "" #: approver/approver.cpp:552 msgid "Decline" msgstr "" #: approver/approver.cpp:560 msgid "Message & decline" msgstr "" #: approver/main.cpp:46 msgid "Telephony Service Approver" msgstr "" #: indicator/authhandler.cpp:72 msgid "Authentication failed. Do you want to review your credentials?" msgstr "" #: indicator/authhandler.cpp:91 msgid "Yes" msgstr "" #: indicator/authhandler.cpp:94 msgid "No" msgstr "" #: indicator/displaynamesettings.cpp:35 #, qt-format msgid "SIM %1" msgstr "" #: indicator/main.cpp:53 msgid "Telephony Service Indicator" msgstr "" #: indicator/messagingmenu.cpp:83 indicator/messagingmenu.cpp:87 msgid "Telephony Service" msgstr "" #: indicator/messagingmenu.cpp:151 indicator/messagingmenu.cpp:293 #: indicator/messagingmenu.cpp:360 msgid "Send" msgstr "" #. TRANSLATORS : %1 is the group name and %2 is the recipient name #: indicator/messagingmenu.cpp:262 indicator/textchannelobserver.cpp:671 #: indicator/textchannelobserver.cpp:675 #, qt-format msgid "Message to %1 from %2" msgstr "" #. TRANSLATORS : %1 is the recipient name #: indicator/messagingmenu.cpp:265 indicator/messagingmenu.cpp:269 #, qt-format msgid "Message to the group from %1" msgstr "" #: indicator/messagingmenu.cpp:345 msgid "Call back" msgstr "" #: indicator/messagingmenu.cpp:350 msgid "Missed your call — can you call me now?" msgstr "" #: indicator/messagingmenu.cpp:351 msgid "Running late. On my way." msgstr "" #: indicator/messagingmenu.cpp:352 msgid "Busy at the moment. Will call you later." msgstr "" #: indicator/messagingmenu.cpp:353 msgid "I am 20 minutes late." msgstr "" #: indicator/messagingmenu.cpp:354 msgid "Still busy. Will call you later." msgstr "" #: indicator/messagingmenu.cpp:409 #, qt-format msgid "%1 missed call" msgid_plural "%1 missed calls" msgstr[0] "" msgstr[1] "" #: indicator/messagingmenu.cpp:492 msgid "Voicemail messages" msgstr "" #: indicator/messagingmenu.cpp:495 #, qt-format msgid "%1 voicemail message" msgid_plural "%1 voicemail messages" msgstr[0] "" msgstr[1] "" #: indicator/messagingmenu.cpp:500 msgid "Voicemail" msgstr "" #: indicator/metrics.cpp:42 #, qt-format msgid "%1 text messages sent today" msgstr "" #: indicator/metrics.cpp:43 msgid "No text messages sent today" msgstr "" #: indicator/metrics.cpp:44 #, qt-format msgid "%1 text messages received today" msgstr "" #: indicator/metrics.cpp:45 msgid "No text messages received today" msgstr "" #: indicator/metrics.cpp:46 #, qt-format msgid "%1 calls received today" msgstr "" #: indicator/metrics.cpp:47 msgid "No calls received today" msgstr "" #: indicator/metrics.cpp:48 #, qt-format msgid "%1 calls made today" msgstr "" #: indicator/metrics.cpp:49 indicator/metrics.cpp:51 msgid "No calls made today" msgstr "" #: indicator/metrics.cpp:50 #, qt-format msgid "Spent %1 minutes in calls today" msgstr "" #: indicator/textchannelobserver.cpp:225 msgid "Unlock your sim card and try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:227 msgid "Deactivate flight mode and try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:230 msgid "Try again from the messaging application." msgstr "" #: indicator/textchannelobserver.cpp:236 msgid "The message could not be sent" msgstr "" #: indicator/textchannelobserver.cpp:249 indicator/textchannelobserver.cpp:713 msgid "View message" msgstr "" #: indicator/textchannelobserver.cpp:295 msgid "New Group" msgstr "" #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:302 #, qt-format msgid "You joined group %1 " msgstr "" #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:306 #, qt-format msgid "You joined group %1" msgstr "" #: indicator/textchannelobserver.cpp:309 msgid "You joined a new group" msgstr "" #: indicator/textchannelobserver.cpp:328 msgid "View Group" msgstr "" #: indicator/textchannelobserver.cpp:367 indicator/ussdindicator.cpp:116 msgid "Ok" msgstr "" #: indicator/textchannelobserver.cpp:373 msgid "Save" msgstr "" #: indicator/textchannelobserver.cpp:468 msgid "Emergency Alert" msgstr "" #: indicator/textchannelobserver.cpp:471 msgid "Emergency Alert: Extreme" msgstr "" #: indicator/textchannelobserver.cpp:474 msgid "Emergency Alert: Severe" msgstr "" #: indicator/textchannelobserver.cpp:477 msgid "Emergency Alert: Notice" msgstr "" #: indicator/textchannelobserver.cpp:482 msgid "AMBER Alert" msgstr "" #: indicator/textchannelobserver.cpp:485 msgid "Alert" msgstr "" #: indicator/textchannelobserver.cpp:531 msgid "Show alert" msgstr "" #: indicator/textchannelobserver.cpp:604 #, qt-format msgid "Attachment: %1 image" msgid_plural "Attachments: %1 images" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:606 #, qt-format msgid "Attachment: %1 video" msgid_plural "Attachments: %1 videos" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:608 #, qt-format msgid "Attachment: %1 contact" msgid_plural "Attachments: %1 contacts" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:610 #, qt-format msgid "Attachment: %1 audio clip" msgid_plural "Attachments: %1 audio clips" msgstr[0] "" msgstr[1] "" #: indicator/textchannelobserver.cpp:612 #, qt-format msgid "Attachment: %1 file" msgid_plural "Attachments: %1 files" msgstr[0] "" msgstr[1] "" #. TRANSLATORS : message displayed when any error occurred while receiving a MMS (case when cellular-data is off, or any downloading issue). Notify that there was a message, the user can find more about it in the messaging-app. #: indicator/textchannelobserver.cpp:615 msgid "New MMS message" msgstr "" #. TRANSLATORS : %1 is the recipient name #: indicator/textchannelobserver.cpp:679 indicator/textchannelobserver.cpp:683 #, qt-format msgid "Message to group from %1" msgstr "" #: indicator/textchannelobserver.cpp:749 #, qt-format msgid "Message from %1" msgstr "" #: indicator/textchannelobserver.cpp:910 msgid "Please, select a SIM card:" msgstr "" #: indicator/ussdindicator.cpp:119 msgid "Reply" msgstr "" #: indicator/ussdindicator.cpp:142 msgid "Cancel" msgstr "" #: libtelephonyservice/callnotification.cpp:53 msgid "Conf call on hold" msgstr "" #: libtelephonyservice/callnotification.cpp:53 #, qt-format msgid "%1 call on hold" msgstr "" #: libtelephonyservice/callnotification.cpp:56 msgid "Conf call ended" msgstr "" #: libtelephonyservice/callnotification.cpp:56 #, qt-format msgid "%1 call ended" msgstr "" #: libtelephonyservice/callnotification.cpp:59 #, qt-format msgid "%1 call declined" msgstr "" #: libtelephonyservice/contactwatcher.cpp:157 msgid "Private Number" msgstr "" #: libtelephonyservice/contactwatcher.cpp:159 msgid "Unknown Number" msgstr "" telephony-service-0.5.3/po/zh_TW.po000066400000000000000000000261161455543255600172210ustar00rootroot00000000000000# Chinese (Traditional) translation for telephony-service # Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013 # This file is distributed under the same license as the telephony-service package. # FIRST AUTHOR , 2013. # msgid "" msgstr "" "Project-Id-Version: telephony-service\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2023-12-16 17:03+0100\n" "PO-Revision-Date: 2021-02-16 10:27+0000\n" "Last-Translator: louies0623 \n" "Language-Team: Chinese (Traditional) \n" "Language: zh_TW\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" "X-Generator: Weblate 3.11.3\n" "X-Launchpad-Export-Date: 2017-01-04 06:03+0000\n" #: indicator/telephony-service-call.desktop.in:4 msgid "Phone Calls" msgstr "來電" #: indicator/telephony-service-sms.desktop.in:4 msgid "SMS" msgstr "簡訊" #: approver/approver.cpp:66 msgid "Unknown caller" msgstr "來電者不明" #: approver/approver.cpp:94 msgid "I'm busy at the moment. I'll call later." msgstr "我現在很忙,稍後再撥給你。" #: approver/approver.cpp:95 msgid "I'm running late, on my way now." msgstr "我快遲到了,現在正在路上。" #: approver/approver.cpp:96 msgid "Please call me back later." msgstr "請待會再打給我。" #: approver/approver.cpp:457 #, qt-format msgid "On [%1]" msgstr "已開啟 [%1]" #: approver/approver.cpp:461 indicator/messagingmenu.cpp:414 msgid "Private number" msgstr "私人號碼" #: approver/approver.cpp:464 indicator/messagingmenu.cpp:244 #: indicator/messagingmenu.cpp:418 indicator/textchannelobserver.cpp:640 msgid "Unknown number" msgstr "未知號碼" #: approver/approver.cpp:470 approver/approver.cpp:485 msgid "Caller number is not available" msgstr "無法查看來電號碼" #: approver/approver.cpp:476 msgid "Calling from private number" msgstr "私人號碼來電" #: approver/approver.cpp:479 msgid "Calling from unknown number" msgstr "來電號碼不明" #: approver/approver.cpp:482 #, qt-format msgid "Calling from %1" msgstr "%1 來電" #: approver/approver.cpp:529 msgid "Hold + Answer" msgstr "Hold + 接聽" #: approver/approver.cpp:530 msgid "Accept" msgstr "接聽" #: approver/approver.cpp:543 msgid "End + Answer" msgstr "結束 + 接聽" #: approver/approver.cpp:552 msgid "Decline" msgstr "拒接" #: approver/approver.cpp:560 msgid "Message & decline" msgstr "傳訊息並拒接" #: approver/main.cpp:46 msgid "Telephony Service Approver" msgstr "電話操作服務核可員" #: indicator/authhandler.cpp:72 msgid "Authentication failed. Do you want to review your credentials?" msgstr "身分驗證失敗。你想要審查您的資歷嗎?" #: indicator/authhandler.cpp:91 msgid "Yes" msgstr "是" #: indicator/authhandler.cpp:94 msgid "No" msgstr "否" #: indicator/displaynamesettings.cpp:35 #, qt-format msgid "SIM %1" msgstr "SIM %1" #: indicator/main.cpp:53 msgid "Telephony Service Indicator" msgstr "電話服務指示器" #: indicator/messagingmenu.cpp:83 indicator/messagingmenu.cpp:87 msgid "Telephony Service" msgstr "電話服務" #: indicator/messagingmenu.cpp:151 indicator/messagingmenu.cpp:293 #: indicator/messagingmenu.cpp:360 msgid "Send" msgstr "傳送" #. TRANSLATORS : %1 is the group name and %2 is the recipient name #: indicator/messagingmenu.cpp:262 indicator/textchannelobserver.cpp:671 #: indicator/textchannelobserver.cpp:675 #, qt-format msgid "Message to %1 from %2" msgstr "從 %2 發送到 %1 的訊息" #. TRANSLATORS : %1 is the recipient name #: indicator/messagingmenu.cpp:265 indicator/messagingmenu.cpp:269 #, fuzzy, qt-format #| msgid "Message to group from %1" msgid "Message to the group from %1" msgstr "%1 到組的消息" #: indicator/messagingmenu.cpp:345 msgid "Call back" msgstr "回撥" #: indicator/messagingmenu.cpp:350 #, fuzzy #| msgid "I missed your call - can you call me now?" msgid "Missed your call — can you call me now?" msgstr "剛才沒聽到電話,可以現在打給我嗎?" #: indicator/messagingmenu.cpp:351 #, fuzzy #| msgid "I'm running late. I'm on my way." msgid "Running late. On my way." msgstr "正在來了,遲些才到。" #: indicator/messagingmenu.cpp:352 #, fuzzy #| msgid "I'm busy at the moment. I'll call you later." msgid "Busy at the moment. Will call you later." msgstr "現在正忙,晚點打給你。" #: indicator/messagingmenu.cpp:353 #, fuzzy #| msgid "I'll be 20 minutes late." msgid "I am 20 minutes late." msgstr "二十分鐘後到。" #: indicator/messagingmenu.cpp:354 #, fuzzy #| msgid "Sorry, I'm still busy. I'll call you later." msgid "Still busy. Will call you later." msgstr "抱歉,我還在忙。待會打給你。" #: indicator/messagingmenu.cpp:409 #, qt-format msgid "%1 missed call" msgid_plural "%1 missed calls" msgstr[0] "%1 通未接來電" #: indicator/messagingmenu.cpp:492 msgid "Voicemail messages" msgstr "語音留言訊息" #: indicator/messagingmenu.cpp:495 #, qt-format msgid "%1 voicemail message" msgid_plural "%1 voicemail messages" msgstr[0] "%1 通語音留言" #: indicator/messagingmenu.cpp:500 msgid "Voicemail" msgstr "語音留言" #: indicator/metrics.cpp:42 #, qt-format msgid "%1 text messages sent today" msgstr "今日發出 %1 封文字訊息" #: indicator/metrics.cpp:43 msgid "No text messages sent today" msgstr "今日沒有發出文字訊息" #: indicator/metrics.cpp:44 #, qt-format msgid "%1 text messages received today" msgstr "今日收到 %1 封文字訊息" #: indicator/metrics.cpp:45 msgid "No text messages received today" msgstr "今日沒有收到文字訊息" #: indicator/metrics.cpp:46 #, qt-format msgid "%1 calls received today" msgstr "今日收到 %1 個電話" #: indicator/metrics.cpp:47 msgid "No calls received today" msgstr "今日沒有收到電話" #: indicator/metrics.cpp:48 #, qt-format msgid "%1 calls made today" msgstr "今日打出 %1 個電話" #: indicator/metrics.cpp:49 indicator/metrics.cpp:51 msgid "No calls made today" msgstr "今日沒有打出電話" #: indicator/metrics.cpp:50 #, qt-format msgid "Spent %1 minutes in calls today" msgstr "今日打出的電話共用了 %1 分鐘" #: indicator/textchannelobserver.cpp:225 msgid "Unlock your sim card and try again from the messaging application." msgstr "請解鎖您的 SIM 卡,並回到訊息程式中再試一次。" #: indicator/textchannelobserver.cpp:227 msgid "Deactivate flight mode and try again from the messaging application." msgstr "請關閉飛安模式,並回到訊息程式中再試一次。" #: indicator/textchannelobserver.cpp:230 msgid "Try again from the messaging application." msgstr "請在訊息程式中再試一次。" #: indicator/textchannelobserver.cpp:236 msgid "The message could not be sent" msgstr "訊息無法傳送" #: indicator/textchannelobserver.cpp:249 indicator/textchannelobserver.cpp:713 msgid "View message" msgstr "檢視訊息" #: indicator/textchannelobserver.cpp:295 msgid "New Group" msgstr "新群組" #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:302 #, qt-format msgid "You joined group %1 " msgstr "您加入了 %1 群組 " #. TRANSLATORS : %1 is the group name #: indicator/textchannelobserver.cpp:306 #, qt-format msgid "You joined group %1" msgstr "您加入了 %1 群組" #: indicator/textchannelobserver.cpp:309 msgid "You joined a new group" msgstr "您加入了新群組" #: indicator/textchannelobserver.cpp:328 msgid "View Group" msgstr "檢視群組" #: indicator/textchannelobserver.cpp:367 indicator/ussdindicator.cpp:116 msgid "Ok" msgstr "確定" #: indicator/textchannelobserver.cpp:373 msgid "Save" msgstr "儲存" #: indicator/textchannelobserver.cpp:468 msgid "Emergency Alert" msgstr "" #: indicator/textchannelobserver.cpp:471 msgid "Emergency Alert: Extreme" msgstr "" #: indicator/textchannelobserver.cpp:474 msgid "Emergency Alert: Severe" msgstr "" #: indicator/textchannelobserver.cpp:477 msgid "Emergency Alert: Notice" msgstr "" #: indicator/textchannelobserver.cpp:482 msgid "AMBER Alert" msgstr "" #: indicator/textchannelobserver.cpp:485 msgid "Alert" msgstr "" #: indicator/textchannelobserver.cpp:531 msgid "Show alert" msgstr "" #: indicator/textchannelobserver.cpp:604 #, qt-format msgid "Attachment: %1 image" msgid_plural "Attachments: %1 images" msgstr[0] "附件:%1 個圖像" #: indicator/textchannelobserver.cpp:606 #, qt-format msgid "Attachment: %1 video" msgid_plural "Attachments: %1 videos" msgstr[0] "附件:%1 條影片" #: indicator/textchannelobserver.cpp:608 #, qt-format msgid "Attachment: %1 contact" msgid_plural "Attachments: %1 contacts" msgstr[0] "附件:%1 個聯絡人" #: indicator/textchannelobserver.cpp:610 #, qt-format msgid "Attachment: %1 audio clip" msgid_plural "Attachments: %1 audio clips" msgstr[0] "附件:%1 份音訊剪輯" #: indicator/textchannelobserver.cpp:612 #, qt-format msgid "Attachment: %1 file" msgid_plural "Attachments: %1 files" msgstr[0] "附件:%1 個檔案" #. TRANSLATORS : message displayed when any error occurred while receiving a MMS (case when cellular-data is off, or any downloading issue). Notify that there was a message, the user can find more about it in the messaging-app. #: indicator/textchannelobserver.cpp:615 #, fuzzy #| msgid "View message" msgid "New MMS message" msgstr "檢視訊息" #. TRANSLATORS : %1 is the recipient name #: indicator/textchannelobserver.cpp:679 indicator/textchannelobserver.cpp:683 #, qt-format msgid "Message to group from %1" msgstr "%1 到組的消息" #: indicator/textchannelobserver.cpp:749 #, qt-format msgid "Message from %1" msgstr "來自 %1 的訊息" #: indicator/textchannelobserver.cpp:910 msgid "Please, select a SIM card:" msgstr "請選擇一張 SIM 卡:" #: indicator/ussdindicator.cpp:119 msgid "Reply" msgstr "回覆" #: indicator/ussdindicator.cpp:142 msgid "Cancel" msgstr "取消" #: libtelephonyservice/callnotification.cpp:53 msgid "Conf call on hold" msgstr "" #: libtelephonyservice/callnotification.cpp:53 #, qt-format msgid "%1 call on hold" msgstr "" #: libtelephonyservice/callnotification.cpp:56 msgid "Conf call ended" msgstr "" #: libtelephonyservice/callnotification.cpp:56 #, qt-format msgid "%1 call ended" msgstr "" #: libtelephonyservice/callnotification.cpp:59 #, qt-format msgid "%1 call declined" msgstr "" #: libtelephonyservice/contactwatcher.cpp:157 msgid "Private Number" msgstr "私人號碼" #: libtelephonyservice/contactwatcher.cpp:159 msgid "Unknown Number" msgstr "號碼不明" #, fuzzy #~| msgid "Telephony Service" #~ msgid "telephony-service-call" #~ msgstr "電話服務" #, fuzzy #~| msgid "Telephony Service" #~ msgid "telephony-service-message" #~ msgstr "電話服務" #~ msgid "" #~ "Oops, there has been an error with the MMS system and this message could " #~ "not be retrieved. Please ensure Cellular Data is ON and MMS settings are " #~ "correct, then ask the sender to try again." #~ msgstr "" #~ "糟糕,媒體訊息系統出現錯誤,無法搜尋到這個訊息。 請確保基地台已打開並且媒" #~ "體訊息的設定是正確的,然後請寄件者重試。" telephony-service-0.5.3/protocols/000077500000000000000000000000001455543255600172265ustar00rootroot00000000000000telephony-service-0.5.3/protocols/CMakeLists.txt000066400000000000000000000001651455543255600217700ustar00rootroot00000000000000file(GLOB PROTOCOL_FILES *.protocol) install(FILES ${PROTOCOL_FILES} DESTINATION ${TELEPHONY_SERVICE_DIR}/protocols) telephony-service-0.5.3/protocols/README.protocols000066400000000000000000000043231455543255600221330ustar00rootroot00000000000000The protocol description file instructs telephony-service how to properly load the accounts, display and fallback or replace accounts by others. It is also a way to filter accounts that are not meant to be handle by the telephony-service stack. The file format is based on freedesktop's desktop file specification, but restricted to a few keys. All keys should be under the [Protocol] group, and here are the supported keys: - Name: the name of the protocol as exposed in the Telepathy framework - Features: describes what features this protocol supports. Acceptable values are: text, voice - FallbackProtocol: lists a protocol that should be used in case the given protocol is disconnected or not available - FallbackMatchRule: describes the rule to be used when matching accounts. Acceptable values are: match_any, match_properties - FallbackSourceProperty: in case the match rule is match_properties, this key describes the property to be used on this protocol to decide which account to fallback to. - FallbackDestinationProperty: in case the match rule is match_properties, this key describes the property to be used on the fallback protocol to decide which account to use as a fallback. - ShowOnSelector: informs whether this account should be used on selectors (as the ones seen in dialer-app and messaging-app) (0 or 1) - ShowOnlineStatus: informs whether online status of contacts for this account should be displayed. Default: 0 - BackgroundImage: a path to an image to be displayed in backgrounds where needed - Icon: a path to an icon to be used where needed - ServiceName: TODO: add description - ServiceDisplayName: TODO: add description - JoinExistingChannels: enabled if this protocol suppors joining existing chats - ReturnToSend: whether the UI should send messages when return or enter are pressed - EnableAttachments: whether the UI should allow users to send attachments - EnableRejoin: whether users can manually rejoin existing chats - EnableTabCompletion: whether the UI should allow tab complation - LeaveRoomsOnClose: whether the account should be disconnected when the UI is closed - EnableChatStates: whether the UI should display chat states like user typing and so on telephony-service-0.5.3/protocols/ofono.protocol000066400000000000000000000003661455543255600221360ustar00rootroot00000000000000[Protocol] Name=ofono Features=text,voice FallbackProtocol= BackgroundImage=/usr/share/telephony-service/assets/message_watermark.png ShowOnSelector=1 JoinExistingChannels=0 ReturnToSend=0 EnableAttachments=1 EnableRejoin=0 EnableTabCompletion=0 telephony-service-0.5.3/protocols/sip.protocol000066400000000000000000000002471455543255600216070ustar00rootroot00000000000000[Protocol] Name=sip Features=voice FallbackProtocol= BackgroundImage=/usr/share/telephony-service/assets/message_watermark.png ShowOnSelector=1 ServiceDisplayName=SIP telephony-service-0.5.3/run_all_tests.sh000077500000000000000000000000721455543255600204160ustar00rootroot00000000000000#!/bin/sh export CTEST_OUTPUT_ON_FAILURE=1 make make test telephony-service-0.5.3/tests/000077500000000000000000000000001455543255600163445ustar00rootroot00000000000000telephony-service-0.5.3/tests/CMakeLists.txt000066400000000000000000000003621455543255600211050ustar00rootroot00000000000000include (GenerateTest) add_subdirectory(common) add_subdirectory(handler) add_subdirectory(libtelephonyservice) add_subdirectory(Lomiri.Telephony) if (WANT_UI_SERVICES) add_subdirectory(approver) add_subdirectory(indicator) endif() telephony-service-0.5.3/tests/Lomiri.Telephony/000077500000000000000000000000001455543255600215455ustar00rootroot00000000000000telephony-service-0.5.3/tests/Lomiri.Telephony/CMakeLists.txt000066400000000000000000000022651455543255600243120ustar00rootroot00000000000000include_directories( ${CMAKE_CURRENT_BINARY_DIR} ${TP_QT5_INCLUDE_DIRS} ${CMAKE_SOURCE_DIR}/Lomiri/Telephony ${CMAKE_SOURCE_DIR}/libtelephonyservice ${CMAKE_SOURCE_DIR}/tests/common ${CMAKE_BINARY_DIR}/tests/common ${GSETTINGS_QT_INCLUDE_DIRS} ) set(SOURCE_DIR ${CMAKE_SOURCE_DIR}/Lomiri/Telephony) generate_test(ContactWatcherTest USE_UI SOURCES ContactWatcherTest.cpp LIBRARIES telephonyservice-qml Qt5::Contacts Qt5::Core Qt5::DBus Qt5::Qml Qt5::Test) if(NOT SKIP_QML_TESTS) generate_test(context_properties QML_TEST tst_contextProperties.qml) generate_test(phonenumber_field QML_TEST tst_PhoneNumberField.qml) generate_test(phonenumber_input QML_TEST tst_PhoneNumberInput.qml) generate_test(phonenumber_utils QML_TEST tst_PhoneNumberPhoneUtils.qml) endif() generate_telepathy_test(PresenceRequestTest SOURCES PresenceRequestTest.cpp LIBRARIES ${TP_QT5_LIBRARIES} telephonyservice mockcontroller telepathytest telephonyservice-qml) # make the files visible on qtcreator file(GLOB QML_TESTS *.qml *.js) add_custom_target(telephonyservice_QMLTESTS ALL SOURCES ${QML_TESTS}) telephony-service-0.5.3/tests/Lomiri.Telephony/ContactWatcherTest.cpp000066400000000000000000000544511455543255600260330ustar00rootroot00000000000000/* * Copyright (C) 2013-2015 Canonical, Ltd. * * This file is part of telephony-service. * * telephony-service is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; version 3. * * telephony-service 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 . */ #include #include #include "contactwatcher.h" #include "contactutils.h" #include #include #include #include QTCONTACTS_USE_NAMESPACE class ContactWatcherTest : public QObject { Q_OBJECT private Q_SLOTS: void initTestCase(); void testIdentifier(); void testMatchExistingContact(); void testMatchNewContact(); void testMatchContactChanged(); void testClearAfterContactChanged(); void testContactRemoval(); void testClearPhoneNumber(); void testInteractiveProperty_data(); void testInteractiveProperty(); void testLateSearch(); void testAddressableFields(); void testExtendedFieldMatch(); void testSimilarPhoneNumbers(); private: QContact createContact(const QString &firstName, const QString &lastName, const QString &avatarUrl, const QStringList &phoneNumbers, const QList &subTypes, const QList &contexts); void clearManager(); QContactManager *mManager; }; void ContactWatcherTest::initTestCase() { // instanciate the shared manager using the memory backend mManager = ContactUtils::sharedManager("memory"); } void ContactWatcherTest::testIdentifier() { QString identifier("123456"); ContactWatcher watcher; QSignalSpy spy(&watcher, SIGNAL(identifierChanged())); watcher.setIdentifier(identifier); QCOMPARE(spy.count(), 1); QCOMPARE(watcher.identifier(), identifier); } void ContactWatcherTest::testMatchExistingContact() { QString identifier("12345"); QContact contact = createContact("FirstName", "LastName", "file://some_file", QStringList() << identifier, QList() << 0 << 1 << 2, QList() << 3 << 4 << 5); ContactWatcher watcher; watcher.componentComplete(); QSignalSpy contactIdSpy(&watcher, SIGNAL(contactIdChanged())); QSignalSpy aliasSpy(&watcher, SIGNAL(aliasChanged())); QSignalSpy avatarSpy(&watcher, SIGNAL(avatarChanged())); QSignalSpy detailPropertiesSpy(&watcher, SIGNAL(detailPropertiesChanged())); QSignalSpy unknownSpy(&watcher, SIGNAL(isUnknownChanged())); // set the phone number and wait for the match to happen watcher.setIdentifier(identifier); watcher.setAddressableFields(QStringList() << "tel"); // contact fetching is asynchronous so use QTRY_COMPARE for the first signal spy // for the subsequent ones it is fine to use just QCOMPARE QTRY_COMPARE(contactIdSpy.count(), 1); QCOMPARE(aliasSpy.count(), 1); QCOMPARE(avatarSpy.count(), 1); QCOMPARE(detailPropertiesSpy.count(), 1); QCOMPARE(unknownSpy.count(), 1); // and verify that the values are properly set QCOMPARE(watcher.contactId(), contact.id().toString()); QCOMPARE(watcher.alias(), ContactUtils::formatContactName(contact)); QCOMPARE(watcher.avatar(), contact.detail().imageUrl().toString()); QCOMPARE(watcher.unwrapIntList(watcher.detailProperties()["phoneNumberContexts"].toList()), contact.detail().contexts()); QCOMPARE(watcher.unwrapIntList(watcher.detailProperties()["phoneNumberSubTypes"].toList()), contact.detail().subTypes()); QCOMPARE(watcher.isUnknown(), false); clearManager(); } void ContactWatcherTest::testMatchNewContact() { QString identifier("1234567"); ContactWatcher watcher; watcher.componentComplete(); QSignalSpy contactIdSpy(&watcher, SIGNAL(contactIdChanged())); QSignalSpy aliasSpy(&watcher, SIGNAL(aliasChanged())); QSignalSpy avatarSpy(&watcher, SIGNAL(avatarChanged())); QSignalSpy detailPropertiesSpy(&watcher, SIGNAL(detailPropertiesChanged())); QSignalSpy unknownSpy(&watcher, SIGNAL(isUnknownChanged())); watcher.setIdentifier(identifier); watcher.setAddressableFields(QStringList() << "tel"); // now create the contact and wait to see if it gets matched QContact contact = createContact("FirstName", "LastName", "file://some_file", // just to make it a little more complicated, use a prefixed phone number QStringList() << identifier.prepend("+1"), QList() << 0 << 1 << 2, QList() << 3 << 4 << 5); // contact fetching is asynchronous so use QTRY_COMPARE for the first signal spy // for the subsequent ones it is fine to use just QCOMPARE QTRY_COMPARE(contactIdSpy.count(), 1); QCOMPARE(aliasSpy.count(), 1); QCOMPARE(avatarSpy.count(), 1); QCOMPARE(detailPropertiesSpy.count(), 1); QCOMPARE(unknownSpy.count(), 1); // and verify that the values are properly set QCOMPARE(watcher.contactId(), contact.id().toString()); QCOMPARE(watcher.alias(), ContactUtils::formatContactName(contact)); QCOMPARE(watcher.avatar(), contact.detail().imageUrl().toString()); QCOMPARE(watcher.unwrapIntList(watcher.detailProperties()["phoneNumberContexts"].toList()), contact.detail().contexts()); QCOMPARE(watcher.unwrapIntList(watcher.detailProperties()["phoneNumberSubTypes"].toList()), contact.detail().subTypes()); QCOMPARE(watcher.isUnknown(), false); clearManager(); } void ContactWatcherTest::testMatchContactChanged() { QString identifier("12345"); QContact contact = createContact("FirstName", "LastName", "file://some_file", QStringList() << "456456456", // a different phone number QList() << 0 << 1 << 2, QList() << 3 << 4 << 5); ContactWatcher watcher; watcher.componentComplete(); watcher.setIdentifier(identifier); watcher.setAddressableFields(QStringList() << "tel"); QSignalSpy contactIdSpy(&watcher, SIGNAL(contactIdChanged())); QSignalSpy aliasSpy(&watcher, SIGNAL(aliasChanged())); QSignalSpy avatarSpy(&watcher, SIGNAL(avatarChanged())); QSignalSpy detailPropertiesSpy(&watcher, SIGNAL(detailPropertiesChanged())); QSignalSpy unknownSpy(&watcher, SIGNAL(isUnknownChanged())); // now modify the contact´s phone number so that it matches QContactPhoneNumber number = contact.detail(); number.setNumber(identifier); contact.saveDetail(&number); mManager->saveContact(&contact); // contact fetching is asynchronous so use QTRY_COMPARE for the first signal spy // for the subsequent ones it is fine to use just QCOMPARE QTRY_COMPARE(contactIdSpy.count(), 1); QCOMPARE(aliasSpy.count(), 1); QCOMPARE(avatarSpy.count(), 1); QCOMPARE(detailPropertiesSpy.count(), 1); QCOMPARE(unknownSpy.count(), 1); // and verify that the values are properly set QCOMPARE(watcher.contactId(), contact.id().toString()); QCOMPARE(watcher.alias(), ContactUtils::formatContactName(contact)); QCOMPARE(watcher.avatar(), contact.detail().imageUrl().toString()); QCOMPARE(watcher.unwrapIntList(watcher.detailProperties()["phoneNumberContexts"].toList()), contact.detail().contexts()); QCOMPARE(watcher.unwrapIntList(watcher.detailProperties()["phoneNumberSubTypes"].toList()), contact.detail().subTypes()); QCOMPARE(watcher.isUnknown(), false); clearManager(); } void ContactWatcherTest::testClearAfterContactChanged() { // after modifying a contact, if the phone number doesn´t match anymore, the data should be cleared // verify that this happens, but first we need to make sure the match actually happened QString identifier("12345"); QContact contact = createContact("FirstName", "LastName", "file://some_file", QStringList() << identifier, QList() << 0 << 1 << 2, QList() << 3 << 4 << 5); ContactWatcher watcher; watcher.componentComplete(); QSignalSpy contactIdSpy(&watcher, SIGNAL(contactIdChanged())); // set the phone number and wait for the match to happen watcher.setIdentifier(identifier); watcher.setAddressableFields(QStringList() << "tel"); // at this point we just need to make sure the contactId is correct, the other fields // are tested in a separate test QTRY_COMPARE(contactIdSpy.count(), 1); QCOMPARE(watcher.contactId(), contact.id().toString()); contactIdSpy.clear(); QSignalSpy aliasSpy(&watcher, SIGNAL(aliasChanged())); QSignalSpy avatarSpy(&watcher, SIGNAL(avatarChanged())); QSignalSpy detailPropertiesSpy(&watcher, SIGNAL(detailPropertiesChanged())); QSignalSpy unknownSpy(&watcher, SIGNAL(isUnknownChanged())); // now modify the contact´s phone number so that it doesn´t match anymore QContactPhoneNumber number = contact.detail(); number.setNumber("43345476"); contact.saveDetail(&number); mManager->saveContact(&contact); QTRY_COMPARE(contactIdSpy.count(), 1); QCOMPARE(aliasSpy.count(), 1); QCOMPARE(avatarSpy.count(), 1); QCOMPARE(detailPropertiesSpy.count(), 1); QCOMPARE(unknownSpy.count(), 1); // and verify that the values are properly cleared QVERIFY(watcher.contactId().isEmpty()); QVERIFY(watcher.alias().isEmpty()); QVERIFY(watcher.avatar().isEmpty()); QVERIFY(watcher.detailProperties().isEmpty()); QVERIFY(watcher.isUnknown()); clearManager(); } void ContactWatcherTest::testContactRemoval() { // after removing a contact, the contact match should be cleared // verify that this happens, but first we need to make sure the match actually happened QString identifier("12345"); QContact contact = createContact("FirstName", "LastName", "file://some_file", QStringList() << identifier, QList() << 0 << 1 << 2, QList() << 3 << 4 << 5); ContactWatcher watcher; watcher.componentComplete(); QSignalSpy contactIdSpy(&watcher, SIGNAL(contactIdChanged())); // set the phone number and wait for the match to happen watcher.setIdentifier(identifier); watcher.setAddressableFields(QStringList() << "tel"); // at this point we just need to make sure the contactId is correct, the other fields // are tested in a separate test QTRY_COMPARE(contactIdSpy.count(), 1); QCOMPARE(watcher.contactId(), contact.id().toString()); contactIdSpy.clear(); QSignalSpy aliasSpy(&watcher, SIGNAL(aliasChanged())); QSignalSpy avatarSpy(&watcher, SIGNAL(avatarChanged())); QSignalSpy detailPropertiesSpy(&watcher, SIGNAL(detailPropertiesChanged())); QSignalSpy unknownSpy(&watcher, SIGNAL(isUnknownChanged())); // now remove the contact mManager->removeContact(contact.id()); QTRY_COMPARE(contactIdSpy.count(), 1); QCOMPARE(aliasSpy.count(), 1); QCOMPARE(avatarSpy.count(), 1); QCOMPARE(detailPropertiesSpy.count(), 1); QCOMPARE(unknownSpy.count(), 1); // and verify that the values are properly cleared QVERIFY(watcher.contactId().isEmpty()); QVERIFY(watcher.alias().isEmpty()); QVERIFY(watcher.avatar().isEmpty()); QVERIFY(watcher.detailProperties().isEmpty()); QVERIFY(watcher.isUnknown()); clearManager(); } void ContactWatcherTest::testClearPhoneNumber() { // clearing a phone number should trigger the contact data to be cleared too // after removing a contact, the contact match should be cleared // verify that this happens, but first we need to make sure the match actually happened QString identifier("12345"); QContact contact = createContact("FirstName", "LastName", "file://some_file", QStringList() << identifier, QList() << 0 << 1 << 2, QList() << 3 << 4 << 5); ContactWatcher watcher; watcher.componentComplete(); QSignalSpy contactIdSpy(&watcher, SIGNAL(contactIdChanged())); // set the phone number and wait for the match to happen watcher.setIdentifier(identifier); watcher.setAddressableFields(QStringList() << "tel"); // at this point we just need to make sure the contactId is correct, the other fields // are tested in a separate test QTRY_COMPARE(contactIdSpy.count(), 1); QCOMPARE(watcher.contactId(), contact.id().toString()); contactIdSpy.clear(); QSignalSpy aliasSpy(&watcher, SIGNAL(aliasChanged())); QSignalSpy avatarSpy(&watcher, SIGNAL(avatarChanged())); QSignalSpy detailPropertiesSpy(&watcher, SIGNAL(detailPropertiesChanged())); QSignalSpy unknownSpy(&watcher, SIGNAL(isUnknownChanged())); // now clear the phone number watcher.setIdentifier(""); QCOMPARE(contactIdSpy.count(), 1); QCOMPARE(aliasSpy.count(), 1); QCOMPARE(avatarSpy.count(), 1); QCOMPARE(detailPropertiesSpy.count(), 1); QCOMPARE(unknownSpy.count(), 1); // and verify that the values are properly cleared QVERIFY(watcher.contactId().isEmpty()); QVERIFY(watcher.alias().isEmpty()); QVERIFY(watcher.avatar().isEmpty()); QVERIFY(watcher.detailProperties().isEmpty()); QVERIFY(watcher.isUnknown()); clearManager(); } void ContactWatcherTest::testInteractiveProperty_data() { QTest::addColumn("identifier"); QTest::addColumn("signalCount"); QTest::addColumn("interactive"); QTest::newRow("valid phone number") << "98765432" << 1 << true; QTest::newRow("ofono private phone number") << OFONO_PRIVATE_NUMBER << 0 << false; QTest::newRow("ofono unknown number") << OFONO_UNKNOWN_NUMBER << 0 << false; QTest::newRow("empty phone number") << "" << 0 << false; } void ContactWatcherTest::testInteractiveProperty() { QFETCH(QString, identifier); QFETCH(int, signalCount); QFETCH(bool, interactive); ContactWatcher watcher; watcher.componentComplete(); QSignalSpy spy(&watcher, SIGNAL(interactiveChanged())); watcher.setIdentifier(identifier); // the initial interactive value is false it will not change in case of invalid phones QTRY_COMPARE(spy.count(), signalCount); QCOMPARE(watcher.interactive(), interactive); } void ContactWatcherTest::testLateSearch() { QString identifier("12345"); QContact contact = createContact("FirstName", "LastName", "file://some_file", QStringList() << identifier, QList() << 0 << 1 << 2, QList() << 3 << 4 << 5); ContactWatcher watcher; QSignalSpy contactIdSpy(&watcher, SIGNAL(contactIdChanged())); QSignalSpy aliasSpy(&watcher, SIGNAL(aliasChanged())); QSignalSpy avatarSpy(&watcher, SIGNAL(avatarChanged())); QSignalSpy detailPropertiesSpy(&watcher, SIGNAL(detailPropertiesChanged())); QSignalSpy unknownSpy(&watcher, SIGNAL(isUnknownChanged())); // set the phone number and wait for the match to happen watcher.setIdentifier(identifier); watcher.setAddressableFields(QStringList() << "tel"); // component not complete yet QTRY_COMPARE(contactIdSpy.count(), 0); QCOMPARE(aliasSpy.count(), 0); QCOMPARE(avatarSpy.count(), 0); QCOMPARE(detailPropertiesSpy.count(), 0); QCOMPARE(unknownSpy.count(), 0); // mark as complete watcher.componentComplete(); // signal will be fired now QTRY_COMPARE(contactIdSpy.count(), 1); QCOMPARE(aliasSpy.count(), 1); QCOMPARE(avatarSpy.count(), 1); QCOMPARE(detailPropertiesSpy.count(), 1); QCOMPARE(unknownSpy.count(), 1); // and verify that the values are properly set QCOMPARE(watcher.contactId(), contact.id().toString()); QCOMPARE(watcher.alias(), ContactUtils::formatContactName(contact)); QCOMPARE(watcher.avatar(), contact.detail().imageUrl().toString()); QCOMPARE(watcher.unwrapIntList(watcher.detailProperties()["phoneNumberContexts"].toList()), contact.detail().contexts()); QCOMPARE(watcher.unwrapIntList(watcher.detailProperties()["phoneNumberSubTypes"].toList()), contact.detail().subTypes()); QCOMPARE(watcher.isUnknown(), false); clearManager(); } void ContactWatcherTest::testAddressableFields() { ContactWatcher watcher; // check that addressable fields contains "tel" by default QCOMPARE(watcher.addressableFields().count(), 0); QCOMPARE(watcher.addressableFields(), QStringList()); QSignalSpy addressableFieldsSpy(&watcher, SIGNAL(addressableFieldsChanged())); QStringList addressableFields; addressableFields << "x-jabber" << "tel" << "x-sip"; watcher.setAddressableFields(addressableFields); QCOMPARE(addressableFieldsSpy.count(), 1); QCOMPARE(watcher.addressableFields(), addressableFields); // set the addressable fields to an empty value and make sure it falls back to "tel" watcher.setAddressableFields(QStringList()); QCOMPARE(watcher.addressableFields().count(), 0); QCOMPARE(watcher.addressableFields(), QStringList()); } void ContactWatcherTest::testExtendedFieldMatch() { QString field("x-jabber"); QString identifier("foo.bar@someserver.jabber"); QContact contact = createContact("FirstName", "LastName", "file://some_file", QStringList() << "12345", QList() << 0 << 1 << 2, QList() << 3 << 4 << 5); // now add the extended info to the contact QContactExtendedDetail detail; detail.setName(field); detail.setData(identifier); contact.appendDetail(detail); mManager->saveContact(&contact); // now create the watcher and check that it matches this field ContactWatcher watcher; QSignalSpy contactIdSpy(&watcher, SIGNAL(contactIdChanged())); watcher.setIdentifier(identifier); watcher.setAddressableFields(QStringList() << field); watcher.componentComplete(); QTRY_COMPARE(contactIdSpy.count(), 1); QCOMPARE(watcher.contactId(), contact.id().toString()); } void ContactWatcherTest::testSimilarPhoneNumbers() { QString contactIdentifierA("+352 661 123456"); QString contactIdentifierB("+352 691 123456"); QContact contactA = createContact("FirstName", "LastName", "file://some_file", QStringList() << contactIdentifierA, QList() << 0 << 1 << 2, QList() << 3 << 4 << 5); QContact contactB = createContact("FirstName", "LastName", "file://some_file", QStringList() << contactIdentifierB, QList() << 0 << 1 << 2, QList() << 3 << 4 << 5); ContactWatcher watcherA; QSignalSpy contactIdSpyA(&watcherA, SIGNAL(contactIdChanged())); // try to match contact A watcherA.setIdentifier(contactIdentifierA); watcherA.setAddressableFields(QStringList() << "tel"); // mark as complete watcherA.componentComplete(); // signal will be fired now QTRY_COMPARE(contactIdSpyA.count(), 1); QCOMPARE(watcherA.contactId(), contactA.id().toString()); ContactWatcher watcherB; QSignalSpy contactIdSpyB(&watcherB, SIGNAL(contactIdChanged())); // mark as complete watcherB.componentComplete(); // try to match contact B watcherB.setIdentifier(contactIdentifierB); watcherB.setAddressableFields(QStringList() << "tel"); // signal will be fired now QTRY_COMPARE(contactIdSpyB.count(), 1); QCOMPARE(watcherB.contactId(), contactB.id().toString()); } QContact ContactWatcherTest::createContact(const QString &firstName, const QString &lastName, const QString &avatarUrl, const QStringList &phoneNumbers, const QList &subTypes, const QList &contexts) { QContact contact; // Name QContactName name; name.setFirstName(firstName); name.setLastName(lastName); contact.saveDetail(&name); // Avatar QContactAvatar avatar; avatar.setImageUrl(avatarUrl); contact.saveDetail(&avatar); Q_FOREACH(const QString &phoneNumber, phoneNumbers) { QContactPhoneNumber number; number.setNumber(phoneNumber); number.setSubTypes(subTypes); number.setContexts(contexts); contact.saveDetail(&number); } mManager->saveContact(&contact); return contact; } void ContactWatcherTest::clearManager() { Q_FOREACH(QContact contact, mManager->contacts()) { mManager->removeContact(contact.id()); } } QTEST_MAIN(ContactWatcherTest) #include "ContactWatcherTest.moc" telephony-service-0.5.3/tests/Lomiri.Telephony/PresenceRequestTest.cpp000066400000000000000000000072521455543255600262340ustar00rootroot00000000000000/* * Copyright (C) 2015 Canonical, Ltd. * * This file is part of telephony-service. * * telephony-service is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; version 3. * * telephony-service 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 . */ #include #include #include #include "telepathytest.h" #include "presencerequest.h" #include "telepathyhelper.h" #include "mockcontroller.h" #include "accountentryfactory.h" Q_DECLARE_METATYPE(AccountEntry*) class PresenceRequestTest : public TelepathyTest { Q_OBJECT private Q_SLOTS: void initTestCase(); void init(); void cleanup(); void testContactPresenceChange_data(); void testContactPresenceChange(); private: Tp::AccountPtr mTpAccount; AccountEntry *mAccount; MockController *mMockController; }; void PresenceRequestTest::initTestCase() { qRegisterMetaType(); initialize(); TelepathyHelper::instance()->registerChannelObserver(); } void PresenceRequestTest::init() { QSignalSpy accountSpy(TelepathyHelper::instance(), SIGNAL(accountAdded(AccountEntry*))); mTpAccount = addAccount("mock", "mock", "the account"); QVERIFY(!mTpAccount.isNull()); TRY_COMPARE(accountSpy.count(), 1); mAccount = qobject_cast(accountSpy.first().first().value()); QVERIFY(mAccount); TRY_VERIFY(mAccount->ready()); TRY_COMPARE(mAccount->status(), QString("available")); // and create the mock controller mMockController = new MockController("mock", this); } void PresenceRequestTest::cleanup() { doCleanup(); mMockController->deleteLater(); mAccount->deleteLater(); } void PresenceRequestTest::testContactPresenceChange_data() { QTest::addColumn("id"); QTest::addColumn("presenceType"); QTest::addColumn("status"); QTest::addColumn("statusMessage"); QTest::newRow("contact 1 online") << "contact1@test.com" << (int)Tp::ConnectionPresenceTypeAvailable << "online" << "message 1"; QTest::newRow("contact 1 offline") << "contact1@test.com" << (int)Tp::ConnectionPresenceTypeOffline << "offline" << ""; QTest::newRow("contact 2 online") << "contact2@test.com" << (int)Tp::ConnectionPresenceTypeAvailable << "online" << "message 2"; QTest::newRow("contact 2 offline") << "contact2@test.com" << (int)Tp::ConnectionPresenceTypeOffline << "offline" << ""; } void PresenceRequestTest::testContactPresenceChange() { QFETCH(QString, id); QFETCH(int, presenceType); QFETCH(QString, status); QFETCH(QString, statusMessage); PresenceRequest presenceRequest; QSignalSpy presenceRequestSpy(&presenceRequest, SIGNAL(typeChanged())); presenceRequest.setAccountId(mAccount->accountId()); presenceRequest.setIdentifier(id); presenceRequest.componentComplete(); mMockController->SetContactPresence(id, presenceType, status, statusMessage); TRY_COMPARE(presenceRequestSpy.count(), 1); TRY_COMPARE(presenceRequest.identifier(), id); TRY_COMPARE(presenceRequest.type(), (uint)presenceType); TRY_COMPARE(presenceRequest.status(), status); TRY_COMPARE(presenceRequest.statusMessage(), statusMessage); } QTEST_MAIN(PresenceRequestTest) #include "PresenceRequestTest.moc" telephony-service-0.5.3/tests/Lomiri.Telephony/tst_PhoneNumberData.js000066400000000000000000000071021455543255600260110ustar00rootroot00000000000000/* * Copyright (C) 2014 Canonical, Ltd. * * This file is part of telephony-service. * * telephony-service is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; version 3. * * telephony-service 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 . */ function reset_item(item) { item.defaultRegion = "US" item.autoFormat = true item.text = "" item.cursorPosition = 0 item.updateOnlyWhenFocused = false } function formatPhone_data() { var data = []; data.push({input: "7572923", expectedOutput: "757-2923", expectedCursorPosition: 8}) // Local number data.push({input: "7327572923", expectedOutput: "(732) 757-2923", expectedCursorPosition: 14}) // Country number data.push({input: "+558187042155", expectedOutput: "+55 81 8704-2155", expectedCursorPosition: 16}) // International number data.push({input: "55555555555", expectedOutput: "55555555555", expectedCursorPosition: 11}) // Ivalid number data.push({input: "123#", expectedOutput: "123#", expectedCursorPosition: 4}) // Special number data.push({input: "#123#", expectedOutput: "#123#", expectedCursorPosition: 5}) data.push({input: "*144", expectedOutput: "*144", expectedCursorPosition: 4}) data.push({input: "123#456", expectedOutput: "123#456", expectedCursorPosition: 7}) data.push({input: "123,456", expectedOutput: "123,456", expectedCursorPosition: 7}) data.push({input: "123,;456;", expectedOutput: "123,;456;", expectedCursorPosition: 9}) data.push({input: "1+2;3,4*5#6;", expectedOutput: "1+2;3,4*5#6;", expectedCursorPosition: 12}) return data } function modifyPhone_data() { var data = []; // Input a number data.push({input: "555", formatedInput: "555", moveCursor: 3, action: "insert", text: "5", newFormatedInput: "555-5", expectedCursorPosition: 5}) // change a number and keep the format data.push({input: "7327572923", formatedInput: "(732) 757-2923", moveCursor: 4, action: "remove", text: "", newFormatedInput: "(737) 572-923", expectedCursorPosition: 3}) // fix a number wrong formatted data.push({input: "01234567890", formatedInput: "01234567890", moveCursor: 10, action: "remove", text: "", newFormatedInput: "(012) 345-6780", expectedCursorPosition: 13}) data.push({input: "75772923", formatedInput: "(757) 729-23", moveCursor: 7, action: "remove", text: "", newFormatedInput: "757-2923", expectedCursorPosition: 3}) data.push({input: "08199086488", formatedInput: "08199086488", moveCursor: 3, action: "remove", text: "", newFormatedInput: "(089) 908-6488", expectedCursorPosition: 3}) // special numbers data.push({input: "123", formatedInput: "1 23", moveCursor: 4, action: "insert", text: "#", newFormatedInput: "123#", expectedCursorPosition: 4}) data.push({input: "144", formatedInput: "1 44", moveCursor: 0, action: "insert", text: "*", newFormatedInput: "*144", expectedCursorPosition: 1}) return data } telephony-service-0.5.3/tests/Lomiri.Telephony/tst_PhoneNumberField.qml000066400000000000000000000047631455543255600263520ustar00rootroot00000000000000/* * Copyright (C) 2014 Canonical, Ltd. * * This file is part of telephony-service. * * telephony-service is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; version 3. * * telephony-service 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 . */ import QtQuick 2.0 import QtTest 1.0 import Lomiri.Telephony.PhoneNumber 0.1 import "tst_PhoneNumberData.js" as TestData TestCase { id: phoneNumberFieldTest name: "PhoneNumberFieldTest" function init() { TestData.reset_item(phoneField) } function test_updateOnlyWhenFocused() { phoneField.updateOnlyWhenFocused = false compare(phoneField.updateOnlyWhenFocused, false) } function test_formatPhone_data() { return TestData.formatPhone_data() } function test_formatPhone(data) { phoneField.insert(0, data.input) tryCompare(phoneField, "text", data.expectedOutput) tryCompare(phoneField, "cursorPosition", data.expectedCursorPosition) } function test_modifyPhone_data() { return TestData.modifyPhone_data() } function test_modifyPhone(data) { phoneField.text = data.input tryCompare(phoneField, "text", data.formatedInput) phoneField.cursorPosition = data.moveCursor tryCompare(phoneField, "cursorPosition", data.moveCursor) switch (data.action) { case "remove": phoneField.remove(data.moveCursor, data.moveCursor-1) break; case "insert": phoneField.insert(data.moveCursor, data.text) } tryCompare(phoneField, "text", data.newFormatedInput) tryCompare(phoneField, "cursorPosition", data.expectedCursorPosition) } function test_update_autoFormater() { phoneField.autoFormat = false phoneField.text = "7572923" compare(phoneField.text, "7572923") phoneField.autoFormat = true compare(phoneField.text, "757-2923") } PhoneNumberField { id: phoneField focus: true autoFormat: true defaultRegion: "US" } } telephony-service-0.5.3/tests/Lomiri.Telephony/tst_PhoneNumberInput.qml000066400000000000000000000047631455543255600264260ustar00rootroot00000000000000/* * Copyright (C) 2014 Canonical, Ltd. * * This file is part of telephony-service. * * telephony-service is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; version 3. * * telephony-service 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 . */ import QtQuick 2.0 import QtTest 1.0 import Lomiri.Telephony.PhoneNumber 0.1 import "tst_PhoneNumberData.js" as TestData TestCase { id: phoneNumberInputTest name: "PhoneNumberInputTest" function init() { TestData.reset_item(phoneInput) } function test_updateOnlyWhenFocused() { phoneInput.updateOnlyWhenFocused = false compare(phoneInput.updateOnlyWhenFocused, false) } function test_formatPhone_data() { return TestData.formatPhone_data() } function test_formatPhone(data) { phoneInput.insert(0, data.input) tryCompare(phoneInput, "text", data.expectedOutput) tryCompare(phoneInput, "cursorPosition", data.expectedCursorPosition) } function test_modifyPhone_data() { return TestData.modifyPhone_data() } function test_modifyPhone(data) { phoneInput.text = data.input tryCompare(phoneInput, "text", data.formatedInput) phoneInput.cursorPosition = data.moveCursor tryCompare(phoneInput, "cursorPosition", data.moveCursor) switch (data.action) { case "remove": phoneInput.remove(data.moveCursor, data.moveCursor-1) break; case "insert": phoneInput.insert(data.moveCursor, data.text) } tryCompare(phoneInput, "text", data.newFormatedInput) tryCompare(phoneInput, "cursorPosition", data.expectedCursorPosition) } function test_update_autoFormater() { phoneInput.autoFormat = false phoneInput.text = "7572923" compare(phoneInput.text, "7572923") phoneInput.autoFormat = true compare(phoneInput.text, "757-2923") } PhoneNumberInput { id: phoneInput focus: true autoFormat: true defaultRegion: "US" } } telephony-service-0.5.3/tests/Lomiri.Telephony/tst_PhoneNumberPhoneUtils.qml000066400000000000000000000077011455543255600274140ustar00rootroot00000000000000/* * Copyright (C) 2014 Canonical, Ltd. * * This file is part of telephony-service. * * telephony-service is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; version 3. * * telephony-service 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 . */ import QtQuick 2.2 import QtTest 1.0 import Lomiri.Telephony.PhoneNumber 0.1 as PhoneNumber TestCase { id: phoneNumberPhoneUtils name: "phoneNumberPhoneUtils" function test_formatPhone_data() { var data = []; data.push({input: "6681800", expectedOutput: "668-1800"}) // Local number data.push({input: "7327572923", expectedOutput: "(732) 757-2923"}) // Country number data.push({input: "+558187042155", expectedOutput: "+55 81 8704-2155"}) // International number data.push({input: "55555555555", expectedOutput: "55555555555"}) // Invalid number data.push({input: "*144", expectedOutput: "*144"}) // Special number data.push({input: "#123#", expectedOutput: "#123#"}) // Operators command return data } function test_formatPhone(data) { var formatted = PhoneNumber.PhoneUtils.format(data.input, "US") compare(formatted, data.expectedOutput) } function test_locale() { var localeName = Qt.locale().name compare(PhoneNumber.PhoneUtils.defaultRegion, localeName.substr(localeName.length - 2, 2)) } function test_matchPhone_data() { var data = []; data.push({text: "my 1rst phone number 617-688-0034, ..", expectedMatches: ["617-688-0034"]}) // Local number data.push({text: "my 1rst phone number 650 253 0000, ..", expectedMatches: ["650 253 0000"]}) // Local number data.push({text: "my phnle number 7327572923, please call me", expectedMatches: ["7327572923"]}) // Country number data.push({text: "my international number +5581987042155, please call me", expectedMatches: ["+5581987042155"]}) // International number data.push({text: "this is an invalid number 55555555555, yes yes it is", expectedMatches: []}) // Invalid number data.push({text: "could you call me between 15h30-16h yes?", expectedMatches: []}) // Invalid number data.push({text: "could you call me between at extension *144 yes?", expectedMatches: []}) // Special number data.push({text: "my operator number: #123#, yes", expectedMatches: []}) // Operators command return data } function compareMatches(matches1, matches2) { compare(matches1.length, matches2.length) for (var i = 0; i < matches1.length; ++i) { compare(matches1[i], matches2[i]) } } function test_matchPhone(data) { var actualMatches = PhoneNumber.PhoneUtils.matchInText(data.text, "US") compareMatches(actualMatches, data.expectedMatches) } function test_getCountryPrefix() { var resultFakeLocale = PhoneNumber.PhoneUtils.getCountryCodePrefix("fake"); compare(resultFakeLocale, 0) var resultNoLocale = PhoneNumber.PhoneUtils.getCountryCodePrefix(null); compare(resultNoLocale, 1) var resultLocale = PhoneNumber.PhoneUtils.getCountryCodePrefix("FR"); compare(resultLocale, 33) } } telephony-service-0.5.3/tests/Lomiri.Telephony/tst_contextProperties.qml000066400000000000000000000022351455543255600267150ustar00rootroot00000000000000/* * Copyright (C) 2013 Canonical, Ltd. * * This file is part of telephony-service. * * telephony-service is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; version 3. * * telephony-service 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 . */ import QtQuick 2.0 import QtTest 1.0 import Lomiri.Telephony 0.1 TestCase { id: contextPropertiesTest name: "ContextPropertiesTest" function test_telepathyHelper() { verify(telepathyHelper != undefined, "telepathyHelper is not defined"); } function test_chatManager() { verify(chatManager != undefined, "chatManager is not defined"); } function test_callManager() { verify(callManager != undefined, "callManager is not defined"); } } telephony-service-0.5.3/tests/approver/000077500000000000000000000000001455543255600202025ustar00rootroot00000000000000telephony-service-0.5.3/tests/approver/ApproverTest.cpp000066400000000000000000000145621455543255600233540ustar00rootroot00000000000000/* * Copyright (C) 2013-2015 Canonical, Ltd. * * This file is part of telephony-service. * * telephony-service is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; version 3. * * telephony-service 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 . */ #include #include #include "telepathytest.h" #include "approvercontroller.h" #include "mockcontroller.h" #include "accountentry.h" #include "accountentryfactory.h" #include "telepathyhelper.h" class ApproverTest : public TelepathyTest { Q_OBJECT private Q_SLOTS: void initTestCase(); void init(); void cleanup(); void testSnapDecisionTimeout(); void testAcceptCall(); void testCarKitOutgoingCall(); void testCarKitIncomingCall(); private: void waitForCallActive(const QString &callerId); MockController *mMockController; Tp::AccountPtr mTpAccount; }; void ApproverTest::initTestCase() { initialize(); QSignalSpy setupReadySpy(TelepathyHelper::instance(), SIGNAL(setupReady())); TRY_COMPARE(setupReadySpy.count(), 1); } void ApproverTest::init() { mTpAccount = addAccount("mock", "mock", "the account"); // and create the mock controller mMockController = new MockController("mock", this); } void ApproverTest::cleanup() { doCleanup(); mMockController->deleteLater(); } void ApproverTest::testSnapDecisionTimeout() { QString callerId("12345"); QVariantMap properties; properties["Caller"] = callerId; properties["State"] = "incoming"; QDBusInterface notificationsMock("org.freedesktop.Notifications", "/org/freedesktop/Notifications", "org.freedesktop.Notifications"); QSignalSpy notificationSpy(¬ificationsMock, SIGNAL(MockNotificationReceived(QString, uint, QString, QString, QString, QStringList, QVariantMap, int))); mMockController->placeCall(properties); TRY_COMPARE(notificationSpy.count(), 1); QVariantMap hints = notificationSpy.first()[6].toMap(); QVERIFY(hints.contains("x-lomiri-snap-decisions-timeout")); QCOMPARE(hints["x-lomiri-snap-decisions-timeout"].toInt(), -1); mMockController->HangupCall(callerId); } void ApproverTest::testAcceptCall() { QString callerId("7654321"); QVariantMap properties; properties["Caller"] = callerId; properties["State"] = "incoming"; QDBusInterface notificationsMock("org.freedesktop.Notifications", "/org/freedesktop/Notifications", "org.freedesktop.Notifications"); QSignalSpy notificationSpy(¬ificationsMock, SIGNAL(MockNotificationReceived(QString, uint, QString, QString, QString, QStringList, QVariantMap, int))); QString objectPath = mMockController->placeCall(properties); TRY_COMPARE(notificationSpy.count(), 1); // at this point we are already sure the approver has the call, as the notification was placed QSignalSpy callStateSpy(mMockController, SIGNAL(CallStateChanged(QString,QString,QString))); ApproverController::instance()->acceptCall(); TRY_COMPARE(callStateSpy.count(), 1); QCOMPARE(callStateSpy.first()[0].toString(), callerId); QCOMPARE(callStateSpy.first()[1].toString(), objectPath); QCOMPARE(callStateSpy.first()[2].toString(), QString("accepted")); mMockController->HangupCall(callerId); } void ApproverTest::testCarKitOutgoingCall() { // make sure that an outgoing call placed outside of telepathy is handle correctly QString callerId("2345678"); QVariantMap properties; properties["Caller"] = callerId; properties["State"] = "outgoing"; QSignalSpy callStateSpy(mMockController, SIGNAL(CallStateChanged(QString,QString,QString))); QDBusInterface notificationsMock("org.freedesktop.Notifications", "/org/freedesktop/Notifications", "org.freedesktop.Notifications"); QSignalSpy notificationSpy(¬ificationsMock, SIGNAL(MockNotificationReceived(QString, uint, QString, QString, QString, QStringList, QVariantMap, int))); QString objectPath = mMockController->placeCall(properties); // wait for a few seconds and check that no notification was displayed QTest::qWait(3000); QCOMPARE(notificationSpy.count(), 0); // check that the call state is not "accepted" TRY_VERIFY(callStateSpy.count() > 0); QCOMPARE(callStateSpy.last()[0].toString(), callerId); QCOMPARE(callStateSpy.last()[1].toString(), objectPath); QCOMPARE(callStateSpy.last()[2].toString(), QString("initialised")); mMockController->HangupCall(callerId); } void ApproverTest::testCarKitIncomingCall() { // make sure that an outgoing call placed outside of telepathy is handle correctly QString callerId("3456789"); QVariantMap properties; properties["Caller"] = callerId; properties["State"] = "incoming"; QDBusInterface notificationsMock("org.freedesktop.Notifications", "/org/freedesktop/Notifications", "org.freedesktop.Notifications"); QSignalSpy notificationSpy(¬ificationsMock, SIGNAL(MockNotificationReceived(QString, uint, QString, QString, QString, QStringList, QVariantMap, int))); QString objectPath = mMockController->placeCall(properties); TRY_COMPARE(notificationSpy.count(), 1); // at this point we are already sure the approver has the call, as the notification was placed QSignalSpy callStateSpy(mMockController, SIGNAL(CallStateChanged(QString,QString,QString))); // now set the call state as active to simulate the call being answered on the car kit mMockController->SetCallState(callerId, "active"); // wait for a few seconds while the approver approves the channel and give it to the handler QTest::qWait(3000); QCOMPARE(callStateSpy.count(), 1); QCOMPARE(callStateSpy.first()[0].toString(), callerId); QCOMPARE(callStateSpy.first()[1].toString(), objectPath); // the call state needs to be active. If it is in any other state, it is because the approver wrongly called Accept() on the channel QCOMPARE(callStateSpy.first()[2].toString(), QString("active")); mMockController->HangupCall(callerId); } QTEST_MAIN(ApproverTest) #include "ApproverTest.moc" telephony-service-0.5.3/tests/approver/CMakeLists.txt000066400000000000000000000013501455543255600227410ustar00rootroot00000000000000include_directories( ${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/../common ${CMAKE_SOURCE_DIR} ${CMAKE_SOURCE_DIR}/libtelephonyservice ${CMAKE_BINARY_DIR}/tests/common ${TP_QT5_INCLUDE_DIRS} ${GSETTINGS_QT_INCLUDE_DIRS} ) if (NOT ("${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "aarch64")) generate_telepathy_test(ApproverTest SOURCES ApproverTest.cpp approvercontroller.cpp TASKS --task ${CMAKE_BINARY_DIR}/approver/telephony-service-approver --task-name telephony-service-approver --wait-for com.lomiri.TelephonyServiceHandler --ignore-return WAIT_FOR org.freedesktop.Telepathy.Client.TelephonyServiceApprover) endif() telephony-service-0.5.3/tests/approver/approvercontroller.cpp000066400000000000000000000027461455543255600246610ustar00rootroot00000000000000/** * Copyright (C) 2013-2015 Canonical, Ltd. * * This program is free software: you can redistribute it and/or modify it under * the terms of the GNU General Public License version 3, as published by * the Free Software Foundation. * * This program is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranties of MERCHANTABILITY, * SATISFACTORY QUALITY, 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 . * * Authors: * Gustavo Pichorim Boiko */ #include #include "approvercontroller.h" #include #include #define APPROVER_SERVICE "com.lomiri.TelephonyServiceApprover" #define APPROVER_OBJECT "/com/lomiri/TelephonyServiceApprover" #define APPROVER_INTERFACE "com.lomiri.TelephonyServiceApprover" ApproverController *ApproverController::instance() { static ApproverController *self = new ApproverController(); return self; } ApproverController::ApproverController(QObject *parent) : QObject(parent), mApproverInterface(APPROVER_SERVICE, APPROVER_OBJECT, APPROVER_INTERFACE) { } void ApproverController::acceptCall() { mApproverInterface.call("AcceptCall"); } void ApproverController::hangUpAndAcceptCall() { mApproverInterface.call("HangUpAndAcceptCall"); } telephony-service-0.5.3/tests/approver/approvercontroller.h000066400000000000000000000022051455543255600243140ustar00rootroot00000000000000/** * Copyright (C) 2013-2015 Canonical, Ltd. * * This program is free software: you can redistribute it and/or modify it under * the terms of the GNU General Public License version 3, as published by * the Free Software Foundation. * * This program is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranties of MERCHANTABILITY, * SATISFACTORY QUALITY, 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 . * * Authors: * Gustavo Pichorim Boiko */ #ifndef APPROVERCONTROLLER_H #define APPROVERCONTROLLER_H #include #include class ApproverController : public QObject { Q_OBJECT public: static ApproverController *instance(); public Q_SLOTS: void acceptCall(); void hangUpAndAcceptCall(); private: explicit ApproverController(QObject *parent = 0); QDBusInterface mApproverInterface; }; #endif // ApproverController_H telephony-service-0.5.3/tests/common/000077500000000000000000000000001455543255600176345ustar00rootroot00000000000000telephony-service-0.5.3/tests/common/CMakeLists.txt000066400000000000000000000015731455543255600224020ustar00rootroot00000000000000include_directories(${TP_QT5_INCLUDE_DIRS} ${CMAKE_SOURCE_DIR}/libtelephonyservice ${CMAKE_CURRENT_BINARY_DIR} ${GSETTINGS_QT_INCLUDE_DIRS}) configure_file(dbus-session.conf.in ${CMAKE_CURRENT_BINARY_DIR}/dbus-session.conf) add_executable(NotificationsMock NotificationsMock.cpp) target_link_libraries(NotificationsMock Qt5::Core Qt5::DBus) qt5_add_dbus_interface(mockcontroller_SRCS mock/MockConnection.xml MockConnectionInterface) add_library(mockcontroller STATIC mockcontroller.cpp mockcontroller.h ${mockcontroller_SRCS}) target_link_libraries(mockcontroller Qt5::Core Qt5::DBus) add_library(telepathytest STATIC telepathytest.cpp telepathytest.h) target_link_libraries(telepathytest telephonyservice ${TP_QT5_LIBRARIES} ${GSETTINGS_QT_LDFLAGS} Qt5::Core Qt5::DBus) add_subdirectory(mock) add_subdirectory(dbus-services) telephony-service-0.5.3/tests/common/NotificationsMock.cpp000066400000000000000000000061101455543255600237610ustar00rootroot00000000000000/* * Copyright (C) 2015 Canonical, Ltd. * * This file is part of telephony-service. * * telephony-service is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; version 3. * * telephony-service 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 . */ #include #include #include #include #include #include #define NOTIFICATIONS_DBUS_SERVICE_NAME "org.freedesktop.Notifications" #define NOTIFICATIONS_DBUS_OBJ_PATH "/org/freedesktop/Notifications" class NotificationsMock : public QObject { Q_OBJECT Q_CLASSINFO("D-Bus Interface", NOTIFICATIONS_DBUS_SERVICE_NAME) public: Q_SCRIPTABLE uint Notify(QString app_name, uint replaces_id, QString app_icon, QString summary, QString body, QStringList actions, QVariantMap hints, int expire_timeout); Q_SCRIPTABLE void CloseNotification(uint id); Q_SCRIPTABLE QString GetServerInformation(QString& vendor, QString& version, QString& spec_version); // Mock specific method Q_SCRIPTABLE void MockInvokeAction(uint id, QString action_key); Q_SIGNALS: Q_SCRIPTABLE void NotificationClosed(uint id, uint reason); Q_SCRIPTABLE void ActionInvoked(uint id, QString action_key); // Mock specific signal Q_SCRIPTABLE void MockNotificationReceived(QString app_name, uint replaces_id, QString app_icon, QString summary, QString body, QStringList actions, QVariantMap hints, int expire_timeout); }; uint NotificationsMock::Notify(QString app_name, uint replaces_id, QString app_icon, QString summary, QString body, QStringList actions, QVariantMap hints, int expire_timeout) { Q_EMIT MockNotificationReceived(app_name, replaces_id, app_icon, summary, body, actions, hints, expire_timeout); static uint id = 1; return (replaces_id != 0 ? replaces_id : id++); } void NotificationsMock::MockInvokeAction(uint id, QString action_key) { Q_EMIT ActionInvoked(id, action_key); Q_EMIT NotificationClosed(id, 2); // 2 is dismissed by user } void NotificationsMock::CloseNotification(uint id) { Q_EMIT NotificationClosed(id, 3); // 3 is closed by a CloseNotification() call } QString NotificationsMock::GetServerInformation(QString &vendor, QString &version, QString &spec_version) { return QString(); } int main(int argc, char **argv) { QCoreApplication a(argc, argv); QDBusConnection connection = QDBusConnection::sessionBus(); NotificationsMock notifications; connection.registerObject(NOTIFICATIONS_DBUS_OBJ_PATH, ¬ifications, QDBusConnection::ExportScriptableContents); connection.registerService(NOTIFICATIONS_DBUS_SERVICE_NAME); return a.exec(); } #include "NotificationsMock.moc" telephony-service-0.5.3/tests/common/data/000077500000000000000000000000001455543255600205455ustar00rootroot00000000000000telephony-service-0.5.3/tests/common/data/dialer-app.png000066400000000000000000000614701455543255600233010ustar00rootroot00000000000000PNG  IHDR{CbIDATx… A@Ab]K&S(,<Ư\<{p[p\.ܳޤ}̣G14|=_Gsϯ4?'ve=П2Пo _s _M_GBoL_S`3?3Bo2R?[`23Bo2zg@Bozk ̧~d>_/C `~'3Л̧>_d/FO? FO7?@_m/>e&~/)FB /FUg/I/?0+&)C gO__b?@/Vz?ބ?Oze>?d>P '1Bozy[/CO7gOcz?e`PBo[2@_C3zԏg`Bozg@8_sBoe>e>zЛ'_/)J /IzOOK,?@7O/? 0N_?z??/@_W MџBo2A|_2KПm? I |?@ _g|_2_@[R?Bozۣz'/V̧'V?ޤ~&/V3/J @e>/@@72Sӟ2@Bo@GBo2?~KO7Bo[}HП")П22R?_gR?/)Fw3R?*3ߤЛ7R e>/C=gή'/?0JӟBo I e>_/)6R ~&/)K_Sm_sR?П22R?_SS{_scП2K5Ϧ@MSmqj_8{?@Oo?_Ygg>e>~Óoz_?_wnm-?644uwm $, rk?wwEb8D*ݽ^%0CfNL{R3&euwћ?Tɳ M%>q̹{Ѭ7~J?#/ߤ/tϹ;g\ ?N8;]shփ?(OeH'?xDFY,]\][ ׂҕG>DžFOQEoOTՏX x[d`c`X|7ٟnS z H7*$.[9c@e M_A,'>iG̲?;`v7m)ǷV!@sb=h"1vX4nj>z?`<%($}u<@D\ o#oF~6Ӹ)*zh L~8O`c[Hjl$(w}W(DµQEoOДTLRH97X>8)~**dj  ?R0̵?;$? 1۵s%dEB!d@fl1Uc@Sh !nTuoz'Ջ# *\._̀*_hMTLb۟&۟@7pAWX ^1ov(eci`Nl^R~z?bf@g TPU?| D*T7 >vU~SJqW1 Ȁ0`?M_TG@]?@O8*WV1eBv6 37>4eٟ;?`He`AObsIT+glKk3_ ~V(󢩢7a &pڟ??`He r3ZFm+B}KN%qaPg ?h0?c ~˕eE.bTIJf@@(s ?id @&T"(O|c\3`ɚO~U)@*iEol<b?/Ic>j(iHA!XIT/T'?:R0?c v>gQ/Y7v:g( eTL`2g!/աRIZn`7/@*T7@S c›{ 8>y 32@hMTLG? `=3?NLp?ДHei O _>?R,˜{O+Nc`٢7 .?O_'*۟w؟-Ka̽Z :(/$$?oʹ??˰?0M(I;_J/4&?A(?|&V0@3?$CIT#;_xp^問Z$պ?Tћ@Wh˴?}]e`'-0q/!B44ʟ)V?eϤ{-A'ؿve=rA<`0ٝ`u'O8ao[hsPU/G.j>9dDf]dι$?hwH \$9EoQ!oeh2qAhɴ?M9%?O9)$3zۨ7k {>P g#$2+?a?oB?jdM;$?h4E$@ _]["{;Jl@72@S5Oze,?!~쇱|6)^`?hSV,Y/hӼEVPU?&u?1嬻Adi0nZmז/I8>ڎX_,혝pykhiВ&ؿHڟ'/w_04 @O`1X'\'äT#iִ?.2'O8?!uחʗI'Otq?Tћp}Y|-)QZ3/q?hIop |NB|\o5 @SnʯѬ/4mm'fĀ9,:GS?5miC=@fw+?=؟zoX@SU?"Ho Og}h]C(o@P4swNMt?&f\n\E$@CQ<>P=Ѭgj"S?uPd w9`כc>FdxuCpK3wG\]3Mtꯃre= #Y/bDR#0nbVAF԰?jh18/@S@ٿ.- uۻ# b0ތ_?PgU,Ébh aޘx+b/X^z[`#PhM_a@larRX`x3:@'HhP?Mٟm6~%?( 0}e T@'oX@S5/++o򗥸aoҽy(A|b@|*e&ol-wXYfxs (:0=}+8TՏ$-0b/-/_Vb侓[: l0EL?#xO3 *VՏC%&X쁁'%u[\R,Z<ݭKlaMQCSEo{@FOˈ,@V#mF @6uєM#0 O݆XhhFs<~<x,z˼S<>kօxӏ&8poMp蕋L;CZSf`ؿz; 7Б`_# {hMȆy7`?wN5p=i?X{gsGs?Owϗ#X/ 4_HځgHS;ٿm aPl߃}=T5s߱w^Me_C! *bA)oソJY۷jAZ(J+g,{2=On䆋3sHNg}s)/\Em؟h?`Qȴ ۟ +2 ,n/ԳTEۚW1`wPIEo{C{re)ڛ bnQ%uwS0^e0`h#O} WF+>@BYR'_o`[TcSF# "5kb 8lN4 ܝLA9y!Nee#xͧ?cʦcy4u.~ZvD7cSC3C)O_-bO ?@y'o Nt{Ly 7} 6`_`cZk>%Pk^Y~}w"ۻJZ`?8B@G?lyXة/z#1`OsLp~&?e_{fs1o'8@'h>W1WG?d@to(Z8[FN6@|$zv/1Bi+ ?6` ]IEG|-:guߧip+?5wl'D\ntuKn_1c: ^Umum/;YhmT༂],h\!\)q$2:%%@@K>O6ڐf'}O&i7QC؟*I*> }ɋ.vhc]O%i"m!`= M_aDOu7@Ul?HhȲ<|64׏kl~.P%9O5{?.vO-.zx1@%psIu<:}m{?`LRnEo4^`KO[{sH{ڗm`ĶbDK=M|qLZT}oJ/ot{)-=ٚOɶl`dxht۟pPf4W=Wȍlj"ٟo;!d\0,LDz-w=?q$@`Gu?$iO{kFSd寊^g|][{s1teߠȭ^;L|Pb ! fO: R}诽uFl$hg#xb =j@L/]vlh~x;3*~&7&N*o̱? (l[Rx? o T.aNcO-l$gl+#++gm8Vv7/vزPóMV*=2ˏ&^FJؖz"rŢfOj{n:Uq|%9' `E(0|to3WB=_}[w5}Bn54| @%QJrѵ@E"ڭ!.݀u{g4XTKޯMT?I@@;@?6wn9_{v/-zc#?`χퟘ@p`@!Ι{N=?x_+ʟ&PZ$-zcA2?X=+#jx=f^F a?f?&.o {|v7^{Qeg#a`=9@'/{z9q_-vW|?oCd[.-w:woo{J5ms9c`_l( M.oxpߟ߿/Ԉ?8 `Y =oJ?P$?7LW#Svs'bO&m` b%?3M8>躽i=qKV{8|ڻӶ~?6Gl+i nD@x2:}5^_u_rkI?, ?~6dN D@S-j`샸/ږ?eDAb`gfɑUbܦ2}53yҋ6lզkʏ*>ב~C@)oM?m2i@EKo^~kxb=ӽ~?sILlٟn(;7Gfϳ;琷ZZ۟/0>wgޝiH5aXdөloGgOQ(`?9~kc\~RǨ=۞p?֋a˜&^G,5}y3g]Faon}}iKo bs|}<5/,6́|*?K3DA'枵۟ow(2l.ni;Sh.,4?3E?9OZ??Omu.ylxn}e[_,Ftw67oE#ڟo?:WUw^-zbNf ~2vZKG{<ߧEoU'?x2+g?]ge:(yf3&Ԟ~lZ)ʟ"۟Pg?|:[ (?ToPEOνۃ^ @\>;ÓWZbǼQʗ?cA(?TaPӗC?~`!gŭ׵ߋ̀~ {W/N=տDCT? ia\^͵ aL^ ?|?2Z3lN޾y/аhZl:A͙ڟ,5߮7?'JxK`} 9/Fl?^1l{ecP)k/zSY,To7A?SL ?~{ X .2`px;v);o?]ȯ{So?lY[@8?(<8uν>% Ȁ#Sҧ7' i>{5::$lD<4(&>ɠypml 3ipG?%տ b#xͧ:xՏNaN]7~0$sa]OdO狗<Ƕ7|? VgI5Gpz'瀠m\/?MN1?_OU+3ð?Q} ]qcS^zny+o!^G?dH_tmq'P O#S л˰@~wWPhc?O a"؟}K䵟 fžB" d@ "2 Hd~/Kք9W[`:N-VWpiDw& dա+?:տ UM#xՏB7l_4|}7~J_>?8^|+5?Pr/tIRf(A$BT %J~0[$_.9ldK UjI&zNY?/VbC{m7wYx >0D6NA 6w󝢁JOS5s^?}9E֮㕡xITfIRҋ|iT?=%oz2sSOZu 0m/:I_ox{wLI95-oZZ3fdS%T0,iQL -ލ{hxKzeܪ}[lô2V); ZZ{{<;' bs/l4oI$G1?]Q,鏼?rU$돬?.NG;qi$`wů|g֦wfC\Iҟ8?돜?oG?oǴKw@?zLp9}9SOMɝ?M+x?J4 #g)J# x6@PTVHl鏠-m Z c(Gq?^vs`O`yW6D6né9[ߝ'럡~Ȧ_c?bO/~_O>—7 ^/W,goѓF47 O̞4_\tSRF?Z|-;ɛ?r_Cw]ڀ൵Q7~g1}Eo Ѣ}5.oqᄐaxdM(lI{L<Eo\J2~=U?Yȿ܏n@NE+gAYѪ#pͧj/zTK{ۑj=TrQU}"wtX O<-Qg/~wTo}qͧprߙ'oHg(b1|ͧ'ז^>_O.3)wyNf㻤-yӢ?ū~O;|DD~ Y{Xor|@`Q^/ww+i,}zTSOz>???aƣC#8W쟻yztHM: @^ƺڣ/9?~ϝǑM ͺcimR9? }'+}g4 kpi_vMWg|p߇Q8Svh#w7^ÙOG^OmYQJrOYٟ!l/=}kSTo֟gB X~ ؓ }SSőן7g)+7wuj<jn4GogY{ C<Ǔ*@ԶV+7k>OgY 1 x|зƙ*1Q݀k?gm(./̰*; c9?믯<|/'_[пu/8$ྜzlng|ћM1\Կ,2#{u?E\uxt?rx g]3? ?b?cQȢh?﹊B~7 ʯ7=j4W_1~u\@K($Mm%~ wjիq~|Z"?l2(?v+dT*jJ|ͧX^4VeDW=###uo@aZ֟qV f0U&RoGkfW+WU%$ހs?_{џd1o羬@}@K)0d |^T}MzDgJ8Q|u^;;`Jʈ(>rnOW|@>k"Y oW˽iH`YZ=%K) _XYKg=SW+$l?跣?iV#ʘ鷯2<2Glq+fmxg?O&-G6R@'Swsxxߓ u㬍0'Q~_X @\t&_;LoW)C/: =ـW7mgYl`7uJ#Y$KGӟ+/Qn ?0ԇ{ۮ DT?g?cH~d&?Y%J&ogoz?ߓ 8tmM@?]1qyio~jI5  XL\?N^V7r$ exU֟/zsL g|kėO3v d mBg~nUy+%u7ґ 8r#{w֟/yfŤ)]G~}߫ò[*}VK#%0fZo~}k[n>m ^ ^AlŤk>k>_)}K 5e~JQ#24<8bG@ki(cyF~/+*yVJt6@1o 갿{5R @¥K>)(UdBKGP/nvҫT4wR> 3PL3z|zkwuM2쿺AcQEFD?pg?:t3Y?0U]zIY=K3O%Y_1B ݟr:9<<@uqXm1?_N_"#}Q<%頤񨧣spԋ;  Hlq7 ?~G_aEw^s89Aԟd@%fEV[ЏL'|DDzd+ߗUz/6Rwj'gY @GZ#A?S?_}݂~ _!P!TlFS|w}zwRv:x?ȫX5{Kxҟg`_?` H~O?seξ&QKX ‘^3'B7N~5V$/uWzr~@u{ȣ ?i?gʘE?_cXӏ7W_/mxhĸң ـO0%/觎ʥ\Tc}Pv%"?~I镯cEo|ͧk>KMҏtkП͜v:CGb1=߀WJiqf{ B~Mp6R^3Tl K0}'nn֋=g뻤*/>(5.诤_l҃ߏ&?ly8x菥 xjd~" GK3 Z`wMu;{kEgEG+cT_~K?2+lzfIUI|W7l ?=BygWϠH|#П﫬>BF0_!`eQ:%? A5??@R]QDVɧt4w # ?S4ݡċ7?=YGR@{][@ xX_տ7Ik>YGA}Qd#oggokyy/LOqlZͱR[-.L pby?<0'tXx?o@!9>=1n'}_˝o|@_)>X| Cm?)o7VŅ_6EQh<ErA?m1ӏ"7SaƒNZdXº)2xUr??Ϭ?gן/zNs#_JQ kΈuod{*bv(]4ZL7p0mK)?jߋ/OֿT~JOcN9A?l6@9 T-HNm|+_֟R _NЯп矧7 k7>h:Gp7M#Sv╯?UbV֟ c+(m7t7w>"|t?}׹[1/a/YUJaqo2o {Bӫlyw^q3пI1HWX!_^Ajtޓ[:/b%wЏkAϫ~XXBx P?l%a^bcfIاY@Oz֟Q|+_x Pԟz'|K~%৪K% GG^ɋEx,~$GZ k2^ee:M/™oBIjY^3XO ʸxQv/X93YC?(WЏe? `jZn<1 6"`~➗i +Z/S? w^(5_չp12Jc?ΤEo "dփFY_S~Q$ͅ9F՞K?(֟,+H=dn߹gx5M{?S ' Y@7z@k̼\홬At_MxϋX0}k>A?9@=ht?0k>%F"G}@[L[ϗuޓTL#5Dzn}?a?J]&@Ⱥ+1xOT5ן|aPӳHmĜ<5@v>]E6_Ed`h! o߇ѲqMO[_r|ƚc}g 0ވĨ%!kϋ"vkmlkRw#U?`Ľ*X ^K'~ݙٝ23poz0 6ayT/ vBZh} Jw71}j=qwЏ/gY0ސS1l2z4{%7%]Y*(OlэSk~G-{BQ)Zk>Y8~0{(rXٯ;4\M6Oҟ(k п`#,s2wo"#giJiџ w@Djx0њO%᏿[;̧8G(wO>_?Y d`E٭ _WyКț?"G]%U?aG7# Q||E|͇^Zcqu{G@#Eo?OO@] ԂfIdjI$TΕf.q;3hO?/z$ W(Пlbw'ρ6yq;o#zk|>~֟=(/֟NBu@4|X[?Ov^ Eʙ_gyՏ:#-wІ2> -joMB?l[M]{!>gvћw@݋! v mt'w3{ӑBȰ?#>GO_AC@szl/©!Z j Z6J.ϋxͧ7QӧCa[%t<;o;EĢ;w)A'GϋXeXY~D؃pEP8pxKͼL*ڿHПgO_Ȁ  u#m!W[n>;&Ic?}HBZY/E}ї/ eQi+:~S(㠿3A.k>yћoe('j Y.iDv_UܓLs??LZIg@׿7GdD\w@K$YPU7Yԗ>}fD^eC?:30 ?Z䠿-/҇>{Dx'ϫ~?ߙKx逤rF!Py>|u;_Vҩ8pV%E.(^˴H2:M7;Nl]ff̂sڃA~ G'6`p(Luz_QB߻ݾ"* #tk`Qz4p^_ict0y|ՃO[~9x!aYxͧ/>;.ӧ?5P ̋&ͤg=K|ċ"]KF7zN|M¶;i^l5O܏0t.#ѧ??(S(^9DZ0z&@r3k;񎈍hhUh}_st@7^9LQJJx<$g&EʚY H'D_$oH1w|ȯYY#?/z5? <M &@PՐx-h'd%Q%b3k%8j!֜ڶc#?(?>T+$H2mdozsFn]AE_ LydI6ԣ=jb8 ݫz7g| ?羄sz ؀} Eg.?w+#/9^O7g.Л'{ҟ}fE#>F7gn?sOQ_s_?p]U_mޣO |d>Oӿg?|>_~ ֯?O [?e>m@3pBo2R?Eg*27DOa_ܗ2BoG ;2Bo,ԟBo(&I_s?P̧d>g32?_q3{3|ҟ4/COOg?/IaCoz`Bo?3u7_Bo}?e>)F e>e>WO ~O۬232R?Ws?@=_!9# Gӟ_ۮT OOgO7/ ?@7|ҟ7%C7Ew?_П2_Bo2u e>Op''F e>/P?_oIg|?32R?B35ӟ2?_{R?ơ7_zЛ'Boӟ2 CoYBo~_Bo{Xzy?Bo@Oӿ?@ R?{_zۧO_E?!I /{@BoQm?@U_7_MA /))G ~d>Fܟ'@7ӟGgJ7O _2u'~ߪ<,_2KПBo|ҟBoJ gO|?@7 =? Fӿ)6cR?&?ПQП22_@&3zpeg~/)FUg/)F?@7K/9?O?'/Y_Bo2џl x>z?߯ПBo@ |ҿ_ e>/Iug/֤@z_R?@O ѿ_ ԏ̧_<_?~s_|քBoܢob36IENDB`telephony-service-0.5.3/tests/common/dbus-services/000077500000000000000000000000001455543255600224125ustar00rootroot00000000000000telephony-service-0.5.3/tests/common/dbus-services/CMakeLists.txt000066400000000000000000000007161455543255600251560ustar00rootroot00000000000000# copy the services we want to use set(DBUS_SERVICES_DIR ${CMAKE_INSTALL_FULL_DATAROOTDIR}/dbus-1/services) file(COPY ${DBUS_SERVICES_DIR}/org.freedesktop.Telepathy.MissionControl5.service DESTINATION ${CMAKE_CURRENT_BINARY_DIR}) file(COPY ${DBUS_SERVICES_DIR}/org.freedesktop.Telepathy.AccountManager.service DESTINATION ${CMAKE_CURRENT_BINARY_DIR}) file(COPY ${DBUS_SERVICES_DIR}/ca.desrt.dconf.service DESTINATION ${CMAKE_CURRENT_BINARY_DIR}) telephony-service-0.5.3/tests/common/dbus-session.conf.in000066400000000000000000000032161455543255600235300ustar00rootroot00000000000000 session unix:tmpdir=/tmp @CMAKE_CURRENT_BINARY_DIR@/dbus-services 60000 1000000000 1000000000 1000000000 120000 240000 100000 10000 100000 10000 50000 50000 50000 300000 telephony-service-0.5.3/tests/common/mock/000077500000000000000000000000001455543255600205655ustar00rootroot00000000000000telephony-service-0.5.3/tests/common/mock/CMakeLists.txt000066400000000000000000000015111455543255600233230ustar00rootroot00000000000000include_directories( ${TP_QT5_INCLUDE_DIRS} ${Qt5Core_INCLUDE_DIRS} ${Qt5DBus_INCLUDE_DIRS} ${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_SOURCE_DIR}/libtelephonyservice ) find_library(TELEPATHY_QT5_SERVICE_LIBRARIES telepathy-qt5-service) set(mock_SRCS main.cpp protocol.cpp connection.cpp textchannel.cpp callchannel.cpp conferencecallchannel.cpp mockconnectiondbus.cpp speakeriface.cpp emergencymodeiface.cpp ussdiface.cpp voicemailiface.cpp) qt5_add_dbus_adaptor(mock_SRCS MockConnection.xml mockconnectiondbus.h MockConnectionDBus) add_executable(telepathy-mock ${mock_SRCS}) target_link_libraries(telepathy-mock ${TP_QT5_LIBRARIES} ${TELEPATHY_QT5_SERVICE_LIBRARIES} ${OFONO_QT_LIBRARIES} ${PULSEAUDIO_LIBRARIES} ${Qt5Network_LIBRARIES} Qt5::Core Qt5::DBus) telephony-service-0.5.3/tests/common/mock/MockConnection.xml000066400000000000000000000270421455543255600242250ustar00rootroot00000000000000 An interface to the fake connection manager telephony-service-0.5.3/tests/common/mock/callchannel.cpp000066400000000000000000000207141455543255600235410ustar00rootroot00000000000000/** * Copyright (C) 2013 Canonical, Ltd. * * This program is free software: you can redistribute it and/or modify it under * the terms of the GNU General Public License version 3, as published by * the Free Software Foundation. * * This program is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranties of MERCHANTABILITY, * SATISFACTORY QUALITY, 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 . * * Authors: Tiago Salem Herrmann * Gustavo Pichorim Boiko */ #include "callchannel.h" MockCallChannel::MockCallChannel(MockConnection *conn, QString phoneNumber, QString state, uint targetHandle, QObject *parent): QObject(parent), mIncoming(false), mRequestedHangup(false), mConnection(conn), mPhoneNumber(phoneNumber), mTargetHandle(targetHandle), mState(state) { Tp::BaseChannelPtr baseChannel = Tp::BaseChannel::create(mConnection, TP_QT_IFACE_CHANNEL_TYPE_CALL, Tp::HandleTypeContact, targetHandle); Tp::BaseChannelCallTypePtr callType = Tp::BaseChannelCallType::create(baseChannel.data(), true, Tp::StreamTransportTypeUnknown, true, false, "",""); baseChannel->plugInterface(Tp::AbstractChannelInterfacePtr::dynamicCast(callType)); mHoldIface = Tp::BaseChannelHoldInterface::create(); mHoldIface->setSetHoldStateCallback(Tp::memFun(this,&MockCallChannel::onHoldStateChanged)); mMuteIface = Tp::BaseCallMuteInterface::create(); mMuteIface->setSetMuteStateCallback(Tp::memFun(this,&MockCallChannel::onMuteStateChanged)); mSplittableIface = Tp::BaseChannelSplittableInterface::create(); mSplittableIface->setSplitCallback(Tp::memFun(this,&MockCallChannel::onSplit)); baseChannel->plugInterface(Tp::AbstractChannelInterfacePtr::dynamicCast(mHoldIface)); baseChannel->plugInterface(Tp::AbstractChannelInterfacePtr::dynamicCast(mMuteIface)); baseChannel->plugInterface(Tp::AbstractChannelInterfacePtr::dynamicCast(mSplittableIface)); mBaseChannel = baseChannel; mCallChannel = Tp::BaseChannelCallTypePtr::dynamicCast(mBaseChannel->interface(TP_QT_IFACE_CHANNEL_TYPE_CALL)); mCallChannel->setHangupCallback(Tp::memFun(this,&MockCallChannel::onHangup)); mCallChannel->setAcceptCallback(Tp::memFun(this,&MockCallChannel::onAccept)); // init must be called after initialization, otherwise we will have no object path registered. QTimer::singleShot(0, this, SLOT(init())); } void MockCallChannel::onHangup(uint reason, const QString &detailedReason, const QString &message, Tp::DBusError *error) { // TODO: use the parameters sent by telepathy mRequestedHangup = true; setCallState("disconnected"); } void MockCallChannel::onAccept(Tp::DBusError*) { setCallState("accepted"); QTimer *timer = new QTimer(this); timer->setSingleShot(true); timer->setInterval(100); connect(timer, &QTimer::timeout, [this, timer]() { setCallState("active"); timer->deleteLater(); }); timer->start(); } void MockCallChannel::init() { Tp::CallMemberMap memberFlags; Tp::HandleIdentifierMap identifiers; QVariantMap stateDetails; Tp::CallStateReason reason; mIncoming = mState == "incoming" || mState == "waiting"; identifiers[mTargetHandle] = mPhoneNumber; reason.actor = 0; reason.reason = Tp::CallStateChangeReasonProgressMade; reason.message = ""; reason.DBusReason = ""; if (mIncoming) { memberFlags[mTargetHandle] = 0; } else { memberFlags[mTargetHandle] = Tp::CallMemberFlagRinging; } setCallState("initialising"); mCallContent = Tp::BaseCallContent::create(baseChannel()->dbusConnection(), baseChannel().data(), "audio", Tp::MediaStreamTypeAudio, Tp::MediaStreamDirectionNone); mDTMFIface = Tp::BaseCallContentDTMFInterface::create(); mCallContent->plugInterface(Tp::AbstractCallContentInterfacePtr::dynamicCast(mDTMFIface)); mCallChannel->addContent(mCallContent); mDTMFIface->setStartToneCallback(Tp::memFun(this,&MockCallChannel::onDTMFStartTone)); mDTMFIface->setStopToneCallback(Tp::memFun(this,&MockCallChannel::onDTMFStopTone)); mCallChannel->setMembersFlags(memberFlags, identifiers, Tp::UIntList(), reason); setCallState("initialised"); QObject::connect(mBaseChannel.data(), SIGNAL(closed()), this, SLOT(deleteLater())); } void MockCallChannel::onOfonoMuteChanged(bool mute) { Tp::LocalMuteState state = mute ? Tp::LocalMuteStateMuted : Tp::LocalMuteStateUnmuted; mMuteIface->setMuteState(state); } void MockCallChannel::onHoldStateChanged(const Tp::LocalHoldState &state, const Tp::LocalHoldStateReason &reason, Tp::DBusError *error) { if (state == Tp::LocalHoldStateHeld && mState == "active") { setCallState("held"); } else if (state == Tp::LocalHoldStateUnheld && mState == "held") { setCallState("active"); } } void MockCallChannel::onMuteStateChanged(const Tp::LocalMuteState &state, Tp::DBusError *error) { #if 0 FIXME: reimplement if (state == Tp::LocalMuteStateMuted) { mConnection->callVolume()->setMuted(true); } else if (state == Tp::LocalMuteStateUnmuted) { mConnection->callVolume()->setMuted(false); } #endif } void MockCallChannel::onDTMFStartTone(uchar event, Tp::DBusError *error) { QString finalString; if (event == 10) { finalString = "*"; } else if (event == 11) { finalString = "#"; } else { finalString = QString::number(event); } qDebug() << "start tone" << finalString; } void MockCallChannel::onDTMFStopTone(Tp::DBusError *error) { } void MockCallChannel::onSplit(Tp::DBusError *error) { Q_EMIT splitted(); } QString MockCallChannel::objectPath() const { return mBaseChannel->objectPath(); } Tp::CallState MockCallChannel::callState() const { return (Tp::CallState) mCallChannel->callState(); } MockCallChannel::~MockCallChannel() { } Tp::BaseChannelPtr MockCallChannel::baseChannel() { return mBaseChannel; } void MockCallChannel::setCallState(const QString &state) { Tp::CallStateReason reason; QVariantMap stateDetails; reason.actor = 0; reason.reason = Tp::CallStateChangeReasonUserRequested; reason.message = ""; reason.DBusReason = ""; if (state == "disconnected") { qDebug() << "disconnected"; if (mIncoming && mState == "incoming" && !mRequestedHangup) { reason.reason = Tp::CallStateChangeReasonNoAnswer; } mCallChannel->setCallState(Tp::CallStateEnded, 0, reason, stateDetails); mBaseChannel->close(); } else if (state == "accepted") { mCallChannel->setCallState(Tp::CallStateAccepted, 0, reason, stateDetails); } else if (state == "active") { qDebug() << "active"; mHoldIface->setHoldState(Tp::LocalHoldStateUnheld, Tp::LocalHoldStateReasonNone); if (mState == "dialing" || mState == "alerting" || mState == "incoming") { mCallChannel->setCallState(Tp::CallStateAccepted, 0, reason, stateDetails); } mCallChannel->setCallState(Tp::CallStateActive, 0, reason, stateDetails); } else if (state == "held") { mHoldIface->setHoldState(Tp::LocalHoldStateHeld, Tp::LocalHoldStateReasonNone); qDebug() << "held"; } else if (state == "dialing") { qDebug() << "dialing"; } else if (state == "alerting") { qDebug() << "alerting"; } else if (state == "incoming") { mIncoming = true; qDebug() << "incoming"; } else if (state == "waiting") { mIncoming = true; qDebug() << "waiting"; } else if (state == "initialising") { reason.reason = Tp::CallStateChangeReasonProgressMade; mCallChannel->setCallState(Tp::CallStateInitialising, 0, reason, stateDetails); } else if (state == "initialised") { reason.reason = Tp::CallStateChangeReasonProgressMade; mCallChannel->setCallState(Tp::CallStateInitialised, 0, reason, stateDetails); } mState = state; Q_EMIT callStateChanged(this, state); } telephony-service-0.5.3/tests/common/mock/callchannel.h000066400000000000000000000051031455543255600232010ustar00rootroot00000000000000/** * Copyright (C) 2013 Canonical, Ltd. * * This program is free software: you can redistribute it and/or modify it under * the terms of the GNU General Public License version 3, as published by * the Free Software Foundation. * * This program is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranties of MERCHANTABILITY, * SATISFACTORY QUALITY, 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 . * * Authors: Tiago Salem Herrmann Gustavo Pichorim Boiko */ #ifndef MOCKCALLCHANNEL_H #define MOCKCALLCHANNEL_H #include #include #include #include #include #include "connection.h" class MockConnection; class MockCallChannel : public QObject { Q_OBJECT public: MockCallChannel(MockConnection *conn, QString phoneNumber, QString state, uint targetHandle, QObject *parent = 0); ~MockCallChannel(); Tp::BaseChannelPtr baseChannel(); void onHangup(uint reason, const QString &detailedReason, const QString &message, Tp::DBusError* error); void onAccept(Tp::DBusError*); void onMuteStateChanged(const Tp::LocalMuteState &state, Tp::DBusError *error); void onHoldStateChanged(const Tp::LocalHoldState &state, const Tp::LocalHoldStateReason &reason, Tp::DBusError *error); void onDTMFStartTone(uchar event, Tp::DBusError *error); void onDTMFStopTone(Tp::DBusError *error); void onSplit(Tp::DBusError *error); QString objectPath() const; Tp::CallState callState() const; public Q_SLOTS: void setCallState(const QString &state); void init(); void onOfonoMuteChanged(bool mute); Q_SIGNALS: void callStateChanged(MockCallChannel *channel, const QString &state); void splitted(); private: QString mObjPath; QString mState; bool mIncoming; bool mRequestedHangup; Tp::BaseChannelPtr mBaseChannel; QString mPhoneNumber; MockConnection *mConnection; uint mTargetHandle; Tp::BaseChannelHoldInterfacePtr mHoldIface; Tp::BaseCallMuteInterfacePtr mMuteIface; Tp::BaseChannelSplittableInterfacePtr mSplittableIface; Tp::BaseChannelCallTypePtr mCallChannel; Tp::BaseCallContentDTMFInterfacePtr mDTMFIface; Tp::BaseCallContentPtr mCallContent; }; #endif // MOCKCALLCHANNEL_H telephony-service-0.5.3/tests/common/mock/conferencecallchannel.cpp000066400000000000000000000236521455543255600255750ustar00rootroot00000000000000/** * Copyright (C) 2013 Canonical, Ltd. * * This program is free software: you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License version 3, as published by * the Free Software Foundation. * * This program is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranties of MERCHANTABILITY, * SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * * Authors: * Tiago Salem Herrmann * Gustavo Pichorim Boiko */ #include "conferencecallchannel.h" #include "callchannel.h" MockConferenceCallChannel::MockConferenceCallChannel(MockConnection *conn, QList callChannels, QObject *parent): mRequestedHangup(false), mConnection(conn), mDtmfLock(false), mCallChannels(callChannels) { Q_FOREACH(MockCallChannel *channel, mConnection->callChannels().values()) { if (channel->callState() == Tp::CallStateActive) { QDBusObjectPath path(channel->baseChannel()->objectPath()); mCallChannels << path; } } Tp::BaseChannelPtr baseChannel = Tp::BaseChannel::create(mConnection, TP_QT_IFACE_CHANNEL_TYPE_CALL, Tp::HandleTypeNone, 0); Tp::BaseChannelCallTypePtr callType = Tp::BaseChannelCallType::create(baseChannel.data(), true, Tp::StreamTransportTypeUnknown, true, false, "",""); baseChannel->plugInterface(Tp::AbstractChannelInterfacePtr::dynamicCast(callType)); mHoldIface = Tp::BaseChannelHoldInterface::create(); mHoldIface->setSetHoldStateCallback(Tp::memFun(this,&MockConferenceCallChannel::onHoldStateChanged)); mMuteIface = Tp::BaseCallMuteInterface::create(); mMuteIface->setSetMuteStateCallback(Tp::memFun(this,&MockConferenceCallChannel::onMuteStateChanged)); mSpeakerIface = BaseChannelSpeakerInterface::create(); mSpeakerIface->setTurnOnSpeakerCallback(Tp::memFun(this,&MockConferenceCallChannel::onTurnOnSpeaker)); mConferenceIface = Tp::BaseChannelConferenceInterface::create(mCallChannels); mMergeableIface = Tp::BaseChannelMergeableConferenceInterface::create(); mMergeableIface->setMergeCallback(Tp::memFun(this,&MockConferenceCallChannel::onMerge)); baseChannel->plugInterface(Tp::AbstractChannelInterfacePtr::dynamicCast(mHoldIface)); baseChannel->plugInterface(Tp::AbstractChannelInterfacePtr::dynamicCast(mMuteIface)); baseChannel->plugInterface(Tp::AbstractChannelInterfacePtr::dynamicCast(mSpeakerIface)); baseChannel->plugInterface(Tp::AbstractChannelInterfacePtr::dynamicCast(mConferenceIface)); baseChannel->plugInterface(Tp::AbstractChannelInterfacePtr::dynamicCast(mMergeableIface)); mBaseChannel = baseChannel; mCallChannel = Tp::BaseChannelCallTypePtr::dynamicCast(mBaseChannel->interface(TP_QT_IFACE_CHANNEL_TYPE_CALL)); mCallChannel->setHangupCallback(Tp::memFun(this,&MockConferenceCallChannel::onHangup)); Tp::CallStateReason reason; QVariantMap stateDetails; reason.actor = 0; reason.reason = Tp::CallStateChangeReasonUserRequested; reason.message = ""; reason.DBusReason = ""; mCallChannel->setCallState(Tp::CallStateActive, 0, reason, stateDetails); QObject::connect(mConnection, SIGNAL(channelSplitted(QDBusObjectPath)), SLOT(onChannelSplitted(QDBusObjectPath))); // init must be called after initialization, otherwise we will have no object path registered. QTimer::singleShot(0, this, SLOT(init())); } Tp::BaseChannelPtr MockConferenceCallChannel::baseChannel() { return mBaseChannel; } void MockConferenceCallChannel::onMerge(const QDBusObjectPath &channel, Tp::DBusError *error) { if (!mCallChannels.contains(channel)) { mCallChannels << channel; mConferenceIface->mergeChannel(channel, 0, QVariantMap()); Q_EMIT channelMerged(channel.path()); } } void MockConferenceCallChannel::onChannelSplitted(const QDBusObjectPath &path) { if (mCallChannels.contains(path)) { mCallChannels.removeAll(path); mConferenceIface->removeChannel(path, QVariantMap()); } if (mCallChannels.size() == 1) { // remove the call channel from the conference before closing it. mConferenceIface->removeChannel(mCallChannels.takeFirst(), QVariantMap()); Tp::CallStateReason reason; QVariantMap stateDetails; reason.actor = 0; reason.reason = Tp::CallStateChangeReasonUserRequested; reason.message = ""; reason.DBusReason = ""; mCallChannel->setCallState(Tp::CallStateEnded, 0, reason, stateDetails); mBaseChannel->close(); } } void MockConferenceCallChannel::onTurnOnSpeaker(bool active, Tp::DBusError *error) { //mConnection->setSpeakerMode(active); // FIXME: reimplement } void MockConferenceCallChannel::onHangup(uint reason, const QString &detailedReason, const QString &message, Tp::DBusError *error) { //FIXME: reimplement Tp::CallStateReason theReason; QVariantMap stateDetails; theReason.actor = 0; theReason.reason = reason; theReason.message = message; theReason.DBusReason = ""; mCallChannel->setCallState(Tp::CallStateEnded, 0, theReason, stateDetails); mBaseChannel->close(); } void MockConferenceCallChannel::init() { QVariantMap stateDetails; Tp::CallStateReason reason; mObjPath = mBaseChannel->objectPath(); reason.actor = 0; reason.reason = Tp::CallStateChangeReasonProgressMade; reason.message = ""; reason.DBusReason = ""; mCallChannel->setCallState(Tp::CallStateActive, 0, reason, stateDetails); mDTMFIface = Tp::BaseCallContentDTMFInterface::create(); mDTMFIface->setStartToneCallback(Tp::memFun(this,&MockConferenceCallChannel::onDTMFStartTone)); mDTMFIface->setStopToneCallback(Tp::memFun(this,&MockConferenceCallChannel::onDTMFStopTone)); QObject::connect(mBaseChannel.data(), SIGNAL(closed()), this, SLOT(deleteLater())); //QObject::connect(mConnection->callVolume(), SIGNAL(mutedChanged(bool)), SLOT(onOfonoMuteChanged(bool))); QObject::connect(mConnection, SIGNAL(speakerModeChanged(bool)), mSpeakerIface.data(), SLOT(setSpeakerMode(bool))); //QObject::connect(mConnection->voiceCallManager(), SIGNAL(sendTonesComplete(bool)), SLOT(onDtmfComplete(bool))); //mSpeakerIface->setSpeakerMode(mConnection->speakerMode()); QObject::connect(mConnection, SIGNAL(channelSplitted(const QDBusObjectPath&)), this, SLOT(onChannelSplitted(const QDBusObjectPath&))); QObject::connect(mConnection, SIGNAL(channelHangup(const QDBusObjectPath&)), this, SLOT(onChannelSplitted(const QDBusObjectPath&))); Q_EMIT initialized(); } void MockConferenceCallChannel::onOfonoMuteChanged(bool mute) { Tp::LocalMuteState state = mute ? Tp::LocalMuteStateMuted : Tp::LocalMuteStateUnmuted; mMuteIface->setMuteState(state); } void MockConferenceCallChannel::setConferenceActive(bool active) { if (active) { mHoldIface->setHoldState(Tp::LocalHoldStateUnheld, Tp::LocalHoldStateReasonNone); } else { mHoldIface->setHoldState(Tp::LocalHoldStateHeld, Tp::LocalHoldStateReasonNone); } } void MockConferenceCallChannel::onHoldStateChanged(const Tp::LocalHoldState &state, const Tp::LocalHoldStateReason &reason, Tp::DBusError *error) { /*if (state == Tp::LocalHoldStateHeld && mHoldIface->getHoldState() == Tp::LocalHoldStateUnheld) { mConnection->voiceCallManager()->swapCalls(); } else if (state == Tp::LocalHoldStateUnheld && mHoldIface->getHoldState() == Tp::LocalHoldStateHeld) { mConnection->voiceCallManager()->swapCalls(); }*/ // FIXME: reimplement } void MockConferenceCallChannel::onMuteStateChanged(const Tp::LocalMuteState &state, Tp::DBusError *error) { /*if (state == Tp::LocalMuteStateMuted) { mConnection->callVolume()->setMuted(true); } else if (state == Tp::LocalMuteStateUnmuted) { mConnection->callVolume()->setMuted(false); }*/ // FIXME: reimplement } void MockConferenceCallChannel::sendNextDtmf() { /*if (mDtmfLock) { return; } if (!mDtmfPendingStrings.isEmpty()) { mDtmfLock = true; mConnection->voiceCallManager()->sendTones(mDtmfPendingStrings.front()); }*/ // FIXME: reimplement } void MockConferenceCallChannel::onDtmfComplete(bool success) { mDtmfLock = false; if (success) { mDtmfPendingStrings.removeFirst(); if (mDtmfPendingStrings.isEmpty()) { return; } sendNextDtmf(); } else { QTimer::singleShot(1000, this, SLOT(sendNextDtmf())); } } void MockConferenceCallChannel::onDTMFStartTone(uchar event, Tp::DBusError *error) { QString finalString; if (event == 10) { finalString = "*"; } else if (event == 11) { finalString = "#"; } else { finalString = QString::number(event); } qDebug() << "start tone" << finalString; // we can't append to the first item in the queue as it is being sent and // we dont know yet if it will succeed or not. if (mDtmfPendingStrings.count() > 1) { mDtmfPendingStrings[1] += finalString; } else { mDtmfPendingStrings << finalString; } sendNextDtmf(); } void MockConferenceCallChannel::onDTMFStopTone(Tp::DBusError *error) { } MockConferenceCallChannel::~MockConferenceCallChannel() { qDebug() << "conference call channel closed"; // TODO - for some reason the object is not being removed mConnection->dbusConnection().unregisterObject(mObjPath, QDBusConnection::UnregisterTree); } telephony-service-0.5.3/tests/common/mock/conferencecallchannel.h000066400000000000000000000055701455543255600252410ustar00rootroot00000000000000/** * Copyright (C) 2013 Canonical, Ltd. * * This program is free software: you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License version 3, as published by * the Free Software Foundation. * * This program is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranties of MERCHANTABILITY, * SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * * Authors: * Tiago Salem Herrmann * Gustavo Pichorim Boiko */ #ifndef MOCKCONFERENCECALLCHANNEL_H #define MOCKCONFERENCECALLCHANNEL_H #include #include #include #include #include #include "connection.h" #include "speakeriface.h" class MockConnection; class MockConferenceCallChannel : public QObject { Q_OBJECT public: MockConferenceCallChannel(MockConnection *conn, QList callChannels, QObject *parent = 0); ~MockConferenceCallChannel(); void onHangup(uint reason, const QString &detailedReason, const QString &message, Tp::DBusError* error); void onMuteStateChanged(const Tp::LocalMuteState &state, Tp::DBusError *error); void onHoldStateChanged(const Tp::LocalHoldState &state, const Tp::LocalHoldStateReason &reason, Tp::DBusError *error); void onDTMFStartTone(uchar event, Tp::DBusError *error); void onDTMFStopTone(Tp::DBusError *error); void onTurnOnSpeaker(bool active, Tp::DBusError *error); void onMerge(const QDBusObjectPath &channel, Tp::DBusError *error); Tp::BaseChannelPtr baseChannel(); void setConferenceActive(bool active); Q_SIGNALS: void channelMerged(const QString &objectPath); void initialized(); private Q_SLOTS: void onDtmfComplete(bool success); void sendNextDtmf(); void init(); void onOfonoMuteChanged(bool mute); void onChannelSplitted(const QDBusObjectPath &path); private: QString mObjPath; QString mPreviousState; bool mIncoming; bool mRequestedHangup; MockConnection *mConnection; QList mCallChannels; Tp::BaseChannelPtr mBaseChannel; Tp::BaseChannelHoldInterfacePtr mHoldIface; Tp::BaseChannelConferenceInterfacePtr mConferenceIface; Tp::BaseChannelMergeableConferenceInterfacePtr mMergeableIface; Tp::BaseCallMuteInterfacePtr mMuteIface; BaseChannelSpeakerInterfacePtr mSpeakerIface; Tp::BaseChannelCallTypePtr mCallChannel; Tp::BaseCallContentDTMFInterfacePtr mDTMFIface; bool mDtmfLock; QStringList mDtmfPendingStrings; }; #endif // MOCKCONFERENCECALLCHANNEL_H telephony-service-0.5.3/tests/common/mock/connection.cpp000066400000000000000000000714511455543255600234400ustar00rootroot00000000000000/** * Copyright (C) 2013-2016 Canonical, Ltd. * * This program is free software: you can redistribute it and/or modify it under * the terms of the GNU General Public License version 3, as published by * the Free Software Foundation. * * This program is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranties of MERCHANTABILITY, * SATISFACTORY QUALITY, 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 . * * Authors: Tiago Salem Herrmann * Gustavo Pichorim Boiko */ #include #include #include #include // telepathy-mock #include "connection.h" #include "phoneutils.h" #include "protocol.h" #include "conferencecallchannel.h" #include "include/cellbroadcast-types.h" #include "mockconnectiondbus.h" MockConnection::MockConnection(const QDBusConnection &dbusConnection, const QString &cmName, const QString &protocolName, const QVariantMap ¶meters) : Tp::BaseConnection(dbusConnection, cmName, protocolName, parameters), mConferenceCall(0), mVoicemailIndicator(false), mVoicemailCount(0) { setSelfHandle(newHandle("11112222")); setConnectCallback(Tp::memFun(this,&MockConnection::connect)); setInspectHandlesCallback(Tp::memFun(this,&MockConnection::inspectHandles)); setRequestHandlesCallback(Tp::memFun(this,&MockConnection::requestHandles)); setCreateChannelCallback(Tp::memFun(this,&MockConnection::createChannel)); // initialise requests interface (Connection.Interface.Requests) requestsIface = Tp::BaseConnectionRequestsInterface::create(this); // set requestable text channel properties Tp::RequestableChannelClass text; text.fixedProperties[TP_QT_IFACE_CHANNEL+".ChannelType"] = TP_QT_IFACE_CHANNEL_TYPE_TEXT; text.fixedProperties[TP_QT_IFACE_CHANNEL+".TargetHandleType"] = Tp::HandleTypeContact; text.allowedProperties.append(TP_QT_IFACE_CHANNEL+".TargetHandle"); text.allowedProperties.append(TP_QT_IFACE_CHANNEL+".TargetID"); text.allowedProperties.append(TP_QT_IFACE_CHANNEL_INTERFACE_CONFERENCE + QLatin1String(".InitialInviteeHandles")); // set requestable call channel properties Tp::RequestableChannelClass call; call.fixedProperties[TP_QT_IFACE_CHANNEL+".ChannelType"] = TP_QT_IFACE_CHANNEL_TYPE_CALL; call.fixedProperties[TP_QT_IFACE_CHANNEL+".TargetHandleType"] = Tp::HandleTypeContact; call.fixedProperties[TP_QT_IFACE_CHANNEL_TYPE_CALL+".InitialAudio"] = true; call.allowedProperties.append(TP_QT_IFACE_CHANNEL+".TargetHandle"); call.allowedProperties.append(TP_QT_IFACE_CHANNEL+".TargetID"); call.allowedProperties.append(TP_QT_IFACE_CHANNEL_TYPE_CALL+".InitialAudio"); call.allowedProperties.append(TP_QT_IFACE_CHANNEL_TYPE_CALL+".InitialVideo"); call.allowedProperties.append(TP_QT_IFACE_CHANNEL_TYPE_CALL+".InitialAudioName"); call.allowedProperties.append(TP_QT_IFACE_CHANNEL_TYPE_CALL+".InitialVideoName"); call.allowedProperties.append(TP_QT_IFACE_CHANNEL_TYPE_CALL+".InitialTransport"); call.allowedProperties.append(TP_QT_IFACE_CHANNEL_TYPE_CALL+".HardwareStreaming"); call.allowedProperties.append(TP_QT_IFACE_CHANNEL_INTERFACE_CONFERENCE + QLatin1String(".InitialChannels")); requestsIface->requestableChannelClasses << text << call; plugInterface(Tp::AbstractConnectionInterfacePtr::dynamicCast(requestsIface)); // init presence interface simplePresenceIface = Tp::BaseConnectionSimplePresenceInterface::create(); simplePresenceIface->setSetPresenceCallback(Tp::memFun(this,&MockConnection::setPresenceFail)); simplePresenceIface->setMaximumStatusMessageLength(255); plugInterface(Tp::AbstractConnectionInterfacePtr::dynamicCast(simplePresenceIface)); // Set Presence Tp::SimpleStatusSpec presenceOnline; presenceOnline.type = Tp::ConnectionPresenceTypeAvailable; presenceOnline.maySetOnSelf = true; presenceOnline.canHaveMessage = true; Tp::SimpleStatusSpec presenceOffline; presenceOffline.type = Tp::ConnectionPresenceTypeOffline; presenceOffline.maySetOnSelf = true; presenceOffline.canHaveMessage = true; Tp::SimpleStatusSpec presenceAway; presenceAway.type = Tp::ConnectionPresenceTypeAway; presenceAway.maySetOnSelf = true; presenceAway.canHaveMessage = true; mStatuses.insert(QLatin1String("available"), presenceOnline); mStatuses.insert(QLatin1String("offline"), presenceOffline); mStatuses.insert(QLatin1String("away"), presenceAway); mStatuses.insert(QLatin1String("simlocked"), presenceAway); mStatuses.insert(QLatin1String("flightmode"), presenceOffline); mStatuses.insert(QLatin1String("nosim"), presenceOffline); mStatuses.insert(QLatin1String("nomodem"), presenceOffline); mStatuses.insert(QLatin1String("registered"), presenceOnline); mStatuses.insert(QLatin1String("roaming"), presenceOnline); mStatuses.insert(QLatin1String("unregistered"), presenceAway); mStatuses.insert(QLatin1String("denied"), presenceAway); mStatuses.insert(QLatin1String("unknown"), presenceAway); mStatuses.insert(QLatin1String("searching"), presenceAway); simplePresenceIface->setStatuses(mStatuses); mSelfPresence.type = Tp::ConnectionPresenceTypeOffline; contactsIface = Tp::BaseConnectionContactsInterface::create(); contactsIface->setGetContactAttributesCallback(Tp::memFun(this,&MockConnection::getContactAttributes)); contactsIface->setContactAttributeInterfaces(QStringList() << TP_QT_IFACE_CONNECTION << TP_QT_IFACE_CONNECTION_INTERFACE_SIMPLE_PRESENCE); plugInterface(Tp::AbstractConnectionInterfacePtr::dynamicCast(contactsIface)); // init custom emergency mode interface (not provided by telepathy emergencyModeIface = BaseConnectionEmergencyModeInterface::create(); emergencyModeIface->setEmergencyNumbersCallback(Tp::memFun(this,&MockConnection::emergencyNumbers)); plugInterface(Tp::AbstractConnectionInterfacePtr::dynamicCast(emergencyModeIface)); mEmergencyNumbers << "123" << "456" << "789"; emergencyModeIface->setEmergencyNumbers(mEmergencyNumbers); emergencyModeIface->setCountryCode("US"); // init custom voicemail interface (not provided by telepathy) voicemailIface = BaseConnectionVoicemailInterface::create(); voicemailIface->setVoicemailCountCallback(Tp::memFun(this,&MockConnection::voicemailCount)); voicemailIface->setVoicemailIndicatorCallback(Tp::memFun(this,&MockConnection::voicemailIndicator)); voicemailIface->setVoicemailNumberCallback(Tp::memFun(this,&MockConnection::voicemailNumber)); voicemailIface->setVoicemailNumber(mVoicemailNumber); plugInterface(Tp::AbstractConnectionInterfacePtr::dynamicCast(voicemailIface)); voicemailIface->setVoicemailCount(mVoicemailCount); voicemailIface->setVoicemailIndicator(mVoicemailIndicator); mVoicemailNumber = "*555"; supplementaryServicesIface = BaseConnectionUSSDInterface::create(); supplementaryServicesIface->setInitiateCallback(Tp::memFun(this,&MockConnection::USSDInitiate)); supplementaryServicesIface->setRespondCallback(Tp::memFun(this,&MockConnection::USSDRespond)); supplementaryServicesIface->setCancelCallback(Tp::memFun(this,&MockConnection::USSDCancel)); static int serial = 0; serial++; supplementaryServicesIface->setSerial(QString("accountserial%1").arg(QString::number(serial))); plugInterface(Tp::AbstractConnectionInterfacePtr::dynamicCast(supplementaryServicesIface)); mDBus = new MockConnectionDBus(this); setOnline(true); } MockConnection::~MockConnection() { } void MockConnection::addMMSToService(const QString &path, const QVariantMap &properties, const QString &servicePath) { qDebug() << "addMMSToService " << path << properties << servicePath; #if 0 FIXME: re-implement MMSDMessage *msg = new MMSDMessage(path, properties); QObject::connect(msg, SIGNAL(propertyChanged(QString,QVariant)), SLOT(onMMSPropertyChanged(QString,QVariant))); mServiceMMSList[servicePath].append(msg); if (properties["Status"] == "received") { const QString normalizedNumber = PhoneUtils::normalizePhoneNumber(properties["Sender"].toString()); // check if there is an open channel for this number and use it Q_FOREACH(const QString &phoneNumber, mTextChannels.keys()) { if (PhoneUtils::comparePhoneNumbers(normalizedNumber, phoneNumber)) { qDebug() << "existing channel" << mTextChannels[phoneNumber]; mTextChannels[phoneNumber]->mmsReceived(path, properties); return; } } Tp::DBusError error; bool yours; qDebug() << "new handle" << normalizedNumber; uint handle = newHandle(normalizedNumber); ensureChannel(TP_QT_IFACE_CHANNEL_TYPE_TEXT,Tp::HandleTypeContact, handle, yours, handle, false, &error); if(error.isValid()) { qCritical() << "Error creating channel for incoming message " << error.name() << error.message(); return; } mTextChannels[normalizedNumber]->mmsReceived(path, properties); } #endif } MockTextChannel *MockConnection::textChannelForRecipients(const QStringList &recipients) { Q_FOREACH(MockTextChannel *channel, mTextChannels) { QStringList channelRecipients = channel->recipients(); if (channelRecipients.length() != recipients.length()) { continue; } bool ok = true; Q_FOREACH(const QString &recipient, recipients) { if (!channelRecipients.contains(recipient)) { ok = false; break; } } if (ok) { return channel; } } return 0; } uint MockConnection::setPresence(const QString& status, const QString& statusMessage, Tp::DBusError *error) { qDebug() << "setPresence" << status << statusMessage; Tp::SimpleContactPresences presences; if (!mStatuses.contains(status) || !mStatuses[status].maySetOnSelf) { error->set(TP_QT_ERROR_INVALID_ARGUMENT, "Status not supported or cannot be set"); return selfHandle(); } Tp::SimpleStatusSpec spec = mStatuses[status]; mSelfPresence.status = status; mSelfPresence.type = spec.type; mSelfPresence.statusMessage = spec.canHaveMessage ? statusMessage : ""; presences[selfHandle()] = mSelfPresence; simplePresenceIface->setPresences(presences); return selfHandle(); } uint MockConnection::setPresenceFail(const QString &status, const QString &statusMessage, Tp::DBusError *error) { error->set(TP_QT_ERROR_NOT_AVAILABLE, "Can't change online status: Operation not supported"); return selfHandle(); } Tp::ContactAttributesMap MockConnection::getContactAttributes(const Tp::UIntList &handles, const QStringList &ifaces, Tp::DBusError *error) { qDebug() << "getContactAttributes" << handles << ifaces; Tp::ContactAttributesMap attributesMap; QVariantMap attributes; Q_FOREACH(uint handle, handles) { attributes[TP_QT_IFACE_CONNECTION+"/contact-id"] = inspectHandles(Tp::HandleTypeContact, Tp::UIntList() << handle, error).at(0); if (ifaces.contains(TP_QT_IFACE_CONNECTION_INTERFACE_SIMPLE_PRESENCE)) { if (handle == selfHandle()) { attributes[TP_QT_IFACE_CONNECTION_INTERFACE_SIMPLE_PRESENCE+"/presence"] = QVariant::fromValue(mSelfPresence); } else if (mPresences.contains(handle)) { attributes[TP_QT_IFACE_CONNECTION_INTERFACE_SIMPLE_PRESENCE+"/presence"] = QVariant::fromValue(mPresences[handle]); } } attributesMap[handle] = attributes; } return attributesMap; } void MockConnection::setOnline(bool online) { qDebug() << "setOnline" << online; Tp::SimpleContactPresences presences; if (online) { mSelfPresence.status = "available"; mSelfPresence.statusMessage = ""; mSelfPresence.type = Tp::ConnectionPresenceTypeAvailable; } else { mSelfPresence.status = "offline"; mSelfPresence.statusMessage = ""; mSelfPresence.type = Tp::ConnectionPresenceTypeOffline; } presences[selfHandle()] = mSelfPresence; simplePresenceIface->setPresences(presences); } void MockConnection::simulateDisconnect() { setStatus(Tp::ConnectionStatusDisconnected, Tp::ConnectionStatusReasonRequested); } void MockConnection::simulateAuthFailure() { setStatus(Tp::ConnectionStatusDisconnected, Tp::ConnectionStatusReasonAuthenticationFailed); } uint MockConnection::newHandle(const QString &identifier) { static int handleCount = 0; mHandles[++handleCount] = identifier; return handleCount; } QMap MockConnection::callChannels() { return mCallChannels; } QStringList MockConnection::inspectHandles(uint handleType, const Tp::UIntList& handles, Tp::DBusError *error) { QStringList identifiers; if( handleType != Tp::HandleTypeContact ) { error->set(TP_QT_ERROR_INVALID_ARGUMENT,"Not supported"); return QStringList(); } qDebug() << "MockConnection::inspectHandles " << handles; Q_FOREACH( uint handle, handles) { if (mHandles.keys().contains(handle)) { identifiers.append(mHandles.value(handle)); } else { error->set(TP_QT_ERROR_INVALID_HANDLE, "Handle not found"); return QStringList(); } } qDebug() << "MockConnection::inspectHandles " << identifiers; return identifiers; } void MockConnection::connect(Tp::DBusError *error) { qDebug() << "MockConnection::connect"; setStatus(Tp::ConnectionStatusConnected, Tp::ConnectionStatusReasonRequested); } Tp::UIntList MockConnection::requestHandles(uint handleType, const QStringList& identifiers, Tp::DBusError* error) { qDebug() << "requestHandles"; Tp::UIntList handles; if( handleType != Tp::HandleTypeContact ) { error->set(TP_QT_ERROR_INVALID_ARGUMENT, "Not supported"); return Tp::UIntList(); } Q_FOREACH( const QString& identifier, identifiers) { if (mHandles.values().contains(identifier)) { handles.append(mHandles.key(identifier)); } else { handles.append(newHandle(identifier)); } } qDebug() << "requestHandles" << handles; return handles; } Tp::BaseChannelPtr MockConnection::createTextChannel(uint targetHandleType, uint targetHandle, const QVariantMap &hints, Tp::DBusError *error) { Q_UNUSED(targetHandleType); Q_UNUSED(error); if (hints.contains(TP_QT_IFACE_CHANNEL_INTERFACE_CONFERENCE + QLatin1String(".InitialInviteeHandles")) && targetHandleType == Tp::HandleTypeNone && targetHandle == 0) { } QStringList recipients; bool flash; if (hints.contains(TP_QT_IFACE_CHANNEL_INTERFACE_CONFERENCE + QLatin1String(".InitialInviteeIDs"))) { recipients = qdbus_cast(hints[TP_QT_IFACE_CHANNEL_INTERFACE_CONFERENCE + QLatin1String(".InitialInviteeIDs")]); } else if (hints.contains(TP_QT_IFACE_CHANNEL_INTERFACE_CONFERENCE + QLatin1String(".InitialInviteeHandles"))) { recipients << inspectHandles(Tp::HandleTypeContact, qdbus_cast(hints[TP_QT_IFACE_CHANNEL_INTERFACE_CONFERENCE + QLatin1String(".InitialInviteeHandles")]), error); } else { recipients << mHandles.value(targetHandle); } if (hints.contains(TP_QT_IFACE_CHANNEL_INTERFACE_SMS + QLatin1String(".Flash"))) { flash = hints[TP_QT_IFACE_CHANNEL_INTERFACE_SMS + QLatin1String(".Flash")].toBool(); } // FIXME: test flash messages MockTextChannel *channel = new MockTextChannel(this, recipients, targetHandle); QObject::connect(channel, SIGNAL(messageRead(QString)), SLOT(onMessageRead(QString))); QObject::connect(channel, SIGNAL(destroyed()), SLOT(onTextChannelClosed())); QObject::connect(channel, SIGNAL(messageSent(QString,QVariantList,QVariantMap)), SIGNAL(messageSent(QString,QVariantList,QVariantMap))); qDebug() << channel; mTextChannels << channel; return channel->baseChannel(); } void MockConnection::onMessageRead(const QString &id) { // FIXME: check what else to do Q_EMIT messageRead(id); } void MockConnection::onConferenceCallChannelClosed() { if (mConferenceCall) { mConferenceCall = NULL; } } void MockConnection::onCallChannelSplitted() { MockCallChannel *channel = qobject_cast(sender()); Q_EMIT channelSplitted(channel->baseChannel()->objectPath()); Q_EMIT channelSplitted(QDBusObjectPath(channel->baseChannel()->objectPath())); } Tp::BaseChannelPtr MockConnection::createCallChannel(uint targetHandleType, uint targetHandle, const QVariantMap &hints, Tp::DBusError *error) { Q_UNUSED(targetHandleType); QString requestedId = mHandles.value(targetHandle); if (hints.contains(TP_QT_IFACE_CHANNEL_INTERFACE_CONFERENCE + QLatin1String(".InitialChannels")) && targetHandleType == Tp::HandleTypeNone && targetHandle == 0) { // conference call request if (mConferenceCall) { error->set(TP_QT_ERROR_NOT_AVAILABLE, "Conference call already exists"); return Tp::BaseChannelPtr(); } QDBusArgument arg = hints[TP_QT_IFACE_CHANNEL_INTERFACE_CONFERENCE + QLatin1String(".InitialChannels")].value(); QList channels; arg >> channels; if (!channels.isEmpty()) { mConferenceCall = new MockConferenceCallChannel(this, channels); QObject::connect(mConferenceCall, SIGNAL(destroyed()), SLOT(onConferenceCallChannelClosed())); QObject::connect(mConferenceCall, SIGNAL(channelMerged(QString)), SIGNAL(channelMerged(QString))); // the object path is only availabe after we return to the event loop, so emit the conferenceCreated signal // only after that. QObject::connect(mConferenceCall, &MockConferenceCallChannel::initialized, [this]() { Q_EMIT conferenceCreated(mConferenceCall->baseChannel()->objectPath()); }); return mConferenceCall->baseChannel(); } error->set(TP_QT_ERROR_NOT_AVAILABLE, "Impossible to merge calls"); return Tp::BaseChannelPtr(); } Q_FOREACH(const QString &id, mCallChannels.keys()) { if (id == requestedId) { return mCallChannels[id]->baseChannel(); } } QString state = "dialing"; if (mInitialCallStatus.contains(requestedId)) { state = mInitialCallStatus.take(requestedId); } mCallChannels[requestedId] = new MockCallChannel(this, requestedId, state, targetHandle); QObject::connect(mCallChannels[requestedId], SIGNAL(destroyed()), SLOT(onCallChannelClosed())); QObject::connect(mCallChannels[requestedId], SIGNAL(callStateChanged(MockCallChannel*,QString)), SLOT(onCallStateChanged(MockCallChannel*,QString))); QObject::connect(mCallChannels[requestedId], SIGNAL(splitted()), SLOT(onCallChannelSplitted())); qDebug() << mCallChannels[requestedId]; if (!mIncomingCalls.contains(requestedId)) { Q_EMIT callReceived(requestedId); } return mCallChannels[requestedId]->baseChannel(); } Tp::BaseChannelPtr MockConnection::createChannel(const QVariantMap &request, Tp::DBusError *error) { const QString channelType = request.value(TP_QT_IFACE_CHANNEL + QLatin1String(".ChannelType")).toString(); uint targetHandleType = request.value(TP_QT_IFACE_CHANNEL + QLatin1String(".TargetHandleType")).toUInt(); uint targetHandle = request.value(TP_QT_IFACE_CHANNEL + QLatin1String(".TargetHandle")).toUInt(); QString targetId = request.value(TP_QT_IFACE_CHANNEL + QLatin1String(".TargetID")).toString(); qDebug() << "MockConnection::createChannel" << targetHandle; if (mSelfPresence.type != Tp::ConnectionPresenceTypeAvailable) { error->set(TP_QT_ERROR_NETWORK_ERROR, "No network available"); return Tp::BaseChannelPtr(); } if (!targetId.isEmpty()) { targetHandle = ensureHandle(targetId); } if (channelType == TP_QT_IFACE_CHANNEL_TYPE_TEXT) { return createTextChannel(targetHandleType, targetHandle, request, error); } else if (channelType == TP_QT_IFACE_CHANNEL_TYPE_CALL) { return createCallChannel(targetHandleType, targetHandle, request, error); } else { error->set(TP_QT_ERROR_NOT_IMPLEMENTED, "Channel type not available"); } return Tp::BaseChannelPtr(); } void MockConnection::placeIncomingMessage(const QString &message, const QVariantMap &info) { QString sender = info["Sender"].toString(); QStringList recipients = info["Recipients"].toStringList(); MockTextChannel *channel = textChannelForRecipients(recipients); if (!channel) { // request the channel Tp::DBusError error; QVariantMap request; bool yours; uint handle = ensureHandle(sender); request[TP_QT_IFACE_CHANNEL + QLatin1String(".ChannelType")] = TP_QT_IFACE_CHANNEL_TYPE_TEXT; request[TP_QT_IFACE_CHANNEL + QLatin1String(".InitiatorHandle")] = handle; request[TP_QT_IFACE_CHANNEL + QLatin1String(".TargetHandleType")] = Tp::HandleTypeContact; request[TP_QT_IFACE_CHANNEL + QLatin1String(".TargetHandle")] = handle; ensureChannel(request, yours, false, &error); if(error.isValid()) { qWarning() << "Error creating channel for incoming message" << error.name() << error.message(); return; } channel = textChannelForRecipients(recipients); if (!channel) { return; } } channel->messageReceived(message, info); } void MockConnection::onTextChannelClosed() { MockTextChannel *channel = static_cast(sender()); if (channel) { qDebug() << "text channel closed for recipients " << channel->recipients(); mTextChannels.removeAll(channel); } } void MockConnection::onCallChannelClosed() { qDebug() << "onCallChannelClosed()"; MockCallChannel *channel = static_cast(sender()); if (channel) { QString key = mCallChannels.key(channel); qDebug() << "call channel closed for number " << key; mCallChannels.remove(key); mIncomingCalls.removeAll(key); Q_EMIT callEnded(key); } } void MockConnection::onCallChannelDestroyed() { // FIXME: implement } void MockConnection::onCallStateChanged(MockCallChannel *channel, const QString &state) { const QString key = mCallChannels.key(channel); if (key.isEmpty()) { return; } Q_EMIT callStateChanged(key, channel->objectPath(), state); } uint MockConnection::ensureHandle(const QString &id) { if (mHandles.values().contains(id)) { return mHandles.key(id); } return newHandle(id); } QString MockConnection::placeCall(const QVariantMap &properties) { qDebug() << "new call" << properties; bool yours; Tp::DBusError error; QString callerId = properties["Caller"].toString(); QString state = properties["State"].toString(); if (mCallChannels.contains(callerId)) { return mCallChannels[callerId]->objectPath(); } uint handle = ensureHandle(callerId); uint initiatorHandle = 0; if (state == "incoming" || state == "waiting") { initiatorHandle = handle; } else { initiatorHandle = selfHandle(); } qDebug() << "initiatorHandle " <objectPath(); } QStringList MockConnection::emergencyNumbers(Tp::DBusError *error) { return mEmergencyNumbers; } void MockConnection::setEmergencyNumbers(const QStringList &emergencyNumbers) { mEmergencyNumbers = emergencyNumbers; emergencyModeIface->setEmergencyNumbers(emergencyNumbers); } void MockConnection::setCountryCode(const QString &countryCode) { mCountryCode = countryCode; emergencyModeIface->setCountryCode(countryCode); } bool MockConnection::voicemailIndicator(Tp::DBusError *error) { return mVoicemailIndicator; } void MockConnection::setVoicemailIndicator(bool visible) { mVoicemailIndicator = visible; voicemailIface->setVoicemailIndicator(visible); } QString MockConnection::voicemailNumber(Tp::DBusError *error) { return mVoicemailNumber; } void MockConnection::setVoicemailNumber(const QString &number) { mVoicemailNumber = number; voicemailIface->setVoicemailNumber(mVoicemailNumber); } uint MockConnection::voicemailCount(Tp::DBusError *error) { return mVoicemailCount; } void MockConnection::setVoicemailCount(int count) { mVoicemailCount = count; voicemailIface->setVoicemailCount(mVoicemailCount); } void MockConnection::USSDInitiate(const QString &command, Tp::DBusError *error) { // just emit a signal saying we received the command Q_EMIT ussdInitiateCalled(command); } void MockConnection::USSDRespond(const QString &reply, Tp::DBusError *error) { // just emit a signal saying we received the reply Q_EMIT ussdRespondCalled(reply); } void MockConnection::USSDCancel(Tp::DBusError *error) { // just emit a signal saying the operation was cancelled Q_EMIT ussdCancelCalled(); } QString MockConnection::serial() { return supplementaryServicesIface->serial(); } QString MockConnection::uniqueName() const { static int count = 0; return QString("connection%1%2").arg((quintptr) this, 0, 16).arg(count++, 0, 16); } void MockConnection::placeIncomingCellBroadcast(const QString &message, int type, quint16 topic) { QString sender = CellBroadcast::CELLBROADCAST_IDENTIFIER; QStringList members = QStringList() << sender; MockTextChannel *channel = textChannelForRecipients(members); if (!channel) { // request the channel Tp::DBusError error; QVariantMap request; bool yours; uint handle = ensureHandle(CellBroadcast::CELLBROADCAST_IDENTIFIER); request[TP_QT_IFACE_CHANNEL + QLatin1String(".ChannelType")] = TP_QT_IFACE_CHANNEL_TYPE_TEXT; request[TP_QT_IFACE_CHANNEL + QLatin1String(".InitiatorHandle")] = handle; request[TP_QT_IFACE_CHANNEL + QLatin1String(".TargetHandleType")] = Tp::HandleTypeContact; request[TP_QT_IFACE_CHANNEL + QLatin1String(".TargetHandle")] = handle; ensureChannel(request, yours, false, &error); if(error.isValid()) { qWarning() << "Error creating channel for incoming message" << error.name() << error.message(); return; } channel = textChannelForRecipients(members); if (!channel) { return; } } channel->cellBroadcastReceived(message, (CellBroadcast::Type) type, topic); } void MockConnection::hangupCall(const QString &callerId) { if (!mCallChannels.contains(callerId)) { return; } mCallChannels[callerId]->setCallState("disconnected"); mIncomingCalls.removeAll(callerId); } void MockConnection::setCallState(const QString &phoneNumber, const QString &state) { if (!mCallChannels.contains(phoneNumber)) { return; } mCallChannels[phoneNumber]->setCallState(state); } void MockConnection::changeChatState(const QStringList &participants, const QString &userId, int state) { MockTextChannel *channel = textChannelForRecipients(participants); if (!channel) { return; } channel->changeChatState(userId, state); } void MockConnection::setContactPresence(const QString &id, int presenceType, const QString &status, const QString &statusMessage) { Tp::SimpleContactPresences presences; Tp::SimplePresence presence; presence.status = status; presence.statusMessage = statusMessage; presence.type = (Tp::ConnectionPresenceType)presenceType; uint handle = ensureHandle(id); presences[handle] = presence; mPresences[handle] = presence; simplePresenceIface->setPresences(presences); } telephony-service-0.5.3/tests/common/mock/connection.h000066400000000000000000000152721455543255600231040ustar00rootroot00000000000000/** * Copyright (C) 2013 Canonical, Ltd. * * This program is free software: you can redistribute it and/or modify it under * the terms of the GNU General Public License version 3, as published by * the Free Software Foundation. * * This program is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranties of MERCHANTABILITY, * SATISFACTORY QUALITY, 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 . * * Authors: Tiago Salem Herrmann * Gustavo Pichorim Boiko */ #ifndef MOCKCONNECTION_H #define MOCKCONNECTION_H // qt #include // telepathy-qt #include #include #include #include #include // mock-cm #include "textchannel.h" #include "callchannel.h" #include "dbustypes.h" #include "emergencymodeiface.h" #include "ussdiface.h" #include "voicemailiface.h" class MockTextChannel; class MockCallChannel; class MockConnectionDBus; class MockConferenceCallChannel; class MockConnection : public Tp::BaseConnection { Q_OBJECT Q_DISABLE_COPY(MockConnection) public: MockConnection(const QDBusConnection &dbusConnection, const QString &cmName, const QString &protocolName, const QVariantMap ¶meters); QStringList inspectHandles(uint handleType, const Tp::UIntList& handles, Tp::DBusError *error); Tp::UIntList requestHandles(uint handleType, const QStringList& identifiers, Tp::DBusError* error); Tp::BaseChannelPtr createChannel(const QVariantMap& request, Tp::DBusError *error); Tp::ContactAttributesMap getContactAttributes(const Tp::UIntList &handles, const QStringList &ifaces, Tp::DBusError *error); uint setPresence(const QString& status, const QString& statusMessage, Tp::DBusError *error); uint setPresenceFail(const QString& status, const QString& statusMessage, Tp::DBusError *error); void setContactPresence(const QString &id, int presenceType, const QString &status = QString(), const QString &statusMessage = QString()); void connect(Tp::DBusError *error); void setOnline(bool online); void simulateAuthFailure(); void simulateDisconnect(); Tp::BaseConnectionRequestsInterfacePtr requestsIface; Tp::BaseConnectionSimplePresenceInterfacePtr simplePresenceIface; Tp::BaseConnectionContactsInterfacePtr contactsIface; uint newHandle(const QString &identifier); QMap callChannels(); // phone custom interfaces BaseConnectionEmergencyModeInterfacePtr emergencyModeIface; BaseConnectionVoicemailInterfacePtr voicemailIface; BaseConnectionUSSDInterfacePtr supplementaryServicesIface; uint ensureHandle(const QString &id); Tp::BaseChannelPtr createTextChannel(uint targetHandleType, uint targetHandle, const QVariantMap &hints, Tp::DBusError *error); Tp::BaseChannelPtr createCallChannel(uint targetHandleType, uint targetHandle, const QVariantMap &hints, Tp::DBusError *error); ~MockConnection(); QString placeCall(const QVariantMap &properties); QStringList emergencyNumbers(Tp::DBusError *error); void setEmergencyNumbers(const QStringList &emergencyNumbers); void setCountryCode(const QString &countryCode); bool voicemailIndicator(Tp::DBusError *error); void setVoicemailIndicator(bool visible); QString voicemailNumber(Tp::DBusError *error); void setVoicemailNumber(const QString &number); uint voicemailCount(Tp::DBusError *error); void setVoicemailCount(int count); void USSDInitiate(const QString &command, Tp::DBusError *error); void USSDRespond(const QString &reply, Tp::DBusError *error); void USSDCancel(Tp::DBusError *error); QString serial(); // FIXME: there is a problem in telepathy-qt that connection object paths and services are not properly unregistered // and thus if we gain the same memory address (and thus the same pointer) every time we reconnect, there might be some problems QString uniqueName() const; Q_SIGNALS: void messageRead(const QString &messageId); void messageSent(const QString &message, const QVariantList &attachments, const QVariantMap &info); void callReceived(const QString &callerId); void callEnded(const QString &callerId); void callStateChanged(const QString &callerId, const QString &objectPath, const QString &state); void conferenceCreated(const QString &objectPath); void channelMerged(const QString &objectPath); void channelSplitted(const QString &objectPath); void channelSplitted(const QDBusObjectPath &objectPath); // USSD notifications void ussdInitiateCalled(const QString &command); void ussdRespondCalled(const QString &reply); void ussdCancelCalled(); public Q_SLOTS: void placeIncomingCellBroadcast(const QString &message, int type, quint16 topic); void placeIncomingMessage(const QString &message, const QVariantMap &info); void hangupCall(const QString &callerId); void setCallState(const QString &phoneNumber, const QString &state); void changeChatState(const QStringList &participants, const QString &userId, int state); void onTextChannelClosed(); void onCallChannelClosed(); void onCallChannelDestroyed(); void onCallStateChanged(MockCallChannel *channel, const QString &state); void onMessageRead(const QString &id); void onConferenceCallChannelClosed(); void onCallChannelSplitted(); private: void addMMSToService(const QString &path, const QVariantMap &properties, const QString &servicePath); MockTextChannel *textChannelForRecipients(const QStringList &recipients); QMap mHandles; Tp::SimpleStatusSpecMap mStatuses; QList mTextChannels; QMap mCallChannels; QMap mInitialCallStatus; QStringList mModems; Tp::SimplePresence mSelfPresence; Tp::SimpleContactPresences mPresences; MockConnectionDBus *mDBus; QStringList mIncomingCalls; MockConferenceCallChannel *mConferenceCall; QStringList mEmergencyNumbers; QString mCountryCode; int mVoicemailCount; bool mVoicemailIndicator; QString mVoicemailNumber; }; #endif telephony-service-0.5.3/tests/common/mock/dbustypes.h000066400000000000000000000022751455543255600227660ustar00rootroot00000000000000/** * Copyright (C) 2013 Canonical, Ltd. * * This program is free software: you can redistribute it and/or modify it under * the terms of the GNU General Public License version 3, as published by * the Free Software Foundation. * * This program is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranties of MERCHANTABILITY, * SATISFACTORY QUALITY, 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 . * * Authors: Tiago Salem Herrmann */ #ifndef DBUSTYPES #define DBUSTYPES struct MessageStruct { QDBusObjectPath path; QVariantMap properties; }; struct AttachmentStruct { QString id; QString contentType; QString filePath; quint64 offset; quint64 length; }; typedef QList AttachmentList; Q_DECLARE_METATYPE(AttachmentStruct) Q_DECLARE_METATYPE(AttachmentList) typedef QList MessageList; Q_DECLARE_METATYPE(MessageStruct) Q_DECLARE_METATYPE(MessageList) #endif telephony-service-0.5.3/tests/common/mock/emergencymodeiface.cpp000066400000000000000000000134001455543255600251020ustar00rootroot00000000000000/** * Copyright (C) 2013-2015 Canonical, Ltd. * * This program is free software: you can redistribute it and/or modify it under * the terms of the GNU General Public License version 3, as published by * the Free Software Foundation. * * This program is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranties of MERCHANTABILITY, * SATISFACTORY QUALITY, 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 . * * Authors: Tiago Salem Herrmann Gustavo Pichorim Boiko */ #include #include #include #include "emergencymodeiface.h" BaseConnectionEmergencyModeInterface::Adaptee::Adaptee(BaseConnectionEmergencyModeInterface *interface) : QObject(interface), mInterface(interface) { } struct TP_QT_NO_EXPORT BaseConnectionEmergencyModeInterface::Private { Private(BaseConnectionEmergencyModeInterface *parent) : adaptee(new BaseConnectionEmergencyModeInterface::Adaptee(parent)) { } EmergencyNumbersCallback emergencyNumbersCB; BaseConnectionEmergencyModeInterface::Adaptee *adaptee; QString fakeEmergencyNumber; QString countryCode; }; BaseConnectionEmergencyModeInterface::Adaptee::~Adaptee() { } void BaseConnectionEmergencyModeInterface::Adaptee::emergencyNumbers(const ConnectionInterfaceEmergencyModeAdaptor::EmergencyNumbersContextPtr &context) { if (!mInterface->mPriv->emergencyNumbersCB.isValid()) { context->setFinishedWithError(TP_QT_ERROR_NOT_IMPLEMENTED, QLatin1String("Not implemented")); return; } Tp::DBusError error; QStringList numbers = mInterface->mPriv->emergencyNumbersCB(&error); if (error.isValid()) { context->setFinishedWithError(error.name(), error.message()); return; } if (mInterface->mPriv->fakeEmergencyNumber.isEmpty()) { context->setFinished(numbers); } else { context->setFinished(QStringList() << numbers << mInterface->mPriv->fakeEmergencyNumber); } } void BaseConnectionEmergencyModeInterface::Adaptee::countryCode(const ConnectionInterfaceEmergencyModeAdaptor::CountryCodeContextPtr &context) { context->setFinished(mInterface->mPriv->countryCode); } BaseConnectionEmergencyModeInterface::BaseConnectionEmergencyModeInterface() : AbstractConnectionInterface(TP_QT_IFACE_CONNECTION_EMERGENCYMODE), mPriv(new Private(this)) { } BaseConnectionEmergencyModeInterface::~BaseConnectionEmergencyModeInterface() { delete mPriv; } void BaseConnectionEmergencyModeInterface::setEmergencyNumbersCallback(const EmergencyNumbersCallback &cb) { mPriv->emergencyNumbersCB = cb; } void BaseConnectionEmergencyModeInterface::setEmergencyNumbers(const QStringList &numbers) { QStringList finalEmergencyList(numbers); if (!mPriv->fakeEmergencyNumber.isEmpty()) { finalEmergencyList << mPriv->fakeEmergencyNumber; } Q_EMIT mPriv->adaptee->emergencyNumbersChanged(finalEmergencyList); } void BaseConnectionEmergencyModeInterface::setCountryCode(const QString &countryCode) { mPriv->countryCode = countryCode; Q_EMIT mPriv->adaptee->countryCodeChanged(mPriv->countryCode); } void BaseConnectionEmergencyModeInterface::setFakeEmergencyNumber(const QString &fakeEmergencyNumber) { mPriv->fakeEmergencyNumber = fakeEmergencyNumber; } QVariantMap BaseConnectionEmergencyModeInterface::immutableProperties() const { QVariantMap map; return map; } void BaseConnectionEmergencyModeInterface::createAdaptor() { (void) new ConnectionInterfaceEmergencyModeAdaptor(dbusObject()->dbusConnection(), mPriv->adaptee, dbusObject()); } ConnectionInterfaceEmergencyModeAdaptor::ConnectionInterfaceEmergencyModeAdaptor(const QDBusConnection& bus, QObject* adaptee, QObject* parent) : Tp::AbstractAdaptor(bus, adaptee, parent) { connect(adaptee, SIGNAL(emergencyNumbersChanged(QStringList)), SIGNAL(EmergencyNumbersChanged(QStringList))); connect(adaptee, SIGNAL(countryCodeChanged(QString)), SIGNAL(CountryCodeChanged(QString))); } ConnectionInterfaceEmergencyModeAdaptor::~ConnectionInterfaceEmergencyModeAdaptor() { } QStringList ConnectionInterfaceEmergencyModeAdaptor::EmergencyNumbers(const QDBusMessage& dbusMessage) { if (!adaptee()->metaObject()->indexOfMethod("emergencyNumbers(ConnectionInterfaceEmergencyModeAdaptor::EmergencyNumbersContextPtr)") == -1) { dbusConnection().send(dbusMessage.createErrorReply(TP_QT_ERROR_NOT_IMPLEMENTED, QLatin1String("Not implemented"))); return QStringList(); } EmergencyNumbersContextPtr ctx = EmergencyNumbersContextPtr( new Tp::MethodInvocationContext< QStringList >(dbusConnection(), dbusMessage)); QMetaObject::invokeMethod(adaptee(), "emergencyNumbers", Q_ARG(ConnectionInterfaceEmergencyModeAdaptor::EmergencyNumbersContextPtr, ctx)); return QStringList(); } QString ConnectionInterfaceEmergencyModeAdaptor::CountryCode(const QDBusMessage& dbusMessage) { if (!adaptee()->metaObject()->indexOfMethod("countryCode(ConnectionInterfaceEmergencyModeAdaptor::CountryCodeContextPtr)") == -1) { dbusConnection().send(dbusMessage.createErrorReply(TP_QT_ERROR_NOT_IMPLEMENTED, QLatin1String("Not implemented"))); return QString(); } CountryCodeContextPtr ctx = CountryCodeContextPtr( new Tp::MethodInvocationContext< QString >(dbusConnection(), dbusMessage)); QMetaObject::invokeMethod(adaptee(), "countryCode", Q_ARG(ConnectionInterfaceEmergencyModeAdaptor::CountryCodeContextPtr, ctx)); return QString(); } telephony-service-0.5.3/tests/common/mock/emergencymodeiface.h000066400000000000000000000110551455543255600245530ustar00rootroot00000000000000/** * Copyright (C) 2013-2015 Canonical, Ltd. * * This program is free software: you can redistribute it and/or modify it under * the terms of the GNU General Public License version 3, as published by * the Free Software Foundation. * * This program is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranties of MERCHANTABILITY, * SATISFACTORY QUALITY, 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 . * * Authors: Tiago Salem Herrmann Gustavo Pichorim Boiko */ #ifndef OFONOEMERGENCYMODEIFACE_H #define OFONOEMERGENCYMODEIFACE_H // telepathy-qt #include #include #include #include #include class BaseConnectionEmergencyModeInterface; typedef Tp::SharedPtr BaseConnectionEmergencyModeInterfacePtr; #define TP_QT_IFACE_CONNECTION_EMERGENCYMODE "com.lomiri.Telephony.EmergencyMode" class TP_QT_EXPORT BaseConnectionEmergencyModeInterface : public Tp::AbstractConnectionInterface { Q_OBJECT Q_DISABLE_COPY(BaseConnectionEmergencyModeInterface) public: static BaseConnectionEmergencyModeInterfacePtr create() { return BaseConnectionEmergencyModeInterfacePtr(new BaseConnectionEmergencyModeInterface()); } template static Tp::SharedPtr create() { return Tp::SharedPtr( new BaseConnectionEmergencyModeInterfaceSubclass()); } QVariantMap immutableProperties() const; virtual ~BaseConnectionEmergencyModeInterface(); typedef Tp::Callback1 EmergencyNumbersCallback; void setEmergencyNumbersCallback(const EmergencyNumbersCallback &cb); void setFakeEmergencyNumber(const QString &fakeEmergencyNumber); public Q_SLOTS: void setEmergencyNumbers(const QStringList &numbers); void setCountryCode(const QString &countryCode); protected: BaseConnectionEmergencyModeInterface(); private: void createAdaptor(); class Adaptee; friend class Adaptee; struct Private; friend struct Private; Private *mPriv; }; class TP_QT_EXPORT ConnectionInterfaceEmergencyModeAdaptor : public Tp::AbstractAdaptor { Q_OBJECT Q_CLASSINFO("D-Bus Interface", TP_QT_IFACE_CONNECTION_EMERGENCYMODE) Q_CLASSINFO("D-Bus Introspection", "" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" "") public: ConnectionInterfaceEmergencyModeAdaptor(const QDBusConnection& dbusConnection, QObject* adaptee, QObject* parent); virtual ~ConnectionInterfaceEmergencyModeAdaptor(); typedef Tp::MethodInvocationContextPtr< QStringList > EmergencyNumbersContextPtr; typedef Tp::MethodInvocationContextPtr< QString > CountryCodeContextPtr; public Q_SLOTS: // METHODS QStringList EmergencyNumbers(const QDBusMessage& dbusMessage); QString CountryCode(const QDBusMessage& dbusMessage); Q_SIGNALS: // SIGNALS void EmergencyNumbersChanged(const QStringList &numbers); void CountryCodeChanged(const QString &countryCode); }; class TP_QT_NO_EXPORT BaseConnectionEmergencyModeInterface::Adaptee : public QObject { Q_OBJECT public: Adaptee(BaseConnectionEmergencyModeInterface *interface); ~Adaptee(); private Q_SLOTS: void emergencyNumbers(const ConnectionInterfaceEmergencyModeAdaptor::EmergencyNumbersContextPtr &context); void countryCode(const ConnectionInterfaceEmergencyModeAdaptor::CountryCodeContextPtr &context); Q_SIGNALS: void emergencyNumbersChanged(const QStringList &numbers); void countryCodeChanged(const QString &countryCode); public: BaseConnectionEmergencyModeInterface *mInterface; }; #endif telephony-service-0.5.3/tests/common/mock/main.cpp000066400000000000000000000034461455543255600222240ustar00rootroot00000000000000/** * Copyright (C) 2013 Canonical, Ltd. * * This program is free software: you can redistribute it and/or modify it under * the terms of the GNU General Public License version 3, as published by * the Free Software Foundation. * * This program is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranties of MERCHANTABILITY, * SATISFACTORY QUALITY, 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 . * * Authors: Tiago Salem Herrmann */ #include #include #include #include "protocol.h" int main(int argc, char *argv[]) { QCoreApplication a(argc, argv); Tp::registerTypes(); Tp::enableDebug(true); Tp::enableWarnings(true); // create a standard protocol Tp::BaseProtocolPtr proto = Tp::BaseProtocol::create( QDBusConnection::sessionBus(), QLatin1String("mock")); // create a phone protocol Tp::BaseProtocolPtr phoneProto = Tp::BaseProtocol::create( QDBusConnection::sessionBus(), QLatin1String("ofono")); // create a multimedia protocol Tp::BaseProtocolPtr multimediaProto = Tp::BaseProtocol::create( QDBusConnection::sessionBus(), QLatin1String("multimedia")); Tp::BaseConnectionManagerPtr cm = Tp::BaseConnectionManager::create( QDBusConnection::sessionBus(), QLatin1String("mock")); cm->addProtocol(multimediaProto); cm->addProtocol(phoneProto); cm->addProtocol(proto); cm->registerObject(); return a.exec(); } telephony-service-0.5.3/tests/common/mock/mockconnectiondbus.cpp000066400000000000000000000220741455543255600251650ustar00rootroot00000000000000/* * Copyright (C) 2013-2016 Canonical, Ltd. * * Authors: * Gustavo Pichorim Boiko * Tiago Salem Herrmann * * This file is part of history-service. * * history-service is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; version 3. * * history-service 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 . */ #include "connection.h" #include "mockconnectiondbus.h" #include "mockconnectionadaptor.h" Q_DECLARE_METATYPE(QList< QVariantMap >) MockConnectionDBus::MockConnectionDBus(MockConnection *parent) : QObject(parent), mAdaptor(0), mConnection(parent) { connect(mConnection, SIGNAL(messageRead(QString)), SIGNAL(MessageRead(QString))); connect(mConnection, SIGNAL(messageSent(QString,QVariantList,QVariantMap)), SIGNAL(MessageSent(QString,QVariantList,QVariantMap))); connect(mConnection, SIGNAL(callReceived(QString)), SIGNAL(CallReceived(QString))); connect(mConnection, SIGNAL(callEnded(QString)), SIGNAL(CallEnded(QString))); connect(mConnection, SIGNAL(callStateChanged(QString,QString,QString)), SIGNAL(CallStateChanged(QString,QString,QString))); connect(mConnection, SIGNAL(conferenceCreated(QString)), SIGNAL(ConferenceCreated(QString))); connect(mConnection, SIGNAL(channelMerged(QString)), SIGNAL(ChannelMerged(QString))); connect(mConnection, SIGNAL(channelSplitted(QString)), SIGNAL(ChannelSplitted(QString))); connect(mConnection, SIGNAL(ussdInitiateCalled(QString)), SIGNAL(USSDInitiateCalled(QString))); connect(mConnection, SIGNAL(ussdRespondCalled(QString)), SIGNAL(USSDRespondCalled(QString))); connect(mConnection, SIGNAL(ussdCancelCalled()), SIGNAL(USSDCancelCalled())); connect(mConnection, SIGNAL(disconnected()), SIGNAL(Disconnected())); connect(mConnection, SIGNAL(destroyed()), SIGNAL(Destroyed())); qDBusRegisterMetaType >(); mObjectPath = "/com/canonical/MockConnection/" + mConnection->protocolName(); connectToBus(); } MockConnectionDBus::~MockConnectionDBus() { QDBusConnection::sessionBus().unregisterObject(mObjectPath, QDBusConnection::UnregisterTree); } bool MockConnectionDBus::connectToBus() { if (!mAdaptor) { mAdaptor = new MockConnectionAdaptor(this); } if (!QDBusConnection::sessionBus().registerObject(mObjectPath, this)) { return false; } return QDBusConnection::sessionBus().registerService("com.canonical.MockConnection"); } void MockConnectionDBus::PlaceIncomingMessage(const QString &message, const QVariantMap &properties) { qDebug() << __PRETTY_FUNCTION__ << message << properties; mConnection->placeIncomingMessage(message, properties); } void MockConnectionDBus::PlaceIncomingCellBroadcast(const QString &message, int type, quint16 topic) { qDebug() << __PRETTY_FUNCTION__ << message << type << topic; mConnection->placeIncomingCellBroadcast(message, type, topic); } void MockConnectionDBus::ChangeChatState(const QStringList &participants, const QString &userId, int state) { mConnection->changeChatState(participants, userId, state); } QString MockConnectionDBus::PlaceCall(const QVariantMap &properties) { qDebug() << __PRETTY_FUNCTION__ << properties; return mConnection->placeCall(properties); } void MockConnectionDBus::HangupCall(const QString &callerId) { qDebug() << __PRETTY_FUNCTION__ << callerId; mConnection->hangupCall(callerId); } void MockConnectionDBus::SetCallState(const QString &phoneNumber, const QString &state) { qDebug() << __PRETTY_FUNCTION__ << phoneNumber << state; mConnection->setCallState(phoneNumber, state); } void MockConnectionDBus::SetOnline(bool online) { qDebug() << __PRETTY_FUNCTION__ << online; mConnection->setOnline(online); } void MockConnectionDBus::SetPresence(const QString &status, const QString &statusMessage) { qDebug() << __PRETTY_FUNCTION__ << status << statusMessage; Tp::DBusError error; mConnection->setPresence(status, statusMessage, &error); } void MockConnectionDBus::SetContactPresence(const QString &id, int presenceType, const QString &status, const QString &statusMessage) { qDebug() << __PRETTY_FUNCTION__ << id << presenceType << status << statusMessage; mConnection->setContactPresence(id, presenceType, status, statusMessage); } void MockConnectionDBus::SimulateAuthFailure() { mConnection->simulateAuthFailure(); } void MockConnectionDBus::SimulateDisconnect() { mConnection->simulateDisconnect(); } void MockConnectionDBus::SetVoicemailIndicator(bool active) { qDebug() << __PRETTY_FUNCTION__ << active; mConnection->setVoicemailIndicator(active); } void MockConnectionDBus::SetVoicemailNumber(const QString &number) { qDebug() << __PRETTY_FUNCTION__ << number; mConnection->setVoicemailNumber(number); } void MockConnectionDBus::SetVoicemailCount(int count) { qDebug() << __PRETTY_FUNCTION__ << count; mConnection->setVoicemailCount(count); } void MockConnectionDBus::SetEmergencyNumbers(const QStringList &numbers) { qDebug() << __PRETTY_FUNCTION__ << numbers; mConnection->setEmergencyNumbers(numbers); } void MockConnectionDBus::SetCountryCode(const QString &countryCode) { qDebug() << __PRETTY_FUNCTION__ << countryCode; mConnection->setCountryCode(countryCode); } QString MockConnectionDBus::Serial() { qDebug() << __PRETTY_FUNCTION__ << mConnection->serial(); return mConnection->serial(); } void MockConnectionDBus::TriggerUSSDNotificationReceived(const QString &message) { qDebug() << __PRETTY_FUNCTION__ << message; mConnection->supplementaryServicesIface->NotificationReceived(message); } void MockConnectionDBus::TriggerUSSDRequestReceived(const QString &message) { qDebug() << __PRETTY_FUNCTION__ << message; mConnection->supplementaryServicesIface->RequestReceived(message); } void MockConnectionDBus::TriggerUSSDInitiateUSSDComplete(const QString &ussdResp) { qDebug() << __PRETTY_FUNCTION__ << ussdResp; mConnection->supplementaryServicesIface->InitiateUSSDComplete(ussdResp); } void MockConnectionDBus::TriggerUSSDRespondComplete(bool success, const QString &ussdResp) { qDebug() << __PRETTY_FUNCTION__ << ussdResp; mConnection->supplementaryServicesIface->RespondComplete(success, ussdResp); } void MockConnectionDBus::TriggerUSSDBarringComplete(const QString &ssOp, const QString &cbService, const QVariantMap &cbMap) { qDebug() << __PRETTY_FUNCTION__ << ssOp << cbService << cbMap; mConnection->supplementaryServicesIface->BarringComplete(ssOp, cbService, cbMap); } void MockConnectionDBus::TriggerUSSDForwardingComplete(const QString &ssOp, const QString &cfService, const QVariantMap &cfMap) { qDebug() << __PRETTY_FUNCTION__ << ssOp << cfService << cfMap; mConnection->supplementaryServicesIface->ForwardingComplete(ssOp, cfService, cfMap); } void MockConnectionDBus::TriggerUSSDWaitingComplete(const QString &ssOp, const QVariantMap &cwMap) { qDebug() << __PRETTY_FUNCTION__ << ssOp << cwMap; mConnection->supplementaryServicesIface->WaitingComplete(ssOp, cwMap); } void MockConnectionDBus::TriggerUSSDCallingLinePresentationComplete(const QString &ssOp, const QString &status) { qDebug() << __PRETTY_FUNCTION__ << ssOp << status; mConnection->supplementaryServicesIface->CallingLinePresentationComplete(ssOp, status); } void MockConnectionDBus::TriggerUSSDConnectedLinePresentationComplete(const QString &ssOp, const QString &status) { qDebug() << __PRETTY_FUNCTION__ << ssOp << status; mConnection->supplementaryServicesIface->ConnectedLinePresentationComplete(ssOp, status); } void MockConnectionDBus::TriggerUSSDCallingLineRestrictionComplete(const QString &ssOp, const QString &status) { qDebug() << __PRETTY_FUNCTION__ << ssOp << status; mConnection->supplementaryServicesIface->CallingLineRestrictionComplete(ssOp, status); } void MockConnectionDBus::TriggerUSSDConnectedLineRestrictionComplete(const QString &ssOp, const QString &status) { qDebug() << __PRETTY_FUNCTION__ << ssOp << status; mConnection->supplementaryServicesIface->ConnectedLineRestrictionComplete(ssOp, status); } void MockConnectionDBus::TriggerUSSDInitiateFailed() { qDebug() << __PRETTY_FUNCTION__; mConnection->supplementaryServicesIface->InitiateFailed(); } void MockConnectionDBus::TriggerUSSDStateChanged(const QString &state) { qDebug() << __PRETTY_FUNCTION__ << state; mConnection->supplementaryServicesIface->StateChanged(state); } telephony-service-0.5.3/tests/common/mock/mockconnectiondbus.h000066400000000000000000000100301455543255600246170ustar00rootroot00000000000000/** * Copyright (C) 2013 Canonical, Ltd. * * This program is free software: you can redistribute it and/or modify it under * the terms of the GNU General Public License version 3, as published by * the Free Software Foundation. * * This program is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranties of MERCHANTABILITY, * SATISFACTORY QUALITY, 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 . * * Authors: Gustavo Pichorim Boiko */ #ifndef MOCKCONNECTIONDBUS_H #define MOCKCONNECTIONDBUS_H #include #include class MockConnectionAdaptor; class MockConnection; class MockConnectionDBus : public QObject, public QDBusContext { Q_OBJECT public: explicit MockConnectionDBus(MockConnection *parent); ~MockConnectionDBus(); bool connectToBus(); void PlaceIncomingMessage(const QString &message, const QVariantMap &properties); void PlaceIncomingCellBroadcast(const QString &message, int type, quint16 topic); void ChangeChatState(const QStringList &participants, const QString &userId, int state); QString PlaceCall(const QVariantMap &properties); void HangupCall(const QString &callerId); void SetCallState(const QString &phoneNumber, const QString &state); void SetOnline(bool online); void SetPresence(const QString &status, const QString &statusMessage); void SetContactPresence(const QString &id, int presenceType, const QString &status, const QString &statusMessage); void SimulateAuthFailure(); void SimulateDisconnect(); // voicemail stuff void SetVoicemailIndicator(bool active); void SetVoicemailNumber(const QString &number); void SetVoicemailCount(int count); // emergency numbers stuff void SetEmergencyNumbers(const QStringList &numbers); void SetCountryCode(const QString &countryCode); // USSD stuff QString Serial(); void TriggerUSSDNotificationReceived(const QString &message); void TriggerUSSDRequestReceived(const QString &message); void TriggerUSSDInitiateUSSDComplete(const QString &ussdResp); void TriggerUSSDRespondComplete(bool success, const QString &ussdResp); void TriggerUSSDBarringComplete(const QString &ssOp, const QString &cbService, const QVariantMap &cbMap); void TriggerUSSDForwardingComplete(const QString &ssOp, const QString &cfService, const QVariantMap &cfMap); void TriggerUSSDWaitingComplete(const QString &ssOp, const QVariantMap &cwMap); void TriggerUSSDCallingLinePresentationComplete(const QString &ssOp, const QString &status); void TriggerUSSDConnectedLinePresentationComplete(const QString &ssOp, const QString &status); void TriggerUSSDCallingLineRestrictionComplete(const QString &ssOp, const QString &status); void TriggerUSSDConnectedLineRestrictionComplete(const QString &ssOp, const QString &status); void TriggerUSSDInitiateFailed(); void TriggerUSSDStateChanged(const QString &state); Q_SIGNALS: // signals that will be relayed into the bus void MessageRead(const QString &messageId); void MessageSent(const QString &message, const QVariantList &attachments, const QVariantMap &properties); void CallReceived(const QString &callerId); void CallEnded(const QString &callerId); void CallStateChanged(const QString &callerId, const QString &objectPath, const QString &state); void ConferenceCreated(const QString &objectPath); void ChannelMerged(const QString &objectPath); void ChannelSplitted(const QString &objectPath); // USSD stuff void USSDInitiateCalled(const QString &command); void USSDRespondCalled(const QString &reply); void USSDCancelCalled(); void Disconnected(); void Destroyed(); private: MockConnectionAdaptor *mAdaptor; MockConnection *mConnection; QString mObjectPath; }; #endif // MOCKCONNECTIONDBUS_H telephony-service-0.5.3/tests/common/mock/protocol.cpp000066400000000000000000000037511455543255600231400ustar00rootroot00000000000000/** * Copyright (C) 2013 Canonical, Ltd. * * This program is free software: you can redistribute it and/or modify it under * the terms of the GNU General Public License version 3, as published by * the Free Software Foundation. * * This program is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranties of MERCHANTABILITY, * SATISFACTORY QUALITY, 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 . * * Authors: Tiago Salem Herrmann */ #include "protocol.h" #include "connection.h" #include #include Protocol::Protocol(const QDBusConnection &dbusConnection, const QString &name) : Tp::BaseProtocol(dbusConnection, name) { setRequestableChannelClasses(Tp::RequestableChannelClassSpecList() << Tp::RequestableChannelClassSpec::textChat() << Tp::RequestableChannelClassSpec::audioCall()); setCreateConnectionCallback(memFun(this, &Protocol::createConnection)); Tp::ProtocolParameterList parameters; Tp::ProtocolParameter parameter("modem-objpath", "s", 0); parameters << parameter; setParameters(parameters); addressingIface = Tp::BaseProtocolAddressingInterface::create(); if (name == "ofono") { addressingIface->setAddressableVCardFields(QStringList() << "tel"); } else { addressingIface->setAddressableVCardFields(QStringList() << "x-mock-im" << "x-sip"); } plugInterface(addressingIface); } Tp::BaseConnectionPtr Protocol::createConnection(const QVariantMap ¶meters, Tp::DBusError *error) { Q_UNUSED(error); return Tp::BaseConnection::create("mock", name().toLatin1(), parameters); } telephony-service-0.5.3/tests/common/mock/protocol.h000066400000000000000000000022551455543255600226030ustar00rootroot00000000000000/** * Copyright (C) 2013 Canonical, Ltd. * * Authors: * Tiago Salem Herrmann * * This file is part of telepathy-ofono. * * telepathy-ofono is free software; you can redistribute it and/or modify * it under the terms of the GNU LESSER General Public License as published by * the Free Software Foundation; version 3. * * telepathy-ofono 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 LESSER General Public License * along with this program. If not, see . */ #ifndef MOCKPROTOCOL_H #define MOCKPROTOCOL_H #include class Protocol : public Tp::BaseProtocol { Q_OBJECT Q_DISABLE_COPY(Protocol) public: Protocol(const QDBusConnection &dbusConnection, const QString &name); Tp::BaseProtocolAddressingInterfacePtr addressingIface; private: Tp::BaseConnectionPtr createConnection(const QVariantMap ¶meters, Tp::DBusError *error); }; #endif telephony-service-0.5.3/tests/common/mock/speakeriface.cpp000066400000000000000000000077051455543255600237240ustar00rootroot00000000000000/** * Copyright (C) 2013 Canonical, Ltd. * * This program is free software: you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License version 3, as published by * the Free Software Foundation. * * This program is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranties of MERCHANTABILITY, * SATISFACTORY QUALITY, or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program. If not, see . * * Authors: Tiago Salem Herrmann */ #include #include #include #include "speakeriface.h" // Chan.I.Speaker BaseChannelSpeakerInterface::Adaptee::Adaptee(BaseChannelSpeakerInterface *interface) : QObject(interface), mInterface(interface) { } struct TP_QT_NO_EXPORT BaseChannelSpeakerInterface::Private { Private(BaseChannelSpeakerInterface *parent) : speakerMode(false), adaptee(new BaseChannelSpeakerInterface::Adaptee(parent)) { } bool speakerMode; turnOnSpeakerCallback turnOnSpeakerCB; BaseChannelSpeakerInterface::Adaptee *adaptee; }; BaseChannelSpeakerInterface::Adaptee::~Adaptee() { } void BaseChannelSpeakerInterface::Adaptee::turnOnSpeaker(bool active, const ChannelInterfaceSpeakerAdaptor::turnOnSpeakerContextPtr &context) { if (!mInterface->mPriv->turnOnSpeakerCB.isValid()) { context->setFinishedWithError(TP_QT_ERROR_NOT_IMPLEMENTED, QLatin1String("Not implemented")); return; } Tp::DBusError error; mInterface->mPriv->turnOnSpeakerCB(active, &error); if (error.isValid()) { context->setFinishedWithError(error.name(), error.message()); return; } context->setFinished(); } BaseChannelSpeakerInterface::BaseChannelSpeakerInterface() : AbstractChannelInterface(TP_QT_IFACE_CHANNEL_SPEAKER), mPriv(new Private(this)) { } BaseChannelSpeakerInterface::~BaseChannelSpeakerInterface() { delete mPriv; } bool BaseChannelSpeakerInterface::speakerMode() const { return mPriv->speakerMode; } void BaseChannelSpeakerInterface::setTurnOnSpeakerCallback(const turnOnSpeakerCallback &cb) { mPriv->turnOnSpeakerCB = cb; } void BaseChannelSpeakerInterface::setSpeakerMode(bool active) { mPriv->speakerMode = active; Q_EMIT mPriv->adaptee->speakerChanged(active); } QVariantMap BaseChannelSpeakerInterface::immutableProperties() const { QVariantMap map; return map; } void BaseChannelSpeakerInterface::createAdaptor() { (void) new ChannelInterfaceSpeakerAdaptor(dbusObject()->dbusConnection(), mPriv->adaptee, dbusObject()); } ChannelInterfaceSpeakerAdaptor::ChannelInterfaceSpeakerAdaptor(const QDBusConnection& bus, QObject* adaptee, QObject* parent) : Tp::AbstractAdaptor(bus, adaptee, parent) { connect(adaptee, SIGNAL(speakerChanged(bool)), SIGNAL(SpeakerChanged(bool))); } ChannelInterfaceSpeakerAdaptor::~ChannelInterfaceSpeakerAdaptor() { } void ChannelInterfaceSpeakerAdaptor::turnOnSpeaker(bool active, const QDBusMessage& dbusMessage) { if (!adaptee()->metaObject()->indexOfMethod("turnOnSpeaker(bool,ChannelInterfaceSpeakerAdaptor::turnOnSpeakerContextPtr)") == -1) { dbusConnection().send(dbusMessage.createErrorReply(TP_QT_ERROR_NOT_IMPLEMENTED, QLatin1String("Not implemented"))); return; } turnOnSpeakerContextPtr ctx = turnOnSpeakerContextPtr( new Tp::MethodInvocationContext< bool >(dbusConnection(), dbusMessage)); QMetaObject::invokeMethod(adaptee(), "turnOnSpeaker", Q_ARG(bool, active), Q_ARG(ChannelInterfaceSpeakerAdaptor::turnOnSpeakerContextPtr, ctx)); return; } bool ChannelInterfaceSpeakerAdaptor::SpeakerMode() const { return qvariant_cast< bool >(adaptee()->property("speakerMode")); } telephony-service-0.5.3/tests/common/mock/speakeriface.h000066400000000000000000000075411455543255600233670ustar00rootroot00000000000000/** * Copyright (C) 2013-2015 Canonical, Ltd. * * This program is free software: you can redistribute it and/or modify it under * the terms of the GNU General Public License version 3, as published by * the Free Software Foundation. * * This program is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranties of MERCHANTABILITY, * SATISFACTORY QUALITY, 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 . * * Authors: Tiago Salem Herrmann Gustavo Pichorim Boiko */ #ifndef OFONOSPEAKERIFACE_H #define OFONOSPEAKERIFACE_H // telepathy-qt #include #include #include #include #include #define TP_QT_IFACE_CHANNEL_SPEAKER "com.lomiri.Telephony.Speaker" class BaseChannelSpeakerInterface; typedef Tp::SharedPtr BaseChannelSpeakerInterfacePtr; class TP_QT_EXPORT BaseChannelSpeakerInterface : public Tp::AbstractChannelInterface { Q_OBJECT Q_DISABLE_COPY(BaseChannelSpeakerInterface) public: static BaseChannelSpeakerInterfacePtr create() { return BaseChannelSpeakerInterfacePtr(new BaseChannelSpeakerInterface()); } template static Tp::SharedPtr create() { return Tp::SharedPtr( new BaseChannelSpeakerInterfaceSubclass()); } QVariantMap immutableProperties() const; virtual ~BaseChannelSpeakerInterface(); bool speakerMode() const; typedef Tp::Callback2 turnOnSpeakerCallback; void setTurnOnSpeakerCallback(const turnOnSpeakerCallback &cb); public Q_SLOTS: void setSpeakerMode(bool active); protected: BaseChannelSpeakerInterface(); private: void createAdaptor(); class Adaptee; friend class Adaptee; struct Private; friend struct Private; Private *mPriv; }; class TP_QT_EXPORT ChannelInterfaceSpeakerAdaptor : public Tp::AbstractAdaptor { Q_OBJECT Q_CLASSINFO("D-Bus Interface", TP_QT_IFACE_CHANNEL_SPEAKER) Q_CLASSINFO("D-Bus Introspection", "" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" "") Q_PROPERTY(bool SpeakerMode READ SpeakerMode) public: ChannelInterfaceSpeakerAdaptor(const QDBusConnection& dbusConnection, QObject* adaptee, QObject* parent); virtual ~ChannelInterfaceSpeakerAdaptor(); typedef Tp::MethodInvocationContextPtr< bool > turnOnSpeakerContextPtr; public: // PROPERTIES bool SpeakerMode() const; public Q_SLOTS: // METHODS void turnOnSpeaker(bool active, const QDBusMessage& dbusMessage); Q_SIGNALS: // SIGNALS void SpeakerChanged(bool active); }; class TP_QT_NO_EXPORT BaseChannelSpeakerInterface::Adaptee : public QObject { Q_OBJECT Q_PROPERTY(bool speakerMode READ speakerMode) public: Adaptee(BaseChannelSpeakerInterface *interface); ~Adaptee(); bool speakerMode() const { return mInterface->speakerMode(); } private Q_SLOTS: void turnOnSpeaker(bool active, const ChannelInterfaceSpeakerAdaptor::turnOnSpeakerContextPtr &context); Q_SIGNALS: void speakerChanged(bool active); public: BaseChannelSpeakerInterface *mInterface; }; #endif telephony-service-0.5.3/tests/common/mock/textchannel.cpp000066400000000000000000000323231455543255600236110ustar00rootroot00000000000000/** * Copyright (C) 2013-2016 Canonical, Ltd. * * This program is free software: you can redistribute it and/or modify it under * the terms of the GNU General Public License version 3, as published by * the Free Software Foundation. * * This program is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranties of MERCHANTABILITY, * SATISFACTORY QUALITY, 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 . * * Authors: Tiago Salem Herrmann * Gustavo Pichorim Boiko */ // telepathy-ofono #include "textchannel.h" #include "include/cellbroadcast-types.h" QDBusArgument &operator<<(QDBusArgument &argument, const AttachmentStruct &attachment) { argument.beginStructure(); argument << attachment.id << attachment.contentType << attachment.filePath << attachment.offset << attachment.length; argument.endStructure(); return argument; } const QDBusArgument &operator>>(const QDBusArgument &argument, AttachmentStruct &attachment) { argument.beginStructure(); argument >> attachment.id >> attachment.contentType >> attachment.filePath >> attachment.offset >> attachment.length; argument.endStructure(); return argument; } MockTextChannel::MockTextChannel(MockConnection *conn, QStringList recipients, uint targetHandle, QObject *parent): QObject(parent), mConnection(conn), mRecipients(recipients), mTargetHandle(targetHandle), mMessageCounter(1) { qDBusRegisterMetaType(); qDBusRegisterMetaType(); Tp::HandleType type = recipients.count() > 1 ? Tp::HandleTypeNone : Tp::HandleTypeContact; Tp::BaseChannelPtr baseChannel = Tp::BaseChannel::create(mConnection, TP_QT_IFACE_CHANNEL_TYPE_TEXT, type, targetHandle); mBaseChannel = baseChannel; Tp::BaseChannelTextTypePtr textType = Tp::BaseChannelTextType::create(baseChannel.data()); baseChannel->plugInterface(Tp::AbstractChannelInterfacePtr::dynamicCast(textType)); QStringList supportedContentTypes = QStringList() << "text/plain"; Tp::UIntList messageTypes = Tp::UIntList() << Tp::ChannelTextMessageTypeNormal << Tp::ChannelTextMessageTypeDeliveryReport; uint messagePartSupportFlags = 0; uint deliveryReportingSupport = Tp::DeliveryReportingSupportFlagReceiveSuccesses; mMessagesIface = Tp::BaseChannelMessagesInterface::create(textType.data(), supportedContentTypes, messageTypes, messagePartSupportFlags, deliveryReportingSupport); mMessagesIface->setSendMessageCallback(Tp::memFun(this,&MockTextChannel::sendMessage)); baseChannel->plugInterface(Tp::AbstractChannelInterfacePtr::dynamicCast(mMessagesIface)); mChatStateIface = Tp::BaseChannelChatStateInterface::create(); baseChannel->plugInterface(Tp::AbstractChannelInterfacePtr::dynamicCast(mChatStateIface)); #if TP_QT_VERSION >= TP_QT_VERSION_CHECK(0, 9, 7) // group stuff mGroupIface = Tp::BaseChannelGroupInterface::create(); mGroupIface->setGroupFlags(Tp::ChannelGroupFlagCanAdd); mGroupIface->setSelfHandle(conn->selfHandle()); #else mGroupIface = Tp::BaseChannelGroupInterface::create(Tp::ChannelGroupFlagCanAdd, conn->selfHandle()); #endif mGroupIface->setAddMembersCallback(Tp::memFun(this,&MockTextChannel::onAddMembers)); mGroupIface->setRemoveMembersCallback(Tp::memFun(this,&MockTextChannel::onRemoveMembers)); baseChannel->plugInterface(Tp::AbstractChannelInterfacePtr::dynamicCast(mGroupIface)); addMembers(recipients); mTextChannel = Tp::BaseChannelTextTypePtr::dynamicCast(mBaseChannel->interface(TP_QT_IFACE_CHANNEL_TYPE_TEXT)); mTextChannel->setMessageAcknowledgedCallback(Tp::memFun(this,&MockTextChannel::messageAcknowledged)); QObject::connect(mBaseChannel.data(), SIGNAL(closed()), this, SLOT(deleteLater())); } MockTextChannel::~MockTextChannel() { } Tp::BaseChannelPtr MockTextChannel::baseChannel() { return mBaseChannel; } void MockTextChannel::messageAcknowledged(const QString &id) { Q_EMIT messageRead(id); } QString MockTextChannel::sendMessage(const Tp::MessagePartList& message, uint flags, Tp::DBusError* error) { Tp::MessagePart header = message.at(0); static int serial = 0; // FIXME: check what other data we need to emit in the signal QString id = QString("sentmessage%1").arg(serial++); QString messageText; QVariantMap properties; QMap::const_iterator it = header.constBegin(); while (it != header.constEnd()) { properties[it.key()] = it.value().variant().toString(); it++; } properties["SentTime"] = QDateTime::currentDateTime().toString(Qt::ISODate); properties["Recipients"] = mRecipients; properties["Id"] = id; QVariantList attachments; Tp::MessagePartList messageList = message; messageList.pop_front(); Q_FOREACH(const Tp::MessagePart& messagePart, messageList) { QVariantMap attachment; if (messagePart.contains("content-type") && messagePart["content-type"].variant().toString().startsWith("text/")) { messageText = messagePart["content"].variant().toString(); continue; } QMap::const_iterator it = messagePart.constBegin(); while (it != messagePart.constEnd()) { attachment[it.key()] = it.value().variant().toString(); it++; } attachments << attachment; } Q_EMIT messageSent(messageText, attachments, properties); QTimer *deliveryReportTimer = new QTimer(this); deliveryReportTimer->setSingleShot(true); deliveryReportTimer->setInterval(100); connect(deliveryReportTimer, &QTimer::timeout, [id, deliveryReportTimer, this] { this->placeDeliveryReport(id, "sent"); deliveryReportTimer->deleteLater(); }); deliveryReportTimer->start(); return id; } void MockTextChannel::placeDeliveryReport(const QString &messageId, const QString &status) { Tp::DeliveryStatus delivery_status; if (status == "sent") { delivery_status = Tp::DeliveryStatusDelivered; } else if(status == "failed") { delivery_status = Tp::DeliveryStatusPermanentlyFailed; } else if(status == "pending") { delivery_status = Tp::DeliveryStatusAccepted; } else { delivery_status = Tp::DeliveryStatusUnknown; } Tp::MessagePartList partList; Tp::MessagePart header; header["message-sender"] = QDBusVariant(mTargetHandle); // FIXME: fix it header["message-sender-id"] = QDBusVariant(mRecipients.first()); header["message-type"] = QDBusVariant(Tp::ChannelTextMessageTypeDeliveryReport); header["delivery-status"] = QDBusVariant(delivery_status); header["delivery-token"] = QDBusVariant(messageId); partList << header; mTextChannel->addReceivedMessage(partList); } void MockTextChannel::messageReceived(const QString &message, const QVariantMap &info) { Tp::MessagePartList partList; Tp::MessagePart body; body["content-type"] = QDBusVariant("text/plain"); body["content"] = QDBusVariant(message); Tp::MessagePart header; header["message-token"] = QDBusVariant(info["SentTime"].toString() +"-" + QString::number(mMessageCounter++)); header["message-received"] = QDBusVariant(QDateTime::currentDateTime().toTime_t()); header["message-sent"] = QDBusVariant(QDateTime::fromString(info["SentTime"].toString(), Qt::ISODate).toTime_t()); header["message-sender"] = QDBusVariant(mTargetHandle); header["message-sender-id"] = QDBusVariant(mRecipients.first()); header["message-type"] = QDBusVariant(Tp::ChannelTextMessageTypeNormal); partList << header << body; mTextChannel->addReceivedMessage(partList); } void MockTextChannel::cellBroadcastReceived(const QString &message, CellBroadcast::Type type, quint16 topic) { Tp::MessagePartList partList; Tp::MessagePart body; body["content-type"] = QDBusVariant("text/plain"); body["content"] = QDBusVariant(message); Tp::MessagePart header; header["message-token"] = QDBusVariant(QDateTime::currentDateTime().toTime_t()); header["message-received"] = QDBusVariant(QDateTime::currentDateTime().toTime_t()); header["message-sent"] = QDBusVariant(QDateTime::currentDateTime().toTime_t()); header["message-sender"] = QDBusVariant(mTargetHandle); header["message-sender-id"] = QDBusVariant(CellBroadcast::CELLBROADCAST_IDENTIFIER); header[CellBroadcast::CELLBROADCAST_IDENTIFIER_TYPE] = QDBusVariant(type); header["message-type"] = QDBusVariant(Tp::ChannelTextMessageTypeNotice); header["subject"] = QDBusVariant(topic); partList << header << body; mTextChannel->addReceivedMessage(partList); } void MockTextChannel::mmsReceived(const QString &id, const QVariantMap &properties) { Tp::MessagePartList message; QString subject = properties["Subject"].toString(); QString smil = properties["Smil"].toString(); Tp::MessagePart header; header["message-token"] = QDBusVariant(id); header["message-sender"] = QDBusVariant(mTargetHandle); header["message-received"] = QDBusVariant(QDateTime::fromString(properties["Date"].toString(), Qt::ISODate).toTime_t()); header["message-sent"] = QDBusVariant(QDateTime::fromString(properties["SentTime"].toString(), Qt::ISODate).toTime_t()); header["message-type"] = QDBusVariant(Tp::DeliveryStatusDelivered); if (!subject.isEmpty()) { header["subject"] = QDBusVariant(subject); } message << header; AttachmentList mmsdAttachments = qdbus_cast(properties["Attachments"]); Q_FOREACH(const AttachmentStruct &attachment, mmsdAttachments) { QFile attachmentFile(attachment.filePath); if (!attachmentFile.open(QIODevice::ReadOnly)) { qWarning() << "fail to load attachment" << attachmentFile.errorString() << attachment.filePath; continue; } // FIXME check if we managed to read the total attachment file attachmentFile.seek(attachment.offset); QByteArray fileData = attachmentFile.read(attachment.length); Tp::MessagePart part; part["content-type"] = QDBusVariant(attachment.contentType); part["identifier"] = QDBusVariant(attachment.id); part["content"] = QDBusVariant(fileData); part["size"] = QDBusVariant(attachment.length); message << part; } if (!smil.isEmpty()) { Tp::MessagePart part; part["content-type"] = QDBusVariant(QString("application/smil")); part["identifier"] = QDBusVariant(QString("smil")); part["content"] = QDBusVariant(smil); part["size"] = QDBusVariant(smil.size()); message << part; } mTextChannel->addReceivedMessage(message); } void MockTextChannel::addMembers(QStringList recipients) { Tp::UIntList handles; Q_FOREACH(const QString &recipient, recipients) { uint handle = mConnection->ensureHandle(recipient); handles << handle; if (!mRecipients.contains(recipient)) { mRecipients << recipient; } if (!mMembers.contains(handle)) { mMembers << handle; } } #if TP_QT_VERSION >= TP_QT_VERSION_CHECK(0, 9, 7) mGroupIface->setMembers(Tp::UIntList() << mGroupIface->members() << handles, QVariantMap()); #else mGroupIface->addMembers(handles, recipients); #endif } QStringList MockTextChannel::recipients() const { return mRecipients; } Tp::UIntList MockTextChannel::members() { return mMembers; } void MockTextChannel::onAddMembers(const Tp::UIntList &handles, const QString &message, Tp::DBusError *error) { addMembers(mConnection->inspectHandles(Tp::HandleTypeContact, handles, error)); } #if TP_QT_VERSION >= TP_QT_VERSION_CHECK(0, 9, 7) void MockTextChannel::onRemoveMembers(const Tp::UIntList &handles, const QString &message, uint reason, Tp::DBusError *error) #else void MockTextChannel::onRemoveMembers(const Tp::UIntList &handles, const QString &message, Tp::DBusError *error) #endif { Q_FOREACH(uint handle, handles) { Q_FOREACH(const QString &recipient, mConnection->inspectHandles(Tp::HandleTypeContact, Tp::UIntList() << handle, error)) { mRecipients.removeAll(recipient); } mMembers.removeAll(handle); } #if TP_QT_VERSION >= TP_QT_VERSION_CHECK(0, 9, 7) Tp::UIntList members = mGroupIface->members(); Q_FOREACH(uint handle, handles) { members.removeAll(handle); } mGroupIface->setMembers(members, QVariantMap()); #else mGroupIface->removeMembers(handles); #endif } void MockTextChannel::changeChatState(const QString &userId, int state) { Q_EMIT mChatStateIface->chatStateChanged(mConnection->ensureHandle(userId), state); } telephony-service-0.5.3/tests/common/mock/textchannel.h000066400000000000000000000055651455543255600232660ustar00rootroot00000000000000/** * Copyright (C) 2013-2016 Canonical, Ltd. * * This program is free software: you can redistribute it and/or modify it under * the terms of the GNU General Public License version 3, as published by * the Free Software Foundation. * * This program is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranties of MERCHANTABILITY, * SATISFACTORY QUALITY, 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 . * * Authors: Tiago Salem Herrmann * Gustavo Pichorim Boiko */ #ifndef MOCKTEXTCHANNEL_H #define MOCKTEXTCHANNEL_H #include #include #include #include #include #include "connection.h" #include "include/cellbroadcast-types.h" class MockConnection; class MockTextChannel : public QObject { Q_OBJECT public: MockTextChannel(MockConnection *conn, QStringList recipients, uint targetHandle, QObject *parent = 0); QString sendMessage(const Tp::MessagePartList& message, uint flags, Tp::DBusError* error); void messageReceived(const QString & message, const QVariantMap &info); void cellBroadcastReceived(const QString &message, CellBroadcast::Type type, quint16 topic); Tp::BaseChannelPtr baseChannel(); void messageAcknowledged(const QString &id); void mmsReceived(const QString &id, const QVariantMap &properties); void addMembers(QStringList recipients); QStringList recipients() const; Tp::UIntList members(); void onAddMembers(const Tp::UIntList& handles, const QString& message, Tp::DBusError* error); #if TP_QT_VERSION >= TP_QT_VERSION_CHECK(0, 9, 7) void onRemoveMembers(const Tp::UIntList& handles, const QString& message, uint reason, Tp::DBusError* error); #else void onRemoveMembers(const Tp::UIntList& handles, const QString& message, Tp::DBusError* error); #endif public Q_SLOTS: void placeDeliveryReport(const QString &messageId, const QString &status); void changeChatState(const QString &userId, int state); Q_SIGNALS: void messageRead(const QString &id); void messageSent(const QString &message, const QVariantList &attachments, const QVariantMap &info); private: ~MockTextChannel(); Tp::BaseChannelPtr mBaseChannel; QStringList mRecipients; MockConnection *mConnection; uint mTargetHandle; Tp::BaseChannelMessagesInterfacePtr mMessagesIface; Tp::BaseChannelGroupInterfacePtr mGroupIface; Tp::BaseChannelChatStateInterfacePtr mChatStateIface; Tp::BaseChannelTextTypePtr mTextChannel; uint mMessageCounter; Tp::UIntList mMembers; }; #endif // MOCKTEXTCHANNEL_H telephony-service-0.5.3/tests/common/mock/ussdiface.cpp000066400000000000000000000247741455543255600232550ustar00rootroot00000000000000/** * Copyright (C) 2013-2015 Canonical, Ltd. * * This program is free software: you can redistribute it and/or modify it under * the terms of the GNU General Public License version 3, as published by * the Free Software Foundation. * * This program is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranties of MERCHANTABILITY, * SATISFACTORY QUALITY, 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 . * * Authors: Tiago Salem Herrmann Gustavo Pichorim Boiko */ #include #include #include #include "ussdiface.h" // Conn.I.USSD BaseConnectionUSSDInterface::Adaptee::Adaptee(BaseConnectionUSSDInterface *interface) : QObject(interface), mInterface(interface) { } struct TP_QT_NO_EXPORT BaseConnectionUSSDInterface::Private { Private(BaseConnectionUSSDInterface *parent) : adaptee(new BaseConnectionUSSDInterface::Adaptee(parent)) { } QString state; QString serial; InitiateCallback initiateCB; RespondCallback respondCB; CancelCallback cancelCB; BaseConnectionUSSDInterface::Adaptee *adaptee; }; BaseConnectionUSSDInterface::Adaptee::~Adaptee() { } void BaseConnectionUSSDInterface::Adaptee::initiate(const QString &command, const ConnectionInterfaceUSSDAdaptor::InitiateContextPtr &context) { if (!mInterface->mPriv->initiateCB.isValid()) { context->setFinishedWithError(TP_QT_ERROR_NOT_IMPLEMENTED, QLatin1String("Not implemented")); return; } Tp::DBusError error; mInterface->mPriv->initiateCB(command, &error); if (error.isValid()) { context->setFinishedWithError(error.name(), error.message()); return; } context->setFinished(); } void BaseConnectionUSSDInterface::Adaptee::respond(const QString &reply, const ConnectionInterfaceUSSDAdaptor::RespondContextPtr &context) { if (!mInterface->mPriv->respondCB.isValid()) { context->setFinishedWithError(TP_QT_ERROR_NOT_IMPLEMENTED, QLatin1String("Not implemented")); return; } Tp::DBusError error; mInterface->mPriv->respondCB(reply, &error); if (error.isValid()) { context->setFinishedWithError(error.name(), error.message()); return; } context->setFinished(); } void BaseConnectionUSSDInterface::Adaptee::cancel(const ConnectionInterfaceUSSDAdaptor::CancelContextPtr &context) { if (!mInterface->mPriv->cancelCB.isValid()) { context->setFinishedWithError(TP_QT_ERROR_NOT_IMPLEMENTED, QLatin1String("Not implemented")); return; } Tp::DBusError error; mInterface->mPriv->cancelCB(&error); if (error.isValid()) { context->setFinishedWithError(error.name(), error.message()); return; } context->setFinished(); } BaseConnectionUSSDInterface::BaseConnectionUSSDInterface() : AbstractConnectionInterface(TP_QT_IFACE_CONNECTION_USSD), mPriv(new Private(this)) { } BaseConnectionUSSDInterface::~BaseConnectionUSSDInterface() { delete mPriv; } void BaseConnectionUSSDInterface::setInitiateCallback(const InitiateCallback &cb) { mPriv->initiateCB = cb; } void BaseConnectionUSSDInterface::setRespondCallback(const RespondCallback &cb) { mPriv->respondCB = cb; } void BaseConnectionUSSDInterface::setCancelCallback(const CancelCallback &cb) { mPriv->cancelCB = cb; } QString BaseConnectionUSSDInterface::state() const { return mPriv->state; } void BaseConnectionUSSDInterface::setSerial(const QString &serial) const { mPriv->serial = serial; } QString BaseConnectionUSSDInterface::serial() const { return mPriv->serial; } void BaseConnectionUSSDInterface::StateChanged(const QString &state) { mPriv->state = state; Q_EMIT mPriv->adaptee->stateChanged(state); } void BaseConnectionUSSDInterface::InitiateUSSDComplete(const QString &ussdResp) { Q_EMIT mPriv->adaptee->initiateUSSDComplete(ussdResp); } void BaseConnectionUSSDInterface::RespondComplete(bool success, const QString &ussdResp) { Q_EMIT mPriv->adaptee->respondComplete(success, ussdResp); } void BaseConnectionUSSDInterface::BarringComplete(const QString &ssOp, const QString &cbService, const QVariantMap &cbMap) { Q_EMIT mPriv->adaptee->barringComplete(ssOp, cbService, cbMap); } void BaseConnectionUSSDInterface::ForwardingComplete(const QString &ssOp, const QString &cfService, const QVariantMap &cfMap) { Q_EMIT mPriv->adaptee->forwardingComplete(ssOp, cfService, cfMap); } void BaseConnectionUSSDInterface::WaitingComplete(const QString &ssOp, const QVariantMap &cwMap) { Q_EMIT mPriv->adaptee->waitingComplete(ssOp, cwMap); } void BaseConnectionUSSDInterface::CallingLinePresentationComplete(const QString &ssOp, const QString &status) { Q_EMIT mPriv->adaptee->callingLinePresentationComplete(ssOp, status); } void BaseConnectionUSSDInterface::ConnectedLinePresentationComplete(const QString &ssOp, const QString &status) { Q_EMIT mPriv->adaptee->connectedLinePresentationComplete(ssOp, status); } void BaseConnectionUSSDInterface::CallingLineRestrictionComplete(const QString &ssOp, const QString &status) { Q_EMIT mPriv->adaptee->callingLineRestrictionComplete(ssOp, status); } void BaseConnectionUSSDInterface::ConnectedLineRestrictionComplete(const QString &ssOp, const QString &status) { Q_EMIT mPriv->adaptee->connectedLineRestrictionComplete(ssOp, status); } void BaseConnectionUSSDInterface::InitiateFailed() { Q_EMIT mPriv->adaptee->initiateFailed(); } void BaseConnectionUSSDInterface::NotificationReceived(const QString &message) { Q_EMIT mPriv->adaptee->notificationReceived(message); } void BaseConnectionUSSDInterface::RequestReceived(const QString &message) { Q_EMIT mPriv->adaptee->requestReceived(message); } QVariantMap BaseConnectionUSSDInterface::immutableProperties() const { QVariantMap map; return map; } void BaseConnectionUSSDInterface::createAdaptor() { (void) new ConnectionInterfaceUSSDAdaptor(dbusObject()->dbusConnection(), mPriv->adaptee, dbusObject()); } ConnectionInterfaceUSSDAdaptor::ConnectionInterfaceUSSDAdaptor(const QDBusConnection& bus, QObject* adaptee, QObject* parent) : Tp::AbstractAdaptor(bus, adaptee, parent) { connect(adaptee, SIGNAL(notificationReceived(const QString &)), SIGNAL(NotificationReceived(const QString &))); connect(adaptee, SIGNAL(requestReceived(const QString &)), SIGNAL(RequestReceived(const QString &))); connect(adaptee, SIGNAL(initiateUSSDComplete(const QString &)), SIGNAL(InitiateUSSDComplete(const QString &))); connect(adaptee, SIGNAL(barringComplete(const QString &, const QString &, const QVariantMap &)), SIGNAL(BarringComplete(const QString &, const QString &, const QVariantMap &))); connect(adaptee, SIGNAL(forwardingComplete(const QString &, const QString &, const QVariantMap &)), SIGNAL(ForwardingComplete(const QString &, const QString &, const QVariantMap &))); connect(adaptee, SIGNAL(waitingComplete(const QString &, const QVariantMap &)), SIGNAL(WaitingComplete(const QString &, const QVariantMap &))); connect(adaptee, SIGNAL(callingLinePresentationComplete(const QString &, const QString &)), SIGNAL(CallingLinePresentationComplete(const QString &, const QString &))); connect(adaptee, SIGNAL(connectedLinePresentationComplete(const QString &, const QString &)), SIGNAL(ConnectedLinePresentationComplete(const QString &, const QString &))); connect(adaptee, SIGNAL(callingLineRestrictionComplete(const QString &, const QString &)), SIGNAL(CallingLineRestrictionComplete(const QString &, const QString &))); connect(adaptee, SIGNAL(connectedLineRestrictionComplete(const QString &, const QString &)), SIGNAL(ConnectedLineRestrictionComplete(const QString &, const QString &))); connect(adaptee, SIGNAL(initiateFailed()), SIGNAL(InitiateFailed())); connect(adaptee, SIGNAL(stateChanged(const QString&)), SIGNAL(StateChanged(const QString&))); connect(adaptee, SIGNAL(respondComplete(bool, const QString &)), SIGNAL(RespondComplete(bool, const QString &))); } ConnectionInterfaceUSSDAdaptor::~ConnectionInterfaceUSSDAdaptor() { } void ConnectionInterfaceUSSDAdaptor::Initiate(const QString &command, const QDBusMessage& dbusMessage) { if (!adaptee()->metaObject()->indexOfMethod("initiate(const QString &,ConnectionInterfaceUSSDAdaptor::InitiateContextPtr)") == -1) { dbusConnection().send(dbusMessage.createErrorReply(TP_QT_ERROR_NOT_IMPLEMENTED, QLatin1String("Not implemented"))); return; } InitiateContextPtr ctx = InitiateContextPtr( new Tp::MethodInvocationContext< >(dbusConnection(), dbusMessage)); QMetaObject::invokeMethod(adaptee(), "initiate", Q_ARG(QString, command), Q_ARG(ConnectionInterfaceUSSDAdaptor::InitiateContextPtr, ctx)); return; } void ConnectionInterfaceUSSDAdaptor::Respond(const QString &reply, const QDBusMessage& dbusMessage) { if (!adaptee()->metaObject()->indexOfMethod("respond(QConnectionInterfaceUSSDAdaptor::RespondContextPtr)") == -1) { dbusConnection().send(dbusMessage.createErrorReply(TP_QT_ERROR_NOT_IMPLEMENTED, QLatin1String("Not implemented"))); return; } RespondContextPtr ctx = RespondContextPtr( new Tp::MethodInvocationContext< >(dbusConnection(), dbusMessage)); QMetaObject::invokeMethod(adaptee(), "respond", Q_ARG(QString, reply), Q_ARG(ConnectionInterfaceUSSDAdaptor::RespondContextPtr, ctx)); return; } void ConnectionInterfaceUSSDAdaptor::Cancel(const QDBusMessage& dbusMessage) { if (!adaptee()->metaObject()->indexOfMethod("cancel(ConnectionInterfaceUSSDAdaptor::CancelContextPtr)") == -1) { dbusConnection().send(dbusMessage.createErrorReply(TP_QT_ERROR_NOT_IMPLEMENTED, QLatin1String("Not implemented"))); return; } CancelContextPtr ctx = CancelContextPtr( new Tp::MethodInvocationContext< >(dbusConnection(), dbusMessage)); QMetaObject::invokeMethod(adaptee(), "cancel", Q_ARG(ConnectionInterfaceUSSDAdaptor::CancelContextPtr, ctx)); return; } QString ConnectionInterfaceUSSDAdaptor::Serial() const { return qvariant_cast< QString >(adaptee()->property("serial")); } QString ConnectionInterfaceUSSDAdaptor::State() const { return qvariant_cast< QString >(adaptee()->property("state")); } telephony-service-0.5.3/tests/common/mock/ussdiface.h000066400000000000000000000222611455543255600227070ustar00rootroot00000000000000/** * Copyright (C) 2013-2015 Canonical, Ltd. * * This program is free software: you can redistribute it and/or modify it under * the terms of the GNU General Public License version 3, as published by * the Free Software Foundation. * * This program is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranties of MERCHANTABILITY, * SATISFACTORY QUALITY, 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 . * * Authors: Tiago Salem Herrmann Gustavo Pichorim Boiko */ #ifndef OFONOUSSDIFACE_H #define OFONOUSSDIFACE_H // telepathy-qt #include #include #include #include #include class BaseConnectionUSSDInterface; typedef Tp::SharedPtr BaseConnectionUSSDInterfacePtr; #define TP_QT_IFACE_CONNECTION_USSD "com.lomiri.Telephony.USSD" class TP_QT_EXPORT BaseConnectionUSSDInterface : public Tp::AbstractConnectionInterface { Q_OBJECT Q_DISABLE_COPY(BaseConnectionUSSDInterface) public: static BaseConnectionUSSDInterfacePtr create() { return BaseConnectionUSSDInterfacePtr(new BaseConnectionUSSDInterface()); } template static Tp::SharedPtr create() { return Tp::SharedPtr( new BaseConnectionUSSDInterfaceSubclass()); } QVariantMap immutableProperties() const; virtual ~BaseConnectionUSSDInterface(); typedef Tp::Callback2 InitiateCallback; void setInitiateCallback(const InitiateCallback &cb); typedef Tp::Callback2 RespondCallback; void setRespondCallback(const RespondCallback &cb); typedef Tp::Callback1 CancelCallback; void setCancelCallback(const CancelCallback &cb); QString state() const; QString serial() const; public Q_SLOTS: void NotificationReceived(const QString &message); void RequestReceived(const QString &message); void InitiateUSSDComplete(const QString &ussdResp); void RespondComplete(bool success, const QString &ussdResp); void BarringComplete(const QString &ssOp, const QString &cbService, const QVariantMap &cbMap); void ForwardingComplete(const QString &ssOp, const QString &cfService, const QVariantMap &cfMap); void WaitingComplete(const QString &ssOp, const QVariantMap &cwMap); void CallingLinePresentationComplete(const QString &ssOp, const QString &status); void ConnectedLinePresentationComplete(const QString &ssOp, const QString &status); void CallingLineRestrictionComplete(const QString &ssOp, const QString &status); void ConnectedLineRestrictionComplete(const QString &ssOp, const QString &status); void InitiateFailed(); void StateChanged(const QString &state); void setSerial(const QString& serial) const; protected: BaseConnectionUSSDInterface(); private: void createAdaptor(); class Adaptee; friend class Adaptee; struct Private; friend struct Private; Private *mPriv; }; class TP_QT_EXPORT ConnectionInterfaceUSSDAdaptor : public Tp::AbstractAdaptor { Q_OBJECT Q_CLASSINFO("D-Bus Interface", TP_QT_IFACE_CONNECTION_USSD) Q_CLASSINFO("D-Bus Introspection", "" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" "") Q_PROPERTY(QString State READ State) Q_PROPERTY(QString Serial READ Serial) public: ConnectionInterfaceUSSDAdaptor(const QDBusConnection& dbusConnection, QObject* adaptee, QObject* parent); virtual ~ConnectionInterfaceUSSDAdaptor(); typedef Tp::MethodInvocationContextPtr< > InitiateContextPtr; typedef Tp::MethodInvocationContextPtr< > RespondContextPtr; typedef Tp::MethodInvocationContextPtr< > CancelContextPtr; public Q_SLOTS: // METHODS void Initiate(const QString &command, const QDBusMessage& dbusMessage); void Respond(const QString &reply, const QDBusMessage& dbusMessage); void Cancel(const QDBusMessage& dbusMessage); QString State() const; QString Serial() const; Q_SIGNALS: // SIGNALS void NotificationReceived(const QString &message); void RequestReceived(const QString &message); void InitiateUSSDComplete(const QString &ussdResp); void RespondComplete(bool success, const QString &ussdResp); void BarringComplete(const QString &ssOp, const QString &cbService, const QVariantMap &cbMap); void ForwardingComplete(const QString &ssOp, const QString &cfService, const QVariantMap &cfMap); void WaitingComplete(const QString &ssOp, const QVariantMap &cwMap); void CallingLinePresentationComplete(const QString &ssOp, const QString &status); void ConnectedLinePresentationComplete(const QString &ssOp, const QString &status); void CallingLineRestrictionComplete(const QString &ssOp, const QString &status); void ConnectedLineRestrictionComplete(const QString &ssOp, const QString &status); void InitiateFailed(); void StateChanged(const QString &state); }; class TP_QT_NO_EXPORT BaseConnectionUSSDInterface::Adaptee : public QObject { Q_OBJECT Q_PROPERTY(QString state READ state) Q_PROPERTY(QString serial READ serial) public: Adaptee(BaseConnectionUSSDInterface *interface); ~Adaptee(); QString state() const { return mInterface->state(); } QString serial() const { return mInterface->serial(); } private Q_SLOTS: void initiate(const QString &command, const ConnectionInterfaceUSSDAdaptor::InitiateContextPtr &context); void respond(const QString &reply, const ConnectionInterfaceUSSDAdaptor::RespondContextPtr &context); void cancel(const ConnectionInterfaceUSSDAdaptor::CancelContextPtr &context); Q_SIGNALS: void notificationReceived(const QString &message); void requestReceived(const QString &message); void initiateUSSDComplete(const QString &ussdResp); void barringComplete(const QString &ssOp, const QString &cbService, const QVariantMap &cbMap); void forwardingComplete(const QString &ssOp, const QString &cfService, const QVariantMap &cfMap); void waitingComplete(const QString &ssOp, const QVariantMap &cwMap); void callingLinePresentationComplete(const QString &ssOp, const QString &status); void connectedLinePresentationComplete(const QString &ssOp, const QString &status); void callingLineRestrictionComplete(const QString &ssOp, const QString &status); void connectedLineRestrictionComplete(const QString &ssOp, const QString &status); void initiateFailed(); void respondComplete(bool success, const QString &response); void stateChanged(const QString &state); public: BaseConnectionUSSDInterface *mInterface; }; #endif telephony-service-0.5.3/tests/common/mock/voicemailiface.cpp000066400000000000000000000164021455543255600242340ustar00rootroot00000000000000/** * Copyright (C) 2013-2015 Canonical, Ltd. * * This program is free software: you can redistribute it and/or modify it under * the terms of the GNU General Public License version 3, as published by * the Free Software Foundation. * * This program is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranties of MERCHANTABILITY, * SATISFACTORY QUALITY, 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 . * * Authors: Tiago Salem Herrmann Gustavo Pichorim Boiko */ #include #include #include #include "voicemailiface.h" // Conn.I.Voicemail BaseConnectionVoicemailInterface::Adaptee::Adaptee(BaseConnectionVoicemailInterface *interface) : QObject(interface), mInterface(interface) { } struct TP_QT_NO_EXPORT BaseConnectionVoicemailInterface::Private { Private(BaseConnectionVoicemailInterface *parent) : adaptee(new BaseConnectionVoicemailInterface::Adaptee(parent)) { } VoicemailCountCallback voicemailCountCB; VoicemailNumberCallback voicemailNumberCB; VoicemailIndicatorCallback voicemailIndicatorCB; BaseConnectionVoicemailInterface::Adaptee *adaptee; }; BaseConnectionVoicemailInterface::Adaptee::~Adaptee() { } void BaseConnectionVoicemailInterface::Adaptee::voicemailIndicator(const ConnectionInterfaceVoicemailAdaptor::VoicemailIndicatorContextPtr &context) { if (!mInterface->mPriv->voicemailIndicatorCB.isValid()) { context->setFinishedWithError(TP_QT_ERROR_NOT_IMPLEMENTED, QLatin1String("Not implemented")); return; } Tp::DBusError error; bool active = mInterface->mPriv->voicemailIndicatorCB(&error); if (error.isValid()) { context->setFinishedWithError(error.name(), error.message()); return; } context->setFinished(active); } void BaseConnectionVoicemailInterface::Adaptee::voicemailNumber(const ConnectionInterfaceVoicemailAdaptor::VoicemailNumberContextPtr &context) { if (!mInterface->mPriv->voicemailNumberCB.isValid()) { context->setFinishedWithError(TP_QT_ERROR_NOT_IMPLEMENTED, QLatin1String("Not implemented")); return; } Tp::DBusError error; QString number = mInterface->mPriv->voicemailNumberCB(&error); if (error.isValid()) { context->setFinishedWithError(error.name(), error.message()); return; } context->setFinished(number); } void BaseConnectionVoicemailInterface::Adaptee::voicemailCount(const ConnectionInterfaceVoicemailAdaptor::VoicemailCountContextPtr &context) { if (!mInterface->mPriv->voicemailCountCB.isValid()) { context->setFinishedWithError(TP_QT_ERROR_NOT_IMPLEMENTED, QLatin1String("Not implemented")); return; } Tp::DBusError error; uint count = mInterface->mPriv->voicemailCountCB(&error); if (error.isValid()) { context->setFinishedWithError(error.name(), error.message()); return; } context->setFinished(count); } BaseConnectionVoicemailInterface::BaseConnectionVoicemailInterface() : AbstractConnectionInterface(TP_QT_IFACE_CONNECTION_VOICEMAIL), mPriv(new Private(this)) { } BaseConnectionVoicemailInterface::~BaseConnectionVoicemailInterface() { delete mPriv; } void BaseConnectionVoicemailInterface::setVoicemailIndicatorCallback(const VoicemailIndicatorCallback &cb) { mPriv->voicemailIndicatorCB = cb; } void BaseConnectionVoicemailInterface::setVoicemailNumberCallback(const VoicemailNumberCallback &cb) { mPriv->voicemailNumberCB = cb; } void BaseConnectionVoicemailInterface::setVoicemailCountCallback(const VoicemailCountCallback &cb) { mPriv->voicemailCountCB = cb; } void BaseConnectionVoicemailInterface::setVoicemailCount(int count) { Q_EMIT mPriv->adaptee->voicemailCountChanged(uint(count)); } void BaseConnectionVoicemailInterface::setVoicemailNumber(const QString &voicemailNumber) { Q_EMIT mPriv->adaptee->voicemailNumberChanged(voicemailNumber); } void BaseConnectionVoicemailInterface::setVoicemailIndicator(bool active) { Q_EMIT mPriv->adaptee->voicemailIndicatorChanged(active); } QVariantMap BaseConnectionVoicemailInterface::immutableProperties() const { QVariantMap map; return map; } void BaseConnectionVoicemailInterface::createAdaptor() { (void) new ConnectionInterfaceVoicemailAdaptor(dbusObject()->dbusConnection(), mPriv->adaptee, dbusObject()); } ConnectionInterfaceVoicemailAdaptor::ConnectionInterfaceVoicemailAdaptor(const QDBusConnection& bus, QObject* adaptee, QObject* parent) : Tp::AbstractAdaptor(bus, adaptee, parent) { connect(adaptee, SIGNAL(voicemailCountChanged(uint)), SIGNAL(VoicemailCountChanged(uint))); connect(adaptee, SIGNAL(voicemailIndicatorChanged(bool)), SIGNAL(VoicemailIndicatorChanged(bool))); connect(adaptee, SIGNAL(voicemailNumberChanged(QString)), SIGNAL(VoicemailNumberChanged(QString))); } ConnectionInterfaceVoicemailAdaptor::~ConnectionInterfaceVoicemailAdaptor() { } bool ConnectionInterfaceVoicemailAdaptor::VoicemailIndicator(const QDBusMessage& dbusMessage) { if (!adaptee()->metaObject()->indexOfMethod("voicemailIndicator(ConnectionInterfaceVoicemailAdaptor::VoicemailIndicatorContextPtr)") == -1) { dbusConnection().send(dbusMessage.createErrorReply(TP_QT_ERROR_NOT_IMPLEMENTED, QLatin1String("Not implemented"))); return bool(); } VoicemailIndicatorContextPtr ctx = VoicemailIndicatorContextPtr( new Tp::MethodInvocationContext< bool >(dbusConnection(), dbusMessage)); QMetaObject::invokeMethod(adaptee(), "voicemailIndicator", Q_ARG(ConnectionInterfaceVoicemailAdaptor::VoicemailIndicatorContextPtr, ctx)); return bool(); } QString ConnectionInterfaceVoicemailAdaptor::VoicemailNumber(const QDBusMessage& dbusMessage) { if (!adaptee()->metaObject()->indexOfMethod("voicemailNumber(ConnectionInterfaceVoicemailAdaptor::VoicemailNumberContextPtr)") == -1) { dbusConnection().send(dbusMessage.createErrorReply(TP_QT_ERROR_NOT_IMPLEMENTED, QLatin1String("Not implemented"))); return QString(); } VoicemailNumberContextPtr ctx = VoicemailNumberContextPtr( new Tp::MethodInvocationContext< QString >(dbusConnection(), dbusMessage)); QMetaObject::invokeMethod(adaptee(), "voicemailNumber", Q_ARG(ConnectionInterfaceVoicemailAdaptor::VoicemailNumberContextPtr, ctx)); return QString(); } uint ConnectionInterfaceVoicemailAdaptor::VoicemailCount(const QDBusMessage& dbusMessage) { if (!adaptee()->metaObject()->indexOfMethod("voicemailCount(ConnectionInterfaceVoicemailAdaptor::VoicemailCountContextPtr)") == -1) { dbusConnection().send(dbusMessage.createErrorReply(TP_QT_ERROR_NOT_IMPLEMENTED, QLatin1String("Not implemented"))); return uint(); } VoicemailCountContextPtr ctx = VoicemailCountContextPtr( new Tp::MethodInvocationContext< uint >(dbusConnection(), dbusMessage)); QMetaObject::invokeMethod(adaptee(), "voicemailCount", Q_ARG(ConnectionInterfaceVoicemailAdaptor::VoicemailCountContextPtr, ctx)); return uint(); } telephony-service-0.5.3/tests/common/mock/voicemailiface.h000066400000000000000000000124041455543255600236770ustar00rootroot00000000000000/** * Copyright (C) 2013-2015 Canonical, Ltd. * * This program is free software: you can redistribute it and/or modify it under * the terms of the GNU General Public License version 3, as published by * the Free Software Foundation. * * This program is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranties of MERCHANTABILITY, * SATISFACTORY QUALITY, 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 . * * Authors: Tiago Salem Herrmann Gustavo Pichorim Boiko */ #ifndef OFONOVOICEMAILIFACE_H #define OFONOVOICEMAILIFACE_H // telepathy-qt #include #include #include #include #include class BaseConnectionVoicemailInterface; typedef Tp::SharedPtr BaseConnectionVoicemailInterfacePtr; #define TP_QT_IFACE_CONNECTION_VOICEMAIL "com.lomiri.Telephony.Voicemail" class TP_QT_EXPORT BaseConnectionVoicemailInterface : public Tp::AbstractConnectionInterface { Q_OBJECT Q_DISABLE_COPY(BaseConnectionVoicemailInterface) public: static BaseConnectionVoicemailInterfacePtr create() { return BaseConnectionVoicemailInterfacePtr(new BaseConnectionVoicemailInterface()); } template static Tp::SharedPtr create() { return Tp::SharedPtr( new BaseConnectionVoicemailInterfaceSubclass()); } QVariantMap immutableProperties() const; virtual ~BaseConnectionVoicemailInterface(); typedef Tp::Callback1 VoicemailCountCallback; void setVoicemailCountCallback(const VoicemailCountCallback &cb); typedef Tp::Callback1 VoicemailIndicatorCallback; void setVoicemailIndicatorCallback(const VoicemailIndicatorCallback &cb); typedef Tp::Callback1 VoicemailNumberCallback; void setVoicemailNumberCallback(const VoicemailNumberCallback &cb); public Q_SLOTS: void setVoicemailCount(int count); void setVoicemailIndicator(bool active); void setVoicemailNumber(const QString &voicemailNumber); protected: BaseConnectionVoicemailInterface(); private: void createAdaptor(); class Adaptee; friend class Adaptee; struct Private; friend struct Private; Private *mPriv; }; class TP_QT_EXPORT ConnectionInterfaceVoicemailAdaptor : public Tp::AbstractAdaptor { Q_OBJECT Q_CLASSINFO("D-Bus Interface", TP_QT_IFACE_CONNECTION_VOICEMAIL) Q_CLASSINFO("D-Bus Introspection", "" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" "") public: ConnectionInterfaceVoicemailAdaptor(const QDBusConnection& dbusConnection, QObject* adaptee, QObject* parent); virtual ~ConnectionInterfaceVoicemailAdaptor(); typedef Tp::MethodInvocationContextPtr< bool > VoicemailIndicatorContextPtr; typedef Tp::MethodInvocationContextPtr< QString > VoicemailNumberContextPtr; typedef Tp::MethodInvocationContextPtr< uint > VoicemailCountContextPtr; public Q_SLOTS: // METHODS bool VoicemailIndicator(const QDBusMessage& dbusMessage); QString VoicemailNumber(const QDBusMessage& dbusMessage); uint VoicemailCount(const QDBusMessage& dbusMessage); Q_SIGNALS: // SIGNALS void VoicemailCountChanged(uint count); void VoicemailIndicatorChanged(bool active); void VoicemailNumberChanged(const QString &voicemailNumber); }; class TP_QT_NO_EXPORT BaseConnectionVoicemailInterface::Adaptee : public QObject { Q_OBJECT public: Adaptee(BaseConnectionVoicemailInterface *interface); ~Adaptee(); private Q_SLOTS: void voicemailIndicator(const ConnectionInterfaceVoicemailAdaptor::VoicemailIndicatorContextPtr &context); void voicemailNumber(const ConnectionInterfaceVoicemailAdaptor::VoicemailNumberContextPtr &context); void voicemailCount(const ConnectionInterfaceVoicemailAdaptor::VoicemailCountContextPtr &context); Q_SIGNALS: void voicemailCountChanged(uint count); void voicemailIndicatorChanged(bool active); void voicemailNumberChanged(const QString &voicemailNumber); public: BaseConnectionVoicemailInterface *mInterface; }; #endif telephony-service-0.5.3/tests/common/mockcontroller.cpp000066400000000000000000000032241455543255600233760ustar00rootroot00000000000000/** * Copyright (C) 2013 Canonical, Ltd. * * This program is free software: you can redistribute it and/or modify it under * the terms of the GNU General Public License version 3, as published by * the Free Software Foundation. * * This program is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranties of MERCHANTABILITY, * SATISFACTORY QUALITY, 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 . * * Authors: * Tiago Salem Herrmann * Gustavo Pichorim Boiko */ #include "mockcontroller.h" #include static const QString mockService("com.canonical.MockConnection"); static const QString mockObject("/com/canonical/MockConnection/%1"); MockController::MockController(const QString &protocol, QObject *parent) : ComCanonicalMockConnectionInterface(mockService, mockObject.arg(protocol), QDBusConnection::sessionBus(), parent), mProtocol(protocol), mMockObject(mockObject.arg(protocol)) { } QString MockController::placeCall(const QVariantMap &properties) { QDBusPendingReply reply = PlaceCall(properties); reply.waitForFinished(); if (!reply.isValid()) { return QString(); } return reply.value(); } QString MockController::serial() { QDBusPendingReply reply = Serial(); reply.waitForFinished(); if (!reply.isValid()) { return QString(); } return reply.value(); } telephony-service-0.5.3/tests/common/mockcontroller.h000066400000000000000000000024251455543255600230450ustar00rootroot00000000000000/** * Copyright (C) 2013 Canonical, Ltd. * * This program is free software: you can redistribute it and/or modify it under * the terms of the GNU General Public License version 3, as published by * the Free Software Foundation. * * This program is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranties of MERCHANTABILITY, * SATISFACTORY QUALITY, 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 . * * Authors: * Tiago Salem Herrmann * Gustavo Pichorim Boiko */ #ifndef MOCKCONTROLLER_H #define MOCKCONTROLLER_H #include #include "MockConnectionInterface.h" class MockController : public ComCanonicalMockConnectionInterface { Q_OBJECT public: explicit MockController(const QString &protocol, QObject *parent = 0); public Q_SLOTS: // We only reimplement the methods that need sync replies QString placeCall(const QVariantMap &properties); QString serial(); private: QString mProtocol; QString mMockObject; }; #endif // MOCKCONTROLLER_H telephony-service-0.5.3/tests/common/protocols/000077500000000000000000000000001455543255600216605ustar00rootroot00000000000000telephony-service-0.5.3/tests/common/protocols/mock.protocol000066400000000000000000000000731455543255600243740ustar00rootroot00000000000000[Protocol] Name=mock Features=text,voice FallbackProtocol= telephony-service-0.5.3/tests/common/protocols/multimedia.protocol000066400000000000000000000001001455543255600255640ustar00rootroot00000000000000[Protocol] Name=multimedia Features=text FallbackProtocol=ofono telephony-service-0.5.3/tests/common/protocols/ofono.protocol000066400000000000000000000000741455543255600245640ustar00rootroot00000000000000[Protocol] Name=ofono Features=text,voice FallbackProtocol= telephony-service-0.5.3/tests/common/telepathytest.cpp000066400000000000000000000107501455543255600232420ustar00rootroot00000000000000/* * Copyright (C) 2015 Canonical, Ltd. * * This file is part of telephony-service. * * telephony-service is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; version 3. * * telephony-service 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 . */ #include #include #include #include #include "telepathytest.h" #include "telepathyhelper.h" #include "accountentry.h" TelepathyTest::TelepathyTest() { } void TelepathyTest::initialize() { Tp::registerTypes(); // create an account manager instance to help testing Tp::Features accountFeatures; accountFeatures << Tp::Account::FeatureCore << Tp::Account::FeatureProtocolInfo; Tp::Features contactFeatures; contactFeatures << Tp::Contact::FeatureAlias << Tp::Contact::FeatureAvatarData << Tp::Contact::FeatureAvatarToken << Tp::Contact::FeatureCapabilities << Tp::Contact::FeatureSimplePresence; Tp::Features connectionFeatures; connectionFeatures << Tp::Connection::FeatureCore << Tp::Connection::FeatureSelfContact << Tp::Connection::FeatureSimplePresence; Tp::ChannelFactoryPtr channelFactory = Tp::ChannelFactory::create(QDBusConnection::sessionBus()); channelFactory->addCommonFeatures(Tp::Channel::FeatureCore); mAccountManager = Tp::AccountManager::create( Tp::AccountFactory::create(QDBusConnection::sessionBus(), accountFeatures), Tp::ConnectionFactory::create(QDBusConnection::sessionBus(), connectionFeatures), channelFactory, Tp::ContactFactory::create(contactFeatures)); mReady = false; connect(mAccountManager->becomeReady(Tp::AccountManager::FeatureCore), &Tp::PendingOperation::finished, [=]{ Q_FOREACH(const Tp::AccountPtr &account, mAccountManager->allAccounts()) { Tp::PendingOperation *op = account->remove(); WAIT_FOR(op->isFinished()); } mReady = true; }); TRY_VERIFY(mReady); } void TelepathyTest::doCleanup() { // remove all accounts on every test to prevent garbage to go from one test to another Q_FOREACH(const Tp::AccountPtr &account, mAccounts) { QVERIFY(removeAccount(account)); } QVERIFY(mAccounts.isEmpty()); } Tp::AccountPtr TelepathyTest::addAccount(const QString &manager, const QString &protocol, const QString &displayName, const QVariantMap ¶meters) { bool finished = false; Tp::AccountPtr account; connect(mAccountManager->createAccount(manager, protocol, displayName, parameters), &Tp::PendingOperation::finished, [&](Tp::PendingOperation *op) { Tp::PendingAccount *pa = qobject_cast(op); if (op->isError() || !pa) { qCritical() << "Failed to create account:" << op->errorName() << op->errorMessage(); finished = true; return; } account = pa->account(); // on the real device this is done by the telepathy-ofono plugin account->setEnabled(true); account->setConnectsAutomatically(true); finished = true; }); WAIT_FOR(finished); WAIT_FOR(!account->connection().isNull()); WAIT_FOR(account->connectionStatus() == Tp::ConnectionStatusConnected); WAIT_FOR(account->connection()->selfContact()->presence().type() == Tp::ConnectionPresenceTypeAvailable); mAccounts << account; return account; } bool TelepathyTest::removeAccount(const Tp::AccountPtr &account) { bool success = false; bool finished = false; connect(account->remove(), &Tp::PendingOperation::finished, [&](Tp::PendingOperation *op) { success = !op->isError(); finished = true; }); WAIT_FOR(finished); if (success) { mAccounts.removeAll(account); } return success; } QList TelepathyTest::accounts() const { return mAccounts; } void TelepathyTest::cleanup() { doCleanup(); } telephony-service-0.5.3/tests/common/telepathytest.h000066400000000000000000000035121455543255600227050ustar00rootroot00000000000000/* * Copyright (C) 2015 Canonical, Ltd. * * This file is part of telephony-service. * * telephony-service is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; version 3. * * telephony-service 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 . */ #ifndef TELEPATHYTEST_H #define TELEPATHYTEST_H #include #include #include #include #define DEFAULT_TIMEOUT 60000*6 #define TRY_VERIFY(x) QTRY_VERIFY_WITH_TIMEOUT((x), DEFAULT_TIMEOUT) #define TRY_COMPARE(x, y) QTRY_COMPARE_WITH_TIMEOUT((x), (y), DEFAULT_TIMEOUT) #define WAIT_FOR(x) while (!(x)) { qDebug() << "Waiting for:" << #x ; QTest::qWait(100); } class TelepathyTest : public QObject { Q_OBJECT public: TelepathyTest(); protected: void initialize(); void doCleanup(); // helper slots void onAccountManagerReady(Tp::PendingOperation *op); Tp::AccountPtr addAccount(const QString &manager, const QString &protocol, const QString &displayName, const QVariantMap ¶meters = QVariantMap()); bool removeAccount(const Tp::AccountPtr &account); QList accounts() const; private Q_SLOTS: void cleanup(); private: Tp::AccountManagerPtr mAccountManager; bool mReady; QList mAccounts; }; #endif //TELEPATHYTEST_H telephony-service-0.5.3/tests/handler/000077500000000000000000000000001455543255600177615ustar00rootroot00000000000000telephony-service-0.5.3/tests/handler/CMakeLists.txt000066400000000000000000000005531455543255600225240ustar00rootroot00000000000000include_directories( ${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/../common ${CMAKE_SOURCE_DIR} ${CMAKE_SOURCE_DIR}/libtelephonyservice ${CMAKE_BINARY_DIR}/tests/common ${TP_QT5_INCLUDE_DIRS} ${GSETTINGS_QT_INCLUDE_DIRS} ) generate_telepathy_test(HandlerTest SOURCES HandlerTest.cpp handlercontroller.cpp approver.cpp) telephony-service-0.5.3/tests/handler/HandlerTest.cpp000066400000000000000000000566541455543255600227220ustar00rootroot00000000000000/* * Copyright (C) 2013-2016 Canonical, Ltd. * * This file is part of telephony-service. * * telephony-service is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; version 3. * * telephony-service 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 . */ #include #include #include #include "telepathytest.h" #include "chatmanager.h" #include "handlercontroller.h" #include "mockcontroller.h" #include "approver.h" #include "accountentry.h" #include "accountentryfactory.h" #include "telepathyhelper.h" #include "protocolmanager.h" #include Q_DECLARE_METATYPE(Tp::TextChannelPtr) class HandlerTest : public TelepathyTest { Q_OBJECT private Q_SLOTS: void initTestCase(); void init(); void cleanup(); void testGetProtocols(); void testGetProtocolsChangesThroughDBus(); void testMakingCalls(); void testHangUpCall(); void testCallHold(); void testCallProperties(); void testConferenceCall(); void testSendMessage(); void testSendMessageWithAttachments(); void testSendMessageOwnNumber(); void testAcknowledgeMessage(); void testAcknowledgeAllMessages(); void testActiveCallIndicator(); void testNotApprovedChannels(); void testMultimediaFallback(); private: void registerApprover(); void unregisterApprover(); void waitForCallActive(const QString &callerId); Approver *mApprover; MockController *mMockController; Tp::AccountPtr mTpAccount; MockController *mMultimediaMockController; Tp::AccountPtr mMultimediaTpAccount; MockController *mOfonoMockController; Tp::AccountPtr mOfonoTpAccount; }; void HandlerTest::initTestCase() { qDBusRegisterMetaType(); qDBusRegisterMetaType(); initialize(); QSignalSpy setupReadySpy(TelepathyHelper::instance(), SIGNAL(setupReady())); TRY_COMPARE(setupReadySpy.count(), 1); qRegisterMetaType(); registerApprover(); } void HandlerTest::init() { mTpAccount = addAccount("mock", "mock", "the account"); // and create the mock controller mMockController = new MockController("mock", this); mOfonoTpAccount = addAccount("mock", "ofono", "the account"); mOfonoMockController = new MockController("ofono", this); mMultimediaTpAccount = addAccount("mock", "multimedia", "the account"); mMultimediaMockController = new MockController("multimedia", this); } void HandlerTest::cleanup() { doCleanup(); mMockController->deleteLater(); mMultimediaMockController->deleteLater(); mOfonoMockController->deleteLater(); } void HandlerTest::testGetProtocols() { Protocols protocols = ProtocolManager::instance()->protocols(); ProtocolList protocolList = HandlerController::instance()->getProtocols(); for (int i = 0; i < protocols.count(); ++i) { QCOMPARE(protocols[i]->name(), protocolList.at(i).name); } } void HandlerTest::testGetProtocolsChangesThroughDBus() { QSignalSpy protocolsChangedSpy(HandlerController::instance(), SIGNAL(protocolsChanged(ProtocolList))); QTemporaryFile f; f.setFileTemplate(protocolsDir() + "/"); if (f.open()) { f.close(); } QVERIFY(!(f.fileName().isEmpty())); QTRY_COMPARE(protocolsChangedSpy.count(), 1); } void HandlerTest::testMakingCalls() { QString callerId("1234567"); QSignalSpy callReceivedSpy(mMockController, SIGNAL(CallReceived(QString))); // FIXME: add support for multiple accounts HandlerController::instance()->startCall(callerId, mTpAccount->uniqueIdentifier()); TRY_COMPARE(callReceivedSpy.count(), 1); QCOMPARE(callReceivedSpy.first().first().toString(), callerId); mMockController->HangupCall(callerId); } void HandlerTest::testHangUpCall() { QString callerId("7654321"); QVariantMap properties; properties["Caller"] = callerId; properties["State"] = "incoming"; QSignalSpy approverCallSpy(mApprover, SIGNAL(newCall())); QString objectPath = mMockController->placeCall(properties); QVERIFY(!objectPath.isEmpty()); // wait for the channel to hit the approver TRY_COMPARE(approverCallSpy.count(), 1); mApprover->acceptCall(); waitForCallActive(callerId); // and finally request the hangup QSignalSpy callEndedSpy(mMockController, SIGNAL(CallEnded(QString))); TRY_VERIFY(HandlerController::instance()->hasCalls()); HandlerController::instance()->hangUpCall(objectPath); TRY_COMPARE(callEndedSpy.count(), 1); } void HandlerTest::testCallHold() { QString callerId("44444444"); QVariantMap properties; properties["Caller"] = callerId; properties["State"] = "incoming"; QSignalSpy approverCallSpy(mApprover, SIGNAL(newCall())); QString objectPath = mMockController->placeCall(properties); QVERIFY(!objectPath.isEmpty()); // wait for the channel to hit the approver TRY_COMPARE(approverCallSpy.count(), 1); mApprover->acceptCall(); waitForCallActive(callerId); QSignalSpy callStateSpy(mMockController, SIGNAL(CallStateChanged(QString,QString,QString))); TRY_VERIFY(HandlerController::instance()->hasCalls()); // set the call on hold HandlerController::instance()->setHold(objectPath, true); TRY_COMPARE(callStateSpy.count(), 1); QCOMPARE(callStateSpy.first()[2].toString(), QString("held")); // and now set it as unheld again callStateSpy.clear(); HandlerController::instance()->setHold(objectPath, false); TRY_COMPARE(callStateSpy.count(), 1); QCOMPARE(callStateSpy.first()[2].toString(), QString("active")); mMockController->HangupCall(callerId); } void HandlerTest::testCallProperties() { QString callerId("7654321"); QVariantMap properties; properties["Caller"] = callerId; properties["State"] = "incoming"; QSignalSpy approverCallSpy(mApprover, SIGNAL(newCall())); QSignalSpy handlerCallPropertiesSpy(HandlerController::instance(), SIGNAL(callPropertiesChanged(QString,QVariantMap))); mMockController->placeCall(properties); // wait for the channel to hit the approver TRY_COMPARE(approverCallSpy.count(), 1); mApprover->acceptCall(); waitForCallActive(callerId); TRY_VERIFY(HandlerController::instance()->hasCalls()); // wait until the call properties are changed TRY_VERIFY(handlerCallPropertiesSpy.count() > 0); QString objectPath = handlerCallPropertiesSpy.last()[0].toString(); QVariantMap propsFromSignal = handlerCallPropertiesSpy.last()[1].toMap(); QVERIFY(!propsFromSignal.isEmpty()); QDateTime activeTimestampFromSignal; QDateTime timestampFromSignal; propsFromSignal["activeTimestamp"].value() >> activeTimestampFromSignal; propsFromSignal["timestamp"].value() >> timestampFromSignal; QVERIFY(activeTimestampFromSignal.isValid()); QVERIFY(timestampFromSignal.isValid()); // and try to get the properties using the method QVariantMap propsFromMethod = HandlerController::instance()->getCallProperties(objectPath); QVERIFY(!propsFromMethod.isEmpty()); QDateTime activeTimestampFromMethod; QDateTime timestampFromMethod; propsFromMethod["activeTimestamp"].value() >> activeTimestampFromMethod; propsFromMethod["timestamp"].value() >> timestampFromMethod; QCOMPARE(activeTimestampFromSignal, activeTimestampFromMethod); QCOMPARE(timestampFromSignal, timestampFromMethod); // now send some DTMF tones and check if the property is properly updated handlerCallPropertiesSpy.clear(); QString dtmfString("1234*#"); for (int i = 0; i < dtmfString.length(); ++i) { HandlerController::instance()->sendDTMF(objectPath, QString(dtmfString[i])); } TRY_COMPARE(handlerCallPropertiesSpy.count(), dtmfString.length()); propsFromSignal = handlerCallPropertiesSpy.last()[1].toMap(); propsFromMethod = HandlerController::instance()->getCallProperties(objectPath); QString dtmfStringFromSignal = propsFromSignal["dtmfString"].toString(); QString dtmfStringFromMethod = propsFromMethod["dtmfString"].toString(); QCOMPARE(dtmfStringFromSignal, dtmfString); QCOMPARE(dtmfStringFromMethod, dtmfString); HandlerController::instance()->hangUpCall(objectPath); QTest::qWait(500); } void HandlerTest::testConferenceCall() { QString callerId1("55555555"); QString callerId2("66666666"); QString callerId3("77777777"); QVariantMap properties; properties["Caller"] = callerId1; properties["State"] = "incoming"; QSignalSpy approverCallSpy(mApprover, SIGNAL(newCall())); QString call1 = mMockController->placeCall(properties); // wait for the channel to hit the approver TRY_COMPARE(approverCallSpy.count(), 1); mApprover->acceptCall(); approverCallSpy.clear(); waitForCallActive(callerId1); // make a second call properties["Caller"] = callerId2; QString call2 = mMockController->placeCall(properties); // wait for the channel to hit the approver TRY_COMPARE(approverCallSpy.count(), 1); mApprover->acceptCall(); approverCallSpy.clear(); waitForCallActive(callerId2); // now create the conf call QSignalSpy conferenceCreatedSpy(mMockController, SIGNAL(ConferenceCreated(QString))); HandlerController::instance()->createConferenceCall(QStringList() << call1 << call2); TRY_COMPARE(conferenceCreatedSpy.count(), 1); QString conferenceObjectPath = conferenceCreatedSpy.first().first().toString(); // now place a third call and try to merge it properties["Caller"] = callerId3; QString call3 = mMockController->placeCall(properties); TRY_COMPARE(approverCallSpy.count(), 1); mApprover->acceptCall(); approverCallSpy.clear(); waitForCallActive(callerId3); // merge that call on the conference QSignalSpy channelMergedSpy(mMockController, SIGNAL(ChannelMerged(QString))); HandlerController::instance()->mergeCall(conferenceObjectPath, call3); TRY_COMPARE(channelMergedSpy.count(), 1); QCOMPARE(channelMergedSpy.first().first().toString(), call3); // now try to split one of the channels QSignalSpy channelSplittedSpy(mMockController, SIGNAL(ChannelSplitted(QString))); HandlerController::instance()->splitCall(call2); TRY_COMPARE(channelSplittedSpy.count(), 1); QCOMPARE(channelSplittedSpy.first().first().toString(), call2); // now hangup the conference and the individual channels HandlerController::instance()->hangUpCall(conferenceObjectPath); HandlerController::instance()->hangUpCall(call1); HandlerController::instance()->hangUpCall(call2); HandlerController::instance()->hangUpCall(call3); // just to make sure it is all done before removing the accounts QTest::qWait(500); } void HandlerTest::testSendMessage() { QString recipient("22222222"); QString message("Hello, world!"); QSignalSpy messageSentSpy(mMockController, SIGNAL(MessageSent(QString,QVariantList,QVariantMap))); // FIXME: add support for multiple accounts HandlerController::instance()->sendMessage(mTpAccount->uniqueIdentifier(), QStringList() << recipient, message); TRY_COMPARE(messageSentSpy.count(), 1); QString sentMessage = messageSentSpy.first().first().toString(); QVariantMap messageProperties = messageSentSpy.first().last().value(); QCOMPARE(sentMessage, message); QCOMPARE(messageProperties["Recipients"].value().count(), 1); QCOMPARE(messageProperties["Recipients"].value().first(), recipient); } void HandlerTest::testSendMessageWithAttachments() { // just to avoid the account fallback, remove the multimedia account QVERIFY(removeAccount(mMultimediaTpAccount)); QString recipient("22222222"); QString message("Hello, world!"); QSignalSpy messageSentSpy(mOfonoMockController, SIGNAL(MessageSent(QString,QVariantList,QVariantMap))); QTemporaryFile outputFile("audioXXXXXX.ogg"); outputFile.open(); AttachmentStruct attachment{"id", "audio/ogg", outputFile.fileName()}; HandlerController::instance()->sendMessage(mOfonoTpAccount->uniqueIdentifier(), QStringList() << recipient, message, AttachmentList() << attachment); TRY_COMPARE(messageSentSpy.count(), 1); outputFile.close(); QString sentMessage = messageSentSpy.first()[0].toString(); QVariantMap messageProperties = messageSentSpy.first()[2].value(); QCOMPARE(sentMessage, message); QCOMPARE(messageProperties["Recipients"].value().count(), 1); QCOMPARE(messageProperties["Recipients"].value().first(), recipient); QVariantList messageAttachments = qdbus_cast(messageSentSpy.first()[1]); QVariantMap firstAttachment = qdbus_cast(messageAttachments.first()); QCOMPARE(firstAttachment["content-type"].toString(), QString("audio/ogg")); QCOMPARE(firstAttachment["identifier"].toString(), QString("id")); } void HandlerTest::testSendMessageOwnNumber() { QString recipient("84376666"); QString message("Hello, world!"); QSignalSpy messageSentSpy(mMockController, SIGNAL(MessageSent(QString,QVariantList,QVariantMap))); // first send a message to our own number HandlerController::instance()->sendMessage(mTpAccount->uniqueIdentifier(), QStringList() << mTpAccount->connection()->selfContact()->id(), message); TRY_COMPARE(messageSentSpy.count(), 1); QVariantMap messageProperties = messageSentSpy.first()[2].value(); QCOMPARE(messageProperties["Recipients"].toStringList().first(), mTpAccount->connection()->selfContact()->id()); messageSentSpy.clear(); // then send to another number and check if old channels are not reused HandlerController::instance()->sendMessage(mTpAccount->uniqueIdentifier(), QStringList() << recipient, message); TRY_COMPARE(messageSentSpy.count(), 1); messageProperties = messageSentSpy.first()[2].value(); QCOMPARE(messageProperties["Recipients"].toStringList().first(), recipient); } void HandlerTest::testAcknowledgeMessage() { QString recipient("84376666"); QString recipient2("+554184376666"); QString message("Hello, world!"); QSignalSpy messageSentSpy(mMockController, SIGNAL(MessageSent(QString,QVariantList,QVariantMap))); // first send a message to a certain number so the handler request one channel QString objectPath = HandlerController::instance()->sendMessage(mTpAccount->uniqueIdentifier(), QStringList() << recipient, message); QDBusInterface *sendingJob = new QDBusInterface(TelepathyHelper::instance()->handlerInterface()->service(), objectPath, "com.lomiri.TelephonyServiceHandler.MessageSendingJob"); QSignalSpy handlerHasChannel(sendingJob, SIGNAL(finished())); TRY_COMPARE(messageSentSpy.count(), 1); TRY_COMPARE(handlerHasChannel.count(), 1); // if we register the observer before this test, other tests fail TelepathyHelper::instance()->registerChannelObserver("TelephonyServiceTests"); TRY_VERIFY(QDBusConnection::sessionBus().interface()->isServiceRegistered(TP_QT_IFACE_CLIENT + ".TelephonyServiceTests")); QSignalSpy textChannelAvailableSpy(ChatManager::instance(), SIGNAL(textChannelAvailable(Tp::TextChannelPtr))); // now receive a message from a very similar number so CM creates another // channel and the handler needs to deal with both QVariantMap properties; properties["Sender"] = recipient2; properties["Recipients"] = (QStringList() << recipient2); mMockController->PlaceIncomingMessage(message, properties); TRY_COMPARE(textChannelAvailableSpy.count(), 2); Tp::TextChannelPtr channel = textChannelAvailableSpy[1].first().value(); QVERIFY(!channel.isNull()); TRY_COMPARE(channel->messageQueue().count(), 1); QString receivedMessageId = channel->messageQueue().first().messageToken(); // then acknowledge the message that arrived in the second channel and make sure handler // does the right thing QSignalSpy messageReadSpy(mMockController, SIGNAL(MessageRead(QString))); QTest::qWait(1000); QVariantMap ackProperties; ackProperties["accountId"] = mTpAccount->uniqueIdentifier(); ackProperties["participantIds"] = properties["Recipients"].toStringList(); ackProperties["messageId"] = receivedMessageId; ChatManager::instance()->acknowledgeMessage(ackProperties); TRY_COMPARE(messageReadSpy.count(), 1); QCOMPARE(messageReadSpy.first()[0].toString(), receivedMessageId); } void HandlerTest::testAcknowledgeAllMessages() { // FIXME: we assume the observer is already registered from the test above QString recipient("98437666"); QString recipient2("+554198437666"); QString message("Hello, world! %1"); int messageCount = 10; QSignalSpy messageSentSpy(mMockController, SIGNAL(MessageSent(QString,QVariantList,QVariantMap))); // first send a message to a certain number so the handler request one channel HandlerController::instance()->sendMessage(mTpAccount->uniqueIdentifier(), QStringList() << recipient, message); TRY_COMPARE(messageSentSpy.count(), 1); QSignalSpy textChannelAvailableSpy(ChatManager::instance(), SIGNAL(textChannelAvailable(Tp::TextChannelPtr))); // now receive some messages from a very similar number so CM creates another // channel and the handler needs to deal with both QVariantMap properties; properties["Sender"] = recipient2; properties["Recipients"] = (QStringList() << recipient2); for (int i = 0; i < messageCount; ++i) { mMockController->PlaceIncomingMessage(message.arg(QString::number(i)), properties); } TRY_COMPARE(textChannelAvailableSpy.count(), 1); Tp::TextChannelPtr channel = textChannelAvailableSpy.first().first().value(); QVERIFY(!channel.isNull()); TRY_COMPARE(channel->messageQueue().count(), messageCount); QString receivedMessageId = channel->messageQueue().first().messageToken(); // then acknowledge the messages that arrived in the second channel and make sure handler // does the right thing QTest::qWait(1000); QSignalSpy messageReadSpy(mMockController, SIGNAL(MessageRead(QString))); QVariantMap ackProperties; ackProperties["accountId"] = mTpAccount->uniqueIdentifier(); ackProperties["participantIds"] = properties["Recipients"].toStringList(); ChatManager::instance()->acknowledgeAllMessages(ackProperties); TRY_COMPARE(messageReadSpy.count(), messageCount); } void HandlerTest::testActiveCallIndicator() { // start by making sure the property is false by default QVERIFY(!HandlerController::instance()->callIndicatorVisible()); QSignalSpy spy(HandlerController::instance(), SIGNAL(callIndicatorVisibleChanged(bool))); // set the property to true HandlerController::instance()->setCallIndicatorVisible(true); TRY_COMPARE(spy.count(), 1); QVERIFY(spy.first().first().toBool()); QVERIFY(HandlerController::instance()->callIndicatorVisible()); // and back to false spy.clear(); HandlerController::instance()->setCallIndicatorVisible(false); TRY_COMPARE(spy.count(), 1); QVERIFY(!spy.first().first().toBool()); QVERIFY(!HandlerController::instance()->callIndicatorVisible()); } void HandlerTest::testNotApprovedChannels() { QVariantMap properties; QString callerId = "123456"; properties["Caller"] = callerId; properties["State"] = "incoming"; QSignalSpy approverCallSpy(mApprover, SIGNAL(newCall())); QSignalSpy callStateSpy(mMockController, SIGNAL(CallStateChanged(QString,QString,QString))); QString objectPath = mMockController->placeCall(properties); QVERIFY(!objectPath.isEmpty()); // wait for the channel to hit the approver TRY_COMPARE(approverCallSpy.count(), 1); // accept the call but do not call callChannel->accept() on the channel mApprover->acceptCall(false); // wait for a few seconds QTest::qWait(3000); // the last state received should be initialised TRY_VERIFY(callStateSpy.count() > 0); QCOMPARE(callStateSpy.last()[0].toString(), callerId); QCOMPARE(callStateSpy.last()[1].toString(), objectPath); QCOMPARE(callStateSpy.last()[2].toString(), QString("initialised")); } void HandlerTest::testMultimediaFallback() { QString recipient("22222222"); QString message("Hello, world!"); mMultimediaMockController->SetContactPresence(recipient, Tp::ConnectionPresenceTypeAvailable, "available", ""); // We have to make sure the handler already has the new state QTest::qWait(1000); QSignalSpy messageSentOfonoSpy(mOfonoMockController, SIGNAL(MessageSent(QString,QVariantList,QVariantMap))); QSignalSpy messageSentMultimediaSpy(mMultimediaMockController, SIGNAL(MessageSent(QString,QVariantList,QVariantMap))); QString jobObjectPath = HandlerController::instance()->sendMessage(mOfonoTpAccount->uniqueIdentifier(), QStringList() << recipient, message); QDBusInterface jobInterface(TelepathyHelper::instance()->handlerInterface()->service(), jobObjectPath); QSignalSpy finishedSpy(&jobInterface, SIGNAL(finished())); TRY_COMPARE(finishedSpy.count(), 1); QCOMPARE(jobInterface.property("accountId").toString(), mMultimediaTpAccount->uniqueIdentifier()); TRY_COMPARE(messageSentMultimediaSpy.count(), 1); QCOMPARE(messageSentOfonoSpy.count(), 0); QString sentMessage = messageSentMultimediaSpy.first().first().toString(); QVariantMap messageProperties = messageSentMultimediaSpy.first().last().value(); QCOMPARE(sentMessage, message); QCOMPARE(messageProperties["Recipients"].value().count(), 1); QCOMPARE(messageProperties["Recipients"].value().first(), recipient); messageSentMultimediaSpy.clear(); messageSentOfonoSpy.clear(); } void HandlerTest::registerApprover() { // register the approver mApprover = new Approver(); QVERIFY(TelepathyHelper::instance()->registerClient(mApprover, "TelephonyTestApprover")); // Tp-qt does not set registered status to approvers TRY_VERIFY(QDBusConnection::sessionBus().interface()->isServiceRegistered(TELEPHONY_SERVICE_APPROVER)); } void HandlerTest::unregisterApprover() { QVERIFY(TelepathyHelper::instance()->unregisterClient(mApprover)); mApprover->deleteLater(); mApprover = NULL; TRY_VERIFY(!QDBusConnection::sessionBus().interface()->isServiceRegistered(TELEPHONY_SERVICE_APPROVER)); } void HandlerTest::waitForCallActive(const QString &callerId) { QSignalSpy callStateSpy(mMockController, SIGNAL(CallStateChanged(QString,QString,QString))); QString state; QString objectPath; QString caller; int tries = 0; while ((state != "active" || caller != callerId) && tries < 5) { TRY_COMPARE(callStateSpy.count(), 1); caller = callStateSpy.first()[0].toString(); objectPath = callStateSpy.first()[1].toString(); state = callStateSpy.first()[2].toString(); callStateSpy.clear(); tries++; qDebug() << "Waiting for call active, try " << tries << " failed."; } QCOMPARE(caller, callerId); QCOMPARE(state, QString("active")); QVERIFY(!objectPath.isEmpty()); } QTEST_MAIN(HandlerTest) #include "HandlerTest.moc" telephony-service-0.5.3/tests/handler/approver.cpp000066400000000000000000000146701455543255600223330ustar00rootroot00000000000000/** * Copyright (C) 2013 Canonical, Ltd. * * This program is free software: you can redistribute it and/or modify it under * the terms of the GNU General Public License version 3, as published by * the Free Software Foundation. * * This program is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranties of MERCHANTABILITY, * SATISFACTORY QUALITY, 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 . * * Authors: Tiago Salem Herrmann */ #include "approver.h" #include #include #include #include #include #include Approver::Approver(QObject* parent) : QObject(parent), Tp::AbstractClientApprover(channelFilters()) { } Approver::~Approver() { } Tp::ChannelClassSpecList Approver::channelFilters() const { Tp::ChannelClassSpecList specList; specList << Tp::ChannelClassSpec::textChat() << Tp::ChannelClassSpec::audioCall(); return specList; } void Approver::addDispatchOperation(const Tp::MethodInvocationContextPtr<> &context, const Tp::ChannelDispatchOperationPtr &dispatchOperation) { bool willHandle = false; QList channels = dispatchOperation->channels(); Q_FOREACH (Tp::ChannelPtr channel, channels) { // Text Channel Tp::TextChannelPtr textChannel = Tp::TextChannelPtr::dynamicCast(channel); if (!textChannel.isNull()) { // right now we are not using any of the text channel's features in the approver // so no need to call becomeReady() on it. willHandle = true; continue; } // Call Channel Tp::CallChannelPtr callChannel = Tp::CallChannelPtr::dynamicCast(channel); if (!callChannel.isNull()) { Tp::PendingReady *pr = callChannel->becomeReady(Tp::Features() << Tp::CallChannel::FeatureCore << Tp::CallChannel::FeatureCallState << Tp::CallChannel::FeatureLocalHoldState); mChannels[pr] = callChannel; connect(pr, SIGNAL(finished(Tp::PendingOperation*)), SLOT(onChannelReady(Tp::PendingOperation*))); callChannel->setProperty("accountId", QVariant(dispatchOperation->account()->uniqueIdentifier())); willHandle = true; continue; } } if (willHandle) { mDispatchOps.append(dispatchOperation); } context->setFinished(); // check if we need to approve channels already or if we should wait. processChannels(); } void Approver::processChannels() { Q_FOREACH (Tp::ChannelDispatchOperationPtr dispatchOperation, mDispatchOps) { QList channels = dispatchOperation->channels(); Q_FOREACH (Tp::ChannelPtr channel, channels) { // approve only text channels Tp::TextChannelPtr textChannel = Tp::TextChannelPtr::dynamicCast(channel); if (textChannel.isNull()) { continue; } if (dispatchOperation->possibleHandlers().contains(TELEPHONY_SERVICE_HANDLER)) { dispatchOperation->handleWith(TELEPHONY_SERVICE_HANDLER); mDispatchOps.removeAll(dispatchOperation); } // FIXME: this shouldn't happen, but in any case, we need to check what to do when // the phone app client is not available } } } void Approver::acceptCall(bool callAcceptOnChannel) { Q_FOREACH (Tp::ChannelDispatchOperationPtr dispatchOperation, mDispatchOps) { QList channels = dispatchOperation->channels(); Q_FOREACH (Tp::ChannelPtr channel, channels) { if (callAcceptOnChannel) { Tp::CallChannelPtr callChannel = Tp::CallChannelPtr::dynamicCast(channel); if (callChannel) { callChannel->accept(); } } if (dispatchOperation->possibleHandlers().contains(TELEPHONY_SERVICE_HANDLER)) { dispatchOperation->handleWith(TELEPHONY_SERVICE_HANDLER); mDispatchOps.removeAll(dispatchOperation); break; } } } } void Approver::rejectCall() { Q_FOREACH (Tp::ChannelDispatchOperationPtr dispatchOperation, mDispatchOps) { QList channels = dispatchOperation->channels(); Q_FOREACH (Tp::ChannelPtr channel, channels) { if (dispatchOperation->possibleHandlers().contains(TELEPHONY_SERVICE_HANDLER)) { Tp::PendingOperation *claimop = dispatchOperation->claim(); mChannels[claimop] = dispatchOperation->channels().first(); connect(claimop, SIGNAL(finished(Tp::PendingOperation*)), this, SLOT(onClaimFinished(Tp::PendingOperation*))); } } } } void Approver::onClaimFinished(Tp::PendingOperation* op) { if(!op || op->isError()) { return; } Tp::CallChannelPtr callChannel = Tp::CallChannelPtr::dynamicCast(mChannels[op]); if (callChannel) { Tp::PendingOperation *hangupop = callChannel->hangup(Tp::CallStateChangeReasonUserRequested, TP_QT_ERROR_REJECTED, QString()); mChannels[hangupop] = callChannel; connect(hangupop, SIGNAL(finished(Tp::PendingOperation*)), this, SLOT(onHangupFinished(Tp::PendingOperation*))); } } void Approver::onHangupFinished(Tp::PendingOperation* op) { if(!op || op->isError()) { return; } mDispatchOps.removeAll(dispatchOperation(op)); mChannels.remove(op); } Tp::ChannelDispatchOperationPtr Approver::dispatchOperation(Tp::PendingOperation *op) { Tp::ChannelPtr channel = mChannels[op]; QString accountId = channel->property("accountId").toString(); Q_FOREACH (Tp::ChannelDispatchOperationPtr dispatchOperation, mDispatchOps) { if (dispatchOperation->account()->uniqueIdentifier() == accountId) { return dispatchOperation; } } return Tp::ChannelDispatchOperationPtr(); } void Approver::onChannelReady(Tp::PendingOperation *op) { Q_EMIT newCall(); } telephony-service-0.5.3/tests/handler/approver.h000066400000000000000000000037331455543255600217760ustar00rootroot00000000000000/** * Copyright (C) 2013 Canonical, Ltd. * * This program is free software: you can redistribute it and/or modify it under * the terms of the GNU General Public License version 3, as published by * the Free Software Foundation. * * This program is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranties of MERCHANTABILITY, * SATISFACTORY QUALITY, 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 . * * Authors: Tiago Salem Herrmann */ #ifndef APPROVER_H #define APPROVER_H #include #include #include #include #define TELEPHONY_SERVICE_HANDLER TP_QT_IFACE_CLIENT + ".TelephonyServiceHandler" #define TELEPHONY_SERVICE_APPROVER TP_QT_IFACE_CLIENT + ".TelephonyTestApprover" class Approver : public QObject, public Tp::AbstractClientApprover { Q_OBJECT public: Approver(QObject *parent = 0); ~Approver(); Tp::ChannelClassSpecList channelFilters() const; void addDispatchOperation(const Tp::MethodInvocationContextPtr<> &context, const Tp::ChannelDispatchOperationPtr &dispatchOperation); Q_SIGNALS: void newCall(); public Q_SLOTS: void acceptCall(bool callAcceptOnChannel = true); void rejectCall(); private Q_SLOTS: void processChannels(); void onClaimFinished(Tp::PendingOperation* op); void onHangupFinished(Tp::PendingOperation* op); void onChannelReady(Tp::PendingOperation *op); protected: Tp::ChannelDispatchOperationPtr dispatchOperation(Tp::PendingOperation *op); private: QList mDispatchOps; QMap mChannels; }; #endif // APPROVER_H telephony-service-0.5.3/tests/handler/handlercontroller.cpp000066400000000000000000000134221455543255600242100ustar00rootroot00000000000000/** * Copyright (C) 2013-2016 Canonical, Ltd. * * This program is free software: you can redistribute it and/or modify it under * the terms of the GNU General Public License version 3, as published by * the Free Software Foundation. * * This program is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranties of MERCHANTABILITY, * SATISFACTORY QUALITY, 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 . * * Authors: * Gustavo Pichorim Boiko */ #include #include "handlercontroller.h" #include #include #include #define HANDLER_SERVICE "com.lomiri.TelephonyServiceHandler" #define HANDLER_OBJECT "/com/lomiri/TelephonyServiceHandler" #define HANDLER_INTERFACE "com.lomiri.TelephonyServiceHandler" HandlerController *HandlerController::instance() { static HandlerController *self = new HandlerController(); return self; } HandlerController::HandlerController(QObject *parent) : QObject(parent), mHandlerInterface(HANDLER_SERVICE, HANDLER_OBJECT, HANDLER_INTERFACE) { qDBusRegisterMetaType(); qDBusRegisterMetaType(); connect(&mHandlerInterface, SIGNAL(CallPropertiesChanged(QString, QVariantMap)), SIGNAL(callPropertiesChanged(QString, QVariantMap))); connect(&mHandlerInterface, SIGNAL(CallIndicatorVisibleChanged(bool)), SIGNAL(callIndicatorVisibleChanged(bool))); connect(&mHandlerInterface, SIGNAL(ProtocolsChanged(ProtocolList)), SIGNAL(protocolsChanged(ProtocolList))); } QVariantMap HandlerController::getCallProperties(const QString &objectPath) { QVariantMap properties; QDBusReply reply = mHandlerInterface.call("GetCallProperties", objectPath); if (reply.isValid()) { properties = reply.value(); } return properties; } bool HandlerController::callIndicatorVisible() { QDBusInterface handlerPropertiesInterface("com.lomiri.TelephonyServiceHandler", "/com/lomiri/TelephonyServiceHandler", "org.freedesktop.DBus.Properties"); QDBusReply reply = handlerPropertiesInterface.call("GetAll", "com.lomiri.TelephonyServiceHandler"); if (!reply.isValid()) { return false; } QVariantMap map = reply.value(); return map["CallIndicatorVisible"].toBool(); } void HandlerController::startChat(const QString &accountId, const QStringList &recipients) { // TODO CHANGE SIGNATURE of this method QVariantMap properties; properties["participantIds"] = recipients; mHandlerInterface.call("StartChat", accountId, properties); } void HandlerController::startCall(const QString &number, const QString &accountId) { mHandlerInterface.call("StartCall", number, accountId); } void HandlerController::hangUpCall(const QString &objectPath) { mHandlerInterface.call("HangUpCall", objectPath); } void HandlerController::setHold(const QString &objectPath, bool hold) { mHandlerInterface.call("SetHold", objectPath, hold); } void HandlerController::setMuted(const QString &objectPath, bool muted) { mHandlerInterface.call("SetMuted", objectPath, muted); } void HandlerController::setSpeakerMode(const QString &objectPath, bool enabled) { mHandlerInterface.call("SetSpeakerMode", objectPath, enabled); } void HandlerController::sendDTMF(const QString &objectPath, const QString &key) { mHandlerInterface.call("SendDTMF", objectPath, key); } bool HandlerController::hasCalls() { QDBusReply reply = mHandlerInterface.call("HasCalls"); return reply.isValid() && reply.value(); } void HandlerController::createConferenceCall(const QStringList &objectPaths) { mHandlerInterface.call("CreateConferenceCall", objectPaths); } void HandlerController::mergeCall(const QString &conferenceObjectPath, const QString &callObjectPath) { mHandlerInterface.call("MergeCall", conferenceObjectPath, callObjectPath); } void HandlerController::splitCall(const QString &objectPath) { mHandlerInterface.call("SplitCall", objectPath); } QString HandlerController::sendMessage(const QString &accountId, const QStringList &recipients, const QString &message, const AttachmentList &attachments, const QVariantMap &properties) { // TODO CHANGE SIGNATURE of this method QVariantMap props = properties; props["participantIds"] = recipients; QDBusReply reply = mHandlerInterface.call("SendMessage", accountId, message, QVariant::fromValue(attachments), props); if (reply.isValid()) { return reply.value(); } return QString(); } void HandlerController::acknowledgeMessages(const QVariantMap &properties) { mHandlerInterface.call("AcknowledgeMessages", QVariantList() << QVariant::fromValue(properties)); } void HandlerController::setCallIndicatorVisible(bool visible) { QDBusInterface handlerPropertiesInterface("com.lomiri.TelephonyServiceHandler", "/com/lomiri/TelephonyServiceHandler", "org.freedesktop.DBus.Properties"); handlerPropertiesInterface.call("Set", "com.lomiri.TelephonyServiceHandler", "CallIndicatorVisible", QVariant::fromValue(QDBusVariant(visible))); } ProtocolList HandlerController::getProtocols() { QDBusReply reply = mHandlerInterface.call("GetProtocols"); if (reply.isValid()) { return reply.value(); } return ProtocolList(); } telephony-service-0.5.3/tests/handler/handlercontroller.h000066400000000000000000000050051455543255600236530ustar00rootroot00000000000000/** * Copyright (C) 2013-2016 Canonical, Ltd. * * This program is free software: you can redistribute it and/or modify it under * the terms of the GNU General Public License version 3, as published by * the Free Software Foundation. * * This program is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranties of MERCHANTABILITY, * SATISFACTORY QUALITY, 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 . * * Authors: * Gustavo Pichorim Boiko */ #ifndef HANDLERCONTROLLER_H #define HANDLERCONTROLLER_H #include #include #include #include "dbustypes.h" class HandlerController : public QObject { Q_OBJECT public: static HandlerController *instance(); QVariantMap getCallProperties(const QString &objectPath); bool callIndicatorVisible(); public Q_SLOTS: // call methods void startChat(const QString &accountId, const QStringList &recipients); void startCall(const QString &number, const QString &accountId); void hangUpCall(const QString &objectPath); void setHold(const QString &objectPath, bool hold); void setMuted(const QString &objectPath, bool muted); void setSpeakerMode(const QString &objectPath, bool enabled); void sendDTMF(const QString &objectPath, const QString &key); bool hasCalls(); // conference call methods void createConferenceCall(const QStringList &objectPaths); void mergeCall(const QString &conferenceObjectPath, const QString &callObjectPath); void splitCall(const QString &objectPath); // messaging methods QString sendMessage(const QString &accountId, const QStringList &recipients, const QString &message, const AttachmentList &attachments = AttachmentList(), const QVariantMap &properties = QVariantMap()); void acknowledgeMessages(const QVariantMap &message); // active call indicator void setCallIndicatorVisible(bool visible); // protocols ProtocolList getProtocols(); Q_SIGNALS: void callPropertiesChanged(const QString &objectPath, const QVariantMap &properties); void callIndicatorVisibleChanged(bool visible); void protocolsChanged(ProtocolList); private: explicit HandlerController(QObject *parent = 0); QDBusInterface mHandlerInterface; }; #endif // HANDLERCONTROLLER_H telephony-service-0.5.3/tests/indicator/000077500000000000000000000000001455543255600203205ustar00rootroot00000000000000telephony-service-0.5.3/tests/indicator/AuthHandlerTest.cpp000066400000000000000000000043371455543255600240720ustar00rootroot00000000000000/* * Copyright (C) 2015 Canonical, Ltd. * * This file is part of telephony-service. * * telephony-service is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; version 3. * * telephony-service 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 . */ #include #include #include #include #include #include #include "telepathytest.h" #include "notificationmenu.h" #include "authhandler.h" #include "mockcontroller.h" class AuthHandlerTest : public TelepathyTest { Q_OBJECT private Q_SLOTS: void initTestCase(); void init(); void cleanup(); void testNotificationDisplayedForFailure(); private: AuthHandler mAuthHandler; Tp::AccountPtr mAccount; MockController *mMockController; }; void AuthHandlerTest::initTestCase() { initialize(); } void AuthHandlerTest::init() { mAccount = addAccount("mock", "mock", "theAccount"); mMockController = new MockController("mock", this); } void AuthHandlerTest::cleanup() { doCleanup(); mMockController->deleteLater(); } void AuthHandlerTest::testNotificationDisplayedForFailure() { QDBusInterface notificationMock("org.freedesktop.Notifications", "/org/freedesktop/Notifications"); QSignalSpy notificationSpy(¬ificationMock, SIGNAL(MockNotificationReceived(QString, uint, QString, QString, QString, QStringList, QVariantMap, int))); mMockController->SimulateAuthFailure(); TRY_COMPARE(notificationSpy.count(), 1); // now just check that the actions are there QStringList actions = notificationSpy.first()[5].toStringList(); QCOMPARE(actions.count(), 4); QCOMPARE(actions[0], QString("yes_id")); QCOMPARE(actions[2], QString("no_id")); } QTEST_MAIN(AuthHandlerTest) #include "AuthHandlerTest.moc" telephony-service-0.5.3/tests/indicator/CMakeLists.txt000066400000000000000000000034041455543255600230610ustar00rootroot00000000000000include_directories( ${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/../common ${CMAKE_CURRENT_BINARY_DIR}/../common ${CMAKE_SOURCE_DIR} ${CMAKE_SOURCE_DIR}/libtelephonyservice ${CMAKE_SOURCE_DIR}/indicator ${MESSAGING_MENU_INCLUDE_DIRS} ${NOTIFY_INCLUDE_DIRS} ${TP_QT5_INCLUDE_DIRS} ${HISTORY_INCLUDE_DIRS} ${GSETTINGS_QT_INCLUDE_DIRS} ) if (NOT ("${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "aarch64")) generate_telepathy_test(MessagingMenuTest SOURCES MessagingMenuTest.cpp messagingmenumock.cpp ${CMAKE_SOURCE_DIR}/indicator/messagingmenu.cpp LIBRARIES ${TP_QT5_LIBRARIES} telephonyservice mockcontroller telepathytest ${HISTORY_LIBRARIES} TASKS --task xvfb-run -p -a -p ${CMAKE_BINARY_DIR}/indicator/telephony-service-indicator --task-name telephony-service-indicator --wait-for com.lomiri.TelephonyServiceHandler --ignore-return) endif() qt5_add_dbus_interface( qt_SRCS "${DATA_DIR}/org.freedesktop.Notifications.xml" NotificationsInterface ) generate_telepathy_test(AuthHandlerTest SOURCES AuthHandlerTest.cpp ${CMAKE_SOURCE_DIR}/indicator/authhandler.cpp ${CMAKE_SOURCE_DIR}/indicator/notificationmenu.cpp ${qt_SRCS} LIBRARIES ${TP_QT5_LIBRARIES} telephonyservice mockcontroller telepathytest ${HISTORY_LIBRARIES} ${NOTIFY_LIBRARIES}) generate_test(NotificationMenuTest SOURCES NotificationMenuTest.cpp ${CMAKE_SOURCE_DIR}/indicator/notificationmenu.cpp LIBRARIES ${NOTIFY_LIBRARIES} Qt5::Core Qt5::DBus Qt5::Test USE_DBUS TRUE) telephony-service-0.5.3/tests/indicator/MessagingMenuTest.cpp000066400000000000000000000167131455543255600244360ustar00rootroot00000000000000/* * Copyright (C) 2015 Canonical, Ltd. * * This file is part of telephony-service. * * telephony-service is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; version 3. * * telephony-service 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 . */ #include #include #include "contactutils.h" #include "telepathytest.h" #include "messagingmenu.h" #include "messagingmenumock.h" #include "telepathyhelper.h" #include "mockcontroller.h" #include "include/cellbroadcast-types.h" class MessagingMenuTest : public TelepathyTest { Q_OBJECT private Q_SLOTS: void initTestCase(); void cleanupTestCase(); void cleanup(); void testCallNotificationAdded(); void testCallNotificationRemoved(); void testTextMessagesNotificationAdded(); void testTextMessagesNotificationFromOwnNumber(); void testCellBroadcastMessagesNotificationAdded(); private: Tp::AccountPtr mOfonoAccount; Tp::AccountPtr mMultimediaAccount; MockController *mOfonoMockController; MockController *mMultimediaMockController; }; void MessagingMenuTest::initTestCase() { initialize(); // just trigger the creation of the mock singleton MessagingMenuMock::instance(); // use the memory contact backend ContactUtils::sharedManager("memory"); QSignalSpy accountAddedSpy(TelepathyHelper::instance(), SIGNAL(accountAdded(AccountEntry*))); mOfonoAccount = addAccount("mock", "ofono", "theOfonoAccount"); QTRY_COMPARE(accountAddedSpy.count(), 1); accountAddedSpy.clear(); mOfonoMockController = new MockController("ofono", this); mMultimediaAccount = addAccount("mock", "multimedia", "theMultimediaAccount"); QTRY_COMPARE(accountAddedSpy.count(), 1); mMultimediaMockController = new MockController("multimedia", this); } void MessagingMenuTest::cleanupTestCase() { doCleanup(); } void MessagingMenuTest::cleanup() { // just to prevent the doCleanup() to run on every test } void MessagingMenuTest::testCallNotificationAdded() { QString caller("12345"); QSignalSpy messageAddedSpy(MessagingMenuMock::instance(), SIGNAL(messageAdded(QString,QString,QString,bool))); MessagingMenu::instance()->addCall(caller, mOfonoAccount->uniqueIdentifier(), QDateTime::currentDateTime()); QTRY_COMPARE(messageAddedSpy.count(), 1); QCOMPARE(messageAddedSpy.first()[1].toString(), caller); } void MessagingMenuTest::testCallNotificationRemoved() { QString caller("2345678"); QSignalSpy messageRemovedSpy(MessagingMenuMock::instance(), SIGNAL(messageRemoved(QString,QString))); MessagingMenu::instance()->addCall(caller, mOfonoAccount->uniqueIdentifier(), QDateTime::currentDateTime()); MessagingMenu::instance()->removeCall(caller, mOfonoAccount->uniqueIdentifier()); QCOMPARE(messageRemovedSpy.count(), 1); QCOMPARE(messageRemovedSpy.first()[1].toString(), caller); } void MessagingMenuTest::testTextMessagesNotificationAdded() { QDBusInterface notificationsMock("org.freedesktop.Notifications", "/org/freedesktop/Notifications", "org.freedesktop.Notifications"); QSignalSpy notificationSpy(¬ificationsMock, SIGNAL(MockNotificationReceived(QString, uint, QString, QString, QString, QStringList, QVariantMap, int))); QVariantMap properties; properties["Sender"] = "12345"; properties["Recipients"] = (QStringList() << "12345"); QStringList messages; messages << "Hi there" << "How are you" << "Always look on the bright side of life"; Q_FOREACH(const QString &message, messages) { mMultimediaMockController->PlaceIncomingMessage(message, properties); } Q_FOREACH(const QString &message, messages) { mOfonoMockController->PlaceIncomingMessage(message, properties); } TRY_COMPARE(notificationSpy.count(), 6); } void MessagingMenuTest::testTextMessagesNotificationFromOwnNumber() { QDBusInterface notificationsMock("org.freedesktop.Notifications", "/org/freedesktop/Notifications", "org.freedesktop.Notifications"); QSignalSpy notificationSpy(¬ificationsMock, SIGNAL(MockNotificationReceived(QString, uint, QString, QString, QString, QStringList, QVariantMap, int))); QVariantMap properties; properties["Sender"] = "11112222"; properties["Recipients"] = (QStringList() << "11112222"); QStringList messages; messages << "Hi there" << "How are you" << "Always look on the bright side of life"; Q_FOREACH(const QString &message, messages) { mOfonoMockController->PlaceIncomingMessage(message, properties); } TRY_COMPARE(notificationSpy.count(), 3); notificationSpy.clear(); Q_FOREACH(const QString &message, messages) { mMultimediaMockController->PlaceIncomingMessage(message, properties); } // we need to make sure no notifications were displayed, using timers is always a bad idea, // but in this case there is no other easy way to test it. QTest::qWait(2000); QCOMPARE(notificationSpy.count(), 0); } void MessagingMenuTest::testCellBroadcastMessagesNotificationAdded() { QDBusInterface notificationsMock("org.freedesktop.Notifications", "/org/freedesktop/Notifications", "org.freedesktop.Notifications"); QSignalSpy notificationSpy(¬ificationsMock, SIGNAL(MockNotificationReceived(QString, uint, QString, QString, QString, QStringList, QVariantMap, int))); QList topics = QList() << CellBroadcast::ETWS_ALERT_EARTHQUAKE << CellBroadcast::CMAS_ALERT_PRESIDENTIAL_LEVEL << CellBroadcast::CMAS_ALERT_EXTREME_IMMEDIATE_OBSERVED << CellBroadcast::CMAS_ALERT_SEVERE_EXPECTED_OBSERVED << CellBroadcast::CMAS_ALERT_PUBLIC_SAFETY << CellBroadcast::CMAS_ALERT_CHILD_ABDUCTION_EMERGENCY << CellBroadcast::CMAS_ALERT_STATE_LOCAL_TEST << 3562; QList types = QList() << CellBroadcast::TYPE_LEVEL_1 << CellBroadcast::TYPE_LEVEL_1 << CellBroadcast::TYPE_LEVEL_2 << CellBroadcast::TYPE_LEVEL_3 << CellBroadcast::TYPE_LEVEL_4 << CellBroadcast::TYPE_AMBER << CellBroadcast::TYPE_TEST << CellBroadcast::TYPE_OTHER; QStringList expectedTitle = QStringList() << "Emergency Alert" << "Emergency Alert" << "Emergency Alert: Extreme" << "Emergency Alert: Severe" << "Emergency Alert: Notice" << "AMBER Alert" << "Alert" << "Alert"; QStringList expectedIcons = QStringList() << "security-alert" << "security-alert" << "dialog-warning-symbolic" << "dialog-warning-symbolic" << "dialog-warning-symbolic" << "dialog-warning-symbolic" << "broadcast" << "broadcast"; for(int i=0; i < topics.count(); i++) { mMultimediaMockController->PlaceIncomingCellBroadcast("Alert Message", (int)types.at(i), topics.at(i) ); } TRY_COMPARE(notificationSpy.count(), topics.count()); for(int i=0; i < notificationSpy.count(); i++) { QString icon = notificationSpy.at(i)[2].toString(); QString title = notificationSpy.at(i)[3].toString(); QString text = notificationSpy.at(i)[4].toString(); QCOMPARE(expectedTitle.at(i), title); QCOMPARE("image://theme/" + expectedIcons.at(i), icon); QCOMPARE("Alert Message", text); } } QTEST_MAIN(MessagingMenuTest) #include "MessagingMenuTest.moc" telephony-service-0.5.3/tests/indicator/NotificationMenuTest.cpp000066400000000000000000000156601455543255600251470ustar00rootroot00000000000000/* * Copyright (C) 2015 Canonical, Ltd. * * This file is part of telephony-service. * * telephony-service is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; version 3. * * telephony-service 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 . */ #include #include #include #include #include #include #include "notificationmenu.h" class NotificationMenuTest : public QObject { Q_OBJECT private Q_SLOTS: void initTestCase(); void testRegularMenu(); void testResponseMenu(); void testPasswordMenu(); void testResponseValue(); private: bool isRegistered(const QString &service); }; struct Menu { uint group; uint number; QList entries; }; Q_DECLARE_METATYPE(Menu) QDBusArgument &operator<<(QDBusArgument &argument, const Menu &menu) { argument.beginStructure(); argument << menu.group; argument << menu.number; argument.beginArray(); Q_FOREACH(const QVariantMap &entry, menu.entries) { argument << entry; } argument.endArray(); argument.endStructure(); return argument; } const QDBusArgument &operator>>(const QDBusArgument &argument, Menu &menu) { argument.beginStructure(); argument >> menu.group; argument >> menu.number; argument.beginArray(); while (!argument.atEnd()) { QVariantMap entry; argument >> entry; menu.entries << entry; } argument.endArray(); argument.endStructure(); return argument; } void NotificationMenuTest::initTestCase() { qDBusRegisterMetaType>(); } void NotificationMenuTest::testRegularMenu() { QString id("regularmenu"); NotificationMenu menu(id, false, false); QVERIFY(isRegistered(menu.busName())); QDBusInterface menuInterface(menu.busName(), menu.menuPath(), "org.gtk.Menus"); QVERIFY(menuInterface.isValid()); // FIXME: check what else to verify in the menuInterface, for now checking that it is there is enough // as this is created by libgmenumodel QDBusInterface actionInterface(menu.busName(), menu.actionPath(), "org.gtk.Actions"); QVERIFY(actionInterface.isValid()); QDBusPendingReply listReply = actionInterface.asyncCall("List"); QTRY_VERIFY(listReply.isFinished()); QVERIFY(listReply.isValid()); // check that the actions contains the required id QStringList actionsList = listReply.value(); QCOMPARE(actionsList.count(), 1); QCOMPARE(actionsList.first(), id); } void NotificationMenuTest::testResponseMenu() { QString id("responsemenu"); NotificationMenu menu(id, true, false); QVERIFY(isRegistered(menu.busName())); QDBusInterface menuInterface(menu.busName(), menu.menuPath(), "org.gtk.Menus"); QVERIFY(menuInterface.isValid()); QDBusPendingReply> menuReply = menuInterface.asyncCall("Start", QVariant::fromValue(QList() << 0)); QTRY_VERIFY(menuReply.isFinished()); QVERIFY(menuReply.isValid()); // parse the reply QList menus = menuReply.value(); QCOMPARE(menus.count(), 1); Menu &theMenu = menus.first(); QCOMPARE(theMenu.entries.count(), 1); QVariantMap entry = theMenu.entries.first(); // check the properties QCOMPARE(entry["action"].toString(), QString("notifications.%1").arg(id)); QCOMPARE(entry["x-canonical-type"].toString(), QString("com.canonical.snapdecision.textfield")); QCOMPARE(entry["x-echo-mode-password"].toBool(), false); QDBusInterface actionInterface(menu.busName(), menu.actionPath(), "org.gtk.Actions"); QVERIFY(actionInterface.isValid()); QDBusPendingReply listReply = actionInterface.asyncCall("List"); QTRY_VERIFY(listReply.isFinished()); QVERIFY(listReply.isValid()); // check that the actions contains the required id QStringList actionsList = listReply.value(); QCOMPARE(actionsList.count(), 1); QCOMPARE(actionsList.first(), id); } void NotificationMenuTest::testPasswordMenu() { QString id("password"); NotificationMenu menu(id, true, true); QVERIFY(isRegistered(menu.busName())); QDBusInterface menuInterface(menu.busName(), menu.menuPath(), "org.gtk.Menus"); QVERIFY(menuInterface.isValid()); QDBusPendingReply> menuReply = menuInterface.asyncCall("Start", QVariant::fromValue(QList() << 0)); QTRY_VERIFY(menuReply.isFinished()); QVERIFY(menuReply.isValid()); // parse the reply QList menus = menuReply.value(); QCOMPARE(menus.count(), 1); Menu &theMenu = menus.first(); QCOMPARE(theMenu.entries.count(), 1); QVariantMap entry = theMenu.entries.first(); // check the properties QCOMPARE(entry["action"].toString(), QString("notifications.%1").arg(id)); QCOMPARE(entry["x-canonical-type"].toString(), QString("com.canonical.snapdecision.textfield")); QCOMPARE(entry["x-echo-mode-password"].toBool(), true); QDBusInterface actionInterface(menu.busName(), menu.actionPath(), "org.gtk.Actions"); QVERIFY(actionInterface.isValid()); QDBusPendingReply listReply = actionInterface.asyncCall("List"); QTRY_VERIFY(listReply.isFinished()); QVERIFY(listReply.isValid()); // check that the actions contains the required id QStringList actionsList = listReply.value(); QCOMPARE(actionsList.count(), 1); QCOMPARE(actionsList.first(), id); } void NotificationMenuTest::testResponseValue() { QString id("responsevalue"); QString response("theresponse"); NotificationMenu menu(id, true, false); QVERIFY(isRegistered(menu.busName())); // check that the response is empty by default QVERIFY(menu.response().isEmpty()); QDBusInterface actionInterface(menu.busName(), menu.actionPath(), "org.gtk.Actions"); QVERIFY(actionInterface.isValid()); QDBusPendingCall pendingCall = actionInterface.asyncCall("SetState", id, QVariant::fromValue(QDBusVariant(response)), QVariantMap()); QDBusPendingCallWatcher watcher(pendingCall); QTRY_VERIFY(watcher.isFinished()); QCOMPARE(menu.response(), response); // now clear the response and check it is cleared menu.clearResponse(); QVERIFY(menu.response().isEmpty()); } bool NotificationMenuTest::isRegistered(const QString &service) { bool result = false; QDBusReply reply = QDBusConnection::sessionBus().interface()->isServiceRegistered(service); if (reply.isValid()) { result = reply.value(); } return result; } QTEST_MAIN(NotificationMenuTest) #include "NotificationMenuTest.moc" telephony-service-0.5.3/tests/indicator/messagingmenumock.cpp000066400000000000000000000270651455543255600245520ustar00rootroot00000000000000/* * Copyright (C) 2015 Canonical, Ltd. * * This file is part of telephony-service. * * telephony-service is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; version 3. * * telephony-service 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 . */ #include "messagingmenumock.h" #include "messaging-menu.h" #include #include MessagingMenuMock *MessagingMenuMock::instance() { static MessagingMenuMock *self = new MessagingMenuMock(); return self; } MessagingMenuMock::MessagingMenuMock(QObject *parent) : QObject(parent) { } /*** Mock implementation of messaging messaging-menu functions ***/ /*** MessagingMenuApp ***/ struct _MessagingMenuApp { GObject parent_instance; gchar *desktopId; }; G_DEFINE_TYPE(MessagingMenuApp, messaging_menu_app, G_TYPE_OBJECT) enum MessageProperties { PROP_0, PROP_ID, PROP_ICON, PROP_TITLE, PROP_SUBTITLE, PROP_BODY, PROP_TIME, PROP_DRAWS_ATTENTION, NUM_PROPERTIES }; #define PROP_DESKTOP_ID 1 static void messaging_menu_app_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) { qDebug() << __PRETTY_FUNCTION__; if (prop_id == PROP_DESKTOP_ID) { MessagingMenuApp *app = MESSAGING_MENU_APP (object); app->desktopId = g_value_dup_string (value); } } static void messaging_menu_app_class_init (MessagingMenuAppClass *klass) { qDebug() << __PRETTY_FUNCTION__; GObjectClass *object_class = G_OBJECT_CLASS (klass); object_class->set_property = messaging_menu_app_set_property; GParamSpec *prop = g_param_spec_string ("desktop-id", "Desktop Id", "The desktop id of the associated application", NULL, (GParamFlags)(G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS)); g_object_class_install_property (object_class, PROP_DESKTOP_ID, prop); } static void messaging_menu_app_init (MessagingMenuApp *app) { qDebug() << __PRETTY_FUNCTION__; Q_UNUSED(app) // FIXME: check what needs implementing } MessagingMenuApp *messaging_menu_app_new(const gchar *desktop_id) { qDebug() << __PRETTY_FUNCTION__; MessagingMenuApp *app = (MessagingMenuApp*)g_object_new (MESSAGING_MENU_TYPE_APP, "desktop-id", desktop_id, NULL); Q_EMIT MessagingMenuMock::instance()->appCreated(app->desktopId); return app; } void messaging_menu_app_register(MessagingMenuApp *app) { qDebug() << __PRETTY_FUNCTION__; Q_EMIT MessagingMenuMock::instance()->appRegistered(app->desktopId); } void messaging_menu_app_append_source(MessagingMenuApp *app, const gchar *id, GIcon *icon, const gchar *label) { qDebug() << __PRETTY_FUNCTION__; Q_EMIT MessagingMenuMock::instance()->sourceAdded(app->desktopId, id, g_icon_to_string(icon), label); } /*** MessagingMenuMessage ***/ struct _MessagingMenuMessage { GObject parent; gchar *id; GIcon *icon; gchar *title; gchar *subtitle; gchar *body; gint64 time; gboolean draws_attention; }; typedef GObjectClass MessagingMenuMessageClass; G_DEFINE_TYPE (MessagingMenuMessage, messaging_menu_message, G_TYPE_OBJECT) // MessagingMenuMessage's properties static GParamSpec *properties[NUM_PROPERTIES]; static void messaging_menu_message_get_property(GObject *object, guint property_id, GValue *value, GParamSpec *pspec) { MessagingMenuMessage *msg = MESSAGING_MENU_MESSAGE (object); switch (property_id) { case PROP_ID: g_value_set_string (value, msg->id); break; case PROP_ICON: g_value_set_object (value, msg->icon); break; case PROP_TITLE: g_value_set_string (value, msg->title); break; case PROP_SUBTITLE: g_value_set_string (value, msg->subtitle); break; case PROP_BODY: g_value_set_string (value, msg->body); break; case PROP_TIME: g_value_set_int64 (value, msg->time); break; case PROP_DRAWS_ATTENTION: g_value_set_boolean (value, msg->draws_attention); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); } } static void messaging_menu_message_set_property(GObject *object, guint property_id, const GValue *value, GParamSpec *pspec) { qDebug() << __PRETTY_FUNCTION__; MessagingMenuMessage *msg = MESSAGING_MENU_MESSAGE (object); switch (property_id) { case PROP_ID: msg->id = g_value_dup_string (value); break; case PROP_ICON: msg->icon = (GIcon*)g_value_dup_object (value); break; case PROP_TITLE: msg->title = g_value_dup_string (value); break; case PROP_SUBTITLE: msg->subtitle = g_value_dup_string (value); break; case PROP_BODY: msg->body = g_value_dup_string (value); break; case PROP_TIME: msg->time = g_value_get_int64 (value); break; case PROP_DRAWS_ATTENTION: msg->draws_attention = g_value_get_boolean (value); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); } } static void messaging_menu_message_class_init(MessagingMenuMessageClass *klass) { GObjectClass *object_class = G_OBJECT_CLASS (klass); object_class->get_property = messaging_menu_message_get_property; object_class->set_property = messaging_menu_message_set_property; properties[PROP_ID] = g_param_spec_string ("id", "Id", "Unique id of the message", NULL, (GParamFlags)(G_PARAM_CONSTRUCT_ONLY | G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); properties[PROP_ICON] = g_param_spec_object ("icon", "Icon", "Icon of the message", G_TYPE_ICON, (GParamFlags)(G_PARAM_CONSTRUCT_ONLY | G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); properties[PROP_TITLE] = g_param_spec_string ("title", "Title", "Title of the message", NULL, (GParamFlags)(G_PARAM_CONSTRUCT_ONLY | G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); properties[PROP_SUBTITLE] = g_param_spec_string ("subtitle", "Subtitle", "Subtitle of the message", NULL, (GParamFlags)(G_PARAM_CONSTRUCT_ONLY | G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); properties[PROP_BODY] = g_param_spec_string ("body", "Body", "First lines of the body of the message", NULL, (GParamFlags)(G_PARAM_CONSTRUCT_ONLY | G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); properties[PROP_TIME] = g_param_spec_int64 ("time", "Time", "Time the message was sent, in microseconds", 0, G_MAXINT64, 0, (GParamFlags)(G_PARAM_CONSTRUCT_ONLY | G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); properties[PROP_DRAWS_ATTENTION] = g_param_spec_boolean ("draws-attention", "Draws attention", "Whether the message should draw attention", TRUE, (GParamFlags)(G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); g_object_class_install_properties (klass, NUM_PROPERTIES, properties); g_signal_new ("activate", MESSAGING_MENU_TYPE_MESSAGE, (GSignalFlags)(G_SIGNAL_RUN_FIRST | G_SIGNAL_DETAILED), 0, NULL, NULL, g_cclosure_marshal_generic, G_TYPE_NONE, 2, G_TYPE_STRING, G_TYPE_VARIANT); } static void messaging_menu_message_init(MessagingMenuMessage *self) { self->draws_attention = TRUE; } MessagingMenuMessage *messaging_menu_message_new(const gchar *id, GIcon *icon, const gchar *title, const gchar *subtitle, const gchar *body, gint64 time) { qDebug() << __PRETTY_FUNCTION__; MessagingMenuMessage *message = (MessagingMenuMessage*) g_object_new(MESSAGING_MENU_TYPE_MESSAGE, "id", id, "icon", icon, "title", title, "subtitle", subtitle, "body", body, "time", time, NULL); Q_EMIT MessagingMenuMock::instance()->messageCreated(QString(message->id), QString(g_icon_to_string(message->icon)), QString(message->title), QString(message->subtitle), QString(message->body), QDateTime::fromMSecsSinceEpoch(time / 1000)); return message; } void messaging_menu_message_add_action(MessagingMenuMessage *msg, const gchar *id, const gchar *label, const GVariantType *parameter_type, GVariant *parameter_hint) { qDebug() << __PRETTY_FUNCTION__; Q_EMIT MessagingMenuMock::instance()->actionAdded(msg->id, id, label); } void messaging_menu_app_remove_message_by_id(MessagingMenuApp *app, const gchar *id) { qDebug() << __PRETTY_FUNCTION__; Q_EMIT MessagingMenuMock::instance()->messageRemoved(app->desktopId, id); } const gchar *messaging_menu_message_get_id(MessagingMenuMessage *msg) { qDebug() << __PRETTY_FUNCTION__; return msg->id; } void messaging_menu_app_append_message(MessagingMenuApp *app, MessagingMenuMessage *msg, const gchar *source_id, gboolean notify) { qDebug() << __PRETTY_FUNCTION__; Q_EMIT MessagingMenuMock::instance()->messageAdded(QString(app->desktopId), QString(msg->id), QString(source_id), (bool)notify); } telephony-service-0.5.3/tests/indicator/messagingmenumock.h000066400000000000000000000035011455543255600242040ustar00rootroot00000000000000/* * Copyright (C) 2015 Canonical, Ltd. * * This file is part of telephony-service. * * telephony-service is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; version 3. * * telephony-service 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 . */ #ifndef MESSAGINGMENUMOCK_H #define MESSAGINGMENUMOCK_H #include class MessagingMenuMock : public QObject { Q_OBJECT public: static MessagingMenuMock *instance(); Q_SIGNALS: void appCreated(const QString &desktopId); void appRegistered(const QString &desktopId); void sourceAdded(const QString &app, const QString &id, const QString &icon, const QString &label); void messageCreated(const QString &id, const QString &icon, const QString &title, const QString &subtitle, const QString &body, const QDateTime &time); void messageAdded(const QString &app, const QString &messageId, const QString &sourceId, bool notify); void messageRemoved(const QString &app, const QString &id); void actionAdded(const QString &messageId, const QString &actionId, const QString &label); private: explicit MessagingMenuMock(QObject *parent = 0); }; #endif // MESSAGINGMENUMOCK_H telephony-service-0.5.3/tests/libtelephonyservice/000077500000000000000000000000001455543255600224235ustar00rootroot00000000000000telephony-service-0.5.3/tests/libtelephonyservice/AccountEntryFactoryTest.cpp000066400000000000000000000042161455543255600277400ustar00rootroot00000000000000/* * Copyright (C) 2015 Canonical, Ltd. * * This file is part of telephony-service. * * telephony-service is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; version 3. * * telephony-service 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 . */ #include #include #include "telepathytest.h" #include "accountentry.h" #include "accountentryfactory.h" #include "ofonoaccountentry.h" #include "telepathyhelper.h" class AccountEntryFactoryTest : public TelepathyTest { Q_OBJECT private Q_SLOTS: void initTestCase(); void testCorrectInstancesCreated(); void testNullAccount(); }; void AccountEntryFactoryTest::initTestCase() { initialize(); } void AccountEntryFactoryTest::testCorrectInstancesCreated() { Tp::AccountPtr genericTpAccount = addAccount("mock", "mock", "generic"); QVERIFY(!genericTpAccount.isNull()); AccountEntry *genericAccount = AccountEntryFactory::createEntry(genericTpAccount, this); QVERIFY(genericAccount); QCOMPARE(genericAccount->type(), AccountEntry::GenericAccount); QVERIFY(!qobject_cast(genericAccount)); Tp::AccountPtr ofonoTpAccount = addAccount("mock", "ofono", "phone account"); AccountEntry *ofonoAccount = AccountEntryFactory::createEntry(ofonoTpAccount, this); QVERIFY(ofonoAccount); QCOMPARE(ofonoAccount->type(), AccountEntry::PhoneAccount); QVERIFY(qobject_cast(ofonoAccount)); } void AccountEntryFactoryTest::testNullAccount() { AccountEntry *nullAccount = AccountEntryFactory::createEntry(Tp::AccountPtr(), this); QVERIFY(nullAccount); QVERIFY(nullAccount->accountId().isNull()); } QTEST_MAIN(AccountEntryFactoryTest) #include "AccountEntryFactoryTest.moc" telephony-service-0.5.3/tests/libtelephonyservice/AccountEntryTest.cpp000066400000000000000000000162071455543255600264130ustar00rootroot00000000000000/* * Copyright (C) 2015 Canonical, Ltd. * * This file is part of telephony-service. * * telephony-service is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; version 3. * * telephony-service 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 . */ #include #include #include "telepathytest.h" #include "accountentry.h" #include "accountentryfactory.h" #include "mockcontroller.h" class AccountEntryTest : public TelepathyTest { Q_OBJECT private Q_SLOTS: void initTestCase(); void init(); void cleanup(); void testAccountId(); void testActive(); void testDisplayName(); void testStatus(); void testStatusMessage(); void testConnected(); void testCompareIds_data(); void testCompareIds(); void testAddressableVCardFields(); private: AccountEntry *mAccount; Tp::AccountPtr mTpAccount; AccountEntry *mNullAccount; MockController *mMockController; }; void AccountEntryTest::initTestCase() { initialize(); // create a null account mNullAccount = AccountEntryFactory::createEntry(Tp::AccountPtr(), this); } void AccountEntryTest::init() { mTpAccount = addAccount("mock", "mock", "the account"); QVERIFY(!mTpAccount.isNull()); mAccount = AccountEntryFactory::createEntry(mTpAccount, this); QVERIFY(mAccount); TRY_VERIFY(mAccount->ready()); // make sure the connection is available TRY_VERIFY(mAccount->connected()); // and make sure the status and status message are the ones we expect TRY_COMPARE(mAccount->status(), QString("available")); // and create the mock controller mMockController = new MockController("mock", this); } void AccountEntryTest::cleanup() { doCleanup(); mAccount->deleteLater(); mMockController->deleteLater(); } void AccountEntryTest::testAccountId() { QCOMPARE(mAccount->accountId(), mTpAccount->uniqueIdentifier()); QVERIFY(mNullAccount->accountId().isNull()); } void AccountEntryTest::testActive() { // the mock account is enabled/connected by default, so make sure it is like that QVERIFY(mAccount->active()); // FIXME: setting the account as offline, triggers an automatic reconnection and the // test fails. In the future we might want to re-enable this and test some other way. QSignalSpy activeChangedSpy(mAccount, SIGNAL(activeChanged())); // now set the account away and see if the active flag changes correctly mMockController->SetOnline(false); TRY_VERIFY(!mAccount->active()); TRY_VERIFY(activeChangedSpy.count() > 0); // now re-enable the account and check that the entry is updated activeChangedSpy.clear(); mMockController->SetOnline(true); TRY_VERIFY(activeChangedSpy.count() > 0); QVERIFY(mAccount->active()); // check that for a null account active is false QVERIFY(!mNullAccount->active()); } void AccountEntryTest::testDisplayName() { QSignalSpy displayNameChangedSpy(mAccount, SIGNAL(displayNameChanged())); // check that the value is correct already QCOMPARE(mAccount->displayName(), mTpAccount->displayName()); // now try to set the display in the telepathy account directly and see that the entry gets updated QString newDisplayName = "some other display name"; mTpAccount->setDisplayName(newDisplayName); TRY_COMPARE(mAccount->displayName(), newDisplayName); QCOMPARE(displayNameChangedSpy.count(), 1); // and try setting the display name in the entry itself displayNameChangedSpy.clear(); newDisplayName = "changing again"; mAccount->setDisplayName(newDisplayName); TRY_COMPARE(mAccount->displayName(), newDisplayName); QCOMPARE(displayNameChangedSpy.count(), 1); QCOMPARE(mTpAccount->displayName(), newDisplayName); // check that for a null account the displayName is null QVERIFY(mNullAccount->displayName().isNull()); } void AccountEntryTest::testStatus() { QSignalSpy statusChangedSpy(mAccount, SIGNAL(statusChanged())); // check that the value is correct already QCOMPARE(mAccount->status(), mTpAccount->connection()->selfContact()->presence().status()); // and now set a new value mMockController->SetPresence("away", "away"); TRY_COMPARE(statusChangedSpy.count(), 1); QCOMPARE(mAccount->status(), QString("away")); // check that for a null account the status is null QVERIFY(mNullAccount->status().isNull()); } void AccountEntryTest::testStatusMessage() { QSignalSpy statusMessageChangedSpy(mAccount, SIGNAL(statusMessageChanged())); // check that the value is correct already TRY_COMPARE(mAccount->statusMessage(), mTpAccount->connection()->selfContact()->presence().statusMessage()); // and now set a new value QString statusMessage("I am online"); mMockController->SetPresence("available", statusMessage); TRY_COMPARE(statusMessageChangedSpy.count(), 1); QCOMPARE(mAccount->statusMessage(), statusMessage); // check that for a null account the displayName is null QVERIFY(mNullAccount->statusMessage().isNull()); } void AccountEntryTest::testConnected() { QSignalSpy connectedChangedSpy(mAccount, SIGNAL(connectedChanged())); // the mock account is enabled/connected by default, so make sure it is like that QVERIFY(mAccount->connected()); // now set the account offline and see if the active flag changes correctly mMockController->SimulateDisconnect(); TRY_VERIFY(connectedChangedSpy.count() > 0); TRY_VERIFY(!mAccount->connected()); // now re-enable the account and check that the entry is updated connectedChangedSpy.clear(); mAccount->account()->reconnect(); // because of the way the mock was implemented, sometimes this can return two connectedChanged() signals. TRY_VERIFY(connectedChangedSpy.count() > 0); TRY_VERIFY(mAccount->connected()); // check that for a null account the displayName is null QVERIFY(!mNullAccount->connected()); } void AccountEntryTest::testCompareIds_data() { QTest::addColumn("first"); QTest::addColumn("second"); QTest::addColumn("expectedResult"); QTest::newRow("identical values") << "1234567" << "1234567" << true; QTest::newRow("case difference") << "TestId" << "testid" << false; QTest::newRow("phone prefix") << "1234567" << "1231234567" << false; } void AccountEntryTest::testCompareIds() { QFETCH(QString, first); QFETCH(QString, second); QFETCH(bool, expectedResult); QCOMPARE(mAccount->compareIds(first, second), expectedResult); } void AccountEntryTest::testAddressableVCardFields() { QVERIFY(!mAccount->addressableVCardFields().isEmpty()); QCOMPARE(mAccount->addressableVCardFields(), mTpAccount->protocolInfo().addressableVCardFields()); } QTEST_MAIN(AccountEntryTest) #include "AccountEntryTest.moc" telephony-service-0.5.3/tests/libtelephonyservice/CMakeLists.txt000066400000000000000000000105171455543255600251670ustar00rootroot00000000000000set(LIBTELEPHONYSERVICE_DIR ${CMAKE_SOURCE_DIR}/libtelephonyservice) include_directories( ${CMAKE_CURRENT_BINARY_DIR} ${LIBTELEPHONYSERVICE_DIR} ${TP_QT5_INCLUDE_DIRS} ${CMAKE_SOURCE_DIR}/tests/common ${CMAKE_BINARY_DIR}/tests/common ${GSETTINGS_QT_INCLUDE_DIRS} ) add_executable(GreeterContactsTestServerExe GreeterContactsTestServer.cpp) target_link_libraries(GreeterContactsTestServerExe Qt5::Core Qt5::DBus) add_executable(ToneGeneratorMock ToneGeneratorMock.cpp) target_link_libraries(ToneGeneratorMock Qt5::Core Qt5::DBus) add_executable(IndicatorMock IndicatorMock.cpp) target_link_libraries(IndicatorMock Qt5::Core Qt5::DBus) generate_test(GreeterContactsTest USE_DBUS SOURCES GreeterContactsTest.cpp ${LIBTELEPHONYSERVICE_DIR}/greetercontacts.cpp LIBRARIES Qt5::Contacts Qt5::Core Qt5::DBus Qt5::Test ENVIRONMENT XDG_SESSION_CLASS=greeter XDG_GREETER_DATA_DIR=${CMAKE_BINARY_DIR}/Testing/Temporary TASKS --task ${CMAKE_CURRENT_BINARY_DIR}/GreeterContactsTestServerExe --task-name server --ignore-return WAIT_FOR org.freedesktop.Accounts) set_target_properties(GreeterContactsTest PROPERTIES COMPILE_DEFINITIONS "AS_BUSNAME=sessionBus;CMAKE_SOURCE_DIR=\"${CMAKE_SOURCE_DIR}\"") add_dependencies(GreeterContactsTest GreeterContactsTestServerExe) generate_test(GreeterContactsThreadTest USE_DBUS SOURCES GreeterContactsThreadTest.cpp ${LIBTELEPHONYSERVICE_DIR}/greetercontacts.cpp LIBRARIES Qt5::Contacts Qt5::Core Qt5::DBus Qt5::Test ENVIRONMENT XDG_SESSION_CLASS=greeter XDG_GREETER_DATA_DIR=${CMAKE_BINARY_DIR}/Testing/Temporary TASKS --task ${CMAKE_CURRENT_BINARY_DIR}/GreeterContactsTestServerExe --task-name server --ignore-return WAIT_FOR org.freedesktop.Accounts) set_target_properties(GreeterContactsThreadTest PROPERTIES COMPILE_DEFINITIONS "AS_BUSNAME=sessionBus;CMAKE_SOURCE_DIR=\"${CMAKE_SOURCE_DIR}\"") add_dependencies(GreeterContactsThreadTest GreeterContactsTestServerExe) generate_test(ToneGeneratorTest USE_DBUS SOURCES ToneGeneratorTest.cpp ${LIBTELEPHONYSERVICE_DIR}/tonegenerator.cpp LIBRARIES Qt5::Core Qt5::DBus Qt5::Test TASKS --task ${CMAKE_CURRENT_BINARY_DIR}/ToneGeneratorMock --task-name tone-gen --ignore-return WAIT_FOR com.Nokia.Telephony.Tones) add_dependencies(ToneGeneratorTest ToneGeneratorMock) generate_test(CallNotificationTest USE_DBUS SOURCES CallNotificationTest.cpp ${LIBTELEPHONYSERVICE_DIR}/callnotification.cpp LIBRARIES Qt5::Core Qt5::DBus Qt5::Test TASKS --task ${CMAKE_CURRENT_BINARY_DIR}/IndicatorMock --task-name indicator --ignore-return WAIT_FOR com.lomiri.TelephonyServiceIndicator) generate_test(ContactUtilsTest SOURCES ContactUtilsTest.cpp LIBRARIES Qt5::Contacts Qt5::Core Qt5::Test telephonyservice USE_UI) generate_test(PhoneUtilsTest SOURCES PhoneUtilsTest.cpp LIBRARIES telephonyservice Qt5::Core Qt5::Test USE_UI) generate_test(ProtocolTest SOURCES ProtocolTest.cpp ${LIBTELEPHONYSERVICE_DIR}/protocol.cpp LIBRARIES Qt5::Core Qt5::Test Qt5::DBus ENVIRONMENT TELEPHONY_SERVICE_PROTOCOLS_DIR=${CMAKE_CURRENT_SOURCE_DIR}/testProtocols) generate_test(ProtocolManagerTest SOURCES ProtocolManagerTest.cpp LIBRARIES Qt5::Core Qt5::Qml Qt5::Test Qt5::DBus Qt5::Contacts telepathy-qt5 telephonyservice ENVIRONMENT TELEPHONY_SERVICE_PROTOCOLS_DIR=${CMAKE_CURRENT_SOURCE_DIR}/testProtocols) generate_telepathy_test(AccountEntryFactoryTest SOURCES AccountEntryFactoryTest.cpp) generate_telepathy_test(AccountEntryTest SOURCES AccountEntryTest.cpp) generate_telepathy_test(CallEntryTest SOURCES CallEntryTest.cpp) generate_telepathy_test(ChatManagerTest SOURCES ChatManagerTest.cpp) generate_telepathy_test(ChatEntryTest SOURCES ChatEntryTest.cpp) generate_telepathy_test(OfonoAccountEntryTest SOURCES OfonoAccountEntryTest.cpp) generate_telepathy_test(TelepathyHelperSetupTest SOURCES TelepathyHelperSetupTest.cpp) # FIXME: investigate why this test is failing on arm64 / aarch64 if (NOT CMAKE_SYSTEM_PROCESSOR MATCHES "aarch64.*|AARCH64.*") generate_telepathy_test(TelepathyHelperTest SOURCES TelepathyHelperTest.cpp) endif() generate_telepathy_test(USSDManagerTest SOURCES USSDManagerTest.cpp) telephony-service-0.5.3/tests/libtelephonyservice/CallEntryTest.cpp000066400000000000000000000101171455543255600256640ustar00rootroot00000000000000/* * Copyright (C) 2015 Canonical, Ltd. * * This file is part of telephony-service. * * telephony-service is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; version 3. * * telephony-service 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 . */ #include #include #include "telepathytest.h" #include "callentry.h" #include "callmanager.h" #include "telepathyhelper.h" #include "mockcontroller.h" #include "ofonoaccountentry.h" #include "accountentryfactory.h" Q_DECLARE_METATYPE(AccountEntry*) class CallEntryTest : public TelepathyTest { Q_OBJECT private Q_SLOTS: void initTestCase(); void init(); void cleanup(); void testIsVoicemail_data(); void testIsVoicemail(); protected Q_SLOTS: void onCallChannelAvailable(const Tp::CallChannelPtr &channel); private: Tp::AccountPtr mTpAccount; OfonoAccountEntry *mAccount; Tp::CallChannelPtr mCallChannel; MockController *mMockController; }; void CallEntryTest::initTestCase() { qRegisterMetaType(); initialize(); TelepathyHelper::instance()->registerChannelObserver(); connect(TelepathyHelper::instance()->channelObserver(), SIGNAL(callChannelAvailable(Tp::CallChannelPtr)), SLOT(onCallChannelAvailable(Tp::CallChannelPtr))); } void CallEntryTest::init() { QSignalSpy accountSpy(TelepathyHelper::instance(), SIGNAL(accountAdded(AccountEntry*))); mTpAccount = addAccount("mock", "ofono", "the account"); QVERIFY(!mTpAccount.isNull()); TRY_COMPARE(accountSpy.count(), 1); mAccount = qobject_cast(accountSpy.first().first().value()); QVERIFY(mAccount); TRY_VERIFY(mAccount->ready()); TRY_COMPARE(mAccount->status(), QString("available")); // and create the mock controller mMockController = new MockController("ofono", this); } void CallEntryTest::cleanup() { doCleanup(); mMockController->deleteLater(); mAccount->deleteLater(); mCallChannel = Tp::CallChannelPtr(); // wait until all the calls are gone before the next test TRY_VERIFY(!CallManager::instance()->hasCalls()); } void CallEntryTest::testIsVoicemail_data() { QTest::addColumn("voicemailNumber"); QTest::addColumn("callNumber"); QTest::addColumn("isVoicemail"); QTest::newRow("calling voicemail") << "*1234" << "*1234" << true; QTest::newRow("calling other number") << "*1234" << "5555555" << false; } void CallEntryTest::testIsVoicemail() { QFETCH(QString, voicemailNumber); QFETCH(QString, callNumber); QFETCH(bool, isVoicemail); mMockController->SetVoicemailNumber(voicemailNumber); TRY_COMPARE(mAccount->voicemailNumber(), voicemailNumber); // now place a call to a number that is not the voicemail number QVariantMap properties; properties["Caller"] = callNumber; properties["State"] = "incoming"; mMockController->placeCall(properties); TRY_VERIFY(!mCallChannel.isNull()); QCOMPARE(mCallChannel->targetContact()->id(), callNumber); CallEntry *callEntry = new CallEntry(mCallChannel); QCOMPARE(callEntry->isVoicemail(), isVoicemail); TRY_VERIFY(CallManager::instance()->hasCalls()); callEntry->endCall(); callEntry->deleteLater(); } void CallEntryTest::onCallChannelAvailable(const Tp::CallChannelPtr &channel) { channel->accept(); connect(channel->becomeReady(Tp::Features() << Tp::CallChannel::FeatureCore << Tp::CallChannel::FeatureCallState), &Tp::PendingOperation::finished, [this, channel] { mCallChannel = channel; }); } QTEST_MAIN(CallEntryTest) #include "CallEntryTest.moc" telephony-service-0.5.3/tests/libtelephonyservice/CallNotificationTest.cpp000066400000000000000000000042751455543255600272210ustar00rootroot00000000000000/* * Copyright (C) 2015 Canonical, Ltd. * * This file is part of telephony-service. * * telephony-service is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; version 3. * * telephony-service 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 . */ #include #include #include #include "callnotification.h" #define INDICATOR_DBUS_SERVICE_NAME "com.lomiri.TelephonyServiceIndicator" #define INDICATOR_DBUS_OBJ_PATH "/com/lomiri/TelephonyServiceIndicator" class CallNotificationTest : public QObject { Q_OBJECT private Q_SLOTS: void initTestCase(); void cleanupTestCase(); void testClearCallNotification(); private: QDBusInterface *mIndicatorInterface; }; void CallNotificationTest::initTestCase() { mIndicatorInterface = new QDBusInterface(INDICATOR_DBUS_SERVICE_NAME, INDICATOR_DBUS_OBJ_PATH, INDICATOR_DBUS_SERVICE_NAME, QDBusConnection::sessionBus(), this); } void CallNotificationTest::cleanupTestCase() { mIndicatorInterface->deleteLater(); } void CallNotificationTest::testClearCallNotification() { QSignalSpy clearNotificationSpy(mIndicatorInterface, SIGNAL(ClearCallNotificationRequested(QString, QString))); QString targetId("theTargetId"); QString accountId("theAccountId"); CallNotification::instance()->clearCallNotification(targetId, accountId); QTRY_COMPARE(clearNotificationSpy.count(), 1); QCOMPARE(clearNotificationSpy.first()[0].toString(), targetId); QCOMPARE(clearNotificationSpy.first()[1].toString(), accountId); } QTEST_MAIN(CallNotificationTest) #include "CallNotificationTest.moc" telephony-service-0.5.3/tests/libtelephonyservice/ChatEntryTest.cpp000066400000000000000000000133751455543255600257010ustar00rootroot00000000000000/* * Copyright (C) 2013-2016 Canonical, Ltd. * * This file is part of telephony-service. * * telephony-service is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; version 3. * * telephony-service 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 . */ #include #include #include "telepathytest.h" #include "accountentry.h" #include "chatmanager.h" #include "telepathyhelper.h" #include "mockcontroller.h" class ChatEntryTest : public TelepathyTest { Q_OBJECT private Q_SLOTS: void initTestCase(); void init(); void cleanup(); void testContactChatState_data(); void testContactChatState(); private: Tp::AccountPtr mGenericTpAccount; MockController *mGenericMockController; Tp::AccountPtr mMultimediaTpAccount; MockController *mMultimediaMockController; }; void ChatEntryTest::initTestCase() { initialize(); TelepathyHelper::instance()->registerChannelObserver(); // just give telepathy some time to register the observer QTest::qWait(1000); } void ChatEntryTest::init() { // add two accounts mGenericTpAccount = addAccount("mock", "mock", "the generic account"); QTRY_VERIFY(!mGenericTpAccount->connection().isNull()); mMultimediaTpAccount = addAccount("mock", "multimedia", "the multimedia account"); QTRY_VERIFY(!mMultimediaTpAccount->connection().isNull()); // and create the mock controller mGenericMockController = new MockController("mock", this); // and create the mock controller mMultimediaMockController = new MockController("multimedia", this); } void ChatEntryTest::cleanup() { // the accounts are removed in the parent class. doCleanup(); mGenericMockController->deleteLater(); mMultimediaMockController->deleteLater(); } void ChatEntryTest::testContactChatState_data() { QTest::addColumn("accountId"); QTest::addColumn("participants"); QTest::newRow("chat state on generic account") << QString("mock/mock/account0") << (QStringList() << "user@domain.com"); QTest::newRow("group chat state on generic account") << QString("mock/mock/account0") << (QStringList() << "user@domain.com" << "user2@domain.com"); QTest::newRow("chat state on multimedia account") << QString("mock/multimedia/account0") << (QStringList() << "+1234567"); QTest::newRow("group state on multimedia account") << QString("mock/multimedia/account0") << (QStringList() << "+1234567" << "+111111"); } void ChatEntryTest::testContactChatState() { QFETCH(QString, accountId); QFETCH(QStringList, participants); // FIXME: this test needs to be refactored to continue working. We have to explicitly create the chat entry // and request a channel so that chat states are reported. /* MockController *mockController = accountId.startsWith("mock/mock") ? mGenericMockController : mMultimediaMockController; QSignalSpy chatEntryCreatedSpy(ChatManager::instance(), SIGNAL(chatEntryCreated(QString, QStringList,ChatEntry *))); QVariantMap properties; properties["participantIds"] = participants; ChatEntry *entry = ChatManager::instance()->chatEntryForProperties(accountId, properties, true); QVERIFY(entry == NULL); QTRY_COMPARE(chatEntryCreatedSpy.count(), 1); entry = ChatManager::instance()->chatEntryForProperties(accountId, properties, false); QVERIFY(entry != NULL); QList arguments = chatEntryCreatedSpy.takeFirst(); QCOMPARE(accountId, arguments.at(0).toString()); QCOMPARE(participants.toSet(), arguments.at(1).toStringList().toSet()); QCOMPARE(entry, arguments.at(2).value()); QQmlListProperty chatStates = entry->chatStates(); QCOMPARE(entry->chatStatesCount(&chatStates), participants.count()); // change state of contact 1 ContactChatState *contactChatState1 = entry->chatStatesAt(&chatStates, 0); QSignalSpy chatStateChangedSpy1(contactChatState1, SIGNAL(stateChanged())); mockController->ChangeChatState(participants, contactChatState1->contactId(), ChatEntry::ChannelChatStateComposing); QTRY_COMPARE(chatStateChangedSpy1.count(), 1); QCOMPARE(contactChatState1->state(), (int)ChatEntry::ChannelChatStateComposing); chatStateChangedSpy1.clear(); mockController->ChangeChatState(participants, contactChatState1->contactId(), ChatEntry::ChannelChatStatePaused); QTRY_COMPARE(chatStateChangedSpy1.count(), 1); QCOMPARE(entry->chatStatesAt(&chatStates, 0)->state(), (int)ChatEntry::ChannelChatStatePaused); if (participants.count() > 1) { // change state of contact 2 ContactChatState *contactChatState2 = entry->chatStatesAt(&chatStates, 1); QSignalSpy chatStateChangedSpy2(contactChatState2, SIGNAL(stateChanged())); mockController->ChangeChatState(participants, contactChatState2->contactId(), ChatEntry::ChannelChatStateComposing); QTRY_COMPARE(chatStateChangedSpy2.count(), 1); QCOMPARE(contactChatState2->state(), (int)ChatEntry::ChannelChatStateComposing); chatStateChangedSpy2.clear(); mockController->ChangeChatState(participants, contactChatState2->contactId(), ChatEntry::ChannelChatStatePaused); QTRY_COMPARE(chatStateChangedSpy2.count(), 1); QCOMPARE(contactChatState2->state(), (int)ChatEntry::ChannelChatStatePaused); } */ } QTEST_MAIN(ChatEntryTest) #include "ChatEntryTest.moc" telephony-service-0.5.3/tests/libtelephonyservice/ChatManagerTest.cpp000066400000000000000000000225431455543255600261470ustar00rootroot00000000000000/* * Copyright (C) 2013-2016 Canonical, Ltd. * * This file is part of telephony-service. * * telephony-service is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; version 3. * * telephony-service 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 . */ #include #include #include "telepathytest.h" #include "accountentry.h" #include "chatmanager.h" #include "telepathyhelper.h" #include "mockcontroller.h" Q_DECLARE_METATYPE(Tp::TextChannelPtr) class ChatManagerTest : public TelepathyTest { Q_OBJECT private Q_SLOTS: void initTestCase(); void init(); void cleanup(); void testSendMessage_data(); void testSendMessage(); void testSendMessageWithAttachments(); void testSendMessageWithAttachmentsSplitted(); void testAcknowledgeMessages(); private: Tp::AccountPtr mGenericTpAccount; Tp::AccountPtr mPhoneTpAccount; MockController *mGenericMockController; MockController *mPhoneMockController; }; void ChatManagerTest::initTestCase() { initialize(); TelepathyHelper::instance()->registerChannelObserver(); qRegisterMetaType(); // just give telepathy some time to register the observer QTest::qWait(1000); } void ChatManagerTest::init() { // add two accounts mGenericTpAccount = addAccount("mock", "mock", "the generic account"); QVERIFY(!mGenericTpAccount.isNull()); mPhoneTpAccount = addAccount("mock", "ofono", "the phone account"); QVERIFY(!mPhoneTpAccount.isNull()); // and create the mock controller mGenericMockController = new MockController("mock", this); mPhoneMockController = new MockController("ofono", this); } void ChatManagerTest::cleanup() { // the accounts are removed in the parent class. doCleanup(); mGenericMockController->deleteLater(); mPhoneMockController->deleteLater(); } void ChatManagerTest::testSendMessage_data() { QTest::addColumn("recipients"); QTest::addColumn("message"); QTest::addColumn("accountId"); QTest::newRow("message via the generic account") << (QStringList() << "recipient1") << QString("Hello world") << QString("mock/mock/account0"); QTest::newRow("message via the phone account") << (QStringList() << "recipient2") << QString("Hello Phone World") << QString("mock/ofono/account0"); QTest::newRow("multiple recipients") << (QStringList() << "123" << "456" << "789") << QString("Hi friends!") << QString("mock/mock/account0"); } void ChatManagerTest::testSendMessage() { QFETCH(QStringList, recipients); QFETCH(QString, message); QFETCH(QString, accountId); // just to make it easier, sort the recipients qSort(recipients); MockController *controller = accountId.startsWith("mock/mock") ? mGenericMockController : mPhoneMockController; QSignalSpy controllerMessageSentSpy(controller, SIGNAL(MessageSent(QString,QVariantList,QVariantMap))); QVariantMap properties; properties["participantIds"] = recipients; QString jobObjectPath = ChatManager::instance()->sendMessage(accountId, message, QVariantMap(), properties); QDBusInterface iface(TelepathyHelper::instance()->handlerInterface()->service(), jobObjectPath); QSignalSpy finishedSpy(&iface, SIGNAL(finished())); TRY_COMPARE(controllerMessageSentSpy.count(), 1); QString messageText = controllerMessageSentSpy.first()[0].toString(); QVariantMap messageProperties = controllerMessageSentSpy.first()[2].toMap(); QStringList messageRecipients = messageProperties["Recipients"].toStringList(); qSort(messageRecipients); QCOMPARE(messageText, message); QCOMPARE(messageRecipients, recipients); // the rest of the properties are tested in the MessageSendingJob tests. TRY_COMPARE(finishedSpy.count(), 1); } void ChatManagerTest::testAcknowledgeMessages() { QSignalSpy textChannelAvailableSpy(ChatManager::instance(), SIGNAL(textChannelAvailable(Tp::TextChannelPtr))); QVariantMap properties; properties["Sender"] = "12345"; properties["Recipients"] = (QStringList() << "12345"); QStringList messages; messages << "Hi there" << "How are you" << "Always look on the bright side of life"; Q_FOREACH(const QString &message, messages) { mGenericMockController->PlaceIncomingMessage(message, properties); // the wait shouldn't be needed, but just in case QTest::qWait(50); } TRY_COMPARE(textChannelAvailableSpy.count(), 1); Tp::TextChannelPtr channel = textChannelAvailableSpy.first().first().value(); QVERIFY(!channel.isNull()); TRY_COMPARE(channel->messageQueue().count(), messages.count()); QStringList messageIds; for (int i = 0; i < messages.count(); ++i) { messageIds << channel->messageQueue()[i].messageToken(); } QSignalSpy messageReadSpy(mGenericMockController, SIGNAL(MessageRead(QString))); QVariantMap ackProperties; ackProperties["accountId"] = "mock/mock/account0"; ackProperties["participantIds"] = properties["Recipients"].toStringList(); Q_FOREACH(const QString &messageId, messageIds) { ackProperties["messageId"] = messageId; ChatManager::instance()->acknowledgeMessage(ackProperties); } TRY_COMPARE(messageReadSpy.count(), messageIds.count()); QStringList receivedIds; for (int i = 0; i < messageReadSpy.count(); ++i) { receivedIds << messageReadSpy[i][0].toString(); } qSort(receivedIds); qSort(messageIds); QCOMPARE(receivedIds, messageIds); } void ChatManagerTest::testSendMessageWithAttachments() { QStringList recipients = (QStringList() << "1234567"); QString message("Hello Phone Attachments World"); QString accountId("mock/ofono/account0"); MockController *controller = mPhoneMockController; QSignalSpy controllerMessageSentSpy(controller, SIGNAL(MessageSent(QString,QVariantList,QVariantMap))); QVariantList attachmentList; QVariantList attachment; attachment << "id" << "content/type" << QString("%1/%2").arg(QString(qgetenv("TEST_DATA_DIR"))).arg("dialer-app.png"); attachmentList << QVariant::fromValue(attachment); QVariant attachments = QVariant::fromValue(attachmentList); QVariantMap properties; properties["participantIds"] = recipients; ChatManager::instance()->sendMessage(accountId, message, attachments, properties); TRY_COMPARE(controllerMessageSentSpy.count(), 1); QString messageText = controllerMessageSentSpy.first()[0].toString(); QVariantList messageAttachments = controllerMessageSentSpy.first()[1].toList(); QVariantMap messageProperties = controllerMessageSentSpy.first()[2].toMap(); QStringList messageRecipients = messageProperties["Recipients"].toStringList(); qSort(messageRecipients); QCOMPARE(messageText, message); QCOMPARE(messageRecipients, recipients); QCOMPARE(messageAttachments.count(), attachmentList.count()); } void ChatManagerTest::testSendMessageWithAttachmentsSplitted() { // messages sent on accounts other than phone are splitted, so make sure that happens QStringList recipients = (QStringList() << "theattachmentrecipient"); QString message("Hello Attachments World"); QString accountId("mock/mock/account0"); MockController *controller = mGenericMockController; QSignalSpy controllerMessageSentSpy(controller, SIGNAL(MessageSent(QString,QVariantList,QVariantMap))); QVariantList attachmentList; QVariantList attachment; attachment << "id" << "content/type" << QString("%1/%2").arg(QString(qgetenv("TEST_DATA_DIR"))).arg("dialer-app.png"); attachmentList << QVariant::fromValue(attachment); QVariant attachments = QVariant::fromValue(attachmentList); QVariantMap properties; properties["participantIds"] = recipients; ChatManager::instance()->sendMessage(accountId, message, attachments, properties); TRY_COMPARE(controllerMessageSentSpy.count(), attachmentList.count() + 1); QString messageText; int attachmentCount = 0; // as the message is splitted, we have to go through all the received messages to find the // text and attachments for (int i = 0; i < controllerMessageSentSpy.count(); ++i) { QList args = controllerMessageSentSpy[i]; // validate the recipients on all messages QVariantMap messageProperties = args[2].toMap(); QStringList messageRecipients = messageProperties["Recipients"].toStringList(); qSort(messageRecipients); QCOMPARE(messageRecipients, recipients); QString text = args[0].toString(); if (!text.isEmpty()) { messageText = text; } else { QVariantList attachments = args[1].toList(); // each message should contain no more than one attachment QCOMPARE(attachments.count(), 1); attachmentCount += 1; } } QCOMPARE(messageText, message); QCOMPARE(attachmentCount, attachmentList.count()); } QTEST_MAIN(ChatManagerTest) #include "ChatManagerTest.moc" telephony-service-0.5.3/tests/libtelephonyservice/ContactUtilsTest.cpp000066400000000000000000000041011455543255600263770ustar00rootroot00000000000000/* * Copyright (C) 2013 Canonical, Ltd. * * This file is part of telephony-service. * * telephony-service is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; version 3. * * telephony-service 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 . */ #include #include #include "contactutils.h" #include QTCONTACTS_USE_NAMESPACE class ContactUtilsTest : public QObject { Q_OBJECT private Q_SLOTS: void testFormatContactName_data(); void testFormatContactName(); void testSharedManagerCreation(); }; void ContactUtilsTest::testFormatContactName_data() { QTest::addColumn("firstName"); QTest::addColumn("lastName"); QTest::addColumn("expectedResult"); QTest::newRow("full name") << "First" << "Last" << "First Last"; QTest::newRow("only first name") << "First" << "" << "First"; QTest::newRow("only last name") << "" << "Last" << "Last"; } void ContactUtilsTest::testFormatContactName() { QFETCH(QString, firstName); QFETCH(QString, lastName); QFETCH(QString, expectedResult); // create the contact QContact contact; QContactName contactName; contactName.setFirstName(firstName); contactName.setLastName(lastName); contact.saveDetail(&contactName); QString result = ContactUtils::formatContactName(contact); QCOMPARE(result, expectedResult); } void ContactUtilsTest::testSharedManagerCreation() { QContactManager *manager = ContactUtils::sharedManager("memory"); QVERIFY(manager); QCOMPARE(manager->managerName(), QString("memory")); } QTEST_MAIN(ContactUtilsTest) #include "ContactUtilsTest.moc" telephony-service-0.5.3/tests/libtelephonyservice/GreeterContactsTest.cpp000066400000000000000000000236641455543255600270760ustar00rootroot00000000000000/* * Copyright (C) 2013-2015 Canonical, Ltd. * * This file is part of telephony-service. * * telephony-service is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; version 3. * * telephony-service 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 . */ #include "greetercontacts.h" #include #include #include #include #include #include #include #include #include #include #include #include #include Q_DECLARE_METATYPE(QtContacts::QContact) // for QVariant's benefit QTCONTACTS_USE_NAMESPACE class GreeterContactsWrapper : public GreeterContacts { Q_OBJECT public: GreeterContactsWrapper() : GreeterContacts() {} }; class GreeterContactsTest : public QObject { Q_OBJECT public: GreeterContactsTest(); public Q_SLOTS: void setFilter(); private Q_SLOTS: void initTestCase(); void cleanup(); void testContactToMap(); void testMapToContact(); void testInitialValues(); void testSignalOnFilter(); void testSignalOnEntry(); void testSignalOnEntryInvalidated(); void testSignalOnContacts(); void testSignalOnContactsInvalidated(); void testEmitContact(); void testGreeterIsActive(); private: void waitForUpdatedSignal(bool convertedPath = false); void makeGreeterContacts(); void waitForInitialQuery(); QContact makeTestContact(bool convertedPath = false); QVariantMap makeTestMap(); void setActiveEntry(bool currentUser); void setCurrentContact(const QVariantMap &map); void setUseInvalidated(const QString &path, const QString &interface, bool useInvalidated); void setGreeterActive(bool active); QString mUserPath; GreeterContacts *mGreeterContacts; QSignalSpy *mSpy; }; GreeterContactsTest::GreeterContactsTest() : QObject() { mUserPath = "/org/freedesktop/Accounts/User" + QString::number(getuid()); } void GreeterContactsTest::initTestCase() { mGreeterContacts = NULL; mSpy = NULL; qRegisterMetaType(); } void GreeterContactsTest::cleanup() { if (mSpy) { delete mSpy; mSpy = NULL; } if (mGreeterContacts) { delete mGreeterContacts; mGreeterContacts = NULL; } setActiveEntry(false); setCurrentContact(QVariantMap()); setUseInvalidated("/com/lomiri/LomiriGreeter/list", "com.lomiri.LomiriGreeter.List", false); setUseInvalidated(mUserPath, "com.lomiri.TelephonyServiceApprover", false); } void GreeterContactsTest::testContactToMap() { QVariantMap map = GreeterContacts::contactToMap(makeTestContact()); QVariantMap expectedMap = makeTestMap(); QCOMPARE(map, expectedMap); } void GreeterContactsTest::testMapToContact() { QContact contact = GreeterContacts::mapToContact(makeTestMap()); QContact expectedContact = makeTestContact(); QCOMPARE(contact, expectedContact); } void GreeterContactsTest::testInitialValues() { setActiveEntry(true); setCurrentContact(makeTestMap()); makeGreeterContacts(); setFilter(); waitForUpdatedSignal(); } void GreeterContactsTest::testSignalOnFilter() { setActiveEntry(true); setCurrentContact(makeTestMap()); makeGreeterContacts(); waitForInitialQuery(); // setFilter might immediately send the signal, so wait until we can start the spy QTimer::singleShot(0, this, SLOT(setFilter())); waitForUpdatedSignal(); } void GreeterContactsTest::testSignalOnEntry() { setCurrentContact(makeTestMap()); makeGreeterContacts(); setFilter(); waitForInitialQuery(); setActiveEntry(true); waitForUpdatedSignal(); } void GreeterContactsTest::testSignalOnEntryInvalidated() { setCurrentContact(makeTestMap()); makeGreeterContacts(); setFilter(); waitForInitialQuery(); setUseInvalidated("/com/lomiri/LomiriGreeter/list", "com.lomiri.LomiriGreeter.List", true); setActiveEntry(true); waitForUpdatedSignal(); } void GreeterContactsTest::testSignalOnContacts() { setActiveEntry(true); makeGreeterContacts(); setFilter(); waitForInitialQuery(); setCurrentContact(makeTestMap()); waitForUpdatedSignal(); } void GreeterContactsTest::testSignalOnContactsInvalidated() { setActiveEntry(true); makeGreeterContacts(); setFilter(); waitForInitialQuery(); setUseInvalidated(mUserPath, "com.lomiri.TelephonyServiceApprover", true); setCurrentContact(makeTestMap()); waitForUpdatedSignal(); } void GreeterContactsTest::testEmitContact() { setActiveEntry(true); makeGreeterContacts(); setFilter(); waitForInitialQuery(); // this next line acts like setCurrentContact() because uid is set to 12345 GreeterContacts::emitContact(makeTestContact()); waitForUpdatedSignal(true); } void GreeterContactsTest::testGreeterIsActive() { makeGreeterContacts(); // check that by default it is false QCOMPARE(mGreeterContacts->greeterActive(), false); QSignalSpy spy(mGreeterContacts, SIGNAL(greeterActiveChanged())); // now set it to true setGreeterActive(true); QTRY_COMPARE(spy.count(), 1); QCOMPARE(mGreeterContacts->greeterActive(), true); } QVariantMap GreeterContactsTest::makeTestMap() { QVariantMap map; map.insert("DisplayLabel", QVariant("")); map.insert("FirstName", QVariant("First")); map.insert("Image", QVariant(CMAKE_SOURCE_DIR "/icons/hicolor/48x48/apps/telephony-service-call.png")); map.insert("LastName", QVariant("Last")); map.insert("MiddleName", QVariant("Middle")); map.insert("PhoneNumber", QVariant("555")); return map; } QContact GreeterContactsTest::makeTestContact(bool convertedPath) { // This is the same contact that the test server will give out. QContact contact; QContactAvatar avatarDetail; QString imagePath; if (convertedPath) { imagePath = qgetenv("XDG_GREETER_DATA_DIR") + "/telephony-service/contact-image"; } else { imagePath = CMAKE_SOURCE_DIR "/icons/hicolor/48x48/apps/telephony-service-call.png"; } avatarDetail.setValue(QContactAvatar::FieldImageUrl, QUrl::fromLocalFile(imagePath)); contact.saveDetail(&avatarDetail); QContactDisplayLabel label; label.setLabel(""); contact.saveDetail(&label); QContactName nameDetail; nameDetail.setValue(QContactName::FieldFirstName, "First"); nameDetail.setValue(QContactName::FieldLastName, "Last"); nameDetail.setValue(QContactName::FieldMiddleName, "Middle"); contact.saveDetail(&nameDetail); QContactPhoneNumber numberDetail; numberDetail.setValue(QContactPhoneNumber::FieldNumber, "555"); contact.saveDetail(&numberDetail); return contact; } void GreeterContactsTest::setFilter() { mGreeterContacts->setContactFilter(QContactPhoneNumber::match("555")); } void GreeterContactsTest::setActiveEntry(bool currentUser) { QString entry = ""; if (currentUser) entry = getpwuid(getuid())->pw_name; QDBusInterface iface("com.lomiri.LomiriGreeter", "/com/lomiri/LomiriGreeter/list", "org.freedesktop.DBus.Properties", QDBusConnection::sessionBus()); QDBusReply reply = iface.call("Set", "com.lomiri.LomiriGreeter.List", "ActiveEntry", QVariant::fromValue(QDBusVariant(QVariant(entry)))); QVERIFY(reply.isValid()); } void GreeterContactsTest::setCurrentContact(const QVariantMap &map) { QDBusInterface iface("org.freedesktop.Accounts", mUserPath, "org.freedesktop.DBus.Properties", QDBusConnection::sessionBus()); QDBusReply reply = iface.call("Set", "com.lomiri.TelephonyServiceApprover", "CurrentContact", QVariant::fromValue(QDBusVariant(QVariant(map)))); QVERIFY(reply.isValid()); } void GreeterContactsTest::waitForInitialQuery() { QDBusInterface iface("org.freedesktop.Accounts", mUserPath, "com.lomiri.TelephonyServiceApprover", QDBusConnection::sessionBus()); QSignalSpy spy(&iface, SIGNAL(InitialQueriesDone())); QTRY_COMPARE(spy.count(), 1); } void GreeterContactsTest::makeGreeterContacts() { mGreeterContacts = new GreeterContactsWrapper(); mSpy = new QSignalSpy(mGreeterContacts, SIGNAL(contactUpdated(QtContacts::QContact))); } void GreeterContactsTest::waitForUpdatedSignal(bool convertedPath) { QTRY_COMPARE(mSpy->count(), 1); QList arguments = mSpy->takeFirst(); QContact expectedContact = makeTestContact(convertedPath); QCOMPARE(arguments.at(0).value(), expectedContact); } void GreeterContactsTest::setUseInvalidated(const QString &path, const QString &interface, bool useInvalidated) { QDBusInterface iface("org.freedesktop.Accounts", path, interface, QDBusConnection::sessionBus()); QDBusReply reply = iface.call("SetUseInvalidated", useInvalidated); QVERIFY(reply.isValid()); } void GreeterContactsTest::setGreeterActive(bool active) { QDBusInterface iface("com.lomiri.LomiriGreeter", "/com/lomiri/LomiriGreeter", "org.freedesktop.DBus.Properties", QDBusConnection::sessionBus()); QDBusReply reply = iface.call("Set", "com.lomiri.LomiriGreeter", "IsActive", QVariant::fromValue(QDBusVariant(QVariant(active)))); QVERIFY(reply.isValid()); } QTEST_MAIN(GreeterContactsTest) #include "GreeterContactsTest.moc" telephony-service-0.5.3/tests/libtelephonyservice/GreeterContactsTestServer.cpp000066400000000000000000000162031455543255600302540ustar00rootroot00000000000000/* * Copyright (C) 2013 Canonical, Ltd. * * This file is part of telephony-service. * * telephony-service is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; version 3. * * telephony-service 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 . */ #include #include #include #include #include #include #include #include bool listGetCalled = false; bool userGetCalled = false; QString userPath = "/org/freedesktop/Accounts/User" + QString::number(getuid()); class AccountsInterface : public QObject { Q_OBJECT Q_CLASSINFO("D-Bus Interface", "org.freedesktop.Accounts") public: AccountsInterface(QObject *parent = 0); Q_SCRIPTABLE QList ListCachedUsers() const; }; class TelepathyInterface : public QObject { Q_OBJECT Q_CLASSINFO("D-Bus Interface", "com.lomiri.TelephonyServiceApprover") Q_PROPERTY(QVariantMap CurrentContact READ CurrentContact WRITE SetCurrentContact) Q_SIGNALS: Q_SCRIPTABLE void InitialQueriesDone(); // Only for testing public: TelepathyInterface(QObject *parent = 0); QVariantMap CurrentContact(); void SetCurrentContact(const QVariantMap &map); Q_SCRIPTABLE void SetUseInvalidated(bool useInvalidated); // only for testing bool mGetCalled; // only for testing private: QVariantMap mCurrentContact; bool mUseInvalidated; }; class ListInterface : public QObject { Q_OBJECT Q_CLASSINFO("D-Bus Interface", "com.lomiri.LomiriGreeter.List") Q_PROPERTY(QString ActiveEntry READ ActiveEntry WRITE SetActiveEntry) public: ListInterface(TelepathyInterface *telepathyInterface, QObject *parent = 0); QString ActiveEntry() const; void SetActiveEntry(const QString &entry); Q_SCRIPTABLE void SetUseInvalidated(bool useInvalidated); // only for testing bool mGetCalled; // only for testing private: QString mActiveEntry; TelepathyInterface *mTelepathyInterface; bool mUseInvalidated; }; class GreeterInterface : public QObject { Q_OBJECT Q_CLASSINFO("D-Bus Interface", "com.lomiri.LomiriGreeter") Q_PROPERTY(bool IsActive READ IsActive WRITE SetIsActive) public: GreeterInterface(QObject *parent = 0); bool IsActive() const; void SetIsActive(bool active); private: bool mIsActive; }; AccountsInterface::AccountsInterface(QObject *parent) : QObject(parent) { } QList AccountsInterface::ListCachedUsers() const { return QList() << QDBusObjectPath(userPath); } TelepathyInterface::TelepathyInterface(QObject *parent) : QObject(parent), mCurrentContact(), mUseInvalidated(false) { } QVariantMap TelepathyInterface::CurrentContact() { userGetCalled = true; if (userGetCalled && listGetCalled) Q_EMIT InitialQueriesDone(); return mCurrentContact; } void TelepathyInterface::SetCurrentContact(const QVariantMap &map) { mCurrentContact = map; // Now send out a manual changed signal, since Qt won't do it for us. QDBusMessage message; message = QDBusMessage::createSignal(userPath, "org.freedesktop.DBus.Properties", "PropertiesChanged"); message << "com.lomiri.TelephonyServiceApprover"; if (mUseInvalidated) { QStringList invalidatedProps; invalidatedProps << "CurrentContact"; message << QVariantMap(); message << invalidatedProps; } else { QVariantMap changedProps; changedProps.insert("CurrentContact", QVariant(map)); message << changedProps; message << QStringList(); } QDBusConnection::sessionBus().send(message); } void TelepathyInterface::SetUseInvalidated(bool useInvalidated) { mUseInvalidated = useInvalidated; } ListInterface::ListInterface(TelepathyInterface *telepathyInterface, QObject *parent) : QObject(parent), mActiveEntry(), mTelepathyInterface(telepathyInterface), mUseInvalidated(false) { } QString ListInterface::ActiveEntry() const { listGetCalled = true; if (userGetCalled && listGetCalled && mTelepathyInterface) Q_EMIT mTelepathyInterface->InitialQueriesDone(); return mActiveEntry; } void ListInterface::SetActiveEntry(const QString &entry) { mActiveEntry = entry; // Now send out a manual changed signal, since Qt won't do it for us. QDBusMessage message; message = QDBusMessage::createSignal("/com/lomiri/LomiriGreeter/list", "org.freedesktop.DBus.Properties", "PropertiesChanged"); message << "com.lomiri.LomiriGreeter.List"; if (mUseInvalidated) { QStringList invalidatedProps; invalidatedProps << "ActiveEntry"; message << QVariantMap(); message << invalidatedProps; } else { QVariantMap changedProps; changedProps.insert("ActiveEntry", QVariant(entry)); message << changedProps; message << QStringList(); } QDBusConnection::sessionBus().send(message); } void ListInterface::SetUseInvalidated(bool useInvalidated) { mUseInvalidated = useInvalidated; } int main(int argc, char *argv[]) { QCoreApplication a(argc, argv); QDBusConnection connection = QDBusConnection::sessionBus(); AccountsInterface accounts; connection.registerObject("/org/freedesktop/Accounts", &accounts, QDBusConnection::ExportScriptableContents); TelepathyInterface telepathy; connection.registerObject(userPath, &telepathy, QDBusConnection::ExportScriptableContents); ListInterface list(&telepathy); connection.registerObject("/com/lomiri/LomiriGreeter/list", &list, QDBusConnection::ExportScriptableContents); GreeterInterface greeter; connection.registerObject("/com/lomiri/LomiriGreeter", &greeter, QDBusConnection::ExportScriptableContents); connection.registerService("com.lomiri.LomiriGreeter"); connection.registerService("org.freedesktop.Accounts"); return a.exec(); } #include "GreeterContactsTestServer.moc" GreeterInterface::GreeterInterface(QObject *parent) : QObject(parent), mIsActive(false) { } bool GreeterInterface::IsActive() const { return mIsActive; } void GreeterInterface::SetIsActive(bool active) { mIsActive = active; QDBusMessage message; message = QDBusMessage::createSignal("/com/lomiri/LomiriGreeter", "org.freedesktop.DBus.Properties", "PropertiesChanged"); message << "com.lomiri.LomiriGreeter"; QVariantMap changedProps; changedProps.insert("IsActive", QVariant(active)); message << changedProps; message << QStringList(); QDBusConnection::sessionBus().send(message); } telephony-service-0.5.3/tests/libtelephonyservice/GreeterContactsThreadTest.cpp000066400000000000000000000041361455543255600302170ustar00rootroot00000000000000/* * Copyright (C) 2015 Canonical, Ltd. * * This file is part of telephony-service. * * telephony-service is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; version 3. * * telephony-service 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 . */ #include "greetercontacts.h" #include #include Q_DECLARE_METATYPE(QtContacts::QContact) // for QVariant's benefit QTCONTACTS_USE_NAMESPACE class GreeterContactsThreadTest : public QObject { Q_OBJECT private Q_SLOTS: void testSingletonAcrossThreads(); }; void GreeterContactsThreadTest::testSingletonAcrossThreads() { // make sure that the ::instance() method works across threads QThread thread1; thread1.start(); QTimer timer1; GreeterContacts *singleton1 = nullptr; timer1.moveToThread(&thread1); connect(&timer1, &QTimer::timeout, [&]() { singleton1 = GreeterContacts::instance(); thread1.quit(); }); timer1.setSingleShot(true); timer1.setInterval(0); QThread thread2; thread2.start(); QTimer timer2; GreeterContacts *singleton2 = nullptr; timer2.moveToThread(&thread2); connect(&timer2, &QTimer::timeout, [&]() { singleton2 = GreeterContacts::instance(); thread2.quit(); }); timer2.setSingleShot(true); timer2.setInterval(0); QMetaObject::invokeMethod(&timer1, "start", Qt::QueuedConnection); QMetaObject::invokeMethod(&timer2, "start", Qt::QueuedConnection); QTRY_VERIFY(thread1.wait()); QTRY_VERIFY(thread2.wait()); QVERIFY(singleton1); QVERIFY(singleton2); QCOMPARE(singleton1, singleton2); } QTEST_MAIN(GreeterContactsThreadTest) #include "GreeterContactsThreadTest.moc" telephony-service-0.5.3/tests/libtelephonyservice/IndicatorMock.cpp000066400000000000000000000040071455543255600256560ustar00rootroot00000000000000/* * Copyright (C) 2015 Canonical, Ltd. * * This file is part of telephony-service. * * telephony-service is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; version 3. * * telephony-service 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 . */ #include #include #include #include #include #include #define INDICATOR_DBUS_SERVICE_NAME "com.lomiri.TelephonyServiceIndicator" #define INDICATOR_DBUS_OBJ_PATH "/com/lomiri/TelephonyServiceIndicator" class IndicatorMock : public QObject { Q_OBJECT Q_CLASSINFO("D-Bus Interface", INDICATOR_DBUS_SERVICE_NAME) public: Q_SCRIPTABLE void ClearNotifications(); Q_SCRIPTABLE void ClearCallNotification(const QString &targetId, const QString &accountId); Q_SIGNALS: Q_SCRIPTABLE void ClearNotificationsRequested(); Q_SCRIPTABLE void ClearCallNotificationRequested(const QString &targetId, const QString &accountId); }; void IndicatorMock::ClearNotifications() { Q_EMIT ClearNotificationsRequested(); } void IndicatorMock::ClearCallNotification(const QString &targetId, const QString &accountId) { Q_EMIT ClearCallNotificationRequested(targetId, accountId); } int main(int argc, char **argv) { QCoreApplication a(argc, argv); QDBusConnection connection = QDBusConnection::sessionBus(); IndicatorMock toneGen; connection.registerObject(INDICATOR_DBUS_OBJ_PATH, &toneGen, QDBusConnection::ExportScriptableContents); connection.registerService(INDICATOR_DBUS_SERVICE_NAME); return a.exec(); } #include "IndicatorMock.moc" telephony-service-0.5.3/tests/libtelephonyservice/OfonoAccountEntryTest.cpp000066400000000000000000000216141455543255600274120ustar00rootroot00000000000000/* * Copyright (C) 2015-2017 Canonical, Ltd. * * This file is part of telephony-service. * * telephony-service is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; version 3. * * telephony-service 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 . */ #include #include #include "telepathytest.h" #include "ofonoaccountentry.h" #include "accountentryfactory.h" #include "mockcontroller.h" class OfonoAccountEntryTest : public TelepathyTest { Q_OBJECT private Q_SLOTS: void initTestCase(); void init(); void cleanup(); void testAccountType(); void testConnected(); void testCompareIds_data(); void testCompareIds(); void testEmergencyNumbers(); void testCountryCode(); void testSerial(); void testVoicemailIndicator(); void testVoicemailNumber(); void testVoicemailCount(); void testSimLocked(); void testEmergencyCallsAvailable_data(); void testEmergencyCallsAvailable(); void testNetworkName(); void testAddressableVCardFields(); private: OfonoAccountEntry *mAccount; Tp::AccountPtr mTpAccount; MockController *mMockController; }; void OfonoAccountEntryTest::initTestCase() { initialize(); } void OfonoAccountEntryTest::init() { mTpAccount = addAccount("mock", "ofono", "phone account"); QVERIFY(!mTpAccount.isNull()); mAccount = qobject_cast(AccountEntryFactory::createEntry(mTpAccount, this)); QVERIFY(mAccount); TRY_VERIFY(mAccount->ready()); // make sure the connection is available TRY_VERIFY(mAccount->connected()); // and make sure the status and status message are the ones we expect TRY_COMPARE(mAccount->status(), QString("available")); // create the mock controller mMockController = new MockController("ofono", this); } void OfonoAccountEntryTest::cleanup() { doCleanup(); mAccount->deleteLater(); mMockController->deleteLater(); } void OfonoAccountEntryTest::testAccountType() { QCOMPARE(mAccount->type(), AccountEntry::PhoneAccount); } void OfonoAccountEntryTest::testConnected() { // the mock account is enabled/connected by default, so make sure it is like that TRY_VERIFY(mAccount->connected()); // right now the ofono account connection status behave exactly like the generic class, // but as the code path is different, test it again QSignalSpy connectedChangedSpy(mAccount, SIGNAL(connectedChanged())); // now set the account offline and see if the active flag changes correctly mMockController->SetOnline(false); TRY_VERIFY(connectedChangedSpy.count() > 0); TRY_VERIFY(!mAccount->connected()); // now re-enable the account and check that the entry is updated connectedChangedSpy.clear(); mMockController->SetOnline(true); // because of the way the mock was implemented, sometimes this can return two connectedChanged() signals. TRY_VERIFY(connectedChangedSpy.count() > 0); TRY_VERIFY(mAccount->connected()); } void OfonoAccountEntryTest::testCompareIds_data() { QTest::addColumn("first"); QTest::addColumn("second"); QTest::addColumn("expectedResult"); QTest::newRow("identical values") << "1234567" << "1234567" << true; QTest::newRow("case difference") << "TestId" << "testid" << false; QTest::newRow("phone prefix") << "1234567" << "1231234567" << true; } void OfonoAccountEntryTest::testCompareIds() { QFETCH(QString, first); QFETCH(QString, second); QFETCH(bool, expectedResult); QCOMPARE(mAccount->compareIds(first, second), expectedResult); } void OfonoAccountEntryTest::testEmergencyNumbers() { // check that the list is not empty at startup QTRY_VERIFY(!mAccount->emergencyNumbers().isEmpty()); QSignalSpy emergencyNumbersChangedSpy(mAccount, SIGNAL(emergencyNumbersChanged())); QStringList numbers; numbers << "111" << "190" << "911"; qSort(numbers); mMockController->SetEmergencyNumbers(numbers); TRY_COMPARE(emergencyNumbersChangedSpy.count(), 1); QStringList emergencyNumbers = mAccount->emergencyNumbers(); qSort(emergencyNumbers); QCOMPARE(emergencyNumbers, numbers); } void OfonoAccountEntryTest::testCountryCode() { QSignalSpy countryCodeChangedSpy(mAccount, SIGNAL(countryCodeChanged())); // check that the countryCode is not empty at startup QTRY_VERIFY(!mAccount->countryCode().isEmpty()); QCOMPARE(mAccount->countryCode(), QString("US")); countryCodeChangedSpy.clear(); QString countryCode("BR"); mMockController->SetCountryCode("BR"); TRY_COMPARE(countryCodeChangedSpy.count(), 1); QString cc = mAccount->countryCode(); QCOMPARE(cc, countryCode); } void OfonoAccountEntryTest::testSerial() { TRY_COMPARE(mAccount->serial(), mMockController->serial()); } void OfonoAccountEntryTest::testVoicemailIndicator() { // voicemail indicator is off by default on the mock CM QVERIFY(!mAccount->voicemailIndicator()); QSignalSpy voiceMailIndicatorSpy(mAccount, SIGNAL(voicemailIndicatorChanged())); // set to true mMockController->SetVoicemailIndicator(true); TRY_COMPARE(voiceMailIndicatorSpy.count(), 1); QVERIFY(mAccount->voicemailIndicator()); // and set back to false voiceMailIndicatorSpy.clear(); mMockController->SetVoicemailIndicator(false); TRY_VERIFY(!mAccount->voicemailIndicator()); QVERIFY(voiceMailIndicatorSpy.count() > 0); } void OfonoAccountEntryTest::testVoicemailNumber() { // check that the number is not empty at startup TRY_VERIFY(!mAccount->voicemailNumber().isEmpty()); QSignalSpy voicemailNumberSpy(mAccount, SIGNAL(voicemailNumberChanged())); // try changing the number QString number("12345"); mMockController->SetVoicemailNumber(number); TRY_COMPARE(voicemailNumberSpy.count(), 1); QCOMPARE(mAccount->voicemailNumber(), number); } void OfonoAccountEntryTest::testVoicemailCount() { QSignalSpy voicemailCountSpy(mAccount, SIGNAL(voicemailCountChanged())); // check that the count is zero at startup QCOMPARE((int)mAccount->voicemailCount(), 0); // set it to a bigger value int count = 10; mMockController->SetVoicemailCount(count); TRY_COMPARE(voicemailCountSpy.count(), 1); QCOMPARE((int)mAccount->voicemailCount(), count); // and back to zero voicemailCountSpy.clear(); mMockController->SetVoicemailCount(0); TRY_COMPARE((int)mAccount->voicemailCount(), 0); QVERIFY(voicemailCountSpy.count() > 0); } void OfonoAccountEntryTest::testSimLocked() { QSignalSpy simLockedSpy(mAccount, SIGNAL(simLockedChanged())); // check that it is not locked by default QVERIFY(!mAccount->simLocked()); // now try to set the status to simlocked mMockController->SetPresence("simlocked", "simlocked"); TRY_COMPARE(simLockedSpy.count(), 1); QVERIFY(mAccount->simLocked()); } void OfonoAccountEntryTest::testEmergencyCallsAvailable_data() { QTest::addColumn("status"); QTest::addColumn("available"); QTest::newRow("available") << "available" << true; QTest::newRow("away") << "away" << true; QTest::newRow("simlocked") << "simlocked" << true; QTest::newRow("flightmode") << "flightmode" << false; QTest::newRow("nosim") << "nosim" << true; QTest::newRow("nomodem") << "nomodem" << false; QTest::newRow("registered") << "registered" << true; QTest::newRow("roaming") << "roaming" << true; QTest::newRow("unregistered") << "unregistered" << true; QTest::newRow("denied") << "denied" << true; QTest::newRow("unknown") << "unknown" << true; QTest::newRow("searching") << "searching" << true; } void OfonoAccountEntryTest::testEmergencyCallsAvailable() { QFETCH(QString, status); QFETCH(bool, available); mMockController->SetPresence(status, ""); TRY_COMPARE(mAccount->status(), status); QCOMPARE(mAccount->emergencyCallsAvailable(), available); } void OfonoAccountEntryTest::testNetworkName() { QSignalSpy networkNameChangedSpy(mAccount, SIGNAL(statusMessageChanged())); // set the value QString statusMessage("SomeNetwork"); mMockController->SetPresence("available", statusMessage); TRY_COMPARE(networkNameChangedSpy.count(), 1); QCOMPARE(mAccount->networkName(), statusMessage); } void OfonoAccountEntryTest::testAddressableVCardFields() { QVERIFY(!mAccount->addressableVCardFields().isEmpty()); QCOMPARE(mAccount->addressableVCardFields(), mTpAccount->protocolInfo().addressableVCardFields()); } QTEST_MAIN(OfonoAccountEntryTest) #include "OfonoAccountEntryTest.moc" telephony-service-0.5.3/tests/libtelephonyservice/PhoneUtilsTest.cpp000066400000000000000000000073201455543255600260630ustar00rootroot00000000000000/* * Copyright (C) 2013 Canonical, Ltd. * * This file is part of telephony-service. * * telephony-service is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; version 3. * * telephony-service 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 . */ #include #include #include "phoneutils.h" Q_DECLARE_METATYPE(PhoneUtils::PhoneNumberMatchType) class PhoneUtilsTest : public QObject { Q_OBJECT private Q_SLOTS: void testIsPhoneNumber_data(); void testIsPhoneNumber(); void testComparePhoneNumbers_data(); void testComparePhoneNumbers(); }; void PhoneUtilsTest::testIsPhoneNumber_data() { QTest::addColumn("number"); QTest::addColumn("expectedResult"); QTest::newRow("simple number") << "12345678" << true; QTest::newRow("number with dash") << "1234-5678" << true; QTest::newRow("number with area code") << "(123)12345678" << true; QTest::newRow("number with extension") << "12345678#123" << true; QTest::newRow("number with slash") << "+421 2/123 456 78" << true; QTest::newRow("short/emergency number") << "190" << true; QTest::newRow("non phone numbers") << "abcdefg" << false; } void PhoneUtilsTest::testIsPhoneNumber() { QFETCH(QString, number); QFETCH(bool, expectedResult); bool result = PhoneUtils::isPhoneNumber(number); QCOMPARE(result, expectedResult); } void PhoneUtilsTest::testComparePhoneNumbers_data() { QTest::addColumn("number1"); QTest::addColumn("number2"); QTest::addColumn("expectedResult"); QTest::newRow("string equal") << "12345678" << "12345678" << PhoneUtils::NSN_MATCH; QTest::newRow("number with dash") << "1234-5678" << "12345678" << PhoneUtils::NSN_MATCH; QTest::newRow("number with area code") << "1231234567" << "1234567" << PhoneUtils::SHORT_NSN_MATCH; QTest::newRow("number with extension") << "12345678#123" << "12345678" << PhoneUtils::SHORT_NSN_MATCH; QTest::newRow("both numbers with extension") << "(123)12345678#1" << "12345678#1" << PhoneUtils::SHORT_NSN_MATCH; QTest::newRow("numbers with different extension") << "1234567#1" << "1234567#2" << PhoneUtils::NO_MATCH; QTest::newRow("short/emergency numbers") << "190" << "190" << PhoneUtils::EXACT_MATCH; QTest::newRow("different short/emergency numbers") << "911" << "11" << PhoneUtils::NO_MATCH; QTest::newRow("different numbers") << "12345678" << "1234567" << PhoneUtils::NO_MATCH; QTest::newRow("both non phone numbers") << "abcdefg" << "abcdefg" << PhoneUtils::EXACT_MATCH; QTest::newRow("different non phone numbers") << "abcdefg" << "bcdefg" << PhoneUtils::INVALID_NUMBER; QTest::newRow("phone number and custom string") << "abc12345678" << "12345678" << PhoneUtils::NSN_MATCH; QTest::newRow("phone number with slash") << "+421 2/123 456 78" << "212345678" << PhoneUtils::NSN_MATCH; // FIXME: check what other cases we need to test here" } void PhoneUtilsTest::testComparePhoneNumbers() { QFETCH(QString, number1); QFETCH(QString, number2); QFETCH(PhoneUtils::PhoneNumberMatchType, expectedResult); PhoneUtils::PhoneNumberMatchType result = PhoneUtils::comparePhoneNumbers(number1, number2); QCOMPARE(result, expectedResult); } QTEST_MAIN(PhoneUtilsTest) #include "PhoneUtilsTest.moc" telephony-service-0.5.3/tests/libtelephonyservice/ProtocolManagerTest.cpp000066400000000000000000000140301455543255600270610ustar00rootroot00000000000000/* * Copyright (C) 2015 Canonical, Ltd. * * This file is part of telephony-service. * * telephony-service is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; version 3. * * telephony-service 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 . */ #include #include #include #include #include #include #include #include "config.h" #include "protocolmanager.h" Q_DECLARE_METATYPE(Protocols) Q_DECLARE_METATYPE(Protocol::Features) // inheriting just to make the constructor public for testing class ProtocolManagerWrapper : public ProtocolManager { Q_OBJECT public: ProtocolManagerWrapper(const QString &dir, QObject *parent = 0) : ProtocolManager(dir, parent) { } }; class ProtocolManagerTest : public QObject { Q_OBJECT private Q_SLOTS: void initTestCase(); void testNumberOfProtocols(); void testFooProtocolLoaded(); void testProtocolNames(); void testProtocolByName(); void testProtocolsForFeatures_data(); void testProtocolsForFeatures(); void testTextProtocols(); void testVoiceProtocols(); void testIsProtocolSupported_data(); void testIsProtocolSupported(); void testFileSystemWatch(); }; void ProtocolManagerTest::initTestCase() { qRegisterMetaType(); qRegisterMetaType(); } void ProtocolManagerTest::testNumberOfProtocols() { QDir dir(protocolsDir()); int count = dir.entryList(QDir::Files).count(); QCOMPARE(ProtocolManager::instance()->protocols().count(), count); } void ProtocolManagerTest::testFooProtocolLoaded() { Protocol *fooProtocol = 0; Q_FOREACH(Protocol *proto, ProtocolManager::instance()->protocols()) { QVERIFY(proto); if (proto->name() == "foo") { fooProtocol = proto; break; } } QVERIFY(fooProtocol); } void ProtocolManagerTest::testProtocolNames() { Protocols protocols = ProtocolManager::instance()->protocols(); QStringList protocolNames = ProtocolManager::instance()->protocolNames(); for (int i = 0; i < protocols.count(); ++i) { QCOMPARE(protocols[i]->name(), protocolNames[i]); } } void ProtocolManagerTest::testProtocolByName() { Protocol *invalid = ProtocolManager::instance()->protocolByName("invalid"); QVERIFY(!invalid); Protocol *bar = ProtocolManager::instance()->protocolByName("bar"); QVERIFY(bar); QCOMPARE(bar->name(), QString("bar")); } void ProtocolManagerTest::testProtocolsForFeatures_data() { QTest::addColumn("features"); QTest::addColumn("protocols"); Protocols protocols; protocols = ProtocolManager::instance()->protocols(); QTest::newRow("both text and voice") << Protocol::Features(Protocol::TextChats | Protocol::VoiceCalls) << protocols; protocols.clear(); protocols << ProtocolManager::instance()->protocolByName("foo") << ProtocolManager::instance()->protocolByName("bar") << ProtocolManager::instance()->protocolByName("text"); QTest::newRow("only text") << Protocol::Features(Protocol::TextChats) << protocols; protocols.clear(); protocols << ProtocolManager::instance()->protocolByName("foo") << ProtocolManager::instance()->protocolByName("bar") << ProtocolManager::instance()->protocolByName("voice"); QTest::newRow("only voice") << Protocol::Features(Protocol::VoiceCalls) << protocols; QTest::newRow("no features") << Protocol::Features() << Protocols(); } void ProtocolManagerTest::testProtocolsForFeatures() { QFETCH(Protocol::Features, features); QFETCH(Protocols, protocols); Protocols filtered = ProtocolManager::instance()->protocolsForFeatures(features); QCOMPARE(filtered.count(), protocols.count()); Q_FOREACH(Protocol *protocol, protocols) { QVERIFY(filtered.contains(protocol)); } } void ProtocolManagerTest::testTextProtocols() { QCOMPARE(ProtocolManager::instance()->textProtocols(), ProtocolManager::instance()->protocolsForFeatures(Protocol::TextChats)); } void ProtocolManagerTest::testVoiceProtocols() { QCOMPARE(ProtocolManager::instance()->voiceProtocols(), ProtocolManager::instance()->protocolsForFeatures(Protocol::VoiceCalls)); } void ProtocolManagerTest::testIsProtocolSupported_data() { QTest::addColumn("protocolName"); QTest::addColumn("supported"); QTest::newRow("foo") << QString("foo") << true; QTest::newRow("bar") << QString("bar") << true; QTest::newRow("text") << QString("text") << true; QTest::newRow("voice") << QString("voice") << true; QTest::newRow("invalid") << QString("invalid") << false; } void ProtocolManagerTest::testIsProtocolSupported() { QFETCH(QString, protocolName); QFETCH(bool, supported); QCOMPARE(ProtocolManager::instance()->isProtocolSupported(protocolName), supported); } void ProtocolManagerTest::testFileSystemWatch() { QTemporaryDir tempDir; tempDir.setAutoRemove(true); QVERIFY(tempDir.isValid()); QDir dir(tempDir.path()); ProtocolManagerWrapper manager(tempDir.path()); QSignalSpy protocolsChangedSpy(&manager, SIGNAL(protocolsChanged())); QFile foobar(dir.absoluteFilePath("foobar.protocol")); QVERIFY(foobar.open(QFile::WriteOnly)); foobar.write("[Protocol]\nName=foobar\nFeatures=read,write\n"); QVERIFY(foobar.flush()); foobar.close(); QTRY_COMPARE(protocolsChangedSpy.count(), 1); QCOMPARE(manager.protocols().count(), 1); QCOMPARE(manager.protocols()[0]->name(), QString("foobar")); } QTEST_MAIN(ProtocolManagerTest) #include "ProtocolManagerTest.moc" telephony-service-0.5.3/tests/libtelephonyservice/ProtocolTest.cpp000066400000000000000000000143011455543255600255670ustar00rootroot00000000000000/* * Copyright (C) 2015-2016 Canonical, Ltd. * * This file is part of telephony-service. * * telephony-service is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; version 3. * * telephony-service 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 . */ #include #include #include "config.h" #include "protocol.h" // just to make the constructor public class TestProtocol : public Protocol { Q_OBJECT public: TestProtocol(const QString &name, Protocol::Features features, const QString &fallbackProtocol, Protocol::MatchRule fallbackMatchRule, const QString &fallbackSourceProperty, const QString &fallbackDestinationProperty, bool showOnSelector, bool showOnlineStatus, const QString &backgroundFile, const QString &icon, const QString &serviceName = QString(), const QString &serviceDisplayName = QString(), bool joinExistingChannels = false, bool returnToSend = false, bool enableAttachments = true, bool enableRejoin = false, bool enableTabCompletion = false, bool leaveRoomsOnClose = false, bool enableChatStates = false, QObject *parent = 0) : Protocol(name, features, fallbackProtocol, fallbackMatchRule, fallbackSourceProperty, fallbackDestinationProperty, showOnSelector, showOnlineStatus, backgroundFile, icon, serviceName, serviceDisplayName, joinExistingChannels, returnToSend, enableAttachments, enableRejoin, enableTabCompletion, leaveRoomsOnClose, enableChatStates, parent) { } }; class ProtocolTest : public QObject { Q_OBJECT private Q_SLOTS: void testBasicInfo(); void testFromFile(); }; void ProtocolTest::testBasicInfo() { QString name("foobar"); Protocol::Features features(Protocol::TextChats); QString fallbackProtocol("theFallback"); Protocol::MatchRule fallbackMatchRule(Protocol::MatchProperties); QString fallbackSourceProperty("sourceProperty"); QString fallbackDestinationProperty("destinationProperty"); bool showOnSelector(false); bool showOnlineStatus(true); QString backgroundImage("/tmp/background.png"); QString icon("/tmp/icon.png"); QString serviceName("The service"); QString serviceDisplayName("The service display name"); bool joinExistingChannels = true; bool returnToSend = true; bool enableAttachments = false; bool enableRejoin = true; bool enableTabCompletion = false; bool leaveRoomsOnClose = true; bool enableChatStates = false; TestProtocol protocol(name, features, fallbackProtocol, fallbackMatchRule, fallbackSourceProperty, fallbackDestinationProperty, showOnSelector, showOnlineStatus, backgroundImage, icon, serviceName, serviceDisplayName, joinExistingChannels, returnToSend, enableAttachments, enableRejoin, enableTabCompletion, leaveRoomsOnClose, enableChatStates, this); QCOMPARE(protocol.name(), name); QCOMPARE(protocol.features(), features); QCOMPARE(protocol.fallbackProtocol(), fallbackProtocol); QCOMPARE(protocol.fallbackMatchRule(), fallbackMatchRule); QCOMPARE(protocol.fallbackSourceProperty(), fallbackSourceProperty); QCOMPARE(protocol.fallbackDestinationProperty(), fallbackDestinationProperty); QCOMPARE(protocol.showOnSelector(), showOnSelector); QCOMPARE(protocol.showOnlineStatus(), showOnlineStatus); QCOMPARE(protocol.backgroundImage(), backgroundImage); QCOMPARE(protocol.icon(), icon); QCOMPARE(protocol.serviceName(), serviceName); QCOMPARE(protocol.serviceDisplayName(), serviceDisplayName); QCOMPARE(protocol.joinExistingChannels(), joinExistingChannels); QCOMPARE(protocol.returnToSend(), returnToSend); QCOMPARE(protocol.enableAttachments(), enableAttachments); QCOMPARE(protocol.enableRejoin(), enableRejoin); QCOMPARE(protocol.enableTabCompletion(), enableTabCompletion); QCOMPARE(protocol.leaveRoomsOnClose(), leaveRoomsOnClose); QCOMPARE(protocol.enableChatStates(), enableChatStates); QCOMPARE(protocol.parent(), this); } void ProtocolTest::testFromFile() { // check that calling fromFile() on an invalid path returns 0 Protocol *nullProtocol = Protocol::fromFile("/non/existent/path/to/a/dummy.protocol"); QVERIFY(!nullProtocol); // and now check a valid protocol Protocol *protocol = Protocol::fromFile(protocolsDir() + "/foo.protocol"); QVERIFY(protocol); QCOMPARE(protocol->name(), QString("foo")); QCOMPARE(protocol->features(), Protocol::Features(Protocol::TextChats | Protocol::VoiceCalls)); QCOMPARE(protocol->fallbackProtocol(), QString("bar")); QCOMPARE(protocol->fallbackMatchRule(), Protocol::MatchProperties); QCOMPARE(protocol->fallbackSourceProperty(), QString("theSourceProperty")); QCOMPARE(protocol->fallbackDestinationProperty(), QString("theDestinationProperty")); QCOMPARE(protocol->showOnSelector(), false); QCOMPARE(protocol->showOnlineStatus(), true); QCOMPARE(protocol->backgroundImage(), QString("/tmp/background.png")); QCOMPARE(protocol->icon(), QString("/tmp/icon.png")); QCOMPARE(protocol->serviceName(), QString("The Service")); QCOMPARE(protocol->serviceDisplayName(), QString("The Service Display Name")); QCOMPARE(protocol->joinExistingChannels(), true); QCOMPARE(protocol->returnToSend(), false); QCOMPARE(protocol->enableAttachments(), false); QCOMPARE(protocol->enableRejoin(), true); QCOMPARE(protocol->enableTabCompletion(), true); QCOMPARE(protocol->leaveRoomsOnClose(), true); QCOMPARE(protocol->enableChatStates(), true); } QTEST_MAIN(ProtocolTest) #include "ProtocolTest.moc" telephony-service-0.5.3/tests/libtelephonyservice/TelepathyHelperSetupTest.cpp000066400000000000000000000062371455543255600301170ustar00rootroot00000000000000/* * Copyright (C) 2015 Canonical, Ltd. * * This file is part of telephony-service. * * telephony-service is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; version 3. * * telephony-service 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 . */ #include #include #include "telepathytest.h" #include "accountentry.h" #include "telepathyhelper.h" // inheriting just to make the constructor public for testing class TelepathyHelperWrapper : public TelepathyHelper { Q_OBJECT public: TelepathyHelperWrapper(QObject *parent = 0) : TelepathyHelper(parent) { } }; class TelepathyHelperSetupTest : public TelepathyTest { Q_OBJECT private Q_SLOTS: void initTestCase(); void cleanup(); void testTelepathyHelperReadyNoAccounts(); void testTelepathyHelperReady(); protected: Tp::AccountPtr addAccountAndWait(const QString &manager, const QString &protocol, const QString &displayName, const QVariantMap ¶meters = QVariantMap()); private: Tp::AccountPtr mGenericTpAccount1; Tp::AccountPtr mGenericTpAccount2; Tp::AccountPtr mPhoneTpAccount1; Tp::AccountPtr mPhoneTpAccount2; }; void TelepathyHelperSetupTest::initTestCase() { initialize(); } void TelepathyHelperSetupTest::testTelepathyHelperReadyNoAccounts() { TelepathyHelperWrapper telepathyHelper; QSignalSpy setupReadySpy(&telepathyHelper, SIGNAL(setupReady())); TRY_COMPARE(setupReadySpy.count(), 1); QVERIFY(telepathyHelper.ready()); QCOMPARE(telepathyHelper.accounts().size(), 0); } void TelepathyHelperSetupTest::testTelepathyHelperReady() { // add four accounts mGenericTpAccount1 = addAccount("mock", "mock", "the generic account 1"); QVERIFY(!mGenericTpAccount1.isNull()); mGenericTpAccount2 = addAccount("mock", "mock", "the generic account 2"); QVERIFY(!mGenericTpAccount2.isNull()); mPhoneTpAccount1 = addAccount("mock", "ofono", "the phone account 1"); QVERIFY(!mPhoneTpAccount1.isNull()); mPhoneTpAccount2 = addAccount("mock", "ofono", "the phone account 2"); QVERIFY(!mPhoneTpAccount2.isNull()); TelepathyHelperWrapper telepathyHelper; QSignalSpy setupReadySpy(&telepathyHelper, SIGNAL(setupReady())); TRY_COMPARE(setupReadySpy.count(), 1); QVERIFY(telepathyHelper.ready()); QCOMPARE(telepathyHelper.accounts().size(), 4); Q_FOREACH(const AccountEntry* account, telepathyHelper.accounts()) { QVERIFY(account->ready()); } } void TelepathyHelperSetupTest::cleanup() { // the accounts are removed in the parent class. doCleanup(); } QTEST_MAIN(TelepathyHelperSetupTest) #include "TelepathyHelperSetupTest.moc" telephony-service-0.5.3/tests/libtelephonyservice/TelepathyHelperTest.cpp000066400000000000000000000300351455543255600270670ustar00rootroot00000000000000/* * Copyright (C) 2015 Canonical, Ltd. * * This file is part of telephony-service. * * telephony-service is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; version 3. * * telephony-service 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 . */ #include #include #include #include #include #include "telepathytest.h" #include "accountentry.h" #include "accountentryfactory.h" #include "telepathyhelper.h" #include "mockcontroller.h" Q_DECLARE_METATYPE(AccountEntry*) class TelepathyHelperTest : public TelepathyTest { Q_OBJECT private Q_SLOTS: void initTestCase(); void init(); void cleanup(); void testAccounts(); void testPhoneAccounts(); void testAccountSorting(); void testAccountIds(); void testActiveAccounts(); void testAccountForId(); void testAccountForConnection(); void testEmergencyCallsAvailable(); protected: Tp::AccountPtr addAccountAndWait(const QString &manager, const QString &protocol, const QString &displayName, const QVariantMap ¶meters = QVariantMap()); private: Tp::AccountPtr mGenericTpAccount; Tp::AccountPtr mPhoneTpAccount; MockController *mGenericController; MockController *mPhoneController; }; void TelepathyHelperTest::initTestCase() { qRegisterMetaType(); initialize(); QSignalSpy setupReadySpy(TelepathyHelper::instance(), SIGNAL(setupReady())); TRY_COMPARE(setupReadySpy.count(), 1); } void TelepathyHelperTest::init() { // add two accounts mGenericTpAccount = addAccountAndWait("mock", "mock", "the generic account"); QVERIFY(!mGenericTpAccount.isNull()); mPhoneTpAccount = addAccountAndWait("mock", "ofono", "the phone account"); QVERIFY(!mPhoneTpAccount.isNull()); // and create the mock controller mGenericController = new MockController("mock", this); mPhoneController = new MockController("ofono", this); } void TelepathyHelperTest::cleanup() { // the accounts are removed in the parent class. doCleanup(); mGenericController->deleteLater(); mPhoneController->deleteLater(); } void TelepathyHelperTest::testAccounts() { QCOMPARE(TelepathyHelper::instance()->accounts().count(), 2); AccountEntry *first = TelepathyHelper::instance()->accounts()[0]; AccountEntry *second = TelepathyHelper::instance()->accounts()[1]; QVERIFY(first->accountId() != second->accountId()); // now check that new accounts are captured QSignalSpy accountsChangedSpy(TelepathyHelper::instance(), SIGNAL(accountsChanged())); Tp::AccountPtr newAccount = addAccountAndWait("mock", "mock", "extra"); QVERIFY(!newAccount.isNull()); TRY_COMPARE(accountsChangedSpy.count(), 1); QCOMPARE(TelepathyHelper::instance()->accounts().count(), 3); bool accountFound = false; Q_FOREACH(AccountEntry *entry, TelepathyHelper::instance()->accounts()) { if (entry->accountId() == newAccount->uniqueIdentifier()) { accountFound = true; break; } } QVERIFY(accountFound); // now remove the extra account and make sure it is properly removed accountsChangedSpy.clear(); QVERIFY(removeAccount(newAccount)); TRY_COMPARE(accountsChangedSpy.count(), 1); QCOMPARE(TelepathyHelper::instance()->accounts().count(), 2); QCOMPARE(TelepathyHelper::instance()->accounts()[0]->accountId(), first->accountId()); QCOMPARE(TelepathyHelper::instance()->accounts()[1]->accountId(), second->accountId()); } void TelepathyHelperTest::testPhoneAccounts() { QCOMPARE(TelepathyHelper::instance()->phoneAccounts().count(), 1); AccountEntry *phoneAccount = TelepathyHelper::instance()->phoneAccounts()[0]; QVERIFY(phoneAccount->accountId() == mPhoneTpAccount->uniqueIdentifier()); // now check that new phone accounts are captured QSignalSpy phoneAccountsChangedSpy(TelepathyHelper::instance(), SIGNAL(phoneAccountsChanged())); Tp::AccountPtr newAccount = addAccount("mock", "ofono", "extra"); QVERIFY(!newAccount.isNull()); QTRY_COMPARE(phoneAccountsChangedSpy.count(), 1); QCOMPARE(TelepathyHelper::instance()->phoneAccounts().count(), 2); bool accountFound = false; Q_FOREACH(AccountEntry *entry, TelepathyHelper::instance()->phoneAccounts()) { if (entry->accountId() == newAccount->uniqueIdentifier()) { accountFound = true; break; } } QVERIFY(accountFound); // now remove the extra phone account and make sure it is properly removed phoneAccountsChangedSpy.clear(); QVERIFY(removeAccount(newAccount)); QTRY_COMPARE(phoneAccountsChangedSpy.count(), 1); QCOMPARE(TelepathyHelper::instance()->phoneAccounts().count(), 1); QCOMPARE(TelepathyHelper::instance()->phoneAccounts()[0]->accountId(), phoneAccount->accountId()); } void TelepathyHelperTest::testAccountSorting() { // create two accounts with modem-objpath parameters and make sure they are listed first QVariantMap parameters; parameters["modem-objpath"] = "/phonesim1"; Tp::AccountPtr firstAccount = addAccountAndWait("mock", "ofono", "firstPhoneAccount", parameters); QVERIFY(!firstAccount.isNull()); parameters["modem-objpath"] = "/phonesim2"; Tp::AccountPtr secondAccount = addAccountAndWait("mock", "ofono", "secondPhoneAccount", parameters); QVERIFY(!secondAccount.isNull()); // wait for the accounts to appear; TRY_COMPARE(TelepathyHelper::instance()->accounts().count(), 4); // and check the order QCOMPARE(TelepathyHelper::instance()->accounts()[0]->accountId(), firstAccount->uniqueIdentifier()); QCOMPARE(TelepathyHelper::instance()->accounts()[1]->accountId(), secondAccount->uniqueIdentifier()); // now add a third account that should go before the two others parameters["modem-objpath"] = "/phonesim0"; Tp::AccountPtr thirdAccount = addAccountAndWait("mock", "ofono", "thirdPhoneAccount", parameters); QVERIFY(!thirdAccount.isNull()); // wait for the accounts to appear; TRY_COMPARE(TelepathyHelper::instance()->accounts().count(), 5); QCOMPARE(TelepathyHelper::instance()->accounts()[0]->accountId(), thirdAccount->uniqueIdentifier()); // and remove the created accounts QVERIFY(removeAccount(firstAccount)); QVERIFY(removeAccount(secondAccount)); QVERIFY(removeAccount(thirdAccount)); } void TelepathyHelperTest::testAccountIds() { QCOMPARE(TelepathyHelper::instance()->accountIds().count(), 2); // now check that new accounts are captured QSignalSpy accountIdsChangedSpy(TelepathyHelper::instance(), SIGNAL(accountIdsChanged())); Tp::AccountPtr newAccount = addAccountAndWait("mock", "mock", "extra"); QVERIFY(!newAccount.isNull()); TRY_COMPARE(accountIdsChangedSpy.count(), 1); QCOMPARE(TelepathyHelper::instance()->accountIds().count(), 3); // just to make sure check that each account id matches one account for (int i = 0; i < 3; ++i) { QCOMPARE(TelepathyHelper::instance()->accountIds()[i], TelepathyHelper::instance()->accounts()[i]->accountId()); } // now remove the extra account and make sure it is properly removed accountIdsChangedSpy.clear(); QVERIFY(removeAccount(newAccount)); TRY_COMPARE(accountIdsChangedSpy.count(), 1); QCOMPARE(TelepathyHelper::instance()->accountIds().count(), 2); QCOMPARE(TelepathyHelper::instance()->accountIds()[0], TelepathyHelper::instance()->accounts()[0]->accountId()); QCOMPARE(TelepathyHelper::instance()->accountIds()[1], TelepathyHelper::instance()->accounts()[1]->accountId()); } void TelepathyHelperTest::testActiveAccounts() { QSignalSpy activeAccountsSpy(TelepathyHelper::instance(), SIGNAL(activeAccountsChanged())); // at startup, all accounts are active, so make sure we got two active accounts QCOMPARE(TelepathyHelper::instance()->activeAccounts().count(), 2); // now set one of the accounts as offline and make sure it is captured mGenericController->SetOnline(false); TRY_VERIFY(activeAccountsSpy.count() >= 1); QTRY_COMPARE(TelepathyHelper::instance()->activeAccounts().count(), 1); QCOMPARE(TelepathyHelper::instance()->activeAccounts()[0]->accountId(), mPhoneTpAccount->uniqueIdentifier()); // set the other account offline to make sure activeAccountsSpy.clear(); mPhoneController->SetOnline(false); TRY_VERIFY(activeAccountsSpy.count() >= 1); QVERIFY(TelepathyHelper::instance()->activeAccounts().isEmpty()); // and set both accounts online again activeAccountsSpy.clear(); mGenericController->SetOnline(true); mPhoneController->SetOnline(true); TRY_VERIFY(activeAccountsSpy.count() >= 2); QCOMPARE(TelepathyHelper::instance()->activeAccounts().count(), 2); } void TelepathyHelperTest::testAccountForId() { AccountEntry *genericAccount = TelepathyHelper::instance()->accountForId(mGenericTpAccount->uniqueIdentifier()); QVERIFY(genericAccount); QCOMPARE(genericAccount->accountId(), mGenericTpAccount->uniqueIdentifier()); AccountEntry *phoneAccount = TelepathyHelper::instance()->accountForId(mPhoneTpAccount->uniqueIdentifier()); QVERIFY(phoneAccount); QCOMPARE(phoneAccount->accountId(), mPhoneTpAccount->uniqueIdentifier()); } void TelepathyHelperTest::testAccountForConnection() { Q_FOREACH(AccountEntry *account, TelepathyHelper::instance()->accounts()) { AccountEntry *entry = TelepathyHelper::instance()->accountForConnection(account->account()->connection()); QVERIFY(entry); QCOMPARE(entry, account); } } void TelepathyHelperTest::testEmergencyCallsAvailable() { QSignalSpy emergencyCallsSpy(TelepathyHelper::instance(), SIGNAL(emergencyCallsAvailableChanged())); // check that calls are available by default TRY_VERIFY(TelepathyHelper::instance()->emergencyCallsAvailable()); // set the generic account as "flightmode" and make sure it doesn't affect the emergencyCallsAvailable mGenericController->SetPresence("flightmode", ""); QTest::qWait(500); QCOMPARE(emergencyCallsSpy.count(), 0); QVERIFY(TelepathyHelper::instance()->emergencyCallsAvailable()); // now set the phone account as "flightmode", and see if the emergencyCallsAvailable value mPhoneController->SetPresence("flightmode", ""); TRY_VERIFY(emergencyCallsSpy.count() > 0); QVERIFY(!TelepathyHelper::instance()->emergencyCallsAvailable()); // set the generic account online and check if it affects the value emergencyCallsSpy.clear(); mGenericController->SetOnline(true); QTest::qWait(500); QCOMPARE(emergencyCallsSpy.count(), 0); QVERIFY(!TelepathyHelper::instance()->emergencyCallsAvailable()); // and finally set the phone account back online mPhoneController->SetOnline(true); TRY_VERIFY(emergencyCallsSpy.count() > 0); QVERIFY(TelepathyHelper::instance()->emergencyCallsAvailable()); } Tp::AccountPtr TelepathyHelperTest::addAccountAndWait(const QString &manager, const QString &protocol, const QString &displayName, const QVariantMap ¶meters) { QSignalSpy accountAddedSpy(TelepathyHelper::instance(), SIGNAL(accountAdded(AccountEntry*))); Tp::AccountPtr account = addAccount(manager, protocol, displayName, parameters); WAIT_FOR(accountAddedSpy.count() == 1); AccountEntry *accountEntry = accountAddedSpy.first().first().value(); WAIT_FOR(accountEntry->ready()); // and make sure the status and status message are the ones we expect WAIT_FOR(accountEntry->status() == QString("available")); return account; } QTEST_MAIN(TelepathyHelperTest) #include "TelepathyHelperTest.moc" telephony-service-0.5.3/tests/libtelephonyservice/ToneGeneratorMock.cpp000066400000000000000000000036171455543255600265240ustar00rootroot00000000000000/* * Copyright (C) 2015 Canonical, Ltd. * * This file is part of telephony-service. * * telephony-service is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; version 3. * * telephony-service 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 . */ #include #include #include #include #include #include #define TONEGEN_DBUS_SERVICE_NAME "com.Nokia.Telephony.Tones" #define TONEGEN_DBUS_OBJ_PATH "/com/Nokia/Telephony/Tones" class ToneGeneratorMock : public QObject { Q_OBJECT Q_CLASSINFO("D-Bus Interface", TONEGEN_DBUS_SERVICE_NAME) public: Q_SCRIPTABLE void StartEventTone(uint key, int volume, uint duration); Q_SCRIPTABLE void StopTone(); Q_SIGNALS: Q_SCRIPTABLE void StartEventToneRequested(uint key, int volume, uint duration); Q_SCRIPTABLE void StopToneRequested(); }; void ToneGeneratorMock::StartEventTone(uint key, int volume, uint duration) { Q_EMIT StartEventToneRequested(key, volume, duration); } void ToneGeneratorMock::StopTone() { Q_EMIT StopToneRequested(); } int main(int argc, char **argv) { QCoreApplication a(argc, argv); QDBusConnection connection = QDBusConnection::sessionBus(); ToneGeneratorMock toneGen; connection.registerObject(TONEGEN_DBUS_OBJ_PATH, &toneGen, QDBusConnection::ExportScriptableContents); connection.registerService(TONEGEN_DBUS_SERVICE_NAME); return a.exec(); } #include "ToneGeneratorMock.moc" telephony-service-0.5.3/tests/libtelephonyservice/ToneGeneratorTest.cpp000066400000000000000000000072731455543255600265540ustar00rootroot00000000000000/* * Copyright (C) 2015 Canonical, Ltd. * * This file is part of telephony-service. * * telephony-service is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; version 3. * * telephony-service 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 . */ #include #include #include #include "tonegenerator.h" #define TONEGEN_DBUS_SERVICE_NAME "com.Nokia.Telephony.Tones" #define TONEGEN_DBUS_OBJ_PATH "/com/Nokia/Telephony/Tones" class ToneGeneratorTest : public QObject { Q_OBJECT private Q_SLOTS: void initTestCase(); void cleanupTestCase(); void cleanup(); void testSingleTone_data(); void testSingleTone(); void testMultipleTones(); void testWaitingTone(); void testCallEndedTone(); private: QDBusInterface *mToneInterface; QSignalSpy *mStartToneSpy; QSignalSpy *mStopToneSpy; }; void ToneGeneratorTest::initTestCase() { mToneInterface = new QDBusInterface(TONEGEN_DBUS_SERVICE_NAME, TONEGEN_DBUS_OBJ_PATH, TONEGEN_DBUS_SERVICE_NAME, QDBusConnection::sessionBus(), this); mStartToneSpy = new QSignalSpy(mToneInterface, SIGNAL(StartEventToneRequested(uint, int, uint))); mStopToneSpy = new QSignalSpy(mToneInterface,SIGNAL(StopToneRequested())); } void ToneGeneratorTest::cleanupTestCase() { mToneInterface->deleteLater(); mStartToneSpy->deleteLater(); mStopToneSpy->deleteLater(); } void ToneGeneratorTest::cleanup() { mStartToneSpy->clear(); mStopToneSpy->clear(); } void ToneGeneratorTest::testSingleTone_data() { QTest::addColumn("key"); QTest::newRow("0") << (uint)0; QTest::newRow("1") << (uint)1; QTest::newRow("2") << (uint)2; QTest::newRow("3") << (uint)3; QTest::newRow("4") << (uint)4; QTest::newRow("5") << (uint)5; QTest::newRow("6") << (uint)6; QTest::newRow("7") << (uint)7; QTest::newRow("8") << (uint)8; QTest::newRow("9") << (uint)9; QTest::newRow("10") << (uint)10; QTest::newRow("11") << (uint)11; } void ToneGeneratorTest::testSingleTone() { QFETCH(uint, key); ToneGenerator::instance()->playDTMFTone(key); QTRY_COMPARE(mStartToneSpy->count(), 1); QCOMPARE(mStartToneSpy->first()[0].toUInt(), key); QTRY_COMPARE(mStopToneSpy->count(), 1); } void ToneGeneratorTest::testMultipleTones() { int count = 12; for (uint key = 0; key < count; ++key) { ToneGenerator::instance()->playDTMFTone(key); } QTRY_COMPARE(mStartToneSpy->count(), count); QTRY_COMPARE(mStopToneSpy->count(), 1); } void ToneGeneratorTest::testWaitingTone() { ToneGenerator::instance()->playWaitingTone(); QTRY_COMPARE(mStartToneSpy->count(), 1); QCOMPARE(mStartToneSpy->first()[0].toUInt(), WAITING_TONE); ToneGenerator::instance()->stopWaitingTone(); QTRY_COMPARE(mStopToneSpy->count(), 1); } void ToneGeneratorTest::testCallEndedTone() { ToneGenerator::instance()->playCallEndedTone(); QTRY_COMPARE(mStartToneSpy->count(), 1); QCOMPARE(mStartToneSpy->first()[0].toUInt(), CALL_ENDED_TONE); QTRY_COMPARE(mStopToneSpy->count(), 1); } QTEST_MAIN(ToneGeneratorTest) #include "ToneGeneratorTest.moc" telephony-service-0.5.3/tests/libtelephonyservice/USSDManagerTest.cpp000066400000000000000000000254311455543255600260450ustar00rootroot00000000000000/* * Copyright (C) 2015 Canonical, Ltd. * * This file is part of telephony-service. * * telephony-service is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; version 3. * * telephony-service 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 . */ #include #include #include "telepathytest.h" #include "ofonoaccountentry.h" #include "accountentryfactory.h" #include "telepathyhelper.h" #include "mockcontroller.h" #include "ussdmanager.h" class USSDManagerTest : public TelepathyTest { Q_OBJECT private Q_SLOTS: void initTestCase(); void init(); void cleanup(); void testInitiate(); void testRespond(); void testCancel(); void testActive_data(); void testActive(); void testActiveChanged(); void testState(); void testNotificationReceived(); void testRequestReceived(); void testInitiateUSSDComplete(); void testRespondComplete_data(); void testRespondComplete(); void testBarringComplete(); void testForwardingComplete(); void testWaitingComplete(); void testCallingLinePresentationComplete(); void testConnectedLinePresentationComplete(); void testCallingLineRestrictionComplete(); void testConnectedLineRestrictionComplete(); void testInitiateFailed(); void testAccountReconnect(); private: OfonoAccountEntry *mAccount; Tp::AccountPtr mTpAccount; MockController *mMockController; USSDManager *mManager; }; void USSDManagerTest::initTestCase() { initialize(); } void USSDManagerTest::init() { mTpAccount = addAccount("mock", "ofono", "the account"); QVERIFY(!mTpAccount.isNull()); QTRY_VERIFY(mTpAccount->isReady(Tp::Account::FeatureCore)); mAccount = qobject_cast(AccountEntryFactory::createEntry(mTpAccount, this)); QVERIFY(mAccount); // make sure the connection is available QTRY_VERIFY(!mTpAccount->connection().isNull()); QTRY_COMPARE(mTpAccount->connection()->selfContact()->presence().type(), Tp::ConnectionPresenceTypeAvailable); QTRY_VERIFY(mAccount->connected()); // and create the mock controller mMockController = new MockController("ofono", this); mManager = new USSDManager(mAccount, mAccount); } void USSDManagerTest::cleanup() { doCleanup(); mAccount->deleteLater(); mMockController->deleteLater(); mManager->deleteLater(); } void USSDManagerTest::testInitiate() { QString command("initiatecommand"); QSignalSpy initiateSpy(mMockController, SIGNAL(USSDInitiateCalled(QString))); mManager->initiate(command); QTRY_COMPARE(initiateSpy.count(), 1); QCOMPARE(initiateSpy.first()[0].toString(), command); } void USSDManagerTest::testRespond() { QString reply("somereply"); QSignalSpy respondSpy(mMockController, SIGNAL(USSDRespondCalled(QString))); mManager->respond(reply); QTRY_COMPARE(respondSpy.count(), 1); QCOMPARE(respondSpy.first()[0].toString(), reply); } void USSDManagerTest::testCancel() { QSignalSpy cancelSpy(mMockController, SIGNAL(USSDCancelCalled())); mManager->cancel(); QTRY_COMPARE(cancelSpy.count(), 1); } void USSDManagerTest::testActive_data() { QTest::addColumn("state"); QTest::addColumn("active"); QTest::newRow("idle is inactive") << "idle" << false; QTest::newRow("active is active") << "active" << true; QTest::newRow("anything else is active") << "blabla" << true; } void USSDManagerTest::testActive() { QFETCH(QString, state); QFETCH(bool, active); mMockController->TriggerUSSDStateChanged(state); QTRY_COMPARE(mManager->active(), active); } void USSDManagerTest::testActiveChanged() { QSignalSpy activeSpy(mManager, SIGNAL(activeChanged())); mMockController->TriggerUSSDStateChanged("active"); QTRY_COMPARE(activeSpy.count(), 1); } void USSDManagerTest::testState() { QString state = "foobar"; QSignalSpy stateSpy(mManager, SIGNAL(stateChanged(QString))); mMockController->TriggerUSSDStateChanged(state); QTRY_COMPARE(stateSpy.count(), 1); QCOMPARE(stateSpy.first()[0].toString(), state); QCOMPARE(mManager->state(), state); } void USSDManagerTest::testNotificationReceived() { QString notification("the notification"); QSignalSpy notificationReceivedSpy(mManager, SIGNAL(notificationReceived(QString))); mMockController->TriggerUSSDNotificationReceived(notification); QTRY_COMPARE(notificationReceivedSpy.count(), 1); QCOMPARE(notificationReceivedSpy.first()[0].toString(), notification); } void USSDManagerTest::testRequestReceived() { QString request("the notification"); QSignalSpy requestReceivedSpy(mManager, SIGNAL(requestReceived(QString))); mMockController->TriggerUSSDRequestReceived(request); QTRY_COMPARE(requestReceivedSpy.count(), 1); QCOMPARE(requestReceivedSpy.first()[0].toString(), request); } void USSDManagerTest::testInitiateUSSDComplete() { QString response("some response"); QSignalSpy initiateUSSDCompleteSpy(mManager, SIGNAL(initiateUSSDComplete(QString))); mMockController->TriggerUSSDInitiateUSSDComplete(response); QTRY_COMPARE(initiateUSSDCompleteSpy.count(), 1); QCOMPARE(initiateUSSDCompleteSpy.first()[0].toString(), response); } void USSDManagerTest::testRespondComplete_data() { QTest::addColumn("success"); QTest::addColumn("response"); QTest::newRow("success") << true << "somesuccessvalue"; QTest::newRow("failure") << false << "somefailurevalue"; } void USSDManagerTest::testRespondComplete() { QFETCH(bool, success); QFETCH(QString, response); QSignalSpy respondCompleteSpy(mManager, SIGNAL(respondComplete(bool,QString))); mMockController->TriggerUSSDRespondComplete(success, response); QTRY_COMPARE(respondCompleteSpy.count(), 1); QCOMPARE(respondCompleteSpy.first()[0].toBool(), success); QCOMPARE(respondCompleteSpy.first()[1].toString(), response); } void USSDManagerTest::testBarringComplete() { QString op("theOp"); QString service("theService"); QVariantMap map; map["op"] = op; map["service"] = service; QSignalSpy barringCompleteSpy(mManager, SIGNAL(barringComplete(QString,QString,QVariantMap))); mMockController->TriggerUSSDBarringComplete(op, service, map); QTRY_COMPARE(barringCompleteSpy.count(), 1); QCOMPARE(barringCompleteSpy.first()[0].toString(), op); QCOMPARE(barringCompleteSpy.first()[1].toString(), service); QCOMPARE(barringCompleteSpy.first()[2].toMap(), map); } void USSDManagerTest::testForwardingComplete() { QString op("theOtherOp"); QString service("theOtherService"); QVariantMap map; map["op"] = op; map["service"] = service; map["count"] = 1; QSignalSpy forwardingCompleteSpy(mManager, SIGNAL(forwardingComplete(QString,QString,QVariantMap))); mMockController->TriggerUSSDForwardingComplete(op, service, map); QTRY_COMPARE(forwardingCompleteSpy.count(), 1); QCOMPARE(forwardingCompleteSpy.first()[0].toString(), op); QCOMPARE(forwardingCompleteSpy.first()[1].toString(), service); QCOMPARE(forwardingCompleteSpy.first()[2].toMap(), map); } void USSDManagerTest::testWaitingComplete() { QString op("anotherOp"); QVariantMap map; map["op"] = op; map["one"] = 1; map["two"] = 2; QSignalSpy waitingCompleteSpy(mManager, SIGNAL(waitingComplete(QString,QVariantMap))); mMockController->TriggerUSSDWaitingComplete(op, map); QTRY_COMPARE(waitingCompleteSpy.count(), 1); QCOMPARE(waitingCompleteSpy.first()[0].toString(), op); QCOMPARE(waitingCompleteSpy.first()[1].toMap(), map); } void USSDManagerTest::testCallingLinePresentationComplete() { QString op("clpOp"); QString status("clpStatus"); QSignalSpy clpCompleteSpy(mManager, SIGNAL(callingLinePresentationComplete(QString,QString))); mMockController->TriggerUSSDCallingLinePresentationComplete(op, status); QTRY_COMPARE(clpCompleteSpy.count(), 1); QCOMPARE(clpCompleteSpy.first()[0].toString(), op); QCOMPARE(clpCompleteSpy.first()[1].toString(), status); } void USSDManagerTest::testConnectedLinePresentationComplete() { QString op("clp2Op"); QString status("clp2Status"); QSignalSpy clpCompleteSpy(mManager, SIGNAL(connectedLinePresentationComplete(QString,QString))); mMockController->TriggerUSSDConnectedLinePresentationComplete(op, status); QTRY_COMPARE(clpCompleteSpy.count(), 1); QCOMPARE(clpCompleteSpy.first()[0].toString(), op); QCOMPARE(clpCompleteSpy.first()[1].toString(), status); } void USSDManagerTest::testCallingLineRestrictionComplete() { QString op("clrOp"); QString status("clrStatus"); QSignalSpy clrCompleteSpy(mManager, SIGNAL(callingLineRestrictionComplete(QString,QString))); mMockController->TriggerUSSDCallingLineRestrictionComplete(op, status); QTRY_COMPARE(clrCompleteSpy.count(), 1); QCOMPARE(clrCompleteSpy.first()[0].toString(), op); QCOMPARE(clrCompleteSpy.first()[1].toString(), status); } void USSDManagerTest::testConnectedLineRestrictionComplete() { QString op("clr2Op"); QString status("clr2Status"); QSignalSpy clrCompleteSpy(mManager, SIGNAL(connectedLineRestrictionComplete(QString,QString))); mMockController->TriggerUSSDConnectedLineRestrictionComplete(op, status); QTRY_COMPARE(clrCompleteSpy.count(), 1); QCOMPARE(clrCompleteSpy.first()[0].toString(), op); QCOMPARE(clrCompleteSpy.first()[1].toString(), status); } void USSDManagerTest::testInitiateFailed() { QSignalSpy initiateFailedSpy(mManager, SIGNAL(initiateFailed())); mMockController->TriggerUSSDInitiateFailed(); QTRY_COMPARE(initiateFailedSpy.count(), 1); } void USSDManagerTest::testAccountReconnect() { // make sure that methods and signals are working after an account reconnects Q_EMIT mAccount->connectedChanged(); // and now try one method call QString command("reinitiatecommand"); QSignalSpy initiateSpy(mMockController, SIGNAL(USSDInitiateCalled(QString))); mManager->initiate(command); QTRY_COMPARE(initiateSpy.count(), 1); QCOMPARE(initiateSpy.first()[0].toString(), command); // and check one of the signals QString state("someCorrectState"); QSignalSpy stateChangedSpy(mManager, SIGNAL(stateChanged(QString))); mMockController->TriggerUSSDStateChanged(state); QTRY_COMPARE(stateChangedSpy.count(), 1); QCOMPARE(stateChangedSpy.first()[0].toString(), state); QCOMPARE(mManager->state(), state); } QTEST_MAIN(USSDManagerTest) #include "USSDManagerTest.moc" telephony-service-0.5.3/tests/libtelephonyservice/testProtocols/000077500000000000000000000000001455543255600253075ustar00rootroot00000000000000telephony-service-0.5.3/tests/libtelephonyservice/testProtocols/bar.protocol000066400000000000000000000000501455543255600276310ustar00rootroot00000000000000[Protocol] Name=bar Features=text,voice telephony-service-0.5.3/tests/libtelephonyservice/testProtocols/foo.protocol000066400000000000000000000007411455543255600276570ustar00rootroot00000000000000[Protocol] Name=foo Features=text,voice FallbackProtocol=bar FallbackMatchRule=match_properties FallbackSourceProperty=theSourceProperty FallbackDestinationProperty=theDestinationProperty ShowOnSelector=0 ShowOnlineStatus=1 BackgroundImage=/tmp/background.png Icon=/tmp/icon.png ServiceName=The Service ServiceDisplayName=The Service Display Name JoinExistingChannels=1 ReturnToSend=0 EnableAttachments=0 EnableRejoin=1 EnableTabCompletion=1 LeaveRoomsOnClose=1 EnableChatStates=1 telephony-service-0.5.3/tests/libtelephonyservice/testProtocols/text.protocol000066400000000000000000000000431455543255600300530ustar00rootroot00000000000000[Protocol] Name=text Features=text telephony-service-0.5.3/tests/libtelephonyservice/testProtocols/voice.protocol000066400000000000000000000000451455543255600301760ustar00rootroot00000000000000[Protocol] Name=voice Features=voice telephony-service-0.5.3/tools/000077500000000000000000000000001455543255600163425ustar00rootroot00000000000000telephony-service-0.5.3/tools/CMakeLists.txt000066400000000000000000000003531455543255600211030ustar00rootroot00000000000000configure_file( ofono-setup.in ofono-setup @ONLY ) install(PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/ofono-setup DESTINATION ${CMAKE_INSTALL_BINDIR}) install(PROGRAMS phone-gsettings-migration.py DESTINATION ${CMAKE_INSTALL_BINDIR}) telephony-service-0.5.3/tools/ofono-setup.in000077500000000000000000000130751455543255600211610ustar00rootroot00000000000000#!/bin/sh get_telepathy_ofono_accounts() { mc-tool list | grep "^ofono/ofono/" | sort } check_mission_control_running() { # "mc-tool list" returns failure when no accounts are found, so we # check if mission control is running via dbus directly dbus-send --print-reply --reply-timeout=2000 --session --dest=org.freedesktop.Telepathy.AccountManager /org/freedesktop/Telepathy/AccountManager org.freedesktop.DBus.Properties.GetAll string:org.freedesktop.Telepathy.AccountManager | grep ValidAccounts 2>&1 > /dev/null } get_modem_objpath_for_account() { echo "$(mc-tool show $1 | sed -n 's,.*modem-objpath = \(.*\)$,\1,p')" } existing_account_for_modem_objpath() { modem_obj_path=$1 for account in $EXISTING_OFONO_ACCOUNTS; do if [ "$(get_modem_objpath_for_account $account)" = "$modem_obj_path" ]; then echo "$account" fi done } retries=0 # make sure telepathy is correctly running before we setup the accounts while ! check_mission_control_running; do retries=$((retries+1)) echo "can't connect to mission-control via dbus, retrying $retries" if [ "$retries" -eq "10" ]; then echo "maximum retries reached, aborting" exit 1 fi sleep 1 done # migrate gsettings to accounts service @CMAKE_INSTALL_FULL_BINDIR@/phone-gsettings-migration.py # FIXME mission control for some reason does not start tp-ofono if there is no connection # even if always-dispatch is true on the account, this workaround fixes the problem dconf write /org/gnome/empathy/use-conn false 2>&1 > /dev/null # do not wait for a network connection to launch the connection managers dconf write /org/gnome/empathy/use-conn true 2>&1 > /dev/null EXISTING_OFONO_ACCOUNTS=$(get_telepathy_ofono_accounts) # iterate over all accounts to find duplicates for account in $EXISTING_OFONO_ACCOUNTS; do remove=0 modem_obj_path=$(get_modem_objpath_for_account $account) if [ -e $modem_obj_path ]; then # skip accounts with empty modem-objpath if any echo "account with empty modem-objpath found, removing it: $account" mc-tool remove $account 2>&1 > /dev/null continue fi for account2 in $EXISTING_OFONO_ACCOUNTS; do # ignore if same account and set flag to remove next ones if [ "$account" = "$account2" ]; then remove=1 continue; fi # check if this account was not removed already by this loop mc-tool show $account2 2>&1 > /dev/null if [ $? = 1 ]; then continue fi # check if modem-objpath is repeated if [ "$(get_modem_objpath_for_account $account2)" = "$modem_obj_path" ]; then echo "found duplicate account: $account2 modem: $modem_obj_path" mc-tool remove $account2 2>&1 > /dev/null fi done done # refresh account list after duplicates are removed EXISTING_OFONO_ACCOUNTS=$(get_telepathy_ofono_accounts) EXISTING_OFONO_ACCOUNTS_COUNT=$(get_telepathy_ofono_accounts | wc -l) MODEM_COUNT=0 # Do not run the legacy modem detection if newer ofono with binder interface is being used # Those accounts are created from there if ! command -v getprop || [ "$(getprop ro.build.version.sdk 99)" -ge "27" ]; then echo "Android SDK version 27 or greater detected. No modem detection will be made." for account in $EXISTING_OFONO_ACCOUNTS; do # Remove an eventual account that got here before the fix if [ -z "${account##*account*}" ]; then mc-tool remove $account 2>&1 > /dev/null fi done exit 0 fi # check if there is at least one modem if [ "$(getprop rild.libpath '')" != "" ]; then MODEM_COUNT=$(getprop ril.num_slots 1) fi if [ "$MODEM_COUNT" != "$EXISTING_OFONO_ACCOUNTS_COUNT" ]; then echo "modem count: $MODEM_COUNT" echo "existing ofono accounts: $EXISTING_OFONO_ACCOUNTS_COUNT" GSETTINGS_ARRAY="{" LAST_MODEM_INDEX="`expr $MODEM_COUNT - 1`" # check if all modems belong to at least one existing account for INDEX in $(seq 0 $LAST_MODEM_INDEX); do MODEM_OBJPATH=/ril_$INDEX # get previous name from gsettings if any EXISTING_NAME=$(python3 -c "array=$(gsettings get com.lomiri.phone sim-names); print (array[\"$MODEM_OBJPATH\"])") if [ -n "$EXISTING_NAME" ]; then NAME=$EXISTING_NAME else SIM_NAME=$(gettext -d telephony-service "SIM %1") # replace the %1 with the actual index NAME=$(echo $SIM_NAME | sed "s/%1$/$(($INDEX+1))/") fi if [ "" = "$(existing_account_for_modem_objpath $MODEM_OBJPATH)" ]; then echo "no account found for modem $MODEM_OBJPATH" ACCOUNT="account$INDEX" echo "creating ofono/ofono/$ACCOUNT" mc-tool add ofono/ofono $ACCOUNT string:modem-objpath=$MODEM_OBJPATH echo "enabling ofono/ofono/$ACCOUNT" mc-tool enable ofono/ofono/$ACCOUNT mc-tool auto-connect ofono/ofono/$ACCOUNT mc-tool display ofono/ofono/$ACCOUNT "$NAME" # append this entry to the gsettings array GSETTINGS_ARRAY="$GSETTINGS_ARRAY '$MODEM_OBJPATH': '$NAME'," else echo "account found for modem $MODEM_OBJPATH" # this account already exists, just take the name from gsettings GSETTINGS_ARRAY="$GSETTINGS_ARRAY '$MODEM_OBJPATH': '$NAME'," fi done # remove the last "," if present GSETTINGS_ARRAY="$(echo $GSETTINGS_ARRAY | sed 's/,$//g')}" # set names in gsettings gsettings set com.ubuntu.phone sim-names "$GSETTINGS_ARRAY" else echo "sanity check passed" fi telephony-service-0.5.3/tools/phone-gsettings-migration.py000066400000000000000000000037751455543255600240350ustar00rootroot00000000000000#!/usr/bin/python3 # Copyright 2016 Canonical # # This file is part of telephony-service. # # telephony-service is free software: you can redistribute it and/or modify it # under the terms of the GNU General Public License version 3, as published # by the Free Software Foundation. # this script is used to migrate existing settings from gsettings to accounts service import dbus import sys import os import os.path from pathlib import Path from gi.repository import Gio configFile = "accounts-service-migrated" configPath = os.environ['HOME'] + "/.config/telephony-service" configFilePath = configPath + "/" + configFile #create config dir if it does not exist os.makedirs(configPath, exist_ok=True) if os.path.isfile(configFilePath): sys.exit(0) # do not allow this script running again Path(configFilePath).touch() dict = {} proxy = dbus.SystemBus().get_object('org.freedesktop.Accounts','/org/freedesktop/Accounts/User%d' % os.getuid()) properties_manager = dbus.Interface(proxy, 'org.freedesktop.DBus.Properties') currentSimNames = properties_manager.Get('com.lomiri.touch.AccountsService.Phone', 'SimNames') print("Migrating gsettings to Accounts Service") gsettings = Gio.Settings.new('com.ubuntu.phone') currentSimNames = gsettings.get_value("sim-names") currentDefaultSimForCalls = gsettings.get_string("default-sim-for-calls") currentDefaultSimForMessages = gsettings.get_string("default-sim-for-messages") currentMmsGroupChatEnabled = gsettings.get_boolean("mms-group-chat-enabled") properties_manager.Set('com.lomiri.touch.AccountsService.Phone', 'DefaultSimForCalls', dbus.String(currentDefaultSimForCalls)) properties_manager.Set('com.lomiri.touch.AccountsService.Phone', 'DefaultSimForMessages', dbus.String(currentDefaultSimForMessages)) properties_manager.Set('com.lomiri.touch.AccountsService.Phone', 'MmsGroupChatEnabled', dbus.Boolean(currentMmsGroupChatEnabled)) if len(currentSimNames) > 0: properties_manager.Set('com.lomiri.touch.AccountsService.Phone', 'SimNames', dbus.Dictionary(currentSimNames))