summaryrefslogtreecommitdiffstats
path: root/kpilot/lib
diff options
context:
space:
mode:
Diffstat (limited to 'kpilot/lib')
-rw-r--r--kpilot/lib/CMakeLists.txt90
-rw-r--r--kpilot/lib/COPYING509
-rw-r--r--kpilot/lib/Makefile.am60
-rw-r--r--kpilot/lib/actionQueue.cc172
-rw-r--r--kpilot/lib/actionQueue.h162
-rw-r--r--kpilot/lib/actions.cc137
-rw-r--r--kpilot/lib/actions.h115
-rw-r--r--kpilot/lib/idmapper.cc247
-rw-r--r--kpilot/lib/idmapper.h159
-rw-r--r--kpilot/lib/idmapperxml.cc213
-rw-r--r--kpilot/lib/idmapperxml.h84
-rw-r--r--kpilot/lib/idmapping.cc89
-rw-r--r--kpilot/lib/idmapping.h66
-rw-r--r--kpilot/lib/kpilotdevicelink.cc966
-rw-r--r--kpilot/lib/kpilotdevicelink.h220
-rw-r--r--kpilot/lib/kpilotdevicelinkPrivate.h330
-rw-r--r--kpilot/lib/kpilotlib.kcfg9
-rw-r--r--kpilot/lib/kpilotlibSettings.kcfgc7
-rw-r--r--kpilot/lib/kpilotlink.cc272
-rw-r--r--kpilot/lib/kpilotlink.h501
-rw-r--r--kpilot/lib/kpilotlocallink.cc368
-rw-r--r--kpilot/lib/kpilotlocallink.h95
-rw-r--r--kpilot/lib/options.cc157
-rw-r--r--kpilot/lib/options.h199
-rw-r--r--kpilot/lib/pilot.cc264
-rw-r--r--kpilot/lib/pilot.h410
-rw-r--r--kpilot/lib/pilotAddress.cc636
-rw-r--r--kpilot/lib/pilotAddress.h339
-rw-r--r--kpilot/lib/pilotAppInfo.cc77
-rw-r--r--kpilot/lib/pilotAppInfo.h216
-rw-r--r--kpilot/lib/pilotCard.h65
-rw-r--r--kpilot/lib/pilotDatabase.cc112
-rw-r--r--kpilot/lib/pilotDatabase.h272
-rw-r--r--kpilot/lib/pilotDateEntry.cc478
-rw-r--r--kpilot/lib/pilotDateEntry.h388
-rw-r--r--kpilot/lib/pilotLinkVersion.h60
-rw-r--r--kpilot/lib/pilotLocalDatabase.cc762
-rw-r--r--kpilot/lib/pilotLocalDatabase.h201
-rw-r--r--kpilot/lib/pilotMemo.cc135
-rw-r--r--kpilot/lib/pilotMemo.h105
-rw-r--r--kpilot/lib/pilotRecord.cc132
-rw-r--r--kpilot/lib/pilotRecord.h355
-rw-r--r--kpilot/lib/pilotSerialDatabase.cc432
-rw-r--r--kpilot/lib/pilotSerialDatabase.h144
-rw-r--r--kpilot/lib/pilotSysInfo.h144
-rw-r--r--kpilot/lib/pilotTodoEntry.cc270
-rw-r--r--kpilot/lib/pilotTodoEntry.h166
-rw-r--r--kpilot/lib/pilotUser.h128
-rw-r--r--kpilot/lib/plugin.cc760
-rw-r--r--kpilot/lib/plugin.h476
-rw-r--r--kpilot/lib/pluginfactory.h98
-rw-r--r--kpilot/lib/recordConduit.cc1145
-rw-r--r--kpilot/lib/recordConduit.h181
-rw-r--r--kpilot/lib/syncAction.cc512
-rw-r--r--kpilot/lib/syncAction.h410
55 files changed, 0 insertions, 15100 deletions
diff --git a/kpilot/lib/CMakeLists.txt b/kpilot/lib/CMakeLists.txt
deleted file mode 100644
index efc36ce59..000000000
--- a/kpilot/lib/CMakeLists.txt
+++ /dev/null
@@ -1,90 +0,0 @@
-include(CheckIncludeFiles)
-include(CheckFunctionExists)
-
-check_include_files( stdint.h HAVE_STDINT_H )
-check_include_files( alloca.h HAVE_ALLOCA_H )
-check_include_files( "sys/time.h" HAVE_SYS_TIME_H )
-check_include_files( "sys/stat.h" HAVE_SYS_STAT_H )
-check_function_exists( cfsetspeed HAVE_CFSETSPEED )
-check_function_exists( strdup HAVE_STRDUP )
-check_function_exists( setenv HAVE_SETENV )
-check_function_exists( unsetenv HAVE_UNSETENV )
-check_function_exists( usleep HAVE_USLEEP )
-check_function_exists( random HAVE_RANDOM )
-check_function_exists( putenv HAVE_PUTENV )
-check_function_exists( seteuid HAVE_SETEUID )
-check_function_exists( mkstemps HAVE_MKSTEMPS )
-check_function_exists( mkstemp HAVE_MKSTEMP )
-check_function_exists( mkdtemp HAVE_MKDTEMP )
-check_function_exists( revoke HAVE_REVOKE )
-check_function_exists( strlcpy HAVE_STRLCPY )
-check_function_exists( strlcat HAVE_STRLCAT )
-check_function_exists( inet_aton HAVE_INET_ATON )
-
-configure_file(
- ${CMAKE_SOURCE_DIR}/config.h.cmake
- ${CMAKE_CURRENT_BINARY_DIR}/config.h
-)
-
-include_directories(${CMAKE_CURRENT_BINARY_DIR})
-
-set(lib_SRCS
- options.cc
- plugin.cc
- syncAction.cc
- actions.cc
- actionQueue.cc
- idmapping.cc
- idmapperxml.cc
- idmapper.cc
- kpilotlink.cc
- kpilotdevicelink.cc
- kpilotlocallink.cc
- pilot.cc
- pilotAppInfo.cc
- pilotRecord.cc
- pilotDatabase.cc
- pilotLocalDatabase.cc
- pilotSerialDatabase.cc
- pilotMemo.cc
- pilotAddress.cc
- pilotDateEntry.cc
- pilotTodoEntry.cc
-)
-
-kde3_automoc(${lib_SRCS})
-kde3_add_kcfg_files(lib_SRCS kpilotlibSettings.kcfgc)
-add_library(kpilot SHARED ${lib_SRCS})
-target_link_libraries(kpilot ${PILOTLINK_LIBRARY} ${QT_LIBRARIES} kdeui kio)
-kpilot_rpath(kpilot)
-
-#---------- INSTALL -----------------------*
-set(kpilotinclude_HEADERS
- kpilotlink.h
- kpilotdevicelink.h
- kpilotlocallink.h
- pilot.h
- pilotDatabase.h
- pilotLinkVersion.h
- pilotLocalDatabase.h
- pilotRecord.h
- pilotSerialDatabase.h
- plugin.h
- pluginfactory.h
- syncAction.h
-)
-
-install(
- TARGETS kpilot
- LIBRARY DESTINATION ${CMAKE_INSTALL_PREFIX}/lib
-)
-
-install(
- FILES ${kpilotinclude_HEADERS}
- DESTINATION ${CMAKE_INSTALL_PREFIX}/include/kpilot
-)
-
-install(
- FILES kpilotlib.kcfg DESTINATION ${KDE3_KCFG_DIR}
-)
-
diff --git a/kpilot/lib/COPYING b/kpilot/lib/COPYING
deleted file mode 100644
index 7bbb8e8bd..000000000
--- a/kpilot/lib/COPYING
+++ /dev/null
@@ -1,509 +0,0 @@
-[This license applies only to the contents of the lib/ directory,
-whereas the rest of KPilot is under the regular GNU GENERAL PUBLIC
-LICENSE. This has been done to ensure that non-GPL yet LGPL-compatibly
-licensed plugins may be written for KPilot.]
-
- GNU LESSER GENERAL PUBLIC LICENSE
- Version 2.1, February 1999
-
- Copyright (C) 1991, 1999 Free Software Foundation, Inc.
- 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-[This is the first released version of the Lesser GPL. It also counts
- as the successor of the GNU Library Public License, version 2, hence
- the version number 2.1.]
-
- Preamble
-
- The licenses for most software are designed to take away your
-freedom to share and change it. By contrast, the GNU General Public
-Licenses are intended to guarantee your freedom to share and change
-free software--to make sure the software is free for all its users.
-
- This license, the Lesser General Public License, applies to some
-specially designated software packages--typically libraries--of the
-Free Software Foundation and other authors who decide to use it. You
-can use it too, but we suggest you first think carefully about whether
-this license or the ordinary General Public License is the better
-strategy to use in any particular case, based on the explanations below.
-
- When we speak of free software, we are referring to freedom of use,
-not price. Our General Public Licenses are designed to make sure that
-you have the freedom to distribute copies of free software (and charge
-for this service if you wish); that you receive source code or can get
-it if you want it; that you can change the software and use pieces of
-it in new free programs; and that you are informed that you can do
-these things.
-
- To protect your rights, we need to make restrictions that forbid
-distributors to deny you these rights or to ask you to surrender these
-rights. These restrictions translate to certain responsibilities for
-you if you distribute copies of the library or if you modify it.
-
- For example, if you distribute copies of the library, whether gratis
-or for a fee, you must give the recipients all the rights that we gave
-you. You must make sure that they, too, receive or can get the source
-code. If you link other code with the library, you must provide
-complete object files to the recipients, so that they can relink them
-with the library after making changes to the library and recompiling
-it. And you must show them these terms so they know their rights.
-
- We protect your rights with a two-step method: (1) we copyright the
-library, and (2) we offer you this license, which gives you legal
-permission to copy, distribute and/or modify the library.
-
- To protect each distributor, we want to make it very clear that
-there is no warranty for the free library. Also, if the library is
-modified by someone else and passed on, the recipients should know
-that what they have is not the original version, so that the original
-author's reputation will not be affected by problems that might be
-introduced by others.
-
- Finally, software patents pose a constant threat to the existence of
-any free program. We wish to make sure that a company cannot
-effectively restrict the users of a free program by obtaining a
-restrictive license from a patent holder. Therefore, we insist that
-any patent license obtained for a version of the library must be
-consistent with the full freedom of use specified in this license.
-
- Most GNU software, including some libraries, is covered by the
-ordinary GNU General Public License. This license, the GNU Lesser
-General Public License, applies to certain designated libraries, and
-is quite different from the ordinary General Public License. We use
-this license for certain libraries in order to permit linking those
-libraries into non-free programs.
-
- When a program is linked with a library, whether statically or using
-a shared library, the combination of the two is legally speaking a
-combined work, a derivative of the original library. The ordinary
-General Public License therefore permits such linking only if the
-entire combination fits its criteria of freedom. The Lesser General
-Public License permits more lax criteria for linking other code with
-the library.
-
- We call this license the "Lesser" General Public License because it
-does Less to protect the user's freedom than the ordinary General
-Public License. It also provides other free software developers Less
-of an advantage over competing non-free programs. These disadvantages
-are the reason we use the ordinary General Public License for many
-libraries. However, the Lesser license provides advantages in certain
-special circumstances.
-
- For example, on rare occasions, there may be a special need to
-encourage the widest possible use of a certain library, so that it becomes
-a de-facto standard. To achieve this, non-free programs must be
-allowed to use the library. A more frequent case is that a free
-library does the same job as widely used non-free libraries. In this
-case, there is little to gain by limiting the free library to free
-software only, so we use the Lesser General Public License.
-
- In other cases, permission to use a particular library in non-free
-programs enables a greater number of people to use a large body of
-free software. For example, permission to use the GNU C Library in
-non-free programs enables many more people to use the whole GNU
-operating system, as well as its variant, the GNU/Linux operating
-system.
-
- Although the Lesser General Public License is Less protective of the
-users' freedom, it does ensure that the user of a program that is
-linked with the Library has the freedom and the wherewithal to run
-that program using a modified version of the Library.
-
- The precise terms and conditions for copying, distribution and
-modification follow. Pay close attention to the difference between a
-"work based on the library" and a "work that uses the library". The
-former contains code derived from the library, whereas the latter must
-be combined with the library in order to run.
-
- GNU LESSER GENERAL PUBLIC LICENSE
- TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-
- 0. This License Agreement applies to any software library or other
-program which contains a notice placed by the copyright holder or
-other authorized party saying it may be distributed under the terms of
-this Lesser General Public License (also called "this License").
-Each licensee is addressed as "you".
-
- A "library" means a collection of software functions and/or data
-prepared so as to be conveniently linked with application programs
-(which use some of those functions and data) to form executables.
-
- The "Library", below, refers to any such software library or work
-which has been distributed under these terms. A "work based on the
-Library" means either the Library or any derivative work under
-copyright law: that is to say, a work containing the Library or a
-portion of it, either verbatim or with modifications and/or translated
-straightforwardly into another language. (Hereinafter, translation is
-included without limitation in the term "modification".)
-
- "Source code" for a work means the preferred form of the work for
-making modifications to it. For a library, complete source code means
-all the source code for all modules it contains, plus any associated
-interface definition files, plus the scripts used to control compilation
-and installation of the library.
-
- Activities other than copying, distribution and modification are not
-covered by this License; they are outside its scope. The act of
-running a program using the Library is not restricted, and output from
-such a program is covered only if its contents constitute a work based
-on the Library (independent of the use of the Library in a tool for
-writing it). Whether that is true depends on what the Library does
-and what the program that uses the Library does.
-
- 1. You may copy and distribute verbatim copies of the Library's
-complete source code as you receive it, in any medium, provided that
-you conspicuously and appropriately publish on each copy an
-appropriate copyright notice and disclaimer of warranty; keep intact
-all the notices that refer to this License and to the absence of any
-warranty; and distribute a copy of this License along with the
-Library.
-
- You may charge a fee for the physical act of transferring a copy,
-and you may at your option offer warranty protection in exchange for a
-fee.
-
- 2. You may modify your copy or copies of the Library or any portion
-of it, thus forming a work based on the Library, and copy and
-distribute such modifications or work under the terms of Section 1
-above, provided that you also meet all of these conditions:
-
- a) The modified work must itself be a software library.
-
- b) You must cause the files modified to carry prominent notices
- stating that you changed the files and the date of any change.
-
- c) You must cause the whole of the work to be licensed at no
- charge to all third parties under the terms of this License.
-
- d) If a facility in the modified Library refers to a function or a
- table of data to be supplied by an application program that uses
- the facility, other than as an argument passed when the facility
- is invoked, then you must make a good faith effort to ensure that,
- in the event an application does not supply such function or
- table, the facility still operates, and performs whatever part of
- its purpose remains meaningful.
-
- (For example, a function in a library to compute square roots has
- a purpose that is entirely well-defined independent of the
- application. Therefore, Subsection 2d requires that any
- application-supplied function or table used by this function must
- be optional: if the application does not supply it, the square
- root function must still compute square roots.)
-
-These requirements apply to the modified work as a whole. If
-identifiable sections of that work are not derived from the Library,
-and can be reasonably considered independent and separate works in
-themselves, then this License, and its terms, do not apply to those
-sections when you distribute them as separate works. But when you
-distribute the same sections as part of a whole which is a work based
-on the Library, the distribution of the whole must be on the terms of
-this License, whose permissions for other licensees extend to the
-entire whole, and thus to each and every part regardless of who wrote
-it.
-
-Thus, it is not the intent of this section to claim rights or contest
-your rights to work written entirely by you; rather, the intent is to
-exercise the right to control the distribution of derivative or
-collective works based on the Library.
-
-In addition, mere aggregation of another work not based on the Library
-with the Library (or with a work based on the Library) on a volume of
-a storage or distribution medium does not bring the other work under
-the scope of this License.
-
- 3. You may opt to apply the terms of the ordinary GNU General Public
-License instead of this License to a given copy of the Library. To do
-this, you must alter all the notices that refer to this License, so
-that they refer to the ordinary GNU General Public License, version 2,
-instead of to this License. (If a newer version than version 2 of the
-ordinary GNU General Public License has appeared, then you can specify
-that version instead if you wish.) Do not make any other change in
-these notices.
-
- Once this change is made in a given copy, it is irreversible for
-that copy, so the ordinary GNU General Public License applies to all
-subsequent copies and derivative works made from that copy.
-
- This option is useful when you wish to copy part of the code of
-the Library into a program that is not a library.
-
- 4. You may copy and distribute the Library (or a portion or
-derivative of it, under Section 2) in object code or executable form
-under the terms of Sections 1 and 2 above provided that you accompany
-it with the complete corresponding machine-readable source code, which
-must be distributed under the terms of Sections 1 and 2 above on a
-medium customarily used for software interchange.
-
- If distribution of object code is made by offering access to copy
-from a designated place, then offering equivalent access to copy the
-source code from the same place satisfies the requirement to
-distribute the source code, even though third parties are not
-compelled to copy the source along with the object code.
-
- 5. A program that contains no derivative of any portion of the
-Library, but is designed to work with the Library by being compiled or
-linked with it, is called a "work that uses the Library". Such a
-work, in isolation, is not a derivative work of the Library, and
-therefore falls outside the scope of this License.
-
- However, linking a "work that uses the Library" with the Library
-creates an executable that is a derivative of the Library (because it
-contains portions of the Library), rather than a "work that uses the
-library". The executable is therefore covered by this License.
-Section 6 states terms for distribution of such executables.
-
- When a "work that uses the Library" uses material from a header file
-that is part of the Library, the object code for the work may be a
-derivative work of the Library even though the source code is not.
-Whether this is true is especially significant if the work can be
-linked without the Library, or if the work is itself a library. The
-threshold for this to be true is not precisely defined by law.
-
- If such an object file uses only numerical parameters, data
-structure layouts and accessors, and small macros and small inline
-functions (ten lines or less in length), then the use of the object
-file is unrestricted, regardless of whether it is legally a derivative
-work. (Executables containing this object code plus portions of the
-Library will still fall under Section 6.)
-
- Otherwise, if the work is a derivative of the Library, you may
-distribute the object code for the work under the terms of Section 6.
-Any executables containing that work also fall under Section 6,
-whether or not they are linked directly with the Library itself.
-
- 6. As an exception to the Sections above, you may also combine or
-link a "work that uses the Library" with the Library to produce a
-work containing portions of the Library, and distribute that work
-under terms of your choice, provided that the terms permit
-modification of the work for the customer's own use and reverse
-engineering for debugging such modifications.
-
- You must give prominent notice with each copy of the work that the
-Library is used in it and that the Library and its use are covered by
-this License. You must supply a copy of this License. If the work
-during execution displays copyright notices, you must include the
-copyright notice for the Library among them, as well as a reference
-directing the user to the copy of this License. Also, you must do one
-of these things:
-
- a) Accompany the work with the complete corresponding
- machine-readable source code for the Library including whatever
- changes were used in the work (which must be distributed under
- Sections 1 and 2 above); and, if the work is an executable linked
- with the Library, with the complete machine-readable "work that
- uses the Library", as object code and/or source code, so that the
- user can modify the Library and then relink to produce a modified
- executable containing the modified Library. (It is understood
- that the user who changes the contents of definitions files in the
- Library will not necessarily be able to recompile the application
- to use the modified definitions.)
-
- b) Use a suitable shared library mechanism for linking with the
- Library. A suitable mechanism is one that (1) uses at run time a
- copy of the library already present on the user's computer system,
- rather than copying library functions into the executable, and (2)
- will operate properly with a modified version of the library, if
- the user installs one, as long as the modified version is
- interface-compatible with the version that the work was made with.
-
- c) Accompany the work with a written offer, valid for at
- least three years, to give the same user the materials
- specified in Subsection 6a, above, for a charge no more
- than the cost of performing this distribution.
-
- d) If distribution of the work is made by offering access to copy
- from a designated place, offer equivalent access to copy the above
- specified materials from the same place.
-
- e) Verify that the user has already received a copy of these
- materials or that you have already sent this user a copy.
-
- For an executable, the required form of the "work that uses the
-Library" must include any data and utility programs needed for
-reproducing the executable from it. However, as a special exception,
-the materials to be distributed need not include anything that is
-normally distributed (in either source or binary form) with the major
-components (compiler, kernel, and so on) of the operating system on
-which the executable runs, unless that component itself accompanies
-the executable.
-
- It may happen that this requirement contradicts the license
-restrictions of other proprietary libraries that do not normally
-accompany the operating system. Such a contradiction means you cannot
-use both them and the Library together in an executable that you
-distribute.
-
- 7. You may place library facilities that are a work based on the
-Library side-by-side in a single library together with other library
-facilities not covered by this License, and distribute such a combined
-library, provided that the separate distribution of the work based on
-the Library and of the other library facilities is otherwise
-permitted, and provided that you do these two things:
-
- a) Accompany the combined library with a copy of the same work
- based on the Library, uncombined with any other library
- facilities. This must be distributed under the terms of the
- Sections above.
-
- b) Give prominent notice with the combined library of the fact
- that part of it is a work based on the Library, and explaining
- where to find the accompanying uncombined form of the same work.
-
- 8. You may not copy, modify, sublicense, link with, or distribute
-the Library except as expressly provided under this License. Any
-attempt otherwise to copy, modify, sublicense, link with, or
-distribute the Library is void, and will automatically terminate your
-rights under this License. However, parties who have received copies,
-or rights, from you under this License will not have their licenses
-terminated so long as such parties remain in full compliance.
-
- 9. You are not required to accept this License, since you have not
-signed it. However, nothing else grants you permission to modify or
-distribute the Library or its derivative works. These actions are
-prohibited by law if you do not accept this License. Therefore, by
-modifying or distributing the Library (or any work based on the
-Library), you indicate your acceptance of this License to do so, and
-all its terms and conditions for copying, distributing or modifying
-the Library or works based on it.
-
- 10. Each time you redistribute the Library (or any work based on the
-Library), the recipient automatically receives a license from the
-original licensor to copy, distribute, link with or modify the Library
-subject to these terms and conditions. You may not impose any further
-restrictions on the recipients' exercise of the rights granted herein.
-You are not responsible for enforcing compliance by third parties with
-this License.
-
- 11. If, as a consequence of a court judgment or allegation of patent
-infringement or for any other reason (not limited to patent issues),
-conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License. If you cannot
-distribute so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you
-may not distribute the Library at all. For example, if a patent
-license would not permit royalty-free redistribution of the Library by
-all those who receive copies directly or indirectly through you, then
-the only way you could satisfy both it and this License would be to
-refrain entirely from distribution of the Library.
-
-If any portion of this section is held invalid or unenforceable under any
-particular circumstance, the balance of the section is intended to apply,
-and the section as a whole is intended to apply in other circumstances.
-
-It is not the purpose of this section to induce you to infringe any
-patents or other property right claims or to contest validity of any
-such claims; this section has the sole purpose of protecting the
-integrity of the free software distribution system which is
-implemented by public license practices. Many people have made
-generous contributions to the wide range of software distributed
-through that system in reliance on consistent application of that
-system; it is up to the author/donor to decide if he or she is willing
-to distribute software through any other system and a licensee cannot
-impose that choice.
-
-This section is intended to make thoroughly clear what is believed to
-be a consequence of the rest of this License.
-
- 12. If the distribution and/or use of the Library is restricted in
-certain countries either by patents or by copyrighted interfaces, the
-original copyright holder who places the Library under this License may add
-an explicit geographical distribution limitation excluding those countries,
-so that distribution is permitted only in or among countries not thus
-excluded. In such case, this License incorporates the limitation as if
-written in the body of this License.
-
- 13. The Free Software Foundation may publish revised and/or new
-versions of the Lesser 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 Library
-specifies a version number of this License which applies to it and
-"any later version", you have the option of following the terms and
-conditions either of that version or of any later version published by
-the Free Software Foundation. If the Library does not specify a
-license version number, you may choose any version ever published by
-the Free Software Foundation.
-
- 14. If you wish to incorporate parts of the Library into other free
-programs whose distribution conditions are incompatible with these,
-write to the author to ask for permission. For software which is
-copyrighted by the Free Software Foundation, write to the Free
-Software Foundation; we sometimes make exceptions for this. Our
-decision will be guided by the two goals of preserving the free status
-of all derivatives of our free software and of promoting the sharing
-and reuse of software generally.
-
- NO WARRANTY
-
- 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
-WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
-EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
-OTHER PARTIES PROVIDE THE LIBRARY "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
-LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
-THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-
- 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
-WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
-AND/OR REDISTRIBUTE THE LIBRARY 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
-LIBRARY (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 LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
-SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
-DAMAGES.
-
- END OF TERMS AND CONDITIONS
-
- How to Apply These Terms to Your New Libraries
-
- If you develop a new library, and you want it to be of the greatest
-possible use to the public, we recommend making it free software that
-everyone can redistribute and change. You can do so by permitting
-redistribution under these terms (or, alternatively, under the terms of the
-ordinary General Public License).
-
- To apply these terms, attach the following notices to the library. It is
-safest to attach them to the start of each source file to most effectively
-convey the exclusion of warranty; and each file should have at least the
-"copyright" line and a pointer to where the full notice is found.
-
- <one line to give the library's name and a brief idea of what it does.>
- Copyright (C) <year> <name of author>
-
- This library 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; either
- version 2.1 of the License, or (at your option) any later version.
-
- This library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with this library; if not, write to the Free Software
- Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
-
-Also add information on how to contact you by electronic and paper mail.
-
-You should also get your employer (if you work as a programmer) or your
-school, if any, to sign a "copyright disclaimer" for the library, if
-necessary. Here is a sample; alter the names:
-
- Yoyodyne, Inc., hereby disclaims all copyright interest in the
- library `Frob' (a library for tweaking knobs) written by James Random Hacker.
-
- <signature of Ty Coon>, 1 April 1990
- Ty Coon, President of Vice
-
-That's all there is to it!
-
-
diff --git a/kpilot/lib/Makefile.am b/kpilot/lib/Makefile.am
deleted file mode 100644
index b2ceadf1f..000000000
--- a/kpilot/lib/Makefile.am
+++ /dev/null
@@ -1,60 +0,0 @@
-### Makefile.am for kpilot/lib
-###
-###
-
-METASOURCES = AUTO
-
-INCLUDES = $(PISOCK_INCLUDE) -I$(top_srcdir) $(all_includes)
-
-### If you must get debugging output on a platform where
-### the libs are built without debugging support, define
-### DEBUG_CERR. Define DEBUG to get debugging support anywhere.
-###
-### KDE_CXXFLAGS=-DDEBUG -DDEBUG_CERR
-##KDE_CXXFLAGS=-DNDEBUG -UDEBUG
-##KDE_CXXFLAGS=-DDEBUG
-
-lib_LTLIBRARIES = libkpilot.la
-
-libkpilot_la_SOURCES = kpilotlibSettings.kcfgc \
- options.cc plugin.cc syncAction.cc \
- kpilotlink.cc kpilotdevicelink.cc kpilotlocallink.cc \
- actions.cc actionQueue.cc \
- pilot.cc \
- pilotAppInfo.cc pilotRecord.cc pilotDatabase.cc \
- pilotLocalDatabase.cc pilotSerialDatabase.cc \
- pilotMemo.cc \
- pilotAddress.cc \
- pilotDateEntry.cc \
- pilotTodoEntry.cc
-
-libkpilot_la_LDFLAGS = $(PISOCK_LDFLAGS) -no-undefined $(all_libraries) $(KDE_EXTRA_RPATH) $(KDE_RPATH)
-libkpilot_la_LIBADD = $(PISOCK_LIB) $(LIB_KDEUI) $(LIB_KABC) $(top_builddir)/libkcal/libkcal.la
-
-kpilotincludedir = $(includedir)/kpilot
-kpilotinclude_HEADERS = \
- kpilotlink.h kpilotlocallink.h kpilotdevicelink.h \
- pilot.h \
- pilotDatabase.h \
- pilotLinkVersion.h \
- pilotLocalDatabase.h \
- pilotRecord.h \
- pilotSerialDatabase.h \
- plugin.h \
- pluginfactory.h \
- syncAction.h
-
-
-kde_kcfg_DATA = kpilotlib.kcfg
-
-check-local:
- rm -f FAILED
- for i in $(srcdir)/*.h ; do \
- ( echo "#include <kdemacros.h>" ; echo "#include \"$$i\"" ; echo "int main(int argc,char **argv){return 0;}" ) > header-test.cc; \
- echo "$$i" ; \
- g++ $(all_includes) -I$(top_builddir) -DQT_THREAD_SUPPORT -c header-test.cc || echo "$$i" >> FAILED; \
- done
- test ! -e FAILED
-
-DOXYGEN_REFERENCES=libkcal kdecore
-include $(top_srcdir)/admin/Doxyfile.am
diff --git a/kpilot/lib/actionQueue.cc b/kpilot/lib/actionQueue.cc
deleted file mode 100644
index 693629731..000000000
--- a/kpilot/lib/actionQueue.cc
+++ /dev/null
@@ -1,172 +0,0 @@
-/* KPilot
-**
-** Copyright (C) 1998-2001 by Dan Pilone
-** Copyright (C) 2003-2004 Reinhold Kainhofer <reinhold@kainhofer.com>
-**
-** This defines the "ActionQueue", which is the pile of actions
-** that will occur during a HotSync.
-*/
-
-/*
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU General Public License as published by
-** the Free Software Foundation; either version 2 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-** GNU General Public License for more details.
-**
-** You should have received a copy of the GNU General Public License
-** along with this program in a file called COPYING; if not, write to
-** the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
-** MA 02110-1301, USA.
-*/
-
-/*
-** Bug reports and questions can be sent to kde-pim@kde.org
-*/
-#include "options.h"
-
-#include <tqtimer.h>
-
-#include "actions.h"
-#include "plugin.h"
-
-#include "actionQueue.moc"
-
-
-
-
-ActionQueue::ActionQueue(KPilotLink *d) :
- SyncAction(d,"ActionQueue")
- // The string lists have default constructors
-{
- FUNCTIONSETUP;
-}
-
-ActionQueue::~ActionQueue()
-{
- FUNCTIONSETUP;
- clear();
-}
-
-void ActionQueue::clear()
-{
- SyncAction *del = 0L;
- while ( (del = nextAction()) )
- {
- delete del;
- }
-
- Q_ASSERT(isEmpty());
-}
-
-void ActionQueue::queueInit()
-{
- FUNCTIONSETUP;
-
- addAction(new WelcomeAction(fHandle));
-}
-
-void ActionQueue::queueConduits(const TQStringList &l,
- const SyncAction::SyncMode &m)
-{
- FUNCTIONSETUP;
-
- // Add conduits here ...
- //
- //
- for (TQStringList::ConstIterator it = l.begin();
- it != l.end();
- ++it)
- {
- if ((*it).startsWith(CSL1("internal_")))
- {
-#ifdef DEBUG
- DEBUGKPILOT << fname <<
- ": Ignoring conduit " << *it << endl;
-#endif
- continue;
- }
-
-#ifdef DEBUG
- DEBUGKPILOT << fname
- << ": Creating proxy with mode=" << m.name() << endl;
-#endif
- ConduitProxy *cp = new ConduitProxy(fHandle,*it,m);
- addAction(cp);
- }
-}
-
-void ActionQueue::queueCleanup()
-{
- addAction(new CleanupAction(fHandle));
-}
-
-bool ActionQueue::exec()
-{
- actionCompleted(0L);
- return true;
-}
-
-void ActionQueue::actionCompleted(SyncAction *b)
-{
- FUNCTIONSETUP;
-
- if (b)
- {
-#ifdef DEBUG
- DEBUGKPILOT << fname
- << ": Completed action "
- << b->name()
- << endl;
-#endif
- delete b;
- }
-
- if (isEmpty())
- {
- delayDone();
- return;
- }
- if ( deviceLink() && (!deviceLink()->tickle()) )
- {
- emit logError(i18n("The connection to the handheld "
- "was lost. Synchronization cannot continue."));
- clear();
- delayDone();
- return;
- }
-
- SyncAction *a = nextAction();
-
- if (!a)
- {
- WARNINGKPILOT << "NULL action on stack."
- << endl;
- return;
- }
-
-#ifdef DEBUG
- DEBUGKPILOT << fname
- << ": Will run action "
- << a->name()
- << endl;
-#endif
-
- TQObject::connect(a, TQT_SIGNAL(logMessage(const TQString &)),
- this, TQT_SIGNAL(logMessage(const TQString &)));
- TQObject::connect(a, TQT_SIGNAL(logError(const TQString &)),
- this, TQT_SIGNAL(logMessage(const TQString &)));
- TQObject::connect(a, TQT_SIGNAL(logProgress(const TQString &, int)),
- this, TQT_SIGNAL(logProgress(const TQString &, int)));
- TQObject::connect(a, TQT_SIGNAL(syncDone(SyncAction *)),
- this, TQT_SLOT(actionCompleted(SyncAction *)));
-
- // Run the action picked from the queue when we get back
- // to the event loop.
- TQTimer::singleShot(0,a,TQT_SLOT(execConduit()));
-}
-
diff --git a/kpilot/lib/actionQueue.h b/kpilot/lib/actionQueue.h
deleted file mode 100644
index 057b4beb0..000000000
--- a/kpilot/lib/actionQueue.h
+++ /dev/null
@@ -1,162 +0,0 @@
-#ifndef _KPILOT_ACTIONQUEUE_H
-#define _KPILOT_ACTIONQUEUE_H
-/*
-**
-** Copyright (C) 1998-2001,2003 by Dan Pilone
-** Copyright (C) 2003-2004 Reinhold Kainhofer <reinhold@kainhofer.com>
-**
-*/
-
-/*
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU General Public License as published by
-** the Free Software Foundation; either version 2 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-** GNU General Public License for more details.
-**
-** You should have received a copy of the GNU General Public License
-** along with this program in a file called COPYING; if not, write to
-** the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
-** MA 02110-1301, USA.
-*/
-
-/*
-** Bug reports and questions can be sent to kde-pim@kde.org
-*/
-
-#include <tqptrqueue.h>
-
-#include "syncAction.h"
-
-/** @file
-* This file defines the ActionQueue.
-*
-* This used to be called SyncStack, and while a stack is cool
-* for some things, it actually rather confuses the issue because
-* you _use_ this class for specifying "do this, then that, then ..."
-* and in program code you need to reverse that order when adding
-* items to a stack. So now it's a Queue, FIFO, and program
-* code looks more normal.
-*/
-
-/**
-* The ActionQueue is a meta-action, which handles running a bunch of
-* SyncActions in sequence. It is a SyncAction itself, so it can even
-* be queued on another ActionQueue.
-*
-* An ActionQueue is constructed with a @p device. As usual, you should
-* connect the device's deviceReady() signal with the exec() slot --
-* or something to that effect. The ActionQueue will then run all the
-* actions in the queue in sequence.
-*
-*/
-KDE_EXPORT class ActionQueue : public SyncAction
-{
-Q_OBJECT
-public:
- /**
- * Constructor. Pass in a KPilot device link for it to act on.
- * It is legal to pass in 0 (NULL) as a device. Ownership of
- * the device is unchanged.
- */
- ActionQueue(KPilotLink *device);
-
- /** Destructor. */
- virtual ~ActionQueue();
-
- /** Is the queue empty? Returns @c true if it is. */
- bool isEmpty() const
- {
- return SyncActionQueue.isEmpty();
- };
-
- /**
- * You can push your own action @p a onto the queue. Ownership
- * of the action is given to the ActionQueue object.
- */
- void addAction(SyncAction *a)
- {
- SyncActionQueue.enqueue(a);
- };
-
-public:
- /*
- * Call these queue*() functions to append standard functional
- * blocks. You should at least call queueInit() and
- * queueCleanup() to add the welcome and cleanup actions to
- * the queue (unless you do that yourself.)
- *
- * For queueInit, a WelcomeAction is added.
- * For queueConduits, whatever is relevant for the conduits
- * can be used, usually things in the FlagMask and ActionMask.
- * The list of conduits in @p conduits is queued automatically.
- */
-
- /**
- * Initialize the queue. This empties it out and adds a
- * welcome action (see WelcomeAction in actions.h) so that
- * the user knows what is happening when the ActionQueue
- * begins to execute. Equivalent to
- * @code
- * clear(); addAction(new WelcomeAction);
- * @endcode
- */
- void queueInit();
-
- /**
- * Queue a (series) of conduits @p conduits with a given
- * sync mode @p mode. Each of the conduits named is called
- * through a ConduitProxy object which handles loading the
- * conduit's shared library and creating the actual SyncAction
- * for that conduit. Actions named "internal_*" are silently
- * ignored since those names are used by KPilot internally
- * for administrative purposes.
- */
- void queueConduits(const TQStringList &conduits,
- const SyncAction::SyncMode &mode);
-
- /**
- * Convenience function for adding a cleanup action (see
- * CleanupAction in actions.h) to the queue. Should be the
- * last action added to the queue because a HotSync can only
- * have @em one cleanup.
- */
- void queueCleanup();
-
-protected:
- /**
- * Remove all the actions from the queue and delete them
- * (the queue owns the actions, after all).
- */
- void clear();
-
- /**
- * Dequeue the next action in the queue, ready for processing.
- * This takes the action off the queue, so remember to delete it
- * eventually.
- */
- SyncAction *nextAction()
- {
- return SyncActionQueue.dequeue();
- };
-
- /** Reimplemented from SyncAction. */
- virtual bool exec();
-
-protected slots:
- /**
- * When one action finishes, start the next one.
- */
- void actionCompleted(SyncAction *);
-
-private:
- /** A queue of actions to take. */
- TQPtrQueue < SyncAction > SyncActionQueue;
-};
-
-
-#endif
diff --git a/kpilot/lib/actions.cc b/kpilot/lib/actions.cc
deleted file mode 100644
index 212540f7f..000000000
--- a/kpilot/lib/actions.cc
+++ /dev/null
@@ -1,137 +0,0 @@
-/* KPilot
-**
-** Copyright (C) 1998-2001 by Dan Pilone
-** Copyright (C) 2003-2004 Reinhold Kainhofer <reinhold@kainhofer.com>
-** Copyright (C) 2006 Adriaan de Groot <groot@kde.org>
-**
-*/
-
-/*
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU General Public License as published by
-** the Free Software Foundation; either version 2 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-** GNU General Public License for more details.
-**
-** You should have received a copy of the GNU General Public License
-** along with this program in a file called COPYING; if not, write to
-** the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
-** MA 02110-1301, USA.
-*/
-
-/*
-** Bug reports and questions can be sent to kde-pim@kde.org
-*/
-#include "options.h"
-
-#include <tqapplication.h>
-#include <tqdir.h>
-#include <tqfile.h>
-
-#include <ksavefile.h>
-
-#include "pilot.h"
-#include "pilotUser.h"
-
-#include "actions.h"
-
-
-
-WelcomeAction::WelcomeAction(KPilotLink *p) :
- SyncAction(p,"welcomeAction")
-{
- FUNCTIONSETUP;
-}
-
-/* virtual */ bool WelcomeAction::exec()
-{
- FUNCTIONSETUP;
-
- addSyncLogEntry(i18n("KPilot %1 HotSync starting...\n")
- .arg(TQString::fromLatin1(KPILOT_VERSION)));
- emit logMessage( i18n("Using encoding %1 on the handheld.").arg(Pilot::codecName()) );
- emit syncDone(this);
- return true;
-}
-
-SorryAction::SorryAction(KPilotLink *p, const TQString &s) :
- SyncAction(p,"sorryAction"),
- fMessage(s)
-{
- if (fMessage.isEmpty())
- {
- fMessage = i18n("KPilot is busy and cannot process the "
- "HotSync right now.");
- }
-}
-
-bool SorryAction::exec()
-{
- FUNCTIONSETUP;
-
- addSyncLogEntry(fMessage);
- return delayDone();
-}
-
-CleanupAction::CleanupAction(KPilotLink *p) : SyncAction(p,"cleanupAction")
-{
- FUNCTIONSETUP;
-}
-
-/* virtual */ bool CleanupAction::exec()
-{
- FUNCTIONSETUP;
-
- if (deviceLink())
- {
- deviceLink()->endSync( KPilotLink::UpdateUserInfo );
- }
- emit syncDone(this);
- return true;
-}
-
-
-TestLink::TestLink(KPilotLink * p) :
- SyncAction(p, "testLink")
-{
- FUNCTIONSETUP;
-
-}
-
-/* virtual */ bool TestLink::exec()
-{
- FUNCTIONSETUP;
-
- int i;
- int dbindex = 0;
- int count = 0;
- struct DBInfo db;
-
- addSyncLogEntry(i18n("Testing.\n"));
-
- while ((i = deviceLink()->getNextDatabase(dbindex,&db)) > 0)
- {
- count++;
- dbindex = db.index + 1;
-
- DEBUGKPILOT << fname
- << ": Read database " << db.name
- << " with index " << db.index
- << endl;
-
- // Let the Pilot User know what's happening
- openConduit();
- // Let the KDE User know what's happening
- // Pretty sure all database names are in latin1.
- emit logMessage(i18n("Syncing database %1...")
- .arg(Pilot::fromPilot(db.name)));
- }
-
- emit logMessage(i18n("HotSync finished."));
- emit syncDone(this);
- return true;
-}
diff --git a/kpilot/lib/actions.h b/kpilot/lib/actions.h
deleted file mode 100644
index 2e3b9b20c..000000000
--- a/kpilot/lib/actions.h
+++ /dev/null
@@ -1,115 +0,0 @@
-#ifndef _KPILOT_ACTIONS_H
-#define _KPILOT_ACTIONS_H
-/*
-**
-** Copyright (C) 1998-2001,2003 by Dan Pilone
-** Copyright (C) 2003-2004 Reinhold Kainhofer <reinhold@kainhofer.com>
-** Copyright (C) 2006 Adriaan de Groot <groot@kde.org>
-**
-*/
-
-/*
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU General Public License as published by
-** the Free Software Foundation; either version 2 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-** GNU General Public License for more details.
-**
-** You should have received a copy of the GNU General Public License
-** along with this program in a file called COPYING; if not, write to
-** the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
-** MA 02110-1301, USA.
-*/
-
-/*
-** Bug reports and questions can be sent to kde-pim@kde.org
-*/
-
-#include "syncAction.h"
-
-/** @file
-* This file defines some simple standard actions. None of these
-* actions require much in the way of configuration; none provide
-* particularly complicated functionality.
-*/
-
-/**
-* This action puts "Welcome to KPilot" in the sync log of the handheld.
-* It is added automatically to a ActionQueue by queueInit() in order
-* to inform the user of the sync.
-*/
-KDE_EXPORT class WelcomeAction : public SyncAction
-{
-public:
- /** Constructor. */
- WelcomeAction(KPilotLink *);
-
-protected:
- /** Reimplemented from SyncAction. */
- virtual bool exec();
-} ;
-
-/**
-* This one just says "sorry, can't sync now". This is used
-* in cases when the hotsync starts while KPilot is busy configuring
-* something and can't be interrupted.
-*/
-KDE_EXPORT class SorryAction : public SyncAction
-{
-public:
- /**
- * Constructor. The action will be executed on the given
- * link @p device . If the given string @p s is non-empty,
- * print that message (it must be i18n()ed already) instead of
- * the standard message.
- */
- SorryAction(KPilotLink *device, const TQString &s=TQString::null);
-
-protected:
- /** Reimplemented from SyncAction. */
- virtual bool exec();
-
- /** Message to print to the sync log. */
- TQString fMessage;
-} ;
-
-/**
-* End the HotSync. This action cleans up the handheld and
-* removes cruft. There should be exactly @em one CleanupAction
-* executed during a HotSync. Since this action informs the
-* device that the HotSync is over, it should be the last
-* action executed.
-*/
-KDE_EXPORT class CleanupAction : public SyncAction
-{
-public:
- /** Constructor. */
- CleanupAction(KPilotLink *device);
-
-protected:
- /** Reimplemented from SyncAction. */
- virtual bool exec();
-} ;
-
-/**
-* This action is intended to test the link with the handheld
-* and not do anything spectacular. It lists all the databases
-* on the handheld in the sync log.
-*/
-KDE_EXPORT class TestLink : public SyncAction
-{
-public:
- /** Constructor. */
- TestLink(KPilotLink *device);
-
-protected:
- /** Reimplemented from SyncAction. */
- virtual bool exec();
-} ;
-
-
-#endif
diff --git a/kpilot/lib/idmapper.cc b/kpilot/lib/idmapper.cc
deleted file mode 100644
index f4fc38c5c..000000000
--- a/kpilot/lib/idmapper.cc
+++ /dev/null
@@ -1,247 +0,0 @@
-/*
-** Copyright (C) 2006 Bertjan Broeksema <bbroeksema@bluebottle.com>
-*/
-
-/*
-** This program 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; either version 2.1 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 Lesser General Public License for more details.
-**
-** You should have received a copy of the GNU Lesser General Public License
-** along with this program in a file called COPYING; if not, write to
-** the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
-** MA 02110-1301, USA.
-*/
-
-/*
-** Bug reports and questions can be sent to kde-pim@kde.org
-*/
-
-#include "idmapper.h"
-#include "idmapperxml.h"
-#include "options.h"
-
-#include <tqsqldatabase.h>
-#include <tqfile.h>
-
-#include <kglobal.h>
-#include <kstandarddirs.h>
-
-class IDMapperPrivate
-{
-public:
- IDMapperPrivate()
- {
- fXmlSource = 0L;
- }
-
- ~IDMapperPrivate()
- {
- FUNCTIONSETUP;
-
- KPILOT_DELETE(fXmlSource);
- }
-
- IDMapperXml *fXmlSource;
-};
-
-IDMapper::IDMapper()
-{
- FUNCTIONSETUP;
-
- fP = new IDMapperPrivate();
-
- TQString dbPath = KGlobal::dirs()->
- saveLocation("data", CSL1("kpilot/") );
- TQString dbFile = dbPath + CSL1("mapping.xml");
-
- if( !openDatasource( dbFile ) )
- {
- DEBUGKPILOT << fname << "Could not open or create xml file." << endl;
- }
-}
-
-IDMapper::IDMapper( const TQString &file)
-{
- FUNCTIONSETUP;
-
- fP = new IDMapperPrivate();
-
- if( !openDatasource( file ) )
- {
- DEBUGKPILOT << fname << "Could not open or create xml file." << endl;
- }
-}
-
-IDMapper::~IDMapper()
-{
- KPILOT_DELETE(fP);
-}
-
-bool IDMapper::openDatasource( const TQString &file )
-{
- FUNCTIONSETUP;
-
- fP->fXmlSource = new IDMapperXml( file );
- return fP->fXmlSource->open();
-}
-
-void IDMapper::registerPCObjectId( const TQString &conduit, const TQString &uid )
-{
- FUNCTIONSETUP;
-
- IDMapping mapping = IDMapping( conduit );
- mapping.setUid( uid );
-
- fP->fXmlSource->addMapping( mapping );
- fP->fXmlSource->save();
-}
-
-void IDMapper::registerHHObjectId( const TQString &conduit, recordid_t pid )
-{
- FUNCTIONSETUP;
-
- IDMapping mapping = IDMapping( conduit );
- mapping.setPid( pid );
-
- fP->fXmlSource->addMapping( mapping );
- fP->fXmlSource->save();
-}
-
-TQValueList<TQString> IDMapper::getPCObjectIds( const TQString &conduit )
-{
- FUNCTIONSETUP;
-
- TQValueList<IDMapping> &mappings = fP->fXmlSource->mappings();
- TQValueList<IDMapping>::iterator it;
- TQValueList<TQString> uids;
-
- DEBUGKPILOT << fname << ": total " << mappings.count() << endl;
-
- for ( it = mappings.begin(); it != mappings.end(); ++it )
- {
- IDMapping &mapping = (*it);
-
- DEBUGKPILOT << fname << ": mapping.conduit() = " << mapping.conduit() << endl;
- DEBUGKPILOT << fname << ": conduit = " << conduit << endl;
-
- if( (mapping.conduit() == conduit) && !mapping.uid().isNull() )
- {
- DEBUGKPILOT << fname << ": mapping.conduit() == conduit" << endl;
- uids.append( mapping.uid() );
- }
- }
-
- return uids;
-}
-
-TQValueList<recordid_t> IDMapper::getHHObjectIds( const TQString &conduit )
-{
- FUNCTIONSETUP;
-
- TQValueList<IDMapping> &mappings = fP->fXmlSource->mappings();
- TQValueList<IDMapping>::iterator it;
- TQValueList<recordid_t> pids;
-
- for ( it = mappings.begin(); it != mappings.end(); ++it )
- {
- IDMapping &mapping = *it;
- DEBUGKPILOT << fname << ": mapping.conduit() = " << mapping.conduit() << endl;
- DEBUGKPILOT << fname << ": " << mapping.pid() << endl;
- if( mapping.conduit() == conduit && mapping.pid() != 0 )
- {
- DEBUGKPILOT << fname << ": mapping.conduit() == conduit" << endl;
- pids.append( mapping.pid() );
- }
- }
-
- return pids;
-}
-
-bool IDMapper::hasPCId( const TQString &conduit, recordid_t pid )
-{
- FUNCTIONSETUP;
-
- TQValueList<IDMapping> &mappings = fP->fXmlSource->mappings();
- TQValueList<IDMapping>::iterator it;
-
- for ( it = mappings.begin(); it != mappings.end(); ++it )
- {
- IDMapping &mapping = *it;
- if( mapping.conduit() == conduit && mapping.pid() == pid )
- {
- return !mapping.uid().isNull();
- }
- }
-
- return false;
-}
-
-bool IDMapper::hasHHId( const TQString &conduit, const TQString &uid )
-{
- FUNCTIONSETUP;
-
- TQValueList<IDMapping> &mappings = fP->fXmlSource->mappings();
- TQValueList<IDMapping>::iterator it;
-
- for ( it = mappings.begin(); it != mappings.end(); ++it )
- {
- IDMapping &mapping = *it;
- if( mapping.conduit() == conduit && mapping.uid() == uid )
- {
- return mapping.pid() != 0;
- }
- }
-
- return false;
-}
-
-void IDMapper::setHHObjectId( const TQString &conduit, const TQString &uid
- , recordid_t pid )
-{
- FUNCTIONSETUP;
-
- bool modified = false;
-
- TQValueList<IDMapping> &mappings = fP->fXmlSource->mappings();
- TQValueList<IDMapping>::iterator it;
-
- for ( it = mappings.begin(); it != mappings.end(); ++it )
- {
- IDMapping &mapping = *it;
- if( mapping.conduit() == conduit && mapping.uid() == uid )
- {
- mapping.setPid( pid );
- fP->fXmlSource->save();
- modified = true;
- }
- }
-}
-
-void IDMapper::setPCObjectId( const TQString &conduit, recordid_t pid
- , const TQString &uid )
-{
- FUNCTIONSETUP;
-
- bool modified = false;
-
- TQValueList<IDMapping> &mappings = fP->fXmlSource->mappings();
- TQValueList<IDMapping>::iterator it;
-
- for ( it = mappings.begin(); it != mappings.end(); ++it )
- {
- IDMapping &mapping = *it;
- if( mapping.conduit() == conduit && mapping.pid() == pid )
- {
- mapping.setUid( uid );
- fP->fXmlSource->save();
- modified = true;
- }
- }
-}
diff --git a/kpilot/lib/idmapper.h b/kpilot/lib/idmapper.h
deleted file mode 100644
index b2ff0efe5..000000000
--- a/kpilot/lib/idmapper.h
+++ /dev/null
@@ -1,159 +0,0 @@
-#ifndef _KPILOT_IDMAPPER_H
-#define _KPILOT_IDMAPPER_H
-/*
-** Copyright (C) 2006 Bertjan Broeksema <bbroeksema@bluebottle.com>
-*/
-
-/*
-** This program 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; either version 2.1 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 Lesser General Public License for more details.
-**
-** You should have received a copy of the GNU Lesser General Public License
-** along with this program in a file called COPYING; if not, write to
-** the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
-** MA 02110-1301, USA.
-*/
-
-/*
-** Bug reports and questions can be sent to kde-pim@kde.org
-*/
-
-#include <tqstring.h>
-#include <tqdatetime.h>
-#include <tqvaluelist.h>
-
-#include "pi-macros.h"
-
-#include <kconfig.h>
-
-class IDMapperPrivate;
-
-/**
- * Much of the conduits are recordbased. This class can be used bij the conduits
- * to keep track of the mapping between records on the handheld and records on
- * the pc.
- */
-class IDMapper
-{
-public:
- /**
- * Creates a new IDMapper with default datasource.
- */
- IDMapper();
-
- /**
- * Creates a new IDMapper with file as datasource.
- */
- IDMapper( const TQString &file );
-
- ~IDMapper();
-
- /**
- * Adds an uid for PC objects to the database.
- */
- void registerPCObjectId( const TQString &conduit, const TQString &uid );
-
- /**
- * Returns all known uid's for given conduit.
- */
- TQValueList<TQString> getPCObjectIds( const TQString &conduit );
-
- /**
- * Adds a pid for HH objects to the database.
- */
- void registerHHObjectId( const TQString &conduit, recordid_t pid );
-
- /**
- * Returns all know pids for given conduit.
- */
- TQValueList<recordid_t> getHHObjectIds( const TQString &conduit );
-
- /**
- * Sets the PC uid for the handheld record with pid. Does nothing when
- * there is no handheld record with pid.
- */
- void setPCObjectId( const TQString &conduit, recordid_t pid
- , const TQString &uid );
-
- /**
- * Sets the PC uid for the handheld record with pid. Does nothing when
- * there is no handheld record with pid.
- */
- void setHHObjectId( const TQString &conduit, const TQString &uid
- , recordid_t pid );
-
- /**
- * Returns the PC uid for the handheld record with pid. Returns 0 when no
- * pid exists for given uid.
- */
- recordid_t getHHObjectId( const TQString &conduit, const TQString &uid );
-
- /**
- * Returns the HH pid for the PC record with uid. Returns an empty string
- * when no uid exists for given pid.
- */
- TQString getHHObjectId( const TQString &conduit, recordid_t pid );
-
- /**
- * Returns true when there is a uid set for given pid. The conduit itself
- * must determine if the two objects are in sync if this function returns
- * true.
- */
- bool hasPCId( const TQString &conduit, recordid_t pid );
-
- /**
- * Returns true when there is a pid set for given uid. The conduit itself
- * must determine if the two objects are in sync if this function returns
- * true.
- */
- bool hasHHId( const TQString &conduit, const TQString &uid );
-
- /**
- * Sets the time that the two objects where last synced. The conduits
- * should call this method (or the pid version) when two objects are synced.
- * When the uid does not exist nothing happens.
- */
- void setLastSyncTime( const TQString &conduit, const TQString &uid,
- const TQDateTime &date );
-
- /**
- * Sets the time that the two objects where last synced. The conduits
- * should call this (or the uid version) method when two objects are synced.
- * When the pid does not exist nothing happens.
- */
- void setLastSyncTime( const TQString &conduit, recordid_t pid
- , const TQDateTime &date );
-
- /**
- * Returns the date/time for the last time that the item with uid was
- * synced. This date is set by:
- * - setLastSyncTime (uid/pid)
- *
- * Returns a null datetime when the pid does not excist.
- */
- TQDateTime lastTimeSynced( const TQString &conduit, const TQString &uid );
-
- /**
- * Returns the date/time for the last time that the item with pid was
- * synced. This date is set by:
- * - setLastSyncTime (uid/pid)
- *
- * Returns a null datetime when the pid does not excist.
- */
- TQDateTime lastTimeSynced( const TQString &conduit, recordid_t pid );
-
-protected:
- bool openDatasource( const TQString &file );
-
-private:
- IDMapperPrivate *fP;
-};
-
-#endif
diff --git a/kpilot/lib/idmapperxml.cc b/kpilot/lib/idmapperxml.cc
deleted file mode 100644
index 89fe51d91..000000000
--- a/kpilot/lib/idmapperxml.cc
+++ /dev/null
@@ -1,213 +0,0 @@
-/*
-** Copyright (C) 2006 Bertjan Broeksema <bbroeksema@bluebottle.com>
-*/
-
-/*
-** This program 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; either version 2.1 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 Lesser General Public License for more details.
-**
-** You should have received a copy of the GNU Lesser General Public License
-** along with this program in a file called COPYING; if not, write to
-** the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
-** MA 02110-1301, USA.
-*/
-
-/*
-** Bug reports and questions can be sent to kde-pim@kde.org
-*/
-
-#include "idmapperxml.h"
-
-#include "options.h"
-
-IDMapperXml::IDMapperXml( const TQString &file ) : fFile(file)
- , fCurrentMapping( 0l )
-{
-}
-
-IDMapperXml::~IDMapperXml()
-{
- FUNCTIONSETUP;
-}
-
-bool IDMapperXml::open()
-{
- FUNCTIONSETUP;
-
- root = doc.createElement( CSL1("mappings") );
- TQDomNode node = doc.createProcessingInstruction(CSL1("xml")
- ,CSL1("version=\"1.0\" encoding=\"UTF-8\""));
-
- doc.appendChild( node );
- doc.appendChild( root );
-
- if( !fFile.exists() )
- {
- DEBUGKPILOT << fname << ": Creating " << fFile.name() << endl;
-
- if( fFile.open( IO_ReadWrite ) )
- {
- TQTextStream out( &fFile );
- doc.save( out, 4 );
- fFile.close();
- return true;
- }
- else
- {
- DEBUGKPILOT << fname << ": Could not create " << fFile.name() << endl;
- return false;
- }
- }
- else
- {
- DEBUGKPILOT << fname << ": Parsing file " << fFile.name() << endl;
- TQXmlSimpleReader reader;
- reader.setContentHandler( this );
-
- // Make sure that the file is closed after parsing.
- bool result = reader.parse( fFile );
- fFile.close();
-
- return result;
- }
-}
-
-void IDMapperXml::save()
-{
- FUNCTIONSETUP;
-
- DEBUGKPILOT << fname << ": Saving " << fMappings.count()
- << " mappings..." << endl;
- DEBUGKPILOT << fname << ": ";
-
- TQValueList<IDMapping>::const_iterator it;
- for ( it = fMappings.begin(); it != fMappings.end(); ++it )
- {
- DEBUGKPILOT << ".";
-
- IDMapping mapping = (*it);
-
- DEBUGKPILOT << fname << ": " << mapping.conduit();
-
- TQDomElement mappingElement = doc.createElement( CSL1("mapping") );
- mappingElement.setAttribute( CSL1("conduit"), mapping.conduit() );
-
- if( !mapping.uid().isNull() )
- {
- TQDomElement uidElement = doc.createElement( CSL1("uid") );
- uidElement.setAttribute( CSL1("value"), mapping.uid() );
- mappingElement.appendChild( uidElement );
- }
-
- if( mapping.pid() != 0 )
- {
- TQDomElement uidElement = doc.createElement( CSL1("pid") );
- uidElement.setAttribute( CSL1("value"), mapping.pid() );
- mappingElement.appendChild( uidElement );
- }
-
- if( !mapping.lastSyncTime().isNull() )
- {
- TQDomElement uidElement = doc.createElement( CSL1("pid") );
- uidElement.setAttribute( CSL1("value"), TQString::number( mapping.pid() ) );
- mappingElement.appendChild( uidElement );
- }
-
- root.appendChild( mappingElement );
- }
-
- if( fFile.open( IO_ReadWrite ) )
- {
- TQTextStream out( &fFile );
- doc.save( out, 4 );
- fFile.close();
-
- DEBUGKPILOT << endl << fname << ": finished saving." << endl;
- }
-}
-
-void IDMapperXml::addMapping( const IDMapping &mapping )
-{
- FUNCTIONSETUP;
-
- DEBUGKPILOT << fname << ": " << mapping.conduit() << endl;
-
- fMappings.append( mapping );
-
- DEBUGKPILOT << fname << ": " << fMappings.first().conduit() << endl;
-}
-
-TQValueList<IDMapping>& IDMapperXml::mappings()
-{
- return fMappings;
-}
-
-bool IDMapperXml::startElement( const TQString &namespaceURI
- , const TQString &localName, const TQString &qName
- , const TQXmlAttributes &attribs )
-{
- FUNCTIONSETUP;
- Q_UNUSED(namespaceURI);
- Q_UNUSED(localName);
-
- if( qName == CSL1("mapping") )
- {
- TQString conduit( attribs.value( CSL1("conduit") ) );
-
- fCurrentMapping = new IDMapping( conduit );
- }
- else if( qName == CSL1("uid") )
- {
- fCurrentMapping->setUid( attribs.value( CSL1("value") ) );
- }
- else if( qName == CSL1("pid") )
- {
- fCurrentMapping->setPid( attribs.value( CSL1("value") ).toULong() );
- }
- else if( qName == CSL1("lastsync") )
- {
- // NOTE: this isn't very robuust!
- // Parses only dates in the form: dd-mm-yyyy hh:mm:ss
- TQString date = attribs.value( CSL1("value") );
- int day = date.left(2).toInt();
- int month = date.mid(3,2).toInt();
- int year = date.mid(6, 4).toInt();
-
- int hour = date.mid(11,2).toInt();
- int minute = date.mid(14,2).toInt();
- int second = date.mid(17,2).toInt();
-
- TQDate tmpDate = TQDate( year, month, day );
- TQTime tmpTime = TQTime( hour, minute, second );
-
- fCurrentMapping->setLastSyncTime( TQDateTime( tmpDate, tmpTime ) );
- }
-
- return true;
-}
-
-bool IDMapperXml::endElement( const TQString &namespaceURI
- , const TQString &localName, const TQString &qName )
-{
- FUNCTIONSETUP;
-
- Q_UNUSED(namespaceURI);
- Q_UNUSED(localName);
- Q_UNUSED(qName);
-
- if( qName == CSL1("mapping") )
- {
- addMapping( *fCurrentMapping );
- delete fCurrentMapping;
- fCurrentMapping = 0l;
- }
-
- return true;
-}
diff --git a/kpilot/lib/idmapperxml.h b/kpilot/lib/idmapperxml.h
deleted file mode 100644
index 87c912379..000000000
--- a/kpilot/lib/idmapperxml.h
+++ /dev/null
@@ -1,84 +0,0 @@
-#ifndef _KPILOT_IDMAPPERXML_H
-#define _KPILOT_IDMAPPERXML_H
-/*
-** Copyright (C) 2006 Bertjan Broeksema <bbroeksema@bluebottle.com>
-*/
-
-/*
-** This program 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; either version 2.1 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 Lesser General Public License for more details.
-**
-** You should have received a copy of the GNU Lesser General Public License
-** along with this program in a file called COPYING; if not, write to
-** the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
-** MA 02110-1301, USA.
-*/
-
-/*
-** Bug reports and questions can be sent to kde-pim@kde.org
-*/
-
-#include "idmapping.h"
-
-#include <tqxml.h>
-#include <tqdom.h>
-#include <tqstring.h>
-#include <tqptrcollection.h>
-
-class IDMapperXml : public QXmlDefaultHandler
-{
-public:
- IDMapperXml( const TQString &file );
-
- ~IDMapperXml();
-
- /**
- * Opens and parses the file or creates a new one if the file does not exist.
- */
- bool open();
-
- /**
- * Saves the current mappings to the xml-file. Note this function must be
- * called after changes and before deleting the IDMapperXml object. Otherwise
- * the changes won't be saved.
- */
- void save();
-
- /**
- * Adds a mapping to the collection of mappings.
- */
- void addMapping( const IDMapping &mapping );
-
- /**
- * Returns the collection of mappings.
- */
- TQValueList<IDMapping> &mappings();
-
- /**
- * Overloaded function to parse the xml file.
- */
- bool startElement( const TQString &namespaceURI, const TQString &localName
- , const TQString &qName, const TQXmlAttributes &attribs );
-
- /**
- * Overloaded function to parse the xml file.
- */
- bool endElement( const TQString &namespaceURI, const TQString &localName
- , const TQString &qName );
-
-private:
- TQFile fFile;
- TQDomDocument doc;
- TQDomElement root;
- IDMapping *fCurrentMapping;
- TQValueList<IDMapping> fMappings;
-};
-
-#endif
diff --git a/kpilot/lib/idmapping.cc b/kpilot/lib/idmapping.cc
deleted file mode 100644
index 49a1e334e..000000000
--- a/kpilot/lib/idmapping.cc
+++ /dev/null
@@ -1,89 +0,0 @@
-/*
-** Copyright (C) 2006 Bertjan Broeksema <bbroeksema@bluebottle.com>
-*/
-
-/*
-** This program 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; either version 2.1 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 Lesser General Public License for more details.
-**
-** You should have received a copy of the GNU Lesser General Public License
-** along with this program in a file called COPYING; if not, write to
-** the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
-** MA 02110-1301, USA.
-*/
-
-/*
-** Bug reports and questions can be sent to kde-pim@kde.org
-*/
-
-#include "idmapping.h"
-
-IDMapping::IDMapping()
-{
-}
-
-IDMapping::IDMapping( const TQString &conduit )
-{
- fConduit = conduit;
- fPid = 0;
-}
-
-IDMapping::IDMapping( const IDMapping &m )
-{
- fConduit = m.fConduit;
- fUid = m.fUid;
- fPid = m.fPid;
- fLastSync = m.fLastSync;
-}
-
-IDMapping IDMapping::operator=( const IDMapping &m )
-{
- IDMapping local( m.fConduit );
- local.fUid = m.fUid;
- local.fPid = m.fPid;
- local.fLastSync = m.fLastSync;
-
- return local;
-}
-
-void IDMapping::setUid( const TQString &uid )
-{
- fUid = uid;
-}
-
-void IDMapping::setPid( recordid_t pid )
-{
- fPid = pid;
-}
-
-void IDMapping::setLastSyncTime( const TQDateTime &datetime )
-{
- fLastSync = datetime;
-}
-
-TQString IDMapping::conduit() const
-{
- return fConduit;
-}
-
-TQString IDMapping::uid() const
-{
- return fUid;
-}
-
-recordid_t IDMapping::pid() const
-{
- return fPid;
-}
-
-TQDateTime IDMapping::lastSyncTime() const
-{
- return fLastSync;
-}
diff --git a/kpilot/lib/idmapping.h b/kpilot/lib/idmapping.h
deleted file mode 100644
index b8ed4d5e4..000000000
--- a/kpilot/lib/idmapping.h
+++ /dev/null
@@ -1,66 +0,0 @@
-#ifndef _KPILOT_IDMAPPING_H
-#define _KPILOT_IDMAPPING_H
-/*
-** Copyright (C) 2006 Bertjan Broeksema <bbroeksema@bluebottle.com>
-*/
-
-/*
-** This program 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; either version 2.1 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 Lesser General Public License for more details.
-**
-** You should have received a copy of the GNU Lesser General Public License
-** along with this program in a file called COPYING; if not, write to
-** the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
-** MA 02110-1301, USA.
-*/
-
-/*
-** Bug reports and questions can be sent to kde-pim@kde.org
-*/
-
-
-#include "pi-macros.h"
-
-#include <tqstring.h>
-#include <tqdatetime.h>
-
-class IDMapping
-{
-public:
- IDMapping();
-
- IDMapping( const TQString &conduit );
-
- IDMapping( const IDMapping &m );
-
- IDMapping operator=( const IDMapping &m );
-
- void setUid( const TQString &uid );
-
- void setPid( recordid_t uid );
-
- void setLastSyncTime( const TQDateTime &datetime );
-
- TQString conduit() const;
-
- TQString uid() const;
-
- recordid_t pid() const;
-
- TQDateTime lastSyncTime() const;
-
-private:
- TQString fConduit;
- TQString fUid;
- recordid_t fPid;
- TQDateTime fLastSync;
-};
-
-#endif
diff --git a/kpilot/lib/kpilotdevicelink.cc b/kpilot/lib/kpilotdevicelink.cc
deleted file mode 100644
index 5fed7961a..000000000
--- a/kpilot/lib/kpilotdevicelink.cc
+++ /dev/null
@@ -1,966 +0,0 @@
-/* KPilot
- **
- ** Copyright (C) 1998-2001 by Dan Pilone
- ** Copyright (C) 2003-2004 Reinhold Kainhofer <reinhold@kainhofer.com>
- ** Copyright (C) 2006-2007 Adriaan de Groot <groot@kde.org>
- ** Copyright (C) 2007 Jason 'vanRijn' Kasper <vR@movingparts.net>
- **
- */
-
-/*
- ** This program 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; either version 2.1 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 Lesser General Public License for more details.
- **
- ** You should have received a copy of the GNU Lesser General Public License
- ** along with this program in a file called COPYING; if not, write to
- ** the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
- ** MA 02110-1301, USA.
- */
-
-/*
- ** Bug reports and questions can be sent to kde-pim@kde.org
- */
-
-#include "options.h"
-
-#include <sys/stat.h>
-#include <sys/types.h>
-#include <stdio.h>
-#include <unistd.h>
-#include <fcntl.h>
-#include <errno.h>
-
-#include <iostream>
-
-#include <pi-source.h>
-#include <pi-socket.h>
-#include <pi-dlp.h>
-#include <pi-file.h>
-#include <pi-buffer.h>
-
-#include <tqdir.h>
-#include <tqtimer.h>
-#include <tqdatetime.h>
-#include <tqthread.h>
-#include <tqsocketnotifier.h>
-
-#include <kconfig.h>
-#include <kmessagebox.h>
-#include <kstandarddirs.h>
-#include <kurl.h>
-#include <kio/netaccess.h>
-
-#include "pilotUser.h"
-#include "pilotSysInfo.h"
-#include "pilotCard.h"
-#include "pilotSerialDatabase.h"
-#include "pilotLocalDatabase.h"
-
-#include "kpilotlink.h"
-#include "kpilotdevicelinkPrivate.moc"
-#include "kpilotdevicelink.moc"
-
-
-DeviceMap *DeviceMap::mThis = 0L;
-
-
-static inline void startOpenTimer(DeviceCommThread *dev, TQTimer *&t)
-{
- if ( !t)
- {
- t = new TQTimer(dev);
- TQObject::connect(t, TQT_SIGNAL(timeout()), dev, TQT_SLOT(openDevice()));
- }
- // just a single-shot timer. we'll know when to start it again...
- t->start(1000, true);
-}
-
-DeviceCommThread::DeviceCommThread(KPilotDeviceLink *d) :
- TQThread(),
- fDone(true),
- fHandle(d),
- fOpenTimer(0L),
- fSocketNotifier(0L),
- fSocketNotifierActive(false),
- fWorkaroundUSBTimer(0L),
- fPilotSocket(-1),
- fTempSocket(-1),
- fAcceptedCount(0)
-{
- FUNCTIONSETUP;
-}
-
-
-DeviceCommThread::~DeviceCommThread()
-{
- FUNCTIONSETUPL(2);
- close();
- KPILOT_DELETE(fWorkaroundUSBTimer);
-}
-
-void DeviceCommThread::close()
-{
- FUNCTIONSETUPL(2);
-
- KPILOT_DELETE(fWorkaroundUSBTimer);
- KPILOT_DELETE(fOpenTimer);
- KPILOT_DELETE(fSocketNotifier);
- fSocketNotifierActive=false;
-
- if (fTempSocket != -1)
- {
- DEBUGKPILOT << fname
- << ": device comm thread closing socket: ["
- << fTempSocket << "]" << endl;
-
- pi_close(fTempSocket);
- }
-
- if (fPilotSocket != -1)
- {
- DEBUGKPILOT << fname
- << ": device comm thread closing socket: ["
- << fPilotSocket << "]" << endl;
-
- pi_close(fPilotSocket);
- }
-
- fTempSocket = (-1);
- fPilotSocket = (-1);
-
- DeviceMap::self()->unbindDevice(link()->fRealPilotPath);
-}
-
-void DeviceCommThread::reset()
-{
- FUNCTIONSETUP;
-
- if (link()->fMessages->shouldPrint(Messages::OpenFailMessage))
- {
- TQApplication::postEvent(link(), new DeviceCommEvent(EventLogMessage,
- i18n("Could not open device: %1 (will retry)")
- .arg(link()->pilotPath() )));
- }
-
- link()->fMessages->reset();
- close();
-
- // Timer already deleted by close() call.
- startOpenTimer(this,fOpenTimer);
-
- link()->fLinkStatus = WaitingForDevice;
-}
-
-/**
- * This is an asyncronous process. We try to create a socket with the Palm
- * and then bind to it (in open()). If we're able to do those 2 things, then
- * we do 2 things: we set a timeout timer (which will tell us that X amount of
- * time has transpired before we get into the meat of the sync transaction), and
- * we also set up a TQSocketNotifier, which will tell us when data is available
- * to be read from the Palm socket. If we were unable to create a socket
- * and/or bind to the Palm in this method, we'll start our timer again.
- */
-void DeviceCommThread::openDevice()
-{
- FUNCTIONSETUPL(2);
-
- bool deviceOpened = false;
-
- // This transition (from Waiting to Found) can only be
- // taken once.
- //
- if (link()->fLinkStatus == WaitingForDevice)
- {
- link()->fLinkStatus = FoundDevice;
- }
-
- if (link()->fMessages->shouldPrint(Messages::OpenMessage))
- {
- TQApplication::postEvent(link(), new DeviceCommEvent(EventLogMessage,
- i18n("Trying to open device %1...")
- .arg(link()->fPilotPath)));
- }
-
- // if we're not supposed to be done, try to open the main pilot
- // path...
- if (!fDone && link()->fPilotPath.length() > 0)
- {
- DEBUGKPILOT << fname << ": Opening main pilot path: ["
- << link()->fPilotPath << "]." << endl;
- deviceOpened = open(link()->fPilotPath);
- }
-
- // only try the temp device if our earlier attempt didn't work and the temp
- // device is different than the main device, and it's a non-empty
- // string
- bool tryTemp = !deviceOpened && (link()->fTempDevice.length() > 0) && (link()->fPilotPath != link()->fTempDevice);
-
- // if we're not supposed to be done, and we should try the temp
- // device, try the temp device...
- if (!fDone && tryTemp)
- {
- DEBUGKPILOT << fname << ": Couldn't open main pilot path. "
- << "Now trying temp device: ["
- << link()->fTempDevice << "]." << endl;
- deviceOpened = open(link()->fTempDevice);
- }
-
- // if we couldn't connect, try to connect again...
- if (!fDone && !deviceOpened)
- {
- startOpenTimer(this, fOpenTimer);
- }
-}
-
-bool DeviceCommThread::open(const TQString &device)
-{
- FUNCTIONSETUPL(2);
-
- int ret;
- int e = 0;
- TQString msg;
-
- if (fTempSocket != -1)
- {
- pi_close(fTempSocket);
- }
- fTempSocket = (-1);
-
- link()->fRealPilotPath
- = KStandardDirs::realFilePath(device.isEmpty() ? link()->fPilotPath : device);
-
- if ( !DeviceMap::self()->canBind(link()->fRealPilotPath) )
- {
- msg = i18n("Already listening on that device");
-
- WARNINGKPILOT << "Pilot Path: ["
- << link()->fRealPilotPath << "] already connected." << endl;
- WARNINGKPILOT << msg << endl;
-
- link()->fLinkStatus = PilotLinkError;
-
- TQApplication::postEvent(link(), new DeviceCommEvent(EventLogError, msg));
-
- return false;
- }
-
- DEBUGKPILOT << fname << ": Trying to create socket." << endl;
-
- fTempSocket = pi_socket(PI_AF_PILOT, PI_SOCK_STREAM, PI_PF_DLP);
-
- if (fTempSocket < 0)
- {
- e = errno;
- msg = i18n("Cannot create socket for communicating "
- "with the Pilot (%1)").arg(errorMessage(e));
- DEBUGKPILOT << msg << endl;
- DEBUGKPILOT << "(" << strerror(e) << ")" << endl;
-
- link()->fLinkStatus = PilotLinkError;
-
- TQApplication::postEvent(link(), new DeviceCommEvent(EventLogError, msg));
-
- return false;
- }
-
- DEBUGKPILOT << fname << ": Got socket: [" << fTempSocket << "]" << endl;
-
- link()->fLinkStatus = CreatedSocket;
-
- DEBUGKPILOT << fname << ": Binding to path: ["
- << link()->fRealPilotPath << "]" << endl;
-
- ret = pi_bind(fTempSocket, TQFile::encodeName(link()->fRealPilotPath));
-
- if (ret < 0)
- {
- DEBUGKPILOT << fname
- << ": pi_bind error: ["
- << strerror(errno) << "]" << endl;
-
- e = errno;
- msg = i18n("Cannot open Pilot port \"%1\". ").arg(link()->fRealPilotPath);
-
- DEBUGKPILOT << msg << endl;
- DEBUGKPILOT << "(" << strerror(e) << ")" << endl;
-
- link()->fLinkStatus = PilotLinkError;
-
- if (link()->fMessages->shouldPrint(Messages::OpenFailMessage))
- {
- TQApplication::postEvent(link(), new DeviceCommEvent(EventLogError, msg));
- }
-
- return false;
- }
-
- link()->fLinkStatus = DeviceOpen;
- DeviceMap::self()->bindDevice(link()->fRealPilotPath);
-
- fSocketNotifier = new TQSocketNotifier(fTempSocket,
- TQSocketNotifier::Read, this);
- TQObject::connect(fSocketNotifier, TQT_SIGNAL(activated(int)),
- this, TQT_SLOT(acceptDevice()));
- fSocketNotifierActive=true;
-
- /**
- * We _always_ want to set a maximum amount of time that we will wait
- * for the sync process to start. In the case where our user
- * has told us that he has a funky USB device, set the workaround timeout
- * for shorter than normal.
- */
- int timeout=20000;
- if (link()->fWorkaroundUSB)
- {
- timeout=5000;
- }
-
- fWorkaroundUSBTimer = new TQTimer(this);
- connect(fWorkaroundUSBTimer, TQT_SIGNAL(timeout()), this, TQT_SLOT(workaroundUSB()));
- fWorkaroundUSBTimer->start(timeout, true);
-
- return true;
-}
-
-/**
- * We've been notified by our TQSocketNotifier that we have data available on the
- * socket. Try to go through the remaining steps of the connnection process.
- * Note: If we return at all from this before the very end without a successful
- * connection, we need to make sure we restart our connection open timer, otherwise
- * it won't be restarted.
- */
-void DeviceCommThread::acceptDevice()
-{
- FUNCTIONSETUP;
-
- int ret;
-
- /**
- * Our socket notifier should be the only reason that we end up here.
- * If we're here without him being active, we have a problem. Try to clean
- * up and get out.
- */
- if (!fSocketNotifierActive)
- {
- if (!fAcceptedCount)
- {
- kdWarning() << k_funcinfo << ": Accidentally in acceptDevice()"
- << endl;
- }
- fAcceptedCount++;
- if (fAcceptedCount>10)
- {
- // Damn the torpedoes
- KPILOT_DELETE(fSocketNotifier);
- }
- return;
- }
-
- if (fSocketNotifier)
- {
- // fSocketNotifier->setEnabled(false);
- fSocketNotifierActive=false;
- KPILOT_DELETE(fSocketNotifier);
- }
-
- DEBUGKPILOT << fname << ": Found connection on device: ["
- << link()->pilotPath().latin1() << "]." <<endl;
-
- DEBUGKPILOT << fname
- << ": Current status: ["
- << link()->statusString()
- << "] and socket: [" << fTempSocket << "]" << endl;
-
- ret = pi_listen(fTempSocket, 1);
- if (ret < 0)
- {
- char *s = strerror(errno);
-
- WARNINGKPILOT << "pi_listen returned: [" << s << "]" << endl;
-
- // Presumably, strerror() returns things in
- // local8Bit and not latin1.
- TQApplication::postEvent(link(), new DeviceCommEvent(EventLogError,
- i18n("Cannot listen on Pilot socket (%1)").
- arg(TQString::fromLocal8Bit(s))));
- reset();
- return;
- }
-
- TQApplication::postEvent(link(), new DeviceCommEvent(EventLogProgress, TQString::null, 10));
-
- DEBUGKPILOT << fname <<
- ": Listening to pilot. Now trying accept..." << endl;
-
- int timeout = 20;
- fPilotSocket = pi_accept_to(fTempSocket, 0, 0, timeout);
-
- if (fPilotSocket < 0)
- {
- char *s = strerror(errno);
-
- WARNINGKPILOT << "pi_accept returned: [" << s << "]" << endl;
-
- TQApplication::postEvent(link(), new DeviceCommEvent(EventLogError, i18n("Cannot accept Pilot (%1)")
- .arg(TQString::fromLocal8Bit(s))));
-
- link()->fLinkStatus = PilotLinkError;
- reset();
- return;
- }
-
- DEBUGKPILOT << fname << ": Link accept done." << endl;
-
- if ((link()->fLinkStatus != DeviceOpen) || (fPilotSocket == -1))
- {
- link()->fLinkStatus = PilotLinkError;
- WARNINGKPILOT << "Already connected or unable to connect!" << endl;
-
- TQApplication::postEvent(link(), new DeviceCommEvent(EventLogError, i18n("Cannot accept Pilot (%1)")
- .arg(i18n("already connected"))));
-
- reset();
- return;
- }
-
- TQApplication::postEvent(link(), new DeviceCommEvent(EventLogProgress, TQString::null, 30));
-
- DEBUGKPILOT << fname << ": doing dlp_ReadSysInfo..." << endl;
-
- struct SysInfo sys_info;
- if (dlp_ReadSysInfo(fPilotSocket, &sys_info) < 0)
- {
- TQApplication::postEvent(link(), new DeviceCommEvent(EventLogError,
- i18n("Unable to read system information from Pilot")));
-
- link()->fLinkStatus=PilotLinkError;
- reset();
- return;
- }
- else
- {
- DEBUGKPILOT << fname << ": dlp_ReadSysInfo successful..." << endl;
-
- KPILOT_DELETE(link()->fPilotSysInfo);
- link()->fPilotSysInfo = new KPilotSysInfo(&sys_info);
- DEBUGKPILOT << fname
- << ": RomVersion: [" << link()->fPilotSysInfo->getRomVersion()
- << "] Locale: [" << link()->fPilotSysInfo->getLocale()
- << "] Product: [" << link()->fPilotSysInfo->getProductID()
- << "]" << endl;
- }
-
- // If we've made it this far, make sure our USB workaround timer doesn't fire!
- fWorkaroundUSBTimer->stop();
- KPILOT_DELETE(fWorkaroundUSBTimer);
-
- TQApplication::postEvent(link(), new DeviceCommEvent(EventLogProgress, TQString::null, 60));
-
- KPILOT_DELETE(link()->fPilotUser);
- link()->fPilotUser = new KPilotUser;
-
- DEBUGKPILOT << fname << ": doing dlp_ReadUserInfo..." << endl;
-
- /* Ask the pilot who it is. And see if it's who we think it is. */
- dlp_ReadUserInfo(fPilotSocket, link()->fPilotUser->data());
-
- TQString n = link()->getPilotUser().name();
- DEBUGKPILOT << fname
- << ": Read user name: [" << n << "]" << endl;
-
- TQApplication::postEvent(link(), new DeviceCommEvent(EventLogProgress, i18n("Checking last PC..."), 90));
-
- /* Tell user (via Pilot) that we are starting things up */
- if ((ret=dlp_OpenConduit(fPilotSocket)) < 0)
- {
- DEBUGKPILOT << fname
- << ": dlp_OpenConduit returned: [" << ret << "]" << endl;
-
- TQApplication::postEvent(link(), new DeviceCommEvent(EventLogError,
- i18n("Could not read user information from the Pilot. "
- "Perhaps you have a password set on the device?")));
-
- }
- link()->fLinkStatus = AcceptedDevice;
-
- TQApplication::postEvent(link(), new DeviceCommEvent(EventLogProgress, TQString::null, 100));
-
- DeviceCommEvent * ev = new DeviceCommEvent(EventDeviceReady);
- ev->setCurrentSocket(fPilotSocket);
- TQApplication::postEvent(link(), ev);
-
-}
-
-void DeviceCommThread::workaroundUSB()
-{
- FUNCTIONSETUP;
-
- reset();
-}
-
-void DeviceCommThread::run()
-{
- FUNCTIONSETUP;
- fDone = false;
-
- startOpenTimer(this, fOpenTimer);
-
- int sleepBetweenPoll = 2;
- // keep the thread alive until we're supposed to be done
- while (!fDone)
- {
- TQThread::sleep(sleepBetweenPoll);
- }
-
- close();
- // now sleep one last bit to make sure the pthread inside
- // pilot-link (potentially, if it's libusb) is done before we exit
- TQThread::sleep(1);
-
- DEBUGKPILOT << fname << ": comm thread now done..." << endl;
-}
-
-KPilotDeviceLink::KPilotDeviceLink(TQObject * parent, const char *name,
- const TQString &tempDevice) :
- KPilotLink(parent, name), fLinkStatus(Init), fWorkaroundUSB(false),
- fPilotSocket(-1), fTempDevice(tempDevice), fMessages(new Messages(this)), fDeviceCommThread(0L)
-{
- FUNCTIONSETUP;
-
- DEBUGKPILOT << fname
- << ": Pilot-link version: [" << PILOT_LINK_NUMBER
- << "]" << endl;
-}
-
-KPilotDeviceLink::~KPilotDeviceLink()
-{
- FUNCTIONSETUP;
- close();
- KPILOT_DELETE(fPilotSysInfo);
- KPILOT_DELETE(fPilotUser);
- KPILOT_DELETE(fMessages);
-}
-
-/* virtual */bool KPilotDeviceLink::isConnected() const
-{
- return fLinkStatus == AcceptedDevice;
-}
-
-/* virtual */bool KPilotDeviceLink::event(TQEvent *e)
-{
- FUNCTIONSETUP;
-
- bool handled = false;
-
- if ((int)e->type() == EventDeviceReady)
- {
- DeviceCommEvent* t = static_cast<DeviceCommEvent*>(e);
- fPilotSocket = t->currentSocket();
- emit deviceReady( this);
- handled = true;
- }
- else if ((int)e->type() == EventLogMessage)
- {
- DeviceCommEvent* t = static_cast<DeviceCommEvent*>(e);
- emit logMessage(t->message());
- handled = true;
- }
- else if ((int)e->type() == EventLogError)
- {
- DeviceCommEvent* t = static_cast<DeviceCommEvent*>(e);
- emit logError(t->message());
- handled = true;
- }
- else if ((int)e->type() == EventLogProgress)
- {
- DeviceCommEvent* t = static_cast<DeviceCommEvent*>(e);
- emit logProgress(t->message(), t->progress());
- handled = true;
- }
- else
- {
- handled = KPilotLink::event(e);
- }
-
- return handled;
-}
-
-void KPilotDeviceLink::stopCommThread()
-{
- FUNCTIONSETUP;
- if (fDeviceCommThread)
- {
- fDeviceCommThread->setDone(true);
-
- // try to wait for our thread to finish, but don't
- // block the main thread forever
- if (fDeviceCommThread->running())
- {
- DEBUGKPILOT << fname
- << ": comm thread still running. "
- << "waiting for it to complete." << endl;
- bool done = fDeviceCommThread->wait(5000);
- if (!done)
- {
- DEBUGKPILOT << fname
- << ": comm thread still running "
- << "after wait(). "
- << "going to have to terminate it."
- << endl;
- // not normally to be done, but we must make sure
- // that this device doesn't come back alive
- fDeviceCommThread->terminate();
- fDeviceCommThread->wait();
- }
- }
-
- fDeviceCommThread->close();
-
- KPILOT_DELETE(fDeviceCommThread);
- }
-}
-
-void KPilotDeviceLink::close()
-{
- FUNCTIONSETUP;
-
- stopCommThread();
-
- fPilotSocket = (-1);
-}
-
-void KPilotDeviceLink::reset(const TQString & dP)
-{
- FUNCTIONSETUP;
-
- fLinkStatus = Init;
-
- // Release all resources
- //
- close();
- fPilotPath = TQString::null;
-
- fPilotPath = dP;
- if (fPilotPath.isEmpty())
- fPilotPath = fTempDevice;
- if (fPilotPath.isEmpty())
- return;
-
- reset();
-}
-
-void KPilotDeviceLink::startCommThread()
-{
- FUNCTIONSETUP;
-
- stopCommThread();
-
- if (fTempDevice.isEmpty() && pilotPath().isEmpty())
- {
- WARNINGKPILOT << "No point in trying empty device."
- << endl;
-
- TQString msg = i18n("The Pilot device is not configured yet.");
- WARNINGKPILOT << msg << endl;
-
- fLinkStatus = PilotLinkError;
-
- emit logError(msg);
- return;
- }
-
- fDeviceCommThread = new DeviceCommThread(this);
- fDeviceCommThread->start();
-}
-
-void KPilotDeviceLink::reset()
-{
- FUNCTIONSETUP;
-
- fMessages->reset();
- close();
-
- checkDevice();
-
- fLinkStatus = WaitingForDevice;
-
- startCommThread();
-}
-
-void KPilotDeviceLink::checkDevice()
-{
- // If the device exists yet doesn't have the right
- // permissions, complain and then continue anyway.
- //
- TQFileInfo fi(fPilotPath);
- if (fi.exists())
- {
- // If it exists, it ought to be RW already.
- //
- if (!(fi.isReadable() && fi.isWritable()))
- {
- emit logError(i18n("Pilot device %1 is not read-write.")
- .arg(fPilotPath));
- }
- }
- else
- {
- // It doesn't exist, mention this in the log
- // (relevant as long as we use only one device type)
- //
- emit
- logError(i18n("Pilot device %1 does not exist. "
- "Probably it is a USB device and will appear during a HotSync.")
- .arg(fPilotPath));
- // Suppress all normal and error messages about opening the device.
- fMessages->block(Messages::OpenMessage | Messages::OpenFailMessage,
- true);
- }
-}
-
-void KPilotDeviceLink::setTempDevice(const TQString &d)
-{
- fTempDevice = d;
- DeviceMap::self()->bindDevice(fTempDevice);
-}
-
-/* virtual */bool KPilotDeviceLink::tickle()
-{
- // No FUNCTIONSETUP here because it may be called from
- // a separate thread.
- return pi_tickle(pilotSocket()) >= 0;
-}
-
-/* virtual */void KPilotDeviceLink::addSyncLogEntryImpl(const TQString &entry)
-{
- dlp_AddSyncLogEntry(fPilotSocket,
- const_cast<char *>((const char *)Pilot::toPilot(entry)));
-}
-
-bool KPilotDeviceLink::installFile(const TQString & f, const bool deleteFile)
-{
- FUNCTIONSETUP;
-
- DEBUGKPILOT << fname << ": Installing file " << f << endl;
-
- if (!TQFile::exists(f))
- return false;
-
- char buffer[PATH_MAX];
- memset(buffer, 0, PATH_MAX);
- strlcpy(buffer, TQFile::encodeName(f), PATH_MAX);
- struct pi_file *pf = pi_file_open(buffer);
-
- if (!f)
- {
- WARNINGKPILOT << "Cannot open file " << f << endl;
- emit logError(i18n
- ("<qt>Cannot install the file &quot;%1&quot;.</qt>").
- arg(f));
- return false;
- }
-
- if (pi_file_install(pf, fPilotSocket, 0, 0L) < 0)
- {
- WARNINGKPILOT << "Cannot pi_file_install " << f << endl;
- emit logError(i18n
- ("<qt>Cannot install the file &quot;%1&quot;.</qt>").
- arg(f));
- return false;
- }
-
- pi_file_close(pf);
- if (deleteFile)
- TQFile::remove(f);
-
- return true;
-}
-
-int KPilotDeviceLink::openConduit()
-{
- return dlp_OpenConduit(fPilotSocket);
-}
-
-TQString KPilotDeviceLink::statusString(LinkStatus l)
-{
- TQString s= CSL1("KPilotDeviceLink=");
-
- switch (l)
- {
- case Init:
- s.append(CSL1("Init"));
- break;
- case WaitingForDevice:
- s.append(CSL1("WaitingForDevice"));
- break;
- case FoundDevice:
- s.append(CSL1("FoundDevice"));
- break;
- case CreatedSocket:
- s.append(CSL1("CreatedSocket"));
- break;
- case DeviceOpen:
- s.append(CSL1("DeviceOpen"));
- break;
- case AcceptedDevice:
- s.append(CSL1("AcceptedDevice"));
- break;
- case SyncDone:
- s.append(CSL1("SyncDone"));
- break;
- case PilotLinkError:
- s.append(CSL1("PilotLinkError"));
- break;
- case WorkaroundUSB:
- s.append(CSL1("WorkaroundUSB"));
- break;
- }
-
- return s;
-}
-
-TQString KPilotDeviceLink::statusString() const
-{
- return statusString(status() );
-}
-
-void KPilotDeviceLink::endSync(EndOfSyncFlags f)
-{
- FUNCTIONSETUP;
-
- if (UpdateUserInfo == f)
- {
- getPilotUser().setLastSyncPC((unsigned long) gethostid());
- getPilotUser().setLastSyncDate(time(0));
-
- DEBUGKPILOT << fname << ": Writing username " << getPilotUser().name() << endl;
-
- dlp_WriteUserInfo(pilotSocket(), getPilotUser().data());
- addSyncLogEntry(i18n("End of HotSync\n"));
- }
- dlp_EndOfSync(pilotSocket(), 0);
- KPILOT_DELETE(fPilotSysInfo);
- KPILOT_DELETE(fPilotUser);
-}
-
-int KPilotDeviceLink::getNextDatabase(int index, struct DBInfo *dbinfo)
-{
- FUNCTIONSETUP;
-
- pi_buffer_t buf = { 0, 0, 0 };
- int r = dlp_ReadDBList(pilotSocket(), 0, dlpDBListRAM, index, &buf);
- if (r >= 0)
- {
- memcpy(dbinfo, buf.data, sizeof(struct DBInfo));
- }
- return r;
-}
-
-// Find a database with the given name. Info about the DB is stored into dbinfo (e.g. to be used later on with retrieveDatabase).
-int KPilotDeviceLink::findDatabase(const char *name, struct DBInfo *dbinfo,
- int index, unsigned long type, unsigned long creator)
-{
- FUNCTIONSETUP;
- return dlp_FindDBInfo(pilotSocket(), 0, index, const_cast<char *>(name),
- type, creator, dbinfo);
-}
-
-bool KPilotDeviceLink::retrieveDatabase(const TQString &fullBackupName,
- DBInfo *info)
-{
- FUNCTIONSETUP;
-
- if (fullBackupName.isEmpty() || !info)
- {
- // Don't even bother trying to convert or retrieve.
- return false;
- }
-
- DEBUGKPILOT << fname << ": Writing DB <" << info->name << "> "
- << " to " << fullBackupName << endl;
-
- TQCString encodedName = TQFile::encodeName(fullBackupName);
- struct pi_file *f = pi_file_create(encodedName, info);
-
- if (!f)
- {
- WARNINGKPILOT << "Failed, unable to create file" << endl;
- return false;
- }
-
- if (pi_file_retrieve(f, pilotSocket(), 0, 0L) < 0)
- {
- WARNINGKPILOT << "Failed, unable to back up database" << endl;
-
- pi_file_close(f);
- return false;
- }
-
- pi_file_close(f);
- return true;
-}
-
-KPilotLink::DBInfoList KPilotDeviceLink::getDBList(int cardno, int flags)
-{
- bool cont=true;
- DBInfoList dbs;
- int index=0;
- while (cont)
- {
- pi_buffer_t buf = { 0, 0, 0 };
- pi_buffer_clear(&buf);
- // DBInfo*dbi=new DBInfo();
- if (dlp_ReadDBList(pilotSocket(), cardno, flags | dlpDBListMultiple,
- index, &buf)<0)
- {
- cont=false;
- }
- else
- {
- DBInfo db_n;
- DBInfo *db_it = (DBInfo *)buf.data;
- int info_count = buf.used / sizeof(struct DBInfo);
-
- while (info_count>0)
- {
- memcpy(&db_n, db_it, sizeof(struct DBInfo));
- ++db_it;
- info_count--;
- dbs.append(db_n);
- }
- index=db_n.index+1;
- }
- }
- return dbs;
-}
-
-const KPilotCard *KPilotDeviceLink::getCardInfo(int card)
-{
- KPilotCard *cardinfo=new KPilotCard();
- if (dlp_ReadStorageInfo(pilotSocket(), card, cardinfo->cardInfo())<0)
- {
- WARNINGKPILOT << "Could not get info for card " << card << endl;
-
- KPILOT_DELETE(cardinfo);
- return 0L;
- }
- return cardinfo;
-}
-
-PilotDatabase *KPilotDeviceLink::database(const TQString &name)
-{
- return new PilotSerialDatabase( this, name );
-}
-
-PilotDatabase *KPilotDeviceLink::database(const DBInfo *info)
-{
- return new PilotSerialDatabase( this, info );
-}
-
diff --git a/kpilot/lib/kpilotdevicelink.h b/kpilot/lib/kpilotdevicelink.h
deleted file mode 100644
index a648b23c7..000000000
--- a/kpilot/lib/kpilotdevicelink.h
+++ /dev/null
@@ -1,220 +0,0 @@
-#ifndef _KPILOT_KPILOTDEVICELINK_H
-#define _KPILOT_KPILOTDEVICELINK_H
-/*
-**
-** Copyright (C) 1998-2001 by Dan Pilone
-** Copyright (C) 2003-2004 Reinhold Kainhofer <reinhold@kainhofer.com>
-** Copyright (C) 2006 Adriaan de Groot <groot@kde.org>
-**
-*/
-
-/*
-** This program 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; either version 2.1 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 Lesser General Public License for more details.
-**
-** You should have received a copy of the GNU Lesser General Public License
-** along with this program in a file called COPYING; if not, write to
-** the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
-** MA 02110-1301, USA.
-*/
-
-/*
-** Bug reports and questions can be sent to kde-pim@kde.org
-*/
-
-#include "kpilotlink.h"
-
-class TQThread;
-
-class DeviceMap; ///< Globally tracks all devices that have a link assigned
-class Messages; ///< Tracks which messages have been printed
-class DeviceCommThread; ///< Thread for doing all palm device communications
-
-/**
-* The link behaves like a state machine most of the time:
-* it waits for the actual device to become available, and
-* then becomes ready to handle syncing.
-*/
-enum LinkStatus {
- Init,
- WaitingForDevice,
- FoundDevice,
- CreatedSocket,
- DeviceOpen,
- AcceptedDevice,
- SyncDone,
- PilotLinkError,
- WorkaroundUSB
-} ;
-
-/**
-* Custom events we can be handling...
-*/
-enum DeviceCustomEvents {
- EventLogMessage = TQEvent::User + 777,
- EventLogError,
- EventLogProgress,
- EventDeviceReady
-};
-
-/**
-* Definition of the device link class for physical
-* handheld devices, which communicate with the PC
-* using DLP / SLP via the pilot-link library.
-*/
-class KDE_EXPORT KPilotDeviceLink : public KPilotLink
-{
-friend class PilotSerialDatabase;
-friend class DeviceCommThread;
-
-Q_OBJECT
-
-public:
- /**
- * Constructor. Creates a link that can sync to a physical handheld.
- * Call reset() on it to start looking for a device.
- *
- * @param parent Parent object.
- * @param name Name of this object.
- * @param tempDevice Path to device node to use as an alternative
- * to the "normal" one set by KPilot.
- */
- KPilotDeviceLink( TQObject *parent = 0,
- const char *name = 0,
- const TQString &tempDevice = TQString::null );
-
- /**
- * Destructor. This rudely ends the communication with the handheld.
- * It is best to call endOfSync() or finishSync() before destroying
- * the device.
- */
- virtual ~KPilotDeviceLink();
-
- /**
- * Get the status (state enum) of this link.
- * @return The LinkStatus enum for the link's current state.
- */
- LinkStatus status() const
- {
- return fLinkStatus;
- }
-
- /** Get a human-readable string for the given status @p l. */
- static TQString statusString(LinkStatus l);
-
- // The following API is the actual implementation of
- // the KPilotLink API, for documentation see that file.
- //
- virtual TQString statusString() const;
- virtual bool isConnected() const;
- virtual void reset( const TQString & );
- virtual void close();
- virtual void reset();
- virtual bool event(TQEvent *e);
- virtual bool tickle();
- virtual const KPilotCard *getCardInfo(int card);
- virtual void endSync( EndOfSyncFlags f );
- virtual int openConduit();
- virtual int getNextDatabase(int index,struct DBInfo *);
- virtual int findDatabase(const char *name, struct DBInfo*,
- int index=0, unsigned long type=0, unsigned long creator=0);
- virtual bool retrieveDatabase(const TQString &path, struct DBInfo *db);
- virtual DBInfoList getDBList(int cardno=0, int flags=dlpDBListRAM);
- virtual PilotDatabase *database( const TQString &name );
- virtual PilotDatabase *database( const DBInfo *info );
-
-protected:
- virtual bool installFile(const TQString &, const bool deleteFile);
- virtual void addSyncLogEntryImpl( const TQString &s );
- virtual int pilotSocket() const
- {
- return fPilotSocket;
- }
-
-
-private:
- LinkStatus fLinkStatus;
-
-
-public:
-
- /**
- * Special-cases. Call this after a reset to set device-
- * specific workarounds; the only one currently known
- * is the Zire 31/72 T5 quirk of doing a non-HotSync
- * connect when it's switched on.
- */
- void setWorkarounds(bool usb)
- {
- fWorkaroundUSB = usb;
- }
-
- /**
- * Sets an additional device, which should be tried as fallback.
- * Useful for hotplug enviroments, this device is used @em once
- * for accepting a connection.
- */
- void setTempDevice( const TQString &device );
-
- /**
- * Sets the device to use. Used by probe dialog, since we know
- * what device to use, but we don't want to start the detection
- * immediately.
- */
- void setDevice( const TQString &device )
- {
- fPilotPath = device;
- }
-
-
-protected:
- /** Should we work around the Zire31/72 quirk? @see setWorkarounds() */
- bool fWorkaroundUSB;
-
-
- /**
- * Check for device permissions and existence, emitting
- * warnings for weird situations. This is primarily intended
- * to inform the user.
- */
- void checkDevice();
-
-protected:
- /**
- * Path with resolved symlinks, to prevent double binding
- * to the same device.
- */
- TQString fRealPilotPath;
-
- /**
- * Pilot-link library handles for the device once it's opened.
- */
- int fPilotSocket;
- TQString fTempDevice;
-
- /**
- * Handle cases where we can't accept or open the device,
- * and data remains available on the pilot socket.
- */
- int fAcceptedCount;
-
- /**
- * Start/Stop our device communication thread.
- */
- void startCommThread();
- void stopCommThread();
-
-protected:
- Messages *fMessages;
- DeviceCommThread *fDeviceCommThread;
-} ;
-
-#endif
-
diff --git a/kpilot/lib/kpilotdevicelinkPrivate.h b/kpilot/lib/kpilotdevicelinkPrivate.h
deleted file mode 100644
index 823d93726..000000000
--- a/kpilot/lib/kpilotdevicelinkPrivate.h
+++ /dev/null
@@ -1,330 +0,0 @@
-#ifndef _KPILOT_KPILOTDEVICELINKPRIVATE_H
-#define _KPILOT_KPILOTDEVICELINKPRIVATE_H
-/*
-**
-** Copyright (C) 2007 by Jason 'vanRijn' Kasper <vR@movingparts.net>
-**
-*/
-
-/*
-** This program 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; either version 2.1 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 Lesser General Public License for more details.
-**
-** You should have received a copy of the GNU Lesser General Public License
-** along with this program in a file called COPYING; if not, write to
-** the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
-** MA 02110-1301, USA.
-*/
-
-/*
-** Bug reports and questions can be sent to kde-pim@kde.org
-*/
-
-#include <errno.h>
-
-#include <tqstringlist.h>
-#include <tqthread.h>
-
-#include "kpilotdevicelink.h"
-#include "options.h"
-
-class TQTimer;
-class TQSocketNotifier;
-
-// singleton helper class
-class DeviceMap
-{
-public:
- static DeviceMap *self()
- {
- if (!mThis)
- mThis = new DeviceMap();
- return mThis;
- }
-
- bool canBind(const TQString &device)
- {
- FUNCTIONSETUPL(5);
- DEBUGKPILOT << fname << ": device: ["
- << device << "]" << endl;
-
- showList();
- return !mBoundDevices.contains(device);
- }
-
- void bindDevice(const TQString &device)
- {
- FUNCTIONSETUPL(5);
- DEBUGKPILOT << fname << ": device: ["
- << device << "]" << endl;
-
- mBoundDevices.append(device);
- showList();
- }
-
- void unbindDevice(const TQString &device)
- {
- FUNCTIONSETUPL(5);
- DEBUGKPILOT << fname << ": device: ["
- << device << "]" << endl;
-
- mBoundDevices.remove(device);
- showList();
- }
-
-protected:
- DeviceMap()
- {
- mBoundDevices.clear();
- }
- ~DeviceMap()
- {
- }
-
- TQStringList mBoundDevices;
- static DeviceMap *mThis;
-
-private:
- void showList() const
- {
- FUNCTIONSETUPL(5);
-
- if ( !(mBoundDevices.count() > 0))
- return;
-
- DEBUGKPILOT << fname << ": Bound devices: ["
- << ((mBoundDevices.count() > 0) ?
- mBoundDevices.join(CSL1(", ")) : CSL1("<none>"))
- << "]" << endl;
- }
-};
-
-class Messages
-{
-public:
- Messages(KPilotDeviceLink *parent) :
- fDeviceLink(parent)
- {
- reset();
- }
-
- void reset()
- {
- messages = 0;
- messagesMask = ~messageIsError; // Never block errors
- }
-
- void block(unsigned int m, bool force=false)
- {
- if (force)
- {
- // Force blocking this message, even if it's an error msg.
- messages |= m;
- }
- else
- {
- messages |= (m & messagesMask);
- }
- }
-
- /**
- * Some messages are only printed once and are suppressed
- * after that. These are indicated by flag bits in
- * messages. The following enum is a bitfield.
- */
- enum
- {
- OpenMessage=1, ///< Trying to open device ..
- OpenFailMessage=2 ///< Failed to open device ...
- };
- int messages;
- int messagesMask;
- static const int messageIsError = 0;
-
- /** Determines whether message @p s which has an id of @p msgid (one of
- * the enum values mentioned above) should be printed, which is only if that
- * message has not been suppressed through messagesMask.
- * If return is true, this method also adds it to the messagesMask.
- */
- bool shouldPrint(int msgid)
- {
- if (!(messages & msgid))
- {
- block(msgid);
- return true;
- }
- else
- {
- return false;
- }
- }
-
-protected:
- KPilotDeviceLink *fDeviceLink;
-};
-
-class DeviceCommEvent : public QEvent
-{
-public:
- DeviceCommEvent(DeviceCustomEvents type, TQString msg = TQString::null,
- int progress = 0) :
- TQEvent( (TQEvent::Type)type ), fMessage(msg), fProgress(progress),
- fPilotSocket(-1)
- {
- }
- TQString message() const
- {
- return fMessage;
- }
- int progress()
- {
- return fProgress;
- }
-
- inline void setCurrentSocket(int i)
- {
- fPilotSocket = i;
- }
-
- inline int currentSocket()
- {
- return fPilotSocket;
- }
-private:
- TQString fMessage;
- int fProgress;
- /**
- * Pilot-link library handles for the device once it's opened.
- */
- int fPilotSocket;
-};
-
-/** Class that handles all device communications. We do this
- in a different thread so that we do not block the main Qt
- Event thread (similar to Swing's AWT event dispatch thread).
- */
-
-class DeviceCommThread : public TQObject, public QThread
-{
-friend class KPilotDeviceLink;
-
-Q_OBJECT
-
-public:
- DeviceCommThread(KPilotDeviceLink *d);
- virtual ~DeviceCommThread();
-
- virtual void run();
-
- void setDone(bool b)
- {
- FUNCTIONSETUP;
- fDone = b;
- }
-
-protected:
-
- void close();
-
- void reset();
-
- /**
- * Does the low-level opening of the device and handles the
- * pilot-link library initialisation.
- */
- bool open(const TQString &device = TQString::null);
-
-protected slots:
- /**
- * Attempt to open the device. Called regularly to check
- * if the device exists (to handle USB-style devices).
- */
- void openDevice();
-
- /**
- * Called when the device is opened *and* activity occurs on the
- * device. This indicates the beginning of a hotsync.
- */
- void acceptDevice();
-
- /**
- * This slot fires whenever we've been trying to establish a hotsync with
- * the device for longer than a given amount of time. When this slot is
- * fired, we will tear down the communications process and start over again.
- */
- void workaroundUSB();
-
-private:
- volatile bool fDone;
-
- KPilotDeviceLink *fHandle;
- inline KPilotDeviceLink *link()
- {
- if (fHandle)
- {
- return fHandle;
- }
- else
- {
- FUNCTIONSETUP;
- WARNINGKPILOT << "Link asked for, but either I'm "
- << "done or I don't have a valid handle. "
- << "Shutting down comm thread." << endl;
- TQThread::exit();
- return 0;
- }
- }
-
- /**
- * Timers and Notifiers for detecting activity on the device.
- */
- TQTimer *fOpenTimer;
- TQSocketNotifier *fSocketNotifier;
- bool fSocketNotifierActive;
-
- /** Timer used to check for a badly-connected Z31/72 */
- TQTimer *fWorkaroundUSBTimer;
-
- /**
- * Pilot-link library handles for the device once it's opened.
- */
- int fPilotSocket;
- int fTempSocket;
-
- inline TQString errorMessage(int e)
- {
- switch (e)
- {
- case ENOENT:
- return i18n(" The port does not exist.");
- break;
- case ENODEV:
- return i18n(" There is no such device.");
- break;
- case EPERM:
- return i18n(" You do not have permission to open the "
- "Pilot device.");
- break;
- default:
- return i18n(" Check Pilot path and permissions.");
- }
- }
-
- /**
- * Handle cases where we can't accept or open the device,
- * and data remains available on the pilot socket.
- */
- int fAcceptedCount;
-
-};
-
-
-#endif
-
diff --git a/kpilot/lib/kpilotlib.kcfg b/kpilot/lib/kpilotlib.kcfg
deleted file mode 100644
index 09e829216..000000000
--- a/kpilot/lib/kpilotlib.kcfg
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<kcfg xmlns="http://www.kde.org/standards/kcfg/1.0"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://www.kde.org/standards/kcfg/1.0
- http://www.kde.org/standards/kcfg/1.0/kcfg.xsd" >
- <kcfgfile name="kpilotrc"/>
- <group name="Notification Messages">
- </group>
-</kcfg>
diff --git a/kpilot/lib/kpilotlibSettings.kcfgc b/kpilot/lib/kpilotlibSettings.kcfgc
deleted file mode 100644
index d3b0d1352..000000000
--- a/kpilot/lib/kpilotlibSettings.kcfgc
+++ /dev/null
@@ -1,7 +0,0 @@
-File=kpilotlib.kcfg
-ClassName=KPilotLibSettings
-Singleton=true
-ItemAccessors=true
-Mutators=true
-GlobalEnums=true
-SetUserTexts=true
diff --git a/kpilot/lib/kpilotlink.cc b/kpilot/lib/kpilotlink.cc
deleted file mode 100644
index da85d489d..000000000
--- a/kpilot/lib/kpilotlink.cc
+++ /dev/null
@@ -1,272 +0,0 @@
-/* KPilot
-**
-** Copyright (C) 1998-2001 by Dan Pilone
-** Copyright (C) 2003-2004 Reinhold Kainhofer <reinhold@kainhofer.com>
-** Copyright (C) 2006-2007 Adriaan de Groot <groot@kde.org>
-** Copyright (C) 2007 Jason 'vanRijn' Kasper <vR@movingparts.net>
-**
-*/
-
-/*
-** This program 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; either version 2.1 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 Lesser General Public License for more details.
-**
-** You should have received a copy of the GNU Lesser General Public License
-** along with this program in a file called COPYING; if not, write to
-** the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
-** MA 02110-1301, USA.
-*/
-
-/*
-** Bug reports and questions can be sent to kde-pim@kde.org
-*/
-
-#include "options.h"
-
-
-
-#include <sys/stat.h>
-#include <sys/types.h>
-#include <stdio.h>
-#include <unistd.h>
-#include <fcntl.h>
-#include <errno.h>
-
-#include <iostream>
-
-#include <pi-source.h>
-#include <pi-socket.h>
-#include <pi-dlp.h>
-#include <pi-file.h>
-#include <pi-buffer.h>
-
-#include <tqdir.h>
-#include <tqtimer.h>
-#include <tqdatetime.h>
-#include <tqthread.h>
-
-#include <kconfig.h>
-#include <kmessagebox.h>
-#include <kstandarddirs.h>
-#include <kurl.h>
-#include <kio/netaccess.h>
-
-#include "pilotUser.h"
-#include "pilotSysInfo.h"
-#include "pilotCard.h"
-#include "pilotSerialDatabase.h"
-#include "pilotLocalDatabase.h"
-
-#include "kpilotlink.moc"
-
-/** Class that handles periodically tickling the handheld through
-* the virtual tickle() method; deals with cancels through the
-* shared fDone variable.
-*/
-class TickleThread : public QThread
-{
-public:
- TickleThread(KPilotLink *d, bool *done, int timeout) :
- TQThread(),
- fHandle(d),
- fDone(done),
- fTimeout(timeout)
- { };
- virtual ~TickleThread();
-
- virtual void run();
-
- static const int ChecksPerSecond = 5;
- static const int SecondsPerTickle = 5;
-
-private:
- KPilotLink *fHandle;
- bool *fDone;
- int fTimeout;
-} ;
-
-TickleThread::~TickleThread()
-{
-}
-
-void TickleThread::run()
-{
- FUNCTIONSETUP;
- int subseconds = ChecksPerSecond;
- int ticktock = SecondsPerTickle;
- int timeout = fTimeout;
- DEBUGKPILOT << fname << ": Running for "
- << timeout << " seconds." << endl;
- DEBUGKPILOT << fname << ": Done @" << (void *) fDone << endl;
-
- while (!(*fDone))
- {
- TQThread::msleep(1000/ChecksPerSecond);
- if (!(--subseconds))
- {
- if (timeout)
- {
- if (!(--timeout))
- {
- TQApplication::postEvent(fHandle, new TQEvent(static_cast<TQEvent::Type>(KPilotLink::EventTickleTimeout)));
- break;
- }
- }
- subseconds=ChecksPerSecond;
- if (!(--ticktock))
- {
- ticktock=SecondsPerTickle;
- fHandle->tickle();
- }
- }
- }
-}
-
-
-
-
-
-
-
-
-
-KPilotLink::KPilotLink( TQObject *parent, const char *name ) :
- TQObject( parent, name ),
- fPilotPath(TQString::null),
- fPilotUser(0L),
- fPilotSysInfo(0L),
- fTickleDone(true),
- fTickleThread(0L)
-
-{
- FUNCTIONSETUP;
-
- fPilotUser = new KPilotUser();
- strncpy( fPilotUser->data()->username, "Henk Westbroek",
- sizeof(fPilotUser->data()->username)-1);
- fPilotUser->setLastSuccessfulSyncDate( 1139171019 );
-
- fPilotSysInfo = new KPilotSysInfo();
- memset(fPilotSysInfo->sysInfo()->prodID, 0,
- sizeof(fPilotSysInfo->sysInfo()->prodID));
- strncpy(fPilotSysInfo->sysInfo()->prodID, "LocalLink",
- sizeof(fPilotSysInfo->sysInfo()->prodID)-1);
- fPilotSysInfo->sysInfo()->prodIDLength =
- strlen(fPilotSysInfo->sysInfo()->prodID);
-}
-
-KPilotLink::~KPilotLink()
-{
- FUNCTIONSETUP;
- KPILOT_DELETE(fPilotUser);
- KPILOT_DELETE(fPilotSysInfo);
-}
-
-/* virtual */ bool KPilotLink::event(TQEvent *e)
-{
- if ((int)e->type() == EventTickleTimeout)
- {
- stopTickle();
- emit timeout();
- return true;
- }
- else return TQObject::event(e);
-}
-
-/*
-Start a tickle thread with the indicated timeout.
-*/
-void KPilotLink::startTickle(unsigned int timeout)
-{
- FUNCTIONSETUP;
-
- Q_ASSERT(fTickleDone);
-
- /*
- ** We've told the thread to finish up, but it hasn't
- ** done so yet - so wait for it to do so, should be
- ** only 200ms at most.
- */
- if (fTickleDone && fTickleThread)
- {
- fTickleThread->wait();
- KPILOT_DELETE(fTickleThread);
- }
-
- DEBUGKPILOT << fname << ": Done @" << (void *) (&fTickleDone) << endl;
-
- fTickleDone = false;
- fTickleThread = new TickleThread(this,&fTickleDone,timeout);
- fTickleThread->start();
-}
-
-void KPilotLink::stopTickle()
-{
- FUNCTIONSETUP;
- fTickleDone = true;
- if (fTickleThread)
- {
- fTickleThread->wait();
- KPILOT_DELETE(fTickleThread);
- }
-}
-
-unsigned int KPilotLink::installFiles(const TQStringList & l, const bool deleteFiles)
-{
- FUNCTIONSETUP;
-
- TQStringList::ConstIterator i,e;
- unsigned int k = 0;
- unsigned int n = 0;
- unsigned int total = l.count();
-
- for (i = l.begin(), e = l.end(); i != e; ++i)
- {
- emit logProgress(TQString::null,
- (int) ((100.0 / total) * (float) n));
-
- if (installFile(*i, deleteFiles))
- k++;
- n++;
- }
- emit logProgress(TQString::null, 100);
-
- return k;
-}
-
-void KPilotLink::addSyncLogEntry(const TQString & entry, bool log)
-{
- FUNCTIONSETUP;
- if (entry.isEmpty()) return;
-
- addSyncLogEntryImpl(entry);
- if (log)
- {
- emit logMessage(entry);
- }
-}
-
-
-/* virtual */ int KPilotLink::openConduit()
-{
- return 0;
-}
-
-/* virtual */ int KPilotLink::pilotSocket() const
-{
- return -1;
-}
-
-/* virtual */ PilotDatabase *KPilotLink::database( const DBInfo *info )
-{
- FUNCTIONSETUP;
- return database( Pilot::fromPilot( info->name ) );
-}
-
diff --git a/kpilot/lib/kpilotlink.h b/kpilot/lib/kpilotlink.h
deleted file mode 100644
index 4389cb8bd..000000000
--- a/kpilot/lib/kpilotlink.h
+++ /dev/null
@@ -1,501 +0,0 @@
-#ifndef _KPILOT_KPILOTLINK_H
-#define _KPILOT_KPILOTLINK_H
-/* KPilot
-**
-** Copyright (C) 1998-2001 by Dan Pilone
-** Copyright (C) 2003-2004 Reinhold Kainhofer <reinhold@kainhofer.com>
-** Copyright (C) 2006 Adriaan de Groot <groot@kde.org>
-**
-*/
-
-/*
-** This program 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; either version 2.1 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 Lesser General Public License for more details.
-**
-** You should have received a copy of the GNU Lesser General Public License
-** along with this program in a file called COPYING; if not, write to
-** the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
-** MA 02110-1301, USA.
-*/
-
-/*
-** Bug reports and questions can be sent to kde-pim@kde.org
-*/
-
-#include <pi-dlp.h>
-
-#include <tqobject.h>
-#include <tqvaluelist.h>
-
-/** @file
-* Encapsulates all the communication with the handheld. Also
-* does daemon-like polling of the handheld. Interesting status
-* changes are signalled.
-*/
-
-class TQThread;
-class KPilotUser;
-class KPilotSysInfo;
-class KPilotCard;
-class PilotDatabase;
-
-
-
-/**
-* KPilotLink handles some aspects of
-* communication with a Handheld. A KPilotLink object represents a
-* connection to a device (which may be active or inactive -- the latter in
-* cases where the link is @e waiting for a device to show up). The object
-* handles waiting, protocol initialization and some general
-* tasks such as getting system information or user data.
-*
-* The actual communication with the handheld should use the
-* PilotDatabase methods or use pilot-link dlp_* functions directly
-* on the file descriptor returned by handle().
-*
-* Implementations of this abstract class are KPilotDeviceLink
-* (for real physical devices) and KPilotLocalLink (for devices
-* represented by an on-disk directory).
-*
-*
-* @section General
-*
-* A KPilotLink object (or one of its subclasses) represents a single
-* (potential) link to a handheld device. The handheld device may be
-* a real physical one (subclass KPilotDeviceLink) or a virtual one
-* (subclass KPilotLocalLink). Every KPilotLink is associated with exactly
-* one identifier for @em what device it is attached to. Physical devices
-* have physical locations as interpreted by libpisock -- /dev/ttyUSB0 for
-* instance, or net:any -- while virtual devices are associated with a location
-* in the filesystem.
-*
-* A particular KPilotLink object may be connected -- communicating with
-* a device -- or not. For physical devices, that means that the device is
-* attached to the system (for USB-connected devices, think of it as a
-* metaphor in the case of net:any) and that the HotSync button has been
-* pressed. Virtual devices are immediately connected on creation, since there
-* is no sensible "not connected" state. A connected KPilotLink has access to the
-* data on the handheld and can give that data to the rest of the application.
-*
-* The data access API is divided into roughly three parts, with tickle handling
-* being a special fourth part (see section below). These are:
-*
-* - Message logging
-* - System information access
-* - Database access
-*
-* @section Lifecycle
-*
-* The life-cycle of a KPilotLink object is as follows:
-*
-* # Object is created (one of the concrete subclasses, anyway)
-* # Object gets a location assigned through reset(const TQString &)
-* # Object is connected to the handheld device (somehow, depends on subclass)
-* # Object emits signal deviceReady()
-*
-* After this, the application is free to use the API to access the information from
-* the handheld. When the device connection is no longer needed, call either
-* endOfSync() or finishSync() to wrap up the communications. The object remains
-* alive and may be re-used by calling reset() to use the same location or
-* reset(const TQString &) to give it a new location.
-*
-* @section Tickle handling.
-*
-* During a HotSync, the Pilot expects to be kept awake by (nearly)
-* continuous communication with the PC. The Pilot doesn't like
-* long periods of inactivity, since they drain the batteries while
-* the communications hardware is kept powered up. If the period of
-* inactivity is too long, the Pilot times out, shuts down the
-* communication, and the HotSync is broken.
-
-* Sometimes, however, periods of inactivity cannot be avoided --
-* for instance, if you _have_ to ask the user something during a
-* sync, or if you are fetching a large amount of data from a slow
-* source (libkabc can do that, if your addressbook is on an LDAP
-* server). During these periods of inactivity (as far as the Pilot
-* can tell), you can "tickle" the Pilot to keep it awake. This
-* prevents the communications from being shut down. It's not
-* a good idea to do this all the time -- battery life and possible
-* corruption of the dlp_ communications streams. Hence, you should
-* start and stop tickling the Pilot around any computation which:
-* - may take a long time
-* - does not in itself @em ever communicate directly with the Pilot
-*
-*
-*
-* You can call slot tickle() whenever you like just to do a
-* dlp_tickle() call on the Pilot. It will return true if the
-* tickle was successful, false otherwise (this can be used to
-* detect if the communication with the Pilot has shut down for
-* some reason).
-*
-* The protected methods startTickle() and stopTickle() are intended
-* to be called only from SyncActions -- I can't think of any other
-* legitimate use, since everything being done during a HotSync is
-* done via subclasses of SyncActions anyway, and SyncAction provides
-* access to these methods though its own start- and stopTickle().
-*
-* Call startTickle with a timeout in seconds, or 0 for no timeout.
-* This timeout is _unrelated_ to the timeout in the Pilot's
-* communications. Instead, it indicates how long to continue
-* tickling the Pilot before emitting the timeout() signal. This
-* can be useful for placing an upper bound on the amount of
-* time to wait for, say, user interaction -- you don't want an
-* inattentive user to drain the batteries during a sync because
-* he doesn't click on "Yes" for some question. If you pass a
-* timeout of 0, the Pilot will continue to be tickled until you
-* call stopTickle().
-*
-* Call stopTickle() to stop tickling the Pilot and continue with
-* normal operation. You @em must call stopTickle() before calling
-* anything else that might communicate with the Pilot, to avoid
-* corrupting the dlp_ communications stream. (TODO: Mutex the heck
-* out of this to avoid this problem). Note that stopTickle() may
-* hang up the caller for a small amount of time (up to 200ms)
-* before returning.
-*
-* event() and TickleTimeoutEvent are part of the implementation
-* of tickling, and are only accidentally visible.
-*
-* Signal timeout() is emitted if startTickle() has been called
-* with a non-zero timeout and that timeout has elapsed. The
-* tickler is stopped before timeout is emitted.
-*/
-class KDE_EXPORT KPilotLink : public QObject
-{
-Q_OBJECT
-friend class SyncAction;
-public:
- /** A list of DBInfo structures. */
- typedef TQValueList<struct DBInfo> DBInfoList;
-
- /** Constructor. Use reset() to start looking for a device. */
- KPilotLink( TQObject *parent = 0, const char *name = 0 );
-
- /** Destructor. This rudely interrupts any communication in progress.
- * It is best to call endOfSync() or finishSync() before destroying
- * the device.
- */
- virtual ~KPilotLink();
-
-
- /** Provides a human-readable status string. */
- virtual TQString statusString() const = 0;
-
- /**
- * True if HotSync has been started but not finished yet
- * (ie. the physical Pilot is waiting for sync commands)
- */
- virtual bool isConnected() const = 0;
-
-
- /**
- * Information on what kind of device we're dealing with.
- * A link is associated with a path -- either the node in
- * /dev that the physical device is attached to, or an
- * IP address, or a filesystem path for local links.
- * Whichever is being used, this function returns its
- * name in a human-readable form.
- */
- TQString pilotPath() const
- {
- return fPilotPath;
- }
-
- /**
- * Return the device link to the Init state and try connecting
- * to the given device path (if it's non-empty). What the
- * path means depends on the kind of link we're instantiating.
- *
- * @see reset()
- * @see pilotPath()
- */
- virtual void reset(const TQString &pilotPath) = 0;
-
- /** Allows our class to receive custom events that our threads
- * will be giving to us, including tickle timeouts and
- * device communication events.
- */
- virtual bool event(TQEvent *e);
-
- /**
- * Install the list of files (full paths!) named by @p l
- * onto the handheld (or whatever this link represents).
- * If @p deleteFiles is true, the source files are removed.
- *
- * @return the number of files successfully installed.
- */
- unsigned int installFiles(const TQStringList &l, const bool deleteFiles);
-
- /**
- * Write a log entry to the handheld. If @p log is true,
- * then the signal logMessage() is also emitted. This
- * function is supposed to @em only write to the handheld's
- * log (with a physical device, that is what appears on
- * screen at the end of a sync).
- */
- void addSyncLogEntry(const TQString &entry,bool log=true);
-
- /**
- * Find a database with the given @p name (and optionally,
- * type @p type and creator ID (from pi_mktag) @p creator,
- * on searching from index @p index on the handheld.
- * Fills in the DBInfo structure @p info if found.
- *
- * @return >=0 on success. See the documentation for each
- * subclass for particular meanings.
- * @return < 0 on error.
- */
- virtual int findDatabase(const char *name,
- struct DBInfo *info,
- int index=0,
- unsigned long type=0,
- unsigned long creator=0) = 0;
-
- /**
- * Retrieve the database indicated by DBInfo @p *db into the
- * local file @p path. This copies all the data, and you can
- * create a PilotLocalDatabase from the resulting @p path .
- *
- * @return @c true on success
- */
- virtual bool retrieveDatabase(const TQString &path, struct DBInfo *db) = 0;
-
- /**
- * Fill the DBInfo structure @p db with information about
- * the next database (in some ordering) counting from
- * @p index.
- *
- * @return < 0 on error
- */
- virtual int getNextDatabase(int index,struct DBInfo *db) = 0;
-
- /**
- * Returns a list of DBInfo structures describing all the
- * databases available on the link (ie. device) with the
- * given card number @p cardno and flags @p flags. No known
- * handheld uses a cardno other than 0; use flags to
- * indicate what kind of databases to fetch -- @c dlpDBListRAM
- * or @c dlpDBListROM.
- *
- * @return list of DBInfo objects, one for each database
- * @note ownership of the DBInfo objects is passed to the
- * caller, who must delete the objects.
- */
- virtual DBInfoList getDBList(int cardno=0, int flags=dlpDBListRAM) = 0;
-
- /**
- * Return a database object for manipulating the database with
- * name @p name on the link. This database may be local or
- * remote, depending on the kind of link in use.
- *
- * @return pointer to database object, or 0 on error.
- * @note ownership of the database object is given to the caller,
- * who must delete the object in time.
- */
- virtual PilotDatabase *database( const TQString &name ) = 0;
-
- /**
- * Return a database object for manipulating the database with
- * the name stored in the DBInfo structure @p info . The default
- * version goes through method database( const TQString & ), above.
- *
- * @return pointer to database object, or 0 on error.
- * @note ownership of the database object is given to the caller.
- */
- virtual PilotDatabase *database( const DBInfo *info );
-
- /**
- * Retrieve the user information from the device. Ownership
- * is kept by the link, and at the end of a sync the user
- * information is synced back to the link -- so it may be
- * modified, but don't make local copies of it.
- *
- * @note Do not call this before the sync begins!
- */
- KPilotUser &getPilotUser()
- {
- return *fPilotUser;
- }
-
- /**
- * System information about the handheld. Ownership is kept
- * by the link. For non-device links, something fake is
- * returned.
- *
- * @note Do not call this before the sync begins!
- */
- const KPilotSysInfo &getSysInfo()
- {
- return *fPilotSysInfo;
- }
-
- /**
- * Retrieve information about the data card @p card;
- * I don't think that any pilot supports card numbers
- * other than 0. Non-device links return something fake.
- *
- * This function may return NULL (non-device links or
- * on error).
- *
- * @note Ownership of the KPilotCard object is given
- * to the caller, who must delete it.
- */
- virtual const KPilotCard *getCardInfo(int card=0) = 0;
-
- /**
- * When ending the sync, you can do so gracefully, updating the
- * last-sync time to indicate a successful sync and setting the
- * user name on the device, or you can skip that (for unsuccessful
- * syncs, generally).
- */
- enum EndOfSyncFlags {
- NoUpdate, ///< Do not update the user info
- UpdateUserInfo ///< Update user info and last successful sync date
- } ;
-
- /**
- * Custom events we can be handling...
- */
- enum CustomEvents {
- EventTickleTimeout = 1066
- };
-
- /**
- * End the sync in a gracuful manner. If @p f is UpdateUserInfo,
- * the sync was successful and the user info and last successful sync
- * timestamp are updated.
- */
- virtual void endSync( EndOfSyncFlags f ) = 0;
-
-signals:
- /**
- * A timeout associated with tickling has occurred. Each
- * time startTickle() is called, you can state how long
- * tickling should last (at most) before timing out.
- *
- * You can only get a timeout when the Qt event loop is
- * running, which somewhat limits the usefulness of timeouts.
- */
- void timeout();
-
- /** Signal that a message has been written to the sync log. */
- void logMessage(const TQString &);
-
- /** Signal that an error has occurred, for logging. */
- void logError(const TQString &);
-
- /**
- * Signal that progress has been made, for logging purposes.
- * @p p is the percentage completed (0 <= s <= 100).
- * The string @p s is logged as well, if non-Null.
- */
- void logProgress(const TQString &s, int p);
-
- /**
- * Emitted once the user information has been read and
- * the HotSync is really ready to go.
- */
- void deviceReady( KPilotLink * );
-
-
-public slots:
- /**
- * Release all resources, including the master pilot socket,
- * timers, etc.
- */
- virtual void close() = 0;
-
- /**
- * Assuming things have been set up at least once already by
- * a call to reset() with parameters, use this slot to re-start
- * with the same settings.
- */
- virtual void reset() = 0;
-
- /** Tickle the underlying device exactly once. */
- virtual bool tickle() = 0;
-
-protected:
- /**
- * Path of the device special file that will be used.
- * Usually /dev/pilot, /dev/ttySx, or /dev/usb/x. May be
- * a filesystem path for local links.
- */
- TQString fPilotPath;
-
- /**
- * Start tickling the Handheld (every few seconds). This
- * lasts until @p timeout seconds have passed (or forever
- * if @p timeout is zero).
- *
- * @note Do not call startTickle() twice with no intervening
- * stopTickle().
- */
- void startTickle(unsigned int timeout=0);
-
- /**
- * Stop tickling the Handheld. This may block for some
- * time (less than a second) to allow the tickle thread
- * to finish.
- */
- void stopTickle();
-
- /**
- * Install a single file onto the device link. Full pathname
- * @p f is used; in addition, if @p deleteFile is true remove
- * the source file. Returns @c true if the install succeeded.
- */
- virtual bool installFile( const TQString &f, const bool deleteFile ) = 0;
-
- /**
- * Notify the Pilot user that a conduit is running now.
- * On real devices, this prints out (on screen) which database
- * is now opened; useful for progress reporting.
- *
- * @return -1 on error
- * @note the default implementation returns 0
- */
- virtual int openConduit();
-
- /**
- * Returns a file handle for raw operations. Not recommended.
- * On links with no physical device backing, returns -1.
- *
- * @note the default implementation returns -1
- */
- virtual int pilotSocket() const;
-
- /**
- * Actually write an entry to the device link. The message
- * @p s must be guaranteed non-empty.
- */
- virtual void addSyncLogEntryImpl( const TQString &s ) = 0;
-
- /**
- * User information structure. Should be filled in when a sync
- * starts, so that conduits can use the information.
- */
- KPilotUser *fPilotUser;
-
- /**
- * System information about the device. Filled in when the
- * sync starts. Non-device links need to fake something.
- */
- KPilotSysInfo *fPilotSysInfo;
-
-
-private:
- bool fTickleDone;
- TQThread *fTickleThread;
-
-} ;
-
-#endif
diff --git a/kpilot/lib/kpilotlocallink.cc b/kpilot/lib/kpilotlocallink.cc
deleted file mode 100644
index 8834b4a81..000000000
--- a/kpilot/lib/kpilotlocallink.cc
+++ /dev/null
@@ -1,368 +0,0 @@
-/* KPilot
-**
-** Copyright (C) 1998-2001 by Dan Pilone
-** Copyright (C) 2003-2004 Reinhold Kainhofer <reinhold@kainhofer.com>
-** Copyright (C) 2006-2007 Adriaan de Groot <groot@kde.org>
-** Copyright (C) 2007 Jason 'vanRijn' Kasper <vR@movingparts.net>
-**
-*/
-
-/*
-** This program 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; either version 2.1 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 Lesser General Public License for more details.
-**
-** You should have received a copy of the GNU Lesser General Public License
-** along with this program in a file called COPYING; if not, write to
-** the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
-** MA 02110-1301, USA.
-*/
-
-/*
-** Bug reports and questions can be sent to kde-pim@kde.org
-*/
-
-#include "options.h"
-
-
-
-#include <sys/stat.h>
-#include <sys/types.h>
-#include <stdio.h>
-#include <unistd.h>
-#include <fcntl.h>
-#include <errno.h>
-
-#include <iostream>
-
-#include <pi-source.h>
-#include <pi-socket.h>
-#include <pi-dlp.h>
-#include <pi-file.h>
-#include <pi-buffer.h>
-
-#include <tqdir.h>
-#include <tqtimer.h>
-#include <tqdatetime.h>
-#include <tqthread.h>
-
-#include <kconfig.h>
-#include <kmessagebox.h>
-#include <kstandarddirs.h>
-#include <kurl.h>
-#include <kio/netaccess.h>
-
-#include "pilotSerialDatabase.h"
-#include "pilotLocalDatabase.h"
-
-#include "kpilotlink.h"
-#include "kpilotlocallink.moc"
-
-
-typedef QPair<TQString, struct DBInfo> DatabaseDescriptor;
-typedef TQValueList<DatabaseDescriptor> DatabaseDescriptorList;
-
-class KPilotLocalLink::Private
-{
-public:
- DatabaseDescriptorList fDBs;
-} ;
-
-unsigned int KPilotLocalLink::findAvailableDatabases( KPilotLocalLink::Private &info, const TQString &path )
-{
- FUNCTIONSETUP;
-
- info.fDBs.clear();
-
- TQDir d(path);
- if (!d.exists())
- {
- // Perhaps return an error?
- return 0;
- }
-
- // Use this to fake indexes in the list of DBInfo structs
- unsigned int counter = 0;
-
- TQStringList dbs = d.entryList( CSL1("*.pdb"), TQDir::Files | TQDir::NoSymLinks | TQDir::Readable );
- for ( TQStringList::ConstIterator i = dbs.begin(); i != dbs.end() ; ++i)
- {
- struct DBInfo dbi;
-
- // Remove the trailing 4 characters
- TQString dbname = (*i);
- dbname.remove(dbname.length()-4,4);
-
- TQString dbnamecheck = (*i).left((*i).findRev(CSL1(".pdb")));
- Q_ASSERT(dbname == dbnamecheck);
-
- if (PilotLocalDatabase::infoFromFile( path + CSL1("/") + (*i), &dbi))
- {
- DEBUGKPILOT << fname << ": Loaded "
- << dbname << endl;
- dbi.index = counter;
- info.fDBs.append( DatabaseDescriptor(dbname,dbi) );
- ++counter;
- }
- }
-
- DEBUGKPILOT << fname << ": Total " << info.fDBs.count()
- << " databases." << endl;
- return info.fDBs.count();
-}
-
-
-KPilotLocalLink::KPilotLocalLink( TQObject *parent, const char *name ) :
- KPilotLink(parent,name),
- fReady(false),
- d( new Private )
-{
- FUNCTIONSETUP;
-}
-
-KPilotLocalLink::~KPilotLocalLink()
-{
- FUNCTIONSETUP;
- KPILOT_DELETE(d);
-}
-
-/* virtual */ TQString KPilotLocalLink::statusString() const
-{
- return fReady ? CSL1("Ready") : CSL1("Waiting") ;
-}
-
-/* virtual */ bool KPilotLocalLink::isConnected() const
-{
- return fReady;
-}
-
-/* virtual */ void KPilotLocalLink::reset( const TQString &p )
-{
- FUNCTIONSETUP;
- fPath = p;
- reset();
-}
-
-/* virtual */ void KPilotLocalLink::reset()
-{
- FUNCTIONSETUP;
- TQFileInfo info( fPath );
- fReady = !fPath.isEmpty() && info.exists() && info.isDir() ;
- if (fReady)
- {
- findAvailableDatabases(*d, fPath);
- TQTimer::singleShot(500,this,TQT_SLOT(ready()));
- }
- else
- {
- WARNINGKPILOT << "The local link path <"
- << fPath
- << "> does not exist or is not a directory. No sync can be done."
- << endl;
- }
-}
-
-/* virtual */ void KPilotLocalLink::close()
-{
- fReady = false;
-}
-
-/* virtual */ bool KPilotLocalLink::tickle()
-{
- return true;
-}
-
-/* virtual */ const KPilotCard *KPilotLocalLink::getCardInfo(int)
-{
- return 0;
-}
-
-/* virtual */ void KPilotLocalLink::endSync( EndOfSyncFlags f )
-{
- Q_UNUSED(f);
- fReady = false;
-}
-
-/* virtual */ int KPilotLocalLink::openConduit()
-{
- FUNCTIONSETUP;
- return 0;
-}
-
-
-/* virtual */ int KPilotLocalLink::getNextDatabase( int index, struct DBInfo *info )
-{
- FUNCTIONSETUP;
-
- if ( (index<0) || (index>=(int)d->fDBs.count()) )
- {
- WARNINGKPILOT << "Index out of range." << endl;
- return -1;
- }
-
- DatabaseDescriptor dd = d->fDBs[index];
-
- DEBUGKPILOT << fname << ": Getting database " << dd.first << endl;
-
- if (info)
- {
- *info = dd.second;
- }
-
- return index+1;
-}
-
-/* virtual */ int KPilotLocalLink::findDatabase(const char *name, struct DBInfo*info,
- int index, unsigned long type, unsigned long creator)
-{
- FUNCTIONSETUP;
-
- if ( (index<0) || (index>=(int)d->fDBs.count()) )
- {
- WARNINGKPILOT << "Index out of range." << endl;
- return -1;
- }
-
- if (!name)
- {
- WARNINGKPILOT << "NULL name." << endl;
- return -1;
- }
-
- TQString desiredName = Pilot::fromPilot(name);
- DEBUGKPILOT << fname << ": Looking for DB " << desiredName << endl;
- for ( DatabaseDescriptorList::ConstIterator i = d->fDBs.at(index);
- i != d->fDBs.end(); ++i)
- {
- const DatabaseDescriptor &dd = *i;
- if (dd.first == desiredName)
- {
- if ( (!type || (type == dd.second.type)) &&
- (!creator || (creator == dd.second.creator)) )
- {
- if (info)
- {
- *info = dd.second;
- }
- return index;
- }
- }
-
- ++index;
- }
-
- return -1;
-}
-
-/* virtual */ void KPilotLocalLink::addSyncLogEntryImpl(TQString const &s)
-{
- FUNCTIONSETUP;
- DEBUGKPILOT << fname << ": " << s << endl ;
-}
-
-/* virtual */ bool KPilotLocalLink::installFile(TQString const &path, bool deletefile)
-{
- FUNCTIONSETUP;
-
- TQFileInfo srcInfo(path);
- TQString canonicalSrcPath = srcInfo.dir().canonicalPath() + CSL1("/") + srcInfo.fileName() ;
- TQString canonicalDstPath = fPath + CSL1("/") + srcInfo.fileName();
-
- if (canonicalSrcPath == canonicalDstPath)
- {
- // That's a cheap copy operation
- return true;
- }
-
- KURL src = KURL::fromPathOrURL( canonicalSrcPath );
- KURL dst = KURL::fromPathOrURL( canonicalDstPath );
-
- KIO::NetAccess::file_copy(src,dst,-1,true);
-
- if (deletefile)
- {
- KIO::NetAccess::del(src, 0L);
- }
-
- return true;
-}
-
-/* virtual */ bool KPilotLocalLink::retrieveDatabase( const TQString &path, struct DBInfo *db )
-{
- FUNCTIONSETUP;
-
- TQString dbname = Pilot::fromPilot(db->name) + CSL1(".pdb") ;
- TQString sourcefile = fPath + CSL1("/") + dbname ;
- TQString destfile = path ;
-
- DEBUGKPILOT << fname << ": src=" << sourcefile << endl;
- DEBUGKPILOT << fname << ": dst=" << destfile << endl;
-
- TQFile in( sourcefile );
- if ( !in.exists() )
- {
- WARNINGKPILOT << "Source file " << sourcefile << " doesn't exist." << endl;
- return false;
- }
- if ( !in.open( IO_ReadOnly | IO_Raw ) )
- {
- WARNINGKPILOT << "Can't read source file " << sourcefile << endl;
- return false;
- }
-
- TQFile out( destfile );
- if ( !out.open( IO_WriteOnly | IO_Truncate | IO_Raw ) )
- {
- WARNINGKPILOT << "Can't write destination file " << destfile << endl;
- return false;
- }
-
- const Q_ULONG BUF_SIZ = 8192 ;
- char buf[BUF_SIZ];
- Q_LONG r;
-
- while ( (r=in.readBlock(buf,BUF_SIZ))>0 )
- {
- out.writeBlock(buf,r);
- }
- out.flush();
- in.close();
-
- return out.exists();
-}
-
-KPilotLink::DBInfoList KPilotLocalLink::getDBList( int, int )
-{
- FUNCTIONSETUP;
- DBInfoList l;
- for ( DatabaseDescriptorList::ConstIterator i=d->fDBs.begin();
- i != d->fDBs.end(); ++i)
- {
- l.append( (*i).second );
- }
- return l;
-}
-
-
-/* virtual */ PilotDatabase *KPilotLocalLink::database( const TQString &name )
-{
- FUNCTIONSETUP;
- return new PilotLocalDatabase( fPath, name );
-}
-
-
-
-/* slot */ void KPilotLocalLink::ready()
-{
- if (fReady)
- {
- emit deviceReady(this);
- }
-}
-
diff --git a/kpilot/lib/kpilotlocallink.h b/kpilot/lib/kpilotlocallink.h
deleted file mode 100644
index ca37bb57d..000000000
--- a/kpilot/lib/kpilotlocallink.h
+++ /dev/null
@@ -1,95 +0,0 @@
-#ifndef _KPILOT_KPILOTLOCALLINK_H
-#define _KPILOT_KPILOTLOCALLINK_H
-/*
-**
-** Copyright (C) 1998-2001 by Dan Pilone
-** Copyright (C) 2003-2004 Reinhold Kainhofer <reinhold@kainhofer.com>
-** Copyright (C) 2006 Adriaan de Groot <groot@kde.org>
-**
-*/
-
-/*
-** This program 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; either version 2.1 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 Lesser General Public License for more details.
-**
-** You should have received a copy of the GNU Lesser General Public License
-** along with this program in a file called COPYING; if not, write to
-** the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
-** MA 02110-1301, USA.
-*/
-
-/*
-** Bug reports and questions can be sent to kde-pim@kde.org
-*/
-
-#include "kpilotlink.h"
-
-/** @file
-* Definition of the local link class; implemented in kpilotlink.cc .
-*/
-
-
-/**
-* Implementation of the device link for file-system backed (ie. local, fake)
-* devices. Uses a directory specified in the reset() call to serve databases.
-*/
-class KDE_EXPORT KPilotLocalLink : public KPilotLink
-{
-Q_OBJECT
-public:
- KPilotLocalLink( TQObject *parent=0L, const char *name=0L );
- virtual ~KPilotLocalLink();
-
- virtual TQString statusString() const;
- virtual bool isConnected() const;
- virtual void reset( const TQString & );
- virtual void close();
- virtual void reset();
- virtual bool tickle();
- virtual const KPilotCard *getCardInfo(int card);
- virtual void endSync( EndOfSyncFlags f );
- virtual int openConduit();
- virtual int getNextDatabase(int index,struct DBInfo *);
- virtual int findDatabase(const char *name, struct DBInfo*,
- int index=0, unsigned long type=0, unsigned long creator=0);
- virtual bool retrieveDatabase(const TQString &path, struct DBInfo *db);
- virtual DBInfoList getDBList(int cardno=0, int flags=dlpDBListRAM);
- virtual PilotDatabase *database( const TQString &name );
-
-public slots:
- void ready();
-
-protected:
- virtual bool installFile(const TQString &, const bool deleteFile);
- virtual void addSyncLogEntryImpl( const TQString &s );
- virtual int pilotSocket() const
- {
- return -1;
- }
-
-protected:
- bool fReady;
- TQString fPath;
-
- class Private;
- Private *d;
-
- /**
- * Pre-process the directory @p path to find out which databases
- * live there.
- *
- * @return Number of database in @p path.
- */
- unsigned int findAvailableDatabases( Private &, const TQString &path );
-} ;
-
-
-#endif
-
diff --git a/kpilot/lib/options.cc b/kpilot/lib/options.cc
deleted file mode 100644
index be2b5e6e2..000000000
--- a/kpilot/lib/options.cc
+++ /dev/null
@@ -1,157 +0,0 @@
-/* KPilot
-**
-** Copyright (C) 2000-2001 by Adriaan de Groot
-** Copyright (C) 2003-2004 Reinhold Kainhofer <reinhold@kainhofer.com>
-**
-** This is a file of odds and ends, with debugging functions and stuff.
-*/
-
-/*
-** This program 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; either version 2.1 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 Lesser General Public License for more details.
-**
-** You should have received a copy of the GNU Lesser General Public License
-** along with this program in a file called COPYING; if not, write to
-** the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
-** MA 02110-1301, USA.
-*/
-
-/*
-** Bug reports and questions can be sent to kde-pim@kde.org
-*/
-
-
-#include "options.h"
-
-
-#include <iostream>
-
-#include <tqsize.h>
-
-#include <kconfig.h>
-#include <kdebug.h>
-#include <kcmdlineargs.h>
-
-#ifdef DEBUG
-int debug_level = 1;
-#else
-int debug_level = 0;
-#endif
-
-// The daemon also has a debug level; debug_spaces is 60 spaces,
-// to align FUNCTIONSETUP output. The one byte extra is for the NUL.
-//
-//
-static const char debug_spaces[61] =
- " "
- " "
- " ";
-
-
-TQString rtExpand(const TQString &s, Qt::TextFormat richText)
-{
- if (richText == Qt::RichText)
- {
- TQString t(s);
- return t.replace(CSL1("\n"), CSL1("<br/>\n"));
- }
- else
- {
- return s;
- }
-
-}
-
-TQDateTime readTm(const struct tm &t)
-{
- TQDateTime dt;
- dt.setDate(TQDate(1900 + t.tm_year, t.tm_mon + 1, t.tm_mday));
- dt.setTime(TQTime(t.tm_hour, t.tm_min, t.tm_sec));
- return dt;
-}
-
-
-
-struct tm writeTm(const TQDateTime &dt)
-{
- struct tm t;
-
- t.tm_wday = 0; // unimplemented
- t.tm_yday = 0; // unimplemented
- t.tm_isdst = 0; // unimplemented
-#ifdef HAVE_STRUCT_TM_TM_ZONE
- t.tm_zone = 0; // unimplemented
-#endif
-
- t.tm_year = dt.date().year() - 1900;
- t.tm_mon = dt.date().month() - 1;
- t.tm_mday = dt.date().day();
- t.tm_hour = dt.time().hour();
- t.tm_min = dt.time().minute();
- t.tm_sec = dt.time().second();
-
- return t;
-}
-
-
-
-struct tm writeTm(const TQDate &d)
-{
- TQDateTime dt(d);
- return writeTm(dt);
-}
-
-KPilotDepthCount::KPilotDepthCount(int, int level, const char *s) :
- fDepth(depth),
- fLevel(level),
- fName(s)
-{
- DEBUGKPILOT << "! DEPRECATED Depth call.\n! "
- << kdBacktrace(4) << endl;
-
- if (debug_level>=fLevel)
- {
- DEBUGKPILOT << indent() << ">" << name() << endl;
- }
- depth++;
-}
-
-KPilotDepthCount::KPilotDepthCount(int level, const char *s) :
- fDepth(depth),
- fLevel(level),
- fName(s)
-{
- if (debug_level>=fLevel)
- {
- DEBUGKPILOT << indent() << ">" << name() << endl;
- }
- depth++;
-}
-
-KPilotDepthCount::~KPilotDepthCount()
-{
- depth--;
- std::cerr.clear(std::ios_base::goodbit);
-}
-
-const char *KPilotDepthCount::indent() const
-{
- if (fDepth < 30)
- {
- return debug_spaces + 60-fDepth*2;
- }
- else
- {
- return debug_spaces;
- }
-}
-
-int KPilotDepthCount::depth = 0;
-
diff --git a/kpilot/lib/options.h b/kpilot/lib/options.h
deleted file mode 100644
index 9fe0f8be2..000000000
--- a/kpilot/lib/options.h
+++ /dev/null
@@ -1,199 +0,0 @@
-#ifndef _KPILOT_OPTIONS_H
-#define _KPILOT_OPTIONS_H
-/* options.h KPilot
-**
-** Copyright (C) 1998-2001,2002,2003 by Dan Pilone
-** Copyright (C) 2003-2004 Reinhold Kainhofer <reinhold@kainhofer.com>
-**
-** This file defines some global constants and macros for KPilot.
-** In particular, KDE2 is defined when KDE2 seems to be the environment
-** (is there a better way to do this?). Use of KDE2 to #ifdef sections
-** of code is deprecated though.
-**
-** Many debug functions are defined as well.
-*/
-
-/*
-** This program 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; either version 2.1 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 Lesser General Public License for more details.
-**
-** You should have received a copy of the GNU Lesser General Public License
-** along with this program in a file called COPYING; if not, write to
-** the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
-** MA 02110-1301, USA.
-*/
-
-/*
-** Bug reports and questions can be sent to kde-pim@kde.org
-*/
-
-#include "config.h"
-
-#include <tqglobal.h>
-#include <tqnamespace.h>
-#include <tqstring.h>
-
-#if (QT_VERSION < 0x030300)
-#error "This is KPilot for KDE3.5 and won't compile with Qt < 3.3.0"
-#endif
-
-#include <kdebug.h>
-#include <kdeversion.h>
-#include <klocale.h>
-
-#if !(KDE_IS_VERSION(3,4,0))
-#error "This is KPilot for (really) KDE 3.5 and won't compile with KDE < 3.4.0"
-#endif
-
-#if !(KDE_IS_VERSION(3,5,0))
-#warning "This is KPilot for KDE 3.5 and might not compile with KDE < 3.5.0"
-#endif
-
-#include "pilotLinkVersion.h"
-
-#include <iostream>
-
-using namespace std;
-inline std::ostream& operator <<(std::ostream &o, const TQString &s)
- { if (s.isEmpty()) return o<<"<empty>"; else return o<<s.latin1(); }
-inline std::ostream& operator <<(std::ostream &o, const TQCString &s)
- { if (s.isEmpty()) return o<<"<empty>"; else return o << *s; }
-
-
-#ifndef NDEBUG
-#define DEBUG (1)
-#endif
-
-extern KDE_EXPORT int debug_level;
-
-class KDE_EXPORT KPilotDepthCount
-{
-public:
- KPilotDepthCount(int, int level, const char *s);
- KPilotDepthCount(int level, const char *s);
- ~KPilotDepthCount();
- const char *indent() const;
- inline const char *name() const { return fName; } ;
- inline int level() const { return fLevel; } ;
-
-protected:
- static int depth;
- int fDepth;
- int fLevel;
- const char *fName;
-} ;
-
-
-#ifdef DEBUG
-#ifdef __GNUC__
-#define KPILOT_FNAMEDEF(l) KPilotDepthCount fname(l,__FUNCTION__)
-#else
-#define KPILOT_FNAMEDEF(l) KPilotDepthCount fname(l,__FILE__ ":" "__LINE__")
-#endif
-
-#define FUNCTIONSETUP KPILOT_FNAMEDEF(1)
-#define FUNCTIONSETUPL(l) KPILOT_FNAMEDEF(l)
-
-// stderr / iostream-based debugging.
-//
-//
-#define DEBUGKPILOT std::cerr
-#define WARNINGKPILOT std::cerr.clear(std::ios_base::goodbit),\
- std::cerr << "! " << k_funcinfo << std::endl << "! "
-
-
-
-
-inline std::ostream& operator <<(std::ostream &o, const KPilotDepthCount &d)
-{
- if (debug_level >= d.level())
- {
- o.clear(std::ios_base::goodbit);
- return o << d.indent() << ' ' << d.name();
- }
- else
- {
- o.setstate(std::ios_base::badbit | std::ios_base::failbit);
- return o;
- }
-}
-
-#else
-
-// no debugging at all
-//
-#define DEBUGSTREAM kndbgstream
-#define DEBUGKPILOT kndDebug()
-#define WARNINGKPILOT kndDebug()
-
-// With debugging turned off, FUNCTIONSETUP doesn't do anything.
-//
-//
-#define FUNCTIONSETUP const int fname = 0; Q_UNUSED(fname);
-#define FUNCTIONSETUPL(a) const int fname = a; Q_UNUSED(fname);
-#endif
-
-#define KPILOT_VERSION "4.9.4-3510 (elsewhere)"
-
-
-// Function to expand newlines in rich text to <br>\n
-TQString rtExpand(const TQString &s, Qt::TextFormat richText);
-
-
-
-/**
- * Convert a struct tm from the pilot-link package to a QDateTime
- */
-KDE_EXPORT TQDateTime readTm(const struct tm &t);
-/**
- * Convert a TQDateTime to a struct tm for use with the pilot-link package
- */
-KDE_EXPORT struct tm writeTm(const TQDateTime &dt);
-KDE_EXPORT struct tm writeTm(const TQDate &dt);
-
-
-// Some layout macros
-//
-// SPACING is a generic distance between visual elements;
-// 10 seems reasonably good even at high resolutions.
-//
-//
-#define SPACING (10)
-
-// Semi-Standard safe-free expression. Argument a may be evaluated more
-// than once though, so be careful.
-//
-//
-#define KPILOT_FREE(a) { if (a) { ::free(a); a=0L; } }
-#define KPILOT_DELETE(a) { if (a) { delete a; a=0L; } }
-
-
-// This marks strings that need to be i18n()ed in future,
-// but cannot be done now due to message freeze. The _P
-// variant is to handle plurals and is wrong, but unavoidable.
-//
-//
-#define TODO_I18N(a) TQString::fromLatin1(a)
-#define TODO_I18N_P(a,b,c) ((c>1) ? a : b)
-
-// Handle some cases for QT_NO_CAST_ASCII and NO_ASCII_CAST.
-// Where possible in the source, known constant strings in
-// latin1 encoding are marked with CSL1(), to avoid gobs
-// of latin1() or fromlatin1() calls which might obscure
-// those places where the code really is translating
-// user data from latin1.
-//
-// The extra "" in CSL1 is to enforce that it's only called
-// with constant strings.
-//
-//
-#define CSL1(a) TQString::fromLatin1(a "")
-
-#endif
diff --git a/kpilot/lib/pilot.cc b/kpilot/lib/pilot.cc
deleted file mode 100644
index 6a1267a9b..000000000
--- a/kpilot/lib/pilot.cc
+++ /dev/null
@@ -1,264 +0,0 @@
-/* pilot.cc KPilot
-**
-** Copyright (C) 1998-2001 by Dan Pilone
-** Copyright (C) 2003-2004 Reinhold Kainhofer <reinhold@kainhofer.com>
-** Copyright (C) 2003-2006 Adriaan de Groot <groot@kde.org>
-**
-** These are the base class structures that reside on the
-** handheld device -- databases and their parts.
-*/
-
-/*
-** This program 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; either version 2.1 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 Lesser General Public License for more details.
-**
-** You should have received a copy of the GNU Lesser General Public License
-** along with this program in a file called COPYING; if not, write to
-** the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
-** MA 02110-1301, USA.
-*/
-
-/*
-** Bug reports and questions can be sent to kde-pim@kde.org
-*/
-
-#include "options.h"
-
-#include <tqtextcodec.h>
-#include <tqmutex.h>
-#include <kcharsets.h>
-#include <kglobal.h>
-
-#include "pilot.h"
-#include "pilotDatabase.h"
-#include "pilotAppInfo.h"
-#include "pilotRecord.h"
-
-
-namespace Pilot
-{
-static TQTextCodec *codec = 0L;
-static TQMutex* mutex = 0L;
-
-
-TQString fromPilot( const char *c, int len )
-{
- mutex->lock();
- TQString str = codec->toUnicode(c,len);
- mutex->unlock();
- return str;
-}
-
-TQString fromPilot( const char *c )
-{
- mutex->lock();
- TQString str = codec->toUnicode(c);
- mutex->unlock();
- return str;
-}
-
-TQCString toPilot( const TQString &s )
-{
- mutex->lock();
- TQCString str = codec->fromUnicode(s);
- mutex->unlock();
- return str;
-}
-
-int toPilot( const TQString &s, char *buf, int len)
-{
- mutex->lock();
- // See toPilot() below.
- memset( buf, 0, len );
- int used = len;
- TQCString cbuf = codec->fromUnicode(s,used);
- if (used > len)
- {
- used=len;
- }
- memcpy( buf, cbuf.data(), used );
- mutex->unlock();
- return used;
-}
-
-int toPilot( const TQString &s, unsigned char *buf, int len)
-{
- mutex->lock();
- // Clear the buffer
- memset( buf, 0, len );
-
- // Convert to 8-bit encoding
- int used = len;
- TQCString cbuf = codec->fromUnicode(s,used);
-
- // Will it fit in the buffer?
- if (used > len)
- {
- // Ought to be impossible, anyway, since 8-bit encodings
- // are shorter than the UTF-8 encodings (1 byte per character
- // vs. 1-or-more byte per character).
- used=len;
- }
-
- // Fill the buffer with encoded data.
- memcpy( buf, cbuf.data(), used );
- mutex->unlock();
- return used;
-}
-
-bool setupPilotCodec(const TQString &s)
-{
- FUNCTIONSETUP;
- mutex = new TQMutex();
- mutex->lock();
- TQString encoding(KGlobal::charsets()->encodingForName(s));
-
- DEBUGKPILOT << fname << ": Using codec name " << s << endl;
- DEBUGKPILOT << fname << ": Creating codec " << encoding << endl;
-
- // if the desired codec can't be found, latin1 will be returned anyway, no need to do this manually
- codec = KGlobal::charsets()->codecForName(encoding);
-
- if (codec)
- {
- DEBUGKPILOT << fname << ": Got codec " << codec->name() << endl;
- }
-
- mutex->unlock();
- return codec;
-}
-
-TQString codecName()
-{
- return TQString::fromLatin1(codec->name());
-}
-
-TQString category(const struct CategoryAppInfo *info, unsigned int i)
-{
- if (!info || (i>=CATEGORY_COUNT))
- {
- return TQString::null;
- }
-
- mutex->lock();
- TQString str = codec->toUnicode(info->name[i],
- MIN(strlen(info->name[i]), CATEGORY_SIZE-1));
- mutex->unlock();
- return str;
-}
-
-
-int findCategory(const struct CategoryAppInfo *info,
- const TQString &selectedCategory,
- bool unknownIsUnfiled)
-{
- FUNCTIONSETUP;
-
- if (!info)
- {
- WARNINGKPILOT << "Bad CategoryAppInfo pointer" << endl;
- return -1;
- }
-
- int currentCatID = -1;
- for (unsigned int i=0; i<CATEGORY_COUNT; i++)
- {
- if (!info->name[i][0]) continue;
- if (selectedCategory == category(info, i))
- {
- currentCatID = i;
- break;
- }
- }
-
- if (-1 == currentCatID)
- {
- DEBUGKPILOT << fname << ": Category name "
- << selectedCategory << " not found." << endl;
- }
- else
- {
- DEBUGKPILOT << fname << ": Matched category " << currentCatID << endl;
- }
-
- if ((currentCatID == -1) && unknownIsUnfiled)
- currentCatID = 0;
- return currentCatID;
-}
-
-int insertCategory(struct CategoryAppInfo *info,
- const TQString &label,
- bool unknownIsUnfiled)
-{
- FUNCTIONSETUP;
-
- if (!info)
- {
- WARNINGKPILOT << "Bad CategoryAppInfo pointer" << endl;
- return -1;
- }
-
-
- int c = findCategory(info,label,unknownIsUnfiled);
- if (c<0)
- {
- // This is the case when the category is not known
- // and unknownIsUnfiled is false.
- for (unsigned int i=0; i<CATEGORY_COUNT; i++)
- {
- if (!info->name[i][0])
- {
- c = i;
- break;
- }
- }
-
- if ((c>0) && (c < (int)CATEGORY_COUNT))
- {
- // 0 is always unfiled, can't change that.
- toPilot(label,info->name[c],CATEGORY_SIZE);
- }
- else
- {
- WARNINGKPILOT << "Category name "
- << label
- << " could not be added." << endl;
- c = -1;
- }
- }
-
- return c;
-}
-
-void dumpCategories(const struct CategoryAppInfo *info)
-{
- FUNCTIONSETUP;
-
- if (!info)
- {
- WARNINGKPILOT << "Dumping bad pointer." << endl;
- return;
- }
-
- DEBUGKPILOT << fname << " lastUniqueId: "
- << (int) info->lastUniqueID << endl;
- for (unsigned int i = 0; i < CATEGORY_COUNT; i++)
- {
- if (!info->name[i][0]) continue;
- DEBUGKPILOT << fname << ": " << i << " = "
- << (int)(info->ID[i]) << " <"
- << info->name[i] << ">" << endl;
- }
-}
-
-
-}
-
-
diff --git a/kpilot/lib/pilot.h b/kpilot/lib/pilot.h
deleted file mode 100644
index 3ac2918bd..000000000
--- a/kpilot/lib/pilot.h
+++ /dev/null
@@ -1,410 +0,0 @@
-#ifndef _KPILOT_PILOT_H
-#define _KPILOT_PILOT_H
-/* KPilot
-**
-** Copyright (C) 1998-2001 by Dan Pilone
-** Copyright (C) 2003-2004 Reinhold Kainhofer <reinhold@kainhofer.com>
-** Copyright (C) 2003-2006 Adriaan de Groot <groot@kde.org>
-**
-*/
-
-/*
-** This program 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; either version 2.1 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 Lesser General Public License for more details.
-**
-** You should have received a copy of the GNU Lesser General Public License
-** along with this program in a file called COPYING; if not, write to
-** the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
-** MA 02110-1301, USA.
-*/
-
-/*
-** Bug reports and questions can be sent to kde-pim@kde.org
-*/
-
-#include <sys/types.h>
-
-#include <pi-appinfo.h>
-#include <pi-buffer.h>
-#include <pi-dlp.h>
-
-#include <tqstring.h>
-#include <tqstringlist.h>
-#include <tqvaluelist.h>
-
-#include "pilotLinkVersion.h"
-
-
-/** @file
-* These are some base structures that reside on the
-* handheld device -- strings and binary data.
-*/
-
-class PilotDatabase; // A database
-class PilotRecord; // ... has records
-class PilotCategoryInfo; // ... and category information
-
-#define MIN(X, Y) ((X) < (Y) ? (X) : (Y))
-
-/**
-* The Pilot namespace holds constants that are global for
-* the handheld data structures. Also contains some global
-* functions that deal with pilot-link structures as well
-* as mapping user-visible strings from UTF8 (KDE side) to
-* the encoding used on the handheld.
-*/
-namespace Pilot
-{
- /** Maximum size of an AppInfo block, taken roughly from the pilot-link source. */
- static const int MAX_APPINFO_SIZE=8192;
-
- /** Maximum number of categories the handheld has */
- static const unsigned int CATEGORY_COUNT=16;
-
- /** Maximum size of a category label */
- static const unsigned int CATEGORY_SIZE=16;
-
- /** Category number for unfiled records */
- static const int Unfiled = 0;
-
- /** Maximum size (in bytes) of a record's data */
- static const int MAX_RECORD_SIZE = 65535;
-
- typedef TQValueList<recordid_t> RecordIDList;
-
- /** Static translation function that maps handheld native (8 bit,
- * usually latin1 but sometimes someting else) encoded data to
- * a Unicode string. Converts the @p len characters in @p c
- * to a Unicode string.
- */
- TQString fromPilot( const char *c, int len );
-
- /** Static translation function mapping a NUL-terminated
- * string from the handheld's encoding to UTF-8.
- * @param c the NUL-terminated string to decode
- * @return TQString (UTF-8) value of @p c
- * @note NUL-terminated strings are rare on the handheld.
- */
- TQString fromPilot( const char *c );
-
- /** Static translation function that maps a TQString onto the
- * native 8 bit encoding of the handheld. Writes the result into
- * the buffer @p buf which has size @p len. Returns the length
- * of the result. Zero-fills the buffer as needed.
- */
- int toPilot( const TQString &s, char *buf, int len);
- int toPilot( const TQString &s, unsigned char *buf, int len);
-
- /** Static translation function that maps a TQString onto the
- * native 8 bit encoding of the handheld.
- *
- * @param s String to encode
- * @return Encoded string in a QCString
- */
- TQCString toPilot( const TQString &s );
-
- /** Create a codec for translating handheld native 8 bit to Unicode,
- * using the given codec @p name -- this will often be latin1, but
- * might be something else for, say, Russian-language Pilots.
- * If @p name is empty, use latin1.
- *
- * @return @c true on success, @c false otherwise
- */
- bool setupPilotCodec(const TQString &name);
-
- /** Returns the name of the codec being used. */
- TQString codecName();
-
- /** For debugging, display category names for the given AppInfo
- * structure. Called by dump(). You must pass a valid reference.
- */
- void dumpCategories(const struct CategoryAppInfo *info);
-
- /** Check that a given category number is valid. This
- * restricts the range of integers to [0..CATEGORY_COUNT-1]
- * (i.e. [0..15]) which is what the handheld supports.
- */
- inline bool validCategory(int c)
- {
- if (c<0)
- {
- return false;
- }
- return ((unsigned int)c<CATEGORY_COUNT);
- }
-
- /** Returns the TQString for the requested category @p i
- * in the category structure @p info. Returns @c TQString::null
- * on error (bad pointer or bad category number). May also
- * return @c TQString::null if the category name is empty.
- */
- inline TQString categoryName(const struct CategoryAppInfo *info, unsigned int i)
- {
- if ( ( i < CATEGORY_COUNT ) && ( info->name[i][0] ) )
- {
- /*
- * Seems to be important that we try to pass the real length here
- * to the codec.
- */
- return fromPilot( info->name[i], MIN(strlen(info->name[i]),CATEGORY_SIZE) );
- }
- else
- {
- return TQString::null;
- }
- }
-
- /** Returns a list of all the category names available on the
- * handheld. This list is neither ordered nor does it contain
- * all sixteen categories -- empty category names on the
- * handheld are skipped.
- */
- inline TQStringList categoryNames(const struct CategoryAppInfo *info)
- {
- TQStringList l;
- if (!info)
- {
- return l;
- }
- for (unsigned int i=0; i<CATEGORY_COUNT; ++i)
- {
- TQString s = categoryName(info,i);
- if (!s.isEmpty())
- {
- l.append(s);
- }
- }
- return l;
- }
-
- /** Search for the given category @p name in the list
- * of categories; returns the category number. If @p unknownIsUnfiled
- * is true, then map unknown categories to Unfiled instead of returning
- * an error number.
- *
- * @return >=0 is a specific category based on the text-to-
- * category number mapping defined by the Pilot,
- * where 0 is always the 'unfiled' category.
- * @return -1 means unknown category selected when
- * @p unknownIsUnfiled is false.
- * @return 0 == Unfiled means unknown category selected when
- * @p unknownIsUnfiled is true.
- *
- */
- int findCategory(const struct CategoryAppInfo *info, const TQString &name, bool unknownIsUnfiled);
-
- /** Search for the given category @p name in the list
- * of categories; returns the category number. If @p unknownIsUnfiled
- * is @c true, then map unknown categories to Unfiled.
- * If @p unknownIsUnfiled is @c false, insert a @em new
- * category into the structure and return the category
- * number of the new category. Return -1 if (and only if)
- * @p unknownIsUnfiled is false and the category structure
- * is already full.
- *
- * @return >=0 is a specific category based on the text-to-
- * category number mapping defined by the Pilot,
- * where 0 is always the 'unfiled' category.
- * @return 0 Unknown category and @p unknownIsUnfiled is @c true
- * @return -1 means unknown category selected when
- * @p unknownIsUnfiled is false and categories
- * are all full.
- *
- */
- int insertCategory(struct CategoryAppInfo *info, const TQString &label, bool unknownIsUnfiled);
-
- /** The handheld also holds data about each database
- * in a DBInfo structure; check if the database described
- * by this structure is a resource database.
- */
- static inline bool isResource(struct DBInfo *info)
- {
- return (info->flags & dlpDBFlagResource);
- }
-
-
-/** @section Binary blob handling
-*
-* For reading and writing binary blobs -- which has to happen to
-* pack data into the format that the handheld needs -- it is important
-* to remember that the handheld has only four data types (as far
-* as I can tell: byte, short (a 2 byte integer), long (a 4 byte integer)
-* and string (NUL terminated). The sizes of the types on the handheld
-* do not necessarily correspond to the sizes of the same-named types
-* on the desktop. This means that 'reading a long' from a binary
-* blob must always be 4 bytes -- not sizeof(long).
-*
-* The following templates help out in manipulating the blobs.
-* Instantiate them with the type @em name you need (char, short, long or
-* char *) and you get a ::size enum specifying the number of bytes
-* (where applicable) and ::append and ::read methods for appending
-* a value of the given type to a pi_buffer_t or reading one from
-* the buffer, respectively.
-*
-* The usage of ::read and ::append is straightforward:
-*
-* append(pi_buffer_t *b, TYPE_VALUE v) Appends the type value @p v to the
-* buffer @p b , extending the buffer as needed.
-*
-* TYPE_VALUE read(pi_buffer_t *b, unsigned int &offset) Read a value from
-* the buffer @p b at position @p offset and return it. The offset value
-* is increased by the number of bytes read from the buffer.
-*
-* To write a binary blob, a sequence of ::append calls constructs the
-* blob. To read the same blob, a sequence of ::read calls with the
-* @em same type parameters is sufficient.
-*
-* The calls may vary a little: the exact interface differs depending
-* on the needs of the type of data to be written to the blob.
-*/
-template<typename t> struct dlp { } ;
-
-template<> struct dlp<char>
-{
- enum { size = 1 };
-
- static void append(pi_buffer_t *b, char v)
- {
- pi_buffer_append(b,&v,size);
- }
-
- /**
- * Returns next byte from buffer or 0 on error (0 is also a
- * valid return value, though).
- */
- static char read(const pi_buffer_t *b, unsigned int &offset)
- {
- if (offset+size > b->used)
- {
- return 0;
- }
- char c = b->data[offset];
- offset+=size;
- return c;
- }
-} ;
-
-template<> struct dlp<short>
-{
- enum { size = 2 };
-
- static void append(pi_buffer_t *b, short v)
- {
- char buf[size];
- set_short(buf,v);
- pi_buffer_append(b,buf,size);
- }
-
- /**
- * Returns the next short (2 byte) value from the buffer, or
- * -1 on error (which is also a valid return value).
- */
- static int read(const pi_buffer_t *b, unsigned int &offset)
- {
- if (offset+size > b->used)
- {
- return -1;
- }
- else
- {
- int r = get_short(b->data + offset);
- offset+=size;
- return r;
- }
- }
-
- /**
- * Overload to read from a data buffer instead of a real pi_buffer;
- * does no bounds checking.
- */
- static int read(const unsigned char *b, unsigned int &offset)
- {
- int r = get_short(b+offset);
- offset+=size;
- return r;
- }
-} ;
-
-template<> struct dlp<long>
-{
- enum { size = 4 };
-
- static void append(pi_buffer_t *b, int v)
- {
- char buf[size];
- set_long(buf,v);
- pi_buffer_append(b,buf,size);
- }
-
- /**
- * Returns the next long (4 byte) value from the buffer or
- * -1 on error (which is also a valid value).
- */
- static int read(const pi_buffer_t *b, unsigned int &offset)
- {
- if (offset+size > b->used)
- {
- return -1;
- }
- else
- {
- int r = get_long(b->data + offset);
- offset+=size;
- return r;
- }
- }
-
- /**
- * Overload to read a long value from a data buffer; does
- * no bounds checking.
- */
- static int read(const unsigned char *b, unsigned int &offset)
- {
- int r = get_long(b+offset);
- offset+=size;
- return r;
- }
-} ;
-
-template<> struct dlp<char *>
-{
- // No size enum, doesn't make sense
- // No append, use pi_buffer_append
- /**
- * Read a fixed-length string from the buffer @p b into data buffer
- * @p v which has size (including terminating NUL) of @p s.
- * Returns the number of bytes read (which will normally be @p s
- * but will be less than @p s on error).
- */
- static int read(const pi_buffer_t *b,
- unsigned int &offset,
- unsigned char *v,
- size_t s)
- {
- if ( s+offset > b->used )
- {
- s = b->allocated - offset;
- }
- memcpy(v, b->data + offset, s);
- offset+=s;
- return s;
- }
-
- /** Overload for signed char. */
- inline static int read(const pi_buffer_t *b, unsigned int &offset, char *v, size_t s)
- {
- return read(b,offset,(unsigned char *)v,s);
- }
-} ;
-
-}
-
-#endif
-
diff --git a/kpilot/lib/pilotAddress.cc b/kpilot/lib/pilotAddress.cc
deleted file mode 100644
index f12e9cc50..000000000
--- a/kpilot/lib/pilotAddress.cc
+++ /dev/null
@@ -1,636 +0,0 @@
-/* KPilot
-**
-** Copyright (C) 1998-2001 by Dan Pilone
-** Copyright (C) 2003-2004 Reinhold Kainhofer <reinhold@kainhofer.com>
-** Copyright (C) 2007 by Adriaan de Groot <groot@kde.org>
-**
-** This is a C++ wrapper for the pilot's address database structures.
-*/
-
-/*
-** This program 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; either version 2.1 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 Lesser General Public License for more details.
-**
-** You should have received a copy of the GNU Lesser General Public License
-** along with this program in a file called COPYING; if not, write to
-** the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
-** MA 02110-1301, USA.
-*/
-
-/*
-** Bug reports and questions can be sent to kde-pim@kde.org
-*/
-
-
-#include "options.h"
-
-
-#include <stdlib.h>
-#include <assert.h>
-
-#include <tqnamespace.h>
-#include <tqstringlist.h>
-
-#include "pilotAddress.h"
-
-static const char *default_address_category_names[] = {
- "Unfiled",
- "Business",
- "Personal",
- "Quicklist",
- 0L
-} ;
-
-static const char *default_address_field_labels[] = {
- "Last name",
- "First name",
- "Company",
- "Work",
- "Home",
- "Fax",
- "Other",
- "E-mail",
- "Addr(W)",
- "City",
- "State",
- "Zip Code",
- "Country",
- "Title",
- "Custom 1",
- "Custom 2",
- "Custom 3",
- "Custom 4",
- "Note",
- 0L
-} ;
-
-void PilotAddressInfo::resetToDefault()
-{
- FUNCTIONSETUP;
- // Reset to all 0s
- memset(&fInfo,0,sizeof(fInfo));
- // Fill up default categories
- for (unsigned int i=0; (i<4) && default_address_category_names[i]; ++i)
- {
- strncpy(fInfo.category.name[i],default_address_category_names[i],sizeof(fInfo.category.name[0]));
- }
- // Weird hack, looks like there's an extra copy of Unfiled
- strncpy(fInfo.category.name[15],default_address_category_names[0],sizeof(fInfo.category.name[0]));
-
- // And fill up the default labels.
- for (unsigned int i=0; (i<19) && default_address_field_labels[i]; ++i)
- {
- strncpy(fInfo.labels[i],default_address_field_labels[i],sizeof(fInfo.labels[0]));
- }
-}
-
-TQString PilotAddressInfo::phoneLabel(EPhoneType i) const
-{
- if (i<=eMobile)
- {
- return Pilot::fromPilot(info()->phoneLabels[i]);
- }
- else
- {
- return TQString();
- }
-}
-
-PhoneSlot::PhoneSlot( const int v )
-{
- i = entryPhone1;
- operator=(v);
-}
-
-const PhoneSlot &PhoneSlot::operator=( const int &v )
-{
- if ( (entryPhone1 <= v) && (v <= entryPhone5) )
- {
- i = v;
- }
- else
- {
- i = invalid;
- }
- return *this;
-}
-
-const PhoneSlot &PhoneSlot::operator++()
-{
- if ( (i!=invalid) && (i<entryPhone5) )
- {
- ++i;
- }
- else
- {
- i = invalid;
- }
- return *this;
-}
-
-/* static */ const PhoneSlot PhoneSlot::begin()
-{
- return PhoneSlot( entryPhone1 );
-}
-
-/* static */ const PhoneSlot PhoneSlot::end()
-{
- return PhoneSlot( invalid );
-}
-
-unsigned int PhoneSlot::toOffset() const
-{
- if ( isValid() )
- {
- return i-entryPhone1;
- }
- else
- {
- return 0;
- }
-}
-
-unsigned int PhoneSlot::toField() const
-{
- if ( isValid() )
- {
- return i;
- }
- else
- {
- return entryPhone1;
- }
-}
-
-PhoneSlot::operator TQString() const
-{
- return TQString("%1,%2").arg(toOffset()).arg(toField());
-}
-
-#define MAXFIELDS 19
-
-PilotAddress::PilotAddress(PilotRecord *rec) :
- PilotRecordBase(rec),
- fAddressInfo()
-{
- FUNCTIONSETUPL(4);
- memset(&fAddressInfo,0,sizeof(fAddressInfo));
-
- if (rec)
- {
- pi_buffer_t b;
- b.data = (unsigned char *) rec->data();
- b.allocated = b.used = rec->size();
- unpack_Address(&fAddressInfo, &b, address_v1);
- }
- else
- {
- fAddressInfo.phoneLabel[0] = (int) PilotAddressInfo::eWork;
- fAddressInfo.phoneLabel[1] = (int) PilotAddressInfo::eHome;
- fAddressInfo.phoneLabel[2] = (int) PilotAddressInfo::eOther;
- fAddressInfo.phoneLabel[3] = (int) PilotAddressInfo::eMobile;
- fAddressInfo.phoneLabel[4] = (int) PilotAddressInfo::eEmail;
- }
-}
-
-PilotAddress::PilotAddress(const PilotAddress & copyFrom) :
- PilotRecordBase(copyFrom),
- fAddressInfo()
-{
- FUNCTIONSETUPL(4);
- _copyAddressInfo(copyFrom.fAddressInfo);
-}
-
-PilotAddress & PilotAddress::operator = (const PilotAddress & copyFrom)
-{
- FUNCTIONSETUPL(4);
- PilotRecordBase::operator = (copyFrom);
- _copyAddressInfo(copyFrom.fAddressInfo);
- return *this;
-}
-
-bool PilotAddress::operator==(const PilotAddress &compareTo)
-{
- FUNCTIONSETUPL(4);
-
- // now compare all the fields stored in the fAddressInfo.entry array of char*[19]
- for (int i=0; i<MAXFIELDS; i++) {
- // if one is NULL, and the other non-empty, they are not equal for sure
- if ( !getFieldP(i) && compareTo.getFieldP(i))
- {
- return false;
- }
- if ( getFieldP(i) && !compareTo.getFieldP(i))
- {
- return false;
- }
-
- // test for getField(i)!=... to prevent strcmp or NULL strings! None or both can be zero, but not a single one.
- if ( (getFieldP(i) != compareTo.getFieldP(i)) && ( strcmp(getFieldP(i), compareTo.getFieldP(i)) ) )
- {
- return false;
- }
- }
- return true;
-}
-
-
-void PilotAddress::_copyAddressInfo(const struct Address &copyFrom)
-{
- FUNCTIONSETUPL(4);
- fAddressInfo.showPhone = copyFrom.showPhone;
-
- for (int labelLp = 0; labelLp < 5; labelLp++)
- {
- fAddressInfo.phoneLabel[labelLp] =
- copyFrom.phoneLabel[labelLp];
- }
-
- for (unsigned int i = 0; i< MAXFIELDS; ++i)
- {
- if (copyFrom.entry[i])
- {
- fAddressInfo.entry[i] = qstrdup(copyFrom.entry[i]);
- }
- else
- {
- fAddressInfo.entry[i] = 0L;
- }
- }
-}
-
-
-PilotAddress::~PilotAddress()
-{
- FUNCTIONSETUPL(4);
- free_Address(&fAddressInfo);
-}
-
-TQString PilotAddress::getTextRepresentation(const PilotAddressInfo *info, Qt::TextFormat richText) const
-{
- TQString text, tmp;
-
- TQString par = (richText==Qt::RichText) ?CSL1("<p>"): TQString();
- TQString ps = (richText==Qt::RichText) ?CSL1("</p>"):CSL1("\n");
- TQString br = (richText==Qt::RichText) ?CSL1("<br/>"):CSL1("\n");
-
- // title + name
- text += par;
- if (!getField(entryTitle).isEmpty())
- {
- text += rtExpand(getField(entryTitle), richText);
- text += CSL1(" ");
- }
-
- tmp = richText ? CSL1("<b><big>%1 %2</big></b>") : CSL1("%1 %2");
- TQString firstName = getField(entryFirstname);
- if (firstName.isEmpty())
- {
- // So replace placeholder for first name (%1) with empty
- tmp = tmp.arg(TQString());
- }
- else
- {
- tmp = tmp.arg(rtExpand(firstName,richText));
- }
- tmp=tmp.arg(rtExpand(getField(entryLastname), richText));
- text += tmp;
- text += ps;
-
- // company
- if (!getField(entryCompany).isEmpty())
- {
- text += par;
- text += rtExpand(getField(entryCompany), richText);
- text += ps;
- }
-
- // phone numbers (+ labels)
- text += par;
- for ( PhoneSlot i = PhoneSlot::begin(); i.isValid(); ++i )
- {
- if (!getField(i.toField()).isEmpty())
- {
- if (richText)
- {
- if (getShownPhone() == i)
- {
- tmp=CSL1("<small>%1: </small><b>%2</b>");
- }
- else
- {
- tmp=CSL1("<small>%1: </small>%2");
- }
- }
- else
- {
- tmp=CSL1("%1: %2");
- }
- if (info)
- {
- tmp=tmp.arg(info->phoneLabel( getPhoneType( i ) ));
- }
- else
- {
- tmp=tmp.arg(CSL1("Contact: "));
- }
- tmp=tmp.arg(rtExpand(getField(i.toField()), richText));
- text += tmp;
- text += br;
- }
- }
- text += ps;
-
- // address, city, state, country
- text += par;
- if (!getField(entryAddress).isEmpty())
- {
- text += rtExpand(getField(entryAddress), richText);
- text += br;
- }
- if (!getField(entryCity).isEmpty())
- {
- text += rtExpand(getField(entryCity), richText);
- text += CSL1(" ");
- }
- if (!getField(entryState).isEmpty())
- {
- text += rtExpand(getField(entryState), richText);
- text += CSL1(" ");
- }
- if (!getField(entryZip).isEmpty())
- {
- text += rtExpand(getField(entryZip), richText);
- }
- text += br;
- if (!getField(entryCountry).isEmpty())
- {
- text += rtExpand(getField(entryCountry), richText);
- text += br;
- }
- text += ps;
-
- // custom fields
- text += par;
- for (int i = entryCustom1; i <= entryCustom4; i++)
- {
- if (!getField(i).isEmpty())
- {
- text += rtExpand(getField(i), richText);
- text += br;
- }
- }
- text += ps;
-
- // category
- if (info)
- {
- TQString categoryName = info->categoryName( category() );
- if (!categoryName.isEmpty())
- {
- text += par;
- text += rtExpand(categoryName, richText);
- text += ps;
- }
- }
-
- // note
- if (!getField(entryNote).isEmpty())
- {
- text += richText?CSL1("<hr/>"):CSL1("-----------------------------\n");
- text += par;
- text += rtExpand(getField(entryNote), richText);
- text += ps;
- }
-
- return text;
-}
-
-TQStringList PilotAddress::getEmails() const
-{
- TQStringList list;
-
- for ( PhoneSlot i = PhoneSlot::begin(); i.isValid(); ++i)
- {
- PilotAddressInfo::EPhoneType t = getPhoneType( i );
- if ( t == PilotAddressInfo::eEmail )
- {
- TQString s = getField(i.toField());
- if (!s.isEmpty())
- {
- list.append(s);
- }
- }
- }
-
- return list;
-}
-
-void PilotAddress::setEmails(const TQStringList &list)
-{
- FUNCTIONSETUPL(4);
- TQString test;
-
- // clear all e-mails first
- for ( PhoneSlot i = PhoneSlot::begin(); i.isValid(); ++i )
- {
- PilotAddressInfo::EPhoneType t = getPhoneType( i );
- if (t == PilotAddressInfo::eEmail)
- {
- setField(i.toField(), TQString() );
- }
- }
-
- for(TQStringList::ConstIterator listIter = list.begin();
- listIter != list.end(); ++listIter)
- {
- TQString email = *listIter;
- if (!setPhoneField(PilotAddressInfo::eEmail, email, NoFlags).isValid())
- {
- WARNINGKPILOT << "Email accounts overflowed, silently dropped." << endl;
- }
- }
-}
-
-TQString PilotAddress::getField(int field) const
-{
- if ( (entryLastname <= field) && (field <= entryNote) )
- {
- return Pilot::fromPilot(fAddressInfo.entry[field]);
- }
- else
- {
- return TQString();
- }
-}
-
-PhoneSlot PilotAddress::_getNextEmptyPhoneSlot() const
-{
- FUNCTIONSETUPL(4);
- for (PhoneSlot i = PhoneSlot::begin(); i.isValid(); ++i)
- {
- const char *phoneField = getFieldP(i.toField());
-
- if (!phoneField || !phoneField[0])
- {
- return i;
- }
- }
- return PhoneSlot();
-}
-
-PhoneSlot PilotAddress::setPhoneField(PilotAddressInfo::EPhoneType type,
- const TQString &field,
- PhoneHandlingFlags flags)
-{
- FUNCTIONSETUPL(4);
-
- const bool overwriteExisting = (flags == Replace);
- PhoneSlot fieldSlot;
- if (overwriteExisting)
- {
- fieldSlot = _findPhoneFieldSlot(type);
- }
-
- if ( !fieldSlot.isValid() )
- {
- fieldSlot = _getNextEmptyPhoneSlot();
- }
-
- // store the overflow phone
- if ( !fieldSlot.isValid() )
- {
- DEBUGKPILOT << fname << ": Phone would overflow." << endl;
- }
- else // phone field 1 - 5; straight forward storage
- {
- setField(fieldSlot.toField(), field);
- fAddressInfo.phoneLabel[fieldSlot.toOffset()] = (int) type;
- }
- return fieldSlot;
-}
-
-PhoneSlot PilotAddress::_findPhoneFieldSlot(PilotAddressInfo::EPhoneType t) const
-{
- FUNCTIONSETUPL(4);
- for ( PhoneSlot i = PhoneSlot::begin(); i.isValid(); ++i )
- {
- if ( getPhoneType(i) == t )
- {
- return i;
- }
- }
-
- return PhoneSlot();
-}
-
-TQString PilotAddress::getPhoneField(PilotAddressInfo::EPhoneType type) const
-{
- FUNCTIONSETUPL(4);
- PhoneSlot fieldSlot = _findPhoneFieldSlot(type);
-
- if (fieldSlot.isValid())
- {
- return getField(fieldSlot.toField());
- }
-
- return TQString();
-}
-
-PhoneSlot PilotAddress::getShownPhone() const
-{
- // The slot is stored as an offset
- return PhoneSlot(entryPhone1 + fAddressInfo.showPhone);
-}
-
-const PhoneSlot &PilotAddress::setShownPhone( const PhoneSlot &v )
-{
- FUNCTIONSETUPL(4);
- if (v.isValid())
- {
- fAddressInfo.showPhone = v.toOffset();
- }
- return v;
-}
-
-PhoneSlot PilotAddress::setShownPhone(PilotAddressInfo::EPhoneType type)
-{
- FUNCTIONSETUPL(4);
- PhoneSlot fieldSlot = _findPhoneFieldSlot(type);
-
- // Did we find a slot with the requested type?
- if (!fieldSlot.isValid())
- {
- // No, so look for first non-empty phone slot
- for ( fieldSlot = PhoneSlot::begin(); fieldSlot.isValid(); ++fieldSlot )
- {
- const char *p = getFieldP(fieldSlot.toField());
- if (p && p[0])
- {
- break;
- }
- }
- // If all of them are empty, then use first slot instead
- if (!fieldSlot.isValid())
- {
- fieldSlot = PhoneSlot::begin();
- }
- }
- setShownPhone(fieldSlot);
- return fieldSlot;
-}
-
-PilotAddressInfo::EPhoneType PilotAddress::getPhoneType( const PhoneSlot &field ) const
-{
- if ( field.isValid() )
- {
- return (PilotAddressInfo::EPhoneType) fAddressInfo.phoneLabel[field.toOffset()];
- }
- else
- {
- return PilotAddressInfo::eNone;
- }
-}
-
-void PilotAddress::setField(int field, const TQString &text)
-{
- FUNCTIONSETUPL(4);
- // This will have either been created with unpack_Address, and/or will
- // be released with free_Address, so use malloc/free here:
- if (fAddressInfo.entry[field])
- {
- free(fAddressInfo.entry[field]);
- fAddressInfo.entry[field]=0L;
- }
- if (!text.isEmpty())
- {
- fAddressInfo.entry[field] = (char *) malloc(text.length() + 1);
- Pilot::toPilot(text, fAddressInfo.entry[field], text.length()+1);
- }
- else
- {
- fAddressInfo.entry[field] = 0L;
- }
-}
-
-PilotRecord *PilotAddress::pack() const
-{
- FUNCTIONSETUPL(4);
- int i;
-
- pi_buffer_t *b = pi_buffer_new( sizeof(fAddressInfo) );
- i = pack_Address(const_cast<Address_t *>(&fAddressInfo), b, address_v1);
- if (i<0)
- {
- return 0L;
- }
- // pack_Address sets b->used
- return new PilotRecord( b, this );
-}
diff --git a/kpilot/lib/pilotAddress.h b/kpilot/lib/pilotAddress.h
deleted file mode 100644
index 5bd0a1e0c..000000000
--- a/kpilot/lib/pilotAddress.h
+++ /dev/null
@@ -1,339 +0,0 @@
-#ifndef _KPILOT_PILOTADDRESS_H
-#define _KPILOT_PILOTADDRESS_H
-/* pilotAddress.h KPilot
-**
-** Copyright (C) 1998-2001 by Dan Pilone
-** Copyright (C) 2003-2004 Reinhold Kainhofer <reinhold@kainhofer.com>
-** Copyright (C) 2007 by Adriaan de Groot <groot@kde.org>
-**
-** This is a wrapper for pilot-link's address structures.
-*/
-
-/*
-** This program 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; either version 2.1 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 Lesser General Public License for more details.
-**
-** You should have received a copy of the GNU Lesser General Public License
-** along with this program in a file called COPYING; if not, write to
-** the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
-** MA 02110-1301, USA.
-*/
-
-/*
-** Bug reports and questions can be sent to kde-pim@kde.org
-*/
-
-#include <pi-macros.h>
-#include <pi-address.h>
-
-#include <tqnamespace.h>
-
-#include "pilotRecord.h"
-#include "pilotAppInfo.h"
-
-/** Interpreted form of the AppInfo block in the address database. */
-typedef PilotAppInfo<
- AddressAppInfo,
- unpack_AddressAppInfo,
- pack_AddressAppInfo> PilotAddressInfo_;
-
-/** This class exists @em only to clear up the type mess that
-* is the field-numbers-and-indexes for phone numbers in the
-* handheld records. The standard address record has 19 fields,
-* five of which are phone fields. Those are fields 3..7 and they
-* are referred to as fields Phone1 .. Phone5. Sometimes we
-* need to act as if the phone field numbers are indeed the field
-* numbers (3..7) and sometimes we need to use those same field
-* numbers to index into a C array (0 based!) so then we map
-* field number 3 (Phone1) to a 0 index.
-*
-* Also handles iteration nicely.
-*
-* A phone slot value may be invalid. If so, operations on it will
-* fail (yielding invalid again) and isValid() will return @c false.
-*/
-class PhoneSlot
-{
-friend class PilotAddress;
-protected:
- /** Constructor. Use the specified value for the phone slot.
- * @p v is a field number (3..8).
- */
- explicit PhoneSlot( const int v );
-
- /** Assignment operator. Set the value of the slot to
- * the specified value @p v . This may yield an invalid
- * phone slot.
- */
- const PhoneSlot &operator=(const int &v);
-
- /** Map the slot to an offset (for use in finding the phone type
- * for a given slot).
- * @return Offset of this slot within the phone fields.
- */
- unsigned int toOffset() const;
-
- /** Map the slot to a field number. */
- unsigned int toField() const;
-
-public:
- static const int invalid = -1; ///< Value for invalid slots. */
-
- /** Constructor. The slot is invalid. */
- PhoneSlot()
- {
- i = invalid;
- }
-
- /** Comparison operator. */
- bool operator ==( const PhoneSlot &v ) const
- {
- return v.i == i;
- }
-
- /** Iterator operation. Go to the next slot (or invalid when
- * the range runs out).
- */
- const PhoneSlot &operator++();
-
- /** Begin value of an iteration through the phone slots. */
- static const PhoneSlot begin();
-
- /** When the slot range runs out (past entryPhone5) it
- * is invalid, so the end compares with that.
- */
- static const PhoneSlot end();
-
- /** Valid slots are entryPhone1 (3) through entryPhone5 (7).
- * @return @c true if the slot is valid.
- */
- bool isValid() const
- {
- return (entryPhone1 <= i) && (i <= entryPhone5);
- }
-
- operator TQString() const;
-private:
- int i;
-} ;
-
-
-class PilotAddressInfo : public PilotAddressInfo_
-{
-public:
- PilotAddressInfo(PilotDatabase *d) : PilotAddressInfo_(d)
- {
- }
-
- /** This resets the entire AppInfo block to one as it would be
- * in an English-language handheld, with 3 categories and
- * default field labels for everything.
- */
- void resetToDefault();
-
- enum EPhoneType {
- eWork=0,
- eHome,
- eFax,
- eOther,
- eEmail,
- eMain,
- ePager,
- eMobile,
- eNone=-1
- } ;
-
- TQString phoneLabel(EPhoneType i) const;
-} ;
-
-/** @brief A wrapper class around the Address struct provided by pi-address.h
- *
- * This class allows the user to set and get address field values.
- * For everything but phone fields, the user can simply pass the
- * the pi-address enum for the index for setField() and getField() such
- * as entryLastname.
- *
- * Phone fields are a bit trickier. The structure allows for 8 possible
- * phone fields with 5 possible slots. That means there could be three
- * fields that don't have available storage. The setPhoneField() method
- * will attempt to store the extra fields in a custom field if there
- * is an overflow.
- *
- * There are eight possible fields for 5 view slots:
- * - fields: Work, Home, Fax, Other, Pager, Mobile, E-mail, Main
- * - slots: entryPhone1, entryPhone2, entryPhone3, entryPhone4, entryPhone5
- *
- * Internally in the pilot-link library, the AddressAppInfo phone
- * array stores the strings for the eight possible phone values.
- * Their English string values are :
- * - phone[0] = Work
- * - phone[1] = Home
- * - phone[2] = Fax
- * - phone[3] = Other
- * - phone[4] = E-mail
- * - phone[5] = Main
- * - phone[6] = Pager
- * - phone[7] = Mobile
- *
- * Apparently, this order is kept for all languages, just with localized
- * strings. The implementation of the internal methods will assume
- * this order is kept. In other languages, main can replaced with
- * Corporation.
- */
-class KDE_EXPORT PilotAddress : public PilotRecordBase
-{
-public:
- PilotAddress(PilotRecord *rec = 0L);
- PilotAddress(const PilotAddress &copyFrom);
- PilotAddress& operator=( const PilotAddress &r );
- bool operator==(const PilotAddress &r);
-
- virtual ~PilotAddress();
-
- /** Returns a text representation of the address. If @p richText is true, the
- * text will be formatted with Qt-HTML tags. The AppInfo structure @p info
- * is used to figure out the phone labels; if it is NULL then bogus labels are
- * used to identify phone types.
- */
- TQString getTextRepresentation(const PilotAddressInfo *info, Qt::TextFormat richText) const;
-
- /**
- * @param text set the field value
- * @param field int values associated with the enum defined in
- * pi-address.h.
- * The copied possible enum's are: (copied from pi-address.h on 1/12/01)
- * enum { entryLastname, entryFirstname, entryCompany,
- * entryPhone1, entryPhone2, entryPhone3, entryPhone4, entryPhone5,
- * entryAddress, entryCity, entryState, entryZip, entryCountry,
- * entryTitle, entryCustom1, entryCustom2, entryCustom3, entryCustom4,
- * entryNote };
- */
- void setField(int field, const TQString &text);
- /** Set a field @p i to a given text value. Uses the phone slots only. */
- void setField(const PhoneSlot &i, const TQString &t)
- {
- if (i.isValid())
- {
- setField(i.toField(),t);
- }
- }
-
- /** Returns the text value of a given field @p field (or TQString::null
- * if there is no such field).
- */
- TQString getField(int field) const;
- /** Returns the value of the phone field @p i . */
- TQString getField(const PhoneSlot &i) const
- {
- return i.isValid() ? getField(i.toField()) : TQString();
- }
-
- /**
- * Return list of all email addresses. This will search through our "phone"
- * fields and will return only those which are e-mail addresses.
- */
- TQStringList getEmails() const;
- void setEmails(const TQStringList &emails);
-
- enum PhoneHandlingFlags
- {
- NoFlags=0, ///< No special handling
- Replace ///< Replace existing entries of same type
- } ;
-
- /**
- * @param type is the type of phone
- * @param checkCustom4 flag if true, checks the entryCustom4 field
- * for extra phone fields
- * @return the field associated with the type
- */
- TQString getPhoneField(PilotAddressInfo::EPhoneType type) const;
-
- /**
- * @param type is the type of phone
- * @param field is value to store
- * @param overflowCustom is true, and entryPhone1 to entryPhone5 is full
- * it will use entryCustom4 field to store the field
- * @param overwriteExisting is true, it will overwrite an existing record-type
- * with the field, else it will always search for the first available slot
- * @return index of the field that this information was set to
- */
- PhoneSlot setPhoneField(PilotAddressInfo::EPhoneType type, const TQString &value, PhoneHandlingFlags flags);
-
- /**
- * Returns the slot of the phone number
- * selected by the user to be shown in the
- * overview of addresses.
- *
- * @return Slot of phone entry (between entryPhone1 and entryPhone5)
- */
- PhoneSlot getShownPhone() const;
-
- /**
- * Set the shown phone (the one preferred by the user for display
- * on the handheld's overview page) to the @em type (not index)
- * indicated. Looks through the phone entries of this record to
- * find the first one one of this type.
- *
- * @return Slot of phone entry.
- *
- * @note Sets the shown phone to the first entry if no field of
- * type @p phoneType can be found @em and no Home phone
- * field (the fallback) can be found either.
- */
- PhoneSlot setShownPhone(PilotAddressInfo::EPhoneType phoneType);
-
- /**
- * Set the shown phone (the one preferred by the user for display
- * on the handheld's overview page) to the given @p slot .
- *
- * @return @p v
- */
- const PhoneSlot &setShownPhone(const PhoneSlot &v);
-
- /** Get the phone type (label) for a given field @p field
- * in the record. The @p field must be within the
- * phone range (entryPhone1 .. entryPhone5).
- *
- * @return Phone type for phone field @p field .
- * @return @c eNone (fake phone type) if @p field is invalid.
- */
- PilotAddressInfo::EPhoneType getPhoneType(const PhoneSlot &field) const;
-
- PilotRecord *pack() const;
-
- const struct Address *address() const { return &fAddressInfo; } ;
-
-
-protected:
- // Get the pointers in cases where no conversion to
- // unicode is desired.
- //
- const char *getFieldP(int field) const
- {
- return fAddressInfo.entry[field];
- }
-
-private:
- void _copyAddressInfo(const struct Address &copyFrom);
- PhoneSlot _getNextEmptyPhoneSlot() const;
-
- /** @return entryPhone1 to entryPhone5 if the appTypeNum number is
- * found in the phoneLabel array; return -1 if not found
- */
- PhoneSlot _findPhoneFieldSlot(PilotAddressInfo::EPhoneType t) const;
-
- struct Address fAddressInfo;
-};
-
-
-
-
-#endif
diff --git a/kpilot/lib/pilotAppInfo.cc b/kpilot/lib/pilotAppInfo.cc
deleted file mode 100644
index 5edc57160..000000000
--- a/kpilot/lib/pilotAppInfo.cc
+++ /dev/null
@@ -1,77 +0,0 @@
-/* pilotAppInfo.cc KPilot
-**
-** Copyright (C) 2005-2006 Adriaan de Groot <groot@kde.org>
-**
-*/
-
-/*
-** This program 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; either version 2.1 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 Lesser General Public License for more details.
-**
-** You should have received a copy of the GNU Lesser General Public License
-** along with this program in a file called COPYING; if not, write to
-** the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
-** MA 02110-1301, USA.
-*/
-
-/*
-** Bug reports and questions can be sent to kde-pim@kde.org
-*/
-
-
-#include "options.h"
-
-#include <stdio.h>
-
-#include "pilotAppInfo.h"
-
-PilotAppInfoBase::PilotAppInfoBase(PilotDatabase *d) :
- fC( 0L ),
- fLen(0),
- fOwn(true)
-{
- FUNCTIONSETUP;
- int appLen = Pilot::MAX_APPINFO_SIZE;
- unsigned char buffer[Pilot::MAX_APPINFO_SIZE];
-
- if (!d || !d->isOpen())
- {
- WARNINGKPILOT << "Bad database pointer." << endl;
- fLen = 0;
- KPILOT_DELETE( fC );
- return;
- }
-
- fC = new struct CategoryAppInfo;
- fLen = appLen = d->readAppBlock(buffer,appLen);
- unpack_CategoryAppInfo(fC, buffer, appLen);
-}
-
-PilotAppInfoBase::~PilotAppInfoBase()
-{
- if (fOwn)
- {
- delete fC;
- }
-}
-
-bool PilotAppInfoBase::setCategoryName(unsigned int i, const TQString &s)
-{
- if ( (i>=Pilot::CATEGORY_COUNT) || // bad category number
- (!categoryInfo())) // Nowhere to write to
- {
- return false;
- }
-
- (void) Pilot::toPilot(s, categoryInfo()->name[i], Pilot::CATEGORY_SIZE - 1);
- return true;
-}
-
-
diff --git a/kpilot/lib/pilotAppInfo.h b/kpilot/lib/pilotAppInfo.h
deleted file mode 100644
index b14cf0ace..000000000
--- a/kpilot/lib/pilotAppInfo.h
+++ /dev/null
@@ -1,216 +0,0 @@
-#ifndef _KPILOT_PILOTAPPINFO_H
-#define _KPILOT_PILOTAPPINFO_H
-/* pilotAppInfo.h KPilot
-**
-** Copyright (C) 2005-2006 Adriaan de Groot <groot@kde.org>
-**
-*/
-
-/*
-** This program 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; either version 2.1 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 Lesser General Public License for more details.
-**
-** You should have received a copy of the GNU Lesser General Public License
-** along with this program in a file called COPYING; if not, write to
-** the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
-** MA 02110-1301, USA.
-*/
-
-/*
-** Bug reports and questions can be sent to kde-pim@kde.org
-*/
-
-#include "pilotLinkVersion.h"
-
-#include "pilot.h"
-#include "pilotDatabase.h"
-
-/**
-* A database on the handheld has an "AppInfo" block at the beginning
-* with some database-specific information and a common part.
-* This base class deals with the common part, the categories.
-*
-* Most data in the handheld is stored in @em categories ; every
-* record in every database, for instance, has a category assigned
-* to it (perhaps "Unfiled", but that's just another category).
-*
-* Every database has a category table assigning labels to the
-* categories that exist. There are CATEGORY_COUNT (16) categories
-* available for each database; labels may vary per database.
-*
-* This class encapsulates the basic category table manipulations.
-*/
-class KDE_EXPORT PilotAppInfoBase
-{
-protected:
- /** Initialize class members after reading header, to alias data elsewhere.
- * Only for use by the (derived) template classes below.
- */
- void init(struct CategoryAppInfo *c, int len)
- {
- fC = c;
- fLen = len ;
- } ;
-
-public:
- /** Constructor. This is for use by derived classes (using the template below
- * only, and says that the category info in the base class aliases data in
- * the derived class. Remember to call init()!
- */
- PilotAppInfoBase() : fC(0L), fLen(0), fOwn(false) { } ;
-
- /** Constructor, intended for untyped access to the AppInfo only. This throws
- * away everything but the category information. In this variety, the
- * CategoryAppInfo structure is owned by the PilotAppInfoBase object.
- */
- PilotAppInfoBase(PilotDatabase *d);
-
- /** Destructor. */
- virtual ~PilotAppInfoBase();
-
- /** Retrieve the most basic part of the AppInfo block -- the category
- * information which is guaranteed to be the first 240-odd bytes of
- * a database.
- */
- struct CategoryAppInfo *categoryInfo()
- {
- return fC;
- } ;
-
- /** Const version of the above function. */
- inline const struct CategoryAppInfo *categoryInfo() const
- {
- return fC;
- } ;
-
- /** Returns the length of the (whole) AppInfo block. */
- inline PI_SIZE_T length() const
- {
- return fLen;
- } ;
-
- /** @see findCategory(const TQString &name, bool unknownIsUnfiled, struct CategoryAppInfo *info). */
- inline int findCategory(const TQString &name, bool unknownIsUnfiled = false) const
- {
- return Pilot::findCategory(fC,name,unknownIsUnfiled);
- } ;
-
- /** Gets a single category name. Returns TQString::null if there is no
- * such category number @p i . */
- inline TQString categoryName(unsigned int i) const
- {
- return Pilot::categoryName(fC,i);
- }
-
- /** Sets a category name. @return true if this succeeded. @return false
- * on failure, e.g. the index @p i was out of range or the category name
- * was invalid. Category names that are too long are truncated to 15 characters.
- */
- bool setCategoryName(unsigned int i, const TQString &s);
-
- /** For debugging, display all the category names */
- inline void dump() const
- {
- Pilot::dumpCategories(fC);
- };
-
-protected:
- struct CategoryAppInfo *fC;
- PI_SIZE_T fLen;
-
- bool fOwn;
-} ;
-
-/** A template class for reading and interpreting AppInfo blocks;
-* the idea is that it handles all the boilerplate code for reading
-* the app block, converting it to the right kind, and then unpacking
-* it. Template parameters are the type (struct, from pilot-link probably)
-* of the interpreted appinfo, and the pack and unpack functions for it
-* (again, from pilot-link).
-*/
-template <typename appinfo,
-#if PILOT_LINK_IS(0,12,2)
- /* There are additional consts introduced in 0.12.2 */
- int(*unpack)(appinfo *, const unsigned char *, PI_SIZE_T),
- int(*pack)(const appinfo *, unsigned char *, PI_SIZE_T)
-#else
- int(*unpack)(appinfo *, unsigned char *, PI_SIZE_T),
- int(*pack)(appinfo *, unsigned char *, PI_SIZE_T)
-#endif
- >
-class PilotAppInfo : public PilotAppInfoBase
-{
-public:
- /** Constructor. Read the appinfo from database @p d and
- * interpret it.
- */
- PilotAppInfo(PilotDatabase *d) : PilotAppInfoBase()
- {
- int appLen = Pilot::MAX_APPINFO_SIZE;
- unsigned char buffer[Pilot::MAX_APPINFO_SIZE];
-
- memset(&fInfo,0,sizeof(fInfo));
- if (d && d->isOpen())
- {
- appLen = d->readAppBlock(buffer,appLen);
- (*unpack)(&fInfo, buffer, appLen);
- // fInfo is just a struct, so we can point to it anyway.
- init(&fInfo.category,appLen);
- }
- else
- {
- delete fC;
- fC = 0L;
- fLen = 0;
- init(&fInfo.category,sizeof(fInfo));
- }
- } ;
-
- PilotAppInfo()
- {
- memset(&fInfo,0,sizeof(fInfo));
- init(&fInfo.category,sizeof(fInfo));
- }
-
-
- /** Write this appinfo block to the database @p d; returns
- * the number of bytes written or -1 on failure. This
- * function is robust when called with a NULL database @p d.
- */
- int writeTo(PilotDatabase *d)
- {
- unsigned char buffer[Pilot::MAX_APPINFO_SIZE];
- if (!d || !d->isOpen())
- {
- return -1;
- }
- int appLen = (*pack)(&fInfo, buffer, length());
- if (appLen > 0)
- {
- d->writeAppBlock(buffer,appLen);
- }
- return appLen;
- } ;
-
- /** Returns a (correctly typed) pointer to the interpreted
- * appinfo block.
- */
- appinfo *info() { return &fInfo; } ;
- /** Returns a const (correctly typed) pointer to the interpreted
- * appinfo block.
- */
- const appinfo *info() const { return &fInfo; } ;
-
-protected:
- appinfo fInfo;
-} ;
-
-
-#endif
diff --git a/kpilot/lib/pilotCard.h b/kpilot/lib/pilotCard.h
deleted file mode 100644
index 86d1f70c6..000000000
--- a/kpilot/lib/pilotCard.h
+++ /dev/null
@@ -1,65 +0,0 @@
-#ifndef _KPILOT_PILOTCARD_H
-#define _KPILOT_PILOTCARD_H
-/* pilotCard.h KPilot
-**
-** Copyright (C) 2003-2004 Reinhold Kainhofer <reinhold@kainhofer.com>
-**
-** This class is a wrapper around pilot-link's CardInfo structure
-*/
-
-/*
-** This program 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; either version 2.1 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 Lesser General Public License for more details.
-**
-** You should have received a copy of the GNU Lesser General Public License
-** along with this program in a file called COPYING; if not, write to
-** the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
-** MA 02110-1301, USA.
-*/
-
-/*
-** Bug reports and questions can be sent to kde-pim@kde.org
-*/
-
-#include <stdlib.h>
-#include <string.h>
-#include <time.h>
-
-#ifndef _PILOT_DLP_H_
-#include <pi-dlp.h>
-#endif
-
-class KPilotCard
-{
-public:
- KPilotCard() { ::memset(&fCard,0,sizeof(struct CardInfo)); }
- KPilotCard(const CardInfo* card) { fCard = *card; }
-
- CardInfo *cardInfo() { return &fCard; }
-
- /**
- * Ensures the names are properly terminated. Needed incase we
- * are syncing a new and bogus pilot.
- */
- void boundsCheck() {}
-
- const int getCardIndex() const { return fCard.card; }
- const int getCardVersion() const { return fCard.version; }
- unsigned long getRomSize() const { return fCard.romSize; }
- unsigned long getRamSize() const { return fCard.ramSize; }
- unsigned long getRamFree() const { return fCard.ramFree; }
- const char* getCardName() const { return fCard.name; }
- const char* getCardManufacturer() const { return fCard.manufacturer; }
-
-private:
- struct CardInfo fCard;
-};
-
-#endif
diff --git a/kpilot/lib/pilotDatabase.cc b/kpilot/lib/pilotDatabase.cc
deleted file mode 100644
index cc65895e7..000000000
--- a/kpilot/lib/pilotDatabase.cc
+++ /dev/null
@@ -1,112 +0,0 @@
-/* KPilot
-**
-** Copyright (C) 1998-2001 by Dan Pilone
-** Copyright (C) 2003-2004 Reinhold Kainhofer <reinhold@kainhofer.com>
-** Copyright (C) 2005-2006 Adriaan de Groot <groot@kde.org>
-**
-** This is the abstract base class for databases, which is used both
-** by local databases and by the serial databases held in the Pilot.
-*/
-
-/*
-** This program 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; either version 2.1 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 Lesser General Public License for more details.
-**
-** You should have received a copy of the GNU Lesser General Public License
-** along with this program in a file called COPYING; if not, write to
-** the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
-** MA 02110-1301, USA.
-*/
-
-/*
-** Bug reports and questions can be sent to kde-pim@kde.org
-*/
-
-#include "options.h"
-
-#include <time.h> // Needed by pilot-link include
-#include <pi-appinfo.h>
-
-#include <tqstringlist.h>
-
-#include <kglobal.h>
-
-#include "pilotDatabase.h"
-#include "pilotRecord.h"
-
-static int creationCount = 0;
-static TQStringList *createdNames = 0L;
-
-PilotDatabase::PilotDatabase(const TQString &s) :
- fDBOpen(false),
- fName(s)
-{
- FUNCTIONSETUP;
- creationCount++;
- if (!createdNames)
- {
- createdNames = new TQStringList();
- }
- createdNames->append(s.isEmpty() ? CSL1("<empty>") : s);
-}
-
-/* virtual */ PilotDatabase::~PilotDatabase()
-{
- FUNCTIONSETUP;
- creationCount--;
- if (createdNames)
- {
- createdNames->remove(fName.isEmpty() ? CSL1("<empty>") : fName);
- }
-}
-
-/* static */ int PilotDatabase::instanceCount()
-{
- FUNCTIONSETUP;
- DEBUGKPILOT << fname << ": " << creationCount << " databases." << endl;
- if (createdNames)
- {
- DEBUGKPILOT << fname << ": "
- << createdNames->join(CSL1(",")) << endl;
- }
- return creationCount;
-}
-
-/* virtual */ Pilot::RecordIDList PilotDatabase::idList()
-{
- Pilot::RecordIDList l;
-
- for (unsigned int i = 0 ; ; i++)
- {
- PilotRecord *r = readRecordByIndex(i);
- if (!r) break;
- l.append(r->id());
- delete r;
- }
-
- return l;
-}
-
-/* virtual */ Pilot::RecordIDList PilotDatabase::modifiedIDList()
-{
- Pilot::RecordIDList l;
-
- resetDBIndex();
- while(1)
- {
- PilotRecord *r = readNextModifiedRec();
- if (!r) break;
- l.append(r->id());
- delete r;
- }
-
- return l;
-}
-
diff --git a/kpilot/lib/pilotDatabase.h b/kpilot/lib/pilotDatabase.h
deleted file mode 100644
index 82a6431d7..000000000
--- a/kpilot/lib/pilotDatabase.h
+++ /dev/null
@@ -1,272 +0,0 @@
-#ifndef _KPILOT_PILOTDATABASE_H
-#define _KPILOT_PILOTDATABASE_H
-/* KPilot
-**
-** Copyright (C) 1998-2001 by Dan Pilone
-** Copyright (C) 2003-2004 Reinhold Kainhofer <reinhold@kainhofer.com>
-** Copyright (C) 2005-2006 Adriaan de Groot <groot@kde.org>
-**
-*/
-
-/*
-** This program 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; either version 2.1 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 Lesser General Public License for more details.
-**
-** You should have received a copy of the GNU Lesser General Public License
-** along with this program in a file called COPYING; if not, write to
-** the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
-** MA 02110-1301, USA.
-*/
-
-/*
-** Bug reports and questions can be sent to kde-pim@kde.org
-*/
-
-
-#include "pilot.h"
-
-
-/** @file
-* This is the abstract base class for databases, which is used both
-* by local databases and by the serial databases held in the Pilot.
-*/
-
-
-/**
- * Methods to access a database on the pilot.
- *
- * NOTE: It is the users responsibility
- * to delete PilotRecords returned by
- * PilotDatabase methods when finished with them!
- */
-
-class KDE_EXPORT PilotDatabase
-{
-public:
- PilotDatabase(const TQString &name = TQString::null);
- virtual ~PilotDatabase();
-
-
- TQString name() const { return fName; } ;
-
- /**
- * Debugging information: tally how many databases are created
- * or destroyed. Returns the count of currently existing databases.
- */
- static int instanceCount();
-
- /* -------------------- Abstract interface for subclasses ----------------- */
-
- /**
- * Creates the database with the given creator, type and flags
- * on the given card (default is RAM). If the database already
- * exists, this function does nothing.
- */
- virtual bool createDatabase(long creator=0, long type=0,
- int cardno=0, int flags=0, int version=0) = 0;
-
- /**
- * Deletes the database (by name, as given in the constructor,
- * the database name is stored depending on the implementation
- * of PilotLocalDatabase and PilotSerialDatabas)
- */
- virtual int deleteDatabase()=0;
-
- /** Reads the application block info, returns size. */
- virtual int readAppBlock(unsigned char* buffer, int maxLen) = 0;
-
- /** Writes the application block info. */
- virtual int writeAppBlock(unsigned char* buffer, int len) = 0;
-
- /** Returns the number of records in the database.
- * If the database is not open, return -1.
- */
- virtual unsigned int recordCount() const=0;
-
- /** Returns a TQValueList of all record ids in the database.
- This implementation is really bad. */
- virtual Pilot::RecordIDList idList();
-
- /** Returns a list of all record ids that have been modified in the
- database. This implementation is really bad. */
- virtual Pilot::RecordIDList modifiedIDList();
-
-
- /** Reads a record from database by id, returns record length */
- virtual PilotRecord* readRecordById(recordid_t id) = 0;
-
- /** Reads a record from database, returns the record length */
- virtual PilotRecord* readRecordByIndex(int index) = 0;
-
- /** Reads the next record from database in category 'category' */
- virtual PilotRecord* readNextRecInCategory(int category) = 0;
-
- /**
- * Reads the next record from database that has the dirty flag set.
- * If @p ind is non-NULL, *ind is set to the index of the current
- * record (i.e. before the record pointer moves to the next
- * modified record).
- */
- virtual PilotRecord* readNextModifiedRec(int *ind=NULL) = 0;
-
- /**
- * Writes a new record to database (if 'id' == 0, one will be
- * assigned to newRecord)
- */
- virtual recordid_t writeRecord(PilotRecord* newRecord) = 0;
-
- /**
- * Deletes a record with the given recordid_t from the database,
- * or all records, if @p all is set to true. The recordid_t will
- * be ignored in this case.
- *
- * Return value is negative on error, 0 otherwise.
- */
- virtual int deleteRecord(recordid_t id, bool all=false) = 0;
-
- /** Resets all records in the database to not dirty. */
- virtual int resetSyncFlags() = 0;
-
- /** Resets next record index to beginning */
- virtual int resetDBIndex() = 0;
-
- /** Purges all Archived/Deleted records from Palm Pilot database */
- virtual int cleanup() = 0;
-
- bool isOpen() const { return fDBOpen; }
-
- /** Returns some sensible human-readable identifier for
- * the database. Serial databases get Pilot:, local
- * databases return the full path.
- */
- virtual TQString dbPathName() const = 0;
-
- /**
- * Use this instead of RTTI to determine the type of a
- * PilotDatabase, for those cases where it's important.
- */
- typedef enum { eNone=0,
- eLocalDB=1,
- eSerialDB=2 } DBType;
- virtual DBType dbType() const = 0;
-
- static inline bool isResource(struct DBInfo *info)
- {
- return (info->flags & dlpDBFlagResource);
- }
-
-protected:
- virtual void openDatabase() = 0;
- virtual void closeDatabase() = 0;
-
- void setDBOpen(bool yesno) { fDBOpen = yesno; }
-
-private:
- bool fDBOpen;
- TQString fName;
-};
-
-/** A template class for reading and interpreting a database. This removes
-* the need for a lot of boilerplate code that does the conversions.
-* Parameters are two interpretation classes: one for the KDE side of
-* things (e.g. Event) and one that interprets the Pilot's records into
-* a more sensible structure (e.g. PilotDatebookEntry). The mapping from
-* the KDE type to the Pilot type and vice-versa is done by the mapper
-* class's convert() functions.
-*
-* To interpret a database as pilot-link interpretations (e.g. as
-* PilotDatebookEntry records, not as Events) use the NullMapper class
-* below in combination with a template instantiation with kdetype==pilottype.
-*
-* The database interpreter intentionally has an interface similar to
-* that of a PilotDatabase, but it isn't one.
-*/
-template <class kdetype, class pilottype, class mapper>
-class DatabaseInterpreter
-{
-private:
- /** Interpret a PilotRecord as an object of type kdetype. */
- kdetype *interpret(PilotRecord *r)
- {
- // NULL records return NULL kde objects.
- if (!r) return 0;
- // Interpret the binary blob as a pilot-link object.
- pilottype *a = new pilottype(r);
- // The record is now obsolete.
- delete r;
- // Interpretation failed.
- if (!a) { return 0; }
- // Now convert to KDE type.
- kdetype *t = mapper::convert(a);
- // The NULL mapper just returns the pointer a, so we
- // need to check if anything has changed before deleting.
- if ( (void *)t != (void *)a )
- {
- delete a;
- }
- return t;
- }
-public:
- /** Constructor. Interpret the database @p d. */
- DatabaseInterpreter(PilotDatabase *d) : fDB(d) { } ;
-
- /** Reads a record from database by @p id */
- kdetype *readRecordById(recordid_t id)
- {
- return interpret(fDB->readRecordById(id));
- }
-
- /** Reads a record from database with index @p index */
- kdetype *readRecordByIndex(int index)
- {
- return interpret(fDB->readRecordByIndex(index));
- }
-
- /** Reads the next record from database in category @p category */
- kdetype *readNextRecInCategory(int category)
- {
- return interpret(fDB->readNextRecInCategory(category));
- }
-
- /**
- * Reads the next record from database that has the dirty flag set.
- * If @p ind is non-NULL, *ind is set to the index of the current
- * record (i.e. before the record pointer moves to the next
- * modified record).
- */
- kdetype *readNextModifiedRec(int *ind=NULL)
- {
- return interpret(fDB->readNextModifiedRec(ind));
- }
-
-
- /** Retrieve the database pointer; this is useful to just pass
- * around DatabaseInterpreter objects as if they are databases,
- * and then perform DB operations on the database it wraps.
- */
- PilotDatabase *db() const { return fDB; }
-
-protected:
- PilotDatabase *fDB;
-} ;
-
-/** NULL mapper class; the conversions here don't @em do anything,
-* so you can use this when you only need 1 conversion step (from
-* PilotRecord to PilotDatebookEntry, for instance) instead of 2.
-*/
-template <class T>
-class NullMapper
-{
-public:
- /** NULL Conversion function. */
- static T *convert(T *t) { return t; }
-} ;
-
-#endif
diff --git a/kpilot/lib/pilotDateEntry.cc b/kpilot/lib/pilotDateEntry.cc
deleted file mode 100644
index d7844b897..000000000
--- a/kpilot/lib/pilotDateEntry.cc
+++ /dev/null
@@ -1,478 +0,0 @@
-/* KPilot
-**
-** Copyright (C) 1998-2001 by Dan Pilone
-** Copyright (C) 2003-2004 Reinhold Kainhofer <reinhold@kainhofer.com>
-**
-** This is a C++ wrapper for the Pilot's datebook structures.
-*/
-
-/*
-** This program 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; either version 2.1 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 Lesser General Public License for more details.
-**
-** You should have received a copy of the GNU Lesser General Public License
-** along with this program in a file called COPYING; if not, write to
-** the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
-** MA 02110-1301, USA.
-*/
-
-/*
-** Bug reports and questions can be sent to kde-pim@kde.org
-*/
-
-#include "options.h"
-
-#include <stdlib.h>
-
-#include <tqdatetime.h>
-#include <tqnamespace.h>
-#include <tqregexp.h>
-
-#include <kglobal.h>
-
-#include "pilotDateEntry.h"
-
-static const char *default_date_category_names[] = {
- "Unfiled",
- "Business",
- "Personal",
- 0L
-} ;
-
-void PilotDateInfo::resetToDefault()
-{
- FUNCTIONSETUP;
- // Reset to all 0s
- memset(&fInfo,0,sizeof(fInfo));
- // Fill up default categories
- for (unsigned int i=0; (i<4) && default_date_category_names[i]; ++i)
- {
- strncpy(fInfo.category.name[i],default_date_category_names[i],sizeof(fInfo.category.name[0]));
- }
-
- fInfo.startOfWeek = 0;
-
-}
-
-
-PilotDateEntry::PilotDateEntry():PilotRecordBase()
-{
- ::memset(&fAppointmentInfo, 0, sizeof(struct Appointment));
-}
-
-/* initialize the entry from another one. If rec==NULL, this constructor does the same as PilotDateEntry()
-*/
-PilotDateEntry::PilotDateEntry(PilotRecord * rec) :
- PilotRecordBase(rec)
-{
- ::memset(&fAppointmentInfo, 0, sizeof(fAppointmentInfo));
- if (rec)
- {
- // Construct a fake pi_buffer for unpack_Appointment.
- // No ownership changes occur here.
- pi_buffer_t b = { (unsigned char *) rec->data(), rec->size(), rec->size() } ;
- unpack_Appointment(&fAppointmentInfo, &b, datebook_v1);
- }
- return;
-
-}
-
-void PilotDateEntry::_copyExceptions(const PilotDateEntry & e)
-{
- if (e.fAppointmentInfo.exceptions > 0)
- {
- size_t blocksize = e.fAppointmentInfo.exceptions *
- sizeof(struct tm);
-
- fAppointmentInfo.exception = (struct tm *)::malloc(blocksize);
-
- if (fAppointmentInfo.exception)
- {
- fAppointmentInfo.exceptions =
- e.fAppointmentInfo.exceptions;
- ::memcpy(fAppointmentInfo.exception,
- e.fAppointmentInfo.exception, blocksize);
- }
- else
- {
- WARNINGKPILOT << "malloc() failed, exceptions not copied" << endl;
- fAppointmentInfo.exceptions = 0;
- }
- }
- else
- {
- fAppointmentInfo.exceptions = 0;
- fAppointmentInfo.exception = 0L;
- }
-}
-
-
-PilotDateEntry::PilotDateEntry(const PilotDateEntry & e) :
- PilotRecordBase(e)
-{
- ::memcpy(&fAppointmentInfo, &e.fAppointmentInfo,
- sizeof(struct Appointment));
- // See operator = for explanation
- fAppointmentInfo.exception = 0L;
- fAppointmentInfo.description = 0L;
- fAppointmentInfo.note = 0L;
-
- _copyExceptions(e);
- setDescriptionP(e.fAppointmentInfo.description);
- setNoteP(e.fAppointmentInfo.note);
-}
-
-
-PilotDateEntry & PilotDateEntry::operator = (const PilotDateEntry & e)
-{
- if (this != &e) // Pointer equality!
- {
- KPILOT_FREE(fAppointmentInfo.exception);
- KPILOT_FREE(fAppointmentInfo.description);
- KPILOT_FREE(fAppointmentInfo.note);
- ::memcpy(&fAppointmentInfo, &e.fAppointmentInfo,
- sizeof(fAppointmentInfo));
-
- // The original pointers were already freed; since we're now
- // got the pointers from the new structure and we're going
- // to use the standard set functions make sure that
- // we don't free() the copies-of-pointers from e, which
- // would be disastrous.
- //
- //
- fAppointmentInfo.exception = 0L;
- fAppointmentInfo.description = 0L;
- fAppointmentInfo.note = 0L;
-
- _copyExceptions(e);
- setDescriptionP(e.fAppointmentInfo.description);
- setNoteP(e.fAppointmentInfo.note);
- }
-
- return *this;
-} // end of assignment operator
-
-
-TQString PilotDateEntry::getTextRepresentation(Qt::TextFormat richText)
-{
- TQString text, tmp;
- TQString par = (richText==Qt::RichText) ?CSL1("<p>"):TQString::null;
- TQString ps = (richText==Qt::RichText) ?CSL1("</p>"):CSL1("\n");
- TQString br = (richText==Qt::RichText) ?CSL1("<br/>"):CSL1("\n");
-
- // title + name
- text += par;
- tmp=richText?CSL1("<b><big>%1</big></b>"):CSL1("%1");
- text += tmp.arg(rtExpand(getDescription(), richText));
- text += ps;
-
- TQDateTime dt(readTm(getEventStart()));
- TQString startDate(dt.toString(Qt::LocalDate));
- text+=par;
- text+=i18n("Start date: %1").arg(startDate);
- text+=ps;
-
- if (isEvent())
- {
- text+=par;
- text+=i18n("Whole-day event");
- text+=ps;
- }
- else
- {
- dt=readTm(getEventEnd());
- TQString endDate(dt.toString(Qt::LocalDate));
- text+=par;
- text+=i18n("End date: %1").arg(endDate);
- text+=ps;
- }
-
- if ( isAlarmEnabled() )
- {
- text+=par;
- tmp=i18n("%1 is the duration, %2 is the time unit", "Alarm: %1 %2 before event starts").
- arg(getAdvance());
- switch (getAdvanceUnits())
- {
- case advMinutes: tmp=tmp.arg(i18n("minutes")); break;
- case advHours: tmp=tmp.arg(i18n("hours")); break;
- case advDays: tmp=tmp.arg(i18n("days")); break;
- default: tmp=tmp.arg(TQString::null); break;;
- }
- text+=tmp;
- text+=ps;
- }
-
- if (getRepeatType() != repeatNone)
- {
- text+=par;
- tmp=i18n("Recurrence: every %1 %2");
- int freq = getRepeatFrequency();
- tmp=tmp.arg(freq);
-
- switch(getRepeatType())
- {
- case repeatDaily: tmp=tmp.arg(i18n("day(s)")); break;
- case repeatWeekly: tmp=tmp.arg(i18n("week(s)")); break;
- case repeatMonthlyByDay:
- case repeatMonthlyByDate: tmp=tmp.arg(i18n("month(s)")); break;
- case repeatYearly: tmp=tmp.arg(i18n("year(s)")); break;
- default: tmp=tmp.arg(TQString::null); break;
- }
- text+=tmp;
- text+=br;
-
- bool repeatsForever = getRepeatForever();
- if (repeatsForever)
- {
- text+=i18n("Repeats indefinitely");
- }
- else
- {
- dt = readTm(getRepeatEnd()).date();
- text+=i18n("Until %1").arg(dt.toString(Qt::LocalDate));
- }
- text+=br;
-
- if (getRepeatType()==repeatMonthlyByDay) text+=i18n("Repeating on the i-th day of week j")+br;
- if (getRepeatType()==repeatMonthlyByDate) text+=i18n("Repeating on the n-th day of the month")+br;
- // TODO: show the dayArray when repeating weekly
- /*TQBitArray dayArray(7);
- if (getRepeatType()==repeatWeekly) text+=i18n("Repeat day flags: %1").arg(getRepeatDays
- const int *days = dateEntry->getRepeatDays();
- // Rotate the days of the week, since day numbers on the Pilot and
- // in vCal / Events are different.
- if (days[0]) dayArray.setBit(6);
- for (int i = 1; i < 7; i++)
- {
- if (days[i]) dayArray.setBit(i-1);
- }*/
- text+=ps;
- }
-
- if (getExceptionCount()>0 )
- {
- text+=par;
- text+=i18n("Exceptions:")+br;
- for (int i = 0; i < getExceptionCount(); i++)
- {
- TQDate exdt=readTm(getExceptions()[i]).date();
- text+=exdt.toString(Qt::LocalDate);
- text+=br;
- }
- text+=ps;
- }
-
- if (!getNote().isEmpty())
- {
- text += richText?CSL1("<hr/>"):CSL1("-------------------------\n");
- text+=par;
- text+=richText?i18n("<b><em>Note:</em></b><br>"):i18n("Note:\n");
- text+=rtExpand(getNote(), richText);
- text+=ps;
- }
-
- return text;
-}
-
-TQDateTime PilotDateEntry::dtStart() const
-{
- FUNCTIONSETUP;
- return readTm( getEventStart() );
-}
-
-TQDateTime PilotDateEntry::dtEnd() const
-{
- FUNCTIONSETUP;
- return readTm( getEventEnd() );
-}
-
-TQDateTime PilotDateEntry::dtRepeatEnd() const
-{
- FUNCTIONSETUP;
- return readTm( getRepeatEnd() );
-}
-
-unsigned int PilotDateEntry::alarmLeadTime() const
-{
- FUNCTIONSETUP;
- if (!isAlarmEnabled()) return 0;
-
- int adv = getAdvance();
- if ( adv < 0 )
- {
- return 0; // Not possible to enter on the pilot
- }
- unsigned int t = adv;
- int u = getAdvanceUnits();
-
-
- switch(u)
- {
- case advMinutes : t *= 60; break;
- case advHours : t *= 3600; break;
- case advDays : t *= 3600 * 24; break;
- default: t = 0;
- }
-
- return t;
-}
-
-PilotRecord *PilotDateEntry::pack() const
-{
- int i;
-
- pi_buffer_t *b = pi_buffer_new( sizeof(fAppointmentInfo) );
- i = pack_Appointment(const_cast<Appointment_t *>(&fAppointmentInfo), b, datebook_v1);
- if (i<0)
- {
- // Generic error from the pack_*() functions.
- return 0;
- }
-
- // pack_Appointment sets b->used
- return new PilotRecord( b, this );
-}
-
-/* setExceptions sets a new set of exceptions. Note that
- PilotDateEntry assumes ownership of the array and will
- delete the old one. */
-void PilotDateEntry::setExceptions(struct tm *e) {
- if (fAppointmentInfo.exception != e)
- {
- KPILOT_FREE(fAppointmentInfo.exception);
- }
- fAppointmentInfo.exception=e;
-}
-
-
-void PilotDateEntry::setDescriptionP(const char *desc, int l)
-{
- FUNCTIONSETUP;
- KPILOT_FREE(fAppointmentInfo.description);
-
- if (desc && *desc)
- {
- if (-1 == l) l=::strlen(desc);
- fAppointmentInfo.description =
- (char *) ::malloc(l + 1);
- if (fAppointmentInfo.description)
- {
- strlcpy(fAppointmentInfo.description, desc, l+1);
- }
- else
- {
- WARNINGKPILOT << "malloc() failed, description not set" << endl;
- }
- }
- else
- {
- fAppointmentInfo.description = 0L;
- }
-}
-
-void PilotDateEntry::setNoteP(const char *note, int l)
-{
- FUNCTIONSETUP;
- KPILOT_FREE(fAppointmentInfo.note);
-
- if (note && *note)
- {
- if (-1 == l) l=::strlen(note);
- fAppointmentInfo.note = (char *)::malloc(l + 1);
- if (fAppointmentInfo.note)
- {
- strlcpy(fAppointmentInfo.note, note,l+1);
- }
- else
- {
- WARNINGKPILOT << "malloc() failed, note not set" << endl;
- }
- }
- else
- {
- fAppointmentInfo.note = 0L;
- }
-}
-
-void PilotDateEntry::setNote(const TQString &s)
-{
- TQCString t = Pilot::toPilot(s);
- setNoteP( t.data(),t.length() );
-}
-
-void PilotDateEntry::setLocation(const TQString &s)
-{
- TQString note = Pilot::fromPilot(getNoteP());
- TQRegExp rxp = TQRegExp("^[Ll]ocation:[^\n]+\n");
-
- // per TQString docs, this covers null and 0 length
- if( s.isEmpty() )
- {
- note.replace(rxp,"");
- }
- else
- {
- TQString location = "Location: " + s + "\n";
- int pos = note.find(rxp);
-
- if(pos >= 0)
- {
- note.replace( rxp, location );
- }
- else
- {
- note = location + note;
- setNote( note );
- }
- }
-}
-
-TQString PilotDateEntry::getLocation() const
-{
- // Read the complete note here and not the filtered
- // one from PilotDateEntry::getNote();
- TQString note = Pilot::fromPilot(getNoteP());
- TQRegExp rxp = TQRegExp("^[Ll]ocation:[^\n]+\n");
- int pos = note.find(rxp, 0);
-
- if(pos >= 0)
- {
- TQString location = rxp.capturedTexts().first();
- rxp = TQRegExp("^[Ll]ocation:[\\s|\t]*");
- location.replace(rxp,"");
- location.replace("\n", "");
- return location;
- }
- else
- {
- return "";
- }
-}
-
-void PilotDateEntry::setDescription(const TQString &s)
-{
- TQCString t = Pilot::toPilot(s);
- setDescriptionP( t.data(),t.length() );
-}
-
-TQString PilotDateEntry::getNote() const
-{
- TQString note = Pilot::fromPilot(getNoteP());
- TQRegExp rxp = TQRegExp("^[Ll]ocation:[^\n]+\n");
- note.replace(rxp, "" );
- return note;
-}
-
-TQString PilotDateEntry::getDescription() const
-{
- return Pilot::fromPilot(getDescriptionP());
-}
-
diff --git a/kpilot/lib/pilotDateEntry.h b/kpilot/lib/pilotDateEntry.h
deleted file mode 100644
index 43601013d..000000000
--- a/kpilot/lib/pilotDateEntry.h
+++ /dev/null
@@ -1,388 +0,0 @@
-#ifndef _KPILOT_PILOTDATEENTRY_H
-#define _KPILOT_PILOTDATEENTRY_H
-/* pilotDateEntry.h -*- C++ -*- KPilot
-**
-** Copyright (C) 1998-2001 by Dan Pilone
-** Copyright (C) 2003-2004 Reinhold Kainhofer <reinhold@kainhofer.com>
-**
-** See the .cc file for an explanation of what this file is for.
-*/
-
-/** @file pilotDateEntry.h defines a wrapper for datebook entries. */
-
-/*
-** This program 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; either version 2.1 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 Lesser General Public License for more details.
-**
-** You should have received a copy of the GNU Lesser General Public License
-** along with this program in a file called COPYING; if not, write to
-** the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
-** MA 02110-1301, USA.
-*/
-
-/*
-** Bug reports and questions can be sent to kde-pim@kde.org
-*/
-
-#include <pi-macros.h>
-#include <pi-datebook.h>
-
-#include <tqbitarray.h>
-#include <tqdatetime.h>
-#include <tqnamespace.h>
-
-#include "pilotRecord.h"
-#include "pilotAppInfo.h"
-
-namespace KCal
-{
-class Event;
-}
-
-/** Interpreted form of the AppInfo block in the datebook database. */
-typedef PilotAppInfo<
- AppointmentAppInfo,
- unpack_AppointmentAppInfo,
- pack_AppointmentAppInfo> PilotDateInfo_;
-
-
-class PilotDateInfo : public PilotDateInfo_
-{
-public:
- PilotDateInfo(PilotDatabase *d) : PilotDateInfo_(d)
- {
- }
-
- /** This resets the entire AppInfo block to one as it would be
- * in an English-language handheld, with 3 categories and
- * default field labels for everything.
- */
- void resetToDefault();
-
-};
-
-/** This class is a wrapper for pilot-link's datebook entries (struct Appointment). */
-class KDE_EXPORT PilotDateEntry : public PilotRecordBase
-{
-public:
- /** Constructor. Zeroes out the appointment. */
- PilotDateEntry();
-
- /** Constructor. Interprets the given record as an appointment. */
- PilotDateEntry(PilotRecord *rec);
-
- /** Copy constructor. */
- PilotDateEntry(const PilotDateEntry &e);
-
- /** Destructor. */
- ~PilotDateEntry()
- {
- free_Appointment(&fAppointmentInfo);
- }
-
- /** Assignment operator. */
- PilotDateEntry& operator=(const PilotDateEntry &e);
-
- /** Create a textual representation (human-readable) of this appointment.
- * If @p richText is true, then the text representation uses qt style
- * tags as well.
- */
- TQString getTextRepresentation(Qt::TextFormat richText);
-
- /** Is this appointment a "floating" appointment?
- *
- * Floating appointments are those that have a day assigned, but no time
- * in that day (birthday appointments are like that). You can think of these
- * as "events", which don't have a time associated with them for a given day,
- * as opposed to a regular "appointment", which does normally have a time
- * associated with it.
- */
- inline bool doesFloat() const
- {
- return fAppointmentInfo.event;
- }
-
- /** Is this a non-time-related event as opposed to an appointment that has a
- * time associated with it?.
- */
- inline bool isEvent() const
- {
- return doesFloat();
- }
-
- /** Sets this appointment's floating status.
- *
- * Floating appointments are those that have a day assigned, but no time
- * in that day (birthday appointments are like that). You can think of these
- * as "events", which don't have a time associated with them for a given day,
- * as opposed to a regular "appointment", which does normally have a time
- * associated with it.
- */
- inline void setFloats(bool f)
- {
- fAppointmentInfo.event = (f ? 1 : 0) /* Force 1 or 0 */ ;
- }
-
- /** Get the start time of this appointment. See dtStart() for caveats. */
- inline struct tm getEventStart() const { return fAppointmentInfo.begin; }
-
- /** Get a pointer to the start time of this appointment. See dtStart() for caveats. */
- inline const struct tm *getEventStart_p() const
- {
- return &fAppointmentInfo.begin;
- }
-
- /** Sets the start time of this appointment. */
- inline void setEventStart(struct tm& start)
- {
- fAppointmentInfo.begin = start;
- }
-
- /** Get the start time of this appointment. For floating appointments, the
- * time is undefined (perhaps 1 minute past midnight).
- *
- * Floating appointments are those that have a day assigned, but no time
- * in that day (birthday appointments are like that).
- */
- TQDateTime dtStart() const;
-
- /** Get the end time of this appointment. See dtEnd() for caveats. */
- inline struct tm getEventEnd() const
- {
- return fAppointmentInfo.end;
- }
-
- /** Get a pointer to the end time of this appointment. See dtEnd() for caveats. */
- inline const struct tm *getEventEnd_p() const
- {
- return &fAppointmentInfo.end;
- }
-
- /** Set the end time of this appointment. */
- inline void setEventEnd(struct tm& end)
- {
- fAppointmentInfo.end = end;
- }
-
- /** Get the end time of this appointment. For floating appointments, the
- * time is undefined (perhaps 1 minute past midnight).
- *
- * Floating appointments are those that have a day assigned, but no time
- * in that day (birthday appointments are like that).
- */
- TQDateTime dtEnd() const;
-
- /** Does this appointment have an alarm set? On the Pilot, an event
- * may have an alarm (or not). If it has one, it is also enabled and
- * causes the Pilot to beep (or whatever is set in the system preferences).
- */
- inline bool isAlarmEnabled() const
- {
- return fAppointmentInfo.alarm;
- }
-
- /** Set whether this appointment has an alarm. */
- inline void setAlarmEnabled(bool b)
- {
- fAppointmentInfo.alarm = (b?1:0) /* Force to known int values */ ;
- }
-
- /** Get the numeric part of "alarm: __ (v) minutes" on the pilot -- you
- * set the alarm time in two parts, a number and a unit type to use; unit
- * types are minutes, hours, days and the number is whatever you like.
- *
- * If alarms are not enabled for this appointment, returns garbage.
- *
- * @see alarmLeadTime()
- * @see dtAlarm()
- */
- inline int getAdvance() const
- {
- return fAppointmentInfo.advance;
- }
-
- /** Set the numeric part of the alarm setting. See getAdvance for details. */
- inline void setAdvance(int advance)
- {
- fAppointmentInfo.advance = advance;
- }
-
- /** Returns the units part of the alarm time. See getAdvance . */
- inline int getAdvanceUnits() const
- {
- return fAppointmentInfo.advanceUnits;
- }
-
- /** Sets the unites part of the alarm time. See getAdvance . */
- inline void setAdvanceUnits(int units)
- {
- fAppointmentInfo.advanceUnits = units;
- }
-
- /** Returns the number of @em seconds "lead time" the alarm should sound
- * before the actual appointment. This interprets the advance number and units.
- * The value is always positive, 0 if no alarms are enabled.
- */
- unsigned int alarmLeadTime() const;
-
- /** Returns the absolute date and time that the alarm should sound for
- * this appointment.
- */
- inline TQDateTime dtAlarm() const
- {
- return dtStart().addSecs(-alarmLeadTime());
- }
-
- // The following need set routines written
- inline repeatTypes getRepeatType() const
- {
- return fAppointmentInfo.repeatType;
- }
- inline void setRepeatType(repeatTypes r)
- {
- fAppointmentInfo.repeatType = r;
- }
-
- inline int getRepeatForever() const
- {
- return fAppointmentInfo.repeatForever;
- }
- inline void setRepeatForever(int f = 1)
- {
- fAppointmentInfo.repeatForever = f;
- }
-
- inline struct tm getRepeatEnd() const
- {
- return fAppointmentInfo.repeatEnd;
- }
- inline void setRepeatEnd(struct tm tm)
- {
- fAppointmentInfo.repeatEnd = tm;
- }
-
- /** Returns the date and time that the repeat ends. If there is no repeat,
- * returns an invalid date and time.
- */
- TQDateTime dtRepeatEnd() const;
-
- inline int getRepeatFrequency() const
- {
- return fAppointmentInfo.repeatFrequency;
- }
- inline void setRepeatFrequency(int f)
- {
- fAppointmentInfo.repeatFrequency = f;
- }
-
- inline DayOfMonthType getRepeatDay() const
- {
- return fAppointmentInfo.repeatDay;
- }
- inline void setRepeatDay(DayOfMonthType rd)
- {
- fAppointmentInfo.repeatDay = rd;
- };
-
- inline const int *getRepeatDays() const
- {
- return fAppointmentInfo.repeatDays;
- }
- inline void setRepeatDays(int *rd)
- {
- for (int i = 0; i < 7; i++)
- {
- fAppointmentInfo.repeatDays[i] = rd[i];
- }
- }
- inline void setRepeatDays(TQBitArray rba)
- {
- for (int i = 0; i < 7; i++)
- {
- fAppointmentInfo.repeatDays[i] = (rba[i] ? 1 : 0);
- }
- }
-
- inline int getExceptionCount() const
- {
- return fAppointmentInfo.exceptions;
- }
- inline void setExceptionCount(int e)
- {
- fAppointmentInfo.exceptions = e;
- }
-
- inline const struct tm *getExceptions() const
- {
- return fAppointmentInfo.exception;
- }
- void setExceptions(struct tm *e);
-
- /** Sets the description of the appointment. This is the short string
- * entered in the day view on the handheld, and it is called the summary
- * in libkcal.
- */
- void setDescription(const TQString &);
- /** Gets the description of the appointment. See setDescription for meaning. */
- TQString getDescription() const;
-
- /** Sets the note for the appointment. The note is the long text entry
- * that is possible - but clumsy - on the handheld. It is called the
- * description in libkcal.
- */
- void setNote(const TQString &);
- /** Gets the note for this appointment. See setNote for meaning. */
- TQString getNote() const;
-
- /**
- * Sets the location for the appointment. For now it will be placed within
- * the notes on the handheld. It will be placed on one line and starts with:
- * Location: {location}. Everything on that line will be counted as location.
- * TODO: Make distinguish between handhelds that support the location field
- * and the ones that don't. (Shouldn't this be done in the pilot-link lib?)
- */
- void setLocation(const TQString &);
-
- /** Gets the location for this appointment. See setNote for meaning. */
- TQString getLocation() const;
-
-protected:
- void setDescriptionP(const char* desc, int l=-1);
- const char* getDescriptionP() const
- {
- return fAppointmentInfo.description;
- }
-
- void setNoteP(const char* note, int l=-1);
- const char* getNoteP() const
- {
- return fAppointmentInfo.note;
- }
-
-public:
- bool isMultiDay() const
- {
- return ((fAppointmentInfo.repeatType == repeatDaily) &&
- (fAppointmentInfo.repeatFrequency == 1) &&
- ( !getRepeatForever() ) &&
- !doesFloat() );
- }
-
- PilotRecord *pack() const;
-
-private:
- struct Appointment fAppointmentInfo;
- void _copyExceptions(const PilotDateEntry &e);
-};
-
-
-
-#endif
-
diff --git a/kpilot/lib/pilotLinkVersion.h b/kpilot/lib/pilotLinkVersion.h
deleted file mode 100644
index 1255baade..000000000
--- a/kpilot/lib/pilotLinkVersion.h
+++ /dev/null
@@ -1,60 +0,0 @@
-#ifndef _KPILOT_PILOTLINKVERSION_H
-#define _KPILOT_PILOTLINKVERSION_H
-/* KPilot
-**
-** Copyright (C) 2005 by Adriaan de Groot
-**
-*/
-
-/*
-** This program 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; either version 2.1 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 Lesser General Public License for more details.
-**
-** You should have received a copy of the GNU Lesser General Public License
-** along with this program in a file called COPYING; if not, write to
-** the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
-** MA 02110-1301, USA.
-*/
-
-/*
-** Bug reports and questions can be sent to kde-pim@kde.org
-*/
-
-
-#include <pi-version.h>
-
-/** @file
-* Checks the pilot-link version and defines some convenience macros.
-* The main point of this file is to complain if you have a version
-* of pilot-link before 0.12, which no longer work with KPilot.
-*/
-
-#ifndef PILOT_LINK_VERSION
-#error "You need at least pilot-link version 0.12.0"
-#endif
-
-
-#define PILOT_LINK_NUMBER ((10000*PILOT_LINK_VERSION) + \
- (100*PILOT_LINK_MAJOR)+PILOT_LINK_MINOR)
-#define PILOT_LINK_0_10_0 (1000)
-#define PILOT_LINK_0_11_0 (1100)
-#define PILOT_LINK_0_11_8 (1108)
-#define PILOT_LINK_0_12_0 (1200)
-#define PILOT_LINK_0_12_1 (1201)
-
-#if PILOT_LINK_NUMBER < PILOT_LINK_0_12_0
-#error "You need at least pilot-link version 0.12.0 for KPilot"
-#endif
-
-#define PI_SIZE_T size_t
-
-
-#endif
-
diff --git a/kpilot/lib/pilotLocalDatabase.cc b/kpilot/lib/pilotLocalDatabase.cc
deleted file mode 100644
index 735632de7..000000000
--- a/kpilot/lib/pilotLocalDatabase.cc
+++ /dev/null
@@ -1,762 +0,0 @@
-/* KPilot
-**
-** Copyright (C) 1998-2001 by Dan Pilone
-** Copyright (C) 2003-2004 Reinhold Kainhofer <reinhold@kainhofer.com>
-**
-** This defines an interface to Pilot databases on the local disk.
-*/
-
-/*
-** This program 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; either version 2.1 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 Lesser General Public License for more details.
-**
-** You should have received a copy of the GNU Lesser General Public License
-** along with this program in a file called COPYING; if not, write to
-** the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
-** MA 02110-1301, USA.
-*/
-
-/*
-** Bug reports and questions can be sent to kde-pim@kde.org
-*/
-
-
-#include "options.h"
-
-#include <stdio.h>
-#include <unistd.h>
-#include <assert.h>
-
-#include <iostream>
-
-#include <pi-file.h>
-
-#include <tqstring.h>
-#include <tqfile.h>
-#include <tqregexp.h>
-#include <tqdatetime.h>
-#include <tqvaluevector.h>
-
-#include <kdebug.h>
-#include <kglobal.h>
-#include <kstandarddirs.h>
-#include <ksavefile.h>
-
-#include "pilotRecord.h"
-#include "pilotLocalDatabase.h"
-
-typedef TQValueVector<PilotRecord *> Records;
-
-class PilotLocalDatabase::Private : public Records
-{
-public:
- static const int DEFAULT_SIZE = 128;
- Private(int size=DEFAULT_SIZE) : Records(size) { resetIndex(); }
- ~Private() { deleteRecords(); }
-
- void deleteRecords()
- {
- for (unsigned int i=0; i<size(); i++)
- {
- delete at(i);
- }
- clear();
- resetIndex();
- }
-
- void resetIndex()
- {
- current = 0;
- pending = -1;
- }
-
- unsigned int current;
- int pending;
-} ;
-
-PilotLocalDatabase::PilotLocalDatabase(const TQString & path,
- const TQString & dbName, bool useDefaultPath) :
- PilotDatabase(dbName),
- fPathName(path),
- fDBName(dbName),
- fAppInfo(0L),
- fAppLen(0),
- d(0L)
-{
- FUNCTIONSETUP;
- fixupDBName();
- openDatabase();
-
- if (!isOpen() && useDefaultPath)
- {
- if (fPathBase && !fPathBase->isEmpty())
- {
- fPathName = *fPathBase;
- }
- else
- {
- fPathName = KGlobal::dirs()->saveLocation("data",
- CSL1("kpilot/DBBackup/"));
- }
- fixupDBName();
- openDatabase();
- if (!isOpen())
- {
- fPathName=path;
- }
- }
-
-}
-
-PilotLocalDatabase::PilotLocalDatabase(const TQString &dbName) :
- PilotDatabase( TQString() ),
- fPathName( TQString() ),
- fDBName( TQString() ),
- fAppInfo(0L),
- fAppLen(0),
- d(0L)
-{
- FUNCTIONSETUP;
-
- int p = dbName.findRev( '/' );
- if (p<0)
- {
- // No slash
- fPathName = CSL1(".");
- fDBName = dbName;
- }
- else
- {
- fPathName = dbName.left(p);
- fDBName = dbName.mid(p+1);
- }
- openDatabase();
-}
-
-PilotLocalDatabase::~PilotLocalDatabase()
-{
- FUNCTIONSETUP;
-
- closeDatabase();
- delete[]fAppInfo;
- delete d;
-}
-
-// Changes any forward slashes to underscores
-void PilotLocalDatabase::fixupDBName()
-{
- FUNCTIONSETUP;
- fDBName = fDBName.replace(CSL1("/"),CSL1("_"));
-}
-
-bool PilotLocalDatabase::createDatabase(long creator, long type, int, int flags, int version)
-{
- FUNCTIONSETUP;
-
- // if the database is already open, we cannot create it again.
- // How about completely resetting it? (i.e. deleting it and then
- // creating it again)
- if (isOpen())
- {
- DEBUGKPILOT << fname << ": Database " << fDBName
- << " already open. Cannot recreate it." << endl;
- return true;
- }
-
- DEBUGKPILOT << fname << ": Creating database " << fDBName << endl;
-
- // Database names seem to be latin1.
- Pilot::toPilot(fDBName, fDBInfo.name, sizeof(fDBInfo.name));
- fDBInfo.creator=creator;
- fDBInfo.type=type;
- fDBInfo.more=0;
- fDBInfo.flags=flags;
- fDBInfo.miscFlags=0;
- fDBInfo.version=version;
- fDBInfo.modnum=0;
- fDBInfo.index=0;
- fDBInfo.createDate=(TQDateTime::currentDateTime()).toTime_t();
- fDBInfo.modifyDate=(TQDateTime::currentDateTime()).toTime_t();
- fDBInfo.backupDate=(TQDateTime::currentDateTime()).toTime_t();
-
- delete[] fAppInfo;
- fAppInfo=0L;
- fAppLen=0;
-
- d = new Private;
-
- // TODO: Do I have to open it explicitly???
- setDBOpen(true);
- return true;
-}
-
-int PilotLocalDatabase::deleteDatabase()
-{
- FUNCTIONSETUP;
- if (isOpen())
- {
- closeDatabase();
- }
-
- TQString dbpath=dbPathName();
- TQFile fl(dbpath);
- if (TQFile::remove(dbPathName()))
- {
- return 0;
- }
- else
- {
- return -1;
- }
-}
-
-
-
-// Reads the application block info
-int PilotLocalDatabase::readAppBlock(unsigned char *buffer, int size)
-{
- FUNCTIONSETUP;
-
- size_t m = kMin((size_t)size,(size_t)fAppLen);
-
- if (!isOpen())
- {
- WARNINGKPILOT << "DB not open!" << endl;
- memset(buffer,0,m);
- return -1;
- }
-
- memcpy((void *) buffer, fAppInfo, m);
- return fAppLen;
-}
-
-int PilotLocalDatabase::writeAppBlock(unsigned char *buffer, int len)
-{
- FUNCTIONSETUP;
-
- if (!isOpen())
- {
- WARNINGKPILOT << "DB not open!" << endl;
- return -1;
- }
- delete[]fAppInfo;
- fAppLen = len;
- fAppInfo = new char[fAppLen];
-
- memcpy(fAppInfo, (void *) buffer, fAppLen);
- return 0;
-}
-
-
-// returns the number of records in the database
-unsigned int PilotLocalDatabase::recordCount() const
-{
- if (d && isOpen())
- {
- return d->size();
- }
- else
- {
- return 0;
- }
-}
-
-
-// Returns a TQValueList of all record ids in the database.
-TQValueList<recordid_t> PilotLocalDatabase::idList()
-{
- int idlen=recordCount();
- TQValueList<recordid_t> idlist;
- if (idlen<=0)
- {
- return idlist;
- }
-
- // now create the QValue list from the idarr:
- for (int i=0; i<idlen; i++)
- {
- idlist.append((*d)[i]->id());
- }
-
- return idlist;
-}
-
-// Reads a record from database by id, returns record length
-PilotRecord *PilotLocalDatabase::readRecordById(recordid_t id)
-{
- FUNCTIONSETUP;
-
- if (!isOpen())
- {
- WARNINGKPILOT << "Database '" << fDBName << " not open!" << endl;
- return 0L;
- }
-
- d->pending = -1;
-
- for (unsigned int i = 0; i < d->size(); i++)
- {
- if ((*d)[i]->id() == id)
- {
- PilotRecord *newRecord = new PilotRecord((*d)[i]);
- d->current = i;
- return newRecord;
- }
- }
- return 0L;
-}
-
-// Reads a record from database, returns the record
-PilotRecord *PilotLocalDatabase::readRecordByIndex(int index)
-{
- FUNCTIONSETUP;
-
- if (index < 0)
- {
- DEBUGKPILOT << fname << ": Index " << index << " is bogus." << endl;
- return 0L;
- }
-
- d->pending = -1;
- if (!isOpen())
- {
- WARNINGKPILOT << "DB not open!" << endl;
- return 0L;
- }
-
- DEBUGKPILOT << fname << ": Index=" << index << " Count=" << recordCount() << endl;
-
- if ( (unsigned int)index >= recordCount() )
- {
- return 0L;
- }
- PilotRecord *newRecord = new PilotRecord((*d)[index]);
- d->current = index;
-
- return newRecord;
-}
-
-// Reads the next record from database in category 'category'
-PilotRecord *PilotLocalDatabase::readNextRecInCategory(int category)
-{
- FUNCTIONSETUP;
- d->pending = -1;
- if (!isOpen())
- {
- WARNINGKPILOT << "DB not open!" << endl;
- return 0L;
- }
-
- while ((d->current < d->size())
- && ((*d)[d->current]->category() != category))
- {
- d->current++;
- }
-
- if (d->current >= d->size())
- return 0L;
- PilotRecord *newRecord = new PilotRecord((*d)[d->current]);
-
- d->current++; // so we skip it next time
- return newRecord;
-}
-
-const PilotRecord *PilotLocalDatabase::findNextNewRecord()
-{
- FUNCTIONSETUP;
-
- if (!isOpen())
- {
- WARNINGKPILOT << "DB not open!" << endl;
- return 0L;
- }
- DEBUGKPILOT << fname << ": looking for new record from " << d->current << endl;
- // Should this also check for deleted?
- while ((d->current < d->size())
- && ((*d)[d->current]->id() != 0 ))
- {
- d->current++;
- }
-
- if (d->current >= d->size())
- return 0L;
-
- d->pending = d->current; // Record which one needs the new id
- d->current++; // so we skip it next time
- return (*d)[d->pending];
-}
-
-PilotRecord *PilotLocalDatabase::readNextModifiedRec(int *ind)
-{
- FUNCTIONSETUP;
-
- if (!isOpen())
- {
- WARNINGKPILOT << "DB not open!" << endl;
- return 0L;
- }
-
- d->pending = -1;
- // Should this also check for deleted?
- while ((d->current < d->size())
- && !((*d)[d->current]->isModified()) && ((*d)[d->current]->id()>0 ))
- {
- d->current++;
- }
-
- if (d->current >= d->size())
- {
- return 0L;
- }
- PilotRecord *newRecord = new PilotRecord((*d)[d->current]);
- if (ind)
- {
- *ind=d->current;
- }
-
- d->pending = d->current; // Record which one needs the new id
- d->current++; // so we skip it next time
- return newRecord;
-}
-
-// Writes a new ID to the record specified the index. Not supported on Serial connections
-recordid_t PilotLocalDatabase::updateID(recordid_t id)
-{
- FUNCTIONSETUP;
-
- if (!isOpen())
- {
- WARNINGKPILOT << "DB not open!" << endl;
- return 0;
- }
- if (d->pending < 0)
- {
- WARNINGKPILOT << "Last call was NOT readNextModifiedRec()" << endl;
- return 0;
- }
- (*d)[d->pending]->setID(id);
- d->pending = -1;
- return id;
-}
-
-// Writes a new record to database (if 'id' == 0, it is assumed that this is a new record to be installed on pilot)
-recordid_t PilotLocalDatabase::writeRecord(PilotRecord * newRecord)
-{
- FUNCTIONSETUP;
-
- if (!isOpen())
- {
- WARNINGKPILOT << "DB not open!" << endl;
- return 0;
- }
-
- d->pending = -1;
- if (!newRecord)
- {
- WARNINGKPILOT << "Record to be written is invalid!" << endl;
- return 0;
- }
-
- // Instead of making the app do it, assume that whenever a record is
- // written to the database it is dirty. (You can clean up the database with
- // resetSyncFlags().) This will make things get copied twice during a hot-sync
- // but shouldn't cause any other major headaches.
- newRecord->setModified( true );
-
- // First check to see if we have this record:
- if (newRecord->id() != 0)
- {
- for (unsigned int i = 0; i < d->size(); i++)
- if ((*d)[i]->id() == newRecord->id())
- {
- delete (*d)[i];
-
- (*d)[i] = new PilotRecord(newRecord);
- return 0;
- }
- }
- // Ok, we don't have it, so just tack it on.
- d->append( new PilotRecord(newRecord) );
- return newRecord->id();
-}
-
-// Deletes a record with the given recordid_t from the database, or all records, if all is set to true. The recordid_t will be ignored in this case
-int PilotLocalDatabase::deleteRecord(recordid_t id, bool all)
-{
- FUNCTIONSETUP;
- if (!isOpen())
- {
- WARNINGKPILOT <<"DB not open"<<endl;
- return -1;
- }
- d->resetIndex();
- if (all)
- {
- d->deleteRecords();
- d->clear();
- return 0;
- }
- else
- {
- Private::Iterator i;
- for ( i=d->begin() ; i!=d->end(); ++i)
- {
- if ((*i) && (*i)->id() == id) break;
- }
- if ( (i!=d->end()) && (*i) && (*i)->id() == id)
- {
- d->erase(i);
- }
- else
- {
- // Record with this id does not exist!
- return -1;
- }
- }
- return 0;
-}
-
-
-// Resets all records in the database to not dirty.
-int PilotLocalDatabase::resetSyncFlags()
-{
- FUNCTIONSETUP;
-
- if (!isOpen())
- {
- WARNINGKPILOT << "DB not open!" << endl;
- return -1;
- }
- d->pending = -1;
- for (unsigned int i = 0; i < d->size(); i++)
- {
- (*d)[i]->setModified( false );
- }
- return 0;
-}
-
-// Resets next record index to beginning
-int PilotLocalDatabase::resetDBIndex()
-{
- FUNCTIONSETUP;
- if (!isOpen())
- {
- WARNINGKPILOT << "DB not open!" << endl;
- return -1;
- }
- d->resetIndex();
- return 0;
-}
-
-// Purges all Archived/Deleted records from Palm Pilot database
-int PilotLocalDatabase::cleanup()
-{
- FUNCTIONSETUP;
- if (!isOpen())
- {
- WARNINGKPILOT << "DB not open!" << endl;
- return -1;
- }
- d->resetIndex();
-
- /* Not the for loop one might expect since when we erase()
- * a record the iterator changes too.
- */
- Private::Iterator i = d->begin();
- while ( i!=d->end() )
- {
- if ( (*i)->isDeleted() || (*i)->isArchived() )
- {
- delete (*i);
- i = d->erase(i);
- }
- else
- {
- ++i;
- }
- }
-
- // Don't have to do anything. Will be taken care of by closeDatabase()...
- // Changed!
- return 0;
-}
-
-TQString PilotLocalDatabase::dbPathName() const
-{
- FUNCTIONSETUP;
- TQString tempName(fPathName);
- TQString slash = CSL1("/");
-
- if (!tempName.endsWith(slash)) tempName += slash;
- tempName += getDBName();
- tempName += CSL1(".pdb");
- return tempName;
-}
-
-void PilotLocalDatabase::openDatabase()
-{
- FUNCTIONSETUP;
-
- pi_file *dbFile;
-
- setDBOpen(false);
-
- dbFile = pi_file_open( TQFile::encodeName(dbPathName()) );
- if (dbFile == 0L)
- {
- TQString path = dbPathName();
- DEBUGKPILOT << fname << ": Failed to open " << path << endl;
- return;
- }
-
-
- PI_SIZE_T size = 0;
- void *tmpBuffer;
- pi_file_get_info(dbFile, &fDBInfo);
- pi_file_get_app_info(dbFile, &tmpBuffer, &size);
- fAppLen = size;
- fAppInfo = new char[fAppLen];
- memcpy(fAppInfo, tmpBuffer, fAppLen);
-
- int count;
- pi_file_get_entries(dbFile, &count);
- if (count >= 0)
- {
- KPILOT_DELETE(d);
- d = new Private(count);
- }
-
- int attr, cat;
- recordid_t id;
- unsigned int i = 0;
- while (pi_file_read_record(dbFile, i,
- &tmpBuffer, &size, &attr, &cat, &id) == 0)
- {
- pi_buffer_t *b = pi_buffer_new(size);
- memcpy(b->data,tmpBuffer,size);
- b->used = size;
- (*d)[i] = new PilotRecord(b, attr, cat, id);
- i++;
- }
- pi_file_close(dbFile); // We done with it once we've read it in.
-
- KSaveFile::backupFile( dbPathName() );
-
- setDBOpen(true);
-}
-
-void PilotLocalDatabase::closeDatabase()
-{
- FUNCTIONSETUP;
- pi_file *dbFile;
-
- if (!isOpen())
- {
- DEBUGKPILOT << fname << ": Database " << fDBName
- << " is not open. Cannot close and write it"
- << endl;
- return;
- }
-
- TQString newName = dbPathName() + CSL1(".new");
- TQString path = dbPathName();
- DEBUGKPILOT << fname
- << ": Creating temp file " << newName
- << " for the database file " << path << endl;
-
- dbFile = pi_file_create(TQFile::encodeName(newName),&fDBInfo);
- pi_file_set_app_info(dbFile, fAppInfo, fAppLen);
-
- for (unsigned int i = 0; i < d->size(); i++)
- {
- // How did a NULL pointer sneak in here?
- if (!(*d)[i])
- {
- continue;
- }
-
- if (((*d)[i]->id() == 0) && ((*d)[i]->isDeleted()))
- {
- // Just ignore it
- }
- else
- {
- pi_file_append_record(dbFile,
- (*d)[i]->data(),
- (*d)[i]->size(),
- (*d)[i]->attributes(), (*d)[i]->category(),
- (*d)[i]->id());
- }
- }
-
- pi_file_close(dbFile);
- TQFile::remove(dbPathName());
- rename((const char *) TQFile::encodeName(newName),
- (const char *) TQFile::encodeName(dbPathName()));
- setDBOpen(false);
-}
-
-
-TQString *PilotLocalDatabase::fPathBase = 0L;
-
-void PilotLocalDatabase::setDBPath(const TQString &s)
-{
- FUNCTIONSETUP;
-
- DEBUGKPILOT << fname
- << ": Setting default DB path to "
- << s
- << endl;
-
- if (!fPathBase)
- {
- fPathBase = new TQString(s);
- }
- else
- {
- *fPathBase = s;
- }
-}
-
-/* virtual */ PilotDatabase::DBType PilotLocalDatabase::dbType() const
-{
- return eLocalDB;
-}
-
-
-/* static */ bool PilotLocalDatabase::infoFromFile( const TQString &path, DBInfo *d )
-{
- FUNCTIONSETUP;
-
- pi_file *f = 0L;
-
- if (!d)
- {
- return false;
- }
- if (!TQFile::exists(path))
- {
- return false;
- }
-
- TQCString fileName = TQFile::encodeName( path );
- f = pi_file_open( fileName );
- if (!f)
- {
- WARNINGKPILOT << "Can't open " << path << endl;
- return false;
- }
-
- pi_file_get_info(f,d);
- pi_file_close(f);
-
- return true;
-}
-
diff --git a/kpilot/lib/pilotLocalDatabase.h b/kpilot/lib/pilotLocalDatabase.h
deleted file mode 100644
index e5d11a63a..000000000
--- a/kpilot/lib/pilotLocalDatabase.h
+++ /dev/null
@@ -1,201 +0,0 @@
-#ifndef _KPILOT_PILOTLOCALDATABASE_H
-#define _KPILOT_PILOTLOCALDATABASE_H
-/* KPilot
-**
-** Copyright (C) 1998-2001 by Dan Pilone
-** Copyright (C) 2003-2004 Reinhold Kainhofer <reinhold@kainhofer.com>
-** Copyright (C) 2006 Adriaan de Groot <groot@kde.org>
-**
-*/
-
-/*
-** This program 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; either version 2.1 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 Lesser General Public License for more details.
-**
-** You should have received a copy of the GNU Lesser General Public License
-** along with this program in a file called COPYING; if not, write to
-** the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
-** MA 02110-1301, USA.
-*/
-
-/*
-** Bug reports and questions can be sent to kde-pim@kde.org
-*/
-
-#include "pilotDatabase.h"
-
-/** @file
-* Defines the PilotLocalDatabase class, for databases stored
-* on disk (as opposed to in a handheld).
-*/
-
-/**
-* PilotLocalDatabase represents databases in the same binary format
-* as on the handheld but which are stored on local disk.
-*/
-class KDE_EXPORT PilotLocalDatabase : public PilotDatabase
-{
-public:
- /**
- * Opens the local database. If the database cannot be found at the
- * given position, a default path is used
- * ($KDEHOME/share/apps/kpilot/DBBackup)
- * and if the file is found there, it is opened. In some cases this should
- * not be done, so the parameter useDefaultPath controls this behavior.
- * If it is set to true, the default path is used if the file cannot be
- * found in the explicitly given location. If it is set to false and
- * the database cannot be found, no database is opened. It can then be
- * created explicitly at the specified location.
- */
- PilotLocalDatabase( const TQString& path,
- const TQString& name, bool useDefaultPath=true);
-
- /**
- * Opens the local database. This is primarily for testing
- * purposes; only tries the given path.
- */
- PilotLocalDatabase(const TQString &name);
-
- virtual ~PilotLocalDatabase();
-
- /** Creates the database with the given creator, type and flags on
- * the given card (default is RAM). If the database already exists,
- * this function does nothing.
- */
- virtual bool createDatabase(long creator=0,
- long type=0, int cardno=0, int flags=0, int version=0);
-
-
-
- /** Deletes the database (by name, as given in the constructor
- * and stored in the fDBName field. )
- */
- virtual int deleteDatabase();
-
- // Reads the application block info
- virtual int readAppBlock(unsigned char* buffer, int maxLen);
- // Writes the application block info.
- virtual int writeAppBlock(unsigned char* buffer, int len);
- // returns the number of records in the database, 0 if not open
- virtual unsigned int recordCount() const;
- // Returns a TQValueList of all record ids in the database.
- virtual TQValueList<recordid_t> idList();
- // Reads a record from database by id, returns record
- virtual PilotRecord* readRecordById(recordid_t id);
- // Reads a record from database, returns the record
- virtual PilotRecord* readRecordByIndex(int index);
- // Reads the next record from database in category 'category'
- virtual PilotRecord* readNextRecInCategory(int category);
- /**
- * Returns the next "new" record, ie. the next record
- * that has not been synced yet. These records all have ID=0, so are
- * not easy to find with the other methods. The record is the one
- * contained in the database, not a copy like the read*() functions
- * give you -- so be careful with it. Don't delete it, in any case.
- * Casting it to non-const and marking it deleted is OK, though,
- * which is mostly its intended use.
- */
- const PilotRecord *findNextNewRecord();
-
- /**
- * Reads the next record from database that has the dirty flag set.
- * ind (if a valid pointer is given) will receive the index of the
- * returned record.
- */
- virtual PilotRecord* readNextModifiedRec(int *ind=0L);
- // Writes a new record to database (if 'id' == 0, none is assigned, either)
- virtual recordid_t writeRecord(PilotRecord* newRecord);
- /**
- * Deletes a record with the given recordid_t from the database,
- * or all records, if all is set to true. The recordid_t will be
- * ignored in this case. Return value is negative on error, 0 otherwise.
- */
- virtual int deleteRecord(recordid_t id, bool all=false);
- // Resets all records in the database to not dirty.
- virtual int resetSyncFlags();
- // Resets next record index to beginning
- virtual int resetDBIndex();
- // Purges all Archived/Deleted records from Palm Pilot database
- virtual int cleanup();
-
-
- /** Update the ID of the current record in the database with
- * the specified @param id . This is allowed only after
- * reading or writing a modified or new record.
- */
- virtual recordid_t updateID(recordid_t id);
-
-
- /** Return the name of the database (as it would be on the handheld). */
- TQString getDBName() const { return fDBName; }
-
- /**
- * Returns the full path of the current database, based on
- * the path and dbname passed to the constructor, and including
- * the .pdb extension.
- */
- virtual TQString dbPathName() const;
-
- /**
- * Accessor functions for the application info block.
- */
- int appInfoSize() const
- { if (isOpen()) return fAppLen; else return -1; } ;
- char *appInfo() { return fAppInfo; } ;
-
- const struct DBInfo &getDBInfo() const { return fDBInfo; }
- void setDBInfo(const struct DBInfo &dbi) {fDBInfo=dbi; }
-
- virtual DBType dbType() const;
-
- /** Reads local file @p path and fills in the DBInfo
- * structure @p d with the DBInfo from the file.
- *
- * @return @c false if d is NULL
- * @return @c false if the file @p path does not exist
- * @return @c true if reading the DBInfo succeeds
- *
- * @note Relatively expensive operation, since the pilot-link
- * library doesn't provide a cheap way of getting this
- * information.
- */
- static bool infoFromFile( const TQString &path, DBInfo *d );
-
-protected:
- // Changes any forward slashes to underscores
- void fixupDBName();
- virtual void openDatabase();
- virtual void closeDatabase();
-
-private:
- struct DBInfo fDBInfo;
- TQString fPathName,fDBName;
- char* fAppInfo;
- size_t fAppLen;
-
- class Private;
- Private *d;
-
-public:
- /**
- * For databases opened by name only (constructor 2 -- which is the
- * preferred one, too) try this path first before the default path.
- * Set statically so it's shared for all local databases.
- */
- static void setDBPath(const TQString &);
- /**
- * Accessor for the extra search path.
- */
- static const TQString &getDBPath() { return *fPathBase; } ;
-private:
- static TQString *fPathBase;
-};
-
-#endif
diff --git a/kpilot/lib/pilotMemo.cc b/kpilot/lib/pilotMemo.cc
deleted file mode 100644
index 946a995b1..000000000
--- a/kpilot/lib/pilotMemo.cc
+++ /dev/null
@@ -1,135 +0,0 @@
-/* KPilot
-**
-** Copyright (C) 1998-2001 by Dan Pilone
-**
-** This is a C++ wrapper for the Pilot's Memo Pad structures.
-*/
-
-/*
-** This program 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; either version 2.1 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 Lesser General Public License for more details.
-**
-** You should have received a copy of the GNU Lesser General Public License
-** along with this program in a file called COPYING; if not, write to
-** the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
-** MA 02110-1301, USA.
-*/
-
-/*
-** Bug reports and questions can be sent to kde-pim@kde.org
-*/
-
-#include "options.h"
-
-#include <tqnamespace.h>
-
-#include "pilotMemo.h"
-#include "pilotDatabase.h"
-
-
-
-PilotMemo::PilotMemo(const PilotRecord * rec) : PilotRecordBase(rec)
-{
- FUNCTIONSETUP;
- fText = Pilot::fromPilot((const char *)(rec->data()),rec->size());
-}
-
-PilotRecord *PilotMemo::pack()
-{
- FUNCTIONSETUPL(4);
- int i;
-
- int len = fText.length() + 8;
- struct Memo buf;
- buf.text = new char[len];
-
- // put our text into buf
- i = Pilot::toPilot(fText, buf.text, len);
-
- pi_buffer_t *b = pi_buffer_new(len);
- i = pack_Memo(&buf, b, memo_v1);
-
- DEBUGKPILOT << fname << ": original text: [" << fText
- << "], buf.text: [" << buf.text
- << "], b->data: [" << b->data << "]" << endl;
-
- if (i<0)
- {
- // Generic error from the pack_*() functions.
- delete[] buf.text;
- return 0;
- }
-
- // pack_Appointment sets b->used
- PilotRecord *r = new PilotRecord(b, this);
- delete[] buf.text;
- return r;
-}
-
-
-TQString PilotMemo::getTextRepresentation(Qt::TextFormat richText)
-{
- if (richText==Qt::RichText)
- {
- return i18n("<i>Title:</i> %1<br>\n<i>MemoText:</i><br>%2").
- arg(rtExpand(getTitle(), richText)).arg(rtExpand(text(), richText));
- }
- else
- {
- return i18n("Title: %1\nMemoText:\n%2").arg(getTitle()).arg(text());
- }
-}
-
-
-TQString PilotMemo::getTitle() const
-{
- if (fText.isEmpty()) return TQString::null;
-
- int memoTitleLen = fText.find('\n');
- if (-1 == memoTitleLen) memoTitleLen=fText.length();
- return fText.left(memoTitleLen);
-}
-
-TQString PilotMemo::shortTitle() const
-{
- FUNCTIONSETUP;
- TQString t = TQString(getTitle()).simplifyWhiteSpace();
-
- if (t.length() < 32)
- return t;
- t.truncate(40);
-
- int spaceIndex = t.findRev(' ');
-
- if (spaceIndex > 32)
- {
- t.truncate(spaceIndex);
- }
-
- t += CSL1("...");
-
- return t;
-}
-
-TQString PilotMemo::sensibleTitle() const
-{
- FUNCTIONSETUP;
- TQString s = getTitle();
-
- if (!s.isEmpty())
- {
- return s;
- }
- else
- {
- return i18n("[unknown]");
- }
-}
-
diff --git a/kpilot/lib/pilotMemo.h b/kpilot/lib/pilotMemo.h
deleted file mode 100644
index f4436ab75..000000000
--- a/kpilot/lib/pilotMemo.h
+++ /dev/null
@@ -1,105 +0,0 @@
-#ifndef _KPILOT_PILOTMEMO_H
-#define _KPILOT_PILOTMEMO_H
-/* pilotMemo.h KPilot
-**
-** Copyright (C) 1998-2001 by Dan Pilone
-**
-** See the .cc file for an explanation of what this file is for.
-*/
-
-/*
-** This program 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; either version 2.1 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 Lesser General Public License for more details.
-**
-** You should have received a copy of the GNU Lesser General Public License
-** along with this program in a file called COPYING; if not, write to
-** the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
-** MA 02110-1301, USA.
-*/
-
-/*
-** Bug reports and questions can be sent to kde-pim@kde.org
-*/
-
-#include <tqnamespace.h>
-#include <tqstring.h>
-
-#include <pi-memo.h>
-
-#include "pilotRecord.h"
-#include "pilotAppInfo.h"
-
-class KDE_EXPORT PilotMemo : public PilotRecordBase
-{
-public:
- /**
- * Constructor. Create an empty memo.
- */
- PilotMemo(void) : PilotRecordBase() { } ;
-
- /**
- * Constructor. Create a memo in the Unfiled category with
- * text @p s .
- */
- PilotMemo(const TQString &s) : PilotRecordBase()
- {
- setText(s);
- } ;
-
- /**
- * Constructor. Create a memo with the category and
- * attributes of the given record @p rec, and extract
- * the text from that record as if it comes from the MemoDB.
- */
- PilotMemo(const PilotRecord* rec);
-
- /**
- * Constructor. Create a memo with category and
- * attributes from the argument @p r, and set the
- * text of the memo from string @p s.
- */
- PilotMemo(const PilotRecordBase *r, const TQString &s) :
- PilotRecordBase(r)
- {
- setText(s);
- }
-
- ~PilotMemo() { } ;
-
- virtual TQString getTextRepresentation(Qt::TextFormat richText);
- TQString text(void) const { return fText; } ;
- void setText(const TQString &text) { fText = text.left(MAX_MEMO_LEN); } ;
- TQString getTitle(void) const ;
- PilotRecord* pack();
-
- static const int MAX_MEMO_LEN=8192;
-
- /**
- * Return a "short but sensible" title. getTitle() returns the
- * first line of the memo, which may be very long
- * and inconvenient. shortTitle() returns about 30
- * characters.
- */
- TQString shortTitle() const;
-
- /**
- * Returns a (complete) title if there is one and [unknown]
- * otherwise.
- */
- TQString sensibleTitle() const;
-
-private:
- TQString fText;
-
-};
-
-typedef PilotAppInfo<struct MemoAppInfo,unpack_MemoAppInfo, pack_MemoAppInfo> PilotMemoInfo;
-
-#endif
diff --git a/kpilot/lib/pilotRecord.cc b/kpilot/lib/pilotRecord.cc
deleted file mode 100644
index 59f055c3c..000000000
--- a/kpilot/lib/pilotRecord.cc
+++ /dev/null
@@ -1,132 +0,0 @@
-/* KPilot
-**
-** Copyright (C) 1998-2001 by Dan Pilone
-** Copyright (C) 2003-2004 Reinhold Kainhofer <reinhold@kainhofer.com>
-**
-** This is a wrapper for pilot-link's general
-** Pilot database structures. These records are
-*** just collections of bits. See PilotAppCategory
-** for interpreting the bits in a meaningful way.
-**
-** As a crufty hack, the non-inline parts of
-** PilotAppCategory live in this file as well.
-*/
-
-/*
-** This program 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; either version 2.1 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 Lesser General Public License for more details.
-**
-** You should have received a copy of the GNU Lesser General Public License
-** along with this program in a file called COPYING; if not, write to
-** the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
-** MA 02110-1301, USA.
-*/
-
-/*
-** Bug reports and questions can be sent to kde-pim@kde.org
-*/
-#include "options.h"
-
-#include <string.h>
-
-#include <tqregexp.h>
-
-#include <kglobal.h>
-#include <kcharsets.h>
-
-#include "pilot.h"
-#include "pilotRecord.h"
-
-
-
-/* virtual */ TQString PilotRecordBase::textRepresentation() const
-{
- return CSL1("[ %1,%2,%3 ]") . arg(attributes(),category(),id());
-}
-
-/* virtual */ TQString PilotRecord::textRepresentation() const
-{
- return CSL1("[ %1,%2 ]")
- .arg(PilotRecordBase::textRepresentation())
- .arg(size());
-}
-
-
-
-/* static */ int PilotRecord::fAllocated = 0;
-/* static */ int PilotRecord::fDeleted = 0;
-
-/* static */ void PilotRecord::allocationInfo()
-{
- FUNCTIONSETUP;
- DEBUGKPILOT << fname
- << ": Allocated " << fAllocated
- << " Deleted " << fDeleted << endl;
-}
-
-PilotRecord::PilotRecord(void *data, int len, int attrib, int cat, recordid_t uid) :
- PilotRecordBase(attrib,cat,uid),
- fData(0L),
- fLen(len),
- fBuffer(0L)
-{
- FUNCTIONSETUPL(4);
- fData = new char[len];
-
- memcpy(fData, data, len);
-
- fAllocated++;
-}
-
-PilotRecord::PilotRecord(PilotRecord * orig) :
- PilotRecordBase( orig->attributes(), orig->category(), orig->id() ) ,
- fBuffer(0L)
-{
- FUNCTIONSETUPL(4);
- fData = new char[orig->size()];
-
- memcpy(fData, orig->data(), orig->size());
- fLen = orig->size();
- fAllocated++;
-}
-
-PilotRecord & PilotRecord::operator = (PilotRecord & orig)
-{
- FUNCTIONSETUP;
- if (fBuffer)
- {
- pi_buffer_free(fBuffer);
- fBuffer=0L;
- fData=0L;
- }
-
- if (fData)
- delete[]fData;
- fData = new char[orig.size()];
-
- memcpy(fData, orig.data(), orig.size());
- fLen = orig.size();
- setAttributes( orig.attributes() );
- setCategory( orig.category() );
- setID( orig.id() );
- return *this;
-}
-
-void PilotRecord::setData(const char *data, int len)
-{
- FUNCTIONSETUP;
- if (fData)
- delete[]fData;
- fData = new char[len];
-
- memcpy(fData, data, len);
- fLen = len;
-}
-
diff --git a/kpilot/lib/pilotRecord.h b/kpilot/lib/pilotRecord.h
deleted file mode 100644
index fdf8a33e1..000000000
--- a/kpilot/lib/pilotRecord.h
+++ /dev/null
@@ -1,355 +0,0 @@
-#ifndef _KPILOT_PILOTRECORD_H
-#define _KPILOT_PILOTRECORD_H
-/* KPilot
-**
-** Copyright (C) 1998-2001 by Dan Pilone
-** Copyright (C) 2003-2004 Reinhold Kainhofer <reinhold@kainhofer.com>
-** Copyright (C) 2006 Adriaan de Groot <groot@kde.org>
-**
-*/
-
-/*
-** This program 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; either version 2.1 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 Lesser General Public License for more details.
-**
-** You should have received a copy of the GNU Lesser General Public License
-** along with this program in a file called COPYING; if not, write to
-** the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
-** MA 02110-1301, USA.
-*/
-
-/*
-** Bug reports and questions can be sent to kde-pim@kde.org
-*/
-
-
-#include "pilot.h"
-
-/**
-* @file This file defines the lowest- denominator representation(s)
-*of the bits used in a Pilot-based database record.
-*/
-
-
-/**
-* All entries in the Handheld -- whether interpreted or binary blobs --
-* have some common characteristics, viz. an ID number, a category,
-* and some attributes defined by the handheld. PilotRecordBase is
-* a common base class collecting methods to manipulate those
-* common characteristics.
-*/
-class KDE_EXPORT PilotRecordBase
-{
-public:
- /** Constructor. Initialize the characteristics to the
- * given values.
- *
- * @param attrib Attributes (bitfield) for this entry.
- * @param cat Category for this entry. Should be in the
- * range 0 <= cat < Pilot::CATEGORY_COUNT . Using an
- * invalid category means 0 (unfiled) is used.
- * @param id Unique ID for this entry. May be 0 (non-unique) as well.
- */
- PilotRecordBase(int attrib=0, int cat=0, recordid_t id=0) :
- fAttrib(attrib),fCat(0),fID(id)
- {
- setCategory(cat);
- }
-
- /** Constructor. Initializes the characteristics from
- * the values the given record @p b has. When @p b is
- * NULL (which is allowed), everything is assumed zero.
- * No ownership is transferred.
- *
- * @param b Record to take characteristics from.
- */
- PilotRecordBase( const PilotRecordBase *b ) :
- fAttrib( b ? b->attributes() : 0 ),
- fCat( 0 ),
- fID( b ? b->id() : 0 )
- {
- if (b)
- {
- setCategory( b->category() );
- }
- }
-
- /** Destructor. Nothing to do for it. */
- virtual ~PilotRecordBase() { } ;
-
- /** Attributes of this record (deleted, secret, ...);
- * it's a bitfield.
- */
- inline int attributes() const
- {
- return fAttrib;
- }
-
- /** Set the attributes of this record. */
- inline void setAttributes(int attrib)
- {
- fAttrib = attrib;
- }
-
- /** Returns the category number [ 0 .. Pilot::CATEGORY_COUNT-1]
- * of this record.
- */
- inline int category() const
- {
- return fCat;
- }
-
- /** Sets the category number [ 0 .. Pilot::CATEGORY_COUNT-1]
- * of this record.
- * Trying to set an illegal category number files this one under
- * "Unfiled" (which is 0).
- */
- inline void setCategory(int cat)
- {
- if ( (cat<0) || (cat>=(int)Pilot::CATEGORY_COUNT))
- {
- cat=0;
- }
- fCat = cat;
- }
-
- /** Sets the category number by looking up the string @p label
- * in the category table @p info . Leaves the category unchanged
- * if no match is found and returns @c false.
- *
- * @param info AppInfo structure containing the labels (in handheld
- * native encoding).
- * @param label The label to look for.
- *
- * @return @c true on success, @c false on failure
- */
- bool setCategory(const struct CategoryAppInfo *info, const TQString &label)
- {
- if (!info)
- {
- return false;
- }
-
- int cat = Pilot::findCategory( info, label, false );
- if ( (cat<0) || (cat>=(int)Pilot::CATEGORY_COUNT) )
- {
- return false;
- }
- else
- {
- setCategory( cat );
- return true;
- }
- }
-
- /** Returns the record ID for this record. Record IDs are unique for a given
- * handheld and database.
- */
- inline recordid_t id() const
- {
- return fID;
- }
-
- /** Sets the record ID for this record. Use with caution -- you ca confuse
- * the handheld by doing weird things here.
- */
- void setID(recordid_t id)
- {
- fID = id;
- }
-
- /** Accessor for one bit of the record's attributes. Is this record marked
- * deleted (on the handheld) ? Deleted records are not removed from the
- * database until a HotSync is done (which normally calls purge deleted
- * or so to really get rid of the records from storage.
- */
- inline bool isDeleted() const
- {
- return fAttrib & dlpRecAttrDeleted;
- }
-
- /** Accessor for one bit of the record's attributes. Is this record secret?
- * Secret records are not displayed on the desktop by default.
- */
- inline bool isSecret() const
- {
- return fAttrib & dlpRecAttrSecret;
- }
-
- /** Accessor for one bit of the record's attributes. Is this record a
- * to-be-archived record? When a record is deleted, it may be marked
- * as "archive on PC" which means the PC should keep a copy. The
- * PC data correspondng to an archived-but-deleted record must not
- * be deleted.
- */
- inline bool isArchived() const
- {
- return fAttrib & dlpRecAttrArchived;
- }
-
- /** Accessor for one bit of the record's attributes. Is this record modified?
- * Modified records are those that have been modified since the last HotSync.
- */
- inline bool isModified() const
- {
- return fAttrib & dlpRecAttrDirty;
- }
-
-#define SETTER(a) {\
- if (d) { fAttrib |= a; } \
- else { fAttrib &= ~a; } }
-
- /** Mark a record as deleted (or not).*/
- inline void setDeleted(bool d=true) SETTER(dlpRecAttrDeleted)
-
- /** Mark a record as secret (or not). */
- inline void setSecret(bool d=true) SETTER(dlpRecAttrSecret)
-
- /** Mark a record as archived (or not). */
- inline void setArchived(bool d=true) SETTER(dlpRecAttrArchived)
-
- /** Mark a record as modified (or not). */
- inline void setModified(bool d=true) SETTER(dlpRecAttrDirty)
-
-#undef SETTER
-
- /** Returns a text representation of this record. */
- virtual TQString textRepresentation() const;
-
-private:
- int fAttrib, fCat;
- recordid_t fID;
-} ;
-
-/** An "uninterpreted" representation of the bits comprising a HH record.
-* This binary blob only exposes the data via the data() and size() functions,
-* and also exposes the common characteristics of all entries.
-*/
-class KDE_EXPORT PilotRecord : public PilotRecordBase
-{
-public:
- /** Constructor. Using the given @p data and @p length, create
- * a record. Give it the additional attributes and category numbers;
- * the UID is a HH unique ID for identifying records.
- *
- * This constructor makes a copy of the data buffer (and owns that buffer).
- */
- PilotRecord(void* data, int length, int attrib, int cat, recordid_t uid) KDE_DEPRECATED;
-
- /** Constructor. Using the given buffer @p buf (which carries its
- * own data and length), create a record. Otherwise much like the
- * above constructor @em except that this record assumes ownership
- * of the buffer, and doesn't make an additional copy
- * (In practice, this just saves copying around extra buffers).
- */
- PilotRecord(pi_buffer_t *buf, int attrib, int cat, recordid_t uid) :
- PilotRecordBase(attrib,cat,uid),
- fData((char *)buf->data),
- fLen(buf->used),
- fBuffer(buf)
- {
- fAllocated++;
- }
-
- /** Constructor. Like the above, only take the attributes, category
- * and id from the given @p entry.
- */
- PilotRecord( pi_buffer_t *buf, const PilotRecordBase *entry ) :
- PilotRecordBase( entry ),
- fData((char *)buf->data),
- fLen(buf->used),
- fBuffer(buf)
- {
- fAllocated++;
- }
-
- /** Destructor. Dispose of the buffers in the right form. */
- virtual ~PilotRecord()
- {
- if (fBuffer)
- {
- pi_buffer_free(fBuffer);
- }
- else
- {
- delete [] fData;
- }
- fDeleted++;
- }
-
- /** Constructor. Copies the data from the @p orig record. */
- PilotRecord(PilotRecord* orig);
-
- /** Retrieve the data buffer for this record. Note that trying
- * to change this data is fraught with peril -- especially trying
- * to lengthen it.
- *
- * @see setData
- */
- char *data() const
- {
- if (fBuffer)
- {
- return (char *)(fBuffer->data);
- }
- else
- {
- return fData;
- }
- }
-
- /** Returns the size of the data for this record. */
- int size() const
- {
- if (fBuffer) return fBuffer->used; else
- return fLen;
- }
-
- /** Returns the data buffer associated with this record. */
- const pi_buffer_t *buffer() const { return fBuffer; }
-
- /** Set the data for this record. Frees old data. Assumes
- * ownership of the passed in buffer @p b.
- */
- void setData(pi_buffer_t *b)
- {
- if (fBuffer) { pi_buffer_free(fBuffer); }
- else { delete[] fData; } ;
- fData = (char *)b->data;
- fLen = b->used;
- fBuffer = b;
- }
-
- /** Assignment operator. Makes a copy of the @p orig record. */
- PilotRecord& operator=(PilotRecord& orig);
-
- /** Sets the data for this record. Makes a copy of the data buffer. */
- void setData(const char* data, int len);
-
- /** Returns a text representation of this record. */
- virtual TQString textRepresentation() const;
-
-private:
- char* fData;
- int fLen;
- pi_buffer_t *fBuffer;
-
-public:
- /**
- * This is an interface for tracking down memory leaks
- * in the use of PilotRecords (for those without valgrind).
- * Count the number of allocations and deallocations.
- */
- static void allocationInfo();
-private:
- static int fAllocated,fDeleted;
-};
-
-#endif
diff --git a/kpilot/lib/pilotSerialDatabase.cc b/kpilot/lib/pilotSerialDatabase.cc
deleted file mode 100644
index f57cac934..000000000
--- a/kpilot/lib/pilotSerialDatabase.cc
+++ /dev/null
@@ -1,432 +0,0 @@
-/* KPilot
-**
-** Copyright (C) 1998-2001 by Dan Pilone
-** Copyright (C) 2003-2004 Reinhold Kainhofer <reinhold@kainhofer.com>
-**
-** Databases approached through DLP / Pilot-link look different,
-** so this file defines an API for them.
-*/
-
-/*
-** This program 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; either version 2.1 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 Lesser General Public License for more details.
-**
-** You should have received a copy of the GNU Lesser General Public License
-** along with this program in a file called COPYING; if not, write to
-** the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
-** MA 02110-1301, USA.
-*/
-
-/*
-** Bug reports and questions can be sent to kde-pim@kde.org
-*/
-#include "options.h"
-
-#include <time.h>
-#include <iostream>
-
-#include <pi-dlp.h>
-
-#include <tqfile.h>
-
-#include <klocale.h>
-#include <kdebug.h>
-#include <kglobal.h>
-
-#include "pilotRecord.h"
-#include "pilotSerialDatabase.h"
-#include "kpilotdevicelink.h"
-
-PilotSerialDatabase::PilotSerialDatabase(KPilotDeviceLink *l,
- const TQString &dbName) :
- PilotDatabase(dbName),
- fDBName( dbName ),
- fDBHandle(-1),
- fDBSocket(l->pilotSocket())
-{
- FUNCTIONSETUP;
- openDatabase();
-}
-
-PilotSerialDatabase::PilotSerialDatabase( KPilotDeviceLink *l, const DBInfo *info ) :
- PilotDatabase( info ? Pilot::fromPilot( info->name ) : TQString::null ),
- fDBName( TQString::null ),
- fDBHandle( -1 ),
- fDBSocket( l->pilotSocket() )
-{
- // Rather unclear why both the base class and this one have separate names.
- fDBName = name();
- setDBOpen(false);
- if (fDBName.isEmpty() || !info)
- {
- WARNINGKPILOT << "Bad database name requested." << endl;
- return;
- }
-
- int db;
- if (dlp_OpenDB(fDBSocket, 0, dlpOpenReadWrite, info->name, &db) < 0)
- {
- WARNINGKPILOT << "Cannot open database on handheld." << endl;
- return;
- }
- setDBHandle(db);
- setDBOpen(true);
-}
-
-PilotSerialDatabase::~PilotSerialDatabase()
-{
- FUNCTIONSETUP;
- closeDatabase();
-}
-
-TQString PilotSerialDatabase::dbPathName() const
-{
- TQString s = CSL1("Pilot:");
- s.append(fDBName);
- return s;
-}
-
-// Reads the application block info
-int PilotSerialDatabase::readAppBlock(unsigned char *buffer, int maxLen)
-{
- FUNCTIONSETUP;
- if (!isOpen())
- {
- WARNINGKPILOT << "DB not open" << endl;
- return -1;
- }
- pi_buffer_t *buf = pi_buffer_new(maxLen);
- int r = dlp_ReadAppBlock(fDBSocket, getDBHandle(), 0 /* offset */, maxLen, buf);
- if (r>=0)
- {
- memcpy(buffer, buf->data, KMAX(maxLen, r));
- }
- pi_buffer_free(buf);
- return r;
-}
-
-// Writes the application block info.
-int PilotSerialDatabase::writeAppBlock(unsigned char *buffer, int len)
-{
- FUNCTIONSETUP;
- if (!isOpen())
- {
- WARNINGKPILOT << "DB not open" << endl;
- return -1;
- }
- return dlp_WriteAppBlock(fDBSocket, getDBHandle(), buffer, len);
-}
-
- // returns the number of records in the database
-unsigned int PilotSerialDatabase::recordCount() const
-{
- int idlen;
- // dlp_ReadOpenDBInfo returns the number of bytes read and sets idlen to the # of recs
- if (isOpen() && dlp_ReadOpenDBInfo(fDBSocket, getDBHandle(), &idlen)>0)
- {
- return idlen;
- }
- else
- {
- return 0;
- }
-}
-
-
-// Returns a TQValueList of all record ids in the database.
-TQValueList<recordid_t> PilotSerialDatabase::idList()
-{
- TQValueList<recordid_t> idlist;
- int idlen=recordCount();
- if (idlen<=0) return idlist;
-
- recordid_t *idarr=new recordid_t[idlen];
- int idlenread;
- int r = dlp_ReadRecordIDList (fDBSocket, getDBHandle(), 0, 0, idlen, idarr, &idlenread);
-
- if ( (r<0) || (idlenread<1) )
- {
- WARNINGKPILOT << "Failed to read ID list from database." << endl;
- return idlist;
- }
-
- // now create the QValue list from the idarr:
- for (idlen=0; idlen<idlenread; idlen++)
- {
- idlist.append(idarr[idlen]);
- }
- delete[] idarr;
- return idlist;
-}
-
-
-// Reads a record from database by id, returns record length
-PilotRecord *PilotSerialDatabase::readRecordById(recordid_t id)
-{
- FUNCTIONSETUPL(3);
- int index, attr, category;
-
- if (!isOpen())
- {
- WARNINGKPILOT << "DB not open" << endl;
- return 0L;
- }
- if (id>0xFFFFFF)
- {
- WARNINGKPILOT << "Encountered an invalid record id "
- << id << endl;
- return 0L;
- }
- pi_buffer_t *b = pi_buffer_new(InitialBufferSize);
- if (dlp_ReadRecordById(fDBSocket,getDBHandle(),id,b,&index,&attr,&category) >= 0)
- {
- return new PilotRecord(b, attr, category, id);
- }
- return 0L;
-}
-
-// Reads a record from database, returns the record length
-PilotRecord *PilotSerialDatabase::readRecordByIndex(int index)
-{
- FUNCTIONSETUPL(3);
-
- if (!isOpen())
- {
- WARNINGKPILOT << "DB not open" << endl;
- return 0L;
- }
-
- int attr, category;
- recordid_t id;
- PilotRecord *rec = 0L;
-
- pi_buffer_t *b = pi_buffer_new(InitialBufferSize);
- if (dlp_ReadRecordByIndex(fDBSocket, getDBHandle(), index,
- b, &id, &attr, &category) >= 0)
- {
- rec = new PilotRecord(b, attr, category, id);
- }
-
-
- return rec;
-}
-
-// Reads the next record from database in category 'category'
-PilotRecord *PilotSerialDatabase::readNextRecInCategory(int category)
-{
- FUNCTIONSETUP;
- int index, attr;
- recordid_t id;
-
- if (!isOpen())
- {
- WARNINGKPILOT << "DB not open" << endl;
- return 0L;
- }
- pi_buffer_t *b = pi_buffer_new(InitialBufferSize);
- if (dlp_ReadNextRecInCategory(fDBSocket, getDBHandle(),
- category,b,&id,&index,&attr) >= 0)
- return new PilotRecord(b, attr, category, id);
- return 0L;
-}
-
-// Reads the next record from database that has the dirty flag set.
-PilotRecord *PilotSerialDatabase::readNextModifiedRec(int *ind)
-{
- FUNCTIONSETUP;
- int index, attr, category;
- recordid_t id;
-
- if (!isOpen())
- {
- WARNINGKPILOT << "DB not open" << endl;
- return 0L;
- }
- pi_buffer_t *b = pi_buffer_new(InitialBufferSize);
- if (dlp_ReadNextModifiedRec(fDBSocket, getDBHandle(), b, &id, &index, &attr, &category) >= 0)
- {
- if (ind) *ind=index;
- return new PilotRecord(b, attr, category, id);
- }
- return 0L;
-}
-
-// Writes a new record to database (if 'id' == 0 or id>0xFFFFFF, one will be assigned and returned in 'newid')
-recordid_t PilotSerialDatabase::writeRecord(PilotRecord * newRecord)
-{
- FUNCTIONSETUP;
- recordid_t newid;
- int success;
-
- if (!isOpen())
- {
- WARNINGKPILOT << "DB not open" << endl;
- return 0;
- }
- // Do some sanity checking to prevent invalid UniqueIDs from being written
- // to the handheld (RecordIDs are only 3 bytes!!!). Under normal conditions
- // this check should never yield true, so write out an error to indicate
- // someone messed up full time...
- if (newRecord->id()>0xFFFFFF)
- {
- WARNINGKPILOT << "Encountered an invalid record id "
- << newRecord->id() << ", resetting it to zero." << endl;
- newRecord->setID(0);
- }
- success =
- dlp_WriteRecord(fDBSocket, getDBHandle(),
- newRecord->attributes(), newRecord->id(),
- newRecord->category(), newRecord->data(),
- newRecord->size(), &newid);
- if ( (newRecord->id() != newid) && (newid!=0) )
- newRecord->setID(newid);
- return newid;
-}
-
-// Deletes a record with the given recordid_t from the database, or all records, if all is set to true. The recordid_t will be ignored in this case
-int PilotSerialDatabase::deleteRecord(recordid_t id, bool all)
-{
- FUNCTIONSETUP;
- if (!isOpen())
- {
- WARNINGKPILOT <<"DB not open"<<endl;
- return -1;
- }
- return dlp_DeleteRecord(fDBSocket, getDBHandle(), all?1:0, id);
-}
-
-
-// Resets all records in the database to not dirty.
-int PilotSerialDatabase::resetSyncFlags()
-{
- FUNCTIONSETUP;
- if (!isOpen())
- {
- WARNINGKPILOT << "DB not open" << endl;
- return -1;
- }
- return dlp_ResetSyncFlags(fDBSocket, getDBHandle());
-}
-
-// Resets next record index to beginning
-int PilotSerialDatabase::resetDBIndex()
-{
- FUNCTIONSETUP;
- if (!isOpen())
- {
- WARNINGKPILOT << "DB not open" << endl;
- return -1;
- }
- return dlp_ResetDBIndex(fDBSocket, getDBHandle());
-}
-
-// Purges all Archived/Deleted records from Palm Pilot database
-int PilotSerialDatabase::cleanup()
-{
- FUNCTIONSETUP;
- if (!isOpen())
- {
- WARNINGKPILOT << "DB not open" << endl;
- return -1;
- }
- return dlp_CleanUpDatabase(fDBSocket, getDBHandle());
-}
-
-void PilotSerialDatabase::openDatabase()
-{
- FUNCTIONSETUP;
- int db;
-
- setDBOpen(false);
-
- TQString s = getDBName();
- if (s.isEmpty())
- {
- WARNINGKPILOT << "Bad DB name, " << s << " string given." << endl;
- return;
- }
-
- TQCString encodedName = TQFile::encodeName(s);
- if (encodedName.isEmpty())
- {
- WARNINGKPILOT << "Bad DB name, "
- << (encodedName.isNull() ? "null" : "empty")
- << " string given."
- << endl;
- return;
- }
-
- char encodedNameBuffer[PATH_MAX];
- strlcpy(encodedNameBuffer,(const char *)encodedName,PATH_MAX);
-
- DEBUGKPILOT << fname << ": opening database: ["
- << encodedNameBuffer << "]" << endl;
-
- if (dlp_OpenDB(fDBSocket, 0, dlpOpenReadWrite,
- encodedNameBuffer, &db) < 0)
- {
- WARNINGKPILOT << "Cannot open database on handheld." << endl;
- return;
- }
- setDBHandle(db);
- setDBOpen(true);
-}
-
-bool PilotSerialDatabase::createDatabase(long creator, long type, int cardno, int flags, int version)
-{
- FUNCTIONSETUP;
- int db;
-
- // if the database is already open, we cannot create it again. How about completely resetting it? (i.e. deleting it and the createing it again)
- if (isOpen()) return true;
- // The latin1 seems ok, database names are latin1.
- int res=dlp_CreateDB(fDBSocket,
- creator, type, cardno, flags, version,
- Pilot::toPilot(getDBName()), &db);
- if (res<0) {
- WARNINGKPILOT << "Cannot create database " << getDBName() << " on the handheld" << endl;
- return false;
- }
- // TODO: Do I have to open it explicitly???
- setDBHandle(db);
- setDBOpen(true);
- return true;
-}
-
-void PilotSerialDatabase::closeDatabase()
-{
- FUNCTIONSETUP;
- if (!isOpen() )
- {
- return;
- }
-
- DEBUGKPILOT << fname << ": Closing DB handle #" << getDBHandle() << endl;
- dlp_CloseDB(fDBSocket, getDBHandle());
- DEBUGKPILOT << fname << ": after closing" << endl;
- setDBOpen(false);
-}
-
-int PilotSerialDatabase::deleteDatabase()
-{
- FUNCTIONSETUP;
-
- if (isOpen()) closeDatabase();
-
- return dlp_DeleteDB(fDBSocket, 0, Pilot::toPilot(fDBName));
-}
-
-
-
-/* virtual */ PilotDatabase::DBType PilotSerialDatabase::dbType() const
-{
- return eSerialDB;
-}
-
diff --git a/kpilot/lib/pilotSerialDatabase.h b/kpilot/lib/pilotSerialDatabase.h
deleted file mode 100644
index 1da2aaacb..000000000
--- a/kpilot/lib/pilotSerialDatabase.h
+++ /dev/null
@@ -1,144 +0,0 @@
-#ifndef _KPILOT_PILOTSERIALDATABASE_H
-#define _KPILOT_PILOTSERIALDATABASE_H
-/* KPilot
-**
-** Copyright (C) 1998-2001 by Dan Pilone
-** Copyright (C) 2003-2004 Reinhold Kainhofer <reinhold@kainhofer.com>
-** Copyright (C) 2006 Adriaan de Groot <groot@kde.org>
-**
-** See the .cc file for an explanation of what this file is for.
-*/
-
-/*
-** This program 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; either version 2.1 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 Lesser General Public License for more details.
-**
-** You should have received a copy of the GNU Lesser General Public License
-** along with this program in a file called COPYING; if not, write to
-** the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
-** MA 02110-1301, USA.
-*/
-
-/*
-** Bug reports and questions can be sent to kde-pim@kde.org
-*/
-
-
-#include "pilotDatabase.h"
-#include "pilotRecord.h"
-
-/** @file
-* Database class for a database on the pilot connected
-* via the serial port (ie: hot-sync cradle)
-*/
-
-class KPilotDeviceLink;
-
-/**
-* PilotSerialDatabase represents databases stored on the handheld
-* and accessed through the SLP / DLP protocol.
-*/
-class KDE_EXPORT PilotSerialDatabase : public PilotDatabase
-{
-friend class KPilotDeviceLink;
-protected:
- PilotSerialDatabase( KPilotDeviceLink *l, const TQString &dbName );
- PilotSerialDatabase( KPilotDeviceLink *l, const DBInfo *info );
-
-public:
- virtual ~PilotSerialDatabase();
-
- /** Reads the application block info, returns size */
- virtual int readAppBlock(unsigned char* buffer, int maxLen);
- /** Writes the application block info. */
- virtual int writeAppBlock(unsigned char* buffer, int len);
- /** returns the number of records in the database, 0 if not open */
- virtual unsigned int recordCount() const;
- /** Returns a TQValueList of all record ids in the database. */
- virtual TQValueList<recordid_t> idList();
- /** Reads a record from database by id, returns record length */
- virtual PilotRecord* readRecordById(recordid_t id);
- /** Reads a record from database, returns the record length */
- virtual PilotRecord* readRecordByIndex(int index);
- /** Reads the next record from database in category 'category' */
- virtual PilotRecord* readNextRecInCategory(int category);
- /**
- * Reads the next record from database that has the dirty flag set.
- * ind (if a valid pointer is given) will receive the index of the
- * returned record.
- */
- virtual PilotRecord* readNextModifiedRec(int *ind=NULL);
-
- /**
- * Writes a new record to database (if 'id' == 0, one will be
- * assigned to newRecord)
- */
- virtual recordid_t writeRecord(PilotRecord* newRecordb);
-
- /**
- * Deletes a record with the given recordid_t from the database,
- * or all records, if all is set to true. The recordid_t will be
- * ignored in this case. Return value is negative on error, 0 otherwise.
- */
- virtual int deleteRecord(recordid_t id, bool all=false);
- /** Resets all records in the database to not dirty. */
- virtual int resetSyncFlags();
- /** Resets next record index to beginning */
- virtual int resetDBIndex();
- /** Purges all Archived/Deleted records from Palm Pilot database */
- virtual int cleanup();
-
- virtual TQString dbPathName() const;
-
- /**
- * Deletes the database (by name, as given in the constructor and
- * stored in the fDBName field).
- */
- virtual int deleteDatabase();
-
- /**
- * Creates the database with the given creator, type and flags on
- * the given card (default is RAM). If the database already exists,
- * this function does nothing.
- */
- virtual bool createDatabase(long creator=0,
- long type=0, int cardno=0, int flags=0, int version=0);
- TQString getDBName() { return fDBName; }
-
-
- virtual DBType dbType() const;
-
-protected:
- virtual void openDatabase();
- virtual void closeDatabase();
- /** Returns the file handle used to communicate with the handheld.
- * This is an internal value to be passed to DLP functions.
- */
- int getDBHandle() const
- {
- return fDBHandle;
- }
-
-
-private:
- void setDBHandle(int handle) { fDBHandle = handle; }
-
- TQString fDBName;
- int fDBHandle;
- int fDBSocket;
- // Pilot-link 0.12 allocates buffers as needed and resizes them.
- // Start with a buffer that is _probably_ big enough for most
- // PIM records, but much smaller than the 64k that we use otherwise.
- // Might want to add algorithm for trying to optimize the initial
- // allocation for a given database.
- static const int InitialBufferSize = 2048;
-};
-
-#endif
diff --git a/kpilot/lib/pilotSysInfo.h b/kpilot/lib/pilotSysInfo.h
deleted file mode 100644
index 4deb4f1b4..000000000
--- a/kpilot/lib/pilotSysInfo.h
+++ /dev/null
@@ -1,144 +0,0 @@
-#ifndef _KPILOT_SYSINFO_H
-#define _KPILOT_SYSINFO_H
-/* sysInfo.h KPilot
-**
-** Copyright (C) 2003 by Reinhold Kainhofer
-**
-** Wrapper for pilot-link's SysInfo Structure
-*/
-
-/*
-** This program 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; either version 2.1 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 Lesser General Public License for more details.
-**
-** You should have received a copy of the GNU Lesser General Public License
-** along with this program in a file called COPYING; if not, write to
-** the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
-** MA 02110-1301, USA.
-*/
-
-/*
-** Bug reports and questions can be sent to kde-pim@kde.org
-*/
-
-#include <stdlib.h>
-#include <string.h>
-#include <time.h>
-
-#include <pi-version.h>
-#include <pi-dlp.h>
-
-
-
-class KPilotSysInfo
-{
-public:
- /** Constructor. Create an empty SysInfo structure. */
- KPilotSysInfo()
- {
- ::memset(&fSysInfo,0,sizeof(struct SysInfo));
- }
-
- /** Constructor. Copy an existing pilot-link SysInfo structure.
- * Ownership is not changed. @p sys_info may be NULL.
- */
- KPilotSysInfo(const SysInfo *sys_info)
- {
- ::memset(&fSysInfo,0,sizeof(struct SysInfo));
- if (sys_info)
- {
- fSysInfo = *sys_info;
- }
- }
-
- /** Access to the raw SysInfo structure. */
- SysInfo *sysInfo()
- {
- return &fSysInfo;
- }
-
- /** Get the ROM version of the handheld. This is a pilot-link
- * long value (4 bytes) with major, minor, bugfix version
- * numbers encoded in the value.
- */
- const unsigned long getRomVersion() const
- {
- return fSysInfo.romVersion;
- }
-
- /** Get the locale number of the handheld.
- * @note I do not know what this means.
- */
- const unsigned long getLocale() const
- {
- return fSysInfo.locale;
- }
- /** Set the locale number of the handheld.
- * @note I do not know what this means.
- */
- void setLocale(unsigned long newval)
- {
- fSysInfo.locale=newval;
- }
-
- /** Get the length (in bytes) of the ProductID string. */
- const int getProductIDLength() const
- {
- return fSysInfo.prodIDLength;
- }
- /** Get the ProductID string from the handheld. This is
- * guaranteed to be NUL terminated.
- */
- const char* getProductID() const
- {
- return fSysInfo.prodID;
- }
-
- /** Accessor for the major version of the DLP protocol in use. */
- const unsigned short getMajorVersion() const
- {
- return fSysInfo.dlpMajorVersion;
- }
- /** Accessor for the minor version of the DLP protocol in use. */
- const unsigned short getMinorVersion() const
- {
- return fSysInfo.dlpMinorVersion;
- }
-
- /** Accessor for the major compatibility version of the handheld.
- * @note I do not know what this means.
- */
- const unsigned short getCompatMajorVersion() const
- {
- return fSysInfo.compatMajorVersion;
- }
- /** Accessor for the minor compatibility version of the handheld.
- * @note I do not know what this means.
- */
- const unsigned short getCompatMinorVersion() const
- {
- return fSysInfo.compatMinorVersion;
- }
-
-
- /** Returns the maximum record size that the handheld supports.
- * Normally this is 65524 or so (which means that larger values
- * don't necessarily @em fit in a short).
- */
- const unsigned short getMaxRecSize() const
- {
- return fSysInfo.maxRecSize;
- }
-
-private:
- struct SysInfo fSysInfo;
-};
-
-#endif
diff --git a/kpilot/lib/pilotTodoEntry.cc b/kpilot/lib/pilotTodoEntry.cc
deleted file mode 100644
index 1ed9dfa76..000000000
--- a/kpilot/lib/pilotTodoEntry.cc
+++ /dev/null
@@ -1,270 +0,0 @@
-/* KPilot
-**
-** Copyright (C) 1998-2001 by Dan Pilone
-** Copyright (C) 2003-2004 Reinhold Kainhofer <reinhold@kainhofer.com>
-**
-** This is a C++ wrapper for the todo-list entry structures.
-*/
-
-/*
-** This program 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; either version 2.1 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 Lesser General Public License for more details.
-**
-** You should have received a copy of the GNU Lesser General Public License
-** along with this program in a file called COPYING; if not, write to
-** the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
-** MA 02110-1301, USA.
-*/
-
-/*
-** Bug reports and questions can be sent to kde-pim@kde.org
-*/
-#include "options.h"
-
-
-#include <stdlib.h>
-
-#include <tqdatetime.h>
-#include <tqnamespace.h>
-
-#include <kglobal.h>
-#include <kdebug.h>
-
-
-#include "pilotTodoEntry.h"
-
-
-PilotTodoEntry::PilotTodoEntry() :
- fDescriptionSize(0),
- fNoteSize(0)
-{
- FUNCTIONSETUP;
- ::memset(&fTodoInfo, 0, sizeof(struct ToDo));
-}
-
-PilotTodoEntry::PilotTodoEntry(PilotRecord * rec) :
- PilotRecordBase(rec),
- fDescriptionSize(0),
- fNoteSize(0)
-{
- ::memset(&fTodoInfo, 0, sizeof(struct ToDo));
- if (rec)
- {
- pi_buffer_t b;
- b.data = (unsigned char *) rec->data();
- b.allocated = b.used = rec->size();
- unpack_ToDo(&fTodoInfo, &b, todo_v1);
- if (fTodoInfo.description)
- {
- // Assume size of buffer allocated is just large enough;
- // count trailing NUL as well.
- fDescriptionSize = strlen(fTodoInfo.description)+1;
- }
- if (fTodoInfo.note)
- {
- // Same
- fNoteSize = strlen(fTodoInfo.note)+1;
- }
- }
-
-}
-
-
-PilotTodoEntry::PilotTodoEntry(const PilotTodoEntry & e) :
- PilotRecordBase( &e ),
- fDescriptionSize(0),
- fNoteSize(0)
-{
- FUNCTIONSETUP;
- ::memcpy(&fTodoInfo, &e.fTodoInfo, sizeof(fTodoInfo));
- // See PilotDateEntry::operator = for details
- fTodoInfo.description = 0L;
- fTodoInfo.note = 0L;
-
- setDescriptionP(e.getDescriptionP());
- setNoteP(e.getNoteP());
-}
-
-
-PilotTodoEntry & PilotTodoEntry::operator = (const PilotTodoEntry & e)
-{
- if (this != &e)
- {
- KPILOT_FREE(fTodoInfo.description);
- KPILOT_FREE(fTodoInfo.note);
-
- ::memcpy(&fTodoInfo, &e.fTodoInfo, sizeof(fTodoInfo));
- // See PilotDateEntry::operator = for details
- fTodoInfo.description = 0L;
- fTodoInfo.note = 0L;
- fDescriptionSize = 0;
- fNoteSize = 0;
-
- setDescriptionP(e.getDescriptionP());
- setNoteP(e.getNoteP());
-
- }
-
- return *this;
-}
-
-TQString PilotTodoEntry::getTextRepresentation(Qt::TextFormat richText)
-{
- TQString text, tmp;
- TQString par = (richText==Qt::RichText) ?CSL1("<p>"): TQString();
- TQString ps = (richText==Qt::RichText) ?CSL1("</p>"):CSL1("\n");
- TQString br = (richText==Qt::RichText) ?CSL1("<br/>"):CSL1("\n");
-
- // title + name
- text += par;
- tmp= (richText==Qt::RichText) ?CSL1("<b><big>%1</big></b>"):CSL1("%1");
- text += tmp.arg(rtExpand(getDescription(), richText));
- text += ps;
-
- text += par;
- if (getComplete())
- text += i18n("Completed");
- else
- text += i18n("Not completed");
- text += ps;
-
- if (!getIndefinite())
- {
- TQDate dt(readTm(getDueDate()).date());
- TQString dueDate(dt.toString(Qt::LocalDate));
- text+=par;
- text+=i18n("Due date: %1").arg(dueDate);
- text+=ps;
- }
-
- text+=par;
- text+=ps;
-
- text+=par;
- text+=i18n("Priority: %1").arg(getPriority());
- text+=ps;
-
- if (!getNote().isEmpty())
- {
- text += (richText==Qt::RichText) ?CSL1("<hr/>"):CSL1("-------------------------\n");
- text+=par;
- text+= (richText==Qt::RichText) ?i18n("<b><em>Note:</em></b><br>"):i18n("Note:\n");
- text+=rtExpand(getNote(), richText);
- text+=ps;
- }
-
- return text;
-}
-
-PilotRecord *PilotTodoEntry::pack() const
-{
- int i;
-
- pi_buffer_t *b = pi_buffer_new( sizeof(fTodoInfo) );
- i = pack_ToDo(const_cast<ToDo_t *>(&fTodoInfo), b, todo_v1);
- if (i<0)
- {
- return 0;
- }
- // pack_ToDo sets b->used
- return new PilotRecord( b, this );
-}
-
-void PilotTodoEntry::setDescription(const TQString &desc)
-{
- if (desc.length() < fDescriptionSize)
- {
- Pilot::toPilot(desc, fTodoInfo.description, fDescriptionSize);
- }
- else
- {
- setDescriptionP(Pilot::toPilot(desc),desc.length());
- }
-}
-
-void PilotTodoEntry::setDescriptionP(const char *desc, int len)
-{
- KPILOT_FREE(fTodoInfo.description);
- if (desc && *desc)
- {
- if (-1 == len)
- {
- len=::strlen(desc);
- }
-
- fDescriptionSize = len+1;
- fTodoInfo.description = (char *)::malloc(len + 1);
- if (fTodoInfo.description)
- {
- strncpy(fTodoInfo.description, desc, len);
- fTodoInfo.description[len] = 0;
- }
- else
- {
- WARNINGKPILOT << "malloc() failed, description not set"
- << endl;
- }
- }
- else
- {
- fTodoInfo.description = 0L;
- }
-}
-
-TQString PilotTodoEntry::getDescription() const
-{
- return Pilot::fromPilot(getDescriptionP());
-}
-
-void PilotTodoEntry::setNote(const TQString &note)
-{
- if (note.length() < fNoteSize)
- {
- Pilot::toPilot(note, fTodoInfo.note, fNoteSize);
- }
- else
- {
- setNoteP(Pilot::toPilot(note),note.length());
- }
-}
-
-void PilotTodoEntry::setNoteP(const char *note, int len)
-{
- KPILOT_FREE(fTodoInfo.note);
- if (note && *note)
- {
- if (-1 == len)
- {
- len=::strlen(note);
- }
-
- fNoteSize = len+1;
- fTodoInfo.note = (char *)::malloc(len + 1);
- if (fTodoInfo.note)
- {
- strncpy(fTodoInfo.note, note, len);
- fTodoInfo.note[len] = 0;
- }
- else
- {
- WARNINGKPILOT << "malloc() failed, note not set" << endl;
- }
- }
- else
- {
- fTodoInfo.note = 0L;
- }
-}
-
-TQString PilotTodoEntry::getNote() const
-{
- return Pilot::fromPilot(getNoteP());
-}
-
diff --git a/kpilot/lib/pilotTodoEntry.h b/kpilot/lib/pilotTodoEntry.h
deleted file mode 100644
index 020912f9c..000000000
--- a/kpilot/lib/pilotTodoEntry.h
+++ /dev/null
@@ -1,166 +0,0 @@
-#ifndef _KPILOT_PILOTTODOENTRY_H
-#define _KPILOT_PILOTTODOENTRY_H
-/* pilotTodoEntry.h -*- C++ -*- KPilot
-**
-** Copyright (C) 1998-2001 by Dan Pilone
-** Copyright (C) 2003-2004 Reinhold Kainhofer <reinhold@kainhofer.com>
-**
-** This is a wrapper around the pilot-link Memo structure. It is
-** the interpreted form of a Pilot database record.
-*/
-
-/*
-** This program 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; either version 2.1 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 Lesser General Public License for more details.
-**
-** You should have received a copy of the GNU Lesser General Public License
-** along with this program in a file called COPYING; if not, write to
-** the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
-** MA 02110-1301, USA.
-*/
-
-/*
-** Bug reports and questions can be sent to kde-pim@kde.org
-*/
-
-#include <time.h>
-
-#include <pi-macros.h>
-#include <pi-todo.h>
-
-#include <tqnamespace.h>
-#include <tqstring.h>
-
-#include "pilotRecord.h"
-#include "pilotAppInfo.h"
-
-/** @file This file defines structures wrapped around the ToDo database
-* on the Pilot, based on pilot-link's ToDo stuff.
-*/
-
-/** A decoded ToDo item. */
-class KDE_EXPORT PilotTodoEntry : public PilotRecordBase
-{
-public:
- /** Create an empty ToDo item. All attributes are 0. */
- PilotTodoEntry();
-
- /**
- * Constructor. Create a ToDo item and fill it with data from the
- * uninterpreted record @p rec. The record may be NULL, in which
- * case the todo is empty and its category and ID are zero, as in
- * the constructor above.
- */
- PilotTodoEntry(PilotRecord * rec);
-
- /** Copy an existing ToDo item. */
- PilotTodoEntry(const PilotTodoEntry &e);
-
- /** Delete a ToDo item. */
- ~PilotTodoEntry()
- {
- free_ToDo(&fTodoInfo);
- }
-
- /** Return a string for the ToDo item. If @param richText is true, then
- * use qt style markup to make the string clearer when displayed.
- */
- TQString getTextRepresentation(Qt::TextFormat richText);
-
- /** Assign an existing ToDo item to this one. */
- PilotTodoEntry& operator=(const PilotTodoEntry &e);
-
- /** Accessor for the Due Date of the ToDo item. */
- struct tm getDueDate() const { return fTodoInfo.due; }
-
- /** Set the Due Date for the ToDo item. */
- void setDueDate(struct tm& d)
- {
- fTodoInfo.due = d;
- }
-
- /** Return the indefinite status of the ToDo (? that is, whether it
- * had a Due Date that is relevant or not). Return values are 0
- * (not indefinite) or non-0.
- */
- int getIndefinite() const
- {
- return fTodoInfo.indefinite;
- }
-
- /** Set whether the ToDo is indefinite or not. */
- void setIndefinite(int i)
- {
- fTodoInfo.indefinite = i;
- }
-
- /** Return the priority of the ToDo item. The priority ranges
- * from 1-5 on the handheld, so this needs to be mapped (perhaps)
- * onto KOrganizer's priority levels.
- */
- int getPriority() const
- {
- return fTodoInfo.priority;
- }
-
- /** Set the priority of the ToDo. */
- void setPriority(int p)
- {
- fTodoInfo.priority = p;
- }
-
- /** Return whether the ToDo is complete (done, finished) or not. */
- int getComplete() const
- {
- return fTodoInfo.complete;
- }
-
- /** Set whether the ToDo is done. */
- void setComplete(int c)
- {
- fTodoInfo.complete = c;
- }
-
- /** Get the ToDo item's description (which is the title shown on
- * the handheld, and the item's Title in KDE). This uses the default codec.
- */
- TQString getDescription() const;
- /** Set the ToDo item's description. */
- void setDescription(const TQString &);
-
- /** Get the ToDo item's note (the longer text, not immediately accessible
- * on the handheld). This uses the default codec.
- */
- TQString getNote() const;
-
- /** Set the ToDo item's note. */
- void setNote(const TQString &note);
-
- /** Returns the label for the category this ToDo item is in. */
- TQString getCategoryLabel() const;
-
- PilotRecord *pack() const;
-
-protected:
- const char *getDescriptionP() const { return fTodoInfo.description; } ;
- void setDescriptionP(const char *, int len=-1) ;
- const char *getNoteP() const { return fTodoInfo.note; } ;
- void setNoteP(const char *, int len=-1) ;
-
-private:
- struct ToDo fTodoInfo;
- unsigned int fDescriptionSize, fNoteSize;
-};
-
-typedef PilotAppInfo<ToDoAppInfo,unpack_ToDoAppInfo, pack_ToDoAppInfo> PilotToDoInfo;
-
-
-#endif
-
diff --git a/kpilot/lib/pilotUser.h b/kpilot/lib/pilotUser.h
deleted file mode 100644
index f7e17489a..000000000
--- a/kpilot/lib/pilotUser.h
+++ /dev/null
@@ -1,128 +0,0 @@
-#ifndef _KPILOT_PILOTUSER_H
-#define _KPILOT_PILOTUSER_H
-/* pilotUser.h KPilot
-**
-** Copyright (C) 1998-2001 by Dan Pilone
-**
-** Wrapper for the PilotUser struct from pilot-link, which describes
-** the user-data set in the Pilot.
-*/
-
-/*
-** This program 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; either version 2.1 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 Lesser General Public License for more details.
-**
-** You should have received a copy of the GNU Lesser General Public License
-** along with this program in a file called COPYING; if not, write to
-** the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
-** MA 02110-1301, USA.
-*/
-
-/*
-** Bug reports and questions can be sent to kde-pim@kde.org
-*/
-
-#include <stdlib.h>
-#include <string.h>
-#include <time.h>
-
-#include <pi-dlp.h>
-
-#include "pilot.h"
-
-class KPilotUser
-{
-public:
- /** Constructor. Create an empty PilotUser structure. */
- KPilotUser()
- {
- ::memset(&fUser,0,sizeof(struct PilotUser));
- }
- /** Constructor. Use the given PilotUser structure.
- * This creates a copy; no ownership is transferred.
- */
- KPilotUser(const PilotUser *user)
- {
- fUser = *user;
- }
-
- /** Accessor for the whole PilotUser structure. */
- PilotUser *data()
- {
- return &fUser;
- }
-
- /** @return The username set on the handheld. */
- TQString name() const
- {
- return Pilot::fromPilot( fUser.username );
- }
- /** Set the user name to the given @p name , truncated
- * if necessary to the size of the field on the handheld.
- */
- void setName( const TQString &name )
- {
- Pilot::toPilot( name, fUser.username, sizeof(fUser.username) );
- }
-
- /** @return The length of the password on the handheld,
- * in bytes.
- */
- const int passwordLength() const
- {
- return fUser.passwordLength;
- }
-
- /** @return the ID (4 bytes) of the last PC to sync this handheld.
- * This is intended to help identify when the use has
- * changed PCs and needs a new full sync.
- */
- unsigned long getLastSyncPC() const
- {
- return fUser.lastSyncPC;
- }
- /** Set the ID of the PC syncing the handheld to @p pc . This
- * should be unique in some way (perhaps IP addresses can be
- * used this way, or hostnames).
- */
- void setLastSyncPC(unsigned long pc)
- {
- fUser.lastSyncPC = pc;
- }
-
- /** @return the timestamp that the handheld was last synced
- * successfully.
- */
- time_t getLastSuccessfulSyncDate()
- {
- return fUser.successfulSyncDate;
- }
- /** Set the timestamp for a successful sync. */
- void setLastSuccessfulSyncDate(time_t when)
- {
- fUser.successfulSyncDate = when;
- }
-
- /** @return the timestamp of the last sync attempt. */
- time_t getLastSyncDate()
- {
- return fUser.lastSyncDate;
- }
- /** Set the timestamp of the sync attempt. */
- void setLastSyncDate(time_t when)
- {
- fUser.lastSyncDate = when;
- }
-
-private:
- struct PilotUser fUser;
-};
-
-#endif
diff --git a/kpilot/lib/plugin.cc b/kpilot/lib/plugin.cc
deleted file mode 100644
index 128c8ba99..000000000
--- a/kpilot/lib/plugin.cc
+++ /dev/null
@@ -1,760 +0,0 @@
-/* KPilot
-**
-** Copyright (C) 2001 by Dan Pilone
-** Copyright (C) 2003-2004 Reinhold Kainhofer <reinhold@kainhofer.com>
-**
-** This file defines the base class of all KPilot conduit plugins configuration
-** dialogs. This is necessary so that we have a fixed API to talk to from
-** inside KPilot.
-**
-** The factories used by KPilot plugins are also documented here.
-*/
-
-/*
-** This program 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; either version 2.1 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 Lesser General Public License for more details.
-**
-** You should have received a copy of the GNU Lesser General Public License
-** along with this program in a file called COPYING; if not, write to
-** the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
-** MA 02110-1301, USA.
-*/
-
-/*
-** Bug reports and questions can be sent to kde-pim@kde.org
-*/
-
-#include "options.h"
-
-#include <stdlib.h>
-
-#include <tqdir.h>
-#include <tqfileinfo.h>
-#include <tqhbox.h>
-#include <tqlabel.h>
-#include <tqlayout.h>
-#include <tqpushbutton.h>
-#include <tqregexp.h>
-#include <tqstringlist.h>
-#include <tqtabwidget.h>
-#include <tqtextview.h>
-#include <tqtimer.h>
-
-#include <dcopclient.h>
-#include <kaboutapplication.h>
-#include <kactivelabel.h>
-#include <kapplication.h>
-#include <kglobal.h>
-#include <kiconloader.h>
-#include <kinstance.h>
-#include <klibloader.h>
-#include <kmessagebox.h>
-#include <kservice.h>
-#include <kservicetype.h>
-#include <kstandarddirs.h>
-
-#include "pilotSerialDatabase.h"
-#include "pilotLocalDatabase.h"
-
-#include "plugin.moc"
-
-ConduitConfigBase::ConduitConfigBase(TQWidget *parent,
- const char *name) :
- TQObject(parent,name),
- fModified(false),
- fWidget(0L),
- fConduitName(i18n("Unnamed"))
-{
- FUNCTIONSETUP;
-}
-
-ConduitConfigBase::~ConduitConfigBase()
-{
- FUNCTIONSETUP;
-}
-
-/* slot */ void ConduitConfigBase::modified()
-{
- fModified=true;
- emit changed(true);
-}
-
-/* virtual */ TQString ConduitConfigBase::maybeSaveText() const
-{
- FUNCTIONSETUP;
-
- return i18n("<qt>The <i>%1</i> conduit's settings have been changed. Do you "
- "want to save the changes before continuing?</qt>").arg(this->conduitName());
-}
-
-/* virtual */ bool ConduitConfigBase::maybeSave()
-{
- FUNCTIONSETUP;
-
- if (!isModified()) return true;
-
- int r = KMessageBox::questionYesNoCancel(fWidget,
- maybeSaveText(),
- i18n("%1 Conduit").arg(this->conduitName()), KStdGuiItem::save(), KStdGuiItem::discard());
- if (r == KMessageBox::Cancel) return false;
- if (r == KMessageBox::Yes) commit();
- return true;
-}
-
-TQWidget *ConduitConfigBase::aboutPage(TQWidget *parent, KAboutData *ad)
-{
- FUNCTIONSETUP;
-
- TQWidget *w = new TQWidget(parent, "aboutpage");
-
- TQString s;
- TQLabel *text;
- KIconLoader *l = KGlobal::iconLoader();
- const KAboutData *p = ad ? ad : KGlobal::instance()->aboutData();
-
- TQGridLayout *grid = new TQGridLayout(w, 5, 4, SPACING);
-
- grid->addColSpacing(0, SPACING);
- grid->addColSpacing(4, SPACING);
-
-
- TQPixmap applicationIcon =
- l->loadIcon(TQString::fromLatin1(p->appName()),
- KIcon::Desktop,
- 64, KIcon::DefaultState, 0L,
- true);
-
- if (applicationIcon.isNull())
- {
- applicationIcon = l->loadIcon(TQString::fromLatin1("kpilot"),
- KIcon::Desktop);
- }
-
- text = new TQLabel(w);
- // Experiment with a long non-<qt> string. Use that to find
- // sensible widths for the columns.
- //
- text->setText(i18n("Send questions and comments to kdepim-users@kde.org"));
- text->adjustSize();
-
- int linewidth = text->size().width();
- int lineheight = text->size().height();
-
- // Use the label to display the applciation icon
- text->setText(TQString::null);
- text->setPixmap(applicationIcon);
- text->adjustSize();
- grid->addWidget(text, 0, 1);
-
-
- KActiveLabel *linktext = new KActiveLabel(w);
- grid->addRowSpacing(1,kMax(100,6*lineheight));
- grid->addRowSpacing(2,kMax(100,6*lineheight));
- grid->addColSpacing(2,SPACING+linewidth/2);
- grid->addColSpacing(3,SPACING+linewidth/2);
- grid->setRowStretch(1,50);
- grid->setRowStretch(2,50);
- grid->setColStretch(2,50);
- grid->setColStretch(3,50);
- linktext->setMinimumSize(linewidth,kMax(260,60+12*lineheight));
- linktext->setFixedHeight(kMax(260,60+12*lineheight));
- linktext->setVScrollBarMode(TQScrollView::Auto/*AlwaysOn*/);
- text = new TQLabel(w);
- grid->addMultiCellWidget(text,0,0,2,3);
- grid->addMultiCellWidget(linktext,1,2,1,3);
-
- // Now set the program and copyright information.
- s = CSL1("<qt><h3>");
- s += p->programName();
- s += ' ';
- s += p->version();
- s += CSL1("</h3>");
- s += p->copyrightStatement() + CSL1("<br></qt>");
- text->setText(s);
-
- linktext->append(p->shortDescription() + CSL1("<br>"));
-
- if (!p->homepage().isEmpty())
- {
- s = TQString::null;
- s += CSL1("<a href=\"%1\">").arg(p->homepage());
- s += p->homepage();
- s += CSL1("</a><br>");
- linktext->append(s);
- }
-
- s = TQString::null;
- s += i18n("Send questions and comments to <a href=\"mailto:%1\">%2</a>.")
- .arg( CSL1("kdepim-users@kde.org") )
- .arg( CSL1("kdepim-users@kde.org") );
- s += ' ';
- s += i18n("Send bug reports to <a href=\"mailto:%1\">%2</a>.")
- .arg(p->bugAddress())
- .arg(p->bugAddress());
- s += ' ';
- s += i18n("For trademark information, see the "
- "<a href=\"help:/kpilot/trademarks.html\">KPilot User's Guide</a>.");
- s += CSL1("<br>");
- linktext->append(s);
- linktext->append(TQString::null);
-
-
-
- TQValueList<KAboutPerson> pl = p->authors();
- TQValueList<KAboutPerson>::ConstIterator i;
-
- s = i18n("<b>Authors:</b> ");
-
- TQString comma = CSL1(", ");
-
- unsigned int count=1;
- for (i=pl.begin(); i!=pl.end(); ++i)
- {
- s.append(CSL1("%1 (<i>%2</i>)%3")
- .arg((*i).name())
- .arg((*i).task())
- .arg(count<pl.count() ? comma : TQString::null)
- );
- count++;
- }
- linktext->append(s);
-
- s = TQString::null;
- pl = p->credits();
- if (pl.count()>0)
- {
- count=1;
- s.append(i18n("<b>Credits:</b> "));
- for (i=pl.begin(); i!=pl.end(); ++i)
- {
- s.append(CSL1("%1 (<i>%2</i>)%3")
- .arg((*i).name())
- .arg((*i).task())
- .arg(count<pl.count() ? comma : TQString::null)
- );
- count++;
- }
- }
- linktext->append(s);
- linktext->ensureVisible(0,0);
-
- w->adjustSize();
-
- return w;
-}
-
-/* static */ void ConduitConfigBase::addAboutPage(TQTabWidget *tw,
- KAboutData *ad)
-{
- FUNCTIONSETUP;
-
- Q_ASSERT(tw);
-
- TQWidget *w = aboutPage(tw,ad);
- TQSize sz = w->size();
-
- if (sz.width() < tw->size().width())
- {
- sz.setWidth(tw->size().width());
- }
- if (sz.height() < tw->size().height())
- {
- sz.setHeight(tw->size().height());
- }
-
- tw->resize(sz);
- tw->addTab(w, i18n("About"));
- tw->adjustSize();
-}
-
-
-
-ConduitAction::ConduitAction(KPilotLink *p,
- const char *name,
- const TQStringList &args) :
- SyncAction(p,name),
- fDatabase(0L),
- fLocalDatabase(0L),
- fCtrHH(0L),
- fCtrPC(0L),
- fSyncDirection(args),
- fConflictResolution(SyncAction::eAskUser),
- fFirstSync(false)
-{
- FUNCTIONSETUP;
-
- TQString cResolution(args.grep(TQRegExp(CSL1("--conflictResolution \\d*"))).first());
- if (cResolution.isEmpty())
- {
- fConflictResolution=(SyncAction::ConflictResolution)
- cResolution.replace(TQRegExp(CSL1("--conflictResolution (\\d*)")), CSL1("\\1")).toInt();
- }
-
- for (TQStringList::ConstIterator it = args.begin();
- it != args.end();
- ++it)
- {
- DEBUGKPILOT << fname << ": " << *it << endl;
- }
-
- DEBUGKPILOT << fname << ": Direction=" << fSyncDirection.name() << endl;
- fCtrHH = new CUDCounter(i18n("Handheld"));
- fCtrPC = new CUDCounter(i18n("PC"));
-}
-
-/* virtual */ ConduitAction::~ConduitAction()
-{
- FUNCTIONSETUP;
-
- KPILOT_DELETE(fDatabase);
- KPILOT_DELETE(fLocalDatabase);
-
- KPILOT_DELETE(fCtrHH);
- KPILOT_DELETE(fCtrPC);
-}
-
-bool ConduitAction::openDatabases(const TQString &name, bool *retrieved)
-{
- FUNCTIONSETUP;
-
- DEBUGKPILOT << fname
- << ": Trying to open database "
- << name << endl;
- DEBUGKPILOT << fname
- << ": Mode="
- << (syncMode().isTest() ? "test " : "")
- << (syncMode().isLocal() ? "local " : "")
- << endl ;
-
- KPILOT_DELETE(fLocalDatabase);
-
- TQString localPathName = PilotLocalDatabase::getDBPath() + name;
-
- // we always want to use the conduits/ directory for our local
- // databases. this keeps our backups and data that our conduits use
- // for record keeping separate
- localPathName.replace(CSL1("DBBackup/"), CSL1("conduits/"));
-
- DEBUGKPILOT << fname << ": localPathName: [" << localPathName
- << "]" << endl;
-
- PilotLocalDatabase *localDB = new PilotLocalDatabase( localPathName );
-
- if (!localDB)
- {
- WARNINGKPILOT << "Could not initialize object for local copy of database \""
- << name
- << "\"" << endl;
- if (retrieved) *retrieved = false;
- return false;
- }
-
- // if there is no backup db yet, fetch it from the palm, open it and set the full sync flag.
- if (!localDB->isOpen() )
- {
- TQString dbpath(localDB->dbPathName());
- KPILOT_DELETE(localDB);
- DEBUGKPILOT << fname
- << ": Backup database " << dbpath
- << " not found." << endl;
- struct DBInfo dbinfo;
-
-// TODO Extend findDatabase() with extra overload?
- if (deviceLink()->findDatabase(Pilot::toPilot( name ), &dbinfo)<0 )
- {
- WARNINGKPILOT << "Could not get DBInfo for " << name << endl;
- if (retrieved) *retrieved = false;
- return false;
- }
-
- DEBUGKPILOT << fname
- << ": Found Palm database: " << dbinfo.name <<endl
- << fname << ": type = " << dbinfo.type
- << " creator = " << dbinfo.creator
- << " version = " << dbinfo.version
- << " index = " << dbinfo.index << endl;
- dbinfo.flags &= ~dlpDBFlagOpen;
-
- // make sure the dir for the backup db really exists!
- TQFileInfo fi(dbpath);
- TQString path(TQFileInfo(dbpath).dir(true).absPath());
- if (!path.endsWith(CSL1("/"))) path.append(CSL1("/"));
- if (!KStandardDirs::exists(path))
- {
- DEBUGKPILOT << fname << ": Trying to create path for database: <"
- << path << ">" << endl;
- KStandardDirs::makeDir(path);
- }
- if (!KStandardDirs::exists(path))
- {
- DEBUGKPILOT << fname << ": Database directory does not exist." << endl;
- if (retrieved) *retrieved = false;
- return false;
- }
-
- if (!deviceLink()->retrieveDatabase(dbpath, &dbinfo) )
- {
- WARNINGKPILOT << "Could not retrieve database "
- << name << " from the handheld." << endl;
- if (retrieved) *retrieved = false;
- return false;
- }
- localDB = new PilotLocalDatabase( localPathName );
- if (!localDB || !localDB->isOpen())
- {
- WARNINGKPILOT << "local backup of database " << name << " could not be initialized." << endl;
- if (retrieved) *retrieved = false;
- return false;
- }
- if (retrieved) *retrieved=true;
- }
- fLocalDatabase = localDB;
-
- fDatabase = deviceLink()->database( name );
-
- if (!fDatabase)
- {
- WARNINGKPILOT << "Could not open database \""
- << name
- << "\" on the pilot."
- << endl;
- }
- else
- {
- fCtrHH->setStartCount(fDatabase->recordCount());
- }
-
- return (fDatabase && fDatabase->isOpen() &&
- fLocalDatabase && fLocalDatabase->isOpen() );
-}
-
-
-bool ConduitAction::changeSync(SyncMode::Mode m)
-{
- FUNCTIONSETUP;
-
- if ( fSyncDirection.isSync() && SyncMode::eFullSync == m)
- {
- fSyncDirection.setMode(m);
- return true;
- }
- return false;
-}
-
-void ConduitAction::finished()
-{
- FUNCTIONSETUP;
-
- if (fDatabase && fCtrHH)
- fCtrHH->setEndCount(fDatabase->recordCount());
-
- if (fCtrHH && fCtrPC)
- {
- addSyncLogEntry(fCtrHH->moo() +"\n",false);
- DEBUGKPILOT << fname << ": " << fCtrHH->moo() << endl;
- addSyncLogEntry(fCtrPC->moo() +"\n",false);
- DEBUGKPILOT << fname << ": " << fCtrPC->moo() << endl;
-
- // STEP2 of making sure we don't delete our little user's
- // precious data...
- // sanity checks for handheld...
- int hhVolatility = fCtrHH->percentDeleted() +
- fCtrHH->percentUpdated() +
- fCtrHH->percentCreated();
-
- int pcVolatility = fCtrPC->percentDeleted() +
- fCtrPC->percentUpdated() +
- fCtrPC->percentCreated();
-
- // TODO: allow user to configure this...
- // this is a percentage...
- int allowedVolatility = 70;
-
- TQString caption = i18n("Large Changes Detected");
- // args are already i18n'd
- TQString query = i18n("The %1 conduit has made a "
- "large number of changes to your %2. Do you want "
- "to allow this change?\nDetails:\n\t%3");
-
- if (hhVolatility > allowedVolatility)
- {
- query = query.arg(fConduitName)
- .arg(fCtrHH->type()).arg(fCtrHH->moo());
-
- DEBUGKPILOT << fname << ": Yikes, lots of volatility "
- << "caught. Check with user: [" << query
- << "]." << endl;
-
- /*
- int rc = questionYesNo(query, caption,
- TQString::null, 0 );
- if (rc == KMessageBox::Yes)
- {
- // TODO: add commit and rollback code.
- // note: this will require some thinking,
- // since we have to undo changes to the
- // pilot databases, changes to the PC
- // resources, changes to the mappings files
- // (record id mapping, etc.)
- }
- */
- }
-
-
- }
-
-}
-
-
-ConduitProxy::ConduitProxy(KPilotLink *p,
- const TQString &name,
- const SyncAction::SyncMode &m) :
- ConduitAction(p,name.latin1(),m.list()),
- fDesktopName(name)
-{
- FUNCTIONSETUP;
-}
-
-/* virtual */ bool ConduitProxy::exec()
-{
- FUNCTIONSETUP;
-
- // query that service
- KSharedPtr < KService > o = KService::serviceByDesktopName(fDesktopName);
- if (!o)
- {
- WARNINGKPILOT << "Can't find desktop file for conduit "
- << fDesktopName
- << endl;
- addSyncLogEntry(i18n("Could not find conduit %1.").arg(fDesktopName));
- return false;
- }
-
-
- // load the lib
- fLibraryName = o->library();
- DEBUGKPILOT << fname
- << ": Loading desktop "
- << fDesktopName
- << " with lib "
- << fLibraryName
- << endl;
-
- KLibrary *library = KLibLoader::self()->library(
- TQFile::encodeName(fLibraryName));
- if (!library)
- {
- WARNINGKPILOT << "Can't load library "
- << fLibraryName
- << " - "
- << KLibLoader::self()->lastErrorMessage()
- << endl;
- addSyncLogEntry(i18n("Could not load conduit %1.").arg(fDesktopName));
- return false;
- }
-
- unsigned long version = PluginUtility::pluginVersion(library);
- if ( Pilot::PLUGIN_API != version )
- {
- WARNINGKPILOT << "Library "
- << fLibraryName
- << " has version "
- << version
- << endl;
- addSyncLogEntry(i18n("Conduit %1 has wrong version (%2).").arg(fDesktopName).arg(version));
- return false;
- }
-
- KLibFactory *factory = library->factory();
- if (!factory)
- {
- WARNINGKPILOT << "Can't find factory in library "
- << fLibraryName
- << endl;
- addSyncLogEntry(i18n("Could not initialize conduit %1.").arg(fDesktopName));
- return false;
- }
-
- TQStringList l = syncMode().list();
-
- DEBUGKPILOT << fname << ": Flags: " << syncMode().name() << endl;
-
- TQObject *object = factory->create(fHandle,name(),"SyncAction",l);
-
- if (!object)
- {
- WARNINGKPILOT << "Can't create SyncAction." << endl;
- addSyncLogEntry(i18n("Could not create conduit %1.").arg(fDesktopName));
- return false;
- }
-
- fConduit = dynamic_cast<ConduitAction *>(object);
-
- if (!fConduit)
- {
- WARNINGKPILOT << "Can't cast to ConduitAction." << endl;
- addSyncLogEntry(i18n("Could not create conduit %1.").arg(fDesktopName));
- return false;
- }
-
- addSyncLogEntry(i18n("[Conduit %1]").arg(fDesktopName));
-
- // Handle the syncDone signal properly & unload the conduit.
- TQObject::connect(fConduit,TQT_SIGNAL(syncDone(SyncAction *)),
- this,TQT_SLOT(execDone(SyncAction *)));
- // Proxy all the log and error messages.
- TQObject::connect(fConduit,TQT_SIGNAL(logMessage(const TQString &)),
- this,TQT_SIGNAL(logMessage(const TQString &)));
- TQObject::connect(fConduit,TQT_SIGNAL(logError(const TQString &)),
- this,TQT_SIGNAL(logError(const TQString &)));
- TQObject::connect(fConduit,TQT_SIGNAL(logProgress(const TQString &,int)),
- this,TQT_SIGNAL(logProgress(const TQString &,int)));
-
- TQTimer::singleShot(0,fConduit,TQT_SLOT(execConduit()));
- return true;
-}
-
-void ConduitProxy::execDone(SyncAction *p)
-{
- FUNCTIONSETUP;
-
- if (p!=fConduit)
- {
- WARNINGKPILOT << "Unknown conduit @"
- << (void *) p
- << " finished."
- << endl;
- emit syncDone(this);
- return;
- }
-
- // give our worker a chance to sanity check the results...
- fConduit->finished();
-
- addSyncLogEntry(CSL1("\n"),false); // Put bits of the conduit logs on separate lines
-
- KPILOT_DELETE(p);
-
- emit syncDone(this);
-}
-
-
-namespace PluginUtility
-{
-
-TQString findArgument(const TQStringList &a, const TQString &arg)
-{
- FUNCTIONSETUP;
-
- TQString search;
-
- if (arg.startsWith( CSL1("--") ))
- {
- search = arg;
- }
- else
- {
- search = CSL1("--") + arg;
- }
- search.append( CSL1("=") );
-
-
- TQStringList::ConstIterator end = a.end();
- for (TQStringList::ConstIterator i = a.begin(); i != end; ++i)
- {
- if ((*i).startsWith( search ))
- {
- TQString s = (*i).mid(search.length());
- return s;
- }
- }
-
- return TQString::null;
-}
-
-/* static */ bool isRunning(const TQCString &n)
-{
- DCOPClient *dcop = KApplication::kApplication()->dcopClient();
- QCStringList apps = dcop->registeredApplications();
- return apps.contains(n);
-}
-
-
-/* static */ unsigned long pluginVersion(const KLibrary *lib)
-{
- TQString symbol = CSL1("version_");
- symbol.append(lib->name());
-
- if (!lib->hasSymbol(symbol.latin1())) return 0;
-
- unsigned long *p = (unsigned long *)(lib->symbol(symbol.latin1()));
- return *p;
-}
-
-
-/* static */ TQString pluginVersionString(const KLibrary *lib)
-{
- TQString symbol= CSL1("id_");
- symbol.append(lib->name());
-
- if (!lib->hasSymbol(symbol.latin1())) return TQString::null;
-
- return TQString::fromLatin1(*((const char **)(lib->symbol(symbol.latin1()))));
-}
-
-
-}
-
-
-CUDCounter::CUDCounter(TQString s) :
- fC(0),fU(0),fD(0),fStart(0),fEnd(0),fType(s)
-{
-}
-
-void CUDCounter::created(unsigned int c)
-{
- fC += c;
-}
-
-void CUDCounter::updated(unsigned int c)
-{
- fU += c;
-}
-
-void CUDCounter::deleted(unsigned int c)
-{
- fD += c;
-}
-
-void CUDCounter::setStartCount(unsigned int t)
-{
- fStart = t;
-}
-
-void CUDCounter::setEndCount(unsigned int t)
-{
- fEnd = t;
-}
-
-TQString CUDCounter::moo() const
-{
- TQString result = fType + ": " +
- i18n("Start: %1. End: %2. ").arg(fStart).arg(fEnd);
-
- if (fC > 0) result += i18n("%1 new. ").arg(fC);
- if (fU > 0) result += i18n("%1 changed. ").arg(fU);
- if (fD > 0) result += i18n("%1 deleted. ").arg(fD);
-
- if ( (fC+fU+fD) <= 0) result += i18n("No changes made. ");
-
- return result;
-}
-
-
diff --git a/kpilot/lib/plugin.h b/kpilot/lib/plugin.h
deleted file mode 100644
index 168cd2fd8..000000000
--- a/kpilot/lib/plugin.h
+++ /dev/null
@@ -1,476 +0,0 @@
-#ifndef _KPILOT_PLUGIN_H
-#define _KPILOT_PLUGIN_H
-/* KPilot
-**
-** Copyright (C) 2001 by Dan Pilone
-** Copyright (C) 2002-2004,2006 Adriaan de Groot <groot@kde.org>
-** Copyright (C) 2003-2004 Reinhold Kainhofer <reinhold@kainhofer.com>
-**
-*/
-
-/*
-** This program 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; either version 2.1 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 Lesser General Public License for more details.
-**
-** You should have received a copy of the GNU Lesser General Public License
-** along with this program in a file called COPYING; if not, write to
-** the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
-** MA 02110-1301, USA.
-*/
-
-/*
-** Bug reports and questions can be sent to kde-pim@kde.org
-*/
-
-#include <tqstringlist.h>
-
-#include "syncAction.h"
-
-/** @file
-* This file defines the base class of all KPilot conduit plugins configuration
-* dialogs. This is necessary so that we have a fixed API to talk to from
-* inside KPilot.
-*
-* The factories used by KPilot plugins are also documented here.
-*/
-
-
-class TQTabWidget;
-class KAboutData;
-class KLibrary;
-
-class PilotDatabase;
-
-namespace Pilot
-{
- /**
- * As the API for conduits may change in the course of time,
- * identify them and refuse to load incompatible API versions.
- * Bump this number every release to the current YYYYMMDD
- * value.
- */
- static const unsigned int PLUGIN_API = 20061118;
-}
-
-/**
-* ConduitConfigBase is for configuration purposes.
-*
-* ConduitConfigBase: this is an object (with a widget!) that is embedded
-* in a dialog. This is the currently preferred form for configuration,
-* and it's what is used in the KPilot conduit configuration dialog.
-* The factory is asked for a "ConduitConfigBase" object.
-*
-* NB. The reason that this is a TQObject which needs to create a
-* separate widget - instead of a TQWidget subclass - has to do with
-* layouting. If you make the widget with designer then the easiest
-* thing to do is to use a grid layout there. Making ConduitConfigBase
-* a TQWidget subclass would require an additional layout here, which
-* seems a little foolish.
-*
-*/
-class KDE_EXPORT ConduitConfigBase : public QObject
-{
-Q_OBJECT
-public:
- /**
- * Constructor. Creates a conduit configuration support object
- * with the given parent @p parent and name (optional) @p n.
- */
- ConduitConfigBase(TQWidget *parent=0L, const char *n=0L);
-
- /** Destructor. */
- virtual ~ConduitConfigBase();
-
- /**
- * This function is called to check whether the configuration
- * of the conduit has changed -- and hence, whether the user
- * needs to be prompted. By default, this just returns
- * fModified, but you can do more complicated things.
- */
- virtual bool isModified() const
- {
- return fModified;
- } ;
-
- /** Accessor for the actual widget for the configuration. */
- TQWidget *widget() const
- {
- return fWidget;
- } ;
-
- /**
- * Load or save the config widget's settings in the given
- * KConfig object; leave the group unchanged. load() and
- * commit() should both call unmodified() to indicate that
- * the current settings match the on-disk ones.
- */
- virtual void commit() = 0;
- virtual void load() = 0;
- /**
- * Called when the object is to be hidden again and might
- * need to save changed settings. Should prompt the user
- * and call commit() if needed. Override this function only
- * if you need a very different kind of prompt window.
- *
- * Returns false if the change is to be canceled. Returns
- * true otherwise, whether or not the changes were saved.
- */
- virtual bool maybeSave();
-
- TQString conduitName() const { return fConduitName; } ;
-
- /**
- * This is the function that does the work of adding an about
- * page to a tabwidget. It is made public and static so that
- * it can be used elsewhere wherever tabwidgets appear.
- *
- * The about tab is created using aboutPage(). The new about
- * widget is added to the tab widget @p w with the heading
- * "About".
- *
- * @param w The tab widget to which the about page is added.
- * @param data The KAboutData that is used.
- *
- */
- static void addAboutPage(TQTabWidget *w,
- KAboutData *data=0L);
-
- /**
- * This creates the actual about widget. Again, public & static so
- * you can slap in an about widget wherever.
- *
- * An about widget is created that shows the contributors to
- * the application, along with copyright information and the
- * application's icon. This widget can be used pretty much
- * anywhere. Copied from KAboutDialog, mostly.
- *
- * @param parent The widget that holds the about widget.
- * @param data The KAboutData that is used to populate the widget.
- */
- static TQWidget *aboutPage(TQWidget *parent, KAboutData *data=0L);
-
-protected:
- /**
- * This function provides the string for the prompt used
- * in maybeSave(). Override it to change the text.
- */
- virtual TQString maybeSaveText() const;
-
- void unmodified() { fModified=false; } ;
-
- bool fModified;
- TQWidget *fWidget;
- TQString fConduitName;
-
-
-protected slots:
- void modified();
-signals:
- void changed(bool);
-
-} ;
-
-
-/**
-* Create-Update-Delete tracking of the plugin,
-* used for reporting purposes (in a consistent manner). The intent
-* is that this class is used by the conduit as it is syncing data.
-* For this to be useful (and be used properly), the conduit needs
-* to tell us how many creates, updates, and deletes it has made to
-* a data store (PC or HH). It also needs to tell us how many
-* records it started with and how many records it has at the
-* conclusion of its processing. Using this information, we can
-* report on it consistently as well as analyze the activity taken
-* by the conduit and offer rollback functionality if we think the
-* conduit has behaved improperly.
-*/
-class KDE_EXPORT CUDCounter
-{
-public:
- /** Create new counter initialized to 0, and be told what
- * kind of CUD we're counting (PC or Handheld, etc.) */
- CUDCounter(TQString s);
-
- /** Track the creation of @p c items */
- void created(unsigned int c=1);
- /** Track updates to @p u items */
- void updated(unsigned int u=1);
- /** Track the destruction of @p d items */
- void deleted(unsigned int d=1);
- /** How many @p t items did we start with? */
- void setStartCount(unsigned int t);
- /** How many @p t items did we end with? */
- void setEndCount(unsigned int t);
-
- unsigned int countCreated() { return fC; }
- unsigned int countUpdated() { return fU; }
- unsigned int countDeleted() { return fD; }
- unsigned int countStart() { return fStart; }
- unsigned int countEnd() { return fEnd; }
-
- /** percentage of changes. unfortunately, we have to rely on our
- * developers (hi, self!) to correctly set total number of records
- * conduits start with, so add a little protection...
- */
- unsigned int percentCreated() { return (fEnd > 0 ? fC/fEnd : 0); }
- unsigned int percentUpdated() { return (fEnd > 0 ? fU/fEnd : 0); }
- unsigned int percentDeleted() { return (fStart > 0 ? fD/fStart : 0); }
-
- /** Measurement Of Objects -- report numbers of
- * objects created, updated, deleted. This
- * string is already i18n()ed.
- */
- TQString moo() const;
-
- /** Type of counter(Handheld or PC). This string is already
- * i18n()ed.
- */
- TQString type() const { return fType; }
-private:
- /** keep track of Creates, Updates, Deletes, and Total
- * number of records so we can detect abnormal behavior and
- * hopefully prevent data loss.
- */
- unsigned int fC,fU,fD,fStart,fEnd;
-
- /** What kind of CUD are we keeping track of so we can
- * moo() it out later? (PC, Handheld, etc.)
- */
- TQString fType;
-} ;
-
-
-/**
-* The SyncActions created by the factory should obey at least
-* the argument test, indicating a dry run. The device link is
-* the link where the sync should run -- don't get the pilotPort()
-* until the sync runs!
-*
-* setConfig() will be called before the sync starts so that the
-* conduit can read/write metadata and local settings.
-*/
-
-class KDE_EXPORT ConduitAction : public SyncAction
-{
-Q_OBJECT
-
-public:
- ConduitAction(KPilotLink *,
- const char *name=0L,
- const TQStringList &args = TQStringList());
- virtual ~ConduitAction();
-
- /** ConduitAction is done doing work. Allow it to sanity-check the
- * results
- */
- void finished();
-
- TQString conduitName() const { return fConduitName; } ;
-
- /** Retrieve the sync mode set for this action. */
- const SyncMode &syncMode() const { return fSyncDirection; };
-
- /**
- * A full sync happens for eFullSync, eCopyPCToHH and eCopyHHToPC. It
- * completely ignores all modified flags and walks through all records
- * in the database.
- */
- bool isFullSync() const
- {
- return fFirstSync || fSyncDirection.isFullSync() ;
- }
-
- /**
- * A first sync (i.e. database newly fetched from the handheld )
- * does not check for deleted records, but understands them as
- * added on the other side. The flag is set by the conduits
- * when opening the local database, or the calendar/addressbook
- * (if it is empty). This also implies a full sync.
- */
- bool isFirstSync() const
- {
- return fFirstSync || fSyncDirection.isFirstSync() ;
- }
-
-protected:
- /** Retrieve the conflict resolution setting for this action. */
- ConflictResolution getConflictResolution() const
- { return fConflictResolution; };
-
- /** Try to change the sync mode from what it is now to the mode @p m.
- * This may fail (ie. changing a backup to a restore is not kosher) and
- * changeSync() will return false then.
- */
- bool changeSync(SyncMode::Mode m);
-
- // Set the conflict resolution, except if the resolution
- // form is UseGlobalSetting, in which case nothing changes
- // (assumes then that the resolution form is already set
- // according to that global setting).
- //
- void setConflictResolution(ConflictResolution res)
- {
- if (SyncAction::eUseGlobalSetting != res)
- fConflictResolution=res;
- }
-
- void setFirstSync(bool first) { fFirstSync=first; } ;
-
- PilotDatabase *fDatabase;
- PilotDatabase *fLocalDatabase; // Guaranteed to be a PilotLocalDatabase
-
- /**
- * Open both the local copy of database @p dbName
- * and the version on the Pilot. Return true only
- * if both opens succeed. If the local copy of the database
- * does not exist, it is retrieved from the handheld. In this
- * case, retrieved is set to true, otherwise it is left alone
- * (i.e. retains its value and is not explicitly set to false).
- *
- * @param dbName database name to open.
- * @param retrieved indicator whether the database had to be loaded
- * from the handheld.
- */
- bool openDatabases(const TQString &dbName, bool*retrieved=0L);
-
- /**
- * Name of the conduit; might be changed by subclasses. Should
- * normally be set in the constructor.
- */
- TQString fConduitName;
-
- /** Every plugin has 2 CUDCounters--one for keeping track of
- * changes made to PC data and one for keeping track of Palm data. */
- CUDCounter *fCtrHH;
- CUDCounter *fCtrPC;
-
-private:
- SyncMode fSyncDirection;
- ConflictResolution fConflictResolution;
-
- bool fFirstSync;
-} ;
-
-/**
-* The ConduitProxy action delays loading the plugin for a conduit until the conduit
-* actually executes; the proxy then loads the file, creates a SyncAction for the conduit
-* and runs that. Once the conduit has finished, the proxy unloads everything
-* and emits syncDone().
-*/
-class ConduitProxy : public ConduitAction
-{
-Q_OBJECT
-
-public:
- ConduitProxy(KPilotLink *,
- const TQString &desktopName,
- const SyncAction::SyncMode &m);
-
-protected:
- virtual bool exec();
-protected slots:
- void execDone(SyncAction *);
-
-protected:
- TQString fDesktopName;
- TQString fLibraryName;
- ConduitAction *fConduit;
-} ;
-
-/** A namespace containing only static helper methods. */
-namespace PluginUtility
-{
- /** Searches the argument list for --foo=bar and returns bar, TQString::null if not found.
- * Don't include the -- in the argname. */
- TQString findArgument(const TQStringList &a, const TQString argname);
-
- /**
- * This function attempts to detect whether or not the given
- * application is running. If it is, true is returned, otherwise
- * false.
- *
- * The current approach is to ask the DCOP server if the application
- * has registered.
- */
- bool isRunning(const TQCString &appName);
-
- /**
- * Check a given library for its version, returning 0 if no
- * version symbol is found.
- */
- unsigned long pluginVersion(const KLibrary *);
- TQString pluginVersionString(const KLibrary *);
-}
-
-/**
-* All KPilot conduits should subclass KLibFactory like this.
-*
-* Boilerplate for inheritance:
-*
-* <pre>
-* class KPilotPlugin : public KLibFactory
-* {
-* Q_OBJECT
-*
-* public:
-* KPilotPlugin(TQObject * = 0L,const char * = 0L) ;
-* virtual ~KPilotPlugin();
-* </pre>
-*
-* You don't @em have to provide about information for the plugin,
-* but it's useful, particularly for the about box in a conduit.
-*
-*
-* <pre>
-* static KAboutData *about() { return fAbout; } ;
-* </pre>
-*
-*
-* This is what it's all about: creating objects for the plugin.
-* One classname that @em must be supported is ConduitConfig,
-* which is defined above. The other is SyncAction.
-*
-*
-* <pre>
-* protected:
-* virtual TQObject* createObject( TQObject* parent = 0,
-* const char* name = 0,
-* const char* classname = "TQObject",
-* const TQStringList &args = TQStringList() );
-* </pre>
-*
-* More boilerplate, and support for an instance and about data, used
-* by about() above.
-*
-* <pre>
-* KInstance *fInstance;
-* static KAboutData *fAbout;
-* } ;
-* </pre>
-*
-*
-*
-* The implementation of a conduit needs an init_conduit_name() function,
-* just like any KLibLoader library that uses factories.
-*
-* The createObject() function needs to support at least two creation
-* calls: "ConduitConfigBase" and "SyncAction".
-* "ConduitConfigBase" should return a subclass of ConduitConfigBase,
-* "SyncAction" a subclass of SyncAction.
-*
-* Finally, a conduit should have a symbol version_conduit_name,
-* that returns a long; much like the init_conduit_name() function. This
-* should return the version of the plugin API (KPILOT_PLUGIN_VERSION)
-* the conduit was compiled against. Additionally, a plugin may have a
-* id_conduit_name, which should be a const char *.
-*
-*/
-
-#endif
diff --git a/kpilot/lib/pluginfactory.h b/kpilot/lib/pluginfactory.h
deleted file mode 100644
index f43c706db..000000000
--- a/kpilot/lib/pluginfactory.h
+++ /dev/null
@@ -1,98 +0,0 @@
-#ifndef _KPILOT_PLUGINFACTORY_H
-#define _KPILOT_PLUGINFACTORY_H
-/* KPilot
-**
-** Copyright (C) 2005-2006 by Adriaan de Groot <groot@kde.org>
-**
-*/
-
-/*
-** This program 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; either version 2.1 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 Lesser General Public License for more details.
-**
-** You should have received a copy of the GNU Lesser General Public License
-** along with this program in a file called COPYING; if not, write to
-** the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
-** MA 02110-1301, USA.
-*/
-
-/*
-** Bug reports and questions can be sent to kde-pim@kde.org
-*/
-
-#include <tqwidget.h>
-
-#include <kdebug.h>
-#include <klibloader.h>
-
-#include "options.h"
-
-/** @file Defines a template class for factories for KPilot's conduits. */
-
-class KPilotLink;
-
-
-
-/** Template class that defines a conduit's factory. */
-
-template <class Widget, class Action> class ConduitFactory : public KLibFactory
-{
-public:
- ConduitFactory(TQObject *parent = 0, const char *name = 0) :
- KLibFactory(parent,name)
- { fInstance = new KInstance(name); } ;
- virtual ~ConduitFactory()
- { delete fInstance; } ;
-
-protected:
- virtual TQObject *createObject(
- TQObject* parent = 0,
- const char* name = 0,
- const char* classname = "TQObject",
- const TQStringList &args = TQStringList() )
- {
- if (qstrcmp(classname,"ConduitConfigBase")==0)
- {
- TQWidget *w = dynamic_cast<TQWidget *>(parent);
- if (w) return new Widget(w,name);
- else
- {
- WARNINGKPILOT << "Could not cast parent to widget." << endl;
- return 0L;
- }
- }
-
- if (qstrcmp(classname,"SyncAction")==0)
- {
- KPilotLink *d = 0L;
- if (parent) d = dynamic_cast<KPilotLink *>(parent);
-
- if (d || !parent)
- {
- if (!parent)
- {
- kdDebug() << k_funcinfo << ": Using NULL device." << endl;
- }
- return new Action(d,name,args);
- }
- else
- {
- WARNINGKPILOT << "Could not cast parent to KPilotLink" << endl;
- return 0L;
- }
- }
- return 0L;
- }
-
- KInstance *fInstance;
-} ;
-
-#endif
-
diff --git a/kpilot/lib/recordConduit.cc b/kpilot/lib/recordConduit.cc
deleted file mode 100644
index f7692de47..000000000
--- a/kpilot/lib/recordConduit.cc
+++ /dev/null
@@ -1,1145 +0,0 @@
-/* KPilot
-**
-** Copyright (C) 2004 by Reinhold Kainhofer
-** Based on the addressbook conduit:
-** Copyright (C) 2000,2001 by Dan Pilone
-** Copyright (C) 2000 Gregory Stern
-** Copyright (C) 2002-2003 by Reinhold Kainhofer
-**
-** This conduit is the base class for all record-based conduits.
-** all the sync logic is included in this class, and all child classes
-** just have to implement some specific copying and conflict resolution
-** methods.
-*/
-
-/*
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU General Public License as published by
-** the Free Software Foundation; either version 2 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-** GNU General Public License for more details.
-**
-** You should have received a copy of the GNU General Public License
-** along with this program in a file called COPYING; if not, write to
-** the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
-** MA 02110-1301, USA.
-*/
-
-/*
-** Bug reports and questions can be sent to kde-pim@kde.org.
-*/
-
-
-
-#include "options.h"
-
-#include <tqtimer.h>
-#include <tqfile.h>
-
-#include "pilotAppCategory.h"
-#include "pilotSerialDatabase.h"
-#include "pilotLocalDatabase.h"
-#include "recordConduit.h"
-
-
-// Something to allow us to check what revision
-// the modules are that make up a binary distribution.
-//
-//
-extern "C"
-{
-long version_record_conduit = Pilot::PLUGIN_API;
-}
-
-
-/* virtual */ bool RecordConduitBase::exec()
-{
- FUNCTIONSETUP;
- fState = Initialize;
-
- setFirstSync(false);
-
- bool retrieved = false;
- if (!openDatabases( fDBName, &retrieved))
- {
- emit logError(i18n("Unable to open the %1 database on the handheld.").arg( fDBName ) );
- return false;
- }
- if (retrieved) setFirstSync(true);
-
- if (isFirstSync()) fIDList=fDatabase->idList();
- else fIDList=fDatabase->modifiedIDList();
- fIDListIterator = fIDList.begin();
-
- fTimer = new TQTimer(this);
- connect(fTimer,TQT_SIGNAL(timeout()),this,TQT_SLOT(process()));
- fTimer->start(0,false); // Fire as often as possible to prompt processing
- return true;
-}
-
-/* virtual */ void RecordConduitBase::process()
-{
- FUNCTIONSETUP;
- SyncProgress p = Error;
-
-#ifdef DEBUG
- DEBUGKPILOT << fname << ": From state " << name(fState) << endl;
-#endif
-
- switch(fState)
- {
- case Initialize :
- p = loadPC();
- break;
- case PalmToPC :
- p = palmRecToPC();
- break;
- case PCToPalm :
- p = pcRecToPalm();
- break;
- case Cleanup :
- p = cleanup();
- break;
- }
-
-#ifdef DEBUG
- DEBUGKPILOT << fname << ": Step returned " << name(p) << endl;
-#endif
-
- switch(p)
- {
- case Error :
- fTimer->stop();
- delayDone();
- return;
- case NotDone :
- // Return so we get called again.
- return;
- case Done :
- // Get on with it.
- break;
- }
-
-#ifdef DEBUG
- DEBUGKPILOT << fname << ": Step is done, moving to next state." << endl;
-#endif
-
- // Here the previous call was done.
- switch(fState)
- {
- case Initialize :
- switch (syncMode().mode())
- {
- case SyncMode::eRestore :
- case SyncMode::eCopyPCToHH : /* These two don't copy Palm records to the PC */
- fState = PCToPalm;
- break;
- default :
- fState = PalmToPC;
- }
- break;
- case PalmToPC :
- switch (syncMode().mode())
- {
- case SyncMode::eBackup :
- case SyncMode::eCopyHHToPC : /* These modes don't copy PC records back */
- fState = Cleanup;
- break;
- default :
- fState = PCToPalm;
- }
- break;
- case PCToPalm :
- fState = Cleanup;
- break;
- case Cleanup :
- fTimer->stop();
- delayDone();
- // No change in state, timer stopped and we're done.
- break;
- }
-
-#ifdef DEBUG
- DEBUGKPILOT << fname << ": Next state is " << name(fState) << endl;
-#endif
-
-}
-
-
-TQString RecordConduitBase::name(RecordConduitBase::SyncProgress s)
-{
- switch(s)
- {
- case RecordConduitBase::NotDone:
- return CSL1("NotDone");
- case RecordConduitBase::Done:
- return CSL1("Done");
- case RecordConduitBase::Error:
- return CSL1("Error");
- }
-}
-
-
-TQString RecordConduitBase::name(RecordConduitBase::States s)
-{
- switch(s)
- {
- case RecordConduitBase::Initialize:
- return CSL1("Initialize");
- case RecordConduitBase::PalmToPC:
- return CSL1("Handheld-to-PC");
- case RecordConduitBase::PCToPalm:
- return CSL1("PC-to-Handheld");
- case RecordConduitBase::Cleanup:
- return CSL1("Cleanup");
- }
-}
-
-
-#if 0
-/** make that entry on the pc archived (i.e. deleted on the handheld,
- * while present on the pc, but not synced to the handheld */
-bool RecordConduit::PCData::makeArchived( RecordConduit::PCEntry *pcEntry )
-{
- if ( pcEntry ) {
- pcEntry->makeArchived();
- setChanged( true );
- return true;
- } else return false;
-}
-
-
-/* Builds the map which links record ids to uid's of PCEntry. This is the slow implementation,
- * that should always work. subclasses should reimplement it to speed things up.
-*/
-bool RecordConduit::PCData::mapContactsToPilot( TQMap<recordid_t,TQString> &idContactMap )
-{
- FUNCTIONSETUP;
-
- idContactMap.clear();
-
- Iterator it = begin();
- PCEntry *ent;
- while ( !atEnd( it ) ) {
- ent = *it;
- recordid_t id( ent->recid() );
- if ( id != 0 ) {
- idContactMap.insert( id, ent->uid() );
- }
- ++it;
- }
-#ifdef DEBUG
- DEBUGKPILOT << fname << ": Loaded " << idContactMap.size() <<
- " Entries on the pc and mapped them to records on the handheld. " << endl;
-#endif
- return true;
-}
-
-
-
-/*********************************************************************
- C O N S T R U C T O R
- *********************************************************************/
-
-
-
-bool RecordConduit::mArchiveDeleted = false;
-
-RecordConduit::RecordConduit(TQString name, KPilotDeviceLink * o, const char *n, const TQStringList & a):
- ConduitAction(o, n, a),
- mPCData(0), mPalmIndex(0),
- mEntryMap(), mSyncedIds(), mAllIds()
-{
- FUNCTIONSETUP;
- fConduitName = name;
-}
-
-
-
-RecordConduit::~RecordConduit()
-{
- if ( mPCData ) KPILOT_DELETE(mPCData);
-}
-
-
-
-
-
-
-/*********************************************************************
- S Y N C S T R U C T U R E
- *********************************************************************/
-
-
-
-/* virtual */ bool RecordConduit::exec()
-{
- FUNCTIONSETUP;
-
- if ( !_prepare() ) return false;
-
- fFirstSync = false;
- // Database names probably in latin1.
- if( !openDatabases( dbName(), &fFirstSync ) )
- {
- emit logError(i18n("Unable to open the %1 database on the handheld.").arg( dbName() ) );
- return false;
- }
- _getAppInfo();
- if( !mPCData->loadData() )
- {
- emit logError( i18n("Unable to open %1.").arg( mPCData->description() ) );
- return false;
- }
- // get the addresseMap which maps Pilot unique record(address) id's to
- // a Abbrowser Addressee; allows for easy lookup and comparisons
- if ( mPCData->isEmpty() )
- fFirstSync = true;
- else
- mPCData->mapContactsToPilot( mEntryMap );
- fFirstSync = fFirstSync || ( mPCData->isEmpty() );
-
- // perform syncing from palm to abbrowser
- // iterate through all records in palm pilot
- mPalmIndex = 0;
-
-#ifdef DEBUG
- DEBUGKPILOT << fname << ": fullsync=" << isFullSync() << ", firstSync=" << isFirstSync() << endl;
- DEBUGKPILOT << fname << ": "
- << "syncDirection=" << getSyncDirection() << ", "
-// << "archive = " << AbbrowserSettings::archiveDeleted()
- << endl;
- DEBUGKPILOT << fname << ": conflictRes="<< getConflictResolution() << endl;
-// DEBUGKPILOT << fname << ": PilotStreetHome=" << AbbrowserSettings::pilotStreet() << ", PilotFaxHOme" << AbbrowserSettings::pilotFax() << endl;
-#endif
-
- if ( !isFirstSync() )
- mAllIds=fDatabase->idList();
-
- /* Note:
- if eCopyPCToHH or eCopyHHToPC, first sync everything, then lookup
- those entries on the receiving side that are not yet syncced and delete
- them. Use slotDeleteUnsyncedPCRecords and slotDeleteUnsyncedHHRecords
- for this, and no longer purge the whole addressbook before the sync to
- prevent data loss in case of connection loss. */
-
- TQTimer::singleShot(0, this, TQT_SLOT(slotPalmRecToPC()));
-
- return true;
-}
-
-
-
-void RecordConduit::slotPalmRecToPC()
-{
- FUNCTIONSETUP;
- PilotRecord *palmRec = 0L, *backupRec = 0L;
-
- if ( getSyncDirection() == SyncAction::eCopyPCToHH )
- {
- mPCIter = mPCData->begin();
- TQTimer::singleShot(0, this, TQT_SLOT(slotPCRecToPalm()));
- return;
- }
-
- if ( isFullSync() )
- palmRec = fDatabase->readRecordByIndex( mPalmIndex++ );
- else
- palmRec = dynamic_cast <PilotSerialDatabase * >(fDatabase)->readNextModifiedRec();
-
- if ( !palmRec )
- {
- mPCIter = mPCData->begin();
- TQTimer::singleShot( 0, this, TQT_SLOT( slotPCRecToPalm() ) );
- return;
- }
-
- // already synced, so skip:
- if ( mSyncedIds.contains( palmRec->id() ) )
- {
- KPILOT_DELETE( palmRec );
- TQTimer::singleShot( 0, this, TQT_SLOT( slotPalmRecToPC() ) );
- return;
- }
-
- backupRec = fLocalDatabase->readRecordById( palmRec->id() );
- PilotRecord *compareRec = backupRec ? backupRec : palmRec;
- PilotAppCategory *compareEntry = createPalmEntry( compareRec );
- PCEntry *pcEntry = findMatch( compareEntry );
- KPILOT_DELETE( compareEntry );
-
- PilotAppCategory *backupEntry=0L;
- if ( backupRec )
- backupEntry = createPalmEntry( backupRec );
- PilotAppCategory *palmEntry=0L;
- if ( palmRec )
- palmEntry = createPalmEntry( palmRec );
-
- syncEntry( pcEntry, backupEntry, palmEntry );
-
- mSyncedIds.append( palmRec->id() );
-
- KPILOT_DELETE( pcEntry );
- KPILOT_DELETE( palmEntry );
- KPILOT_DELETE( backupEntry );
- KPILOT_DELETE( palmRec );
- KPILOT_DELETE( backupRec );
-
- TQTimer::singleShot(0, this, TQT_SLOT(slotPalmRecToPC()));
-}
-
-
-
-void RecordConduit::slotPCRecToPalm()
-{
- FUNCTIONSETUP;
-
- if ( ( getSyncDirection()==SyncAction::eCopyHHToPC ) ||
- mPCData->atEnd( mPCIter ) )
- {
- mPalmIndex = 0;
- TQTimer::singleShot( 0, this, TQT_SLOT( slotDeletedRecord() ) );
- return;
- }
-
- PilotRecord *backupRec=0L;
- PCEntry *pcEntry = *mPCIter;
- ++mPCIter;
-
- // If marked as archived, don't sync!
- if ( isArchived( pcEntry ) )
- {
-#ifdef DEBUG
- DEBUGKPILOT << fname << ": address with id " << pcEntry->uid() <<
- " marked archived, so don't sync." << endl;
-#endif
- KPILOT_DELETE( pcEntry );
- TQTimer::singleShot( 0, this, TQT_SLOT( slotPCRecToPalm() ) );
- return;
- }
-
- recordid_t recID( pcEntry->recid() );
- if ( recID == 0 )
- {
- // it's a new item(no record ID and not inserted by the Palm -> PC sync), so add it
- syncEntry( pcEntry, 0L, 0L );
- KPILOT_DELETE( pcEntry );
- TQTimer::singleShot( 0, this, TQT_SLOT( slotPCRecToPalm() ) );
- return;
- }
-
- // look into the list of already synced record ids to see if the PCEntry hasn't already been synced
- if ( mSyncedIds.contains( recID ) )
- {
-#ifdef DEBUG
- DEBUGKPILOT << ": address with id " << recID << " already synced." << endl;
-#endif
- KPILOT_DELETE( pcEntry );
- TQTimer::singleShot( 0, this, TQT_SLOT( slotPCRecToPalm() ) );
- return;
- }
-
-
- backupRec = fLocalDatabase->readRecordById( recID );
- // only update if no backup record or the backup record is not equal to the PCEntry
-
- PilotAppCategory*backupEntry=0L;
- if ( backupRec )
- backupEntry = createPalmEntry( backupRec );
- if( !backupRec || isFirstSync() || !_equal( backupEntry, pcEntry ) )
- {
- PilotRecord *palmRec = fDatabase->readRecordById( recID );
- PilotAppCategory *palmEntry=0L;
- if (palmRec)
- palmEntry = createPalmEntry( palmRec );
- syncEntry( pcEntry, backupEntry, palmEntry );
- // update the id just in case it changed
- if ( palmRec )
- recID = palmRec->id();
- KPILOT_DELETE( palmRec );
- KPILOT_DELETE( palmEntry );
- }
-
- KPILOT_DELETE( pcEntry );
- KPILOT_DELETE( backupEntry );
- KPILOT_DELETE( backupRec );
- mSyncedIds.append( recID );
-
- // done with the sync process, go on with the next one:
- TQTimer::singleShot( 0, this, TQT_SLOT( slotPCRecToPalm() ) );
-}
-
-
-
-void RecordConduit::slotDeletedRecord()
-{
- FUNCTIONSETUP;
-
- PilotRecord *backupRec = fLocalDatabase->readRecordByIndex( mPalmIndex++ );
- if( !backupRec || isFirstSync() )
- {
- KPILOT_DELETE(backupRec);
- TQTimer::singleShot( 0, this, TQT_SLOT( slotDeleteUnsyncedPCRecords() ) );
- return;
- }
-
- // already synced, so skip this record:
- if ( mSyncedIds.contains( backupRec->id() ) )
- {
- KPILOT_DELETE( backupRec );
- TQTimer::singleShot( 0, this, TQT_SLOT( slotDeletedRecord() ) );
- return;
- }
-
- TQString uid = mEntryMap[ backupRec->id() ];
- PCEntry *pcEntry = mPCData->findByUid( uid );
- PilotRecord *palmRec = fDatabase->readRecordById( backupRec->id() );
- PilotAppCategory *backupEntry = 0L;
- if (backupRec)
- backupEntry = createPalmEntry( backupRec );
- PilotAppCategory*palmEntry=0L;
- if (palmRec)
- palmEntry = createPalmEntry( palmRec );
-
- mSyncedIds.append( backupRec->id() );
- syncEntry( pcEntry, backupEntry, palmEntry );
-
- KPILOT_DELETE( pcEntry );
- KPILOT_DELETE( palmEntry );
- KPILOT_DELETE( backupEntry );
- KPILOT_DELETE( palmRec );
- KPILOT_DELETE( backupRec );
- TQTimer::singleShot( 0, this, TQT_SLOT( slotDeletedRecord() ) );
-}
-
-
-
-void RecordConduit::slotDeleteUnsyncedPCRecords()
-{
- FUNCTIONSETUP;
- if ( getSyncDirection() == SyncAction::eCopyHHToPC )
- {
- TQStringList uids;
- RecordIDList::iterator it;
- TQString uid;
- for ( it = mSyncedIds.begin(); it != mSyncedIds.end(); ++it)
- {
- uid = mEntryMap[ *it ];
- if ( !uid.isEmpty() ) uids.append( uid );
- }
- // TODO: Does this speed up anything?
- // qHeapSort( uids );
- const TQStringList alluids( mPCData->uids() );
- TQStringList::ConstIterator uidit;
- for ( uidit = alluids.constBegin(); uidit != alluids.constEnd(); ++uidit )
- {
- if ( !uids.contains( *uidit ) )
- {
-#ifdef DEBUG
- DEBUGKPILOT << "Deleting PCEntry with uid " << (*uidit) << " from PC (is not on HH, and syncing with HH->PC direction)" << endl;
-#endif
- mPCData->removeEntry( *uidit );
- }
- }
- }
- TQTimer::singleShot(0, this, TQT_SLOT(slotDeleteUnsyncedHHRecords()));
-}
-
-
-
-void RecordConduit::slotDeleteUnsyncedHHRecords()
-{
- FUNCTIONSETUP;
- if ( getSyncDirection() == SyncAction::eCopyPCToHH )
- {
- RecordIDList ids = fDatabase->idList();
- RecordIDList::iterator it;
- for ( it = ids.begin(); it != ids.end(); ++it )
- {
- if ( !mSyncedIds.contains(*it) )
- {
-#ifdef DEBUG
- DEBUGKPILOT << "Deleting record with ID " << *it << " from handheld (is not on PC, and syncing with PC->HH direction)" << endl;
-#endif
- fDatabase->deleteRecord(*it);
- fLocalDatabase->deleteRecord(*it);
- }
- }
- }
- TQTimer::singleShot( 0, this, TQT_SLOT( slotCleanup() ) );
-}
-
-
-void RecordConduit::slotCleanup()
-{
- FUNCTIONSETUP;
-
- // Set the appInfoBlock, just in case the category labels changed
- _setAppInfo();
- doPostSync();
- if(fDatabase)
- {
- fDatabase->resetSyncFlags();
- fDatabase->cleanup();
- }
- if(fLocalDatabase)
- {
- fLocalDatabase->resetSyncFlags();
- fLocalDatabase->cleanup();
- }
- KPILOT_DELETE( fDatabase );
- KPILOT_DELETE( fLocalDatabase );
- // TODO: do something if saving fails!
- mPCData->saveData();
- mPCData->cleanup();
- emit syncDone(this);
-}
-
-
-/** Return the list of category names on the handheld
- */
-const TQStringList RecordConduit::categories() const
-{
- TQStringList cats;
- for ( unsigned int j = 0; j < Pilot::CATEGORY_COUNT; j++ ) {
- TQString catName( category( j ) );
- if ( !catName.isEmpty() ) cats << catName;
- }
- return cats;
-}
-int RecordConduit::findFlags() const
-{
- return eqFlagsAlmostAll;
-}
-
-
-bool RecordConduit::isDeleted( const PilotAppCategory *palmEntry )
-{
- if ( !palmEntry )
- return true;
- if ( palmEntry->isDeleted() && !palmEntry->isArchived() )
- return true;
- if ( palmEntry->isArchived() )
- return !archiveDeleted();
- return false;
-}
-bool RecordConduit::isArchived( const PilotAppCategory *palmEntry )
-{
- if ( palmEntry && palmEntry->isArchived() )
- return archiveDeleted();
- else
- return false;
-}
-
-
-
-
-/*********************************************************************
- L O A D I N G T H E D A T A
- *********************************************************************/
-
-
-
-bool RecordConduit::_prepare()
-{
- FUNCTIONSETUP;
-
- readConfig();
- mSyncedIds.clear();
- mPCData = initializePCData();
-
- return mPCData && doPrepare();
-}
-
-
-void RecordConduit::_getAppInfo()
-{
- FUNCTIONSETUP;
- // get the address application header information
- unsigned char *buffer = new unsigned char[Pilot::MAX_APPINFO_SIZE];
- int appLen=fDatabase->readAppBlock(buffer, Pilot::MAX_APPINFO_SIZE);
-
- doUnpackAppInfo( buffer, appLen );
- delete[] buffer;
- buffer = 0;
-}
-
-void RecordConduit::_setAppInfo()
-{
- FUNCTIONSETUP;
- // get the address application header information
- int appLen = 0;
- unsigned char *buffer = doPackAppInfo( &appLen );
- if ( buffer )
- { if (fDatabase)
- fDatabase->writeAppBlock( buffer, appLen );
- if (fLocalDatabase)
- fLocalDatabase->writeAppBlock( buffer, appLen );
- delete[] buffer;
- }
-}
-
-
-int RecordConduit::compareStr( const TQString & str1, const TQString & str2 )
-{
-// FUNCTIONSETUP;
- if ( str1.isEmpty() && str2.isEmpty() )
- return 0;
- else
- return str1.compare( str2 );
-}
-
-
-/**
- * _getCat returns the id of the category from the given categories list.
- * If the address has no categories on the PC, TQString::null is returned.
- * If the current category exists in the list of cats, it is returned
- * Otherwise the first cat in the list that exists on the HH is returned
- * If none of the categories exists on the palm, TQString::null is returned
- */
-TQString RecordConduit::getCatForHH( const TQStringList cats, const TQString curr ) const
-{
- FUNCTIONSETUP;
- if ( cats.size() < 1 )
- return TQString::null;
- if ( cats.contains( curr ) )
- return curr;
- for ( TQStringList::ConstIterator it = cats.begin(); it != cats.end(); ++it)
- {
- for ( unsigned int j = 0; j < Pilot::CATEGORY_COUNT; j++ )
- {
- TQString catnm( category( j ) );
- if ( !(*it).isEmpty() && ( (*it)==catnm ) )
- {
- return catnm;
- }
- }
- }
- // If we have a free label, return the first possible cat
- TQString lastCat( category( Pilot::CATEGORY_COUNT-1 ) );
- return ( lastCat.isEmpty() ) ? ( cats.first() ) : ( TQString::null );
-}
-
-void RecordConduit::setCategory(PCEntry * pcEntry, TQString cat)
-{
- if ( !cat.isEmpty() && cat!=category( 0 ) )
- pcEntry->insertCategory(cat);
-}
-
-
-
-
-
-
-/*********************************************************************
- G E N E R A L S Y N C F U N C T I O N
- These functions modify the Handheld and the addressbook
- *********************************************************************/
-
-
-
-bool RecordConduit::syncEntry( PCEntry *pcEntry, PilotAppCategory*backupEntry,
- PilotAppCategory*palmEntry)
-{
- FUNCTIONSETUP;
-
- if ( getSyncDirection() == SyncAction::eCopyPCToHH )
- {
- if ( pcEntry->isEmpty() )
- {
- return pcDeleteEntry( pcEntry, backupEntry, palmEntry );
- }
- else
- {
- return pcCopyToPalm( pcEntry, backupEntry, palmEntry );
- }
- }
-
- if ( getSyncDirection() == SyncAction::eCopyHHToPC )
- {
- if (!palmEntry)
- return pcDeleteEntry(pcEntry, backupEntry, palmEntry);
- else
- return palmCopyToPC(pcEntry, backupEntry, palmEntry);
- }
-
- if ( !backupEntry || isFirstSync() )
- {
- /*
- Resolution matrix (0..does not exist, E..exists, D..deleted flag set, A..archived):
- HH PC | Resolution
- ------------------------------------------------------------
- 0 A | -
- 0 E | PC -> HH, reset ID if not set correctly
- D 0 | delete (error, should never occur!!!)
- D E | CR (ERROR)
- E/A 0 | HH -> PC
- E/A E/A| merge/CR
- */
- if ( !palmEntry && isArchived( pcEntry ) )
- {
- return true;
- }
- else if ( !palmEntry && !pcEntry->isEmpty() )
- {
- // PC->HH
- bool res = pcCopyToPalm( pcEntry, 0L, 0L );
- return res;
- }
- else if ( !palmEntry && pcEntry->isEmpty() )
- {
- // everything's empty -> ERROR
- return false;
- }
- else if ( ( isDeleted( palmEntry ) || isArchived( palmEntry ) ) && pcEntry->isEmpty())
- {
- if ( isArchived( palmEntry ) )
- return palmCopyToPC( pcEntry, 0L, palmEntry );
- else
- // this happens if you add a record on the handheld and delete it again before you do the next sync
- return pcDeleteEntry( pcEntry, 0L, palmEntry );
- }
- else if ( ( isDeleted(palmEntry) || isArchived( palmEntry ) ) && !pcEntry->isEmpty() )
- {
- // CR (ERROR)
- return smartMergeEntry( pcEntry, 0L, palmEntry );
- }
- else if ( pcEntry->isEmpty() )
- {
- // HH->PC
- return palmCopyToPC( pcEntry, 0L, palmEntry );
- }
- else
- {
- // Conflict Resolution
- return smartMergeEntry( pcEntry, 0L, palmEntry );
- }
- } // !backupEntry
- else
- {
- /*
- Resolution matrix:
- 1) if HH.(empty| (deleted &! archived) ) -> { if (PC==B) -> delete, else -> CR }
- if HH.archived -> {if (PC==B) -> copyToPC, else -> CR }
- if PC.empty -> { if (HH==B) -> delete, else -> CR }
- if PC.archived -> {if (HH==B) -> delete on HH, else CR }
- 2) if PC==HH -> { update B, update ID of PC if needed }
- 3) if PC==B -> { HH!=PC, thus HH modified, so copy HH->PC }
- if HH==B -> { PC!=HH, thus PC modified, so copy PC->HH }
- 4) else: all three PCEntrys are different -> CR
- */
-
- if ( !palmEntry || isDeleted(palmEntry) )
- {
- if ( _equal( backupEntry, pcEntry ) || pcEntry->isEmpty() )
- {
- return pcDeleteEntry( pcEntry, backupEntry, 0L );
- }
- else
- {
- return smartMergeEntry( pcEntry, backupEntry, 0L );
- }
- }
- else if ( pcEntry->isEmpty() )
- {
- if (*palmEntry == *backupEntry)
- {
- return pcDeleteEntry( pcEntry, backupEntry, palmEntry );
- }
- else
- {
- return smartMergeEntry( pcEntry, backupEntry, palmEntry );
- }
- }
- else if ( _equal( palmEntry, pcEntry ) )
- {
- // update Backup, update ID of PC if neededd
- return backupSaveEntry( palmEntry );
- }
- else if ( _equal( backupEntry, pcEntry ) )
- {
-#ifdef DEBUG
- DEBUGKPILOT << "Flags: " << palmEntry->getAttrib() << ", isDeleted=" <<
- isDeleted( palmEntry ) << ", isArchived=" << isArchived( palmEntry )
- << endl;
-#endif
- if ( isDeleted( palmEntry ) )
- {
- return pcDeleteEntry( pcEntry, backupEntry, palmEntry );
- }
- else
- {
- return palmCopyToPC( pcEntry, backupEntry, palmEntry );
- }
- }
- else if ( *palmEntry == *backupEntry )
- {
- return pcCopyToPalm( pcEntry, backupEntry, palmEntry );
- }
- else
- {
- // CR, since all are different
- return smartMergeEntry( pcEntry, backupEntry, palmEntry );
- }
- } // backupEntry
- return false;
-}
-
-bool RecordConduit::pcCopyToPalm( PCEntry *pcEntry, PilotAppCategory *backupEntry,
- PilotAppCategory*palmEntry )
-{
- FUNCTIONSETUP;
-
- if ( pcEntry->isEmpty() ) return false;
- PilotAppCategory *hhEntry = palmEntry;
- bool hhEntryCreated = false;
- if ( !hhEntry )
- {
- hhEntry = createPalmEntry( 0 );
- hhEntryCreated=true;
- }
- _copy( hhEntry, pcEntry );
-#ifdef DEBUG
- DEBUGKPILOT << "palmEntry->id=" << hhEntry->id() << ", pcEntry.ID=" <<
- pcEntry->uid() << endl;
-#endif
-
- if( palmSaveEntry( hhEntry, pcEntry ) )
- {
-#ifdef DEBUG
- DEBUGKPILOT << "Entry palmEntry->id=" <<
- hhEntry->id() << "saved to palm, now updating pcEntry->uid()=" << pcEntry->uid() << endl;
-#endif
- pcSaveEntry( pcEntry, backupEntry, hhEntry );
- }
- if ( hhEntryCreated ) KPILOT_DELETE( hhEntry );
- return true;
-}
-
-
-
-
-bool RecordConduit::palmCopyToPC( PCEntry *pcEntry, PilotAppCategory *backupEntry,
- PilotAppCategory *palmEntry )
-{
- FUNCTIONSETUP;
- if ( !palmEntry )
- {
- return false;
- }
- _copy( pcEntry, palmEntry );
- pcSaveEntry( pcEntry, backupEntry, palmEntry );
- backupSaveEntry( palmEntry );
- return true;
-}
-
-
-
-/*********************************************************************
- l o w - l e v e l f u n c t i o n s f o r
- adding / removing palm/pc records
- *********************************************************************/
-
-
-
-bool RecordConduit::palmSaveEntry( PilotAppCategory *palmEntry, PCEntry *pcEntry )
-{
- FUNCTIONSETUP;
-
-#ifdef DEBUG
- DEBUGKPILOT << "Saving to pilot " << palmEntry->id() << endl;
-#endif
-
- PilotRecord *pilotRec = palmEntry->pack();
- recordid_t pilotId = fDatabase->writeRecord(pilotRec);
-#ifdef DEBUG
- DEBUGKPILOT << "PilotRec nach writeRecord (" << pilotId <<
- ": ID=" << pilotRec->id() << endl;
-#endif
- fLocalDatabase->writeRecord( pilotRec );
- KPILOT_DELETE( pilotRec );
-
- // pilotId == 0 if using local db, so don't overwrite the valid id
- if ( pilotId != 0 )
- {
- palmEntry->setID( pilotId );
- if ( !mSyncedIds.contains( pilotId ) )
- {
- mSyncedIds.append( pilotId );
- }
- }
-
- recordid_t hhId( pcEntry->recid() );
- if ( hhId != pilotId )
- {
- pcEntry->setRecid( pilotId );
- return true;
- }
-
- return false;
-}
-
-
-
-bool RecordConduit::backupSaveEntry( PilotAppCategory *backup )
-{
- FUNCTIONSETUP;
- if ( !backup ) return false;
-
-
-#ifdef DEBUG
-// showPilotAppCategory( backup );
-#endif
- PilotRecord *pilotRec = backup->pack();
- fLocalDatabase->writeRecord( pilotRec );
- KPILOT_DELETE( pilotRec );
- return true;
-}
-
-
-
-bool RecordConduit::pcSaveEntry( PCEntry *pcEntry, PilotAppCategory *,
- PilotAppCategory * )
-{
- FUNCTIONSETUP;
-
-#ifdef DEBUG
- DEBUGKPILOT << "Before _savepcEntry, pcEntry->uid()=" <<
- pcEntry->uid() << endl;
-#endif
- if ( pcEntry->recid() != 0 )
- {
- mEntryMap.insert( pcEntry->recid(), pcEntry->uid() );
- }
-
- mPCData->updateEntry( pcEntry );
- return true;
-}
-
-
-
-bool RecordConduit::pcDeleteEntry( PCEntry *pcEntry, PilotAppCategory *backupEntry,
- PilotAppCategory *palmEntry )
-{
- FUNCTIONSETUP;
-
- if ( palmEntry )
- {
- if ( !mSyncedIds.contains( palmEntry->id() ) )
- {
- mSyncedIds.append(palmEntry->id());
- }
- palmEntry->makeDeleted();
- PilotRecord *pilotRec = palmEntry->pack();
- pilotRec->setDeleted();
- mPalmIndex--;
- fDatabase->writeRecord( pilotRec );
- fLocalDatabase->writeRecord( pilotRec );
- mSyncedIds.append( pilotRec->id() );
- KPILOT_DELETE( pilotRec );
- }
- else if ( backupEntry )
- {
- if ( !mSyncedIds.contains( backupEntry->id() ) )
- {
- mSyncedIds.append( backupEntry->id() );
- }
- backupEntry->makeDeleted();
- PilotRecord *pilotRec = backupEntry->pack();
- pilotRec->setDeleted();
- mPalmIndex--;
- fLocalDatabase->writeRecord( pilotRec );
- mSyncedIds.append( pilotRec->id() );
- KPILOT_DELETE( pilotRec );
- }
- if ( !pcEntry->isEmpty() )
- {
-#ifdef DEBUG
- DEBUGKPILOT << fname << " removing " << pcEntry->uid() << endl;
-#endif
- mPCData->removeEntry( pcEntry );
- }
- return true;
-}
-
-
-
-/*********************************************************************
- C O P Y R E C O R D S
- *********************************************************************/
-
-
-
-
-
-/*********************************************************************
- C O N F L I C T R E S O L U T I O N a n d M E R G I N G
- *********************************************************************/
-
-
-
-
-// TODO: right now entries are equal if both first/last name and organization are
-// equal. This rules out two entries for the same person(e.g. real home and weekend home)
-// or two persons with the same name where you don't know the organization.!!!
-RecordConduit::PCEntry *RecordConduit::findMatch( PilotAppCategory *palmEntry ) const
-{
- FUNCTIONSETUP;
- if ( !palmEntry )
- return 0;
-
- // TODO: also search with the pilotID
- // first, use the pilotID to UID map to find the appropriate record
- if( !isFirstSync() && ( palmEntry->id() > 0) )
- {
- TQString id( mEntryMap[palmEntry->id()] );
-#ifdef DEBUG
- DEBUGKPILOT << fname << ": PilotRecord has id " << palmEntry->id() << ", mapped to " << id << endl;
-#endif
- if( !id.isEmpty() )
- {
- PCEntry *res = mPCData->findByUid( id );
- if ( !res && !res->isEmpty() ) return res;
- KPILOT_DELETE( res );
-#ifdef DEBUG
- DEBUGKPILOT << fname << ": PilotRecord has id " << palmEntry->id() <<
- ", but could not be found on the PC side" << endl;
-#endif
- }
- }
-
- for ( PCData::Iterator iter = mPCData->begin(); !mPCData->atEnd( iter ); ++iter )
- {
- PCEntry *abEntry = *iter;
- recordid_t rid( abEntry->recid() );
- if ( rid>0 )
- {
- if ( rid == palmEntry->id() )
- return abEntry;// yes, we found it
- // skip this PCEntry, as it has a different corresponding address on the handheld
- //if ( mAllIds.contains( rid ) ) continue;
- }
-
- if ( _equal( palmEntry, abEntry, eqFlagsAlmostAll ) )
- {
- return abEntry;
- }
- KPILOT_DELETE( abEntry );
- }
-#ifdef DEBUG
- DEBUGKPILOT << fname << ": Could not find any entry matching Palm record with id " << TQString::number( palmEntry->id() ) << endl;
-#endif
- return 0;
-}
-
-#endif
-
-
-
-
-#include "recordConduit.moc"
-
diff --git a/kpilot/lib/recordConduit.h b/kpilot/lib/recordConduit.h
deleted file mode 100644
index 743e326d2..000000000
--- a/kpilot/lib/recordConduit.h
+++ /dev/null
@@ -1,181 +0,0 @@
-#ifndef _KPILOT_RECORDCONDUIT_H
-#define _KPILOT_RECORDCONDUIT_H
-/* record-conduit.h KPilot
-**
-** Copyright (C) 2005 by Adriaan de Groot
-**
-*/
-
-/*
-** This program is free software; you can redistribute it and/or modify
-** it under the terms of the GNU General Public License as published by
-** the Free Software Foundation; either version 2 of the License, or
-** (at your option) any later version.
-**
-** This program is distributed in the hope that it will be useful,
-** but WITHOUT ANY WARRANTY; without even the implied warranty of
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-** GNU General Public License for more details.
-**
-** You should have received a copy of the GNU General Public License
-** along with this program in a file called COPYING; if not, write to
-** the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
-** MA 02110-1301, USA.
-*/
-
-/*
-** Bug reports and questions can be sent to kde-pim@kde.org
-*/
-
-#include <tqtimer.h>
-#include <klocale.h>
-
-#include "plugin.h"
-#include "pilot.h"
-#include "pilotDatabase.h"
-#include "kpilotdevicelink.h"
-
-class KPilotDeviceLink;
-
-/** @file
-*
-* This file defines a generic syncing framework for Palm Pilot oriented data.
-* It is a lot like KitchenSync's Syncees and such. Basically, we define a
-* generic container for data on the PC side and give that container an API
-* for searching for a specific handheld record. Syncing consists of iterating
-* through the handheld's records and looking up the PC data for each record,
-* and then syncing.
-*
-*/
-
-/** An intermediate class that introduces the slots we need for our sync
-* implementation. This is here _only_ because mixing moc with template
-* classes sounds really scary.
-*/
-
-class RecordConduitBase : public ConduitAction
-{
-Q_OBJECT
-public:
- /** Constructor. The TQStringList @p a sets flags for the ConduitAction.
- */
- RecordConduitBase(KPilotDeviceLink *o,
- const char *n,
- const TQStringList a = TQStringList()) :
- ConduitAction(o,n,a),
- fTimer(0L)
- {
- } ;
- /** Destructor. */
- virtual ~RecordConduitBase()
- {
- // delete fTimer; // Timer is a child object
- } ;
-
- /** Return values for the processing functions. Each should return
- * NotDone if it needs to be called again (e.g. to process another record),
- * Done if it is finished and something else should be done, and
- * Error if the sync cannot be completed.
- */
- enum SyncProgress { NotDone=0, Done=1, Error=2 } ;
-
- /** Returns a human-readable name for the progress indicator @p s */
- static TQString name(SyncProgress s);
-
- /** State of the conduit's sync. This is changed by process(). */
- enum States { Initialize, PalmToPC, PCToPalm, Cleanup } ;
-
- static TQString name(States s);
-
-protected:
- /** Function called at the beginning of a sync to load data from the PC.
- * @return Done when the load has finished.
- * @see process
- */
- virtual SyncProgress loadPC() = 0;
-
- /** Function called repeatedly to fetch the next modified entry from the Palm and
- * sync it with the PC by looking up the record, and calling the syncer for it.
- *
- * @return Dome when there are no more modified records on the Palm
- * @see process()
- */
- virtual SyncProgress palmRecToPC() = 0;
-
- /** Function called repeatedly to fetch the next modified entry from the PC and
- * sync it with the Palm by looking up the record and calling the syncer for it.
- *
- * @return Done when there are no more modified records on the PC
- * @see process()
- */
- virtual SyncProgress pcRecToPalm() = 0;
-
- /** Function called at the end of this conduit's sync, which should reset DB flags
- * and write changed config data out to disk.
- *
- * @return Done when the cleanup is complete.
- * @see process()
- */
- virtual SyncProgress cleanup() = 0;
-
-protected slots:
- /** Slot used for the implementation of a state machine: calls each of the
- * relevant other slots (above) as needed until they return true.
- */
- void process();
-
-protected:
- virtual bool exec();
-
-private:
- /** Timer to signal the process() slot. Used to keep the UI responsive. */
- TQTimer *fTimer;
-
- States fState;
-
- Pilot::RecordIDList fIDList;
- Pilot::RecordIDList::Iterator fIDListIterator;
-
- TQString fDBName;
-} ;
-
-template <class PCEntry, class PCContainer, class HHEntry, class HHAppInfo, class Syncer>
-class RecordConduit : public RecordConduitBase
-{
-public:
- /** Construct a record conduit on a given device link. */
- RecordConduit(
- KPilotDeviceLink *o /**< Connection to HH */,
- const char *n /**< Name for TQObject */,
- const TQStringList a = TQStringList() /**< Flags */) :
- RecordConduitBase(o,n,a)
- {
- } ;
- virtual ~RecordConduit()
- {
- } ;
-
- virtual SyncProgress loadPC()
- {
- return Done;
- } ;
-
- virtual SyncProgress palmRecToPC()
- {
- return Done;
- }
-
- virtual SyncProgress pcRecToPalm()
- {
- return Done;
- }
-
- virtual SyncProgress cleanup()
- {
- return Done;
- }
-} ;
-
-
-#endif
-
diff --git a/kpilot/lib/syncAction.cc b/kpilot/lib/syncAction.cc
deleted file mode 100644
index d9f539559..000000000
--- a/kpilot/lib/syncAction.cc
+++ /dev/null
@@ -1,512 +0,0 @@
-/* KPilot
-**
-** Copyright (C) 1998-2001 by Dan Pilone
-** Copyright (C) 2003-2004 Reinhold Kainhofer <reinhold@kainhofer.com>
-** Copyright (C) 2001 by Waldo Bastian (code in questionYesNo)
-**
-*/
-
-/*
-** This program 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; either version 2.1 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 Lesser General Public License for more details.
-**
-** You should have received a copy of the GNU Lesser General Public License
-** along with this program in a file called COPYING; if not, write to
-** the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
-** MA 02110-1301, USA.
-*/
-
-/*
-** Bug reports and questions can be sent to kde-pim@kde.org
-*/
-
-#include "options.h"
-
-#include <time.h>
-
-#include <pi-socket.h>
-#include <pi-dlp.h>
-
-#include <tqtimer.h>
-#include <tqvbox.h>
-#include <tqlayout.h>
-#include <tqcheckbox.h>
-#include <tqlabel.h>
-#include <tqmessagebox.h>
-#include <tqdir.h>
-#include <tqfile.h>
-#include <tqfileinfo.h>
-#include <tqtl.h>
-#include <tqstyle.h>
-
-#include <kdialogbase.h>
-#include <kglobal.h>
-#include <kstandarddirs.h>
-#include <kconfig.h>
-#include <kmessagebox.h>
-
-#include "syncAction.moc"
-#include "kpilotlibSettings.h"
-
-SyncAction::SyncAction(KPilotLink *p,
- const char *name) :
- TQObject(p, name),
- fHandle(p),
- fParent(0L)
-{
- FUNCTIONSETUP;
-}
-
-SyncAction::SyncAction(KPilotLink *p,
- TQWidget * visibleparent,
- const char *name) :
- TQObject(p, name),
- fHandle(p),
- fParent(visibleparent)
-{
- FUNCTIONSETUP;
-}
-
-SyncAction::~SyncAction()
-{
-}
-
-/* virtual */ TQString SyncAction::statusString() const
-{
- FUNCTIONSETUP;
- TQString s = CSL1("status=");
-
- s.append(TQString::number(status()));
- return s;
-}
-
-/* slot */ void SyncAction::execConduit()
-{
- FUNCTIONSETUP;
-
- DEBUGKPILOT << fname << ": Exec " << name() << endl;
-
- bool r = this->exec();
-
- DEBUGKPILOT << fname << ": Exec " << name()
- << (r ? " is running" : " failed to start") << endl;
-
- if (!r)
- {
- emit logError(i18n("The conduit %1 could not be executed.")
- .arg(TQString::fromLatin1(name())));
- delayDone();
- }
-}
-
-/* slot */ void SyncAction::delayedDoneSlot()
-{
- emit syncDone(this);
-}
-
-bool SyncAction::delayDone()
-{
- TQTimer::singleShot(0,this,TQT_SLOT(delayedDoneSlot()));
- return true;
-}
-
-static struct
-{
- SyncAction::SyncMode::Mode mode;
- const char *name;
-} maps[] =
-{
- { SyncAction::SyncMode::eHotSync, "--hotsync" },
- { SyncAction::SyncMode::eFullSync, "--full" },
- { SyncAction::SyncMode::eCopyPCToHH, "--copyPCToHH" },
- { SyncAction::SyncMode::eCopyHHToPC, "--copyHHToPC" },
- { SyncAction::SyncMode::eBackup, "--backup" },
- { SyncAction::SyncMode::eRestore, "--restore" },
- { SyncAction::SyncMode::eFullSync, "--fullsync" },
- { SyncAction::SyncMode::eHotSync, (const char *)0 }
-}
-;
-
-SyncAction::SyncMode::SyncMode(const TQStringList &args) :
- fMode(eHotSync),
- fTest(args.contains("--test")),
- fLocal(args.contains("--local"))
-{
- int i = 0;
- while(maps[i].name)
- {
- if (args.contains(TQString::fromLatin1(maps[i].name)))
- {
- fMode = maps[i].mode;
- break;
- }
- i++;
- }
-
- if (!maps[i].name)
- {
- WARNINGKPILOT << "No mode set by arguments ("
- << args.join(",") << ") defaulting to HotSync." << endl;
- }
-}
-
-SyncAction::SyncMode::SyncMode(Mode m, bool test, bool local) :
- fMode(m),
- fTest(test),
- fLocal(local)
-{
- if ( ((int)m<(int)eHotSync) || ((int)m>(int)eRestore) )
- {
- WARNINGKPILOT << "Mode value " << (int)m << " is illegal"
- ", defaulting to HotSync." << endl;
- fMode = eHotSync;
- }
-}
-
-TQStringList SyncAction::SyncMode::list() const
-{
- FUNCTIONSETUPL(3);
-
- TQStringList l;
- int i=0;
-
- while(maps[i].name)
- {
- if ( fMode == maps[i].mode )
- {
- l.append(TQString::fromLatin1(maps[i].name));
- break;
- }
- i++;
- }
- if ( !maps[i].name )
- {
- WARNINGKPILOT << "Mode " << fMode << " does not have a name." << endl;
- l.append(TQString::fromLatin1(maps[0].name));
- }
-
- if (isTest()) l.append(CSL1("--test"));
- if (isLocal()) l.append(CSL1("--local"));
- return l;
-}
-
-/* static */ TQString SyncAction::SyncMode::name(SyncAction::SyncMode::Mode e)
-{
- switch(e)
- {
- case eHotSync : return i18n("HotSync");
- case eFullSync : return i18n("Full Synchronization");
- case eCopyPCToHH : return i18n("Copy PC to Handheld");
- case eCopyHHToPC : return i18n("Copy Handheld to PC");
- case eBackup : return i18n("Backup");
- case eRestore : return i18n("Restore From Backup");
- }
- return CSL1("<unknown>");
-}
-
-TQString SyncAction::SyncMode::name() const
-{
- TQString s = name(fMode);
- if (isTest())
- {
-
- s.append(CSL1(" [%1]").arg(i18n("Test Sync")));
- }
- if (isLocal())
- {
- s.append(CSL1(" [%1]").arg(i18n("Local Sync")));
- }
- return s;
-}
-
-bool SyncAction::SyncMode::setMode(int mode)
-{
- // Resets test and local flags too
- fTest = fLocal = false;
-
- if ( (mode>0) && (mode<=eRestore) )
- {
- fMode = (SyncAction::SyncMode::Mode) mode;
- return true;
- }
- else
- {
- WARNINGKPILOT << "Bad sync mode " << mode << " requested." << endl ;
- fMode = eHotSync;
- return false;
- }
-}
-
-bool SyncAction::SyncMode::setMode(SyncAction::SyncMode::Mode m)
-{
- int i=0;
- while ( maps[i].name )
- {
- if ( maps[i].mode == m )
- {
- fMode = m;
- return true;
- }
- i++;
- }
-
- WARNINGKPILOT << "Bad sync mode " << m << " requested." << endl ;
- fMode = eHotSync;
- return false;
-}
-
-void SyncAction::startTickle(unsigned timeout)
-{
- FUNCTIONSETUP;
-
- if (!deviceLink())
- {
- WARNINGKPILOT << "Trying to tickle without a device." << endl;
- }
- else
- {
- connect(deviceLink(),TQT_SIGNAL(timeout()),this,TQT_SIGNAL(timeout()));
- deviceLink()->startTickle(timeout);
- }
-}
-
-void SyncAction::stopTickle()
-{
- FUNCTIONSETUP;
- if (!deviceLink())
- {
- WARNINGKPILOT << "Trying to tickle without a device." << endl;
- }
- else
- {
- disconnect(deviceLink(),TQT_SIGNAL(timeout()),this,TQT_SIGNAL(timeout()));
- deviceLink()->stopTickle();
- }
-}
-
-
-int SyncAction::questionYesNo(const TQString & text,
- const TQString & caption,
- const TQString & key,
- unsigned timeout,
- const TQString & yes,
- const TQString &no )
-{
- FUNCTIONSETUP;
-
- bool checkboxReturn = false;
- int r;
- KMessageBox::ButtonCode result;
- if (!key.isEmpty())
- {
- if (!KMessageBox::shouldBeShownYesNo(key,result))
- {
- return result;
- }
- }
-
- KDialogBase *dialog =
- new KDialogBase(caption.isNull()? i18n("Question") : caption,
- KDialogBase::Yes | KDialogBase::No,
- KDialogBase::Yes, KDialogBase::No,
- fParent, "questionYesNo", true, true,
- yes.isEmpty() ? KStdGuiItem::yes() : yes,
- no.isEmpty() ? KStdGuiItem::no() : no);
-
- if ( (timeout > 0) && ( deviceLink() ) )
- {
- TQObject::connect(deviceLink(), TQT_SIGNAL(timeout()),
- dialog, TQT_SLOT(slotCancel()));
- startTickle(timeout);
- }
-
-#if KDE_IS_VERSION(3,3,0)
- r = (KMessageBox::ButtonCode) KMessageBox::createKMessageBox(dialog,
- TQMessageBox::Question,
- text,
- TQStringList(),
- (key.isEmpty() ? TQString::null : i18n("&Do not ask again")),
- &checkboxReturn,
- 0);
-
-#else
- // The following code is taken from KDialogBase.cc,
- // part of the KDE 2.2 libraries. Copyright 2001
- // by Waldo Bastian.
- //
- //
- TQVBox *topcontents = new TQVBox(dialog);
-
- topcontents->setSpacing(KDialog::spacingHint() * 2);
- topcontents->setMargin(KDialog::marginHint() * 2);
-
- TQWidget *contents = new TQWidget(topcontents);
- TQHBoxLayout *lay = new TQHBoxLayout(contents);
-
- lay->setSpacing(KDialog::spacingHint() * 2);
-
- lay->addStretch(1);
- TQLabel *label1 = new TQLabel( contents);
- label1->setPixmap(TQMessageBox::standardIcon(TQMessageBox::Information));
- lay->add( label1 );
- TQLabel *label2 = new TQLabel( text, contents);
- label2->setMinimumSize(label2->sizeHint());
- lay->add(label2);
- lay->addStretch(1);
-
- TQSize extraSize = TQSize(50, 30);
-
- TQCheckBox *checkbox = 0L;
- if (!key.isEmpty())
- {
- checkbox = new TQCheckBox(i18n("Do not ask again"),topcontents);
- extraSize = TQSize(50,0);
- }
-
- dialog->setMainWidget(topcontents);
- dialog->enableButtonSeparator(false);
- dialog->incInitialSize(extraSize);
-
- r = dialog->exec();
- if (checkbox)
- {
- checkboxReturn = checkbox->isChecked();
- }
-#endif
-
- switch(r)
- {
- case KDialogBase::Yes : result=KMessageBox::Yes ; break;
- case KDialogBase::No : result=KMessageBox::No; break;
- case KDialogBase::Cancel : result=KMessageBox::Cancel; break;
- default : break;
- }
-
- stopTickle();
-
- if (!key.isEmpty() && checkboxReturn)
- {
- KMessageBox::saveDontShowAgainYesNo(key,result);
- }
-
- return result;
-}
-
-
-int SyncAction::questionYesNoCancel(const TQString & text,
- const TQString & caption,
- const TQString & key,
- unsigned timeout,
- const TQString &yes,
- const TQString &no)
-{
- FUNCTIONSETUP;
-
- bool checkboxReturn = false;
- int r;
- KMessageBox::ButtonCode result;
-
- if (!key.isEmpty())
- {
- if (!KMessageBox::shouldBeShownYesNo(key,result))
- {
- if (result != KMessageBox::Cancel)
- {
- return result;
- }
- }
- }
-
- KDialogBase *dialog =
- new KDialogBase(caption.isNull()? i18n("Question") : caption,
- KDialogBase::Yes | KDialogBase::No | KDialogBase::Cancel,
- KDialogBase::Yes, KDialogBase::Cancel,
- fParent, "questionYesNoCancel", true, true,
- (yes.isEmpty() ? KStdGuiItem::yes() : yes),
- (no.isEmpty() ? KStdGuiItem::no() : no),
- KStdGuiItem::cancel());
-
- if ( (timeout > 0) && (deviceLink()) )
- {
- TQObject::connect(deviceLink(), TQT_SIGNAL(timeout()),
- dialog, TQT_SLOT(slotCancel()));
- startTickle(timeout);
- }
-
-#if KDE_IS_VERSION(3,3,0)
- r = KMessageBox::createKMessageBox(dialog,
- TQMessageBox::Question,
- text,
- TQStringList(),
- (key.isEmpty() ? TQString::null : i18n("&Do not ask again")),
- &checkboxReturn,
- 0);
-#else
- // The following code is taken from KDialogBase.cc,
- // part of the KDE 2.2 libraries. Copyright 2001
- // by Waldo Bastian.
- //
- //
- TQVBox *topcontents = new TQVBox(dialog);
-
- topcontents->setSpacing(KDialog::spacingHint() * 2);
- topcontents->setMargin(KDialog::marginHint() * 2);
-
- TQWidget *contents = new TQWidget(topcontents);
- TQHBoxLayout *lay = new TQHBoxLayout(contents);
-
- lay->setSpacing(KDialog::spacingHint() * 2);
-
- lay->addStretch(1);
- TQLabel *label1 = new TQLabel( contents);
- label1->setPixmap(TQMessageBox::standardIcon(TQMessageBox::Information));
- lay->add( label1 );
- TQLabel *label2 = new TQLabel( text, contents);
- label2->setMinimumSize(label2->sizeHint());
- lay->add(label2);
- lay->addStretch(1);
-
- TQSize extraSize = TQSize(50, 30);
-
- TQCheckBox *checkbox = 0L;
- if (!key.isEmpty())
- {
- checkbox = new TQCheckBox(i18n("Do not ask again"),topcontents);
- extraSize = TQSize(50,0);
- }
-
- dialog->setMainWidget(topcontents);
- dialog->enableButtonSeparator(false);
- dialog->incInitialSize(extraSize);
-
- r = dialog->exec();
- if (checkbox)
- {
- checkboxReturn = checkbox->isChecked();
- }
-#endif
-
- switch(r)
- {
- case KDialogBase::Yes : result=KMessageBox::Yes ; break;
- case KDialogBase::No : result=KMessageBox::No; break;
- case KDialogBase::Cancel : result=KMessageBox::Cancel; break;
- default : break;
- }
- stopTickle();
-
- if (!key.isEmpty() && checkboxReturn)
- {
- KMessageBox::saveDontShowAgainYesNo(key,result);
- }
-
- return result;
-}
-
diff --git a/kpilot/lib/syncAction.h b/kpilot/lib/syncAction.h
deleted file mode 100644
index d17993fbb..000000000
--- a/kpilot/lib/syncAction.h
+++ /dev/null
@@ -1,410 +0,0 @@
-#ifndef _KPILOT_SYNCACTION_H
-#define _KPILOT_SYNCACTION_H
-/* KPilot
-**
-** Copyright (C) 1998-2001 by Dan Pilone
-** Copyright (C) 2003-2004 Reinhold Kainhofer <reinhold@kainhofer.com>
-** Copyright (C) 2006 Adriaan de Groot <groot@kde.org>
-**
-*/
-
-/*
-** This program 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; either version 2.1 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 Lesser General Public License for more details.
-**
-** You should have received a copy of the GNU Lesser General Public License
-** along with this program in a file called COPYING; if not, write to
-** the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
-** MA 02110-1301, USA.
-*/
-
-/*
-** Bug reports and questions can be sent to kde-pim@kde.org
-*/
-
-#include <time.h>
-
-#include <pi-dlp.h>
-
-#include <tqobject.h>
-#include <tqstring.h>
-#include <tqstringlist.h>
-
-#include "kpilotlink.h"
-
-/** @file
-* SyncAction
-*/
-
-class TQTimer;
-class KPilotUser;
-class SyncAction;
-
-class KDE_EXPORT SyncAction : public QObject
-{
-Q_OBJECT
-
-public:
- SyncAction(KPilotLink *p,
- const char *name=0L);
- SyncAction(KPilotLink *p,
- TQWidget *visibleparent,
- const char *name=0L);
- ~SyncAction();
-
- typedef enum { Error=-1 } Status;
-
- /** A syncaction has a status, which can be expressed as an
- * integer. Subclasses are expected to define their own status
- * values as needed.
- */
- int status() const
- {
- return fActionStatus;
- }
- /** Return a human-readable representation of the status. */
- virtual TQString statusString() const;
-
-protected:
- /**
- * This function starts the actual processing done
- * by the conduit. It should return false if the
- * processing cannot be initiated, f.ex. because
- * some parameters were not set or a needed library
- * is missing. This will be reported to the user.
- * It should return true if processing is started
- * normally. If processing starts normally, it is
- * the _conduit's_ responsibility to eventually
- * emit syncDone(); if processing does not start
- * normally (ie. exec() returns false) then the
- * environment will deal with syncDone().
- */
- virtual bool exec() = 0;
-
-public slots:
- /**
- * This just calls exec() and deals with the
- * return code.
- */
- void execConduit();
-
-signals:
- void syncDone(SyncAction *);
- void logMessage(const TQString &);
- void logError(const TQString &);
- void logProgress(const TQString &,int);
-
-protected slots:
- /** This slot emits syncDone(), and does nothing else. This
- * is safe, since the method returns immediately after the
- * emit -- even if syncDone() causes the SyncAction to be deleted.
- */
- void delayedDoneSlot();
-
-protected:
- /**
- * It might not be safe to emit syncDone() from exec().
- * So instead, call delayDone() to wait for the main event
- * loop to return if you manage to do all processing
- * immediately.
- *
- * delayDone() returns true, so that return delayDone();
- * is a sensible final statement in exec().
- */
- bool delayDone();
-
-public:
- /** Public API for adding a sync log entry, see the implementation
- * in KPilotLink::addSyncLogEntry().
- * @param e Message to add to the sync log
- * @param log If @c true, also add the entry to the log in KPilot
- * @note Having messages appear on the handheld but not in KPilot
- * should be a @em very rare occurrence.
- */
- void addSyncLogEntry(const TQString &e,bool log=true)
- {
- if (deviceLink())
- {
- deviceLink()->addSyncLogEntry(e,log);
- }
- }
- /** Public API for adding a message to the log in KPilot.
- * Adds @p msg to the synclog maintained on the PC.
- */
- void addLogMessage( const TQString &msg )
- {
- emit logMessage( msg );
- }
- /** Log an error message in KPilot (the PC side of things). */
- void addLogError( const TQString &msg )
- {
- emit logError( msg );
- }
- /** Log progress in KPilot (the PC side of things). */
- void addLogProgress( const TQString &msg, int prog )
- {
- emit logProgress( msg, prog );
- }
-protected:
- /** Connection to the device. @todo make private. */
- KPilotLink *fHandle;
- int fActionStatus;
-
- /** Returns a pointer to the connection to the device. */
- inline KPilotLink *deviceLink() const
- {
- return fHandle;
- }
-
- /** Returns the file descriptor for the device link -- that is,
- * the raw handle to the OS's connection to the device. Use with care.
- * May return -1 if there is no device.
- */
- int pilotSocket() const
- {
- return deviceLink() ? deviceLink()->pilotSocket() : -1 ;
- }
-
- /** Tells the handheld device that someone is talking to it now.
- * Useful (repeatedly) to inform the user of what is going on.
- * May return < 0 on error (or if there is no device attached).
- */
- int openConduit()
- {
- return deviceLink() ? deviceLink()->openConduit() : -1;
- }
-public:
- /**
- * This class encapsulates the different sync modes that
- * can be used, and enforces a little discipline in changing
- * the mode and messing around in general. It replaces a
- * simple enum by not much more, but it makes things like
- * local test backups less likely to happen.
- *
- * Note that this could all be packed into a bitfield (5 bits needed)
- * but that makes for messy code in the end.
- */
- class SyncMode
- {
- public:
- /** Available modes for the sync. */
- enum Mode {
- eHotSync=1,
- eFullSync=2,
- eCopyPCToHH=3,
- eCopyHHToPC=4,
- eBackup=5,
- eRestore=6
- } ;
-
- /** Create a mode with the given Mode @p m and
- * the mix-ins @p test and @p local, which
- * determine whether the sync should actually change
- * anything at all (test mode) and whether the HH is
- * to be simulated by local databases.
- */
- SyncMode(Mode m, bool test=false, bool local=false);
-
- /** Create a mode by parsing the string list. This
- * is used mostly by the conduit proxies, which use
- * a string list to pass aparameters to the shared
- * library loader.
- */
- SyncMode(const TQStringList &l);
-
- /** Returns the kind of sync; this is just incomplete
- * information, since a test hot sync is very different from
- * a non-test one. */
- Mode mode() const
- {
- return fMode;
- }
-
- /** Sets a mode from an integer @p mode, if possible.
- * If the @p mode is illegal, return false and set the
- * mode to Hot Sync. As a side effect, options test and local
- * are reset to false.
- */
- bool setMode(int);
-
- /** Sets a mode from a @p mode, if possible. This leaves
- * the options unchanged, so as to reward properly-typed programming.
- */
- bool setMode(Mode m);
-
- /** Sets options. Returns false if the combination of mode
- * and the options is impossible. */
- bool setOptions(bool test, bool local)
- {
- fTest=test;
- fLocal=local;
- return true;
- }
-
- /** Shorthand to test for a specific mode enum. This disregards
- * the mixings local and test.
- */
- bool operator ==(const Mode &m) const
- {
- return mode() == m;
- }
- /** Longhand comparison. Compares two modes for the same
- * mode enum and mixins local and test.
- */
- bool operator ==(const SyncMode &m) const
- {
- return ( mode() == m.mode() ) &&
- ( isTest() == m.isTest() ) &&
- ( isLocal() == m.isLocal() );
- } ;
-
- /** Accessor for the test part of the mode. Test syncs should
- * never actually modify data anywhere.
- */
- bool isTest() const
- {
- return fTest;
- }
-
- /** Accessor for the local part of the mode. Local syncs use a
- * local database instead of one on the device link.
- */
- bool isLocal() const
- {
- return fLocal;
- }
-
- bool isFullSync() const
- {
- return ( fMode==eFullSync ) ||
- ( fMode==eCopyPCToHH) ||
- ( fMode==eCopyHHToPC) ;
- } ;
- bool isFirstSync() const
- {
- return ( fMode==eCopyHHToPC ) || ( fMode==eCopyPCToHH ) ;
- };
-
- /** Classify every mode as either a sync (two-way) or copy (one-way) mode. */
- bool isSync() const
- {
- return ( fMode==eFullSync ) ||
- ( fMode == eHotSync );
- } ;
-
- /** Classify every mode as either a sync (two-way) or copy (one-way) mode. */
- bool isCopy() const
- {
- return ( fMode==eBackup ) ||
- ( fMode==eRestore ) ||
- ( fMode==eCopyPCToHH ) ||
- ( fMode==eCopyHHToPC );
- } ;
-
- /**
- * Returns a standard name for each of the sync modes.
- */
- static TQString name(Mode);
-
- /**
- * Returns a (human readable) name for this particular mode,
- * including extra information about test and local mode.
- */
- TQString name() const;
-
- /**
- * Returns a TQStringList that, when passed to the constructor
- * of SyncMode, will re-create it. Used to pass modes into
- * shared library factories.
- */
- TQStringList list() const;
-
- private:
- Mode fMode;
- bool fTest;
- bool fLocal;
- };
-
-
- enum ConflictResolution
- {
- eUseGlobalSetting=-1,
- eAskUser=0,
- eDoNothing,
- eHHOverrides,
- ePCOverrides,
- ePreviousSyncOverrides,
- eDuplicate,
- eDelete,
- eCROffset=-1
- };
-
- /**
- * This MUST stay in sync with the combobox in
- * kpilotConfigDialog_backup.ui. If it does not, you need to
- * either change this enum or the combobox.
- */
- enum BackupFrequency
- {
- eEveryHotSync=0,
- eOnRequestOnly
- };
-
-protected:
- /**
- * Call startTickle() some time before showing a dialog to the
- * user (we're assuming a local event loop here) so that while
- * the dialog is up and the user is thinking, the pilot stays
- * awake. Afterwards, call stopTickle().
- *
- * The parameter to startTickle indicates the timeout, in
- * seconds, before signal timeout is emitted. You can connect
- * to that, again, to take down the user interface part if the
- * user isn't reacting.
- */
- void startTickle(unsigned count=0);
- void stopTickle();
-signals:
- void timeout();
-
-
-
-
-protected:
- TQWidget *fParent;
-
- /**
- * Ask a yes-no question of the user. This has a timeout so that
- * you don't wait forever for inattentive users. It's much like
- * KMessageBox::questionYesNo(), but with this extra timeout-on-
- * no-answer feature. Returns a KDialogBase::ButtonCode value - Yes,No or
- * Cancel on timeout. If there is a key set and the user indicates not to ask again,
- * the selected answer (Yes or No) is remembered for future reference.
- *
- * @p caption Message Box caption, uses "Question" if null.
- * @p key Key for the "Don't ask again" code.
- * @p timeout Timeout, in seconds.
- */
- int questionYesNo(const TQString &question ,
- const TQString &caption = TQString::null,
- const TQString &key = TQString::null,
- unsigned timeout = 20,
- const TQString &yes = TQString::null,
- const TQString &no = TQString::null );
- int questionYesNoCancel(const TQString &question ,
- const TQString &caption = TQString::null,
- const TQString &key = TQString::null,
- unsigned timeout = 20,
- const TQString &yes = TQString::null,
- const TQString &no = TQString::null ) ;
-};
-
-
-#endif